2025-12-25T09:00:11.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:00:11.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:00:11.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:00:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 8, 59, 42), 9.95, 52.56, 0.0, 14.54, 19.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:00:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 08:59:42
2025-12-25T09:00:12.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:00:12.763 [DEBUG] [Thread-8826] [transport.py] [_log()] starting thread (client mode): 0xb6b4b520
2025-12-25T09:00:12.764 [DEBUG] [Thread-8826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:00:12.785 [DEBUG] [Thread-8826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:00:12.785 [INFO] [Thread-8826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] client lang: <none>
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] server lang: <none>
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] kex follows: False
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] Compression: none
2025-12-25T09:00:12.787 [DEBUG] [Thread-8826] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:00:12.794 [DEBUG] [Thread-8826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:00:12.795 [DEBUG] [Thread-8826] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:00:12.795 [DEBUG] [Thread-8826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:00:12.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:00:12.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:00:12.795 [DEBUG] [Thread-8826] [transport.py] [_log()] userauth is OK
2025-12-25T09:00:12.795 [DEBUG] [Thread-8826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:00:12.795 [DEBUG] [Thread-8826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:00:12.795 [DEBUG] [Thread-8826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:00:12.796 [DEBUG] [Thread-8826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:00:12.804 [INFO] [Thread-8826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:00:12.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:00:13.444 [DEBUG] [Thread-8826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:00:13.444 [DEBUG] [Thread-8826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:00:13.444 [DEBUG] [Thread-8826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:00:13.485 [DEBUG] [Thread-8826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:00:13.485 [DEBUG] [Thread-8826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:00:13.487 [DEBUG] [Thread-8826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:00:13.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:00:13.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:00:13.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:00:13.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:00:13.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:00:13.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:00:13.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.291383 -999.00  +18.80  14.01     60  +11.00 1 2 1 1 1   888    0 8.01 11.81 ----- 14.0 14.0 73.8 19.9 24.9 -26.7 24.8 -22.5 23.4 -21.2 23.6 -22.0
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.291383
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:00:13.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T08:59:42', tmtdew=9.95, humidity=52.56, cloud=0.0, wind=14.54, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T06:59:35.491', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:00:13.505 [DEBUG] [Thread-8826] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:00:13.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-25T09:00:13.588 [DEBUG] [Thread-8829] [transport.py] [_log()] starting thread (client mode): 0xb6b49870
2025-12-25T09:00:13.588 [DEBUG] [Thread-8829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:00:13.602 [DEBUG] [Thread-8829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:00:13.602 [INFO] [Thread-8829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] client lang: <none>
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] server lang: <none>
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] kex follows: False
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] Compression: none
2025-12-25T09:00:13.610 [DEBUG] [Thread-8829] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:00:13.668 [DEBUG] [Thread-8829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:00:13.668 [DEBUG] [Thread-8829] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:00:13.668 [DEBUG] [Thread-8829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:00:13.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:00:13.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:00:13.732 [DEBUG] [Thread-8829] [transport.py] [_log()] userauth is OK
2025-12-25T09:00:13.732 [DEBUG] [Thread-8829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:00:13.732 [DEBUG] [Thread-8829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:00:13.732 [DEBUG] [Thread-8829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:00:13.732 [DEBUG] [Thread-8829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:00:13.752 [INFO] [Thread-8829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:00:13.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:00:13.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:00:14.590 [DEBUG] [Thread-8829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:00:14.591 [DEBUG] [Thread-8829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:00:14.638 [DEBUG] [Thread-8829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:00:14.638 [DEBUG] [Thread-8829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:00:14.647 [DEBUG] [Thread-8829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:00:14.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:00:14.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-25T09:00:14.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-25T09:00:14.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:00:14.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:00:14.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:00:14.681 [DEBUG] [Thread-8829] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:00:16.257 [DEBUG] [Thread-8831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:00:31.301 [DEBUG] [Thread-8832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:00:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:00:44.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:00:44.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-25T09:00:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 0, 14), 9.78, 53.02, 0.0, 13.08, 19.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:00:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:00:14
2025-12-25T09:00:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:00:45.703 [DEBUG] [Thread-8833] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2025-12-25T09:00:45.703 [DEBUG] [Thread-8833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:00:45.723 [DEBUG] [Thread-8833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:00:45.724 [INFO] [Thread-8833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] client lang: <none>
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] server lang: <none>
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] kex follows: False
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:00:45.728 [DEBUG] [Thread-8833] [transport.py] [_log()] Compression: none
2025-12-25T09:00:45.729 [DEBUG] [Thread-8833] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:00:45.746 [DEBUG] [Thread-8833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:00:45.746 [DEBUG] [Thread-8833] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:00:45.747 [DEBUG] [Thread-8833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:00:45.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:00:45.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:00:45.749 [DEBUG] [Thread-8833] [transport.py] [_log()] userauth is OK
2025-12-25T09:00:45.749 [DEBUG] [Thread-8833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:00:45.749 [DEBUG] [Thread-8833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:00:45.749 [DEBUG] [Thread-8833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:00:45.749 [DEBUG] [Thread-8833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:00:45.786 [INFO] [Thread-8833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:00:45.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:00:46.342 [DEBUG] [Thread-8835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:00:46.407 [DEBUG] [Thread-8833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:00:46.407 [DEBUG] [Thread-8833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:00:46.408 [DEBUG] [Thread-8833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:00:46.448 [DEBUG] [Thread-8833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:00:46.448 [DEBUG] [Thread-8833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:00:46.452 [DEBUG] [Thread-8833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:00:46.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:00:46.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:00:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:00:46.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:00:46.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:00:46.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:00:46.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:00:46.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:00:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:00:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.291730 -999.00  +18.90  10.02     60  +11.00 1 2 1 1 1   888    0 7.96 13.53 ----- 10.0 10.0 97.6 18.9 24.9 -23.4 24.9 -22.3 23.4 -21.2 23.7 -21.7
2025-12-25T09:00:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:00:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:00:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.291730
2025-12-25T09:00:46.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:00:46.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:00:46.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:00:46.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:00:46.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:00:46.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:00:14', tmtdew=9.78, humidity=53.02, cloud=0.0, wind=13.08, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:00:05.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:00:46.480 [DEBUG] [Thread-8833] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:00:46.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-25T09:00:46.573 [DEBUG] [Thread-8837] [transport.py] [_log()] starting thread (client mode): 0xb6b491b0
2025-12-25T09:00:46.573 [DEBUG] [Thread-8837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:00:46.588 [DEBUG] [Thread-8837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:00:46.588 [INFO] [Thread-8837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:00:46.596 [DEBUG] [Thread-8837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:00:46.596 [DEBUG] [Thread-8837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:00:46.596 [DEBUG] [Thread-8837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:00:46.596 [DEBUG] [Thread-8837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] client lang: <none>
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] server lang: <none>
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] kex follows: False
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:00:46.597 [DEBUG] [Thread-8837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:00:46.598 [DEBUG] [Thread-8837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:00:46.598 [DEBUG] [Thread-8837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:00:46.598 [DEBUG] [Thread-8837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:00:46.598 [DEBUG] [Thread-8837] [transport.py] [_log()] Compression: none
2025-12-25T09:00:46.598 [DEBUG] [Thread-8837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:00:46.658 [DEBUG] [Thread-8837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:00:46.658 [DEBUG] [Thread-8837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:00:46.659 [DEBUG] [Thread-8837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:00:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:00:46.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:00:46.717 [DEBUG] [Thread-8837] [transport.py] [_log()] userauth is OK
2025-12-25T09:00:46.718 [DEBUG] [Thread-8837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:00:46.718 [DEBUG] [Thread-8837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:00:46.718 [DEBUG] [Thread-8837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:00:46.718 [DEBUG] [Thread-8837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:00:46.737 [INFO] [Thread-8837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:00:46.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-25T09:00:46.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:00:47.596 [DEBUG] [Thread-8837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:00:47.596 [DEBUG] [Thread-8837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:00:47.644 [DEBUG] [Thread-8837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:00:47.644 [DEBUG] [Thread-8837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:00:47.653 [DEBUG] [Thread-8837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:00:47.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:00:47.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-25T09:00:47.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-25T09:00:47.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:00:47.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:00:47.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:00:47.684 [DEBUG] [Thread-8837] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:00:50.169 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:00:50.170 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:00:50.990 [DEBUG] [Thread-8839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:01.380 [DEBUG] [Thread-8840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:16.433 [DEBUG] [Thread-8841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:17.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:01:17.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:01:17.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-25T09:01:18.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 0, 46), 10.11, 52.1, 0.0, 11.82, 19.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:01:18.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:00:46
2025-12-25T09:01:18.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:01:18.677 [DEBUG] [Thread-8842] [transport.py] [_log()] starting thread (client mode): 0xb6bd7be0
2025-12-25T09:01:18.677 [DEBUG] [Thread-8842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:01:18.697 [DEBUG] [Thread-8842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:01:18.697 [INFO] [Thread-8842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:18.700 [DEBUG] [Thread-8842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] client lang: <none>
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] server lang: <none>
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] kex follows: False
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] Compression: none
2025-12-25T09:01:18.701 [DEBUG] [Thread-8842] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:01:18.717 [DEBUG] [Thread-8842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:01:18.717 [DEBUG] [Thread-8842] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:01:18.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:01:18.719 [DEBUG] [Thread-8842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:01:18.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:01:18.720 [DEBUG] [Thread-8842] [transport.py] [_log()] userauth is OK
2025-12-25T09:01:18.721 [DEBUG] [Thread-8842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:01:18.721 [DEBUG] [Thread-8842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:01:18.721 [DEBUG] [Thread-8842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:01:18.721 [DEBUG] [Thread-8842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:01:18.744 [INFO] [Thread-8842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:01:18.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:01:19.375 [DEBUG] [Thread-8842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:01:19.375 [DEBUG] [Thread-8842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:01:19.375 [DEBUG] [Thread-8842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:01:19.416 [DEBUG] [Thread-8842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:01:19.416 [DEBUG] [Thread-8842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:01:19.419 [DEBUG] [Thread-8842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:01:19.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:01:19.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:01:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:01:19.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:01:19.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:01:19.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:01:19.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:01:19.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:01:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:01:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.292424 -999.00  +19.30   7.88     58  +11.00 1 2 1 1 1   888    0 8.40 20.90 ----- 7.9 7.9 98.2 17.1 25.3 -22.3 25.1 -22.0 23.6 -22.0 23.9 -22.1
2025-12-25T09:01:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:01:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:01:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.292424
2025-12-25T09:01:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:01:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:01:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:01:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:01:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:01:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:00:46', tmtdew=10.11, humidity=52.1, cloud=0.0, wind=11.82, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:01:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:01:19.446 [DEBUG] [Thread-8842] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:01:19.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:01:19.539 [DEBUG] [Thread-8845] [transport.py] [_log()] starting thread (client mode): 0xb6bd7d60
2025-12-25T09:01:19.540 [DEBUG] [Thread-8845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:01:19.554 [DEBUG] [Thread-8845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:01:19.554 [INFO] [Thread-8845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] client lang: <none>
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] server lang: <none>
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] kex follows: False
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:01:19.562 [DEBUG] [Thread-8845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:01:19.563 [DEBUG] [Thread-8845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:01:19.563 [DEBUG] [Thread-8845] [transport.py] [_log()] Compression: none
2025-12-25T09:01:19.563 [DEBUG] [Thread-8845] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:01:19.620 [DEBUG] [Thread-8845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:01:19.620 [DEBUG] [Thread-8845] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:01:19.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:01:19.620 [DEBUG] [Thread-8845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:01:19.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:01:19.678 [DEBUG] [Thread-8845] [transport.py] [_log()] userauth is OK
2025-12-25T09:01:19.678 [DEBUG] [Thread-8845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:01:19.678 [DEBUG] [Thread-8845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:01:19.678 [DEBUG] [Thread-8845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:01:19.678 [DEBUG] [Thread-8845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:01:19.695 [INFO] [Thread-8845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:01:19.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:01:19.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:01:20.515 [DEBUG] [Thread-8845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:01:20.515 [DEBUG] [Thread-8845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:01:20.567 [DEBUG] [Thread-8845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:01:20.567 [DEBUG] [Thread-8845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:01:20.578 [DEBUG] [Thread-8845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:01:20.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:01:20.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-25T09:01:20.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-25T09:01:20.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:01:20.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:01:20.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:01:20.612 [DEBUG] [Thread-8845] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:01:31.463 [DEBUG] [Thread-8847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:46.512 [DEBUG] [Thread-8848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:50.309 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:50.311 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:50.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:01:50.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:01:50.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-25T09:01:51.034 [DEBUG] [Thread-8849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:01:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 1, 19), 10.11, 52.12, 0.0, 16.06, 20.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:01:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:01:19
2025-12-25T09:01:51.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:01:51.595 [DEBUG] [Thread-8850] [transport.py] [_log()] starting thread (client mode): 0xb6bd7df0
2025-12-25T09:01:51.595 [DEBUG] [Thread-8850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:01:51.616 [DEBUG] [Thread-8850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:01:51.616 [INFO] [Thread-8850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] client lang: <none>
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] server lang: <none>
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] kex follows: False
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] Compression: none
2025-12-25T09:01:51.619 [DEBUG] [Thread-8850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:01:51.635 [DEBUG] [Thread-8850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:01:51.635 [DEBUG] [Thread-8850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:01:51.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:01:51.635 [DEBUG] [Thread-8850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:01:51.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:01:51.636 [DEBUG] [Thread-8850] [transport.py] [_log()] userauth is OK
2025-12-25T09:01:51.636 [DEBUG] [Thread-8850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:01:51.636 [DEBUG] [Thread-8850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:01:51.636 [DEBUG] [Thread-8850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:01:51.636 [DEBUG] [Thread-8850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:01:51.652 [INFO] [Thread-8850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:01:51.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:01:52.298 [DEBUG] [Thread-8850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:01:52.298 [DEBUG] [Thread-8850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:01:52.298 [DEBUG] [Thread-8850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:01:52.340 [DEBUG] [Thread-8850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:01:52.340 [DEBUG] [Thread-8850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:01:52.342 [DEBUG] [Thread-8850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:01:52.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:01:52.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:01:52.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:01:52.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:01:52.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:01:52.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:01:52.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.292772 -999.00  +19.30   7.79     58  +11.00 1 2 1 1 1   888    0 8.37 23.40 ----- 7.8 7.8 119.5 12.6 25.2 -23.1 25.1 -21.9 23.6 -21.0 23.9 -22.1
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.292772
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:01:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:01:19', tmtdew=10.11, humidity=52.12, cloud=0.0, wind=16.06, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:01:35.501', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:01:52.360 [DEBUG] [Thread-8850] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:01:52.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-25T09:01:52.444 [DEBUG] [Thread-8853] [transport.py] [_log()] starting thread (client mode): 0xb6b15e40
2025-12-25T09:01:52.444 [DEBUG] [Thread-8853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:01:52.459 [DEBUG] [Thread-8853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:01:52.459 [INFO] [Thread-8853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] client lang: <none>
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] server lang: <none>
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] kex follows: False
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] Compression: none
2025-12-25T09:01:52.467 [DEBUG] [Thread-8853] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:01:52.528 [DEBUG] [Thread-8853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:01:52.529 [DEBUG] [Thread-8853] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:01:52.529 [DEBUG] [Thread-8853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:01:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:01:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:01:52.586 [DEBUG] [Thread-8853] [transport.py] [_log()] userauth is OK
2025-12-25T09:01:52.586 [DEBUG] [Thread-8853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:01:52.586 [DEBUG] [Thread-8853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:01:52.586 [DEBUG] [Thread-8853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:01:52.586 [DEBUG] [Thread-8853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:01:52.600 [INFO] [Thread-8853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:01:52.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-25T09:01:52.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:01:53.436 [DEBUG] [Thread-8853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:01:53.436 [DEBUG] [Thread-8853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:01:53.484 [DEBUG] [Thread-8853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:01:53.484 [DEBUG] [Thread-8853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:01:53.492 [DEBUG] [Thread-8853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:01:53.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:01: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-25T09:01:53.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-25T09:01:53.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:01:53.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:01:53.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:01:53.524 [DEBUG] [Thread-8853] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:02:01.547 [DEBUG] [Thread-8855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:16.599 [DEBUG] [Thread-8856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:23.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:02:23.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:02:23.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-25T09:02:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 1, 51), 10.25, 51.64, 0.0, 14.38, 19.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:02:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:01:51
2025-12-25T09:02:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:02:24.597 [DEBUG] [Thread-8857] [transport.py] [_log()] starting thread (client mode): 0xb6bd7f70
2025-12-25T09:02:24.598 [DEBUG] [Thread-8857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:02:24.618 [DEBUG] [Thread-8857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:02:24.618 [INFO] [Thread-8857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] client lang: <none>
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] server lang: <none>
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] kex follows: False
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:02:24.621 [DEBUG] [Thread-8857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:02:24.622 [DEBUG] [Thread-8857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:02:24.622 [DEBUG] [Thread-8857] [transport.py] [_log()] Compression: none
2025-12-25T09:02:24.622 [DEBUG] [Thread-8857] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:02:24.637 [DEBUG] [Thread-8857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:02:24.637 [DEBUG] [Thread-8857] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:02:24.637 [DEBUG] [Thread-8857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:02:24.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:02:24.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:02:24.638 [DEBUG] [Thread-8857] [transport.py] [_log()] userauth is OK
2025-12-25T09:02:24.638 [DEBUG] [Thread-8857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:02:24.639 [DEBUG] [Thread-8857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:02:24.639 [DEBUG] [Thread-8857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:02:24.639 [DEBUG] [Thread-8857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:02:24.651 [INFO] [Thread-8857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:02:24.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:02:25.248 [DEBUG] [Thread-8857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:02:25.248 [DEBUG] [Thread-8857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:02:25.248 [DEBUG] [Thread-8857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:02:25.290 [DEBUG] [Thread-8857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:02:25.290 [DEBUG] [Thread-8857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:02:25.291 [DEBUG] [Thread-8857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:02:25.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:02:25.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:02:25.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:02:25.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:02:25.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:02:25.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:02:25.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.293119 -999.00  +19.30  18.57     58  +11.00 1 2 1 1 1   888    0 8.62 27.53 ----- 18.6 18.6 123.8 21.7 25.5 -22.5 25.1 -22.5 23.7 -21.5 24.0 -21.9
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.293119
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:02:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:01:51', tmtdew=10.25, humidity=51.64, cloud=0.0, wind=14.38, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:02:05.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:02:25.308 [DEBUG] [Thread-8857] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:02:25.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-25T09:02:25.396 [DEBUG] [Thread-8860] [transport.py] [_log()] starting thread (client mode): 0xb6bbbdc0
2025-12-25T09:02:25.396 [DEBUG] [Thread-8860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:02:25.412 [DEBUG] [Thread-8860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:02:25.412 [INFO] [Thread-8860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] client lang: <none>
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] server lang: <none>
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] kex follows: False
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] Compression: none
2025-12-25T09:02:25.420 [DEBUG] [Thread-8860] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:02:25.480 [DEBUG] [Thread-8860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:02:25.480 [DEBUG] [Thread-8860] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:02:25.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:02:25.480 [DEBUG] [Thread-8860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:02:25.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:02:25.537 [DEBUG] [Thread-8860] [transport.py] [_log()] userauth is OK
2025-12-25T09:02:25.537 [DEBUG] [Thread-8860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:02:25.537 [DEBUG] [Thread-8860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:02:25.537 [DEBUG] [Thread-8860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:02:25.537 [DEBUG] [Thread-8860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:02:25.552 [INFO] [Thread-8860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:02:25.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-25T09:02:25.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:02:26.415 [DEBUG] [Thread-8860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:02:26.416 [DEBUG] [Thread-8860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:02:26.464 [DEBUG] [Thread-8860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:02:26.464 [DEBUG] [Thread-8860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:02:26.473 [DEBUG] [Thread-8860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:02:26.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:02:26.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-25T09:02:26.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:02:26.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:02:26.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:02:26.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:02:26.517 [DEBUG] [Thread-8860] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:02:31.635 [DEBUG] [Thread-8862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:46.685 [DEBUG] [Thread-8863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:50.454 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:50.455 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:51.068 [DEBUG] [Thread-8864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:02:56.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:02:56.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:02:56.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-25T09:02:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 2, 23), 10.17, 51.9, 0.0, 14.75, 19.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:02:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:02:23
2025-12-25T09:02:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:02:57.574 [DEBUG] [Thread-8865] [transport.py] [_log()] starting thread (client mode): 0xb6b4bd90
2025-12-25T09:02:57.574 [DEBUG] [Thread-8865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:02:57.594 [DEBUG] [Thread-8865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:02:57.594 [INFO] [Thread-8865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] client lang: <none>
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] server lang: <none>
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] kex follows: False
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] Compression: none
2025-12-25T09:02:57.597 [DEBUG] [Thread-8865] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:02:57.613 [DEBUG] [Thread-8865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:02:57.613 [DEBUG] [Thread-8865] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:02:57.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:02:57.613 [DEBUG] [Thread-8865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:02:57.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:02:57.614 [DEBUG] [Thread-8865] [transport.py] [_log()] userauth is OK
2025-12-25T09:02:57.614 [DEBUG] [Thread-8865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:02:57.614 [DEBUG] [Thread-8865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:02:57.614 [DEBUG] [Thread-8865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:02:57.614 [DEBUG] [Thread-8865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:02:57.626 [INFO] [Thread-8865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:02:57.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:02:58.242 [DEBUG] [Thread-8865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:02:58.242 [DEBUG] [Thread-8865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:02:58.243 [DEBUG] [Thread-8865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:02:58.283 [DEBUG] [Thread-8865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:02:58.283 [DEBUG] [Thread-8865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:02:58.287 [DEBUG] [Thread-8865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:02:58.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:02:58.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:02:58.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:02:58.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:02:58.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:02:58.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:02:58.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:02:58.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:02:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:02:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.293466 -999.00  +19.10  12.16     59  +11.00 1 2 1 1 1   888    0 8.51 29.01 ----- 12.2 12.2 116.8 20.7 25.2 -27.5 25.1 -22.8 23.7 -22.6 23.9 -22.4
2025-12-25T09:02:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:02:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:02:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.293466
2025-12-25T09:02:58.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:02:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:02:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:02:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:02:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:02:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:02:23', tmtdew=10.17, humidity=51.9, cloud=0.0, wind=14.75, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:02:35.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:02:58.315 [DEBUG] [Thread-8865] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:02:58.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-25T09:02:58.415 [DEBUG] [Thread-8868] [transport.py] [_log()] starting thread (client mode): 0xb6b4af50
2025-12-25T09:02:58.415 [DEBUG] [Thread-8868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:02:58.430 [DEBUG] [Thread-8868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:02:58.430 [INFO] [Thread-8868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] client lang: <none>
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] server lang: <none>
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] kex follows: False
2025-12-25T09:02:58.443 [DEBUG] [Thread-8868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:02:58.444 [DEBUG] [Thread-8868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:02:58.444 [DEBUG] [Thread-8868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:02:58.444 [DEBUG] [Thread-8868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:02:58.444 [DEBUG] [Thread-8868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:02:58.444 [DEBUG] [Thread-8868] [transport.py] [_log()] Compression: none
2025-12-25T09:02:58.444 [DEBUG] [Thread-8868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:02:58.502 [DEBUG] [Thread-8868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:02:58.503 [DEBUG] [Thread-8868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:02:58.504 [DEBUG] [Thread-8868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:02:58.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:02:58.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:02:58.562 [DEBUG] [Thread-8868] [transport.py] [_log()] userauth is OK
2025-12-25T09:02:58.562 [DEBUG] [Thread-8868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:02:58.562 [DEBUG] [Thread-8868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:02:58.562 [DEBUG] [Thread-8868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:02:58.562 [DEBUG] [Thread-8868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:02:58.582 [INFO] [Thread-8868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:02:58.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:02:58.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:02:59.434 [DEBUG] [Thread-8868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:02:59.435 [DEBUG] [Thread-8868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:02:59.483 [DEBUG] [Thread-8868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:02:59.483 [DEBUG] [Thread-8868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:02:59.493 [DEBUG] [Thread-8868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:02:59.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:02:59.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-25T09:02:59.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-25T09:02:59.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:02:59.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:02:59.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:02:59.529 [DEBUG] [Thread-8868] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:03:01.715 [DEBUG] [Thread-8870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:03:16.768 [DEBUG] [Thread-8871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:03:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:03:29.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:03:29.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-25T09:03:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 2, 55), 9.99, 52.14, 0.0, 13.9, 19.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:03:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:02:55
2025-12-25T09:03:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:03:30.539 [DEBUG] [Thread-8872] [transport.py] [_log()] starting thread (client mode): 0xb6bd40d0
2025-12-25T09:03:30.539 [DEBUG] [Thread-8872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:03:30.560 [DEBUG] [Thread-8872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:03:30.560 [INFO] [Thread-8872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:03:30.563 [DEBUG] [Thread-8872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:03:30.564 [DEBUG] [Thread-8872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] client lang: <none>
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] server lang: <none>
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] kex follows: False
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] Compression: none
2025-12-25T09:03:30.565 [DEBUG] [Thread-8872] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:03:30.584 [DEBUG] [Thread-8872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:03:30.585 [DEBUG] [Thread-8872] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:03:30.585 [DEBUG] [Thread-8872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:03:30.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:03:30.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:03:30.587 [DEBUG] [Thread-8872] [transport.py] [_log()] userauth is OK
2025-12-25T09:03:30.587 [DEBUG] [Thread-8872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:03:30.588 [DEBUG] [Thread-8872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:03:30.588 [DEBUG] [Thread-8872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:03:30.588 [DEBUG] [Thread-8872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:03:30.605 [INFO] [Thread-8872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:03:30.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:03:31.189 [DEBUG] [Thread-8872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:03:31.189 [DEBUG] [Thread-8872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:03:31.190 [DEBUG] [Thread-8872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:03:31.230 [DEBUG] [Thread-8872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:03:31.231 [DEBUG] [Thread-8872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:03:31.236 [DEBUG] [Thread-8872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:03:31.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:03:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:03:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:03:31.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:03:31.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:03:31.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:03:31.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:03:31.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:03:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:03:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.293813 -999.00  +19.20  12.90     59  +11.10 1 2 1 1 1   888    0 8.76 32.94 ----- 12.9 12.9 100.9 23.3 25.1 -25.2 25.1 -22.1 23.7 -21.0 24.0 -21.8
2025-12-25T09:03:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:03:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:03:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.293813
2025-12-25T09:03:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:03:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:03:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:03:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:03:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:03:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:02:55', tmtdew=9.99, humidity=52.14, cloud=0.0, wind=13.9, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:03:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:03:31.261 [DEBUG] [Thread-8872] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:03:31.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-25T09:03:31.358 [DEBUG] [Thread-8875] [transport.py] [_log()] starting thread (client mode): 0xb6b4bbb0
2025-12-25T09:03:31.358 [DEBUG] [Thread-8875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:03:31.374 [DEBUG] [Thread-8875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:03:31.374 [INFO] [Thread-8875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:03:31.381 [DEBUG] [Thread-8875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] client lang: <none>
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] server lang: <none>
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] kex follows: False
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:03:31.382 [DEBUG] [Thread-8875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:03:31.383 [DEBUG] [Thread-8875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:03:31.383 [DEBUG] [Thread-8875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:03:31.383 [DEBUG] [Thread-8875] [transport.py] [_log()] Compression: none
2025-12-25T09:03:31.383 [DEBUG] [Thread-8875] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:03:31.444 [DEBUG] [Thread-8875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:03:31.445 [DEBUG] [Thread-8875] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:03:31.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:03:31.446 [DEBUG] [Thread-8875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:03:31.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:03:31.506 [DEBUG] [Thread-8875] [transport.py] [_log()] userauth is OK
2025-12-25T09:03:31.506 [DEBUG] [Thread-8875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:03:31.506 [DEBUG] [Thread-8875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:03:31.506 [DEBUG] [Thread-8875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:03:31.506 [DEBUG] [Thread-8875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:03:31.527 [INFO] [Thread-8875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:03:31.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-25T09:03:31.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:03:31.800 [DEBUG] [Thread-8877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:03:32.382 [DEBUG] [Thread-8875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:03:32.382 [DEBUG] [Thread-8875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:03:32.430 [DEBUG] [Thread-8875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:03:32.430 [DEBUG] [Thread-8875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:03:32.440 [DEBUG] [Thread-8875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:03:32.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:03:32.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-25T09:03:32.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-25T09:03:32.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:03:32.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:03:32.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:03:32.480 [DEBUG] [Thread-8875] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:03:46.852 [DEBUG] [Thread-8878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:03:50.597 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:03:50.599 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:03:51.119 [DEBUG] [Thread-8879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:01.888 [DEBUG] [Thread-8880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:04:02.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:04:02.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-25T09:04:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 3, 59), 9.96, 52.77, 0.0, 16.11, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:04:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:03:59
2025-12-25T09:04:03.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:04:03.543 [DEBUG] [Thread-8881] [transport.py] [_log()] starting thread (client mode): 0xb955a560
2025-12-25T09:04:03.543 [DEBUG] [Thread-8881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:04:03.564 [DEBUG] [Thread-8881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:04:03.564 [INFO] [Thread-8881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:04:03.565 [DEBUG] [Thread-8881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] client lang: <none>
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] server lang: <none>
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] kex follows: False
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] Compression: none
2025-12-25T09:04:03.566 [DEBUG] [Thread-8881] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:04:03.573 [DEBUG] [Thread-8881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:04:03.573 [DEBUG] [Thread-8881] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:04:03.573 [DEBUG] [Thread-8881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:04:03.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:04:03.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:04:03.574 [DEBUG] [Thread-8881] [transport.py] [_log()] userauth is OK
2025-12-25T09:04:03.574 [DEBUG] [Thread-8881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:04:03.574 [DEBUG] [Thread-8881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:04:03.574 [DEBUG] [Thread-8881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:04:03.574 [DEBUG] [Thread-8881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:04:03.583 [INFO] [Thread-8881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:04:03.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:04:04.193 [DEBUG] [Thread-8881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:04:04.193 [DEBUG] [Thread-8881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:04:04.193 [DEBUG] [Thread-8881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:04:04.233 [DEBUG] [Thread-8881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:04:04.234 [DEBUG] [Thread-8881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:04:04.236 [DEBUG] [Thread-8881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:04:04.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:04:04.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:04:04.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:04:04.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:04:04.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:04:04.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:04:04.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.294161 -999.00  +19.30  15.40     59  +11.10 1 2 1 1 1   888    0 8.92 37.96 ----- 15.4 15.4 114.0 17.7 25.2 -25.7 25.2 -22.0 23.9 -20.7 24.1 -21.9
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.294161
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:04:04.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:03:59', tmtdew=9.96, humidity=52.77, cloud=0.0, wind=16.11, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:03:35.510', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:04:04.255 [DEBUG] [Thread-8881] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:04:04.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-25T09:04:04.339 [DEBUG] [Thread-8884] [transport.py] [_log()] starting thread (client mode): 0xb955bb80
2025-12-25T09:04:04.339 [DEBUG] [Thread-8884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:04:04.353 [DEBUG] [Thread-8884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:04:04.353 [INFO] [Thread-8884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] client lang: <none>
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] server lang: <none>
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] kex follows: False
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] Compression: none
2025-12-25T09:04:04.361 [DEBUG] [Thread-8884] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:04:04.420 [DEBUG] [Thread-8884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:04:04.421 [DEBUG] [Thread-8884] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:04:04.421 [DEBUG] [Thread-8884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:04:04.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:04:04.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:04:04.477 [DEBUG] [Thread-8884] [transport.py] [_log()] userauth is OK
2025-12-25T09:04:04.477 [DEBUG] [Thread-8884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:04:04.478 [DEBUG] [Thread-8884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:04:04.478 [DEBUG] [Thread-8884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:04:04.478 [DEBUG] [Thread-8884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:04:04.492 [INFO] [Thread-8884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:04:04.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-25T09:04:04.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:04:05.332 [DEBUG] [Thread-8884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:04:05.333 [DEBUG] [Thread-8884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:04:05.383 [DEBUG] [Thread-8884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:04:05.384 [DEBUG] [Thread-8884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:04:05.392 [DEBUG] [Thread-8884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:04:05.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:04:05.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-25T09:04:05.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:04:05.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:04:05.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:04:05.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:04:05.423 [DEBUG] [Thread-8884] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:04:16.921 [DEBUG] [Thread-8886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:31.974 [DEBUG] [Thread-8887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:04:35.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:04:35.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-25T09:04:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 4, 31), 10.03, 52.57, 0.0, 15.85, 19.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:04:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:04:31
2025-12-25T09:04:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:04:36.414 [DEBUG] [Thread-8888] [transport.py] [_log()] starting thread (client mode): 0xb6bd7c70
2025-12-25T09:04:36.414 [DEBUG] [Thread-8888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:04:36.429 [DEBUG] [Thread-8888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:04:36.429 [INFO] [Thread-8888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:04:36.430 [DEBUG] [Thread-8888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:04:36.430 [DEBUG] [Thread-8888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] client lang: <none>
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] server lang: <none>
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] kex follows: False
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] Compression: none
2025-12-25T09:04:36.431 [DEBUG] [Thread-8888] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:04:36.440 [DEBUG] [Thread-8888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:04:36.441 [DEBUG] [Thread-8888] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:04:36.441 [DEBUG] [Thread-8888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:04:36.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:04:36.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:04:36.443 [DEBUG] [Thread-8888] [transport.py] [_log()] userauth is OK
2025-12-25T09:04:36.443 [DEBUG] [Thread-8888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:04:36.443 [DEBUG] [Thread-8888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:04:36.443 [DEBUG] [Thread-8888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:04:36.444 [DEBUG] [Thread-8888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:04:36.469 [INFO] [Thread-8888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:04:36.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:04:37.091 [DEBUG] [Thread-8888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:04:37.092 [DEBUG] [Thread-8888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:04:37.092 [DEBUG] [Thread-8888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:04:37.133 [DEBUG] [Thread-8888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:04:37.133 [DEBUG] [Thread-8888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:04:37.137 [DEBUG] [Thread-8888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:04:37.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:04:37.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:04:37.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:04:37.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:04:37.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:04:37.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:04:37.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:04:37.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:04:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:04:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.294508 -999.00  +19.30   9.58     59  +11.10 1 2 1 1 1   888    0 9.02 40.61 ----- 9.6 9.6 94.7 20.1 25.4 -26.4 25.2 -23.2 23.7 -22.1 24.1 -22.9
2025-12-25T09:04:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:04:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:04:37.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.294508
2025-12-25T09:04:37.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:04:37.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:04:37.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:04:37.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:04:37.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:04:37.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:04:31', tmtdew=10.03, humidity=52.57, cloud=0.0, wind=15.85, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:04:05.491', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:04:37.154 [DEBUG] [Thread-8888] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:04:37.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-25T09:04:37.250 [DEBUG] [Thread-8891] [transport.py] [_log()] starting thread (client mode): 0xb955aaa0
2025-12-25T09:04:37.250 [DEBUG] [Thread-8891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:04:37.269 [DEBUG] [Thread-8891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:04:37.269 [INFO] [Thread-8891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:04:37.277 [DEBUG] [Thread-8891] [transport.py] [_log()] client lang: <none>
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] server lang: <none>
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] kex follows: False
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] Compression: none
2025-12-25T09:04:37.278 [DEBUG] [Thread-8891] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:04:37.335 [DEBUG] [Thread-8891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:04:37.336 [DEBUG] [Thread-8891] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:04:37.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:04:37.337 [DEBUG] [Thread-8891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:04:37.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:04:37.395 [DEBUG] [Thread-8891] [transport.py] [_log()] userauth is OK
2025-12-25T09:04:37.395 [DEBUG] [Thread-8891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:04:37.395 [DEBUG] [Thread-8891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:04:37.395 [DEBUG] [Thread-8891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:04:37.396 [DEBUG] [Thread-8891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:04:37.414 [INFO] [Thread-8891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:04:37.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-25T09:04:37.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:04:38.254 [DEBUG] [Thread-8891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:04:38.254 [DEBUG] [Thread-8891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:04:38.302 [DEBUG] [Thread-8891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:04:38.302 [DEBUG] [Thread-8891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:04:38.311 [DEBUG] [Thread-8891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:04:38.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:04:38.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-25T09:04:38.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:04:38.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:04:38.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:04:38.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:04:38.353 [DEBUG] [Thread-8891] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:04:47.001 [DEBUG] [Thread-8893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:50.738 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:50.739 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:04:51.174 [DEBUG] [Thread-8894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:02.055 [DEBUG] [Thread-8895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:05:08.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:05:08.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-25T09:05:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 5, 3), 10.04, 52.54, 0.0, 18.05, 19.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:05:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:05:03
2025-12-25T09:05:09.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:05:09.365 [DEBUG] [Thread-8896] [transport.py] [_log()] starting thread (client mode): 0xb6b51330
2025-12-25T09:05:09.366 [DEBUG] [Thread-8896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:05:09.379 [DEBUG] [Thread-8896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:05:09.380 [INFO] [Thread-8896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:05:09.381 [DEBUG] [Thread-8896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] client lang: <none>
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] server lang: <none>
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] kex follows: False
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] Compression: none
2025-12-25T09:05:09.382 [DEBUG] [Thread-8896] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:05:09.394 [DEBUG] [Thread-8896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:05:09.394 [DEBUG] [Thread-8896] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:05:09.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:05:09.395 [DEBUG] [Thread-8896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:05:09.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:05:09.397 [DEBUG] [Thread-8896] [transport.py] [_log()] userauth is OK
2025-12-25T09:05:09.397 [DEBUG] [Thread-8896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:05:09.398 [DEBUG] [Thread-8896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:05:09.398 [DEBUG] [Thread-8896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:05:09.398 [DEBUG] [Thread-8896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:05:09.425 [INFO] [Thread-8896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:05:09.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:05:10.013 [DEBUG] [Thread-8896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:05:10.013 [DEBUG] [Thread-8896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:05:10.014 [DEBUG] [Thread-8896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:05:10.054 [DEBUG] [Thread-8896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:05:10.054 [DEBUG] [Thread-8896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:05:10.057 [DEBUG] [Thread-8896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:05:10.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:05:10.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:05:10.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:05:10.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:05:10.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:05:10.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:05:10.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:05:10.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:05:10.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:05:10.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.295202 -999.00  +19.30  11.58     59  +11.10 1 2 1 1 1   888    0 9.34 47.71 ----- 11.6 11.6 81.1 18.1 25.4 -23.5 25.3 -23.1 23.9 -21.3 24.1 -22.3
2025-12-25T09:05:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:05:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:05:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.295202
2025-12-25T09:05:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:05:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:05:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:05:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:05:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:05:10.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:05:03', tmtdew=10.04, humidity=52.54, cloud=0.0, wind=18.05, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:05:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:05:10.082 [DEBUG] [Thread-8896] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:05:10.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-25T09:05:10.171 [DEBUG] [Thread-8899] [transport.py] [_log()] starting thread (client mode): 0xb6b23760
2025-12-25T09:05:10.171 [DEBUG] [Thread-8899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:05:10.186 [DEBUG] [Thread-8899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:05:10.186 [INFO] [Thread-8899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] client lang: <none>
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] server lang: <none>
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] kex follows: False
2025-12-25T09:05:10.194 [DEBUG] [Thread-8899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:05:10.195 [DEBUG] [Thread-8899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:05:10.195 [DEBUG] [Thread-8899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:05:10.195 [DEBUG] [Thread-8899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:05:10.195 [DEBUG] [Thread-8899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:05:10.195 [DEBUG] [Thread-8899] [transport.py] [_log()] Compression: none
2025-12-25T09:05:10.195 [DEBUG] [Thread-8899] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:05:10.254 [DEBUG] [Thread-8899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:05:10.254 [DEBUG] [Thread-8899] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:05:10.255 [DEBUG] [Thread-8899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:05:10.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:05:10.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:05:10.310 [DEBUG] [Thread-8899] [transport.py] [_log()] userauth is OK
2025-12-25T09:05:10.311 [DEBUG] [Thread-8899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:05:10.311 [DEBUG] [Thread-8899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:05:10.311 [DEBUG] [Thread-8899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:05:10.311 [DEBUG] [Thread-8899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:05:10.330 [INFO] [Thread-8899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:05:10.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-25T09:05:10.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:05:11.172 [DEBUG] [Thread-8899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:05:11.172 [DEBUG] [Thread-8899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:05:11.220 [DEBUG] [Thread-8899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:05:11.220 [DEBUG] [Thread-8899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:05:11.229 [DEBUG] [Thread-8899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:05:11.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:05:11.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-25T09:05:11.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:05:11.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:05:11.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:05:11.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:05:11.266 [DEBUG] [Thread-8899] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:05:17.091 [DEBUG] [Thread-8901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:32.141 [DEBUG] [Thread-8902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:05:41.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:05:41.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-25T09:05:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 5, 35), 9.78, 53.27, 0.0, 19.14, 19.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:05:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:05:35
2025-12-25T09:05:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:05:42.250 [DEBUG] [Thread-8903] [transport.py] [_log()] starting thread (client mode): 0xb6b4ac80
2025-12-25T09:05:42.250 [DEBUG] [Thread-8903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:05:42.270 [DEBUG] [Thread-8903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:05:42.270 [INFO] [Thread-8903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] client lang: <none>
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] server lang: <none>
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] kex follows: False
2025-12-25T09:05:42.272 [DEBUG] [Thread-8903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:05:42.273 [DEBUG] [Thread-8903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:05:42.273 [DEBUG] [Thread-8903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:05:42.273 [DEBUG] [Thread-8903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:05:42.273 [DEBUG] [Thread-8903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:05:42.273 [DEBUG] [Thread-8903] [transport.py] [_log()] Compression: none
2025-12-25T09:05:42.273 [DEBUG] [Thread-8903] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:05:42.293 [DEBUG] [Thread-8903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:05:42.293 [DEBUG] [Thread-8903] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:05:42.294 [DEBUG] [Thread-8903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:05:42.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:05:42.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:05:42.297 [DEBUG] [Thread-8903] [transport.py] [_log()] userauth is OK
2025-12-25T09:05:42.297 [DEBUG] [Thread-8903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:05:42.297 [DEBUG] [Thread-8903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:05:42.297 [DEBUG] [Thread-8903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:05:42.297 [DEBUG] [Thread-8903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:05:42.320 [INFO] [Thread-8903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:05:42.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:05:43.078 [DEBUG] [Thread-8903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:05:43.079 [DEBUG] [Thread-8903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:05:43.079 [DEBUG] [Thread-8903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:05:43.120 [DEBUG] [Thread-8903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:05:43.120 [DEBUG] [Thread-8903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:05:43.123 [DEBUG] [Thread-8903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:05:43.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:05:43.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:05:43.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:05:43.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:05:43.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:05:43.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:05:43.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:05:43.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:05:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:05:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.295202 -999.00  +19.30  11.58     59  +11.10 1 2 1 1 1   888    0 9.34 47.71 ----- 11.6 11.6 81.1 18.1 25.4 -23.5 25.3 -23.1 23.9 -21.3 24.1 -22.3
2025-12-25T09:05:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:05:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:05:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.295202
2025-12-25T09:05:43.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:05:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:05:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:05:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:05:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:05:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:05:35', tmtdew=9.78, humidity=53.27, cloud=0.0, wind=19.14, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:05:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:05:43.150 [DEBUG] [Thread-8903] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:05:43.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-25T09:05:43.238 [DEBUG] [Thread-8906] [transport.py] [_log()] starting thread (client mode): 0xb6b21ab0
2025-12-25T09:05:43.239 [DEBUG] [Thread-8906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:05:43.254 [DEBUG] [Thread-8906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:05:43.254 [INFO] [Thread-8906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:05:43.262 [DEBUG] [Thread-8906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:05:43.262 [DEBUG] [Thread-8906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:05:43.262 [DEBUG] [Thread-8906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:05:43.262 [DEBUG] [Thread-8906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] client lang: <none>
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] server lang: <none>
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] kex follows: False
2025-12-25T09:05:43.263 [DEBUG] [Thread-8906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:05:43.264 [DEBUG] [Thread-8906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:05:43.264 [DEBUG] [Thread-8906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:05:43.264 [DEBUG] [Thread-8906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:05:43.264 [DEBUG] [Thread-8906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:05:43.264 [DEBUG] [Thread-8906] [transport.py] [_log()] Compression: none
2025-12-25T09:05:43.264 [DEBUG] [Thread-8906] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:05:43.327 [DEBUG] [Thread-8906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:05:43.327 [DEBUG] [Thread-8906] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:05:43.328 [DEBUG] [Thread-8906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:05:43.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:05:43.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:05:43.386 [DEBUG] [Thread-8906] [transport.py] [_log()] userauth is OK
2025-12-25T09:05:43.387 [DEBUG] [Thread-8906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:05:43.387 [DEBUG] [Thread-8906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:05:43.387 [DEBUG] [Thread-8906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:05:43.387 [DEBUG] [Thread-8906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:05:43.406 [INFO] [Thread-8906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:05:43.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-25T09:05:43.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:05:44.237 [DEBUG] [Thread-8906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:05:44.238 [DEBUG] [Thread-8906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:05:44.286 [DEBUG] [Thread-8906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:05:44.286 [DEBUG] [Thread-8906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:05:44.300 [DEBUG] [Thread-8906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:05:44.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:05:44.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-25T09:05:44.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-25T09:05:44.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:05:44.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:05:44.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:05:44.336 [DEBUG] [Thread-8906] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:05:47.175 [DEBUG] [Thread-8908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:50.885 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:50.886 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:05:51.236 [DEBUG] [Thread-8909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:02.220 [DEBUG] [Thread-8910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:14.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:06:14.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:06:14.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-25T09:06:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 6, 7), 10.0, 52.57, 0.0, 20.2, 19.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:06:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:06:07
2025-12-25T09:06:15.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:06:15.337 [DEBUG] [Thread-8911] [transport.py] [_log()] starting thread (client mode): 0xb6b4a380
2025-12-25T09:06:15.337 [DEBUG] [Thread-8911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:06:15.350 [DEBUG] [Thread-8911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:06:15.350 [INFO] [Thread-8911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] client lang: <none>
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] server lang: <none>
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] kex follows: False
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:06:15.354 [DEBUG] [Thread-8911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:06:15.355 [DEBUG] [Thread-8911] [transport.py] [_log()] Compression: none
2025-12-25T09:06:15.355 [DEBUG] [Thread-8911] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:06:15.373 [DEBUG] [Thread-8911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:06:15.374 [DEBUG] [Thread-8911] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:06:15.375 [DEBUG] [Thread-8911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:06:15.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:06:15.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:06:15.377 [DEBUG] [Thread-8911] [transport.py] [_log()] userauth is OK
2025-12-25T09:06:15.377 [DEBUG] [Thread-8911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:06:15.378 [DEBUG] [Thread-8911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:06:15.378 [DEBUG] [Thread-8911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:06:15.378 [DEBUG] [Thread-8911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:06:15.416 [INFO] [Thread-8911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:06:15.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:06:15.984 [DEBUG] [Thread-8911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:06:15.984 [DEBUG] [Thread-8911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:06:15.984 [DEBUG] [Thread-8911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:06:16.025 [DEBUG] [Thread-8911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:06:16.025 [DEBUG] [Thread-8911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:06:16.028 [DEBUG] [Thread-8911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:06:16.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:06:16.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:06:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:06:16.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:06:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:06:16.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:06:16.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:06:16.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:06:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:06:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.295549 -999.00  +19.40  17.80     59  +11.20 1 2 1 1 1   888    0 9.24 49.05 ----- 17.8 17.8 105.6 23.4 25.6 -24.0 25.4 -22.4 24.0 -21.6 24.2 -22.5
2025-12-25T09:06:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:06:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:06:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.295549
2025-12-25T09:06:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:06:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:06:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:06:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:06:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:06:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:06:07', tmtdew=10.0, humidity=52.57, cloud=0.0, wind=20.2, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:05:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:06:16.051 [DEBUG] [Thread-8911] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:06:16.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-25T09:06:16.144 [DEBUG] [Thread-8914] [transport.py] [_log()] starting thread (client mode): 0xb6bd7eb0
2025-12-25T09:06:16.145 [DEBUG] [Thread-8914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:06:16.166 [DEBUG] [Thread-8914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:06:16.167 [INFO] [Thread-8914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:06:16.174 [DEBUG] [Thread-8914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:06:16.174 [DEBUG] [Thread-8914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:06:16.174 [DEBUG] [Thread-8914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:06:16.174 [DEBUG] [Thread-8914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] client lang: <none>
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] server lang: <none>
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] kex follows: False
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] Compression: none
2025-12-25T09:06:16.175 [DEBUG] [Thread-8914] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:06:16.235 [DEBUG] [Thread-8914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:06:16.236 [DEBUG] [Thread-8914] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:06:16.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:06:16.237 [DEBUG] [Thread-8914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:06:16.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:06:16.295 [DEBUG] [Thread-8914] [transport.py] [_log()] userauth is OK
2025-12-25T09:06:16.295 [DEBUG] [Thread-8914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:06:16.295 [DEBUG] [Thread-8914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:06:16.296 [DEBUG] [Thread-8914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:06:16.296 [DEBUG] [Thread-8914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:06:16.315 [INFO] [Thread-8914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:06:16.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-25T09:06:16.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:06:17.229 [DEBUG] [Thread-8914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:06:17.230 [DEBUG] [Thread-8914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:06:17.250 [DEBUG] [Thread-8916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:17.277 [DEBUG] [Thread-8914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:06:17.277 [DEBUG] [Thread-8914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:06:17.286 [DEBUG] [Thread-8914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:06:17.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:06:17.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-25T09:06:17.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:06:17.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:06:17.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:06:17.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:06:17.320 [DEBUG] [Thread-8914] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:06:32.302 [DEBUG] [Thread-8917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:06:47.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:06: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-25T09:06:47.335 [DEBUG] [Thread-8918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:48.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 6, 39), 10.32, 51.32, 0.0, 17.12, 20.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:06:48.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:06:39
2025-12-25T09:06:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:06:48.334 [DEBUG] [Thread-8919] [transport.py] [_log()] starting thread (client mode): 0xb6b50490
2025-12-25T09:06:48.334 [DEBUG] [Thread-8919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:06:48.354 [DEBUG] [Thread-8919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:06:48.354 [INFO] [Thread-8919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:06:48.357 [DEBUG] [Thread-8919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] client lang: <none>
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] server lang: <none>
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] kex follows: False
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] Compression: none
2025-12-25T09:06:48.358 [DEBUG] [Thread-8919] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:06:48.377 [DEBUG] [Thread-8919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:06:48.377 [DEBUG] [Thread-8919] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:06:48.378 [DEBUG] [Thread-8919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:06:48.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:06:48.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:06:48.380 [DEBUG] [Thread-8919] [transport.py] [_log()] userauth is OK
2025-12-25T09:06:48.380 [DEBUG] [Thread-8919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:06:48.380 [DEBUG] [Thread-8919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:06:48.380 [DEBUG] [Thread-8919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:06:48.381 [DEBUG] [Thread-8919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:06:48.399 [INFO] [Thread-8919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:06:48.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:06:49.210 [DEBUG] [Thread-8919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:06:49.210 [DEBUG] [Thread-8919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:06:49.210 [DEBUG] [Thread-8919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:06:49.251 [DEBUG] [Thread-8919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:06:49.251 [DEBUG] [Thread-8919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:06:49.254 [DEBUG] [Thread-8919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:06:49.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:06:49.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:06:49.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:06:49.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:06:49.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:06:49.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:06:49.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:06:49.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:06:49.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:06:49.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.295897 -999.00  +19.60  23.26     58  +11.20 1 2 1 1 1   888    0 9.03 42.74 ----- 23.3 23.3 120.2 28.1 25.5 -25.1 25.4 -22.6 24.1 -21.2 24.2 -22.0
2025-12-25T09:06:49.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:06:49.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:06:49.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.295897
2025-12-25T09:06:49.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:06:49.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:06:49.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:06:49.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:06:49.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:06:49.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:06:39', tmtdew=10.32, humidity=51.32, cloud=0.0, wind=17.12, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:06:05.501', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:06:49.281 [DEBUG] [Thread-8919] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:06:49.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-25T09:06:49.367 [DEBUG] [Thread-8922] [transport.py] [_log()] starting thread (client mode): 0xb6b62cb0
2025-12-25T09:06:49.367 [DEBUG] [Thread-8922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:06:49.381 [DEBUG] [Thread-8922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:06:49.382 [INFO] [Thread-8922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:06:49.389 [DEBUG] [Thread-8922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:06:49.389 [DEBUG] [Thread-8922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] client lang: <none>
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] server lang: <none>
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] kex follows: False
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] Compression: none
2025-12-25T09:06:49.390 [DEBUG] [Thread-8922] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:06:49.451 [DEBUG] [Thread-8922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:06:49.451 [DEBUG] [Thread-8922] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:06:49.452 [DEBUG] [Thread-8922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:06:49.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:06:49.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:06:49.506 [DEBUG] [Thread-8922] [transport.py] [_log()] userauth is OK
2025-12-25T09:06:49.507 [DEBUG] [Thread-8922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:06:49.507 [DEBUG] [Thread-8922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:06:49.507 [DEBUG] [Thread-8922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:06:49.507 [DEBUG] [Thread-8922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:06:49.526 [INFO] [Thread-8922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:06:49.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-25T09:06:49.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:06:50.340 [DEBUG] [Thread-8922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:06:50.340 [DEBUG] [Thread-8922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:06:50.388 [DEBUG] [Thread-8922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:06:50.388 [DEBUG] [Thread-8922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:06:50.398 [DEBUG] [Thread-8922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:06:50.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:06:50.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-25T09:06: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-25T09:06:50.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:06:50.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:06:50.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:06:50.434 [DEBUG] [Thread-8922] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:06:51.025 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:51.026 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:06:51.293 [DEBUG] [Thread-8924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:02.375 [DEBUG] [Thread-8925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:17.433 [DEBUG] [Thread-8926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:07:20.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:07: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-25T09:07:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 7, 12), 10.42, 51.04, 0.0, 17.47, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:07:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:07:12
2025-12-25T09:07:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:07:21.466 [DEBUG] [Thread-8927] [transport.py] [_log()] starting thread (client mode): 0xb6b62c20
2025-12-25T09:07:21.467 [DEBUG] [Thread-8927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:07:21.488 [DEBUG] [Thread-8927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:07:21.488 [INFO] [Thread-8927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:07:21.491 [DEBUG] [Thread-8927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:07:21.491 [DEBUG] [Thread-8927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:07:21.491 [DEBUG] [Thread-8927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:07:21.491 [DEBUG] [Thread-8927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:21.491 [DEBUG] [Thread-8927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] client lang: <none>
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] server lang: <none>
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] kex follows: False
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] Compression: none
2025-12-25T09:07:21.492 [DEBUG] [Thread-8927] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:07:21.507 [DEBUG] [Thread-8927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:07:21.507 [DEBUG] [Thread-8927] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:07:21.507 [DEBUG] [Thread-8927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:07:21.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:07:21.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:07:21.509 [DEBUG] [Thread-8927] [transport.py] [_log()] userauth is OK
2025-12-25T09:07:21.509 [DEBUG] [Thread-8927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:07:21.509 [DEBUG] [Thread-8927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:07:21.509 [DEBUG] [Thread-8927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:07:21.509 [DEBUG] [Thread-8927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:07:21.524 [INFO] [Thread-8927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:07:21.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:07:22.167 [DEBUG] [Thread-8927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:07:22.167 [DEBUG] [Thread-8927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:07:22.167 [DEBUG] [Thread-8927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:07:22.207 [DEBUG] [Thread-8927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:07:22.207 [DEBUG] [Thread-8927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:07:22.210 [DEBUG] [Thread-8927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:07:22.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:07:22.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:07:22.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:07:22.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:07:22.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:07:22.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:07:22.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.296244 -999.00  +19.30  15.55     58  +11.00 1 2 1 1 1   888    0 9.10 46.73 ----- 15.6 15.6 117.2 24.4 25.4 -23.0 25.4 -23.3 24.0 -22.1 24.2 -23.5
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.296244
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:07:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:07:12', tmtdew=10.42, humidity=51.04, cloud=0.0, wind=17.47, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:06:35.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:07:22.229 [DEBUG] [Thread-8927] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:07: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-25T09:07:22.314 [DEBUG] [Thread-8930] [transport.py] [_log()] starting thread (client mode): 0xb6b22470
2025-12-25T09:07:22.314 [DEBUG] [Thread-8930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:07:22.330 [DEBUG] [Thread-8930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:07:22.330 [INFO] [Thread-8930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] client lang: <none>
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] server lang: <none>
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] kex follows: False
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:07:22.337 [DEBUG] [Thread-8930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:07:22.338 [DEBUG] [Thread-8930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:07:22.338 [DEBUG] [Thread-8930] [transport.py] [_log()] Compression: none
2025-12-25T09:07:22.338 [DEBUG] [Thread-8930] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:07:22.394 [DEBUG] [Thread-8930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:07:22.394 [DEBUG] [Thread-8930] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:07:22.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:07:22.395 [DEBUG] [Thread-8930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:07:22.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:07:22.454 [DEBUG] [Thread-8930] [transport.py] [_log()] userauth is OK
2025-12-25T09:07:22.454 [DEBUG] [Thread-8930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:07:22.454 [DEBUG] [Thread-8930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:07:22.454 [DEBUG] [Thread-8930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:07:22.454 [DEBUG] [Thread-8930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:07:22.472 [INFO] [Thread-8930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:07:22.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:07:22.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:07:23.304 [DEBUG] [Thread-8930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:07:23.304 [DEBUG] [Thread-8930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:07:23.352 [DEBUG] [Thread-8930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:07:23.352 [DEBUG] [Thread-8930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:07:23.361 [DEBUG] [Thread-8930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:07:23.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:07:23.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-25T09:07:23.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:07:23.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:07:23.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:07:23.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:07:23.402 [DEBUG] [Thread-8930] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:07:32.467 [DEBUG] [Thread-8932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:47.525 [DEBUG] [Thread-8933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:51.163 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:51.165 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:51.348 [DEBUG] [Thread-8934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:07:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:07:53.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:07:53.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-25T09:07:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 7, 45), 10.16, 52.08, 0.0, 15.84, 19.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:07:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:07:45
2025-12-25T09:07:54.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:07:54.410 [DEBUG] [Thread-8935] [transport.py] [_log()] starting thread (client mode): 0xb6b53a00
2025-12-25T09:07:54.410 [DEBUG] [Thread-8935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:07:54.431 [DEBUG] [Thread-8935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:07:54.431 [INFO] [Thread-8935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] client lang: <none>
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] server lang: <none>
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] kex follows: False
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:07:54.433 [DEBUG] [Thread-8935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:07:54.434 [DEBUG] [Thread-8935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:07:54.434 [DEBUG] [Thread-8935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:07:54.434 [DEBUG] [Thread-8935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:07:54.434 [DEBUG] [Thread-8935] [transport.py] [_log()] Compression: none
2025-12-25T09:07:54.434 [DEBUG] [Thread-8935] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:07:54.451 [DEBUG] [Thread-8935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:07:54.452 [DEBUG] [Thread-8935] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:07:54.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:07:54.453 [DEBUG] [Thread-8935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:07:54.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:07:54.455 [DEBUG] [Thread-8935] [transport.py] [_log()] userauth is OK
2025-12-25T09:07:54.455 [DEBUG] [Thread-8935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:07:54.455 [DEBUG] [Thread-8935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:07:54.455 [DEBUG] [Thread-8935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:07:54.455 [DEBUG] [Thread-8935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:07:54.479 [INFO] [Thread-8935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:07:54.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:07:55.303 [DEBUG] [Thread-8935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:07:55.303 [DEBUG] [Thread-8935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:07:55.303 [DEBUG] [Thread-8935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:07:55.344 [DEBUG] [Thread-8935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:07:55.344 [DEBUG] [Thread-8935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:07:55.347 [DEBUG] [Thread-8935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:07:55.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:07:55.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:07:55.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:07:55.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:07:55.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:07:55.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:07:55.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.296591 -999.00  +19.10  13.08     59  +11.00 1 2 1 1 1   888    0 9.51 50.27 ----- 13.1 13.1 107.0 20.2 25.4 -24.9 25.3 -23.1 24.0 -21.7 24.2 -22.8
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.296591
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:07:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:07:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:07:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:07:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:07:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:07:45', tmtdew=10.16, humidity=52.08, cloud=0.0, wind=15.84, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:07:05.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:07:55.367 [DEBUG] [Thread-8935] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:07:55.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-25T09:07:55.459 [DEBUG] [Thread-8938] [transport.py] [_log()] starting thread (client mode): 0xb6b22470
2025-12-25T09:07:55.460 [DEBUG] [Thread-8938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:07:55.475 [DEBUG] [Thread-8938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:07:55.475 [INFO] [Thread-8938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] client lang: <none>
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] server lang: <none>
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] kex follows: False
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] Compression: none
2025-12-25T09:07:55.483 [DEBUG] [Thread-8938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:07:55.542 [DEBUG] [Thread-8938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:07:55.542 [DEBUG] [Thread-8938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:07:55.542 [DEBUG] [Thread-8938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:07:55.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:07:55.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:07:55.602 [DEBUG] [Thread-8938] [transport.py] [_log()] userauth is OK
2025-12-25T09:07:55.602 [DEBUG] [Thread-8938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:07:55.602 [DEBUG] [Thread-8938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:07:55.602 [DEBUG] [Thread-8938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:07:55.602 [DEBUG] [Thread-8938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:07:55.616 [INFO] [Thread-8938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:07:55.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-25T09:07:55.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:07:56.472 [DEBUG] [Thread-8938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:07:56.472 [DEBUG] [Thread-8938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:07:56.519 [DEBUG] [Thread-8938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:07:56.519 [DEBUG] [Thread-8938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:07:56.527 [DEBUG] [Thread-8938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:07:56.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:07:56.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-25T09:07:56.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-25T09:07:56.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:07:56.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:07:56.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:07:56.563 [DEBUG] [Thread-8938] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:08:02.553 [DEBUG] [Thread-8940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:17.610 [DEBUG] [Thread-8941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:26.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:08:26.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:08:26.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-25T09:08:27.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 8, 16), 10.12, 52.19, 0.0, 16.07, 19.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:08:27.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:08:16
2025-12-25T09:08:27.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:08:27.562 [DEBUG] [Thread-8942] [transport.py] [_log()] starting thread (client mode): 0xb6b4ac80
2025-12-25T09:08:27.562 [DEBUG] [Thread-8942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:08:27.582 [DEBUG] [Thread-8942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:08:27.582 [INFO] [Thread-8942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:08:27.585 [DEBUG] [Thread-8942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] client lang: <none>
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] server lang: <none>
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] kex follows: False
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:08:27.586 [DEBUG] [Thread-8942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:08:27.587 [DEBUG] [Thread-8942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:08:27.587 [DEBUG] [Thread-8942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:08:27.587 [DEBUG] [Thread-8942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:08:27.587 [DEBUG] [Thread-8942] [transport.py] [_log()] Compression: none
2025-12-25T09:08:27.587 [DEBUG] [Thread-8942] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:08:27.606 [DEBUG] [Thread-8942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:08:27.607 [DEBUG] [Thread-8942] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:08:27.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:08:27.609 [DEBUG] [Thread-8942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:08:27.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:08:27.611 [DEBUG] [Thread-8942] [transport.py] [_log()] userauth is OK
2025-12-25T09:08:27.612 [DEBUG] [Thread-8942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:08:27.612 [DEBUG] [Thread-8942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:08:27.612 [DEBUG] [Thread-8942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:08:27.612 [DEBUG] [Thread-8942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:08:27.639 [INFO] [Thread-8942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:08:27.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:08:28.260 [DEBUG] [Thread-8942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:08:28.260 [DEBUG] [Thread-8942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:08:28.261 [DEBUG] [Thread-8942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:08:28.301 [DEBUG] [Thread-8942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:08:28.301 [DEBUG] [Thread-8942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:08:28.305 [DEBUG] [Thread-8942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:08:28.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:08:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:08:28.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:08:28.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:08:28.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:08:28.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:08:28.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:08:28.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:08:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:08:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.296938 -999.00  +19.10  14.05     59  +11.10 1 2 1 1 1   888    0 9.05 42.24 ----- 14.1 14.1 79.9 19.0 25.1 -23.8 25.3 -22.5 24.0 -21.8 24.2 -22.3
2025-12-25T09:08:28.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:08:28.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:08:28.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.296938
2025-12-25T09:08:28.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:08:28.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:08:28.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:08:28.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:08:28.331 [DEBUG] [Thread-8942] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:08:28.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:08:28.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:08:16', tmtdew=10.12, humidity=52.19, cloud=0.0, wind=16.07, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:07:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:08:28.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-25T09:08:28.426 [DEBUG] [Thread-8945] [transport.py] [_log()] starting thread (client mode): 0xb955bb80
2025-12-25T09:08:28.426 [DEBUG] [Thread-8945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:08:28.441 [DEBUG] [Thread-8945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:08:28.441 [INFO] [Thread-8945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:08:28.452 [DEBUG] [Thread-8945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:08:28.453 [DEBUG] [Thread-8945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:08:28.453 [DEBUG] [Thread-8945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:08:28.453 [DEBUG] [Thread-8945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] client lang: <none>
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] server lang: <none>
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] kex follows: False
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] Compression: none
2025-12-25T09:08:28.454 [DEBUG] [Thread-8945] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:08:28.514 [DEBUG] [Thread-8945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:08:28.515 [DEBUG] [Thread-8945] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:08:28.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:08:28.516 [DEBUG] [Thread-8945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:08:28.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:08:28.570 [DEBUG] [Thread-8945] [transport.py] [_log()] userauth is OK
2025-12-25T09:08:28.570 [DEBUG] [Thread-8945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:08:28.570 [DEBUG] [Thread-8945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:08:28.570 [DEBUG] [Thread-8945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:08:28.571 [DEBUG] [Thread-8945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:08:28.589 [INFO] [Thread-8945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:08:28.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-25T09:08:28.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:08:29.433 [DEBUG] [Thread-8945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:08:29.433 [DEBUG] [Thread-8945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:08:29.481 [DEBUG] [Thread-8945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:08:29.481 [DEBUG] [Thread-8945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:08:29.490 [DEBUG] [Thread-8945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:08:29.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:08:29.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-25T09:08:29.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:08:29.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:08:29.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:08:29.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:08:29.528 [DEBUG] [Thread-8945] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:08:32.644 [DEBUG] [Thread-8947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:47.694 [DEBUG] [Thread-8948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:51.307 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:51.308 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:51.396 [DEBUG] [Thread-8949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:08:59.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:08:59.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:08:59.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-25T09:09:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 8, 48), 10.08, 52.36, 0.0, 18.76, 20.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:09:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:08:48
2025-12-25T09:09:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:09:00.521 [DEBUG] [Thread-8950] [transport.py] [_log()] starting thread (client mode): 0xb95581c0
2025-12-25T09:09:00.521 [DEBUG] [Thread-8950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:09:00.541 [DEBUG] [Thread-8950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:09:00.541 [INFO] [Thread-8950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] client lang: <none>
2025-12-25T09:09:00.543 [DEBUG] [Thread-8950] [transport.py] [_log()] server lang: <none>
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] kex follows: False
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] Compression: none
2025-12-25T09:09:00.544 [DEBUG] [Thread-8950] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:09:00.559 [DEBUG] [Thread-8950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:09:00.559 [DEBUG] [Thread-8950] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:09:00.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:09:00.560 [DEBUG] [Thread-8950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:09:00.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:09:00.562 [DEBUG] [Thread-8950] [transport.py] [_log()] userauth is OK
2025-12-25T09:09:00.563 [DEBUG] [Thread-8950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:09:00.563 [DEBUG] [Thread-8950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:09:00.563 [DEBUG] [Thread-8950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:09:00.563 [DEBUG] [Thread-8950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:09:00.586 [INFO] [Thread-8950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:09:00.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:09:01.408 [DEBUG] [Thread-8950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:09:01.408 [DEBUG] [Thread-8950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:09:01.409 [DEBUG] [Thread-8950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:09:01.449 [DEBUG] [Thread-8950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:09:01.449 [DEBUG] [Thread-8950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:09:01.453 [DEBUG] [Thread-8950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:09:01.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:09:01.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:09:01.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:09:01.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:09:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:09:01.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:09:01.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:09:01.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:09:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:09:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.297286 -999.00  +19.50  10.97     58  +11.20 1 2 1 1 1   888    0 9.14 40.46 ----- 11.0 11.0 113.6 21.8 25.4 -23.6 25.4 -22.5 24.1 -20.7 24.3 -21.5
2025-12-25T09:09:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:09:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:09:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.297286
2025-12-25T09:09:01.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:09:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:09:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:09:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:09:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:09:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:08:48', tmtdew=10.08, humidity=52.36, cloud=0.0, wind=18.76, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:08:05.510', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:09:01.479 [DEBUG] [Thread-8950] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:09: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-25T09:09:01.574 [DEBUG] [Thread-8953] [transport.py] [_log()] starting thread (client mode): 0xb6b63d90
2025-12-25T09:09:01.574 [DEBUG] [Thread-8953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:09:01.589 [DEBUG] [Thread-8953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:09:01.589 [INFO] [Thread-8953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:09:01.596 [DEBUG] [Thread-8953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:09:01.596 [DEBUG] [Thread-8953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:09:01.596 [DEBUG] [Thread-8953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:09:01.596 [DEBUG] [Thread-8953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:01.596 [DEBUG] [Thread-8953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] client lang: <none>
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] server lang: <none>
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] kex follows: False
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] Compression: none
2025-12-25T09:09:01.597 [DEBUG] [Thread-8953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:09:01.655 [DEBUG] [Thread-8953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:09:01.655 [DEBUG] [Thread-8953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:09:01.656 [DEBUG] [Thread-8953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:09:01.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:09:01.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:09:01.710 [DEBUG] [Thread-8953] [transport.py] [_log()] userauth is OK
2025-12-25T09:09:01.710 [DEBUG] [Thread-8953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:09:01.710 [DEBUG] [Thread-8953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:09:01.710 [DEBUG] [Thread-8953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:09:01.710 [DEBUG] [Thread-8953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:09:01.728 [INFO] [Thread-8953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:09:01.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:09:01.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:09:02.567 [DEBUG] [Thread-8953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:09:02.567 [DEBUG] [Thread-8953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:09:02.615 [DEBUG] [Thread-8953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:09:02.615 [DEBUG] [Thread-8953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:09:02.625 [DEBUG] [Thread-8953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:09:02.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:09:02.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-25T09:09:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:09:02.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:09:02.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:09:02.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:09:02.661 [DEBUG] [Thread-8953] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:09:02.733 [DEBUG] [Thread-8955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:09:17.779 [DEBUG] [Thread-8956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:09:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:09:32.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:09:32.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-25T09:09:32.810 [DEBUG] [Thread-8957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:09:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 9, 20), 10.13, 52.19, 0.0, 16.92, 20.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:09:33.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:09:20
2025-12-25T09:09:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:09:33.655 [DEBUG] [Thread-8958] [transport.py] [_log()] starting thread (client mode): 0xb6b63670
2025-12-25T09:09:33.655 [DEBUG] [Thread-8958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:09:33.675 [DEBUG] [Thread-8958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:09:33.675 [INFO] [Thread-8958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:09:33.678 [DEBUG] [Thread-8958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:09:33.678 [DEBUG] [Thread-8958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:09:33.678 [DEBUG] [Thread-8958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:09:33.678 [DEBUG] [Thread-8958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:33.678 [DEBUG] [Thread-8958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] client lang: <none>
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] server lang: <none>
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] kex follows: False
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:09:33.679 [DEBUG] [Thread-8958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:09:33.680 [DEBUG] [Thread-8958] [transport.py] [_log()] Compression: none
2025-12-25T09:09:33.680 [DEBUG] [Thread-8958] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:09:33.699 [DEBUG] [Thread-8958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:09:33.700 [DEBUG] [Thread-8958] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:09:33.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:09:33.701 [DEBUG] [Thread-8958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:09:33.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:09:33.704 [DEBUG] [Thread-8958] [transport.py] [_log()] userauth is OK
2025-12-25T09:09:33.704 [DEBUG] [Thread-8958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:09:33.704 [DEBUG] [Thread-8958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:09:33.704 [DEBUG] [Thread-8958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:09:33.704 [DEBUG] [Thread-8958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:09:33.730 [INFO] [Thread-8958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:09:33.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:09:34.362 [DEBUG] [Thread-8958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:09:34.363 [DEBUG] [Thread-8958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:09:34.363 [DEBUG] [Thread-8958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:09:34.404 [DEBUG] [Thread-8958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:09:34.404 [DEBUG] [Thread-8958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:09:34.408 [DEBUG] [Thread-8958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:09:34.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:09:34.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:09:34.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:09:34.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:09:34.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:09:34.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:09:34.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:09:34.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.297633 -999.00  +19.70  23.12     58  +11.30 1 2 1 1 1   888    0 9.08 39.33 ----- 23.1 23.1 61.2 26.4 25.6 -22.1 25.4 -21.8 24.1 -22.4 24.3 -23.1
2025-12-25T09:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.297633
2025-12-25T09:09:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:09:34.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:09:34.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:09:34.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:09:34.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:09:34.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:09:20', tmtdew=10.13, humidity=52.19, cloud=0.0, wind=16.92, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:08:35.491', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:09:34.433 [DEBUG] [Thread-8958] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:09:34.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-25T09:09:34.535 [DEBUG] [Thread-8961] [transport.py] [_log()] starting thread (client mode): 0xb6b22f20
2025-12-25T09:09:34.535 [DEBUG] [Thread-8961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:09:34.551 [DEBUG] [Thread-8961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:09:34.551 [INFO] [Thread-8961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:09:34.558 [DEBUG] [Thread-8961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] client lang: <none>
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] server lang: <none>
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] kex follows: False
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] Compression: none
2025-12-25T09:09:34.559 [DEBUG] [Thread-8961] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:09:34.623 [DEBUG] [Thread-8961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:09:34.623 [DEBUG] [Thread-8961] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:09:34.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:09:34.625 [DEBUG] [Thread-8961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:09:34.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:09:34.683 [DEBUG] [Thread-8961] [transport.py] [_log()] userauth is OK
2025-12-25T09:09:34.683 [DEBUG] [Thread-8961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:09:34.684 [DEBUG] [Thread-8961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:09:34.684 [DEBUG] [Thread-8961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:09:34.684 [DEBUG] [Thread-8961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:09:34.703 [INFO] [Thread-8961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:09:34.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-25T09:09:34.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:09:35.537 [DEBUG] [Thread-8961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:09:35.537 [DEBUG] [Thread-8961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:09:35.584 [DEBUG] [Thread-8961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:09:35.585 [DEBUG] [Thread-8961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:09:35.593 [DEBUG] [Thread-8961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:09:35.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:09:35.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:09:35.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-25T09:09:35.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:09:35.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:09:35.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:09:35.629 [DEBUG] [Thread-8961] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:09:47.841 [DEBUG] [Thread-8963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:09:51.449 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:09:51.449 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:09:51.450 [DEBUG] [Thread-8964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:02.885 [DEBUG] [Thread-8965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:10:05.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:10:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:10:06.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 9, 52), 10.38, 51.54, 0.0, 22.74, 20.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:10:06.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:09:52
2025-12-25T09:10:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:10:06.637 [DEBUG] [Thread-8966] [transport.py] [_log()] starting thread (client mode): 0xb6b29cf0
2025-12-25T09:10:06.637 [DEBUG] [Thread-8966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:10:06.652 [DEBUG] [Thread-8966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:10:06.652 [INFO] [Thread-8966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:10:06.655 [DEBUG] [Thread-8966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:10:06.655 [DEBUG] [Thread-8966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:10:06.655 [DEBUG] [Thread-8966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:10:06.655 [DEBUG] [Thread-8966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:06.655 [DEBUG] [Thread-8966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] client lang: <none>
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] server lang: <none>
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] kex follows: False
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] Compression: none
2025-12-25T09:10:06.656 [DEBUG] [Thread-8966] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:10:06.673 [DEBUG] [Thread-8966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:10:06.674 [DEBUG] [Thread-8966] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:10:06.674 [DEBUG] [Thread-8966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:10:06.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:10:06.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:10:06.676 [DEBUG] [Thread-8966] [transport.py] [_log()] userauth is OK
2025-12-25T09:10:06.676 [DEBUG] [Thread-8966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:10:06.676 [DEBUG] [Thread-8966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:10:06.677 [DEBUG] [Thread-8966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:10:06.677 [DEBUG] [Thread-8966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:10:06.695 [INFO] [Thread-8966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:10:06.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:10:07.750 [DEBUG] [Thread-8966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:10:07.750 [DEBUG] [Thread-8966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:10:07.750 [DEBUG] [Thread-8966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:10:07.791 [DEBUG] [Thread-8966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:10:07.791 [DEBUG] [Thread-8966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:10:07.795 [DEBUG] [Thread-8966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:10:07.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:10:07.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:10:07.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:10:07.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:10:07.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:10:07.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:10:07.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:10:07.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:10:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:10:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.298327 -999.00  +19.60  10.99     58  +11.20 1 2 1 1 1   888    0 9.00 35.37 ----- 11.0 11.0 55.9 24.0 25.5 -23.4 25.3 -23.0 24.0 -22.1 24.4 -23.5
2025-12-25T09:10:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:10:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:10:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.298327
2025-12-25T09:10:07.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:10:07.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:10:07.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:10:07.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:10:07.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:10:07.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:09:52', tmtdew=10.38, humidity=51.54, cloud=0.0, wind=22.74, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:09:35.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:10:07.905 [DEBUG] [Thread-8966] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:10:07.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-25T09:10:08.002 [DEBUG] [Thread-8969] [transport.py] [_log()] starting thread (client mode): 0xb6b2b280
2025-12-25T09:10:08.002 [DEBUG] [Thread-8969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:10:08.018 [DEBUG] [Thread-8969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:10:08.018 [INFO] [Thread-8969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:10:08.028 [DEBUG] [Thread-8969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] client lang: <none>
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] server lang: <none>
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] kex follows: False
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:10:08.029 [DEBUG] [Thread-8969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:10:08.030 [DEBUG] [Thread-8969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:10:08.030 [DEBUG] [Thread-8969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:10:08.030 [DEBUG] [Thread-8969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:10:08.030 [DEBUG] [Thread-8969] [transport.py] [_log()] Compression: none
2025-12-25T09:10:08.030 [DEBUG] [Thread-8969] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:10:08.087 [DEBUG] [Thread-8969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:10:08.087 [DEBUG] [Thread-8969] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:10:08.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:10:08.088 [DEBUG] [Thread-8969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:10:08.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:10:08.147 [DEBUG] [Thread-8969] [transport.py] [_log()] userauth is OK
2025-12-25T09:10:08.147 [DEBUG] [Thread-8969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:10:08.147 [DEBUG] [Thread-8969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:10:08.148 [DEBUG] [Thread-8969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:10:08.148 [DEBUG] [Thread-8969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:10:08.167 [INFO] [Thread-8969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:10:08.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-25T09:10:08.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:10:09.067 [DEBUG] [Thread-8969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:10:09.067 [DEBUG] [Thread-8969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:10:09.115 [DEBUG] [Thread-8969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:10:09.115 [DEBUG] [Thread-8969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:10:09.129 [DEBUG] [Thread-8969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:10:09.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:10:09.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-25T09:10:09.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-25T09:10:09.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:10:09.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:10:09.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:10:09.166 [DEBUG] [Thread-8969] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:10:17.924 [DEBUG] [Thread-8971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:32.984 [DEBUG] [Thread-8972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:10:39.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:10:39.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-25T09:10:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 10, 24), 10.53, 51.08, 0.0, 20.4, 20.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:10:39.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:10:24
2025-12-25T09:10:39.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:10:40.138 [DEBUG] [Thread-8973] [transport.py] [_log()] starting thread (client mode): 0xb6bd7c10
2025-12-25T09:10:40.138 [DEBUG] [Thread-8973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:10:40.158 [DEBUG] [Thread-8973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:10:40.159 [INFO] [Thread-8973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] client lang: <none>
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] server lang: <none>
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] kex follows: False
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] Compression: none
2025-12-25T09:10:40.162 [DEBUG] [Thread-8973] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:10:40.179 [DEBUG] [Thread-8973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:10:40.180 [DEBUG] [Thread-8973] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:10:40.181 [DEBUG] [Thread-8973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:10:40.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:10:40.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:10:40.183 [DEBUG] [Thread-8973] [transport.py] [_log()] userauth is OK
2025-12-25T09:10:40.183 [DEBUG] [Thread-8973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:10:40.183 [DEBUG] [Thread-8973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:10:40.183 [DEBUG] [Thread-8973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:10:40.183 [DEBUG] [Thread-8973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:10:40.207 [INFO] [Thread-8973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:10:40.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:10:40.862 [DEBUG] [Thread-8973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:10:40.863 [DEBUG] [Thread-8973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:10:40.864 [DEBUG] [Thread-8973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:10:40.904 [DEBUG] [Thread-8973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:10:40.904 [DEBUG] [Thread-8973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:10:40.907 [DEBUG] [Thread-8973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:10:40.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:10:40.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:10:40.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:10:40.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:10:40.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:10:40.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:10:40.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:10:40.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:10:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:10:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.298674 -999.00  +19.60  18.40     58  +11.20 1 2 1 1 1   888    0 9.03 36.71 ----- 18.4 18.4 72.2 25.9 25.6 -23.3 25.4 -23.1 24.1 -21.4 24.4 -22.3
2025-12-25T09:10:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:10:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:10:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.298674
2025-12-25T09:10:40.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:10:40.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:10:40.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:10:40.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:10:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:10:40.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:10:24', tmtdew=10.53, humidity=51.08, cloud=0.0, wind=20.4, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:10:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:10:40.935 [DEBUG] [Thread-8973] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:10:41.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-25T09:10:41.043 [DEBUG] [Thread-8976] [transport.py] [_log()] starting thread (client mode): 0xb955a9e0
2025-12-25T09:10:41.043 [DEBUG] [Thread-8976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:10:41.058 [DEBUG] [Thread-8976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:10:41.059 [INFO] [Thread-8976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:10:41.066 [DEBUG] [Thread-8976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:10:41.066 [DEBUG] [Thread-8976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] client lang: <none>
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] server lang: <none>
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] kex follows: False
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:10:41.067 [DEBUG] [Thread-8976] [transport.py] [_log()] Compression: none
2025-12-25T09:10:41.068 [DEBUG] [Thread-8976] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:10:41.131 [DEBUG] [Thread-8976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:10:41.132 [DEBUG] [Thread-8976] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:10:41.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:10:41.133 [DEBUG] [Thread-8976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:10:41.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:10:41.186 [DEBUG] [Thread-8976] [transport.py] [_log()] userauth is OK
2025-12-25T09:10:41.187 [DEBUG] [Thread-8976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:10:41.187 [DEBUG] [Thread-8976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:10:41.187 [DEBUG] [Thread-8976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:10:41.187 [DEBUG] [Thread-8976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:10:41.211 [INFO] [Thread-8976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:10:41.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-25T09:10:41.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:10:42.088 [DEBUG] [Thread-8976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:10:42.088 [DEBUG] [Thread-8976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:10:42.136 [DEBUG] [Thread-8976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:10:42.136 [DEBUG] [Thread-8976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:10:42.149 [DEBUG] [Thread-8976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:10:42.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:10:42.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:10:42.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:10:42.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:10:42.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:10:42.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:10:42.186 [DEBUG] [Thread-8976] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:10:48.014 [DEBUG] [Thread-8978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:51.504 [DEBUG] [Thread-8979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:51.589 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:10:51.591 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:03.067 [DEBUG] [Thread-8980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:12.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:11:12.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:11:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:11:12.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 10, 56), 10.33, 51.69, 0.0, 14.7, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:11:12.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:10:56
2025-12-25T09:11:13.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:11:13.224 [DEBUG] [Thread-8981] [transport.py] [_log()] starting thread (client mode): 0xb6b29660
2025-12-25T09:11:13.224 [DEBUG] [Thread-8981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:11:13.240 [DEBUG] [Thread-8981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:11:13.240 [INFO] [Thread-8981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] client lang: <none>
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] server lang: <none>
2025-12-25T09:11:13.242 [DEBUG] [Thread-8981] [transport.py] [_log()] kex follows: False
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] Compression: none
2025-12-25T09:11:13.243 [DEBUG] [Thread-8981] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:11:13.257 [DEBUG] [Thread-8981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:11:13.257 [DEBUG] [Thread-8981] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:11:13.257 [DEBUG] [Thread-8981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:11:13.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:11:13.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:11:13.258 [DEBUG] [Thread-8981] [transport.py] [_log()] userauth is OK
2025-12-25T09:11:13.258 [DEBUG] [Thread-8981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:11:13.258 [DEBUG] [Thread-8981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:11:13.258 [DEBUG] [Thread-8981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:11:13.258 [DEBUG] [Thread-8981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:11:13.267 [INFO] [Thread-8981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:11:13.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:11:14.052 [DEBUG] [Thread-8981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:11:14.052 [DEBUG] [Thread-8981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:11:14.052 [DEBUG] [Thread-8981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:11:14.092 [DEBUG] [Thread-8981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:11:14.092 [DEBUG] [Thread-8981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:11:14.094 [DEBUG] [Thread-8981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:11:14.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:11:14.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:11:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:11:14.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:11:14.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:11:14.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.299022 -999.00  +19.60  26.90     58  +11.30 1 2 1 1 1   888    0 9.03 37.97 ----- 26.9 26.9 56.6 29.7 25.7 -23.4 25.3 -23.1 24.0 -22.2 24.3 -23.1
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:11:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.299022
2025-12-25T09:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:11:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:10:56', tmtdew=10.33, humidity=51.69, cloud=0.0, wind=14.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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:10:35.501', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:11:14.111 [DEBUG] [Thread-8981] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:11:14.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:11:14.196 [DEBUG] [Thread-8984] [transport.py] [_log()] starting thread (client mode): 0xb6b28b50
2025-12-25T09:11:14.196 [DEBUG] [Thread-8984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:11:14.212 [DEBUG] [Thread-8984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:11:14.213 [INFO] [Thread-8984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] client lang: <none>
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] server lang: <none>
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] kex follows: False
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] Compression: none
2025-12-25T09:11:14.220 [DEBUG] [Thread-8984] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:11:14.282 [DEBUG] [Thread-8984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:11:14.282 [DEBUG] [Thread-8984] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:11:14.282 [DEBUG] [Thread-8984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:11:14.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:11:14.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:11:14.347 [DEBUG] [Thread-8984] [transport.py] [_log()] userauth is OK
2025-12-25T09:11:14.347 [DEBUG] [Thread-8984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:11:14.347 [DEBUG] [Thread-8984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:11:14.347 [DEBUG] [Thread-8984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:11:14.347 [DEBUG] [Thread-8984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:11:14.363 [INFO] [Thread-8984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:11:14.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-25T09:11:14.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:11:15.211 [DEBUG] [Thread-8984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:11:15.212 [DEBUG] [Thread-8984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:11:15.259 [DEBUG] [Thread-8984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:11:15.259 [DEBUG] [Thread-8984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:11:15.268 [DEBUG] [Thread-8984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:11:15.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:11:15.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:11:15.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-25T09:11:15.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:11:15.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:11:15.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:11:15.301 [DEBUG] [Thread-8984] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:11:18.105 [DEBUG] [Thread-8986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:33.157 [DEBUG] [Thread-8987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:11:45.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:11:45.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-25T09:11:46.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 11, 28), 10.29, 51.83, 0.0, 16.71, 20.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:11:46.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:11:28
2025-12-25T09:11:46.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:11:46.280 [DEBUG] [Thread-8988] [transport.py] [_log()] starting thread (client mode): 0xb6bd7af0
2025-12-25T09:11:46.280 [DEBUG] [Thread-8988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:11:46.301 [DEBUG] [Thread-8988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:11:46.301 [INFO] [Thread-8988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:11:46.304 [DEBUG] [Thread-8988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:11:46.304 [DEBUG] [Thread-8988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:11:46.304 [DEBUG] [Thread-8988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:11:46.304 [DEBUG] [Thread-8988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:46.304 [DEBUG] [Thread-8988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] client lang: <none>
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] server lang: <none>
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] kex follows: False
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] Compression: none
2025-12-25T09:11:46.305 [DEBUG] [Thread-8988] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:11:46.322 [DEBUG] [Thread-8988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:11:46.322 [DEBUG] [Thread-8988] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:11:46.323 [DEBUG] [Thread-8988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:11:46.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:11:46.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:11:46.325 [DEBUG] [Thread-8988] [transport.py] [_log()] userauth is OK
2025-12-25T09:11:46.325 [DEBUG] [Thread-8988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:11:46.325 [DEBUG] [Thread-8988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:11:46.326 [DEBUG] [Thread-8988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:11:46.326 [DEBUG] [Thread-8988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:11:46.349 [INFO] [Thread-8988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:11:46.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:11:46.983 [DEBUG] [Thread-8988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:11:46.983 [DEBUG] [Thread-8988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:11:46.984 [DEBUG] [Thread-8988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:11:47.024 [DEBUG] [Thread-8988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:11:47.024 [DEBUG] [Thread-8988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:11:47.028 [DEBUG] [Thread-8988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:11:47.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:11:47.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:11:47.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:11:47.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:11:47.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:11:47.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:11:47.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:11:47.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:11:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:11:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.299369 -999.00  +19.90  19.41     57  +11.30 1 2 1 1 1   888    0 9.20 41.22 ----- 19.4 19.4 72.4 25.6 25.7 -22.7 25.3 -23.6 24.0 -21.7 24.4 -22.1
2025-12-25T09:11:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:11:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:11:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.299369
2025-12-25T09:11:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:11:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:11:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:11:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:11:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:11:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:11:28', tmtdew=10.29, humidity=51.83, cloud=0.0, wind=16.71, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:11:05.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:11:47.055 [DEBUG] [Thread-8988] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:11:47.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-25T09:11:47.159 [DEBUG] [Thread-8991] [transport.py] [_log()] starting thread (client mode): 0xb6b2b790
2025-12-25T09:11:47.159 [DEBUG] [Thread-8991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:11:47.174 [DEBUG] [Thread-8991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:11:47.174 [INFO] [Thread-8991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:11:47.181 [DEBUG] [Thread-8991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] client lang: <none>
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] server lang: <none>
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] kex follows: False
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] Compression: none
2025-12-25T09:11:47.182 [DEBUG] [Thread-8991] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:11:47.239 [DEBUG] [Thread-8991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:11:47.240 [DEBUG] [Thread-8991] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:11:47.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:11:47.241 [DEBUG] [Thread-8991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:11:47.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:11:47.299 [DEBUG] [Thread-8991] [transport.py] [_log()] userauth is OK
2025-12-25T09:11:47.299 [DEBUG] [Thread-8991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:11:47.300 [DEBUG] [Thread-8991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:11:47.300 [DEBUG] [Thread-8991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:11:47.300 [DEBUG] [Thread-8991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:11:47.319 [INFO] [Thread-8991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:11:47.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-25T09:11:47.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:11:48.195 [DEBUG] [Thread-8993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:48.215 [DEBUG] [Thread-8991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:11:48.215 [DEBUG] [Thread-8991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:11:48.262 [DEBUG] [Thread-8991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:11:48.262 [DEBUG] [Thread-8991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:11:48.270 [DEBUG] [Thread-8991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:11:48.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:11:48.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-25T09:11:48.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-25T09:11:48.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:11:48.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:11:48.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:11:48.301 [DEBUG] [Thread-8991] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:11:51.549 [DEBUG] [Thread-8994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:51.730 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:11:51.731 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:03.234 [DEBUG] [Thread-8995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:18.268 [DEBUG] [Thread-8996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:12:18.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09: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-25T09:12:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 12), 10.53, 50.88, 0.0, 18.58, 20.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:12:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:12:00
2025-12-25T09:12:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:12:19.295 [DEBUG] [Thread-8997] [transport.py] [_log()] starting thread (client mode): 0xb6bd7eb0
2025-12-25T09:12:19.295 [DEBUG] [Thread-8997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:12:19.315 [DEBUG] [Thread-8997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:12:19.316 [INFO] [Thread-8997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:12:19.317 [DEBUG] [Thread-8997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:12:19.317 [DEBUG] [Thread-8997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:12:19.317 [DEBUG] [Thread-8997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:12:19.317 [DEBUG] [Thread-8997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:19.317 [DEBUG] [Thread-8997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] client lang: <none>
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] server lang: <none>
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] kex follows: False
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] Compression: none
2025-12-25T09:12:19.318 [DEBUG] [Thread-8997] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:12:19.332 [DEBUG] [Thread-8997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:12:19.333 [DEBUG] [Thread-8997] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:12:19.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:12:19.334 [DEBUG] [Thread-8997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:12:19.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:12:19.335 [DEBUG] [Thread-8997] [transport.py] [_log()] userauth is OK
2025-12-25T09:12:19.336 [DEBUG] [Thread-8997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:12:19.336 [DEBUG] [Thread-8997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:12:19.336 [DEBUG] [Thread-8997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:12:19.336 [DEBUG] [Thread-8997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:12:19.354 [INFO] [Thread-8997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:12:19.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:12:20.168 [DEBUG] [Thread-8997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:12:20.168 [DEBUG] [Thread-8997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:12:20.168 [DEBUG] [Thread-8997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:12:20.209 [DEBUG] [Thread-8997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:12:20.209 [DEBUG] [Thread-8997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:12:20.212 [DEBUG] [Thread-8997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:12:20.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:12:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:12:20.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:12:20.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:12:20.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:12:20.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:12:20.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:12:20.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:12:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:12:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.299716 -999.00  +19.90  13.87     57  +11.20 1 2 1 1 1   888    0 9.22 39.77 ----- 13.9 13.9 114.3 22.1 25.8 -22.8 25.3 -24.3 23.9 -21.6 24.4 -22.0
2025-12-25T09:12:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:12:20.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:12:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.299716
2025-12-25T09:12:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:12:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:12:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:12:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:12:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:12:20.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:12:00', tmtdew=10.53, humidity=50.88, cloud=0.0, wind=18.58, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:11:35.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:12:20.236 [DEBUG] [Thread-8997] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:12:20.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-25T09:12:20.332 [DEBUG] [Thread-9000] [transport.py] [_log()] starting thread (client mode): 0xb6b22800
2025-12-25T09:12:20.332 [DEBUG] [Thread-9000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:12:20.347 [DEBUG] [Thread-9000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:12:20.347 [INFO] [Thread-9000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:20.355 [DEBUG] [Thread-9000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] client lang: <none>
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] server lang: <none>
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] kex follows: False
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:12:20.356 [DEBUG] [Thread-9000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:12:20.357 [DEBUG] [Thread-9000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:12:20.357 [DEBUG] [Thread-9000] [transport.py] [_log()] Compression: none
2025-12-25T09:12:20.357 [DEBUG] [Thread-9000] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:12:20.417 [DEBUG] [Thread-9000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:12:20.418 [DEBUG] [Thread-9000] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:12:20.418 [DEBUG] [Thread-9000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:12:20.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:12:20.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:12:20.474 [DEBUG] [Thread-9000] [transport.py] [_log()] userauth is OK
2025-12-25T09:12:20.475 [DEBUG] [Thread-9000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:12:20.475 [DEBUG] [Thread-9000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:12:20.475 [DEBUG] [Thread-9000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:12:20.475 [DEBUG] [Thread-9000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:12:20.497 [INFO] [Thread-9000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:12: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-25T09:12:20.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:12:21.319 [DEBUG] [Thread-9000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:12:21.319 [DEBUG] [Thread-9000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:12:21.369 [DEBUG] [Thread-9000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:12:21.370 [DEBUG] [Thread-9000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:12:21.382 [DEBUG] [Thread-9000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:12:21.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:12:21.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:12:21.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:12:21.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:12:21.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:12:21.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:12:21.430 [DEBUG] [Thread-9000] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:12:33.306 [DEBUG] [Thread-9002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:48.359 [DEBUG] [Thread-9003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:12:51.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:12: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-25T09:12:51.620 [DEBUG] [Thread-9004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:51.873 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:51.874 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:12:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 12, 33), 10.58, 50.71, 0.0, 16.74, 20.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:12:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:12:33
2025-12-25T09:12:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:12:52.394 [DEBUG] [Thread-9005] [transport.py] [_log()] starting thread (client mode): 0xb6b22bf0
2025-12-25T09:12:52.394 [DEBUG] [Thread-9005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:12:52.414 [DEBUG] [Thread-9005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:12:52.414 [INFO] [Thread-9005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] client lang: <none>
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] server lang: <none>
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] kex follows: False
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:12:52.418 [DEBUG] [Thread-9005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:12:52.419 [DEBUG] [Thread-9005] [transport.py] [_log()] Compression: none
2025-12-25T09:12:52.419 [DEBUG] [Thread-9005] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:12:52.437 [DEBUG] [Thread-9005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:12:52.438 [DEBUG] [Thread-9005] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:12:52.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:12:52.438 [DEBUG] [Thread-9005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:12:52.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:12:52.441 [DEBUG] [Thread-9005] [transport.py] [_log()] userauth is OK
2025-12-25T09:12:52.441 [DEBUG] [Thread-9005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:12:52.441 [DEBUG] [Thread-9005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:12:52.441 [DEBUG] [Thread-9005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:12:52.441 [DEBUG] [Thread-9005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:12:52.475 [INFO] [Thread-9005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:12:52.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:12:53.094 [DEBUG] [Thread-9005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:12:53.095 [DEBUG] [Thread-9005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:12:53.095 [DEBUG] [Thread-9005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:12:53.136 [DEBUG] [Thread-9005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:12:53.136 [DEBUG] [Thread-9005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:12:53.138 [DEBUG] [Thread-9005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:12:53.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:12:53.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:12:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:12:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:12:53.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:12:53.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:12:53.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:12:53.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.300063 -999.00  +20.00  11.87     56  +11.20 1 2 1 1 1   888    0 9.24 38.84 ----- 11.9 11.9 77.8 19.3 25.7 -23.9 25.4 -22.6 24.1 -21.3 24.5 -22.7
2025-12-25T09:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:12:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.300063
2025-12-25T09:12:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:12:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:12:53.163 [DEBUG] [Thread-9005] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:12:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:12:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:12:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:12:53.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:12:33', tmtdew=10.58, humidity=50.71, cloud=0.0, wind=16.74, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:12:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:12:53.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-25T09:12:53.258 [DEBUG] [Thread-9008] [transport.py] [_log()] starting thread (client mode): 0xb6b21600
2025-12-25T09:12:53.259 [DEBUG] [Thread-9008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:12:53.273 [DEBUG] [Thread-9008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:12:53.273 [INFO] [Thread-9008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:12:53.285 [DEBUG] [Thread-9008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:12:53.285 [DEBUG] [Thread-9008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:12:53.285 [DEBUG] [Thread-9008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:12:53.285 [DEBUG] [Thread-9008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:53.285 [DEBUG] [Thread-9008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] client lang: <none>
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] server lang: <none>
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] kex follows: False
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] Compression: none
2025-12-25T09:12:53.286 [DEBUG] [Thread-9008] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:12:53.344 [DEBUG] [Thread-9008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:12:53.345 [DEBUG] [Thread-9008] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:12:53.345 [DEBUG] [Thread-9008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:12:53.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:12:53.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:12:53.410 [DEBUG] [Thread-9008] [transport.py] [_log()] userauth is OK
2025-12-25T09:12:53.410 [DEBUG] [Thread-9008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:12:53.410 [DEBUG] [Thread-9008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:12:53.411 [DEBUG] [Thread-9008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:12:53.411 [DEBUG] [Thread-9008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:12:53.439 [INFO] [Thread-9008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:12:53.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-25T09:12:53.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:12:54.281 [DEBUG] [Thread-9008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:12:54.281 [DEBUG] [Thread-9008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:12:54.331 [DEBUG] [Thread-9008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:12:54.331 [DEBUG] [Thread-9008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:12:54.342 [DEBUG] [Thread-9008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:12:54.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:12:54.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-25T09:12:54.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-25T09:12:54.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:12:54.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:12:54.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:12:54.392 [DEBUG] [Thread-9008] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:13:03.395 [DEBUG] [Thread-9010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:18.446 [DEBUG] [Thread-9011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:24.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:13:24.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:13:24.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-25T09:13:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 13, 5), 10.59, 50.66, 0.0, 14.15, 20.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:13:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:13:05
2025-12-25T09:13:25.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:13:25.374 [DEBUG] [Thread-9012] [transport.py] [_log()] starting thread (client mode): 0xb6b28970
2025-12-25T09:13:25.374 [DEBUG] [Thread-9012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:13:25.394 [DEBUG] [Thread-9012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:13:25.394 [INFO] [Thread-9012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:13:25.397 [DEBUG] [Thread-9012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:13:25.397 [DEBUG] [Thread-9012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:13:25.397 [DEBUG] [Thread-9012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:13:25.397 [DEBUG] [Thread-9012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:25.397 [DEBUG] [Thread-9012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] client lang: <none>
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] server lang: <none>
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] kex follows: False
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] Compression: none
2025-12-25T09:13:25.398 [DEBUG] [Thread-9012] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:13:25.413 [DEBUG] [Thread-9012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:13:25.413 [DEBUG] [Thread-9012] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:13:25.414 [DEBUG] [Thread-9012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:13:25.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:13:25.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:13:25.416 [DEBUG] [Thread-9012] [transport.py] [_log()] userauth is OK
2025-12-25T09:13:25.416 [DEBUG] [Thread-9012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:13:25.416 [DEBUG] [Thread-9012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:13:25.416 [DEBUG] [Thread-9012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:13:25.416 [DEBUG] [Thread-9012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:13:25.442 [INFO] [Thread-9012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:13:25.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:13:26.194 [DEBUG] [Thread-9012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:13:26.194 [DEBUG] [Thread-9012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:13:26.194 [DEBUG] [Thread-9012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:13:26.235 [DEBUG] [Thread-9012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:13:26.235 [DEBUG] [Thread-9012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:13:26.239 [DEBUG] [Thread-9012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:13:26.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:13:26.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:13:26.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:13:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:13:26.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:13:26.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:13:26.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:13:26.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:13:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:13:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.300410 -999.00  +20.10  27.37     56  +11.20 1 1 1 1 1   888    0 9.13 39.68 ----- 27.4 27.4 60.4 29.8 25.8 -22.8 25.4 -23.5 24.2 -22.7 24.5 -22.3
2025-12-25T09:13:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:13:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:13:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.300410
2025-12-25T09:13:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:13:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:13:26.265 [DEBUG] [Thread-9012] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:13:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:13:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:13:26.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:13:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:13:05', tmtdew=10.59, humidity=50.66, cloud=0.0, wind=14.15, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:12:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:13:26.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-25T09:13:26.364 [DEBUG] [Thread-9015] [transport.py] [_log()] starting thread (client mode): 0xb6b62890
2025-12-25T09:13:26.364 [DEBUG] [Thread-9015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:13:26.380 [DEBUG] [Thread-9015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:13:26.380 [INFO] [Thread-9015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] client lang: <none>
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] server lang: <none>
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] kex follows: False
2025-12-25T09:13:26.391 [DEBUG] [Thread-9015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:13:26.392 [DEBUG] [Thread-9015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:13:26.392 [DEBUG] [Thread-9015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:13:26.392 [DEBUG] [Thread-9015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:13:26.392 [DEBUG] [Thread-9015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:13:26.392 [DEBUG] [Thread-9015] [transport.py] [_log()] Compression: none
2025-12-25T09:13:26.392 [DEBUG] [Thread-9015] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:13:26.447 [DEBUG] [Thread-9015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:13:26.448 [DEBUG] [Thread-9015] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:13:26.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:13:26.449 [DEBUG] [Thread-9015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:13:26.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:13:26.503 [DEBUG] [Thread-9015] [transport.py] [_log()] userauth is OK
2025-12-25T09:13:26.503 [DEBUG] [Thread-9015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:13:26.503 [DEBUG] [Thread-9015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:13:26.503 [DEBUG] [Thread-9015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:13:26.503 [DEBUG] [Thread-9015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:13:26.518 [INFO] [Thread-9015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:13:26.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-25T09:13:26.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:13:27.396 [DEBUG] [Thread-9015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:13:27.396 [DEBUG] [Thread-9015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:13:27.446 [DEBUG] [Thread-9015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:13:27.446 [DEBUG] [Thread-9015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:13:27.455 [DEBUG] [Thread-9015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:13:27.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:13:27.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:13:27.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:13:27.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:13:27.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:13:27.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:13:27.495 [DEBUG] [Thread-9015] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:13:33.484 [DEBUG] [Thread-9017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:48.535 [DEBUG] [Thread-9018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:51.675 [DEBUG] [Thread-9019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:52.013 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:52.014 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:13:57.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:13:57.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:13:57.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-25T09:13:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 13, 37), 10.71, 50.06, 0.0, 21.28, 20.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:13:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:13:37
2025-12-25T09:13:58.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:13:58.468 [DEBUG] [Thread-9020] [transport.py] [_log()] starting thread (client mode): 0xb6b2aec0
2025-12-25T09:13:58.469 [DEBUG] [Thread-9020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:13:58.488 [DEBUG] [Thread-9020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:13:58.488 [INFO] [Thread-9020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] client lang: <none>
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] server lang: <none>
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] kex follows: False
2025-12-25T09:13:58.491 [DEBUG] [Thread-9020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:13:58.492 [DEBUG] [Thread-9020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:13:58.492 [DEBUG] [Thread-9020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:13:58.492 [DEBUG] [Thread-9020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:13:58.492 [DEBUG] [Thread-9020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:13:58.492 [DEBUG] [Thread-9020] [transport.py] [_log()] Compression: none
2025-12-25T09:13:58.492 [DEBUG] [Thread-9020] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:13:58.508 [DEBUG] [Thread-9020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:13:58.508 [DEBUG] [Thread-9020] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:13:58.509 [DEBUG] [Thread-9020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:13:58.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:13:58.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:13:58.511 [DEBUG] [Thread-9020] [transport.py] [_log()] userauth is OK
2025-12-25T09:13:58.511 [DEBUG] [Thread-9020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:13:58.511 [DEBUG] [Thread-9020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:13:58.511 [DEBUG] [Thread-9020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:13:58.511 [DEBUG] [Thread-9020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:13:58.536 [INFO] [Thread-9020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:13:58.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:13:59.177 [DEBUG] [Thread-9020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:13:59.177 [DEBUG] [Thread-9020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:13:59.178 [DEBUG] [Thread-9020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:13:59.218 [DEBUG] [Thread-9020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:13:59.218 [DEBUG] [Thread-9020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:13:59.222 [DEBUG] [Thread-9020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:13:59.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:13:59.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:13:59.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:13:59.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:13:59.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:13:59.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:13:59.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:13:59.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:13:59.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:13:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.300758 -999.00  +20.00  26.04     56  +11.10 1 1 1 1 1   888    0 9.36 45.64 ----- 26.0 26.0 62.2 29.6 25.9 -23.1 25.4 -25.5 24.0 -22.4 24.4 -22.6
2025-12-25T09:13:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:13:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:13:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.300758
2025-12-25T09:13:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:13:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:13:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:13:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:13:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:13:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:13:37', tmtdew=10.71, humidity=50.06, cloud=0.0, wind=21.28, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:13:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:13:59.252 [DEBUG] [Thread-9020] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:13:59.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-25T09:13:59.348 [DEBUG] [Thread-9023] [transport.py] [_log()] starting thread (client mode): 0xb6b29f60
2025-12-25T09:13:59.348 [DEBUG] [Thread-9023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:13:59.362 [DEBUG] [Thread-9023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:13:59.362 [INFO] [Thread-9023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:13:59.370 [DEBUG] [Thread-9023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:13:59.370 [DEBUG] [Thread-9023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:13:59.370 [DEBUG] [Thread-9023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] client lang: <none>
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] server lang: <none>
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] kex follows: False
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] Compression: none
2025-12-25T09:13:59.371 [DEBUG] [Thread-9023] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:13:59.427 [DEBUG] [Thread-9023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:13:59.427 [DEBUG] [Thread-9023] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:13:59.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:13:59.428 [DEBUG] [Thread-9023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:13:59.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:13:59.484 [DEBUG] [Thread-9023] [transport.py] [_log()] userauth is OK
2025-12-25T09:13:59.484 [DEBUG] [Thread-9023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:13:59.484 [DEBUG] [Thread-9023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:13:59.484 [DEBUG] [Thread-9023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:13:59.485 [DEBUG] [Thread-9023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:13:59.507 [INFO] [Thread-9023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:13:59.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-25T09:13:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:14:00.353 [DEBUG] [Thread-9023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:14:00.354 [DEBUG] [Thread-9023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:14:00.402 [DEBUG] [Thread-9023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:14:00.402 [DEBUG] [Thread-9023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:14:00.412 [DEBUG] [Thread-9023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:14:00.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:14:00.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:14:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:14:00.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:14:00.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:14:00.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:14:00.448 [DEBUG] [Thread-9023] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:14:03.569 [DEBUG] [Thread-9025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:14:18.627 [DEBUG] [Thread-9026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:14:30.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:14:30.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:14:30.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-25T09:14:31.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 14, 9), 10.82, 49.74, 0.0, 20.77, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:14:31.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:14:09
2025-12-25T09:14:31.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:14:31.430 [DEBUG] [Thread-9027] [transport.py] [_log()] starting thread (client mode): 0xb6b20d30
2025-12-25T09:14:31.430 [DEBUG] [Thread-9027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:14:31.450 [DEBUG] [Thread-9027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:14:31.450 [INFO] [Thread-9027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] client lang: <none>
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] server lang: <none>
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] kex follows: False
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:14:31.453 [DEBUG] [Thread-9027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:14:31.454 [DEBUG] [Thread-9027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:14:31.454 [DEBUG] [Thread-9027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:14:31.454 [DEBUG] [Thread-9027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:14:31.454 [DEBUG] [Thread-9027] [transport.py] [_log()] Compression: none
2025-12-25T09:14:31.454 [DEBUG] [Thread-9027] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:14:31.470 [DEBUG] [Thread-9027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:14:31.470 [DEBUG] [Thread-9027] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:14:31.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:14:31.471 [DEBUG] [Thread-9027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:14:31.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:14:31.473 [DEBUG] [Thread-9027] [transport.py] [_log()] userauth is OK
2025-12-25T09:14:31.474 [DEBUG] [Thread-9027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:14:31.474 [DEBUG] [Thread-9027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:14:31.474 [DEBUG] [Thread-9027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:14:31.474 [DEBUG] [Thread-9027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:14:31.498 [INFO] [Thread-9027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:14:31.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:14:32.236 [DEBUG] [Thread-9027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:14:32.237 [DEBUG] [Thread-9027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:14:32.237 [DEBUG] [Thread-9027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:14:32.278 [DEBUG] [Thread-9027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:14:32.278 [DEBUG] [Thread-9027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:14:32.281 [DEBUG] [Thread-9027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:14:32.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:14:32.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:14:32.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:14:32.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:14:32.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:14:32.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:14:32.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:14:32.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:14:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:14:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.301452 -999.00  +19.80  20.03     57  +11.10 1 2 1 1 1   888    0 9.49 49.09 ----- 20.0 20.0 63.8 26.2 25.7 -22.7 25.2 -23.7 24.1 -21.4 24.4 -21.9
2025-12-25T09:14:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:14:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:14:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.301452
2025-12-25T09:14:32.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:14:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:14:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:14:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:14:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:14:32.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:14:09', tmtdew=10.82, humidity=49.74, cloud=0.0, wind=20.77, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:14:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:14:32.308 [DEBUG] [Thread-9027] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:14:32.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-25T09:14:32.401 [DEBUG] [Thread-9030] [transport.py] [_log()] starting thread (client mode): 0xb955add0
2025-12-25T09:14:32.401 [DEBUG] [Thread-9030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:14:32.415 [DEBUG] [Thread-9030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:14:32.415 [INFO] [Thread-9030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:14:32.423 [DEBUG] [Thread-9030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:14:32.423 [DEBUG] [Thread-9030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] client lang: <none>
2025-12-25T09:14:32.424 [DEBUG] [Thread-9030] [transport.py] [_log()] server lang: <none>
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] kex follows: False
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] Compression: none
2025-12-25T09:14:32.425 [DEBUG] [Thread-9030] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:14:32.484 [DEBUG] [Thread-9030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:14:32.485 [DEBUG] [Thread-9030] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:14:32.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:14:32.486 [DEBUG] [Thread-9030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:14:32.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:14:32.543 [DEBUG] [Thread-9030] [transport.py] [_log()] userauth is OK
2025-12-25T09:14:32.543 [DEBUG] [Thread-9030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:14:32.544 [DEBUG] [Thread-9030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:14:32.544 [DEBUG] [Thread-9030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:14:32.544 [DEBUG] [Thread-9030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:14:32.566 [INFO] [Thread-9030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:14:32.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:14:32.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:14:33.391 [DEBUG] [Thread-9030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:14:33.392 [DEBUG] [Thread-9030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:14:33.441 [DEBUG] [Thread-9030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:14:33.442 [DEBUG] [Thread-9030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:14:33.453 [DEBUG] [Thread-9030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:14:33.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:14:33.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-25T09:14:33.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:14:33.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:14:33.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:14:33.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:14:33.496 [DEBUG] [Thread-9030] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:14:33.657 [DEBUG] [Thread-9032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:14:48.706 [DEBUG] [Thread-9033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:14:51.733 [DEBUG] [Thread-9034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:14:52.154 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:14:52.155 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:15:03.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:15:03.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-25T09:15:03.745 [DEBUG] [Thread-9035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 14, 41), 10.87, 49.59, 0.0, 16.37, 20.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:15:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:14:41
2025-12-25T09:15:04.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:15:04.521 [DEBUG] [Thread-9036] [transport.py] [_log()] starting thread (client mode): 0xb6b63e20
2025-12-25T09:15:04.521 [DEBUG] [Thread-9036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:15:04.542 [DEBUG] [Thread-9036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:15:04.542 [INFO] [Thread-9036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] client lang: <none>
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] server lang: <none>
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] kex follows: False
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] Compression: none
2025-12-25T09:15:04.544 [DEBUG] [Thread-9036] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:15:04.554 [DEBUG] [Thread-9036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:15:04.554 [DEBUG] [Thread-9036] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:15:04.554 [DEBUG] [Thread-9036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:15:04.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:15:04.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:15:04.555 [DEBUG] [Thread-9036] [transport.py] [_log()] userauth is OK
2025-12-25T09:15:04.555 [DEBUG] [Thread-9036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:15:04.555 [DEBUG] [Thread-9036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:15:04.555 [DEBUG] [Thread-9036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:15:04.555 [DEBUG] [Thread-9036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:15:04.564 [INFO] [Thread-9036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:15:04.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:15:05.448 [DEBUG] [Thread-9036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:15:05.449 [DEBUG] [Thread-9036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:15:05.449 [DEBUG] [Thread-9036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:15:05.489 [DEBUG] [Thread-9036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:15:05.490 [DEBUG] [Thread-9036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:15:05.492 [DEBUG] [Thread-9036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:15:05.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:15:05.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:15:05.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:15:05.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:15:05.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:15:05.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:15:05.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:15:05.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:15:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.301799 -999.00  +19.70  19.67     57  +11.00 1 2 1 1 1   888    0 9.86 57.34 ----- 19.7 19.7 61.6 20.9 25.6 -24.9 25.4 -23.8 24.1 -21.3 24.4 -22.5
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.301799
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:15:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:14:41', tmtdew=10.87, humidity=49.59, cloud=0.0, wind=16.37, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:14:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:15:05.528 [DEBUG] [Thread-9036] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:15:05.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-25T09:15:05.613 [DEBUG] [Thread-9039] [transport.py] [_log()] starting thread (client mode): 0xb6babc10
2025-12-25T09:15:05.613 [DEBUG] [Thread-9039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:15:05.628 [DEBUG] [Thread-9039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:15:05.628 [INFO] [Thread-9039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] client lang: <none>
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] server lang: <none>
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] kex follows: False
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] Compression: none
2025-12-25T09:15:05.636 [DEBUG] [Thread-9039] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:15:05.698 [DEBUG] [Thread-9039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:15:05.698 [DEBUG] [Thread-9039] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:15:05.698 [DEBUG] [Thread-9039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:15:05.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:15:05.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:15:05.754 [DEBUG] [Thread-9039] [transport.py] [_log()] userauth is OK
2025-12-25T09:15:05.754 [DEBUG] [Thread-9039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:15:05.754 [DEBUG] [Thread-9039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:15:05.754 [DEBUG] [Thread-9039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:15:05.754 [DEBUG] [Thread-9039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:15:05.770 [INFO] [Thread-9039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:15:05.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-25T09:15:05.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:15:06.624 [DEBUG] [Thread-9039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:15:06.624 [DEBUG] [Thread-9039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:15:06.672 [DEBUG] [Thread-9039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:15:06.672 [DEBUG] [Thread-9039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:15:06.680 [DEBUG] [Thread-9039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:15:06.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:15:06.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:15:06.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:15:06.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:15:06.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:15:06.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:15:06.712 [DEBUG] [Thread-9039] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:15:18.775 [DEBUG] [Thread-9041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:33.827 [DEBUG] [Thread-9042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:15:36.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:15:36.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-25T09:15:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 15, 13), 10.87, 49.59, 0.0, 17.75, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:15:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:15:13
2025-12-25T09:15:37.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:15:37.704 [DEBUG] [Thread-9043] [transport.py] [_log()] starting thread (client mode): 0xb955bbe0
2025-12-25T09:15:37.704 [DEBUG] [Thread-9043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:15:37.725 [DEBUG] [Thread-9043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:15:37.725 [INFO] [Thread-9043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] client lang: <none>
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] server lang: <none>
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] kex follows: False
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:15:37.728 [DEBUG] [Thread-9043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:15:37.729 [DEBUG] [Thread-9043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:15:37.729 [DEBUG] [Thread-9043] [transport.py] [_log()] Compression: none
2025-12-25T09:15:37.729 [DEBUG] [Thread-9043] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:15:37.745 [DEBUG] [Thread-9043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:15:37.745 [DEBUG] [Thread-9043] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:15:37.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:15:37.746 [DEBUG] [Thread-9043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:15:37.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:15:37.748 [DEBUG] [Thread-9043] [transport.py] [_log()] userauth is OK
2025-12-25T09:15:37.749 [DEBUG] [Thread-9043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:15:37.749 [DEBUG] [Thread-9043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:15:37.749 [DEBUG] [Thread-9043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:15:37.749 [DEBUG] [Thread-9043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:15:37.774 [INFO] [Thread-9043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:15:37.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:15:38.566 [DEBUG] [Thread-9043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:15:38.566 [DEBUG] [Thread-9043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:15:38.566 [DEBUG] [Thread-9043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:15:38.607 [DEBUG] [Thread-9043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:15:38.607 [DEBUG] [Thread-9043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:15:38.613 [DEBUG] [Thread-9043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:15:38.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:15:38.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:15:38.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:15:38.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:15:38.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:15:38.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:15:38.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:15:38.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:15:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:15:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.302146 -999.00  +19.60  24.59     57  +11.00 1 2 1 1 1   888    0 9.77 57.03 ----- 24.6 24.6 58.4 29.2 25.8 -23.6 25.4 -22.5 24.1 -22.5 24.5 -22.7
2025-12-25T09:15:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:15:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:15:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.302146
2025-12-25T09:15:38.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:15:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:15:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:15:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:15:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:15:38.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:15:13', tmtdew=10.87, humidity=49.59, cloud=0.0, wind=17.75, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:15:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:15:38.636 [DEBUG] [Thread-9043] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:15:38.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-25T09:15:38.732 [DEBUG] [Thread-9046] [transport.py] [_log()] starting thread (client mode): 0xb955a980
2025-12-25T09:15:38.732 [DEBUG] [Thread-9046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:15:38.747 [DEBUG] [Thread-9046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:15:38.747 [INFO] [Thread-9046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] client lang: <none>
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] server lang: <none>
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] kex follows: False
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:15:38.755 [DEBUG] [Thread-9046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:15:38.756 [DEBUG] [Thread-9046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:15:38.756 [DEBUG] [Thread-9046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:15:38.756 [DEBUG] [Thread-9046] [transport.py] [_log()] Compression: none
2025-12-25T09:15:38.756 [DEBUG] [Thread-9046] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:15:38.817 [DEBUG] [Thread-9046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:15:38.818 [DEBUG] [Thread-9046] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:15:38.818 [DEBUG] [Thread-9046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:15:38.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:15:38.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:15:38.878 [DEBUG] [Thread-9046] [transport.py] [_log()] userauth is OK
2025-12-25T09:15:38.878 [DEBUG] [Thread-9046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:15:38.879 [DEBUG] [Thread-9046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:15:38.879 [DEBUG] [Thread-9046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:15:38.879 [DEBUG] [Thread-9046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:15:38.898 [INFO] [Thread-9046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:15:38.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-25T09:15:38.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:15:39.713 [DEBUG] [Thread-9046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:15:39.713 [DEBUG] [Thread-9046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:15:39.761 [DEBUG] [Thread-9046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:15:39.761 [DEBUG] [Thread-9046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:15:39.770 [DEBUG] [Thread-9046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:15:39.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:15:39.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-25T09:15:39.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-25T09:15:39.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:15:39.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:15:39.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:15:39.807 [DEBUG] [Thread-9046] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:15:48.859 [DEBUG] [Thread-9048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:51.784 [DEBUG] [Thread-9049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:52.295 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:15:52.296 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:03.911 [DEBUG] [Thread-9050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:16:09.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:16:09.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-25T09:16:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 15, 45), 10.58, 50.91, 0.0, 18.55, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:16:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:15:45
2025-12-25T09:16:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:16:10.804 [DEBUG] [Thread-9051] [transport.py] [_log()] starting thread (client mode): 0xb6b633d0
2025-12-25T09:16:10.804 [DEBUG] [Thread-9051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:16:10.824 [DEBUG] [Thread-9051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:16:10.824 [INFO] [Thread-9051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] client lang: <none>
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] server lang: <none>
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] kex follows: False
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:16:10.827 [DEBUG] [Thread-9051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:16:10.828 [DEBUG] [Thread-9051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:16:10.828 [DEBUG] [Thread-9051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:16:10.828 [DEBUG] [Thread-9051] [transport.py] [_log()] Compression: none
2025-12-25T09:16:10.828 [DEBUG] [Thread-9051] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:16:10.847 [DEBUG] [Thread-9051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:16:10.848 [DEBUG] [Thread-9051] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:16:10.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:16:10.849 [DEBUG] [Thread-9051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:16:10.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:16:10.851 [DEBUG] [Thread-9051] [transport.py] [_log()] userauth is OK
2025-12-25T09:16:10.851 [DEBUG] [Thread-9051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:16:10.851 [DEBUG] [Thread-9051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:16:10.851 [DEBUG] [Thread-9051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:16:10.851 [DEBUG] [Thread-9051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:16:10.875 [INFO] [Thread-9051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:16:10.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:16:11.561 [DEBUG] [Thread-9051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:16:11.561 [DEBUG] [Thread-9051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:16:11.561 [DEBUG] [Thread-9051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:16:11.602 [DEBUG] [Thread-9051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:16:11.602 [DEBUG] [Thread-9051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:16:11.606 [DEBUG] [Thread-9051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:16:11.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:16:11.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:16:11.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:16:11.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:16:11.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:16:11.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:16:11.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:16:11.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:16:11.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:16:11.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.302494 -999.00  +19.50  15.37     58  +11.00 1 2 1 1 1   888    0 9.93 59.74 ----- 15.4 15.4 112.8 22.0 25.7 -30.2 25.3 -23.1 24.0 -22.2 24.4 -22.9
2025-12-25T09:16:11.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:16:11.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:16:11.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.302494
2025-12-25T09:16:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:16:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:16:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:16:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:16:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:16:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:15:45', tmtdew=10.58, humidity=50.91, cloud=0.0, wind=18.55, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:15:35.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:16:11.635 [DEBUG] [Thread-9051] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:16:11.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-25T09:16:11.728 [DEBUG] [Thread-9054] [transport.py] [_log()] starting thread (client mode): 0xb6b503d0
2025-12-25T09:16:11.728 [DEBUG] [Thread-9054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:16:11.743 [DEBUG] [Thread-9054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:16:11.743 [INFO] [Thread-9054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:16:11.753 [DEBUG] [Thread-9054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:16:11.753 [DEBUG] [Thread-9054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:16:11.753 [DEBUG] [Thread-9054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:16:11.753 [DEBUG] [Thread-9054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:11.753 [DEBUG] [Thread-9054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] client lang: <none>
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] server lang: <none>
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] kex follows: False
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] Compression: none
2025-12-25T09:16:11.754 [DEBUG] [Thread-9054] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:16:11.815 [DEBUG] [Thread-9054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:16:11.815 [DEBUG] [Thread-9054] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:16:11.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:16:11.816 [DEBUG] [Thread-9054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:16:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:16:11.876 [DEBUG] [Thread-9054] [transport.py] [_log()] userauth is OK
2025-12-25T09:16:11.876 [DEBUG] [Thread-9054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:16:11.876 [DEBUG] [Thread-9054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:16:11.876 [DEBUG] [Thread-9054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:16:11.876 [DEBUG] [Thread-9054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:16:11.896 [INFO] [Thread-9054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:16:11.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:16:11.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:16:12.681 [DEBUG] [Thread-9054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:16:12.684 [DEBUG] [Thread-9054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:16:12.730 [DEBUG] [Thread-9054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:16:12.730 [DEBUG] [Thread-9054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:16:12.739 [DEBUG] [Thread-9054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:16:12.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:16:12.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-25T09:16:12.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-25T09:16:12.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:16:12.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:16:12.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:16:12.781 [DEBUG] [Thread-9054] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:16:18.943 [DEBUG] [Thread-9056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:33.991 [DEBUG] [Thread-9057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:42.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:16:42.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:16:42.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-25T09:16:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 16, 17), 10.6, 50.88, 0.0, 16.59, 20.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:16:43.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:16:17
2025-12-25T09:16:43.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:16:43.750 [DEBUG] [Thread-9058] [transport.py] [_log()] starting thread (client mode): 0xb6b60c70
2025-12-25T09:16:43.751 [DEBUG] [Thread-9058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:16:43.772 [DEBUG] [Thread-9058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:16:43.772 [INFO] [Thread-9058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:16:43.775 [DEBUG] [Thread-9058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:16:43.775 [DEBUG] [Thread-9058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] client lang: <none>
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] server lang: <none>
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] kex follows: False
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:16:43.776 [DEBUG] [Thread-9058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:16:43.777 [DEBUG] [Thread-9058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:16:43.777 [DEBUG] [Thread-9058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:16:43.777 [DEBUG] [Thread-9058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:16:43.777 [DEBUG] [Thread-9058] [transport.py] [_log()] Compression: none
2025-12-25T09:16:43.777 [DEBUG] [Thread-9058] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:16:43.798 [DEBUG] [Thread-9058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:16:43.799 [DEBUG] [Thread-9058] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:16:43.800 [DEBUG] [Thread-9058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:16:43.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:16:43.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:16:43.802 [DEBUG] [Thread-9058] [transport.py] [_log()] userauth is OK
2025-12-25T09:16:43.802 [DEBUG] [Thread-9058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:16:43.802 [DEBUG] [Thread-9058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:16:43.802 [DEBUG] [Thread-9058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:16:43.802 [DEBUG] [Thread-9058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:16:43.838 [INFO] [Thread-9058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:16:43.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:16:44.604 [DEBUG] [Thread-9058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:16:44.604 [DEBUG] [Thread-9058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:16:44.605 [DEBUG] [Thread-9058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:16:44.645 [DEBUG] [Thread-9058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:16:44.645 [DEBUG] [Thread-9058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:16:44.648 [DEBUG] [Thread-9058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:16:44.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:16:44.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:16:44.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:16:44.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:16:44.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:16:44.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:16:44.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:16:44.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:16:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:16:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.302841 -999.00  +19.50  13.56     58  +11.00 1 2 1 1 1   888    0 9.88 57.42 ----- 13.6 13.6 89.7 19.6 25.6 -25.0 25.4 -23.6 24.1 -22.2 24.4 -22.7
2025-12-25T09:16:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:16:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:16:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.302841
2025-12-25T09:16:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:16:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:16:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:16:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:16:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:16:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:16:17', tmtdew=10.6, humidity=50.88, cloud=0.0, wind=16.59, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:16:05.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:16:44.669 [DEBUG] [Thread-9058] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:16: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-25T09:16:44.762 [DEBUG] [Thread-9061] [transport.py] [_log()] starting thread (client mode): 0xb6b62ec0
2025-12-25T09:16:44.763 [DEBUG] [Thread-9061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:16:44.777 [DEBUG] [Thread-9061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:16:44.777 [INFO] [Thread-9061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:16:44.786 [DEBUG] [Thread-9061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:16:44.786 [DEBUG] [Thread-9061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:16:44.786 [DEBUG] [Thread-9061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] client lang: <none>
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] server lang: <none>
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] kex follows: False
2025-12-25T09:16:44.787 [DEBUG] [Thread-9061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:16:44.788 [DEBUG] [Thread-9061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:16:44.788 [DEBUG] [Thread-9061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:16:44.788 [DEBUG] [Thread-9061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:16:44.788 [DEBUG] [Thread-9061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:16:44.788 [DEBUG] [Thread-9061] [transport.py] [_log()] Compression: none
2025-12-25T09:16:44.788 [DEBUG] [Thread-9061] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:16:44.844 [DEBUG] [Thread-9061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:16:44.844 [DEBUG] [Thread-9061] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:16:44.845 [DEBUG] [Thread-9061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:16:44.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:16:44.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:16:44.899 [DEBUG] [Thread-9061] [transport.py] [_log()] userauth is OK
2025-12-25T09:16:44.900 [DEBUG] [Thread-9061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:16:44.900 [DEBUG] [Thread-9061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:16:44.900 [DEBUG] [Thread-9061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:16:44.900 [DEBUG] [Thread-9061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:16:44.918 [INFO] [Thread-9061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:16:44.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:16:44.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:16:45.752 [DEBUG] [Thread-9061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:16:45.752 [DEBUG] [Thread-9061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:16:45.799 [DEBUG] [Thread-9061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:16:45.799 [DEBUG] [Thread-9061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:16:45.808 [DEBUG] [Thread-9061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:16:45.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:16:45.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:16:45.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-25T09:16:45.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:16:45.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:16:45.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:16:45.841 [DEBUG] [Thread-9061] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:16:49.029 [DEBUG] [Thread-9063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:51.830 [DEBUG] [Thread-9064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:52.434 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:16:52.436 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:04.079 [DEBUG] [Thread-9065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:15.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:17:15.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:17:15.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-25T09:17:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 16, 49), 10.51, 50.81, 0.0, 12.63, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:17:16.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:16:49
2025-12-25T09:17:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:17:16.826 [DEBUG] [Thread-9066] [transport.py] [_log()] starting thread (client mode): 0xb955b580
2025-12-25T09:17:16.827 [DEBUG] [Thread-9066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:17:16.847 [DEBUG] [Thread-9066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:17:16.847 [INFO] [Thread-9066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] client lang: <none>
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] server lang: <none>
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] kex follows: False
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:17:16.851 [DEBUG] [Thread-9066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:17:16.852 [DEBUG] [Thread-9066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:17:16.852 [DEBUG] [Thread-9066] [transport.py] [_log()] Compression: none
2025-12-25T09:17:16.852 [DEBUG] [Thread-9066] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:17:16.868 [DEBUG] [Thread-9066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:17:16.869 [DEBUG] [Thread-9066] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:17:16.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:17:16.870 [DEBUG] [Thread-9066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:17:16.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:17:16.872 [DEBUG] [Thread-9066] [transport.py] [_log()] userauth is OK
2025-12-25T09:17:16.872 [DEBUG] [Thread-9066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:17:16.872 [DEBUG] [Thread-9066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:17:16.872 [DEBUG] [Thread-9066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:17:16.872 [DEBUG] [Thread-9066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:17:16.889 [INFO] [Thread-9066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:17:16.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:17:17.525 [DEBUG] [Thread-9066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:17:17.525 [DEBUG] [Thread-9066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:17:17.525 [DEBUG] [Thread-9066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:17:17.566 [DEBUG] [Thread-9066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:17:17.566 [DEBUG] [Thread-9066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:17:17.570 [DEBUG] [Thread-9066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:17:17.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:17:17.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:17:17.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:17:17.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:17:17.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:17:17.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:17:17.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:17:17.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:17:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:17:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.303188 -999.00  +19.60  23.03     58  +11.10 1 2 1 1 1   888    0 9.92 57.41 ----- 23.0 23.0 60.2 25.6 25.8 -23.2 25.4 -23.3 24.1 -21.6 24.5 -22.2
2025-12-25T09:17:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:17:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:17:17.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.303188
2025-12-25T09:17:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:17:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:17:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:17:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:17:17.597 [DEBUG] [Thread-9066] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:17:17.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:17:17.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:16:49', tmtdew=10.51, humidity=50.81, cloud=0.0, wind=12.63, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:16:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:17:17.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-25T09:17:17.692 [DEBUG] [Thread-9069] [transport.py] [_log()] starting thread (client mode): 0xb6bab4f0
2025-12-25T09:17:17.692 [DEBUG] [Thread-9069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:17:17.707 [DEBUG] [Thread-9069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:17:17.707 [INFO] [Thread-9069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] client lang: <none>
2025-12-25T09:17:17.715 [DEBUG] [Thread-9069] [transport.py] [_log()] server lang: <none>
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] kex follows: False
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] Compression: none
2025-12-25T09:17:17.716 [DEBUG] [Thread-9069] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:17:17.776 [DEBUG] [Thread-9069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:17:17.777 [DEBUG] [Thread-9069] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:17:17.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:17:17.778 [DEBUG] [Thread-9069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:17:17.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:17:17.839 [DEBUG] [Thread-9069] [transport.py] [_log()] userauth is OK
2025-12-25T09:17:17.840 [DEBUG] [Thread-9069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:17:17.840 [DEBUG] [Thread-9069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:17:17.840 [DEBUG] [Thread-9069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:17:17.840 [DEBUG] [Thread-9069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:17:17.858 [INFO] [Thread-9069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:17:17.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-25T09:17:17.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:17:18.683 [DEBUG] [Thread-9069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:17:18.684 [DEBUG] [Thread-9069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:17:18.732 [DEBUG] [Thread-9069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:17:18.732 [DEBUG] [Thread-9069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:17:18.742 [DEBUG] [Thread-9069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:17:18.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:17:18.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-25T09:17:18.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-25T09:17:18.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:17:18.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:17:18.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:17:18.781 [DEBUG] [Thread-9069] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:17:19.117 [DEBUG] [Thread-9071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:34.168 [DEBUG] [Thread-9072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:48.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:17:48.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:17:48.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-25T09:17:49.199 [DEBUG] [Thread-9073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 17, 21), 10.51, 50.83, 0.0, 12.65, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:17:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:17:21
2025-12-25T09:17:49.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:17:49.778 [DEBUG] [Thread-9074] [transport.py] [_log()] starting thread (client mode): 0xb9558400
2025-12-25T09:17:49.778 [DEBUG] [Thread-9074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:17:49.799 [DEBUG] [Thread-9074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:17:49.799 [INFO] [Thread-9074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:17:49.802 [DEBUG] [Thread-9074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] client lang: <none>
2025-12-25T09:17:49.803 [DEBUG] [Thread-9074] [transport.py] [_log()] server lang: <none>
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] kex follows: False
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] Compression: none
2025-12-25T09:17:49.804 [DEBUG] [Thread-9074] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:17:49.824 [DEBUG] [Thread-9074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:17:49.825 [DEBUG] [Thread-9074] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:17:49.825 [DEBUG] [Thread-9074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:17:49.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:17:49.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:17:49.827 [DEBUG] [Thread-9074] [transport.py] [_log()] userauth is OK
2025-12-25T09:17:49.827 [DEBUG] [Thread-9074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:17:49.827 [DEBUG] [Thread-9074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:17:49.827 [DEBUG] [Thread-9074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:17:49.827 [DEBUG] [Thread-9074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:17:49.845 [INFO] [Thread-9074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:17:49.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:17:50.607 [DEBUG] [Thread-9074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:17:50.608 [DEBUG] [Thread-9074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:17:50.608 [DEBUG] [Thread-9074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:17:50.648 [DEBUG] [Thread-9074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:17:50.648 [DEBUG] [Thread-9074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:17:50.651 [DEBUG] [Thread-9074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:17:50.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:17:50.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:17:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:17:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:17:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:17:50.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:17:50.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:17:50.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:17:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:17:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.303535 -999.00  +19.60  15.67     58  +11.10 1 2 1 1 1   888    0 9.88 54.95 ----- 15.7 15.7 78.6 22.5 25.9 -22.9 25.4 -23.6 24.1 -21.5 24.5 -22.5
2025-12-25T09:17:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:17:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:17:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.303535
2025-12-25T09:17:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:17:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:17:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:17:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:17:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:17:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:17:21', tmtdew=10.51, humidity=50.83, cloud=0.0, wind=12.65, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:17:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:17:50.677 [DEBUG] [Thread-9074] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:17:50.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-25T09:17:50.770 [DEBUG] [Thread-9077] [transport.py] [_log()] starting thread (client mode): 0xb955a200
2025-12-25T09:17:50.770 [DEBUG] [Thread-9077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:17:50.784 [DEBUG] [Thread-9077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:17:50.784 [INFO] [Thread-9077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] client lang: <none>
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] server lang: <none>
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] kex follows: False
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:17:50.792 [DEBUG] [Thread-9077] [transport.py] [_log()] Compression: none
2025-12-25T09:17:50.793 [DEBUG] [Thread-9077] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:17:50.851 [DEBUG] [Thread-9077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:17:50.851 [DEBUG] [Thread-9077] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:17:50.852 [DEBUG] [Thread-9077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:17:50.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:17:50.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:17:50.907 [DEBUG] [Thread-9077] [transport.py] [_log()] userauth is OK
2025-12-25T09:17:50.908 [DEBUG] [Thread-9077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:17:50.908 [DEBUG] [Thread-9077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:17:50.908 [DEBUG] [Thread-9077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:17:50.908 [DEBUG] [Thread-9077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:17:50.927 [INFO] [Thread-9077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:17:50.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-25T09:17:50.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:17:51.777 [DEBUG] [Thread-9077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:17:51.777 [DEBUG] [Thread-9077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:17:51.825 [DEBUG] [Thread-9077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:17:51.825 [DEBUG] [Thread-9077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:17:51.834 [DEBUG] [Thread-9077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:17:51.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:17:51.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-25T09:17:51.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:17:51.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:17:51.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:17:51.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:17:51.874 [DEBUG] [Thread-9077] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:17:51.886 [DEBUG] [Thread-9079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:52.576 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:17:52.577 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:04.233 [DEBUG] [Thread-9080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:19.282 [DEBUG] [Thread-9081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:18:21.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:18:21.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:18:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 17, 53), 10.6, 50.49, 0.0, 15.02, 20.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:18:22.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:17:53
2025-12-25T09:18:22.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:18:22.879 [DEBUG] [Thread-9082] [transport.py] [_log()] starting thread (client mode): 0xb6b28730
2025-12-25T09:18:22.880 [DEBUG] [Thread-9082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:18:22.901 [DEBUG] [Thread-9082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:18:22.901 [INFO] [Thread-9082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:18:22.904 [DEBUG] [Thread-9082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] client lang: <none>
2025-12-25T09:18:22.905 [DEBUG] [Thread-9082] [transport.py] [_log()] server lang: <none>
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] kex follows: False
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] Compression: none
2025-12-25T09:18:22.906 [DEBUG] [Thread-9082] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:18:22.926 [DEBUG] [Thread-9082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:18:22.926 [DEBUG] [Thread-9082] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:18:22.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:18:22.927 [DEBUG] [Thread-9082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:18:22.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:18:22.929 [DEBUG] [Thread-9082] [transport.py] [_log()] userauth is OK
2025-12-25T09:18:22.930 [DEBUG] [Thread-9082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:18:22.930 [DEBUG] [Thread-9082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:18:22.930 [DEBUG] [Thread-9082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:18:22.930 [DEBUG] [Thread-9082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:18:22.953 [INFO] [Thread-9082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:18:22.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:18:23.620 [DEBUG] [Thread-9082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:18:23.621 [DEBUG] [Thread-9082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:18:23.621 [DEBUG] [Thread-9082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:18:23.662 [DEBUG] [Thread-9082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:18:23.662 [DEBUG] [Thread-9082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:18:23.665 [DEBUG] [Thread-9082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:18:23.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:18:23.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:18:23.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:18:23.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:18:23.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:18:23.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:18:23.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.303883 -999.00  +19.50  16.69     57  +10.90 1 2 1 1 1   888    0 10.09 58.89 ----- 16.7 16.7 69.4 19.5 25.9 -23.0 25.4 -23.6 24.1 -21.7 24.6 -22.8
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.303883
2025-12-25T09:18:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:18:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:18:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:18:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:18:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:18:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:17:53', tmtdew=10.6, humidity=50.49, cloud=0.0, wind=15.02, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:17:35.491', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:18:23.687 [DEBUG] [Thread-9082] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:18:23.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-25T09:18:23.784 [DEBUG] [Thread-9085] [transport.py] [_log()] starting thread (client mode): 0xb6b539d0
2025-12-25T09:18:23.784 [DEBUG] [Thread-9085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:18:23.806 [DEBUG] [Thread-9085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:18:23.806 [INFO] [Thread-9085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:18:23.822 [DEBUG] [Thread-9085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:18:23.822 [DEBUG] [Thread-9085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:18:23.822 [DEBUG] [Thread-9085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] client lang: <none>
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] server lang: <none>
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] kex follows: False
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:18:23.823 [DEBUG] [Thread-9085] [transport.py] [_log()] Compression: none
2025-12-25T09:18:23.824 [DEBUG] [Thread-9085] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:18:23.891 [DEBUG] [Thread-9085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:18:23.891 [DEBUG] [Thread-9085] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:18:23.892 [DEBUG] [Thread-9085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:18:23.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:18:23.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:18:23.972 [DEBUG] [Thread-9085] [transport.py] [_log()] userauth is OK
2025-12-25T09:18:23.972 [DEBUG] [Thread-9085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:18:23.972 [DEBUG] [Thread-9085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:18:23.972 [DEBUG] [Thread-9085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:18:23.972 [DEBUG] [Thread-9085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:18:23.998 [INFO] [Thread-9085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:18:23.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-25T09:18:23.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:18:24.856 [DEBUG] [Thread-9085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:18:24.857 [DEBUG] [Thread-9085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:18:24.908 [DEBUG] [Thread-9085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:18:24.908 [DEBUG] [Thread-9085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:18:24.918 [DEBUG] [Thread-9085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:18:24.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:18:24.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:18:24.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:18:24.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:18:24.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:18:24.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:18:24.958 [DEBUG] [Thread-9085] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:18:34.310 [DEBUG] [Thread-9087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:49.364 [DEBUG] [Thread-9088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:51.937 [DEBUG] [Thread-9089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:52.717 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:52.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:18:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:18:54.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:18: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-25T09:18:55.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 18, 25), 10.58, 50.58, 0.0, 18.61, 20.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:18:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:18:25
2025-12-25T09:18:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:18:55.965 [DEBUG] [Thread-9090] [transport.py] [_log()] starting thread (client mode): 0xb6b63910
2025-12-25T09:18:55.965 [DEBUG] [Thread-9090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:18:55.976 [DEBUG] [Thread-9090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:18:55.976 [INFO] [Thread-9090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:18:55.978 [DEBUG] [Thread-9090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:18:55.978 [DEBUG] [Thread-9090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:18:55.978 [DEBUG] [Thread-9090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:18:55.978 [DEBUG] [Thread-9090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:55.978 [DEBUG] [Thread-9090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:55.978 [DEBUG] [Thread-9090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] client lang: <none>
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] server lang: <none>
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] kex follows: False
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] Compression: none
2025-12-25T09:18:55.979 [DEBUG] [Thread-9090] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:18:55.990 [DEBUG] [Thread-9090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:18:55.990 [DEBUG] [Thread-9090] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:18:55.990 [DEBUG] [Thread-9090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:18:55.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:18:55.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:18:55.991 [DEBUG] [Thread-9090] [transport.py] [_log()] userauth is OK
2025-12-25T09:18:55.992 [DEBUG] [Thread-9090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:18:55.992 [DEBUG] [Thread-9090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:18:55.992 [DEBUG] [Thread-9090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:18:55.992 [DEBUG] [Thread-9090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:18:56.004 [INFO] [Thread-9090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:18:56.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:18:56.753 [DEBUG] [Thread-9090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:18:56.753 [DEBUG] [Thread-9090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:18:56.753 [DEBUG] [Thread-9090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:18:56.793 [DEBUG] [Thread-9090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:18:56.793 [DEBUG] [Thread-9090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:18:56.795 [DEBUG] [Thread-9090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:18:56.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:18:56.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:18:56.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:18:56.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:18:56.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:18:56.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:18:56.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:18:56.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.304577 -999.00  +19.60  13.46     57  +11.00 1 2 1 1 1   888    0 9.81 55.82 ----- 13.5 13.5 61.0 15.0 25.9 -23.5 25.6 -22.9 24.3 -20.7 24.6 -21.8
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.304577
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:18:56.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:18:25', tmtdew=10.58, humidity=50.58, cloud=0.0, wind=18.61, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:18:35.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:18:56.808 [DEBUG] [Thread-9090] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:18:56.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-25T09:18:56.905 [DEBUG] [Thread-9093] [transport.py] [_log()] starting thread (client mode): 0xb6b50bb0
2025-12-25T09:18:56.905 [DEBUG] [Thread-9093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:18:56.918 [DEBUG] [Thread-9093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:18:56.918 [INFO] [Thread-9093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] client lang: <none>
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] server lang: <none>
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] kex follows: False
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] Compression: none
2025-12-25T09:18:56.926 [DEBUG] [Thread-9093] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:18:56.981 [DEBUG] [Thread-9093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:18:56.982 [DEBUG] [Thread-9093] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:18:56.982 [DEBUG] [Thread-9093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:18:56.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:18:56.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:18:57.039 [DEBUG] [Thread-9093] [transport.py] [_log()] userauth is OK
2025-12-25T09:18:57.039 [DEBUG] [Thread-9093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:18:57.039 [DEBUG] [Thread-9093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:18:57.039 [DEBUG] [Thread-9093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:18:57.039 [DEBUG] [Thread-9093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:18:57.052 [INFO] [Thread-9093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:18:57.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-25T09:18:57.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:18:57.882 [DEBUG] [Thread-9093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:18:57.882 [DEBUG] [Thread-9093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:18:57.932 [DEBUG] [Thread-9093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:18:57.932 [DEBUG] [Thread-9093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:18:57.943 [DEBUG] [Thread-9093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:18:57.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:18:57.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:18:57.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:18:57.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:18:57.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:18:57.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:18:57.974 [DEBUG] [Thread-9093] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:19:04.397 [DEBUG] [Thread-9095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:19:19.452 [DEBUG] [Thread-9096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:19:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:19:27.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:19:28.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-25T09:19:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 18, 57), 10.83, 50.28, 0.0, 14.98, 20.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:19:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:18:57
2025-12-25T09:19:28.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:19:28.989 [DEBUG] [Thread-9097] [transport.py] [_log()] starting thread (client mode): 0xb6bb90c0
2025-12-25T09:19:28.989 [DEBUG] [Thread-9097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:19:29.010 [DEBUG] [Thread-9097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:19:29.010 [INFO] [Thread-9097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] client lang: <none>
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] server lang: <none>
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] kex follows: False
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:19:29.013 [DEBUG] [Thread-9097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:19:29.014 [DEBUG] [Thread-9097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:19:29.014 [DEBUG] [Thread-9097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:19:29.014 [DEBUG] [Thread-9097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:19:29.014 [DEBUG] [Thread-9097] [transport.py] [_log()] Compression: none
2025-12-25T09:19:29.014 [DEBUG] [Thread-9097] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:19:29.031 [DEBUG] [Thread-9097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:19:29.032 [DEBUG] [Thread-9097] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:19:29.033 [DEBUG] [Thread-9097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:19:29.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:19:29.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:19:29.035 [DEBUG] [Thread-9097] [transport.py] [_log()] userauth is OK
2025-12-25T09:19:29.035 [DEBUG] [Thread-9097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:19:29.035 [DEBUG] [Thread-9097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:19:29.035 [DEBUG] [Thread-9097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:19:29.035 [DEBUG] [Thread-9097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:19:29.060 [INFO] [Thread-9097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:19:29.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:19:29.705 [DEBUG] [Thread-9097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:19:29.705 [DEBUG] [Thread-9097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:19:29.705 [DEBUG] [Thread-9097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:19:29.746 [DEBUG] [Thread-9097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:19:29.747 [DEBUG] [Thread-9097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:19:29.750 [DEBUG] [Thread-9097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:19:29.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:19:29.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:19:29.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:19:29.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:19:29.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:19:29.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:19:29.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:19:29.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:19:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:19:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.304924 -999.00  +19.70  15.39     57  +11.10 1 2 1 1 1   888    0 9.94 55.73 ----- 15.4 15.4 75.9 17.3 26.1 -22.9 25.7 -22.6 24.3 -21.5 24.8 -22.1
2025-12-25T09:19:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:19:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:19:29.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.304924
2025-12-25T09:19:29.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:19:29.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:19:29.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:19:29.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:19:29.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:19:29.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:18:57', tmtdew=10.83, humidity=50.28, cloud=0.0, wind=14.98, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:19:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:19:29.779 [DEBUG] [Thread-9097] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:19:29.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-25T09:19:29.872 [DEBUG] [Thread-9100] [transport.py] [_log()] starting thread (client mode): 0xb6baba00
2025-12-25T09:19:29.872 [DEBUG] [Thread-9100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:19:29.886 [DEBUG] [Thread-9100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:19:29.886 [INFO] [Thread-9100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:19:29.893 [DEBUG] [Thread-9100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] client lang: <none>
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] server lang: <none>
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] kex follows: False
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] Compression: none
2025-12-25T09:19:29.894 [DEBUG] [Thread-9100] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:19:29.951 [DEBUG] [Thread-9100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:19:29.952 [DEBUG] [Thread-9100] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:19:29.953 [DEBUG] [Thread-9100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:19:29.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:19:29.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:19:30.007 [DEBUG] [Thread-9100] [transport.py] [_log()] userauth is OK
2025-12-25T09:19:30.008 [DEBUG] [Thread-9100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:19:30.008 [DEBUG] [Thread-9100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:19:30.008 [DEBUG] [Thread-9100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:19:30.008 [DEBUG] [Thread-9100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:19:30.027 [INFO] [Thread-9100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:19:30.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-25T09:19:30.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:19:30.891 [DEBUG] [Thread-9100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:19:30.891 [DEBUG] [Thread-9100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:19:30.938 [DEBUG] [Thread-9100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:19:30.938 [DEBUG] [Thread-9100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:19:30.946 [DEBUG] [Thread-9100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:19:30.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:19:30.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-25T09:19:30.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-25T09:19:30.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:19:30.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:19:30.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:19:30.978 [DEBUG] [Thread-9100] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:19:34.483 [DEBUG] [Thread-9102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:19:49.532 [DEBUG] [Thread-9103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:19:51.992 [DEBUG] [Thread-9104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:19:52.858 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:19:52.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:20:01.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:20:01.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-25T09:20:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 19, 29), 10.94, 49.95, 0.0, 11.15, 20.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:20:01.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:19:29
2025-12-25T09:20:01.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:20:02.010 [DEBUG] [Thread-9105] [transport.py] [_log()] starting thread (client mode): 0xb95593f0
2025-12-25T09:20:02.010 [DEBUG] [Thread-9105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:20:02.023 [DEBUG] [Thread-9105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:20:02.023 [INFO] [Thread-9105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] client lang: <none>
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] server lang: <none>
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] kex follows: False
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] Compression: none
2025-12-25T09:20:02.025 [DEBUG] [Thread-9105] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:20:02.033 [DEBUG] [Thread-9105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:20:02.033 [DEBUG] [Thread-9105] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:20:02.034 [DEBUG] [Thread-9105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:20:02.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:20:02.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:20:02.035 [DEBUG] [Thread-9105] [transport.py] [_log()] userauth is OK
2025-12-25T09:20:02.035 [DEBUG] [Thread-9105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:20:02.035 [DEBUG] [Thread-9105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:20:02.035 [DEBUG] [Thread-9105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:20:02.035 [DEBUG] [Thread-9105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:20:02.049 [INFO] [Thread-9105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:20:02.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:20:02.743 [DEBUG] [Thread-9105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:20:02.743 [DEBUG] [Thread-9105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:20:02.743 [DEBUG] [Thread-9105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:20:02.784 [DEBUG] [Thread-9105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:20:02.785 [DEBUG] [Thread-9105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:20:02.787 [DEBUG] [Thread-9105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:20:02.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:20:02.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:20:02.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:20:02.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:20:02.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:20:02.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:20:02.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.305272 -999.00  +19.80  14.13     57  +11.20 1 2 1 1 1   888    0 10.05 57.65 ----- 14.1 14.1 71.3 25.5 26.0 -24.0 25.7 -22.9 24.4 -21.9 24.8 -22.6
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.305272
2025-12-25T09:20:02.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:20:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:20:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:20:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:20:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:20:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:19:29', tmtdew=10.94, humidity=49.95, cloud=0.0, wind=11.15, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:19:35.501', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:20:02.805 [DEBUG] [Thread-9105] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:20:02.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-25T09:20:02.899 [DEBUG] [Thread-9108] [transport.py] [_log()] starting thread (client mode): 0xb6b503d0
2025-12-25T09:20:02.899 [DEBUG] [Thread-9108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:20:02.914 [DEBUG] [Thread-9108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:20:02.914 [INFO] [Thread-9108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] client lang: <none>
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] server lang: <none>
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] kex follows: False
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] Compression: none
2025-12-25T09:20:02.921 [DEBUG] [Thread-9108] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:20:02.978 [DEBUG] [Thread-9108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:20:02.978 [DEBUG] [Thread-9108] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:20:02.978 [DEBUG] [Thread-9108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:20:02.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:20:02.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:20:03.035 [DEBUG] [Thread-9108] [transport.py] [_log()] userauth is OK
2025-12-25T09:20:03.036 [DEBUG] [Thread-9108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:20:03.036 [DEBUG] [Thread-9108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:20:03.036 [DEBUG] [Thread-9108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:20:03.036 [DEBUG] [Thread-9108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:20:03.054 [INFO] [Thread-9108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:20:03.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:20:03.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:20:03.931 [DEBUG] [Thread-9108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:20:03.931 [DEBUG] [Thread-9108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:20:03.978 [DEBUG] [Thread-9108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:20:03.978 [DEBUG] [Thread-9108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:20:03.986 [DEBUG] [Thread-9108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:20:03.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:20:03.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-25T09:20:04.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:20:04.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:20:04.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:20:04.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:20:04.019 [DEBUG] [Thread-9108] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:20:04.567 [DEBUG] [Thread-9110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:19.617 [DEBUG] [Thread-9111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:34.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:20:34.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:20:34.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:20:34.654 [DEBUG] [Thread-9112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 20, 1), 10.85, 50.23, 0.0, 9.76, 20.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:20:34.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:20:01
2025-12-25T09:20:34.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:20:35.082 [DEBUG] [Thread-9113] [transport.py] [_log()] starting thread (client mode): 0xb6b22a40
2025-12-25T09:20:35.083 [DEBUG] [Thread-9113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:20:35.102 [DEBUG] [Thread-9113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:20:35.103 [INFO] [Thread-9113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] client lang: <none>
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] server lang: <none>
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] kex follows: False
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:20:35.106 [DEBUG] [Thread-9113] [transport.py] [_log()] Compression: none
2025-12-25T09:20:35.107 [DEBUG] [Thread-9113] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:20:35.123 [DEBUG] [Thread-9113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:20:35.124 [DEBUG] [Thread-9113] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:20:35.124 [DEBUG] [Thread-9113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:20:35.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:20:35.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:20:35.125 [DEBUG] [Thread-9113] [transport.py] [_log()] userauth is OK
2025-12-25T09:20:35.125 [DEBUG] [Thread-9113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:20:35.125 [DEBUG] [Thread-9113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:20:35.125 [DEBUG] [Thread-9113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:20:35.125 [DEBUG] [Thread-9113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:20:35.135 [INFO] [Thread-9113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:20:35.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:20:35.798 [DEBUG] [Thread-9113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:20:35.799 [DEBUG] [Thread-9113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:20:35.799 [DEBUG] [Thread-9113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:20:35.839 [DEBUG] [Thread-9113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:20:35.839 [DEBUG] [Thread-9113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:20:35.842 [DEBUG] [Thread-9113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:20:35.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:20:35.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:20:35.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:20:35.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:20:35.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:20:35.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:20:35.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.305619 -999.00  +19.90  15.02     57  +11.10 1 2 1 1 1   888    0 9.89 55.10 ----- 15.0 15.0 107.3 18.9 26.1 -22.8 25.8 -22.7 24.5 -21.8 24.8 -22.2
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.305619
2025-12-25T09:20:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:20:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:20:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:20:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:20:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:20:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:20:01', tmtdew=10.85, humidity=50.23, cloud=0.0, wind=9.76, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:20:05.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:20:35.862 [DEBUG] [Thread-9113] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:20:35.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-25T09:20:35.945 [DEBUG] [Thread-9116] [transport.py] [_log()] starting thread (client mode): 0xb6bab9d0
2025-12-25T09:20:35.945 [DEBUG] [Thread-9116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:20:35.960 [DEBUG] [Thread-9116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:20:35.960 [INFO] [Thread-9116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] client lang: <none>
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] server lang: <none>
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] kex follows: False
2025-12-25T09:20:35.967 [DEBUG] [Thread-9116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:20:35.968 [DEBUG] [Thread-9116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:20:35.968 [DEBUG] [Thread-9116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:20:35.968 [DEBUG] [Thread-9116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:20:35.968 [DEBUG] [Thread-9116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:20:35.968 [DEBUG] [Thread-9116] [transport.py] [_log()] Compression: none
2025-12-25T09:20:35.968 [DEBUG] [Thread-9116] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:20:36.025 [DEBUG] [Thread-9116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:20:36.026 [DEBUG] [Thread-9116] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:20:36.026 [DEBUG] [Thread-9116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:20:36.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:20:36.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:20:36.083 [DEBUG] [Thread-9116] [transport.py] [_log()] userauth is OK
2025-12-25T09:20:36.083 [DEBUG] [Thread-9116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:20:36.083 [DEBUG] [Thread-9116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:20:36.083 [DEBUG] [Thread-9116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:20:36.083 [DEBUG] [Thread-9116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:20:36.100 [INFO] [Thread-9116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:20:36.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-25T09:20:36.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:20:36.943 [DEBUG] [Thread-9116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:20:36.943 [DEBUG] [Thread-9116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:20:36.994 [DEBUG] [Thread-9116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:20:36.995 [DEBUG] [Thread-9116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:20:37.005 [DEBUG] [Thread-9116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:20:37.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:20:37.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:20:37.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-25T09:20:37.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:20:37.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:20:37.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:20:37.046 [DEBUG] [Thread-9116] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:20:49.685 [DEBUG] [Thread-9118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:52.033 [DEBUG] [Thread-9119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:52.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:20:52.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:04.738 [DEBUG] [Thread-9120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:07.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:21:07.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:21:07.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-25T09:21:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 20, 33), 10.65, 50.26, 0.0, 17.31, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:21:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:20:33
2025-12-25T09:21:07.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:21:08.099 [DEBUG] [Thread-9121] [transport.py] [_log()] starting thread (client mode): 0xb6b4b640
2025-12-25T09:21:08.099 [DEBUG] [Thread-9121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:21:08.119 [DEBUG] [Thread-9121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:21:08.119 [INFO] [Thread-9121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] client lang: <none>
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] server lang: <none>
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] kex follows: False
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] Compression: none
2025-12-25T09:21:08.122 [DEBUG] [Thread-9121] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:21:08.135 [DEBUG] [Thread-9121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:21:08.135 [DEBUG] [Thread-9121] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:21:08.136 [DEBUG] [Thread-9121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:21:08.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:21:08.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:21:08.136 [DEBUG] [Thread-9121] [transport.py] [_log()] userauth is OK
2025-12-25T09:21:08.136 [DEBUG] [Thread-9121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:21:08.136 [DEBUG] [Thread-9121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:21:08.136 [DEBUG] [Thread-9121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:21:08.136 [DEBUG] [Thread-9121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:21:08.151 [INFO] [Thread-9121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:21:08.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:21:08.810 [DEBUG] [Thread-9121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:21:08.811 [DEBUG] [Thread-9121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:21:08.811 [DEBUG] [Thread-9121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:21:08.851 [DEBUG] [Thread-9121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:21:08.851 [DEBUG] [Thread-9121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:21:08.855 [DEBUG] [Thread-9121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:21:08.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:21:08.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:21:08.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:21:08.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:21:08.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:21:08.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:21:08.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:21:08.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:21:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:21:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.305966 -999.00  +19.80  10.02     56  +11.00 1 2 1 1 1   888    0 9.98 56.50 ----- 10.0 10.0 86.8 14.2 26.2 -22.8 25.9 -22.5 24.5 -21.8 24.9 -22.6
2025-12-25T09:21:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:21:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:21:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.305966
2025-12-25T09:21:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:21:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:21:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:21:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:21:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:21:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:20:33', tmtdew=10.65, humidity=50.26, cloud=0.0, wind=17.31, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:20:35.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:21:08.881 [DEBUG] [Thread-9121] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:21:08.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-25T09:21:08.975 [DEBUG] [Thread-9124] [transport.py] [_log()] starting thread (client mode): 0xb6b492a0
2025-12-25T09:21:08.975 [DEBUG] [Thread-9124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:21:08.989 [DEBUG] [Thread-9124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:21:08.990 [INFO] [Thread-9124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:21:08.997 [DEBUG] [Thread-9124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:21:08.997 [DEBUG] [Thread-9124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] client lang: <none>
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] server lang: <none>
2025-12-25T09:21:08.998 [DEBUG] [Thread-9124] [transport.py] [_log()] kex follows: False
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] Compression: none
2025-12-25T09:21:08.999 [DEBUG] [Thread-9124] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:21:09.058 [DEBUG] [Thread-9124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:21:09.058 [DEBUG] [Thread-9124] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:21:09.059 [DEBUG] [Thread-9124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:21:09.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:21:09.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:21:09.115 [DEBUG] [Thread-9124] [transport.py] [_log()] userauth is OK
2025-12-25T09:21:09.116 [DEBUG] [Thread-9124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:21:09.116 [DEBUG] [Thread-9124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:21:09.116 [DEBUG] [Thread-9124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:21:09.116 [DEBUG] [Thread-9124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:21:09.135 [INFO] [Thread-9124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:21:09.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-25T09:21:09.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:21:09.982 [DEBUG] [Thread-9124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:21:09.982 [DEBUG] [Thread-9124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:21:10.030 [DEBUG] [Thread-9124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:21:10.030 [DEBUG] [Thread-9124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:21:10.039 [DEBUG] [Thread-9124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:21:10.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:21:10.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:21:10.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-25T09:21:10.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:21:10.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:21:10.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:21:10.075 [DEBUG] [Thread-9124] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:21:19.777 [DEBUG] [Thread-9126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:34.825 [DEBUG] [Thread-9127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:40.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:21:40.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:21:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:21:40.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 21, 5), 10.76, 49.86, 0.0, 14.95, 20.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:21:40.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:21:05
2025-12-25T09:21:40.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:21:41.080 [DEBUG] [Thread-9128] [transport.py] [_log()] starting thread (client mode): 0xb6b4b3d0
2025-12-25T09:21:41.080 [DEBUG] [Thread-9128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:21:41.101 [DEBUG] [Thread-9128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:21:41.101 [INFO] [Thread-9128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:21:41.104 [DEBUG] [Thread-9128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:21:41.104 [DEBUG] [Thread-9128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:21:41.104 [DEBUG] [Thread-9128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:21:41.104 [DEBUG] [Thread-9128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:41.104 [DEBUG] [Thread-9128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] client lang: <none>
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] server lang: <none>
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] kex follows: False
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] Compression: none
2025-12-25T09:21:41.105 [DEBUG] [Thread-9128] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:21:41.121 [DEBUG] [Thread-9128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:21:41.122 [DEBUG] [Thread-9128] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:21:41.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:21:41.123 [DEBUG] [Thread-9128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:21:41.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:21:41.125 [DEBUG] [Thread-9128] [transport.py] [_log()] userauth is OK
2025-12-25T09:21:41.125 [DEBUG] [Thread-9128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:21:41.125 [DEBUG] [Thread-9128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:21:41.126 [DEBUG] [Thread-9128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:21:41.126 [DEBUG] [Thread-9128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:21:41.151 [INFO] [Thread-9128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:21:41.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:21:41.791 [DEBUG] [Thread-9128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:21:41.791 [DEBUG] [Thread-9128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:21:41.791 [DEBUG] [Thread-9128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:21:41.832 [DEBUG] [Thread-9128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:21:41.832 [DEBUG] [Thread-9128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:21:41.836 [DEBUG] [Thread-9128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:21:41.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:21:41.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:21:41.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:21:41.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:21:41.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:21:41.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:21:41.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:21:41.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:21:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:21:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.306313 -999.00  +19.80  15.60     57  +11.10 1 2 1 1 1   888    0 9.95 52.51 ----- 15.6 15.6 70.4 16.9 26.2 -22.8 25.9 -22.9 24.5 -22.0 24.9 -22.3
2025-12-25T09:21:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:21:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:21:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.306313
2025-12-25T09:21:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:21:41.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:21:41.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:21:41.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:21:41.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:21:41.863 [DEBUG] [Thread-9128] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:21:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:21:05', tmtdew=10.76, humidity=49.86, cloud=0.0, wind=14.95, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:21:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:21:41.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-25T09:21:41.957 [DEBUG] [Thread-9131] [transport.py] [_log()] starting thread (client mode): 0xb6b49ed0
2025-12-25T09:21:41.957 [DEBUG] [Thread-9131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:21:41.971 [DEBUG] [Thread-9131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:21:41.971 [INFO] [Thread-9131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] client lang: <none>
2025-12-25T09:21:41.979 [DEBUG] [Thread-9131] [transport.py] [_log()] server lang: <none>
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] kex follows: False
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] Compression: none
2025-12-25T09:21:41.980 [DEBUG] [Thread-9131] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:21:42.043 [DEBUG] [Thread-9131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:21:42.044 [DEBUG] [Thread-9131] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:21:42.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:21:42.045 [DEBUG] [Thread-9131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:21:42.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:21:42.099 [DEBUG] [Thread-9131] [transport.py] [_log()] userauth is OK
2025-12-25T09:21:42.099 [DEBUG] [Thread-9131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:21:42.100 [DEBUG] [Thread-9131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:21:42.100 [DEBUG] [Thread-9131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:21:42.100 [DEBUG] [Thread-9131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:21:42.119 [INFO] [Thread-9131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:21:42.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-25T09:21:42.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:21:42.989 [DEBUG] [Thread-9131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:21:42.989 [DEBUG] [Thread-9131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:21:43.037 [DEBUG] [Thread-9131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:21:43.037 [DEBUG] [Thread-9131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:21:43.047 [DEBUG] [Thread-9131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:21:43.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:21:43.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-25T09:21:43.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-25T09:21:43.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:21:43.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:21:43.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:21:43.083 [DEBUG] [Thread-9131] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:21:49.855 [DEBUG] [Thread-9133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:52.091 [DEBUG] [Thread-9134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:53.138 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:21:53.139 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:04.910 [DEBUG] [Thread-9135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:13.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:22:13.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:22:13.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-25T09:22:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 22, 9), 10.59, 50.75, 0.0, 14.88, 20.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:22:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:22:09
2025-12-25T09:22:13.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:22:14.088 [DEBUG] [Thread-9136] [transport.py] [_log()] starting thread (client mode): 0xb6b4a080
2025-12-25T09:22:14.088 [DEBUG] [Thread-9136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:22:14.109 [DEBUG] [Thread-9136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:22:14.109 [INFO] [Thread-9136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] client lang: <none>
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] server lang: <none>
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] kex follows: False
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] Compression: none
2025-12-25T09:22:14.112 [DEBUG] [Thread-9136] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:22:14.128 [DEBUG] [Thread-9136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:22:14.128 [DEBUG] [Thread-9136] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:22:14.128 [DEBUG] [Thread-9136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:22:14.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:22:14.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:22:14.129 [DEBUG] [Thread-9136] [transport.py] [_log()] userauth is OK
2025-12-25T09:22:14.129 [DEBUG] [Thread-9136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:22:14.129 [DEBUG] [Thread-9136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:22:14.129 [DEBUG] [Thread-9136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:22:14.129 [DEBUG] [Thread-9136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:22:14.138 [INFO] [Thread-9136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:22:14.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:22:14.762 [DEBUG] [Thread-9136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:22:14.762 [DEBUG] [Thread-9136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:22:14.762 [DEBUG] [Thread-9136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:22:14.803 [DEBUG] [Thread-9136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:22:14.803 [DEBUG] [Thread-9136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:22:14.805 [DEBUG] [Thread-9136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:22:14.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:22:14.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:22:14.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:22:14.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:22:14.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:22:14.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:22:14.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.306660 -999.00  +19.90  13.46     56  +11.00 1 2 1 1 1   888    0 9.98 54.01 ----- 13.5 13.5 128.1 22.5 26.4 -22.4 26.0 -22.6 24.6 -23.0 24.9 -22.5
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.306660
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:22:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:22:09', tmtdew=10.59, humidity=50.75, cloud=0.0, wind=14.88, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:21:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:22:14.824 [DEBUG] [Thread-9136] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:22:14.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-25T09:22:14.913 [DEBUG] [Thread-9139] [transport.py] [_log()] starting thread (client mode): 0xb955ab60
2025-12-25T09:22:14.913 [DEBUG] [Thread-9139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:22:14.927 [DEBUG] [Thread-9139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:22:14.928 [INFO] [Thread-9139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] client lang: <none>
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] server lang: <none>
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] kex follows: False
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] Compression: none
2025-12-25T09:22:14.935 [DEBUG] [Thread-9139] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:22:15.002 [DEBUG] [Thread-9139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:22:15.002 [DEBUG] [Thread-9139] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:22:15.002 [DEBUG] [Thread-9139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:22:15.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:22:15.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:22:15.059 [DEBUG] [Thread-9139] [transport.py] [_log()] userauth is OK
2025-12-25T09:22:15.059 [DEBUG] [Thread-9139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:22:15.059 [DEBUG] [Thread-9139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:22:15.059 [DEBUG] [Thread-9139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:22:15.059 [DEBUG] [Thread-9139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:22:15.082 [INFO] [Thread-9139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:22:15.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-25T09:22:15.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:22:15.909 [DEBUG] [Thread-9139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:22:15.909 [DEBUG] [Thread-9139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:22:15.957 [DEBUG] [Thread-9139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:22:15.957 [DEBUG] [Thread-9139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:22:15.968 [DEBUG] [Thread-9139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:22:15.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:22:15.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-25T09:22:15.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-25T09:22:16.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:22:16.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:22:16.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:22:16.013 [DEBUG] [Thread-9139] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:22:19.942 [DEBUG] [Thread-9141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:34.996 [DEBUG] [Thread-9142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:46.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:22:46.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:22:46.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-25T09:22:46.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 22, 42), 10.58, 50.94, 0.0, 16.52, 20.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:22:46.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:22:42
2025-12-25T09:22:46.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:22:46.997 [DEBUG] [Thread-9143] [transport.py] [_log()] starting thread (client mode): 0xb95586d0
2025-12-25T09:22:46.997 [DEBUG] [Thread-9143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:22:47.019 [DEBUG] [Thread-9143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:22:47.019 [INFO] [Thread-9143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:22:47.022 [DEBUG] [Thread-9143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] client lang: <none>
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] server lang: <none>
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] kex follows: False
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] Compression: none
2025-12-25T09:22:47.023 [DEBUG] [Thread-9143] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:22:47.041 [DEBUG] [Thread-9143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:22:47.041 [DEBUG] [Thread-9143] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:22:47.042 [DEBUG] [Thread-9143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:22:47.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:22:47.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:22:47.044 [DEBUG] [Thread-9143] [transport.py] [_log()] userauth is OK
2025-12-25T09:22:47.045 [DEBUG] [Thread-9143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:22:47.045 [DEBUG] [Thread-9143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:22:47.045 [DEBUG] [Thread-9143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:22:47.045 [DEBUG] [Thread-9143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:22:47.063 [INFO] [Thread-9143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:22:47.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:22:47.651 [DEBUG] [Thread-9143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:22:47.651 [DEBUG] [Thread-9143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:22:47.651 [DEBUG] [Thread-9143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:22:47.693 [DEBUG] [Thread-9143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:22:47.693 [DEBUG] [Thread-9143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:22:47.695 [DEBUG] [Thread-9143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:22:47.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:22:47.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:22:47.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:22:47.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:22:47.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:22:47.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:22:47.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:22:47.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:22:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:22:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.307355 -999.00  +19.80  10.80     57  +11.00 1 1 1 1 1   888    0 9.70 46.25 ----- 10.8 10.8 102.4 20.1 26.2 -26.1 26.0 -23.3 24.6 -23.0 25.0 -23.3
2025-12-25T09:22:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:22:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:22:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.307355
2025-12-25T09:22:47.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:22:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:22:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:22:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:22:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:22:47.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:22:42', tmtdew=10.58, humidity=50.94, cloud=0.0, wind=16.52, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:22:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:22:47.721 [DEBUG] [Thread-9143] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:22:47.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-25T09:22:47.815 [DEBUG] [Thread-9146] [transport.py] [_log()] starting thread (client mode): 0xb955aaa0
2025-12-25T09:22:47.815 [DEBUG] [Thread-9146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:22:47.830 [DEBUG] [Thread-9146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:22:47.830 [INFO] [Thread-9146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:22:47.838 [DEBUG] [Thread-9146] [transport.py] [_log()] client lang: <none>
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] server lang: <none>
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] kex follows: False
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:22:47.839 [DEBUG] [Thread-9146] [transport.py] [_log()] Compression: none
2025-12-25T09:22:47.840 [DEBUG] [Thread-9146] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:22:47.895 [DEBUG] [Thread-9146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:22:47.896 [DEBUG] [Thread-9146] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:22:47.896 [DEBUG] [Thread-9146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:22:47.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:22:47.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:22:47.954 [DEBUG] [Thread-9146] [transport.py] [_log()] userauth is OK
2025-12-25T09:22:47.955 [DEBUG] [Thread-9146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:22:47.955 [DEBUG] [Thread-9146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:22:47.955 [DEBUG] [Thread-9146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:22:47.955 [DEBUG] [Thread-9146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:22:47.972 [INFO] [Thread-9146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:22:47.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-25T09:22:47.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:22:48.839 [DEBUG] [Thread-9146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:22:48.839 [DEBUG] [Thread-9146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:22:48.886 [DEBUG] [Thread-9146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:22:48.886 [DEBUG] [Thread-9146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:22:48.894 [DEBUG] [Thread-9146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:22:48.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:22:48.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-25T09:22:48.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-25T09:22:48.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:22:48.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:22:48.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:22:48.926 [DEBUG] [Thread-9146] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:22:50.028 [DEBUG] [Thread-9148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:52.139 [DEBUG] [Thread-9149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:53.281 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:22:53.282 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:05.069 [DEBUG] [Thread-9150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:18.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:23:18.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:23:18.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-25T09:23:19.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 23, 14), 10.76, 50.41, 0.0, 15.46, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:23:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:23:14
2025-12-25T09:23:19.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:23:19.927 [DEBUG] [Thread-9151] [transport.py] [_log()] starting thread (client mode): 0xb6b498a0
2025-12-25T09:23:19.927 [DEBUG] [Thread-9151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:23:19.948 [DEBUG] [Thread-9151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:23:19.948 [INFO] [Thread-9151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:19.949 [DEBUG] [Thread-9151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] client lang: <none>
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] server lang: <none>
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] kex follows: False
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] Compression: none
2025-12-25T09:23:19.950 [DEBUG] [Thread-9151] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:23:19.959 [DEBUG] [Thread-9151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:23:19.960 [DEBUG] [Thread-9151] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:23:19.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:23:19.961 [DEBUG] [Thread-9151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:23:19.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:23:19.963 [DEBUG] [Thread-9151] [transport.py] [_log()] userauth is OK
2025-12-25T09:23:19.963 [DEBUG] [Thread-9151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:23:19.963 [DEBUG] [Thread-9151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:23:19.963 [DEBUG] [Thread-9151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:23:19.963 [DEBUG] [Thread-9151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:23:19.977 [INFO] [Thread-9151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:23:19.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:23:20.104 [DEBUG] [Thread-9153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:20.580 [DEBUG] [Thread-9151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:23:20.580 [DEBUG] [Thread-9151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:23:20.580 [DEBUG] [Thread-9151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:23:20.621 [DEBUG] [Thread-9151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:23:20.621 [DEBUG] [Thread-9151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:23:20.624 [DEBUG] [Thread-9151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:23:20.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:23:20.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:23:20.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:23:20.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:23:20.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:23:20.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:23:20.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:23:20.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:23:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:23:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.307702 -999.00  +19.90  11.20     57  +11.10 1 2 1 1 1   888    0 9.83 47.50 ----- 11.2 11.2 105.3 18.4 26.3 -23.8 -999.0 -999.0 24.7 -21.8 25.0 -22.2
2025-12-25T09:23:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:23:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:23:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.307702
2025-12-25T09:23:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:23:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:23:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:23:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:23:20.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:23:20.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:23:14', tmtdew=10.76, humidity=50.41, cloud=0.0, wind=15.46, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:23:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:23:20.650 [DEBUG] [Thread-9151] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:23:20.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-25T09:23:20.747 [DEBUG] [Thread-9155] [transport.py] [_log()] starting thread (client mode): 0xb955a260
2025-12-25T09:23:20.747 [DEBUG] [Thread-9155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:23:20.762 [DEBUG] [Thread-9155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:23:20.762 [INFO] [Thread-9155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:23:20.769 [DEBUG] [Thread-9155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] client lang: <none>
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] server lang: <none>
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] kex follows: False
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:23:20.770 [DEBUG] [Thread-9155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:23:20.771 [DEBUG] [Thread-9155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:23:20.771 [DEBUG] [Thread-9155] [transport.py] [_log()] Compression: none
2025-12-25T09:23:20.771 [DEBUG] [Thread-9155] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:23:20.827 [DEBUG] [Thread-9155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:23:20.828 [DEBUG] [Thread-9155] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:23:20.829 [DEBUG] [Thread-9155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:23:20.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:23:20.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:23:20.887 [DEBUG] [Thread-9155] [transport.py] [_log()] userauth is OK
2025-12-25T09:23:20.887 [DEBUG] [Thread-9155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:23:20.887 [DEBUG] [Thread-9155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:23:20.887 [DEBUG] [Thread-9155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:23:20.887 [DEBUG] [Thread-9155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:23:20.902 [INFO] [Thread-9155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:23:20.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-25T09:23:20.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:23:21.759 [DEBUG] [Thread-9155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:23:21.760 [DEBUG] [Thread-9155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:23:21.808 [DEBUG] [Thread-9155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:23:21.808 [DEBUG] [Thread-9155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:23:21.818 [DEBUG] [Thread-9155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:23:21.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:23:21.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-25T09:23:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:23:21.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:23:21.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:23:21.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:23:21.855 [DEBUG] [Thread-9155] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:23:35.137 [DEBUG] [Thread-9157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:50.191 [DEBUG] [Thread-9158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:51.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:23:51.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:23:51.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:23:52.183 [DEBUG] [Thread-9159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 23, 46), 10.85, 49.95, 0.0, 16.83, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:23:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:23:46
2025-12-25T09:23:52.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:23:52.823 [DEBUG] [Thread-9160] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2025-12-25T09:23:52.823 [DEBUG] [Thread-9160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:23:52.844 [DEBUG] [Thread-9160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:23:52.844 [INFO] [Thread-9160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] client lang: <none>
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] server lang: <none>
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] kex follows: False
2025-12-25T09:23:52.847 [DEBUG] [Thread-9160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:23:52.848 [DEBUG] [Thread-9160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:23:52.848 [DEBUG] [Thread-9160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:23:52.848 [DEBUG] [Thread-9160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:23:52.848 [DEBUG] [Thread-9160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:23:52.848 [DEBUG] [Thread-9160] [transport.py] [_log()] Compression: none
2025-12-25T09:23:52.848 [DEBUG] [Thread-9160] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:23:52.865 [DEBUG] [Thread-9160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:23:52.865 [DEBUG] [Thread-9160] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:23:52.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:23:52.866 [DEBUG] [Thread-9160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:23:52.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:23:52.909 [DEBUG] [Thread-9160] [transport.py] [_log()] userauth is OK
2025-12-25T09:23:52.909 [DEBUG] [Thread-9160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:23:52.909 [DEBUG] [Thread-9160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:23:52.909 [DEBUG] [Thread-9160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:23:52.910 [DEBUG] [Thread-9160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:23:52.942 [INFO] [Thread-9160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:23:52.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:23:53.420 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:53.421 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:23:53.579 [DEBUG] [Thread-9160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:23:53.580 [DEBUG] [Thread-9160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:23:53.580 [DEBUG] [Thread-9160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:23:53.621 [DEBUG] [Thread-9160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:23:53.622 [DEBUG] [Thread-9160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:23:53.625 [DEBUG] [Thread-9160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:23:53.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:23:53.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:23:53.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:23:53.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:23:53.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:23:53.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:23:53.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:23:53.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:23:53.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:23:53.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.308049 -999.00  +20.10  17.14     56  +11.10 1 2 1 1 1   888    0 9.92 51.35 ----- 17.1 17.1 93.5 25.7 26.4 -23.0 26.2 -22.7 24.8 -21.9 25.1 -23.2
2025-12-25T09:23:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:23:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:23:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.308049
2025-12-25T09:23:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:23:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:23:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:23:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:23:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:23:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:23:46', tmtdew=10.85, humidity=49.95, cloud=0.0, wind=16.83, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:23:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:23:53.653 [DEBUG] [Thread-9160] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:23:53.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-25T09:23:53.747 [DEBUG] [Thread-9163] [transport.py] [_log()] starting thread (client mode): 0xb6bb9660
2025-12-25T09:23:53.747 [DEBUG] [Thread-9163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:23:53.762 [DEBUG] [Thread-9163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:23:53.762 [INFO] [Thread-9163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] client lang: <none>
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] server lang: <none>
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] kex follows: False
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:23:53.770 [DEBUG] [Thread-9163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:23:53.771 [DEBUG] [Thread-9163] [transport.py] [_log()] Compression: none
2025-12-25T09:23:53.771 [DEBUG] [Thread-9163] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:23:53.827 [DEBUG] [Thread-9163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:23:53.828 [DEBUG] [Thread-9163] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:23:53.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:23:53.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:23:53.830 [DEBUG] [Thread-9163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:23:53.883 [DEBUG] [Thread-9163] [transport.py] [_log()] userauth is OK
2025-12-25T09:23:53.884 [DEBUG] [Thread-9163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:23:53.884 [DEBUG] [Thread-9163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:23:53.884 [DEBUG] [Thread-9163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:23:53.884 [DEBUG] [Thread-9163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:23:53.904 [INFO] [Thread-9163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:23:53.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-25T09:23:53.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:23:54.734 [DEBUG] [Thread-9163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:23:54.734 [DEBUG] [Thread-9163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:23:54.782 [DEBUG] [Thread-9163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:23:54.782 [DEBUG] [Thread-9163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:23:54.792 [DEBUG] [Thread-9163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:23:54.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:23:54.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:23:54.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:23:54.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:23:54.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:23:54.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:23:54.831 [DEBUG] [Thread-9163] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:24:05.230 [DEBUG] [Thread-9165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:20.273 [DEBUG] [Thread-9166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:24.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:24:24.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:24:24.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:24:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 24, 18), 10.94, 49.7, 0.0, 17.01, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:24:25.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:24:18
2025-12-25T09:24:25.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:24:25.839 [DEBUG] [Thread-9167] [transport.py] [_log()] starting thread (client mode): 0xb6bbbe80
2025-12-25T09:24:25.839 [DEBUG] [Thread-9167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:24:25.859 [DEBUG] [Thread-9167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:24:25.859 [INFO] [Thread-9167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] client lang: <none>
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] server lang: <none>
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] kex follows: False
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] Compression: none
2025-12-25T09:24:25.862 [DEBUG] [Thread-9167] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:24:25.880 [DEBUG] [Thread-9167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:24:25.880 [DEBUG] [Thread-9167] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:24:25.881 [DEBUG] [Thread-9167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:24:25.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:24:25.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:24:25.882 [DEBUG] [Thread-9167] [transport.py] [_log()] userauth is OK
2025-12-25T09:24:25.882 [DEBUG] [Thread-9167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:24:25.882 [DEBUG] [Thread-9167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:24:25.883 [DEBUG] [Thread-9167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:24:25.883 [DEBUG] [Thread-9167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:24:25.905 [INFO] [Thread-9167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:24:25.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:24:26.499 [DEBUG] [Thread-9167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:24:26.499 [DEBUG] [Thread-9167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:24:26.499 [DEBUG] [Thread-9167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:24:26.539 [DEBUG] [Thread-9167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:24:26.540 [DEBUG] [Thread-9167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:24:26.542 [DEBUG] [Thread-9167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:24:26.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:24:26.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:24:26.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:24:26.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:24:26.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:24:26.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:24:26.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:24:26.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:24:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:24:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.308397 -999.00  +20.10  15.47     56  +11.00 1 2 1 1 1   888    0 10.04 55.28 ----- 15.5 15.5 121.4 18.9 26.4 -23.8 26.1 -23.2 24.9 -21.6 25.1 -22.4
2025-12-25T09:24:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:24:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:24:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.308397
2025-12-25T09:24:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:24:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:24:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:24:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:24:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:24:26.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:24:18', tmtdew=10.94, humidity=49.7, cloud=0.0, wind=17.01, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:24:05.501', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:24:26.565 [DEBUG] [Thread-9167] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:24:26.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:24:26.658 [DEBUG] [Thread-9170] [transport.py] [_log()] starting thread (client mode): 0xb6b489d0
2025-12-25T09:24:26.658 [DEBUG] [Thread-9170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:24:26.672 [DEBUG] [Thread-9170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:24:26.673 [INFO] [Thread-9170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:24:26.680 [DEBUG] [Thread-9170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:24:26.681 [DEBUG] [Thread-9170] [transport.py] [_log()] client lang: <none>
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] server lang: <none>
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] kex follows: False
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] Compression: none
2025-12-25T09:24:26.682 [DEBUG] [Thread-9170] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:24:26.740 [DEBUG] [Thread-9170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:24:26.740 [DEBUG] [Thread-9170] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:24:26.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:24:26.741 [DEBUG] [Thread-9170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:24:26.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:24:26.799 [DEBUG] [Thread-9170] [transport.py] [_log()] userauth is OK
2025-12-25T09:24:26.799 [DEBUG] [Thread-9170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:24:26.799 [DEBUG] [Thread-9170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:24:26.799 [DEBUG] [Thread-9170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:24:26.799 [DEBUG] [Thread-9170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:24:26.818 [INFO] [Thread-9170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:24:26.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:24:26.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:24:27.687 [DEBUG] [Thread-9170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:24:27.687 [DEBUG] [Thread-9170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:24:27.735 [DEBUG] [Thread-9170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:24:27.735 [DEBUG] [Thread-9170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:24:27.744 [DEBUG] [Thread-9170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:24:27.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:24: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-25T09:24: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-25T09:24:27.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:24:27.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:24:27.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:24:27.781 [DEBUG] [Thread-9170] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:24:35.307 [DEBUG] [Thread-9172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:50.356 [DEBUG] [Thread-9173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:52.228 [DEBUG] [Thread-9174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:53.559 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:53.560 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:24:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:24:57.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:24: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-25T09:24:58.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 24, 50), 11.15, 49.27, 0.0, 13.52, 20.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:24:58.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:24:50
2025-12-25T09:24:58.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:24:58.793 [DEBUG] [Thread-9175] [transport.py] [_log()] starting thread (client mode): 0xb6bb9fc0
2025-12-25T09:24:58.793 [DEBUG] [Thread-9175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:24:58.812 [DEBUG] [Thread-9175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:24:58.812 [INFO] [Thread-9175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] client lang: <none>
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] server lang: <none>
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] kex follows: False
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] Compression: none
2025-12-25T09:24:58.816 [DEBUG] [Thread-9175] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:24:58.833 [DEBUG] [Thread-9175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:24:58.833 [DEBUG] [Thread-9175] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:24:58.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:24:58.834 [DEBUG] [Thread-9175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:24:58.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:24:58.836 [DEBUG] [Thread-9175] [transport.py] [_log()] userauth is OK
2025-12-25T09:24:58.836 [DEBUG] [Thread-9175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:24:58.836 [DEBUG] [Thread-9175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:24:58.836 [DEBUG] [Thread-9175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:24:58.836 [DEBUG] [Thread-9175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:24:58.860 [INFO] [Thread-9175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:24:58.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:24:59.516 [DEBUG] [Thread-9175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:24:59.516 [DEBUG] [Thread-9175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:24:59.517 [DEBUG] [Thread-9175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:24:59.557 [DEBUG] [Thread-9175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:24:59.557 [DEBUG] [Thread-9175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:24:59.560 [DEBUG] [Thread-9175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:24:59.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:24:59.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:24:59.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:24:59.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:24:59.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:24:59.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:24:59.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:24:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:24:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:24:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.308744 -999.00  +20.10  15.67     56  +11.00 1 2 1 1 1   888    0 9.94 51.36 ----- 15.7 15.7 72.3 20.9 26.4 -23.2 26.2 -23.0 24.9 -21.8 25.2 -22.3
2025-12-25T09:24:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:24:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:24:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.308744
2025-12-25T09:24:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:24:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:24:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:24:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:24:59.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:24:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:24:50', tmtdew=11.15, humidity=49.27, cloud=0.0, wind=13.52, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:24:35.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:24:59.586 [DEBUG] [Thread-9175] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:24:59.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-25T09:24:59.681 [DEBUG] [Thread-9178] [transport.py] [_log()] starting thread (client mode): 0xb955a110
2025-12-25T09:24:59.681 [DEBUG] [Thread-9178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:24:59.697 [DEBUG] [Thread-9178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:24:59.697 [INFO] [Thread-9178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:24:59.704 [DEBUG] [Thread-9178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] client lang: <none>
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] server lang: <none>
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] kex follows: False
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] Compression: none
2025-12-25T09:24:59.705 [DEBUG] [Thread-9178] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:24:59.762 [DEBUG] [Thread-9178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:24:59.763 [DEBUG] [Thread-9178] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:24:59.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:24:59.763 [DEBUG] [Thread-9178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:24:59.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:24:59.819 [DEBUG] [Thread-9178] [transport.py] [_log()] userauth is OK
2025-12-25T09:24:59.819 [DEBUG] [Thread-9178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:24:59.819 [DEBUG] [Thread-9178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:24:59.819 [DEBUG] [Thread-9178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:24:59.819 [DEBUG] [Thread-9178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:24:59.843 [INFO] [Thread-9178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:24:59.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-25T09:24:59.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:25:00.683 [DEBUG] [Thread-9178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:25:00.683 [DEBUG] [Thread-9178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:25:00.732 [DEBUG] [Thread-9178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:25:00.732 [DEBUG] [Thread-9178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:25:00.741 [DEBUG] [Thread-9178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:25:00.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:25:00.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-25T09:25:00.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-25T09:25:00.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:25:00.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:25:00.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:25:00.775 [DEBUG] [Thread-9178] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:25:05.389 [DEBUG] [Thread-9180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:25:20.442 [DEBUG] [Thread-9181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:25:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:25:30.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:25:30.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-25T09:25:31.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 25, 22), 11.19, 49.14, 0.0, 16.53, 20.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:25:31.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:25:22
2025-12-25T09:25:31.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:25:31.765 [DEBUG] [Thread-9182] [transport.py] [_log()] starting thread (client mode): 0xb9558970
2025-12-25T09:25:31.765 [DEBUG] [Thread-9182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:25:31.781 [DEBUG] [Thread-9182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:25:31.781 [INFO] [Thread-9182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] client lang: <none>
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] server lang: <none>
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] kex follows: False
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] Compression: none
2025-12-25T09:25:31.783 [DEBUG] [Thread-9182] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:25:31.796 [DEBUG] [Thread-9182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:25:31.797 [DEBUG] [Thread-9182] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:25:31.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:25:31.806 [DEBUG] [Thread-9182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:25:31.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:25:31.809 [DEBUG] [Thread-9182] [transport.py] [_log()] userauth is OK
2025-12-25T09:25:31.809 [DEBUG] [Thread-9182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:25:31.809 [DEBUG] [Thread-9182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:25:31.809 [DEBUG] [Thread-9182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:25:31.809 [DEBUG] [Thread-9182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:25:31.832 [INFO] [Thread-9182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:25:31.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:25:32.395 [DEBUG] [Thread-9182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:25:32.396 [DEBUG] [Thread-9182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:25:32.396 [DEBUG] [Thread-9182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:25:32.436 [DEBUG] [Thread-9182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:25:32.436 [DEBUG] [Thread-9182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:25:32.440 [DEBUG] [Thread-9182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:25:32.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:25:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:25:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:25:32.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:25:32.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:25:32.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:25:32.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:25:32.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:25:32.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:25:32.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.309091 -999.00  +19.90   9.73     55  +10.80 1 1 1 1 1   888    0 9.98 51.81 ----- 9.7 9.7 98.4 26.3 26.4 -24.6 26.2 -24.4 24.8 -22.7 25.2 -23.0
2025-12-25T09:25:32.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:25:32.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:25:32.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.309091
2025-12-25T09:25:32.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:25:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:25:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:25:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:25:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:25:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:25:22', tmtdew=11.19, humidity=49.14, cloud=0.0, wind=16.53, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:25:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:25:32.468 [DEBUG] [Thread-9182] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:25:32.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:25:32.562 [DEBUG] [Thread-9185] [transport.py] [_log()] starting thread (client mode): 0xb6bba230
2025-12-25T09:25:32.562 [DEBUG] [Thread-9185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:25:32.577 [DEBUG] [Thread-9185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:25:32.577 [INFO] [Thread-9185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:25:32.585 [DEBUG] [Thread-9185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:25:32.585 [DEBUG] [Thread-9185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] client lang: <none>
2025-12-25T09:25:32.586 [DEBUG] [Thread-9185] [transport.py] [_log()] server lang: <none>
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] kex follows: False
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] Compression: none
2025-12-25T09:25:32.587 [DEBUG] [Thread-9185] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:25:32.646 [DEBUG] [Thread-9185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:25:32.647 [DEBUG] [Thread-9185] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:25:32.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:25:32.648 [DEBUG] [Thread-9185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:25:32.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:25:32.703 [DEBUG] [Thread-9185] [transport.py] [_log()] userauth is OK
2025-12-25T09:25:32.704 [DEBUG] [Thread-9185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:25:32.704 [DEBUG] [Thread-9185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:25:32.704 [DEBUG] [Thread-9185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:25:32.704 [DEBUG] [Thread-9185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:25:32.723 [INFO] [Thread-9185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:25:32.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-25T09:25:32.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:25:33.593 [DEBUG] [Thread-9185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:25:33.593 [DEBUG] [Thread-9185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:25:33.641 [DEBUG] [Thread-9185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:25:33.641 [DEBUG] [Thread-9185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:25:33.651 [DEBUG] [Thread-9185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:25:33.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:25:33.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:25:33.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-25T09:25:33.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:25:33.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:25:33.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:25:33.688 [DEBUG] [Thread-9185] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:25:35.476 [DEBUG] [Thread-9187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:25:50.527 [DEBUG] [Thread-9188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:25:52.278 [DEBUG] [Thread-9189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:25:53.701 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:25:53.702 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:03.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:26:03.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:26:03.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-25T09:26:04.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 25, 54), 11.18, 49.02, 0.0, 17.71, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:26:04.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:25:54
2025-12-25T09:26:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:26:04.739 [DEBUG] [Thread-9190] [transport.py] [_log()] starting thread (client mode): 0xb6b50310
2025-12-25T09:26:04.739 [DEBUG] [Thread-9190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:26:04.752 [DEBUG] [Thread-9190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:26:04.753 [INFO] [Thread-9190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] client lang: <none>
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] server lang: <none>
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] kex follows: False
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] Compression: none
2025-12-25T09:26:04.754 [DEBUG] [Thread-9190] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:26:04.762 [DEBUG] [Thread-9190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:26:04.762 [DEBUG] [Thread-9190] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:26:04.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:26:04.762 [DEBUG] [Thread-9190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:26:04.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:26:04.763 [DEBUG] [Thread-9190] [transport.py] [_log()] userauth is OK
2025-12-25T09:26:04.763 [DEBUG] [Thread-9190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:26:04.763 [DEBUG] [Thread-9190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:26:04.763 [DEBUG] [Thread-9190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:26:04.763 [DEBUG] [Thread-9190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:26:04.783 [INFO] [Thread-9190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:26:04.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:26:05.367 [DEBUG] [Thread-9190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:26:05.367 [DEBUG] [Thread-9190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:26:05.367 [DEBUG] [Thread-9190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:26:05.407 [DEBUG] [Thread-9190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:26:05.408 [DEBUG] [Thread-9190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:26:05.409 [DEBUG] [Thread-9190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:26:05.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:26:05.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:26:05.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:26:05.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:26:05.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:26:05.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:26:05.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.309438 -999.00  +20.00  11.97     55  +10.90 1 2 1 1 1   888    0 10.27 55.83 ----- 12.0 12.0 89.3 17.9 26.6 -23.0 26.3 -22.9 25.0 -21.7 25.3 -22.4
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.309438
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:26:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:25:54', tmtdew=11.18, humidity=49.02, cloud=0.0, wind=17.71, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:25:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:26:05.427 [DEBUG] [Thread-9190] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:26:05.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-25T09:26:05.511 [DEBUG] [Thread-9193] [transport.py] [_log()] starting thread (client mode): 0xb6bab8e0
2025-12-25T09:26:05.511 [DEBUG] [Thread-9193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:26:05.526 [DEBUG] [Thread-9193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:26:05.526 [INFO] [Thread-9193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] client lang: <none>
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] server lang: <none>
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] kex follows: False
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:26:05.534 [DEBUG] [Thread-9193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:26:05.535 [DEBUG] [Thread-9193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:26:05.535 [DEBUG] [Thread-9193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:26:05.535 [DEBUG] [Thread-9193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:26:05.535 [DEBUG] [Thread-9193] [transport.py] [_log()] Compression: none
2025-12-25T09:26:05.535 [DEBUG] [Thread-9193] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:26:05.558 [DEBUG] [Thread-9195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:05.590 [DEBUG] [Thread-9193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:26:05.590 [DEBUG] [Thread-9193] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:26:05.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:26:05.590 [DEBUG] [Thread-9193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:26:05.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:26:05.646 [DEBUG] [Thread-9193] [transport.py] [_log()] userauth is OK
2025-12-25T09:26:05.646 [DEBUG] [Thread-9193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:26:05.646 [DEBUG] [Thread-9193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:26:05.647 [DEBUG] [Thread-9193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:26:05.647 [DEBUG] [Thread-9193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:26:05.660 [INFO] [Thread-9193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:26:05.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-25T09:26:05.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:26:06.517 [DEBUG] [Thread-9193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:26:06.517 [DEBUG] [Thread-9193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:26:06.565 [DEBUG] [Thread-9193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:26:06.565 [DEBUG] [Thread-9193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:26:06.574 [DEBUG] [Thread-9193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:26:06.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:26:06.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-25T09:26:06.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-25T09:26:06.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:26:06.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:26:06.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:26:06.609 [DEBUG] [Thread-9193] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:26:20.597 [DEBUG] [Thread-9196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:35.632 [DEBUG] [Thread-9197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:36.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:26:36.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:26:36.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:26:37.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 26, 26), 11.18, 49.0, 0.0, 14.08, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:26:37.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:26:26
2025-12-25T09:26:37.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:26:37.598 [DEBUG] [Thread-9198] [transport.py] [_log()] starting thread (client mode): 0xb6b536a0
2025-12-25T09:26:37.598 [DEBUG] [Thread-9198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:26:37.620 [DEBUG] [Thread-9198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:26:37.620 [INFO] [Thread-9198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:26:37.623 [DEBUG] [Thread-9198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:26:37.623 [DEBUG] [Thread-9198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:26:37.623 [DEBUG] [Thread-9198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:26:37.623 [DEBUG] [Thread-9198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] client lang: <none>
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] server lang: <none>
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] kex follows: False
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:26:37.624 [DEBUG] [Thread-9198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:26:37.625 [DEBUG] [Thread-9198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:26:37.625 [DEBUG] [Thread-9198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:26:37.625 [DEBUG] [Thread-9198] [transport.py] [_log()] Compression: none
2025-12-25T09:26:37.625 [DEBUG] [Thread-9198] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:26:37.644 [DEBUG] [Thread-9198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:26:37.644 [DEBUG] [Thread-9198] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:26:37.645 [DEBUG] [Thread-9198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:26:37.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:26:37.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:26:37.647 [DEBUG] [Thread-9198] [transport.py] [_log()] userauth is OK
2025-12-25T09:26:37.647 [DEBUG] [Thread-9198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:26:37.647 [DEBUG] [Thread-9198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:26:37.647 [DEBUG] [Thread-9198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:26:37.647 [DEBUG] [Thread-9198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:26:37.664 [INFO] [Thread-9198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:26:37.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:26:38.263 [DEBUG] [Thread-9198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:26:38.263 [DEBUG] [Thread-9198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:26:38.263 [DEBUG] [Thread-9198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:26:38.304 [DEBUG] [Thread-9198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:26:38.304 [DEBUG] [Thread-9198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:26:38.308 [DEBUG] [Thread-9198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:26:38.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:26:38.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:26:38.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:26:38.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:26:38.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:26:38.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:26:38.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:26:38.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:26:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:26:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.309785 -999.00  +20.20  14.87     55  +11.10 1 2 1 1 1   888    0 10.36 61.18 ----- 14.9 14.9 107.6 23.1 26.7 -25.2 26.3 -23.9 24.9 -21.9 25.3 -22.6
2025-12-25T09:26:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:26:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:26:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.309785
2025-12-25T09:26:38.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:26:38.332 [DEBUG] [Thread-9198] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:26:38.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:26:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:26:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:26:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:26:38.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:26:26', tmtdew=11.18, humidity=49.0, cloud=0.0, wind=14.08, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:26:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:26:38.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-25T09:26:50.664 [DEBUG] [Thread-9201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:52.328 [DEBUG] [Thread-9202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:53.848 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:26:53.850 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:05.715 [DEBUG] [Thread-9203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:20.748 [DEBUG] [Thread-9204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:35.780 [DEBUG] [Thread-9205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:50.818 [DEBUG] [Thread-9206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:52.380 [DEBUG] [Thread-9207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:53.990 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:27:53.991 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:05.850 [DEBUG] [Thread-9208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:20.888 [DEBUG] [Thread-9209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:35.924 [DEBUG] [Thread-9210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:50.952 [DEBUG] [Thread-9211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:52.181 [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-25T09:28:52.432 [DEBUG] [Thread-9212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:54.129 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:28:54.131 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:05.991 [DEBUG] [Thread-9213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:21.018 [DEBUG] [Thread-9214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:29:22.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:29:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:29:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 29, 6), 11.27, 48.3, 0.0, 20.45, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:29:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:29:06
2025-12-25T09:29:23.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:29:23.200 [DEBUG] [Thread-9215] [transport.py] [_log()] starting thread (client mode): 0xb6b51390
2025-12-25T09:29:23.200 [DEBUG] [Thread-9215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:29:23.220 [DEBUG] [Thread-9215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:29:23.221 [INFO] [Thread-9215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] client lang: <none>
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] server lang: <none>
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] kex follows: False
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] Compression: none
2025-12-25T09:29:23.224 [DEBUG] [Thread-9215] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:29:23.242 [DEBUG] [Thread-9215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:29:23.243 [DEBUG] [Thread-9215] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:29:23.244 [DEBUG] [Thread-9215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:29:23.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:29:23.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:29:23.246 [DEBUG] [Thread-9215] [transport.py] [_log()] userauth is OK
2025-12-25T09:29:23.246 [DEBUG] [Thread-9215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:29:23.246 [DEBUG] [Thread-9215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:29:23.247 [DEBUG] [Thread-9215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:29:23.247 [DEBUG] [Thread-9215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:29:23.283 [INFO] [Thread-9215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:29:23.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:29:23.935 [DEBUG] [Thread-9215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:29:23.935 [DEBUG] [Thread-9215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:29:23.936 [DEBUG] [Thread-9215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:29:23.976 [DEBUG] [Thread-9215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:29:23.976 [DEBUG] [Thread-9215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:29:23.980 [DEBUG] [Thread-9215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:29:23.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:29:23.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:29:23.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:29:23.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:29:24.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:29:24.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:29:24.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:29:24.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:29:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:29:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.311521 -999.00  +20.30  18.25     55  +11.10 1 2 1 1 1   888    0 10.48 59.46 ----- 18.2 18.2 93.4 25.0 26.6 -23.2 26.4 -24.6 25.1 -21.2 25.4 -21.8
2025-12-25T09:29:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:29:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:29:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.311521
2025-12-25T09:29:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:29:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:29:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:29:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:29:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:29:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:29:06', tmtdew=11.27, humidity=48.3, cloud=0.0, wind=20.45, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:28:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:29:24.006 [DEBUG] [Thread-9215] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:29:24.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-25T09:29:24.113 [DEBUG] [Thread-9218] [transport.py] [_log()] starting thread (client mode): 0xb95586a0
2025-12-25T09:29:24.114 [DEBUG] [Thread-9218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:29:24.127 [DEBUG] [Thread-9218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:29:24.128 [INFO] [Thread-9218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:29:24.135 [DEBUG] [Thread-9218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:29:24.136 [DEBUG] [Thread-9218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] client lang: <none>
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] server lang: <none>
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] kex follows: False
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:29:24.137 [DEBUG] [Thread-9218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:29:24.138 [DEBUG] [Thread-9218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:29:24.138 [DEBUG] [Thread-9218] [transport.py] [_log()] Compression: none
2025-12-25T09:29:24.138 [DEBUG] [Thread-9218] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:29:24.200 [DEBUG] [Thread-9218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:29:24.200 [DEBUG] [Thread-9218] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:29:24.201 [DEBUG] [Thread-9218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:29:24.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:29:24.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:29:24.255 [DEBUG] [Thread-9218] [transport.py] [_log()] userauth is OK
2025-12-25T09:29:24.256 [DEBUG] [Thread-9218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:29:24.256 [DEBUG] [Thread-9218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:29:24.256 [DEBUG] [Thread-9218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:29:24.256 [DEBUG] [Thread-9218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:29:24.274 [INFO] [Thread-9218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:29:24.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-25T09:29:24.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:29:25.160 [DEBUG] [Thread-9218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:29:25.160 [DEBUG] [Thread-9218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:29:25.208 [DEBUG] [Thread-9218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:29:25.208 [DEBUG] [Thread-9218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:29:25.217 [DEBUG] [Thread-9218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:29:25.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:29:25.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-25T09:29:25.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-25T09:29:25.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:29:25.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:29:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:29:25.259 [DEBUG] [Thread-9218] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:29:36.054 [DEBUG] [Thread-9220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:51.106 [DEBUG] [Thread-9221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:52.486 [DEBUG] [Thread-9222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:54.269 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:54.271 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:29:55.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:29:55.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:29:55.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:29:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 29, 38), 11.46, 47.85, 0.0, 15.84, 21.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:29:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:29:38
2025-12-25T09:29:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:29:56.286 [DEBUG] [Thread-9223] [transport.py] [_log()] starting thread (client mode): 0xb955beb0
2025-12-25T09:29:56.286 [DEBUG] [Thread-9223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:29:56.305 [DEBUG] [Thread-9223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:29:56.305 [INFO] [Thread-9223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] client lang: <none>
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] server lang: <none>
2025-12-25T09:29:56.308 [DEBUG] [Thread-9223] [transport.py] [_log()] kex follows: False
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] Compression: none
2025-12-25T09:29:56.309 [DEBUG] [Thread-9223] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:29:56.324 [DEBUG] [Thread-9223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:29:56.324 [DEBUG] [Thread-9223] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:29:56.325 [DEBUG] [Thread-9223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:29:56.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:29:56.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:29:56.325 [DEBUG] [Thread-9223] [transport.py] [_log()] userauth is OK
2025-12-25T09:29:56.326 [DEBUG] [Thread-9223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:29:56.326 [DEBUG] [Thread-9223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:29:56.326 [DEBUG] [Thread-9223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:29:56.326 [DEBUG] [Thread-9223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:29:56.353 [INFO] [Thread-9223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:29:56.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:29:56.964 [DEBUG] [Thread-9223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:29:56.964 [DEBUG] [Thread-9223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:29:56.964 [DEBUG] [Thread-9223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:29:57.006 [DEBUG] [Thread-9223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:29:57.006 [DEBUG] [Thread-9223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:29:57.008 [DEBUG] [Thread-9223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:29:57.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:29:57.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:29:57.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:29:57.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:29:57.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:29:57.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:29:57.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.311869 -999.00  +20.60  14.78     54  +11.10 1 2 1 1 1   888    0 10.55 59.75 ----- 14.8 14.8 77.6 27.0 26.8 -23.2 26.4 -23.5 25.1 -21.6 25.4 -22.5
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.311869
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:29:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:29:38', tmtdew=11.46, humidity=47.85, cloud=0.0, wind=15.84, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:29:05.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:29:57.025 [DEBUG] [Thread-9223] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:29:57.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:29:57.111 [DEBUG] [Thread-9226] [transport.py] [_log()] starting thread (client mode): 0xb6b488b0
2025-12-25T09:29:57.111 [DEBUG] [Thread-9226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:29:57.125 [DEBUG] [Thread-9226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:29:57.125 [INFO] [Thread-9226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] client lang: <none>
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] server lang: <none>
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] kex follows: False
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] Compression: none
2025-12-25T09:29:57.133 [DEBUG] [Thread-9226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:29:57.189 [DEBUG] [Thread-9226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:29:57.190 [DEBUG] [Thread-9226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:29:57.190 [DEBUG] [Thread-9226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:29:57.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:29:57.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:29:57.251 [DEBUG] [Thread-9226] [transport.py] [_log()] userauth is OK
2025-12-25T09:29:57.251 [DEBUG] [Thread-9226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:29:57.251 [DEBUG] [Thread-9226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:29:57.251 [DEBUG] [Thread-9226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:29:57.251 [DEBUG] [Thread-9226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:29:57.266 [INFO] [Thread-9226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:29: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-25T09:29:57.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:29:58.086 [DEBUG] [Thread-9226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:29:58.086 [DEBUG] [Thread-9226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:29:58.134 [DEBUG] [Thread-9226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:29:58.134 [DEBUG] [Thread-9226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:29:58.142 [DEBUG] [Thread-9226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:29:58.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:29:58.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:29:58.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-25T09:29:58.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:29:58.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:29:58.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:29:58.173 [DEBUG] [Thread-9226] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:30:06.135 [DEBUG] [Thread-9228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:30:21.179 [DEBUG] [Thread-9229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:30:28.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:30:28.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:30:28.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:30:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 30, 10), 11.48, 47.82, 0.0, 15.95, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:30:28.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:30:10
2025-12-25T09:30:29.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:30:29.153 [DEBUG] [Thread-9230] [transport.py] [_log()] starting thread (client mode): 0xb6b503a0
2025-12-25T09:30:29.153 [DEBUG] [Thread-9230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:30:29.173 [DEBUG] [Thread-9230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:30:29.174 [INFO] [Thread-9230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] client lang: <none>
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] server lang: <none>
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] kex follows: False
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] Compression: none
2025-12-25T09:30:29.177 [DEBUG] [Thread-9230] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:30:29.194 [DEBUG] [Thread-9230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:30:29.195 [DEBUG] [Thread-9230] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:30:29.195 [DEBUG] [Thread-9230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:30:29.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:30:29.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:30:29.197 [DEBUG] [Thread-9230] [transport.py] [_log()] userauth is OK
2025-12-25T09:30:29.198 [DEBUG] [Thread-9230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:30:29.198 [DEBUG] [Thread-9230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:30:29.198 [DEBUG] [Thread-9230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:30:29.198 [DEBUG] [Thread-9230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:30:29.212 [INFO] [Thread-9230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:30:29.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:30:29.838 [DEBUG] [Thread-9230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:30:29.839 [DEBUG] [Thread-9230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:30:29.839 [DEBUG] [Thread-9230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:30:29.880 [DEBUG] [Thread-9230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:30:29.880 [DEBUG] [Thread-9230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:30:29.884 [DEBUG] [Thread-9230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:30:29.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:30:29.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:30:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:30:29.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:30:29.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:30:29.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:30:29.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:30:29.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:30:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:30:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.312216 -999.00  +20.70  16.69     54  +11.10 1 2 1 1 1   888    0 10.45 63.25 ----- 16.7 16.7 54.0 24.3 26.8 -23.0 26.5 -22.9 25.2 -22.3 25.6 -22.6
2025-12-25T09:30:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:30:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:30:29.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.312216
2025-12-25T09:30:29.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:30:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:30:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:30:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:30:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:30:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:30:10', tmtdew=11.48, humidity=47.82, cloud=0.0, wind=15.95, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:29:35.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:30:29.912 [DEBUG] [Thread-9230] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:30:29.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-25T09:30:30.007 [DEBUG] [Thread-9233] [transport.py] [_log()] starting thread (client mode): 0xb6b22590
2025-12-25T09:30:30.008 [DEBUG] [Thread-9233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:30:30.022 [DEBUG] [Thread-9233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:30:30.022 [INFO] [Thread-9233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:30:30.030 [DEBUG] [Thread-9233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:30:30.030 [DEBUG] [Thread-9233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:30:30.031 [DEBUG] [Thread-9233] [transport.py] [_log()] client lang: <none>
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] server lang: <none>
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] kex follows: False
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] Compression: none
2025-12-25T09:30:30.032 [DEBUG] [Thread-9233] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:30:30.096 [DEBUG] [Thread-9233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:30:30.097 [DEBUG] [Thread-9233] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:30:30.097 [DEBUG] [Thread-9233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:30:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:30:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:30:30.155 [DEBUG] [Thread-9233] [transport.py] [_log()] userauth is OK
2025-12-25T09:30:30.156 [DEBUG] [Thread-9233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:30:30.156 [DEBUG] [Thread-9233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:30:30.156 [DEBUG] [Thread-9233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:30:30.156 [DEBUG] [Thread-9233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:30:30.174 [INFO] [Thread-9233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:30:30.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-25T09:30:30.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:30:31.067 [DEBUG] [Thread-9233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:30:31.067 [DEBUG] [Thread-9233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:30:31.115 [DEBUG] [Thread-9233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:30:31.115 [DEBUG] [Thread-9233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:30:31.125 [DEBUG] [Thread-9233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:30:31.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:30:31.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:30:31.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-25T09:30:31.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:30:31.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:30:31.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:30:31.163 [DEBUG] [Thread-9233] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:30:36.207 [DEBUG] [Thread-9235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:30:51.248 [DEBUG] [Thread-9236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:30:52.549 [DEBUG] [Thread-9237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:30:54.411 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:30:54.412 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:31:01.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:31:01.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-25T09:31:01.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 30, 42), 11.8, 46.82, 0.0, 18.67, 21.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:31:01.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:30:42
2025-12-25T09:31:02.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:31:02.195 [DEBUG] [Thread-9238] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2025-12-25T09:31:02.195 [DEBUG] [Thread-9238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:31:02.215 [DEBUG] [Thread-9238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:31:02.216 [INFO] [Thread-9238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:31:02.218 [DEBUG] [Thread-9238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] client lang: <none>
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] server lang: <none>
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] kex follows: False
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] Compression: none
2025-12-25T09:31:02.219 [DEBUG] [Thread-9238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:31:02.236 [DEBUG] [Thread-9238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:31:02.237 [DEBUG] [Thread-9238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:31:02.237 [DEBUG] [Thread-9238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:31:02.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:31:02.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:31:02.281 [DEBUG] [Thread-9238] [transport.py] [_log()] userauth is OK
2025-12-25T09:31:02.281 [DEBUG] [Thread-9238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:31:02.281 [DEBUG] [Thread-9238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:31:02.281 [DEBUG] [Thread-9238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:31:02.281 [DEBUG] [Thread-9238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:31:02.306 [INFO] [Thread-9238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:31:02.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:31:02.965 [DEBUG] [Thread-9238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:31:02.965 [DEBUG] [Thread-9238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:31:02.966 [DEBUG] [Thread-9238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:31:03.006 [DEBUG] [Thread-9238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:31:03.006 [DEBUG] [Thread-9238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:31:03.010 [DEBUG] [Thread-9238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:31:03.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:31:03.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:31:03.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:31:03.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:31:03.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:31:03.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:31:03.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:31:03.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:31:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:31:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.312563 -999.00  +20.70  17.76     53  +11.00 1 1 1 1 1   888    0 10.43 56.91 ----- 17.8 17.8 90.5 29.1 26.9 -22.7 26.5 -23.2 25.2 -23.3 25.5 -24.1
2025-12-25T09:31:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:31:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:31:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.312563
2025-12-25T09:31:03.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:31:03.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:31:03.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:31:03.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:31:03.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:31:03.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:30:42', tmtdew=11.8, humidity=46.82, cloud=0.0, wind=18.67, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:30:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:31:03.035 [DEBUG] [Thread-9238] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:31:03.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-25T09:31:03.128 [DEBUG] [Thread-9241] [transport.py] [_log()] starting thread (client mode): 0xb6b53c70
2025-12-25T09:31:03.128 [DEBUG] [Thread-9241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:31:03.142 [DEBUG] [Thread-9241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:31:03.142 [INFO] [Thread-9241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] client lang: <none>
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] server lang: <none>
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] kex follows: False
2025-12-25T09:31:03.150 [DEBUG] [Thread-9241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:31:03.151 [DEBUG] [Thread-9241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:31:03.151 [DEBUG] [Thread-9241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:31:03.151 [DEBUG] [Thread-9241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:31:03.151 [DEBUG] [Thread-9241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:31:03.151 [DEBUG] [Thread-9241] [transport.py] [_log()] Compression: none
2025-12-25T09:31:03.151 [DEBUG] [Thread-9241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:31:03.207 [DEBUG] [Thread-9241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:31:03.208 [DEBUG] [Thread-9241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:31:03.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:31:03.209 [DEBUG] [Thread-9241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:31:03.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:31:03.263 [DEBUG] [Thread-9241] [transport.py] [_log()] userauth is OK
2025-12-25T09:31:03.264 [DEBUG] [Thread-9241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:31:03.264 [DEBUG] [Thread-9241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:31:03.264 [DEBUG] [Thread-9241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:31:03.264 [DEBUG] [Thread-9241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:31:03.283 [INFO] [Thread-9241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:31:03.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:31:03.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:31:04.107 [DEBUG] [Thread-9241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:31:04.107 [DEBUG] [Thread-9241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:31:04.155 [DEBUG] [Thread-9241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:31:04.155 [DEBUG] [Thread-9241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:31:04.164 [DEBUG] [Thread-9241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:31:04.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:31:04.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-25T09:31:04.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:31:04.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:31:04.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:31:04.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:31:04.201 [DEBUG] [Thread-9241] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:31:06.284 [DEBUG] [Thread-9243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:21.334 [DEBUG] [Thread-9244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:34.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:31:34.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:31:34.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-25T09:31:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 31, 14), 11.84, 46.7, 0.0, 18.28, 21.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:31:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:31:14
2025-12-25T09:31:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:31:35.184 [DEBUG] [Thread-9245] [transport.py] [_log()] starting thread (client mode): 0xb6b636a0
2025-12-25T09:31:35.184 [DEBUG] [Thread-9245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:31:35.205 [DEBUG] [Thread-9245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:31:35.205 [INFO] [Thread-9245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] client lang: <none>
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] server lang: <none>
2025-12-25T09:31:35.208 [DEBUG] [Thread-9245] [transport.py] [_log()] kex follows: False
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] Compression: none
2025-12-25T09:31:35.209 [DEBUG] [Thread-9245] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:31:35.226 [DEBUG] [Thread-9245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:31:35.226 [DEBUG] [Thread-9245] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:31:35.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:31:35.227 [DEBUG] [Thread-9245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:31:35.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:31:35.229 [DEBUG] [Thread-9245] [transport.py] [_log()] userauth is OK
2025-12-25T09:31:35.229 [DEBUG] [Thread-9245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:31:35.229 [DEBUG] [Thread-9245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:31:35.229 [DEBUG] [Thread-9245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:31:35.230 [DEBUG] [Thread-9245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:31:35.253 [INFO] [Thread-9245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:31:35.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:31:35.902 [DEBUG] [Thread-9245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:31:35.902 [DEBUG] [Thread-9245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:31:35.902 [DEBUG] [Thread-9245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:31:35.943 [DEBUG] [Thread-9245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:31:35.943 [DEBUG] [Thread-9245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:31:35.946 [DEBUG] [Thread-9245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:31:35.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:31:35.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:31:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:31:35.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:31:35.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:31:35.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:31:35.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:31:35.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:31:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:31:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.312910 -999.00  +20.60  19.79     53  +10.80 1 2 1 1 1   888    0 10.50 60.49 ----- 19.8 19.8 49.4 21.7 26.9 -24.2 26.5 -23.4 25.2 -22.0 25.6 -22.5
2025-12-25T09:31:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:31:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:31:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.312910
2025-12-25T09:31:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:31:35.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:31:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:31:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:31:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:31:35.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:31:14', tmtdew=11.84, humidity=46.7, cloud=0.0, wind=18.28, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:30:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:31:35.971 [DEBUG] [Thread-9245] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:31:36.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-25T09:31:36.064 [DEBUG] [Thread-9248] [transport.py] [_log()] starting thread (client mode): 0xb6bb9fc0
2025-12-25T09:31:36.064 [DEBUG] [Thread-9248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:31:36.077 [DEBUG] [Thread-9248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:31:36.077 [INFO] [Thread-9248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:31:36.085 [DEBUG] [Thread-9248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:31:36.085 [DEBUG] [Thread-9248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:31:36.085 [DEBUG] [Thread-9248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] client lang: <none>
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] server lang: <none>
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] kex follows: False
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] Compression: none
2025-12-25T09:31:36.086 [DEBUG] [Thread-9248] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:31:36.143 [DEBUG] [Thread-9248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:31:36.144 [DEBUG] [Thread-9248] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:31:36.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:31:36.145 [DEBUG] [Thread-9248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:31:36.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:31:36.203 [DEBUG] [Thread-9248] [transport.py] [_log()] userauth is OK
2025-12-25T09:31:36.204 [DEBUG] [Thread-9248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:31:36.204 [DEBUG] [Thread-9248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:31:36.204 [DEBUG] [Thread-9248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:31:36.204 [DEBUG] [Thread-9248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:31:36.223 [INFO] [Thread-9248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:31:36.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-25T09:31:36.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:31:36.373 [DEBUG] [Thread-9250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:37.046 [DEBUG] [Thread-9248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:31:37.046 [DEBUG] [Thread-9248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:31:37.094 [DEBUG] [Thread-9248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:31:37.094 [DEBUG] [Thread-9248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:31:37.103 [DEBUG] [Thread-9248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:31:37.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:31:37.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-25T09:31:37.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-25T09:31:37.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:31:37.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:31:37.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:31:37.140 [DEBUG] [Thread-9248] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:31:51.432 [DEBUG] [Thread-9251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:52.602 [DEBUG] [Thread-9252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:54.569 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:31:54.570 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:06.464 [DEBUG] [Thread-9253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:32:07.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:32:07.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-25T09:32:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 31, 47), 11.96, 46.3, 0.0, 21.37, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:32:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:31:47
2025-12-25T09:32:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:32:08.156 [DEBUG] [Thread-9254] [transport.py] [_log()] starting thread (client mode): 0xb6ba9270
2025-12-25T09:32:08.157 [DEBUG] [Thread-9254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:32:08.178 [DEBUG] [Thread-9254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:32:08.178 [INFO] [Thread-9254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:32:08.181 [DEBUG] [Thread-9254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] client lang: <none>
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] server lang: <none>
2025-12-25T09:32:08.182 [DEBUG] [Thread-9254] [transport.py] [_log()] kex follows: False
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] Compression: none
2025-12-25T09:32:08.183 [DEBUG] [Thread-9254] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:32:08.203 [DEBUG] [Thread-9254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:32:08.204 [DEBUG] [Thread-9254] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:32:08.205 [DEBUG] [Thread-9254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:32:08.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:32:08.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:32:08.207 [DEBUG] [Thread-9254] [transport.py] [_log()] userauth is OK
2025-12-25T09:32:08.207 [DEBUG] [Thread-9254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:32:08.207 [DEBUG] [Thread-9254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:32:08.207 [DEBUG] [Thread-9254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:32:08.207 [DEBUG] [Thread-9254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:32:08.243 [INFO] [Thread-9254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:32:08.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:32:08.865 [DEBUG] [Thread-9254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:32:08.865 [DEBUG] [Thread-9254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:32:08.865 [DEBUG] [Thread-9254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:32:08.906 [DEBUG] [Thread-9254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:32:08.906 [DEBUG] [Thread-9254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:32:08.910 [DEBUG] [Thread-9254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:32:08.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:32:08.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:32:08.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:32:08.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:32:08.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:32:08.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:32:08.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.313605 -999.00  +20.20  19.06     54  +10.70 1 1 1 1 1   888    0 10.58 59.80 ----- 19.1 19.1 56.4 21.5 26.9 -23.4 26.4 -24.4 24.9 -22.7 25.5 -22.5
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.313605
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:32:08.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:31:47', tmtdew=11.96, humidity=46.3, cloud=0.0, wind=21.37, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:31:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:32:08.932 [DEBUG] [Thread-9254] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:32:09.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-25T09:32:09.020 [DEBUG] [Thread-9257] [transport.py] [_log()] starting thread (client mode): 0xb6b49390
2025-12-25T09:32:09.020 [DEBUG] [Thread-9257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:32:09.034 [DEBUG] [Thread-9257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:32:09.035 [INFO] [Thread-9257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] client lang: <none>
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] server lang: <none>
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] kex follows: False
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:32:09.044 [DEBUG] [Thread-9257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:32:09.045 [DEBUG] [Thread-9257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:32:09.045 [DEBUG] [Thread-9257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:32:09.045 [DEBUG] [Thread-9257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:32:09.045 [DEBUG] [Thread-9257] [transport.py] [_log()] Compression: none
2025-12-25T09:32:09.045 [DEBUG] [Thread-9257] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:32:09.104 [DEBUG] [Thread-9257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:32:09.104 [DEBUG] [Thread-9257] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:32:09.105 [DEBUG] [Thread-9257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:32:09.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:32:09.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:32:09.164 [DEBUG] [Thread-9257] [transport.py] [_log()] userauth is OK
2025-12-25T09:32:09.164 [DEBUG] [Thread-9257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:32:09.164 [DEBUG] [Thread-9257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:32:09.164 [DEBUG] [Thread-9257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:32:09.165 [DEBUG] [Thread-9257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:32:09.183 [INFO] [Thread-9257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:32:09.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-25T09:32:09.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:32:10.058 [DEBUG] [Thread-9257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:32:10.058 [DEBUG] [Thread-9257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:32:10.107 [DEBUG] [Thread-9257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:32:10.107 [DEBUG] [Thread-9257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:32:10.116 [DEBUG] [Thread-9257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:32:10.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:32: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-25T09:32: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-25T09:32:10.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:32:10.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:32:10.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:32:10.153 [DEBUG] [Thread-9257] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:32:21.497 [DEBUG] [Thread-9259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:36.534 [DEBUG] [Thread-9260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:40.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:32:40.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:32:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:32:40.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 32, 19), 11.98, 46.24, 0.0, 19.46, 21.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:32:40.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:32:19
2025-12-25T09:32:41.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:32:41.174 [DEBUG] [Thread-9261] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T09:32:41.175 [DEBUG] [Thread-9261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:32:41.195 [DEBUG] [Thread-9261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:32:41.195 [INFO] [Thread-9261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:32:41.198 [DEBUG] [Thread-9261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:32:41.198 [DEBUG] [Thread-9261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:32:41.198 [DEBUG] [Thread-9261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:32:41.198 [DEBUG] [Thread-9261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] client lang: <none>
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] server lang: <none>
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] kex follows: False
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:32:41.199 [DEBUG] [Thread-9261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:32:41.200 [DEBUG] [Thread-9261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:32:41.200 [DEBUG] [Thread-9261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:32:41.200 [DEBUG] [Thread-9261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:32:41.200 [DEBUG] [Thread-9261] [transport.py] [_log()] Compression: none
2025-12-25T09:32:41.200 [DEBUG] [Thread-9261] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:32:41.224 [DEBUG] [Thread-9261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:32:41.224 [DEBUG] [Thread-9261] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:32:41.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:32:41.225 [DEBUG] [Thread-9261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:32:41.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:32:41.227 [DEBUG] [Thread-9261] [transport.py] [_log()] userauth is OK
2025-12-25T09:32:41.227 [DEBUG] [Thread-9261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:32:41.228 [DEBUG] [Thread-9261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:32:41.228 [DEBUG] [Thread-9261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:32:41.228 [DEBUG] [Thread-9261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:32:41.252 [INFO] [Thread-9261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:32:41.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:32:41.902 [DEBUG] [Thread-9261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:32:41.902 [DEBUG] [Thread-9261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:32:41.903 [DEBUG] [Thread-9261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:32:41.943 [DEBUG] [Thread-9261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:32:41.943 [DEBUG] [Thread-9261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:32:41.946 [DEBUG] [Thread-9261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:32:41.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:32:41.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:32:41.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:32:41.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:32:41.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:32:41.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:32:41.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:32:41.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:32:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:32:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.313952 -999.00  +20.20  20.71     55  +10.90 1 1 1 1 1   888    0 10.79 67.25 ----- 20.7 20.7 50.8 23.9 26.9 -23.2 26.2 -25.2 25.1 -21.3 25.5 -22.0
2025-12-25T09:32:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:32:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:32:41.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.313952
2025-12-25T09:32:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:32:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:32:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:32:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:32:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:32:41.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:32:19', tmtdew=11.98, humidity=46.24, cloud=0.0, wind=19.46, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:32:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:32:41.973 [DEBUG] [Thread-9261] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:32:42.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-25T09:32:42.067 [DEBUG] [Thread-9264] [transport.py] [_log()] starting thread (client mode): 0xb6b53640
2025-12-25T09:32:42.068 [DEBUG] [Thread-9264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:32:42.082 [DEBUG] [Thread-9264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:32:42.082 [INFO] [Thread-9264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:32:42.089 [DEBUG] [Thread-9264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:32:42.090 [DEBUG] [Thread-9264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] client lang: <none>
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] server lang: <none>
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] kex follows: False
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] Compression: none
2025-12-25T09:32:42.091 [DEBUG] [Thread-9264] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:32:42.145 [DEBUG] [Thread-9264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:32:42.146 [DEBUG] [Thread-9264] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:32:42.146 [DEBUG] [Thread-9264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:32:42.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:32:42.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:32:42.203 [DEBUG] [Thread-9264] [transport.py] [_log()] userauth is OK
2025-12-25T09:32:42.203 [DEBUG] [Thread-9264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:32:42.203 [DEBUG] [Thread-9264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:32:42.204 [DEBUG] [Thread-9264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:32:42.204 [DEBUG] [Thread-9264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:32:42.227 [INFO] [Thread-9264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:32:42.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-25T09:32:42.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:32:43.078 [DEBUG] [Thread-9264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:32:43.079 [DEBUG] [Thread-9264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:32:43.127 [DEBUG] [Thread-9264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:32:43.127 [DEBUG] [Thread-9264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:32:43.136 [DEBUG] [Thread-9264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:32:43.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:32:43.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-25T09:32:43.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-25T09:32:43.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:32:43.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:32:43.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:32:43.173 [DEBUG] [Thread-9264] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:32:51.566 [DEBUG] [Thread-9266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:52.648 [DEBUG] [Thread-9267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:54.709 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:32:54.710 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:06.615 [DEBUG] [Thread-9268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:13.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:33:13.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:33:13.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-25T09:33:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 32, 51), 11.79, 47.1, 0.0, 14.42, 21.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:33:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:32:51
2025-12-25T09:33:14.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:33:14.219 [DEBUG] [Thread-9269] [transport.py] [_log()] starting thread (client mode): 0xb6bb9ea0
2025-12-25T09:33:14.220 [DEBUG] [Thread-9269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:33:14.240 [DEBUG] [Thread-9269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:33:14.240 [INFO] [Thread-9269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] client lang: <none>
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] server lang: <none>
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] kex follows: False
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] Compression: none
2025-12-25T09:33:14.243 [DEBUG] [Thread-9269] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:33:14.261 [DEBUG] [Thread-9269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:33:14.262 [DEBUG] [Thread-9269] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:33:14.262 [DEBUG] [Thread-9269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:33:14.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:33:14.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:33:14.263 [DEBUG] [Thread-9269] [transport.py] [_log()] userauth is OK
2025-12-25T09:33:14.263 [DEBUG] [Thread-9269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:33:14.263 [DEBUG] [Thread-9269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:33:14.263 [DEBUG] [Thread-9269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:33:14.263 [DEBUG] [Thread-9269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:33:14.273 [INFO] [Thread-9269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:33:14.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:33:14.911 [DEBUG] [Thread-9269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:33:14.911 [DEBUG] [Thread-9269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:33:14.911 [DEBUG] [Thread-9269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:33:14.952 [DEBUG] [Thread-9269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:33:14.952 [DEBUG] [Thread-9269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:33:14.954 [DEBUG] [Thread-9269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:33:14.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:33:14.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:33:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:33:14.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:33:14.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:33:14.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:33:14.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.314299 -999.00  +20.40  12.95     55  +11.10 1 2 1 1 1   888    0 10.91 64.81 ----- 12.9 12.9 63.0 25.1 26.9 -23.7 26.3 -23.9 25.1 -21.0 25.5 -21.3
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.314299
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:33:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:32:51', tmtdew=11.79, humidity=47.1, cloud=0.0, wind=14.42, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:32:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:33:14.972 [DEBUG] [Thread-9269] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:33:15.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:33:15.057 [DEBUG] [Thread-9272] [transport.py] [_log()] starting thread (client mode): 0xb6b21900
2025-12-25T09:33:15.057 [DEBUG] [Thread-9272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:33:15.071 [DEBUG] [Thread-9272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:33:15.071 [INFO] [Thread-9272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] client lang: <none>
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] server lang: <none>
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] kex follows: False
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] Compression: none
2025-12-25T09:33:15.079 [DEBUG] [Thread-9272] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:33:15.134 [DEBUG] [Thread-9272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:33:15.134 [DEBUG] [Thread-9272] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:33:15.134 [DEBUG] [Thread-9272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:33:15.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:33:15.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:33:15.191 [DEBUG] [Thread-9272] [transport.py] [_log()] userauth is OK
2025-12-25T09:33:15.191 [DEBUG] [Thread-9272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:33:15.191 [DEBUG] [Thread-9272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:33:15.191 [DEBUG] [Thread-9272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:33:15.191 [DEBUG] [Thread-9272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:33:15.205 [INFO] [Thread-9272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:33:15.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-25T09:33:15.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:33:16.040 [DEBUG] [Thread-9272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:33:16.040 [DEBUG] [Thread-9272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:33:16.087 [DEBUG] [Thread-9272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:33:16.087 [DEBUG] [Thread-9272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:33:16.099 [DEBUG] [Thread-9272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:33:16.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:33:16.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-25T09:33:16.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-25T09:33:16.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:33:16.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:33:16.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:33:16.135 [DEBUG] [Thread-9272] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:33:21.649 [DEBUG] [Thread-9274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:36.695 [DEBUG] [Thread-9275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:33:46.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:33:46.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-25T09:33:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 33, 23), 11.74, 47.28, 0.0, 18.79, 21.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:33:46.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:33:23
2025-12-25T09:33:47.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:33:47.147 [DEBUG] [Thread-9276] [transport.py] [_log()] starting thread (client mode): 0xb6b51480
2025-12-25T09:33:47.148 [DEBUG] [Thread-9276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:33:47.170 [DEBUG] [Thread-9276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:33:47.170 [INFO] [Thread-9276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:33:47.173 [DEBUG] [Thread-9276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:33:47.173 [DEBUG] [Thread-9276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:33:47.173 [DEBUG] [Thread-9276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:33:47.173 [DEBUG] [Thread-9276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:47.173 [DEBUG] [Thread-9276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:47.173 [DEBUG] [Thread-9276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] client lang: <none>
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] server lang: <none>
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] kex follows: False
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] Compression: none
2025-12-25T09:33:47.174 [DEBUG] [Thread-9276] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:33:47.194 [DEBUG] [Thread-9276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:33:47.195 [DEBUG] [Thread-9276] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:33:47.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:33:47.196 [DEBUG] [Thread-9276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:33:47.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:33:47.198 [DEBUG] [Thread-9276] [transport.py] [_log()] userauth is OK
2025-12-25T09:33:47.198 [DEBUG] [Thread-9276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:33:47.198 [DEBUG] [Thread-9276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:33:47.198 [DEBUG] [Thread-9276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:33:47.198 [DEBUG] [Thread-9276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:33:47.234 [INFO] [Thread-9276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:33:47.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:33:47.846 [DEBUG] [Thread-9276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:33:47.847 [DEBUG] [Thread-9276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:33:47.847 [DEBUG] [Thread-9276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:33:47.888 [DEBUG] [Thread-9276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:33:47.888 [DEBUG] [Thread-9276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:33:47.891 [DEBUG] [Thread-9276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:33:47.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:33:47.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:33:47.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:33:47.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:33:47.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:33:47.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:33:47.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:33:47.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:33:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:33:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.314646 -999.00  +20.70  17.06     54  +11.10 1 2 1 1 1   888    0 10.70 62.58 ----- 17.1 17.1 58.0 23.0 26.9 -23.9 26.4 -22.9 25.2 -22.5 25.6 -22.2
2025-12-25T09:33:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:33:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:33:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.314646
2025-12-25T09:33:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:33:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:33:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:33:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:33:47.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:33:47.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:33:23', tmtdew=11.74, humidity=47.28, cloud=0.0, wind=18.79, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:33:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:33:47.917 [DEBUG] [Thread-9276] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:33:48.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-25T09:33:48.020 [DEBUG] [Thread-9279] [transport.py] [_log()] starting thread (client mode): 0xb6b53be0
2025-12-25T09:33:48.020 [DEBUG] [Thread-9279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:33:48.036 [DEBUG] [Thread-9279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:33:48.036 [INFO] [Thread-9279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:33:48.044 [DEBUG] [Thread-9279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] client lang: <none>
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] server lang: <none>
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] kex follows: False
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] Compression: none
2025-12-25T09:33:48.045 [DEBUG] [Thread-9279] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:33:48.106 [DEBUG] [Thread-9279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:33:48.107 [DEBUG] [Thread-9279] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:33:48.107 [DEBUG] [Thread-9279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:33:48.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:33:48.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:33:48.163 [DEBUG] [Thread-9279] [transport.py] [_log()] userauth is OK
2025-12-25T09:33:48.163 [DEBUG] [Thread-9279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:33:48.164 [DEBUG] [Thread-9279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:33:48.164 [DEBUG] [Thread-9279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:33:48.164 [DEBUG] [Thread-9279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:33:48.182 [INFO] [Thread-9279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:33:48.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-25T09:33:48.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:33:49.033 [DEBUG] [Thread-9279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:33:49.033 [DEBUG] [Thread-9279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:33:49.081 [DEBUG] [Thread-9279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:33:49.081 [DEBUG] [Thread-9279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:33:49.092 [DEBUG] [Thread-9279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:33:49.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:33:49.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:33:49.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-25T09:33:49.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:33:49.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:33:49.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:33:49.130 [DEBUG] [Thread-9279] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:33:51.731 [DEBUG] [Thread-9281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:52.700 [DEBUG] [Thread-9282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:54.849 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:33:54.850 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:06.769 [DEBUG] [Thread-9283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:19.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:34:19.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:34:19.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-25T09:34:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 33, 55), 11.84, 46.69, 0.0, 19.13, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:34:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:33:55
2025-12-25T09:34:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:34:20.134 [DEBUG] [Thread-9284] [transport.py] [_log()] starting thread (client mode): 0xb9559510
2025-12-25T09:34:20.134 [DEBUG] [Thread-9284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:34:20.154 [DEBUG] [Thread-9284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:34:20.154 [INFO] [Thread-9284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:34:20.157 [DEBUG] [Thread-9284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:34:20.157 [DEBUG] [Thread-9284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] client lang: <none>
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] server lang: <none>
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] kex follows: False
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] Compression: none
2025-12-25T09:34:20.158 [DEBUG] [Thread-9284] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:34:20.174 [DEBUG] [Thread-9284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:34:20.175 [DEBUG] [Thread-9284] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:34:20.175 [DEBUG] [Thread-9284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:34:20.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:34:20.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:34:20.177 [DEBUG] [Thread-9284] [transport.py] [_log()] userauth is OK
2025-12-25T09:34:20.177 [DEBUG] [Thread-9284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:34:20.177 [DEBUG] [Thread-9284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:34:20.177 [DEBUG] [Thread-9284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:34:20.177 [DEBUG] [Thread-9284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:34:20.195 [INFO] [Thread-9284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:34:20.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:34:20.809 [DEBUG] [Thread-9284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:34:20.809 [DEBUG] [Thread-9284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:34:20.810 [DEBUG] [Thread-9284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:34:20.851 [DEBUG] [Thread-9284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:34:20.851 [DEBUG] [Thread-9284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:34:20.854 [DEBUG] [Thread-9284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:34:20.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:34:20.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:34:20.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:34:20.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:34:20.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:34:20.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:34:20.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:34:20.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:34:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:34:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.314994 -999.00  +20.70   9.09     53  +11.00 1 2 1 1 1   888    0 10.84 62.99 ----- 9.1 9.1 77.8 13.9 27.1 -26.9 26.5 -23.6 25.2 -21.9 25.6 -22.3
2025-12-25T09:34:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:34:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:34:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.314994
2025-12-25T09:34:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:34:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:34:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:34:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:34:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:34:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:33:55', tmtdew=11.84, humidity=46.69, cloud=0.0, wind=19.13, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:33:35.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:34:20.880 [DEBUG] [Thread-9284] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:34:20.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-25T09:34:20.973 [DEBUG] [Thread-9287] [transport.py] [_log()] starting thread (client mode): 0xb6bb9db0
2025-12-25T09:34:20.973 [DEBUG] [Thread-9287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:34:20.987 [DEBUG] [Thread-9287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:34:20.987 [INFO] [Thread-9287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:20.995 [DEBUG] [Thread-9287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] client lang: <none>
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] server lang: <none>
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] kex follows: False
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] Compression: none
2025-12-25T09:34:20.996 [DEBUG] [Thread-9287] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:34:21.056 [DEBUG] [Thread-9287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:34:21.056 [DEBUG] [Thread-9287] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:34:21.057 [DEBUG] [Thread-9287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:34:21.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:34:21.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:34:21.116 [DEBUG] [Thread-9287] [transport.py] [_log()] userauth is OK
2025-12-25T09:34:21.116 [DEBUG] [Thread-9287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:34:21.116 [DEBUG] [Thread-9287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:34:21.116 [DEBUG] [Thread-9287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:34:21.116 [DEBUG] [Thread-9287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:34:21.134 [INFO] [Thread-9287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:34:21.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-25T09:34:21.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:34:21.803 [DEBUG] [Thread-9289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:21.964 [DEBUG] [Thread-9287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:34:21.964 [DEBUG] [Thread-9287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:34:22.013 [DEBUG] [Thread-9287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:34:22.013 [DEBUG] [Thread-9287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:34:22.022 [DEBUG] [Thread-9287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:34:22.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:34:22.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-25T09:34:22.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-25T09:34:22.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:34:22.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:34:22.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:34:22.056 [DEBUG] [Thread-9287] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:34:36.860 [DEBUG] [Thread-9290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:51.900 [DEBUG] [Thread-9291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:34:52.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:34:52.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-25T09:34:52.751 [DEBUG] [Thread-9292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:52.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 34, 27), 11.76, 46.85, 0.0, 14.08, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:34:52.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:34:27
2025-12-25T09:34:52.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:34:53.066 [DEBUG] [Thread-9293] [transport.py] [_log()] starting thread (client mode): 0xb6b509a0
2025-12-25T09:34:53.067 [DEBUG] [Thread-9293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:34:53.087 [DEBUG] [Thread-9293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:34:53.087 [INFO] [Thread-9293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] client lang: <none>
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] server lang: <none>
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] kex follows: False
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:34:53.088 [DEBUG] [Thread-9293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:34:53.089 [DEBUG] [Thread-9293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:34:53.089 [DEBUG] [Thread-9293] [transport.py] [_log()] Compression: none
2025-12-25T09:34:53.089 [DEBUG] [Thread-9293] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:34:53.107 [DEBUG] [Thread-9293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:34:53.108 [DEBUG] [Thread-9293] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:34:53.108 [DEBUG] [Thread-9293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:34:53.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:34:53.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:34:53.110 [DEBUG] [Thread-9293] [transport.py] [_log()] userauth is OK
2025-12-25T09:34:53.111 [DEBUG] [Thread-9293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:34:53.111 [DEBUG] [Thread-9293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:34:53.111 [DEBUG] [Thread-9293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:34:53.111 [DEBUG] [Thread-9293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:34:53.130 [INFO] [Thread-9293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:34:53.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:34:53.777 [DEBUG] [Thread-9293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:34:53.777 [DEBUG] [Thread-9293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:34:53.778 [DEBUG] [Thread-9293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:34:53.818 [DEBUG] [Thread-9293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:34:53.818 [DEBUG] [Thread-9293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:34:53.821 [DEBUG] [Thread-9293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:34:53.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:34:53.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:34:53.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:34:53.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:34:53.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:34:53.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:34:53.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:34:53.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:34:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:34:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.315341 -999.00  +20.80  15.26     53  +11.10 1 2 1 1 1   888    0 10.91 64.15 ----- 15.3 15.3 71.0 16.7 27.2 -22.9 26.7 -22.8 25.3 -21.9 25.8 -22.4
2025-12-25T09:34:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:34:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:34:53.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.315341
2025-12-25T09:34:53.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:34:53.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:34:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:34:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:34:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:34:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:34:27', tmtdew=11.76, humidity=46.85, cloud=0.0, wind=14.08, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:34:05.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:34:53.848 [DEBUG] [Thread-9293] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:34:53.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-25T09:34:53.943 [DEBUG] [Thread-9296] [transport.py] [_log()] starting thread (client mode): 0xb6b23f70
2025-12-25T09:34:53.943 [DEBUG] [Thread-9296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:34:53.957 [DEBUG] [Thread-9296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:34:53.957 [INFO] [Thread-9296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:34:53.965 [DEBUG] [Thread-9296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:34:53.965 [DEBUG] [Thread-9296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:34:53.965 [DEBUG] [Thread-9296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:34:53.965 [DEBUG] [Thread-9296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:53.965 [DEBUG] [Thread-9296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:34:53.965 [DEBUG] [Thread-9296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] client lang: <none>
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] server lang: <none>
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] kex follows: False
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] Compression: none
2025-12-25T09:34:53.966 [DEBUG] [Thread-9296] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:34:54.025 [DEBUG] [Thread-9296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:34:54.026 [DEBUG] [Thread-9296] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:34:54.026 [DEBUG] [Thread-9296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:34:54.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:34:54.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:34:54.083 [DEBUG] [Thread-9296] [transport.py] [_log()] userauth is OK
2025-12-25T09:34:54.084 [DEBUG] [Thread-9296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:34:54.084 [DEBUG] [Thread-9296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:34:54.084 [DEBUG] [Thread-9296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:34:54.084 [DEBUG] [Thread-9296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:34:54.109 [INFO] [Thread-9296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:34:54.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-25T09:34:54.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:34:54.911 [DEBUG] [Thread-9296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:34:54.911 [DEBUG] [Thread-9296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:34:54.959 [DEBUG] [Thread-9296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:34:54.959 [DEBUG] [Thread-9296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:34:54.968 [DEBUG] [Thread-9296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:34:54.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:34:54.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-25T09:34:54.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-25T09:34:54.988 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:54.989 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:34:54.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:34:54.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:34:54.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:34:55.005 [DEBUG] [Thread-9296] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:35:06.935 [DEBUG] [Thread-9298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:21.991 [DEBUG] [Thread-9299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:25.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:35:25.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:35:25.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-25T09:35:25.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 34, 59), 11.53, 47.45, 0.0, 14.35, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:35:25.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:34:59
2025-12-25T09:35:25.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:35:26.000 [DEBUG] [Thread-9300] [transport.py] [_log()] starting thread (client mode): 0xb6b22f20
2025-12-25T09:35:26.000 [DEBUG] [Thread-9300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:35:26.014 [DEBUG] [Thread-9300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:35:26.014 [INFO] [Thread-9300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] client lang: <none>
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] server lang: <none>
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] kex follows: False
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] Compression: none
2025-12-25T09:35:26.017 [DEBUG] [Thread-9300] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:35:26.034 [DEBUG] [Thread-9300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:35:26.034 [DEBUG] [Thread-9300] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:35:26.035 [DEBUG] [Thread-9300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:35:26.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:35:26.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:35:26.036 [DEBUG] [Thread-9300] [transport.py] [_log()] userauth is OK
2025-12-25T09:35:26.037 [DEBUG] [Thread-9300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:35:26.037 [DEBUG] [Thread-9300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:35:26.037 [DEBUG] [Thread-9300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:35:26.037 [DEBUG] [Thread-9300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:35:26.061 [INFO] [Thread-9300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:35:26.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:35:26.711 [DEBUG] [Thread-9300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:35:26.711 [DEBUG] [Thread-9300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:35:26.712 [DEBUG] [Thread-9300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:35:26.752 [DEBUG] [Thread-9300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:35:26.752 [DEBUG] [Thread-9300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:35:26.755 [DEBUG] [Thread-9300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:35:26.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:35:26.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:35:26.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:35:26.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:35:26.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:35:26.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:35:26.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:35:26.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:35:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:35:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.315688 -999.00  +20.70  31.70     53  +10.80 1 1 2 1 1   888    0 10.82 60.56 ----- 31.7 31.7 60.2 34.4 27.2 -23.3 26.7 -24.1 25.3 -22.8 25.7 -23.2
2025-12-25T09:35:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:35:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:35:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.315688
2025-12-25T09:35:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:35:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:35:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:35:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:35:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:35:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:34:59', tmtdew=11.53, humidity=47.45, cloud=0.0, wind=14.35, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:34:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:35:26.783 [DEBUG] [Thread-9300] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:35:26.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-25T09:35:26.876 [DEBUG] [Thread-9303] [transport.py] [_log()] starting thread (client mode): 0xb6b2aad0
2025-12-25T09:35:26.876 [DEBUG] [Thread-9303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:35:26.891 [DEBUG] [Thread-9303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:35:26.891 [INFO] [Thread-9303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] client lang: <none>
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] server lang: <none>
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] kex follows: False
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:35:26.899 [DEBUG] [Thread-9303] [transport.py] [_log()] Compression: none
2025-12-25T09:35:26.900 [DEBUG] [Thread-9303] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:35:26.956 [DEBUG] [Thread-9303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:35:26.956 [DEBUG] [Thread-9303] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:35:26.957 [DEBUG] [Thread-9303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:35:26.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:35:26.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:35:27.015 [DEBUG] [Thread-9303] [transport.py] [_log()] userauth is OK
2025-12-25T09:35:27.016 [DEBUG] [Thread-9303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:35:27.016 [DEBUG] [Thread-9303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:35:27.016 [DEBUG] [Thread-9303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:35:27.016 [DEBUG] [Thread-9303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:35:27.035 [INFO] [Thread-9303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:35:27.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-25T09:35:27.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:35:27.972 [DEBUG] [Thread-9303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:35:27.972 [DEBUG] [Thread-9303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:35:28.020 [DEBUG] [Thread-9303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:35:28.020 [DEBUG] [Thread-9303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:35:28.029 [DEBUG] [Thread-9303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:35:28.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:35: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')
2025-12-25T09:35:28.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:35:28.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:35:28.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:35:28.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:35:28.066 [DEBUG] [Thread-9303] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:35:37.027 [DEBUG] [Thread-9305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:52.075 [DEBUG] [Thread-9306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:52.798 [DEBUG] [Thread-9307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:55.131 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:55.132 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:35:58.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:35:58.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:35:58.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-25T09:35:58.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 35, 32), 11.44, 47.73, 0.0, 16.29, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:35:58.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:35:32
2025-12-25T09:35:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:35:59.067 [DEBUG] [Thread-9308] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae30
2025-12-25T09:35:59.067 [DEBUG] [Thread-9308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:35:59.086 [DEBUG] [Thread-9308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:35:59.087 [INFO] [Thread-9308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] client lang: <none>
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] server lang: <none>
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] kex follows: False
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] Compression: none
2025-12-25T09:35:59.090 [DEBUG] [Thread-9308] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:35:59.106 [DEBUG] [Thread-9308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:35:59.106 [DEBUG] [Thread-9308] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:35:59.106 [DEBUG] [Thread-9308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:35:59.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:35:59.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:35:59.108 [DEBUG] [Thread-9308] [transport.py] [_log()] userauth is OK
2025-12-25T09:35:59.109 [DEBUG] [Thread-9308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:35:59.109 [DEBUG] [Thread-9308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:35:59.109 [DEBUG] [Thread-9308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:35:59.109 [DEBUG] [Thread-9308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:35:59.141 [INFO] [Thread-9308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:35:59.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:35:59.777 [DEBUG] [Thread-9308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:35:59.777 [DEBUG] [Thread-9308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:35:59.777 [DEBUG] [Thread-9308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:35:59.818 [DEBUG] [Thread-9308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:35:59.818 [DEBUG] [Thread-9308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:35:59.822 [DEBUG] [Thread-9308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:35:59.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:35:59.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:35:59.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:35:59.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:35:59.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:35:59.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:35:59.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:35:59.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:35:59.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:35:59.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.316035 -999.00  +20.50  21.68     52  +10.30 1 1 1 1 1   888    0 10.96 67.73 ----- 21.7 21.7 60.6 30.7 27.2 -24.1 26.6 -25.4 25.1 -23.9 25.6 -23.4
2025-12-25T09:35:59.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:35:59.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:35:59.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.316035
2025-12-25T09:35:59.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:35:59.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:35:59.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:35:59.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:35:59.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:35:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:35:32', tmtdew=11.44, humidity=47.73, cloud=0.0, wind=16.29, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:35:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:35:59.851 [DEBUG] [Thread-9308] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:35:59.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-25T09:35:59.947 [DEBUG] [Thread-9311] [transport.py] [_log()] starting thread (client mode): 0xb6b28be0
2025-12-25T09:35:59.947 [DEBUG] [Thread-9311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:35:59.962 [DEBUG] [Thread-9311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:35:59.962 [INFO] [Thread-9311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:35:59.973 [DEBUG] [Thread-9311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:35:59.974 [DEBUG] [Thread-9311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:35:59.974 [DEBUG] [Thread-9311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:35:59.974 [DEBUG] [Thread-9311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:59.974 [DEBUG] [Thread-9311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:35:59.974 [DEBUG] [Thread-9311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:59.974 [DEBUG] [Thread-9311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] client lang: <none>
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] server lang: <none>
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] kex follows: False
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:35:59.975 [DEBUG] [Thread-9311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:35:59.976 [DEBUG] [Thread-9311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:35:59.976 [DEBUG] [Thread-9311] [transport.py] [_log()] Compression: none
2025-12-25T09:35:59.976 [DEBUG] [Thread-9311] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:36:00.027 [DEBUG] [Thread-9311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:36:00.028 [DEBUG] [Thread-9311] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:36:00.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:36:00.029 [DEBUG] [Thread-9311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:36:00.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:36:00.085 [DEBUG] [Thread-9311] [transport.py] [_log()] userauth is OK
2025-12-25T09:36:00.086 [DEBUG] [Thread-9311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:36:00.086 [DEBUG] [Thread-9311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:36:00.086 [DEBUG] [Thread-9311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:36:00.086 [DEBUG] [Thread-9311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:36:00.104 [INFO] [Thread-9311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:36:00.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:36:00.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:36:00.946 [DEBUG] [Thread-9311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:36:00.947 [DEBUG] [Thread-9311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:36:00.994 [DEBUG] [Thread-9311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:36:00.994 [DEBUG] [Thread-9311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:36:01.003 [DEBUG] [Thread-9311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:36:01.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:36:01.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-25T09:36:01.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-25T09:36:01.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:36:01.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:36:01.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:36:01.040 [DEBUG] [Thread-9311] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:36:07.106 [DEBUG] [Thread-9313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:36:22.158 [DEBUG] [Thread-9314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:36:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:36:31.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:36:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:36:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 36, 4), 11.58, 47.32, 0.0, 16.85, 20.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:36:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:36:04
2025-12-25T09:36:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:36:32.053 [DEBUG] [Thread-9315] [transport.py] [_log()] starting thread (client mode): 0xb6b2a530
2025-12-25T09:36:32.053 [DEBUG] [Thread-9315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:36:32.073 [DEBUG] [Thread-9315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:36:32.074 [INFO] [Thread-9315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] client lang: <none>
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] server lang: <none>
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] kex follows: False
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] Compression: none
2025-12-25T09:36:32.077 [DEBUG] [Thread-9315] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:36:32.092 [DEBUG] [Thread-9315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:36:32.092 [DEBUG] [Thread-9315] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:36:32.092 [DEBUG] [Thread-9315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:36:32.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:36:32.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:36:32.093 [DEBUG] [Thread-9315] [transport.py] [_log()] userauth is OK
2025-12-25T09:36:32.093 [DEBUG] [Thread-9315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:36:32.093 [DEBUG] [Thread-9315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:36:32.093 [DEBUG] [Thread-9315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:36:32.093 [DEBUG] [Thread-9315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:36:32.102 [INFO] [Thread-9315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:36:32.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:36:32.757 [DEBUG] [Thread-9315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:36:32.757 [DEBUG] [Thread-9315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:36:32.758 [DEBUG] [Thread-9315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:36:32.798 [DEBUG] [Thread-9315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:36:32.798 [DEBUG] [Thread-9315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:36:32.801 [DEBUG] [Thread-9315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:36:32.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:36:32.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:36:32.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:36:32.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:36:32.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:36:32.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:36:32.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.316730 -999.00  +20.30  16.60     53  +10.60 1 2 1 1 1   888    0 11.29 73.28 ----- 16.6 16.6 48.6 19.7 27.1 -23.8 26.4 -24.4 25.2 -21.3 25.7 -21.8
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.316730
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:36:32.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:36:04', tmtdew=11.58, humidity=47.32, cloud=0.0, wind=16.85, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:36:05.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:36:32.821 [DEBUG] [Thread-9315] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:36:32.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-25T09:36:32.909 [DEBUG] [Thread-9318] [transport.py] [_log()] starting thread (client mode): 0xb6b21600
2025-12-25T09:36:32.909 [DEBUG] [Thread-9318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:36:32.928 [DEBUG] [Thread-9318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:36:32.928 [INFO] [Thread-9318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] client lang: <none>
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] server lang: <none>
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] kex follows: False
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] Compression: none
2025-12-25T09:36:32.938 [DEBUG] [Thread-9318] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:36:32.994 [DEBUG] [Thread-9318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:36:32.994 [DEBUG] [Thread-9318] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:36:32.995 [DEBUG] [Thread-9318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:36:32.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:36:32.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:36:33.057 [DEBUG] [Thread-9318] [transport.py] [_log()] userauth is OK
2025-12-25T09:36:33.057 [DEBUG] [Thread-9318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:36:33.058 [DEBUG] [Thread-9318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:36:33.058 [DEBUG] [Thread-9318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:36:33.058 [DEBUG] [Thread-9318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:36:33.081 [INFO] [Thread-9318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:36:33.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-25T09:36:33.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:36:33.902 [DEBUG] [Thread-9318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:36:33.902 [DEBUG] [Thread-9318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:36:33.950 [DEBUG] [Thread-9318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:36:33.950 [DEBUG] [Thread-9318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:36:33.959 [DEBUG] [Thread-9318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:36:33.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:36: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')
2025-12-25T09:36:33.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-25T09:36:33.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:36:33.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:36:33.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:36:33.995 [DEBUG] [Thread-9318] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:36:37.188 [DEBUG] [Thread-9320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:36:52.238 [DEBUG] [Thread-9321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:36:52.852 [DEBUG] [Thread-9322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:36:55.274 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:36:55.275 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:04.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:37:04.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:37:04.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-25T09:37:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 36, 36), 12.13, 45.79, 0.0, 15.37, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:37:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:36:36
2025-12-25T09:37:04.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:37:04.988 [DEBUG] [Thread-9323] [transport.py] [_log()] starting thread (client mode): 0xb6b20b50
2025-12-25T09:37:04.988 [DEBUG] [Thread-9323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:37:05.008 [DEBUG] [Thread-9323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:37:05.008 [INFO] [Thread-9323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] client lang: <none>
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] server lang: <none>
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] kex follows: False
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] Compression: none
2025-12-25T09:37:05.011 [DEBUG] [Thread-9323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:37:05.032 [DEBUG] [Thread-9323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:37:05.033 [DEBUG] [Thread-9323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:37:05.034 [DEBUG] [Thread-9323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:37:05.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:37:05.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:37:05.036 [DEBUG] [Thread-9323] [transport.py] [_log()] userauth is OK
2025-12-25T09:37:05.036 [DEBUG] [Thread-9323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:37:05.036 [DEBUG] [Thread-9323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:37:05.036 [DEBUG] [Thread-9323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:37:05.036 [DEBUG] [Thread-9323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:37:05.073 [INFO] [Thread-9323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:37:05.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:37:05.726 [DEBUG] [Thread-9323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:37:05.727 [DEBUG] [Thread-9323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:37:05.727 [DEBUG] [Thread-9323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:37:05.767 [DEBUG] [Thread-9323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:37:05.768 [DEBUG] [Thread-9323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:37:05.770 [DEBUG] [Thread-9323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:37:05.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:37:05.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:37:05.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:37:05.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:37:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:37:05.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:37:05.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.317077 -999.00  +20.50  21.65     52  +10.40 1 1 1 1 1   888    0 11.33 75.14 ----- 21.6 21.6 50.4 26.5 27.2 -24.1 26.5 -23.3 25.0 -23.5 25.6 -22.5
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.317077
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:37:05.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:37:05.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:36:36', tmtdew=12.13, humidity=45.79, cloud=0.0, wind=15.37, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:36:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:37:05.787 [DEBUG] [Thread-9323] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:37:05.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-25T09:37:05.871 [DEBUG] [Thread-9326] [transport.py] [_log()] starting thread (client mode): 0xb6b20100
2025-12-25T09:37:05.871 [DEBUG] [Thread-9326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:37:05.885 [DEBUG] [Thread-9326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:37:05.885 [INFO] [Thread-9326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:37:05.892 [DEBUG] [Thread-9326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] client lang: <none>
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] server lang: <none>
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] kex follows: False
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] Compression: none
2025-12-25T09:37:05.893 [DEBUG] [Thread-9326] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:37:05.950 [DEBUG] [Thread-9326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:37:05.950 [DEBUG] [Thread-9326] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:37:05.950 [DEBUG] [Thread-9326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:37:05.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:37:05.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:37:06.007 [DEBUG] [Thread-9326] [transport.py] [_log()] userauth is OK
2025-12-25T09:37:06.007 [DEBUG] [Thread-9326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:37:06.007 [DEBUG] [Thread-9326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:37:06.008 [DEBUG] [Thread-9326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:37:06.008 [DEBUG] [Thread-9326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:37:06.025 [INFO] [Thread-9326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:37:06.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-25T09:37:06.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:37:06.864 [DEBUG] [Thread-9326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:37:06.864 [DEBUG] [Thread-9326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:37:06.912 [DEBUG] [Thread-9326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:37:06.913 [DEBUG] [Thread-9326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:37:06.921 [DEBUG] [Thread-9326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:37:06.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:37:06.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-25T09:37:06.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-25T09:37:06.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:37:06.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:37:06.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:37:06.952 [DEBUG] [Thread-9326] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:37:07.269 [DEBUG] [Thread-9328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:22.308 [DEBUG] [Thread-9329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:36.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:37:36.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:37:36.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-25T09:37:37.345 [DEBUG] [Thread-9330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 37, 8), 12.2, 45.55, 0.0, 16.39, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:37:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:37:08
2025-12-25T09:37:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:37:37.945 [DEBUG] [Thread-9331] [transport.py] [_log()] starting thread (client mode): 0xb6b21f30
2025-12-25T09:37:37.945 [DEBUG] [Thread-9331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:37:37.965 [DEBUG] [Thread-9331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:37:37.965 [INFO] [Thread-9331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:37:37.968 [DEBUG] [Thread-9331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:37:37.968 [DEBUG] [Thread-9331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:37:37.968 [DEBUG] [Thread-9331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:37:37.968 [DEBUG] [Thread-9331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:37.968 [DEBUG] [Thread-9331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] client lang: <none>
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] server lang: <none>
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] kex follows: False
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:37:37.969 [DEBUG] [Thread-9331] [transport.py] [_log()] Compression: none
2025-12-25T09:37:37.970 [DEBUG] [Thread-9331] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:37:37.987 [DEBUG] [Thread-9331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:37:37.987 [DEBUG] [Thread-9331] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:37:37.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:37:37.988 [DEBUG] [Thread-9331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:37:37.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:37:37.990 [DEBUG] [Thread-9331] [transport.py] [_log()] userauth is OK
2025-12-25T09:37:37.990 [DEBUG] [Thread-9331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:37:37.991 [DEBUG] [Thread-9331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:37:37.991 [DEBUG] [Thread-9331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:37:37.991 [DEBUG] [Thread-9331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:37:38.018 [INFO] [Thread-9331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:37:38.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:37:38.628 [DEBUG] [Thread-9331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:37:38.628 [DEBUG] [Thread-9331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:37:38.629 [DEBUG] [Thread-9331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:37:38.669 [DEBUG] [Thread-9331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:37:38.669 [DEBUG] [Thread-9331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:37:38.673 [DEBUG] [Thread-9331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:37:38.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:37:38.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:37:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:37:38.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:37:38.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:37:38.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:37:38.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:37:38.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:37:38.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:37:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.317424 -999.00  +20.50  20.38     52  +10.30 1 1 1 1 1   888    0 11.65 84.02 ----- 20.4 20.4 44.1 30.4 27.2 -23.5 26.5 -23.6 24.9 -24.0 25.6 -22.6
2025-12-25T09:37:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:37:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:37:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.317424
2025-12-25T09:37:38.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:37:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:37:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:37:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:37:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:37:38.699 [DEBUG] [Thread-9331] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:37:38.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:37:08', tmtdew=12.2, humidity=45.55, cloud=0.0, wind=16.39, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:37:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:37: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-25T09:37:38.795 [DEBUG] [Thread-9334] [transport.py] [_log()] starting thread (client mode): 0xb6baa260
2025-12-25T09:37:38.795 [DEBUG] [Thread-9334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:37:38.811 [DEBUG] [Thread-9334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:37:38.812 [INFO] [Thread-9334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:37:38.823 [DEBUG] [Thread-9334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:37:38.823 [DEBUG] [Thread-9334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:37:38.823 [DEBUG] [Thread-9334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:37:38.823 [DEBUG] [Thread-9334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:38.824 [DEBUG] [Thread-9334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:37:38.824 [DEBUG] [Thread-9334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:38.824 [DEBUG] [Thread-9334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:37:38.824 [DEBUG] [Thread-9334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:37:38.824 [DEBUG] [Thread-9334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] client lang: <none>
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] server lang: <none>
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] kex follows: False
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] Compression: none
2025-12-25T09:37:38.825 [DEBUG] [Thread-9334] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:37:38.880 [DEBUG] [Thread-9334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:37:38.880 [DEBUG] [Thread-9334] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:37:38.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:37:38.881 [DEBUG] [Thread-9334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:37:38.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:37:38.936 [DEBUG] [Thread-9334] [transport.py] [_log()] userauth is OK
2025-12-25T09:37:38.936 [DEBUG] [Thread-9334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:37:38.936 [DEBUG] [Thread-9334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:37:38.936 [DEBUG] [Thread-9334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:37:38.937 [DEBUG] [Thread-9334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:37:38.955 [INFO] [Thread-9334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:37:38.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-25T09:37:38.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:37:39.842 [DEBUG] [Thread-9334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:37:39.843 [DEBUG] [Thread-9334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:37:39.891 [DEBUG] [Thread-9334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:37:39.891 [DEBUG] [Thread-9334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:37:39.901 [DEBUG] [Thread-9334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:37:39.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:37:39.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-25T09:37:39.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-25T09:37:39.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:37:39.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:37:39.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:37:39.943 [DEBUG] [Thread-9334] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:37:52.372 [DEBUG] [Thread-9336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:52.894 [DEBUG] [Thread-9337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:55.413 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:37:55.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:07.425 [DEBUG] [Thread-9338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:09.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:38:09.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:38:09.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-25T09:38:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 37, 40), 12.37, 45.17, 0.0, 19.22, 21.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:38:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:37:40
2025-12-25T09:38:10.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:38:10.960 [DEBUG] [Thread-9339] [transport.py] [_log()] starting thread (client mode): 0xb6b62fe0
2025-12-25T09:38:10.960 [DEBUG] [Thread-9339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:38:10.979 [DEBUG] [Thread-9339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:38:10.979 [INFO] [Thread-9339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:38:10.982 [DEBUG] [Thread-9339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] client lang: <none>
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] server lang: <none>
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] kex follows: False
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] Compression: none
2025-12-25T09:38:10.983 [DEBUG] [Thread-9339] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:38:11.000 [DEBUG] [Thread-9339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:38:11.001 [DEBUG] [Thread-9339] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:38:11.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:38:11.002 [DEBUG] [Thread-9339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:38:11.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:38:11.004 [DEBUG] [Thread-9339] [transport.py] [_log()] userauth is OK
2025-12-25T09:38:11.004 [DEBUG] [Thread-9339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:38:11.004 [DEBUG] [Thread-9339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:38:11.005 [DEBUG] [Thread-9339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:38:11.005 [DEBUG] [Thread-9339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:38:11.030 [INFO] [Thread-9339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:38:11.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:38:11.661 [DEBUG] [Thread-9339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:38:11.661 [DEBUG] [Thread-9339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:38:11.661 [DEBUG] [Thread-9339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:38:11.702 [DEBUG] [Thread-9339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:38:11.702 [DEBUG] [Thread-9339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:38:11.706 [DEBUG] [Thread-9339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:38:11.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:38:11.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:38:11.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:38:11.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:38:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:38:11.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:38:11.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:38:11.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:38:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:38:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.317771 -999.00  +20.40  23.40     52  +10.40 1 1 1 1 1   888    0 11.66 85.72 ----- 23.4 23.4 53.0 26.0 27.1 -23.8 26.4 -24.6 25.0 -22.7 25.6 -22.5
2025-12-25T09:38:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:38:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:38:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.317771
2025-12-25T09:38:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:38:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:38:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:38:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:38:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:38:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:37:40', tmtdew=12.37, humidity=45.17, cloud=0.0, wind=19.22, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:37:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:38:11.733 [DEBUG] [Thread-9339] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:38:11.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-25T09:38:11.824 [DEBUG] [Thread-9342] [transport.py] [_log()] starting thread (client mode): 0xb6b631c0
2025-12-25T09:38:11.824 [DEBUG] [Thread-9342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:38:11.839 [DEBUG] [Thread-9342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:38:11.839 [INFO] [Thread-9342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] client lang: <none>
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] server lang: <none>
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] kex follows: False
2025-12-25T09:38:11.847 [DEBUG] [Thread-9342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:38:11.848 [DEBUG] [Thread-9342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:38:11.848 [DEBUG] [Thread-9342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:38:11.848 [DEBUG] [Thread-9342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:38:11.848 [DEBUG] [Thread-9342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:38:11.848 [DEBUG] [Thread-9342] [transport.py] [_log()] Compression: none
2025-12-25T09:38:11.848 [DEBUG] [Thread-9342] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:38:11.903 [DEBUG] [Thread-9342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:38:11.904 [DEBUG] [Thread-9342] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:38:11.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:38:11.905 [DEBUG] [Thread-9342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:38:11.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:38:11.960 [DEBUG] [Thread-9342] [transport.py] [_log()] userauth is OK
2025-12-25T09:38:11.960 [DEBUG] [Thread-9342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:38:11.960 [DEBUG] [Thread-9342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:38:11.960 [DEBUG] [Thread-9342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:38:11.960 [DEBUG] [Thread-9342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:38:11.979 [INFO] [Thread-9342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:38:11.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:38:11.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:38:12.798 [DEBUG] [Thread-9342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:38:12.798 [DEBUG] [Thread-9342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:38:12.846 [DEBUG] [Thread-9342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:38:12.847 [DEBUG] [Thread-9342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:38:12.856 [DEBUG] [Thread-9342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:38:12.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:38:12.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:38:12.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:38:12.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:38:12.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:38:12.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:38:12.891 [DEBUG] [Thread-9342] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:38:22.461 [DEBUG] [Thread-9344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:37.517 [DEBUG] [Thread-9345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:42.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:38:42.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:38:42.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:38:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 38, 12), 12.29, 45.37, 0.0, 18.49, 21.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:38:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:38:12
2025-12-25T09:38:43.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:38:43.909 [DEBUG] [Thread-9346] [transport.py] [_log()] starting thread (client mode): 0xb6b2b580
2025-12-25T09:38:43.909 [DEBUG] [Thread-9346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:38:43.927 [DEBUG] [Thread-9346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:38:43.927 [INFO] [Thread-9346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:38:43.930 [DEBUG] [Thread-9346] [transport.py] [_log()] client lang: <none>
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] server lang: <none>
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] kex follows: False
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] Compression: none
2025-12-25T09:38:43.931 [DEBUG] [Thread-9346] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:38:43.950 [DEBUG] [Thread-9346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:38:43.951 [DEBUG] [Thread-9346] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:38:43.952 [DEBUG] [Thread-9346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:38:43.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:38:43.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:38:43.956 [DEBUG] [Thread-9346] [transport.py] [_log()] userauth is OK
2025-12-25T09:38:43.956 [DEBUG] [Thread-9346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:38:43.956 [DEBUG] [Thread-9346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:38:43.956 [DEBUG] [Thread-9346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:38:43.956 [DEBUG] [Thread-9346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:38:43.976 [INFO] [Thread-9346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:38:43.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:38:44.597 [DEBUG] [Thread-9346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:38:44.598 [DEBUG] [Thread-9346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:38:44.598 [DEBUG] [Thread-9346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:38:44.639 [DEBUG] [Thread-9346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:38:44.640 [DEBUG] [Thread-9346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:38:44.643 [DEBUG] [Thread-9346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:38:44.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:38:44.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:38:44.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:38:44.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:38:44.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:38:44.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:38:44.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:38:44.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:38:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:38:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.318119 -999.00  +20.40  15.60     52  +10.30 1 1 1 1 1   888    0 11.57 79.39 ----- 15.6 15.6 35.8 21.5 27.1 -23.8 26.3 -24.7 25.0 -21.4 25.6 -22.2
2025-12-25T09:38:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:38:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:38:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.318119
2025-12-25T09:38:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:38:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:38:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:38:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:38:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:38:44.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:38:12', tmtdew=12.29, humidity=45.37, cloud=0.0, wind=18.49, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:38:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:38:44.669 [DEBUG] [Thread-9346] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:38: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-25T09:38:44.762 [DEBUG] [Thread-9349] [transport.py] [_log()] starting thread (client mode): 0xb6b28ca0
2025-12-25T09:38:44.762 [DEBUG] [Thread-9349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:38:44.777 [DEBUG] [Thread-9349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:38:44.777 [INFO] [Thread-9349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:38:44.785 [DEBUG] [Thread-9349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:38:44.785 [DEBUG] [Thread-9349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] client lang: <none>
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] server lang: <none>
2025-12-25T09:38:44.786 [DEBUG] [Thread-9349] [transport.py] [_log()] kex follows: False
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] Compression: none
2025-12-25T09:38:44.787 [DEBUG] [Thread-9349] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:38:44.845 [DEBUG] [Thread-9349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:38:44.846 [DEBUG] [Thread-9349] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:38:44.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:38:44.847 [DEBUG] [Thread-9349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:38:44.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:38:44.904 [DEBUG] [Thread-9349] [transport.py] [_log()] userauth is OK
2025-12-25T09:38:44.905 [DEBUG] [Thread-9349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:38:44.905 [DEBUG] [Thread-9349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:38:44.905 [DEBUG] [Thread-9349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:38:44.905 [DEBUG] [Thread-9349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:38:44.929 [INFO] [Thread-9349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:38:44.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-25T09:38:44.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:38:45.772 [DEBUG] [Thread-9349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:38:45.772 [DEBUG] [Thread-9349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:38:45.820 [DEBUG] [Thread-9349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:38:45.820 [DEBUG] [Thread-9349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:38:45.828 [DEBUG] [Thread-9349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:38:45.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:38:45.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:38:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:38:45.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:38:45.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:38:45.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:38:45.860 [DEBUG] [Thread-9349] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:38:52.551 [DEBUG] [Thread-9351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:52.958 [DEBUG] [Thread-9352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:55.553 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:38:55.554 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:07.609 [DEBUG] [Thread-9353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:39:15.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:39:15.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-25T09:39:16.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 38, 44), 12.38, 44.88, 0.0, 14.38, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:39:16.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:38:44
2025-12-25T09:39:16.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:39:16.873 [DEBUG] [Thread-9354] [transport.py] [_log()] starting thread (client mode): 0xb6b62110
2025-12-25T09:39:16.874 [DEBUG] [Thread-9354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:39:16.894 [DEBUG] [Thread-9354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:39:16.894 [INFO] [Thread-9354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] client lang: <none>
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] server lang: <none>
2025-12-25T09:39:16.898 [DEBUG] [Thread-9354] [transport.py] [_log()] kex follows: False
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] Compression: none
2025-12-25T09:39:16.899 [DEBUG] [Thread-9354] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:39:16.914 [DEBUG] [Thread-9354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:39:16.915 [DEBUG] [Thread-9354] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:39:16.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:39:16.915 [DEBUG] [Thread-9354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:39:16.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:39:16.918 [DEBUG] [Thread-9354] [transport.py] [_log()] userauth is OK
2025-12-25T09:39:16.918 [DEBUG] [Thread-9354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:39:16.918 [DEBUG] [Thread-9354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:39:16.918 [DEBUG] [Thread-9354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:39:16.918 [DEBUG] [Thread-9354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:39:16.936 [INFO] [Thread-9354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:39:16.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:39:17.563 [DEBUG] [Thread-9354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:39:17.563 [DEBUG] [Thread-9354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:39:17.563 [DEBUG] [Thread-9354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:39:17.604 [DEBUG] [Thread-9354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:39:17.604 [DEBUG] [Thread-9354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:39:17.606 [DEBUG] [Thread-9354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:39:17.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:39:17.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:39:17.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:39:17.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:39:17.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:39:17.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:39:17.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:39:17.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:39:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:39:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.318466 -999.00  +20.40  13.12     52  +10.30 1 2 1 1 1   888    0 11.72 88.55 ----- 13.1 13.1 43.0 17.0 27.2 -23.6 26.4 -23.6 25.0 -22.3 25.6 -22.2
2025-12-25T09:39:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:39:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:39:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.318466
2025-12-25T09:39:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:39:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:39:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:39:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:39:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:39:17.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:38:44', tmtdew=12.38, humidity=44.88, cloud=0.0, wind=14.38, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:38:35.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:39:17.625 [DEBUG] [Thread-9354] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:39:17.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-25T09:39:17.720 [DEBUG] [Thread-9357] [transport.py] [_log()] starting thread (client mode): 0xb6b22650
2025-12-25T09:39:17.720 [DEBUG] [Thread-9357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:39:17.738 [DEBUG] [Thread-9357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:39:17.738 [INFO] [Thread-9357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] client lang: <none>
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] server lang: <none>
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] kex follows: False
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] Compression: none
2025-12-25T09:39:17.749 [DEBUG] [Thread-9357] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:39:17.801 [DEBUG] [Thread-9357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:39:17.801 [DEBUG] [Thread-9357] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:39:17.801 [DEBUG] [Thread-9357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:39:17.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:39:17.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:39:17.860 [DEBUG] [Thread-9357] [transport.py] [_log()] userauth is OK
2025-12-25T09:39:17.860 [DEBUG] [Thread-9357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:39:17.860 [DEBUG] [Thread-9357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:39:17.860 [DEBUG] [Thread-9357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:39:17.860 [DEBUG] [Thread-9357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:39:17.874 [INFO] [Thread-9357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:39:17.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-25T09:39:17.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:39:18.717 [DEBUG] [Thread-9357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:39:18.717 [DEBUG] [Thread-9357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:39:18.771 [DEBUG] [Thread-9357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:39:18.771 [DEBUG] [Thread-9357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:39:18.779 [DEBUG] [Thread-9357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:39:18.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:39:18.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-25T09:39:18.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-25T09:39:18.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:39:18.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:39:18.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:39:18.812 [DEBUG] [Thread-9357] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:39:22.640 [DEBUG] [Thread-9359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:37.697 [DEBUG] [Thread-9360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:48.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:39:48.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:39:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:39:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 39, 16), 12.31, 45.05, 0.0, 12.76, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:39:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:39:16
2025-12-25T09:39:49.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:39:49.869 [DEBUG] [Thread-9361] [transport.py] [_log()] starting thread (client mode): 0xb6b22a10
2025-12-25T09:39:49.869 [DEBUG] [Thread-9361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:39:49.889 [DEBUG] [Thread-9361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:39:49.889 [INFO] [Thread-9361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] client lang: <none>
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] server lang: <none>
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] kex follows: False
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] Compression: none
2025-12-25T09:39:49.892 [DEBUG] [Thread-9361] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:39:49.899 [DEBUG] [Thread-9361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:39:49.899 [DEBUG] [Thread-9361] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:39:49.899 [DEBUG] [Thread-9361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:39:49.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:39:49.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:39:49.900 [DEBUG] [Thread-9361] [transport.py] [_log()] userauth is OK
2025-12-25T09:39:49.900 [DEBUG] [Thread-9361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:39:49.900 [DEBUG] [Thread-9361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:39:49.900 [DEBUG] [Thread-9361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:39:49.900 [DEBUG] [Thread-9361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:39:49.910 [INFO] [Thread-9361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:39:49.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:39:50.545 [DEBUG] [Thread-9361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:39:50.545 [DEBUG] [Thread-9361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:39:50.545 [DEBUG] [Thread-9361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:39:50.586 [DEBUG] [Thread-9361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:39:50.586 [DEBUG] [Thread-9361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:39:50.588 [DEBUG] [Thread-9361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:39:50.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:39:50.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:39:50.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:39:50.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:39:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:39:50.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:39:50.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:39:50.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:39:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:39:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.318813 -999.00  +20.50  15.79     52  +10.50 1 2 1 1 1   888    0 12.01 90.88 ----- 15.8 15.8 37.4 18.2 27.2 -23.4 26.5 -24.2 25.1 -21.2 25.6 -21.9
2025-12-25T09:39:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:39:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:39:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.318813
2025-12-25T09:39:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:39:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:39:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:39:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:39:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:39:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:39:16', tmtdew=12.31, humidity=45.05, cloud=0.0, wind=12.76, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:39:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:39:50.608 [DEBUG] [Thread-9361] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:39: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-25T09:39:50.692 [DEBUG] [Thread-9364] [transport.py] [_log()] starting thread (client mode): 0xb6b63220
2025-12-25T09:39:50.692 [DEBUG] [Thread-9364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:39:50.707 [DEBUG] [Thread-9364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:39:50.707 [INFO] [Thread-9364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] client lang: <none>
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] server lang: <none>
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] kex follows: False
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] Compression: none
2025-12-25T09:39:50.714 [DEBUG] [Thread-9364] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:39:50.769 [DEBUG] [Thread-9364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:39:50.769 [DEBUG] [Thread-9364] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:39:50.769 [DEBUG] [Thread-9364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:39:50.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:39:50.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:39:50.831 [DEBUG] [Thread-9364] [transport.py] [_log()] userauth is OK
2025-12-25T09:39:50.831 [DEBUG] [Thread-9364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:39:50.831 [DEBUG] [Thread-9364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:39:50.831 [DEBUG] [Thread-9364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:39:50.831 [DEBUG] [Thread-9364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:39:50.848 [INFO] [Thread-9364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:39: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-25T09:39:50.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:39:51.700 [DEBUG] [Thread-9364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:39:51.701 [DEBUG] [Thread-9364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:39:51.748 [DEBUG] [Thread-9364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:39:51.749 [DEBUG] [Thread-9364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:39:51.758 [DEBUG] [Thread-9364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:39:51.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:39: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')
2025-12-25T09:39:51.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-25T09:39:51.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:39:51.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:39:51.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:39:51.792 [DEBUG] [Thread-9364] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:39:52.728 [DEBUG] [Thread-9366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:53.004 [DEBUG] [Thread-9367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:55.692 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:39:55.693 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:07.780 [DEBUG] [Thread-9368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:21.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:40:21.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:40:21.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:40:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 39, 48), 11.91, 46.51, 0.0, 14.33, 20.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:40:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:39:48
2025-12-25T09:40:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:40:22.815 [DEBUG] [Thread-9369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:22.892 [DEBUG] [Thread-9370] [transport.py] [_log()] starting thread (client mode): 0xb6bd7d60
2025-12-25T09:40:22.892 [DEBUG] [Thread-9370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:40:22.912 [DEBUG] [Thread-9370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:40:22.912 [INFO] [Thread-9370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] client lang: <none>
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] server lang: <none>
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] kex follows: False
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] Compression: none
2025-12-25T09:40:22.914 [DEBUG] [Thread-9370] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:40:22.922 [DEBUG] [Thread-9370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:40:22.922 [DEBUG] [Thread-9370] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:40:22.922 [DEBUG] [Thread-9370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:40:22.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:40:22.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:40:22.923 [DEBUG] [Thread-9370] [transport.py] [_log()] userauth is OK
2025-12-25T09:40:22.923 [DEBUG] [Thread-9370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:40:22.923 [DEBUG] [Thread-9370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:40:22.923 [DEBUG] [Thread-9370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:40:22.923 [DEBUG] [Thread-9370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:40:22.936 [INFO] [Thread-9370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:40:22.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:40:23.565 [DEBUG] [Thread-9370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:40:23.565 [DEBUG] [Thread-9370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:40:23.565 [DEBUG] [Thread-9370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:40:23.605 [DEBUG] [Thread-9370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:40:23.605 [DEBUG] [Thread-9370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:40:23.608 [DEBUG] [Thread-9370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:40:23.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:40:23.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:40:23.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:40:23.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:40:23.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:40:23.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:40:23.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:40:23.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:40:23.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:40:23.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.319508 -999.00  +20.60  11.46     51  +10.30 1 2 1 1 1   888    0 12.04 89.56 ----- 11.5 11.5 36.8 15.8 27.3 -23.8 26.6 -23.0 25.2 -21.2 25.7 -21.9
2025-12-25T09:40:23.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:40:23.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:40:23.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.319508
2025-12-25T09:40:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:40:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:40:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:40:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:40:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:40:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:39:48', tmtdew=11.91, humidity=46.51, cloud=0.0, wind=14.33, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:40:05.491', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:40:23.628 [DEBUG] [Thread-9370] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:40:23.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:40:23.716 [DEBUG] [Thread-9373] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T09:40:23.716 [DEBUG] [Thread-9373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:40:23.730 [DEBUG] [Thread-9373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:40:23.730 [INFO] [Thread-9373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] client lang: <none>
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] server lang: <none>
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] kex follows: False
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] Compression: none
2025-12-25T09:40:23.738 [DEBUG] [Thread-9373] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:40:23.795 [DEBUG] [Thread-9373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:40:23.796 [DEBUG] [Thread-9373] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:40:23.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:40:23.796 [DEBUG] [Thread-9373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:40:23.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:40:23.851 [DEBUG] [Thread-9373] [transport.py] [_log()] userauth is OK
2025-12-25T09:40:23.851 [DEBUG] [Thread-9373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:40:23.851 [DEBUG] [Thread-9373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:40:23.851 [DEBUG] [Thread-9373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:40:23.851 [DEBUG] [Thread-9373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:40:23.865 [INFO] [Thread-9373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:40: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-25T09:40:23.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:40:24.708 [DEBUG] [Thread-9373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:40:24.708 [DEBUG] [Thread-9373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:40:24.755 [DEBUG] [Thread-9373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:40:24.755 [DEBUG] [Thread-9373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:40:24.764 [DEBUG] [Thread-9373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:40:24.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:40:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:40:24.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:40:24.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:40:24.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:40:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:40:24.800 [DEBUG] [Thread-9373] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:40:37.849 [DEBUG] [Thread-9375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:52.903 [DEBUG] [Thread-9376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:53.060 [DEBUG] [Thread-9377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:54.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:40:54.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:40:54.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:40:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 40, 20), 11.74, 47.01, 0.0, 14.05, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:40:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:40:20
2025-12-25T09:40:55.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:40:55.801 [DEBUG] [Thread-9378] [transport.py] [_log()] starting thread (client mode): 0xb6b51f60
2025-12-25T09:40:55.802 [DEBUG] [Thread-9378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:40:55.822 [DEBUG] [Thread-9378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:40:55.822 [INFO] [Thread-9378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] client lang: <none>
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] server lang: <none>
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] kex follows: False
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:40:55.825 [DEBUG] [Thread-9378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:40:55.826 [DEBUG] [Thread-9378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:40:55.826 [DEBUG] [Thread-9378] [transport.py] [_log()] Compression: none
2025-12-25T09:40:55.826 [DEBUG] [Thread-9378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:40:55.833 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:55.834 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:40:55.843 [DEBUG] [Thread-9378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:40:55.843 [DEBUG] [Thread-9378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:40:55.844 [DEBUG] [Thread-9378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:40:55.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:40:55.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:40:55.846 [DEBUG] [Thread-9378] [transport.py] [_log()] userauth is OK
2025-12-25T09:40:55.846 [DEBUG] [Thread-9378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:40:55.846 [DEBUG] [Thread-9378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:40:55.846 [DEBUG] [Thread-9378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:40:55.847 [DEBUG] [Thread-9378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:40:55.868 [INFO] [Thread-9378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:40:55.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:40:56.500 [DEBUG] [Thread-9378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:40:56.501 [DEBUG] [Thread-9378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:40:56.502 [DEBUG] [Thread-9378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:40:56.542 [DEBUG] [Thread-9378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:40:56.542 [DEBUG] [Thread-9378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:40:56.545 [DEBUG] [Thread-9378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:40:56.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:40:56.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:40:56.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:40:56.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:40:56.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:40:56.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:40:56.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:40:56.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:40:56.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:40:56.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.319855 -999.00  +20.70  18.19     51  +10.40 1 2 1 1 1   888    0 12.33 94.43 ----- 18.2 18.2 55.2 20.7 27.5 -22.9 26.7 -22.9 25.3 -21.5 25.7 -21.7
2025-12-25T09:40:56.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:40:56.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:40:56.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.319855
2025-12-25T09:40:56.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:40:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:40:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:40:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:40:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:40:56.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:40:20', tmtdew=11.74, humidity=47.01, cloud=0.0, wind=14.05, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:40:35.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:40:56.571 [DEBUG] [Thread-9378] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:40:56.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-25T09:40:56.663 [DEBUG] [Thread-9381] [transport.py] [_log()] starting thread (client mode): 0xb6b52bf0
2025-12-25T09:40:56.663 [DEBUG] [Thread-9381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:40:56.678 [DEBUG] [Thread-9381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:40:56.679 [INFO] [Thread-9381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:40:56.686 [DEBUG] [Thread-9381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:40:56.686 [DEBUG] [Thread-9381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:40:56.686 [DEBUG] [Thread-9381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:40:56.686 [DEBUG] [Thread-9381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:56.686 [DEBUG] [Thread-9381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:40:56.686 [DEBUG] [Thread-9381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] client lang: <none>
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] server lang: <none>
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] kex follows: False
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] Compression: none
2025-12-25T09:40:56.687 [DEBUG] [Thread-9381] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:40:56.748 [DEBUG] [Thread-9381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:40:56.748 [DEBUG] [Thread-9381] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:40:56.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:40:56.749 [DEBUG] [Thread-9381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:40:56.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:40:56.803 [DEBUG] [Thread-9381] [transport.py] [_log()] userauth is OK
2025-12-25T09:40:56.803 [DEBUG] [Thread-9381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:40:56.803 [DEBUG] [Thread-9381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:40:56.804 [DEBUG] [Thread-9381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:40:56.804 [DEBUG] [Thread-9381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:40:56.823 [INFO] [Thread-9381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:40:56.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-25T09:40:56.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:40:57.663 [DEBUG] [Thread-9381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:40:57.663 [DEBUG] [Thread-9381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:40:57.711 [DEBUG] [Thread-9381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:40:57.711 [DEBUG] [Thread-9381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:40:57.724 [DEBUG] [Thread-9381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:40:57.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:40:57.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:40:57.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-25T09:40:57.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:40:57.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:40:57.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:40:57.767 [DEBUG] [Thread-9381] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:41:07.933 [DEBUG] [Thread-9383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:41:22.996 [DEBUG] [Thread-9384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:41:27.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:41:27.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:41:27.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:41:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 41, 24), 12.0, 46.11, 0.0, 16.48, 21.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:41:28.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:41:24
2025-12-25T09:41:28.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:41:28.781 [DEBUG] [Thread-9385] [transport.py] [_log()] starting thread (client mode): 0xb6b4a830
2025-12-25T09:41:28.781 [DEBUG] [Thread-9385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:41:28.801 [DEBUG] [Thread-9385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:41:28.801 [INFO] [Thread-9385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:41:28.804 [DEBUG] [Thread-9385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:41:28.804 [DEBUG] [Thread-9385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:41:28.804 [DEBUG] [Thread-9385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] client lang: <none>
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] server lang: <none>
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] kex follows: False
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] Compression: none
2025-12-25T09:41:28.805 [DEBUG] [Thread-9385] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:41:28.820 [DEBUG] [Thread-9385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:41:28.820 [DEBUG] [Thread-9385] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:41:28.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:41:28.821 [DEBUG] [Thread-9385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:41:28.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:41:28.823 [DEBUG] [Thread-9385] [transport.py] [_log()] userauth is OK
2025-12-25T09:41:28.823 [DEBUG] [Thread-9385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:41:28.824 [DEBUG] [Thread-9385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:41:28.824 [DEBUG] [Thread-9385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:41:28.824 [DEBUG] [Thread-9385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:41:28.848 [INFO] [Thread-9385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:41:28.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:41:29.470 [DEBUG] [Thread-9385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:41:29.470 [DEBUG] [Thread-9385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:41:29.471 [DEBUG] [Thread-9385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:41:29.511 [DEBUG] [Thread-9385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:41:29.511 [DEBUG] [Thread-9385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:41:29.514 [DEBUG] [Thread-9385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:41:29.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:41:29.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:41:29.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:41:29.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:41:29.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:41:29.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:41:29.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:41:29.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:41:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:41:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.320202 -999.00  +20.80  14.06     52  +10.80 1 2 1 1 1   888    0 12.09 92.42 ----- 14.1 14.1 80.5 20.4 27.5 -23.3 26.7 -22.9 25.3 -21.3 25.8 -21.6
2025-12-25T09:41:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:41:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:41:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.320202
2025-12-25T09:41:29.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:41:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:41:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:41:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:41:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:41:29.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:41:24', tmtdew=12.0, humidity=46.11, cloud=0.0, wind=16.48, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:41:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:41:29.541 [DEBUG] [Thread-9385] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:41:29.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-25T09:41:29.645 [DEBUG] [Thread-9388] [transport.py] [_log()] starting thread (client mode): 0xb6b511e0
2025-12-25T09:41:29.646 [DEBUG] [Thread-9388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:41:29.666 [DEBUG] [Thread-9388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:41:29.666 [INFO] [Thread-9388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:41:29.677 [DEBUG] [Thread-9388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:41:29.677 [DEBUG] [Thread-9388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:41:29.677 [DEBUG] [Thread-9388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] client lang: <none>
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] server lang: <none>
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] kex follows: False
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] Compression: none
2025-12-25T09:41:29.678 [DEBUG] [Thread-9388] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:41:29.743 [DEBUG] [Thread-9388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:41:29.744 [DEBUG] [Thread-9388] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:41:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:41:29.745 [DEBUG] [Thread-9388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:41:29.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:41:29.810 [DEBUG] [Thread-9388] [transport.py] [_log()] userauth is OK
2025-12-25T09:41:29.810 [DEBUG] [Thread-9388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:41:29.810 [DEBUG] [Thread-9388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:41:29.810 [DEBUG] [Thread-9388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:41:29.810 [DEBUG] [Thread-9388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:41:29.834 [INFO] [Thread-9388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:41:29.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-25T09:41:29.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:41:30.675 [DEBUG] [Thread-9388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:41:30.676 [DEBUG] [Thread-9388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:41:30.729 [DEBUG] [Thread-9388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:41:30.730 [DEBUG] [Thread-9388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:41:30.745 [DEBUG] [Thread-9388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:41:30.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:41:30.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-25T09:41:30.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:41:30.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:41:30.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:41:30.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:41:30.809 [DEBUG] [Thread-9388] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:41:38.033 [DEBUG] [Thread-9390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:41:53.082 [DEBUG] [Thread-9391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:41:53.124 [DEBUG] [Thread-9392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:41:55.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:41:55.975 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:00.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:42:00.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:42:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:42:01.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 41, 56), 12.72, 44.04, 0.0, 18.63, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:42:01.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:41:56
2025-12-25T09:42:01.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:42:01.819 [DEBUG] [Thread-9393] [transport.py] [_log()] starting thread (client mode): 0xb6b28040
2025-12-25T09:42:01.819 [DEBUG] [Thread-9393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:42:01.839 [DEBUG] [Thread-9393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:42:01.839 [INFO] [Thread-9393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:42:01.842 [DEBUG] [Thread-9393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] client lang: <none>
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] server lang: <none>
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] kex follows: False
2025-12-25T09:42:01.843 [DEBUG] [Thread-9393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:42:01.844 [DEBUG] [Thread-9393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:42:01.844 [DEBUG] [Thread-9393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:42:01.844 [DEBUG] [Thread-9393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:42:01.844 [DEBUG] [Thread-9393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:42:01.844 [DEBUG] [Thread-9393] [transport.py] [_log()] Compression: none
2025-12-25T09:42:01.844 [DEBUG] [Thread-9393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:42:01.865 [DEBUG] [Thread-9393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:42:01.865 [DEBUG] [Thread-9393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:42:01.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:42:01.866 [DEBUG] [Thread-9393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:42:01.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:42:01.869 [DEBUG] [Thread-9393] [transport.py] [_log()] userauth is OK
2025-12-25T09:42:01.869 [DEBUG] [Thread-9393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:42:01.869 [DEBUG] [Thread-9393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:42:01.869 [DEBUG] [Thread-9393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:42:01.869 [DEBUG] [Thread-9393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:42:01.893 [INFO] [Thread-9393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:42:01.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:42:02.525 [DEBUG] [Thread-9393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:42:02.525 [DEBUG] [Thread-9393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:42:02.526 [DEBUG] [Thread-9393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:42:02.566 [DEBUG] [Thread-9393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:42:02.566 [DEBUG] [Thread-9393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:42:02.570 [DEBUG] [Thread-9393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:42:02.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:42:02.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:42:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:42:02.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:42:02.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:42:02.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:42:02.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:42:02.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:42:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:42:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.320549 -999.00  +20.90  11.02     52  +10.70 1 2 1 1 1   888    0 12.17 92.69 ----- 11.0 11.0 110.9 20.4 27.4 -26.0 26.9 -22.9 25.4 -20.9 25.8 -22.3
2025-12-25T09:42:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:42:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:42:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.320549
2025-12-25T09:42:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:42:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:42:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:42:02.596 [DEBUG] [Thread-9393] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:42:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:42:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:42:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:41:56', tmtdew=12.72, humidity=44.04, cloud=0.0, wind=18.63, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:41:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:42:02.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:42:02.687 [DEBUG] [Thread-9396] [transport.py] [_log()] starting thread (client mode): 0xb6b29a50
2025-12-25T09:42:02.687 [DEBUG] [Thread-9396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:42:02.702 [DEBUG] [Thread-9396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:42:02.702 [INFO] [Thread-9396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:42:02.710 [DEBUG] [Thread-9396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:42:02.710 [DEBUG] [Thread-9396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:42:02.710 [DEBUG] [Thread-9396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:42:02.710 [DEBUG] [Thread-9396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:02.710 [DEBUG] [Thread-9396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] client lang: <none>
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] server lang: <none>
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] kex follows: False
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:42:02.711 [DEBUG] [Thread-9396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:42:02.712 [DEBUG] [Thread-9396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:42:02.712 [DEBUG] [Thread-9396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:42:02.712 [DEBUG] [Thread-9396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:42:02.712 [DEBUG] [Thread-9396] [transport.py] [_log()] Compression: none
2025-12-25T09:42:02.712 [DEBUG] [Thread-9396] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:42:02.772 [DEBUG] [Thread-9396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:42:02.773 [DEBUG] [Thread-9396] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:42:02.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:42:02.775 [DEBUG] [Thread-9396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:42:02.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:42:02.832 [DEBUG] [Thread-9396] [transport.py] [_log()] userauth is OK
2025-12-25T09:42:02.832 [DEBUG] [Thread-9396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:42:02.832 [DEBUG] [Thread-9396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:42:02.833 [DEBUG] [Thread-9396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:42:02.833 [DEBUG] [Thread-9396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:42:02.852 [INFO] [Thread-9396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:42:02.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:42:02.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:42:03.716 [DEBUG] [Thread-9396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:42:03.717 [DEBUG] [Thread-9396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:42:03.770 [DEBUG] [Thread-9396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:42:03.770 [DEBUG] [Thread-9396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:42:03.780 [DEBUG] [Thread-9396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:42:03.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:42:03.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-25T09:42:03.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:42:03.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:42:03.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:42:03.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:42:03.816 [DEBUG] [Thread-9396] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:42:08.114 [DEBUG] [Thread-9398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:23.161 [DEBUG] [Thread-9399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:42:33.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:42:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:42:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 42, 28), 12.9, 43.54, 0.0, 16.67, 21.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:42:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:42:28
2025-12-25T09:42:34.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:42:34.824 [DEBUG] [Thread-9400] [transport.py] [_log()] starting thread (client mode): 0xb6b2bfa0
2025-12-25T09:42:34.825 [DEBUG] [Thread-9400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:42:34.843 [DEBUG] [Thread-9400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:42:34.843 [INFO] [Thread-9400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:42:34.845 [DEBUG] [Thread-9400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:42:34.845 [DEBUG] [Thread-9400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:42:34.845 [DEBUG] [Thread-9400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:42:34.845 [DEBUG] [Thread-9400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] client lang: <none>
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] server lang: <none>
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] kex follows: False
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] Compression: none
2025-12-25T09:42:34.846 [DEBUG] [Thread-9400] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:42:34.859 [DEBUG] [Thread-9400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:42:34.859 [DEBUG] [Thread-9400] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:42:34.860 [DEBUG] [Thread-9400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:42:34.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:42:34.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:42:34.862 [DEBUG] [Thread-9400] [transport.py] [_log()] userauth is OK
2025-12-25T09:42:34.862 [DEBUG] [Thread-9400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:42:34.862 [DEBUG] [Thread-9400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:42:34.862 [DEBUG] [Thread-9400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:42:34.862 [DEBUG] [Thread-9400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:42:34.881 [INFO] [Thread-9400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:42:34.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:42:35.509 [DEBUG] [Thread-9400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:42:35.509 [DEBUG] [Thread-9400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:42:35.509 [DEBUG] [Thread-9400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:42:35.549 [DEBUG] [Thread-9400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:42:35.550 [DEBUG] [Thread-9400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:42:35.552 [DEBUG] [Thread-9400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:42:35.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:42:35.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:42:35.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:42:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:42:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:42:35.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:42:35.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:42:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:42:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:42:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.320896 -999.00  +21.00  10.56     51  +10.70 1 2 1 1 1   888    0 12.09 89.28 ----- 10.6 10.6 98.4 21.1 27.5 -23.2 26.9 -22.0 25.5 -22.5 25.9 -22.9
2025-12-25T09:42:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:42:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:42:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.320896
2025-12-25T09:42:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:42:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:42:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:42:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:42:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:42:35.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:42:28', tmtdew=12.9, humidity=43.54, cloud=0.0, wind=16.67, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:42:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:42:35.578 [DEBUG] [Thread-9400] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:42:35.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-25T09:42:35.676 [DEBUG] [Thread-9403] [transport.py] [_log()] starting thread (client mode): 0xb6b63790
2025-12-25T09:42:35.676 [DEBUG] [Thread-9403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:42:35.690 [DEBUG] [Thread-9403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:42:35.690 [INFO] [Thread-9403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] client lang: <none>
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] server lang: <none>
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] kex follows: False
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:42:35.698 [DEBUG] [Thread-9403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:42:35.699 [DEBUG] [Thread-9403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:42:35.699 [DEBUG] [Thread-9403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:42:35.699 [DEBUG] [Thread-9403] [transport.py] [_log()] Compression: none
2025-12-25T09:42:35.699 [DEBUG] [Thread-9403] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:42:35.760 [DEBUG] [Thread-9403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:42:35.761 [DEBUG] [Thread-9403] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:42:35.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:42:35.762 [DEBUG] [Thread-9403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:42:35.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:42:35.815 [DEBUG] [Thread-9403] [transport.py] [_log()] userauth is OK
2025-12-25T09:42:35.816 [DEBUG] [Thread-9403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:42:35.816 [DEBUG] [Thread-9403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:42:35.816 [DEBUG] [Thread-9403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:42:35.816 [DEBUG] [Thread-9403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:42:35.834 [INFO] [Thread-9403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:42:35.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-25T09:42:35.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:42:36.656 [DEBUG] [Thread-9403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:42:36.656 [DEBUG] [Thread-9403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:42:36.704 [DEBUG] [Thread-9403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:42:36.704 [DEBUG] [Thread-9403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:42:36.713 [DEBUG] [Thread-9403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:42:36.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:42:36.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-25T09:42:36.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:42:36.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:42:36.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:42:36.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:42:36.749 [DEBUG] [Thread-9403] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:42:38.193 [DEBUG] [Thread-9405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:53.172 [DEBUG] [Thread-9406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:53.244 [DEBUG] [Thread-9407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:56.114 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:42:56.115 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:43:06.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:43:06.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-25T09:43:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 43), 12.92, 43.84, 0.0, 15.67, 21.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:43:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:43:00
2025-12-25T09:43:07.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:43:07.756 [DEBUG] [Thread-9408] [transport.py] [_log()] starting thread (client mode): 0xb6b29d80
2025-12-25T09:43:07.756 [DEBUG] [Thread-9408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:43:07.776 [DEBUG] [Thread-9408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:43:07.776 [INFO] [Thread-9408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] client lang: <none>
2025-12-25T09:43:07.779 [DEBUG] [Thread-9408] [transport.py] [_log()] server lang: <none>
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] kex follows: False
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] Compression: none
2025-12-25T09:43:07.780 [DEBUG] [Thread-9408] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:43:07.800 [DEBUG] [Thread-9408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:43:07.800 [DEBUG] [Thread-9408] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:43:07.801 [DEBUG] [Thread-9408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:43:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:43:07.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:43:07.803 [DEBUG] [Thread-9408] [transport.py] [_log()] userauth is OK
2025-12-25T09:43:07.803 [DEBUG] [Thread-9408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:43:07.803 [DEBUG] [Thread-9408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:43:07.803 [DEBUG] [Thread-9408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:43:07.803 [DEBUG] [Thread-9408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:43:07.827 [INFO] [Thread-9408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:43:07.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:43:08.272 [DEBUG] [Thread-9410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:08.481 [DEBUG] [Thread-9408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:43:08.481 [DEBUG] [Thread-9408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:43:08.482 [DEBUG] [Thread-9408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:43:08.522 [DEBUG] [Thread-9408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:43:08.522 [DEBUG] [Thread-9408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:43:08.526 [DEBUG] [Thread-9408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:43:08.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:43:08.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:43:08.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:43:08.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:43:08.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:43:08.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:43:08.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:43:08.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:43:08.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:43:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.321244 -999.00  +21.20  26.92     50  +10.40 1 2 1 1 1   888    0 12.63 103.81 ----- 26.9 26.9 62.0 31.0 27.6 -22.9 27.0 -22.6 25.5 -23.3 26.0 -24.1
2025-12-25T09:43:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:43:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:43:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.321244
2025-12-25T09:43:08.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:43:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:43:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:43:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:43:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:43:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:43:00', tmtdew=12.92, humidity=43.84, cloud=0.0, wind=15.67, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:42:35.482', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:43:08.556 [DEBUG] [Thread-9408] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:43:08.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:43:08.649 [DEBUG] [Thread-9412] [transport.py] [_log()] starting thread (client mode): 0xb6b28040
2025-12-25T09:43:08.649 [DEBUG] [Thread-9412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:43:08.664 [DEBUG] [Thread-9412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:43:08.664 [INFO] [Thread-9412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:08.672 [DEBUG] [Thread-9412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] client lang: <none>
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] server lang: <none>
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] kex follows: False
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] Compression: none
2025-12-25T09:43:08.673 [DEBUG] [Thread-9412] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:43:08.735 [DEBUG] [Thread-9412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:43:08.736 [DEBUG] [Thread-9412] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:43:08.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:43:08.737 [DEBUG] [Thread-9412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:43:08.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:43:08.792 [DEBUG] [Thread-9412] [transport.py] [_log()] userauth is OK
2025-12-25T09:43:08.792 [DEBUG] [Thread-9412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:43:08.792 [DEBUG] [Thread-9412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:43:08.792 [DEBUG] [Thread-9412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:43:08.793 [DEBUG] [Thread-9412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:43:08.812 [INFO] [Thread-9412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:43:08.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-25T09:43:08.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:43:09.645 [DEBUG] [Thread-9412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:43:09.645 [DEBUG] [Thread-9412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:43:09.694 [DEBUG] [Thread-9412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:43:09.694 [DEBUG] [Thread-9412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:43:09.703 [DEBUG] [Thread-9412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:43:09.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:43:09.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-25T09:43:09.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-25T09:43:09.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:43:09.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:43:09.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:43:09.738 [DEBUG] [Thread-9412] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:43:23.311 [DEBUG] [Thread-9414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:38.366 [DEBUG] [Thread-9415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:43:39.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:43:39.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-25T09:43:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 43, 32), 12.83, 44.04, 0.0, 17.22, 21.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:43:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:43:32
2025-12-25T09:43:40.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:43:40.786 [DEBUG] [Thread-9416] [transport.py] [_log()] starting thread (client mode): 0xb6bb9db0
2025-12-25T09:43:40.786 [DEBUG] [Thread-9416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:43:40.801 [DEBUG] [Thread-9416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:43:40.801 [INFO] [Thread-9416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] client lang: <none>
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] server lang: <none>
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] kex follows: False
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:43:40.804 [DEBUG] [Thread-9416] [transport.py] [_log()] Compression: none
2025-12-25T09:43:40.805 [DEBUG] [Thread-9416] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:43:40.820 [DEBUG] [Thread-9416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:43:40.821 [DEBUG] [Thread-9416] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:43:40.821 [DEBUG] [Thread-9416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:43:40.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:43:40.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:43:40.822 [DEBUG] [Thread-9416] [transport.py] [_log()] userauth is OK
2025-12-25T09:43:40.822 [DEBUG] [Thread-9416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:43:40.822 [DEBUG] [Thread-9416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:43:40.822 [DEBUG] [Thread-9416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:43:40.822 [DEBUG] [Thread-9416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:43:40.831 [INFO] [Thread-9416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:43:40.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:43:41.463 [DEBUG] [Thread-9416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:43:41.463 [DEBUG] [Thread-9416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:43:41.463 [DEBUG] [Thread-9416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:43:41.504 [DEBUG] [Thread-9416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:43:41.504 [DEBUG] [Thread-9416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:43:41.507 [DEBUG] [Thread-9416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:43:41.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:43:41.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:43:41.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:43:41.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:43:41.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:43:41.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:43:41.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:43:41.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:43:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:43:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.321591 -999.00  +20.70  20.08     50  +10.10 1 1 1 1 1   888    0 12.66 102.77 ----- 20.1 20.1 50.2 24.7 27.5 -24.3 26.7 -25.5 25.4 -22.6 25.9 -22.6
2025-12-25T09:43:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:43:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:43:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.321591
2025-12-25T09:43:41.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:43:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:43:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:43:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:43:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:43:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:43:32', tmtdew=12.83, humidity=44.04, cloud=0.0, wind=17.22, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:43:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:43:41.533 [DEBUG] [Thread-9416] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:43:41.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-25T09:43:41.617 [DEBUG] [Thread-9419] [transport.py] [_log()] starting thread (client mode): 0xb6b617e0
2025-12-25T09:43:41.617 [DEBUG] [Thread-9419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:43:41.634 [DEBUG] [Thread-9419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:43:41.634 [INFO] [Thread-9419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:43:41.641 [DEBUG] [Thread-9419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] client lang: <none>
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] server lang: <none>
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] kex follows: False
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:43:41.642 [DEBUG] [Thread-9419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:43:41.643 [DEBUG] [Thread-9419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:43:41.643 [DEBUG] [Thread-9419] [transport.py] [_log()] Compression: none
2025-12-25T09:43:41.643 [DEBUG] [Thread-9419] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:43:41.704 [DEBUG] [Thread-9419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:43:41.704 [DEBUG] [Thread-9419] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:43:41.705 [DEBUG] [Thread-9419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:43:41.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:43:41.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:43:41.760 [DEBUG] [Thread-9419] [transport.py] [_log()] userauth is OK
2025-12-25T09:43:41.760 [DEBUG] [Thread-9419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:43:41.761 [DEBUG] [Thread-9419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:43:41.761 [DEBUG] [Thread-9419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:43:41.770 [DEBUG] [Thread-9419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:43:41.789 [INFO] [Thread-9419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:43:41.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-25T09:43:41.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:43:42.619 [DEBUG] [Thread-9419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:43:42.619 [DEBUG] [Thread-9419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:43:42.667 [DEBUG] [Thread-9419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:43:42.667 [DEBUG] [Thread-9419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:43:42.676 [DEBUG] [Thread-9419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:43:42.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:43:42.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:43:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:43:42.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:43:42.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:43:42.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:43:42.713 [DEBUG] [Thread-9419] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:43:53.224 [DEBUG] [Thread-9421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:53.399 [DEBUG] [Thread-9422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:56.255 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:43:56.256 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:08.448 [DEBUG] [Thread-9423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:44:12.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:44:12.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-25T09:44:13.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 44, 5), 12.71, 44.42, 0.0, 17.03, 21.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:44:13.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:44:05
2025-12-25T09:44:13.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:44:13.673 [DEBUG] [Thread-9424] [transport.py] [_log()] starting thread (client mode): 0xb6b60880
2025-12-25T09:44:13.673 [DEBUG] [Thread-9424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:44:13.693 [DEBUG] [Thread-9424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:44:13.694 [INFO] [Thread-9424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] client lang: <none>
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] server lang: <none>
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] kex follows: False
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] Compression: none
2025-12-25T09:44:13.697 [DEBUG] [Thread-9424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:44:13.715 [DEBUG] [Thread-9424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:44:13.715 [DEBUG] [Thread-9424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:44:13.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:44:13.716 [DEBUG] [Thread-9424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:44:13.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:44:13.718 [DEBUG] [Thread-9424] [transport.py] [_log()] userauth is OK
2025-12-25T09:44:13.718 [DEBUG] [Thread-9424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:44:13.718 [DEBUG] [Thread-9424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:44:13.718 [DEBUG] [Thread-9424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:44:13.718 [DEBUG] [Thread-9424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:44:13.740 [INFO] [Thread-9424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:44:13.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:44:14.369 [DEBUG] [Thread-9424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:44:14.369 [DEBUG] [Thread-9424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:44:14.369 [DEBUG] [Thread-9424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:44:14.410 [DEBUG] [Thread-9424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:44:14.410 [DEBUG] [Thread-9424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:44:14.412 [DEBUG] [Thread-9424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:44:14.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:44:14.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:44:14.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:44:14.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:44:14.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:44:14.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:44:14.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.321938 -999.00  +20.70  20.43     51  +10.20 1 2 1 1 1   888    0 12.54 101.63 ----- 20.4 20.4 36.0 25.0 27.4 -23.1 26.8 -24.3 25.4 -21.6 25.9 -22.1
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.321938
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:44:14.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:44:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:44:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:44:05', tmtdew=12.71, humidity=44.42, cloud=0.0, wind=17.03, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:43:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:44:14.433 [DEBUG] [Thread-9424] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:44:14.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-25T09:44:14.515 [DEBUG] [Thread-9427] [transport.py] [_log()] starting thread (client mode): 0xb955a260
2025-12-25T09:44:14.515 [DEBUG] [Thread-9427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:44:14.533 [DEBUG] [Thread-9427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:44:14.533 [INFO] [Thread-9427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] client lang: <none>
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] server lang: <none>
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] kex follows: False
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] Compression: none
2025-12-25T09:44:14.541 [DEBUG] [Thread-9427] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:44:14.598 [DEBUG] [Thread-9427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:44:14.599 [DEBUG] [Thread-9427] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:44:14.599 [DEBUG] [Thread-9427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:44:14.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:44:14.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:44:14.656 [DEBUG] [Thread-9427] [transport.py] [_log()] userauth is OK
2025-12-25T09:44:14.656 [DEBUG] [Thread-9427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:44:14.656 [DEBUG] [Thread-9427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:44:14.656 [DEBUG] [Thread-9427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:44:14.656 [DEBUG] [Thread-9427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:44:14.672 [INFO] [Thread-9427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:44:14.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-25T09:44:14.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:44:15.496 [DEBUG] [Thread-9427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:44:15.496 [DEBUG] [Thread-9427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:44:15.545 [DEBUG] [Thread-9427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:44:15.545 [DEBUG] [Thread-9427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:44:15.553 [DEBUG] [Thread-9427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:44:15.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:44:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:44:15.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:44:15.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:44:15.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:44:15.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:44:15.585 [DEBUG] [Thread-9427] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:44:23.485 [DEBUG] [Thread-9429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:38.537 [DEBUG] [Thread-9430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:45.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:44:45.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:44:45.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-25T09:44:46.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 44, 37), 13.07, 42.98, 0.0, 15.72, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:44:46.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:44:37
2025-12-25T09:44:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:44:46.593 [DEBUG] [Thread-9431] [transport.py] [_log()] starting thread (client mode): 0xb6b511e0
2025-12-25T09:44:46.594 [DEBUG] [Thread-9431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:44:46.613 [DEBUG] [Thread-9431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:44:46.614 [INFO] [Thread-9431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:44:46.616 [DEBUG] [Thread-9431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] client lang: <none>
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] server lang: <none>
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] kex follows: False
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] Compression: none
2025-12-25T09:44:46.617 [DEBUG] [Thread-9431] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:44:46.625 [DEBUG] [Thread-9431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:44:46.626 [DEBUG] [Thread-9431] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:44:46.626 [DEBUG] [Thread-9431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:44:46.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:44:46.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:44:46.628 [DEBUG] [Thread-9431] [transport.py] [_log()] userauth is OK
2025-12-25T09:44:46.628 [DEBUG] [Thread-9431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:44:46.628 [DEBUG] [Thread-9431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:44:46.628 [DEBUG] [Thread-9431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:44:46.628 [DEBUG] [Thread-9431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:44:46.663 [INFO] [Thread-9431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:44:46.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:44:47.307 [DEBUG] [Thread-9431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:44:47.307 [DEBUG] [Thread-9431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:44:47.308 [DEBUG] [Thread-9431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:44:47.348 [DEBUG] [Thread-9431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:44:47.348 [DEBUG] [Thread-9431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:44:47.351 [DEBUG] [Thread-9431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:44:47.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:44:47.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:44:47.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:44:47.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:44:47.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:44:47.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:44:47.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:44:47.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:44:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:44:47.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.322632 -999.00  +20.70  18.53     50  +10.10 1 1 1 1 1   888    0 12.71 107.85 ----- 18.5 18.5 51.0 22.8 27.5 -23.6 26.7 -24.9 25.3 -22.0 25.9 -22.2
2025-12-25T09:44:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:44:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:44:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.322632
2025-12-25T09:44:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:44:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:44:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:44:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:44:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:44:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:44:37', tmtdew=13.07, humidity=42.98, cloud=0.0, wind=15.72, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:44:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:44:47.377 [DEBUG] [Thread-9431] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:44:47.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:44:47.471 [DEBUG] [Thread-9434] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T09:44:47.472 [DEBUG] [Thread-9434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:44:47.488 [DEBUG] [Thread-9434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:44:47.488 [INFO] [Thread-9434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:44:47.496 [DEBUG] [Thread-9434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:44:47.496 [DEBUG] [Thread-9434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:44:47.496 [DEBUG] [Thread-9434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:44:47.496 [DEBUG] [Thread-9434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:47.496 [DEBUG] [Thread-9434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] client lang: <none>
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] server lang: <none>
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] kex follows: False
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] Compression: none
2025-12-25T09:44:47.497 [DEBUG] [Thread-9434] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:44:47.558 [DEBUG] [Thread-9434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:44:47.558 [DEBUG] [Thread-9434] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:44:47.558 [DEBUG] [Thread-9434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:44:47.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:44:47.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:44:47.619 [DEBUG] [Thread-9434] [transport.py] [_log()] userauth is OK
2025-12-25T09:44:47.619 [DEBUG] [Thread-9434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:44:47.619 [DEBUG] [Thread-9434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:44:47.619 [DEBUG] [Thread-9434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:44:47.619 [DEBUG] [Thread-9434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:44:47.634 [INFO] [Thread-9434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:44:47.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-25T09:44:47.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:44:48.532 [DEBUG] [Thread-9434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:44:48.532 [DEBUG] [Thread-9434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:44:48.580 [DEBUG] [Thread-9434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:44:48.580 [DEBUG] [Thread-9434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:44:48.589 [DEBUG] [Thread-9434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:44:48.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:44:48.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-25T09:44:48.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-25T09:44:48.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:44:48.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:44:48.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:44:48.626 [DEBUG] [Thread-9434] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:44:53.272 [DEBUG] [Thread-9436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:53.568 [DEBUG] [Thread-9437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:56.394 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:44:56.395 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:08.608 [DEBUG] [Thread-9438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:18.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:45:18.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:45:18.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-25T09:45:19.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 45, 9), 13.22, 42.59, 0.0, 13.98, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:45:19.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:45:09
2025-12-25T09:45:19.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:45:19.600 [DEBUG] [Thread-9439] [transport.py] [_log()] starting thread (client mode): 0xb6b2a2c0
2025-12-25T09:45:19.600 [DEBUG] [Thread-9439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:45:19.620 [DEBUG] [Thread-9439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:45:19.620 [INFO] [Thread-9439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] client lang: <none>
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] server lang: <none>
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] kex follows: False
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:45:19.623 [DEBUG] [Thread-9439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:45:19.624 [DEBUG] [Thread-9439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:45:19.624 [DEBUG] [Thread-9439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:45:19.624 [DEBUG] [Thread-9439] [transport.py] [_log()] Compression: none
2025-12-25T09:45:19.624 [DEBUG] [Thread-9439] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:45:19.639 [DEBUG] [Thread-9439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:45:19.639 [DEBUG] [Thread-9439] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:45:19.640 [DEBUG] [Thread-9439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:45:19.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:45:19.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:45:19.642 [DEBUG] [Thread-9439] [transport.py] [_log()] userauth is OK
2025-12-25T09:45:19.642 [DEBUG] [Thread-9439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:45:19.642 [DEBUG] [Thread-9439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:45:19.642 [DEBUG] [Thread-9439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:45:19.642 [DEBUG] [Thread-9439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:45:19.664 [INFO] [Thread-9439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:45:19.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:45:20.258 [DEBUG] [Thread-9439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:45:20.258 [DEBUG] [Thread-9439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:45:20.259 [DEBUG] [Thread-9439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:45:20.299 [DEBUG] [Thread-9439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:45:20.299 [DEBUG] [Thread-9439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:45:20.302 [DEBUG] [Thread-9439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:45:20.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:45:20.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:45:20.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:45:20.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:45:20.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:45:20.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:45:20.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:45:20.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:45:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:45:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.322980 -999.00  +20.90  21.80     50  +10.10 1 2 1 1 1   888    0 13.32 116.42 ----- 21.8 21.8 50.0 26.1 27.5 -23.6 26.7 -23.9 25.3 -21.3 26.0 -22.2
2025-12-25T09:45:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:45:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:45:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.322980
2025-12-25T09:45:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:45:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:45:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:45:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:45:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:45:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:45:09', tmtdew=13.22, humidity=42.59, cloud=0.0, wind=13.98, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:45:05.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:45:20.328 [DEBUG] [Thread-9439] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:45:20.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-25T09:45:20.423 [DEBUG] [Thread-9442] [transport.py] [_log()] starting thread (client mode): 0xb6b63250
2025-12-25T09:45:20.423 [DEBUG] [Thread-9442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:45:20.438 [DEBUG] [Thread-9442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:45:20.438 [INFO] [Thread-9442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:45:20.445 [DEBUG] [Thread-9442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:45:20.445 [DEBUG] [Thread-9442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:45:20.445 [DEBUG] [Thread-9442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:45:20.445 [DEBUG] [Thread-9442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] client lang: <none>
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] server lang: <none>
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] kex follows: False
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:45:20.446 [DEBUG] [Thread-9442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:45:20.447 [DEBUG] [Thread-9442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:45:20.447 [DEBUG] [Thread-9442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:45:20.447 [DEBUG] [Thread-9442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:45:20.447 [DEBUG] [Thread-9442] [transport.py] [_log()] Compression: none
2025-12-25T09:45:20.447 [DEBUG] [Thread-9442] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:45:20.503 [DEBUG] [Thread-9442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:45:20.504 [DEBUG] [Thread-9442] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:45:20.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:45:20.505 [DEBUG] [Thread-9442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:45:20.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:45:20.559 [DEBUG] [Thread-9442] [transport.py] [_log()] userauth is OK
2025-12-25T09:45:20.560 [DEBUG] [Thread-9442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:45:20.560 [DEBUG] [Thread-9442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:45:20.560 [DEBUG] [Thread-9442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:45:20.560 [DEBUG] [Thread-9442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:45:20.581 [INFO] [Thread-9442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:45:20.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-25T09:45:20.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:45:21.421 [DEBUG] [Thread-9442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:45:21.421 [DEBUG] [Thread-9442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:45:21.468 [DEBUG] [Thread-9442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:45:21.468 [DEBUG] [Thread-9442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:45:21.477 [DEBUG] [Thread-9442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:45:21.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:45:21.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-25T09:45:21.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-25T09:45:21.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:45:21.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:45:21.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:45:21.511 [DEBUG] [Thread-9442] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:45:23.643 [DEBUG] [Thread-9444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:38.698 [DEBUG] [Thread-9445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:51.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:45:51.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:45:51.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-25T09:45:52.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 45, 41), 13.51, 41.86, 0.0, 17.79, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:45:52.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:45:41
2025-12-25T09:45:52.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:45:52.538 [DEBUG] [Thread-9446] [transport.py] [_log()] starting thread (client mode): 0xb6bb8f70
2025-12-25T09:45:52.538 [DEBUG] [Thread-9446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:45:52.558 [DEBUG] [Thread-9446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:45:52.558 [INFO] [Thread-9446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] client lang: <none>
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] server lang: <none>
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] kex follows: False
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:45:52.561 [DEBUG] [Thread-9446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:45:52.562 [DEBUG] [Thread-9446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:45:52.562 [DEBUG] [Thread-9446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:45:52.562 [DEBUG] [Thread-9446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:45:52.562 [DEBUG] [Thread-9446] [transport.py] [_log()] Compression: none
2025-12-25T09:45:52.562 [DEBUG] [Thread-9446] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:45:52.569 [DEBUG] [Thread-9446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:45:52.569 [DEBUG] [Thread-9446] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:45:52.570 [DEBUG] [Thread-9446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:45:52.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:45:52.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:45:52.571 [DEBUG] [Thread-9446] [transport.py] [_log()] userauth is OK
2025-12-25T09:45:52.571 [DEBUG] [Thread-9446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:45:52.571 [DEBUG] [Thread-9446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:45:52.571 [DEBUG] [Thread-9446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:45:52.571 [DEBUG] [Thread-9446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:45:52.589 [INFO] [Thread-9446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:45:52.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:45:53.163 [DEBUG] [Thread-9446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:45:53.163 [DEBUG] [Thread-9446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:45:53.163 [DEBUG] [Thread-9446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:45:53.204 [DEBUG] [Thread-9446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:45:53.204 [DEBUG] [Thread-9446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:45:53.206 [DEBUG] [Thread-9446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:45:53.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:45:53.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:45:53.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:45:53.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:45:53.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:45:53.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:45:53.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:45:53.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:45:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:45:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.323327 -999.00  +20.70  20.82     50  +10.00 1 1 1 1 1   888    0 12.93 109.46 ----- 20.8 20.8 55.6 24.6 27.5 -23.5 26.7 -24.6 25.3 -23.9 25.9 -22.9
2025-12-25T09:45:53.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:45:53.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:45:53.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.323327
2025-12-25T09:45:53.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:45:53.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:45:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:45:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:45:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:45:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:45:41', tmtdew=13.51, humidity=41.86, cloud=0.0, wind=17.79, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:45:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:45:53.227 [DEBUG] [Thread-9446] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:45:53.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-25T09:45:53.315 [DEBUG] [Thread-9449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:53.324 [DEBUG] [Thread-9450] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-25T09:45:53.324 [DEBUG] [Thread-9450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:45:53.343 [DEBUG] [Thread-9450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:45:53.343 [INFO] [Thread-9450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:45:53.350 [DEBUG] [Thread-9450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:45:53.350 [DEBUG] [Thread-9450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:45:53.350 [DEBUG] [Thread-9450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:45:53.350 [DEBUG] [Thread-9450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:53.350 [DEBUG] [Thread-9450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:45:53.350 [DEBUG] [Thread-9450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] client lang: <none>
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] server lang: <none>
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] kex follows: False
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] Compression: none
2025-12-25T09:45:53.351 [DEBUG] [Thread-9450] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:45:53.407 [DEBUG] [Thread-9450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:45:53.408 [DEBUG] [Thread-9450] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:45:53.408 [DEBUG] [Thread-9450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:45:53.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:45:53.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:45:53.465 [DEBUG] [Thread-9450] [transport.py] [_log()] userauth is OK
2025-12-25T09:45:53.465 [DEBUG] [Thread-9450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:45:53.465 [DEBUG] [Thread-9450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:45:53.465 [DEBUG] [Thread-9450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:45:53.466 [DEBUG] [Thread-9450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:45:53.484 [INFO] [Thread-9450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:45:53.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:45:53.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:45:53.736 [DEBUG] [Thread-9452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:54.345 [DEBUG] [Thread-9450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:45:54.345 [DEBUG] [Thread-9450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:45:54.393 [DEBUG] [Thread-9450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:45:54.393 [DEBUG] [Thread-9450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:45:54.406 [DEBUG] [Thread-9450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:45:54.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:45:54.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-25T09:45:54.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-25T09:45:54.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:45:54.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:45:54.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:45:54.438 [DEBUG] [Thread-9450] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:45:56.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:45:56.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:08.790 [DEBUG] [Thread-9453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:23.821 [DEBUG] [Thread-9454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:46:24.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:46:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:46:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 46, 13), 13.39, 42.21, 0.0, 20.66, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:46:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:46:13
2025-12-25T09:46:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:46:25.416 [DEBUG] [Thread-9455] [transport.py] [_log()] starting thread (client mode): 0xb6bd7c70
2025-12-25T09:46:25.416 [DEBUG] [Thread-9455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:46:25.433 [DEBUG] [Thread-9455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:46:25.433 [INFO] [Thread-9455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:46:25.435 [DEBUG] [Thread-9455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:46:25.435 [DEBUG] [Thread-9455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:46:25.435 [DEBUG] [Thread-9455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] client lang: <none>
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] server lang: <none>
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] kex follows: False
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] Compression: none
2025-12-25T09:46:25.436 [DEBUG] [Thread-9455] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:46:25.448 [DEBUG] [Thread-9455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:46:25.448 [DEBUG] [Thread-9455] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:46:25.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:46:25.448 [DEBUG] [Thread-9455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:46:25.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:46:25.449 [DEBUG] [Thread-9455] [transport.py] [_log()] userauth is OK
2025-12-25T09:46:25.449 [DEBUG] [Thread-9455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:46:25.449 [DEBUG] [Thread-9455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:46:25.450 [DEBUG] [Thread-9455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:46:25.450 [DEBUG] [Thread-9455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:46:25.463 [INFO] [Thread-9455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:46:25.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:46:26.122 [DEBUG] [Thread-9455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:46:26.123 [DEBUG] [Thread-9455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:46:26.123 [DEBUG] [Thread-9455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:46:26.163 [DEBUG] [Thread-9455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:46:26.163 [DEBUG] [Thread-9455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:46:26.166 [DEBUG] [Thread-9455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:46:26.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:46:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:46:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:46:26.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:46:26.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:46:26.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:46:26.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:46:26.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:46:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:46:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.323674 -999.00  +20.70  15.31     50  +10.00 1 1 1 1 1   888    0 13.11 115.66 ----- 15.3 15.3 50.2 19.6 27.5 -23.4 26.7 -23.2 25.4 -22.9 25.9 -22.9
2025-12-25T09:46:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:46:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:46:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.323674
2025-12-25T09:46:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:46:26.189 [DEBUG] [Thread-9455] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:46:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:46:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:46:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:46:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:46:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:46:13', tmtdew=13.39, humidity=42.21, cloud=0.0, wind=20.66, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:46:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:46:26.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:46:26.287 [DEBUG] [Thread-9458] [transport.py] [_log()] starting thread (client mode): 0xb6bbaa10
2025-12-25T09:46:26.287 [DEBUG] [Thread-9458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:46:26.302 [DEBUG] [Thread-9458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:46:26.302 [INFO] [Thread-9458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:46:26.310 [DEBUG] [Thread-9458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:46:26.310 [DEBUG] [Thread-9458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:46:26.310 [DEBUG] [Thread-9458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:46:26.310 [DEBUG] [Thread-9458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] client lang: <none>
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] server lang: <none>
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] kex follows: False
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] Compression: none
2025-12-25T09:46:26.311 [DEBUG] [Thread-9458] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:46:26.372 [DEBUG] [Thread-9458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:46:26.372 [DEBUG] [Thread-9458] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:46:26.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:46:26.374 [DEBUG] [Thread-9458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:46:26.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:46:26.431 [DEBUG] [Thread-9458] [transport.py] [_log()] userauth is OK
2025-12-25T09:46:26.432 [DEBUG] [Thread-9458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:46:26.432 [DEBUG] [Thread-9458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:46:26.432 [DEBUG] [Thread-9458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:46:26.432 [DEBUG] [Thread-9458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:46:26.453 [INFO] [Thread-9458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:46:26.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-25T09:46:26.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:46:27.397 [DEBUG] [Thread-9458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:46:27.397 [DEBUG] [Thread-9458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:46:27.445 [DEBUG] [Thread-9458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:46:27.445 [DEBUG] [Thread-9458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:46:27.454 [DEBUG] [Thread-9458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:46:27.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:46:27.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-25T09:46:27.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-25T09:46:27.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:46:27.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:46:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:46:27.491 [DEBUG] [Thread-9458] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:46:38.856 [DEBUG] [Thread-9460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:53.342 [DEBUG] [Thread-9461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:53.895 [DEBUG] [Thread-9462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:56.674 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:56.675 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:46:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:46:57.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:46:57.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-25T09:46:58.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 46, 45), 13.45, 42.03, 0.0, 16.73, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:46:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:46:45
2025-12-25T09:46:58.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:46:58.472 [DEBUG] [Thread-9463] [transport.py] [_log()] starting thread (client mode): 0xb6bb89d0
2025-12-25T09:46:58.472 [DEBUG] [Thread-9463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:46:58.482 [DEBUG] [Thread-9463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:46:58.482 [INFO] [Thread-9463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] client lang: <none>
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] server lang: <none>
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] kex follows: False
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] Compression: none
2025-12-25T09:46:58.485 [DEBUG] [Thread-9463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:46:58.501 [DEBUG] [Thread-9463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:46:58.502 [DEBUG] [Thread-9463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:46:58.502 [DEBUG] [Thread-9463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:46:58.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:46:58.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:46:58.503 [DEBUG] [Thread-9463] [transport.py] [_log()] userauth is OK
2025-12-25T09:46:58.503 [DEBUG] [Thread-9463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:46:58.504 [DEBUG] [Thread-9463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:46:58.504 [DEBUG] [Thread-9463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:46:58.504 [DEBUG] [Thread-9463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:46:58.520 [INFO] [Thread-9463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:46:58.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:46:59.114 [DEBUG] [Thread-9463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:46:59.114 [DEBUG] [Thread-9463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:46:59.115 [DEBUG] [Thread-9463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:46:59.155 [DEBUG] [Thread-9463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:46:59.155 [DEBUG] [Thread-9463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:46:59.158 [DEBUG] [Thread-9463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:46:59.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:46:59.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:46:59.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:46:59.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:46:59.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:46:59.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:46:59.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:46:59.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:46:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:46:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.324021 -999.00  +20.80  15.71     50  +10.10 1 2 1 1 1   888    0 13.36 114.26 ----- 15.7 15.7 57.0 22.3 27.5 -23.4 26.7 -23.2 25.4 -22.3 26.0 -22.9
2025-12-25T09:46:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:46:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:46:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.324021
2025-12-25T09:46:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:46:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:46:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:46:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:46:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:46:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:46:45', tmtdew=13.45, humidity=42.03, cloud=0.0, wind=16.73, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:46:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:46:59.178 [DEBUG] [Thread-9463] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:46:59.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-25T09:46:59.273 [DEBUG] [Thread-9466] [transport.py] [_log()] starting thread (client mode): 0xb6bb90f0
2025-12-25T09:46:59.273 [DEBUG] [Thread-9466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:46:59.289 [DEBUG] [Thread-9466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:46:59.289 [INFO] [Thread-9466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:46:59.296 [DEBUG] [Thread-9466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] client lang: <none>
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] server lang: <none>
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] kex follows: False
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] Compression: none
2025-12-25T09:46:59.297 [DEBUG] [Thread-9466] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:46:59.356 [DEBUG] [Thread-9466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:46:59.357 [DEBUG] [Thread-9466] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:46:59.358 [DEBUG] [Thread-9466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:46:59.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:46:59.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:46:59.416 [DEBUG] [Thread-9466] [transport.py] [_log()] userauth is OK
2025-12-25T09:46:59.416 [DEBUG] [Thread-9466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:46:59.416 [DEBUG] [Thread-9466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:46:59.416 [DEBUG] [Thread-9466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:46:59.416 [DEBUG] [Thread-9466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:46:59.434 [INFO] [Thread-9466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:46:59.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-25T09:46:59.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:47:00.292 [DEBUG] [Thread-9466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:47:00.292 [DEBUG] [Thread-9466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:47:00.340 [DEBUG] [Thread-9466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:47:00.340 [DEBUG] [Thread-9466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:47:00.349 [DEBUG] [Thread-9466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:47:00.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:47:00.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-25T09:47:00.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-25T09:47:00.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:47:00.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:47:00.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:47:00.386 [DEBUG] [Thread-9466] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:47:08.928 [DEBUG] [Thread-9468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:47:23.987 [DEBUG] [Thread-9469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:47:30.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:47:30.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:47:30.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-25T09:47:31.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 47, 17), 13.53, 41.81, 0.0, 15.7, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:47:31.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:47:17
2025-12-25T09:47:31.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:47:31.442 [DEBUG] [Thread-9470] [transport.py] [_log()] starting thread (client mode): 0xb6bb9ff0
2025-12-25T09:47:31.442 [DEBUG] [Thread-9470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:47:31.461 [DEBUG] [Thread-9470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:47:31.461 [INFO] [Thread-9470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] client lang: <none>
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] server lang: <none>
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] kex follows: False
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] Compression: none
2025-12-25T09:47:31.463 [DEBUG] [Thread-9470] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:47:31.470 [DEBUG] [Thread-9470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:47:31.470 [DEBUG] [Thread-9470] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:47:31.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:47:31.470 [DEBUG] [Thread-9470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:47:31.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:47:31.471 [DEBUG] [Thread-9470] [transport.py] [_log()] userauth is OK
2025-12-25T09:47:31.471 [DEBUG] [Thread-9470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:47:31.471 [DEBUG] [Thread-9470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:47:31.471 [DEBUG] [Thread-9470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:47:31.471 [DEBUG] [Thread-9470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:47:31.480 [INFO] [Thread-9470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:47:31.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:47:32.026 [DEBUG] [Thread-9470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:47:32.026 [DEBUG] [Thread-9470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:47:32.026 [DEBUG] [Thread-9470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:47:32.067 [DEBUG] [Thread-9470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:47:32.067 [DEBUG] [Thread-9470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:47:32.069 [DEBUG] [Thread-9470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:47:32.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:47:32.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:47:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:47:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:47:32.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:47:32.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:47:32.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.324369 -999.00  +21.10  20.28     49  +10.20 1 1 1 1 1   888    0 13.42 119.14 ----- 20.3 20.3 63.2 24.5 27.5 -23.3 26.9 -23.8 25.5 -22.9 26.0 -23.4
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.324369
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:47:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:47:17', tmtdew=13.53, humidity=41.81, cloud=0.0, wind=15.7, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:47:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:47:32.080 [DEBUG] [Thread-9470] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:47:32.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-25T09:47:32.164 [DEBUG] [Thread-9473] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T09:47:32.164 [DEBUG] [Thread-9473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:47:32.180 [DEBUG] [Thread-9473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:47:32.180 [INFO] [Thread-9473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] client lang: <none>
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] server lang: <none>
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] kex follows: False
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:47:32.187 [DEBUG] [Thread-9473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:47:32.188 [DEBUG] [Thread-9473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:47:32.188 [DEBUG] [Thread-9473] [transport.py] [_log()] Compression: none
2025-12-25T09:47:32.188 [DEBUG] [Thread-9473] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:47:32.246 [DEBUG] [Thread-9473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:47:32.246 [DEBUG] [Thread-9473] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:47:32.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:47:32.246 [DEBUG] [Thread-9473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:47:32.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:47:32.303 [DEBUG] [Thread-9473] [transport.py] [_log()] userauth is OK
2025-12-25T09:47:32.303 [DEBUG] [Thread-9473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:47:32.303 [DEBUG] [Thread-9473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:47:32.303 [DEBUG] [Thread-9473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:47:32.303 [DEBUG] [Thread-9473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:47:32.316 [INFO] [Thread-9473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:47:32.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-25T09:47:32.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:47:33.148 [DEBUG] [Thread-9473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:47:33.148 [DEBUG] [Thread-9473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:47:33.196 [DEBUG] [Thread-9473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:47:33.196 [DEBUG] [Thread-9473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:47:33.205 [DEBUG] [Thread-9473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:47:33.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:47:33.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-25T09:47:33.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-25T09:47:33.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:47:33.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:47:33.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:47:33.236 [DEBUG] [Thread-9473] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:47:39.020 [DEBUG] [Thread-9475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:47:53.392 [DEBUG] [Thread-9476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:47:54.072 [DEBUG] [Thread-9477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:47:56.817 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:47:56.818 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:48:03.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:48:03.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-25T09:48:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 47, 49), 13.62, 41.53, 0.0, 13.27, 21.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:48:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:47:49
2025-12-25T09:48:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:48:04.251 [DEBUG] [Thread-9478] [transport.py] [_log()] starting thread (client mode): 0xb95586a0
2025-12-25T09:48:04.251 [DEBUG] [Thread-9478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:48:04.272 [DEBUG] [Thread-9478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:48:04.273 [INFO] [Thread-9478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:48:04.276 [DEBUG] [Thread-9478] [transport.py] [_log()] client lang: <none>
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] server lang: <none>
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] kex follows: False
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] Compression: none
2025-12-25T09:48:04.277 [DEBUG] [Thread-9478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:48:04.290 [DEBUG] [Thread-9478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:48:04.291 [DEBUG] [Thread-9478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:48:04.291 [DEBUG] [Thread-9478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:48:04.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:48:04.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:48:04.294 [DEBUG] [Thread-9478] [transport.py] [_log()] userauth is OK
2025-12-25T09:48:04.294 [DEBUG] [Thread-9478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:48:04.294 [DEBUG] [Thread-9478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:48:04.294 [DEBUG] [Thread-9478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:48:04.295 [DEBUG] [Thread-9478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:48:04.319 [INFO] [Thread-9478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:48:04.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:48:04.889 [DEBUG] [Thread-9478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:48:04.889 [DEBUG] [Thread-9478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:48:04.889 [DEBUG] [Thread-9478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:48:04.930 [DEBUG] [Thread-9478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:48:04.930 [DEBUG] [Thread-9478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:48:04.934 [DEBUG] [Thread-9478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:48:04.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:48:04.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:48:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:48:04.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:48:04.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:48:04.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:48:04.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:48:04.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:48:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:48:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.324716 -999.00  +20.90  15.97     48   +9.80 1 1 1 1 1   888    0 13.22 117.61 ----- 16.0 16.0 50.0 25.3 27.4 -26.5 26.7 -24.0 25.4 -22.5 26.0 -22.6
2025-12-25T09:48:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:48:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:48:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.324716
2025-12-25T09:48:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:48:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:48:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:48:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:48:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:48:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:47:49', tmtdew=13.62, humidity=41.53, cloud=0.0, wind=13.27, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:47:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:48:04.958 [DEBUG] [Thread-9478] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:48:05.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-25T09:48:05.053 [DEBUG] [Thread-9481] [transport.py] [_log()] starting thread (client mode): 0xb6bbb3a0
2025-12-25T09:48:05.053 [DEBUG] [Thread-9481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:48:05.069 [DEBUG] [Thread-9481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:48:05.069 [INFO] [Thread-9481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:48:05.076 [DEBUG] [Thread-9481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:48:05.076 [DEBUG] [Thread-9481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] client lang: <none>
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] server lang: <none>
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] kex follows: False
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] Compression: none
2025-12-25T09:48:05.077 [DEBUG] [Thread-9481] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:48:05.140 [DEBUG] [Thread-9481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:48:05.141 [DEBUG] [Thread-9481] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:48:05.142 [DEBUG] [Thread-9481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:48:05.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:48:05.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:48:05.200 [DEBUG] [Thread-9481] [transport.py] [_log()] userauth is OK
2025-12-25T09:48:05.200 [DEBUG] [Thread-9481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:48:05.200 [DEBUG] [Thread-9481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:48:05.200 [DEBUG] [Thread-9481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:48:05.201 [DEBUG] [Thread-9481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:48:05.220 [INFO] [Thread-9481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:48:05.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-25T09:48:05.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:48:06.067 [DEBUG] [Thread-9481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:48:06.068 [DEBUG] [Thread-9481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:48:06.115 [DEBUG] [Thread-9481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:48:06.115 [DEBUG] [Thread-9481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:48:06.123 [DEBUG] [Thread-9481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:48:06.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:48:06.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-25T09:48:06.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-25T09:48:06.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:48:06.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:48:06.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:48:06.156 [DEBUG] [Thread-9481] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:48:09.106 [DEBUG] [Thread-9483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:24.142 [DEBUG] [Thread-9484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:48:36.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:48:36.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:48:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 48, 21), 13.47, 41.9, 0.0, 13.41, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:48:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:48:21
2025-12-25T09:48:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:48:37.167 [DEBUG] [Thread-9485] [transport.py] [_log()] starting thread (client mode): 0xb955ae60
2025-12-25T09:48:37.167 [DEBUG] [Thread-9485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:48:37.186 [DEBUG] [Thread-9485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:48:37.186 [INFO] [Thread-9485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] client lang: <none>
2025-12-25T09:48:37.190 [DEBUG] [Thread-9485] [transport.py] [_log()] server lang: <none>
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] kex follows: False
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] Compression: none
2025-12-25T09:48:37.191 [DEBUG] [Thread-9485] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:48:37.211 [DEBUG] [Thread-9485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:48:37.212 [DEBUG] [Thread-9485] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:48:37.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:48:37.213 [DEBUG] [Thread-9485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:48:37.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:48:37.214 [DEBUG] [Thread-9485] [transport.py] [_log()] userauth is OK
2025-12-25T09:48:37.215 [DEBUG] [Thread-9485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:48:37.215 [DEBUG] [Thread-9485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:48:37.215 [DEBUG] [Thread-9485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:48:37.215 [DEBUG] [Thread-9485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:48:37.239 [INFO] [Thread-9485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:48:37.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:48:37.840 [DEBUG] [Thread-9485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:48:37.840 [DEBUG] [Thread-9485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:48:37.841 [DEBUG] [Thread-9485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:48:37.881 [DEBUG] [Thread-9485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:48:37.881 [DEBUG] [Thread-9485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:48:37.883 [DEBUG] [Thread-9485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:48:37.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:48:37.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:48:37.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:48:37.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:48:37.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:48:37.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:48:37.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:48:37.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:48:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:48:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.324716 -999.00  +20.90  15.97     48   +9.80 1 1 1 1 1   888    0 13.22 117.61 ----- 16.0 16.0 50.0 25.3 27.4 -26.5 26.7 -24.0 25.4 -22.5 26.0 -22.6
2025-12-25T09:48:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:48:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:48:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.324716
2025-12-25T09:48:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:48:37.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:48:37.900 [DEBUG] [Thread-9485] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:48:37.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:48:37.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:48:37.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:48:37.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:48:21', tmtdew=13.47, humidity=41.9, cloud=0.0, wind=13.41, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:47:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:48:37.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-25T09:48:37.996 [DEBUG] [Thread-9488] [transport.py] [_log()] starting thread (client mode): 0xb955aa10
2025-12-25T09:48:37.996 [DEBUG] [Thread-9488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:48:38.010 [DEBUG] [Thread-9488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:48:38.011 [INFO] [Thread-9488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:48:38.018 [DEBUG] [Thread-9488] [transport.py] [_log()] client lang: <none>
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] server lang: <none>
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] kex follows: False
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] Compression: none
2025-12-25T09:48:38.019 [DEBUG] [Thread-9488] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:48:38.075 [DEBUG] [Thread-9488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:48:38.075 [DEBUG] [Thread-9488] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:48:38.076 [DEBUG] [Thread-9488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:48:38.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:48:38.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:48:38.131 [DEBUG] [Thread-9488] [transport.py] [_log()] userauth is OK
2025-12-25T09:48:38.131 [DEBUG] [Thread-9488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:48:38.131 [DEBUG] [Thread-9488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:48:38.131 [DEBUG] [Thread-9488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:48:38.132 [DEBUG] [Thread-9488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:48:38.151 [INFO] [Thread-9488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:48:38.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:48:38.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:48:38.994 [DEBUG] [Thread-9488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:48:38.994 [DEBUG] [Thread-9488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:48:39.042 [DEBUG] [Thread-9488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:48:39.042 [DEBUG] [Thread-9488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:48:39.051 [DEBUG] [Thread-9488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:48:39.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:48:39.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-25T09:48:39.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-25T09:48:39.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:48:39.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:48:39.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:48:39.088 [DEBUG] [Thread-9488] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:48:39.181 [DEBUG] [Thread-9490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:53.459 [DEBUG] [Thread-9491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:54.227 [DEBUG] [Thread-9492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:56.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:48:56.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:09.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:49:09.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:49:09.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-25T09:49:09.258 [DEBUG] [Thread-9493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 48, 53), 13.38, 42.11, 0.0, 16.41, 21.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:49:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:48:53
2025-12-25T09:49:09.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:49:10.095 [DEBUG] [Thread-9494] [transport.py] [_log()] starting thread (client mode): 0xb6b4aa40
2025-12-25T09:49:10.095 [DEBUG] [Thread-9494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:49:10.116 [DEBUG] [Thread-9494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:49:10.116 [INFO] [Thread-9494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] client lang: <none>
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] server lang: <none>
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] kex follows: False
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] Compression: none
2025-12-25T09:49:10.119 [DEBUG] [Thread-9494] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:49:10.135 [DEBUG] [Thread-9494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:49:10.136 [DEBUG] [Thread-9494] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:49:10.136 [DEBUG] [Thread-9494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:49:10.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:49:10.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:49:10.138 [DEBUG] [Thread-9494] [transport.py] [_log()] userauth is OK
2025-12-25T09:49:10.138 [DEBUG] [Thread-9494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:49:10.139 [DEBUG] [Thread-9494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:49:10.139 [DEBUG] [Thread-9494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:49:10.139 [DEBUG] [Thread-9494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:49:10.162 [INFO] [Thread-9494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:49:10.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:49:10.976 [DEBUG] [Thread-9494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:49:10.977 [DEBUG] [Thread-9494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:49:10.977 [DEBUG] [Thread-9494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:49:11.017 [DEBUG] [Thread-9494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:49:11.017 [DEBUG] [Thread-9494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:49:11.021 [DEBUG] [Thread-9494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:49:11.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:49:11.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:49:11.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:49:11.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:49:11.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:49:11.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:49:11.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:49:11.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:49:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:49:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.325063 -999.00  +21.00  16.70     48   +9.70 1 2 1 1 1   888    0 13.75 122.18 ----- 16.7 16.7 45.0 25.7 27.4 -24.6 26.8 -24.3 25.6 -21.6 26.1 -22.0
2025-12-25T09:49:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:49:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:49:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.325063
2025-12-25T09:49:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:49:11.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:49:11.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:49:11.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:49:11.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:49:11.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:48:53', tmtdew=13.38, humidity=42.11, cloud=0.0, wind=16.41, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:48:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:49:11.047 [DEBUG] [Thread-9494] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:49:11.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-25T09:49:11.141 [DEBUG] [Thread-9497] [transport.py] [_log()] starting thread (client mode): 0xb955b580
2025-12-25T09:49:11.141 [DEBUG] [Thread-9497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:49:11.156 [DEBUG] [Thread-9497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:49:11.156 [INFO] [Thread-9497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] client lang: <none>
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] server lang: <none>
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] kex follows: False
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:49:11.164 [DEBUG] [Thread-9497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:49:11.165 [DEBUG] [Thread-9497] [transport.py] [_log()] Compression: none
2025-12-25T09:49:11.165 [DEBUG] [Thread-9497] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:49:11.224 [DEBUG] [Thread-9497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:49:11.224 [DEBUG] [Thread-9497] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:49:11.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:49:11.225 [DEBUG] [Thread-9497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:49:11.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:49:11.280 [DEBUG] [Thread-9497] [transport.py] [_log()] userauth is OK
2025-12-25T09:49:11.280 [DEBUG] [Thread-9497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:49:11.280 [DEBUG] [Thread-9497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:49:11.281 [DEBUG] [Thread-9497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:49:11.281 [DEBUG] [Thread-9497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:49:11.300 [INFO] [Thread-9497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:49:11.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-25T09:49:11.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:49:12.135 [DEBUG] [Thread-9497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:49:12.136 [DEBUG] [Thread-9497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:49:12.184 [DEBUG] [Thread-9497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:49:12.184 [DEBUG] [Thread-9497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:49:12.193 [DEBUG] [Thread-9497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:49:12.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:49:12.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:49:12.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-25T09:49:12.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:49:12.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:49:12.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:49:12.231 [DEBUG] [Thread-9497] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:49:24.292 [DEBUG] [Thread-9499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:39.340 [DEBUG] [Thread-9500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:42.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:49:42.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:49:42.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-25T09:49:42.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 49, 25), 13.43, 41.98, 0.0, 13.83, 21.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:49:42.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:49:25
2025-12-25T09:49:43.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:49:43.196 [DEBUG] [Thread-9501] [transport.py] [_log()] starting thread (client mode): 0xb6b50070
2025-12-25T09:49:43.197 [DEBUG] [Thread-9501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:49:43.217 [DEBUG] [Thread-9501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:49:43.217 [INFO] [Thread-9501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] client lang: <none>
2025-12-25T09:49:43.220 [DEBUG] [Thread-9501] [transport.py] [_log()] server lang: <none>
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] kex follows: False
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] Compression: none
2025-12-25T09:49:43.221 [DEBUG] [Thread-9501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:49:43.238 [DEBUG] [Thread-9501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:49:43.239 [DEBUG] [Thread-9501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:49:43.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:49:43.240 [DEBUG] [Thread-9501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:49:43.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:49:43.242 [DEBUG] [Thread-9501] [transport.py] [_log()] userauth is OK
2025-12-25T09:49:43.242 [DEBUG] [Thread-9501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:49:43.242 [DEBUG] [Thread-9501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:49:43.242 [DEBUG] [Thread-9501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:49:43.242 [DEBUG] [Thread-9501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:49:43.262 [INFO] [Thread-9501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:49:43.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:49:43.909 [DEBUG] [Thread-9501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:49:43.909 [DEBUG] [Thread-9501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:49:43.909 [DEBUG] [Thread-9501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:49:43.950 [DEBUG] [Thread-9501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:49:43.950 [DEBUG] [Thread-9501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:49:43.953 [DEBUG] [Thread-9501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:49:43.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:49:43.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:49:43.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:49:43.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:49:43.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:49:43.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:49:43.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:49:43.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:49:43.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:49:43.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.325757 -999.00  +21.10  13.90     48   +9.90 1 1 1 1 1   888    0 13.56 122.80 ----- 13.9 13.9 59.4 20.6 27.7 -24.2 26.9 -24.4 25.7 -22.1 26.1 -22.4
2025-12-25T09:49:43.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:49:43.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:49:43.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.325757
2025-12-25T09:49:43.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:49:43.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:49:43.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:49:43.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:49:43.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:49:43.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:49:25', tmtdew=13.43, humidity=41.98, cloud=0.0, wind=13.83, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:49:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:49:43.980 [DEBUG] [Thread-9501] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:49:44.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-25T09:49:44.077 [DEBUG] [Thread-9504] [transport.py] [_log()] starting thread (client mode): 0xb6b53d30
2025-12-25T09:49:44.077 [DEBUG] [Thread-9504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:49:44.092 [DEBUG] [Thread-9504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:49:44.092 [INFO] [Thread-9504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:49:44.101 [DEBUG] [Thread-9504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] client lang: <none>
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] server lang: <none>
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] kex follows: False
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:49:44.102 [DEBUG] [Thread-9504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:49:44.103 [DEBUG] [Thread-9504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:49:44.103 [DEBUG] [Thread-9504] [transport.py] [_log()] Compression: none
2025-12-25T09:49:44.103 [DEBUG] [Thread-9504] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:49:44.164 [DEBUG] [Thread-9504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:49:44.164 [DEBUG] [Thread-9504] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:49:44.165 [DEBUG] [Thread-9504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:49:44.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:49:44.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:49:44.228 [DEBUG] [Thread-9504] [transport.py] [_log()] userauth is OK
2025-12-25T09:49:44.228 [DEBUG] [Thread-9504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:49:44.228 [DEBUG] [Thread-9504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:49:44.228 [DEBUG] [Thread-9504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:49:44.228 [DEBUG] [Thread-9504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:49:44.247 [INFO] [Thread-9504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:49:44.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:49:44.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:49:45.101 [DEBUG] [Thread-9504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:49:45.101 [DEBUG] [Thread-9504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:49:45.150 [DEBUG] [Thread-9504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:49:45.151 [DEBUG] [Thread-9504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:49:45.160 [DEBUG] [Thread-9504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:49:45.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:49:45.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-25T09:49:45.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-25T09:49:45.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:49:45.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:49:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:49:45.198 [DEBUG] [Thread-9504] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:49:53.519 [DEBUG] [Thread-9506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:54.377 [DEBUG] [Thread-9507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:57.095 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:49:57.096 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:09.423 [DEBUG] [Thread-9508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:15.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:50:15.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:50:15.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:50:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 49, 57), 13.26, 42.32, 0.0, 15.0, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:50:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:49:57
2025-12-25T09:50:16.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:50:16.183 [DEBUG] [Thread-9509] [transport.py] [_log()] starting thread (client mode): 0xb6b4a830
2025-12-25T09:50:16.183 [DEBUG] [Thread-9509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:50:16.205 [DEBUG] [Thread-9509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:50:16.205 [INFO] [Thread-9509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:50:16.208 [DEBUG] [Thread-9509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:50:16.208 [DEBUG] [Thread-9509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] client lang: <none>
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] server lang: <none>
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] kex follows: False
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] Compression: none
2025-12-25T09:50:16.209 [DEBUG] [Thread-9509] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:50:16.225 [DEBUG] [Thread-9509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:50:16.225 [DEBUG] [Thread-9509] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:50:16.226 [DEBUG] [Thread-9509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:50:16.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:50:16.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:50:16.228 [DEBUG] [Thread-9509] [transport.py] [_log()] userauth is OK
2025-12-25T09:50:16.228 [DEBUG] [Thread-9509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:50:16.228 [DEBUG] [Thread-9509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:50:16.228 [DEBUG] [Thread-9509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:50:16.229 [DEBUG] [Thread-9509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:50:16.247 [INFO] [Thread-9509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:50:16.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:50:17.254 [DEBUG] [Thread-9509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:50:17.254 [DEBUG] [Thread-9509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:50:17.254 [DEBUG] [Thread-9509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:50:17.295 [DEBUG] [Thread-9509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:50:17.295 [DEBUG] [Thread-9509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:50:17.299 [DEBUG] [Thread-9509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:50:17.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:50:17.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:50:17.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:50:17.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:50:17.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:50:17.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:50:17.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:50:17.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:50:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:50:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.326104 -999.00  +21.10  20.06     49  +10.00 1 1 1 1 1   888    0 13.87 128.11 ----- 20.1 20.1 19.6 25.5 27.7 -24.3 26.9 -24.4 25.6 -22.1 26.1 -22.5
2025-12-25T09:50:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:50:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:50:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.326104
2025-12-25T09:50:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:50:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:50:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:50:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:50:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:50:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:49:57', tmtdew=13.26, humidity=42.32, cloud=0.0, wind=15.0, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:49:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:50:17.328 [DEBUG] [Thread-9509] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:50:17.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-25T09:50:17.419 [DEBUG] [Thread-9512] [transport.py] [_log()] starting thread (client mode): 0xb6b4a6e0
2025-12-25T09:50:17.419 [DEBUG] [Thread-9512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:50:17.434 [DEBUG] [Thread-9512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:50:17.434 [INFO] [Thread-9512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:50:17.441 [DEBUG] [Thread-9512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] client lang: <none>
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] server lang: <none>
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] kex follows: False
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] Compression: none
2025-12-25T09:50:17.442 [DEBUG] [Thread-9512] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:50:17.499 [DEBUG] [Thread-9512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:50:17.500 [DEBUG] [Thread-9512] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:50:17.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:50:17.501 [DEBUG] [Thread-9512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:50:17.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:50:17.556 [DEBUG] [Thread-9512] [transport.py] [_log()] userauth is OK
2025-12-25T09:50:17.556 [DEBUG] [Thread-9512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:50:17.556 [DEBUG] [Thread-9512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:50:17.556 [DEBUG] [Thread-9512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:50:17.556 [DEBUG] [Thread-9512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:50:17.575 [INFO] [Thread-9512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:50: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-25T09:50:17.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:50:18.388 [DEBUG] [Thread-9512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:50:18.389 [DEBUG] [Thread-9512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:50:18.437 [DEBUG] [Thread-9512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:50:18.437 [DEBUG] [Thread-9512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:50:18.446 [DEBUG] [Thread-9512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:50:18.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:50:18.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:50:18.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-25T09:50:18.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:50:18.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:50:18.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:50:18.484 [DEBUG] [Thread-9512] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:50:24.455 [DEBUG] [Thread-9514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:39.505 [DEBUG] [Thread-9515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:48.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:50:48.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:50:48.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-25T09:50:49.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 50, 29), 13.2, 42.49, 0.0, 15.6, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:50:49.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:50:29
2025-12-25T09:50:49.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:50:49.487 [DEBUG] [Thread-9516] [transport.py] [_log()] starting thread (client mode): 0xb6bab2b0
2025-12-25T09:50:49.487 [DEBUG] [Thread-9516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:50:49.506 [DEBUG] [Thread-9516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:50:49.507 [INFO] [Thread-9516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] client lang: <none>
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] server lang: <none>
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] kex follows: False
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] Compression: none
2025-12-25T09:50:49.510 [DEBUG] [Thread-9516] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:50:49.528 [DEBUG] [Thread-9516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:50:49.529 [DEBUG] [Thread-9516] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:50:49.529 [DEBUG] [Thread-9516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:50:49.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:50:49.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:50:49.573 [DEBUG] [Thread-9516] [transport.py] [_log()] userauth is OK
2025-12-25T09:50:49.573 [DEBUG] [Thread-9516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:50:49.573 [DEBUG] [Thread-9516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:50:49.574 [DEBUG] [Thread-9516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:50:49.574 [DEBUG] [Thread-9516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:50:49.603 [INFO] [Thread-9516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:50:49.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:50:50.237 [DEBUG] [Thread-9516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:50:50.237 [DEBUG] [Thread-9516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:50:50.237 [DEBUG] [Thread-9516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:50:50.278 [DEBUG] [Thread-9516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:50:50.278 [DEBUG] [Thread-9516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:50:50.281 [DEBUG] [Thread-9516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:50:50.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:50:50.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:50:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:50:50.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:50:50.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:50:50.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:50:50.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:50:50.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:50:50.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:50:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.326452 -999.00  +20.90  15.08     49   +9.80 1 1 1 1 1   888    0 13.68 126.97 ----- 15.1 15.1 16.6 22.0 27.6 -24.3 26.8 -25.4 25.7 -21.7 26.0 -22.4
2025-12-25T09:50:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:50:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:50:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.326452
2025-12-25T09:50:50.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:50:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:50:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:50:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:50:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:50:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:50:29', tmtdew=13.2, humidity=42.49, cloud=0.0, wind=15.6, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:50:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:50:50.307 [DEBUG] [Thread-9516] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:50:50.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-25T09:50:50.401 [DEBUG] [Thread-9519] [transport.py] [_log()] starting thread (client mode): 0xb6b4b640
2025-12-25T09:50:50.401 [DEBUG] [Thread-9519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:50:50.416 [DEBUG] [Thread-9519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:50:50.417 [INFO] [Thread-9519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:50:50.424 [DEBUG] [Thread-9519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:50:50.424 [DEBUG] [Thread-9519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:50:50.424 [DEBUG] [Thread-9519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:50:50.424 [DEBUG] [Thread-9519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:50.424 [DEBUG] [Thread-9519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:50:50.424 [DEBUG] [Thread-9519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] client lang: <none>
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] server lang: <none>
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] kex follows: False
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] Compression: none
2025-12-25T09:50:50.425 [DEBUG] [Thread-9519] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:50:50.488 [DEBUG] [Thread-9519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:50:50.489 [DEBUG] [Thread-9519] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:50:50.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:50:50.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:50:50.491 [DEBUG] [Thread-9519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:50:50.543 [DEBUG] [Thread-9519] [transport.py] [_log()] userauth is OK
2025-12-25T09:50:50.544 [DEBUG] [Thread-9519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:50:50.544 [DEBUG] [Thread-9519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:50:50.544 [DEBUG] [Thread-9519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:50:50.544 [DEBUG] [Thread-9519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:50:50.566 [INFO] [Thread-9519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:50:50.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:50:50.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:50:51.440 [DEBUG] [Thread-9519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:50:51.440 [DEBUG] [Thread-9519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:50:51.488 [DEBUG] [Thread-9519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:50:51.488 [DEBUG] [Thread-9519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:50:51.497 [DEBUG] [Thread-9519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:50:51.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:50:51.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-25T09:50:51.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-25T09:50:51.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:50:51.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:50:51.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:50:51.534 [DEBUG] [Thread-9519] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:50:53.571 [DEBUG] [Thread-9521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:54.538 [DEBUG] [Thread-9522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:57.236 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:50:57.238 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:09.591 [DEBUG] [Thread-9523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:21.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:51:21.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:51:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:51:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 51, 1), 13.06, 42.9, 0.0, 14.24, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:51:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:51:01
2025-12-25T09:51:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:51:22.548 [DEBUG] [Thread-9524] [transport.py] [_log()] starting thread (client mode): 0xb6b503a0
2025-12-25T09:51:22.548 [DEBUG] [Thread-9524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:51:22.569 [DEBUG] [Thread-9524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:51:22.569 [INFO] [Thread-9524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] client lang: <none>
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] server lang: <none>
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] kex follows: False
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:51:22.572 [DEBUG] [Thread-9524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:51:22.573 [DEBUG] [Thread-9524] [transport.py] [_log()] Compression: none
2025-12-25T09:51:22.573 [DEBUG] [Thread-9524] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:51:22.587 [DEBUG] [Thread-9524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:51:22.587 [DEBUG] [Thread-9524] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:51:22.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:51:22.587 [DEBUG] [Thread-9524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:51:22.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:51:22.588 [DEBUG] [Thread-9524] [transport.py] [_log()] userauth is OK
2025-12-25T09:51:22.588 [DEBUG] [Thread-9524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:51:22.588 [DEBUG] [Thread-9524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:51:22.588 [DEBUG] [Thread-9524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:51:22.588 [DEBUG] [Thread-9524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:51:22.597 [INFO] [Thread-9524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:51:22.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:51:23.380 [DEBUG] [Thread-9524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:51:23.380 [DEBUG] [Thread-9524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:51:23.381 [DEBUG] [Thread-9524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:51:23.421 [DEBUG] [Thread-9524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:51:23.422 [DEBUG] [Thread-9524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:51:23.424 [DEBUG] [Thread-9524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:51:23.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:51:23.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:51:23.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:51:23.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:51:23.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:51:23.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:51:23.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:51:23.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.326799 -999.00  +20.70   5.74     49   +9.60 1 2 1 1 1   888    0 13.92 131.55 ----- 5.7 5.7 329.8 15.3 27.8 -23.4 26.9 -24.1 25.7 -21.5 26.1 -22.2
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.326799
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:51:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:51:01', tmtdew=13.06, humidity=42.9, cloud=0.0, wind=14.24, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:50:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:51:23.443 [DEBUG] [Thread-9524] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:51:23.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:51:23.531 [DEBUG] [Thread-9527] [transport.py] [_log()] starting thread (client mode): 0xb6b53b20
2025-12-25T09:51:23.531 [DEBUG] [Thread-9527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:51:23.547 [DEBUG] [Thread-9527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:51:23.548 [INFO] [Thread-9527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] client lang: <none>
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] server lang: <none>
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] kex follows: False
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] Compression: none
2025-12-25T09:51:23.555 [DEBUG] [Thread-9527] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:51:23.610 [DEBUG] [Thread-9527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:51:23.610 [DEBUG] [Thread-9527] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:51:23.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:51:23.611 [DEBUG] [Thread-9527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:51:23.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:51:23.669 [DEBUG] [Thread-9527] [transport.py] [_log()] userauth is OK
2025-12-25T09:51:23.669 [DEBUG] [Thread-9527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:51:23.669 [DEBUG] [Thread-9527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:51:23.669 [DEBUG] [Thread-9527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:51:23.669 [DEBUG] [Thread-9527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:51:23.687 [INFO] [Thread-9527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:51:23.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-25T09:51:23.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:51:24.559 [DEBUG] [Thread-9527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:51:24.559 [DEBUG] [Thread-9527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:51:24.607 [DEBUG] [Thread-9527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:51:24.607 [DEBUG] [Thread-9527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:51:24.616 [DEBUG] [Thread-9527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:51:24.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:51:24.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-25T09:51:24.625 [DEBUG] [Thread-9529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:24.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:51:24.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:51:24.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:51:24.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:51:24.648 [DEBUG] [Thread-9527] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:51:39.666 [DEBUG] [Thread-9530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:53.630 [DEBUG] [Thread-9531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:51:54.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:51:54.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-25T09:51:54.701 [DEBUG] [Thread-9532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 51, 33), 12.97, 42.97, 0.0, 13.96, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:51:55.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:51:33
2025-12-25T09:51:55.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:51:55.628 [DEBUG] [Thread-9533] [transport.py] [_log()] starting thread (client mode): 0xb6ba8490
2025-12-25T09:51:55.628 [DEBUG] [Thread-9533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:51:55.649 [DEBUG] [Thread-9533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:51:55.649 [INFO] [Thread-9533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] client lang: <none>
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] server lang: <none>
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] kex follows: False
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] Compression: none
2025-12-25T09:51:55.652 [DEBUG] [Thread-9533] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:51:55.660 [DEBUG] [Thread-9533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:51:55.660 [DEBUG] [Thread-9533] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:51:55.661 [DEBUG] [Thread-9533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:51:55.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:51:55.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:51:55.662 [DEBUG] [Thread-9533] [transport.py] [_log()] userauth is OK
2025-12-25T09:51:55.662 [DEBUG] [Thread-9533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:51:55.662 [DEBUG] [Thread-9533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:51:55.662 [DEBUG] [Thread-9533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:51:55.662 [DEBUG] [Thread-9533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:51:55.686 [INFO] [Thread-9533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:51:55.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:51:56.328 [DEBUG] [Thread-9533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:51:56.328 [DEBUG] [Thread-9533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:51:56.329 [DEBUG] [Thread-9533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:51:56.369 [DEBUG] [Thread-9533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:51:56.369 [DEBUG] [Thread-9533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:51:56.373 [DEBUG] [Thread-9533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:51:56.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:51:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:51:56.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:51:56.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:51:56.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:51:56.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:51:56.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:51:56.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:51:56.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:51:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.327146 -999.00  +20.70  11.06     49   +9.70 1 2 1 1 1   888    0 14.18 136.70 ----- 11.1 11.1 35.0 14.1 27.9 -24.1 27.1 -23.9 25.7 -21.2 26.1 -21.8
2025-12-25T09:51:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:51:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:51:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.327146
2025-12-25T09:51:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:51:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:51:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:51:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:51:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:51:56.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:51:33', tmtdew=12.97, humidity=42.97, cloud=0.0, wind=13.96, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:51:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:51:56.400 [DEBUG] [Thread-9533] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:51:56.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:51:56.495 [DEBUG] [Thread-9536] [transport.py] [_log()] starting thread (client mode): 0xb6b22650
2025-12-25T09:51:56.495 [DEBUG] [Thread-9536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:51:56.510 [DEBUG] [Thread-9536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:51:56.510 [INFO] [Thread-9536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:51:56.517 [DEBUG] [Thread-9536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] client lang: <none>
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] server lang: <none>
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] kex follows: False
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:51:56.518 [DEBUG] [Thread-9536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:51:56.519 [DEBUG] [Thread-9536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:51:56.519 [DEBUG] [Thread-9536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:51:56.519 [DEBUG] [Thread-9536] [transport.py] [_log()] Compression: none
2025-12-25T09:51:56.519 [DEBUG] [Thread-9536] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:51:56.577 [DEBUG] [Thread-9536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:51:56.577 [DEBUG] [Thread-9536] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:51:56.578 [DEBUG] [Thread-9536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:51:56.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:51:56.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:51:56.636 [DEBUG] [Thread-9536] [transport.py] [_log()] userauth is OK
2025-12-25T09:51:56.636 [DEBUG] [Thread-9536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:51:56.636 [DEBUG] [Thread-9536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:51:56.636 [DEBUG] [Thread-9536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:51:56.637 [DEBUG] [Thread-9536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:51:56.656 [INFO] [Thread-9536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:51:56.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-25T09:51:56.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:51:57.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:57.378 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:51:57.457 [DEBUG] [Thread-9536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:51:57.457 [DEBUG] [Thread-9536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:51:57.505 [DEBUG] [Thread-9536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:51:57.505 [DEBUG] [Thread-9536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:51:57.514 [DEBUG] [Thread-9536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:51:57.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:51:57.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:51:57.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:51:57.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:51:57.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:51:57.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:51:57.551 [DEBUG] [Thread-9536] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:52:09.730 [DEBUG] [Thread-9538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:52:24.783 [DEBUG] [Thread-9539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:52:27.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:52:27.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:52:27.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-25T09:52:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 52, 5), 12.97, 42.99, 0.0, 14.56, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:52:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:52:05
2025-12-25T09:52:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:52:28.528 [DEBUG] [Thread-9540] [transport.py] [_log()] starting thread (client mode): 0xb6bbbca0
2025-12-25T09:52:28.528 [DEBUG] [Thread-9540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:52:28.550 [DEBUG] [Thread-9540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:52:28.550 [INFO] [Thread-9540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:52:28.553 [DEBUG] [Thread-9540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:52:28.553 [DEBUG] [Thread-9540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:52:28.553 [DEBUG] [Thread-9540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:52:28.553 [DEBUG] [Thread-9540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:52:28.553 [DEBUG] [Thread-9540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:52:28.553 [DEBUG] [Thread-9540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] client lang: <none>
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] server lang: <none>
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] kex follows: False
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] Compression: none
2025-12-25T09:52:28.554 [DEBUG] [Thread-9540] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:52:28.573 [DEBUG] [Thread-9540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:52:28.574 [DEBUG] [Thread-9540] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:52:28.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:52:28.575 [DEBUG] [Thread-9540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:52:28.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:52:28.577 [DEBUG] [Thread-9540] [transport.py] [_log()] userauth is OK
2025-12-25T09:52:28.577 [DEBUG] [Thread-9540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:52:28.577 [DEBUG] [Thread-9540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:52:28.577 [DEBUG] [Thread-9540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:52:28.577 [DEBUG] [Thread-9540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:52:28.601 [INFO] [Thread-9540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:52:28.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:52:29.311 [DEBUG] [Thread-9540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:52:29.311 [DEBUG] [Thread-9540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:52:29.311 [DEBUG] [Thread-9540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:52:29.352 [DEBUG] [Thread-9540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:52:29.352 [DEBUG] [Thread-9540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:52:29.356 [DEBUG] [Thread-9540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:52:29.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:52:29.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:52:29.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:52:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:52:29.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:52:29.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:52:29.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:52:29.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:52:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:52:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.327493 -999.00  +21.10  17.62     49  +10.10 1 2 1 1 1   888    0 13.79 120.81 ----- 17.6 17.6 56.4 18.4 28.0 -23.5 27.2 -23.8 25.8 -21.3 26.2 -22.0
2025-12-25T09:52:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:52:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:52:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.327493
2025-12-25T09:52:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:52:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:52:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:52:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:52:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:52:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:52:05', tmtdew=12.97, humidity=42.99, cloud=0.0, wind=14.56, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:51:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:52:29.384 [DEBUG] [Thread-9540] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:52:29.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-25T09:52:29.474 [DEBUG] [Thread-9543] [transport.py] [_log()] starting thread (client mode): 0xb6b4a830
2025-12-25T09:52:29.474 [DEBUG] [Thread-9543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:52:29.490 [DEBUG] [Thread-9543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:52:29.490 [INFO] [Thread-9543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:52:29.497 [DEBUG] [Thread-9543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] client lang: <none>
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] server lang: <none>
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] kex follows: False
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] Compression: none
2025-12-25T09:52:29.498 [DEBUG] [Thread-9543] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:52:29.556 [DEBUG] [Thread-9543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:52:29.556 [DEBUG] [Thread-9543] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:52:29.557 [DEBUG] [Thread-9543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:52:29.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:52:29.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:52:29.612 [DEBUG] [Thread-9543] [transport.py] [_log()] userauth is OK
2025-12-25T09:52:29.612 [DEBUG] [Thread-9543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:52:29.612 [DEBUG] [Thread-9543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:52:29.612 [DEBUG] [Thread-9543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:52:29.612 [DEBUG] [Thread-9543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:52:29.631 [INFO] [Thread-9543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:52:29.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-25T09:52:29.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:52:30.472 [DEBUG] [Thread-9543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:52:30.472 [DEBUG] [Thread-9543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:52:30.520 [DEBUG] [Thread-9543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:52:30.520 [DEBUG] [Thread-9543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:52:30.529 [DEBUG] [Thread-9543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:52:30.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:52:30.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-25T09:52:30.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-25T09:52:30.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:52:30.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:52:30.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:52:30.565 [DEBUG] [Thread-9543] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:52:39.815 [DEBUG] [Thread-9545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:52:53.684 [DEBUG] [Thread-9546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:52:54.856 [DEBUG] [Thread-9547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:52:57.518 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:52:57.519 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:53:00.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:53:00.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:53:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 52, 37), 13.36, 42.14, 0.0, 12.11, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:53:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:52:37
2025-12-25T09:53:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:53:01.539 [DEBUG] [Thread-9548] [transport.py] [_log()] starting thread (client mode): 0xb6b227d0
2025-12-25T09:53:01.539 [DEBUG] [Thread-9548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:53:01.560 [DEBUG] [Thread-9548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:53:01.560 [INFO] [Thread-9548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:53:01.563 [DEBUG] [Thread-9548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:53:01.563 [DEBUG] [Thread-9548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:53:01.563 [DEBUG] [Thread-9548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] client lang: <none>
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] server lang: <none>
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] kex follows: False
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:53:01.564 [DEBUG] [Thread-9548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:53:01.565 [DEBUG] [Thread-9548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:53:01.565 [DEBUG] [Thread-9548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:53:01.565 [DEBUG] [Thread-9548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:53:01.565 [DEBUG] [Thread-9548] [transport.py] [_log()] Compression: none
2025-12-25T09:53:01.565 [DEBUG] [Thread-9548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:53:01.584 [DEBUG] [Thread-9548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:53:01.585 [DEBUG] [Thread-9548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:53:01.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:53:01.586 [DEBUG] [Thread-9548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:53:01.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:53:01.629 [DEBUG] [Thread-9548] [transport.py] [_log()] userauth is OK
2025-12-25T09:53:01.629 [DEBUG] [Thread-9548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:53:01.629 [DEBUG] [Thread-9548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:53:01.630 [DEBUG] [Thread-9548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:53:01.630 [DEBUG] [Thread-9548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:53:01.667 [INFO] [Thread-9548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:53:01.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:53:02.395 [DEBUG] [Thread-9548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:53:02.396 [DEBUG] [Thread-9548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:53:02.396 [DEBUG] [Thread-9548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:53:02.437 [DEBUG] [Thread-9548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:53:02.437 [DEBUG] [Thread-9548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:53:02.441 [DEBUG] [Thread-9548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:53:02.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:53:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:53:02.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:53:02.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:53:02.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:53:02.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:53:02.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:53:02.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:53:02.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:53:02.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.327841 -999.00  +21.20  20.19     49  +10.30 1 1 1 1 1   888    0 13.51 114.12 ----- 20.2 20.2 60.6 21.3 28.1 -23.4 27.2 -23.6 25.8 -23.1 26.2 -23.5
2025-12-25T09:53:02.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:53:02.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:53:02.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.327841
2025-12-25T09:53:02.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:53:02.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:53:02.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:53:02.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:53:02.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:53:02.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:52:37', tmtdew=13.36, humidity=42.14, cloud=0.0, wind=12.11, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:52:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:53:02.469 [DEBUG] [Thread-9548] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:53:02.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:53:02.565 [DEBUG] [Thread-9551] [transport.py] [_log()] starting thread (client mode): 0xb6b20d30
2025-12-25T09:53:02.565 [DEBUG] [Thread-9551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:53:02.583 [DEBUG] [Thread-9551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:53:02.583 [INFO] [Thread-9551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:53:02.590 [DEBUG] [Thread-9551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] client lang: <none>
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] server lang: <none>
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] kex follows: False
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:53:02.591 [DEBUG] [Thread-9551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:53:02.592 [DEBUG] [Thread-9551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:53:02.592 [DEBUG] [Thread-9551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:53:02.592 [DEBUG] [Thread-9551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:53:02.592 [DEBUG] [Thread-9551] [transport.py] [_log()] Compression: none
2025-12-25T09:53:02.592 [DEBUG] [Thread-9551] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:53:02.647 [DEBUG] [Thread-9551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:53:02.648 [DEBUG] [Thread-9551] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:53:02.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:53:02.649 [DEBUG] [Thread-9551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:53:02.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:53:02.712 [DEBUG] [Thread-9551] [transport.py] [_log()] userauth is OK
2025-12-25T09:53:02.713 [DEBUG] [Thread-9551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:53:02.713 [DEBUG] [Thread-9551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:53:02.713 [DEBUG] [Thread-9551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:53:02.713 [DEBUG] [Thread-9551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:53:02.734 [INFO] [Thread-9551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:53:02.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-25T09:53:02.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:53:03.560 [DEBUG] [Thread-9551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:53:03.560 [DEBUG] [Thread-9551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:53:03.615 [DEBUG] [Thread-9551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:53:03.615 [DEBUG] [Thread-9551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:53:03.624 [DEBUG] [Thread-9551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:53:03.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:53:03.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:53:03.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-25T09:53:03.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:53:03.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:53:03.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:53:03.665 [DEBUG] [Thread-9551] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:53:09.893 [DEBUG] [Thread-9553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:24.939 [DEBUG] [Thread-9554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:33.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:53:33.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:53:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:53:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 53, 9), 13.34, 42.21, 0.0, 15.21, 21.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:53:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:53:09
2025-12-25T09:53:34.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:53:34.619 [DEBUG] [Thread-9555] [transport.py] [_log()] starting thread (client mode): 0xb6b53b20
2025-12-25T09:53:34.619 [DEBUG] [Thread-9555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:53:34.629 [DEBUG] [Thread-9555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:53:34.629 [INFO] [Thread-9555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] client lang: <none>
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] server lang: <none>
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] kex follows: False
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:53:34.633 [DEBUG] [Thread-9555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:53:34.634 [DEBUG] [Thread-9555] [transport.py] [_log()] Compression: none
2025-12-25T09:53:34.634 [DEBUG] [Thread-9555] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:53:34.650 [DEBUG] [Thread-9555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:53:34.651 [DEBUG] [Thread-9555] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:53:34.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:53:34.652 [DEBUG] [Thread-9555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:53:34.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:53:34.653 [DEBUG] [Thread-9555] [transport.py] [_log()] userauth is OK
2025-12-25T09:53:34.654 [DEBUG] [Thread-9555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:53:34.654 [DEBUG] [Thread-9555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:53:34.654 [DEBUG] [Thread-9555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:53:34.654 [DEBUG] [Thread-9555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:53:34.672 [INFO] [Thread-9555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:53:34.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:53:35.466 [DEBUG] [Thread-9555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:53:35.466 [DEBUG] [Thread-9555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:53:35.467 [DEBUG] [Thread-9555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:53:35.508 [DEBUG] [Thread-9555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:53:35.509 [DEBUG] [Thread-9555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:53:35.511 [DEBUG] [Thread-9555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:53:35.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:53:35.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:53:35.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:53:35.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:53:35.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:53:35.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:53:35.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:53:35.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:53:35.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:53:35.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.328535 -999.00  +20.80  15.18     50  +10.20 1 2 1 1 1   888    0 13.69 115.07 ----- 15.2 15.2 10.8 21.2 27.9 -24.1 27.1 -24.8 25.8 -21.2 26.3 -22.1
2025-12-25T09:53:35.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:53:35.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:53:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.328535
2025-12-25T09:53:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:53:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:53:35.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:53:35.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:53:35.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:53:35.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:53:09', tmtdew=13.34, humidity=42.21, cloud=0.0, wind=15.21, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:53:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:53:35.536 [DEBUG] [Thread-9555] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:53:35.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-25T09:53:35.632 [DEBUG] [Thread-9558] [transport.py] [_log()] starting thread (client mode): 0xb6baa770
2025-12-25T09:53:35.632 [DEBUG] [Thread-9558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:53:35.646 [DEBUG] [Thread-9558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:53:35.646 [INFO] [Thread-9558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] client lang: <none>
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] server lang: <none>
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] kex follows: False
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:53:35.654 [DEBUG] [Thread-9558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:53:35.655 [DEBUG] [Thread-9558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:53:35.655 [DEBUG] [Thread-9558] [transport.py] [_log()] Compression: none
2025-12-25T09:53:35.655 [DEBUG] [Thread-9558] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:53:35.711 [DEBUG] [Thread-9558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:53:35.712 [DEBUG] [Thread-9558] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:53:35.712 [DEBUG] [Thread-9558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:53:35.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:53:35.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:53:35.768 [DEBUG] [Thread-9558] [transport.py] [_log()] userauth is OK
2025-12-25T09:53:35.768 [DEBUG] [Thread-9558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:53:35.768 [DEBUG] [Thread-9558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:53:35.768 [DEBUG] [Thread-9558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:53:35.769 [DEBUG] [Thread-9558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:53:35.787 [INFO] [Thread-9558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:53:35.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:53:35.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:53:36.599 [DEBUG] [Thread-9558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:53:36.599 [DEBUG] [Thread-9558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:53:36.647 [DEBUG] [Thread-9558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:53:36.647 [DEBUG] [Thread-9558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:53:36.656 [DEBUG] [Thread-9558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:53:36.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:53:36.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:53:36.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:53:36.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:53:36.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:53:36.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:53:36.696 [DEBUG] [Thread-9558] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:53:39.975 [DEBUG] [Thread-9560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:53.734 [DEBUG] [Thread-9561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:55.029 [DEBUG] [Thread-9562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:57.660 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:53:57.661 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:06.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:54:06.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:54:06.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:54:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 53, 41), 13.11, 43.04, 0.0, 18.58, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:54:07.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:53:41
2025-12-25T09:54:07.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:54:07.690 [DEBUG] [Thread-9563] [transport.py] [_log()] starting thread (client mode): 0xb6baa650
2025-12-25T09:54:07.690 [DEBUG] [Thread-9563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:54:07.709 [DEBUG] [Thread-9563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:54:07.709 [INFO] [Thread-9563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:54:07.712 [DEBUG] [Thread-9563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] client lang: <none>
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] server lang: <none>
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] kex follows: False
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:54:07.713 [DEBUG] [Thread-9563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:54:07.714 [DEBUG] [Thread-9563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:54:07.714 [DEBUG] [Thread-9563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:54:07.714 [DEBUG] [Thread-9563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:54:07.714 [DEBUG] [Thread-9563] [transport.py] [_log()] Compression: none
2025-12-25T09:54:07.714 [DEBUG] [Thread-9563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:54:07.732 [DEBUG] [Thread-9563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:54:07.732 [DEBUG] [Thread-9563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:54:07.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:54:07.733 [DEBUG] [Thread-9563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:54:07.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:54:07.735 [DEBUG] [Thread-9563] [transport.py] [_log()] userauth is OK
2025-12-25T09:54:07.735 [DEBUG] [Thread-9563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:54:07.736 [DEBUG] [Thread-9563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:54:07.736 [DEBUG] [Thread-9563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:54:07.736 [DEBUG] [Thread-9563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:54:07.771 [INFO] [Thread-9563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:54:07.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:54:08.387 [DEBUG] [Thread-9563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:54:08.387 [DEBUG] [Thread-9563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:54:08.388 [DEBUG] [Thread-9563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:54:08.428 [DEBUG] [Thread-9563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:54:08.428 [DEBUG] [Thread-9563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:54:08.432 [DEBUG] [Thread-9563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:54:08.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:54:08.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:54:08.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:54:08.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:54:08.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:54:08.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:54:08.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:54:08.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:54:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:54:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.328882 -999.00  +20.70   6.96     50  +10.10 1 2 1 1 1   888    0 13.70 109.96 ----- 7.0 7.0 18.3 13.5 27.9 -23.4 27.1 -23.7 25.9 -21.0 26.2 -22.0
2025-12-25T09:54:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:54:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:54:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.328882
2025-12-25T09:54:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:54:08.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:54:08.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:54:08.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:54:08.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:54:08.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:53:41', tmtdew=13.11, humidity=43.04, cloud=0.0, wind=18.58, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:53:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:54:08.459 [DEBUG] [Thread-9563] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:54:08.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-25T09:54:08.563 [DEBUG] [Thread-9566] [transport.py] [_log()] starting thread (client mode): 0xb6bab850
2025-12-25T09:54:08.563 [DEBUG] [Thread-9566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:54:08.577 [DEBUG] [Thread-9566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:54:08.578 [INFO] [Thread-9566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:54:08.585 [DEBUG] [Thread-9566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:54:08.585 [DEBUG] [Thread-9566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:54:08.585 [DEBUG] [Thread-9566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:54:08.585 [DEBUG] [Thread-9566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:08.585 [DEBUG] [Thread-9566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] client lang: <none>
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] server lang: <none>
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] kex follows: False
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:54:08.586 [DEBUG] [Thread-9566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:54:08.587 [DEBUG] [Thread-9566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:54:08.587 [DEBUG] [Thread-9566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:54:08.587 [DEBUG] [Thread-9566] [transport.py] [_log()] Compression: none
2025-12-25T09:54:08.587 [DEBUG] [Thread-9566] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:54:08.652 [DEBUG] [Thread-9566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:54:08.653 [DEBUG] [Thread-9566] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:54:08.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:54:08.654 [DEBUG] [Thread-9566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:54:08.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:54:08.716 [DEBUG] [Thread-9566] [transport.py] [_log()] userauth is OK
2025-12-25T09:54:08.717 [DEBUG] [Thread-9566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:54:08.717 [DEBUG] [Thread-9566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:54:08.717 [DEBUG] [Thread-9566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:54:08.717 [DEBUG] [Thread-9566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:54:08.735 [INFO] [Thread-9566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:54:08.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-25T09:54:08.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:54:09.628 [DEBUG] [Thread-9566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:54:09.629 [DEBUG] [Thread-9566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:54:09.677 [DEBUG] [Thread-9566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:54:09.677 [DEBUG] [Thread-9566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:54:09.686 [DEBUG] [Thread-9566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:54:09.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:54:09.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-25T09:54:09.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:54:09.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:54:09.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:54:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:54:09.723 [DEBUG] [Thread-9566] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:54:10.061 [DEBUG] [Thread-9568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:25.117 [DEBUG] [Thread-9569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:39.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:54:39.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:54:39.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-25T09:54:40.151 [DEBUG] [Thread-9570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:40.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 54, 14), 13.17, 42.87, 0.0, 22.23, 21.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:54:40.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:54:14
2025-12-25T09:54:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:54:40.745 [DEBUG] [Thread-9571] [transport.py] [_log()] starting thread (client mode): 0xb6bab8e0
2025-12-25T09:54:40.745 [DEBUG] [Thread-9571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:54:40.758 [DEBUG] [Thread-9571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:54:40.758 [INFO] [Thread-9571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:54:40.761 [DEBUG] [Thread-9571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] client lang: <none>
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] server lang: <none>
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] kex follows: False
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] Compression: none
2025-12-25T09:54:40.762 [DEBUG] [Thread-9571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:54:40.778 [DEBUG] [Thread-9571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:54:40.778 [DEBUG] [Thread-9571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:54:40.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:54:40.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:54:40.778 [DEBUG] [Thread-9571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:54:40.779 [DEBUG] [Thread-9571] [transport.py] [_log()] userauth is OK
2025-12-25T09:54:40.779 [DEBUG] [Thread-9571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:54:40.779 [DEBUG] [Thread-9571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:54:40.779 [DEBUG] [Thread-9571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:54:40.779 [DEBUG] [Thread-9571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:54:40.796 [INFO] [Thread-9571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:54:40.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:54:41.580 [DEBUG] [Thread-9571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:54:41.580 [DEBUG] [Thread-9571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:54:41.580 [DEBUG] [Thread-9571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:54:41.621 [DEBUG] [Thread-9571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:54:41.621 [DEBUG] [Thread-9571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:54:41.623 [DEBUG] [Thread-9571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:54:41.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:54:41.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:54:41.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:54:41.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:54:41.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:54:41.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:54:41.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.329230 -999.00  +20.80  10.27     50  +10.20 1 2 1 1 1   888    0 12.93 94.42 ----- 10.3 10.3 65.2 12.1 28.1 -23.7 27.3 -23.3 25.9 -21.2 26.4 -21.8
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.329230
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:54:41.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:54:14', tmtdew=13.17, humidity=42.87, cloud=0.0, wind=22.23, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:54:05.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:54:41.643 [DEBUG] [Thread-9571] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:54:41.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-25T09:54:41.726 [DEBUG] [Thread-9574] [transport.py] [_log()] starting thread (client mode): 0xb6b2b040
2025-12-25T09:54:41.726 [DEBUG] [Thread-9574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:54:41.740 [DEBUG] [Thread-9574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:54:41.741 [INFO] [Thread-9574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] client lang: <none>
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] server lang: <none>
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] kex follows: False
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] Compression: none
2025-12-25T09:54:41.748 [DEBUG] [Thread-9574] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:54:41.805 [DEBUG] [Thread-9574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:54:41.806 [DEBUG] [Thread-9574] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:54:41.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:54:41.806 [DEBUG] [Thread-9574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:54:41.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:54:41.863 [DEBUG] [Thread-9574] [transport.py] [_log()] userauth is OK
2025-12-25T09:54:41.863 [DEBUG] [Thread-9574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:54:41.863 [DEBUG] [Thread-9574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:54:41.863 [DEBUG] [Thread-9574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:54:41.863 [DEBUG] [Thread-9574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:54:41.880 [INFO] [Thread-9574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:54:41.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-25T09:54:41.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:54:42.705 [DEBUG] [Thread-9574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:54:42.705 [DEBUG] [Thread-9574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:54:42.752 [DEBUG] [Thread-9574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:54:42.753 [DEBUG] [Thread-9574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:54:42.761 [DEBUG] [Thread-9574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:54:42.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:54:42.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-25T09:54:42.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-25T09:54:42.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:54:42.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:54:42.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:54:42.795 [DEBUG] [Thread-9574] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:54:53.779 [DEBUG] [Thread-9576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:55.190 [DEBUG] [Thread-9577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:57.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:54:57.811 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:10.242 [DEBUG] [Thread-9578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:55:12.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:55:12.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-25T09:55:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 54, 46), 13.46, 42.13, 0.0, 14.73, 21.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:55:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:54:46
2025-12-25T09:55:13.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:55:13.769 [DEBUG] [Thread-9579] [transport.py] [_log()] starting thread (client mode): 0xb6b2bd60
2025-12-25T09:55:13.769 [DEBUG] [Thread-9579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:55:13.795 [DEBUG] [Thread-9579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:55:13.795 [INFO] [Thread-9579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] client lang: <none>
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] server lang: <none>
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] kex follows: False
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:55:13.797 [DEBUG] [Thread-9579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:55:13.798 [DEBUG] [Thread-9579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:55:13.798 [DEBUG] [Thread-9579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:55:13.798 [DEBUG] [Thread-9579] [transport.py] [_log()] Compression: none
2025-12-25T09:55:13.798 [DEBUG] [Thread-9579] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:55:13.815 [DEBUG] [Thread-9579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:55:13.816 [DEBUG] [Thread-9579] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:55:13.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:55:13.817 [DEBUG] [Thread-9579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:55:13.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:55:13.818 [DEBUG] [Thread-9579] [transport.py] [_log()] userauth is OK
2025-12-25T09:55:13.818 [DEBUG] [Thread-9579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:55:13.818 [DEBUG] [Thread-9579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:55:13.818 [DEBUG] [Thread-9579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:55:13.818 [DEBUG] [Thread-9579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:55:13.837 [INFO] [Thread-9579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:55:13.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:55:14.489 [DEBUG] [Thread-9579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:55:14.489 [DEBUG] [Thread-9579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:55:14.490 [DEBUG] [Thread-9579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:55:14.530 [DEBUG] [Thread-9579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:55:14.530 [DEBUG] [Thread-9579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:55:14.533 [DEBUG] [Thread-9579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:55:14.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:55:14.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:55:14.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:55:14.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:55:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:55:14.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:55:14.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:55:14.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:55:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:55:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.329576 -999.00  +21.20  21.86     50  +10.50 1 2 1 1 1   888    0 13.23 98.70 ----- 21.9 21.9 58.4 24.4 28.1 -23.7 27.4 -22.9 25.9 -22.0 26.4 -21.7
2025-12-25T09:55:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:55:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:55:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.329576
2025-12-25T09:55:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:55:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:55:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:55:14.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:55:14.558 [DEBUG] [Thread-9579] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:55:14.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:55:14.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:54:46', tmtdew=13.46, humidity=42.13, cloud=0.0, wind=14.73, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:54:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:55:14.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-25T09:55:14.648 [DEBUG] [Thread-9582] [transport.py] [_log()] starting thread (client mode): 0xb6b609d0
2025-12-25T09:55:14.649 [DEBUG] [Thread-9582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:55:14.663 [DEBUG] [Thread-9582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:55:14.664 [INFO] [Thread-9582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:55:14.671 [DEBUG] [Thread-9582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:55:14.672 [DEBUG] [Thread-9582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] client lang: <none>
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] server lang: <none>
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] kex follows: False
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] Compression: none
2025-12-25T09:55:14.673 [DEBUG] [Thread-9582] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:55:14.733 [DEBUG] [Thread-9582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:55:14.733 [DEBUG] [Thread-9582] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:55:14.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:55:14.734 [DEBUG] [Thread-9582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:55:14.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:55:14.796 [DEBUG] [Thread-9582] [transport.py] [_log()] userauth is OK
2025-12-25T09:55:14.796 [DEBUG] [Thread-9582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:55:14.796 [DEBUG] [Thread-9582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:55:14.796 [DEBUG] [Thread-9582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:55:14.797 [DEBUG] [Thread-9582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:55:14.816 [INFO] [Thread-9582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:55:14.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-25T09:55:14.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:55:15.628 [DEBUG] [Thread-9582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:55:15.628 [DEBUG] [Thread-9582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:55:15.676 [DEBUG] [Thread-9582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:55:15.676 [DEBUG] [Thread-9582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:55:15.684 [DEBUG] [Thread-9582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:55:15.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:55:15.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-25T09:55:15.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:55:15.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:55:15.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:55:15.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:55:15.716 [DEBUG] [Thread-9582] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:55:25.275 [DEBUG] [Thread-9584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:40.330 [DEBUG] [Thread-9585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:45.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:55:45.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:55:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:55:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 55, 18), 13.76, 41.37, 0.0, 14.71, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:55:46.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:55:18
2025-12-25T09:55:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:55:46.730 [DEBUG] [Thread-9586] [transport.py] [_log()] starting thread (client mode): 0xb6bba8c0
2025-12-25T09:55:46.731 [DEBUG] [Thread-9586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:55:46.750 [DEBUG] [Thread-9586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:55:46.750 [INFO] [Thread-9586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:46.754 [DEBUG] [Thread-9586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] client lang: <none>
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] server lang: <none>
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] kex follows: False
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] Compression: none
2025-12-25T09:55:46.755 [DEBUG] [Thread-9586] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:55:46.776 [DEBUG] [Thread-9586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:55:46.777 [DEBUG] [Thread-9586] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:55:46.777 [DEBUG] [Thread-9586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:55:46.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:55:46.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:55:46.780 [DEBUG] [Thread-9586] [transport.py] [_log()] userauth is OK
2025-12-25T09:55:46.780 [DEBUG] [Thread-9586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:55:46.780 [DEBUG] [Thread-9586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:55:46.780 [DEBUG] [Thread-9586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:55:46.781 [DEBUG] [Thread-9586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:55:46.803 [INFO] [Thread-9586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:55:46.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:55:47.611 [DEBUG] [Thread-9586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:55:47.611 [DEBUG] [Thread-9586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:55:47.611 [DEBUG] [Thread-9586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:55:47.653 [DEBUG] [Thread-9586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:55:47.653 [DEBUG] [Thread-9586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:55:47.655 [DEBUG] [Thread-9586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:55:47.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:55:47.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:55:47.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:55:47.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:55:47.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:55:47.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:55:47.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.329924 -999.00  +21.50  24.24     48  +10.10 1 1 1 1 1   888    0 13.50 101.71 ----- 24.2 24.2 60.4 30.9 28.1 -24.2 27.4 -23.7 25.8 -23.2 26.4 -22.2
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.329924
2025-12-25T09:55:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:55:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:55:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:55:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:55:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:55:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:55:18', tmtdew=13.76, humidity=41.37, cloud=0.0, wind=14.71, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:55:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:55:47.676 [DEBUG] [Thread-9586] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:55:47.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-25T09:55:47.756 [DEBUG] [Thread-9589] [transport.py] [_log()] starting thread (client mode): 0xb6b287c0
2025-12-25T09:55:47.756 [DEBUG] [Thread-9589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:55:47.773 [DEBUG] [Thread-9589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:55:47.773 [INFO] [Thread-9589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:55:47.780 [DEBUG] [Thread-9589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:55:47.780 [DEBUG] [Thread-9589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:55:47.780 [DEBUG] [Thread-9589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:55:47.780 [DEBUG] [Thread-9589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:47.780 [DEBUG] [Thread-9589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:55:47.780 [DEBUG] [Thread-9589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] client lang: <none>
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] server lang: <none>
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] kex follows: False
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] Compression: none
2025-12-25T09:55:47.781 [DEBUG] [Thread-9589] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:55:47.840 [DEBUG] [Thread-9589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:55:47.841 [DEBUG] [Thread-9589] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:55:47.841 [DEBUG] [Thread-9589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:55:47.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:55:47.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:55:47.895 [DEBUG] [Thread-9589] [transport.py] [_log()] userauth is OK
2025-12-25T09:55:47.896 [DEBUG] [Thread-9589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:55:47.896 [DEBUG] [Thread-9589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:55:47.896 [DEBUG] [Thread-9589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:55:47.896 [DEBUG] [Thread-9589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:55:47.920 [INFO] [Thread-9589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:55:47.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-25T09:55:47.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:55:48.794 [DEBUG] [Thread-9589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:55:48.795 [DEBUG] [Thread-9589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:55:48.842 [DEBUG] [Thread-9589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:55:48.842 [DEBUG] [Thread-9589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:55:48.851 [DEBUG] [Thread-9589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:55:48.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:55:48.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-25T09:55:48.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:55:48.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:55:48.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:55:48.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:55:48.888 [DEBUG] [Thread-9589] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:55:53.837 [DEBUG] [Thread-9591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:55.363 [DEBUG] [Thread-9592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:57.951 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:55:57.952 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:10.405 [DEBUG] [Thread-9593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:18.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:56:18.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:56:18.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-25T09:56:19.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 55, 50), 14.34, 40.07, 0.0, 13.32, 22.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:56:19.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:55:50
2025-12-25T09:56:19.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:56:19.906 [DEBUG] [Thread-9594] [transport.py] [_log()] starting thread (client mode): 0xb6babb80
2025-12-25T09:56:19.907 [DEBUG] [Thread-9594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:56:19.925 [DEBUG] [Thread-9594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:56:19.925 [INFO] [Thread-9594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] client lang: <none>
2025-12-25T09:56:19.928 [DEBUG] [Thread-9594] [transport.py] [_log()] server lang: <none>
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] kex follows: False
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] Compression: none
2025-12-25T09:56:19.929 [DEBUG] [Thread-9594] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:56:19.945 [DEBUG] [Thread-9594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:56:19.946 [DEBUG] [Thread-9594] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:56:19.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:56:19.947 [DEBUG] [Thread-9594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:56:19.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:56:19.949 [DEBUG] [Thread-9594] [transport.py] [_log()] userauth is OK
2025-12-25T09:56:19.949 [DEBUG] [Thread-9594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:56:19.950 [DEBUG] [Thread-9594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:56:19.950 [DEBUG] [Thread-9594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:56:19.950 [DEBUG] [Thread-9594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:56:19.966 [INFO] [Thread-9594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:56:19.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:56:20.591 [DEBUG] [Thread-9594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:56:20.591 [DEBUG] [Thread-9594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:56:20.591 [DEBUG] [Thread-9594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:56:20.632 [DEBUG] [Thread-9594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:56:20.632 [DEBUG] [Thread-9594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:56:20.635 [DEBUG] [Thread-9594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:56:20.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:56:20.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:56:20.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:56:20.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:56:20.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:56:20.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:56:20.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:56:20.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:56:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:56:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.330271 -999.00  +21.70  21.12     47  +10.00 1 2 1 1 1   888    0 13.37 103.65 ----- 21.1 21.1 62.8 26.6 28.1 -23.0 27.4 -23.3 26.1 -21.3 26.6 -22.0
2025-12-25T09:56:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:56:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:56:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.330271
2025-12-25T09:56:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:56:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:56:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:56:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:56:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:56:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:55:50', tmtdew=14.34, humidity=40.07, cloud=0.0, wind=13.32, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:55:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:56:20.660 [DEBUG] [Thread-9594] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:56:20.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-25T09:56:20.752 [DEBUG] [Thread-9597] [transport.py] [_log()] starting thread (client mode): 0xb6b28850
2025-12-25T09:56:20.752 [DEBUG] [Thread-9597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:56:20.766 [DEBUG] [Thread-9597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:56:20.766 [INFO] [Thread-9597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] client lang: <none>
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] server lang: <none>
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] kex follows: False
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] Compression: none
2025-12-25T09:56:20.774 [DEBUG] [Thread-9597] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:56:20.831 [DEBUG] [Thread-9597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:56:20.831 [DEBUG] [Thread-9597] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:56:20.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:56:20.832 [DEBUG] [Thread-9597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:56:20.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:56:20.888 [DEBUG] [Thread-9597] [transport.py] [_log()] userauth is OK
2025-12-25T09:56:20.888 [DEBUG] [Thread-9597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:56:20.888 [DEBUG] [Thread-9597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:56:20.888 [DEBUG] [Thread-9597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:56:20.888 [DEBUG] [Thread-9597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:56:20.907 [INFO] [Thread-9597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:56:20.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-25T09:56:20.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:56:21.747 [DEBUG] [Thread-9597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:56:21.747 [DEBUG] [Thread-9597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:56:21.795 [DEBUG] [Thread-9597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:56:21.795 [DEBUG] [Thread-9597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:56:21.805 [DEBUG] [Thread-9597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:56:21.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:56:21.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-25T09:56:21.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-25T09:56:21.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:56:21.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:56:21.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:56:21.842 [DEBUG] [Thread-9597] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:56:25.441 [DEBUG] [Thread-9599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:40.491 [DEBUG] [Thread-9600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:56:51.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:56:51.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-25T09:56:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 56, 22), 14.18, 40.48, 0.0, 15.6, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:56:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:56:22
2025-12-25T09:56:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:56:52.871 [DEBUG] [Thread-9601] [transport.py] [_log()] starting thread (client mode): 0xb6b2b670
2025-12-25T09:56:52.871 [DEBUG] [Thread-9601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:56:52.892 [DEBUG] [Thread-9601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:56:52.892 [INFO] [Thread-9601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:56:52.895 [DEBUG] [Thread-9601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:56:52.895 [DEBUG] [Thread-9601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:56:52.895 [DEBUG] [Thread-9601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:56:52.895 [DEBUG] [Thread-9601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] client lang: <none>
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] server lang: <none>
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] kex follows: False
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] Compression: none
2025-12-25T09:56:52.896 [DEBUG] [Thread-9601] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:56:52.913 [DEBUG] [Thread-9601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:56:52.913 [DEBUG] [Thread-9601] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:56:52.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:56:52.914 [DEBUG] [Thread-9601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:56:52.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:56:52.916 [DEBUG] [Thread-9601] [transport.py] [_log()] userauth is OK
2025-12-25T09:56:52.916 [DEBUG] [Thread-9601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:56:52.916 [DEBUG] [Thread-9601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:56:52.916 [DEBUG] [Thread-9601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:56:52.916 [DEBUG] [Thread-9601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:56:52.939 [INFO] [Thread-9601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:56:52.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:56:53.750 [DEBUG] [Thread-9601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:56:53.750 [DEBUG] [Thread-9601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:56:53.751 [DEBUG] [Thread-9601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:56:53.791 [DEBUG] [Thread-9601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:56:53.791 [DEBUG] [Thread-9601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:56:53.794 [DEBUG] [Thread-9601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:56:53.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:56:53.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:56:53.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:56:53.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:56:53.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:56:53.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:56:53.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:56:53.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:56:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:56:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.330618 -999.00  +21.80  21.90     45   +9.60 1 2 1 1 1   888    0 13.78 114.84 ----- 21.9 21.9 66.8 26.8 28.1 -23.3 27.4 -22.8 26.0 -21.9 26.6 -22.2
2025-12-25T09:56:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:56:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:56:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.330618
2025-12-25T09:56:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:56:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:56:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:56:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:56:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:56:53.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:56:22', tmtdew=14.18, humidity=40.48, cloud=0.0, wind=15.6, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:56:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:56:53.818 [DEBUG] [Thread-9601] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:56:53.885 [DEBUG] [Thread-9604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:53.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-25T09:56:53.915 [DEBUG] [Thread-9605] [transport.py] [_log()] starting thread (client mode): 0xb6be1990
2025-12-25T09:56:53.915 [DEBUG] [Thread-9605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:56:53.930 [DEBUG] [Thread-9605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:56:53.930 [INFO] [Thread-9605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:56:53.938 [DEBUG] [Thread-9605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] client lang: <none>
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] server lang: <none>
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] kex follows: False
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:56:53.939 [DEBUG] [Thread-9605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:56:53.940 [DEBUG] [Thread-9605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:56:53.940 [DEBUG] [Thread-9605] [transport.py] [_log()] Compression: none
2025-12-25T09:56:53.940 [DEBUG] [Thread-9605] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:56:53.993 [DEBUG] [Thread-9605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:56:53.994 [DEBUG] [Thread-9605] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:56:53.994 [DEBUG] [Thread-9605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:56:53.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:56:53.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:56:54.051 [DEBUG] [Thread-9605] [transport.py] [_log()] userauth is OK
2025-12-25T09:56:54.051 [DEBUG] [Thread-9605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:56:54.051 [DEBUG] [Thread-9605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:56:54.051 [DEBUG] [Thread-9605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:56:54.051 [DEBUG] [Thread-9605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:56:54.066 [INFO] [Thread-9605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:56:54.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-25T09:56:54.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:56:54.907 [DEBUG] [Thread-9605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:56:54.907 [DEBUG] [Thread-9605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:56:54.955 [DEBUG] [Thread-9605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:56:54.955 [DEBUG] [Thread-9605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:56:54.967 [DEBUG] [Thread-9605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:56:54.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:56:54.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-25T09:56:54.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-25T09:56:54.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:56:54.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:56:54.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:56:54.999 [DEBUG] [Thread-9605] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:56:55.521 [DEBUG] [Thread-9607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:58.090 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:56:58.091 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:10.561 [DEBUG] [Thread-9608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:57:24.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:57:24.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-25T09:57:25.590 [DEBUG] [Thread-9609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:25.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 56, 54), 14.37, 39.52, 0.0, 11.73, 22.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:57:25.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:56:54
2025-12-25T09:57:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:57:25.993 [DEBUG] [Thread-9610] [transport.py] [_log()] starting thread (client mode): 0xb6be1840
2025-12-25T09:57:25.994 [DEBUG] [Thread-9610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:57:26.014 [DEBUG] [Thread-9610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:57:26.014 [INFO] [Thread-9610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:57:26.017 [DEBUG] [Thread-9610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:57:26.017 [DEBUG] [Thread-9610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:57:26.017 [DEBUG] [Thread-9610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:57:26.017 [DEBUG] [Thread-9610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:26.017 [DEBUG] [Thread-9610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] client lang: <none>
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] server lang: <none>
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] kex follows: False
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:57:26.018 [DEBUG] [Thread-9610] [transport.py] [_log()] Compression: none
2025-12-25T09:57:26.019 [DEBUG] [Thread-9610] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:57:26.036 [DEBUG] [Thread-9610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:57:26.036 [DEBUG] [Thread-9610] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:57:26.037 [DEBUG] [Thread-9610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:57:26.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:57:26.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:57:26.039 [DEBUG] [Thread-9610] [transport.py] [_log()] userauth is OK
2025-12-25T09:57:26.039 [DEBUG] [Thread-9610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:57:26.039 [DEBUG] [Thread-9610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:57:26.039 [DEBUG] [Thread-9610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:57:26.039 [DEBUG] [Thread-9610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:57:26.075 [INFO] [Thread-9610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:57:26.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:57:26.674 [DEBUG] [Thread-9610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:57:26.674 [DEBUG] [Thread-9610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:57:26.674 [DEBUG] [Thread-9610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:57:26.715 [DEBUG] [Thread-9610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:57:26.715 [DEBUG] [Thread-9610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:57:26.718 [DEBUG] [Thread-9610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:57:26.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:57:26.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:57:26.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:57:26.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:57:26.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:57:26.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:57:26.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:57:26.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:57:26.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.330966 -999.00  +21.80  11.99     46   +9.70 1 2 1 1 1   888    0 14.11 123.38 ----- 12.0 12.0 57.7 25.2 28.1 -24.2 27.4 -23.3 26.0 -21.6 26.6 -21.7
2025-12-25T09:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.330966
2025-12-25T09:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:56:54', tmtdew=14.37, humidity=39.52, cloud=0.0, wind=11.73, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:56:35.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:57:26.744 [DEBUG] [Thread-9610] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:57:26.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-25T09:57:26.842 [DEBUG] [Thread-9613] [transport.py] [_log()] starting thread (client mode): 0xb6be0a30
2025-12-25T09:57:26.842 [DEBUG] [Thread-9613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:57:26.857 [DEBUG] [Thread-9613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:57:26.857 [INFO] [Thread-9613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:26.864 [DEBUG] [Thread-9613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] client lang: <none>
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] server lang: <none>
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] kex follows: False
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] Compression: none
2025-12-25T09:57:26.865 [DEBUG] [Thread-9613] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:57:26.922 [DEBUG] [Thread-9613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:57:26.922 [DEBUG] [Thread-9613] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:57:26.922 [DEBUG] [Thread-9613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:57:26.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:57:26.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:57:26.979 [DEBUG] [Thread-9613] [transport.py] [_log()] userauth is OK
2025-12-25T09:57:26.979 [DEBUG] [Thread-9613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:57:26.979 [DEBUG] [Thread-9613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:57:26.979 [DEBUG] [Thread-9613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:57:26.979 [DEBUG] [Thread-9613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:57:26.994 [INFO] [Thread-9613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:57:26.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-25T09:57:26.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:57:27.904 [DEBUG] [Thread-9613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:57:27.904 [DEBUG] [Thread-9613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:57:27.952 [DEBUG] [Thread-9613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:57:27.952 [DEBUG] [Thread-9613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:57:27.961 [DEBUG] [Thread-9613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:57:27.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:57:27.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-25T09:57:27.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:57:27.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:57:27.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:57:27.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:57:27.993 [DEBUG] [Thread-9613] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:57:40.621 [DEBUG] [Thread-9615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:53.951 [DEBUG] [Thread-9616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:55.666 [DEBUG] [Thread-9617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:58.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:57:58.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:57:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T09:57:58.230 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:58.231 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:57:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 57, 26), 14.3, 39.68, 0.0, 13.29, 22.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:57:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:57:26
2025-12-25T09:57:58.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:57:59.013 [DEBUG] [Thread-9618] [transport.py] [_log()] starting thread (client mode): 0xb6b611b0
2025-12-25T09:57:59.013 [DEBUG] [Thread-9618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:57:59.034 [DEBUG] [Thread-9618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:57:59.034 [INFO] [Thread-9618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] client lang: <none>
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] server lang: <none>
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] kex follows: False
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] Compression: none
2025-12-25T09:57:59.037 [DEBUG] [Thread-9618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:57:59.053 [DEBUG] [Thread-9618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:57:59.053 [DEBUG] [Thread-9618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:57:59.053 [DEBUG] [Thread-9618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:57:59.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:57:59.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:57:59.054 [DEBUG] [Thread-9618] [transport.py] [_log()] userauth is OK
2025-12-25T09:57:59.054 [DEBUG] [Thread-9618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:57:59.054 [DEBUG] [Thread-9618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:57:59.054 [DEBUG] [Thread-9618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:57:59.054 [DEBUG] [Thread-9618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:57:59.064 [INFO] [Thread-9618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:57:59.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:57:59.814 [DEBUG] [Thread-9618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:57:59.814 [DEBUG] [Thread-9618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:57:59.814 [DEBUG] [Thread-9618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:57:59.855 [DEBUG] [Thread-9618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:57:59.855 [DEBUG] [Thread-9618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:57:59.857 [DEBUG] [Thread-9618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:57:59.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:57:59.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:57:59.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:57:59.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:57:59.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:57:59.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:57:59.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.331660 -999.00  +21.30  19.01     47   +9.80 1 1 1 1 1   888    0 14.22 117.92 ----- 19.0 19.0 32.4 20.6 28.2 -23.9 27.4 -24.3 26.1 -22.1 26.6 -21.7
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.331660
2025-12-25T09:57:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:57:59.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:57:59.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:57:59.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:57:59.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T09:57:59.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:57:26', tmtdew=14.3, humidity=39.68, cloud=0.0, wind=13.29, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:57:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:57:59.878 [DEBUG] [Thread-9618] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:57:59.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-25T09:57:59.965 [DEBUG] [Thread-9621] [transport.py] [_log()] starting thread (client mode): 0xb6b61900
2025-12-25T09:57:59.966 [DEBUG] [Thread-9621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:57:59.981 [DEBUG] [Thread-9621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:57:59.981 [INFO] [Thread-9621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] client lang: <none>
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] server lang: <none>
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] kex follows: False
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] Compression: none
2025-12-25T09:57:59.989 [DEBUG] [Thread-9621] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:58:00.046 [DEBUG] [Thread-9621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:58:00.046 [DEBUG] [Thread-9621] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:58:00.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:58:00.047 [DEBUG] [Thread-9621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:58:00.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:58:00.103 [DEBUG] [Thread-9621] [transport.py] [_log()] userauth is OK
2025-12-25T09:58:00.103 [DEBUG] [Thread-9621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:58:00.104 [DEBUG] [Thread-9621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:58:00.104 [DEBUG] [Thread-9621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:58:00.104 [DEBUG] [Thread-9621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:58:00.117 [INFO] [Thread-9621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:58:00.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-25T09:58:00.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:58:00.993 [DEBUG] [Thread-9621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:58:00.994 [DEBUG] [Thread-9621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:58:01.042 [DEBUG] [Thread-9621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:58:01.042 [DEBUG] [Thread-9621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:58:01.053 [DEBUG] [Thread-9621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:58:01.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:58:01.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T09:58: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-25T09:58:01.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:58:01.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:58:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:58:01.093 [DEBUG] [Thread-9621] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:58:10.699 [DEBUG] [Thread-9623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:58:25.759 [DEBUG] [Thread-9624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:58:31.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:58:31.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:58: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-25T09:58:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 57, 58), 14.48, 39.62, 0.0, 15.42, 22.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:58:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:57:58
2025-12-25T09:58:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:58:32.188 [DEBUG] [Thread-9625] [transport.py] [_log()] starting thread (client mode): 0xb6b60670
2025-12-25T09:58:32.188 [DEBUG] [Thread-9625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:58:32.208 [DEBUG] [Thread-9625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:58:32.209 [INFO] [Thread-9625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] client lang: <none>
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] server lang: <none>
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] kex follows: False
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:58:32.212 [DEBUG] [Thread-9625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:58:32.213 [DEBUG] [Thread-9625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:58:32.213 [DEBUG] [Thread-9625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:58:32.213 [DEBUG] [Thread-9625] [transport.py] [_log()] Compression: none
2025-12-25T09:58:32.213 [DEBUG] [Thread-9625] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:58:32.228 [DEBUG] [Thread-9625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:58:32.228 [DEBUG] [Thread-9625] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:58:32.228 [DEBUG] [Thread-9625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:58:32.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:58:32.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:58:32.229 [DEBUG] [Thread-9625] [transport.py] [_log()] userauth is OK
2025-12-25T09:58:32.229 [DEBUG] [Thread-9625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:58:32.229 [DEBUG] [Thread-9625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:58:32.229 [DEBUG] [Thread-9625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:58:32.229 [DEBUG] [Thread-9625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:58:32.244 [INFO] [Thread-9625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:58:32.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:58:32.890 [DEBUG] [Thread-9625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:58:32.890 [DEBUG] [Thread-9625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:58:32.890 [DEBUG] [Thread-9625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:58:32.931 [DEBUG] [Thread-9625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:58:32.931 [DEBUG] [Thread-9625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:58:32.934 [DEBUG] [Thread-9625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:58:32.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:58:32.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:58:32.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:58:32.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:58:32.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:58:32.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:58:32.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.332007 -999.00  +21.20   9.70     48   +9.90 1 2 1 1 1   888    0 13.92 108.47 ----- 9.7 9.7 27.6 15.1 28.3 -23.3 27.4 -23.3 26.2 -20.5 26.6 -21.1
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.332007
2025-12-25T09:58:32.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:58:32.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:58:32.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:58:32.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:58:32.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:58:32.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:57:58', tmtdew=14.48, humidity=39.62, cloud=0.0, wind=15.42, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:58:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:58:32.955 [DEBUG] [Thread-9625] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:58:33.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-25T09:58:33.038 [DEBUG] [Thread-9628] [transport.py] [_log()] starting thread (client mode): 0xb6be3b20
2025-12-25T09:58:33.039 [DEBUG] [Thread-9628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:58:33.053 [DEBUG] [Thread-9628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:58:33.053 [INFO] [Thread-9628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] client lang: <none>
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] server lang: <none>
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] kex follows: False
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] Compression: none
2025-12-25T09:58:33.061 [DEBUG] [Thread-9628] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:58:33.122 [DEBUG] [Thread-9628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:58:33.122 [DEBUG] [Thread-9628] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:58:33.122 [DEBUG] [Thread-9628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:58:33.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:58:33.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:58:33.179 [DEBUG] [Thread-9628] [transport.py] [_log()] userauth is OK
2025-12-25T09:58:33.179 [DEBUG] [Thread-9628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:58:33.179 [DEBUG] [Thread-9628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:58:33.179 [DEBUG] [Thread-9628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:58:33.179 [DEBUG] [Thread-9628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:58:33.197 [INFO] [Thread-9628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:58:33.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T09:58:33.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:58:34.038 [DEBUG] [Thread-9628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:58:34.038 [DEBUG] [Thread-9628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:58:34.086 [DEBUG] [Thread-9628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:58:34.086 [DEBUG] [Thread-9628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:58:34.094 [DEBUG] [Thread-9628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:58:34.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:58:34.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-25T09:58:34.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-25T09:58:34.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:58:34.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:58:34.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:58:34.126 [DEBUG] [Thread-9628] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:58:40.792 [DEBUG] [Thread-9630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:58:54.002 [DEBUG] [Thread-9631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:58:55.844 [DEBUG] [Thread-9632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:58:58.368 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:58:58.370 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:04.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:59:04.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:59: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-25T09:59:04.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 58, 30), 14.43, 39.75, 0.0, 13.78, 22.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:59:04.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:58:30
2025-12-25T09:59:05.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:59:05.180 [DEBUG] [Thread-9633] [transport.py] [_log()] starting thread (client mode): 0xb6be12a0
2025-12-25T09:59:05.180 [DEBUG] [Thread-9633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:59:05.202 [DEBUG] [Thread-9633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:59:05.203 [INFO] [Thread-9633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:59:05.204 [DEBUG] [Thread-9633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] client lang: <none>
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] server lang: <none>
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] kex follows: False
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] Compression: none
2025-12-25T09:59:05.205 [DEBUG] [Thread-9633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:59:05.213 [DEBUG] [Thread-9633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:59:05.213 [DEBUG] [Thread-9633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:59:05.214 [DEBUG] [Thread-9633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:59:05.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:59:05.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:59:05.215 [DEBUG] [Thread-9633] [transport.py] [_log()] userauth is OK
2025-12-25T09:59:05.215 [DEBUG] [Thread-9633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:59:05.215 [DEBUG] [Thread-9633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:59:05.215 [DEBUG] [Thread-9633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:59:05.216 [DEBUG] [Thread-9633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:59:05.245 [INFO] [Thread-9633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:59:05.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:59:06.045 [DEBUG] [Thread-9633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:59:06.045 [DEBUG] [Thread-9633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:59:06.045 [DEBUG] [Thread-9633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:59:06.086 [DEBUG] [Thread-9633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:59:06.086 [DEBUG] [Thread-9633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:59:06.090 [DEBUG] [Thread-9633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:59:06.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:59:06.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:59:06.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:59:06.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:59:06.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:59:06.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:59:06.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:59:06.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:59:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:59:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.332355 -999.00  +21.50  14.40     48  +10.20 1 2 1 1 1   888    0 13.86 103.24 ----- 14.4 14.4 55.0 19.1 28.4 -22.8 27.5 -22.6 26.2 -21.6 26.7 -21.5
2025-12-25T09:59:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:59:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:59:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.332355
2025-12-25T09:59:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:59:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:59:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:59:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:59:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:59:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:58:30', tmtdew=14.43, humidity=39.75, cloud=0.0, wind=13.78, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:58:35.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:59:06.118 [DEBUG] [Thread-9633] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:59:06.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T09:59:06.213 [DEBUG] [Thread-9636] [transport.py] [_log()] starting thread (client mode): 0xb6be0850
2025-12-25T09:59:06.213 [DEBUG] [Thread-9636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:59:06.230 [DEBUG] [Thread-9636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:59:06.230 [INFO] [Thread-9636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:59:06.237 [DEBUG] [Thread-9636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] client lang: <none>
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] server lang: <none>
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] kex follows: False
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] Compression: none
2025-12-25T09:59:06.238 [DEBUG] [Thread-9636] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:59:06.297 [DEBUG] [Thread-9636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:59:06.298 [DEBUG] [Thread-9636] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:59:06.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:59:06.299 [DEBUG] [Thread-9636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:59:06.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:59:06.360 [DEBUG] [Thread-9636] [transport.py] [_log()] userauth is OK
2025-12-25T09:59:06.360 [DEBUG] [Thread-9636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:59:06.361 [DEBUG] [Thread-9636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:59:06.361 [DEBUG] [Thread-9636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:59:06.361 [DEBUG] [Thread-9636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:59:06.379 [INFO] [Thread-9636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:59:06.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-25T09:59:06.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:59:07.292 [DEBUG] [Thread-9636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:59:07.292 [DEBUG] [Thread-9636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:59:07.340 [DEBUG] [Thread-9636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:59:07.340 [DEBUG] [Thread-9636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:59:07.349 [DEBUG] [Thread-9636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:59:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:59:07.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-25T09:59:07.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T09:59:07.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:59:07.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:59:07.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:59:07.391 [DEBUG] [Thread-9636] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:59:10.879 [DEBUG] [Thread-9638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:25.927 [DEBUG] [Thread-9639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T09:59:37.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T09:59:37.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-25T09:59:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 9, 59, 34), 13.59, 41.91, 0.0, 14.26, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T09:59:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 09:59:34
2025-12-25T09:59:38.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T09:59:38.398 [DEBUG] [Thread-9640] [transport.py] [_log()] starting thread (client mode): 0xb6b62c20
2025-12-25T09:59:38.398 [DEBUG] [Thread-9640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:59:38.418 [DEBUG] [Thread-9640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T09:59:38.418 [INFO] [Thread-9640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] client lang: <none>
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] server lang: <none>
2025-12-25T09:59:38.421 [DEBUG] [Thread-9640] [transport.py] [_log()] kex follows: False
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] Compression: none
2025-12-25T09:59:38.422 [DEBUG] [Thread-9640] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:59:38.438 [DEBUG] [Thread-9640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:59:38.439 [DEBUG] [Thread-9640] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:59:38.439 [DEBUG] [Thread-9640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T09:59:38.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T09:59:38.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:59:38.441 [DEBUG] [Thread-9640] [transport.py] [_log()] userauth is OK
2025-12-25T09:59:38.441 [DEBUG] [Thread-9640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:59:38.442 [DEBUG] [Thread-9640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:59:38.442 [DEBUG] [Thread-9640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T09:59:38.442 [DEBUG] [Thread-9640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:59:38.465 [INFO] [Thread-9640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:59:38.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:59:39.086 [DEBUG] [Thread-9640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:59:39.087 [DEBUG] [Thread-9640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:59:39.087 [DEBUG] [Thread-9640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T09:59:39.128 [DEBUG] [Thread-9640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:59:39.128 [DEBUG] [Thread-9640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:59:39.132 [DEBUG] [Thread-9640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:59:39.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:59:39.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T09:59:39.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T09:59:39.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T09:59:39.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:59:39.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T09:59:39.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:59:39.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:59:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T09:59:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.332702 -999.00  +21.50  16.16     48  +10.10 1 2 1 1 1   888    0 13.56 105.87 ----- 16.2 16.2 69.6 20.6 28.4 -23.2 27.6 -22.9 26.1 -22.5 26.7 -22.4
2025-12-25T09:59:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T09:59:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T09:59:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.332702
2025-12-25T09:59:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T09:59:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T09:59:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T09:59:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T09:59:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T09:59:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T09:59:34', tmtdew=13.59, humidity=41.91, cloud=0.0, wind=14.26, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:59:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T09:59:39.160 [DEBUG] [Thread-9640] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:59:39.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-25T09:59:39.255 [DEBUG] [Thread-9643] [transport.py] [_log()] starting thread (client mode): 0xb6be1c90
2025-12-25T09:59:39.255 [DEBUG] [Thread-9643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T09:59:39.270 [DEBUG] [Thread-9643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T09:59:39.270 [INFO] [Thread-9643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T09:59:39.278 [DEBUG] [Thread-9643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T09:59:39.278 [DEBUG] [Thread-9643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] client lang: <none>
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] server lang: <none>
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] kex follows: False
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T09:59:39.279 [DEBUG] [Thread-9643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T09:59:39.280 [DEBUG] [Thread-9643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T09:59:39.280 [DEBUG] [Thread-9643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T09:59:39.280 [DEBUG] [Thread-9643] [transport.py] [_log()] Compression: none
2025-12-25T09:59:39.280 [DEBUG] [Thread-9643] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T09:59:39.336 [DEBUG] [Thread-9643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T09:59:39.336 [DEBUG] [Thread-9643] [transport.py] [_log()] Switch to new keys ...
2025-12-25T09:59:39.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T09:59:39.338 [DEBUG] [Thread-9643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T09:59:39.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T09:59:39.392 [DEBUG] [Thread-9643] [transport.py] [_log()] userauth is OK
2025-12-25T09:59:39.392 [DEBUG] [Thread-9643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T09:59:39.393 [DEBUG] [Thread-9643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T09:59:39.393 [DEBUG] [Thread-9643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T09:59:39.393 [DEBUG] [Thread-9643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T09:59:39.411 [INFO] [Thread-9643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T09:59:39.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-25T09:59:39.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T09:59:40.251 [DEBUG] [Thread-9643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T09:59:40.251 [DEBUG] [Thread-9643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T09:59:40.299 [DEBUG] [Thread-9643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T09:59:40.299 [DEBUG] [Thread-9643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T09:59:40.308 [DEBUG] [Thread-9643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T09:59:40.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T09:59:40.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-25T09:59:40.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-25T09:59:40.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T09:59:40.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T09:59:40.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T09:59:40.345 [DEBUG] [Thread-9643] [transport.py] [_log()] EOF in transport thread
2025-12-25T09:59:40.966 [DEBUG] [Thread-9645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:54.050 [DEBUG] [Thread-9646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:56.015 [DEBUG] [Thread-9647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:58.509 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T09:59:58.510 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:10.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:00:10.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:00:10.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-25T10:00:11.050 [DEBUG] [Thread-9648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 0, 6), 13.76, 41.45, 0.0, 15.4, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:00:11.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:00:06
2025-12-25T10:00:11.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:00:11.352 [DEBUG] [Thread-9649] [transport.py] [_log()] starting thread (client mode): 0xb6be1600
2025-12-25T10:00:11.352 [DEBUG] [Thread-9649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:00:11.372 [DEBUG] [Thread-9649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:00:11.372 [INFO] [Thread-9649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] client lang: <none>
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] server lang: <none>
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] kex follows: False
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] Compression: none
2025-12-25T10:00:11.374 [DEBUG] [Thread-9649] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:00:11.392 [DEBUG] [Thread-9649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:00:11.392 [DEBUG] [Thread-9649] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:00:11.393 [DEBUG] [Thread-9649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:00:11.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:00:11.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:00:11.395 [DEBUG] [Thread-9649] [transport.py] [_log()] userauth is OK
2025-12-25T10:00:11.395 [DEBUG] [Thread-9649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:00:11.395 [DEBUG] [Thread-9649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:00:11.395 [DEBUG] [Thread-9649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:00:11.395 [DEBUG] [Thread-9649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:00:11.414 [INFO] [Thread-9649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:00:11.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:00:12.464 [DEBUG] [Thread-9649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:00:12.464 [DEBUG] [Thread-9649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:00:12.465 [DEBUG] [Thread-9649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:00:12.505 [DEBUG] [Thread-9649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:00:12.505 [DEBUG] [Thread-9649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:00:12.508 [DEBUG] [Thread-9649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:00:12.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:00:12.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:00:12.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:00:12.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:00:12.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:00:12.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:00:12.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:00:12.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:00:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:00:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.333049 -999.00  +21.50  12.98     48  +10.10 1 2 1 1 1   888    0 13.62 97.62 ----- 13.0 13.0 51.2 18.4 28.4 -22.6 27.6 -23.5 26.2 -22.1 26.8 -21.7
2025-12-25T10:00:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:00:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:00:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.333049
2025-12-25T10:00:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:00:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:00:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:00:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:00:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:00:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:00:06', tmtdew=13.76, humidity=41.45, cloud=0.0, wind=15.4, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T07:59:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:00:12.538 [DEBUG] [Thread-9649] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:00:12.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-25T10:00:12.629 [DEBUG] [Thread-9652] [transport.py] [_log()] starting thread (client mode): 0xb6b2a1a0
2025-12-25T10:00:12.629 [DEBUG] [Thread-9652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:00:12.644 [DEBUG] [Thread-9652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:00:12.645 [INFO] [Thread-9652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:00:12.653 [DEBUG] [Thread-9652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:00:12.653 [DEBUG] [Thread-9652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:00:12.653 [DEBUG] [Thread-9652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] client lang: <none>
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] server lang: <none>
2025-12-25T10:00:12.654 [DEBUG] [Thread-9652] [transport.py] [_log()] kex follows: False
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] Compression: none
2025-12-25T10:00:12.655 [DEBUG] [Thread-9652] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:00:12.713 [DEBUG] [Thread-9652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:00:12.714 [DEBUG] [Thread-9652] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:00:12.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:00:12.715 [DEBUG] [Thread-9652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:00:12.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:00:12.772 [DEBUG] [Thread-9652] [transport.py] [_log()] userauth is OK
2025-12-25T10:00:12.772 [DEBUG] [Thread-9652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:00:12.773 [DEBUG] [Thread-9652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:00:12.773 [DEBUG] [Thread-9652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:00:12.773 [DEBUG] [Thread-9652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:00:12.793 [INFO] [Thread-9652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:00:12.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-25T10:00:12.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:00:13.634 [DEBUG] [Thread-9652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:00:13.634 [DEBUG] [Thread-9652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:00:13.682 [DEBUG] [Thread-9652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:00:13.682 [DEBUG] [Thread-9652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:00:13.694 [DEBUG] [Thread-9652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:00:13.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:00:13.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-25T10:00:13.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-25T10:00:13.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:00:13.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:00:13.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:00:13.730 [DEBUG] [Thread-9652] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:00:26.085 [DEBUG] [Thread-9654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:41.133 [DEBUG] [Thread-9655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:00:43.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:00:43.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-25T10:00:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 0, 38), 13.89, 40.88, 0.0, 13.16, 22.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:00:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:00:38
2025-12-25T10:00:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:00:44.725 [DEBUG] [Thread-9656] [transport.py] [_log()] starting thread (client mode): 0xb6b23670
2025-12-25T10:00:44.725 [DEBUG] [Thread-9656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:00:44.745 [DEBUG] [Thread-9656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:00:44.745 [INFO] [Thread-9656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] client lang: <none>
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] server lang: <none>
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] kex follows: False
2025-12-25T10:00:44.748 [DEBUG] [Thread-9656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:00:44.749 [DEBUG] [Thread-9656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:00:44.749 [DEBUG] [Thread-9656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:00:44.749 [DEBUG] [Thread-9656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:00:44.749 [DEBUG] [Thread-9656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:00:44.749 [DEBUG] [Thread-9656] [transport.py] [_log()] Compression: none
2025-12-25T10:00:44.749 [DEBUG] [Thread-9656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:00:44.766 [DEBUG] [Thread-9656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:00:44.766 [DEBUG] [Thread-9656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:00:44.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:00:44.767 [DEBUG] [Thread-9656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:00:44.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:00:44.769 [DEBUG] [Thread-9656] [transport.py] [_log()] userauth is OK
2025-12-25T10:00:44.770 [DEBUG] [Thread-9656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:00:44.770 [DEBUG] [Thread-9656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:00:44.770 [DEBUG] [Thread-9656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:00:44.770 [DEBUG] [Thread-9656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:00:44.806 [INFO] [Thread-9656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:00:44.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:00:45.438 [DEBUG] [Thread-9656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:00:45.438 [DEBUG] [Thread-9656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:00:45.439 [DEBUG] [Thread-9656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:00:45.479 [DEBUG] [Thread-9656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:00:45.479 [DEBUG] [Thread-9656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:00:45.481 [DEBUG] [Thread-9656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:00:45.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:00:45.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:00:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:00:45.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:00:45.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:00:45.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:00:45.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:00:45.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:00:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:00:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.333396 -999.00  +21.40   9.80     48  +10.10 1 2 1 1 1   888    0 13.40 85.21 ----- 9.8 9.8 55.6 16.2 28.4 -22.8 27.7 -23.9 26.2 -21.7 26.9 -21.4
2025-12-25T10:00:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:00:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:00:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.333396
2025-12-25T10:00:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:00:45.505 [DEBUG] [Thread-9656] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:00:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:00:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:00:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:00:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:00:45.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:00:38', tmtdew=13.89, humidity=40.88, cloud=0.0, wind=13.16, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:00:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:00:45.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-25T10:00:45.612 [DEBUG] [Thread-9659] [transport.py] [_log()] starting thread (client mode): 0xb6b22590
2025-12-25T10:00:45.612 [DEBUG] [Thread-9659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:00:45.631 [DEBUG] [Thread-9659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:00:45.631 [INFO] [Thread-9659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] client lang: <none>
2025-12-25T10:00:45.639 [DEBUG] [Thread-9659] [transport.py] [_log()] server lang: <none>
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] kex follows: False
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] Compression: none
2025-12-25T10:00:45.640 [DEBUG] [Thread-9659] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:00:45.695 [DEBUG] [Thread-9659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:00:45.696 [DEBUG] [Thread-9659] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:00:45.696 [DEBUG] [Thread-9659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:00:45.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:00:45.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:00:45.752 [DEBUG] [Thread-9659] [transport.py] [_log()] userauth is OK
2025-12-25T10:00:45.752 [DEBUG] [Thread-9659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:00:45.753 [DEBUG] [Thread-9659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:00:45.753 [DEBUG] [Thread-9659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:00:45.753 [DEBUG] [Thread-9659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:00:45.777 [INFO] [Thread-9659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:00:45.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-25T10:00:45.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:00:46.678 [DEBUG] [Thread-9659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:00:46.678 [DEBUG] [Thread-9659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:00:46.726 [DEBUG] [Thread-9659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:00:46.726 [DEBUG] [Thread-9659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:00:46.735 [DEBUG] [Thread-9659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:00:46.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:00:46.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-25T10:00:46.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-25T10:00:46.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:00:46.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:00:46.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:00:46.775 [DEBUG] [Thread-9659] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:00:54.100 [DEBUG] [Thread-9661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:56.169 [DEBUG] [Thread-9662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:58.647 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:00:58.648 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:11.215 [DEBUG] [Thread-9663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:01:16.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:01:16.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-25T10:01:17.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 1, 10), 13.72, 41.26, 0.0, 11.31, 21.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:01:17.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:01:10
2025-12-25T10:01:17.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:01:17.754 [DEBUG] [Thread-9664] [transport.py] [_log()] starting thread (client mode): 0xb6b29d50
2025-12-25T10:01:17.754 [DEBUG] [Thread-9664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:01:17.770 [DEBUG] [Thread-9664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:01:17.770 [INFO] [Thread-9664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:17.773 [DEBUG] [Thread-9664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] client lang: <none>
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] server lang: <none>
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] kex follows: False
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] Compression: none
2025-12-25T10:01:17.774 [DEBUG] [Thread-9664] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:01:17.793 [DEBUG] [Thread-9664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:01:17.794 [DEBUG] [Thread-9664] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:01:17.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:01:17.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:01:17.796 [DEBUG] [Thread-9664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:01:17.797 [DEBUG] [Thread-9664] [transport.py] [_log()] userauth is OK
2025-12-25T10:01:17.798 [DEBUG] [Thread-9664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:01:17.798 [DEBUG] [Thread-9664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:01:17.798 [DEBUG] [Thread-9664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:01:17.798 [DEBUG] [Thread-9664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:01:17.812 [INFO] [Thread-9664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:01:17.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:01:18.542 [DEBUG] [Thread-9664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:01:18.542 [DEBUG] [Thread-9664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:01:18.543 [DEBUG] [Thread-9664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:01:18.583 [DEBUG] [Thread-9664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:01:18.583 [DEBUG] [Thread-9664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:01:18.590 [DEBUG] [Thread-9664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:01:18.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:01:18.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:01:18.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:01:18.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:01:18.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:01:18.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:01:18.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:01:18.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:01:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:01:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.333743 -999.00  +21.60  16.62     47   +9.80 1 2 1 1 1   888    0 13.38 85.05 ----- 16.6 16.6 15.9 19.1 28.5 -22.8 27.7 -21.9 26.4 -21.0 26.8 -21.4
2025-12-25T10:01:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:01:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:01:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.333743
2025-12-25T10:01:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:01:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:01:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:01:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:01:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:01:18.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:01:10', tmtdew=13.72, humidity=41.26, cloud=0.0, wind=11.31, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:00:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:01:18.626 [DEBUG] [Thread-9664] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:01:18.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:01:18.727 [DEBUG] [Thread-9667] [transport.py] [_log()] starting thread (client mode): 0xb6b28430
2025-12-25T10:01:18.727 [DEBUG] [Thread-9667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:01:18.742 [DEBUG] [Thread-9667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:01:18.743 [INFO] [Thread-9667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:01:18.750 [DEBUG] [Thread-9667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:01:18.751 [DEBUG] [Thread-9667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:01:18.751 [DEBUG] [Thread-9667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:01:18.751 [DEBUG] [Thread-9667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:18.751 [DEBUG] [Thread-9667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:18.751 [DEBUG] [Thread-9667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:18.751 [DEBUG] [Thread-9667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] client lang: <none>
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] server lang: <none>
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] kex follows: False
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:01:18.752 [DEBUG] [Thread-9667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:01:18.753 [DEBUG] [Thread-9667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:01:18.753 [DEBUG] [Thread-9667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:01:18.753 [DEBUG] [Thread-9667] [transport.py] [_log()] Compression: none
2025-12-25T10:01:18.753 [DEBUG] [Thread-9667] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:01:18.809 [DEBUG] [Thread-9667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:01:18.809 [DEBUG] [Thread-9667] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:01:18.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:01:18.810 [DEBUG] [Thread-9667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:01:18.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:01:18.868 [DEBUG] [Thread-9667] [transport.py] [_log()] userauth is OK
2025-12-25T10:01:18.868 [DEBUG] [Thread-9667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:01:18.869 [DEBUG] [Thread-9667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:01:18.869 [DEBUG] [Thread-9667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:01:18.869 [DEBUG] [Thread-9667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:01:18.887 [INFO] [Thread-9667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:01:18.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-25T10:01:18.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:01:19.737 [DEBUG] [Thread-9667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:01:19.738 [DEBUG] [Thread-9667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:01:19.785 [DEBUG] [Thread-9667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:01:19.785 [DEBUG] [Thread-9667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:01:19.794 [DEBUG] [Thread-9667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:01:19.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:01:19.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-25T10:01:19.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-25T10:01:19.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:01:19.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:01:19.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:01:19.831 [DEBUG] [Thread-9667] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:01:26.246 [DEBUG] [Thread-9669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:41.310 [DEBUG] [Thread-9670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:49.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:01:49.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:01:49.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-25T10:01:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 1, 42), 13.77, 41.03, 0.0, 15.62, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:01:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:01:42
2025-12-25T10:01:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:01:50.879 [DEBUG] [Thread-9671] [transport.py] [_log()] starting thread (client mode): 0xb6b605e0
2025-12-25T10:01:50.879 [DEBUG] [Thread-9671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:01:50.897 [DEBUG] [Thread-9671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:01:50.897 [INFO] [Thread-9671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] client lang: <none>
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] server lang: <none>
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] kex follows: False
2025-12-25T10:01:50.900 [DEBUG] [Thread-9671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:01:50.901 [DEBUG] [Thread-9671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:01:50.901 [DEBUG] [Thread-9671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:01:50.901 [DEBUG] [Thread-9671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:01:50.901 [DEBUG] [Thread-9671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:01:50.901 [DEBUG] [Thread-9671] [transport.py] [_log()] Compression: none
2025-12-25T10:01:50.901 [DEBUG] [Thread-9671] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:01:50.917 [DEBUG] [Thread-9671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:01:50.917 [DEBUG] [Thread-9671] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:01:50.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:01:50.917 [DEBUG] [Thread-9671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:01:50.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:01:50.918 [DEBUG] [Thread-9671] [transport.py] [_log()] userauth is OK
2025-12-25T10:01:50.918 [DEBUG] [Thread-9671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:01:50.918 [DEBUG] [Thread-9671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:01:50.918 [DEBUG] [Thread-9671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:01:50.918 [DEBUG] [Thread-9671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:01:50.928 [INFO] [Thread-9671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:01:50.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:01:51.624 [DEBUG] [Thread-9671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:01:51.624 [DEBUG] [Thread-9671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:01:51.625 [DEBUG] [Thread-9671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:01:51.665 [DEBUG] [Thread-9671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:01:51.665 [DEBUG] [Thread-9671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:01:51.669 [DEBUG] [Thread-9671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:01:51.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:01:51.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:01:51.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:01:51.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:01:51.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:01:51.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:01:51.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.334091 -999.00  +21.60  13.61     46   +9.60 1 2 1 1 1   888    0 13.61 90.25 ----- 13.6 13.6 49.0 20.2 28.6 -22.9 27.8 -23.2 26.3 -21.4 26.9 -20.7
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.334091
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:01:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:01:42', tmtdew=13.77, humidity=41.03, cloud=0.0, wind=15.62, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:01:05.462', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:01:51.695 [DEBUG] [Thread-9671] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:01:51.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-25T10:01:51.783 [DEBUG] [Thread-9674] [transport.py] [_log()] starting thread (client mode): 0xb6be0700
2025-12-25T10:01:51.783 [DEBUG] [Thread-9674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:01:51.798 [DEBUG] [Thread-9674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:01:51.798 [INFO] [Thread-9674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:01:51.806 [DEBUG] [Thread-9674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:01:51.806 [DEBUG] [Thread-9674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:01:51.806 [DEBUG] [Thread-9674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:01:51.806 [DEBUG] [Thread-9674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] client lang: <none>
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] server lang: <none>
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] kex follows: False
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] Compression: none
2025-12-25T10:01:51.807 [DEBUG] [Thread-9674] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:01:51.864 [DEBUG] [Thread-9674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:01:51.865 [DEBUG] [Thread-9674] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:01:51.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:01:51.866 [DEBUG] [Thread-9674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:01:51.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:01:51.920 [DEBUG] [Thread-9674] [transport.py] [_log()] userauth is OK
2025-12-25T10:01:51.920 [DEBUG] [Thread-9674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:01:51.921 [DEBUG] [Thread-9674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:01:51.921 [DEBUG] [Thread-9674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:01:51.921 [DEBUG] [Thread-9674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:01:51.939 [INFO] [Thread-9674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:01:51.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-25T10:01:51.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:01:52.778 [DEBUG] [Thread-9674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:01:52.778 [DEBUG] [Thread-9674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:01:52.826 [DEBUG] [Thread-9674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:01:52.826 [DEBUG] [Thread-9674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:01:52.835 [DEBUG] [Thread-9674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:01:52.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:01:52.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-25T10:01:52.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-25T10:01:52.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:01:52.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:01:52.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:01:52.874 [DEBUG] [Thread-9674] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:01:54.148 [DEBUG] [Thread-9676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:56.340 [DEBUG] [Thread-9677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:58.788 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:01:58.789 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:11.394 [DEBUG] [Thread-9678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:02:22.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:02:22.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-25T10:02:23.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 2, 14), 13.74, 41.16, 0.0, 14.72, 21.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:02:23.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:02:14
2025-12-25T10:02:23.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:02:23.840 [DEBUG] [Thread-9679] [transport.py] [_log()] starting thread (client mode): 0xb6bab8e0
2025-12-25T10:02:23.840 [DEBUG] [Thread-9679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:02:23.860 [DEBUG] [Thread-9679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:02:23.860 [INFO] [Thread-9679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:02:23.863 [DEBUG] [Thread-9679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] client lang: <none>
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] server lang: <none>
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] kex follows: False
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] Compression: none
2025-12-25T10:02:23.864 [DEBUG] [Thread-9679] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:02:23.882 [DEBUG] [Thread-9679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:02:23.883 [DEBUG] [Thread-9679] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:02:23.884 [DEBUG] [Thread-9679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:02:23.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:02:23.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:02:23.885 [DEBUG] [Thread-9679] [transport.py] [_log()] userauth is OK
2025-12-25T10:02:23.886 [DEBUG] [Thread-9679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:02:23.886 [DEBUG] [Thread-9679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:02:23.886 [DEBUG] [Thread-9679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:02:23.886 [DEBUG] [Thread-9679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:02:23.910 [INFO] [Thread-9679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:02:23.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:02:24.538 [DEBUG] [Thread-9679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:02:24.538 [DEBUG] [Thread-9679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:02:24.538 [DEBUG] [Thread-9679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:02:24.578 [DEBUG] [Thread-9679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:02:24.578 [DEBUG] [Thread-9679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:02:24.580 [DEBUG] [Thread-9679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:02:24.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:02:24.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:02:24.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:02:24.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:02:24.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:02:24.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:02:24.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.334785 -999.00  +21.70  12.00     46   +9.80 1 2 1 1 1   888    0 13.76 99.88 ----- 12.0 12.0 33.6 20.1 28.6 -22.9 27.7 -23.7 26.4 -20.1 26.9 -21.9
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.334785
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:02:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:02:24.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:02:14', tmtdew=13.74, humidity=41.16, cloud=0.0, wind=14.72, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:02:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:02:24.611 [DEBUG] [Thread-9679] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:02:24.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-25T10:02:24.696 [DEBUG] [Thread-9682] [transport.py] [_log()] starting thread (client mode): 0xb6b50a30
2025-12-25T10:02:24.696 [DEBUG] [Thread-9682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:02:24.710 [DEBUG] [Thread-9682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:02:24.710 [INFO] [Thread-9682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] client lang: <none>
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] server lang: <none>
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] kex follows: False
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] Compression: none
2025-12-25T10:02:24.718 [DEBUG] [Thread-9682] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:02:24.774 [DEBUG] [Thread-9682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:02:24.775 [DEBUG] [Thread-9682] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:02:24.775 [DEBUG] [Thread-9682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:02:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:02:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:02:24.832 [DEBUG] [Thread-9682] [transport.py] [_log()] userauth is OK
2025-12-25T10:02:24.832 [DEBUG] [Thread-9682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:02:24.833 [DEBUG] [Thread-9682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:02:24.833 [DEBUG] [Thread-9682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:02:24.833 [DEBUG] [Thread-9682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:02:24.850 [INFO] [Thread-9682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:02:24.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-25T10:02:24.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:02:25.697 [DEBUG] [Thread-9682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:02:25.697 [DEBUG] [Thread-9682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:02:25.745 [DEBUG] [Thread-9682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:02:25.745 [DEBUG] [Thread-9682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:02:25.754 [DEBUG] [Thread-9682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:02:25.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:02:25.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-25T10:02:25.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-25T10:02:25.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:02:25.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:02:25.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:02:25.786 [DEBUG] [Thread-9682] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:02:26.430 [DEBUG] [Thread-9684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:41.480 [DEBUG] [Thread-9685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:54.214 [DEBUG] [Thread-9686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:02:55.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:02:55.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-25T10:02:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 2, 46), 14.33, 39.85, 0.0, 13.04, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:02:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:02:46
2025-12-25T10:02:56.517 [DEBUG] [Thread-9687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:56.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:02:56.779 [DEBUG] [Thread-9688] [transport.py] [_log()] starting thread (client mode): 0xb6bab430
2025-12-25T10:02:56.779 [DEBUG] [Thread-9688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:02:56.801 [DEBUG] [Thread-9688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:02:56.801 [INFO] [Thread-9688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:02:56.803 [DEBUG] [Thread-9688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:02:56.803 [DEBUG] [Thread-9688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] client lang: <none>
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] server lang: <none>
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] kex follows: False
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] Compression: none
2025-12-25T10:02:56.804 [DEBUG] [Thread-9688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:02:56.820 [DEBUG] [Thread-9688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:02:56.820 [DEBUG] [Thread-9688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:02:56.820 [DEBUG] [Thread-9688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:02:56.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:02:56.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:02:56.822 [DEBUG] [Thread-9688] [transport.py] [_log()] userauth is OK
2025-12-25T10:02:56.822 [DEBUG] [Thread-9688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:02:56.822 [DEBUG] [Thread-9688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:02:56.822 [DEBUG] [Thread-9688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:02:56.822 [DEBUG] [Thread-9688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:02:56.847 [INFO] [Thread-9688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:02:56.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:02:57.445 [DEBUG] [Thread-9688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:02:57.445 [DEBUG] [Thread-9688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:02:57.446 [DEBUG] [Thread-9688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:02:57.486 [DEBUG] [Thread-9688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:02:57.486 [DEBUG] [Thread-9688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:02:57.490 [DEBUG] [Thread-9688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:02:57.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:02:57.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:02:57.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:02:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:02:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:02:57.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:02:57.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:02:57.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:02:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:02:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.335132 -999.00  +21.50  14.29     47   +9.80 1 2 1 1 1   888    0 13.72 95.03 ----- 14.3 14.3 21.8 22.9 28.6 -24.1 27.9 -22.4 26.4 -20.6 26.9 -21.2
2025-12-25T10:02:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:02:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:02:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.335132
2025-12-25T10:02:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:02:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:02:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:02:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:02:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:02:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:02:46', tmtdew=14.33, humidity=39.85, cloud=0.0, wind=13.04, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:02:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:02:57.517 [DEBUG] [Thread-9688] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:02:57.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-25T10:02:57.615 [DEBUG] [Thread-9691] [transport.py] [_log()] starting thread (client mode): 0xb6b61db0
2025-12-25T10:02:57.615 [DEBUG] [Thread-9691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:02:57.630 [DEBUG] [Thread-9691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:02:57.630 [INFO] [Thread-9691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] client lang: <none>
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] server lang: <none>
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] kex follows: False
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:02:57.638 [DEBUG] [Thread-9691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:02:57.639 [DEBUG] [Thread-9691] [transport.py] [_log()] Compression: none
2025-12-25T10:02:57.639 [DEBUG] [Thread-9691] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:02:57.697 [DEBUG] [Thread-9691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:02:57.697 [DEBUG] [Thread-9691] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:02:57.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:02:57.698 [DEBUG] [Thread-9691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:02:57.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:02:57.756 [DEBUG] [Thread-9691] [transport.py] [_log()] userauth is OK
2025-12-25T10:02:57.757 [DEBUG] [Thread-9691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:02:57.757 [DEBUG] [Thread-9691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:02:57.757 [DEBUG] [Thread-9691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:02:57.757 [DEBUG] [Thread-9691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:02:57.781 [INFO] [Thread-9691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:02:57.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-25T10:02:57.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:02:58.617 [DEBUG] [Thread-9691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:02:58.617 [DEBUG] [Thread-9691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:02:58.665 [DEBUG] [Thread-9691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:02:58.665 [DEBUG] [Thread-9691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:02:58.674 [DEBUG] [Thread-9691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:02:58.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:02:58.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:02:58.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:02:58.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:02:58.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:02:58.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:02:58.711 [DEBUG] [Thread-9691] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:02:58.926 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:02:58.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:11.545 [DEBUG] [Thread-9693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:26.592 [DEBUG] [Thread-9694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:28.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:03:28.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:03:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:03:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 3, 18), 14.67, 39.01, 0.0, 16.06, 22.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:03:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:03:18
2025-12-25T10:03:29.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:03:29.686 [DEBUG] [Thread-9695] [transport.py] [_log()] starting thread (client mode): 0xb9559d50
2025-12-25T10:03:29.686 [DEBUG] [Thread-9695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:03:29.705 [DEBUG] [Thread-9695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:03:29.706 [INFO] [Thread-9695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] client lang: <none>
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] server lang: <none>
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] kex follows: False
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] Compression: none
2025-12-25T10:03:29.707 [DEBUG] [Thread-9695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:03:29.725 [DEBUG] [Thread-9695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:03:29.726 [DEBUG] [Thread-9695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:03:29.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:03:29.727 [DEBUG] [Thread-9695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:03:29.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:03:29.729 [DEBUG] [Thread-9695] [transport.py] [_log()] userauth is OK
2025-12-25T10:03:29.729 [DEBUG] [Thread-9695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:03:29.729 [DEBUG] [Thread-9695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:03:29.730 [DEBUG] [Thread-9695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:03:29.730 [DEBUG] [Thread-9695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:03:29.766 [INFO] [Thread-9695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:03:29.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:03:30.381 [DEBUG] [Thread-9695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:03:30.381 [DEBUG] [Thread-9695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:03:30.381 [DEBUG] [Thread-9695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:03:30.422 [DEBUG] [Thread-9695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:03:30.422 [DEBUG] [Thread-9695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:03:30.424 [DEBUG] [Thread-9695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:03:30.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:03:30.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:03:30.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:03:30.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:03:30.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:03:30.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:03:30.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:03:30.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:03:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:03:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.335480 -999.00  +21.40  12.07     47   +9.80 1 2 1 1 1   888    0 14.10 97.32 ----- 12.1 12.1 327.5 18.4 28.8 -22.4 27.8 -22.9 26.5 -19.8 27.0 -20.2
2025-12-25T10:03:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:03:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:03:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.335480
2025-12-25T10:03:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:03:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:03:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:03:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:03:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:03:30.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:03:18', tmtdew=14.67, humidity=39.01, cloud=0.0, wind=16.06, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:03:05.472', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:03:30.448 [DEBUG] [Thread-9695] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:03:30.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-25T10:03:30.544 [DEBUG] [Thread-9698] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2025-12-25T10:03:30.544 [DEBUG] [Thread-9698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:03:30.558 [DEBUG] [Thread-9698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:03:30.559 [INFO] [Thread-9698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:03:30.566 [DEBUG] [Thread-9698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:03:30.567 [DEBUG] [Thread-9698] [transport.py] [_log()] client lang: <none>
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] server lang: <none>
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] kex follows: False
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:03:30.568 [DEBUG] [Thread-9698] [transport.py] [_log()] Compression: none
2025-12-25T10:03:30.569 [DEBUG] [Thread-9698] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:03:30.629 [DEBUG] [Thread-9698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:03:30.629 [DEBUG] [Thread-9698] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:03:30.630 [DEBUG] [Thread-9698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:03:30.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:03:30.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:03:30.692 [DEBUG] [Thread-9698] [transport.py] [_log()] userauth is OK
2025-12-25T10:03:30.692 [DEBUG] [Thread-9698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:03:30.692 [DEBUG] [Thread-9698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:03:30.693 [DEBUG] [Thread-9698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:03:30.693 [DEBUG] [Thread-9698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:03:30.711 [INFO] [Thread-9698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:03:30.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-25T10:03:30.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:03:31.580 [DEBUG] [Thread-9698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:03:31.580 [DEBUG] [Thread-9698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:03:31.628 [DEBUG] [Thread-9698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:03:31.628 [DEBUG] [Thread-9698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:03:31.638 [DEBUG] [Thread-9698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:03:31.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:03:31.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-25T10:03:31.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-25T10:03:31.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:03:31.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:03:31.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:03:31.674 [DEBUG] [Thread-9698] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:03:41.634 [DEBUG] [Thread-9700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:54.277 [DEBUG] [Thread-9701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:56.680 [DEBUG] [Thread-9702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:59.067 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:03:59.068 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:04:01.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:04:01.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-25T10:04:02.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 3, 50), 14.77, 38.56, 0.0, 12.33, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:04:02.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:03:50
2025-12-25T10:04:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:04:02.649 [DEBUG] [Thread-9703] [transport.py] [_log()] starting thread (client mode): 0xb6b23220
2025-12-25T10:04:02.649 [DEBUG] [Thread-9703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:04:02.669 [DEBUG] [Thread-9703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:04:02.669 [INFO] [Thread-9703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:04:02.672 [DEBUG] [Thread-9703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] client lang: <none>
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] server lang: <none>
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] kex follows: False
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] Compression: none
2025-12-25T10:04:02.673 [DEBUG] [Thread-9703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:04:02.692 [DEBUG] [Thread-9703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:04:02.693 [DEBUG] [Thread-9703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:04:02.693 [DEBUG] [Thread-9703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:04:02.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:04:02.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:04:02.696 [DEBUG] [Thread-9703] [transport.py] [_log()] userauth is OK
2025-12-25T10:04:02.696 [DEBUG] [Thread-9703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:04:02.696 [DEBUG] [Thread-9703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:04:02.696 [DEBUG] [Thread-9703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:04:02.696 [DEBUG] [Thread-9703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:04:02.731 [INFO] [Thread-9703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:04:02.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:04:03.376 [DEBUG] [Thread-9703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:04:03.376 [DEBUG] [Thread-9703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:04:03.376 [DEBUG] [Thread-9703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:04:03.417 [DEBUG] [Thread-9703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:04:03.417 [DEBUG] [Thread-9703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:04:03.420 [DEBUG] [Thread-9703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:04:03.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:04:03.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:04:03.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:04:03.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:04:03.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:04:03.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:04:03.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:04:03.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:04:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:04:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.335827 -999.00  +21.30  11.76     47   +9.80 1 2 1 1 1   888    0 13.72 87.22 ----- 11.8 11.8 316.4 13.4 28.9 -21.9 27.9 -22.2 26.6 -19.6 27.1 -20.1
2025-12-25T10:04:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:04:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:04:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.335827
2025-12-25T10:04:03.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:04:03.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:04:03.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:04:03.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:04:03.448 [DEBUG] [Thread-9703] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:04:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:04:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:03:50', tmtdew=14.77, humidity=38.56, cloud=0.0, wind=12.33, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:03:35.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:04:03.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-25T10:04:03.541 [DEBUG] [Thread-9706] [transport.py] [_log()] starting thread (client mode): 0xb6baa650
2025-12-25T10:04:03.541 [DEBUG] [Thread-9706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:04:03.558 [DEBUG] [Thread-9706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:04:03.558 [INFO] [Thread-9706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:04:03.566 [DEBUG] [Thread-9706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:04:03.566 [DEBUG] [Thread-9706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:04:03.566 [DEBUG] [Thread-9706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:04:03.566 [DEBUG] [Thread-9706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:03.566 [DEBUG] [Thread-9706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] client lang: <none>
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] server lang: <none>
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] kex follows: False
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] Compression: none
2025-12-25T10:04:03.567 [DEBUG] [Thread-9706] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:04:03.633 [DEBUG] [Thread-9706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:04:03.633 [DEBUG] [Thread-9706] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:04:03.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:04:03.634 [DEBUG] [Thread-9706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:04:03.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:04:03.688 [DEBUG] [Thread-9706] [transport.py] [_log()] userauth is OK
2025-12-25T10:04:03.689 [DEBUG] [Thread-9706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:04:03.689 [DEBUG] [Thread-9706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:04:03.689 [DEBUG] [Thread-9706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:04:03.689 [DEBUG] [Thread-9706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:04:03.707 [INFO] [Thread-9706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:04:03.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-25T10:04:03.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:04:04.579 [DEBUG] [Thread-9706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:04:04.580 [DEBUG] [Thread-9706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:04:04.628 [DEBUG] [Thread-9706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:04:04.628 [DEBUG] [Thread-9706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:04:04.637 [DEBUG] [Thread-9706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:04:04.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:04:04.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-25T10:04:04.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-25T10:04:04.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:04:04.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:04:04.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:04:04.674 [DEBUG] [Thread-9706] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:04:11.720 [DEBUG] [Thread-9708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:26.776 [DEBUG] [Thread-9709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:04:34.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:04:34.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-25T10:04:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 4, 22), 15.06, 37.95, 0.0, 11.68, 22.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:04:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:04:22
2025-12-25T10:04:35.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:04:35.660 [DEBUG] [Thread-9710] [transport.py] [_log()] starting thread (client mode): 0xb6b20070
2025-12-25T10:04:35.660 [DEBUG] [Thread-9710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:04:35.679 [DEBUG] [Thread-9710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:04:35.680 [INFO] [Thread-9710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] client lang: <none>
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] server lang: <none>
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] kex follows: False
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] Compression: none
2025-12-25T10:04:35.683 [DEBUG] [Thread-9710] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:04:35.700 [DEBUG] [Thread-9710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:04:35.701 [DEBUG] [Thread-9710] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:04:35.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:04:35.702 [DEBUG] [Thread-9710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:04:35.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:04:35.704 [DEBUG] [Thread-9710] [transport.py] [_log()] userauth is OK
2025-12-25T10:04:35.704 [DEBUG] [Thread-9710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:04:35.704 [DEBUG] [Thread-9710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:04:35.704 [DEBUG] [Thread-9710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:04:35.705 [DEBUG] [Thread-9710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:04:35.723 [INFO] [Thread-9710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:04:35.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:04:36.364 [DEBUG] [Thread-9710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:04:36.364 [DEBUG] [Thread-9710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:04:36.364 [DEBUG] [Thread-9710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:04:36.406 [DEBUG] [Thread-9710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:04:36.406 [DEBUG] [Thread-9710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:04:36.410 [DEBUG] [Thread-9710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:04:36.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:04:36.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:04:36.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:04:36.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:04:36.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:04:36.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:04:36.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:04:36.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:04:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:04:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.336174 -999.00  +21.40   9.54     47   +9.80 1 2 1 1 1   888    0 13.78 90.26 ----- 9.5 9.5 321.2 13.7 29.1 -22.0 28.1 -21.4 26.7 -19.3 27.2 -20.0
2025-12-25T10:04:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:04:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:04:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.336174
2025-12-25T10:04:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:04:36.436 [DEBUG] [Thread-9710] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:04:36.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:04:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:04:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:04:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:04:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:04:22', tmtdew=15.06, humidity=37.95, cloud=0.0, wind=11.68, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:04:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:04:36.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-25T10:04:36.536 [DEBUG] [Thread-9713] [transport.py] [_log()] starting thread (client mode): 0xb6b62c50
2025-12-25T10:04:36.536 [DEBUG] [Thread-9713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:04:36.551 [DEBUG] [Thread-9713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:04:36.551 [INFO] [Thread-9713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:04:36.559 [DEBUG] [Thread-9713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:04:36.559 [DEBUG] [Thread-9713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:04:36.560 [DEBUG] [Thread-9713] [transport.py] [_log()] client lang: <none>
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] server lang: <none>
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] kex follows: False
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:04:36.561 [DEBUG] [Thread-9713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:04:36.562 [DEBUG] [Thread-9713] [transport.py] [_log()] Compression: none
2025-12-25T10:04:36.562 [DEBUG] [Thread-9713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:04:36.622 [DEBUG] [Thread-9713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:04:36.623 [DEBUG] [Thread-9713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:04:36.623 [DEBUG] [Thread-9713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:04:36.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:04:36.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:04:36.678 [DEBUG] [Thread-9713] [transport.py] [_log()] userauth is OK
2025-12-25T10:04:36.678 [DEBUG] [Thread-9713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:04:36.678 [DEBUG] [Thread-9713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:04:36.678 [DEBUG] [Thread-9713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:04:36.678 [DEBUG] [Thread-9713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:04:36.699 [INFO] [Thread-9713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:04:36.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-25T10:04:36.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:04:37.542 [DEBUG] [Thread-9713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:04:37.542 [DEBUG] [Thread-9713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:04:37.590 [DEBUG] [Thread-9713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:04:37.590 [DEBUG] [Thread-9713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:04:37.599 [DEBUG] [Thread-9713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:04:37.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:04:37.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-25T10:04:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:04:37.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:04:37.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:04:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:04:37.636 [DEBUG] [Thread-9713] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:04:41.812 [DEBUG] [Thread-9715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:54.332 [DEBUG] [Thread-9716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:56.872 [DEBUG] [Thread-9717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:59.210 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:04:59.211 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:05:07.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:05:07.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:05:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 4, 55), 15.74, 36.47, 0.0, 17.71, 22.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:05:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:04:55
2025-12-25T10:05:08.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:05:08.618 [DEBUG] [Thread-9718] [transport.py] [_log()] starting thread (client mode): 0xb6be0e20
2025-12-25T10:05:08.618 [DEBUG] [Thread-9718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:05:08.639 [DEBUG] [Thread-9718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:05:08.639 [INFO] [Thread-9718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:08.642 [DEBUG] [Thread-9718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] client lang: <none>
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] server lang: <none>
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] kex follows: False
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] Compression: none
2025-12-25T10:05:08.643 [DEBUG] [Thread-9718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:05:08.661 [DEBUG] [Thread-9718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:05:08.661 [DEBUG] [Thread-9718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:05:08.662 [DEBUG] [Thread-9718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:05:08.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:05:08.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:05:08.664 [DEBUG] [Thread-9718] [transport.py] [_log()] userauth is OK
2025-12-25T10:05:08.664 [DEBUG] [Thread-9718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:05:08.664 [DEBUG] [Thread-9718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:05:08.664 [DEBUG] [Thread-9718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:05:08.664 [DEBUG] [Thread-9718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:05:08.689 [INFO] [Thread-9718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:05:08.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:05:09.624 [DEBUG] [Thread-9718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:05:09.624 [DEBUG] [Thread-9718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:05:09.625 [DEBUG] [Thread-9718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:05:09.665 [DEBUG] [Thread-9718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:05:09.665 [DEBUG] [Thread-9718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:05:09.669 [DEBUG] [Thread-9718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:05:09.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:05:09.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:05:09.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:05:09.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:05:09.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:05:09.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:05:09.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:05:09.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:05:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:05:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.336521 -999.00  +21.50  25.73     45   +9.10 1 2 1 1 1   888    0 13.88 90.20 ----- 25.7 25.7 355.9 37.2 29.1 -21.3 28.1 -22.3 26.7 -20.3 27.2 -19.4
2025-12-25T10:05:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:05:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:05:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.336521
2025-12-25T10:05:09.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:05:09.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:05:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:05:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:05:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:05:09.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:04:55', tmtdew=15.74, humidity=36.47, cloud=0.0, wind=17.71, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:04:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:05:09.699 [DEBUG] [Thread-9718] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:05:09.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-25T10:05:09.797 [DEBUG] [Thread-9721] [transport.py] [_log()] starting thread (client mode): 0xb6be10c0
2025-12-25T10:05:09.797 [DEBUG] [Thread-9721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:05:09.812 [DEBUG] [Thread-9721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:05:09.812 [INFO] [Thread-9721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:05:09.820 [DEBUG] [Thread-9721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:05:09.820 [DEBUG] [Thread-9721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:05:09.820 [DEBUG] [Thread-9721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:05:09.820 [DEBUG] [Thread-9721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] client lang: <none>
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] server lang: <none>
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] kex follows: False
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] Compression: none
2025-12-25T10:05:09.821 [DEBUG] [Thread-9721] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:05:09.883 [DEBUG] [Thread-9721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:05:09.884 [DEBUG] [Thread-9721] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:05:09.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:05:09.885 [DEBUG] [Thread-9721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:05:09.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:05:09.939 [DEBUG] [Thread-9721] [transport.py] [_log()] userauth is OK
2025-12-25T10:05:09.940 [DEBUG] [Thread-9721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:05:09.940 [DEBUG] [Thread-9721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:05:09.940 [DEBUG] [Thread-9721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:05:09.941 [DEBUG] [Thread-9721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:05:09.963 [INFO] [Thread-9721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:05:09.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:05:09.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:05:10.780 [DEBUG] [Thread-9721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:05:10.780 [DEBUG] [Thread-9721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:05:10.828 [DEBUG] [Thread-9721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:05:10.829 [DEBUG] [Thread-9721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:05:10.838 [DEBUG] [Thread-9721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:05:10.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:05:10.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-25T10:05:10.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-25T10:05:10.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:05:10.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:05:10.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:05:10.874 [DEBUG] [Thread-9721] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:05:11.903 [DEBUG] [Thread-9723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:26.955 [DEBUG] [Thread-9724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:05:40.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:05:40.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-25T10:05:41.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 5, 27), 15.38, 37.23, 0.0, 19.41, 22.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:05:41.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:05:27
2025-12-25T10:05:41.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:05:41.920 [DEBUG] [Thread-9725] [transport.py] [_log()] starting thread (client mode): 0xb6bba470
2025-12-25T10:05:41.920 [DEBUG] [Thread-9725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:05:41.941 [DEBUG] [Thread-9725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:05:41.941 [INFO] [Thread-9725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] client lang: <none>
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] server lang: <none>
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] kex follows: False
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] Compression: none
2025-12-25T10:05:41.944 [DEBUG] [Thread-9725] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:05:41.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:05:41.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] userauth is OK
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:05:41.962 [DEBUG] [Thread-9725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:05:41.972 [INFO] [Thread-9725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:05:41.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:05:41.987 [DEBUG] [Thread-9727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:42.592 [DEBUG] [Thread-9725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:05:42.592 [DEBUG] [Thread-9725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:05:42.593 [DEBUG] [Thread-9725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:05:42.633 [DEBUG] [Thread-9725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:05:42.633 [DEBUG] [Thread-9725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:05:42.636 [DEBUG] [Thread-9725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:05:42.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:05:42.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:05:42.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:05:42.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:05:42.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:05:42.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:05:42.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.336868 -999.00  +22.10  18.94     42   +8.60 1 2 1 1 1   888    0 14.13 101.78 ----- 18.9 18.9 5.6 34.2 29.1 -22.1 28.1 -21.2 26.8 -21.5 27.2 -20.4
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.336868
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:05:42.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:05:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:05:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:05:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:05:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:05:27', tmtdew=15.38, humidity=37.23, cloud=0.0, wind=19.41, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:05:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:05:42.656 [DEBUG] [Thread-9725] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:05:42.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-25T10:05:42.742 [DEBUG] [Thread-9729] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2025-12-25T10:05:42.742 [DEBUG] [Thread-9729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:05:42.757 [DEBUG] [Thread-9729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:05:42.757 [INFO] [Thread-9729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] client lang: <none>
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] server lang: <none>
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] kex follows: False
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] Compression: none
2025-12-25T10:05:42.768 [DEBUG] [Thread-9729] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:05:42.821 [DEBUG] [Thread-9729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:05:42.821 [DEBUG] [Thread-9729] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:05:42.821 [DEBUG] [Thread-9729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:05:42.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:05:42.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:05:42.877 [DEBUG] [Thread-9729] [transport.py] [_log()] userauth is OK
2025-12-25T10:05:42.877 [DEBUG] [Thread-9729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:05:42.877 [DEBUG] [Thread-9729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:05:42.877 [DEBUG] [Thread-9729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:05:42.877 [DEBUG] [Thread-9729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:05:42.891 [INFO] [Thread-9729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:05:42.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-25T10:05:42.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:05:43.733 [DEBUG] [Thread-9729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:05:43.734 [DEBUG] [Thread-9729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:05:43.781 [DEBUG] [Thread-9729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:05:43.781 [DEBUG] [Thread-9729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:05:43.790 [DEBUG] [Thread-9729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:05:43.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:05:43.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:05:43.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-25T10:05:43.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:05:43.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:05:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:05:43.821 [DEBUG] [Thread-9729] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:05:54.389 [DEBUG] [Thread-9731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:57.020 [DEBUG] [Thread-9732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:59.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:05:59.353 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:12.073 [DEBUG] [Thread-9733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:13.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:06:13.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:06:13.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-25T10:06:14.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 5, 59), 15.54, 37.06, 0.0, 22.48, 22.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:06:14.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:05:59
2025-12-25T10:06:14.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:06:14.797 [DEBUG] [Thread-9734] [transport.py] [_log()] starting thread (client mode): 0xb6b4a350
2025-12-25T10:06:14.798 [DEBUG] [Thread-9734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:06:14.817 [DEBUG] [Thread-9734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:06:14.818 [INFO] [Thread-9734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] client lang: <none>
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] server lang: <none>
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] kex follows: False
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] Compression: none
2025-12-25T10:06:14.821 [DEBUG] [Thread-9734] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:06:14.838 [DEBUG] [Thread-9734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:06:14.839 [DEBUG] [Thread-9734] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:06:14.839 [DEBUG] [Thread-9734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:06:14.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:06:14.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:06:14.841 [DEBUG] [Thread-9734] [transport.py] [_log()] userauth is OK
2025-12-25T10:06:14.842 [DEBUG] [Thread-9734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:06:14.842 [DEBUG] [Thread-9734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:06:14.842 [DEBUG] [Thread-9734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:06:14.842 [DEBUG] [Thread-9734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:06:14.856 [INFO] [Thread-9734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:06:14.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:06:15.491 [DEBUG] [Thread-9734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:06:15.491 [DEBUG] [Thread-9734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:06:15.492 [DEBUG] [Thread-9734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:06:15.533 [DEBUG] [Thread-9734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:06:15.533 [DEBUG] [Thread-9734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:06:15.535 [DEBUG] [Thread-9734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:06:15.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:06:15.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:06:15.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:06:15.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:06:15.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:06:15.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:06:15.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:06:15.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:06:15.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:06:15.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.337215 -999.00  +22.40  13.49     38   +7.60 1 2 1 1 1   888    0 14.92 121.25 ----- 13.5 13.5 335.8 20.4 29.0 -22.2 28.0 -22.2 26.8 -19.3 27.3 -21.2
2025-12-25T10:06:15.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:06:15.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:06:15.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.337215
2025-12-25T10:06:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:06:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:06:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:06:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:06:15.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:06:15.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:05:59', tmtdew=15.54, humidity=37.06, cloud=0.0, wind=22.48, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:05:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:06:15.559 [DEBUG] [Thread-9734] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:06:15.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-25T10:06:15.656 [DEBUG] [Thread-9737] [transport.py] [_log()] starting thread (client mode): 0xb6b29f60
2025-12-25T10:06:15.656 [DEBUG] [Thread-9737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:06:15.671 [DEBUG] [Thread-9737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:06:15.671 [INFO] [Thread-9737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:06:15.682 [DEBUG] [Thread-9737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] client lang: <none>
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] server lang: <none>
2025-12-25T10:06:15.683 [DEBUG] [Thread-9737] [transport.py] [_log()] kex follows: False
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] Compression: none
2025-12-25T10:06:15.684 [DEBUG] [Thread-9737] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:06:15.744 [DEBUG] [Thread-9737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:06:15.745 [DEBUG] [Thread-9737] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:06:15.745 [DEBUG] [Thread-9737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:06:15.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:06:15.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:06:15.816 [DEBUG] [Thread-9737] [transport.py] [_log()] userauth is OK
2025-12-25T10:06:15.817 [DEBUG] [Thread-9737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:06:15.817 [DEBUG] [Thread-9737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:06:15.817 [DEBUG] [Thread-9737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:06:15.817 [DEBUG] [Thread-9737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:06:15.840 [INFO] [Thread-9737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:06:15.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-25T10:06:15.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:06:16.695 [DEBUG] [Thread-9737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:06:16.695 [DEBUG] [Thread-9737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:06:16.743 [DEBUG] [Thread-9737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:06:16.743 [DEBUG] [Thread-9737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:06:16.752 [DEBUG] [Thread-9737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:06:16.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:06:16.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-25T10:06: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-25T10:06:16.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:06:16.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:06:16.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:06:16.788 [DEBUG] [Thread-9737] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:06:27.110 [DEBUG] [Thread-9739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:42.164 [DEBUG] [Thread-9740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:06:46.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:06:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:06:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 6, 31), 15.43, 37.21, 0.0, 19.53, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:06:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:06:31
2025-12-25T10:06:47.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:06:47.779 [DEBUG] [Thread-9741] [transport.py] [_log()] starting thread (client mode): 0xb6b51ff0
2025-12-25T10:06:47.780 [DEBUG] [Thread-9741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:06:47.800 [DEBUG] [Thread-9741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:06:47.801 [INFO] [Thread-9741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] client lang: <none>
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] server lang: <none>
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] kex follows: False
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:06:47.804 [DEBUG] [Thread-9741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:06:47.805 [DEBUG] [Thread-9741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:06:47.805 [DEBUG] [Thread-9741] [transport.py] [_log()] Compression: none
2025-12-25T10:06:47.805 [DEBUG] [Thread-9741] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:06:47.823 [DEBUG] [Thread-9741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:06:47.823 [DEBUG] [Thread-9741] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:06:47.824 [DEBUG] [Thread-9741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:06:47.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:06:47.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:06:47.825 [DEBUG] [Thread-9741] [transport.py] [_log()] userauth is OK
2025-12-25T10:06:47.825 [DEBUG] [Thread-9741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:06:47.825 [DEBUG] [Thread-9741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:06:47.825 [DEBUG] [Thread-9741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:06:47.825 [DEBUG] [Thread-9741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:06:47.837 [INFO] [Thread-9741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:06:47.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:06:48.388 [DEBUG] [Thread-9741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:06:48.389 [DEBUG] [Thread-9741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:06:48.390 [DEBUG] [Thread-9741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:06:48.430 [DEBUG] [Thread-9741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:06:48.430 [DEBUG] [Thread-9741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:06:48.432 [DEBUG] [Thread-9741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:06:48.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:06:48.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:06:48.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:06:48.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:06:48.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:06:48.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:06:48.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:06:48.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:06:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:06:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.337910 -999.00  +22.50  10.45     38   +7.60 1 2 1 1 1   888    0 15.64 146.29 ----- 10.4 10.4 349.8 19.3 29.0 -22.8 28.0 -22.4 26.9 -20.1 27.3 -21.2
2025-12-25T10:06:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:06:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:06:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.337910
2025-12-25T10:06:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:06:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:06:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:06:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:06:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:06:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:06:31', tmtdew=15.43, humidity=37.21, cloud=0.0, wind=19.53, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:06:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:06:48.454 [DEBUG] [Thread-9741] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:06:48.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-25T10:06:48.564 [DEBUG] [Thread-9744] [transport.py] [_log()] starting thread (client mode): 0xb6bbbfd0
2025-12-25T10:06:48.564 [DEBUG] [Thread-9744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:06:48.580 [DEBUG] [Thread-9744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:06:48.580 [INFO] [Thread-9744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:06:48.589 [DEBUG] [Thread-9744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] client lang: <none>
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] server lang: <none>
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] kex follows: False
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:06:48.590 [DEBUG] [Thread-9744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:06:48.591 [DEBUG] [Thread-9744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:06:48.591 [DEBUG] [Thread-9744] [transport.py] [_log()] Compression: none
2025-12-25T10:06:48.591 [DEBUG] [Thread-9744] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:06:48.650 [DEBUG] [Thread-9744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:06:48.650 [DEBUG] [Thread-9744] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:06:48.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:06:48.651 [DEBUG] [Thread-9744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:06:48.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:06:48.721 [DEBUG] [Thread-9744] [transport.py] [_log()] userauth is OK
2025-12-25T10:06:48.721 [DEBUG] [Thread-9744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:06:48.721 [DEBUG] [Thread-9744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:06:48.722 [DEBUG] [Thread-9744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:06:48.722 [DEBUG] [Thread-9744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:06:48.741 [INFO] [Thread-9744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:06:48.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:06:48.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:06:49.571 [DEBUG] [Thread-9744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:06:49.571 [DEBUG] [Thread-9744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:06:49.623 [DEBUG] [Thread-9744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:06:49.623 [DEBUG] [Thread-9744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:06:49.632 [DEBUG] [Thread-9744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:06:49.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:06:49.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-25T10:06:49.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-25T10:06:49.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:06:49.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:06:49.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:06:49.669 [DEBUG] [Thread-9744] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:06:54.449 [DEBUG] [Thread-9746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:57.198 [DEBUG] [Thread-9747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:59.491 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:06:59.492 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:12.238 [DEBUG] [Thread-9748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:07:19.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:07:19.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:07:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 7, 3), 15.67, 36.65, 0.0, 20.17, 22.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:07:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:07:03
2025-12-25T10:07:20.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:07:20.665 [DEBUG] [Thread-9749] [transport.py] [_log()] starting thread (client mode): 0xb6be3490
2025-12-25T10:07:20.665 [DEBUG] [Thread-9749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:07:20.685 [DEBUG] [Thread-9749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:07:20.685 [INFO] [Thread-9749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:07:20.688 [DEBUG] [Thread-9749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:07:20.688 [DEBUG] [Thread-9749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:07:20.688 [DEBUG] [Thread-9749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] client lang: <none>
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] server lang: <none>
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] kex follows: False
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:07:20.689 [DEBUG] [Thread-9749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:07:20.690 [DEBUG] [Thread-9749] [transport.py] [_log()] Compression: none
2025-12-25T10:07:20.690 [DEBUG] [Thread-9749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:07:20.706 [DEBUG] [Thread-9749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:07:20.707 [DEBUG] [Thread-9749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:07:20.707 [DEBUG] [Thread-9749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:07:20.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:07:20.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:07:20.709 [DEBUG] [Thread-9749] [transport.py] [_log()] userauth is OK
2025-12-25T10:07:20.709 [DEBUG] [Thread-9749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:07:20.709 [DEBUG] [Thread-9749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:07:20.709 [DEBUG] [Thread-9749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:07:20.709 [DEBUG] [Thread-9749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:07:20.744 [INFO] [Thread-9749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:07:20.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:07:21.386 [DEBUG] [Thread-9749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:07:21.386 [DEBUG] [Thread-9749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:07:21.386 [DEBUG] [Thread-9749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:07:21.427 [DEBUG] [Thread-9749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:07:21.427 [DEBUG] [Thread-9749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:07:21.429 [DEBUG] [Thread-9749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:07:21.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:07:21.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:07:21.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:07:21.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:07:21.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:07:21.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:07:21.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:07:21.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:07:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:07:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.338257 -999.00  +22.60  15.31     37   +7.40 1 2 1 1 1   888    0 16.19 161.60 ----- 15.3 15.3 6.8 18.2 29.1 -22.5 28.1 -22.2 26.9 -20.8 27.2 -20.2
2025-12-25T10:07:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:07:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:07:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.338257
2025-12-25T10:07:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:07:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:07:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:07:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:07:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:07:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:07:03', tmtdew=15.67, humidity=36.65, cloud=0.0, wind=20.17, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:07:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:07:21.456 [DEBUG] [Thread-9749] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:07:21.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-25T10:07:21.543 [DEBUG] [Thread-9752] [transport.py] [_log()] starting thread (client mode): 0xb6bbbd00
2025-12-25T10:07:21.543 [DEBUG] [Thread-9752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:07:21.557 [DEBUG] [Thread-9752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:07:21.557 [INFO] [Thread-9752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] client lang: <none>
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] server lang: <none>
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] kex follows: False
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] Compression: none
2025-12-25T10:07:21.565 [DEBUG] [Thread-9752] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:07:21.621 [DEBUG] [Thread-9752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:07:21.622 [DEBUG] [Thread-9752] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:07:21.622 [DEBUG] [Thread-9752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:07:21.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:07:21.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:07:21.682 [DEBUG] [Thread-9752] [transport.py] [_log()] userauth is OK
2025-12-25T10:07:21.683 [DEBUG] [Thread-9752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:07:21.683 [DEBUG] [Thread-9752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:07:21.683 [DEBUG] [Thread-9752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:07:21.683 [DEBUG] [Thread-9752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:07:21.701 [INFO] [Thread-9752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:07:21.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:07:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:07:22.536 [DEBUG] [Thread-9752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:07:22.536 [DEBUG] [Thread-9752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:07:22.584 [DEBUG] [Thread-9752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:07:22.584 [DEBUG] [Thread-9752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:07:22.598 [DEBUG] [Thread-9752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:07:22.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:07:22.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-25T10:07:22.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-25T10:07:22.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:07:22.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:07:22.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:07:22.637 [DEBUG] [Thread-9752] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:07:27.274 [DEBUG] [Thread-9754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:42.326 [DEBUG] [Thread-9755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:52.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:07:52.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:07:52.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-25T10:07:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 7, 35), 17.22, 32.4, 0.0, 13.16, 22.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:07:53.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:07:35
2025-12-25T10:07:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:07:53.627 [DEBUG] [Thread-9756] [transport.py] [_log()] starting thread (client mode): 0xb6b2a0b0
2025-12-25T10:07:53.627 [DEBUG] [Thread-9756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:07:53.647 [DEBUG] [Thread-9756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:07:53.647 [INFO] [Thread-9756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] client lang: <none>
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] server lang: <none>
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] kex follows: False
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] Compression: none
2025-12-25T10:07:53.650 [DEBUG] [Thread-9756] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:07:53.667 [DEBUG] [Thread-9756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:07:53.667 [DEBUG] [Thread-9756] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:07:53.668 [DEBUG] [Thread-9756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:07:53.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:07:53.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:07:53.669 [DEBUG] [Thread-9756] [transport.py] [_log()] userauth is OK
2025-12-25T10:07:53.670 [DEBUG] [Thread-9756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:07:53.670 [DEBUG] [Thread-9756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:07:53.670 [DEBUG] [Thread-9756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:07:53.670 [DEBUG] [Thread-9756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:07:53.684 [INFO] [Thread-9756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:07:53.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:07:54.289 [DEBUG] [Thread-9756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:07:54.289 [DEBUG] [Thread-9756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:07:54.290 [DEBUG] [Thread-9756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:07:54.330 [DEBUG] [Thread-9756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:07:54.330 [DEBUG] [Thread-9756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:07:54.334 [DEBUG] [Thread-9756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:07:54.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:07:54.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:07:54.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:07:54.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:07:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:07:54.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:07:54.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:07:54.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:07:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:07:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.338604 -999.00  +22.50  17.40     38   +7.50 1 2 1 1 1   888    0 16.69 171.43 ----- 17.4 17.4 341.4 20.1 29.1 -23.0 28.1 -22.6 26.9 -20.8 27.3 -23.6
2025-12-25T10:07:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:07:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:07:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.338604
2025-12-25T10:07:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:07:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:07:54.360 [DEBUG] [Thread-9756] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:07:54.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:07:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:07:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:07:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:07:35', tmtdew=17.22, humidity=32.4, cloud=0.0, wind=13.16, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:07:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:07:54.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-25T10:07:54.454 [DEBUG] [Thread-9759] [transport.py] [_log()] starting thread (client mode): 0xb955add0
2025-12-25T10:07:54.454 [DEBUG] [Thread-9759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:07:54.469 [DEBUG] [Thread-9759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:07:54.469 [INFO] [Thread-9759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:07:54.476 [DEBUG] [Thread-9759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:07:54.476 [DEBUG] [Thread-9759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:07:54.476 [DEBUG] [Thread-9759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] client lang: <none>
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] server lang: <none>
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] kex follows: False
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:07:54.477 [DEBUG] [Thread-9759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:07:54.478 [DEBUG] [Thread-9759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:07:54.478 [DEBUG] [Thread-9759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:07:54.478 [DEBUG] [Thread-9759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:07:54.478 [DEBUG] [Thread-9759] [transport.py] [_log()] Compression: none
2025-12-25T10:07:54.478 [DEBUG] [Thread-9759] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:07:54.502 [DEBUG] [Thread-9761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:54.536 [DEBUG] [Thread-9759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:07:54.536 [DEBUG] [Thread-9759] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:07:54.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:07:54.537 [DEBUG] [Thread-9759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:07:54.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:07:54.596 [DEBUG] [Thread-9759] [transport.py] [_log()] userauth is OK
2025-12-25T10:07:54.596 [DEBUG] [Thread-9759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:07:54.596 [DEBUG] [Thread-9759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:07:54.596 [DEBUG] [Thread-9759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:07:54.596 [DEBUG] [Thread-9759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:07:54.616 [INFO] [Thread-9759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:07: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-25T10:07:54.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:07:55.502 [DEBUG] [Thread-9759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:07:55.502 [DEBUG] [Thread-9759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:07:55.549 [DEBUG] [Thread-9759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:07:55.550 [DEBUG] [Thread-9759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:07:55.559 [DEBUG] [Thread-9759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:07:55.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:07:55.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-25T10:07:55.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-25T10:07:55.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:07:55.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:07:55.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:07:55.592 [DEBUG] [Thread-9759] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:07:57.361 [DEBUG] [Thread-9762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:59.629 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:07:59.631 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:12.420 [DEBUG] [Thread-9763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:25.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:08:25.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:08:25.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-25T10:08:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 8, 7), 16.96, 32.97, 0.0, 11.7, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:08:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:08:07
2025-12-25T10:08:26.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:08:26.596 [DEBUG] [Thread-9764] [transport.py] [_log()] starting thread (client mode): 0xb6b48d60
2025-12-25T10:08:26.596 [DEBUG] [Thread-9764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:08:26.610 [DEBUG] [Thread-9764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:08:26.610 [INFO] [Thread-9764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] client lang: <none>
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] server lang: <none>
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] kex follows: False
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] Compression: none
2025-12-25T10:08:26.612 [DEBUG] [Thread-9764] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:08:26.624 [DEBUG] [Thread-9764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:08:26.624 [DEBUG] [Thread-9764] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:08:26.625 [DEBUG] [Thread-9764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:08:26.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:08:26.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:08:26.626 [DEBUG] [Thread-9764] [transport.py] [_log()] userauth is OK
2025-12-25T10:08:26.626 [DEBUG] [Thread-9764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:08:26.626 [DEBUG] [Thread-9764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:08:26.626 [DEBUG] [Thread-9764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:08:26.626 [DEBUG] [Thread-9764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:08:26.640 [INFO] [Thread-9764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:08:26.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:08:27.199 [DEBUG] [Thread-9764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:08:27.199 [DEBUG] [Thread-9764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:08:27.200 [DEBUG] [Thread-9764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:08:27.240 [DEBUG] [Thread-9764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:08:27.240 [DEBUG] [Thread-9764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:08:27.244 [DEBUG] [Thread-9764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:08:27.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:08:27.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:08:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:08:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:08:27.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:08:27.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:08:27.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:08:27.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:08:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:08:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.338952 -999.00  +22.10  11.76     38   +7.10 1 2 1 1 1   888    0 16.97 177.98 ----- 11.8 11.8 354.0 14.3 29.1 -23.4 28.1 -23.5 27.0 -21.1 27.4 -21.4
2025-12-25T10:08:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:08:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:08:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.338952
2025-12-25T10:08:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:08:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:08:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:08:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:08:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:08:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:08:07', tmtdew=16.96, humidity=32.97, cloud=0.0, wind=11.7, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:08:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:08:27.272 [DEBUG] [Thread-9764] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:08:27.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-25T10:08:27.365 [DEBUG] [Thread-9767] [transport.py] [_log()] starting thread (client mode): 0xb6b496f0
2025-12-25T10:08:27.366 [DEBUG] [Thread-9767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:08:27.380 [DEBUG] [Thread-9767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:08:27.380 [INFO] [Thread-9767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:08:27.388 [DEBUG] [Thread-9767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:08:27.389 [DEBUG] [Thread-9767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:08:27.389 [DEBUG] [Thread-9767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:08:27.389 [DEBUG] [Thread-9767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:08:27.389 [DEBUG] [Thread-9767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:08:27.389 [DEBUG] [Thread-9767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:08:27.389 [DEBUG] [Thread-9767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] client lang: <none>
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] server lang: <none>
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] kex follows: False
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] Compression: none
2025-12-25T10:08:27.390 [DEBUG] [Thread-9767] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:08:27.446 [DEBUG] [Thread-9767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:08:27.446 [DEBUG] [Thread-9767] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:08:27.447 [DEBUG] [Thread-9767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:08:27.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:08:27.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:08:27.458 [DEBUG] [Thread-9769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:27.506 [DEBUG] [Thread-9767] [transport.py] [_log()] userauth is OK
2025-12-25T10:08:27.506 [DEBUG] [Thread-9767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:08:27.506 [DEBUG] [Thread-9767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:08:27.506 [DEBUG] [Thread-9767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:08:27.506 [DEBUG] [Thread-9767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:08:27.532 [INFO] [Thread-9767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:08:27.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-25T10:08:27.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:08:28.429 [DEBUG] [Thread-9767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:08:28.429 [DEBUG] [Thread-9767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:08:28.477 [DEBUG] [Thread-9767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:08:28.477 [DEBUG] [Thread-9767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:08:28.486 [DEBUG] [Thread-9767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:08:28.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:08:28.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:08:28.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-25T10:08:28.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:08:28.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:08:28.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:08:28.523 [DEBUG] [Thread-9767] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:08:42.509 [DEBUG] [Thread-9770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:54.551 [DEBUG] [Thread-9771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:57.539 [DEBUG] [Thread-9772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:08:58.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:08:58.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:08:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 8, 39), 17.0, 33.3, 0.0, 8.72, 22.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:08:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:08:39
2025-12-25T10:08:59.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:08:59.546 [DEBUG] [Thread-9773] [transport.py] [_log()] starting thread (client mode): 0xb6bba5f0
2025-12-25T10:08:59.546 [DEBUG] [Thread-9773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:08:59.560 [DEBUG] [Thread-9773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:08:59.560 [INFO] [Thread-9773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:08:59.561 [DEBUG] [Thread-9773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] client lang: <none>
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] server lang: <none>
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] kex follows: False
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] Compression: none
2025-12-25T10:08:59.562 [DEBUG] [Thread-9773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:08:59.570 [DEBUG] [Thread-9773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:08:59.570 [DEBUG] [Thread-9773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:08:59.571 [DEBUG] [Thread-9773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:08:59.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:08:59.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:08:59.572 [DEBUG] [Thread-9773] [transport.py] [_log()] userauth is OK
2025-12-25T10:08:59.572 [DEBUG] [Thread-9773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:08:59.572 [DEBUG] [Thread-9773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:08:59.572 [DEBUG] [Thread-9773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:08:59.572 [DEBUG] [Thread-9773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:08:59.585 [INFO] [Thread-9773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:08:59.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:08:59.777 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:08:59.778 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:00.190 [DEBUG] [Thread-9773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:09:00.190 [DEBUG] [Thread-9773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:09:00.190 [DEBUG] [Thread-9773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:09:00.231 [DEBUG] [Thread-9773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:09:00.231 [DEBUG] [Thread-9773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:09:00.234 [DEBUG] [Thread-9773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:09:00.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:09:00.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:09:00.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:09:00.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:09:00.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:09:00.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:09:00.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:09:00.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:09:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:09:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.339299 -999.00  +21.90   4.95     38   +7.10 1 2 1 1 1   888    0 17.16 182.70 ----- 5.0 5.0 4.7 10.7 29.1 -24.1 28.1 -23.9 26.9 -20.9 27.4 -22.6
2025-12-25T10:09:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:09:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:09:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.339299
2025-12-25T10:09:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:09:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:09:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:09:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:09:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:09:00.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:08:39', tmtdew=17.0, humidity=33.3, cloud=0.0, wind=8.72, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:08:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:09:00.255 [DEBUG] [Thread-9773] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:09:00.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-25T10:09:00.352 [DEBUG] [Thread-9776] [transport.py] [_log()] starting thread (client mode): 0xb6b49750
2025-12-25T10:09:00.352 [DEBUG] [Thread-9776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:09:00.367 [DEBUG] [Thread-9776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:09:00.368 [INFO] [Thread-9776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:09:00.376 [DEBUG] [Thread-9776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] client lang: <none>
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] server lang: <none>
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] kex follows: False
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] Compression: none
2025-12-25T10:09:00.377 [DEBUG] [Thread-9776] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:09:00.445 [DEBUG] [Thread-9776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:09:00.445 [DEBUG] [Thread-9776] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:09:00.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:09:00.446 [DEBUG] [Thread-9776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:09:00.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:09:00.506 [DEBUG] [Thread-9776] [transport.py] [_log()] userauth is OK
2025-12-25T10:09:00.506 [DEBUG] [Thread-9776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:09:00.507 [DEBUG] [Thread-9776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:09:00.507 [DEBUG] [Thread-9776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:09:00.507 [DEBUG] [Thread-9776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:09:00.525 [INFO] [Thread-9776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:09:00.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-25T10:09:00.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:09:01.346 [DEBUG] [Thread-9776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:09:01.347 [DEBUG] [Thread-9776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:09:01.395 [DEBUG] [Thread-9776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:09:01.395 [DEBUG] [Thread-9776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:09:01.405 [DEBUG] [Thread-9776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:09:01.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:09:01.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-25T10:09:01.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-25T10:09:01.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:09:01.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:09:01.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:09:01.441 [DEBUG] [Thread-9776] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:09:12.570 [DEBUG] [Thread-9778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:27.612 [DEBUG] [Thread-9779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:31.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:09:31.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:09:31.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-25T10:09:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 9, 11), 16.51, 34.47, 0.0, 9.71, 22.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:09:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:09:11
2025-12-25T10:09:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:09:32.457 [DEBUG] [Thread-9780] [transport.py] [_log()] starting thread (client mode): 0xb9559c60
2025-12-25T10:09:32.457 [DEBUG] [Thread-9780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:09:32.475 [DEBUG] [Thread-9780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:09:32.475 [INFO] [Thread-9780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] client lang: <none>
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] server lang: <none>
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] kex follows: False
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] Compression: none
2025-12-25T10:09:32.478 [DEBUG] [Thread-9780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:09:32.497 [DEBUG] [Thread-9780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:09:32.497 [DEBUG] [Thread-9780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:09:32.497 [DEBUG] [Thread-9780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:09:32.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:09:32.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:09:32.498 [DEBUG] [Thread-9780] [transport.py] [_log()] userauth is OK
2025-12-25T10:09:32.498 [DEBUG] [Thread-9780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:09:32.498 [DEBUG] [Thread-9780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:09:32.498 [DEBUG] [Thread-9780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:09:32.498 [DEBUG] [Thread-9780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:09:32.510 [INFO] [Thread-9780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:09:32.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:09:33.082 [DEBUG] [Thread-9780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:09:33.082 [DEBUG] [Thread-9780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:09:33.082 [DEBUG] [Thread-9780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:09:33.123 [DEBUG] [Thread-9780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:09:33.123 [DEBUG] [Thread-9780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:09:33.126 [DEBUG] [Thread-9780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:09:33.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:09:33.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:09:33.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:09:33.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:09:33.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:09:33.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:09:33.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.339646 -999.00  +22.10  13.28     39   +7.60 1 2 1 1 1   888    0 17.63 192.61 ----- 13.3 13.3 311.8 15.2 29.3 -23.4 28.2 -23.0 27.1 -21.0 27.4 -21.7
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.339646
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:09:33.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:09:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:09:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:09:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:09:11', tmtdew=16.51, humidity=34.47, cloud=0.0, wind=9.71, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:09:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:09:33.147 [DEBUG] [Thread-9780] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:09:33.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-25T10:09:33.232 [DEBUG] [Thread-9783] [transport.py] [_log()] starting thread (client mode): 0xb6b4a6e0
2025-12-25T10:09:33.232 [DEBUG] [Thread-9783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:09:33.247 [DEBUG] [Thread-9783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:09:33.247 [INFO] [Thread-9783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] client lang: <none>
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] server lang: <none>
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] kex follows: False
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] Compression: none
2025-12-25T10:09:33.255 [DEBUG] [Thread-9783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:09:33.314 [DEBUG] [Thread-9783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:09:33.314 [DEBUG] [Thread-9783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:09:33.314 [DEBUG] [Thread-9783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:09:33.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:09:33.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:09:33.371 [DEBUG] [Thread-9783] [transport.py] [_log()] userauth is OK
2025-12-25T10:09:33.371 [DEBUG] [Thread-9783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:09:33.371 [DEBUG] [Thread-9783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:09:33.371 [DEBUG] [Thread-9783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:09:33.371 [DEBUG] [Thread-9783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:09:33.386 [INFO] [Thread-9783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:09:33.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-25T10:09:33.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:09:34.218 [DEBUG] [Thread-9783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:09:34.218 [DEBUG] [Thread-9783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:09:34.269 [DEBUG] [Thread-9783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:09:34.269 [DEBUG] [Thread-9783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:09:34.278 [DEBUG] [Thread-9783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:09:34.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:09:34.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-25T10:09:34.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-25T10:09:34.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:09:34.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:09:34.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:09:34.309 [DEBUG] [Thread-9783] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:09:42.644 [DEBUG] [Thread-9785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:54.584 [DEBUG] [Thread-9786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:57.691 [DEBUG] [Thread-9787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:59.917 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:09:59.919 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:10:04.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:10:04.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:10: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-25T10:10:05.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 9, 43), 16.24, 35.02, 0.0, 13.69, 22.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:10:05.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:09:43
2025-12-25T10:10:05.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:10:05.337 [DEBUG] [Thread-9788] [transport.py] [_log()] starting thread (client mode): 0xb9559540
2025-12-25T10:10:05.337 [DEBUG] [Thread-9788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:10:05.357 [DEBUG] [Thread-9788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:10:05.358 [INFO] [Thread-9788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] client lang: <none>
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] server lang: <none>
2025-12-25T10:10:05.359 [DEBUG] [Thread-9788] [transport.py] [_log()] kex follows: False
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] Compression: none
2025-12-25T10:10:05.360 [DEBUG] [Thread-9788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:10:05.367 [DEBUG] [Thread-9788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:10:05.367 [DEBUG] [Thread-9788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:10:05.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:10:05.367 [DEBUG] [Thread-9788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:10:05.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:10:05.367 [DEBUG] [Thread-9788] [transport.py] [_log()] userauth is OK
2025-12-25T10:10:05.368 [DEBUG] [Thread-9788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:10:05.368 [DEBUG] [Thread-9788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:10:05.368 [DEBUG] [Thread-9788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:10:05.368 [DEBUG] [Thread-9788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:10:05.383 [INFO] [Thread-9788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:10:05.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:10:06.268 [DEBUG] [Thread-9788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:10:06.268 [DEBUG] [Thread-9788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:10:06.268 [DEBUG] [Thread-9788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:10:06.309 [DEBUG] [Thread-9788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:10:06.309 [DEBUG] [Thread-9788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:10:06.311 [DEBUG] [Thread-9788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:10:06.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:10:06.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:10:06.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:10:06.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:10:06.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:10:06.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:10:06.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.339993 -999.00  +22.30  10.39     39   +7.80 1 2 1 1 1   888    0 17.89 193.31 ----- 10.4 10.4 338.9 14.2 29.4 -23.3 28.4 -22.3 27.2 -20.6 27.6 -21.6
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.339993
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:10:06.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:09:43', tmtdew=16.24, humidity=35.02, cloud=0.0, wind=13.69, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:09:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:10:06.337 [DEBUG] [Thread-9788] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:10:06.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-25T10:10:06.420 [DEBUG] [Thread-9791] [transport.py] [_log()] starting thread (client mode): 0xb6b48fd0
2025-12-25T10:10:06.420 [DEBUG] [Thread-9791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:10:06.435 [DEBUG] [Thread-9791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:10:06.435 [INFO] [Thread-9791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] client lang: <none>
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] server lang: <none>
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] kex follows: False
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] Compression: none
2025-12-25T10:10:06.443 [DEBUG] [Thread-9791] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:10:06.503 [DEBUG] [Thread-9791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:10:06.503 [DEBUG] [Thread-9791] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:10:06.503 [DEBUG] [Thread-9791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:10:06.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:10:06.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:10:06.565 [DEBUG] [Thread-9791] [transport.py] [_log()] userauth is OK
2025-12-25T10:10:06.565 [DEBUG] [Thread-9791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:10:06.565 [DEBUG] [Thread-9791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:10:06.565 [DEBUG] [Thread-9791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:10:06.565 [DEBUG] [Thread-9791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:10:06.580 [INFO] [Thread-9791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:10:06.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-25T10:10:06.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:10:07.481 [DEBUG] [Thread-9791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:10:07.481 [DEBUG] [Thread-9791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:10:07.530 [DEBUG] [Thread-9791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:10:07.530 [DEBUG] [Thread-9791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:10:07.539 [DEBUG] [Thread-9791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:10:07.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:10:07.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:10: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') -> 00000000
2025-12-25T10:10:07.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:10:07.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:10:07.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:10:07.588 [DEBUG] [Thread-9791] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:10:12.724 [DEBUG] [Thread-9793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:10:27.763 [DEBUG] [Thread-9794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:10:37.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:10:37.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:10:37.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:10:38.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 10, 15), 16.57, 34.26, 0.0, 15.32, 22.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:10:38.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:10:15
2025-12-25T10:10:38.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:10:38.585 [DEBUG] [Thread-9795] [transport.py] [_log()] starting thread (client mode): 0xb6b4b6a0
2025-12-25T10:10:38.585 [DEBUG] [Thread-9795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:10:38.605 [DEBUG] [Thread-9795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:10:38.605 [INFO] [Thread-9795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:10:38.608 [DEBUG] [Thread-9795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] client lang: <none>
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] server lang: <none>
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] kex follows: False
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] Compression: none
2025-12-25T10:10:38.609 [DEBUG] [Thread-9795] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:10:38.626 [DEBUG] [Thread-9795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:10:38.627 [DEBUG] [Thread-9795] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:10:38.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:10:38.627 [DEBUG] [Thread-9795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:10:38.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:10:38.628 [DEBUG] [Thread-9795] [transport.py] [_log()] userauth is OK
2025-12-25T10:10:38.628 [DEBUG] [Thread-9795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:10:38.628 [DEBUG] [Thread-9795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:10:38.628 [DEBUG] [Thread-9795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:10:38.628 [DEBUG] [Thread-9795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:10:38.638 [INFO] [Thread-9795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:10:38.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:10:39.241 [DEBUG] [Thread-9795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:10:39.241 [DEBUG] [Thread-9795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:10:39.241 [DEBUG] [Thread-9795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:10:39.283 [DEBUG] [Thread-9795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:10:39.283 [DEBUG] [Thread-9795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:10:39.285 [DEBUG] [Thread-9795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:10:39.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:10:39.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:10:39.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:10:39.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:10:39.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:10:39.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:10:39.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:10:39.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:10:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:10:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.339993 -999.00  +22.30  10.39     39   +7.80 1 2 1 1 1   888    0 17.89 193.31 ----- 10.4 10.4 338.9 14.2 29.4 -23.3 28.4 -22.3 27.2 -20.6 27.6 -21.6
2025-12-25T10:10:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:10:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.339993
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:10:39.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:10:15', tmtdew=16.57, humidity=34.26, cloud=0.0, wind=15.32, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:09:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:10:39.306 [DEBUG] [Thread-9795] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:10:39.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-25T10:10:39.390 [DEBUG] [Thread-9798] [transport.py] [_log()] starting thread (client mode): 0xb9558310
2025-12-25T10:10:39.391 [DEBUG] [Thread-9798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:10:39.405 [DEBUG] [Thread-9798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:10:39.405 [INFO] [Thread-9798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] client lang: <none>
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] server lang: <none>
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] kex follows: False
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] Compression: none
2025-12-25T10:10:39.417 [DEBUG] [Thread-9798] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:10:39.477 [DEBUG] [Thread-9798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:10:39.477 [DEBUG] [Thread-9798] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:10:39.477 [DEBUG] [Thread-9798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:10:39.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:10:39.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:10:39.538 [DEBUG] [Thread-9798] [transport.py] [_log()] userauth is OK
2025-12-25T10:10:39.538 [DEBUG] [Thread-9798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:10:39.538 [DEBUG] [Thread-9798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:10:39.538 [DEBUG] [Thread-9798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:10:39.538 [DEBUG] [Thread-9798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:10:39.552 [INFO] [Thread-9798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:10:39.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-25T10:10:39.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:10:40.396 [DEBUG] [Thread-9798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:10:40.396 [DEBUG] [Thread-9798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:10:40.446 [DEBUG] [Thread-9798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:10:40.446 [DEBUG] [Thread-9798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:10:40.456 [DEBUG] [Thread-9798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:10:40.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:10:40.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-25T10:10:40.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-25T10:10:40.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:10:40.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:10:40.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:10:40.496 [DEBUG] [Thread-9798] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:10:42.790 [DEBUG] [Thread-9800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:10:54.632 [DEBUG] [Thread-9801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:10:57.837 [DEBUG] [Thread-9802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:00.060 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:00.061 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:11:10.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:11:10.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:11:11.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 10, 47), 16.59, 33.93, 0.0, 15.12, 22.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:11:11.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:10:47
2025-12-25T10:11:11.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:11:11.487 [DEBUG] [Thread-9803] [transport.py] [_log()] starting thread (client mode): 0xb6bba8c0
2025-12-25T10:11:11.487 [DEBUG] [Thread-9803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:11:11.507 [DEBUG] [Thread-9803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:11:11.508 [INFO] [Thread-9803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] client lang: <none>
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] server lang: <none>
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] kex follows: False
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:11:11.511 [DEBUG] [Thread-9803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:11:11.512 [DEBUG] [Thread-9803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:11:11.512 [DEBUG] [Thread-9803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:11:11.512 [DEBUG] [Thread-9803] [transport.py] [_log()] Compression: none
2025-12-25T10:11:11.512 [DEBUG] [Thread-9803] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:11:11.528 [DEBUG] [Thread-9803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:11:11.528 [DEBUG] [Thread-9803] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:11:11.529 [DEBUG] [Thread-9803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:11:11.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:11:11.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:11:11.573 [DEBUG] [Thread-9803] [transport.py] [_log()] userauth is OK
2025-12-25T10:11:11.573 [DEBUG] [Thread-9803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:11:11.573 [DEBUG] [Thread-9803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:11:11.573 [DEBUG] [Thread-9803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:11:11.574 [DEBUG] [Thread-9803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:11:11.610 [INFO] [Thread-9803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:11:11.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:11:12.234 [DEBUG] [Thread-9803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:11:12.234 [DEBUG] [Thread-9803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:11:12.234 [DEBUG] [Thread-9803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:11:12.275 [DEBUG] [Thread-9803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:11:12.275 [DEBUG] [Thread-9803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:11:12.277 [DEBUG] [Thread-9803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:11:12.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:11:12.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:11:12.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:11:12.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:11:12.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:11:12.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:11:12.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:11:12.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:11:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:11:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.340688 -999.00  +22.20  10.01     39   +7.90 1 2 1 1 1   888    0 18.89 227.35 ----- 10.0 10.0 343.8 14.5 29.4 -24.1 28.5 -24.0 27.2 -21.5 27.6 -22.1
2025-12-25T10:11:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:11:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:11:12.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.340688
2025-12-25T10:11:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:11:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:11:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:11:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:11:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:11:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:10:47', tmtdew=16.59, humidity=33.93, cloud=0.0, wind=15.12, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:10:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:11:12.300 [DEBUG] [Thread-9803] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:11:12.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-25T10:11:12.395 [DEBUG] [Thread-9806] [transport.py] [_log()] starting thread (client mode): 0xb6bba890
2025-12-25T10:11:12.395 [DEBUG] [Thread-9806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:11:12.410 [DEBUG] [Thread-9806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:11:12.410 [INFO] [Thread-9806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:11:12.420 [DEBUG] [Thread-9806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] client lang: <none>
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] server lang: <none>
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] kex follows: False
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:11:12.421 [DEBUG] [Thread-9806] [transport.py] [_log()] Compression: none
2025-12-25T10:11:12.422 [DEBUG] [Thread-9806] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:11:12.475 [DEBUG] [Thread-9806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:11:12.476 [DEBUG] [Thread-9806] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:11:12.476 [DEBUG] [Thread-9806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:11:12.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:11:12.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:11:12.531 [DEBUG] [Thread-9806] [transport.py] [_log()] userauth is OK
2025-12-25T10:11:12.531 [DEBUG] [Thread-9806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:11:12.532 [DEBUG] [Thread-9806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:11:12.532 [DEBUG] [Thread-9806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:11:12.532 [DEBUG] [Thread-9806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:11:12.550 [INFO] [Thread-9806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:11:12.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-25T10:11:12.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:11:12.876 [DEBUG] [Thread-9808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:13.426 [DEBUG] [Thread-9806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:11:13.426 [DEBUG] [Thread-9806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:11:13.475 [DEBUG] [Thread-9806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:11:13.475 [DEBUG] [Thread-9806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:11:13.484 [DEBUG] [Thread-9806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:11:13.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:11:13.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-25T10:11:13.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-25T10:11:13.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:11:13.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:11:13.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:11:13.523 [DEBUG] [Thread-9806] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:11:27.935 [DEBUG] [Thread-9809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:42.970 [DEBUG] [Thread-9810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:43.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:11:43.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:11: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-25T10:11:44.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 11, 19), 16.89, 33.3, 0.0, 18.07, 22.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:11:44.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:11:19
2025-12-25T10:11:44.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:11:44.512 [DEBUG] [Thread-9811] [transport.py] [_log()] starting thread (client mode): 0xb6bbae60
2025-12-25T10:11:44.513 [DEBUG] [Thread-9811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:11:44.532 [DEBUG] [Thread-9811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:11:44.532 [INFO] [Thread-9811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] client lang: <none>
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] server lang: <none>
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] kex follows: False
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] Compression: none
2025-12-25T10:11:44.536 [DEBUG] [Thread-9811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:11:44.552 [DEBUG] [Thread-9811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:11:44.553 [DEBUG] [Thread-9811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:11:44.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:11:44.554 [DEBUG] [Thread-9811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:11:44.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:11:44.556 [DEBUG] [Thread-9811] [transport.py] [_log()] userauth is OK
2025-12-25T10:11:44.556 [DEBUG] [Thread-9811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:11:44.556 [DEBUG] [Thread-9811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:11:44.556 [DEBUG] [Thread-9811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:11:44.556 [DEBUG] [Thread-9811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:11:44.579 [INFO] [Thread-9811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:11:44.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:11:45.221 [DEBUG] [Thread-9811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:11:45.221 [DEBUG] [Thread-9811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:11:45.221 [DEBUG] [Thread-9811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:11:45.262 [DEBUG] [Thread-9811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:11:45.262 [DEBUG] [Thread-9811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:11:45.265 [DEBUG] [Thread-9811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:11:45.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:11:45.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:11:45.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:11:45.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:11:45.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:11:45.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:11:45.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:11:45.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:11:45.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:11:45.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.341035 -999.00  +22.30  11.53     40   +8.20 1 2 1 1 1   888    0 18.99 223.99 ----- 11.5 11.5 352.1 16.1 29.5 -23.9 28.5 -22.8 27.2 -21.8 27.5 -23.6
2025-12-25T10:11:45.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:11:45.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:11:45.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.341035
2025-12-25T10:11:45.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:11:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:11:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:11:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:11:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:11:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:11:19', tmtdew=16.89, humidity=33.3, cloud=0.0, wind=18.07, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:11:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:11:45.292 [DEBUG] [Thread-9811] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:11:45.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-25T10:11:45.380 [DEBUG] [Thread-9814] [transport.py] [_log()] starting thread (client mode): 0xb6bab340
2025-12-25T10:11:45.380 [DEBUG] [Thread-9814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:11:45.395 [DEBUG] [Thread-9814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:11:45.395 [INFO] [Thread-9814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] client lang: <none>
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] server lang: <none>
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] kex follows: False
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:11:45.403 [DEBUG] [Thread-9814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:11:45.404 [DEBUG] [Thread-9814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:11:45.404 [DEBUG] [Thread-9814] [transport.py] [_log()] Compression: none
2025-12-25T10:11:45.404 [DEBUG] [Thread-9814] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:11:45.460 [DEBUG] [Thread-9814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:11:45.460 [DEBUG] [Thread-9814] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:11:45.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:11:45.462 [DEBUG] [Thread-9814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:11:45.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:11:45.521 [DEBUG] [Thread-9814] [transport.py] [_log()] userauth is OK
2025-12-25T10:11:45.521 [DEBUG] [Thread-9814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:11:45.522 [DEBUG] [Thread-9814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:11:45.522 [DEBUG] [Thread-9814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:11:45.522 [DEBUG] [Thread-9814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:11:45.546 [INFO] [Thread-9814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:11:45.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-25T10:11:45.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:11:46.412 [DEBUG] [Thread-9814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:11:46.413 [DEBUG] [Thread-9814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:11:46.459 [DEBUG] [Thread-9814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:11:46.460 [DEBUG] [Thread-9814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:11:46.469 [DEBUG] [Thread-9814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:11:46.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:11:46.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-25T10:11:46.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-25T10:11:46.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:11:46.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:11:46.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:11:46.502 [DEBUG] [Thread-9814] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:11:54.682 [DEBUG] [Thread-9816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:11:58.001 [DEBUG] [Thread-9817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:00.201 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:00.202 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:13.048 [DEBUG] [Thread-9818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:16.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:12:16.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:12:16.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-25T10:12:17.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 11, 51), 17.02, 33.27, 0.0, 21.19, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:12:17.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:11:51
2025-12-25T10:12:17.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:12:17.483 [DEBUG] [Thread-9819] [transport.py] [_log()] starting thread (client mode): 0xb6b48d00
2025-12-25T10:12:17.483 [DEBUG] [Thread-9819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:12:17.503 [DEBUG] [Thread-9819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:12:17.503 [INFO] [Thread-9819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:12:17.506 [DEBUG] [Thread-9819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:12:17.506 [DEBUG] [Thread-9819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] client lang: <none>
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] server lang: <none>
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] kex follows: False
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:12:17.507 [DEBUG] [Thread-9819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:12:17.508 [DEBUG] [Thread-9819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:12:17.508 [DEBUG] [Thread-9819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:12:17.508 [DEBUG] [Thread-9819] [transport.py] [_log()] Compression: none
2025-12-25T10:12:17.508 [DEBUG] [Thread-9819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:12:17.525 [DEBUG] [Thread-9819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:12:17.526 [DEBUG] [Thread-9819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:12:17.526 [DEBUG] [Thread-9819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:12:17.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:12:17.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:12:17.569 [DEBUG] [Thread-9819] [transport.py] [_log()] userauth is OK
2025-12-25T10:12:17.569 [DEBUG] [Thread-9819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:12:17.569 [DEBUG] [Thread-9819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:12:17.569 [DEBUG] [Thread-9819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:12:17.569 [DEBUG] [Thread-9819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:12:17.590 [INFO] [Thread-9819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:12:17.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:12:18.209 [DEBUG] [Thread-9819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:12:18.210 [DEBUG] [Thread-9819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:12:18.210 [DEBUG] [Thread-9819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:12:18.250 [DEBUG] [Thread-9819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:12:18.250 [DEBUG] [Thread-9819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:12:18.254 [DEBUG] [Thread-9819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:12:18.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:12:18.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:12:18.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:12:18.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:12:18.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:12:18.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:12:18.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:12:18.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:12:18.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:12:18.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.341382 -999.00  +22.20  28.94     38   +7.30 1 2 1 1 1   888    0 19.34 222.10 ----- 28.9 28.9 16.7 34.0 29.2 -24.7 28.5 -23.2 27.2 -21.5 27.6 -23.9
2025-12-25T10:12:18.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:12:18.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:12:18.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.341382
2025-12-25T10:12:18.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:12:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:12:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:12:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:12:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:12:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:11:51', tmtdew=17.02, humidity=33.27, cloud=0.0, wind=21.19, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:11:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:12:18.280 [DEBUG] [Thread-9819] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:12:18.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-25T10:12:18.384 [DEBUG] [Thread-9822] [transport.py] [_log()] starting thread (client mode): 0xb6b4a5f0
2025-12-25T10:12:18.384 [DEBUG] [Thread-9822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:12:18.400 [DEBUG] [Thread-9822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:12:18.400 [INFO] [Thread-9822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] client lang: <none>
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] server lang: <none>
2025-12-25T10:12:18.408 [DEBUG] [Thread-9822] [transport.py] [_log()] kex follows: False
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] Compression: none
2025-12-25T10:12:18.409 [DEBUG] [Thread-9822] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:12:18.465 [DEBUG] [Thread-9822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:12:18.465 [DEBUG] [Thread-9822] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:12:18.466 [DEBUG] [Thread-9822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:12:18.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:12:18.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:12:18.521 [DEBUG] [Thread-9822] [transport.py] [_log()] userauth is OK
2025-12-25T10:12:18.521 [DEBUG] [Thread-9822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:12:18.522 [DEBUG] [Thread-9822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:12:18.522 [DEBUG] [Thread-9822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:12:18.522 [DEBUG] [Thread-9822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:12:18.540 [INFO] [Thread-9822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:12:18.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-25T10:12:18.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:12:19.409 [DEBUG] [Thread-9822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:12:19.409 [DEBUG] [Thread-9822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:12:19.457 [DEBUG] [Thread-9822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:12:19.457 [DEBUG] [Thread-9822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:12:19.467 [DEBUG] [Thread-9822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:12:19.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:12:19.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-25T10:12:19.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:12:19.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:12:19.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:12:19.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:12:19.502 [DEBUG] [Thread-9822] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:12:28.081 [DEBUG] [Thread-9824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:43.137 [DEBUG] [Thread-9825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:12:49.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:12:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:12:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 12, 23), 17.22, 32.86, 0.0, 23.93, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:12:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:12:23
2025-12-25T10:12:50.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:12:50.534 [DEBUG] [Thread-9826] [transport.py] [_log()] starting thread (client mode): 0xb95586a0
2025-12-25T10:12:50.534 [DEBUG] [Thread-9826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:12:50.554 [DEBUG] [Thread-9826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:12:50.554 [INFO] [Thread-9826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] client lang: <none>
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] server lang: <none>
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] kex follows: False
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:12:50.557 [DEBUG] [Thread-9826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:12:50.558 [DEBUG] [Thread-9826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:12:50.558 [DEBUG] [Thread-9826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:12:50.558 [DEBUG] [Thread-9826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:12:50.558 [DEBUG] [Thread-9826] [transport.py] [_log()] Compression: none
2025-12-25T10:12:50.558 [DEBUG] [Thread-9826] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:12:50.573 [DEBUG] [Thread-9826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:12:50.574 [DEBUG] [Thread-9826] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:12:50.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:12:50.574 [DEBUG] [Thread-9826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:12:50.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:12:50.575 [DEBUG] [Thread-9826] [transport.py] [_log()] userauth is OK
2025-12-25T10:12:50.575 [DEBUG] [Thread-9826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:12:50.575 [DEBUG] [Thread-9826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:12:50.575 [DEBUG] [Thread-9826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:12:50.575 [DEBUG] [Thread-9826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:12:50.594 [INFO] [Thread-9826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:12:50.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:12:51.239 [DEBUG] [Thread-9826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:12:51.239 [DEBUG] [Thread-9826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:12:51.239 [DEBUG] [Thread-9826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:12:51.280 [DEBUG] [Thread-9826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:12:51.280 [DEBUG] [Thread-9826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:12:51.282 [DEBUG] [Thread-9826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:12:51.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:12:51.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:12:51.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:12:51.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:12:51.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:12:51.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:12:51.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.341729 -999.00  +22.80  23.07     37   +7.60 1 2 1 1 1   888    0 18.57 207.85 ----- 23.1 23.1 7.0 28.0 29.2 -24.4 28.4 -24.0 27.1 -22.0 27.6 -22.3
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.341729
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:12:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:12:23', tmtdew=17.22, humidity=32.86, cloud=0.0, wind=23.93, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:12:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:12:51.300 [DEBUG] [Thread-9826] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:12:51.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-25T10:12:51.385 [DEBUG] [Thread-9829] [transport.py] [_log()] starting thread (client mode): 0xb6b491e0
2025-12-25T10:12:51.385 [DEBUG] [Thread-9829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:12:51.401 [DEBUG] [Thread-9829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:12:51.401 [INFO] [Thread-9829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] client lang: <none>
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] server lang: <none>
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] kex follows: False
2025-12-25T10:12:51.408 [DEBUG] [Thread-9829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:12:51.409 [DEBUG] [Thread-9829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:12:51.409 [DEBUG] [Thread-9829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:12:51.409 [DEBUG] [Thread-9829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:12:51.409 [DEBUG] [Thread-9829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:12:51.409 [DEBUG] [Thread-9829] [transport.py] [_log()] Compression: none
2025-12-25T10:12:51.409 [DEBUG] [Thread-9829] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:12:51.464 [DEBUG] [Thread-9829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:12:51.464 [DEBUG] [Thread-9829] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:12:51.464 [DEBUG] [Thread-9829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:12:51.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:12:51.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:12:51.521 [DEBUG] [Thread-9829] [transport.py] [_log()] userauth is OK
2025-12-25T10:12:51.521 [DEBUG] [Thread-9829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:12:51.521 [DEBUG] [Thread-9829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:12:51.521 [DEBUG] [Thread-9829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:12:51.521 [DEBUG] [Thread-9829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:12:51.536 [INFO] [Thread-9829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:12:51.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-25T10:12:51.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:12:52.422 [DEBUG] [Thread-9829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:12:52.422 [DEBUG] [Thread-9829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:12:52.470 [DEBUG] [Thread-9829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:12:52.470 [DEBUG] [Thread-9829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:12:52.479 [DEBUG] [Thread-9829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:12:52.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:12:52.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-25T10:12:52.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:12:52.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:12:52.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:12:52.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:12:52.510 [DEBUG] [Thread-9829] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:12:54.733 [DEBUG] [Thread-9831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:12:58.168 [DEBUG] [Thread-9832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:00.341 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:00.342 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:13.210 [DEBUG] [Thread-9833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:13:22.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:13:22.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-25T10:13:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 12, 55), 17.91, 31.07, 0.0, 24.31, 22.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:13:23.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:12:55
2025-12-25T10:13:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:13:23.514 [DEBUG] [Thread-9834] [transport.py] [_log()] starting thread (client mode): 0xb6babeb0
2025-12-25T10:13:23.515 [DEBUG] [Thread-9834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:13:23.536 [DEBUG] [Thread-9834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:13:23.536 [INFO] [Thread-9834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] client lang: <none>
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] server lang: <none>
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] kex follows: False
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:13:23.539 [DEBUG] [Thread-9834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:13:23.540 [DEBUG] [Thread-9834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:13:23.540 [DEBUG] [Thread-9834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:13:23.540 [DEBUG] [Thread-9834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:13:23.540 [DEBUG] [Thread-9834] [transport.py] [_log()] Compression: none
2025-12-25T10:13:23.540 [DEBUG] [Thread-9834] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:13:23.548 [DEBUG] [Thread-9834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:13:23.549 [DEBUG] [Thread-9834] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:13:23.549 [DEBUG] [Thread-9834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:13:23.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:13:23.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:13:23.551 [DEBUG] [Thread-9834] [transport.py] [_log()] userauth is OK
2025-12-25T10:13:23.552 [DEBUG] [Thread-9834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:13:23.552 [DEBUG] [Thread-9834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:13:23.552 [DEBUG] [Thread-9834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:13:23.552 [DEBUG] [Thread-9834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:13:23.576 [INFO] [Thread-9834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:13:23.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:13:24.195 [DEBUG] [Thread-9834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:13:24.195 [DEBUG] [Thread-9834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:13:24.195 [DEBUG] [Thread-9834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:13:24.236 [DEBUG] [Thread-9834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:13:24.236 [DEBUG] [Thread-9834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:13:24.240 [DEBUG] [Thread-9834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:13:24.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:13:24.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:13:24.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:13:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:13:24.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:13:24.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:13:24.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:13:24.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:13:24.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:13:24.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.342077 -999.00  +22.50  17.98     37   +7.30 1 1 1 1 1   888    0 19.43 226.47 ----- 18.0 18.0 341.9 33.6 29.1 -25.1 28.2 -25.0 27.0 -23.8 27.5 -23.5
2025-12-25T10:13:24.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:13:24.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:13:24.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.342077
2025-12-25T10:13:24.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:13:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:13:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:13:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:13:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:13:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:12:55', tmtdew=17.91, humidity=31.07, cloud=0.0, wind=24.31, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:12:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:13:24.265 [DEBUG] [Thread-9834] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:13:24.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-25T10:13:24.358 [DEBUG] [Thread-9837] [transport.py] [_log()] starting thread (client mode): 0xb6b21900
2025-12-25T10:13:24.358 [DEBUG] [Thread-9837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:13:24.372 [DEBUG] [Thread-9837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:13:24.372 [INFO] [Thread-9837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:13:24.380 [DEBUG] [Thread-9837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] client lang: <none>
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] server lang: <none>
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] kex follows: False
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:13:24.381 [DEBUG] [Thread-9837] [transport.py] [_log()] Compression: none
2025-12-25T10:13:24.382 [DEBUG] [Thread-9837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:13:24.438 [DEBUG] [Thread-9837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:13:24.438 [DEBUG] [Thread-9837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:13:24.439 [DEBUG] [Thread-9837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:13:24.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:13:24.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:13:24.499 [DEBUG] [Thread-9837] [transport.py] [_log()] userauth is OK
2025-12-25T10:13:24.499 [DEBUG] [Thread-9837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:13:24.499 [DEBUG] [Thread-9837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:13:24.499 [DEBUG] [Thread-9837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:13:24.499 [DEBUG] [Thread-9837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:13:24.518 [INFO] [Thread-9837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:13:24.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-25T10:13:24.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:13:25.383 [DEBUG] [Thread-9837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:13:25.384 [DEBUG] [Thread-9837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:13:25.431 [DEBUG] [Thread-9837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:13:25.431 [DEBUG] [Thread-9837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:13:25.440 [DEBUG] [Thread-9837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:13:25.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:13:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:13:25.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-25T10:13:25.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:13:25.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:13:25.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:13:25.472 [DEBUG] [Thread-9837] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:13:28.241 [DEBUG] [Thread-9839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:43.285 [DEBUG] [Thread-9840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:54.786 [DEBUG] [Thread-9841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:55.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:13:55.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:13:55.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-25T10:13:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 13, 27), 17.66, 31.55, 0.0, 26.82, 22.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:13:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:13:27
2025-12-25T10:13:56.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:13:56.484 [DEBUG] [Thread-9842] [transport.py] [_log()] starting thread (client mode): 0xb955b580
2025-12-25T10:13:56.484 [DEBUG] [Thread-9842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:13:56.504 [DEBUG] [Thread-9842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:13:56.504 [INFO] [Thread-9842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:13:56.507 [DEBUG] [Thread-9842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:13:56.507 [DEBUG] [Thread-9842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] client lang: <none>
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] server lang: <none>
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] kex follows: False
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] Compression: none
2025-12-25T10:13:56.508 [DEBUG] [Thread-9842] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:13:56.524 [DEBUG] [Thread-9842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:13:56.525 [DEBUG] [Thread-9842] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:13:56.525 [DEBUG] [Thread-9842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:13:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:13:56.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:13:56.527 [DEBUG] [Thread-9842] [transport.py] [_log()] userauth is OK
2025-12-25T10:13:56.527 [DEBUG] [Thread-9842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:13:56.527 [DEBUG] [Thread-9842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:13:56.528 [DEBUG] [Thread-9842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:13:56.528 [DEBUG] [Thread-9842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:13:56.563 [INFO] [Thread-9842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:13:56.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:13:57.198 [DEBUG] [Thread-9842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:13:57.198 [DEBUG] [Thread-9842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:13:57.198 [DEBUG] [Thread-9842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:13:57.240 [DEBUG] [Thread-9842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:13:57.240 [DEBUG] [Thread-9842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:13:57.243 [DEBUG] [Thread-9842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:13:57.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:13:57.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:13:57.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:13:57.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:13:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:13:57.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:13:57.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:13:57.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.342424 -999.00  +22.30  16.72     37   +7.20 1 1 1 1 1   888    0 19.76 237.11 ----- 16.7 16.7 347.2 24.0 29.0 -24.3 28.1 -24.7 26.9 -22.1 27.1 -24.9
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.342424
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:13:57.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:13:27', tmtdew=17.66, humidity=31.55, cloud=0.0, wind=26.82, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:13:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:13:57.264 [DEBUG] [Thread-9842] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:13:57.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-25T10:13:57.346 [DEBUG] [Thread-9845] [transport.py] [_log()] starting thread (client mode): 0xb6bb95d0
2025-12-25T10:13:57.346 [DEBUG] [Thread-9845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:13:57.359 [DEBUG] [Thread-9845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:13:57.360 [INFO] [Thread-9845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:13:57.368 [DEBUG] [Thread-9845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:13:57.368 [DEBUG] [Thread-9845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:13:57.368 [DEBUG] [Thread-9845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:13:57.368 [DEBUG] [Thread-9845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:57.368 [DEBUG] [Thread-9845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:13:57.368 [DEBUG] [Thread-9845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] client lang: <none>
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] server lang: <none>
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] kex follows: False
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:13:57.369 [DEBUG] [Thread-9845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:13:57.370 [DEBUG] [Thread-9845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:13:57.370 [DEBUG] [Thread-9845] [transport.py] [_log()] Compression: none
2025-12-25T10:13:57.370 [DEBUG] [Thread-9845] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:13:57.428 [DEBUG] [Thread-9845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:13:57.429 [DEBUG] [Thread-9845] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:13:57.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:13:57.431 [DEBUG] [Thread-9845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:13:57.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:13:57.488 [DEBUG] [Thread-9845] [transport.py] [_log()] userauth is OK
2025-12-25T10:13:57.488 [DEBUG] [Thread-9845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:13:57.489 [DEBUG] [Thread-9845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:13:57.489 [DEBUG] [Thread-9845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:13:57.489 [DEBUG] [Thread-9845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:13:57.508 [INFO] [Thread-9845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:13:57.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-25T10:13:57.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:13:58.317 [DEBUG] [Thread-9847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:13:58.318 [DEBUG] [Thread-9845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:13:58.318 [DEBUG] [Thread-9845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:13:58.366 [DEBUG] [Thread-9845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:13:58.366 [DEBUG] [Thread-9845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:13:58.375 [DEBUG] [Thread-9845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:13:58.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:13:58.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-25T10:13:58.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-25T10:13:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:13:58.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:13:58.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:13:58.414 [DEBUG] [Thread-9845] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:14:00.482 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:14:00.483 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:14:13.374 [DEBUG] [Thread-9848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:14:28.408 [DEBUG] [Thread-9849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:14:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:14:28.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:14:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:14:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 13, 27), 17.66, 31.55, 0.0, 26.82, 22.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:14:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:13:27
2025-12-25T10:14:29.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:14:29.415 [DEBUG] [Thread-9850] [transport.py] [_log()] starting thread (client mode): 0xb6be0d00
2025-12-25T10:14:29.415 [DEBUG] [Thread-9850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:14:29.435 [DEBUG] [Thread-9850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:14:29.435 [INFO] [Thread-9850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] client lang: <none>
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] server lang: <none>
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] kex follows: False
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] Compression: none
2025-12-25T10:14:29.438 [DEBUG] [Thread-9850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:14:29.457 [DEBUG] [Thread-9850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:14:29.458 [DEBUG] [Thread-9850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:14:29.458 [DEBUG] [Thread-9850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:14:29.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:14:29.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:14:29.461 [DEBUG] [Thread-9850] [transport.py] [_log()] userauth is OK
2025-12-25T10:14:29.461 [DEBUG] [Thread-9850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:14:29.461 [DEBUG] [Thread-9850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:14:29.461 [DEBUG] [Thread-9850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:14:29.461 [DEBUG] [Thread-9850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:14:29.482 [INFO] [Thread-9850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:14:29.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:14:30.131 [DEBUG] [Thread-9850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:14:30.132 [DEBUG] [Thread-9850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:14:30.132 [DEBUG] [Thread-9850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:14:30.173 [DEBUG] [Thread-9850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:14:30.173 [DEBUG] [Thread-9850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:14:30.176 [DEBUG] [Thread-9850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:14:30.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:14:30.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:14:30.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:14:30.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:14:30.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:14:30.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:14:30.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:14:30.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:14:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:14:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.342771 -999.00  +22.50  18.60     38   +7.50 1 2 1 1 1   888    0 19.92 244.87 ----- 18.6 18.6 8.1 20.4 29.1 -23.6 28.2 -23.0 27.1 -22.0 27.3 -22.0
2025-12-25T10:14:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:14:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:14:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.342771
2025-12-25T10:14:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:14:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:14:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:14:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:14:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:14:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:13:27', tmtdew=17.66, humidity=31.55, cloud=0.0, wind=26.82, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:13:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:14:30.202 [DEBUG] [Thread-9850] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:14:30.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-25T10:14:30.303 [DEBUG] [Thread-9853] [transport.py] [_log()] starting thread (client mode): 0xb6be19c0
2025-12-25T10:14:30.303 [DEBUG] [Thread-9853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:14:30.318 [DEBUG] [Thread-9853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:14:30.318 [INFO] [Thread-9853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:14:30.326 [DEBUG] [Thread-9853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:14:30.326 [DEBUG] [Thread-9853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:14:30.326 [DEBUG] [Thread-9853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:14:30.326 [DEBUG] [Thread-9853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:14:30.326 [DEBUG] [Thread-9853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] client lang: <none>
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] server lang: <none>
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] kex follows: False
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:14:30.327 [DEBUG] [Thread-9853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:14:30.328 [DEBUG] [Thread-9853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:14:30.328 [DEBUG] [Thread-9853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:14:30.328 [DEBUG] [Thread-9853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:14:30.328 [DEBUG] [Thread-9853] [transport.py] [_log()] Compression: none
2025-12-25T10:14:30.328 [DEBUG] [Thread-9853] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:14:30.385 [DEBUG] [Thread-9853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:14:30.386 [DEBUG] [Thread-9853] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:14:30.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:14:30.388 [DEBUG] [Thread-9853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:14:30.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:14:30.445 [DEBUG] [Thread-9853] [transport.py] [_log()] userauth is OK
2025-12-25T10:14:30.445 [DEBUG] [Thread-9853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:14:30.445 [DEBUG] [Thread-9853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:14:30.446 [DEBUG] [Thread-9853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:14:30.446 [DEBUG] [Thread-9853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:14:30.465 [INFO] [Thread-9853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:14:30.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-25T10:14:30.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:14:31.332 [DEBUG] [Thread-9853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:14:31.333 [DEBUG] [Thread-9853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:14:31.381 [DEBUG] [Thread-9853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:14:31.381 [DEBUG] [Thread-9853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:14:31.390 [DEBUG] [Thread-9853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:14:31.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:14:31.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-25T10:14:31.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:14:31.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:14:31.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:14:31.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:14:31.427 [DEBUG] [Thread-9853] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:14:43.443 [DEBUG] [Thread-9855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:14:54.841 [DEBUG] [Thread-9856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:14:58.493 [DEBUG] [Thread-9857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:00.621 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:00.623 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:01.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:15:01.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:15:01.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-25T10:15:02.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 14, 32), 17.16, 32.67, 0.0, 19.13, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:15:02.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:14:32
2025-12-25T10:15:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:15:02.427 [DEBUG] [Thread-9858] [transport.py] [_log()] starting thread (client mode): 0xb6bb9750
2025-12-25T10:15:02.427 [DEBUG] [Thread-9858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:15:02.448 [DEBUG] [Thread-9858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:15:02.448 [INFO] [Thread-9858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] client lang: <none>
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] server lang: <none>
2025-12-25T10:15:02.450 [DEBUG] [Thread-9858] [transport.py] [_log()] kex follows: False
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] Compression: none
2025-12-25T10:15:02.451 [DEBUG] [Thread-9858] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:15:02.468 [DEBUG] [Thread-9858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:15:02.469 [DEBUG] [Thread-9858] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:15:02.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:15:02.470 [DEBUG] [Thread-9858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:15:02.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:15:02.472 [DEBUG] [Thread-9858] [transport.py] [_log()] userauth is OK
2025-12-25T10:15:02.472 [DEBUG] [Thread-9858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:15:02.472 [DEBUG] [Thread-9858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:15:02.473 [DEBUG] [Thread-9858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:15:02.473 [DEBUG] [Thread-9858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:15:02.490 [INFO] [Thread-9858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:15:02.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:15:03.252 [DEBUG] [Thread-9858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:15:03.253 [DEBUG] [Thread-9858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:15:03.253 [DEBUG] [Thread-9858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:15:03.294 [DEBUG] [Thread-9858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:15:03.294 [DEBUG] [Thread-9858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:15:03.298 [DEBUG] [Thread-9858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:15:03.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:15:03.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:15:03.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:15:03.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:15:03.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:15:03.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:15:03.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:15:03.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:15:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:15:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.343118 -999.00  +22.10  15.93     35   +6.10 1 1 1 1 1   888    0 21.06 276.00 ----- 15.9 15.9 358.1 25.4 28.8 -25.5 28.1 -25.7 26.9 -22.8 27.3 -25.8
2025-12-25T10:15:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:15:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:15:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.343118
2025-12-25T10:15:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:15:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:15:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:15:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:15:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:15:03.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:14:32', tmtdew=17.16, humidity=32.67, cloud=0.0, wind=19.13, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:14:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:15:03.323 [DEBUG] [Thread-9858] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:15:03.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-25T10:15:03.416 [DEBUG] [Thread-9861] [transport.py] [_log()] starting thread (client mode): 0xb6b4be50
2025-12-25T10:15:03.416 [DEBUG] [Thread-9861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:15:03.430 [DEBUG] [Thread-9861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:15:03.430 [INFO] [Thread-9861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] client lang: <none>
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] server lang: <none>
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] kex follows: False
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:15:03.437 [DEBUG] [Thread-9861] [transport.py] [_log()] Compression: none
2025-12-25T10:15:03.438 [DEBUG] [Thread-9861] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:15:03.496 [DEBUG] [Thread-9861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:15:03.497 [DEBUG] [Thread-9861] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:15:03.506 [DEBUG] [Thread-9861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:15:03.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:15:03.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:15:03.553 [DEBUG] [Thread-9861] [transport.py] [_log()] userauth is OK
2025-12-25T10:15:03.553 [DEBUG] [Thread-9861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:15:03.553 [DEBUG] [Thread-9861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:15:03.554 [DEBUG] [Thread-9861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:15:03.554 [DEBUG] [Thread-9861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:15:03.572 [INFO] [Thread-9861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:15:03.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-25T10:15:03.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:15:04.420 [DEBUG] [Thread-9861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:15:04.420 [DEBUG] [Thread-9861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:15:04.468 [DEBUG] [Thread-9861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:15:04.468 [DEBUG] [Thread-9861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:15:04.477 [DEBUG] [Thread-9861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:15:04.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:15:04.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-25T10:15:04.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-25T10:15:04.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:15:04.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:15:04.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:15:04.520 [DEBUG] [Thread-9861] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:15:13.528 [DEBUG] [Thread-9863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:28.575 [DEBUG] [Thread-9864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:34.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:15:34.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:15:34.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:15:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 15, 4), 17.38, 32.2, 0.0, 19.83, 22.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:15:35.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:15:04
2025-12-25T10:15:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:15:35.549 [DEBUG] [Thread-9865] [transport.py] [_log()] starting thread (client mode): 0xb6be1240
2025-12-25T10:15:35.549 [DEBUG] [Thread-9865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:15:35.569 [DEBUG] [Thread-9865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:15:35.569 [INFO] [Thread-9865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:15:35.572 [DEBUG] [Thread-9865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] client lang: <none>
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] server lang: <none>
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] kex follows: False
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] Compression: none
2025-12-25T10:15:35.573 [DEBUG] [Thread-9865] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:15:35.589 [DEBUG] [Thread-9865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:15:35.590 [DEBUG] [Thread-9865] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:15:35.590 [DEBUG] [Thread-9865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:15:35.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:15:35.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:15:35.592 [DEBUG] [Thread-9865] [transport.py] [_log()] userauth is OK
2025-12-25T10:15:35.593 [DEBUG] [Thread-9865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:15:35.593 [DEBUG] [Thread-9865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:15:35.593 [DEBUG] [Thread-9865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:15:35.593 [DEBUG] [Thread-9865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:15:35.614 [INFO] [Thread-9865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:15:35.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:15:36.259 [DEBUG] [Thread-9865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:15:36.260 [DEBUG] [Thread-9865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:15:36.269 [DEBUG] [Thread-9865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:15:36.301 [DEBUG] [Thread-9865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:15:36.301 [DEBUG] [Thread-9865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:15:36.305 [DEBUG] [Thread-9865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:15:36.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:15:36.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:15:36.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:15:36.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:15:36.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:15:36.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:15:36.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:15:36.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:15:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:15:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.343813 -999.00  +21.60  11.01     39   +7.20 1 2 1 1 1   888    0 20.34 251.72 ----- 11.0 11.0 340.1 15.3 29.0 -23.6 28.1 -23.4 26.9 -21.1 27.2 -22.4
2025-12-25T10:15:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:15:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:15:36.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.343813
2025-12-25T10:15:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:15:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:15:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:15:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:15:36.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:15:36.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:15:04', tmtdew=17.38, humidity=32.2, cloud=0.0, wind=19.83, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:15:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:15:36.335 [DEBUG] [Thread-9865] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:15:36.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:15:36.430 [DEBUG] [Thread-9868] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T10:15:36.431 [DEBUG] [Thread-9868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:15:36.445 [DEBUG] [Thread-9868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:15:36.445 [INFO] [Thread-9868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] client lang: <none>
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] server lang: <none>
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] kex follows: False
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] Compression: none
2025-12-25T10:15:36.453 [DEBUG] [Thread-9868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:15:36.510 [DEBUG] [Thread-9868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:15:36.510 [DEBUG] [Thread-9868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:15:36.511 [DEBUG] [Thread-9868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:15:36.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:15:36.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:15:36.566 [DEBUG] [Thread-9868] [transport.py] [_log()] userauth is OK
2025-12-25T10:15:36.566 [DEBUG] [Thread-9868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:15:36.566 [DEBUG] [Thread-9868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:15:36.566 [DEBUG] [Thread-9868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:15:36.566 [DEBUG] [Thread-9868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:15:36.585 [INFO] [Thread-9868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:15:36.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-25T10:15:36.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:15:37.471 [DEBUG] [Thread-9868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:15:37.471 [DEBUG] [Thread-9868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:15:37.519 [DEBUG] [Thread-9868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:15:37.519 [DEBUG] [Thread-9868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:15:37.528 [DEBUG] [Thread-9868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:15:37.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:15:37.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:15:37.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-25T10:15:37.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:15:37.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:15:37.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:15:37.559 [DEBUG] [Thread-9868] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:15:43.610 [DEBUG] [Thread-9870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:54.894 [DEBUG] [Thread-9871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:15:58.663 [DEBUG] [Thread-9872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:00.763 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:00.764 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:07.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:16:07.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:16:07.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-25T10:16:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 15, 36), 17.01, 33.26, 0.0, 14.35, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:16:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:15:36
2025-12-25T10:16:08.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:16:08.569 [DEBUG] [Thread-9873] [transport.py] [_log()] starting thread (client mode): 0xb6bbbac0
2025-12-25T10:16:08.569 [DEBUG] [Thread-9873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:16:08.590 [DEBUG] [Thread-9873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:16:08.590 [INFO] [Thread-9873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:16:08.593 [DEBUG] [Thread-9873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:16:08.593 [DEBUG] [Thread-9873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:16:08.593 [DEBUG] [Thread-9873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:16:08.593 [DEBUG] [Thread-9873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:08.593 [DEBUG] [Thread-9873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] client lang: <none>
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] server lang: <none>
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] kex follows: False
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] Compression: none
2025-12-25T10:16:08.594 [DEBUG] [Thread-9873] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:16:08.612 [DEBUG] [Thread-9873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:16:08.613 [DEBUG] [Thread-9873] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:16:08.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:16:08.614 [DEBUG] [Thread-9873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:16:08.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:16:08.616 [DEBUG] [Thread-9873] [transport.py] [_log()] userauth is OK
2025-12-25T10:16:08.616 [DEBUG] [Thread-9873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:16:08.616 [DEBUG] [Thread-9873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:16:08.616 [DEBUG] [Thread-9873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:16:08.616 [DEBUG] [Thread-9873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:16:08.641 [INFO] [Thread-9873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:16:08.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:16:09.289 [DEBUG] [Thread-9873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:16:09.289 [DEBUG] [Thread-9873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:16:09.289 [DEBUG] [Thread-9873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:16:09.330 [DEBUG] [Thread-9873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:16:09.330 [DEBUG] [Thread-9873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:16:09.332 [DEBUG] [Thread-9873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:16:09.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:16:09.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:16:09.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:16:09.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:16:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:16:09.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:16:09.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.344160 -999.00  +21.80  23.44     39   +7.50 1 2 1 1 1   888    0 20.54 255.51 ----- 23.4 23.4 317.2 34.8 28.9 -23.9 28.1 -23.9 26.9 -21.8 27.3 -25.5
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.344160
2025-12-25T10:16:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:16:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:16:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:16:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:16:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:16:09.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:15:36', tmtdew=17.01, humidity=33.26, cloud=0.0, wind=14.35, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:15:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:16:09.350 [DEBUG] [Thread-9873] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:16:09.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-25T10:16:09.435 [DEBUG] [Thread-9876] [transport.py] [_log()] starting thread (client mode): 0xb6b482b0
2025-12-25T10:16:09.435 [DEBUG] [Thread-9876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:16:09.450 [DEBUG] [Thread-9876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:16:09.450 [INFO] [Thread-9876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] client lang: <none>
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] server lang: <none>
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] kex follows: False
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:16:09.458 [DEBUG] [Thread-9876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:16:09.459 [DEBUG] [Thread-9876] [transport.py] [_log()] Compression: none
2025-12-25T10:16:09.459 [DEBUG] [Thread-9876] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:16:09.513 [DEBUG] [Thread-9876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:16:09.513 [DEBUG] [Thread-9876] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:16:09.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:16:09.513 [DEBUG] [Thread-9876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:16:09.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:16:09.575 [DEBUG] [Thread-9876] [transport.py] [_log()] userauth is OK
2025-12-25T10:16:09.575 [DEBUG] [Thread-9876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:16:09.575 [DEBUG] [Thread-9876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:16:09.575 [DEBUG] [Thread-9876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:16:09.575 [DEBUG] [Thread-9876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:16:09.594 [INFO] [Thread-9876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:16:09.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-25T10:16:09.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:16:10.440 [DEBUG] [Thread-9876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:16:10.440 [DEBUG] [Thread-9876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:16:10.489 [DEBUG] [Thread-9876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:16:10.489 [DEBUG] [Thread-9876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:16:10.497 [DEBUG] [Thread-9876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:16:10.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:16: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-25T10:16:10.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-25T10:16:10.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:16:10.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:16:10.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:16:10.528 [DEBUG] [Thread-9876] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:16:13.697 [DEBUG] [Thread-9878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:28.749 [DEBUG] [Thread-9879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:40.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:16:40.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:16:40.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-25T10:16:41.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 16, 8), 17.5, 32.27, 0.0, 16.13, 22.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:16:41.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:16:08
2025-12-25T10:16:41.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:16:41.623 [DEBUG] [Thread-9880] [transport.py] [_log()] starting thread (client mode): 0xb6be1240
2025-12-25T10:16:41.623 [DEBUG] [Thread-9880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:16:41.645 [DEBUG] [Thread-9880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:16:41.645 [INFO] [Thread-9880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:16:41.648 [DEBUG] [Thread-9880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:16:41.648 [DEBUG] [Thread-9880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] client lang: <none>
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] server lang: <none>
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] kex follows: False
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] Compression: none
2025-12-25T10:16:41.649 [DEBUG] [Thread-9880] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:16:41.665 [DEBUG] [Thread-9880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:16:41.665 [DEBUG] [Thread-9880] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:16:41.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:16:41.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:16:41.666 [DEBUG] [Thread-9880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:16:41.666 [DEBUG] [Thread-9880] [transport.py] [_log()] userauth is OK
2025-12-25T10:16:41.666 [DEBUG] [Thread-9880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:16:41.666 [DEBUG] [Thread-9880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:16:41.666 [DEBUG] [Thread-9880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:16:41.666 [DEBUG] [Thread-9880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:16:41.675 [INFO] [Thread-9880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:16:41.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:16:42.326 [DEBUG] [Thread-9880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:16:42.326 [DEBUG] [Thread-9880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:16:42.326 [DEBUG] [Thread-9880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:16:42.368 [DEBUG] [Thread-9880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:16:42.368 [DEBUG] [Thread-9880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:16:42.370 [DEBUG] [Thread-9880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:16:42.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:16:42.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:16:42.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:16:42.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:16:42.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:16:42.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:16:42.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.344507 -999.00  +22.10  18.37     40   +7.80 1 1 1 1 1   888    0 20.24 248.11 ----- 18.4 18.4 355.6 36.1 28.8 -25.5 28.1 -23.4 26.8 -23.4 27.3 -21.9
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.344507
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:16:42.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:16:08', tmtdew=17.5, humidity=32.27, cloud=0.0, wind=16.13, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:16:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:16:42.388 [DEBUG] [Thread-9880] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:16:42.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:16:42.472 [DEBUG] [Thread-9883] [transport.py] [_log()] starting thread (client mode): 0xb6b21780
2025-12-25T10:16:42.472 [DEBUG] [Thread-9883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:16:42.488 [DEBUG] [Thread-9883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:16:42.488 [INFO] [Thread-9883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:16:42.495 [DEBUG] [Thread-9883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:16:42.495 [DEBUG] [Thread-9883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] client lang: <none>
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] server lang: <none>
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] kex follows: False
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] Compression: none
2025-12-25T10:16:42.496 [DEBUG] [Thread-9883] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:16:42.553 [DEBUG] [Thread-9883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:16:42.553 [DEBUG] [Thread-9883] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:16:42.554 [DEBUG] [Thread-9883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:16:42.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:16:42.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:16:42.611 [DEBUG] [Thread-9883] [transport.py] [_log()] userauth is OK
2025-12-25T10:16:42.611 [DEBUG] [Thread-9883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:16:42.611 [DEBUG] [Thread-9883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:16:42.611 [DEBUG] [Thread-9883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:16:42.611 [DEBUG] [Thread-9883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:16:42.625 [INFO] [Thread-9883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:16:42.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-25T10:16:42.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:16:43.476 [DEBUG] [Thread-9883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:16:43.476 [DEBUG] [Thread-9883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:16:43.524 [DEBUG] [Thread-9883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:16:43.524 [DEBUG] [Thread-9883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:16:43.532 [DEBUG] [Thread-9883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:16:43.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:16:43.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-25T10:16:43.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-25T10:16:43.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:16:43.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:16:43.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:16:43.564 [DEBUG] [Thread-9883] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:16:43.788 [DEBUG] [Thread-9885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:54.950 [DEBUG] [Thread-9886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:16:58.829 [DEBUG] [Thread-9887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:00.904 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:00.905 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:13.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:17:13.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:17:13.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:17:13.869 [DEBUG] [Thread-9888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 16, 40), 17.72, 31.74, 0.0, 25.32, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:17:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:16:40
2025-12-25T10:17:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:17:14.616 [DEBUG] [Thread-9889] [transport.py] [_log()] starting thread (client mode): 0xb6b600d0
2025-12-25T10:17:14.616 [DEBUG] [Thread-9889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:17:14.636 [DEBUG] [Thread-9889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:17:14.636 [INFO] [Thread-9889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:17:14.639 [DEBUG] [Thread-9889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:17:14.639 [DEBUG] [Thread-9889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:17:14.639 [DEBUG] [Thread-9889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:17:14.639 [DEBUG] [Thread-9889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:14.639 [DEBUG] [Thread-9889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:14.639 [DEBUG] [Thread-9889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] client lang: <none>
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] server lang: <none>
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] kex follows: False
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] Compression: none
2025-12-25T10:17:14.640 [DEBUG] [Thread-9889] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:17:14.647 [DEBUG] [Thread-9889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:17:14.647 [DEBUG] [Thread-9889] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:17:14.648 [DEBUG] [Thread-9889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:17:14.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:17:14.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:17:14.648 [DEBUG] [Thread-9889] [transport.py] [_log()] userauth is OK
2025-12-25T10:17:14.648 [DEBUG] [Thread-9889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:17:14.649 [DEBUG] [Thread-9889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:17:14.649 [DEBUG] [Thread-9889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:17:14.649 [DEBUG] [Thread-9889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:17:14.661 [INFO] [Thread-9889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:17:14.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:17:15.309 [DEBUG] [Thread-9889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:17:15.309 [DEBUG] [Thread-9889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:17:15.310 [DEBUG] [Thread-9889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:17:15.350 [DEBUG] [Thread-9889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:17:15.350 [DEBUG] [Thread-9889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:17:15.353 [DEBUG] [Thread-9889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:17:15.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:17:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:17:15.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:17:15.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:17:15.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:17:15.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:17:15.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:17:15.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.344854 -999.00  +22.00  16.01     40   +7.90 1 1 1 1 1   888    0 20.31 246.07 ----- 16.0 16.0 359.5 24.1 28.8 -23.8 27.9 -25.8 26.9 -21.4 26.8 -24.8
2025-12-25T10:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.344854
2025-12-25T10:17:15.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:17:15.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:17:15.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:17:15.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:17:15.378 [DEBUG] [Thread-9889] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:17:15.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:17:15.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:16:40', tmtdew=17.72, humidity=31.74, cloud=0.0, wind=25.32, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:16:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:17:15.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-25T10:17:15.474 [DEBUG] [Thread-9892] [transport.py] [_log()] starting thread (client mode): 0xb6b22290
2025-12-25T10:17:15.474 [DEBUG] [Thread-9892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:17:15.489 [DEBUG] [Thread-9892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:17:15.489 [INFO] [Thread-9892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:17:15.497 [DEBUG] [Thread-9892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:17:15.497 [DEBUG] [Thread-9892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:17:15.497 [DEBUG] [Thread-9892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:17:15.497 [DEBUG] [Thread-9892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:15.497 [DEBUG] [Thread-9892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:15.497 [DEBUG] [Thread-9892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] client lang: <none>
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] server lang: <none>
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] kex follows: False
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:17:15.498 [DEBUG] [Thread-9892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:17:15.499 [DEBUG] [Thread-9892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:17:15.499 [DEBUG] [Thread-9892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:17:15.499 [DEBUG] [Thread-9892] [transport.py] [_log()] Compression: none
2025-12-25T10:17:15.499 [DEBUG] [Thread-9892] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:17:15.555 [DEBUG] [Thread-9892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:17:15.556 [DEBUG] [Thread-9892] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:17:15.557 [DEBUG] [Thread-9892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:17:15.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:17:15.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:17:15.611 [DEBUG] [Thread-9892] [transport.py] [_log()] userauth is OK
2025-12-25T10:17:15.612 [DEBUG] [Thread-9892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:17:15.612 [DEBUG] [Thread-9892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:17:15.612 [DEBUG] [Thread-9892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:17:15.612 [DEBUG] [Thread-9892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:17:15.635 [INFO] [Thread-9892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:17:15.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:17:15.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:17:16.483 [DEBUG] [Thread-9892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:17:16.484 [DEBUG] [Thread-9892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:17:16.531 [DEBUG] [Thread-9892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:17:16.532 [DEBUG] [Thread-9892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:17:16.540 [DEBUG] [Thread-9892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:17:16.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:17:16.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-25T10:17:16.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-25T10:17:16.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:17:16.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:17:16.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:17:16.575 [DEBUG] [Thread-9892] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:17:28.901 [DEBUG] [Thread-9894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:43.967 [DEBUG] [Thread-9895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:46.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:17:46.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:17:46.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-25T10:17:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 17, 12), 17.5, 32.15, 0.0, 27.91, 22.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:17:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:17:12
2025-12-25T10:17:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:17:47.597 [DEBUG] [Thread-9896] [transport.py] [_log()] starting thread (client mode): 0xb6b23850
2025-12-25T10:17:47.597 [DEBUG] [Thread-9896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:17:47.618 [DEBUG] [Thread-9896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:17:47.618 [INFO] [Thread-9896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] client lang: <none>
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] server lang: <none>
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] kex follows: False
2025-12-25T10:17:47.622 [DEBUG] [Thread-9896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:17:47.623 [DEBUG] [Thread-9896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:17:47.623 [DEBUG] [Thread-9896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:17:47.623 [DEBUG] [Thread-9896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:17:47.623 [DEBUG] [Thread-9896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:17:47.623 [DEBUG] [Thread-9896] [transport.py] [_log()] Compression: none
2025-12-25T10:17:47.623 [DEBUG] [Thread-9896] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:17:47.638 [DEBUG] [Thread-9896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:17:47.638 [DEBUG] [Thread-9896] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:17:47.638 [DEBUG] [Thread-9896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:17:47.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:17:47.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:17:47.639 [DEBUG] [Thread-9896] [transport.py] [_log()] userauth is OK
2025-12-25T10:17:47.639 [DEBUG] [Thread-9896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:17:47.639 [DEBUG] [Thread-9896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:17:47.639 [DEBUG] [Thread-9896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:17:47.639 [DEBUG] [Thread-9896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:17:47.654 [INFO] [Thread-9896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:17:47.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:17:48.287 [DEBUG] [Thread-9896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:17:48.287 [DEBUG] [Thread-9896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:17:48.287 [DEBUG] [Thread-9896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:17:48.328 [DEBUG] [Thread-9896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:17:48.328 [DEBUG] [Thread-9896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:17:48.330 [DEBUG] [Thread-9896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:17:48.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:17:48.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:17:48.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:17:48.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:17:48.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:17:48.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:17:48.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:17:48.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:17:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:17:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.345202 -999.00  +22.20  25.23     36   +6.50 1 1 1 1 1   888    0 21.21 267.48 ----- 25.2 25.2 332.9 35.1 28.5 -24.1 27.9 -24.1 26.7 -22.1 27.1 -22.4
2025-12-25T10:17:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:17:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:17:48.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.345202
2025-12-25T10:17:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:17:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:17:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:17:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:17:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:17:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:17:12', tmtdew=17.5, humidity=32.15, cloud=0.0, wind=27.91, temperature=22.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:17:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:17:48.353 [DEBUG] [Thread-9896] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:17:48.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:17:48.472 [DEBUG] [Thread-9899] [transport.py] [_log()] starting thread (client mode): 0xb6b63550
2025-12-25T10:17:48.472 [DEBUG] [Thread-9899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:17:48.487 [DEBUG] [Thread-9899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:17:48.487 [INFO] [Thread-9899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] client lang: <none>
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] server lang: <none>
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] kex follows: False
2025-12-25T10:17:48.494 [DEBUG] [Thread-9899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:17:48.495 [DEBUG] [Thread-9899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:17:48.495 [DEBUG] [Thread-9899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:17:48.495 [DEBUG] [Thread-9899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:17:48.495 [DEBUG] [Thread-9899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:17:48.495 [DEBUG] [Thread-9899] [transport.py] [_log()] Compression: none
2025-12-25T10:17:48.495 [DEBUG] [Thread-9899] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:17:48.551 [DEBUG] [Thread-9899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:17:48.552 [DEBUG] [Thread-9899] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:17:48.552 [DEBUG] [Thread-9899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:17:48.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:17:48.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:17:48.608 [DEBUG] [Thread-9899] [transport.py] [_log()] userauth is OK
2025-12-25T10:17:48.608 [DEBUG] [Thread-9899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:17:48.608 [DEBUG] [Thread-9899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:17:48.608 [DEBUG] [Thread-9899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:17:48.608 [DEBUG] [Thread-9899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:17:48.626 [INFO] [Thread-9899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:17:48.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-25T10:17:48.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:17:49.468 [DEBUG] [Thread-9899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:17:49.469 [DEBUG] [Thread-9899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:17:49.517 [DEBUG] [Thread-9899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:17:49.517 [DEBUG] [Thread-9899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:17:49.526 [DEBUG] [Thread-9899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:17:49.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:17:49.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:17:49.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-25T10:17:49.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:17:49.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:17:49.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:17:49.560 [DEBUG] [Thread-9899] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:17:55.002 [DEBUG] [Thread-9901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:17:59.000 [DEBUG] [Thread-9902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:01.045 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:01.046 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:14.038 [DEBUG] [Thread-9903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:18:19.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:18:19.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-25T10:18:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 18, 16), 18.25, 30.51, 0.0, 24.19, 22.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:18:20.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:18:16
2025-12-25T10:18:20.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:18:20.567 [DEBUG] [Thread-9904] [transport.py] [_log()] starting thread (client mode): 0xb6b61420
2025-12-25T10:18:20.567 [DEBUG] [Thread-9904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:18:20.588 [DEBUG] [Thread-9904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:18:20.588 [INFO] [Thread-9904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] client lang: <none>
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] server lang: <none>
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] kex follows: False
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] Compression: none
2025-12-25T10:18:20.591 [DEBUG] [Thread-9904] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:18:20.611 [DEBUG] [Thread-9904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:18:20.611 [DEBUG] [Thread-9904] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:18:20.612 [DEBUG] [Thread-9904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:18:20.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:18:20.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:18:20.614 [DEBUG] [Thread-9904] [transport.py] [_log()] userauth is OK
2025-12-25T10:18:20.614 [DEBUG] [Thread-9904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:18:20.614 [DEBUG] [Thread-9904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:18:20.614 [DEBUG] [Thread-9904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:18:20.614 [DEBUG] [Thread-9904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:18:20.637 [INFO] [Thread-9904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:18:20.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:18:21.266 [DEBUG] [Thread-9904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:18:21.266 [DEBUG] [Thread-9904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:18:21.266 [DEBUG] [Thread-9904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:18:21.306 [DEBUG] [Thread-9904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:18:21.306 [DEBUG] [Thread-9904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:18:21.309 [DEBUG] [Thread-9904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:18:21.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:18:21.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:18:21.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:18:21.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:18:21.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:18:21.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:18:21.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:18:21.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.345549 -999.00  +22.10  23.31     37   +6.90 1 1 1 1 1   888    0 20.98 263.88 ----- 23.3 23.3 7.6 30.8 28.5 -23.7 27.7 -25.8 26.7 -20.8 26.9 -25.2
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.345549
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:18:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:18:16', tmtdew=18.25, humidity=30.51, cloud=0.0, wind=24.19, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:17:35.434', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:18:21.329 [DEBUG] [Thread-9904] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:18:21.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-25T10:18:21.415 [DEBUG] [Thread-9907] [transport.py] [_log()] starting thread (client mode): 0xb6be1240
2025-12-25T10:18:21.415 [DEBUG] [Thread-9907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:18:21.431 [DEBUG] [Thread-9907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:18:21.431 [INFO] [Thread-9907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] client lang: <none>
2025-12-25T10:18:21.444 [DEBUG] [Thread-9907] [transport.py] [_log()] server lang: <none>
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] kex follows: False
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] Compression: none
2025-12-25T10:18:21.445 [DEBUG] [Thread-9907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:18:21.497 [DEBUG] [Thread-9907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:18:21.498 [DEBUG] [Thread-9907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:18:21.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:18:21.499 [DEBUG] [Thread-9907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:18:21.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:18:21.553 [DEBUG] [Thread-9907] [transport.py] [_log()] userauth is OK
2025-12-25T10:18:21.553 [DEBUG] [Thread-9907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:18:21.553 [DEBUG] [Thread-9907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:18:21.553 [DEBUG] [Thread-9907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:18:21.553 [DEBUG] [Thread-9907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:18:21.572 [INFO] [Thread-9907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:18: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-25T10:18:21.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:18:22.394 [DEBUG] [Thread-9907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:18:22.394 [DEBUG] [Thread-9907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:18:22.442 [DEBUG] [Thread-9907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:18:22.442 [DEBUG] [Thread-9907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:18:22.451 [DEBUG] [Thread-9907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:18:22.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:18:22.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-25T10:18:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:18:22.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:18:22.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:18:22.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:18:22.488 [DEBUG] [Thread-9907] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:18:29.077 [DEBUG] [Thread-9909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:44.131 [DEBUG] [Thread-9910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:52.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:18:52.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:18:52.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-25T10:18:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 18, 48), 17.85, 31.32, 0.0, 21.07, 23.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:18:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:18:48
2025-12-25T10:18:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:18:53.484 [DEBUG] [Thread-9911] [transport.py] [_log()] starting thread (client mode): 0xb6b627d0
2025-12-25T10:18:53.484 [DEBUG] [Thread-9911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:18:53.506 [DEBUG] [Thread-9911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:18:53.506 [INFO] [Thread-9911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] client lang: <none>
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] server lang: <none>
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] kex follows: False
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:18:53.509 [DEBUG] [Thread-9911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:18:53.510 [DEBUG] [Thread-9911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:18:53.510 [DEBUG] [Thread-9911] [transport.py] [_log()] Compression: none
2025-12-25T10:18:53.510 [DEBUG] [Thread-9911] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:18:53.527 [DEBUG] [Thread-9911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:18:53.527 [DEBUG] [Thread-9911] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:18:53.528 [DEBUG] [Thread-9911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:18:53.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:18:53.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:18:53.530 [DEBUG] [Thread-9911] [transport.py] [_log()] userauth is OK
2025-12-25T10:18:53.530 [DEBUG] [Thread-9911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:18:53.530 [DEBUG] [Thread-9911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:18:53.530 [DEBUG] [Thread-9911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:18:53.530 [DEBUG] [Thread-9911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:18:53.554 [INFO] [Thread-9911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:18:53.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:18:54.201 [DEBUG] [Thread-9911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:18:54.201 [DEBUG] [Thread-9911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:18:54.202 [DEBUG] [Thread-9911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:18:54.242 [DEBUG] [Thread-9911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:18:54.242 [DEBUG] [Thread-9911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:18:54.245 [DEBUG] [Thread-9911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:18:54.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:18:54.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:18:54.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:18:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:18:54.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:18:54.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:18:54.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:18:54.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:18:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:18:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.345896 -999.00  +22.50  29.19     38   +7.50 1 1 1 1 1   888    0 21.80 284.62 ----- 29.2 29.2 37.0 35.6 28.6 -24.5 27.8 -24.2 26.6 -23.6 27.0 -21.7
2025-12-25T10:18:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:18:54.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:18:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.345896
2025-12-25T10:18:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:18:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:18:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:18:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:18:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:18:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:18:48', tmtdew=17.85, humidity=31.32, cloud=0.0, wind=21.07, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:18:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:18:54.272 [DEBUG] [Thread-9911] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:18:54.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:18:54.366 [DEBUG] [Thread-9914] [transport.py] [_log()] starting thread (client mode): 0xb6b28040
2025-12-25T10:18:54.366 [DEBUG] [Thread-9914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:18:54.384 [DEBUG] [Thread-9914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:18:54.385 [INFO] [Thread-9914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:18:54.392 [DEBUG] [Thread-9914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:18:54.392 [DEBUG] [Thread-9914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] client lang: <none>
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] server lang: <none>
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] kex follows: False
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] Compression: none
2025-12-25T10:18:54.393 [DEBUG] [Thread-9914] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:18:54.449 [DEBUG] [Thread-9914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:18:54.450 [DEBUG] [Thread-9914] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:18:54.450 [DEBUG] [Thread-9914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:18:54.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:18:54.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:18:54.505 [DEBUG] [Thread-9914] [transport.py] [_log()] userauth is OK
2025-12-25T10:18:54.506 [DEBUG] [Thread-9914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:18:54.506 [DEBUG] [Thread-9914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:18:54.506 [DEBUG] [Thread-9914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:18:54.506 [DEBUG] [Thread-9914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:18:54.530 [INFO] [Thread-9914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:18: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-25T10:18:54.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:18:55.054 [DEBUG] [Thread-9916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:18:55.361 [DEBUG] [Thread-9914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:18:55.361 [DEBUG] [Thread-9914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:18:55.409 [DEBUG] [Thread-9914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:18:55.409 [DEBUG] [Thread-9914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:18:55.418 [DEBUG] [Thread-9914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:18:55.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:18:55.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-25T10:18: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') -> 00000000
2025-12-25T10:18:55.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:18:55.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:18:55.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:18:55.452 [DEBUG] [Thread-9914] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:18:59.166 [DEBUG] [Thread-9917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:01.183 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:01.184 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:14.219 [DEBUG] [Thread-9918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:19:25.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:19:25.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-25T10:19:26.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 19, 20), 17.75, 31.55, 0.0, 18.6, 23.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:19:26.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:19:20
2025-12-25T10:19:26.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:19:26.460 [DEBUG] [Thread-9919] [transport.py] [_log()] starting thread (client mode): 0xb6b28160
2025-12-25T10:19:26.461 [DEBUG] [Thread-9919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:19:26.481 [DEBUG] [Thread-9919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:19:26.481 [INFO] [Thread-9919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:19:26.484 [DEBUG] [Thread-9919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:19:26.484 [DEBUG] [Thread-9919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:19:26.484 [DEBUG] [Thread-9919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:19:26.484 [DEBUG] [Thread-9919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:19:26.484 [DEBUG] [Thread-9919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:19:26.484 [DEBUG] [Thread-9919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] client lang: <none>
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] server lang: <none>
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] kex follows: False
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:19:26.485 [DEBUG] [Thread-9919] [transport.py] [_log()] Compression: none
2025-12-25T10:19:26.486 [DEBUG] [Thread-9919] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:19:26.505 [DEBUG] [Thread-9919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:19:26.506 [DEBUG] [Thread-9919] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:19:26.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:19:26.507 [DEBUG] [Thread-9919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:19:26.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:19:26.509 [DEBUG] [Thread-9919] [transport.py] [_log()] userauth is OK
2025-12-25T10:19:26.510 [DEBUG] [Thread-9919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:19:26.510 [DEBUG] [Thread-9919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:19:26.510 [DEBUG] [Thread-9919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:19:26.510 [DEBUG] [Thread-9919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:19:26.546 [INFO] [Thread-9919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:19:26.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:19:27.195 [DEBUG] [Thread-9919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:19:27.195 [DEBUG] [Thread-9919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:19:27.196 [DEBUG] [Thread-9919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:19:27.236 [DEBUG] [Thread-9919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:19:27.236 [DEBUG] [Thread-9919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:19:27.240 [DEBUG] [Thread-9919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:19:27.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:19:27.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:19:27.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:19:27.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:19:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:19:27.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:19:27.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:19:27.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:19:27.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:19:27.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.346243 -999.00  +22.30  25.16     37   +7.20 1 1 1 1 1   888    0 22.29 291.91 ----- 25.2 25.2 35.0 33.0 28.4 -23.4 27.7 -25.3 26.6 -21.3 27.1 -22.1
2025-12-25T10:19:27.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:19:27.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:19:27.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.346243
2025-12-25T10:19:27.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:19:27.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:19:27.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:19:27.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:19:27.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:19:27.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:19:20', tmtdew=17.75, humidity=31.55, cloud=0.0, wind=18.6, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:18:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:19:27.267 [DEBUG] [Thread-9919] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:19:27.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-25T10:19:27.361 [DEBUG] [Thread-9922] [transport.py] [_log()] starting thread (client mode): 0xb6b283d0
2025-12-25T10:19:27.361 [DEBUG] [Thread-9922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:19:27.376 [DEBUG] [Thread-9922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:19:27.376 [INFO] [Thread-9922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] client lang: <none>
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] server lang: <none>
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] kex follows: False
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:19:27.384 [DEBUG] [Thread-9922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:19:27.385 [DEBUG] [Thread-9922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:19:27.385 [DEBUG] [Thread-9922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:19:27.385 [DEBUG] [Thread-9922] [transport.py] [_log()] Compression: none
2025-12-25T10:19:27.385 [DEBUG] [Thread-9922] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:19:27.442 [DEBUG] [Thread-9922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:19:27.443 [DEBUG] [Thread-9922] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:19:27.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:19:27.444 [DEBUG] [Thread-9922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:19:27.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:19:27.503 [DEBUG] [Thread-9922] [transport.py] [_log()] userauth is OK
2025-12-25T10:19:27.504 [DEBUG] [Thread-9922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:19:27.504 [DEBUG] [Thread-9922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:19:27.504 [DEBUG] [Thread-9922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:19:27.504 [DEBUG] [Thread-9922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:19:27.525 [INFO] [Thread-9922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:19:27.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-25T10:19:27.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:19:28.435 [DEBUG] [Thread-9922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:19:28.435 [DEBUG] [Thread-9922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:19:28.483 [DEBUG] [Thread-9922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:19:28.483 [DEBUG] [Thread-9922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:19:28.492 [DEBUG] [Thread-9922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:19:28.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:19:28.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-25T10:19:28.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-25T10:19:28.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:19:28.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:19:28.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:19:28.528 [DEBUG] [Thread-9922] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:19:29.247 [DEBUG] [Thread-9924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:44.302 [DEBUG] [Thread-9925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:55.082 [DEBUG] [Thread-9926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:19:58.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:19:58.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-25T10:19:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 19, 52), 18.05, 31.1, 0.0, 15.33, 23.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:19:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:19:52
2025-12-25T10:19:59.332 [DEBUG] [Thread-9927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:19:59.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:19:59.561 [DEBUG] [Thread-9928] [transport.py] [_log()] starting thread (client mode): 0xb6bd7e20
2025-12-25T10:19:59.561 [DEBUG] [Thread-9928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:19:59.581 [DEBUG] [Thread-9928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:19:59.581 [INFO] [Thread-9928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:19:59.584 [DEBUG] [Thread-9928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:19:59.584 [DEBUG] [Thread-9928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:19:59.584 [DEBUG] [Thread-9928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] client lang: <none>
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] server lang: <none>
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] kex follows: False
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] Compression: none
2025-12-25T10:19:59.585 [DEBUG] [Thread-9928] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:19:59.601 [DEBUG] [Thread-9928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:19:59.601 [DEBUG] [Thread-9928] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:19:59.601 [DEBUG] [Thread-9928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:19:59.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:19:59.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:19:59.602 [DEBUG] [Thread-9928] [transport.py] [_log()] userauth is OK
2025-12-25T10:19:59.602 [DEBUG] [Thread-9928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:19:59.602 [DEBUG] [Thread-9928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:19:59.602 [DEBUG] [Thread-9928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:19:59.602 [DEBUG] [Thread-9928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:19:59.612 [INFO] [Thread-9928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:19:59.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:20:00.231 [DEBUG] [Thread-9928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:20:00.231 [DEBUG] [Thread-9928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:20:00.231 [DEBUG] [Thread-9928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:20:00.271 [DEBUG] [Thread-9928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:20:00.272 [DEBUG] [Thread-9928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:20:00.274 [DEBUG] [Thread-9928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:20:00.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:20:00.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:20:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:20:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:20:00.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:20:00.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:20:00.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:20:00.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.346937 -999.00  +22.10  25.00     39   +7.50 1 1 1 1 1   888    0 22.81 325.02 ----- 25.0 25.0 35.6 30.2 28.5 -25.2 27.7 -25.0 26.5 -21.6 27.1 -21.4
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.346937
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:20:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:19:52', tmtdew=18.05, humidity=31.1, cloud=0.0, wind=15.33, temperature=23.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:19:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:20:00.292 [DEBUG] [Thread-9928] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:20:00.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:20:00.380 [DEBUG] [Thread-9931] [transport.py] [_log()] starting thread (client mode): 0xb6b2ace0
2025-12-25T10:20:00.381 [DEBUG] [Thread-9931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:20:00.395 [DEBUG] [Thread-9931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:20:00.395 [INFO] [Thread-9931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:20:00.402 [DEBUG] [Thread-9931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:20:00.402 [DEBUG] [Thread-9931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:20:00.402 [DEBUG] [Thread-9931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] client lang: <none>
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] server lang: <none>
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] kex follows: False
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] Compression: none
2025-12-25T10:20:00.403 [DEBUG] [Thread-9931] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:20:00.461 [DEBUG] [Thread-9931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:20:00.461 [DEBUG] [Thread-9931] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:20:00.461 [DEBUG] [Thread-9931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:20:00.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:20:00.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:20:00.518 [DEBUG] [Thread-9931] [transport.py] [_log()] userauth is OK
2025-12-25T10:20:00.518 [DEBUG] [Thread-9931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:20:00.518 [DEBUG] [Thread-9931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:20:00.518 [DEBUG] [Thread-9931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:20:00.518 [DEBUG] [Thread-9931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:20:00.532 [INFO] [Thread-9931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:20:00.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:20:00.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:20:01.323 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:20:01.324 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:20:01.387 [DEBUG] [Thread-9931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:20:01.387 [DEBUG] [Thread-9931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:20:01.436 [DEBUG] [Thread-9931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:20:01.436 [DEBUG] [Thread-9931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:20:01.447 [DEBUG] [Thread-9931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:20:01.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:20:01.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:20:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:20:01.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:20:01.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:20:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:20:01.481 [DEBUG] [Thread-9931] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:20:14.363 [DEBUG] [Thread-9933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:20:29.422 [DEBUG] [Thread-9934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:20:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:20:31.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:20:31.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-25T10:20:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 20, 24), 17.93, 31.35, 0.0, 16.55, 23.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:20:32.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:20:24
2025-12-25T10:20:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:20:32.473 [DEBUG] [Thread-9935] [transport.py] [_log()] starting thread (client mode): 0xb6b29780
2025-12-25T10:20:32.473 [DEBUG] [Thread-9935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:20:32.493 [DEBUG] [Thread-9935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:20:32.494 [INFO] [Thread-9935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] client lang: <none>
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] server lang: <none>
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] kex follows: False
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] Compression: none
2025-12-25T10:20:32.497 [DEBUG] [Thread-9935] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:20:32.514 [DEBUG] [Thread-9935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:20:32.515 [DEBUG] [Thread-9935] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:20:32.515 [DEBUG] [Thread-9935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:20:32.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:20:32.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:20:32.517 [DEBUG] [Thread-9935] [transport.py] [_log()] userauth is OK
2025-12-25T10:20:32.517 [DEBUG] [Thread-9935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:20:32.518 [DEBUG] [Thread-9935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:20:32.518 [DEBUG] [Thread-9935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:20:32.518 [DEBUG] [Thread-9935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:20:32.533 [INFO] [Thread-9935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:20:32.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:20:33.173 [DEBUG] [Thread-9935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:20:33.173 [DEBUG] [Thread-9935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:20:33.173 [DEBUG] [Thread-9935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:20:33.214 [DEBUG] [Thread-9935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:20:33.214 [DEBUG] [Thread-9935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:20:33.218 [DEBUG] [Thread-9935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:20:33.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:20:33.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:20:33.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:20:33.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:20:33.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:20:33.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:20:33.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:20:33.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:20:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:20:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.347285 -999.00  +21.80  12.96     38   +6.80 1 1 1 1 1   888    0 23.09 329.63 ----- 13.0 13.0 33.6 21.9 28.6 -23.2 27.6 -24.8 26.5 -21.9 27.1 -22.0
2025-12-25T10:20:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:20:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:20:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.347285
2025-12-25T10:20:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:20:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:20:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:20:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:20:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:20:33.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:20:24', tmtdew=17.93, humidity=31.35, cloud=0.0, wind=16.55, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:20:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:20:33.243 [DEBUG] [Thread-9935] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:20:33.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-25T10:20:33.339 [DEBUG] [Thread-9938] [transport.py] [_log()] starting thread (client mode): 0xb6b28ca0
2025-12-25T10:20:33.339 [DEBUG] [Thread-9938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:20:33.353 [DEBUG] [Thread-9938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:20:33.353 [INFO] [Thread-9938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:20:33.361 [DEBUG] [Thread-9938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] client lang: <none>
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] server lang: <none>
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] kex follows: False
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] Compression: none
2025-12-25T10:20:33.362 [DEBUG] [Thread-9938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:20:33.419 [DEBUG] [Thread-9938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:20:33.420 [DEBUG] [Thread-9938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:20:33.420 [DEBUG] [Thread-9938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:20:33.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:20:33.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:20:33.475 [DEBUG] [Thread-9938] [transport.py] [_log()] userauth is OK
2025-12-25T10:20:33.475 [DEBUG] [Thread-9938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:20:33.476 [DEBUG] [Thread-9938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:20:33.476 [DEBUG] [Thread-9938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:20:33.476 [DEBUG] [Thread-9938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:20:33.495 [INFO] [Thread-9938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:20: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-25T10:20:33.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:20:34.383 [DEBUG] [Thread-9938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:20:34.383 [DEBUG] [Thread-9938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:20:34.431 [DEBUG] [Thread-9938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:20:34.431 [DEBUG] [Thread-9938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:20:34.439 [DEBUG] [Thread-9938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:20:34.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:20:34.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-25T10:20:34.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-25T10:20:34.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:20:34.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:20:34.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:20:34.471 [DEBUG] [Thread-9938] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:20:44.457 [DEBUG] [Thread-9940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:20:55.134 [DEBUG] [Thread-9941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:20:59.519 [DEBUG] [Thread-9942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:01.462 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:01.464 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:04.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:21:04.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:21:04.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-25T10:21:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 20, 56), 18.08, 30.67, 0.0, 19.88, 22.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:21:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:20:56
2025-12-25T10:21:05.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:21:05.450 [DEBUG] [Thread-9943] [transport.py] [_log()] starting thread (client mode): 0xb6b63580
2025-12-25T10:21:05.450 [DEBUG] [Thread-9943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:21:05.471 [DEBUG] [Thread-9943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:21:05.471 [INFO] [Thread-9943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:21:05.474 [DEBUG] [Thread-9943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] client lang: <none>
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] server lang: <none>
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] kex follows: False
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] Compression: none
2025-12-25T10:21:05.475 [DEBUG] [Thread-9943] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:21:05.492 [DEBUG] [Thread-9943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:21:05.492 [DEBUG] [Thread-9943] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:21:05.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:21:05.493 [DEBUG] [Thread-9943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:21:05.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:21:05.495 [DEBUG] [Thread-9943] [transport.py] [_log()] userauth is OK
2025-12-25T10:21:05.495 [DEBUG] [Thread-9943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:21:05.495 [DEBUG] [Thread-9943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:21:05.495 [DEBUG] [Thread-9943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:21:05.495 [DEBUG] [Thread-9943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:21:05.511 [INFO] [Thread-9943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:21:05.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:21:06.124 [DEBUG] [Thread-9943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:21:06.124 [DEBUG] [Thread-9943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:21:06.124 [DEBUG] [Thread-9943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:21:06.165 [DEBUG] [Thread-9943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:21:06.165 [DEBUG] [Thread-9943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:21:06.168 [DEBUG] [Thread-9943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:21:06.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:21:06.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:21:06.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:21:06.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:21:06.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:21:06.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:21:06.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:21:06.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:21:06.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:21:06.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.347632 -999.00  +22.10  20.33     38   +7.40 1 2 1 1 1   888    0 23.02 320.82 ----- 20.3 20.3 40.8 21.7 28.8 -23.9 27.9 -23.6 26.6 -20.9 27.1 -21.6
2025-12-25T10:21:06.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:21:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:21:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.347632
2025-12-25T10:21:06.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:21:06.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:21:06.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:21:06.196 [DEBUG] [Thread-9943] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:21:06.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:21:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:21:06.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:20:56', tmtdew=18.08, humidity=30.67, cloud=0.0, wind=19.88, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:20:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:21:06.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-25T10:21:06.292 [DEBUG] [Thread-9946] [transport.py] [_log()] starting thread (client mode): 0xb6b616f0
2025-12-25T10:21:06.292 [DEBUG] [Thread-9946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:21:06.308 [DEBUG] [Thread-9946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:21:06.308 [INFO] [Thread-9946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:21:06.315 [DEBUG] [Thread-9946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] client lang: <none>
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] server lang: <none>
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] kex follows: False
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] Compression: none
2025-12-25T10:21:06.316 [DEBUG] [Thread-9946] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:21:06.377 [DEBUG] [Thread-9946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:21:06.378 [DEBUG] [Thread-9946] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:21:06.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:21:06.379 [DEBUG] [Thread-9946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:21:06.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:21:06.440 [DEBUG] [Thread-9946] [transport.py] [_log()] userauth is OK
2025-12-25T10:21:06.440 [DEBUG] [Thread-9946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:21:06.441 [DEBUG] [Thread-9946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:21:06.441 [DEBUG] [Thread-9946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:21:06.441 [DEBUG] [Thread-9946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:21:06.459 [INFO] [Thread-9946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:21:06.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-25T10:21:06.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:21:07.315 [DEBUG] [Thread-9946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:21:07.316 [DEBUG] [Thread-9946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:21:07.363 [DEBUG] [Thread-9946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:21:07.363 [DEBUG] [Thread-9946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:21:07.372 [DEBUG] [Thread-9946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:21:07.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:21: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')
2025-12-25T10:21:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:21:07.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:21:07.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:21:07.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:21:07.410 [DEBUG] [Thread-9946] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:21:14.553 [DEBUG] [Thread-9948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:29.593 [DEBUG] [Thread-9949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:37.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:21:37.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:21:37.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-25T10:21:38.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 21, 28), 18.51, 29.76, 0.0, 14.4, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:21:38.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:21:28
2025-12-25T10:21:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:21:38.417 [DEBUG] [Thread-9950] [transport.py] [_log()] starting thread (client mode): 0xb6b2a890
2025-12-25T10:21:38.417 [DEBUG] [Thread-9950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:21:38.439 [DEBUG] [Thread-9950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:21:38.439 [INFO] [Thread-9950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] client lang: <none>
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] server lang: <none>
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] kex follows: False
2025-12-25T10:21:38.443 [DEBUG] [Thread-9950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:21:38.444 [DEBUG] [Thread-9950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:21:38.444 [DEBUG] [Thread-9950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:21:38.444 [DEBUG] [Thread-9950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:21:38.444 [DEBUG] [Thread-9950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:21:38.444 [DEBUG] [Thread-9950] [transport.py] [_log()] Compression: none
2025-12-25T10:21:38.444 [DEBUG] [Thread-9950] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:21:38.463 [DEBUG] [Thread-9950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:21:38.464 [DEBUG] [Thread-9950] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:21:38.464 [DEBUG] [Thread-9950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:21:38.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:21:38.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:21:38.466 [DEBUG] [Thread-9950] [transport.py] [_log()] userauth is OK
2025-12-25T10:21:38.467 [DEBUG] [Thread-9950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:21:38.467 [DEBUG] [Thread-9950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:21:38.467 [DEBUG] [Thread-9950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:21:38.467 [DEBUG] [Thread-9950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:21:38.491 [INFO] [Thread-9950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:21:38.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:21:39.108 [DEBUG] [Thread-9950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:21:39.108 [DEBUG] [Thread-9950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:21:39.109 [DEBUG] [Thread-9950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:21:39.149 [DEBUG] [Thread-9950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:21:39.149 [DEBUG] [Thread-9950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:21:39.152 [DEBUG] [Thread-9950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:21:39.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:21:39.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:21:39.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:21:39.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:21:39.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:21:39.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:21:39.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:21:39.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:21:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:21:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.347979 -999.00  +22.40  12.17     36   +6.80 1 2 1 1 1   888    0 22.92 318.55 ----- 12.2 12.2 9.1 24.4 28.9 -22.8 27.9 -23.9 26.6 -21.0 27.2 -21.0
2025-12-25T10:21:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:21:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:21:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.347979
2025-12-25T10:21:39.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:21:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:21:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:21:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:21:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:21:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:21:28', tmtdew=18.51, humidity=29.76, cloud=0.0, wind=14.4, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:21:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:21:39.178 [DEBUG] [Thread-9950] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:21:39.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-25T10:21:39.274 [DEBUG] [Thread-9953] [transport.py] [_log()] starting thread (client mode): 0xb6be0790
2025-12-25T10:21:39.274 [DEBUG] [Thread-9953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:21:39.289 [DEBUG] [Thread-9953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:21:39.289 [INFO] [Thread-9953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] client lang: <none>
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] server lang: <none>
2025-12-25T10:21:39.297 [DEBUG] [Thread-9953] [transport.py] [_log()] kex follows: False
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] Compression: none
2025-12-25T10:21:39.298 [DEBUG] [Thread-9953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:21:39.356 [DEBUG] [Thread-9953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:21:39.357 [DEBUG] [Thread-9953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:21:39.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:21:39.358 [DEBUG] [Thread-9953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:21:39.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:21:39.412 [DEBUG] [Thread-9953] [transport.py] [_log()] userauth is OK
2025-12-25T10:21:39.413 [DEBUG] [Thread-9953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:21:39.413 [DEBUG] [Thread-9953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:21:39.413 [DEBUG] [Thread-9953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:21:39.413 [DEBUG] [Thread-9953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:21:39.432 [INFO] [Thread-9953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:21:39.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:21:39.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:21:40.283 [DEBUG] [Thread-9953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:21:40.283 [DEBUG] [Thread-9953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:21:40.332 [DEBUG] [Thread-9953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:21:40.333 [DEBUG] [Thread-9953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:21:40.342 [DEBUG] [Thread-9953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:21:40.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:21:40.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:21:40.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:21:40.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:21:40.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:21:40.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:21:40.381 [DEBUG] [Thread-9953] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:21:44.627 [DEBUG] [Thread-9955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:55.178 [DEBUG] [Thread-9956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:21:59.678 [DEBUG] [Thread-9957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:01.604 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:01.604 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:10.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:22:10.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:22:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:22:11.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 22), 18.33, 30.02, 0.0, 18.4, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:22:11.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:22:00
2025-12-25T10:22:11.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:22:11.389 [DEBUG] [Thread-9958] [transport.py] [_log()] starting thread (client mode): 0xb6b62f20
2025-12-25T10:22:11.389 [DEBUG] [Thread-9958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:22:11.409 [DEBUG] [Thread-9958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:22:11.409 [INFO] [Thread-9958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] client lang: <none>
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] server lang: <none>
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] kex follows: False
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] Compression: none
2025-12-25T10:22:11.412 [DEBUG] [Thread-9958] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:22:11.430 [DEBUG] [Thread-9958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:22:11.431 [DEBUG] [Thread-9958] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:22:11.432 [DEBUG] [Thread-9958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:22:11.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:22:11.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:22:11.434 [DEBUG] [Thread-9958] [transport.py] [_log()] userauth is OK
2025-12-25T10:22:11.434 [DEBUG] [Thread-9958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:22:11.434 [DEBUG] [Thread-9958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:22:11.434 [DEBUG] [Thread-9958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:22:11.434 [DEBUG] [Thread-9958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:22:11.450 [INFO] [Thread-9958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:22:11.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:22:12.082 [DEBUG] [Thread-9958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:22:12.082 [DEBUG] [Thread-9958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:22:12.082 [DEBUG] [Thread-9958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:22:12.123 [DEBUG] [Thread-9958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:22:12.123 [DEBUG] [Thread-9958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:22:12.126 [DEBUG] [Thread-9958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:22:12.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:22:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:22:12.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:22:12.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:22:12.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:22:12.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:22:12.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:22:12.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:22:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:22:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.348327 -999.00  +22.50  17.95     36   +6.80 1 2 1 1 1   888    0 23.44 319.55 ----- 17.9 17.9 20.0 21.0 29.0 -24.0 28.1 -22.8 26.8 -21.3 27.2 -25.1
2025-12-25T10:22:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:22:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:22:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.348327
2025-12-25T10:22:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:22:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:22:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:22:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:22:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:22:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:22:00', tmtdew=18.33, humidity=30.02, cloud=0.0, wind=18.4, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:21:35.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:22:12.151 [DEBUG] [Thread-9958] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:22:12.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:22:12.245 [DEBUG] [Thread-9961] [transport.py] [_log()] starting thread (client mode): 0xb6b62170
2025-12-25T10:22:12.245 [DEBUG] [Thread-9961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:22:12.260 [DEBUG] [Thread-9961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:22:12.260 [INFO] [Thread-9961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] client lang: <none>
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] server lang: <none>
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] kex follows: False
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:22:12.268 [DEBUG] [Thread-9961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:22:12.269 [DEBUG] [Thread-9961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:22:12.269 [DEBUG] [Thread-9961] [transport.py] [_log()] Compression: none
2025-12-25T10:22:12.269 [DEBUG] [Thread-9961] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:22:12.329 [DEBUG] [Thread-9961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:22:12.330 [DEBUG] [Thread-9961] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:22:12.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:22:12.331 [DEBUG] [Thread-9961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:22:12.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:22:12.385 [DEBUG] [Thread-9961] [transport.py] [_log()] userauth is OK
2025-12-25T10:22:12.385 [DEBUG] [Thread-9961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:22:12.385 [DEBUG] [Thread-9961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:22:12.385 [DEBUG] [Thread-9961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:22:12.385 [DEBUG] [Thread-9961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:22:12.404 [INFO] [Thread-9961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:22:12.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-25T10:22:12.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:22:13.269 [DEBUG] [Thread-9961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:22:13.269 [DEBUG] [Thread-9961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:22:13.317 [DEBUG] [Thread-9961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:22:13.317 [DEBUG] [Thread-9961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:22:13.326 [DEBUG] [Thread-9961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:22:13.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:22:13.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:22:13.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:22:13.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:22:13.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:22:13.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:22:13.363 [DEBUG] [Thread-9961] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:22:14.712 [DEBUG] [Thread-9963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:29.763 [DEBUG] [Thread-9964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:43.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:22:43.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:22:43.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:22:44.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 22, 32), 18.14, 30.4, 0.0, 15.83, 22.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:22:44.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:22:32
2025-12-25T10:22:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:22:44.351 [DEBUG] [Thread-9965] [transport.py] [_log()] starting thread (client mode): 0xb6b221a0
2025-12-25T10:22:44.351 [DEBUG] [Thread-9965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:22:44.370 [DEBUG] [Thread-9965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:22:44.371 [INFO] [Thread-9965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:22:44.373 [DEBUG] [Thread-9965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] client lang: <none>
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] server lang: <none>
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] kex follows: False
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] Compression: none
2025-12-25T10:22:44.374 [DEBUG] [Thread-9965] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:22:44.392 [DEBUG] [Thread-9965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:22:44.392 [DEBUG] [Thread-9965] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:22:44.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:22:44.393 [DEBUG] [Thread-9965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:22:44.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:22:44.395 [DEBUG] [Thread-9965] [transport.py] [_log()] userauth is OK
2025-12-25T10:22:44.395 [DEBUG] [Thread-9965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:22:44.395 [DEBUG] [Thread-9965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:22:44.395 [DEBUG] [Thread-9965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:22:44.395 [DEBUG] [Thread-9965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:22:44.413 [INFO] [Thread-9965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:22:44.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:22:44.800 [DEBUG] [Thread-9967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:45.045 [DEBUG] [Thread-9965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:22:45.045 [DEBUG] [Thread-9965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:22:45.046 [DEBUG] [Thread-9965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:22:45.086 [DEBUG] [Thread-9965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:22:45.086 [DEBUG] [Thread-9965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:22:45.089 [DEBUG] [Thread-9965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:22:45.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:22:45.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:22:45.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:22:45.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:22:45.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:22:45.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:22:45.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:22:45.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:22:45.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:22:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.348674 -999.00  +22.40  24.08     35   +6.50 1 2 1 1 1   888    0 23.27 314.64 ----- 24.1 24.1 28.6 29.8 29.0 -24.2 28.1 -23.8 26.9 -21.5 27.3 -22.0
2025-12-25T10:22:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:22:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:22:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.348674
2025-12-25T10:22:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:22:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:22:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:22:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:22:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:22:45.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:22:32', tmtdew=18.14, humidity=30.4, cloud=0.0, wind=15.83, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:22:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:22:45.123 [DEBUG] [Thread-9965] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:22:45.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-25T10:22:45.217 [DEBUG] [Thread-9969] [transport.py] [_log()] starting thread (client mode): 0xb6b234c0
2025-12-25T10:22:45.217 [DEBUG] [Thread-9969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:22:45.232 [DEBUG] [Thread-9969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:22:45.232 [INFO] [Thread-9969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:22:45.240 [DEBUG] [Thread-9969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:22:45.241 [DEBUG] [Thread-9969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] client lang: <none>
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] server lang: <none>
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] kex follows: False
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] Compression: none
2025-12-25T10:22:45.242 [DEBUG] [Thread-9969] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:22:45.297 [DEBUG] [Thread-9969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:22:45.297 [DEBUG] [Thread-9969] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:22:45.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:22:45.299 [DEBUG] [Thread-9969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:22:45.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:22:45.358 [DEBUG] [Thread-9969] [transport.py] [_log()] userauth is OK
2025-12-25T10:22:45.358 [DEBUG] [Thread-9969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:22:45.358 [DEBUG] [Thread-9969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:22:45.359 [DEBUG] [Thread-9969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:22:45.359 [DEBUG] [Thread-9969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:22:45.379 [INFO] [Thread-9969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:22:45.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-25T10:22:45.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:22:46.293 [DEBUG] [Thread-9969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:22:46.293 [DEBUG] [Thread-9969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:22:46.341 [DEBUG] [Thread-9969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:22:46.341 [DEBUG] [Thread-9969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:22:46.350 [DEBUG] [Thread-9969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:22:46.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:22: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')
2025-12-25T10:22:46.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:22:46.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:22:46.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:22:46.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:22:46.389 [DEBUG] [Thread-9969] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:22:55.230 [DEBUG] [Thread-9971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:22:59.841 [DEBUG] [Thread-9972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:23:01.745 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:23:01.747 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:23:14.888 [DEBUG] [Thread-9973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:23:16.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:23:16.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:23:16.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-25T10:23:17.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 23, 5), 18.11, 30.47, 0.0, 15.72, 22.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:23:17.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:23:05
2025-12-25T10:23:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:23:17.376 [DEBUG] [Thread-9974] [transport.py] [_log()] starting thread (client mode): 0xb6b62890
2025-12-25T10:23:17.376 [DEBUG] [Thread-9974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:23:17.397 [DEBUG] [Thread-9974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:23:17.397 [INFO] [Thread-9974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:23:17.400 [DEBUG] [Thread-9974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:23:17.400 [DEBUG] [Thread-9974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:23:17.400 [DEBUG] [Thread-9974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:23:17.400 [DEBUG] [Thread-9974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] client lang: <none>
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] server lang: <none>
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] kex follows: False
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:23:17.401 [DEBUG] [Thread-9974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:23:17.402 [DEBUG] [Thread-9974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:23:17.402 [DEBUG] [Thread-9974] [transport.py] [_log()] Compression: none
2025-12-25T10:23:17.402 [DEBUG] [Thread-9974] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:23:17.420 [DEBUG] [Thread-9974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:23:17.421 [DEBUG] [Thread-9974] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:23:17.421 [DEBUG] [Thread-9974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:23:17.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:23:17.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:23:17.423 [DEBUG] [Thread-9974] [transport.py] [_log()] userauth is OK
2025-12-25T10:23:17.424 [DEBUG] [Thread-9974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:23:17.424 [DEBUG] [Thread-9974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:23:17.424 [DEBUG] [Thread-9974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:23:17.424 [DEBUG] [Thread-9974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:23:17.440 [INFO] [Thread-9974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:23:17.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:23:18.079 [DEBUG] [Thread-9974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:23:18.079 [DEBUG] [Thread-9974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:23:18.079 [DEBUG] [Thread-9974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:23:18.120 [DEBUG] [Thread-9974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:23:18.120 [DEBUG] [Thread-9974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:23:18.123 [DEBUG] [Thread-9974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:23:18.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:23:18.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:23:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:23:18.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:23:18.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:23:18.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:23:18.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:23:18.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:23:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:23:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.349021 -999.00  +22.30  24.83     36   +6.80 1 2 1 1 1   888    0 23.55 317.74 ----- 24.8 24.8 30.6 27.5 28.9 -23.7 28.1 -23.4 26.8 -21.2 27.3 -21.6
2025-12-25T10:23:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:23:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:23:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.349021
2025-12-25T10:23:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:23:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:23:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:23:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:23:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:23:18.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:23:05', tmtdew=18.11, humidity=30.47, cloud=0.0, wind=15.72, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:22:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:23:18.148 [DEBUG] [Thread-9974] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:23:18.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-25T10:23:18.242 [DEBUG] [Thread-9977] [transport.py] [_log()] starting thread (client mode): 0xb6b61870
2025-12-25T10:23:18.242 [DEBUG] [Thread-9977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:23:18.261 [DEBUG] [Thread-9977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:23:18.261 [INFO] [Thread-9977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:23:18.269 [DEBUG] [Thread-9977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] client lang: <none>
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] server lang: <none>
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] kex follows: False
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:23:18.270 [DEBUG] [Thread-9977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:23:18.271 [DEBUG] [Thread-9977] [transport.py] [_log()] Compression: none
2025-12-25T10:23:18.271 [DEBUG] [Thread-9977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:23:18.330 [DEBUG] [Thread-9977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:23:18.330 [DEBUG] [Thread-9977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:23:18.331 [DEBUG] [Thread-9977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:23:18.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:23:18.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:23:18.386 [DEBUG] [Thread-9977] [transport.py] [_log()] userauth is OK
2025-12-25T10:23:18.386 [DEBUG] [Thread-9977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:23:18.386 [DEBUG] [Thread-9977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:23:18.386 [DEBUG] [Thread-9977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:23:18.386 [DEBUG] [Thread-9977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:23:18.405 [INFO] [Thread-9977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:23:18.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-25T10:23:18.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:23:19.239 [DEBUG] [Thread-9977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:23:19.240 [DEBUG] [Thread-9977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:23:19.287 [DEBUG] [Thread-9977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:23:19.287 [DEBUG] [Thread-9977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:23:19.296 [DEBUG] [Thread-9977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:23:19.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:23:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:23:19.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:23:19.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:23:19.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:23:19.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:23:19.333 [DEBUG] [Thread-9977] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:23:29.921 [DEBUG] [Thread-9979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:23:44.977 [DEBUG] [Thread-9980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:23:49.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:23:49.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:23:49.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-25T10:23:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 23, 37), 17.86, 31.34, 0.0, 18.7, 22.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:23:50.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:23:37
2025-12-25T10:23:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:23:50.390 [DEBUG] [Thread-9981] [transport.py] [_log()] starting thread (client mode): 0xb6be15a0
2025-12-25T10:23:50.391 [DEBUG] [Thread-9981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:23:50.411 [DEBUG] [Thread-9981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:23:50.411 [INFO] [Thread-9981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:23:50.414 [DEBUG] [Thread-9981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:23:50.414 [DEBUG] [Thread-9981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:23:50.414 [DEBUG] [Thread-9981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:23:50.414 [DEBUG] [Thread-9981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:50.414 [DEBUG] [Thread-9981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] client lang: <none>
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] server lang: <none>
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] kex follows: False
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] Compression: none
2025-12-25T10:23:50.415 [DEBUG] [Thread-9981] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:23:50.431 [DEBUG] [Thread-9981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:23:50.431 [DEBUG] [Thread-9981] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:23:50.431 [DEBUG] [Thread-9981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:23:50.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:23:50.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:23:50.432 [DEBUG] [Thread-9981] [transport.py] [_log()] userauth is OK
2025-12-25T10:23:50.432 [DEBUG] [Thread-9981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:23:50.433 [DEBUG] [Thread-9981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:23:50.433 [DEBUG] [Thread-9981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:23:50.433 [DEBUG] [Thread-9981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:23:50.449 [INFO] [Thread-9981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:23:50.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:23:51.080 [DEBUG] [Thread-9981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:23:51.080 [DEBUG] [Thread-9981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:23:51.080 [DEBUG] [Thread-9981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:23:51.121 [DEBUG] [Thread-9981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:23:51.121 [DEBUG] [Thread-9981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:23:51.123 [DEBUG] [Thread-9981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:23:51.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:23:51.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:23:51.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:23:51.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:23:51.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:23:51.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:23:51.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.349715 -999.00  +22.10  20.22     37   +7.00 1 1 1 1 1   888    0 24.21 333.70 ----- 20.2 20.2 46.0 24.8 28.9 -23.2 28.1 -24.7 26.6 -21.5 27.4 -21.1
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.349715
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:23:51.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:23:37', tmtdew=17.86, humidity=31.34, cloud=0.0, wind=18.7, temperature=22.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:23:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:23:51.144 [DEBUG] [Thread-9981] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:23:51.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-25T10:23:51.228 [DEBUG] [Thread-9984] [transport.py] [_log()] starting thread (client mode): 0xb6be00a0
2025-12-25T10:23:51.228 [DEBUG] [Thread-9984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:23:51.242 [DEBUG] [Thread-9984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:23:51.242 [INFO] [Thread-9984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] client lang: <none>
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] server lang: <none>
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] kex follows: False
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] Compression: none
2025-12-25T10:23:51.253 [DEBUG] [Thread-9984] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:23:51.314 [DEBUG] [Thread-9984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:23:51.314 [DEBUG] [Thread-9984] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:23:51.314 [DEBUG] [Thread-9984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:23:51.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:23:51.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:23:51.377 [DEBUG] [Thread-9984] [transport.py] [_log()] userauth is OK
2025-12-25T10:23:51.377 [DEBUG] [Thread-9984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:23:51.377 [DEBUG] [Thread-9984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:23:51.377 [DEBUG] [Thread-9984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:23:51.377 [DEBUG] [Thread-9984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:23:51.391 [INFO] [Thread-9984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:23:51.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-25T10:23:51.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:23:52.220 [DEBUG] [Thread-9984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:23:52.220 [DEBUG] [Thread-9984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:23:52.269 [DEBUG] [Thread-9984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:23:52.269 [DEBUG] [Thread-9984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:23:52.278 [DEBUG] [Thread-9984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:23:52.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:23:52.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-25T10:23:52.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-25T10:23:52.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:23:52.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:23:52.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:23:52.315 [DEBUG] [Thread-9984] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:23:55.276 [DEBUG] [Thread-9986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:00.011 [DEBUG] [Thread-9987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:01.885 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:01.886 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:15.064 [DEBUG] [Thread-9988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:24:22.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:24:22.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-25T10:24:23.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 24, 9), 18.11, 30.87, 0.0, 16.34, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:24:23.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:24:09
2025-12-25T10:24:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:24:23.329 [DEBUG] [Thread-9989] [transport.py] [_log()] starting thread (client mode): 0xb6b22620
2025-12-25T10:24:23.330 [DEBUG] [Thread-9989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:24:23.350 [DEBUG] [Thread-9989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:24:23.350 [INFO] [Thread-9989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:24:23.354 [DEBUG] [Thread-9989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:24:23.354 [DEBUG] [Thread-9989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:24:23.354 [DEBUG] [Thread-9989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:24:23.354 [DEBUG] [Thread-9989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:23.354 [DEBUG] [Thread-9989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] client lang: <none>
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] server lang: <none>
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] kex follows: False
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:24:23.355 [DEBUG] [Thread-9989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:24:23.356 [DEBUG] [Thread-9989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:24:23.356 [DEBUG] [Thread-9989] [transport.py] [_log()] Compression: none
2025-12-25T10:24:23.356 [DEBUG] [Thread-9989] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:24:23.366 [DEBUG] [Thread-9989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:24:23.366 [DEBUG] [Thread-9989] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:24:23.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:24:23.367 [DEBUG] [Thread-9989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:24:23.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:24:23.369 [DEBUG] [Thread-9989] [transport.py] [_log()] userauth is OK
2025-12-25T10:24:23.369 [DEBUG] [Thread-9989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:24:23.370 [DEBUG] [Thread-9989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:24:23.370 [DEBUG] [Thread-9989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:24:23.370 [DEBUG] [Thread-9989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:24:23.388 [INFO] [Thread-9989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:24:23.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:24:24.059 [DEBUG] [Thread-9989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:24:24.059 [DEBUG] [Thread-9989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:24:24.060 [DEBUG] [Thread-9989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:24:24.100 [DEBUG] [Thread-9989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:24:24.100 [DEBUG] [Thread-9989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:24:24.104 [DEBUG] [Thread-9989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:24:24.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:24:24.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:24:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:24:24.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:24:24.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:24:24.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:24:24.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:24:24.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:24:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:24:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.350063 -999.00  +22.00  20.40     38   +7.20 1 1 1 1 1   888    0 23.15 300.00 ----- 20.4 20.4 44.8 28.1 28.9 -23.8 27.9 -25.3 26.7 -21.7 27.4 -21.5
2025-12-25T10:24:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:24:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:24:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.350063
2025-12-25T10:24:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:24:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:24:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:24:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:24:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:24:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:24:09', tmtdew=18.11, humidity=30.87, cloud=0.0, wind=16.34, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:24:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:24:24.131 [DEBUG] [Thread-9989] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:24:24.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:24:24.227 [DEBUG] [Thread-9992] [transport.py] [_log()] starting thread (client mode): 0xb6b51210
2025-12-25T10:24:24.227 [DEBUG] [Thread-9992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:24:24.242 [DEBUG] [Thread-9992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:24:24.242 [INFO] [Thread-9992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:24:24.250 [DEBUG] [Thread-9992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:24:24.250 [DEBUG] [Thread-9992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:24:24.250 [DEBUG] [Thread-9992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] client lang: <none>
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] server lang: <none>
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] kex follows: False
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] Compression: none
2025-12-25T10:24:24.251 [DEBUG] [Thread-9992] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:24:24.315 [DEBUG] [Thread-9992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:24:24.316 [DEBUG] [Thread-9992] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:24:24.316 [DEBUG] [Thread-9992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:24:24.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:24:24.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:24:24.374 [DEBUG] [Thread-9992] [transport.py] [_log()] userauth is OK
2025-12-25T10:24:24.375 [DEBUG] [Thread-9992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:24:24.375 [DEBUG] [Thread-9992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:24:24.375 [DEBUG] [Thread-9992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:24:24.375 [DEBUG] [Thread-9992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:24:24.394 [INFO] [Thread-9992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:24:24.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-25T10:24:24.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:24:25.264 [DEBUG] [Thread-9992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:24:25.265 [DEBUG] [Thread-9992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:24:25.312 [DEBUG] [Thread-9992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:24:25.312 [DEBUG] [Thread-9992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:24:25.321 [DEBUG] [Thread-9992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:24:25.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:24:25.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-25T10:24:25.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-25T10:24:25.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:24:25.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:24:25.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:24:25.354 [DEBUG] [Thread-9992] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:24:30.095 [DEBUG] [Thread-9994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:45.133 [DEBUG] [Thread-9995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:55.330 [DEBUG] [Thread-9996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:24:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:24:55.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:24:55.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-25T10:24:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 24, 41), 17.37, 32.18, 0.0, 17.54, 22.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:24:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:24:41
2025-12-25T10:24:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:24:56.368 [DEBUG] [Thread-9997] [transport.py] [_log()] starting thread (client mode): 0xb6ba9f60
2025-12-25T10:24:56.368 [DEBUG] [Thread-9997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:24:56.388 [DEBUG] [Thread-9997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:24:56.388 [INFO] [Thread-9997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:24:56.391 [DEBUG] [Thread-9997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] client lang: <none>
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] server lang: <none>
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] kex follows: False
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] Compression: none
2025-12-25T10:24:56.392 [DEBUG] [Thread-9997] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:24:56.400 [DEBUG] [Thread-9997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:24:56.401 [DEBUG] [Thread-9997] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:24:56.401 [DEBUG] [Thread-9997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:24:56.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:24:56.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:24:56.403 [DEBUG] [Thread-9997] [transport.py] [_log()] userauth is OK
2025-12-25T10:24:56.403 [DEBUG] [Thread-9997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:24:56.403 [DEBUG] [Thread-9997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:24:56.403 [DEBUG] [Thread-9997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:24:56.403 [DEBUG] [Thread-9997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:24:56.427 [INFO] [Thread-9997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:24:56.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:24:57.069 [DEBUG] [Thread-9997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:24:57.069 [DEBUG] [Thread-9997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:24:57.070 [DEBUG] [Thread-9997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:24:57.110 [DEBUG] [Thread-9997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:24:57.110 [DEBUG] [Thread-9997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:24:57.114 [DEBUG] [Thread-9997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:24:57.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:24:57.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:24:57.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:24:57.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:24:57.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:24:57.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:24:57.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:24:57.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:24:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:24:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.350410 -999.00  +22.10  15.47     39   +7.70 1 1 1 1 1   888    0 23.55 306.68 ----- 15.5 15.5 20.6 22.2 29.0 -22.4 27.9 -23.7 26.6 -22.9 27.3 -21.0
2025-12-25T10:24:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:24:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:24:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.350410
2025-12-25T10:24:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:24:57.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:24:57.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:24:57.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:24:57.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:24:57.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:24:41', tmtdew=17.37, humidity=32.18, cloud=0.0, wind=17.54, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:24:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:24:57.139 [DEBUG] [Thread-9997] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:24:57.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-25T10:24:57.233 [DEBUG] [Thread-10000] [transport.py] [_log()] starting thread (client mode): 0xb6be0760
2025-12-25T10:24:57.233 [DEBUG] [Thread-10000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:24:57.247 [DEBUG] [Thread-10000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:24:57.247 [INFO] [Thread-10000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] client lang: <none>
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] server lang: <none>
2025-12-25T10:24:57.255 [DEBUG] [Thread-10000] [transport.py] [_log()] kex follows: False
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] Compression: none
2025-12-25T10:24:57.256 [DEBUG] [Thread-10000] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:24:57.315 [DEBUG] [Thread-10000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:24:57.316 [DEBUG] [Thread-10000] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:24:57.316 [DEBUG] [Thread-10000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:24:57.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:24:57.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:24:57.371 [DEBUG] [Thread-10000] [transport.py] [_log()] userauth is OK
2025-12-25T10:24:57.371 [DEBUG] [Thread-10000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:24:57.371 [DEBUG] [Thread-10000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:24:57.371 [DEBUG] [Thread-10000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:24:57.371 [DEBUG] [Thread-10000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:24:57.386 [INFO] [Thread-10000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:24:57.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-25T10:24:57.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:24:58.191 [DEBUG] [Thread-10000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:24:58.191 [DEBUG] [Thread-10000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:24:58.239 [DEBUG] [Thread-10000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:24:58.239 [DEBUG] [Thread-10000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:24:58.248 [DEBUG] [Thread-10000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:24:58.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:24:58.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-25T10:24:58.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-25T10:24:58.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:24:58.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:24:58.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:24:58.285 [DEBUG] [Thread-10000] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:25:00.177 [DEBUG] [Thread-10002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:25:02.032 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:25:02.033 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:25:15.222 [DEBUG] [Thread-10003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:25:28.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:25:28.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:25:28.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-25T10:25:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 25, 13), 17.59, 31.72, 0.0, 15.0, 22.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:25:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:25:13
2025-12-25T10:25:29.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:25:29.280 [DEBUG] [Thread-10004] [transport.py] [_log()] starting thread (client mode): 0xb955b940
2025-12-25T10:25:29.280 [DEBUG] [Thread-10004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:25:29.300 [DEBUG] [Thread-10004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:25:29.300 [INFO] [Thread-10004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] client lang: <none>
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] server lang: <none>
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] kex follows: False
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:25:29.304 [DEBUG] [Thread-10004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:25:29.305 [DEBUG] [Thread-10004] [transport.py] [_log()] Compression: none
2025-12-25T10:25:29.305 [DEBUG] [Thread-10004] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:25:29.313 [DEBUG] [Thread-10004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:25:29.314 [DEBUG] [Thread-10004] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:25:29.314 [DEBUG] [Thread-10004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:25:29.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:25:29.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:25:29.316 [DEBUG] [Thread-10004] [transport.py] [_log()] userauth is OK
2025-12-25T10:25:29.317 [DEBUG] [Thread-10004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:25:29.317 [DEBUG] [Thread-10004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:25:29.317 [DEBUG] [Thread-10004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:25:29.317 [DEBUG] [Thread-10004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:25:29.335 [INFO] [Thread-10004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:25:29.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:25:29.988 [DEBUG] [Thread-10004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:25:29.988 [DEBUG] [Thread-10004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:25:29.989 [DEBUG] [Thread-10004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:25:30.029 [DEBUG] [Thread-10004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:25:30.029 [DEBUG] [Thread-10004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:25:30.033 [DEBUG] [Thread-10004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:25:30.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:25:30.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:25:30.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:25:30.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:25:30.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:25:30.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:25:30.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:25:30.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:25:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:25:30.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.350757 -999.00  +22.40   8.06     39   +7.90 1 2 1 1 1   888    0 22.35 271.62 ----- 8.1 8.1 35.2 16.8 29.1 -22.3 28.1 -23.1 26.9 -19.9 27.4 -20.5
2025-12-25T10:25:30.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:25:30.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:25:30.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.350757
2025-12-25T10:25:30.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:25:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:25:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:25:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:25:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:25:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:25:13', tmtdew=17.59, humidity=31.72, cloud=0.0, wind=15.0, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:25:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:25:30.059 [DEBUG] [Thread-10004] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:25:30.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-25T10:25:30.152 [DEBUG] [Thread-10007] [transport.py] [_log()] starting thread (client mode): 0xb955a260
2025-12-25T10:25:30.153 [DEBUG] [Thread-10007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:25:30.168 [DEBUG] [Thread-10007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:25:30.168 [INFO] [Thread-10007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:25:30.175 [DEBUG] [Thread-10007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] client lang: <none>
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] server lang: <none>
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] kex follows: False
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] Compression: none
2025-12-25T10:25:30.176 [DEBUG] [Thread-10007] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:25:30.235 [DEBUG] [Thread-10007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:25:30.236 [DEBUG] [Thread-10007] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:25:30.237 [DEBUG] [Thread-10007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:25:30.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:25:30.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:25:30.255 [DEBUG] [Thread-10009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:25:30.295 [DEBUG] [Thread-10007] [transport.py] [_log()] userauth is OK
2025-12-25T10:25:30.295 [DEBUG] [Thread-10007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:25:30.295 [DEBUG] [Thread-10007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:25:30.296 [DEBUG] [Thread-10007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:25:30.296 [DEBUG] [Thread-10007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:25:30.315 [INFO] [Thread-10007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:25:30.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-25T10:25:30.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:25:31.158 [DEBUG] [Thread-10007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:25:31.159 [DEBUG] [Thread-10007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:25:31.208 [DEBUG] [Thread-10007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:25:31.208 [DEBUG] [Thread-10007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:25:31.218 [DEBUG] [Thread-10007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:25:31.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:25:31.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:25:31.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:25:31.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:25:31.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:25:31.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:25:31.255 [DEBUG] [Thread-10007] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:25:45.319 [DEBUG] [Thread-10010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:25:55.388 [DEBUG] [Thread-10011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:00.355 [DEBUG] [Thread-10012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:26:01.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:26:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:26:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 25, 45), 17.2, 32.47, 0.0, 12.39, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:26:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:25:45
2025-12-25T10:26:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:26:02.170 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:02.171 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:02.224 [DEBUG] [Thread-10013] [transport.py] [_log()] starting thread (client mode): 0xb6b61e10
2025-12-25T10:26:02.225 [DEBUG] [Thread-10013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:26:02.245 [DEBUG] [Thread-10013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:26:02.246 [INFO] [Thread-10013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] client lang: <none>
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] server lang: <none>
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] kex follows: False
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:26:02.249 [DEBUG] [Thread-10013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:26:02.250 [DEBUG] [Thread-10013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:26:02.250 [DEBUG] [Thread-10013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:26:02.250 [DEBUG] [Thread-10013] [transport.py] [_log()] Compression: none
2025-12-25T10:26:02.250 [DEBUG] [Thread-10013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:26:02.268 [DEBUG] [Thread-10013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:26:02.269 [DEBUG] [Thread-10013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:26:02.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:26:02.270 [DEBUG] [Thread-10013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:26:02.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:26:02.272 [DEBUG] [Thread-10013] [transport.py] [_log()] userauth is OK
2025-12-25T10:26:02.272 [DEBUG] [Thread-10013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:26:02.272 [DEBUG] [Thread-10013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:26:02.272 [DEBUG] [Thread-10013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:26:02.272 [DEBUG] [Thread-10013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:26:02.296 [INFO] [Thread-10013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:26:02.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:26:02.969 [DEBUG] [Thread-10013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:26:02.969 [DEBUG] [Thread-10013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:26:02.969 [DEBUG] [Thread-10013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:26:03.010 [DEBUG] [Thread-10013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:26:03.010 [DEBUG] [Thread-10013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:26:03.014 [DEBUG] [Thread-10013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:26:03.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:26:03.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:26:03.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:26:03.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:26:03.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:26:03.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:26:03.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:26:03.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:26:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:26:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.351104 -999.00  +22.80  19.30     38   +7.80 1 2 1 1 1   888    0 21.97 257.78 ----- 19.3 19.3 26.8 24.1 29.2 -22.8 28.2 -23.2 26.9 -22.1 27.5 -20.6
2025-12-25T10:26:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:26:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:26:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.351104
2025-12-25T10:26:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:26:03.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:26:03.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:26:03.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:26:03.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:26:03.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:25:45', tmtdew=17.2, humidity=32.47, cloud=0.0, wind=12.39, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:25:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:26:03.043 [DEBUG] [Thread-10013] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:26:03.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-25T10:26:03.140 [DEBUG] [Thread-10016] [transport.py] [_log()] starting thread (client mode): 0xb6b288e0
2025-12-25T10:26:03.140 [DEBUG] [Thread-10016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:26:03.155 [DEBUG] [Thread-10016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:26:03.155 [INFO] [Thread-10016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:26:03.162 [DEBUG] [Thread-10016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] client lang: <none>
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] server lang: <none>
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] kex follows: False
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:26:03.163 [DEBUG] [Thread-10016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:26:03.164 [DEBUG] [Thread-10016] [transport.py] [_log()] Compression: none
2025-12-25T10:26:03.164 [DEBUG] [Thread-10016] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:26:03.219 [DEBUG] [Thread-10016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:26:03.219 [DEBUG] [Thread-10016] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:26:03.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:26:03.220 [DEBUG] [Thread-10016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:26:03.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:26:03.279 [DEBUG] [Thread-10016] [transport.py] [_log()] userauth is OK
2025-12-25T10:26:03.280 [DEBUG] [Thread-10016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:26:03.280 [DEBUG] [Thread-10016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:26:03.280 [DEBUG] [Thread-10016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:26:03.280 [DEBUG] [Thread-10016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:26:03.299 [INFO] [Thread-10016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:26:03.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-25T10:26:03.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:26:04.214 [DEBUG] [Thread-10016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:26:04.215 [DEBUG] [Thread-10016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:26:04.262 [DEBUG] [Thread-10016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:26:04.262 [DEBUG] [Thread-10016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:26:04.271 [DEBUG] [Thread-10016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:26:04.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:26:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:26:04.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:26:04.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:26:04.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:26:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:26:04.308 [DEBUG] [Thread-10016] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:26:15.394 [DEBUG] [Thread-10018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:30.443 [DEBUG] [Thread-10019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:26:34.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:26:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:26:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 26, 17), 17.21, 32.49, 0.0, 7.68, 22.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:26:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:26:17
2025-12-25T10:26:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:26:35.329 [DEBUG] [Thread-10020] [transport.py] [_log()] starting thread (client mode): 0xb6be0850
2025-12-25T10:26:35.329 [DEBUG] [Thread-10020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:26:35.350 [DEBUG] [Thread-10020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:26:35.350 [INFO] [Thread-10020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:26:35.353 [DEBUG] [Thread-10020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:26:35.353 [DEBUG] [Thread-10020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:26:35.353 [DEBUG] [Thread-10020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:26:35.353 [DEBUG] [Thread-10020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:35.353 [DEBUG] [Thread-10020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:35.353 [DEBUG] [Thread-10020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] client lang: <none>
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] server lang: <none>
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] kex follows: False
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] Compression: none
2025-12-25T10:26:35.354 [DEBUG] [Thread-10020] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:26:35.373 [DEBUG] [Thread-10020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:26:35.374 [DEBUG] [Thread-10020] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:26:35.374 [DEBUG] [Thread-10020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:26:35.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:26:35.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:26:35.376 [DEBUG] [Thread-10020] [transport.py] [_log()] userauth is OK
2025-12-25T10:26:35.376 [DEBUG] [Thread-10020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:26:35.376 [DEBUG] [Thread-10020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:26:35.376 [DEBUG] [Thread-10020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:26:35.376 [DEBUG] [Thread-10020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:26:35.400 [INFO] [Thread-10020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:26:35.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:26:35.993 [DEBUG] [Thread-10020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:26:35.994 [DEBUG] [Thread-10020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:26:35.994 [DEBUG] [Thread-10020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:26:36.035 [DEBUG] [Thread-10020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:26:36.035 [DEBUG] [Thread-10020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:26:36.039 [DEBUG] [Thread-10020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:26:36.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:26:36.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:26:36.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:26:36.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:26:36.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:26:36.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:26:36.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:26:36.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:26:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:26:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.351452 -999.00  +22.70  10.48     37   +7.50 1 2 1 1 1   888    0 21.67 250.09 ----- 10.5 10.5 33.2 19.9 29.3 -22.4 28.2 -23.2 27.0 -21.9 27.6 -20.7
2025-12-25T10:26:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:26:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:26:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.351452
2025-12-25T10:26:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:26:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:26:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:26:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:26:36.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:26:36.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:26:17', tmtdew=17.21, humidity=32.49, cloud=0.0, wind=7.68, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:26:05.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:26:36.064 [DEBUG] [Thread-10020] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:26:36.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-25T10:26:36.161 [DEBUG] [Thread-10023] [transport.py] [_log()] starting thread (client mode): 0xb6b2a980
2025-12-25T10:26:36.161 [DEBUG] [Thread-10023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:26:36.175 [DEBUG] [Thread-10023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:26:36.175 [INFO] [Thread-10023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] client lang: <none>
2025-12-25T10:26:36.183 [DEBUG] [Thread-10023] [transport.py] [_log()] server lang: <none>
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] kex follows: False
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] Compression: none
2025-12-25T10:26:36.184 [DEBUG] [Thread-10023] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:26:36.243 [DEBUG] [Thread-10023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:26:36.243 [DEBUG] [Thread-10023] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:26:36.243 [DEBUG] [Thread-10023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:26:36.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:26:36.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:26:36.304 [DEBUG] [Thread-10023] [transport.py] [_log()] userauth is OK
2025-12-25T10:26:36.304 [DEBUG] [Thread-10023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:26:36.304 [DEBUG] [Thread-10023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:26:36.304 [DEBUG] [Thread-10023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:26:36.304 [DEBUG] [Thread-10023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:26:36.323 [INFO] [Thread-10023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:26:36.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-25T10:26:36.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:26:37.157 [DEBUG] [Thread-10023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:26:37.158 [DEBUG] [Thread-10023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:26:37.205 [DEBUG] [Thread-10023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:26:37.206 [DEBUG] [Thread-10023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:26:37.214 [DEBUG] [Thread-10023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:26:37.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:26:37.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-25T10:26:37.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-25T10:26:37.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:26:37.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:26:37.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:26:37.248 [DEBUG] [Thread-10023] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:26:45.473 [DEBUG] [Thread-10025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:26:55.439 [DEBUG] [Thread-10026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:00.522 [DEBUG] [Thread-10027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:02.313 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:02.315 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:27:07.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:27:07.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-25T10:27:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 26, 49), 17.67, 31.98, 0.0, 10.16, 22.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:27:08.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:26:49
2025-12-25T10:27:08.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:27:08.302 [DEBUG] [Thread-10028] [transport.py] [_log()] starting thread (client mode): 0xb6b51690
2025-12-25T10:27:08.302 [DEBUG] [Thread-10028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:27:08.323 [DEBUG] [Thread-10028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:27:08.323 [INFO] [Thread-10028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] client lang: <none>
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] server lang: <none>
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] kex follows: False
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:27:08.326 [DEBUG] [Thread-10028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:27:08.327 [DEBUG] [Thread-10028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:27:08.327 [DEBUG] [Thread-10028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:27:08.327 [DEBUG] [Thread-10028] [transport.py] [_log()] Compression: none
2025-12-25T10:27:08.327 [DEBUG] [Thread-10028] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:27:08.343 [DEBUG] [Thread-10028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:27:08.343 [DEBUG] [Thread-10028] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:27:08.343 [DEBUG] [Thread-10028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:27:08.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:27:08.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:27:08.344 [DEBUG] [Thread-10028] [transport.py] [_log()] userauth is OK
2025-12-25T10:27:08.344 [DEBUG] [Thread-10028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:27:08.344 [DEBUG] [Thread-10028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:27:08.344 [DEBUG] [Thread-10028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:27:08.344 [DEBUG] [Thread-10028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:27:08.372 [INFO] [Thread-10028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:27:08.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:27:09.040 [DEBUG] [Thread-10028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:27:09.040 [DEBUG] [Thread-10028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:27:09.040 [DEBUG] [Thread-10028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:27:09.080 [DEBUG] [Thread-10028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:27:09.080 [DEBUG] [Thread-10028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:27:09.083 [DEBUG] [Thread-10028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:27:09.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:27:09.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:27:09.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:27:09.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:27:09.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:27:09.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:27:09.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.351799 -999.00  +22.70  12.88     37   +7.50 1 2 1 1 1   888    0 21.37 239.20 ----- 12.9 12.9 37.8 22.2 29.4 -22.6 28.4 -23.4 27.1 -20.4 27.7 -20.1
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.351799
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:27:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:26:49', tmtdew=17.67, humidity=31.98, cloud=0.0, wind=10.16, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:26:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:27:09.099 [DEBUG] [Thread-10028] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:27:09.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-25T10:27:09.182 [DEBUG] [Thread-10031] [transport.py] [_log()] starting thread (client mode): 0xb6bab8e0
2025-12-25T10:27:09.182 [DEBUG] [Thread-10031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:27:09.197 [DEBUG] [Thread-10031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:27:09.197 [INFO] [Thread-10031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] client lang: <none>
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] server lang: <none>
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] kex follows: False
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] Compression: none
2025-12-25T10:27:09.205 [DEBUG] [Thread-10031] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:27:09.263 [DEBUG] [Thread-10031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:27:09.263 [DEBUG] [Thread-10031] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:27:09.263 [DEBUG] [Thread-10031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:27:09.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:27:09.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:27:09.320 [DEBUG] [Thread-10031] [transport.py] [_log()] userauth is OK
2025-12-25T10:27:09.320 [DEBUG] [Thread-10031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:27:09.320 [DEBUG] [Thread-10031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:27:09.320 [DEBUG] [Thread-10031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:27:09.320 [DEBUG] [Thread-10031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:27:09.334 [INFO] [Thread-10031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:27:09.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-25T10:27:09.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:27:10.173 [DEBUG] [Thread-10031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:27:10.174 [DEBUG] [Thread-10031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:27:10.222 [DEBUG] [Thread-10031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:27:10.222 [DEBUG] [Thread-10031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:27:10.231 [DEBUG] [Thread-10031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:27:10.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:27:10.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-25T10:27:10.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-25T10:27:10.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:27:10.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:27:10.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:27:10.268 [DEBUG] [Thread-10031] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:27:15.552 [DEBUG] [Thread-10033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:30.607 [DEBUG] [Thread-10034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:40.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:27:40.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:27:40.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-25T10:27:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 27, 21), 17.43, 32.5, 0.0, 14.1, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:27:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:27:21
2025-12-25T10:27:41.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:27:41.272 [DEBUG] [Thread-10035] [transport.py] [_log()] starting thread (client mode): 0xb6be0370
2025-12-25T10:27:41.272 [DEBUG] [Thread-10035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:27:41.291 [DEBUG] [Thread-10035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:27:41.292 [INFO] [Thread-10035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:27:41.294 [DEBUG] [Thread-10035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] client lang: <none>
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] server lang: <none>
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] kex follows: False
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:27:41.295 [DEBUG] [Thread-10035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:27:41.296 [DEBUG] [Thread-10035] [transport.py] [_log()] Compression: none
2025-12-25T10:27:41.296 [DEBUG] [Thread-10035] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:27:41.311 [DEBUG] [Thread-10035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:27:41.312 [DEBUG] [Thread-10035] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:27:41.312 [DEBUG] [Thread-10035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:27:41.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:27:41.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:27:41.314 [DEBUG] [Thread-10035] [transport.py] [_log()] userauth is OK
2025-12-25T10:27:41.314 [DEBUG] [Thread-10035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:27:41.314 [DEBUG] [Thread-10035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:27:41.314 [DEBUG] [Thread-10035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:27:41.314 [DEBUG] [Thread-10035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:27:41.335 [INFO] [Thread-10035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:27:41.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:27:41.987 [DEBUG] [Thread-10035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:27:41.987 [DEBUG] [Thread-10035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:27:41.988 [DEBUG] [Thread-10035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:27:42.028 [DEBUG] [Thread-10035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:27:42.028 [DEBUG] [Thread-10035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:27:42.032 [DEBUG] [Thread-10035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:27:42.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:27:42.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:27:42.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:27:42.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:27:42.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:27:42.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:27:42.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:27:42.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:27:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:27:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.352146 -999.00  +22.50  15.85     38   +7.70 1 2 1 1 1   888    0 21.47 228.94 ----- 15.8 15.8 48.8 25.1 29.3 -22.2 28.5 -23.1 27.2 -20.7 27.7 -21.2
2025-12-25T10:27:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:27:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:27:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.352146
2025-12-25T10:27:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:27:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:27:42.058 [DEBUG] [Thread-10035] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:27:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:27:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:27:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:27:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:27:21', tmtdew=17.43, humidity=32.5, cloud=0.0, wind=14.1, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:27:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:27:42.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-25T10:27:42.150 [DEBUG] [Thread-10038] [transport.py] [_log()] starting thread (client mode): 0xb6b2a980
2025-12-25T10:27:42.150 [DEBUG] [Thread-10038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:27:42.165 [DEBUG] [Thread-10038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:27:42.165 [INFO] [Thread-10038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:27:42.172 [DEBUG] [Thread-10038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] client lang: <none>
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] server lang: <none>
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] kex follows: False
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:27:42.173 [DEBUG] [Thread-10038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:27:42.174 [DEBUG] [Thread-10038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:27:42.174 [DEBUG] [Thread-10038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:27:42.174 [DEBUG] [Thread-10038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:27:42.174 [DEBUG] [Thread-10038] [transport.py] [_log()] Compression: none
2025-12-25T10:27:42.174 [DEBUG] [Thread-10038] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:27:42.232 [DEBUG] [Thread-10038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:27:42.233 [DEBUG] [Thread-10038] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:27:42.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:27:42.234 [DEBUG] [Thread-10038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:27:42.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:27:42.289 [DEBUG] [Thread-10038] [transport.py] [_log()] userauth is OK
2025-12-25T10:27:42.289 [DEBUG] [Thread-10038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:27:42.289 [DEBUG] [Thread-10038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:27:42.289 [DEBUG] [Thread-10038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:27:42.289 [DEBUG] [Thread-10038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:27:42.308 [INFO] [Thread-10038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:27:42.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-25T10:27:42.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:27:43.158 [DEBUG] [Thread-10038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:27:43.158 [DEBUG] [Thread-10038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:27:43.206 [DEBUG] [Thread-10038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:27:43.206 [DEBUG] [Thread-10038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:27:43.215 [DEBUG] [Thread-10038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:27:43.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:27:43.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-25T10:27:43.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:27:43.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:27:43.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:27:43.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:27:43.246 [DEBUG] [Thread-10038] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:27:45.639 [DEBUG] [Thread-10040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:27:55.485 [DEBUG] [Thread-10041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:00.683 [DEBUG] [Thread-10042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:02.454 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:02.455 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:13.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:28:13.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:28:13.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-25T10:28:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 27, 53), 17.19, 32.9, 0.0, 15.55, 22.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:28:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:27:53
2025-12-25T10:28:14.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:28:14.252 [DEBUG] [Thread-10043] [transport.py] [_log()] starting thread (client mode): 0xb6b4ad10
2025-12-25T10:28:14.252 [DEBUG] [Thread-10043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:28:14.271 [DEBUG] [Thread-10043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:28:14.271 [INFO] [Thread-10043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:28:14.274 [DEBUG] [Thread-10043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] client lang: <none>
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] server lang: <none>
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] kex follows: False
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] Compression: none
2025-12-25T10:28:14.275 [DEBUG] [Thread-10043] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:28:14.283 [DEBUG] [Thread-10043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:28:14.283 [DEBUG] [Thread-10043] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:28:14.284 [DEBUG] [Thread-10043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:28:14.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:28:14.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:28:14.285 [DEBUG] [Thread-10043] [transport.py] [_log()] userauth is OK
2025-12-25T10:28:14.285 [DEBUG] [Thread-10043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:28:14.285 [DEBUG] [Thread-10043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:28:14.285 [DEBUG] [Thread-10043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:28:14.285 [DEBUG] [Thread-10043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:28:14.303 [INFO] [Thread-10043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:28:14.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:28:14.877 [DEBUG] [Thread-10043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:28:14.877 [DEBUG] [Thread-10043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:28:14.877 [DEBUG] [Thread-10043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:28:14.918 [DEBUG] [Thread-10043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:28:14.918 [DEBUG] [Thread-10043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:28:14.922 [DEBUG] [Thread-10043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:28:14.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:28:14.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:28:14.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:28:14.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:28:14.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:28:14.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:28:14.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:28:14.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:28:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:28:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.352840 -999.00  +22.80  18.71     39   +8.30 1 2 1 1 1   888    0 20.05 188.09 ----- 18.7 18.7 13.2 24.5 29.4 -23.1 28.5 -23.5 27.3 -20.5 27.9 -20.0
2025-12-25T10:28:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:28:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:28:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.352840
2025-12-25T10:28:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:28:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:28:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:28:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:28:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:28:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:27:53', tmtdew=17.19, humidity=32.9, cloud=0.0, wind=15.55, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:28:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:28:14.947 [DEBUG] [Thread-10043] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:28:15.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-25T10:28:15.041 [DEBUG] [Thread-10046] [transport.py] [_log()] starting thread (client mode): 0xb6be0370
2025-12-25T10:28:15.041 [DEBUG] [Thread-10046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:28:15.055 [DEBUG] [Thread-10046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:28:15.056 [INFO] [Thread-10046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:28:15.063 [DEBUG] [Thread-10046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] client lang: <none>
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] server lang: <none>
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] kex follows: False
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] Compression: none
2025-12-25T10:28:15.064 [DEBUG] [Thread-10046] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:28:15.125 [DEBUG] [Thread-10046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:28:15.126 [DEBUG] [Thread-10046] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:28:15.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:28:15.127 [DEBUG] [Thread-10046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:28:15.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:28:15.181 [DEBUG] [Thread-10046] [transport.py] [_log()] userauth is OK
2025-12-25T10:28:15.181 [DEBUG] [Thread-10046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:28:15.182 [DEBUG] [Thread-10046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:28:15.182 [DEBUG] [Thread-10046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:28:15.182 [DEBUG] [Thread-10046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:28:15.201 [INFO] [Thread-10046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:28:15.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-25T10:28:15.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:28:15.719 [DEBUG] [Thread-10048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:16.040 [DEBUG] [Thread-10046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:28:16.040 [DEBUG] [Thread-10046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:28:16.088 [DEBUG] [Thread-10046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:28:16.088 [DEBUG] [Thread-10046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:28:16.097 [DEBUG] [Thread-10046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:28:16.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:28:16.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-25T10:28:16.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-25T10:28:16.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:28:16.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:28:16.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:28:16.131 [DEBUG] [Thread-10046] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:28:30.762 [DEBUG] [Thread-10049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:45.796 [DEBUG] [Thread-10050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:28:46.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:28:46.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:28:46.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-25T10:28:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 28, 25), 17.85, 31.59, 0.0, 23.27, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:28:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:28:25
2025-12-25T10:28:46.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:28:47.116 [DEBUG] [Thread-10051] [transport.py] [_log()] starting thread (client mode): 0xb6b60130
2025-12-25T10:28:47.116 [DEBUG] [Thread-10051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:28:47.130 [DEBUG] [Thread-10051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:28:47.130 [INFO] [Thread-10051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] client lang: <none>
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] server lang: <none>
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] kex follows: False
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] Compression: none
2025-12-25T10:28:47.133 [DEBUG] [Thread-10051] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:28:47.149 [DEBUG] [Thread-10051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:28:47.149 [DEBUG] [Thread-10051] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:28:47.150 [DEBUG] [Thread-10051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:28:47.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:28:47.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:28:47.151 [DEBUG] [Thread-10051] [transport.py] [_log()] userauth is OK
2025-12-25T10:28:47.151 [DEBUG] [Thread-10051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:28:47.152 [DEBUG] [Thread-10051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:28:47.152 [DEBUG] [Thread-10051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:28:47.152 [DEBUG] [Thread-10051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:28:47.169 [INFO] [Thread-10051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:28:47.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:28:47.768 [DEBUG] [Thread-10051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:28:47.768 [DEBUG] [Thread-10051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:28:47.768 [DEBUG] [Thread-10051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:28:47.809 [DEBUG] [Thread-10051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:28:47.809 [DEBUG] [Thread-10051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:28:47.811 [DEBUG] [Thread-10051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:28:47.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:28:47.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:28:47.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:28:47.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:28:47.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:28:47.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:28:47.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:28:47.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:28:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:28:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.353188 -999.00  +22.90  15.02     39   +8.40 1 2 1 1 1   888    0 20.29 191.30 ----- 15.0 15.0 19.7 26.2 29.4 -22.3 28.4 -22.5 27.3 -19.6 27.8 -22.6
2025-12-25T10:28:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:28:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:28:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.353188
2025-12-25T10:28:47.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:28:47.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:28:47.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:28:47.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:28:47.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:28:47.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:28:25', tmtdew=17.85, humidity=31.59, cloud=0.0, wind=23.27, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:28:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:28:47.835 [DEBUG] [Thread-10051] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:28:47.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:28:55.549 [DEBUG] [Thread-10054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:00.834 [DEBUG] [Thread-10055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:02.593 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:02.594 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:15.873 [DEBUG] [Thread-10056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:30.909 [DEBUG] [Thread-10057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:45.938 [DEBUG] [Thread-10058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:29:55.602 [DEBUG] [Thread-10059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:00.974 [DEBUG] [Thread-10060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:02.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:02.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:16.013 [DEBUG] [Thread-10061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:31.047 [DEBUG] [Thread-10062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:46.084 [DEBUG] [Thread-10063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:55.659 [DEBUG] [Thread-10064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:30:59.541 [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-25T10:31:01.117 [DEBUG] [Thread-10065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:31:02.873 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:31:02.873 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:31:16.150 [DEBUG] [Thread-10066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:31:29.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:31:29.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:31:29.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:31:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 31, 6), 17.71, 31.78, 0.0, 16.07, 23.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:31:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:31:06
2025-12-25T10:31:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:31:30.547 [DEBUG] [Thread-10067] [transport.py] [_log()] starting thread (client mode): 0xb6baa830
2025-12-25T10:31:30.547 [DEBUG] [Thread-10067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:31:30.568 [DEBUG] [Thread-10067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:31:30.568 [INFO] [Thread-10067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:31:30.572 [DEBUG] [Thread-10067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:31:30.572 [DEBUG] [Thread-10067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:31:30.572 [DEBUG] [Thread-10067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] client lang: <none>
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] server lang: <none>
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] kex follows: False
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:31:30.573 [DEBUG] [Thread-10067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:31:30.574 [DEBUG] [Thread-10067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:31:30.574 [DEBUG] [Thread-10067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:31:30.574 [DEBUG] [Thread-10067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:31:30.574 [DEBUG] [Thread-10067] [transport.py] [_log()] Compression: none
2025-12-25T10:31:30.574 [DEBUG] [Thread-10067] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:31:30.592 [DEBUG] [Thread-10067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:31:30.593 [DEBUG] [Thread-10067] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:31:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:31:30.594 [DEBUG] [Thread-10067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:31:30.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:31:30.637 [DEBUG] [Thread-10067] [transport.py] [_log()] userauth is OK
2025-12-25T10:31:30.637 [DEBUG] [Thread-10067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:31:30.637 [DEBUG] [Thread-10067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:31:30.637 [DEBUG] [Thread-10067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:31:30.637 [DEBUG] [Thread-10067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:31:30.671 [INFO] [Thread-10067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:31:30.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:31:31.190 [DEBUG] [Thread-10069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:31:31.446 [DEBUG] [Thread-10067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:31:31.446 [DEBUG] [Thread-10067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:31:31.447 [DEBUG] [Thread-10067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:31:31.487 [DEBUG] [Thread-10067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:31:31.487 [DEBUG] [Thread-10067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:31:31.491 [DEBUG] [Thread-10067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:31:31.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:31:31.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:31:31.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:31:31.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:31:31.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:31:31.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:31:31.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:31:31.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:31:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:31:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.354577 -999.00  +23.40  27.42     37   +8.10 1 2 1 1 1   888    0 19.20 143.74 ----- 27.4 27.4 309.2 36.1 29.4 -22.1 28.6 -22.0 27.5 -19.8 27.9 -20.4
2025-12-25T10:31:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:31:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:31:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.354577
2025-12-25T10:31:31.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:31:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:31:31.514 [DEBUG] [Thread-10067] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:31:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:31:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:31:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:31:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:31:06', tmtdew=17.71, humidity=31.78, cloud=0.0, wind=16.07, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:30:35.453', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:31:31.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-25T10:31:31.607 [DEBUG] [Thread-10071] [transport.py] [_log()] starting thread (client mode): 0xb6b4b790
2025-12-25T10:31:31.607 [DEBUG] [Thread-10071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:31:31.622 [DEBUG] [Thread-10071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:31:31.622 [INFO] [Thread-10071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:31:31.629 [DEBUG] [Thread-10071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] client lang: <none>
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] server lang: <none>
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] kex follows: False
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] Compression: none
2025-12-25T10:31:31.630 [DEBUG] [Thread-10071] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:31:31.687 [DEBUG] [Thread-10071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:31:31.688 [DEBUG] [Thread-10071] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:31:31.688 [DEBUG] [Thread-10071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:31:31.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:31:31.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:31:31.743 [DEBUG] [Thread-10071] [transport.py] [_log()] userauth is OK
2025-12-25T10:31:31.743 [DEBUG] [Thread-10071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:31:31.743 [DEBUG] [Thread-10071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:31:31.743 [DEBUG] [Thread-10071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:31:31.743 [DEBUG] [Thread-10071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:31:31.763 [INFO] [Thread-10071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:31:31.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-25T10:31:31.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:31:32.601 [DEBUG] [Thread-10071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:31:32.601 [DEBUG] [Thread-10071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:31:32.649 [DEBUG] [Thread-10071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:31:32.649 [DEBUG] [Thread-10071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:31:32.658 [DEBUG] [Thread-10071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:31:32.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:31:32.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-25T10:31:32.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:31:32.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:31:32.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:31:32.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:31:32.695 [DEBUG] [Thread-10071] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:31:46.223 [DEBUG] [Thread-10073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:31:55.713 [DEBUG] [Thread-10074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:01.277 [DEBUG] [Thread-10075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:02.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:32:02.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:32:02.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:32:03.013 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:03.014 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:03.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 31, 38), 17.63, 31.97, 0.0, 16.41, 23.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:32:03.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:31:38
2025-12-25T10:32:03.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:32:03.716 [DEBUG] [Thread-10076] [transport.py] [_log()] starting thread (client mode): 0xb6b62c50
2025-12-25T10:32:03.716 [DEBUG] [Thread-10076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:32:03.736 [DEBUG] [Thread-10076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:32:03.736 [INFO] [Thread-10076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] client lang: <none>
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] server lang: <none>
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] kex follows: False
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:32:03.739 [DEBUG] [Thread-10076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:32:03.740 [DEBUG] [Thread-10076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:32:03.740 [DEBUG] [Thread-10076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:32:03.740 [DEBUG] [Thread-10076] [transport.py] [_log()] Compression: none
2025-12-25T10:32:03.740 [DEBUG] [Thread-10076] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:32:03.755 [DEBUG] [Thread-10076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:32:03.755 [DEBUG] [Thread-10076] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:32:03.756 [DEBUG] [Thread-10076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:32:03.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:32:03.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:32:03.757 [DEBUG] [Thread-10076] [transport.py] [_log()] userauth is OK
2025-12-25T10:32:03.757 [DEBUG] [Thread-10076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:32:03.757 [DEBUG] [Thread-10076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:32:03.757 [DEBUG] [Thread-10076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:32:03.757 [DEBUG] [Thread-10076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:32:03.777 [INFO] [Thread-10076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:32:03.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:32:04.463 [DEBUG] [Thread-10076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:32:04.464 [DEBUG] [Thread-10076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:32:04.464 [DEBUG] [Thread-10076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:32:04.505 [DEBUG] [Thread-10076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:32:04.505 [DEBUG] [Thread-10076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:32:04.508 [DEBUG] [Thread-10076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:32:04.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:32:04.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:32:04.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:32:04.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:32:04.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:32:04.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:32:04.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:32:04.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:32:04.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:32:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.354924 -999.00  +23.20  18.31     37   +8.00 1 2 1 1 1   888    0 18.88 130.53 ----- 18.3 18.3 319.9 34.1 29.3 -22.9 28.6 -23.3 27.5 -19.3 28.0 -20.3
2025-12-25T10:32:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:32:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:32:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.354924
2025-12-25T10:32:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:32:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:32:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:32:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:32:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:32:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:31:38', tmtdew=17.63, humidity=31.97, cloud=0.0, wind=16.41, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:31:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:32:04.535 [DEBUG] [Thread-10076] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:32:04.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-25T10:32:04.628 [DEBUG] [Thread-10079] [transport.py] [_log()] starting thread (client mode): 0xb6b50700
2025-12-25T10:32:04.629 [DEBUG] [Thread-10079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:32:04.644 [DEBUG] [Thread-10079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:32:04.644 [INFO] [Thread-10079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:32:04.651 [DEBUG] [Thread-10079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:32:04.651 [DEBUG] [Thread-10079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:32:04.651 [DEBUG] [Thread-10079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:32:04.651 [DEBUG] [Thread-10079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:04.651 [DEBUG] [Thread-10079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:04.651 [DEBUG] [Thread-10079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] client lang: <none>
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] server lang: <none>
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] kex follows: False
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] Compression: none
2025-12-25T10:32:04.652 [DEBUG] [Thread-10079] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:32:04.721 [DEBUG] [Thread-10079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:32:04.722 [DEBUG] [Thread-10079] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:32:04.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:32:04.723 [DEBUG] [Thread-10079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:32:04.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:32:04.783 [DEBUG] [Thread-10079] [transport.py] [_log()] userauth is OK
2025-12-25T10:32:04.784 [DEBUG] [Thread-10079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:32:04.784 [DEBUG] [Thread-10079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:32:04.784 [DEBUG] [Thread-10079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:32:04.784 [DEBUG] [Thread-10079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:32:04.804 [INFO] [Thread-10079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:32:04.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-25T10:32:04.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:32:05.655 [DEBUG] [Thread-10079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:32:05.655 [DEBUG] [Thread-10079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:32:05.704 [DEBUG] [Thread-10079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:32:05.704 [DEBUG] [Thread-10079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:32:05.713 [DEBUG] [Thread-10079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:32:05.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:32:05.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-25T10:32:05.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:32:05.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:32:05.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:32:05.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:32:05.750 [DEBUG] [Thread-10079] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:32:16.306 [DEBUG] [Thread-10081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:31.346 [DEBUG] [Thread-10082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:35.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:32:35.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:32:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:32:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 32, 10), 17.31, 32.65, 0.0, 14.59, 23.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:32:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:32:10
2025-12-25T10:32:36.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:32:36.739 [DEBUG] [Thread-10083] [transport.py] [_log()] starting thread (client mode): 0xb6bb9180
2025-12-25T10:32:36.739 [DEBUG] [Thread-10083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:32:36.760 [DEBUG] [Thread-10083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:32:36.760 [INFO] [Thread-10083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] client lang: <none>
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] server lang: <none>
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] kex follows: False
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] Compression: none
2025-12-25T10:32:36.763 [DEBUG] [Thread-10083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:32:36.780 [DEBUG] [Thread-10083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:32:36.781 [DEBUG] [Thread-10083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:32:36.781 [DEBUG] [Thread-10083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:32:36.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:32:36.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:32:36.784 [DEBUG] [Thread-10083] [transport.py] [_log()] userauth is OK
2025-12-25T10:32:36.784 [DEBUG] [Thread-10083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:32:36.784 [DEBUG] [Thread-10083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:32:36.784 [DEBUG] [Thread-10083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:32:36.784 [DEBUG] [Thread-10083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:32:36.802 [INFO] [Thread-10083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:32:36.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:32:37.545 [DEBUG] [Thread-10083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:32:37.546 [DEBUG] [Thread-10083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:32:37.546 [DEBUG] [Thread-10083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:32:37.587 [DEBUG] [Thread-10083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:32:37.587 [DEBUG] [Thread-10083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:32:37.590 [DEBUG] [Thread-10083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:32:37.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:32:37.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:32:37.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:32:37.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:32:37.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:32:37.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:32:37.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:32:37.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:32:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:32:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.355271 -999.00  +22.50  16.21     39   +8.00 1 2 1 1 1   888    0 18.13 116.47 ----- 16.2 16.2 17.0 21.1 29.3 -23.5 28.4 -23.5 27.4 -20.6 27.6 -26.6
2025-12-25T10:32:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:32:37.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:32:37.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.355271
2025-12-25T10:32:37.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:32:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:32:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:32:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:32:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:32:37.615 [DEBUG] [Thread-10083] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:32:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:32:10', tmtdew=17.31, humidity=32.65, cloud=0.0, wind=14.59, temperature=23.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:31:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:32:37.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-25T10:32:37.708 [DEBUG] [Thread-10086] [transport.py] [_log()] starting thread (client mode): 0xb6beb3d0
2025-12-25T10:32:37.708 [DEBUG] [Thread-10086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:32:37.723 [DEBUG] [Thread-10086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:32:37.723 [INFO] [Thread-10086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:32:37.731 [DEBUG] [Thread-10086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:32:37.731 [DEBUG] [Thread-10086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] client lang: <none>
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] server lang: <none>
2025-12-25T10:32:37.732 [DEBUG] [Thread-10086] [transport.py] [_log()] kex follows: False
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] Compression: none
2025-12-25T10:32:37.733 [DEBUG] [Thread-10086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:32:37.792 [DEBUG] [Thread-10086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:32:37.792 [DEBUG] [Thread-10086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:32:37.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:32:37.793 [DEBUG] [Thread-10086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:32:37.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:32:37.848 [DEBUG] [Thread-10086] [transport.py] [_log()] userauth is OK
2025-12-25T10:32:37.848 [DEBUG] [Thread-10086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:32:37.848 [DEBUG] [Thread-10086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:32:37.848 [DEBUG] [Thread-10086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:32:37.848 [DEBUG] [Thread-10086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:32:37.868 [INFO] [Thread-10086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:32:37.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:32:37.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:32:38.732 [DEBUG] [Thread-10086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:32:38.732 [DEBUG] [Thread-10086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:32:38.780 [DEBUG] [Thread-10086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:32:38.780 [DEBUG] [Thread-10086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:32:38.789 [DEBUG] [Thread-10086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:32:38.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:32:38.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-25T10:32:38.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-25T10:32:38.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:32:38.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:32:38.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:32:38.826 [DEBUG] [Thread-10086] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:32:46.384 [DEBUG] [Thread-10088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:32:55.764 [DEBUG] [Thread-10089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:01.433 [DEBUG] [Thread-10090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:03.153 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:03.154 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:08.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:33:08.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:33:08.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-25T10:33:09.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 32, 42), 17.15, 33.1, 0.0, 17.73, 23.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:33:09.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:32:42
2025-12-25T10:33:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:33:09.819 [DEBUG] [Thread-10091] [transport.py] [_log()] starting thread (client mode): 0xb6bb8d30
2025-12-25T10:33:09.820 [DEBUG] [Thread-10091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:33:09.839 [DEBUG] [Thread-10091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:33:09.840 [INFO] [Thread-10091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] client lang: <none>
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] server lang: <none>
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] kex follows: False
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:33:09.841 [DEBUG] [Thread-10091] [transport.py] [_log()] Compression: none
2025-12-25T10:33:09.842 [DEBUG] [Thread-10091] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:33:09.855 [DEBUG] [Thread-10091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:33:09.855 [DEBUG] [Thread-10091] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:33:09.856 [DEBUG] [Thread-10091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:33:09.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:33:09.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:33:09.858 [DEBUG] [Thread-10091] [transport.py] [_log()] userauth is OK
2025-12-25T10:33:09.858 [DEBUG] [Thread-10091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:33:09.858 [DEBUG] [Thread-10091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:33:09.858 [DEBUG] [Thread-10091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:33:09.858 [DEBUG] [Thread-10091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:33:09.878 [INFO] [Thread-10091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:33:09.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:33:10.521 [DEBUG] [Thread-10091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:33:10.521 [DEBUG] [Thread-10091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:33:10.522 [DEBUG] [Thread-10091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:33:10.562 [DEBUG] [Thread-10091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:33:10.562 [DEBUG] [Thread-10091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:33:10.566 [DEBUG] [Thread-10091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:33:10.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:33:10.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:33:10.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:33:10.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:33:10.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:33:10.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:33:10.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:33:10.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.355965 -999.00  +22.50  13.51     39   +8.20 1 2 1 1 1   888    0 17.45 85.23 ----- 13.5 13.5 0.7 21.5 29.2 -23.2 28.4 -22.5 27.3 -20.6 27.5 -24.2
2025-12-25T10:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:33:10.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.355965
2025-12-25T10:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:33:10.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:33:10.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:32:42', tmtdew=17.15, humidity=33.1, cloud=0.0, wind=17.73, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:32:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:33:10.592 [DEBUG] [Thread-10091] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:33:10.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-25T10:33:10.685 [DEBUG] [Thread-10094] [transport.py] [_log()] starting thread (client mode): 0xb6bbb100
2025-12-25T10:33:10.686 [DEBUG] [Thread-10094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:33:10.700 [DEBUG] [Thread-10094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:33:10.701 [INFO] [Thread-10094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:33:10.708 [DEBUG] [Thread-10094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:33:10.708 [DEBUG] [Thread-10094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:33:10.709 [DEBUG] [Thread-10094] [transport.py] [_log()] client lang: <none>
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] server lang: <none>
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] kex follows: False
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:33:10.710 [DEBUG] [Thread-10094] [transport.py] [_log()] Compression: none
2025-12-25T10:33:10.711 [DEBUG] [Thread-10094] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:33:10.769 [DEBUG] [Thread-10094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:33:10.769 [DEBUG] [Thread-10094] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:33:10.770 [DEBUG] [Thread-10094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:33:10.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:33:10.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:33:10.829 [DEBUG] [Thread-10094] [transport.py] [_log()] userauth is OK
2025-12-25T10:33:10.829 [DEBUG] [Thread-10094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:33:10.829 [DEBUG] [Thread-10094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:33:10.829 [DEBUG] [Thread-10094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:33:10.830 [DEBUG] [Thread-10094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:33:10.848 [INFO] [Thread-10094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:33:10.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-25T10:33:10.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:33:11.722 [DEBUG] [Thread-10094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:33:11.722 [DEBUG] [Thread-10094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:33:11.771 [DEBUG] [Thread-10094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:33:11.771 [DEBUG] [Thread-10094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:33:11.781 [DEBUG] [Thread-10094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:33:11.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:33:11.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:33:11.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:33:11.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:33:11.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:33:11.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:33:11.817 [DEBUG] [Thread-10094] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:33:16.465 [DEBUG] [Thread-10096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:31.508 [DEBUG] [Thread-10097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:33:41.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:33:41.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-25T10:33:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 33, 14), 17.58, 32.2, 0.0, 19.87, 23.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:33:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:33:14
2025-12-25T10:33:42.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:33:42.814 [DEBUG] [Thread-10098] [transport.py] [_log()] starting thread (client mode): 0xb6bba6b0
2025-12-25T10:33:42.814 [DEBUG] [Thread-10098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:33:42.833 [DEBUG] [Thread-10098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:33:42.833 [INFO] [Thread-10098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] client lang: <none>
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] server lang: <none>
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] kex follows: False
2025-12-25T10:33:42.836 [DEBUG] [Thread-10098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:33:42.837 [DEBUG] [Thread-10098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:33:42.837 [DEBUG] [Thread-10098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:33:42.837 [DEBUG] [Thread-10098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:33:42.837 [DEBUG] [Thread-10098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:33:42.837 [DEBUG] [Thread-10098] [transport.py] [_log()] Compression: none
2025-12-25T10:33:42.837 [DEBUG] [Thread-10098] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:33:42.854 [DEBUG] [Thread-10098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:33:42.854 [DEBUG] [Thread-10098] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:33:42.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:33:42.855 [DEBUG] [Thread-10098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:33:42.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:33:42.857 [DEBUG] [Thread-10098] [transport.py] [_log()] userauth is OK
2025-12-25T10:33:42.858 [DEBUG] [Thread-10098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:33:42.858 [DEBUG] [Thread-10098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:33:42.858 [DEBUG] [Thread-10098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:33:42.858 [DEBUG] [Thread-10098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:33:42.876 [INFO] [Thread-10098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:33:42.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:33:43.640 [DEBUG] [Thread-10098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:33:43.641 [DEBUG] [Thread-10098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:33:43.641 [DEBUG] [Thread-10098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:33:43.682 [DEBUG] [Thread-10098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:33:43.682 [DEBUG] [Thread-10098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:33:43.685 [DEBUG] [Thread-10098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:33:43.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:33:43.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:33:43.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:33:43.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:33:43.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:33:43.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:33:43.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:33:43.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:33:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:33:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.356313 -999.00  +22.50  17.92     39   +8.00 1 2 1 1 1   888    0 16.55 64.65 ----- 17.9 17.9 332.0 23.8 29.3 -22.4 28.4 -22.9 27.3 -20.1 27.6 -21.5
2025-12-25T10:33:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:33:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.356313
2025-12-25T10:33:43.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:33:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:33:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:33:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:33:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:33:43.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:33:14', tmtdew=17.58, humidity=32.2, cloud=0.0, wind=19.87, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:33:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:33:43.709 [DEBUG] [Thread-10098] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:33:43.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-25T10:33:43.803 [DEBUG] [Thread-10101] [transport.py] [_log()] starting thread (client mode): 0xb6bbac20
2025-12-25T10:33:43.803 [DEBUG] [Thread-10101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:33:43.818 [DEBUG] [Thread-10101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:33:43.819 [INFO] [Thread-10101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:33:43.828 [DEBUG] [Thread-10101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:33:43.828 [DEBUG] [Thread-10101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:33:43.828 [DEBUG] [Thread-10101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:33:43.828 [DEBUG] [Thread-10101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:43.828 [DEBUG] [Thread-10101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] client lang: <none>
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] server lang: <none>
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] kex follows: False
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] Compression: none
2025-12-25T10:33:43.829 [DEBUG] [Thread-10101] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:33:43.884 [DEBUG] [Thread-10101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:33:43.885 [DEBUG] [Thread-10101] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:33:43.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:33:43.886 [DEBUG] [Thread-10101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:33:43.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:33:43.940 [DEBUG] [Thread-10101] [transport.py] [_log()] userauth is OK
2025-12-25T10:33:43.940 [DEBUG] [Thread-10101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:33:43.940 [DEBUG] [Thread-10101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:33:43.940 [DEBUG] [Thread-10101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:33:43.940 [DEBUG] [Thread-10101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:33:43.960 [INFO] [Thread-10101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:33: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-25T10:33:43.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:33:44.818 [DEBUG] [Thread-10101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:33:44.818 [DEBUG] [Thread-10101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:33:44.866 [DEBUG] [Thread-10101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:33:44.866 [DEBUG] [Thread-10101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:33:44.875 [DEBUG] [Thread-10101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:33:44.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:33:44.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-25T10:33:44.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-25T10:33:44.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:33:44.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:33:44.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:33:44.912 [DEBUG] [Thread-10101] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:33:46.539 [DEBUG] [Thread-10103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:33:55.829 [DEBUG] [Thread-10104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:01.592 [DEBUG] [Thread-10105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:03.293 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:03.295 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:34:14.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:34:14.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:34:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 33, 46), 18.14, 31.01, 0.0, 14.87, 23.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:34:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:33:46
2025-12-25T10:34:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:34:15.959 [DEBUG] [Thread-10106] [transport.py] [_log()] starting thread (client mode): 0xb6beb460
2025-12-25T10:34:15.959 [DEBUG] [Thread-10106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:34:15.979 [DEBUG] [Thread-10106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:34:15.979 [INFO] [Thread-10106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] client lang: <none>
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] server lang: <none>
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] kex follows: False
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:34:15.982 [DEBUG] [Thread-10106] [transport.py] [_log()] Compression: none
2025-12-25T10:34:15.983 [DEBUG] [Thread-10106] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:34:16.003 [DEBUG] [Thread-10106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:34:16.003 [DEBUG] [Thread-10106] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:34:16.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:34:16.003 [DEBUG] [Thread-10106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:34:16.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:34:16.005 [DEBUG] [Thread-10106] [transport.py] [_log()] userauth is OK
2025-12-25T10:34:16.005 [DEBUG] [Thread-10106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:34:16.005 [DEBUG] [Thread-10106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:34:16.005 [DEBUG] [Thread-10106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:34:16.005 [DEBUG] [Thread-10106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:34:16.022 [INFO] [Thread-10106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:34:16.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:34:16.599 [DEBUG] [Thread-10106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:34:16.599 [DEBUG] [Thread-10106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:34:16.599 [DEBUG] [Thread-10106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:34:16.626 [DEBUG] [Thread-10108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:16.640 [DEBUG] [Thread-10106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:34:16.640 [DEBUG] [Thread-10106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:34:16.643 [DEBUG] [Thread-10106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:34:16.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:34:16.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:34:16.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:34:16.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:34:16.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:34:16.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:34:16.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.356660 -999.00  +22.30  12.74     39   +7.80 1 2 1 1 1   888    0 16.06 46.94 ----- 12.7 12.7 3.2 23.5 29.4 -22.8 28.6 -21.0 27.4 -19.7 27.8 -20.4
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.356660
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:34:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:33:46', tmtdew=18.14, humidity=31.01, cloud=0.0, wind=14.87, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:33:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:34:16.661 [DEBUG] [Thread-10106] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:34:16.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-25T10:34:16.744 [DEBUG] [Thread-10110] [transport.py] [_log()] starting thread (client mode): 0xb6b4b430
2025-12-25T10:34:16.744 [DEBUG] [Thread-10110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:34:16.760 [DEBUG] [Thread-10110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:34:16.760 [INFO] [Thread-10110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:34:16.767 [DEBUG] [Thread-10110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] client lang: <none>
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] server lang: <none>
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] kex follows: False
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] Compression: none
2025-12-25T10:34:16.768 [DEBUG] [Thread-10110] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:34:16.827 [DEBUG] [Thread-10110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:34:16.827 [DEBUG] [Thread-10110] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:34:16.827 [DEBUG] [Thread-10110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:34:16.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:34:16.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:34:16.888 [DEBUG] [Thread-10110] [transport.py] [_log()] userauth is OK
2025-12-25T10:34:16.888 [DEBUG] [Thread-10110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:34:16.888 [DEBUG] [Thread-10110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:34:16.888 [DEBUG] [Thread-10110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:34:16.888 [DEBUG] [Thread-10110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:34:16.902 [INFO] [Thread-10110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:34:16.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:34:16.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:34:17.750 [DEBUG] [Thread-10110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:34:17.751 [DEBUG] [Thread-10110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:34:17.798 [DEBUG] [Thread-10110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:34:17.798 [DEBUG] [Thread-10110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:34:17.807 [DEBUG] [Thread-10110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:34:17.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:34:17.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:34:17.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:34:17.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:34:17.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:34:17.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:34:17.838 [DEBUG] [Thread-10110] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:34:31.659 [DEBUG] [Thread-10112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:46.711 [DEBUG] [Thread-10113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:34:47.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:34:47.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:34:47.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:34:48.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 34, 18), 18.27, 30.78, 0.0, 16.11, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:34:48.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:34:18
2025-12-25T10:34:48.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:34:48.869 [DEBUG] [Thread-10114] [transport.py] [_log()] starting thread (client mode): 0xb6beb850
2025-12-25T10:34:48.870 [DEBUG] [Thread-10114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:34:48.889 [DEBUG] [Thread-10114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:34:48.889 [INFO] [Thread-10114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] client lang: <none>
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] server lang: <none>
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] kex follows: False
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] Compression: none
2025-12-25T10:34:48.892 [DEBUG] [Thread-10114] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:34:48.909 [DEBUG] [Thread-10114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:34:48.910 [DEBUG] [Thread-10114] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:34:48.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:34:48.911 [DEBUG] [Thread-10114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:34:48.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:34:48.913 [DEBUG] [Thread-10114] [transport.py] [_log()] userauth is OK
2025-12-25T10:34:48.913 [DEBUG] [Thread-10114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:34:48.913 [DEBUG] [Thread-10114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:34:48.913 [DEBUG] [Thread-10114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:34:48.913 [DEBUG] [Thread-10114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:34:48.938 [INFO] [Thread-10114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:34:48.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:34:49.690 [DEBUG] [Thread-10114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:34:49.690 [DEBUG] [Thread-10114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:34:49.690 [DEBUG] [Thread-10114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:34:49.731 [DEBUG] [Thread-10114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:34:49.731 [DEBUG] [Thread-10114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:34:49.734 [DEBUG] [Thread-10114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:34:49.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:34:49.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:34:49.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:34:49.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:34:49.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:34:49.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:34:49.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:34:49.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:34:49.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:34:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.357007 -999.00  +22.40  14.38     39   +7.80 1 2 1 1 1   888    0 15.82 29.36 ----- 14.4 14.4 328.0 22.4 29.6 -22.1 28.6 -21.6 27.5 -20.6 27.8 -20.8
2025-12-25T10:34:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:34:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:34:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.357007
2025-12-25T10:34:49.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:34:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:34:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:34:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:34:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:34:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:34:18', tmtdew=18.27, humidity=30.78, cloud=0.0, wind=16.11, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:34:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:34:49.757 [DEBUG] [Thread-10114] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:34:49.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-25T10:34:49.850 [DEBUG] [Thread-10117] [transport.py] [_log()] starting thread (client mode): 0xb6bebdf0
2025-12-25T10:34:49.851 [DEBUG] [Thread-10117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:34:49.866 [DEBUG] [Thread-10117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:34:49.866 [INFO] [Thread-10117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:34:49.873 [DEBUG] [Thread-10117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] client lang: <none>
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] server lang: <none>
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] kex follows: False
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] Compression: none
2025-12-25T10:34:49.874 [DEBUG] [Thread-10117] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:34:49.933 [DEBUG] [Thread-10117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:34:49.934 [DEBUG] [Thread-10117] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:34:49.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:34:49.935 [DEBUG] [Thread-10117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:34:49.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:34:49.989 [DEBUG] [Thread-10117] [transport.py] [_log()] userauth is OK
2025-12-25T10:34:49.989 [DEBUG] [Thread-10117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:34:49.989 [DEBUG] [Thread-10117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:34:49.989 [DEBUG] [Thread-10117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:34:49.990 [DEBUG] [Thread-10117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:34:50.008 [INFO] [Thread-10117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:34:50.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:34:50.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:34:50.883 [DEBUG] [Thread-10117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:34:50.883 [DEBUG] [Thread-10117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:34:50.931 [DEBUG] [Thread-10117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:34:50.931 [DEBUG] [Thread-10117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:34:50.941 [DEBUG] [Thread-10117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:34:50.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:34:50.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-25T10:34:50.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:34:50.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:34:50.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:34:50.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:34:50.975 [DEBUG] [Thread-10117] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:34:55.875 [DEBUG] [Thread-10119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:01.749 [DEBUG] [Thread-10120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:03.434 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:03.436 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:16.800 [DEBUG] [Thread-10121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:35:20.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:35:20.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-25T10:35:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 34, 50), 18.41, 30.46, 0.0, 13.87, 23.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:35:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:34:50
2025-12-25T10:35:21.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:35:21.967 [DEBUG] [Thread-10122] [transport.py] [_log()] starting thread (client mode): 0xb6bbaec0
2025-12-25T10:35:21.968 [DEBUG] [Thread-10122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:35:21.988 [DEBUG] [Thread-10122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:35:21.988 [INFO] [Thread-10122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] client lang: <none>
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] server lang: <none>
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] kex follows: False
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:35:21.991 [DEBUG] [Thread-10122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:35:21.992 [DEBUG] [Thread-10122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:35:21.992 [DEBUG] [Thread-10122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:35:21.992 [DEBUG] [Thread-10122] [transport.py] [_log()] Compression: none
2025-12-25T10:35:21.992 [DEBUG] [Thread-10122] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:35:22.010 [DEBUG] [Thread-10122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:35:22.010 [DEBUG] [Thread-10122] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:35:22.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:35:22.011 [DEBUG] [Thread-10122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:35:22.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:35:22.053 [DEBUG] [Thread-10122] [transport.py] [_log()] userauth is OK
2025-12-25T10:35:22.053 [DEBUG] [Thread-10122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:35:22.053 [DEBUG] [Thread-10122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:35:22.053 [DEBUG] [Thread-10122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:35:22.053 [DEBUG] [Thread-10122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:35:22.084 [INFO] [Thread-10122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:35:22.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:35:22.694 [DEBUG] [Thread-10122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:35:22.694 [DEBUG] [Thread-10122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:35:22.694 [DEBUG] [Thread-10122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:35:22.735 [DEBUG] [Thread-10122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:35:22.736 [DEBUG] [Thread-10122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:35:22.739 [DEBUG] [Thread-10122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:35:22.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:35:22.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:35:22.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:35:22.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:35:22.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:35:22.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:35:22.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:35:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:35:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:35:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.357354 -999.00  +22.80  15.11     36   +7.10 1 2 1 1 1   888    0 15.37 14.76 ----- 15.1 15.1 27.0 19.6 29.6 -23.3 28.8 -22.1 27.7 -19.7 28.1 -21.1
2025-12-25T10:35:22.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:35:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:35:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.357354
2025-12-25T10:35:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:35:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:35:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:35:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:35:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:35:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:34:50', tmtdew=18.41, humidity=30.46, cloud=0.0, wind=13.87, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:34:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:35:22.768 [DEBUG] [Thread-10122] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:35:22.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-25T10:35:22.876 [DEBUG] [Thread-10125] [transport.py] [_log()] starting thread (client mode): 0xb6bbba30
2025-12-25T10:35:22.876 [DEBUG] [Thread-10125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:35:22.891 [DEBUG] [Thread-10125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:35:22.891 [INFO] [Thread-10125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:35:22.898 [DEBUG] [Thread-10125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] client lang: <none>
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] server lang: <none>
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] kex follows: False
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:35:22.899 [DEBUG] [Thread-10125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:35:22.900 [DEBUG] [Thread-10125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:35:22.900 [DEBUG] [Thread-10125] [transport.py] [_log()] Compression: none
2025-12-25T10:35:22.900 [DEBUG] [Thread-10125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:35:22.957 [DEBUG] [Thread-10125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:35:22.958 [DEBUG] [Thread-10125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:35:22.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:35:22.959 [DEBUG] [Thread-10125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:35:22.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:35:23.013 [DEBUG] [Thread-10125] [transport.py] [_log()] userauth is OK
2025-12-25T10:35:23.014 [DEBUG] [Thread-10125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:35:23.014 [DEBUG] [Thread-10125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:35:23.014 [DEBUG] [Thread-10125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:35:23.014 [DEBUG] [Thread-10125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:35:23.033 [INFO] [Thread-10125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:35:23.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-25T10:35:23.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:35:23.881 [DEBUG] [Thread-10125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:35:23.881 [DEBUG] [Thread-10125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:35:23.928 [DEBUG] [Thread-10125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:35:23.928 [DEBUG] [Thread-10125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:35:23.936 [DEBUG] [Thread-10125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:35:23.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:35:23.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:35:23.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-25T10:35:23.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:35:23.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:35:23.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:35:23.968 [DEBUG] [Thread-10125] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:35:31.833 [DEBUG] [Thread-10127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:46.873 [DEBUG] [Thread-10128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:53.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:35:53.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:35:53.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-25T10:35:54.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 35, 22), 18.25, 30.71, 0.0, 13.73, 23.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:35:54.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:35:22
2025-12-25T10:35:54.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:35:54.949 [DEBUG] [Thread-10129] [transport.py] [_log()] starting thread (client mode): 0xb6bebeb0
2025-12-25T10:35:54.949 [DEBUG] [Thread-10129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:35:54.971 [DEBUG] [Thread-10129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:35:54.971 [INFO] [Thread-10129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] client lang: <none>
2025-12-25T10:35:54.974 [DEBUG] [Thread-10129] [transport.py] [_log()] server lang: <none>
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] kex follows: False
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] Compression: none
2025-12-25T10:35:54.975 [DEBUG] [Thread-10129] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:35:54.988 [DEBUG] [Thread-10129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:35:54.988 [DEBUG] [Thread-10129] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:35:54.989 [DEBUG] [Thread-10129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:35:54.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:35:54.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:35:54.991 [DEBUG] [Thread-10129] [transport.py] [_log()] userauth is OK
2025-12-25T10:35:54.991 [DEBUG] [Thread-10129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:35:54.991 [DEBUG] [Thread-10129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:35:54.991 [DEBUG] [Thread-10129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:35:54.992 [DEBUG] [Thread-10129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:35:55.027 [INFO] [Thread-10129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:35:55.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:35:55.827 [DEBUG] [Thread-10129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:35:55.827 [DEBUG] [Thread-10129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:35:55.828 [DEBUG] [Thread-10129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:35:55.868 [DEBUG] [Thread-10129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:35:55.868 [DEBUG] [Thread-10129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:35:55.870 [DEBUG] [Thread-10129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:35:55.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:35:55.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:35:55.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:35:55.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:35:55.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:35:55.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:35:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:35:55.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.357701 -999.00  +22.90  23.01     36   +7.10 1 2 1 1 1   888    0 15.14 12.08 ----- 23.0 23.0 48.0 26.1 29.7 -24.0 28.9 -22.9 27.7 -20.2 28.2 -20.8
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.357701
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:35:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:35:22', tmtdew=18.25, humidity=30.71, cloud=0.0, wind=13.73, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:35:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:35:55.882 [DEBUG] [Thread-10129] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:35:55.930 [DEBUG] [Thread-10132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:35:55.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-25T10:35:55.982 [DEBUG] [Thread-10133] [transport.py] [_log()] starting thread (client mode): 0xb6bb85b0
2025-12-25T10:35:55.982 [DEBUG] [Thread-10133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:35:55.997 [DEBUG] [Thread-10133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:35:55.997 [INFO] [Thread-10133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] client lang: <none>
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] server lang: <none>
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] kex follows: False
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] Compression: none
2025-12-25T10:35:56.004 [DEBUG] [Thread-10133] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:35:56.059 [DEBUG] [Thread-10133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:35:56.059 [DEBUG] [Thread-10133] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:35:56.059 [DEBUG] [Thread-10133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:35:56.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:35:56.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:35:56.117 [DEBUG] [Thread-10133] [transport.py] [_log()] userauth is OK
2025-12-25T10:35:56.117 [DEBUG] [Thread-10133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:35:56.117 [DEBUG] [Thread-10133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:35:56.117 [DEBUG] [Thread-10133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:35:56.117 [DEBUG] [Thread-10133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:35:56.131 [INFO] [Thread-10133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:35:56.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-25T10:35:56.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:35:57.002 [DEBUG] [Thread-10133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:35:57.002 [DEBUG] [Thread-10133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:35:57.050 [DEBUG] [Thread-10133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:35:57.050 [DEBUG] [Thread-10133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:35:57.058 [DEBUG] [Thread-10133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:35:57.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:35:57.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:35:57.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-25T10:35:57.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:35:57.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:35:57.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:35:57.090 [DEBUG] [Thread-10133] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:36:01.913 [DEBUG] [Thread-10135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:36:03.575 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:36:03.577 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:36:16.962 [DEBUG] [Thread-10136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:36:27.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:36:27.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:36:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:36:27.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 35, 54), 18.12, 30.57, 0.0, 20.31, 23.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:36:27.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:35:54
2025-12-25T10:36:28.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:36:28.166 [DEBUG] [Thread-10137] [transport.py] [_log()] starting thread (client mode): 0xb955b2b0
2025-12-25T10:36:28.166 [DEBUG] [Thread-10137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:36:28.187 [DEBUG] [Thread-10137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:36:28.187 [INFO] [Thread-10137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:36:28.190 [DEBUG] [Thread-10137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:36:28.190 [DEBUG] [Thread-10137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:36:28.190 [DEBUG] [Thread-10137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:36:28.190 [DEBUG] [Thread-10137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:36:28.190 [DEBUG] [Thread-10137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] client lang: <none>
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] server lang: <none>
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] kex follows: False
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] Compression: none
2025-12-25T10:36:28.191 [DEBUG] [Thread-10137] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:36:28.208 [DEBUG] [Thread-10137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:36:28.209 [DEBUG] [Thread-10137] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:36:28.209 [DEBUG] [Thread-10137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:36:28.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:36:28.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:36:28.210 [DEBUG] [Thread-10137] [transport.py] [_log()] userauth is OK
2025-12-25T10:36:28.210 [DEBUG] [Thread-10137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:36:28.210 [DEBUG] [Thread-10137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:36:28.210 [DEBUG] [Thread-10137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:36:28.210 [DEBUG] [Thread-10137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:36:28.220 [INFO] [Thread-10137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:36:28.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:36:28.864 [DEBUG] [Thread-10137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:36:28.864 [DEBUG] [Thread-10137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:36:28.864 [DEBUG] [Thread-10137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:36:28.906 [DEBUG] [Thread-10137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:36:28.906 [DEBUG] [Thread-10137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:36:28.908 [DEBUG] [Thread-10137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:36:28.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:36:28.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:36:28.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:36:28.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:36:28.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:36:28.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:36:28.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.358049 -999.00  +22.80  19.43     36   +7.10 1 2 1 1 1   888    0 15.19 13.12 ----- 19.4 19.4 48.8 23.1 29.7 -23.9 28.8 -22.9 27.6 -21.8 28.2 -20.9
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.358049
2025-12-25T10:36:28.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:36:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:36:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:36:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:36:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:36:28.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:35:54', tmtdew=18.12, humidity=30.57, cloud=0.0, wind=20.31, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:35:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:36:28.928 [DEBUG] [Thread-10137] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:36:29.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:36:29.011 [DEBUG] [Thread-10140] [transport.py] [_log()] starting thread (client mode): 0xb6beba30
2025-12-25T10:36:29.011 [DEBUG] [Thread-10140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:36:29.026 [DEBUG] [Thread-10140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:36:29.026 [INFO] [Thread-10140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] client lang: <none>
2025-12-25T10:36:29.033 [DEBUG] [Thread-10140] [transport.py] [_log()] server lang: <none>
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] kex follows: False
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] Compression: none
2025-12-25T10:36:29.034 [DEBUG] [Thread-10140] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:36:29.091 [DEBUG] [Thread-10140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:36:29.092 [DEBUG] [Thread-10140] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:36:29.092 [DEBUG] [Thread-10140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:36:29.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:36:29.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:36:29.149 [DEBUG] [Thread-10140] [transport.py] [_log()] userauth is OK
2025-12-25T10:36:29.149 [DEBUG] [Thread-10140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:36:29.149 [DEBUG] [Thread-10140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:36:29.149 [DEBUG] [Thread-10140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:36:29.149 [DEBUG] [Thread-10140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:36:29.167 [INFO] [Thread-10140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:36:29.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:36:29.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:36:30.021 [DEBUG] [Thread-10140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:36:30.021 [DEBUG] [Thread-10140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:36:30.069 [DEBUG] [Thread-10140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:36:30.069 [DEBUG] [Thread-10140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:36:30.078 [DEBUG] [Thread-10140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:36:30.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:36: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-25T10:36:30.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:36:30.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:36:30.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:36:30.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:36:30.113 [DEBUG] [Thread-10140] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:36:31.998 [DEBUG] [Thread-10142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:36:47.060 [DEBUG] [Thread-10143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:36:55.985 [DEBUG] [Thread-10144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:37:00.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:37:00.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-25T10:37:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 36, 26), 18.01, 30.77, 0.0, 19.85, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:37:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:36:26
2025-12-25T10:37:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:37:01.174 [DEBUG] [Thread-10145] [transport.py] [_log()] starting thread (client mode): 0xb6b48b50
2025-12-25T10:37:01.174 [DEBUG] [Thread-10145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:37:01.194 [DEBUG] [Thread-10145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:37:01.194 [INFO] [Thread-10145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] client lang: <none>
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] server lang: <none>
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] kex follows: False
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] Compression: none
2025-12-25T10:37:01.197 [DEBUG] [Thread-10145] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:37:01.214 [DEBUG] [Thread-10145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:37:01.214 [DEBUG] [Thread-10145] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:37:01.214 [DEBUG] [Thread-10145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:37:01.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:37:01.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:37:01.215 [DEBUG] [Thread-10145] [transport.py] [_log()] userauth is OK
2025-12-25T10:37:01.215 [DEBUG] [Thread-10145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:37:01.215 [DEBUG] [Thread-10145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:37:01.215 [DEBUG] [Thread-10145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:37:01.215 [DEBUG] [Thread-10145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:37:01.224 [INFO] [Thread-10145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:37:01.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:37:01.950 [DEBUG] [Thread-10145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:37:01.950 [DEBUG] [Thread-10145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:37:01.951 [DEBUG] [Thread-10145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:37:01.991 [DEBUG] [Thread-10145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:37:01.991 [DEBUG] [Thread-10145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:37:01.995 [DEBUG] [Thread-10145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:37:02.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:37:02.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:37:02.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:37:02.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:37:02.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:37:02.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:37:02.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:37:02.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:37:02.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:37:02.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.358743 -999.00  +22.70  16.91     36   +7.20 1 2 1 1 1   888    0 15.67 22.24 ----- 16.9 16.9 21.2 29.5 29.6 -24.3 28.9 -24.2 27.7 -20.4 28.3 -20.9
2025-12-25T10:37:02.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:37:02.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:37:02.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.358743
2025-12-25T10:37:02.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:37:02.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:37:02.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:37:02.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:37:02.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:37:02.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:36:26', tmtdew=18.01, humidity=30.77, cloud=0.0, wind=19.85, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:36:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:37:02.027 [DEBUG] [Thread-10145] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:37:02.087 [DEBUG] [Thread-10148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:02.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-25T10:37:02.112 [DEBUG] [Thread-10149] [transport.py] [_log()] starting thread (client mode): 0xb6baa350
2025-12-25T10:37:02.112 [DEBUG] [Thread-10149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:37:02.127 [DEBUG] [Thread-10149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:37:02.127 [INFO] [Thread-10149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:37:02.135 [DEBUG] [Thread-10149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] client lang: <none>
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] server lang: <none>
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] kex follows: False
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] Compression: none
2025-12-25T10:37:02.136 [DEBUG] [Thread-10149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:37:02.194 [DEBUG] [Thread-10149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:37:02.195 [DEBUG] [Thread-10149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:37:02.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:37:02.196 [DEBUG] [Thread-10149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:37:02.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:37:02.250 [DEBUG] [Thread-10149] [transport.py] [_log()] userauth is OK
2025-12-25T10:37:02.250 [DEBUG] [Thread-10149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:37:02.250 [DEBUG] [Thread-10149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:37:02.251 [DEBUG] [Thread-10149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:37:02.251 [DEBUG] [Thread-10149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:37:02.269 [INFO] [Thread-10149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:37:02.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-25T10:37:02.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:37:03.105 [DEBUG] [Thread-10149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:37:03.105 [DEBUG] [Thread-10149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:37:03.156 [DEBUG] [Thread-10149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:37:03.156 [DEBUG] [Thread-10149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:37:03.168 [DEBUG] [Thread-10149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:37:03.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:37:03.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-25T10:37:03.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-25T10:37:03.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:37:03.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:37:03.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:37:03.216 [DEBUG] [Thread-10149] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:37:03.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:03.720 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:17.125 [DEBUG] [Thread-10151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:32.158 [DEBUG] [Thread-10152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:33.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:37:33.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:37:33.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-25T10:37:33.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 36, 58), 17.83, 31.55, 0.0, 14.29, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:37:33.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:36:58
2025-12-25T10:37:34.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:37:34.243 [DEBUG] [Thread-10153] [transport.py] [_log()] starting thread (client mode): 0xb6beba90
2025-12-25T10:37:34.243 [DEBUG] [Thread-10153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:37:34.267 [DEBUG] [Thread-10153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:37:34.267 [INFO] [Thread-10153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] client lang: <none>
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] server lang: <none>
2025-12-25T10:37:34.270 [DEBUG] [Thread-10153] [transport.py] [_log()] kex follows: False
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] Compression: none
2025-12-25T10:37:34.271 [DEBUG] [Thread-10153] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:37:34.288 [DEBUG] [Thread-10153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:37:34.288 [DEBUG] [Thread-10153] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:37:34.289 [DEBUG] [Thread-10153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:37:34.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:37:34.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:37:34.333 [DEBUG] [Thread-10153] [transport.py] [_log()] userauth is OK
2025-12-25T10:37:34.333 [DEBUG] [Thread-10153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:37:34.334 [DEBUG] [Thread-10153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:37:34.334 [DEBUG] [Thread-10153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:37:34.334 [DEBUG] [Thread-10153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:37:34.354 [INFO] [Thread-10153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:37:34.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:37:34.972 [DEBUG] [Thread-10153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:37:34.973 [DEBUG] [Thread-10153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:37:34.973 [DEBUG] [Thread-10153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:37:35.014 [DEBUG] [Thread-10153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:37:35.014 [DEBUG] [Thread-10153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:37:35.018 [DEBUG] [Thread-10153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:37:35.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:37:35.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:37:35.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:37:35.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:37:35.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:37:35.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:37:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:37:35.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:37:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:37:35.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.359090 -999.00  +22.40  13.63     38   +7.40 1 2 1 1 1   888    0 15.80 22.81 ----- 13.6 13.6 333.4 24.1 29.7 -22.5 28.8 -23.3 27.6 -20.4 28.1 -21.0
2025-12-25T10:37:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:37:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:37:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.359090
2025-12-25T10:37:35.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:37:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:37:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:37:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:37:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:37:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:36:58', tmtdew=17.83, humidity=31.55, cloud=0.0, wind=14.29, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:37:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:37:35.047 [DEBUG] [Thread-10153] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:37:35.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-25T10:37:35.140 [DEBUG] [Thread-10156] [transport.py] [_log()] starting thread (client mode): 0xb6b4a3b0
2025-12-25T10:37:35.140 [DEBUG] [Thread-10156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:37:35.157 [DEBUG] [Thread-10156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:37:35.157 [INFO] [Thread-10156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] client lang: <none>
2025-12-25T10:37:35.165 [DEBUG] [Thread-10156] [transport.py] [_log()] server lang: <none>
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] kex follows: False
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] Compression: none
2025-12-25T10:37:35.166 [DEBUG] [Thread-10156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:37:35.222 [DEBUG] [Thread-10156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:37:35.223 [DEBUG] [Thread-10156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:37:35.224 [DEBUG] [Thread-10156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:37:35.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:37:35.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:37:35.278 [DEBUG] [Thread-10156] [transport.py] [_log()] userauth is OK
2025-12-25T10:37:35.279 [DEBUG] [Thread-10156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:37:35.279 [DEBUG] [Thread-10156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:37:35.279 [DEBUG] [Thread-10156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:37:35.279 [DEBUG] [Thread-10156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:37:35.299 [INFO] [Thread-10156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:37:35.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-25T10:37:35.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:37:36.126 [DEBUG] [Thread-10156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:37:36.126 [DEBUG] [Thread-10156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:37:36.174 [DEBUG] [Thread-10156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:37:36.174 [DEBUG] [Thread-10156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:37:36.184 [DEBUG] [Thread-10156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:37:36.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:37:36.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-25T10:37:36.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-25T10:37:36.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:37:36.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:37:36.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:37:36.221 [DEBUG] [Thread-10156] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:37:47.191 [DEBUG] [Thread-10158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:37:56.041 [DEBUG] [Thread-10159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:02.246 [DEBUG] [Thread-10160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:03.863 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:03.863 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:06.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:38:06.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:38:06.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-25T10:38:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 38, 2), 17.94, 31.37, 0.0, 23.91, 23.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:38:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:38:02
2025-12-25T10:38:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:38:07.271 [DEBUG] [Thread-10161] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T10:38:07.272 [DEBUG] [Thread-10161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:38:07.292 [DEBUG] [Thread-10161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:38:07.292 [INFO] [Thread-10161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] client lang: <none>
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] server lang: <none>
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] kex follows: False
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] Compression: none
2025-12-25T10:38:07.294 [DEBUG] [Thread-10161] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:38:07.303 [DEBUG] [Thread-10161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:38:07.303 [DEBUG] [Thread-10161] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:38:07.303 [DEBUG] [Thread-10161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:38:07.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:38:07.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:38:07.304 [DEBUG] [Thread-10161] [transport.py] [_log()] userauth is OK
2025-12-25T10:38:07.304 [DEBUG] [Thread-10161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:38:07.304 [DEBUG] [Thread-10161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:38:07.304 [DEBUG] [Thread-10161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:38:07.304 [DEBUG] [Thread-10161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:38:07.332 [INFO] [Thread-10161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:38:07.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:38:08.033 [DEBUG] [Thread-10161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:38:08.033 [DEBUG] [Thread-10161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:38:08.033 [DEBUG] [Thread-10161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:38:08.073 [DEBUG] [Thread-10161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:38:08.073 [DEBUG] [Thread-10161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:38:08.075 [DEBUG] [Thread-10161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:38:08.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:38:08.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:38:08.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:38:08.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:38:08.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:38:08.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:38:08.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.359438 -999.00  +22.70   8.41     37   +7.60 1 2 1 1 1   888    0 15.68 23.10 ----- 8.4 8.4 335.9 14.6 29.9 -22.4 28.9 -22.4 27.7 -19.7 28.2 -20.5
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.359438
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:38:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:38:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:38:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:38:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:38:02', tmtdew=17.94, humidity=31.37, cloud=0.0, wind=23.91, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:37:35.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:38:08.093 [DEBUG] [Thread-10161] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:38:08.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-25T10:38:08.177 [DEBUG] [Thread-10164] [transport.py] [_log()] starting thread (client mode): 0xb6bbbbb0
2025-12-25T10:38:08.177 [DEBUG] [Thread-10164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:38:08.191 [DEBUG] [Thread-10164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:38:08.191 [INFO] [Thread-10164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:38:08.198 [DEBUG] [Thread-10164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] client lang: <none>
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] server lang: <none>
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] kex follows: False
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] Compression: none
2025-12-25T10:38:08.199 [DEBUG] [Thread-10164] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:38:08.257 [DEBUG] [Thread-10164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:38:08.257 [DEBUG] [Thread-10164] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:38:08.257 [DEBUG] [Thread-10164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:38:08.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:38:08.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:38:08.314 [DEBUG] [Thread-10164] [transport.py] [_log()] userauth is OK
2025-12-25T10:38:08.314 [DEBUG] [Thread-10164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:38:08.314 [DEBUG] [Thread-10164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:38:08.314 [DEBUG] [Thread-10164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:38:08.314 [DEBUG] [Thread-10164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:38:08.330 [INFO] [Thread-10164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:38:08.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-25T10:38:08.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:38:09.178 [DEBUG] [Thread-10164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:38:09.178 [DEBUG] [Thread-10164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:38:09.226 [DEBUG] [Thread-10164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:38:09.226 [DEBUG] [Thread-10164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:38:09.234 [DEBUG] [Thread-10164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:38:09.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:38:09.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-25T10:38:09.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-25T10:38:09.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:38:09.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:38:09.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:38:09.269 [DEBUG] [Thread-10164] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:38:17.281 [DEBUG] [Thread-10166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:32.332 [DEBUG] [Thread-10167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:39.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:38:39.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:38:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:38:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 38, 34), 17.62, 32.15, 0.0, 22.69, 23.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:38:40.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:38:34
2025-12-25T10:38:40.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:38:40.296 [DEBUG] [Thread-10168] [transport.py] [_log()] starting thread (client mode): 0xb6b522c0
2025-12-25T10:38:40.296 [DEBUG] [Thread-10168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:38:40.318 [DEBUG] [Thread-10168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:38:40.318 [INFO] [Thread-10168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] client lang: <none>
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] server lang: <none>
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] kex follows: False
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] Compression: none
2025-12-25T10:38:40.321 [DEBUG] [Thread-10168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:38:40.339 [DEBUG] [Thread-10168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:38:40.340 [DEBUG] [Thread-10168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:38:40.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:38:40.341 [DEBUG] [Thread-10168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:38:40.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:38:40.343 [DEBUG] [Thread-10168] [transport.py] [_log()] userauth is OK
2025-12-25T10:38:40.344 [DEBUG] [Thread-10168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:38:40.344 [DEBUG] [Thread-10168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:38:40.344 [DEBUG] [Thread-10168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:38:40.344 [DEBUG] [Thread-10168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:38:40.368 [INFO] [Thread-10168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:38:40.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:38:41.026 [DEBUG] [Thread-10168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:38:41.026 [DEBUG] [Thread-10168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:38:41.026 [DEBUG] [Thread-10168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:38:41.067 [DEBUG] [Thread-10168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:38:41.067 [DEBUG] [Thread-10168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:38:41.071 [DEBUG] [Thread-10168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:38:41.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:38:41.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:38:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:38:41.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:38:41.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:38:41.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:38:41.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:38:41.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:38:41.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:38:41.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.359785 -999.00  +22.60  15.53     38   +7.60 1 2 1 1 1   888    0 15.87 23.49 ----- 15.5 15.5 324.4 19.0 30.0 -22.9 29.1 -22.7 27.9 -19.7 28.4 -20.3
2025-12-25T10:38:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:38:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:38:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.359785
2025-12-25T10:38:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:38:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:38:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:38:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:38:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:38:41.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:38:34', tmtdew=17.62, humidity=32.15, cloud=0.0, wind=22.69, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:38:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:38:41.099 [DEBUG] [Thread-10168] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:38:41.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-25T10:38:41.184 [DEBUG] [Thread-10171] [transport.py] [_log()] starting thread (client mode): 0xb6beba00
2025-12-25T10:38:41.184 [DEBUG] [Thread-10171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:38:41.199 [DEBUG] [Thread-10171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:38:41.199 [INFO] [Thread-10171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:38:41.206 [DEBUG] [Thread-10171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] client lang: <none>
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] server lang: <none>
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] kex follows: False
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] Compression: none
2025-12-25T10:38:41.207 [DEBUG] [Thread-10171] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:38:41.265 [DEBUG] [Thread-10171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:38:41.265 [DEBUG] [Thread-10171] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:38:41.266 [DEBUG] [Thread-10171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:38:41.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:38:41.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:38:41.321 [DEBUG] [Thread-10171] [transport.py] [_log()] userauth is OK
2025-12-25T10:38:41.321 [DEBUG] [Thread-10171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:38:41.322 [DEBUG] [Thread-10171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:38:41.322 [DEBUG] [Thread-10171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:38:41.322 [DEBUG] [Thread-10171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:38:41.340 [INFO] [Thread-10171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:38:41.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-25T10:38:41.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:38:42.180 [DEBUG] [Thread-10171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:38:42.180 [DEBUG] [Thread-10171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:38:42.228 [DEBUG] [Thread-10171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:38:42.228 [DEBUG] [Thread-10171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:38:42.237 [DEBUG] [Thread-10171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:38:42.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:38:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:38:42.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:38:42.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:38:42.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:38:42.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:38:42.273 [DEBUG] [Thread-10171] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:38:47.364 [DEBUG] [Thread-10173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:38:56.093 [DEBUG] [Thread-10174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:02.403 [DEBUG] [Thread-10175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:04.000 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:04.001 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:39:12.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:39:12.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:39:13.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 39, 6), 17.78, 31.87, 0.0, 15.97, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:39:13.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:39:06
2025-12-25T10:39:13.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:39:13.289 [DEBUG] [Thread-10176] [transport.py] [_log()] starting thread (client mode): 0xb6b4a320
2025-12-25T10:39:13.289 [DEBUG] [Thread-10176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:39:13.311 [DEBUG] [Thread-10176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:39:13.311 [INFO] [Thread-10176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] client lang: <none>
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] server lang: <none>
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] kex follows: False
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:39:13.314 [DEBUG] [Thread-10176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:39:13.315 [DEBUG] [Thread-10176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:39:13.315 [DEBUG] [Thread-10176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:39:13.315 [DEBUG] [Thread-10176] [transport.py] [_log()] Compression: none
2025-12-25T10:39:13.315 [DEBUG] [Thread-10176] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:39:13.331 [DEBUG] [Thread-10176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:39:13.332 [DEBUG] [Thread-10176] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:39:13.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:39:13.333 [DEBUG] [Thread-10176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:39:13.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:39:13.335 [DEBUG] [Thread-10176] [transport.py] [_log()] userauth is OK
2025-12-25T10:39:13.335 [DEBUG] [Thread-10176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:39:13.335 [DEBUG] [Thread-10176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:39:13.335 [DEBUG] [Thread-10176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:39:13.335 [DEBUG] [Thread-10176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:39:13.352 [INFO] [Thread-10176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:39:13.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:39:14.088 [DEBUG] [Thread-10176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:39:14.089 [DEBUG] [Thread-10176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:39:14.089 [DEBUG] [Thread-10176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:39:14.130 [DEBUG] [Thread-10176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:39:14.130 [DEBUG] [Thread-10176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:39:14.134 [DEBUG] [Thread-10176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:39:14.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:39:14.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:39:14.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:39:14.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:39:14.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:39:14.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:39:14.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:39:14.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:39:14.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:39:14.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.360132 -999.00  +22.60  19.45     38   +7.80 1 2 1 1 1   888    0 16.02 25.80 ----- 19.4 19.4 4.7 28.0 30.0 -23.1 29.1 -22.2 28.0 -19.3 28.5 -19.9
2025-12-25T10:39:14.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:39:14.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:39:14.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.360132
2025-12-25T10:39:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:39:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:39:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:39:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:39:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:39:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:39:06', tmtdew=17.78, humidity=31.87, cloud=0.0, wind=15.97, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:38:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:39:14.162 [DEBUG] [Thread-10176] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:39:14.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-25T10:39:14.254 [DEBUG] [Thread-10179] [transport.py] [_log()] starting thread (client mode): 0xb6bab850
2025-12-25T10:39:14.254 [DEBUG] [Thread-10179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:39:14.268 [DEBUG] [Thread-10179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:39:14.268 [INFO] [Thread-10179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] client lang: <none>
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] server lang: <none>
2025-12-25T10:39:14.276 [DEBUG] [Thread-10179] [transport.py] [_log()] kex follows: False
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] Compression: none
2025-12-25T10:39:14.277 [DEBUG] [Thread-10179] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:39:14.334 [DEBUG] [Thread-10179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:39:14.335 [DEBUG] [Thread-10179] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:39:14.335 [DEBUG] [Thread-10179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:39:14.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:39:14.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:39:14.390 [DEBUG] [Thread-10179] [transport.py] [_log()] userauth is OK
2025-12-25T10:39:14.390 [DEBUG] [Thread-10179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:39:14.390 [DEBUG] [Thread-10179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:39:14.390 [DEBUG] [Thread-10179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:39:14.390 [DEBUG] [Thread-10179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:39:14.414 [INFO] [Thread-10179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:39:14.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-25T10:39:14.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:39:15.231 [DEBUG] [Thread-10179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:39:15.232 [DEBUG] [Thread-10179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:39:15.280 [DEBUG] [Thread-10179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:39:15.280 [DEBUG] [Thread-10179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:39:15.289 [DEBUG] [Thread-10179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:39:15.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:39:15.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-25T10:39:15.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-25T10:39:15.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:39:15.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:39:15.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:39:15.326 [DEBUG] [Thread-10179] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:39:17.438 [DEBUG] [Thread-10181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:32.486 [DEBUG] [Thread-10182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:45.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:39:45.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:39:45.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-25T10:39:46.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 39, 38), 17.67, 31.77, 0.0, 22.04, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:39:46.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:39:38
2025-12-25T10:39:46.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:39:46.337 [DEBUG] [Thread-10183] [transport.py] [_log()] starting thread (client mode): 0xb6bab9d0
2025-12-25T10:39:46.338 [DEBUG] [Thread-10183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:39:46.356 [DEBUG] [Thread-10183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:39:46.356 [INFO] [Thread-10183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:39:46.359 [DEBUG] [Thread-10183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] client lang: <none>
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] server lang: <none>
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] kex follows: False
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:39:46.360 [DEBUG] [Thread-10183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:39:46.361 [DEBUG] [Thread-10183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:39:46.361 [DEBUG] [Thread-10183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:39:46.361 [DEBUG] [Thread-10183] [transport.py] [_log()] Compression: none
2025-12-25T10:39:46.361 [DEBUG] [Thread-10183] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:39:46.378 [DEBUG] [Thread-10183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:39:46.379 [DEBUG] [Thread-10183] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:39:46.379 [DEBUG] [Thread-10183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:39:46.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:39:46.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:39:46.381 [DEBUG] [Thread-10183] [transport.py] [_log()] userauth is OK
2025-12-25T10:39:46.382 [DEBUG] [Thread-10183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:39:46.382 [DEBUG] [Thread-10183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:39:46.382 [DEBUG] [Thread-10183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:39:46.382 [DEBUG] [Thread-10183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:39:46.400 [INFO] [Thread-10183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:39:46.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:39:47.017 [DEBUG] [Thread-10183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:39:47.017 [DEBUG] [Thread-10183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:39:47.018 [DEBUG] [Thread-10183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:39:47.059 [DEBUG] [Thread-10183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:39:47.059 [DEBUG] [Thread-10183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:39:47.063 [DEBUG] [Thread-10183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:39:47.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:39:47.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:39:47.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:39:47.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:39:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:39:47.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:39:47.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:39:47.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:39:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:39:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.360479 -999.00  +22.90  11.09     38   +7.90 1 2 1 1 1   888    0 15.51 21.82 ----- 11.1 11.1 322.6 18.8 30.0 -23.1 29.1 -22.5 28.0 -18.9 28.6 -19.6
2025-12-25T10:39:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:39:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:39:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.360479
2025-12-25T10:39:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:39:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:39:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:39:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:39:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:39:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:39:38', tmtdew=17.67, humidity=31.77, cloud=0.0, wind=22.04, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:39:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:39:47.089 [DEBUG] [Thread-10183] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:39: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-25T10:39:47.185 [DEBUG] [Thread-10186] [transport.py] [_log()] starting thread (client mode): 0xb6b4a320
2025-12-25T10:39:47.186 [DEBUG] [Thread-10186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:39:47.200 [DEBUG] [Thread-10186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:39:47.200 [INFO] [Thread-10186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:47.208 [DEBUG] [Thread-10186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] client lang: <none>
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] server lang: <none>
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] kex follows: False
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] Compression: none
2025-12-25T10:39:47.209 [DEBUG] [Thread-10186] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:39:47.268 [DEBUG] [Thread-10186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:39:47.268 [DEBUG] [Thread-10186] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:39:47.269 [DEBUG] [Thread-10186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:39:47.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:39:47.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:39:47.326 [DEBUG] [Thread-10186] [transport.py] [_log()] userauth is OK
2025-12-25T10:39:47.326 [DEBUG] [Thread-10186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:39:47.326 [DEBUG] [Thread-10186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:39:47.326 [DEBUG] [Thread-10186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:39:47.326 [DEBUG] [Thread-10186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:39:47.345 [INFO] [Thread-10186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:39:47.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-25T10:39:47.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:39:47.521 [DEBUG] [Thread-10188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:39:48.182 [DEBUG] [Thread-10186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:39:48.182 [DEBUG] [Thread-10186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:39:48.231 [DEBUG] [Thread-10186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:39:48.231 [DEBUG] [Thread-10186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:39:48.240 [DEBUG] [Thread-10186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:39:48.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:39:48.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:39:48.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:39:48.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:39:48.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:39:48.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:39:48.274 [DEBUG] [Thread-10186] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:39:56.158 [DEBUG] [Thread-10189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:02.574 [DEBUG] [Thread-10190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:04.140 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:04.141 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:17.606 [DEBUG] [Thread-10191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:40:18.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:40:18.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-25T10:40:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 40, 10), 18.02, 31.09, 0.0, 22.65, 23.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:40:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:40:10
2025-12-25T10:40:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:40:19.252 [DEBUG] [Thread-10192] [transport.py] [_log()] starting thread (client mode): 0xb6beb4f0
2025-12-25T10:40:19.252 [DEBUG] [Thread-10192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:40:19.273 [DEBUG] [Thread-10192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:40:19.273 [INFO] [Thread-10192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] client lang: <none>
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] server lang: <none>
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] kex follows: False
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] Compression: none
2025-12-25T10:40:19.276 [DEBUG] [Thread-10192] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:40:19.295 [DEBUG] [Thread-10192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:40:19.296 [DEBUG] [Thread-10192] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:40:19.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:40:19.297 [DEBUG] [Thread-10192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:40:19.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:40:19.299 [DEBUG] [Thread-10192] [transport.py] [_log()] userauth is OK
2025-12-25T10:40:19.299 [DEBUG] [Thread-10192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:40:19.299 [DEBUG] [Thread-10192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:40:19.299 [DEBUG] [Thread-10192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:40:19.299 [DEBUG] [Thread-10192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:40:19.316 [INFO] [Thread-10192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:40:19.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:40:20.186 [DEBUG] [Thread-10192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:40:20.186 [DEBUG] [Thread-10192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:40:20.186 [DEBUG] [Thread-10192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:40:20.227 [DEBUG] [Thread-10192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:40:20.227 [DEBUG] [Thread-10192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:40:20.230 [DEBUG] [Thread-10192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:40:20.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:40:20.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:40:20.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:40:20.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:40:20.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:40:20.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:40:20.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:40:20.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:40:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:40:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.360826 -999.00  +23.50  17.10     37   +8.10 1 2 1 1 1   888    0 16.12 23.46 ----- 17.1 17.1 293.4 18.3 30.2 -21.3 29.3 -21.7 28.2 -18.7 28.7 -20.1
2025-12-25T10:40:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:40:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:40:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.360826
2025-12-25T10:40:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:40:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:40:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:40:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:40:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:40:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:40:10', tmtdew=18.02, humidity=31.09, cloud=0.0, wind=22.65, temperature=23.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:39:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:40:20.254 [DEBUG] [Thread-10192] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:40:20.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-25T10:40:20.347 [DEBUG] [Thread-10195] [transport.py] [_log()] starting thread (client mode): 0xb6be0d00
2025-12-25T10:40:20.348 [DEBUG] [Thread-10195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:40:20.362 [DEBUG] [Thread-10195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:40:20.362 [INFO] [Thread-10195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] client lang: <none>
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] server lang: <none>
2025-12-25T10:40:20.370 [DEBUG] [Thread-10195] [transport.py] [_log()] kex follows: False
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] Compression: none
2025-12-25T10:40:20.371 [DEBUG] [Thread-10195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:40:20.433 [DEBUG] [Thread-10195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:40:20.434 [DEBUG] [Thread-10195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:40:20.434 [DEBUG] [Thread-10195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:40:20.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:40:20.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:40:20.492 [DEBUG] [Thread-10195] [transport.py] [_log()] userauth is OK
2025-12-25T10:40:20.492 [DEBUG] [Thread-10195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:40:20.492 [DEBUG] [Thread-10195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:40:20.492 [DEBUG] [Thread-10195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:40:20.492 [DEBUG] [Thread-10195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:40:20.514 [INFO] [Thread-10195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:40: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-25T10:40:20.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:40:21.338 [DEBUG] [Thread-10195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:40:21.338 [DEBUG] [Thread-10195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:40:21.385 [DEBUG] [Thread-10195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:40:21.386 [DEBUG] [Thread-10195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:40:21.394 [DEBUG] [Thread-10195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:40:21.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:40: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-25T10:40: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-25T10:40:21.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:40:21.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:40:21.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:40:21.429 [DEBUG] [Thread-10195] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:40:32.645 [DEBUG] [Thread-10197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:47.694 [DEBUG] [Thread-10198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:40:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:40:51.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:40:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:40:52.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 40, 43), 18.51, 30.09, 0.0, 28.97, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:40:52.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:40:43
2025-12-25T10:40:52.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:40:52.410 [DEBUG] [Thread-10199] [transport.py] [_log()] starting thread (client mode): 0xb6bb9810
2025-12-25T10:40:52.410 [DEBUG] [Thread-10199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:40:52.431 [DEBUG] [Thread-10199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:40:52.431 [INFO] [Thread-10199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:40:52.434 [DEBUG] [Thread-10199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:40:52.434 [DEBUG] [Thread-10199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:40:52.434 [DEBUG] [Thread-10199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:40:52.434 [DEBUG] [Thread-10199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:52.434 [DEBUG] [Thread-10199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:52.434 [DEBUG] [Thread-10199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] client lang: <none>
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] server lang: <none>
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] kex follows: False
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] Compression: none
2025-12-25T10:40:52.435 [DEBUG] [Thread-10199] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:40:52.452 [DEBUG] [Thread-10199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:40:52.452 [DEBUG] [Thread-10199] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:40:52.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:40:52.454 [DEBUG] [Thread-10199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:40:52.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:40:52.456 [DEBUG] [Thread-10199] [transport.py] [_log()] userauth is OK
2025-12-25T10:40:52.456 [DEBUG] [Thread-10199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:40:52.456 [DEBUG] [Thread-10199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:40:52.456 [DEBUG] [Thread-10199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:40:52.456 [DEBUG] [Thread-10199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:40:52.491 [INFO] [Thread-10199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:40:52.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:40:53.132 [DEBUG] [Thread-10199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:40:53.132 [DEBUG] [Thread-10199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:40:53.133 [DEBUG] [Thread-10199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:40:53.173 [DEBUG] [Thread-10199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:40:53.173 [DEBUG] [Thread-10199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:40:53.176 [DEBUG] [Thread-10199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:40:53.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:40:53.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:40:53.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:40:53.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:40:53.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:40:53.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:40:53.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:40:53.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:40:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:40:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.361174 -999.00  +23.60  20.64     36   +7.90 1 2 1 1 1   888    0 15.53 22.67 ----- 20.6 20.6 4.0 34.8 30.2 -22.5 29.4 -21.3 28.1 -19.1 28.8 -19.7
2025-12-25T10:40:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:40:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:40:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.361174
2025-12-25T10:40:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:40:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:40:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:40:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:40:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:40:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:40:43', tmtdew=18.51, humidity=30.09, cloud=0.0, wind=28.97, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:40:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:40:53.203 [DEBUG] [Thread-10199] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:40:53.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-25T10:40:53.296 [DEBUG] [Thread-10202] [transport.py] [_log()] starting thread (client mode): 0xb6b2a3e0
2025-12-25T10:40:53.296 [DEBUG] [Thread-10202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:40:53.313 [DEBUG] [Thread-10202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:40:53.313 [INFO] [Thread-10202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:40:53.321 [DEBUG] [Thread-10202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:40:53.321 [DEBUG] [Thread-10202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:40:53.321 [DEBUG] [Thread-10202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:40:53.321 [DEBUG] [Thread-10202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:53.321 [DEBUG] [Thread-10202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] client lang: <none>
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] server lang: <none>
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] kex follows: False
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] Compression: none
2025-12-25T10:40:53.322 [DEBUG] [Thread-10202] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:40:53.379 [DEBUG] [Thread-10202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:40:53.380 [DEBUG] [Thread-10202] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:40:53.380 [DEBUG] [Thread-10202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:40:53.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:40:53.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:40:53.435 [DEBUG] [Thread-10202] [transport.py] [_log()] userauth is OK
2025-12-25T10:40:53.435 [DEBUG] [Thread-10202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:40:53.435 [DEBUG] [Thread-10202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:40:53.435 [DEBUG] [Thread-10202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:40:53.436 [DEBUG] [Thread-10202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:40:53.460 [INFO] [Thread-10202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:40:53.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-25T10:40:53.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:40:54.337 [DEBUG] [Thread-10202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:40:54.337 [DEBUG] [Thread-10202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:40:54.385 [DEBUG] [Thread-10202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:40:54.385 [DEBUG] [Thread-10202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:40:54.394 [DEBUG] [Thread-10202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:40:54.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:40:54.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-25T10:40:54.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-25T10:40:54.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:40:54.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:40:54.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:40:54.430 [DEBUG] [Thread-10202] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:40:56.199 [DEBUG] [Thread-10204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:02.728 [DEBUG] [Thread-10205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:04.280 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:04.281 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:17.781 [DEBUG] [Thread-10206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:41:24.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:41:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:41:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 41, 15), 18.5, 30.12, 0.0, 27.35, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:41:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:41:15
2025-12-25T10:41:25.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:41:25.449 [DEBUG] [Thread-10207] [transport.py] [_log()] starting thread (client mode): 0xb6beba30
2025-12-25T10:41:25.449 [DEBUG] [Thread-10207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:41:25.464 [DEBUG] [Thread-10207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:41:25.464 [INFO] [Thread-10207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:41:25.465 [DEBUG] [Thread-10207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] client lang: <none>
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] server lang: <none>
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] kex follows: False
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] Compression: none
2025-12-25T10:41:25.466 [DEBUG] [Thread-10207] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:41:25.473 [DEBUG] [Thread-10207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:41:25.473 [DEBUG] [Thread-10207] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:41:25.473 [DEBUG] [Thread-10207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:41:25.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:41:25.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:41:25.474 [DEBUG] [Thread-10207] [transport.py] [_log()] userauth is OK
2025-12-25T10:41:25.474 [DEBUG] [Thread-10207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:41:25.474 [DEBUG] [Thread-10207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:41:25.474 [DEBUG] [Thread-10207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:41:25.474 [DEBUG] [Thread-10207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:41:25.486 [INFO] [Thread-10207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:41:25.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:41:26.138 [DEBUG] [Thread-10207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:41:26.138 [DEBUG] [Thread-10207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:41:26.138 [DEBUG] [Thread-10207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:41:26.178 [DEBUG] [Thread-10207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:41:26.178 [DEBUG] [Thread-10207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:41:26.181 [DEBUG] [Thread-10207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:41:26.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:41:26.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:41:26.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:41:26.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:41:26.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:41:26.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:41:26.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:41:26.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.361868 -999.00  +23.90  24.69     36   +8.00 1 2 1 1 1   888    0 15.42 26.06 ----- 24.7 24.7 335.0 31.4 30.2 -22.4 29.5 -21.5 28.3 -19.0 28.9 -20.2
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.361868
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:41:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:41:15', tmtdew=18.5, humidity=30.12, cloud=0.0, wind=27.35, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:41:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:41:26.203 [DEBUG] [Thread-10207] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:41:26.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-25T10:41:26.289 [DEBUG] [Thread-10210] [transport.py] [_log()] starting thread (client mode): 0xb6bba0e0
2025-12-25T10:41:26.289 [DEBUG] [Thread-10210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:41:26.303 [DEBUG] [Thread-10210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:41:26.303 [INFO] [Thread-10210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] client lang: <none>
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] server lang: <none>
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] kex follows: False
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] Compression: none
2025-12-25T10:41:26.311 [DEBUG] [Thread-10210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:41:26.367 [DEBUG] [Thread-10210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:41:26.367 [DEBUG] [Thread-10210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:41:26.367 [DEBUG] [Thread-10210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:41:26.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:41:26.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:41:26.424 [DEBUG] [Thread-10210] [transport.py] [_log()] userauth is OK
2025-12-25T10:41:26.424 [DEBUG] [Thread-10210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:41:26.424 [DEBUG] [Thread-10210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:41:26.424 [DEBUG] [Thread-10210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:41:26.424 [DEBUG] [Thread-10210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:41:26.438 [INFO] [Thread-10210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:41:26.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-25T10:41:26.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:41:27.306 [DEBUG] [Thread-10210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:41:27.307 [DEBUG] [Thread-10210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:41:27.357 [DEBUG] [Thread-10210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:41:27.357 [DEBUG] [Thread-10210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:41:27.367 [DEBUG] [Thread-10210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:41:27.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:41:27.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-25T10:41:27.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-25T10:41:27.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:41:27.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:41:27.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:41:27.402 [DEBUG] [Thread-10210] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:41:32.813 [DEBUG] [Thread-10212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:47.861 [DEBUG] [Thread-10213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:56.256 [DEBUG] [Thread-10214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:41:57.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:41:57.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:41:57.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:41:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 41, 47), 18.63, 30.18, 0.0, 20.1, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:41:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:41:47
2025-12-25T10:41:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:41:58.388 [DEBUG] [Thread-10215] [transport.py] [_log()] starting thread (client mode): 0xb6bb8ca0
2025-12-25T10:41:58.388 [DEBUG] [Thread-10215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:41:58.409 [DEBUG] [Thread-10215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:41:58.410 [INFO] [Thread-10215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:41:58.412 [DEBUG] [Thread-10215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] client lang: <none>
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] server lang: <none>
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] kex follows: False
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] Compression: none
2025-12-25T10:41:58.413 [DEBUG] [Thread-10215] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:41:58.431 [DEBUG] [Thread-10215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:41:58.431 [DEBUG] [Thread-10215] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:41:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:41:58.432 [DEBUG] [Thread-10215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:41:58.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:41:58.434 [DEBUG] [Thread-10215] [transport.py] [_log()] userauth is OK
2025-12-25T10:41:58.434 [DEBUG] [Thread-10215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:41:58.434 [DEBUG] [Thread-10215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:41:58.434 [DEBUG] [Thread-10215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:41:58.435 [DEBUG] [Thread-10215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:41:58.459 [INFO] [Thread-10215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:41:58.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:41:59.108 [DEBUG] [Thread-10215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:41:59.108 [DEBUG] [Thread-10215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:41:59.109 [DEBUG] [Thread-10215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:41:59.149 [DEBUG] [Thread-10215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:41:59.149 [DEBUG] [Thread-10215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:41:59.151 [DEBUG] [Thread-10215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:41:59.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:41:59.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:41:59.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:41:59.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:41:59.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:41:59.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:41:59.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.362215 -999.00  +23.30  15.31     36   +7.70 1 2 1 1 1   888    0 15.68 24.92 ----- 15.3 15.3 2.0 35.0 30.2 -23.7 29.3 -23.5 28.3 -20.5 28.9 -21.1
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.362215
2025-12-25T10:41:59.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:41:47', tmtdew=18.63, humidity=30.18, cloud=0.0, wind=20.1, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:41:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:41:59.173 [DEBUG] [Thread-10215] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:41:59.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-25T10:41:59.259 [DEBUG] [Thread-10218] [transport.py] [_log()] starting thread (client mode): 0xb6babac0
2025-12-25T10:41:59.260 [DEBUG] [Thread-10218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:41:59.274 [DEBUG] [Thread-10218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:41:59.274 [INFO] [Thread-10218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] client lang: <none>
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] server lang: <none>
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] kex follows: False
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] Compression: none
2025-12-25T10:41:59.282 [DEBUG] [Thread-10218] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:41:59.338 [DEBUG] [Thread-10218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:41:59.339 [DEBUG] [Thread-10218] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:41:59.339 [DEBUG] [Thread-10218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:41:59.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:41:59.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:41:59.396 [DEBUG] [Thread-10218] [transport.py] [_log()] userauth is OK
2025-12-25T10:41:59.396 [DEBUG] [Thread-10218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:41:59.396 [DEBUG] [Thread-10218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:41:59.396 [DEBUG] [Thread-10218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:41:59.397 [DEBUG] [Thread-10218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:41:59.416 [INFO] [Thread-10218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:41:59.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-25T10:41:59.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:42:00.259 [DEBUG] [Thread-10218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:42:00.259 [DEBUG] [Thread-10218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:42:00.306 [DEBUG] [Thread-10218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:42:00.306 [DEBUG] [Thread-10218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:42:00.315 [DEBUG] [Thread-10218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:42:00.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:42:00.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-25T10:42:00.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-25T10:42:00.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:42:00.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:42:00.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:42:00.347 [DEBUG] [Thread-10218] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:42:02.890 [DEBUG] [Thread-10220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:42:04.422 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:42:04.423 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:42:17.931 [DEBUG] [Thread-10221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:42:30.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:42:30.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:42:30.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-25T10:42:31.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 42, 19), 18.53, 30.34, 0.0, 20.57, 23.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:42:31.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:42:19
2025-12-25T10:42:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:42:31.299 [DEBUG] [Thread-10222] [transport.py] [_log()] starting thread (client mode): 0xb6be1270
2025-12-25T10:42:31.299 [DEBUG] [Thread-10222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:42:31.319 [DEBUG] [Thread-10222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:42:31.319 [INFO] [Thread-10222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:42:31.322 [DEBUG] [Thread-10222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:42:31.322 [DEBUG] [Thread-10222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:42:31.322 [DEBUG] [Thread-10222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] client lang: <none>
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] server lang: <none>
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] kex follows: False
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] Compression: none
2025-12-25T10:42:31.323 [DEBUG] [Thread-10222] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:42:31.340 [DEBUG] [Thread-10222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:42:31.340 [DEBUG] [Thread-10222] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:42:31.341 [DEBUG] [Thread-10222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:42:31.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:42:31.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:42:31.385 [DEBUG] [Thread-10222] [transport.py] [_log()] userauth is OK
2025-12-25T10:42:31.385 [DEBUG] [Thread-10222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:42:31.385 [DEBUG] [Thread-10222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:42:31.385 [DEBUG] [Thread-10222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:42:31.385 [DEBUG] [Thread-10222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:42:31.406 [INFO] [Thread-10222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:42:31.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:42:32.011 [DEBUG] [Thread-10222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:42:32.012 [DEBUG] [Thread-10222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:42:32.012 [DEBUG] [Thread-10222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:42:32.053 [DEBUG] [Thread-10222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:42:32.053 [DEBUG] [Thread-10222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:42:32.057 [DEBUG] [Thread-10222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:42:32.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:42:32.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:42:32.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:42:32.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:42:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:42:32.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:42:32.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:42:32.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:42:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:42:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.362563 -999.00  +23.20  16.48     37   +7.70 1 2 1 1 1   888    0 15.96 27.30 ----- 16.5 16.5 0.4 28.2 30.1 -23.7 29.2 -22.7 28.3 -20.1 28.7 -20.8
2025-12-25T10:42:32.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:42:32.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:42:32.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.362563
2025-12-25T10:42:32.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:42:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:42:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:42:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:42:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:42:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:42:19', tmtdew=18.53, humidity=30.34, cloud=0.0, wind=20.57, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:42:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:42:32.081 [DEBUG] [Thread-10222] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:42:32.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-25T10:42:32.175 [DEBUG] [Thread-10225] [transport.py] [_log()] starting thread (client mode): 0xb6b61870
2025-12-25T10:42:32.175 [DEBUG] [Thread-10225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:42:32.190 [DEBUG] [Thread-10225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:42:32.190 [INFO] [Thread-10225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:42:32.197 [DEBUG] [Thread-10225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] client lang: <none>
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] server lang: <none>
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] kex follows: False
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] Compression: none
2025-12-25T10:42:32.198 [DEBUG] [Thread-10225] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:42:32.258 [DEBUG] [Thread-10225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:42:32.258 [DEBUG] [Thread-10225] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:42:32.259 [DEBUG] [Thread-10225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:42:32.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:42:32.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:42:32.317 [DEBUG] [Thread-10225] [transport.py] [_log()] userauth is OK
2025-12-25T10:42:32.317 [DEBUG] [Thread-10225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:42:32.317 [DEBUG] [Thread-10225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:42:32.318 [DEBUG] [Thread-10225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:42:32.318 [DEBUG] [Thread-10225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:42:32.336 [INFO] [Thread-10225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:42:32.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-25T10:42:32.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:42:32.967 [DEBUG] [Thread-10227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:42:33.206 [DEBUG] [Thread-10225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:42:33.206 [DEBUG] [Thread-10225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:42:33.254 [DEBUG] [Thread-10225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:42:33.254 [DEBUG] [Thread-10225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:42:33.264 [DEBUG] [Thread-10225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:42:33.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:42:33.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-25T10:42:33.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-25T10:42:33.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:42:33.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:42:33.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:42:33.301 [DEBUG] [Thread-10225] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:42:48.016 [DEBUG] [Thread-10228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:42:56.288 [DEBUG] [Thread-10229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:03.051 [DEBUG] [Thread-10230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:03.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:43:03.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:43:03.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:43:04.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 42, 51), 18.31, 30.85, 0.0, 13.85, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:43:04.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:42:51
2025-12-25T10:43:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:43:04.276 [DEBUG] [Thread-10231] [transport.py] [_log()] starting thread (client mode): 0xb6babb50
2025-12-25T10:43:04.276 [DEBUG] [Thread-10231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:43:04.296 [DEBUG] [Thread-10231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:43:04.297 [INFO] [Thread-10231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:43:04.297 [DEBUG] [Thread-10231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] client lang: <none>
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] server lang: <none>
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] kex follows: False
2025-12-25T10:43:04.298 [DEBUG] [Thread-10231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:43:04.299 [DEBUG] [Thread-10231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:43:04.299 [DEBUG] [Thread-10231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:43:04.299 [DEBUG] [Thread-10231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:43:04.299 [DEBUG] [Thread-10231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:43:04.299 [DEBUG] [Thread-10231] [transport.py] [_log()] Compression: none
2025-12-25T10:43:04.299 [DEBUG] [Thread-10231] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:43:04.319 [DEBUG] [Thread-10231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:43:04.320 [DEBUG] [Thread-10231] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:43:04.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:43:04.321 [DEBUG] [Thread-10231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:43:04.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:43:04.323 [DEBUG] [Thread-10231] [transport.py] [_log()] userauth is OK
2025-12-25T10:43:04.324 [DEBUG] [Thread-10231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:43:04.324 [DEBUG] [Thread-10231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:43:04.324 [DEBUG] [Thread-10231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:43:04.324 [DEBUG] [Thread-10231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:43:04.355 [INFO] [Thread-10231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:43:04.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:43:04.575 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:04.577 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:04.972 [DEBUG] [Thread-10231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:43:04.972 [DEBUG] [Thread-10231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:43:04.973 [DEBUG] [Thread-10231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:43:05.013 [DEBUG] [Thread-10231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:43:05.013 [DEBUG] [Thread-10231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:43:05.017 [DEBUG] [Thread-10231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:43:05.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:43:05.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:43:05.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:43:05.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:43:05.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:43:05.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:43:05.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:43:05.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:43:05.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:43:05.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.362910 -999.00  +23.00  25.72     36   +7.40 1 2 1 1 1   888    0 16.16 28.48 ----- 25.7 25.7 331.4 35.0 30.0 -22.8 29.2 -23.9 28.2 -19.8 28.7 -21.1
2025-12-25T10:43:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:43:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:43:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.362910
2025-12-25T10:43:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:43:05.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:43:05.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:43:05.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:43:05.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:43:05.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:42:51', tmtdew=18.31, humidity=30.85, cloud=0.0, wind=13.85, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:42:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:43:05.045 [DEBUG] [Thread-10231] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:43:05.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-25T10:43:05.139 [DEBUG] [Thread-10234] [transport.py] [_log()] starting thread (client mode): 0xb6b50a90
2025-12-25T10:43:05.139 [DEBUG] [Thread-10234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:43:05.153 [DEBUG] [Thread-10234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:43:05.154 [INFO] [Thread-10234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:43:05.161 [DEBUG] [Thread-10234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] client lang: <none>
2025-12-25T10:43:05.162 [DEBUG] [Thread-10234] [transport.py] [_log()] server lang: <none>
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] kex follows: False
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] Compression: none
2025-12-25T10:43:05.163 [DEBUG] [Thread-10234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:43:05.221 [DEBUG] [Thread-10234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:43:05.221 [DEBUG] [Thread-10234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:43:05.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:43:05.223 [DEBUG] [Thread-10234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:43:05.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:43:05.279 [DEBUG] [Thread-10234] [transport.py] [_log()] userauth is OK
2025-12-25T10:43:05.280 [DEBUG] [Thread-10234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:43:05.280 [DEBUG] [Thread-10234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:43:05.280 [DEBUG] [Thread-10234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:43:05.280 [DEBUG] [Thread-10234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:43:05.299 [INFO] [Thread-10234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:43: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-25T10:43:05.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:43:06.155 [DEBUG] [Thread-10234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:43:06.156 [DEBUG] [Thread-10234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:43:06.204 [DEBUG] [Thread-10234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:43:06.204 [DEBUG] [Thread-10234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:43:06.214 [DEBUG] [Thread-10234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:43:06.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:43:06.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:43:06.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:43:06.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:43:06.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:43:06.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:43:06.250 [DEBUG] [Thread-10234] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:43:18.087 [DEBUG] [Thread-10236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:33.136 [DEBUG] [Thread-10237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:43:36.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:43:36.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-25T10:43:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 43, 23), 18.29, 30.87, 0.0, 16.71, 23.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:43:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:43:23
2025-12-25T10:43:37.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:43:37.234 [DEBUG] [Thread-10238] [transport.py] [_log()] starting thread (client mode): 0xb6bab730
2025-12-25T10:43:37.234 [DEBUG] [Thread-10238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:43:37.254 [DEBUG] [Thread-10238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:43:37.254 [INFO] [Thread-10238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] client lang: <none>
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] server lang: <none>
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] kex follows: False
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] Compression: none
2025-12-25T10:43:37.257 [DEBUG] [Thread-10238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:43:37.273 [DEBUG] [Thread-10238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:43:37.274 [DEBUG] [Thread-10238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:43:37.274 [DEBUG] [Thread-10238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:43:37.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:43:37.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:43:37.276 [DEBUG] [Thread-10238] [transport.py] [_log()] userauth is OK
2025-12-25T10:43:37.276 [DEBUG] [Thread-10238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:43:37.276 [DEBUG] [Thread-10238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:43:37.277 [DEBUG] [Thread-10238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:43:37.277 [DEBUG] [Thread-10238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:43:37.306 [INFO] [Thread-10238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:43:37.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:43:37.913 [DEBUG] [Thread-10238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:43:37.914 [DEBUG] [Thread-10238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:43:37.914 [DEBUG] [Thread-10238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:43:37.955 [DEBUG] [Thread-10238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:43:37.955 [DEBUG] [Thread-10238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:43:37.958 [DEBUG] [Thread-10238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:43:37.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:43:37.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:43:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:43:37.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:43:37.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:43:37.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:43:37.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:43:37.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:43:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:43:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.363257 -999.00  +23.30  23.18     36   +7.60 1 2 1 1 1   888    0 16.07 30.59 ----- 23.2 23.2 330.4 29.5 30.0 -22.6 29.3 -21.7 28.2 -19.4 28.8 -20.7
2025-12-25T10:43:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:43:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:43:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.363257
2025-12-25T10:43:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:43:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:43:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:43:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:43:37.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:43:37.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:43:23', tmtdew=18.29, humidity=30.87, cloud=0.0, wind=16.71, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:43:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:43:37.986 [DEBUG] [Thread-10238] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:43:38.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-25T10:43:38.080 [DEBUG] [Thread-10241] [transport.py] [_log()] starting thread (client mode): 0xb6b635b0
2025-12-25T10:43:38.080 [DEBUG] [Thread-10241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:43:38.099 [DEBUG] [Thread-10241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:43:38.100 [INFO] [Thread-10241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:43:38.107 [DEBUG] [Thread-10241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:43:38.107 [DEBUG] [Thread-10241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:43:38.107 [DEBUG] [Thread-10241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:43:38.107 [DEBUG] [Thread-10241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] client lang: <none>
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] server lang: <none>
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] kex follows: False
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:43:38.108 [DEBUG] [Thread-10241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:43:38.109 [DEBUG] [Thread-10241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:43:38.109 [DEBUG] [Thread-10241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:43:38.109 [DEBUG] [Thread-10241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:43:38.109 [DEBUG] [Thread-10241] [transport.py] [_log()] Compression: none
2025-12-25T10:43:38.109 [DEBUG] [Thread-10241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:43:38.165 [DEBUG] [Thread-10241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:43:38.166 [DEBUG] [Thread-10241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:43:38.166 [DEBUG] [Thread-10241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:43:38.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:43:38.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:43:38.225 [DEBUG] [Thread-10241] [transport.py] [_log()] userauth is OK
2025-12-25T10:43:38.225 [DEBUG] [Thread-10241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:43:38.225 [DEBUG] [Thread-10241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:43:38.225 [DEBUG] [Thread-10241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:43:38.225 [DEBUG] [Thread-10241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:43:38.245 [INFO] [Thread-10241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:43:38.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-25T10:43:38.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:43:39.121 [DEBUG] [Thread-10241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:43:39.121 [DEBUG] [Thread-10241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:43:39.169 [DEBUG] [Thread-10241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:43:39.169 [DEBUG] [Thread-10241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:43:39.177 [DEBUG] [Thread-10241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:43:39.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:43:39.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:43:39.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:43:39.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:43:39.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:43:39.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:43:39.211 [DEBUG] [Thread-10241] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:43:48.170 [DEBUG] [Thread-10243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:43:56.338 [DEBUG] [Thread-10244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:03.230 [DEBUG] [Thread-10245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:04.716 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:04.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:44:09.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:44:09.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-25T10:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 43, 55), 18.38, 30.05, 0.0, 18.49, 23.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:44:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:43:55
2025-12-25T10:44:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:44:10.165 [DEBUG] [Thread-10246] [transport.py] [_log()] starting thread (client mode): 0xb6b63e80
2025-12-25T10:44:10.165 [DEBUG] [Thread-10246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:44:10.186 [DEBUG] [Thread-10246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:44:10.186 [INFO] [Thread-10246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:44:10.189 [DEBUG] [Thread-10246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] client lang: <none>
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] server lang: <none>
2025-12-25T10:44:10.190 [DEBUG] [Thread-10246] [transport.py] [_log()] kex follows: False
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] Compression: none
2025-12-25T10:44:10.191 [DEBUG] [Thread-10246] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:44:10.211 [DEBUG] [Thread-10246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:44:10.212 [DEBUG] [Thread-10246] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:44:10.213 [DEBUG] [Thread-10246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:44:10.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:44:10.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:44:10.215 [DEBUG] [Thread-10246] [transport.py] [_log()] userauth is OK
2025-12-25T10:44:10.215 [DEBUG] [Thread-10246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:44:10.216 [DEBUG] [Thread-10246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:44:10.216 [DEBUG] [Thread-10246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:44:10.216 [DEBUG] [Thread-10246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:44:10.240 [INFO] [Thread-10246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:44:10.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:44:10.885 [DEBUG] [Thread-10246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:44:10.885 [DEBUG] [Thread-10246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:44:10.886 [DEBUG] [Thread-10246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:44:10.926 [DEBUG] [Thread-10246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:44:10.926 [DEBUG] [Thread-10246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:44:10.930 [DEBUG] [Thread-10246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:44:10.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:44:10.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:44:10.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:44:10.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:44:10.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:44:10.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:44:10.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:44:10.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:44:10.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:44:10.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.363604 -999.00  +23.00  18.12     36   +7.50 1 2 1 1 1   888    0 15.99 34.26 ----- 18.1 18.1 322.4 25.8 30.1 -23.3 29.3 -23.2 28.3 -20.3 28.8 -20.9
2025-12-25T10:44:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:44:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:44:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.363604
2025-12-25T10:44:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:44:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:44:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:44:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:44:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:44:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:43:55', tmtdew=18.38, humidity=30.05, cloud=0.0, wind=18.49, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:43:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:44:10.953 [DEBUG] [Thread-10246] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:44:11.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-25T10:44:11.047 [DEBUG] [Thread-10249] [transport.py] [_log()] starting thread (client mode): 0xb6b2b5b0
2025-12-25T10:44:11.047 [DEBUG] [Thread-10249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:44:11.064 [DEBUG] [Thread-10249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:44:11.064 [INFO] [Thread-10249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:44:11.072 [DEBUG] [Thread-10249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:44:11.072 [DEBUG] [Thread-10249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:44:11.072 [DEBUG] [Thread-10249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] client lang: <none>
2025-12-25T10:44:11.073 [DEBUG] [Thread-10249] [transport.py] [_log()] server lang: <none>
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] kex follows: False
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] Compression: none
2025-12-25T10:44:11.074 [DEBUG] [Thread-10249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:44:11.133 [DEBUG] [Thread-10249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:44:11.133 [DEBUG] [Thread-10249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:44:11.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:44:11.135 [DEBUG] [Thread-10249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:44:11.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:44:11.192 [DEBUG] [Thread-10249] [transport.py] [_log()] userauth is OK
2025-12-25T10:44:11.192 [DEBUG] [Thread-10249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:44:11.193 [DEBUG] [Thread-10249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:44:11.193 [DEBUG] [Thread-10249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:44:11.193 [DEBUG] [Thread-10249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:44:11.212 [INFO] [Thread-10249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:44:11.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-25T10:44:11.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:44:12.048 [DEBUG] [Thread-10249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:44:12.048 [DEBUG] [Thread-10249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:44:12.096 [DEBUG] [Thread-10249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:44:12.096 [DEBUG] [Thread-10249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:44:12.106 [DEBUG] [Thread-10249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:44:12.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:44:12.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:44:12.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:44:12.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:44:12.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:44:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:44:12.143 [DEBUG] [Thread-10249] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:44:18.267 [DEBUG] [Thread-10251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:33.319 [DEBUG] [Thread-10252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:44:42.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:44:42.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-25T10:44:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 44, 27), 18.28, 30.28, 0.0, 18.99, 23.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:44:42.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:44:27
2025-12-25T10:44:42.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:44:43.142 [DEBUG] [Thread-10253] [transport.py] [_log()] starting thread (client mode): 0xb6b638b0
2025-12-25T10:44:43.143 [DEBUG] [Thread-10253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:44:43.162 [DEBUG] [Thread-10253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:44:43.162 [INFO] [Thread-10253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:44:43.165 [DEBUG] [Thread-10253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] client lang: <none>
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] server lang: <none>
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] kex follows: False
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] Compression: none
2025-12-25T10:44:43.166 [DEBUG] [Thread-10253] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:44:43.184 [DEBUG] [Thread-10253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:44:43.185 [DEBUG] [Thread-10253] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:44:43.185 [DEBUG] [Thread-10253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:44:43.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:44:43.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:44:43.187 [DEBUG] [Thread-10253] [transport.py] [_log()] userauth is OK
2025-12-25T10:44:43.187 [DEBUG] [Thread-10253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:44:43.187 [DEBUG] [Thread-10253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:44:43.187 [DEBUG] [Thread-10253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:44:43.187 [DEBUG] [Thread-10253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:44:43.211 [INFO] [Thread-10253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:44:43.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:44:43.816 [DEBUG] [Thread-10253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:44:43.817 [DEBUG] [Thread-10253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:44:43.817 [DEBUG] [Thread-10253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:44:43.858 [DEBUG] [Thread-10253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:44:43.858 [DEBUG] [Thread-10253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:44:43.861 [DEBUG] [Thread-10253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:44:43.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:44:43.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:44:43.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:44:43.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:44:43.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:44:43.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:44:43.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:44:43.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:44:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:44:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.363951 -999.00  +22.40  14.06     37   +7.20 1 2 1 1 1   888    0 16.27 35.59 ----- 14.1 14.1 334.3 18.3 30.2 -22.6 29.3 -22.6 28.3 -20.0 28.9 -21.1
2025-12-25T10:44:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:44:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:44:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.363951
2025-12-25T10:44:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:44:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:44:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:44:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:44:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:44:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:44:27', tmtdew=18.28, humidity=30.28, cloud=0.0, wind=18.99, temperature=23.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:44:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:44:43.889 [DEBUG] [Thread-10253] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:44:43.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:44:43.983 [DEBUG] [Thread-10256] [transport.py] [_log()] starting thread (client mode): 0xb6b62230
2025-12-25T10:44:43.983 [DEBUG] [Thread-10256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:44:43.998 [DEBUG] [Thread-10256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:44:43.998 [INFO] [Thread-10256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:44:44.005 [DEBUG] [Thread-10256] [transport.py] [_log()] client lang: <none>
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] server lang: <none>
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] kex follows: False
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] Compression: none
2025-12-25T10:44:44.006 [DEBUG] [Thread-10256] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:44:44.062 [DEBUG] [Thread-10256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:44:44.062 [DEBUG] [Thread-10256] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:44:44.063 [DEBUG] [Thread-10256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:44:44.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:44:44.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:44:44.122 [DEBUG] [Thread-10256] [transport.py] [_log()] userauth is OK
2025-12-25T10:44:44.123 [DEBUG] [Thread-10256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:44:44.123 [DEBUG] [Thread-10256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:44:44.123 [DEBUG] [Thread-10256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:44:44.123 [DEBUG] [Thread-10256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:44:44.147 [INFO] [Thread-10256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:44:44.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-25T10:44:44.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:44:45.022 [DEBUG] [Thread-10256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:44:45.022 [DEBUG] [Thread-10256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:44:45.070 [DEBUG] [Thread-10256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:44:45.070 [DEBUG] [Thread-10256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:44:45.079 [DEBUG] [Thread-10256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:44:45.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:44:45.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-25T10:44:45.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-25T10:44:45.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:44:45.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:44:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:44:45.117 [DEBUG] [Thread-10256] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:44:48.350 [DEBUG] [Thread-10258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:44:56.393 [DEBUG] [Thread-10259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:03.404 [DEBUG] [Thread-10260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:04.858 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:04.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:15.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:45:15.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:45:15.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:45:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 44, 59), 18.01, 30.92, 0.0, 13.78, 23.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:45:15.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:44:59
2025-12-25T10:45:16.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:45:16.161 [DEBUG] [Thread-10261] [transport.py] [_log()] starting thread (client mode): 0xb6b632b0
2025-12-25T10:45:16.161 [DEBUG] [Thread-10261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:45:16.181 [DEBUG] [Thread-10261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:45:16.181 [INFO] [Thread-10261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] client lang: <none>
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] server lang: <none>
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] kex follows: False
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:45:16.184 [DEBUG] [Thread-10261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:45:16.185 [DEBUG] [Thread-10261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:45:16.185 [DEBUG] [Thread-10261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:45:16.185 [DEBUG] [Thread-10261] [transport.py] [_log()] Compression: none
2025-12-25T10:45:16.185 [DEBUG] [Thread-10261] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:45:16.201 [DEBUG] [Thread-10261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:45:16.201 [DEBUG] [Thread-10261] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:45:16.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:45:16.201 [DEBUG] [Thread-10261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:45:16.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:45:16.202 [DEBUG] [Thread-10261] [transport.py] [_log()] userauth is OK
2025-12-25T10:45:16.202 [DEBUG] [Thread-10261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:45:16.202 [DEBUG] [Thread-10261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:45:16.202 [DEBUG] [Thread-10261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:45:16.202 [DEBUG] [Thread-10261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:45:16.218 [INFO] [Thread-10261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:45:16.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:45:16.844 [DEBUG] [Thread-10261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:45:16.844 [DEBUG] [Thread-10261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:45:16.845 [DEBUG] [Thread-10261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:45:16.886 [DEBUG] [Thread-10261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:45:16.886 [DEBUG] [Thread-10261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:45:16.888 [DEBUG] [Thread-10261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:45:16.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:45:16.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:45:16.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:45:16.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:45:16.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:45:16.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:45:16.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.364646 -999.00  +23.00  22.57     37   +7.80 1 2 1 1 1   888    0 16.00 28.35 ----- 22.6 22.6 43.4 32.1 30.2 -22.2 29.4 -24.1 28.4 -19.4 28.9 -20.5
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.364646
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:45:16.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:44:59', tmtdew=18.01, humidity=30.92, cloud=0.0, wind=13.78, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:45:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:45:16.906 [DEBUG] [Thread-10261] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:45:16.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:45:18.438 [DEBUG] [Thread-10264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:33.479 [DEBUG] [Thread-10265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:48.510 [DEBUG] [Thread-10266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:45:56.452 [DEBUG] [Thread-10267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:03.544 [DEBUG] [Thread-10268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:05.002 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:05.003 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:18.583 [DEBUG] [Thread-10269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:33.618 [DEBUG] [Thread-10270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:48.646 [DEBUG] [Thread-10271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:46:56.514 [DEBUG] [Thread-10272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:03.683 [DEBUG] [Thread-10273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:05.142 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:05.143 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:18.716 [DEBUG] [Thread-10274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:30.773 [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-25T10:47:33.756 [DEBUG] [Thread-10275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:48.795 [DEBUG] [Thread-10276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:47:56.565 [DEBUG] [Thread-10277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:00.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:48:00.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:48:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:48:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 47, 39), 17.6, 31.97, 0.0, 8.89, 23.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:48:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:47:39
2025-12-25T10:48:01.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:48:01.777 [DEBUG] [Thread-10278] [transport.py] [_log()] starting thread (client mode): 0xb6be18a0
2025-12-25T10:48:01.777 [DEBUG] [Thread-10278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:48:01.796 [DEBUG] [Thread-10278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:48:01.796 [INFO] [Thread-10278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:48:01.797 [DEBUG] [Thread-10278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] client lang: <none>
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] server lang: <none>
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] kex follows: False
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:48:01.798 [DEBUG] [Thread-10278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:48:01.799 [DEBUG] [Thread-10278] [transport.py] [_log()] Compression: none
2025-12-25T10:48:01.799 [DEBUG] [Thread-10278] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:48:01.814 [DEBUG] [Thread-10278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:48:01.815 [DEBUG] [Thread-10278] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:48:01.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:48:01.816 [DEBUG] [Thread-10278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:48:01.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:48:01.818 [DEBUG] [Thread-10278] [transport.py] [_log()] userauth is OK
2025-12-25T10:48:01.818 [DEBUG] [Thread-10278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:48:01.818 [DEBUG] [Thread-10278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:48:01.818 [DEBUG] [Thread-10278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:48:01.819 [DEBUG] [Thread-10278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:48:01.842 [INFO] [Thread-10278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:48:01.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:48:02.447 [DEBUG] [Thread-10278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:48:02.447 [DEBUG] [Thread-10278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:48:02.447 [DEBUG] [Thread-10278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:48:02.488 [DEBUG] [Thread-10278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:48:02.488 [DEBUG] [Thread-10278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:48:02.491 [DEBUG] [Thread-10278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:48:02.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:48:02.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:48:02.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:48:02.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:48:02.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:48:02.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:48:02.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:48:02.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:48:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:48:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.366382 -999.00  +22.50  11.51     38   +7.70 1 2 1 1 1   888    0 15.42 10.09 ----- 11.5 11.5 29.5 13.7 30.4 -21.9 29.6 -21.6 28.5 -17.8 29.0 -19.7
2025-12-25T10:48:02.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:48:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:48:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.366382
2025-12-25T10:48:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:48:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:48:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:48:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:48:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:48:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:47:39', tmtdew=17.6, humidity=31.97, cloud=0.0, wind=8.89, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:47:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:48:02.513 [DEBUG] [Thread-10278] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:48:02.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-25T10:48:02.608 [DEBUG] [Thread-10281] [transport.py] [_log()] starting thread (client mode): 0xb6b60a30
2025-12-25T10:48:02.608 [DEBUG] [Thread-10281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:48:02.623 [DEBUG] [Thread-10281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:48:02.624 [INFO] [Thread-10281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:48:02.631 [DEBUG] [Thread-10281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] client lang: <none>
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] server lang: <none>
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] kex follows: False
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:48:02.632 [DEBUG] [Thread-10281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:48:02.633 [DEBUG] [Thread-10281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:48:02.633 [DEBUG] [Thread-10281] [transport.py] [_log()] Compression: none
2025-12-25T10:48:02.633 [DEBUG] [Thread-10281] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:48:02.695 [DEBUG] [Thread-10281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:48:02.696 [DEBUG] [Thread-10281] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:48:02.697 [DEBUG] [Thread-10281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:48:02.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:48:02.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:48:02.751 [DEBUG] [Thread-10281] [transport.py] [_log()] userauth is OK
2025-12-25T10:48:02.752 [DEBUG] [Thread-10281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:48:02.752 [DEBUG] [Thread-10281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:48:02.752 [DEBUG] [Thread-10281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:48:02.752 [DEBUG] [Thread-10281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:48:02.771 [INFO] [Thread-10281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:48:02.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:48:02.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:48:03.644 [DEBUG] [Thread-10281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:48:03.644 [DEBUG] [Thread-10281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:48:03.695 [DEBUG] [Thread-10281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:48:03.695 [DEBUG] [Thread-10281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:48:03.705 [DEBUG] [Thread-10281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:48:03.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:48:03.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:48:03.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:48:03.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:48:03.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:48:03.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:48:03.742 [DEBUG] [Thread-10281] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:48:03.827 [DEBUG] [Thread-10283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:05.285 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:05.286 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:18.879 [DEBUG] [Thread-10284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:33.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:48:33.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:48:33.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-25T10:48:33.910 [DEBUG] [Thread-10285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 48, 11), 17.86, 31.47, 0.0, 15.72, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:48:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:48:11
2025-12-25T10:48:34.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:48:34.800 [DEBUG] [Thread-10286] [transport.py] [_log()] starting thread (client mode): 0xb6be0580
2025-12-25T10:48:34.800 [DEBUG] [Thread-10286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:48:34.821 [DEBUG] [Thread-10286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:48:34.821 [INFO] [Thread-10286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] client lang: <none>
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] server lang: <none>
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] kex follows: False
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:48:34.824 [DEBUG] [Thread-10286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:48:34.825 [DEBUG] [Thread-10286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:48:34.825 [DEBUG] [Thread-10286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:48:34.825 [DEBUG] [Thread-10286] [transport.py] [_log()] Compression: none
2025-12-25T10:48:34.825 [DEBUG] [Thread-10286] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:48:34.841 [DEBUG] [Thread-10286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:48:34.841 [DEBUG] [Thread-10286] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:48:34.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:48:34.841 [DEBUG] [Thread-10286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:48:34.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:48:34.842 [DEBUG] [Thread-10286] [transport.py] [_log()] userauth is OK
2025-12-25T10:48:34.842 [DEBUG] [Thread-10286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:48:34.842 [DEBUG] [Thread-10286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:48:34.842 [DEBUG] [Thread-10286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:48:34.842 [DEBUG] [Thread-10286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:48:34.855 [INFO] [Thread-10286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:48:34.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:48:35.461 [DEBUG] [Thread-10286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:48:35.461 [DEBUG] [Thread-10286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:48:35.461 [DEBUG] [Thread-10286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:48:35.502 [DEBUG] [Thread-10286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:48:35.502 [DEBUG] [Thread-10286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:48:35.504 [DEBUG] [Thread-10286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:48:35.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:48:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:48:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:48:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:48:35.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:48:35.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:48:35.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:48:35.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:48:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:48:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.366729 -999.00  +23.00  13.82     38   +7.90 1 2 1 1 1   888    0 15.36 8.35 ----- 13.8 13.8 45.0 15.7 30.5 -21.1 29.7 -19.8 28.6 -17.1 29.1 -18.3
2025-12-25T10:48:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:48:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:48:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.366729
2025-12-25T10:48:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:48:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:48:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:48:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:48:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:48:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:48:11', tmtdew=17.86, humidity=31.47, cloud=0.0, wind=15.72, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:48:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:48:35.519 [DEBUG] [Thread-10286] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:48:35.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-25T10:48:48.943 [DEBUG] [Thread-10289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:48:56.629 [DEBUG] [Thread-10290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:03.995 [DEBUG] [Thread-10291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:05.434 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:05.435 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:19.024 [DEBUG] [Thread-10292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:34.063 [DEBUG] [Thread-10293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:49.100 [DEBUG] [Thread-10294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:49:56.679 [DEBUG] [Thread-10295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:04.130 [DEBUG] [Thread-10296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:05.574 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:05.574 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:19.167 [DEBUG] [Thread-10297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:34.198 [DEBUG] [Thread-10298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:47.381 [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-25T10:50:49.238 [DEBUG] [Thread-10299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:50:56.729 [DEBUG] [Thread-10300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:04.277 [DEBUG] [Thread-10301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:05.717 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:05.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:17.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:51:17.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:51:17.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-25T10:51:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 50, 52), 19.5, 28.52, 0.0, 18.08, 24.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:51:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:50:52
2025-12-25T10:51:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:51:18.414 [DEBUG] [Thread-10302] [transport.py] [_log()] starting thread (client mode): 0xb6be0f40
2025-12-25T10:51:18.414 [DEBUG] [Thread-10302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:51:18.434 [DEBUG] [Thread-10302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:51:18.434 [INFO] [Thread-10302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:51:18.437 [DEBUG] [Thread-10302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:51:18.437 [DEBUG] [Thread-10302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:51:18.437 [DEBUG] [Thread-10302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:51:18.437 [DEBUG] [Thread-10302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] client lang: <none>
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] server lang: <none>
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] kex follows: False
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] Compression: none
2025-12-25T10:51:18.438 [DEBUG] [Thread-10302] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:51:18.455 [DEBUG] [Thread-10302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:51:18.456 [DEBUG] [Thread-10302] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:51:18.456 [DEBUG] [Thread-10302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:51:18.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:51:18.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:51:18.458 [DEBUG] [Thread-10302] [transport.py] [_log()] userauth is OK
2025-12-25T10:51:18.458 [DEBUG] [Thread-10302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:51:18.458 [DEBUG] [Thread-10302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:51:18.458 [DEBUG] [Thread-10302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:51:18.459 [DEBUG] [Thread-10302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:51:18.481 [INFO] [Thread-10302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:51:18.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:51:19.132 [DEBUG] [Thread-10302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:51:19.133 [DEBUG] [Thread-10302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:51:19.133 [DEBUG] [Thread-10302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:51:19.174 [DEBUG] [Thread-10302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:51:19.174 [DEBUG] [Thread-10302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:51:19.178 [DEBUG] [Thread-10302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:51:19.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:51:19.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:51:19.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:51:19.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:51:19.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:51:19.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:51:19.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:51:19.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:51:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:51:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.368465 -999.00  +24.30  19.38     35   +8.00 1 2 1 1 1   888    0 15.59 14.09 ----- 19.4 19.4 314.6 22.0 30.6 -19.8 30.0 -17.5 28.8 -16.4 29.4 -17.9
2025-12-25T10:51:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:51:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:51:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.368465
2025-12-25T10:51:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:51:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:51:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:51:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:51:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:51:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:50:52', tmtdew=19.5, humidity=28.52, cloud=0.0, wind=18.08, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:50:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:51:19.206 [DEBUG] [Thread-10302] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:51:19.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-25T10:51:19.299 [DEBUG] [Thread-10305] [transport.py] [_log()] starting thread (client mode): 0xb6be23e0
2025-12-25T10:51:19.299 [DEBUG] [Thread-10305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:51:19.308 [DEBUG] [Thread-10306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:19.314 [DEBUG] [Thread-10305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:51:19.314 [INFO] [Thread-10305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:51:19.321 [DEBUG] [Thread-10305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:51:19.321 [DEBUG] [Thread-10305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] client lang: <none>
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] server lang: <none>
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] kex follows: False
2025-12-25T10:51:19.322 [DEBUG] [Thread-10305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:51:19.323 [DEBUG] [Thread-10305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:51:19.323 [DEBUG] [Thread-10305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:51:19.323 [DEBUG] [Thread-10305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:51:19.323 [DEBUG] [Thread-10305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:51:19.323 [DEBUG] [Thread-10305] [transport.py] [_log()] Compression: none
2025-12-25T10:51:19.323 [DEBUG] [Thread-10305] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:51:19.386 [DEBUG] [Thread-10305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:51:19.387 [DEBUG] [Thread-10305] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:51:19.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:51:19.388 [DEBUG] [Thread-10305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:51:19.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:51:19.442 [DEBUG] [Thread-10305] [transport.py] [_log()] userauth is OK
2025-12-25T10:51:19.442 [DEBUG] [Thread-10305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:51:19.443 [DEBUG] [Thread-10305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:51:19.443 [DEBUG] [Thread-10305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:51:19.443 [DEBUG] [Thread-10305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:51:19.462 [INFO] [Thread-10305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:51:19.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-25T10:51:19.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:51:20.317 [DEBUG] [Thread-10305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:51:20.317 [DEBUG] [Thread-10305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:51:20.364 [DEBUG] [Thread-10305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:51:20.365 [DEBUG] [Thread-10305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:51:20.373 [DEBUG] [Thread-10305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:51:20.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:51:20.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-25T10:51:20.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:51:20.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:51:20.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:51:20.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:51:20.408 [DEBUG] [Thread-10305] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:51:34.352 [DEBUG] [Thread-10308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:49.387 [DEBUG] [Thread-10309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:51:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:51:50.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:51:50.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-25T10:51:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 51, 24), 19.77, 28.08, 0.0, 18.77, 24.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:51:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:51:24
2025-12-25T10:51:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:51:51.445 [DEBUG] [Thread-10310] [transport.py] [_log()] starting thread (client mode): 0xb6b2ba00
2025-12-25T10:51:51.446 [DEBUG] [Thread-10310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:51:51.465 [DEBUG] [Thread-10310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:51:51.465 [INFO] [Thread-10310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] client lang: <none>
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] server lang: <none>
2025-12-25T10:51:51.468 [DEBUG] [Thread-10310] [transport.py] [_log()] kex follows: False
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] Compression: none
2025-12-25T10:51:51.469 [DEBUG] [Thread-10310] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:51:51.485 [DEBUG] [Thread-10310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:51:51.485 [DEBUG] [Thread-10310] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:51:51.486 [DEBUG] [Thread-10310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:51:51.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:51:51.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:51:51.488 [DEBUG] [Thread-10310] [transport.py] [_log()] userauth is OK
2025-12-25T10:51:51.488 [DEBUG] [Thread-10310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:51:51.488 [DEBUG] [Thread-10310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:51:51.488 [DEBUG] [Thread-10310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:51:51.488 [DEBUG] [Thread-10310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:51:51.512 [INFO] [Thread-10310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:51:51.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:51:52.168 [DEBUG] [Thread-10310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:51:52.168 [DEBUG] [Thread-10310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:51:52.169 [DEBUG] [Thread-10310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:51:52.209 [DEBUG] [Thread-10310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:51:52.209 [DEBUG] [Thread-10310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:51:52.213 [DEBUG] [Thread-10310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:51:52.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:51:52.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:51:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:51:52.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:51:52.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:51:52.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:51:52.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:51:52.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:51:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:51:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.368813 -999.00  +24.20  29.60     32   +6.60 1 2 1 1 1   888    0 15.79 21.66 ----- 29.6 29.6 323.7 40.2 30.9 -22.2 29.9 -22.9 28.9 -18.3 29.4 -21.8
2025-12-25T10:51:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:51:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:51:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.368813
2025-12-25T10:51:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:51:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:51:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:51:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:51:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:51:52.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:51:24', tmtdew=19.77, humidity=28.08, cloud=0.0, wind=18.77, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:51:05.443', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:51:52.240 [DEBUG] [Thread-10310] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:51:52.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:51:52.333 [DEBUG] [Thread-10313] [transport.py] [_log()] starting thread (client mode): 0xb6b63ee0
2025-12-25T10:51:52.334 [DEBUG] [Thread-10313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:51:52.348 [DEBUG] [Thread-10313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:51:52.348 [INFO] [Thread-10313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:51:52.356 [DEBUG] [Thread-10313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:51:52.356 [DEBUG] [Thread-10313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:51:52.356 [DEBUG] [Thread-10313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:51:52.356 [DEBUG] [Thread-10313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:52.356 [DEBUG] [Thread-10313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:51:52.356 [DEBUG] [Thread-10313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] client lang: <none>
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] server lang: <none>
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] kex follows: False
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] Compression: none
2025-12-25T10:51:52.357 [DEBUG] [Thread-10313] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:51:52.413 [DEBUG] [Thread-10313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:51:52.413 [DEBUG] [Thread-10313] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:51:52.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:51:52.414 [DEBUG] [Thread-10313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:51:52.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:51:52.469 [DEBUG] [Thread-10313] [transport.py] [_log()] userauth is OK
2025-12-25T10:51:52.469 [DEBUG] [Thread-10313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:51:52.469 [DEBUG] [Thread-10313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:51:52.470 [DEBUG] [Thread-10313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:51:52.470 [DEBUG] [Thread-10313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:51:52.489 [INFO] [Thread-10313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:51:52.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-25T10:51:52.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:51:53.319 [DEBUG] [Thread-10313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:51:53.320 [DEBUG] [Thread-10313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:51:53.368 [DEBUG] [Thread-10313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:51:53.368 [DEBUG] [Thread-10313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:51:53.377 [DEBUG] [Thread-10313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:51:53.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:51:53.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-25T10:51:53.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-25T10:51:53.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:51:53.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:51:53.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:51:53.414 [DEBUG] [Thread-10313] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:51:56.782 [DEBUG] [Thread-10315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:04.416 [DEBUG] [Thread-10316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:05.856 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:05.857 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:19.465 [DEBUG] [Thread-10317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:23.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:52:23.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:52:23.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-25T10:52:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 51, 56), 21.02, 25.2, 0.0, 30.01, 24.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:52:24.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:51:56
2025-12-25T10:52:24.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:52:24.418 [DEBUG] [Thread-10318] [transport.py] [_log()] starting thread (client mode): 0xb6be12a0
2025-12-25T10:52:24.418 [DEBUG] [Thread-10318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:52:24.432 [DEBUG] [Thread-10318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:52:24.432 [INFO] [Thread-10318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] client lang: <none>
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] server lang: <none>
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] kex follows: False
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] Compression: none
2025-12-25T10:52:24.434 [DEBUG] [Thread-10318] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:52:24.446 [DEBUG] [Thread-10318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:52:24.446 [DEBUG] [Thread-10318] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:52:24.446 [DEBUG] [Thread-10318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:52:24.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:52:24.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:52:24.447 [DEBUG] [Thread-10318] [transport.py] [_log()] userauth is OK
2025-12-25T10:52:24.447 [DEBUG] [Thread-10318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:52:24.447 [DEBUG] [Thread-10318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:52:24.447 [DEBUG] [Thread-10318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:52:24.447 [DEBUG] [Thread-10318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:52:24.459 [INFO] [Thread-10318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:52:24.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:52:25.052 [DEBUG] [Thread-10318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:52:25.052 [DEBUG] [Thread-10318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:52:25.052 [DEBUG] [Thread-10318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:52:25.092 [DEBUG] [Thread-10318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:52:25.092 [DEBUG] [Thread-10318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:52:25.095 [DEBUG] [Thread-10318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:52:25.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:52:25.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:52:25.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:52:25.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:52:25.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:52:25.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:52:25.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.369160 -999.00  +24.40  23.40     32   +6.60 1 2 1 1 1   888    0 16.24 33.01 ----- 23.4 23.4 321.1 28.9 30.7 -21.9 29.9 -19.6 28.9 -18.6 29.5 -19.6
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.369160
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:52:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:52:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:52:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:52:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:51:56', tmtdew=21.02, humidity=25.2, cloud=0.0, wind=30.01, temperature=24.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:51:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:52:25.113 [DEBUG] [Thread-10318] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:52:25.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-25T10:52:25.197 [DEBUG] [Thread-10321] [transport.py] [_log()] starting thread (client mode): 0xb6be0d00
2025-12-25T10:52:25.197 [DEBUG] [Thread-10321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:52:25.212 [DEBUG] [Thread-10321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:52:25.212 [INFO] [Thread-10321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:52:25.219 [DEBUG] [Thread-10321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:52:25.219 [DEBUG] [Thread-10321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:52:25.219 [DEBUG] [Thread-10321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] client lang: <none>
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] server lang: <none>
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] kex follows: False
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] Compression: none
2025-12-25T10:52:25.220 [DEBUG] [Thread-10321] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:52:25.275 [DEBUG] [Thread-10321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:52:25.275 [DEBUG] [Thread-10321] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:52:25.275 [DEBUG] [Thread-10321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:52:25.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:52:25.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:52:25.336 [DEBUG] [Thread-10321] [transport.py] [_log()] userauth is OK
2025-12-25T10:52:25.336 [DEBUG] [Thread-10321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:52:25.336 [DEBUG] [Thread-10321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:52:25.336 [DEBUG] [Thread-10321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:52:25.336 [DEBUG] [Thread-10321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:52:25.353 [INFO] [Thread-10321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:52:25.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T10:52:25.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:52:26.246 [DEBUG] [Thread-10321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:52:26.246 [DEBUG] [Thread-10321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:52:26.294 [DEBUG] [Thread-10321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:52:26.294 [DEBUG] [Thread-10321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:52:26.303 [DEBUG] [Thread-10321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:52:26.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:52:26.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-25T10:52:26.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:52:26.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:52:26.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:52:26.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:52:26.335 [DEBUG] [Thread-10321] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:52:34.496 [DEBUG] [Thread-10323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:49.559 [DEBUG] [Thread-10324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:56.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:52:56.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:52:56.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-25T10:52:56.811 [DEBUG] [Thread-10325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:52:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 52, 28), 20.96, 25.25, 0.0, 28.88, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:52:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:52:28
2025-12-25T10:52:57.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:52:57.339 [DEBUG] [Thread-10326] [transport.py] [_log()] starting thread (client mode): 0xb6be35b0
2025-12-25T10:52:57.339 [DEBUG] [Thread-10326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:52:57.359 [DEBUG] [Thread-10326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:52:57.359 [INFO] [Thread-10326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] client lang: <none>
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] server lang: <none>
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] kex follows: False
2025-12-25T10:52:57.362 [DEBUG] [Thread-10326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:52:57.363 [DEBUG] [Thread-10326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:52:57.363 [DEBUG] [Thread-10326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:52:57.363 [DEBUG] [Thread-10326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:52:57.363 [DEBUG] [Thread-10326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:52:57.363 [DEBUG] [Thread-10326] [transport.py] [_log()] Compression: none
2025-12-25T10:52:57.363 [DEBUG] [Thread-10326] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:52:57.380 [DEBUG] [Thread-10326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:52:57.380 [DEBUG] [Thread-10326] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:52:57.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:52:57.381 [DEBUG] [Thread-10326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:52:57.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:52:57.383 [DEBUG] [Thread-10326] [transport.py] [_log()] userauth is OK
2025-12-25T10:52:57.384 [DEBUG] [Thread-10326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:52:57.384 [DEBUG] [Thread-10326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:52:57.384 [DEBUG] [Thread-10326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:52:57.384 [DEBUG] [Thread-10326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:52:57.398 [INFO] [Thread-10326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:52:57.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:52:58.018 [DEBUG] [Thread-10326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:52:58.018 [DEBUG] [Thread-10326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:52:58.018 [DEBUG] [Thread-10326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:52:58.059 [DEBUG] [Thread-10326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:52:58.059 [DEBUG] [Thread-10326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:52:58.062 [DEBUG] [Thread-10326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:52:58.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:52:58.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:52:58.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:52:58.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:52:58.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:52:58.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:52:58.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:52:58.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:52:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:52:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.369507 -999.00  +24.90  30.13     29   +6.00 1 2 2 1 1   888    0 16.56 45.69 ----- 30.1 30.1 305.8 40.6 30.9 -21.2 30.2 -20.6 29.1 -18.7 29.6 -20.6
2025-12-25T10:52:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:52:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:52:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.369507
2025-12-25T10:52:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:52:58.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:52:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:52:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:52:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:52:58.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:52:28', tmtdew=20.96, humidity=25.25, cloud=0.0, wind=28.88, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:52:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:52:58.091 [DEBUG] [Thread-10326] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:52:58.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:52:58.199 [DEBUG] [Thread-10329] [transport.py] [_log()] starting thread (client mode): 0xb6be1b40
2025-12-25T10:52:58.199 [DEBUG] [Thread-10329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:52:58.214 [DEBUG] [Thread-10329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:52:58.214 [INFO] [Thread-10329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:52:58.222 [DEBUG] [Thread-10329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] client lang: <none>
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] server lang: <none>
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] kex follows: False
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] Compression: none
2025-12-25T10:52:58.223 [DEBUG] [Thread-10329] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:52:58.279 [DEBUG] [Thread-10329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:52:58.280 [DEBUG] [Thread-10329] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:52:58.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:52:58.281 [DEBUG] [Thread-10329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:52:58.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:52:58.336 [DEBUG] [Thread-10329] [transport.py] [_log()] userauth is OK
2025-12-25T10:52:58.336 [DEBUG] [Thread-10329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:52:58.336 [DEBUG] [Thread-10329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:52:58.336 [DEBUG] [Thread-10329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:52:58.336 [DEBUG] [Thread-10329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:52:58.355 [INFO] [Thread-10329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:52:58.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-25T10:52:58.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:52:59.199 [DEBUG] [Thread-10329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:52:59.199 [DEBUG] [Thread-10329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:52:59.247 [DEBUG] [Thread-10329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:52:59.247 [DEBUG] [Thread-10329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:52:59.256 [DEBUG] [Thread-10329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:52:59.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:52:59.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-25T10:52:59.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-25T10:52:59.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:52:59.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:52:59.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:52:59.293 [DEBUG] [Thread-10329] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:53:04.594 [DEBUG] [Thread-10331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:53:05.996 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:53:05.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:53:19.632 [DEBUG] [Thread-10332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:53:29.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:53:29.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:53:29.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-25T10:53:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 52, 28), 20.96, 25.25, 0.0, 28.88, 23.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:53:30.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:52:28
2025-12-25T10:53:30.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:53:30.283 [DEBUG] [Thread-10333] [transport.py] [_log()] starting thread (client mode): 0xb6b2a4d0
2025-12-25T10:53:30.283 [DEBUG] [Thread-10333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:53:30.303 [DEBUG] [Thread-10333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:53:30.303 [INFO] [Thread-10333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:53:30.304 [DEBUG] [Thread-10333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:53:30.304 [DEBUG] [Thread-10333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:53:30.304 [DEBUG] [Thread-10333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] client lang: <none>
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] server lang: <none>
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] kex follows: False
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:53:30.305 [DEBUG] [Thread-10333] [transport.py] [_log()] Compression: none
2025-12-25T10:53:30.306 [DEBUG] [Thread-10333] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:53:30.324 [DEBUG] [Thread-10333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:53:30.325 [DEBUG] [Thread-10333] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:53:30.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:53:30.327 [DEBUG] [Thread-10333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:53:30.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:53:30.330 [DEBUG] [Thread-10333] [transport.py] [_log()] userauth is OK
2025-12-25T10:53:30.330 [DEBUG] [Thread-10333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:53:30.330 [DEBUG] [Thread-10333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:53:30.330 [DEBUG] [Thread-10333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:53:30.331 [DEBUG] [Thread-10333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:53:30.363 [INFO] [Thread-10333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:53:30.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:53:30.987 [DEBUG] [Thread-10333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:53:30.987 [DEBUG] [Thread-10333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:53:30.987 [DEBUG] [Thread-10333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:53:31.028 [DEBUG] [Thread-10333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:53:31.029 [DEBUG] [Thread-10333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:53:31.032 [DEBUG] [Thread-10333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:53:31.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:53:31.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:53:31.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:53:31.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:53:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:53:31.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:53:31.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:53:31.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:53:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:53:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.369854 -999.00  +24.40  23.03     30   +5.90 1 2 1 1 1   888    0 17.57 67.98 ----- 23.0 23.0 309.6 42.3 30.8 -22.9 30.0 -22.2 29.0 -20.3 29.5 -21.8
2025-12-25T10:53:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:53:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:53:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.369854
2025-12-25T10:53:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:53:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:53:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:53:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:53:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:53:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:52:28', tmtdew=20.96, humidity=25.25, cloud=0.0, wind=28.88, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:52:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:53:31.062 [DEBUG] [Thread-10333] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:53:31.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-25T10:53:31.155 [DEBUG] [Thread-10336] [transport.py] [_log()] starting thread (client mode): 0xb6b61f30
2025-12-25T10:53:31.155 [DEBUG] [Thread-10336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:53:31.170 [DEBUG] [Thread-10336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:53:31.170 [INFO] [Thread-10336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:53:31.178 [DEBUG] [Thread-10336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] client lang: <none>
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] server lang: <none>
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] kex follows: False
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] Compression: none
2025-12-25T10:53:31.179 [DEBUG] [Thread-10336] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:53:31.235 [DEBUG] [Thread-10336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:53:31.236 [DEBUG] [Thread-10336] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:53:31.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:53:31.237 [DEBUG] [Thread-10336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:53:31.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:53:31.291 [DEBUG] [Thread-10336] [transport.py] [_log()] userauth is OK
2025-12-25T10:53:31.291 [DEBUG] [Thread-10336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:53:31.292 [DEBUG] [Thread-10336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:53:31.292 [DEBUG] [Thread-10336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:53:31.292 [DEBUG] [Thread-10336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:53:31.311 [INFO] [Thread-10336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:53:31.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-25T10:53:31.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:53:32.148 [DEBUG] [Thread-10336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:53:32.149 [DEBUG] [Thread-10336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:53:32.196 [DEBUG] [Thread-10336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:53:32.196 [DEBUG] [Thread-10336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:53:32.206 [DEBUG] [Thread-10336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:53:32.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:53:32.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:53:32.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-25T10:53:32.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:53:32.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:53:32.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:53:32.242 [DEBUG] [Thread-10336] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:53:34.666 [DEBUG] [Thread-10338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:53:49.702 [DEBUG] [Thread-10339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:53:56.859 [DEBUG] [Thread-10340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:54:02.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:54:02.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-25T10:54:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 53, 32), 21.49, 24.66, 0.0, 30.93, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:54:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:53:32
2025-12-25T10:54:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:54:03.245 [DEBUG] [Thread-10341] [transport.py] [_log()] starting thread (client mode): 0xb6b61cf0
2025-12-25T10:54:03.245 [DEBUG] [Thread-10341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:54:03.266 [DEBUG] [Thread-10341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:54:03.267 [INFO] [Thread-10341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:54:03.268 [DEBUG] [Thread-10341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:54:03.268 [DEBUG] [Thread-10341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:54:03.268 [DEBUG] [Thread-10341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:54:03.268 [DEBUG] [Thread-10341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:03.268 [DEBUG] [Thread-10341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:03.268 [DEBUG] [Thread-10341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] client lang: <none>
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] server lang: <none>
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] kex follows: False
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] Compression: none
2025-12-25T10:54:03.269 [DEBUG] [Thread-10341] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:54:03.281 [DEBUG] [Thread-10341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:54:03.282 [DEBUG] [Thread-10341] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:54:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:54:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:54:03.284 [DEBUG] [Thread-10341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:54:03.285 [DEBUG] [Thread-10341] [transport.py] [_log()] userauth is OK
2025-12-25T10:54:03.285 [DEBUG] [Thread-10341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:54:03.285 [DEBUG] [Thread-10341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:54:03.285 [DEBUG] [Thread-10341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:54:03.286 [DEBUG] [Thread-10341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:54:03.304 [INFO] [Thread-10341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:54:03.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:54:03.929 [DEBUG] [Thread-10341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:54:03.929 [DEBUG] [Thread-10341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:54:03.929 [DEBUG] [Thread-10341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:54:03.970 [DEBUG] [Thread-10341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:54:03.970 [DEBUG] [Thread-10341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:54:03.973 [DEBUG] [Thread-10341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:54:03.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:54:03.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:54:03.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:54:03.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:54:03.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:54:03.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:54:03.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:54:03.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:54:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:54:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.370201 -999.00  +24.30  30.54     28   +4.80 1 2 2 1 1   888    0 18.18 90.11 ----- 30.5 30.5 331.4 38.1 30.7 -24.3 29.9 -21.9 28.9 -20.9 29.4 -21.5
2025-12-25T10:54:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:54:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.370201
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:54:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:53:32', tmtdew=21.49, humidity=24.66, cloud=0.0, wind=30.93, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:53:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:54:03.990 [DEBUG] [Thread-10341] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:54:04.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-25T10:54:04.074 [DEBUG] [Thread-10344] [transport.py] [_log()] starting thread (client mode): 0xb6b637f0
2025-12-25T10:54:04.075 [DEBUG] [Thread-10344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:54:04.089 [DEBUG] [Thread-10344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:54:04.089 [INFO] [Thread-10344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:04.097 [DEBUG] [Thread-10344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] client lang: <none>
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] server lang: <none>
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] kex follows: False
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:54:04.098 [DEBUG] [Thread-10344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:54:04.099 [DEBUG] [Thread-10344] [transport.py] [_log()] Compression: none
2025-12-25T10:54:04.099 [DEBUG] [Thread-10344] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:54:04.159 [DEBUG] [Thread-10344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:54:04.160 [DEBUG] [Thread-10344] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:54:04.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:54:04.161 [DEBUG] [Thread-10344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:54:04.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:54:04.219 [DEBUG] [Thread-10344] [transport.py] [_log()] userauth is OK
2025-12-25T10:54:04.219 [DEBUG] [Thread-10344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:54:04.220 [DEBUG] [Thread-10344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:54:04.220 [DEBUG] [Thread-10344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:54:04.220 [DEBUG] [Thread-10344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:54:04.244 [INFO] [Thread-10344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:54:04.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-25T10:54:04.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:54:04.744 [DEBUG] [Thread-10346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:05.115 [DEBUG] [Thread-10344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:54:05.115 [DEBUG] [Thread-10344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:54:05.162 [DEBUG] [Thread-10344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:54:05.162 [DEBUG] [Thread-10344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:54:05.170 [DEBUG] [Thread-10344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:54:05.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:54:05.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-25T10:54:05.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:54:05.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:54:05.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:54:05.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:54:05.202 [DEBUG] [Thread-10344] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:54:06.136 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:06.137 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:19.800 [DEBUG] [Thread-10347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:34.834 [DEBUG] [Thread-10348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:35.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:54:35.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:54:35.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-25T10:54:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 54, 4), 21.71, 24.29, 0.0, 27.46, 23.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:54:35.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:54:04
2025-12-25T10:54:36.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:54:36.222 [DEBUG] [Thread-10349] [transport.py] [_log()] starting thread (client mode): 0xb6b22b00
2025-12-25T10:54:36.222 [DEBUG] [Thread-10349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:54:36.244 [DEBUG] [Thread-10349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:54:36.244 [INFO] [Thread-10349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:36.247 [DEBUG] [Thread-10349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] client lang: <none>
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] server lang: <none>
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] kex follows: False
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] Compression: none
2025-12-25T10:54:36.248 [DEBUG] [Thread-10349] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:54:36.264 [DEBUG] [Thread-10349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:54:36.265 [DEBUG] [Thread-10349] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:54:36.265 [DEBUG] [Thread-10349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:54:36.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:54:36.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:54:36.268 [DEBUG] [Thread-10349] [transport.py] [_log()] userauth is OK
2025-12-25T10:54:36.268 [DEBUG] [Thread-10349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:54:36.268 [DEBUG] [Thread-10349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:54:36.268 [DEBUG] [Thread-10349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:54:36.268 [DEBUG] [Thread-10349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:54:36.293 [INFO] [Thread-10349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:54:36.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:54:36.917 [DEBUG] [Thread-10349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:54:36.918 [DEBUG] [Thread-10349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:54:36.918 [DEBUG] [Thread-10349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:54:36.958 [DEBUG] [Thread-10349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:54:36.958 [DEBUG] [Thread-10349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:54:36.962 [DEBUG] [Thread-10349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:54:36.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:54:36.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:54:36.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:54:36.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:54:36.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:54:36.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:54:36.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:54:36.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:54:36.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:54:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.370896 -999.00  +24.40  20.69     28   +5.20 1 2 1 1 1   888    0 19.52 123.34 ----- 20.7 20.7 308.8 28.7 30.7 -22.4 30.0 -21.1 28.9 -19.9 29.5 -21.2
2025-12-25T10:54:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:54:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:54:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.370896
2025-12-25T10:54:36.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:54:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:54:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:54:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:54:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:54:36.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:54:04', tmtdew=21.71, humidity=24.29, cloud=0.0, wind=27.46, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:54:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:54:36.989 [DEBUG] [Thread-10349] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:54:37.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:54:37.088 [DEBUG] [Thread-10352] [transport.py] [_log()] starting thread (client mode): 0xb6beb910
2025-12-25T10:54:37.088 [DEBUG] [Thread-10352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:54:37.102 [DEBUG] [Thread-10352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:54:37.102 [INFO] [Thread-10352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:54:37.109 [DEBUG] [Thread-10352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] client lang: <none>
2025-12-25T10:54:37.110 [DEBUG] [Thread-10352] [transport.py] [_log()] server lang: <none>
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] kex follows: False
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] Compression: none
2025-12-25T10:54:37.111 [DEBUG] [Thread-10352] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:54:37.168 [DEBUG] [Thread-10352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:54:37.168 [DEBUG] [Thread-10352] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:54:37.168 [DEBUG] [Thread-10352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:54:37.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:54:37.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:54:37.225 [DEBUG] [Thread-10352] [transport.py] [_log()] userauth is OK
2025-12-25T10:54:37.225 [DEBUG] [Thread-10352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:54:37.225 [DEBUG] [Thread-10352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:54:37.225 [DEBUG] [Thread-10352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:54:37.225 [DEBUG] [Thread-10352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:54:37.243 [INFO] [Thread-10352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:54:37.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-25T10:54:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:54:38.080 [DEBUG] [Thread-10352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:54:38.080 [DEBUG] [Thread-10352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:54:38.127 [DEBUG] [Thread-10352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:54:38.127 [DEBUG] [Thread-10352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:54:38.135 [DEBUG] [Thread-10352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:54:38.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:54:38.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:54:38.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-25T10:54:38.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:54:38.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:54:38.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:54:38.166 [DEBUG] [Thread-10352] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:54:49.868 [DEBUG] [Thread-10354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:54:56.914 [DEBUG] [Thread-10355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:04.915 [DEBUG] [Thread-10356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:06.274 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:06.275 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:08.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:55:08.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:55:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:55:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 54, 36), 22.64, 22.66, 0.0, 28.04, 23.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:55:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:54:36
2025-12-25T10:55:09.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:55:09.188 [DEBUG] [Thread-10357] [transport.py] [_log()] starting thread (client mode): 0xb6b53970
2025-12-25T10:55:09.188 [DEBUG] [Thread-10357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:55:09.202 [DEBUG] [Thread-10357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:55:09.202 [INFO] [Thread-10357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] client lang: <none>
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] server lang: <none>
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] kex follows: False
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] Compression: none
2025-12-25T10:55:09.206 [DEBUG] [Thread-10357] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:55:09.214 [DEBUG] [Thread-10357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:55:09.214 [DEBUG] [Thread-10357] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:55:09.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:55:09.214 [DEBUG] [Thread-10357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:55:09.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:55:09.215 [DEBUG] [Thread-10357] [transport.py] [_log()] userauth is OK
2025-12-25T10:55:09.215 [DEBUG] [Thread-10357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:55:09.215 [DEBUG] [Thread-10357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:55:09.215 [DEBUG] [Thread-10357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:55:09.215 [DEBUG] [Thread-10357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:55:09.234 [INFO] [Thread-10357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:55:09.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:55:09.963 [DEBUG] [Thread-10357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:55:09.963 [DEBUG] [Thread-10357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:55:09.963 [DEBUG] [Thread-10357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:55:10.005 [DEBUG] [Thread-10357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:55:10.005 [DEBUG] [Thread-10357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:55:10.007 [DEBUG] [Thread-10357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:55:10.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:55:10.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:55:10.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:55:10.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:55:10.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:55:10.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:55:10.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.371243 -999.00  +24.50  23.42     27   +4.70 1 1 1 1 1   888    0 20.00 138.27 ----- 23.4 23.4 325.4 33.1 30.8 -23.7 29.9 -23.0 28.9 -23.1 29.5 -22.2
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.371243
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:55:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:54:36', tmtdew=22.64, humidity=22.66, cloud=0.0, wind=28.04, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:54:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:55:10.028 [DEBUG] [Thread-10357] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:55:10.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-25T10:55:19.947 [DEBUG] [Thread-10360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:35.002 [DEBUG] [Thread-10361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:50.034 [DEBUG] [Thread-10362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:55:56.979 [DEBUG] [Thread-10363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:05.074 [DEBUG] [Thread-10364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:06.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:06.416 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:20.112 [DEBUG] [Thread-10365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:35.142 [DEBUG] [Thread-10366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:50.178 [DEBUG] [Thread-10367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:56:57.029 [DEBUG] [Thread-10368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:05.214 [DEBUG] [Thread-10369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:06.559 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:06.560 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:20.250 [DEBUG] [Thread-10370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:24.693 [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-25T10:57:35.289 [DEBUG] [Thread-10371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:50.318 [DEBUG] [Thread-10372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:54.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:57:54.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:57:54.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-25T10:57:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 57, 48), 21.16, 24.84, 0.0, 20.29, 23.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:57:55.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:57:48
2025-12-25T10:57:55.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:57:55.715 [DEBUG] [Thread-10373] [transport.py] [_log()] starting thread (client mode): 0xb6b61b70
2025-12-25T10:57:55.716 [DEBUG] [Thread-10373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:57:55.735 [DEBUG] [Thread-10373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:57:55.736 [INFO] [Thread-10373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] client lang: <none>
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] server lang: <none>
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] kex follows: False
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] Compression: none
2025-12-25T10:57:55.739 [DEBUG] [Thread-10373] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:57:55.757 [DEBUG] [Thread-10373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:57:55.757 [DEBUG] [Thread-10373] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:57:55.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:57:55.758 [DEBUG] [Thread-10373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:57:55.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:57:55.760 [DEBUG] [Thread-10373] [transport.py] [_log()] userauth is OK
2025-12-25T10:57:55.760 [DEBUG] [Thread-10373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:57:55.760 [DEBUG] [Thread-10373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:57:55.760 [DEBUG] [Thread-10373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:57:55.761 [DEBUG] [Thread-10373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:57:55.781 [INFO] [Thread-10373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:57:55.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:57:56.425 [DEBUG] [Thread-10373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:57:56.425 [DEBUG] [Thread-10373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:57:56.426 [DEBUG] [Thread-10373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:57:56.466 [DEBUG] [Thread-10373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:57:56.466 [DEBUG] [Thread-10373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:57:56.470 [DEBUG] [Thread-10373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:57:56.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:57:56.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:57:56.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:57:56.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:57:56.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:57:56.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:57:56.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:57:56.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:57:56.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:57:56.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.372979 -999.00  +24.20  19.17     29   +5.40 1 1 1 1 1   888    0 22.56 216.25 ----- 19.2 19.2 314.1 29.4 31.0 -23.7 30.1 -23.4 29.1 -22.8 29.7 -21.9
2025-12-25T10:57:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:57:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:57:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.372979
2025-12-25T10:57:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:57:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:57:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:57:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:57:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:57:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:57:48', tmtdew=21.16, humidity=24.84, cloud=0.0, wind=20.29, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:57:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:57:56.498 [DEBUG] [Thread-10373] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:57:56.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-25T10:57:56.593 [DEBUG] [Thread-10376] [transport.py] [_log()] starting thread (client mode): 0xb6b22590
2025-12-25T10:57:56.593 [DEBUG] [Thread-10376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:57:56.608 [DEBUG] [Thread-10376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:57:56.608 [INFO] [Thread-10376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] client lang: <none>
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] server lang: <none>
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] kex follows: False
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:57:56.616 [DEBUG] [Thread-10376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:57:56.617 [DEBUG] [Thread-10376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:57:56.617 [DEBUG] [Thread-10376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:57:56.617 [DEBUG] [Thread-10376] [transport.py] [_log()] Compression: none
2025-12-25T10:57:56.617 [DEBUG] [Thread-10376] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:57:56.675 [DEBUG] [Thread-10376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:57:56.675 [DEBUG] [Thread-10376] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:57:56.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:57:56.677 [DEBUG] [Thread-10376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:57:56.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:57:56.735 [DEBUG] [Thread-10376] [transport.py] [_log()] userauth is OK
2025-12-25T10:57:56.735 [DEBUG] [Thread-10376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:57:56.735 [DEBUG] [Thread-10376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:57:56.735 [DEBUG] [Thread-10376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:57:56.735 [DEBUG] [Thread-10376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:57:56.753 [INFO] [Thread-10376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:57:56.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-25T10:57:56.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:57:57.084 [DEBUG] [Thread-10378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:57:57.569 [DEBUG] [Thread-10376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:57:57.570 [DEBUG] [Thread-10376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:57:57.619 [DEBUG] [Thread-10376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:57:57.619 [DEBUG] [Thread-10376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:57:57.630 [DEBUG] [Thread-10376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:57:57.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:57:57.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:57:57.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-25T10:57:57.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:57:57.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:57:57.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:57:57.673 [DEBUG] [Thread-10376] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:58:05.354 [DEBUG] [Thread-10379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:58:06.701 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:58:06.702 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:58:20.399 [DEBUG] [Thread-10380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:58:27.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:58:27.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:58:27.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-25T10:58:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 58, 20), 20.87, 25.3, 0.0, 18.35, 23.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:58:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:58:20
2025-12-25T10:58:28.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:58:28.695 [DEBUG] [Thread-10381] [transport.py] [_log()] starting thread (client mode): 0xb6b28220
2025-12-25T10:58:28.695 [DEBUG] [Thread-10381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:58:28.711 [DEBUG] [Thread-10381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:58:28.711 [INFO] [Thread-10381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] client lang: <none>
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] server lang: <none>
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] kex follows: False
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] Compression: none
2025-12-25T10:58:28.714 [DEBUG] [Thread-10381] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:58:28.729 [DEBUG] [Thread-10381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:58:28.730 [DEBUG] [Thread-10381] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:58:28.730 [DEBUG] [Thread-10381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:58:28.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:58:28.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:58:28.772 [DEBUG] [Thread-10381] [transport.py] [_log()] userauth is OK
2025-12-25T10:58:28.772 [DEBUG] [Thread-10381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:58:28.772 [DEBUG] [Thread-10381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:58:28.772 [DEBUG] [Thread-10381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:58:28.773 [DEBUG] [Thread-10381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:58:28.791 [INFO] [Thread-10381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:58:28.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:58:29.443 [DEBUG] [Thread-10381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:58:29.444 [DEBUG] [Thread-10381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:58:29.444 [DEBUG] [Thread-10381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:58:29.485 [DEBUG] [Thread-10381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:58:29.485 [DEBUG] [Thread-10381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:58:29.488 [DEBUG] [Thread-10381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:58:29.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:58:29.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:58:29.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:58:29.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:58:29.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:58:29.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:58:29.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:58:29.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:58:29.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:58:29.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.373674 -999.00  +23.70  16.94     31   +5.60 1 2 1 1 1   888    0 24.15 261.07 ----- 16.9 16.9 331.4 31.6 31.1 -24.6 30.2 -23.9 29.2 -22.1 29.8 -22.2
2025-12-25T10:58:29.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:58:29.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:58:29.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.373674
2025-12-25T10:58:29.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:58:29.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:58:29.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:58:29.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:58:29.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:58:29.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:58:20', tmtdew=20.87, humidity=25.3, cloud=0.0, wind=18.35, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:58:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:58:29.507 [DEBUG] [Thread-10381] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:58:29.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T10:58:29.599 [DEBUG] [Thread-10384] [transport.py] [_log()] starting thread (client mode): 0xb6b2b610
2025-12-25T10:58:29.599 [DEBUG] [Thread-10384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:58:29.614 [DEBUG] [Thread-10384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:58:29.614 [INFO] [Thread-10384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:58:29.621 [DEBUG] [Thread-10384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] client lang: <none>
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] server lang: <none>
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] kex follows: False
2025-12-25T10:58:29.622 [DEBUG] [Thread-10384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:58:29.623 [DEBUG] [Thread-10384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:58:29.623 [DEBUG] [Thread-10384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:58:29.623 [DEBUG] [Thread-10384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:58:29.623 [DEBUG] [Thread-10384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:58:29.623 [DEBUG] [Thread-10384] [transport.py] [_log()] Compression: none
2025-12-25T10:58:29.623 [DEBUG] [Thread-10384] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:58:29.678 [DEBUG] [Thread-10384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:58:29.679 [DEBUG] [Thread-10384] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:58:29.679 [DEBUG] [Thread-10384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:58:29.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:58:29.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:58:29.734 [DEBUG] [Thread-10384] [transport.py] [_log()] userauth is OK
2025-12-25T10:58:29.734 [DEBUG] [Thread-10384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:58:29.735 [DEBUG] [Thread-10384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:58:29.735 [DEBUG] [Thread-10384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:58:29.735 [DEBUG] [Thread-10384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:58:29.757 [INFO] [Thread-10384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:58:29.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-25T10:58:29.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:58:30.608 [DEBUG] [Thread-10384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:58:30.608 [DEBUG] [Thread-10384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:58:30.655 [DEBUG] [Thread-10384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:58:30.655 [DEBUG] [Thread-10384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:58:30.664 [DEBUG] [Thread-10384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:58:30.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:58:30.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T10:58:30.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-25T10:58:30.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:58:30.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:58:30.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:58:30.698 [DEBUG] [Thread-10384] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:58:35.426 [DEBUG] [Thread-10386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:58:50.476 [DEBUG] [Thread-10387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:58:57.128 [DEBUG] [Thread-10388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:00.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:59:00.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:59:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:59:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 58, 52), 21.17, 25.17, 0.0, 21.51, 23.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:59:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:58:52
2025-12-25T10:59:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:59:01.704 [DEBUG] [Thread-10389] [transport.py] [_log()] starting thread (client mode): 0xb6b288b0
2025-12-25T10:59:01.704 [DEBUG] [Thread-10389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:59:01.723 [DEBUG] [Thread-10389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:59:01.724 [INFO] [Thread-10389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] client lang: <none>
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] server lang: <none>
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] kex follows: False
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] Compression: none
2025-12-25T10:59:01.727 [DEBUG] [Thread-10389] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:59:01.744 [DEBUG] [Thread-10389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:59:01.744 [DEBUG] [Thread-10389] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:59:01.745 [DEBUG] [Thread-10389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:59:01.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:59:01.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:59:01.747 [DEBUG] [Thread-10389] [transport.py] [_log()] userauth is OK
2025-12-25T10:59:01.747 [DEBUG] [Thread-10389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:59:01.747 [DEBUG] [Thread-10389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:59:01.747 [DEBUG] [Thread-10389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:59:01.747 [DEBUG] [Thread-10389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:59:01.771 [INFO] [Thread-10389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:59:01.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:59:02.412 [DEBUG] [Thread-10389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:59:02.413 [DEBUG] [Thread-10389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:59:02.413 [DEBUG] [Thread-10389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:59:02.454 [DEBUG] [Thread-10389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:59:02.454 [DEBUG] [Thread-10389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:59:02.457 [DEBUG] [Thread-10389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:59:02.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:59:02.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:59:02.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:59:02.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:59:02.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:59:02.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:59:02.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:59:02.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:59:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:59:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.374021 -999.00  +23.50  21.12     31   +5.40 1 2 1 1 1   888    0 25.33 289.66 ----- 21.1 21.1 323.0 24.3 31.1 -23.7 30.2 -23.5 29.2 -21.8 29.8 -21.4
2025-12-25T10:59:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:59:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:59:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.374021
2025-12-25T10:59:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:59:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:59:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:59:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:59:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T10:59:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:58:52', tmtdew=21.17, humidity=25.17, cloud=0.0, wind=21.51, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:58:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:59:02.485 [DEBUG] [Thread-10389] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:59:02.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-25T10:59:02.579 [DEBUG] [Thread-10392] [transport.py] [_log()] starting thread (client mode): 0xb6b53e50
2025-12-25T10:59:02.579 [DEBUG] [Thread-10392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:59:02.594 [DEBUG] [Thread-10392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:59:02.594 [INFO] [Thread-10392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:59:02.602 [DEBUG] [Thread-10392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] client lang: <none>
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] server lang: <none>
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] kex follows: False
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] Compression: none
2025-12-25T10:59:02.603 [DEBUG] [Thread-10392] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:59:02.662 [DEBUG] [Thread-10392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:59:02.663 [DEBUG] [Thread-10392] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:59:02.664 [DEBUG] [Thread-10392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:59:02.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:59:02.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:59:02.718 [DEBUG] [Thread-10392] [transport.py] [_log()] userauth is OK
2025-12-25T10:59:02.719 [DEBUG] [Thread-10392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:59:02.719 [DEBUG] [Thread-10392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:59:02.719 [DEBUG] [Thread-10392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:59:02.719 [DEBUG] [Thread-10392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:59:02.737 [INFO] [Thread-10392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:59:02.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-25T10:59:02.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:59:03.573 [DEBUG] [Thread-10392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:59:03.573 [DEBUG] [Thread-10392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:59:03.621 [DEBUG] [Thread-10392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:59:03.621 [DEBUG] [Thread-10392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:59:03.630 [DEBUG] [Thread-10392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:59:03.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:59:03.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-25T10:59:03.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T10:59:03.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:59:03.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:59:03.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:59:03.667 [DEBUG] [Thread-10392] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:59:05.506 [DEBUG] [Thread-10394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:06.841 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:06.842 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:20.566 [DEBUG] [Thread-10395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T10:59:33.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T10:59:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T10:59:34.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 59, 24), 20.84, 25.73, 0.0, 18.55, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T10:59:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:59:24
2025-12-25T10:59:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T10:59:34.735 [DEBUG] [Thread-10396] [transport.py] [_log()] starting thread (client mode): 0xb6b2a530
2025-12-25T10:59:34.735 [DEBUG] [Thread-10396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:59:34.755 [DEBUG] [Thread-10396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T10:59:34.755 [INFO] [Thread-10396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] client lang: <none>
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] server lang: <none>
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] kex follows: False
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:59:34.757 [DEBUG] [Thread-10396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:59:34.758 [DEBUG] [Thread-10396] [transport.py] [_log()] Compression: none
2025-12-25T10:59:34.758 [DEBUG] [Thread-10396] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:59:34.768 [DEBUG] [Thread-10396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:59:34.768 [DEBUG] [Thread-10396] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:59:34.769 [DEBUG] [Thread-10396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T10:59:34.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T10:59:34.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:59:34.769 [DEBUG] [Thread-10396] [transport.py] [_log()] userauth is OK
2025-12-25T10:59:34.769 [DEBUG] [Thread-10396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:59:34.769 [DEBUG] [Thread-10396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:59:34.770 [DEBUG] [Thread-10396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T10:59:34.770 [DEBUG] [Thread-10396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:59:34.782 [INFO] [Thread-10396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:59:34.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:59:35.401 [DEBUG] [Thread-10396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:59:35.401 [DEBUG] [Thread-10396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:59:35.402 [DEBUG] [Thread-10396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T10:59:35.442 [DEBUG] [Thread-10396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:59:35.443 [DEBUG] [Thread-10396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:59:35.445 [DEBUG] [Thread-10396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:59:35.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:59:35.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T10:59:35.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T10:59:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T10:59:35.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:59:35.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T10:59:35.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.374368 -999.00  +23.80  18.35     28   +4.60 1 1 1 1 1   888    0 25.32 285.88 ----- 18.4 18.4 319.4 24.9 30.8 -27.0 29.9 -27.4 29.0 -23.1 29.4 -26.8
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.374368
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T10:59:35.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T10:59:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:59:24', tmtdew=20.84, humidity=25.73, cloud=0.0, wind=18.55, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:59:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T10:59:35.463 [DEBUG] [Thread-10396] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:59:35.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-25T10:59:35.548 [DEBUG] [Thread-10399] [transport.py] [_log()] starting thread (client mode): 0xb6b60610
2025-12-25T10:59:35.548 [DEBUG] [Thread-10399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T10:59:35.562 [DEBUG] [Thread-10399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T10:59:35.562 [INFO] [Thread-10399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] client lang: <none>
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] server lang: <none>
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] kex follows: False
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] Compression: none
2025-12-25T10:59:35.570 [DEBUG] [Thread-10399] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T10:59:35.597 [DEBUG] [Thread-10401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:35.629 [DEBUG] [Thread-10399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T10:59:35.629 [DEBUG] [Thread-10399] [transport.py] [_log()] Switch to new keys ...
2025-12-25T10:59:35.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T10:59:35.629 [DEBUG] [Thread-10399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T10:59:35.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T10:59:35.686 [DEBUG] [Thread-10399] [transport.py] [_log()] userauth is OK
2025-12-25T10:59:35.686 [DEBUG] [Thread-10399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T10:59:35.686 [DEBUG] [Thread-10399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T10:59:35.686 [DEBUG] [Thread-10399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T10:59:35.686 [DEBUG] [Thread-10399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T10:59:35.699 [INFO] [Thread-10399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T10:59:35.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-25T10:59:35.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T10:59:36.518 [DEBUG] [Thread-10399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T10:59:36.518 [DEBUG] [Thread-10399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T10:59:36.567 [DEBUG] [Thread-10399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T10:59:36.567 [DEBUG] [Thread-10399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T10:59:36.578 [DEBUG] [Thread-10399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T10:59:36.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T10:59:36.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-25T10:59:36.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-25T10:59:36.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T10:59:36.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T10:59:36.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T10:59:36.609 [DEBUG] [Thread-10399] [transport.py] [_log()] EOF in transport thread
2025-12-25T10:59:50.637 [DEBUG] [Thread-10402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T10:59:57.183 [DEBUG] [Thread-10403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:05.672 [DEBUG] [Thread-10404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:06.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:00:06.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:00:06.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-25T11:00:06.982 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:06.983 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:07.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 10, 59, 57), 20.9, 25.3, 0.0, 11.08, 23.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:00:07.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 10:59:57
2025-12-25T11:00:07.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:00:07.610 [DEBUG] [Thread-10405] [transport.py] [_log()] starting thread (client mode): 0xb6b20100
2025-12-25T11:00:07.610 [DEBUG] [Thread-10405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:00:07.636 [DEBUG] [Thread-10405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:00:07.636 [INFO] [Thread-10405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] client lang: <none>
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] server lang: <none>
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] kex follows: False
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:00:07.640 [DEBUG] [Thread-10405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:00:07.641 [DEBUG] [Thread-10405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:00:07.641 [DEBUG] [Thread-10405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:00:07.641 [DEBUG] [Thread-10405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:00:07.641 [DEBUG] [Thread-10405] [transport.py] [_log()] Compression: none
2025-12-25T11:00:07.641 [DEBUG] [Thread-10405] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:00:07.650 [DEBUG] [Thread-10405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:00:07.650 [DEBUG] [Thread-10405] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:00:07.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:00:07.651 [DEBUG] [Thread-10405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:00:07.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:00:07.653 [DEBUG] [Thread-10405] [transport.py] [_log()] userauth is OK
2025-12-25T11:00:07.654 [DEBUG] [Thread-10405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:00:07.654 [DEBUG] [Thread-10405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:00:07.654 [DEBUG] [Thread-10405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:00:07.654 [DEBUG] [Thread-10405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:00:07.689 [INFO] [Thread-10405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:00:07.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:00:08.585 [DEBUG] [Thread-10405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:00:08.585 [DEBUG] [Thread-10405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:00:08.586 [DEBUG] [Thread-10405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:00:08.626 [DEBUG] [Thread-10405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:00:08.626 [DEBUG] [Thread-10405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:00:08.628 [DEBUG] [Thread-10405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:00:08.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:00:08.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:00:08.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:00:08.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:00:08.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:00:08.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:00:08.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:00:08.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:00:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:00:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.374715 -999.00  +23.40  10.94     29   +4.50 1 1 1 1 1   888    0 26.18 320.72 ----- 10.9 10.9 339.0 17.2 30.3 -29.5 29.5 -28.4 28.6 -26.1 29.0 -27.1
2025-12-25T11:00:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:00:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:00:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.374715
2025-12-25T11:00:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:00:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:00:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:00:08.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:00:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:00:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T10:59:57', tmtdew=20.9, humidity=25.3, cloud=0.0, wind=11.08, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T08:59:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:00:08.651 [DEBUG] [Thread-10405] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:00:08.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:00:08.741 [DEBUG] [Thread-10408] [transport.py] [_log()] starting thread (client mode): 0xb6be18a0
2025-12-25T11:00:08.742 [DEBUG] [Thread-10408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:00:08.756 [DEBUG] [Thread-10408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:00:08.756 [INFO] [Thread-10408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] client lang: <none>
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] server lang: <none>
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] kex follows: False
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:00:08.764 [DEBUG] [Thread-10408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:00:08.765 [DEBUG] [Thread-10408] [transport.py] [_log()] Compression: none
2025-12-25T11:00:08.765 [DEBUG] [Thread-10408] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:00:08.821 [DEBUG] [Thread-10408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:00:08.822 [DEBUG] [Thread-10408] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:00:08.822 [DEBUG] [Thread-10408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:00:08.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:00:08.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:00:08.878 [DEBUG] [Thread-10408] [transport.py] [_log()] userauth is OK
2025-12-25T11:00:08.879 [DEBUG] [Thread-10408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:00:08.879 [DEBUG] [Thread-10408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:00:08.879 [DEBUG] [Thread-10408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:00:08.879 [DEBUG] [Thread-10408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:00:08.899 [INFO] [Thread-10408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:00:08.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:00:08.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:00:09.731 [DEBUG] [Thread-10408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:00:09.731 [DEBUG] [Thread-10408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:00:09.779 [DEBUG] [Thread-10408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:00:09.779 [DEBUG] [Thread-10408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:00:09.787 [DEBUG] [Thread-10408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:00:09.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:00:09.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:00: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') -> 00000000
2025-12-25T11:00:09.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:00:09.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:00:09.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:00:09.822 [DEBUG] [Thread-10408] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:00:20.703 [DEBUG] [Thread-10410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:35.753 [DEBUG] [Thread-10411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:39.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:00:39.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:00:39.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-25T11:00:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 0, 29), 20.67, 25.71, 0.0, 11.74, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:00:40.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:00:29
2025-12-25T11:00:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:00:40.846 [DEBUG] [Thread-10412] [transport.py] [_log()] starting thread (client mode): 0xb6b2b4c0
2025-12-25T11:00:40.846 [DEBUG] [Thread-10412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:00:40.866 [DEBUG] [Thread-10412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:00:40.866 [INFO] [Thread-10412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:00:40.869 [DEBUG] [Thread-10412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] client lang: <none>
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] server lang: <none>
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] kex follows: False
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] Compression: none
2025-12-25T11:00:40.870 [DEBUG] [Thread-10412] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:00:40.888 [DEBUG] [Thread-10412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:00:40.888 [DEBUG] [Thread-10412] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:00:40.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:00:40.890 [DEBUG] [Thread-10412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:00:40.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:00:40.892 [DEBUG] [Thread-10412] [transport.py] [_log()] userauth is OK
2025-12-25T11:00:40.892 [DEBUG] [Thread-10412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:00:40.892 [DEBUG] [Thread-10412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:00:40.892 [DEBUG] [Thread-10412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:00:40.892 [DEBUG] [Thread-10412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:00:40.915 [INFO] [Thread-10412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:00:40.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:00:41.526 [DEBUG] [Thread-10412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:00:41.526 [DEBUG] [Thread-10412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:00:41.527 [DEBUG] [Thread-10412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:00:41.567 [DEBUG] [Thread-10412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:00:41.567 [DEBUG] [Thread-10412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:00:41.569 [DEBUG] [Thread-10412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:00:41.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:00:41.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:00:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:00:41.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:00:41.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:00:41.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:00:41.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:00:41.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:00:41.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:00:41.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.375062 -999.00  +23.00  14.01     29   +4.40 1 1 1 1 1   888    0 27.01 335.02 ----- 14.0 14.0 284.4 15.4 30.0 -29.2 29.1 -28.0 28.3 -25.7 28.8 -26.7
2025-12-25T11:00:41.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:00:41.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:00:41.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.375062
2025-12-25T11:00:41.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:00:41.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:00:41.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:00:41.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:00:41.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:00:41.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:00:29', tmtdew=20.67, humidity=25.71, cloud=0.0, wind=11.74, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:00:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:00:41.594 [DEBUG] [Thread-10412] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:00:41.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-25T11:00:41.689 [DEBUG] [Thread-10415] [transport.py] [_log()] starting thread (client mode): 0xb6b48340
2025-12-25T11:00:41.689 [DEBUG] [Thread-10415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:00:41.703 [DEBUG] [Thread-10415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:00:41.703 [INFO] [Thread-10415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:00:41.710 [DEBUG] [Thread-10415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] client lang: <none>
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] server lang: <none>
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] kex follows: False
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] Compression: none
2025-12-25T11:00:41.711 [DEBUG] [Thread-10415] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:00:41.768 [DEBUG] [Thread-10415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:00:41.769 [DEBUG] [Thread-10415] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:00:41.769 [DEBUG] [Thread-10415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:00:41.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:00:41.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:00:41.825 [DEBUG] [Thread-10415] [transport.py] [_log()] userauth is OK
2025-12-25T11:00:41.825 [DEBUG] [Thread-10415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:00:41.825 [DEBUG] [Thread-10415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:00:41.825 [DEBUG] [Thread-10415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:00:41.825 [DEBUG] [Thread-10415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:00:41.842 [INFO] [Thread-10415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:00: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-25T11:00:41.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:00:42.644 [DEBUG] [Thread-10415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:00:42.644 [DEBUG] [Thread-10415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:00:42.693 [DEBUG] [Thread-10415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:00:42.693 [DEBUG] [Thread-10415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:00:42.703 [DEBUG] [Thread-10415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:00:42.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:00:42.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:00:42.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-25T11:00:42.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:00:42.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:00:42.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:00:42.747 [DEBUG] [Thread-10415] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:00:50.788 [DEBUG] [Thread-10417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:00:57.235 [DEBUG] [Thread-10418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:05.826 [DEBUG] [Thread-10419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:07.123 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:07.124 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:12.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:01:12.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:01:12.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-25T11:01:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 1, 1), 20.23, 26.71, 0.0, 14.33, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:01:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:01:01
2025-12-25T11:01:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:01:13.751 [DEBUG] [Thread-10420] [transport.py] [_log()] starting thread (client mode): 0xb6b60880
2025-12-25T11:01:13.751 [DEBUG] [Thread-10420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:01:13.773 [DEBUG] [Thread-10420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:01:13.773 [INFO] [Thread-10420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] client lang: <none>
2025-12-25T11:01:13.776 [DEBUG] [Thread-10420] [transport.py] [_log()] server lang: <none>
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] kex follows: False
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] Compression: none
2025-12-25T11:01:13.777 [DEBUG] [Thread-10420] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:01:13.794 [DEBUG] [Thread-10420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:01:13.794 [DEBUG] [Thread-10420] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:01:13.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:01:13.795 [DEBUG] [Thread-10420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:01:13.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:01:13.797 [DEBUG] [Thread-10420] [transport.py] [_log()] userauth is OK
2025-12-25T11:01:13.798 [DEBUG] [Thread-10420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:01:13.798 [DEBUG] [Thread-10420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:01:13.798 [DEBUG] [Thread-10420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:01:13.798 [DEBUG] [Thread-10420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:01:13.822 [INFO] [Thread-10420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:01:13.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:01:14.441 [DEBUG] [Thread-10420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:01:14.442 [DEBUG] [Thread-10420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:01:14.443 [DEBUG] [Thread-10420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:01:14.483 [DEBUG] [Thread-10420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:01:14.483 [DEBUG] [Thread-10420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:01:14.486 [DEBUG] [Thread-10420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:01:14.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:01:14.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:01:14.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:01:14.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:01:14.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:01:14.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:01:14.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:01:14.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.375410 -999.00  +22.80  14.48     31   +5.00 1 1 1 1 1   888    0 27.21 336.57 ----- 14.5 14.5 298.0 17.7 29.6 -30.7 28.9 -28.4 28.1 -25.5 28.5 -27.1
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.375410
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:01:14.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:01:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:01:14.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:01:01', tmtdew=20.23, humidity=26.71, cloud=0.0, wind=14.33, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:00:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:01:14.507 [DEBUG] [Thread-10420] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:01:14.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-25T11:01:14.602 [DEBUG] [Thread-10423] [transport.py] [_log()] starting thread (client mode): 0xb6bbace0
2025-12-25T11:01:14.602 [DEBUG] [Thread-10423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:01:14.622 [DEBUG] [Thread-10423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:01:14.622 [INFO] [Thread-10423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:01:14.630 [DEBUG] [Thread-10423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:01:14.630 [DEBUG] [Thread-10423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:01:14.630 [DEBUG] [Thread-10423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:01:14.630 [DEBUG] [Thread-10423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] client lang: <none>
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] server lang: <none>
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] kex follows: False
2025-12-25T11:01:14.631 [DEBUG] [Thread-10423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:01:14.632 [DEBUG] [Thread-10423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:01:14.632 [DEBUG] [Thread-10423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:01:14.632 [DEBUG] [Thread-10423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:01:14.632 [DEBUG] [Thread-10423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:01:14.632 [DEBUG] [Thread-10423] [transport.py] [_log()] Compression: none
2025-12-25T11:01:14.632 [DEBUG] [Thread-10423] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:01:14.690 [DEBUG] [Thread-10423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:01:14.691 [DEBUG] [Thread-10423] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:01:14.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:01:14.693 [DEBUG] [Thread-10423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:01:14.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:01:14.750 [DEBUG] [Thread-10423] [transport.py] [_log()] userauth is OK
2025-12-25T11:01:14.750 [DEBUG] [Thread-10423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:01:14.750 [DEBUG] [Thread-10423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:01:14.751 [DEBUG] [Thread-10423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:01:14.751 [DEBUG] [Thread-10423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:01:14.769 [INFO] [Thread-10423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:01:14.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-25T11:01:14.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:01:15.598 [DEBUG] [Thread-10423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:01:15.599 [DEBUG] [Thread-10423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:01:15.646 [DEBUG] [Thread-10423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:01:15.647 [DEBUG] [Thread-10423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:01:15.655 [DEBUG] [Thread-10423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:01:15.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:01:15.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-25T11:01:15.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-25T11:01:15.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:01:15.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:01:15.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:01:15.689 [DEBUG] [Thread-10423] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:01:20.860 [DEBUG] [Thread-10425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:35.904 [DEBUG] [Thread-10426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:45.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:01:45.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:01:45.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-25T11:01:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 1, 33), 20.32, 26.66, 0.0, 19.09, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:01:46.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:01:33
2025-12-25T11:01:46.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:01:46.697 [DEBUG] [Thread-10427] [transport.py] [_log()] starting thread (client mode): 0xb6bb9c90
2025-12-25T11:01:46.697 [DEBUG] [Thread-10427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:01:46.718 [DEBUG] [Thread-10427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:01:46.718 [INFO] [Thread-10427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:01:46.721 [DEBUG] [Thread-10427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] client lang: <none>
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] server lang: <none>
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] kex follows: False
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] Compression: none
2025-12-25T11:01:46.722 [DEBUG] [Thread-10427] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:01:46.742 [DEBUG] [Thread-10427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:01:46.742 [DEBUG] [Thread-10427] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:01:46.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:01:46.744 [DEBUG] [Thread-10427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:01:46.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:01:46.745 [DEBUG] [Thread-10427] [transport.py] [_log()] userauth is OK
2025-12-25T11:01:46.745 [DEBUG] [Thread-10427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:01:46.746 [DEBUG] [Thread-10427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:01:46.746 [DEBUG] [Thread-10427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:01:46.746 [DEBUG] [Thread-10427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:01:46.770 [INFO] [Thread-10427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:01:46.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:01:47.429 [DEBUG] [Thread-10427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:01:47.429 [DEBUG] [Thread-10427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:01:47.429 [DEBUG] [Thread-10427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:01:47.470 [DEBUG] [Thread-10427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:01:47.470 [DEBUG] [Thread-10427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:01:47.474 [DEBUG] [Thread-10427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:01:47.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:01:47.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:01:47.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:01:47.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:01:47.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:01:47.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:01:47.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:01:47.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:01:47.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:01:47.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.375757 -999.00  +22.70   9.26     31   +5.10 1 2 1 1 1   888    0 26.65 321.80 ----- 9.3 9.3 332.4 17.5 29.2 -29.0 28.9 -21.2 27.8 -24.4 28.6 -19.8
2025-12-25T11:01:47.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:01:47.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:01:47.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.375757
2025-12-25T11:01:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:01:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:01:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:01:47.498 [DEBUG] [Thread-10427] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:01:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:01:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:01:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:01:33', tmtdew=20.32, humidity=26.66, cloud=0.0, wind=19.09, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:01:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:01:47.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-25T11:01:47.588 [DEBUG] [Thread-10430] [transport.py] [_log()] starting thread (client mode): 0xb6bb88e0
2025-12-25T11:01:47.589 [DEBUG] [Thread-10430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:01:47.603 [DEBUG] [Thread-10430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:01:47.603 [INFO] [Thread-10430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:01:47.610 [DEBUG] [Thread-10430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:01:47.610 [DEBUG] [Thread-10430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:01:47.610 [DEBUG] [Thread-10430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:01:47.610 [DEBUG] [Thread-10430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:47.610 [DEBUG] [Thread-10430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] client lang: <none>
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] server lang: <none>
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] kex follows: False
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] Compression: none
2025-12-25T11:01:47.611 [DEBUG] [Thread-10430] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:01:47.668 [DEBUG] [Thread-10430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:01:47.668 [DEBUG] [Thread-10430] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:01:47.668 [DEBUG] [Thread-10430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:01:47.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:01:47.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:01:47.728 [DEBUG] [Thread-10430] [transport.py] [_log()] userauth is OK
2025-12-25T11:01:47.728 [DEBUG] [Thread-10430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:01:47.728 [DEBUG] [Thread-10430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:01:47.728 [DEBUG] [Thread-10430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:01:47.728 [DEBUG] [Thread-10430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:01:47.742 [INFO] [Thread-10430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:01:47.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:01:47.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:01:48.585 [DEBUG] [Thread-10430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:01:48.585 [DEBUG] [Thread-10430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:01:48.634 [DEBUG] [Thread-10430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:01:48.634 [DEBUG] [Thread-10430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:01:48.643 [DEBUG] [Thread-10430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:01:48.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:01:48.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-25T11:01:48.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:01:48.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:01:48.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:01:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:01:48.679 [DEBUG] [Thread-10430] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:01:50.936 [DEBUG] [Thread-10432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:01:57.282 [DEBUG] [Thread-10433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:05.983 [DEBUG] [Thread-10434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:07.266 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:07.267 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:02:18.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:02:18.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-25T11:02:19.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 2, 5), 20.27, 26.78, 0.0, 20.48, 23.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:02:19.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:02:05
2025-12-25T11:02:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:02:19.673 [DEBUG] [Thread-10435] [transport.py] [_log()] starting thread (client mode): 0xb6bb93f0
2025-12-25T11:02:19.674 [DEBUG] [Thread-10435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:02:19.696 [DEBUG] [Thread-10435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:02:19.696 [INFO] [Thread-10435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:02:19.699 [DEBUG] [Thread-10435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:02:19.699 [DEBUG] [Thread-10435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] client lang: <none>
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] server lang: <none>
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] kex follows: False
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:02:19.700 [DEBUG] [Thread-10435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:02:19.701 [DEBUG] [Thread-10435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:02:19.701 [DEBUG] [Thread-10435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:02:19.701 [DEBUG] [Thread-10435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:02:19.701 [DEBUG] [Thread-10435] [transport.py] [_log()] Compression: none
2025-12-25T11:02:19.701 [DEBUG] [Thread-10435] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:02:19.718 [DEBUG] [Thread-10435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:02:19.719 [DEBUG] [Thread-10435] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:02:19.719 [DEBUG] [Thread-10435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:02:19.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:02:19.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:02:19.721 [DEBUG] [Thread-10435] [transport.py] [_log()] userauth is OK
2025-12-25T11:02:19.722 [DEBUG] [Thread-10435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:02:19.722 [DEBUG] [Thread-10435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:02:19.722 [DEBUG] [Thread-10435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:02:19.722 [DEBUG] [Thread-10435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:02:19.746 [INFO] [Thread-10435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:02:19.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:02:20.396 [DEBUG] [Thread-10435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:02:20.396 [DEBUG] [Thread-10435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:02:20.396 [DEBUG] [Thread-10435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:02:20.437 [DEBUG] [Thread-10435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:02:20.437 [DEBUG] [Thread-10435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:02:20.440 [DEBUG] [Thread-10435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:02:20.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:02:20.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:02:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:02:20.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:02:20.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:02:20.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:02:20.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:02:20.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:02:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:02:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.376104 -999.00  +23.00  10.48     33   +6.00 1 2 1 1 1   888    0 27.12 340.35 ----- 10.5 10.5 315.0 17.8 29.8 -21.5 29.3 -21.2 28.5 -20.4 29.0 -20.2
2025-12-25T11:02:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:02:20.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:02:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.376104
2025-12-25T11:02:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:02:20.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:02:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:02:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:02:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:02:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:02:05', tmtdew=20.27, humidity=26.78, cloud=0.0, wind=20.48, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:01:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:02:20.464 [DEBUG] [Thread-10435] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:02:20.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-25T11:02:20.559 [DEBUG] [Thread-10438] [transport.py] [_log()] starting thread (client mode): 0xb6bb8b20
2025-12-25T11:02:20.559 [DEBUG] [Thread-10438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:02:20.574 [DEBUG] [Thread-10438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:02:20.574 [INFO] [Thread-10438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:02:20.581 [DEBUG] [Thread-10438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] client lang: <none>
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] server lang: <none>
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] kex follows: False
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] Compression: none
2025-12-25T11:02:20.582 [DEBUG] [Thread-10438] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:02:20.640 [DEBUG] [Thread-10438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:02:20.640 [DEBUG] [Thread-10438] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:02:20.641 [DEBUG] [Thread-10438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:02:20.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:02:20.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:02:20.696 [DEBUG] [Thread-10438] [transport.py] [_log()] userauth is OK
2025-12-25T11:02:20.696 [DEBUG] [Thread-10438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:02:20.696 [DEBUG] [Thread-10438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:02:20.696 [DEBUG] [Thread-10438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:02:20.696 [DEBUG] [Thread-10438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:02:20.717 [INFO] [Thread-10438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:02:20.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-25T11:02:20.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:02:21.015 [DEBUG] [Thread-10440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:21.540 [DEBUG] [Thread-10438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:02:21.540 [DEBUG] [Thread-10438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:02:21.588 [DEBUG] [Thread-10438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:02:21.588 [DEBUG] [Thread-10438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:02:21.596 [DEBUG] [Thread-10438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:02:21.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:02:21.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-25T11:02:21.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-25T11:02:21.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:02:21.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:02:21.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:02:21.642 [DEBUG] [Thread-10438] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:02:36.067 [DEBUG] [Thread-10441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:51.092 [DEBUG] [Thread-10442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:02:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:02:51.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:02:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:02:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 2, 37), 19.37, 27.99, 0.0, 14.28, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:02:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:02:37
2025-12-25T11:02:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:02:52.689 [DEBUG] [Thread-10443] [transport.py] [_log()] starting thread (client mode): 0xb6b49090
2025-12-25T11:02:52.689 [DEBUG] [Thread-10443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:02:52.709 [DEBUG] [Thread-10443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:02:52.709 [INFO] [Thread-10443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] client lang: <none>
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] server lang: <none>
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] kex follows: False
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:02:52.712 [DEBUG] [Thread-10443] [transport.py] [_log()] Compression: none
2025-12-25T11:02:52.713 [DEBUG] [Thread-10443] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:02:52.728 [DEBUG] [Thread-10443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:02:52.728 [DEBUG] [Thread-10443] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:02:52.728 [DEBUG] [Thread-10443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:02:52.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:02:52.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:02:52.729 [DEBUG] [Thread-10443] [transport.py] [_log()] userauth is OK
2025-12-25T11:02:52.729 [DEBUG] [Thread-10443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:02:52.729 [DEBUG] [Thread-10443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:02:52.730 [DEBUG] [Thread-10443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:02:52.730 [DEBUG] [Thread-10443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:02:52.741 [INFO] [Thread-10443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:02:52.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:02:53.360 [DEBUG] [Thread-10443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:02:53.360 [DEBUG] [Thread-10443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:02:53.360 [DEBUG] [Thread-10443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:02:53.401 [DEBUG] [Thread-10443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:02:53.401 [DEBUG] [Thread-10443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:02:53.403 [DEBUG] [Thread-10443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:02:53.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:02:53.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:02:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:02:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:02:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:02:53.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:02:53.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.376799 -999.00  +23.60  15.16     34   +7.00 1 2 1 1 1   888    0 26.44 318.10 ----- 15.2 15.2 10.1 21.1 30.4 -22.6 29.7 -22.0 28.9 -19.6 29.3 -20.7
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.376799
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:02:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:02:37', tmtdew=19.37, humidity=27.99, cloud=0.0, wind=14.28, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:02:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:02:53.421 [DEBUG] [Thread-10443] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:02:53.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-25T11:02:53.504 [DEBUG] [Thread-10446] [transport.py] [_log()] starting thread (client mode): 0xb6b4abc0
2025-12-25T11:02:53.505 [DEBUG] [Thread-10446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:02:53.519 [DEBUG] [Thread-10446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:02:53.519 [INFO] [Thread-10446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:02:53.526 [DEBUG] [Thread-10446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] client lang: <none>
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] server lang: <none>
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] kex follows: False
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] Compression: none
2025-12-25T11:02:53.527 [DEBUG] [Thread-10446] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:02:53.582 [DEBUG] [Thread-10446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:02:53.582 [DEBUG] [Thread-10446] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:02:53.582 [DEBUG] [Thread-10446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:02:53.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:02:53.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:02:53.642 [DEBUG] [Thread-10446] [transport.py] [_log()] userauth is OK
2025-12-25T11:02:53.642 [DEBUG] [Thread-10446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:02:53.642 [DEBUG] [Thread-10446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:02:53.642 [DEBUG] [Thread-10446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:02:53.642 [DEBUG] [Thread-10446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:02:53.658 [INFO] [Thread-10446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:02:53.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-25T11:02:53.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:02:54.533 [DEBUG] [Thread-10446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:02:54.533 [DEBUG] [Thread-10446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:02:54.581 [DEBUG] [Thread-10446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:02:54.581 [DEBUG] [Thread-10446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:02:54.590 [DEBUG] [Thread-10446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:02:54.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:02:54.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-25T11:02:54.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-25T11:02:54.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:02:54.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:02:54.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:02:54.627 [DEBUG] [Thread-10446] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:02:57.332 [DEBUG] [Thread-10448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:06.123 [DEBUG] [Thread-10449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:07.408 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:07.409 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:21.176 [DEBUG] [Thread-10450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:03:24.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:03:24.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-25T11:03:25.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 3, 9), 19.18, 28.39, 0.0, 13.96, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:03:25.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:03:09
2025-12-25T11:03:25.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:03:25.629 [DEBUG] [Thread-10451] [transport.py] [_log()] starting thread (client mode): 0xb6bb8940
2025-12-25T11:03:25.629 [DEBUG] [Thread-10451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:03:25.649 [DEBUG] [Thread-10451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:03:25.649 [INFO] [Thread-10451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:03:25.652 [DEBUG] [Thread-10451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:03:25.652 [DEBUG] [Thread-10451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:03:25.652 [DEBUG] [Thread-10451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:03:25.652 [DEBUG] [Thread-10451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:25.652 [DEBUG] [Thread-10451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:25.652 [DEBUG] [Thread-10451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] client lang: <none>
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] server lang: <none>
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] kex follows: False
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] Compression: none
2025-12-25T11:03:25.653 [DEBUG] [Thread-10451] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:03:25.670 [DEBUG] [Thread-10451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:03:25.671 [DEBUG] [Thread-10451] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:03:25.671 [DEBUG] [Thread-10451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:03:25.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:03:25.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:03:25.673 [DEBUG] [Thread-10451] [transport.py] [_log()] userauth is OK
2025-12-25T11:03:25.673 [DEBUG] [Thread-10451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:03:25.674 [DEBUG] [Thread-10451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:03:25.674 [DEBUG] [Thread-10451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:03:25.674 [DEBUG] [Thread-10451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:03:25.695 [INFO] [Thread-10451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:03:25.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:03:26.352 [DEBUG] [Thread-10451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:03:26.352 [DEBUG] [Thread-10451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:03:26.352 [DEBUG] [Thread-10451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:03:26.393 [DEBUG] [Thread-10451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:03:26.393 [DEBUG] [Thread-10451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:03:26.395 [DEBUG] [Thread-10451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:03:26.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:03:26.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:03:26.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:03:26.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:03:26.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:03:26.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:03:26.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:03:26.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:03:26.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:03:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.377146 -999.00  +23.50  17.96     35   +7.20 1 2 1 1 1   888    0 25.98 301.07 ----- 18.0 18.0 26.2 24.5 30.4 -23.6 29.6 -22.7 28.8 -20.9 29.1 -20.5
2025-12-25T11:03:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:03:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:03:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.377146
2025-12-25T11:03:26.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:03:26.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:03:26.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:03:26.420 [DEBUG] [Thread-10451] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:03:26.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:03:26.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:03:26.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:03:09', tmtdew=19.18, humidity=28.39, cloud=0.0, wind=13.96, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:03:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:03:26.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-25T11:03:26.518 [DEBUG] [Thread-10454] [transport.py] [_log()] starting thread (client mode): 0xb6b63e50
2025-12-25T11:03:26.518 [DEBUG] [Thread-10454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:03:26.533 [DEBUG] [Thread-10454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:03:26.533 [INFO] [Thread-10454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] client lang: <none>
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] server lang: <none>
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] kex follows: False
2025-12-25T11:03:26.541 [DEBUG] [Thread-10454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:03:26.542 [DEBUG] [Thread-10454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:03:26.542 [DEBUG] [Thread-10454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:03:26.542 [DEBUG] [Thread-10454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:03:26.542 [DEBUG] [Thread-10454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:03:26.542 [DEBUG] [Thread-10454] [transport.py] [_log()] Compression: none
2025-12-25T11:03:26.542 [DEBUG] [Thread-10454] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:03:26.600 [DEBUG] [Thread-10454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:03:26.600 [DEBUG] [Thread-10454] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:03:26.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:03:26.601 [DEBUG] [Thread-10454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:03:26.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:03:26.656 [DEBUG] [Thread-10454] [transport.py] [_log()] userauth is OK
2025-12-25T11:03:26.656 [DEBUG] [Thread-10454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:03:26.656 [DEBUG] [Thread-10454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:03:26.656 [DEBUG] [Thread-10454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:03:26.657 [DEBUG] [Thread-10454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:03:26.675 [INFO] [Thread-10454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:03: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-25T11:03:26.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:03:27.515 [DEBUG] [Thread-10454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:03:27.515 [DEBUG] [Thread-10454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:03:27.563 [DEBUG] [Thread-10454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:03:27.563 [DEBUG] [Thread-10454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:03:27.572 [DEBUG] [Thread-10454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:03:27.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:03:27.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-25T11:03:27.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-25T11:03:27.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:03:27.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:03:27.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:03:27.609 [DEBUG] [Thread-10454] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:03:36.210 [DEBUG] [Thread-10456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:51.262 [DEBUG] [Thread-10457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:57.383 [DEBUG] [Thread-10458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:03:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:03:57.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:03:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:03:58.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 3, 41), 19.23, 28.87, 0.0, 17.96, 23.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:03:58.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:03:41
2025-12-25T11:03:58.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:03:58.620 [DEBUG] [Thread-10459] [transport.py] [_log()] starting thread (client mode): 0xb6b4af50
2025-12-25T11:03:58.620 [DEBUG] [Thread-10459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:03:58.641 [DEBUG] [Thread-10459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:03:58.641 [INFO] [Thread-10459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] client lang: <none>
2025-12-25T11:03:58.645 [DEBUG] [Thread-10459] [transport.py] [_log()] server lang: <none>
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] kex follows: False
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] Compression: none
2025-12-25T11:03:58.646 [DEBUG] [Thread-10459] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:03:58.663 [DEBUG] [Thread-10459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:03:58.663 [DEBUG] [Thread-10459] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:03:58.663 [DEBUG] [Thread-10459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:03:58.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:03:58.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:03:58.664 [DEBUG] [Thread-10459] [transport.py] [_log()] userauth is OK
2025-12-25T11:03:58.665 [DEBUG] [Thread-10459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:03:58.665 [DEBUG] [Thread-10459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:03:58.665 [DEBUG] [Thread-10459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:03:58.665 [DEBUG] [Thread-10459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:03:58.683 [INFO] [Thread-10459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:03:58.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:03:59.307 [DEBUG] [Thread-10459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:03:59.307 [DEBUG] [Thread-10459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:03:59.307 [DEBUG] [Thread-10459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:03:59.348 [DEBUG] [Thread-10459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:03:59.348 [DEBUG] [Thread-10459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:03:59.352 [DEBUG] [Thread-10459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:03:59.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:03:59.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:03:59.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:03:59.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:03:59.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:03:59.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:03:59.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:03:59.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:03:59.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:03:59.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.377493 -999.00  +23.50   9.77     35   +7.20 1 2 1 1 1   888    0 25.31 269.64 ----- 9.8 9.8 4.2 18.6 30.4 -22.9 29.7 -23.5 28.8 -19.9 29.2 -26.7
2025-12-25T11:03:59.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:03:59.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:03:59.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.377493
2025-12-25T11:03:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:03:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:03:59.379 [DEBUG] [Thread-10459] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:03:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:03:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:03:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:03:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:03:41', tmtdew=19.23, humidity=28.87, cloud=0.0, wind=17.96, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:03:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:03:59.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:03:59.474 [DEBUG] [Thread-10462] [transport.py] [_log()] starting thread (client mode): 0xb6b4b520
2025-12-25T11:03:59.474 [DEBUG] [Thread-10462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:03:59.490 [DEBUG] [Thread-10462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:03:59.490 [INFO] [Thread-10462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:03:59.497 [DEBUG] [Thread-10462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:03:59.497 [DEBUG] [Thread-10462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:03:59.497 [DEBUG] [Thread-10462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] client lang: <none>
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] server lang: <none>
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] kex follows: False
2025-12-25T11:03:59.498 [DEBUG] [Thread-10462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:03:59.499 [DEBUG] [Thread-10462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:03:59.499 [DEBUG] [Thread-10462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:03:59.499 [DEBUG] [Thread-10462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:03:59.499 [DEBUG] [Thread-10462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:03:59.499 [DEBUG] [Thread-10462] [transport.py] [_log()] Compression: none
2025-12-25T11:03:59.499 [DEBUG] [Thread-10462] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:03:59.555 [DEBUG] [Thread-10462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:03:59.555 [DEBUG] [Thread-10462] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:03:59.556 [DEBUG] [Thread-10462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:03:59.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:03:59.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:03:59.611 [DEBUG] [Thread-10462] [transport.py] [_log()] userauth is OK
2025-12-25T11:03:59.612 [DEBUG] [Thread-10462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:03:59.612 [DEBUG] [Thread-10462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:03:59.612 [DEBUG] [Thread-10462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:03:59.612 [DEBUG] [Thread-10462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:03:59.632 [INFO] [Thread-10462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:03:59.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:03:59.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:04:00.483 [DEBUG] [Thread-10462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:04:00.483 [DEBUG] [Thread-10462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:04:00.531 [DEBUG] [Thread-10462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:04:00.531 [DEBUG] [Thread-10462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:04:00.541 [DEBUG] [Thread-10462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:04:00.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:04:00.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-25T11:04:00.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-25T11:04:00.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:04:00.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:04:00.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:04:00.577 [DEBUG] [Thread-10462] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:04:06.299 [DEBUG] [Thread-10464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:04:07.549 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:04:07.550 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:04:21.347 [DEBUG] [Thread-10465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:04:30.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:04:30.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:04:30.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:04:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 4, 13), 19.15, 29.02, 0.0, 23.36, 23.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:04:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:04:13
2025-12-25T11:04:31.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:04:31.581 [DEBUG] [Thread-10466] [transport.py] [_log()] starting thread (client mode): 0xb6b49810
2025-12-25T11:04:31.581 [DEBUG] [Thread-10466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:04:31.600 [DEBUG] [Thread-10466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:04:31.601 [INFO] [Thread-10466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] client lang: <none>
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] server lang: <none>
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] kex follows: False
2025-12-25T11:04:31.604 [DEBUG] [Thread-10466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:04:31.605 [DEBUG] [Thread-10466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:04:31.605 [DEBUG] [Thread-10466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:04:31.605 [DEBUG] [Thread-10466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:04:31.605 [DEBUG] [Thread-10466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:04:31.605 [DEBUG] [Thread-10466] [transport.py] [_log()] Compression: none
2025-12-25T11:04:31.605 [DEBUG] [Thread-10466] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:04:31.622 [DEBUG] [Thread-10466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:04:31.623 [DEBUG] [Thread-10466] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:04:31.623 [DEBUG] [Thread-10466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:04:31.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:04:31.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:04:31.625 [DEBUG] [Thread-10466] [transport.py] [_log()] userauth is OK
2025-12-25T11:04:31.626 [DEBUG] [Thread-10466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:04:31.626 [DEBUG] [Thread-10466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:04:31.626 [DEBUG] [Thread-10466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:04:31.626 [DEBUG] [Thread-10466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:04:31.660 [INFO] [Thread-10466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:04:31.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:04:32.310 [DEBUG] [Thread-10466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:04:32.310 [DEBUG] [Thread-10466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:04:32.311 [DEBUG] [Thread-10466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:04:32.351 [DEBUG] [Thread-10466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:04:32.352 [DEBUG] [Thread-10466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:04:32.355 [DEBUG] [Thread-10466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:04:32.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:04:32.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:04:32.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:04:32.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:04:32.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:04:32.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:04:32.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:04:32.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:04:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:04:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.377840 -999.00  +23.90  16.75     34   +7.30 1 2 1 1 1   888    0 25.51 272.72 ----- 16.8 16.8 325.0 30.2 30.5 -23.0 29.7 -21.3 28.8 -18.6 29.3 -19.3
2025-12-25T11:04:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:04:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:04:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.377840
2025-12-25T11:04:32.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:04:32.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:04:32.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:04:32.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:04:32.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:04:32.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:04:13', tmtdew=19.15, humidity=29.02, cloud=0.0, wind=23.36, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:04:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:04:32.382 [DEBUG] [Thread-10466] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:04:32.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:04:32.475 [DEBUG] [Thread-10469] [transport.py] [_log()] starting thread (client mode): 0xb6b50400
2025-12-25T11:04:32.475 [DEBUG] [Thread-10469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:04:32.490 [DEBUG] [Thread-10469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:04:32.490 [INFO] [Thread-10469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:04:32.498 [DEBUG] [Thread-10469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:04:32.499 [DEBUG] [Thread-10469] [transport.py] [_log()] client lang: <none>
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] server lang: <none>
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] kex follows: False
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:04:32.500 [DEBUG] [Thread-10469] [transport.py] [_log()] Compression: none
2025-12-25T11:04:32.501 [DEBUG] [Thread-10469] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:04:32.558 [DEBUG] [Thread-10469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:04:32.559 [DEBUG] [Thread-10469] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:04:32.560 [DEBUG] [Thread-10469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:04:32.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:04:32.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:04:32.615 [DEBUG] [Thread-10469] [transport.py] [_log()] userauth is OK
2025-12-25T11:04:32.616 [DEBUG] [Thread-10469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:04:32.616 [DEBUG] [Thread-10469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:04:32.616 [DEBUG] [Thread-10469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:04:32.616 [DEBUG] [Thread-10469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:04:32.635 [INFO] [Thread-10469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:04:32.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-25T11:04:32.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:04:33.472 [DEBUG] [Thread-10469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:04:33.472 [DEBUG] [Thread-10469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:04:33.520 [DEBUG] [Thread-10469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:04:33.520 [DEBUG] [Thread-10469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:04:33.530 [DEBUG] [Thread-10469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:04:33.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:04:33.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-25T11:04:33.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:04:33.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:04:33.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:04:33.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:04:33.567 [DEBUG] [Thread-10469] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:04:36.382 [DEBUG] [Thread-10471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:04:51.431 [DEBUG] [Thread-10472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:04:57.438 [DEBUG] [Thread-10473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:03.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:05:03.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:05:03.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:05:04.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 4, 45), 19.02, 28.91, 0.0, 24.01, 23.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:05:04.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:04:45
2025-12-25T11:05:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:05:04.533 [DEBUG] [Thread-10474] [transport.py] [_log()] starting thread (client mode): 0xb6bbb3a0
2025-12-25T11:05:04.533 [DEBUG] [Thread-10474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:05:04.553 [DEBUG] [Thread-10474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:05:04.554 [INFO] [Thread-10474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:04.557 [DEBUG] [Thread-10474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] client lang: <none>
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] server lang: <none>
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] kex follows: False
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] Compression: none
2025-12-25T11:05:04.558 [DEBUG] [Thread-10474] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:05:04.575 [DEBUG] [Thread-10474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:05:04.576 [DEBUG] [Thread-10474] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:05:04.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:05:04.577 [DEBUG] [Thread-10474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:05:04.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:05:04.579 [DEBUG] [Thread-10474] [transport.py] [_log()] userauth is OK
2025-12-25T11:05:04.579 [DEBUG] [Thread-10474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:05:04.579 [DEBUG] [Thread-10474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:05:04.579 [DEBUG] [Thread-10474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:05:04.579 [DEBUG] [Thread-10474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:05:04.611 [INFO] [Thread-10474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:05:04.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:05:05.421 [DEBUG] [Thread-10474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:05:05.422 [DEBUG] [Thread-10474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:05:05.422 [DEBUG] [Thread-10474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:05:05.462 [DEBUG] [Thread-10474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:05:05.462 [DEBUG] [Thread-10474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:05:05.465 [DEBUG] [Thread-10474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:05:05.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:05:05.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:05:05.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:05:05.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:05:05.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:05:05.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:05:05.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:05:05.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:05:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:05:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.378187 -999.00  +24.30  24.56     32   +7.00 1 2 1 1 1   888    0 24.45 252.41 ----- 24.6 24.6 317.8 28.3 30.7 -22.8 29.9 -22.2 29.0 -21.2 29.4 -20.7
2025-12-25T11:05:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:05:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:05:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.378187
2025-12-25T11:05:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:05:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:05:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:05:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:05:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:05:05.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:04:45', tmtdew=19.02, humidity=28.91, cloud=0.0, wind=24.01, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:04:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:05:05.490 [DEBUG] [Thread-10474] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:05:05.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:05:05.586 [DEBUG] [Thread-10477] [transport.py] [_log()] starting thread (client mode): 0xb6b4a770
2025-12-25T11:05:05.586 [DEBUG] [Thread-10477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:05:05.600 [DEBUG] [Thread-10477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:05:05.601 [INFO] [Thread-10477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:05:05.608 [DEBUG] [Thread-10477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:05:05.608 [DEBUG] [Thread-10477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:05:05.608 [DEBUG] [Thread-10477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:05:05.608 [DEBUG] [Thread-10477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:05.608 [DEBUG] [Thread-10477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] client lang: <none>
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] server lang: <none>
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] kex follows: False
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] Compression: none
2025-12-25T11:05:05.609 [DEBUG] [Thread-10477] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:05:05.667 [DEBUG] [Thread-10477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:05:05.668 [DEBUG] [Thread-10477] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:05:05.669 [DEBUG] [Thread-10477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:05:05.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:05:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:05:05.723 [DEBUG] [Thread-10477] [transport.py] [_log()] userauth is OK
2025-12-25T11:05:05.724 [DEBUG] [Thread-10477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:05:05.724 [DEBUG] [Thread-10477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:05:05.724 [DEBUG] [Thread-10477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:05:05.724 [DEBUG] [Thread-10477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:05:05.748 [INFO] [Thread-10477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:05:05.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:05:05.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:05:06.466 [DEBUG] [Thread-10479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:06.584 [DEBUG] [Thread-10477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:05:06.584 [DEBUG] [Thread-10477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:05:06.632 [DEBUG] [Thread-10477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:05:06.632 [DEBUG] [Thread-10477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:05:06.642 [DEBUG] [Thread-10477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:05:06.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:05:06.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:05:06.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:05:06.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:05:06.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:05:06.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:05:06.679 [DEBUG] [Thread-10477] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:05:07.691 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:07.692 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:21.520 [DEBUG] [Thread-10480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:36.557 [DEBUG] [Thread-10481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:36.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:05:36.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:05:36.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:05:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 5, 18), 19.27, 28.46, 0.0, 22.48, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:05:37.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:05:18
2025-12-25T11:05:37.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:05:37.652 [DEBUG] [Thread-10482] [transport.py] [_log()] starting thread (client mode): 0xb6b62380
2025-12-25T11:05:37.652 [DEBUG] [Thread-10482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:05:37.668 [DEBUG] [Thread-10482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:05:37.668 [INFO] [Thread-10482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] client lang: <none>
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] server lang: <none>
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] kex follows: False
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] Compression: none
2025-12-25T11:05:37.671 [DEBUG] [Thread-10482] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:05:37.689 [DEBUG] [Thread-10482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:05:37.689 [DEBUG] [Thread-10482] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:05:37.690 [DEBUG] [Thread-10482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:05:37.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:05:37.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:05:37.692 [DEBUG] [Thread-10482] [transport.py] [_log()] userauth is OK
2025-12-25T11:05:37.692 [DEBUG] [Thread-10482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:05:37.692 [DEBUG] [Thread-10482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:05:37.692 [DEBUG] [Thread-10482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:05:37.693 [DEBUG] [Thread-10482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:05:37.718 [INFO] [Thread-10482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:05:37.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:05:38.353 [DEBUG] [Thread-10482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:05:38.353 [DEBUG] [Thread-10482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:05:38.354 [DEBUG] [Thread-10482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:05:38.394 [DEBUG] [Thread-10482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:05:38.395 [DEBUG] [Thread-10482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:05:38.398 [DEBUG] [Thread-10482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:05:38.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:05:38.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:05:38.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:05:38.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:05:38.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:05:38.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:05:38.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:05:38.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:05:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:05:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.378535 -999.00  +23.80  22.87     34   +7.30 1 2 1 1 1   888    0 23.82 225.76 ----- 22.9 22.9 302.2 27.1 30.6 -23.0 29.9 -21.3 28.9 -20.2 29.5 -20.4
2025-12-25T11:05:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:05:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:05:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.378535
2025-12-25T11:05:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:05:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:05:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:05:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:05:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:05:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:05:18', tmtdew=19.27, humidity=28.46, cloud=0.0, wind=22.48, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:05:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:05:38.424 [DEBUG] [Thread-10482] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:05:38.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:05:38.531 [DEBUG] [Thread-10485] [transport.py] [_log()] starting thread (client mode): 0xb6b4bb50
2025-12-25T11:05:38.531 [DEBUG] [Thread-10485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:05:38.546 [DEBUG] [Thread-10485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:05:38.547 [INFO] [Thread-10485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:38.554 [DEBUG] [Thread-10485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] client lang: <none>
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] server lang: <none>
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] kex follows: False
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] Compression: none
2025-12-25T11:05:38.555 [DEBUG] [Thread-10485] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:05:38.615 [DEBUG] [Thread-10485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:05:38.615 [DEBUG] [Thread-10485] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:05:38.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:05:38.616 [DEBUG] [Thread-10485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:05:38.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:05:38.671 [DEBUG] [Thread-10485] [transport.py] [_log()] userauth is OK
2025-12-25T11:05:38.671 [DEBUG] [Thread-10485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:05:38.671 [DEBUG] [Thread-10485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:05:38.671 [DEBUG] [Thread-10485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:05:38.671 [DEBUG] [Thread-10485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:05:38.690 [INFO] [Thread-10485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:05:38.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-25T11:05:38.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:05:39.496 [DEBUG] [Thread-10485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:05:39.497 [DEBUG] [Thread-10485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:05:39.545 [DEBUG] [Thread-10485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:05:39.545 [DEBUG] [Thread-10485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:05:39.554 [DEBUG] [Thread-10485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:05:39.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:05:39.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:05:39.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-25T11:05:39.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:05:39.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:05:39.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:05:39.591 [DEBUG] [Thread-10485] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:05:51.594 [DEBUG] [Thread-10487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:05:57.491 [DEBUG] [Thread-10488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:06.635 [DEBUG] [Thread-10489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:07.832 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:07.832 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:09.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:06:09.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:06:09.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-25T11:06:10.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 5, 50), 19.55, 28.06, 0.0, 22.82, 24.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:06:10.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:05:50
2025-12-25T11:06:10.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:06:10.646 [DEBUG] [Thread-10490] [transport.py] [_log()] starting thread (client mode): 0xb6b615d0
2025-12-25T11:06:10.646 [DEBUG] [Thread-10490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:06:10.666 [DEBUG] [Thread-10490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:06:10.666 [INFO] [Thread-10490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] client lang: <none>
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] server lang: <none>
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] kex follows: False
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:06:10.669 [DEBUG] [Thread-10490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:06:10.670 [DEBUG] [Thread-10490] [transport.py] [_log()] Compression: none
2025-12-25T11:06:10.670 [DEBUG] [Thread-10490] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:06:10.687 [DEBUG] [Thread-10490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:06:10.687 [DEBUG] [Thread-10490] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:06:10.687 [DEBUG] [Thread-10490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:06:10.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:06:10.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:06:10.688 [DEBUG] [Thread-10490] [transport.py] [_log()] userauth is OK
2025-12-25T11:06:10.688 [DEBUG] [Thread-10490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:06:10.688 [DEBUG] [Thread-10490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:06:10.688 [DEBUG] [Thread-10490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:06:10.688 [DEBUG] [Thread-10490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:06:10.701 [INFO] [Thread-10490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:06:10.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:06:11.349 [DEBUG] [Thread-10490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:06:11.350 [DEBUG] [Thread-10490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:06:11.350 [DEBUG] [Thread-10490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:06:11.391 [DEBUG] [Thread-10490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:06:11.391 [DEBUG] [Thread-10490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:06:11.395 [DEBUG] [Thread-10490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:06:11.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:06:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:06:11.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:06:11.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:06:11.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:06:11.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:06:11.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:06:11.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:06:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:06:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.378882 -999.00  +24.60  26.15     33   +7.40 1 2 1 1 1   888    0 23.05 197.01 ----- 26.1 26.1 311.2 29.1 30.7 -22.4 30.0 -22.2 28.9 -17.9 29.5 -20.0
2025-12-25T11:06:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:06:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:06:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.378882
2025-12-25T11:06:11.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:06:11.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:06:11.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:06:11.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:06:11.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:06:11.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:05:50', tmtdew=19.55, humidity=28.06, cloud=0.0, wind=22.82, temperature=24.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:05:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:06:11.426 [DEBUG] [Thread-10490] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:06:11.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-25T11:06:11.525 [DEBUG] [Thread-10493] [transport.py] [_log()] starting thread (client mode): 0xb6beb490
2025-12-25T11:06:11.525 [DEBUG] [Thread-10493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:06:11.545 [DEBUG] [Thread-10493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:06:11.546 [INFO] [Thread-10493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:06:11.557 [DEBUG] [Thread-10493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:06:11.557 [DEBUG] [Thread-10493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:06:11.557 [DEBUG] [Thread-10493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:06:11.557 [DEBUG] [Thread-10493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:11.557 [DEBUG] [Thread-10493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] client lang: <none>
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] server lang: <none>
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] kex follows: False
2025-12-25T11:06:11.558 [DEBUG] [Thread-10493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:06:11.559 [DEBUG] [Thread-10493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:06:11.559 [DEBUG] [Thread-10493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:06:11.559 [DEBUG] [Thread-10493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:06:11.560 [DEBUG] [Thread-10493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:06:11.560 [DEBUG] [Thread-10493] [transport.py] [_log()] Compression: none
2025-12-25T11:06:11.560 [DEBUG] [Thread-10493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:06:11.623 [DEBUG] [Thread-10493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:06:11.624 [DEBUG] [Thread-10493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:06:11.624 [DEBUG] [Thread-10493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:06:11.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:06:11.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:06:11.683 [DEBUG] [Thread-10493] [transport.py] [_log()] userauth is OK
2025-12-25T11:06:11.683 [DEBUG] [Thread-10493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:06:11.683 [DEBUG] [Thread-10493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:06:11.683 [DEBUG] [Thread-10493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:06:11.683 [DEBUG] [Thread-10493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:06:11.702 [INFO] [Thread-10493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:06:11.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-25T11:06:11.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:06:12.518 [DEBUG] [Thread-10493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:06:12.518 [DEBUG] [Thread-10493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:06:12.566 [DEBUG] [Thread-10493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:06:12.566 [DEBUG] [Thread-10493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:06:12.575 [DEBUG] [Thread-10493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:06:12.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:06:12.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-25T11:06:12.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-25T11:06:12.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:06:12.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:06:12.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:06:12.611 [DEBUG] [Thread-10493] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:06:21.665 [DEBUG] [Thread-10495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:36.716 [DEBUG] [Thread-10496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:42.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:06:42.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:06:42.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-25T11:06:43.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 6, 22), 19.58, 27.99, 0.0, 24.51, 24.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:06:43.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:06:22
2025-12-25T11:06:43.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:06:43.618 [DEBUG] [Thread-10497] [transport.py] [_log()] starting thread (client mode): 0xb6b62380
2025-12-25T11:06:43.618 [DEBUG] [Thread-10497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:06:43.638 [DEBUG] [Thread-10497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:06:43.639 [INFO] [Thread-10497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:06:43.642 [DEBUG] [Thread-10497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:06:43.642 [DEBUG] [Thread-10497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:06:43.642 [DEBUG] [Thread-10497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:06:43.642 [DEBUG] [Thread-10497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:43.642 [DEBUG] [Thread-10497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] client lang: <none>
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] server lang: <none>
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] kex follows: False
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:06:43.643 [DEBUG] [Thread-10497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:06:43.644 [DEBUG] [Thread-10497] [transport.py] [_log()] Compression: none
2025-12-25T11:06:43.644 [DEBUG] [Thread-10497] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:06:43.664 [DEBUG] [Thread-10497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:06:43.664 [DEBUG] [Thread-10497] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:06:43.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:06:43.665 [DEBUG] [Thread-10497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:06:43.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:06:43.667 [DEBUG] [Thread-10497] [transport.py] [_log()] userauth is OK
2025-12-25T11:06:43.668 [DEBUG] [Thread-10497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:06:43.668 [DEBUG] [Thread-10497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:06:43.668 [DEBUG] [Thread-10497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:06:43.668 [DEBUG] [Thread-10497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:06:43.693 [INFO] [Thread-10497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:06:43.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:06:44.333 [DEBUG] [Thread-10497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:06:44.333 [DEBUG] [Thread-10497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:06:44.333 [DEBUG] [Thread-10497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:06:44.374 [DEBUG] [Thread-10497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:06:44.374 [DEBUG] [Thread-10497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:06:44.376 [DEBUG] [Thread-10497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:06:44.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:06:44.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:06:44.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:06:44.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:06:44.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:06:44.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:06:44.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.379229 -999.00  +23.60  16.01     34   +6.90 1 2 1 1 1   888    0 22.86 201.23 ----- 16.0 16.0 328.8 28.8 30.7 -23.4 29.9 -22.6 29.0 -19.5 29.5 -20.0
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.379229
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:06:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:06:22', tmtdew=19.58, humidity=27.99, cloud=0.0, wind=24.51, temperature=24.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:06:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:06:44.397 [DEBUG] [Thread-10497] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:06:44.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:06:44.479 [DEBUG] [Thread-10500] [transport.py] [_log()] starting thread (client mode): 0xb6b48910
2025-12-25T11:06:44.480 [DEBUG] [Thread-10500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:06:44.494 [DEBUG] [Thread-10500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:06:44.494 [INFO] [Thread-10500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:06:44.501 [DEBUG] [Thread-10500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:06:44.501 [DEBUG] [Thread-10500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:06:44.501 [DEBUG] [Thread-10500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:06:44.501 [DEBUG] [Thread-10500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] client lang: <none>
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] server lang: <none>
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] kex follows: False
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] Compression: none
2025-12-25T11:06:44.502 [DEBUG] [Thread-10500] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:06:44.556 [DEBUG] [Thread-10500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:06:44.556 [DEBUG] [Thread-10500] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:06:44.557 [DEBUG] [Thread-10500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:06:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:06:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:06:44.613 [DEBUG] [Thread-10500] [transport.py] [_log()] userauth is OK
2025-12-25T11:06:44.613 [DEBUG] [Thread-10500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:06:44.613 [DEBUG] [Thread-10500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:06:44.613 [DEBUG] [Thread-10500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:06:44.613 [DEBUG] [Thread-10500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:06:44.627 [INFO] [Thread-10500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:06:44.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-25T11:06:44.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:06:45.438 [DEBUG] [Thread-10500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:06:45.438 [DEBUG] [Thread-10500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:06:45.485 [DEBUG] [Thread-10500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:06:45.485 [DEBUG] [Thread-10500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:06:45.494 [DEBUG] [Thread-10500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:06:45.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:06:45.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-25T11:06:45.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-25T11:06:45.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:06:45.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:06:45.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:06:45.525 [DEBUG] [Thread-10500] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:06:51.752 [DEBUG] [Thread-10502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:06:57.541 [DEBUG] [Thread-10503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:06.800 [DEBUG] [Thread-10504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:07.969 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:07.971 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:15.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:07:15.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:07:15.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-25T11:07:16.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 6, 54), 19.23, 28.67, 0.0, 16.27, 23.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:07:16.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:06:54
2025-12-25T11:07:16.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:07:16.534 [DEBUG] [Thread-10505] [transport.py] [_log()] starting thread (client mode): 0xb6b23df0
2025-12-25T11:07:16.534 [DEBUG] [Thread-10505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:07:16.553 [DEBUG] [Thread-10505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:07:16.554 [INFO] [Thread-10505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:07:16.556 [DEBUG] [Thread-10505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] client lang: <none>
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] server lang: <none>
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] kex follows: False
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] Compression: none
2025-12-25T11:07:16.557 [DEBUG] [Thread-10505] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:07:16.574 [DEBUG] [Thread-10505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:07:16.574 [DEBUG] [Thread-10505] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:07:16.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:07:16.575 [DEBUG] [Thread-10505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:07:16.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:07:16.577 [DEBUG] [Thread-10505] [transport.py] [_log()] userauth is OK
2025-12-25T11:07:16.578 [DEBUG] [Thread-10505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:07:16.578 [DEBUG] [Thread-10505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:07:16.578 [DEBUG] [Thread-10505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:07:16.578 [DEBUG] [Thread-10505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:07:16.599 [INFO] [Thread-10505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:07:16.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:07:17.213 [DEBUG] [Thread-10505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:07:17.213 [DEBUG] [Thread-10505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:07:17.213 [DEBUG] [Thread-10505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:07:17.254 [DEBUG] [Thread-10505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:07:17.254 [DEBUG] [Thread-10505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:07:17.258 [DEBUG] [Thread-10505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:07:17.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:07:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:07:17.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:07:17.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:07:17.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:07:17.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:07:17.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:07:17.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:07:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:07:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.379924 -999.00  +23.20  10.42     35   +7.10 1 2 1 1 1   888    0 22.20 177.28 ----- 10.4 10.4 297.1 16.9 30.8 -22.2 30.1 -20.5 29.1 -17.6 29.7 -18.7
2025-12-25T11:07:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:07:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:07:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.379924
2025-12-25T11:07:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:07:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:07:17.286 [DEBUG] [Thread-10505] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:07:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:07:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:07:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:07:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:06:54', tmtdew=19.23, humidity=28.67, cloud=0.0, wind=16.27, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:07:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:07:17.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-25T11:07:17.377 [DEBUG] [Thread-10508] [transport.py] [_log()] starting thread (client mode): 0xb6b48070
2025-12-25T11:07:17.377 [DEBUG] [Thread-10508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:07:17.391 [DEBUG] [Thread-10508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:07:17.391 [INFO] [Thread-10508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:07:17.399 [DEBUG] [Thread-10508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:07:17.399 [DEBUG] [Thread-10508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:07:17.399 [DEBUG] [Thread-10508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:07:17.399 [DEBUG] [Thread-10508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:17.399 [DEBUG] [Thread-10508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] client lang: <none>
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] server lang: <none>
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] kex follows: False
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:07:17.400 [DEBUG] [Thread-10508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:07:17.401 [DEBUG] [Thread-10508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:07:17.401 [DEBUG] [Thread-10508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:07:17.401 [DEBUG] [Thread-10508] [transport.py] [_log()] Compression: none
2025-12-25T11:07:17.401 [DEBUG] [Thread-10508] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:07:17.459 [DEBUG] [Thread-10508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:07:17.460 [DEBUG] [Thread-10508] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:07:17.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:07:17.461 [DEBUG] [Thread-10508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:07:17.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:07:17.522 [DEBUG] [Thread-10508] [transport.py] [_log()] userauth is OK
2025-12-25T11:07:17.522 [DEBUG] [Thread-10508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:07:17.523 [DEBUG] [Thread-10508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:07:17.523 [DEBUG] [Thread-10508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:07:17.523 [DEBUG] [Thread-10508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:07:17.541 [INFO] [Thread-10508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:07:17.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-25T11:07:17.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:07:18.379 [DEBUG] [Thread-10508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:07:18.379 [DEBUG] [Thread-10508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:07:18.427 [DEBUG] [Thread-10508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:07:18.427 [DEBUG] [Thread-10508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:07:18.436 [DEBUG] [Thread-10508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:07:18.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:07:18.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-25T11:07:18.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-25T11:07:18.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:07:18.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:07:18.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:07:18.472 [DEBUG] [Thread-10508] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:07:21.836 [DEBUG] [Thread-10510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:36.885 [DEBUG] [Thread-10511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:07:48.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:07:48.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-25T11:07:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 7, 26), 19.31, 28.54, 0.0, 19.34, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:07:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:07:26
2025-12-25T11:07:49.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:07:49.472 [DEBUG] [Thread-10512] [transport.py] [_log()] starting thread (client mode): 0xb6b53b80
2025-12-25T11:07:49.472 [DEBUG] [Thread-10512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:07:49.492 [DEBUG] [Thread-10512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:07:49.492 [INFO] [Thread-10512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:07:49.495 [DEBUG] [Thread-10512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:07:49.495 [DEBUG] [Thread-10512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:07:49.495 [DEBUG] [Thread-10512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:07:49.495 [DEBUG] [Thread-10512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:49.495 [DEBUG] [Thread-10512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:49.495 [DEBUG] [Thread-10512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] client lang: <none>
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] server lang: <none>
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] kex follows: False
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:07:49.496 [DEBUG] [Thread-10512] [transport.py] [_log()] Compression: none
2025-12-25T11:07:49.497 [DEBUG] [Thread-10512] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:07:49.506 [DEBUG] [Thread-10512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:07:49.507 [DEBUG] [Thread-10512] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:07:49.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:07:49.507 [DEBUG] [Thread-10512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:07:49.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:07:49.509 [DEBUG] [Thread-10512] [transport.py] [_log()] userauth is OK
2025-12-25T11:07:49.509 [DEBUG] [Thread-10512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:07:49.510 [DEBUG] [Thread-10512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:07:49.510 [DEBUG] [Thread-10512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:07:49.510 [DEBUG] [Thread-10512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:07:49.528 [INFO] [Thread-10512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:07:49.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:07:50.161 [DEBUG] [Thread-10512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:07:50.161 [DEBUG] [Thread-10512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:07:50.161 [DEBUG] [Thread-10512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:07:50.202 [DEBUG] [Thread-10512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:07:50.202 [DEBUG] [Thread-10512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:07:50.205 [DEBUG] [Thread-10512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:07:50.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:07:50.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:07:50.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:07:50.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:07:50.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:07:50.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:07:50.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:07:50.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:07:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:07:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.380271 -999.00  +23.50  10.98     35   +7.30 1 2 1 1 1   888    0 21.62 150.10 ----- 11.0 11.0 320.4 14.0 31.1 -21.6 30.3 -20.6 29.3 -16.9 29.9 -18.6
2025-12-25T11:07:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:07:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:07:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.380271
2025-12-25T11:07:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:07:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:07:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:07:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:07:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:07:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:07:26', tmtdew=19.31, humidity=28.54, cloud=0.0, wind=19.34, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:07:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:07:50.231 [DEBUG] [Thread-10512] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:07:50.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-25T11:07:50.325 [DEBUG] [Thread-10515] [transport.py] [_log()] starting thread (client mode): 0xb6b510c0
2025-12-25T11:07:50.325 [DEBUG] [Thread-10515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:07:50.340 [DEBUG] [Thread-10515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:07:50.340 [INFO] [Thread-10515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:50.348 [DEBUG] [Thread-10515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] client lang: <none>
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] server lang: <none>
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] kex follows: False
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:07:50.349 [DEBUG] [Thread-10515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:07:50.350 [DEBUG] [Thread-10515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:07:50.350 [DEBUG] [Thread-10515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:07:50.350 [DEBUG] [Thread-10515] [transport.py] [_log()] Compression: none
2025-12-25T11:07:50.350 [DEBUG] [Thread-10515] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:07:50.407 [DEBUG] [Thread-10515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:07:50.407 [DEBUG] [Thread-10515] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:07:50.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:07:50.408 [DEBUG] [Thread-10515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:07:50.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:07:50.466 [DEBUG] [Thread-10515] [transport.py] [_log()] userauth is OK
2025-12-25T11:07:50.466 [DEBUG] [Thread-10515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:07:50.466 [DEBUG] [Thread-10515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:07:50.466 [DEBUG] [Thread-10515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:07:50.466 [DEBUG] [Thread-10515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:07:50.485 [INFO] [Thread-10515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:07:50.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:07:50.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:07:51.307 [DEBUG] [Thread-10515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:07:51.307 [DEBUG] [Thread-10515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:07:51.356 [DEBUG] [Thread-10515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:07:51.356 [DEBUG] [Thread-10515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:07:51.365 [DEBUG] [Thread-10515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:07:51.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:07:51.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-25T11:07:51.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-25T11:07:51.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:07:51.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:07:51.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:07:51.402 [DEBUG] [Thread-10515] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:07:51.921 [DEBUG] [Thread-10517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:07:57.599 [DEBUG] [Thread-10518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:06.965 [DEBUG] [Thread-10519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:08.115 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:08.116 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:08:21.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:08:21.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-25T11:08:21.994 [DEBUG] [Thread-10520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:22.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 7, 58), 19.31, 28.46, 0.0, 14.8, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:08:22.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:07:58
2025-12-25T11:08:22.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:08:22.380 [DEBUG] [Thread-10521] [transport.py] [_log()] starting thread (client mode): 0xb6beb6d0
2025-12-25T11:08:22.380 [DEBUG] [Thread-10521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:08:22.391 [DEBUG] [Thread-10521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:08:22.391 [INFO] [Thread-10521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] client lang: <none>
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] server lang: <none>
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] kex follows: False
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] Compression: none
2025-12-25T11:08:22.393 [DEBUG] [Thread-10521] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:08:22.404 [DEBUG] [Thread-10521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:08:22.404 [DEBUG] [Thread-10521] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:08:22.404 [DEBUG] [Thread-10521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:08:22.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:08:22.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:08:22.406 [DEBUG] [Thread-10521] [transport.py] [_log()] userauth is OK
2025-12-25T11:08:22.406 [DEBUG] [Thread-10521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:08:22.406 [DEBUG] [Thread-10521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:08:22.406 [DEBUG] [Thread-10521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:08:22.406 [DEBUG] [Thread-10521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:08:22.421 [INFO] [Thread-10521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:08:22.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:08:22.950 [DEBUG] [Thread-10521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:08:22.950 [DEBUG] [Thread-10521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:08:22.951 [DEBUG] [Thread-10521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:08:22.991 [DEBUG] [Thread-10521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:08:22.991 [DEBUG] [Thread-10521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:08:22.995 [DEBUG] [Thread-10521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:08:23.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:08:23.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:08:23.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:08:23.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:08:23.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:08:23.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:08:23.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:08:23.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:08:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:08:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.380618 -999.00  +24.00  16.78     35   +7.70 1 2 1 1 1   888    0 20.88 137.84 ----- 16.8 16.8 282.0 19.6 31.3 -21.5 30.5 -20.1 29.4 -17.3 30.0 -18.0
2025-12-25T11:08:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:08:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:08:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.380618
2025-12-25T11:08:23.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:08:23.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:08:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:08:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:08:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:08:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:07:58', tmtdew=19.31, humidity=28.46, cloud=0.0, wind=14.8, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:08:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:08:23.019 [DEBUG] [Thread-10521] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:08:23.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-25T11:08:23.114 [DEBUG] [Thread-10524] [transport.py] [_log()] starting thread (client mode): 0xb6b62230
2025-12-25T11:08:23.114 [DEBUG] [Thread-10524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:08:23.128 [DEBUG] [Thread-10524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:08:23.128 [INFO] [Thread-10524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] client lang: <none>
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] server lang: <none>
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] kex follows: False
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:08:23.136 [DEBUG] [Thread-10524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:08:23.137 [DEBUG] [Thread-10524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:08:23.137 [DEBUG] [Thread-10524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:08:23.137 [DEBUG] [Thread-10524] [transport.py] [_log()] Compression: none
2025-12-25T11:08:23.137 [DEBUG] [Thread-10524] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:08:23.194 [DEBUG] [Thread-10524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:08:23.194 [DEBUG] [Thread-10524] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:08:23.195 [DEBUG] [Thread-10524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:08:23.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:08:23.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:08:23.250 [DEBUG] [Thread-10524] [transport.py] [_log()] userauth is OK
2025-12-25T11:08:23.250 [DEBUG] [Thread-10524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:08:23.250 [DEBUG] [Thread-10524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:08:23.250 [DEBUG] [Thread-10524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:08:23.251 [DEBUG] [Thread-10524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:08:23.269 [INFO] [Thread-10524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:08:23.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-25T11:08:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:08:24.083 [DEBUG] [Thread-10524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:08:24.084 [DEBUG] [Thread-10524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:08:24.133 [DEBUG] [Thread-10524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:08:24.133 [DEBUG] [Thread-10524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:08:24.143 [DEBUG] [Thread-10524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:08:24.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:08:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:08:24.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-25T11:08:24.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:08:24.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:08:24.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:08:24.186 [DEBUG] [Thread-10524] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:08:37.026 [DEBUG] [Thread-10526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:52.075 [DEBUG] [Thread-10527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:08:54.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:08:54.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:08:54.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-25T11:08:54.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 8, 30), 19.25, 28.57, 0.0, 12.12, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:08:54.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:08:30
2025-12-25T11:08:55.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:08:55.162 [DEBUG] [Thread-10528] [transport.py] [_log()] starting thread (client mode): 0xb6b63cd0
2025-12-25T11:08:55.163 [DEBUG] [Thread-10528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:08:55.181 [DEBUG] [Thread-10528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:08:55.181 [INFO] [Thread-10528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] client lang: <none>
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] server lang: <none>
2025-12-25T11:08:55.183 [DEBUG] [Thread-10528] [transport.py] [_log()] kex follows: False
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] Compression: none
2025-12-25T11:08:55.184 [DEBUG] [Thread-10528] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:08:55.201 [DEBUG] [Thread-10528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:08:55.201 [DEBUG] [Thread-10528] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:08:55.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:08:55.202 [DEBUG] [Thread-10528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:08:55.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:08:55.205 [DEBUG] [Thread-10528] [transport.py] [_log()] userauth is OK
2025-12-25T11:08:55.205 [DEBUG] [Thread-10528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:08:55.205 [DEBUG] [Thread-10528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:08:55.205 [DEBUG] [Thread-10528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:08:55.205 [DEBUG] [Thread-10528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:08:55.231 [INFO] [Thread-10528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:08:55.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:08:55.805 [DEBUG] [Thread-10528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:08:55.805 [DEBUG] [Thread-10528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:08:55.805 [DEBUG] [Thread-10528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:08:55.845 [DEBUG] [Thread-10528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:08:55.846 [DEBUG] [Thread-10528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:08:55.847 [DEBUG] [Thread-10528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:08:55.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:08:55.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:08:55.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:08:55.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:08:55.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:08:55.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:08:55.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:08:55.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:08:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:08:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.380965 -999.00  +24.20  21.06     34   +7.70 1 2 1 1 1   888    0 20.85 120.43 ----- 21.1 21.1 340.5 32.1 31.3 -23.2 30.4 -20.8 29.3 -17.6 30.0 -18.3
2025-12-25T11:08:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:08:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:08:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.380965
2025-12-25T11:08:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:08:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:08:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:08:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:08:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:08:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:08:30', tmtdew=19.25, humidity=28.57, cloud=0.0, wind=12.12, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:08:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:08:55.865 [DEBUG] [Thread-10528] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:08:55.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-25T11:08:55.962 [DEBUG] [Thread-10531] [transport.py] [_log()] starting thread (client mode): 0xb6b50250
2025-12-25T11:08:55.962 [DEBUG] [Thread-10531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:08:55.977 [DEBUG] [Thread-10531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:08:55.977 [INFO] [Thread-10531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:08:55.985 [DEBUG] [Thread-10531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:08:55.985 [DEBUG] [Thread-10531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] client lang: <none>
2025-12-25T11:08:55.986 [DEBUG] [Thread-10531] [transport.py] [_log()] server lang: <none>
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] kex follows: False
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] Compression: none
2025-12-25T11:08:55.987 [DEBUG] [Thread-10531] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:08:56.050 [DEBUG] [Thread-10531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:08:56.050 [DEBUG] [Thread-10531] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:08:56.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:08:56.051 [DEBUG] [Thread-10531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:08:56.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:08:56.106 [DEBUG] [Thread-10531] [transport.py] [_log()] userauth is OK
2025-12-25T11:08:56.106 [DEBUG] [Thread-10531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:08:56.106 [DEBUG] [Thread-10531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:08:56.106 [DEBUG] [Thread-10531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:08:56.106 [DEBUG] [Thread-10531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:08:56.125 [INFO] [Thread-10531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:08:56.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-25T11:08:56.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:08:57.010 [DEBUG] [Thread-10531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:08:57.010 [DEBUG] [Thread-10531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:08:57.058 [DEBUG] [Thread-10531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:08:57.058 [DEBUG] [Thread-10531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:08:57.067 [DEBUG] [Thread-10531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:08:57.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:08:57.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-25T11:08:57.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-25T11:08:57.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:08:57.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:08:57.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:08:57.104 [DEBUG] [Thread-10531] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:08:57.653 [DEBUG] [Thread-10533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:07.108 [DEBUG] [Thread-10534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:08.252 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:08.253 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:22.152 [DEBUG] [Thread-10535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:27.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:09:27.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:09:27.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-25T11:09:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 9, 2), 19.33, 28.42, 0.0, 15.72, 23.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:09:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:09:02
2025-12-25T11:09:27.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:09:28.094 [DEBUG] [Thread-10536] [transport.py] [_log()] starting thread (client mode): 0xb6be1690
2025-12-25T11:09:28.094 [DEBUG] [Thread-10536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:09:28.105 [DEBUG] [Thread-10536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:09:28.105 [INFO] [Thread-10536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] client lang: <none>
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] server lang: <none>
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] kex follows: False
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] Compression: none
2025-12-25T11:09:28.108 [DEBUG] [Thread-10536] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:09:28.121 [DEBUG] [Thread-10536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:09:28.121 [DEBUG] [Thread-10536] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:09:28.121 [DEBUG] [Thread-10536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:09:28.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:09:28.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:09:28.122 [DEBUG] [Thread-10536] [transport.py] [_log()] userauth is OK
2025-12-25T11:09:28.122 [DEBUG] [Thread-10536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:09:28.122 [DEBUG] [Thread-10536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:09:28.122 [DEBUG] [Thread-10536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:09:28.123 [DEBUG] [Thread-10536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:09:28.136 [INFO] [Thread-10536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:09:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:09:28.730 [DEBUG] [Thread-10536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:09:28.730 [DEBUG] [Thread-10536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:09:28.731 [DEBUG] [Thread-10536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:09:28.771 [DEBUG] [Thread-10536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:09:28.771 [DEBUG] [Thread-10536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:09:28.774 [DEBUG] [Thread-10536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:09:28.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:09:28.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:09:28.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:09:28.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:09:28.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:09:28.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:09:28.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:09:28.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:09:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:09:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.381313 -999.00  +24.30  17.51     34   +7.70 1 1 1 1 1   888    0 20.63 113.27 ----- 17.5 17.5 8.6 20.1 31.0 -27.0 30.0 -25.8 29.1 -22.3 29.5 -24.2
2025-12-25T11:09:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:09:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:09:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.381313
2025-12-25T11:09:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:09:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:09:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:09:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:09:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:09:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:09:02', tmtdew=19.33, humidity=28.42, cloud=0.0, wind=15.72, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:09:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:09:28.800 [DEBUG] [Thread-10536] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:09:28.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-25T11:09:37.183 [DEBUG] [Thread-10539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:52.234 [DEBUG] [Thread-10540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:09:57.707 [DEBUG] [Thread-10541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:07.268 [DEBUG] [Thread-10542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:08.393 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:08.394 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:22.302 [DEBUG] [Thread-10543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:37.339 [DEBUG] [Thread-10544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:52.377 [DEBUG] [Thread-10545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:10:57.761 [DEBUG] [Thread-10546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:07.416 [DEBUG] [Thread-10547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:08.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:08.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:22.446 [DEBUG] [Thread-10548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:37.487 [DEBUG] [Thread-10549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:40.757 [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-25T11:11:52.520 [DEBUG] [Thread-10550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:11:57.812 [DEBUG] [Thread-10551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:07.552 [DEBUG] [Thread-10552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:08.677 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:08.678 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:12:10.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:12:10.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-25T11:12:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 11, 42), 20.48, 26.84, 0.0, 26.06, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:12:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:11:42
2025-12-25T11:12:11.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:12:11.732 [DEBUG] [Thread-10553] [transport.py] [_log()] starting thread (client mode): 0xb6be1ba0
2025-12-25T11:12:11.732 [DEBUG] [Thread-10553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:12:11.752 [DEBUG] [Thread-10553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:12:11.753 [INFO] [Thread-10553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:12:11.754 [DEBUG] [Thread-10553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] client lang: <none>
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] server lang: <none>
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] kex follows: False
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] Compression: none
2025-12-25T11:12:11.755 [DEBUG] [Thread-10553] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:12:11.769 [DEBUG] [Thread-10553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:12:11.770 [DEBUG] [Thread-10553] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:12:11.771 [DEBUG] [Thread-10553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:12:11.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:12:11.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:12:11.773 [DEBUG] [Thread-10553] [transport.py] [_log()] userauth is OK
2025-12-25T11:12:11.774 [DEBUG] [Thread-10553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:12:11.774 [DEBUG] [Thread-10553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:12:11.774 [DEBUG] [Thread-10553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:12:11.774 [DEBUG] [Thread-10553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:12:11.797 [INFO] [Thread-10553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:12:11.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:12:12.453 [DEBUG] [Thread-10553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:12:12.454 [DEBUG] [Thread-10553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:12:12.454 [DEBUG] [Thread-10553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:12:12.495 [DEBUG] [Thread-10553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:12:12.495 [DEBUG] [Thread-10553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:12:12.499 [DEBUG] [Thread-10553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:12:12.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:12:12.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:12:12.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:12:12.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:12:12.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:12:12.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:12:12.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:12:12.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:12:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.383049 -999.00  +24.40  23.18     34   +7.80 1 2 1 1 1   888    0 19.08 70.56 ----- 23.2 23.2 293.1 27.8 31.0 -17.9 30.3 -17.6 29.4 -16.6 30.0 -16.6
2025-12-25T11:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.383049
2025-12-25T11:12:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:12:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:12:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:12:12.525 [DEBUG] [Thread-10553] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:12:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:12:12.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:12:12.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:11:42', tmtdew=20.48, humidity=26.84, cloud=0.0, wind=26.06, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:11:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:12:12.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:12:12.618 [DEBUG] [Thread-10556] [transport.py] [_log()] starting thread (client mode): 0xb6beb4f0
2025-12-25T11:12:12.618 [DEBUG] [Thread-10556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:12:12.632 [DEBUG] [Thread-10556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:12:12.632 [INFO] [Thread-10556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:12:12.640 [DEBUG] [Thread-10556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:12:12.640 [DEBUG] [Thread-10556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:12:12.640 [DEBUG] [Thread-10556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:12:12.640 [DEBUG] [Thread-10556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:12.640 [DEBUG] [Thread-10556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:12.640 [DEBUG] [Thread-10556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] client lang: <none>
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] server lang: <none>
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] kex follows: False
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:12:12.641 [DEBUG] [Thread-10556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:12:12.642 [DEBUG] [Thread-10556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:12:12.642 [DEBUG] [Thread-10556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:12:12.642 [DEBUG] [Thread-10556] [transport.py] [_log()] Compression: none
2025-12-25T11:12:12.642 [DEBUG] [Thread-10556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:12:12.703 [DEBUG] [Thread-10556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:12:12.704 [DEBUG] [Thread-10556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:12:12.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:12:12.705 [DEBUG] [Thread-10556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:12:12.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:12:12.765 [DEBUG] [Thread-10556] [transport.py] [_log()] userauth is OK
2025-12-25T11:12:12.765 [DEBUG] [Thread-10556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:12:12.765 [DEBUG] [Thread-10556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:12:12.765 [DEBUG] [Thread-10556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:12:12.765 [DEBUG] [Thread-10556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:12:12.784 [INFO] [Thread-10556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:12:12.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:12:12.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:12:13.631 [DEBUG] [Thread-10556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:12:13.632 [DEBUG] [Thread-10556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:12:13.679 [DEBUG] [Thread-10556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:12:13.679 [DEBUG] [Thread-10556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:12:13.688 [DEBUG] [Thread-10556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:12:13.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:12:13.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-25T11:12:13.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-25T11:12:13.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:12:13.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:12:13.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:12:13.728 [DEBUG] [Thread-10556] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:12:22.590 [DEBUG] [Thread-10558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:37.642 [DEBUG] [Thread-10559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:43.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:12:43.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:12:43.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-25T11:12:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 12, 14), 20.38, 27.0, 0.0, 23.55, 24.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:12:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:12:14
2025-12-25T11:12:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:12:44.728 [DEBUG] [Thread-10560] [transport.py] [_log()] starting thread (client mode): 0xb6b20df0
2025-12-25T11:12:44.728 [DEBUG] [Thread-10560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:12:44.749 [DEBUG] [Thread-10560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:12:44.749 [INFO] [Thread-10560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] client lang: <none>
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] server lang: <none>
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] kex follows: False
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:12:44.752 [DEBUG] [Thread-10560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:12:44.753 [DEBUG] [Thread-10560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:12:44.753 [DEBUG] [Thread-10560] [transport.py] [_log()] Compression: none
2025-12-25T11:12:44.753 [DEBUG] [Thread-10560] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:12:44.772 [DEBUG] [Thread-10560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:12:44.772 [DEBUG] [Thread-10560] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:12:44.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:12:44.773 [DEBUG] [Thread-10560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:12:44.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:12:44.775 [DEBUG] [Thread-10560] [transport.py] [_log()] userauth is OK
2025-12-25T11:12:44.775 [DEBUG] [Thread-10560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:12:44.776 [DEBUG] [Thread-10560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:12:44.776 [DEBUG] [Thread-10560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:12:44.776 [DEBUG] [Thread-10560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:12:44.800 [INFO] [Thread-10560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:12:44.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:12:45.519 [DEBUG] [Thread-10560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:12:45.519 [DEBUG] [Thread-10560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:12:45.520 [DEBUG] [Thread-10560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:12:45.559 [DEBUG] [Thread-10560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:12:45.560 [DEBUG] [Thread-10560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:12:45.562 [DEBUG] [Thread-10560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:12:45.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:12:45.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:12:45.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:12:45.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:12:45.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:12:45.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:12:45.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:12:45.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:12:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:12:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.383396 -999.00  +24.50  23.23     34   +7.90 1 2 1 1 1   888    0 18.60 55.43 ----- 23.2 23.2 286.4 28.7 31.1 -19.4 30.4 -17.9 29.5 -16.3 30.1 -17.7
2025-12-25T11:12:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:12:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:12:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.383396
2025-12-25T11:12:45.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:12:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:12:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:12:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:12:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:12:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:12:14', tmtdew=20.38, humidity=27.0, cloud=0.0, wind=23.55, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:12:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:12:45.583 [DEBUG] [Thread-10560] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:12:45.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:12:45.680 [DEBUG] [Thread-10563] [transport.py] [_log()] starting thread (client mode): 0xb6beb880
2025-12-25T11:12:45.680 [DEBUG] [Thread-10563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:12:45.698 [DEBUG] [Thread-10563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:12:45.698 [INFO] [Thread-10563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:12:45.705 [DEBUG] [Thread-10563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:12:45.705 [DEBUG] [Thread-10563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:12:45.705 [DEBUG] [Thread-10563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:12:45.705 [DEBUG] [Thread-10563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:45.705 [DEBUG] [Thread-10563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] client lang: <none>
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] server lang: <none>
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] kex follows: False
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] Compression: none
2025-12-25T11:12:45.706 [DEBUG] [Thread-10563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:12:45.765 [DEBUG] [Thread-10563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:12:45.766 [DEBUG] [Thread-10563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:12:45.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:12:45.767 [DEBUG] [Thread-10563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:12:45.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:12:45.822 [DEBUG] [Thread-10563] [transport.py] [_log()] userauth is OK
2025-12-25T11:12:45.822 [DEBUG] [Thread-10563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:12:45.822 [DEBUG] [Thread-10563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:12:45.822 [DEBUG] [Thread-10563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:12:45.822 [DEBUG] [Thread-10563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:12:45.836 [INFO] [Thread-10563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:12:45.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-25T11:12:45.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:12:46.696 [DEBUG] [Thread-10563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:12:46.696 [DEBUG] [Thread-10563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:12:46.744 [DEBUG] [Thread-10563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:12:46.744 [DEBUG] [Thread-10563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:12:46.753 [DEBUG] [Thread-10563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:12:46.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:12:46.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-25T11:12:46.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-25T11:12:46.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:12:46.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:12:46.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:12:46.790 [DEBUG] [Thread-10563] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:12:52.675 [DEBUG] [Thread-10565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:12:57.862 [DEBUG] [Thread-10566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:07.727 [DEBUG] [Thread-10567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:08.819 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:08.820 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:16.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:13:16.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:13:16.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-25T11:13:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 12, 46), 19.78, 27.98, 0.0, 23.24, 24.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:13:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:12:46
2025-12-25T11:13:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:13:17.841 [DEBUG] [Thread-10568] [transport.py] [_log()] starting thread (client mode): 0xb6b2b8b0
2025-12-25T11:13:17.841 [DEBUG] [Thread-10568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:13:17.860 [DEBUG] [Thread-10568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:13:17.860 [INFO] [Thread-10568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:13:17.863 [DEBUG] [Thread-10568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:13:17.863 [DEBUG] [Thread-10568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:13:17.863 [DEBUG] [Thread-10568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:13:17.863 [DEBUG] [Thread-10568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] client lang: <none>
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] server lang: <none>
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] kex follows: False
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] Compression: none
2025-12-25T11:13:17.864 [DEBUG] [Thread-10568] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:13:17.879 [DEBUG] [Thread-10568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:13:17.879 [DEBUG] [Thread-10568] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:13:17.879 [DEBUG] [Thread-10568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:13:17.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:13:17.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:13:17.880 [DEBUG] [Thread-10568] [transport.py] [_log()] userauth is OK
2025-12-25T11:13:17.880 [DEBUG] [Thread-10568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:13:17.880 [DEBUG] [Thread-10568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:13:17.880 [DEBUG] [Thread-10568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:13:17.880 [DEBUG] [Thread-10568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:13:17.900 [INFO] [Thread-10568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:13:17.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:13:18.524 [DEBUG] [Thread-10568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:13:18.524 [DEBUG] [Thread-10568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:13:18.524 [DEBUG] [Thread-10568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:13:18.565 [DEBUG] [Thread-10568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:13:18.565 [DEBUG] [Thread-10568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:13:18.568 [DEBUG] [Thread-10568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:13:18.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:13:18.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:13:18.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:13:18.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:13:18.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:13:18.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:13:18.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.383743 -999.00  +24.40  16.41     34   +7.60 1 1 1 1 1   888    0 18.62 47.15 ----- 16.4 16.4 316.0 21.5 30.7 -25.2 29.9 -24.2 28.9 -23.9 29.5 -22.8
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.383743
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:13:18.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:12:46', tmtdew=19.78, humidity=27.98, cloud=0.0, wind=23.24, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:12:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:13:18.586 [DEBUG] [Thread-10568] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:13:18.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-25T11:13:18.670 [DEBUG] [Thread-10571] [transport.py] [_log()] starting thread (client mode): 0xb6b231c0
2025-12-25T11:13:18.670 [DEBUG] [Thread-10571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:13:18.684 [DEBUG] [Thread-10571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:13:18.684 [INFO] [Thread-10571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:13:18.691 [DEBUG] [Thread-10571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:13:18.691 [DEBUG] [Thread-10571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:13:18.691 [DEBUG] [Thread-10571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] client lang: <none>
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] server lang: <none>
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] kex follows: False
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] Compression: none
2025-12-25T11:13:18.692 [DEBUG] [Thread-10571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:13:18.754 [DEBUG] [Thread-10571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:13:18.754 [DEBUG] [Thread-10571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:13:18.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:13:18.754 [DEBUG] [Thread-10571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:13:18.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:13:18.811 [DEBUG] [Thread-10571] [transport.py] [_log()] userauth is OK
2025-12-25T11:13:18.811 [DEBUG] [Thread-10571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:13:18.811 [DEBUG] [Thread-10571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:13:18.811 [DEBUG] [Thread-10571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:13:18.811 [DEBUG] [Thread-10571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:13:18.826 [INFO] [Thread-10571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:13:18.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-25T11:13:18.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:13:19.639 [DEBUG] [Thread-10571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:13:19.639 [DEBUG] [Thread-10571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:13:19.686 [DEBUG] [Thread-10571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:13:19.686 [DEBUG] [Thread-10571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:13:19.694 [DEBUG] [Thread-10571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:13:19.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:13:19.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:13:19.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:13:19.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:13:19.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:13:19.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:13:19.725 [DEBUG] [Thread-10571] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:13:22.759 [DEBUG] [Thread-10573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:37.820 [DEBUG] [Thread-10574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:13:49.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:13:49.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-25T11:13:50.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 13, 19), 19.83, 27.95, 0.0, 22.18, 24.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:13:50.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:13:19
2025-12-25T11:13:50.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:13:50.722 [DEBUG] [Thread-10575] [transport.py] [_log()] starting thread (client mode): 0xb6b52bf0
2025-12-25T11:13:50.722 [DEBUG] [Thread-10575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:13:50.742 [DEBUG] [Thread-10575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:13:50.742 [INFO] [Thread-10575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:13:50.745 [DEBUG] [Thread-10575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] client lang: <none>
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] server lang: <none>
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] kex follows: False
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] Compression: none
2025-12-25T11:13:50.746 [DEBUG] [Thread-10575] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:13:50.766 [DEBUG] [Thread-10575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:13:50.766 [DEBUG] [Thread-10575] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:13:50.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:13:50.767 [DEBUG] [Thread-10575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:13:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:13:50.769 [DEBUG] [Thread-10575] [transport.py] [_log()] userauth is OK
2025-12-25T11:13:50.770 [DEBUG] [Thread-10575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:13:50.770 [DEBUG] [Thread-10575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:13:50.770 [DEBUG] [Thread-10575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:13:50.770 [DEBUG] [Thread-10575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:13:50.807 [INFO] [Thread-10575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:13:50.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:13:51.558 [DEBUG] [Thread-10575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:13:51.558 [DEBUG] [Thread-10575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:13:51.559 [DEBUG] [Thread-10575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:13:51.599 [DEBUG] [Thread-10575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:13:51.600 [DEBUG] [Thread-10575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:13:51.605 [DEBUG] [Thread-10575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:13:51.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:13:51.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:13:51.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:13:51.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:13:51.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:13:51.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:13:51.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:13:51.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:13:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:13:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.384090 -999.00  +24.40  17.83     33   +7.40 1 1 1 1 1   888    0 18.51 41.25 ----- 17.8 17.8 327.7 26.4 30.2 -25.1 29.6 -24.9 28.6 -23.2 29.2 -23.6
2025-12-25T11:13:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:13:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:13:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.384090
2025-12-25T11:13:51.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:13:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:13:51.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:13:51.632 [DEBUG] [Thread-10575] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:13:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:13:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:13:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:13:19', tmtdew=19.83, humidity=27.95, cloud=0.0, wind=22.18, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:13:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:13:51.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-25T11:13:51.730 [DEBUG] [Thread-10578] [transport.py] [_log()] starting thread (client mode): 0xb6bb8dc0
2025-12-25T11:13:51.730 [DEBUG] [Thread-10578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:13:51.744 [DEBUG] [Thread-10578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:13:51.744 [INFO] [Thread-10578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:51.752 [DEBUG] [Thread-10578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] client lang: <none>
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] server lang: <none>
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] kex follows: False
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:13:51.753 [DEBUG] [Thread-10578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:13:51.754 [DEBUG] [Thread-10578] [transport.py] [_log()] Compression: none
2025-12-25T11:13:51.754 [DEBUG] [Thread-10578] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:13:51.812 [DEBUG] [Thread-10578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:13:51.813 [DEBUG] [Thread-10578] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:13:51.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:13:51.813 [DEBUG] [Thread-10578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:13:51.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:13:51.870 [DEBUG] [Thread-10578] [transport.py] [_log()] userauth is OK
2025-12-25T11:13:51.870 [DEBUG] [Thread-10578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:13:51.870 [DEBUG] [Thread-10578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:13:51.870 [DEBUG] [Thread-10578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:13:51.870 [DEBUG] [Thread-10578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:13:51.885 [INFO] [Thread-10578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:13:51.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-25T11:13:51.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:13:52.723 [DEBUG] [Thread-10578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:13:52.723 [DEBUG] [Thread-10578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:13:52.772 [DEBUG] [Thread-10578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:13:52.772 [DEBUG] [Thread-10578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:13:52.780 [DEBUG] [Thread-10578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:13:52.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:13:52.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-25T11:13:52.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-25T11:13:52.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:13:52.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:13:52.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:13:52.812 [DEBUG] [Thread-10578] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:13:52.856 [DEBUG] [Thread-10580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:13:57.908 [DEBUG] [Thread-10581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:07.902 [DEBUG] [Thread-10582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:08.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:08.959 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:14:22.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:14:22.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:14:22.940 [DEBUG] [Thread-10583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:23.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 13, 51), 19.91, 27.45, 0.0, 20.73, 24.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:14:23.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:13:51
2025-12-25T11:14:23.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:14:23.803 [DEBUG] [Thread-10584] [transport.py] [_log()] starting thread (client mode): 0xb6bbbd60
2025-12-25T11:14:23.803 [DEBUG] [Thread-10584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:14:23.825 [DEBUG] [Thread-10584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:14:23.825 [INFO] [Thread-10584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] client lang: <none>
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] server lang: <none>
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] kex follows: False
2025-12-25T11:14:23.828 [DEBUG] [Thread-10584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:14:23.829 [DEBUG] [Thread-10584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:14:23.829 [DEBUG] [Thread-10584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:14:23.829 [DEBUG] [Thread-10584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:14:23.829 [DEBUG] [Thread-10584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:14:23.829 [DEBUG] [Thread-10584] [transport.py] [_log()] Compression: none
2025-12-25T11:14:23.829 [DEBUG] [Thread-10584] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:14:23.846 [DEBUG] [Thread-10584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:14:23.846 [DEBUG] [Thread-10584] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:14:23.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:14:23.847 [DEBUG] [Thread-10584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:14:23.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:14:23.850 [DEBUG] [Thread-10584] [transport.py] [_log()] userauth is OK
2025-12-25T11:14:23.850 [DEBUG] [Thread-10584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:14:23.850 [DEBUG] [Thread-10584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:14:23.850 [DEBUG] [Thread-10584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:14:23.850 [DEBUG] [Thread-10584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:14:23.871 [INFO] [Thread-10584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:14:23.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:14:24.497 [DEBUG] [Thread-10584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:14:24.497 [DEBUG] [Thread-10584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:14:24.498 [DEBUG] [Thread-10584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:14:24.538 [DEBUG] [Thread-10584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:14:24.538 [DEBUG] [Thread-10584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:14:24.541 [DEBUG] [Thread-10584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:14:24.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:14:24.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:14:24.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:14:24.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:14:24.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:14:24.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:14:24.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.384438 -999.00  +24.20  25.81     32   +6.50 1 1 1 1 1   888    0 18.32 36.12 ----- 25.8 25.8 325.2 32.7 29.8 -26.1 29.1 -24.7 28.4 -22.7 28.8 -24.0
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.384438
2025-12-25T11:14:24.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:14:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:14:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:14:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:14:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:14:24.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:13:51', tmtdew=19.91, humidity=27.45, cloud=0.0, wind=20.73, temperature=24.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:13:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:14:24.560 [DEBUG] [Thread-10584] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:14:24.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-25T11:14:24.646 [DEBUG] [Thread-10587] [transport.py] [_log()] starting thread (client mode): 0xb6be9fc0
2025-12-25T11:14:24.646 [DEBUG] [Thread-10587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:14:24.661 [DEBUG] [Thread-10587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:14:24.661 [INFO] [Thread-10587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:14:24.668 [DEBUG] [Thread-10587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:14:24.668 [DEBUG] [Thread-10587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:14:24.668 [DEBUG] [Thread-10587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] client lang: <none>
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] server lang: <none>
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] kex follows: False
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] Compression: none
2025-12-25T11:14:24.669 [DEBUG] [Thread-10587] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:14:24.731 [DEBUG] [Thread-10587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:14:24.731 [DEBUG] [Thread-10587] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:14:24.731 [DEBUG] [Thread-10587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:14:24.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:14:24.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:14:24.796 [DEBUG] [Thread-10587] [transport.py] [_log()] userauth is OK
2025-12-25T11:14:24.796 [DEBUG] [Thread-10587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:14:24.796 [DEBUG] [Thread-10587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:14:24.796 [DEBUG] [Thread-10587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:14:24.796 [DEBUG] [Thread-10587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:14:24.810 [INFO] [Thread-10587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:14:24.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-25T11:14:24.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:14:25.642 [DEBUG] [Thread-10587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:14:25.642 [DEBUG] [Thread-10587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:14:25.689 [DEBUG] [Thread-10587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:14:25.689 [DEBUG] [Thread-10587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:14:25.697 [DEBUG] [Thread-10587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:14:25.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:14:25.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-25T11:14:25.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:14:25.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:14:25.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:14:25.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:14:25.729 [DEBUG] [Thread-10587] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:14:37.974 [DEBUG] [Thread-10589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:53.027 [DEBUG] [Thread-10590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:14:55.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:14:55.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:14:56.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 14, 23), 19.81, 27.6, 0.0, 19.44, 23.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:14:56.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:14:23
2025-12-25T11:14:56.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:14:56.785 [DEBUG] [Thread-10591] [transport.py] [_log()] starting thread (client mode): 0xb6be2a40
2025-12-25T11:14:56.785 [DEBUG] [Thread-10591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:14:56.805 [DEBUG] [Thread-10591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:14:56.805 [INFO] [Thread-10591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] client lang: <none>
2025-12-25T11:14:56.808 [DEBUG] [Thread-10591] [transport.py] [_log()] server lang: <none>
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] kex follows: False
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] Compression: none
2025-12-25T11:14:56.809 [DEBUG] [Thread-10591] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:14:56.816 [DEBUG] [Thread-10591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:14:56.817 [DEBUG] [Thread-10591] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:14:56.817 [DEBUG] [Thread-10591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:14:56.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:14:56.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:14:56.818 [DEBUG] [Thread-10591] [transport.py] [_log()] userauth is OK
2025-12-25T11:14:56.818 [DEBUG] [Thread-10591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:14:56.818 [DEBUG] [Thread-10591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:14:56.818 [DEBUG] [Thread-10591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:14:56.818 [DEBUG] [Thread-10591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:14:56.831 [INFO] [Thread-10591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:14:56.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:14:57.577 [DEBUG] [Thread-10591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:14:57.578 [DEBUG] [Thread-10591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:14:57.578 [DEBUG] [Thread-10591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:14:57.619 [DEBUG] [Thread-10591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:14:57.619 [DEBUG] [Thread-10591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:14:57.620 [DEBUG] [Thread-10591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:14:57.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:14:57.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:14:57.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:14:57.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:14:57.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:14:57.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:14:57.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:14:57.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:14:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:14:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.384785 -999.00  +24.00  22.64     31   +6.20 1 1 1 1 1   888    0 18.06 32.10 ----- 22.6 22.6 325.2 31.3 29.4 -25.6 28.9 -24.9 28.1 -25.4 28.5 -23.7
2025-12-25T11:14:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:14:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:14:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.384785
2025-12-25T11:14:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:14:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:14:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:14:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:14:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:14:57.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:14:23', tmtdew=19.81, humidity=27.6, cloud=0.0, wind=19.44, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:14:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:14:57.638 [DEBUG] [Thread-10591] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:14:57.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:14:57.723 [DEBUG] [Thread-10594] [transport.py] [_log()] starting thread (client mode): 0xb6b29b70
2025-12-25T11:14:57.723 [DEBUG] [Thread-10594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:14:57.740 [DEBUG] [Thread-10594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:14:57.740 [INFO] [Thread-10594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:14:57.747 [DEBUG] [Thread-10594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] client lang: <none>
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] server lang: <none>
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] kex follows: False
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] Compression: none
2025-12-25T11:14:57.748 [DEBUG] [Thread-10594] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:14:57.805 [DEBUG] [Thread-10594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:14:57.805 [DEBUG] [Thread-10594] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:14:57.805 [DEBUG] [Thread-10594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:14:57.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:14:57.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:14:57.862 [DEBUG] [Thread-10594] [transport.py] [_log()] userauth is OK
2025-12-25T11:14:57.862 [DEBUG] [Thread-10594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:14:57.862 [DEBUG] [Thread-10594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:14:57.862 [DEBUG] [Thread-10594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:14:57.862 [DEBUG] [Thread-10594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:14:57.878 [INFO] [Thread-10594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:14:57.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-25T11:14:57.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:14:57.968 [DEBUG] [Thread-10596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:14:58.708 [DEBUG] [Thread-10594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:14:58.708 [DEBUG] [Thread-10594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:14:58.756 [DEBUG] [Thread-10594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:14:58.756 [DEBUG] [Thread-10594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:14:58.766 [DEBUG] [Thread-10594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:14:58.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:14:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:14:58.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-25T11:14:58.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:14:58.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:14:58.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:14:58.803 [DEBUG] [Thread-10594] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:15:08.062 [DEBUG] [Thread-10597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:15:09.098 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:15:09.099 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:15:23.099 [DEBUG] [Thread-10598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:15:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:15:28.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:15:28.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-25T11:15:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 14, 55), 20.18, 27.05, 0.0, 25.85, 23.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:15:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:14:55
2025-12-25T11:15:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:15:29.872 [DEBUG] [Thread-10599] [transport.py] [_log()] starting thread (client mode): 0xb6b2a9b0
2025-12-25T11:15:29.872 [DEBUG] [Thread-10599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:15:29.893 [DEBUG] [Thread-10599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:15:29.893 [INFO] [Thread-10599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:15:29.896 [DEBUG] [Thread-10599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] client lang: <none>
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] server lang: <none>
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] kex follows: False
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] Compression: none
2025-12-25T11:15:29.897 [DEBUG] [Thread-10599] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:15:29.912 [DEBUG] [Thread-10599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:15:29.912 [DEBUG] [Thread-10599] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:15:29.913 [DEBUG] [Thread-10599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:15:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:15:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:15:29.913 [DEBUG] [Thread-10599] [transport.py] [_log()] userauth is OK
2025-12-25T11:15:29.914 [DEBUG] [Thread-10599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:15:29.914 [DEBUG] [Thread-10599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:15:29.914 [DEBUG] [Thread-10599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:15:29.914 [DEBUG] [Thread-10599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:15:29.930 [INFO] [Thread-10599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:15:29.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:15:30.583 [DEBUG] [Thread-10599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:15:30.583 [DEBUG] [Thread-10599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:15:30.583 [DEBUG] [Thread-10599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:15:30.626 [DEBUG] [Thread-10599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:15:30.626 [DEBUG] [Thread-10599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:15:30.629 [DEBUG] [Thread-10599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:15:30.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:15:30.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:15:30.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:15:30.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:15:30.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:15:30.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:15:30.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:15:30.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:15:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:15:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.385132 -999.00  +23.60  26.42     32   +6.10 1 1 1 1 1   888    0 18.03 24.56 ----- 26.4 26.4 314.4 34.6 29.0 -25.1 28.6 -25.6 27.9 -23.8 28.2 -24.2
2025-12-25T11:15:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:15:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:15:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.385132
2025-12-25T11:15:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:15:30.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:15:30.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:15:30.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:15:30.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:15:30.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:14:55', tmtdew=20.18, humidity=27.05, cloud=0.0, wind=25.85, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:14:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:15:30.655 [DEBUG] [Thread-10599] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:15:30.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-25T11:15:30.754 [DEBUG] [Thread-10602] [transport.py] [_log()] starting thread (client mode): 0xb6b282b0
2025-12-25T11:15:30.754 [DEBUG] [Thread-10602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:15:30.769 [DEBUG] [Thread-10602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:15:30.769 [INFO] [Thread-10602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:15:30.776 [DEBUG] [Thread-10602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] client lang: <none>
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] server lang: <none>
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] kex follows: False
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:15:30.777 [DEBUG] [Thread-10602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:15:30.778 [DEBUG] [Thread-10602] [transport.py] [_log()] Compression: none
2025-12-25T11:15:30.778 [DEBUG] [Thread-10602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:15:30.839 [DEBUG] [Thread-10602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:15:30.840 [DEBUG] [Thread-10602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:15:30.840 [DEBUG] [Thread-10602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:15:30.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:15:30.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:15:30.900 [DEBUG] [Thread-10602] [transport.py] [_log()] userauth is OK
2025-12-25T11:15:30.900 [DEBUG] [Thread-10602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:15:30.900 [DEBUG] [Thread-10602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:15:30.900 [DEBUG] [Thread-10602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:15:30.900 [DEBUG] [Thread-10602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:15:30.919 [INFO] [Thread-10602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:15:30.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:15:30.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:15:31.759 [DEBUG] [Thread-10602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:15:31.760 [DEBUG] [Thread-10602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:15:31.808 [DEBUG] [Thread-10602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:15:31.808 [DEBUG] [Thread-10602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:15:31.817 [DEBUG] [Thread-10602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:15:31.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:15:31.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-25T11:15:31.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-25T11:15:31.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:15:31.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:15:31.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:15:31.850 [DEBUG] [Thread-10602] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:15:38.133 [DEBUG] [Thread-10604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:15:53.181 [DEBUG] [Thread-10605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:15:58.030 [DEBUG] [Thread-10606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:16:01.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:16:01.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-25T11:16:02.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 15, 27), 20.83, 25.94, 0.0, 24.54, 23.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:16:02.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:15:27
2025-12-25T11:16:02.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:16:02.867 [DEBUG] [Thread-10607] [transport.py] [_log()] starting thread (client mode): 0xb6b2ad70
2025-12-25T11:16:02.867 [DEBUG] [Thread-10607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:16:02.877 [DEBUG] [Thread-10607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:16:02.877 [INFO] [Thread-10607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:16:02.880 [DEBUG] [Thread-10607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:16:02.880 [DEBUG] [Thread-10607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] client lang: <none>
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] server lang: <none>
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] kex follows: False
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] Compression: none
2025-12-25T11:16:02.881 [DEBUG] [Thread-10607] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:16:02.900 [DEBUG] [Thread-10607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:16:02.901 [DEBUG] [Thread-10607] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:16:02.901 [DEBUG] [Thread-10607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:16:02.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:16:02.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:16:02.903 [DEBUG] [Thread-10607] [transport.py] [_log()] userauth is OK
2025-12-25T11:16:02.903 [DEBUG] [Thread-10607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:16:02.903 [DEBUG] [Thread-10607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:16:02.903 [DEBUG] [Thread-10607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:16:02.903 [DEBUG] [Thread-10607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:16:02.924 [INFO] [Thread-10607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:16:02.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:16:03.691 [DEBUG] [Thread-10607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:16:03.691 [DEBUG] [Thread-10607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:16:03.691 [DEBUG] [Thread-10607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:16:03.732 [DEBUG] [Thread-10607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:16:03.732 [DEBUG] [Thread-10607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:16:03.734 [DEBUG] [Thread-10607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:16:03.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:16:03.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:16:03.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:16:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:16:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:16:03.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:16:03.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:16:03.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:16:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:16:03.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.385826 -999.00  +23.60  28.66     31   +5.90 1 2 1 1 1   888    0 17.69 6.20 ----- 28.7 28.7 305.6 32.1 29.0 -18.7 28.6 -17.2 28.1 -16.8 28.6 -16.4
2025-12-25T11:16:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:16:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:16:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.385826
2025-12-25T11:16:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:16:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:16:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:16:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:16:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:16:03.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:15:27', tmtdew=20.83, humidity=25.94, cloud=0.0, wind=24.54, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:15:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:16:03.756 [DEBUG] [Thread-10607] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:16:03.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-25T11:16:03.849 [DEBUG] [Thread-10610] [transport.py] [_log()] starting thread (client mode): 0xb6be1c30
2025-12-25T11:16:03.850 [DEBUG] [Thread-10610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:16:03.864 [DEBUG] [Thread-10610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:16:03.864 [INFO] [Thread-10610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] client lang: <none>
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] server lang: <none>
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] kex follows: False
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:16:03.872 [DEBUG] [Thread-10610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:16:03.873 [DEBUG] [Thread-10610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:16:03.873 [DEBUG] [Thread-10610] [transport.py] [_log()] Compression: none
2025-12-25T11:16:03.873 [DEBUG] [Thread-10610] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:16:03.930 [DEBUG] [Thread-10610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:16:03.931 [DEBUG] [Thread-10610] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:16:03.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:16:03.932 [DEBUG] [Thread-10610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:16:03.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:16:03.990 [DEBUG] [Thread-10610] [transport.py] [_log()] userauth is OK
2025-12-25T11:16:03.990 [DEBUG] [Thread-10610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:16:03.990 [DEBUG] [Thread-10610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:16:03.990 [DEBUG] [Thread-10610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:16:03.991 [DEBUG] [Thread-10610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:16:04.010 [INFO] [Thread-10610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:16:04.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-25T11:16:04.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:16:04.845 [DEBUG] [Thread-10610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:16:04.845 [DEBUG] [Thread-10610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:16:04.893 [DEBUG] [Thread-10610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:16:04.893 [DEBUG] [Thread-10610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:16:04.902 [DEBUG] [Thread-10610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:16:04.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:16:04.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-25T11:16:04.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:16:04.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:16:04.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:16:04.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:16:04.939 [DEBUG] [Thread-10610] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:16:08.214 [DEBUG] [Thread-10612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:09.240 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:09.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:23.266 [DEBUG] [Thread-10613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:34.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:16:34.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:16:34.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-25T11:16:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 16, 31), 20.68, 26.32, 0.0, 21.09, 24.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:16:35.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:16:31
2025-12-25T11:16:35.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:16:35.929 [DEBUG] [Thread-10614] [transport.py] [_log()] starting thread (client mode): 0xb6be2aa0
2025-12-25T11:16:35.930 [DEBUG] [Thread-10614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:16:35.949 [DEBUG] [Thread-10614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:16:35.949 [INFO] [Thread-10614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] client lang: <none>
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] server lang: <none>
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] kex follows: False
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] Compression: none
2025-12-25T11:16:35.952 [DEBUG] [Thread-10614] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:16:35.968 [DEBUG] [Thread-10614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:16:35.969 [DEBUG] [Thread-10614] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:16:35.969 [DEBUG] [Thread-10614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:16:35.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:16:35.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:16:35.971 [DEBUG] [Thread-10614] [transport.py] [_log()] userauth is OK
2025-12-25T11:16:35.971 [DEBUG] [Thread-10614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:16:35.971 [DEBUG] [Thread-10614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:16:35.971 [DEBUG] [Thread-10614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:16:35.972 [DEBUG] [Thread-10614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:16:35.989 [INFO] [Thread-10614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:16:35.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:16:36.613 [DEBUG] [Thread-10614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:16:36.613 [DEBUG] [Thread-10614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:16:36.614 [DEBUG] [Thread-10614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:16:36.654 [DEBUG] [Thread-10614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:16:36.654 [DEBUG] [Thread-10614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:16:36.658 [DEBUG] [Thread-10614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:16:36.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:16:36.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:16:36.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:16:36.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:16:36.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:16:36.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:16:36.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:16:36.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:16:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:16:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.386174 -999.00  +24.00  35.60     32   +6.30 1 2 2 1 1   888    0 17.23 -2.52 ----- 35.6 35.6 310.0 37.9 29.3 -18.0 28.9 -18.2 28.2 -17.5 28.7 -17.2
2025-12-25T11:16:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:16:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:16:36.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.386174
2025-12-25T11:16:36.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:16:36.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:16:36.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:16:36.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:16:36.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:16:36.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:16:31', tmtdew=20.68, humidity=26.32, cloud=0.0, wind=21.09, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:16:05.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:16:36.683 [DEBUG] [Thread-10614] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:16:36.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-25T11:16:36.780 [DEBUG] [Thread-10617] [transport.py] [_log()] starting thread (client mode): 0xb6be2e90
2025-12-25T11:16:36.780 [DEBUG] [Thread-10617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:16:36.796 [DEBUG] [Thread-10617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:16:36.796 [INFO] [Thread-10617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] client lang: <none>
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] server lang: <none>
2025-12-25T11:16:36.804 [DEBUG] [Thread-10617] [transport.py] [_log()] kex follows: False
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] Compression: none
2025-12-25T11:16:36.805 [DEBUG] [Thread-10617] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:16:36.865 [DEBUG] [Thread-10617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:16:36.865 [DEBUG] [Thread-10617] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:16:36.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:16:36.867 [DEBUG] [Thread-10617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:16:36.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:16:36.924 [DEBUG] [Thread-10617] [transport.py] [_log()] userauth is OK
2025-12-25T11:16:36.924 [DEBUG] [Thread-10617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:16:36.925 [DEBUG] [Thread-10617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:16:36.925 [DEBUG] [Thread-10617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:16:36.925 [DEBUG] [Thread-10617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:16:36.943 [INFO] [Thread-10617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:16:36.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-25T11:16:36.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:16:37.772 [DEBUG] [Thread-10617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:16:37.772 [DEBUG] [Thread-10617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:16:37.820 [DEBUG] [Thread-10617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:16:37.820 [DEBUG] [Thread-10617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:16:37.829 [DEBUG] [Thread-10617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:16:37.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:16:37.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')
2025-12-25T11:16:37.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-25T11:16:37.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:16:37.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:16:37.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:16:37.867 [DEBUG] [Thread-10617] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:16:38.299 [DEBUG] [Thread-10619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:53.353 [DEBUG] [Thread-10620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:16:58.101 [DEBUG] [Thread-10621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:17:07.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:17:07.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-25T11:17:08.385 [DEBUG] [Thread-10622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 17, 3), 20.29, 27.01, 0.0, 20.82, 24.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:17:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:17:03
2025-12-25T11:17:08.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:17:08.918 [DEBUG] [Thread-10623] [transport.py] [_log()] starting thread (client mode): 0xb6be1270
2025-12-25T11:17:08.918 [DEBUG] [Thread-10623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:17:08.937 [DEBUG] [Thread-10623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:17:08.937 [INFO] [Thread-10623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] client lang: <none>
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] server lang: <none>
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] kex follows: False
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] Compression: none
2025-12-25T11:17:08.941 [DEBUG] [Thread-10623] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:17:08.958 [DEBUG] [Thread-10623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:17:08.958 [DEBUG] [Thread-10623] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:17:08.958 [DEBUG] [Thread-10623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:17:08.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:17:08.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:17:08.959 [DEBUG] [Thread-10623] [transport.py] [_log()] userauth is OK
2025-12-25T11:17:08.959 [DEBUG] [Thread-10623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:17:08.959 [DEBUG] [Thread-10623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:17:08.960 [DEBUG] [Thread-10623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:17:08.960 [DEBUG] [Thread-10623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:17:08.970 [INFO] [Thread-10623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:17:08.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:17:09.378 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:09.379 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:09.723 [DEBUG] [Thread-10623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:17:09.723 [DEBUG] [Thread-10623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:17:09.724 [DEBUG] [Thread-10623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:17:09.764 [DEBUG] [Thread-10623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:17:09.764 [DEBUG] [Thread-10623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:17:09.766 [DEBUG] [Thread-10623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:17:09.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:17:09.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:17:09.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:17:09.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:17:09.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:17:09.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:17:09.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.386521 -999.00  +23.90  33.04     32   +6.60 1 2 2 1 1   888    0 17.38 -11.12 ----- 33.0 33.0 289.6 34.9 29.1 -22.9 28.7 -23.3 27.9 -22.3 28.4 -22.1
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.386521
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:17:09.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:17:03', tmtdew=20.29, humidity=27.01, cloud=0.0, wind=20.82, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:16:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:17:09.783 [DEBUG] [Thread-10623] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:17:09.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-25T11:17:09.867 [DEBUG] [Thread-10626] [transport.py] [_log()] starting thread (client mode): 0xb6be1000
2025-12-25T11:17:09.867 [DEBUG] [Thread-10626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:17:09.882 [DEBUG] [Thread-10626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:17:09.882 [INFO] [Thread-10626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] client lang: <none>
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] server lang: <none>
2025-12-25T11:17:09.889 [DEBUG] [Thread-10626] [transport.py] [_log()] kex follows: False
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] Compression: none
2025-12-25T11:17:09.890 [DEBUG] [Thread-10626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:17:09.948 [DEBUG] [Thread-10626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:17:09.948 [DEBUG] [Thread-10626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:17:09.948 [DEBUG] [Thread-10626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:17:09.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:17:09.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:17:10.006 [DEBUG] [Thread-10626] [transport.py] [_log()] userauth is OK
2025-12-25T11:17:10.007 [DEBUG] [Thread-10626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:17:10.007 [DEBUG] [Thread-10626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:17:10.007 [DEBUG] [Thread-10626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:17:10.007 [DEBUG] [Thread-10626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:17:10.020 [INFO] [Thread-10626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:17:10.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-25T11:17:10.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:17:10.834 [DEBUG] [Thread-10626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:17:10.834 [DEBUG] [Thread-10626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:17:10.882 [DEBUG] [Thread-10626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:17:10.882 [DEBUG] [Thread-10626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:17:10.891 [DEBUG] [Thread-10626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:17:10.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:17: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-25T11:17: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-25T11:17:10.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:17:10.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:17:10.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:17:10.922 [DEBUG] [Thread-10626] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:17:23.414 [DEBUG] [Thread-10628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:38.470 [DEBUG] [Thread-10629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:17:40.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:17: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-25T11:17:41.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 17, 35), 19.92, 27.61, 0.0, 20.91, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:17:41.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:17:35
2025-12-25T11:17:41.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:17:41.908 [DEBUG] [Thread-10630] [transport.py] [_log()] starting thread (client mode): 0xb6be3790
2025-12-25T11:17:41.908 [DEBUG] [Thread-10630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:17:41.928 [DEBUG] [Thread-10630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:17:41.928 [INFO] [Thread-10630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] client lang: <none>
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] server lang: <none>
2025-12-25T11:17:41.932 [DEBUG] [Thread-10630] [transport.py] [_log()] kex follows: False
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] Compression: none
2025-12-25T11:17:41.933 [DEBUG] [Thread-10630] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:17:41.950 [DEBUG] [Thread-10630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:17:41.951 [DEBUG] [Thread-10630] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:17:41.951 [DEBUG] [Thread-10630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:17:41.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:17:41.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:17:41.953 [DEBUG] [Thread-10630] [transport.py] [_log()] userauth is OK
2025-12-25T11:17:41.954 [DEBUG] [Thread-10630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:17:41.954 [DEBUG] [Thread-10630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:17:41.954 [DEBUG] [Thread-10630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:17:41.954 [DEBUG] [Thread-10630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:17:41.972 [INFO] [Thread-10630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:17:41.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:17:42.600 [DEBUG] [Thread-10630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:17:42.601 [DEBUG] [Thread-10630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:17:42.601 [DEBUG] [Thread-10630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:17:42.642 [DEBUG] [Thread-10630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:17:42.642 [DEBUG] [Thread-10630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:17:42.646 [DEBUG] [Thread-10630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:17:42.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:17:42.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:17:42.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:17:42.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:17:42.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:17:42.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:17:42.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:17:42.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:17:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:17:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.386868 -999.00  +23.70  19.95     33   +6.60 1 1 1 1 1   888    0 16.35 -22.83 ----- 19.9 19.9 292.4 33.9 28.8 -25.0 28.4 -23.7 27.6 -23.2 28.1 -20.2
2025-12-25T11:17:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:17:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:17:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.386868
2025-12-25T11:17:42.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:17:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:17:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:17:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:17:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:17:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:17:35', tmtdew=19.92, humidity=27.61, cloud=0.0, wind=20.91, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:17:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:17:42.673 [DEBUG] [Thread-10630] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:17:42.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:17:42.766 [DEBUG] [Thread-10633] [transport.py] [_log()] starting thread (client mode): 0xb6be2890
2025-12-25T11:17:42.766 [DEBUG] [Thread-10633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:17:42.781 [DEBUG] [Thread-10633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:17:42.781 [INFO] [Thread-10633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] client lang: <none>
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] server lang: <none>
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] kex follows: False
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:17:42.789 [DEBUG] [Thread-10633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:17:42.790 [DEBUG] [Thread-10633] [transport.py] [_log()] Compression: none
2025-12-25T11:17:42.790 [DEBUG] [Thread-10633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:17:42.852 [DEBUG] [Thread-10633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:17:42.852 [DEBUG] [Thread-10633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:17:42.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:17:42.853 [DEBUG] [Thread-10633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:17:42.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:17:42.907 [DEBUG] [Thread-10633] [transport.py] [_log()] userauth is OK
2025-12-25T11:17:42.907 [DEBUG] [Thread-10633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:17:42.907 [DEBUG] [Thread-10633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:17:42.907 [DEBUG] [Thread-10633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:17:42.907 [DEBUG] [Thread-10633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:17:42.921 [INFO] [Thread-10633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:17:42.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-25T11:17:42.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:17:43.812 [DEBUG] [Thread-10633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:17:43.812 [DEBUG] [Thread-10633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:17:43.861 [DEBUG] [Thread-10633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:17:43.862 [DEBUG] [Thread-10633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:17:43.873 [DEBUG] [Thread-10633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:17:43.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:17:43.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-25T11:17:43.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:17:43.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:17:43.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:17:43.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:17:43.907 [DEBUG] [Thread-10633] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:17:53.505 [DEBUG] [Thread-10635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:17:58.157 [DEBUG] [Thread-10636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:08.552 [DEBUG] [Thread-10637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:09.519 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:09.520 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:13.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:18:13.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:18:13.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:18:14.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 18, 7), 19.99, 27.49, 0.0, 19.29, 24.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:18:14.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:18:07
2025-12-25T11:18:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:18:14.906 [DEBUG] [Thread-10638] [transport.py] [_log()] starting thread (client mode): 0xb6be3b80
2025-12-25T11:18:14.906 [DEBUG] [Thread-10638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:18:14.926 [DEBUG] [Thread-10638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:18:14.926 [INFO] [Thread-10638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:18:14.930 [DEBUG] [Thread-10638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] client lang: <none>
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] server lang: <none>
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] kex follows: False
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] Compression: none
2025-12-25T11:18:14.931 [DEBUG] [Thread-10638] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:18:14.949 [DEBUG] [Thread-10638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:18:14.950 [DEBUG] [Thread-10638] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:18:14.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:18:14.951 [DEBUG] [Thread-10638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:18:14.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:18:14.954 [DEBUG] [Thread-10638] [transport.py] [_log()] userauth is OK
2025-12-25T11:18:14.954 [DEBUG] [Thread-10638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:18:14.955 [DEBUG] [Thread-10638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:18:14.955 [DEBUG] [Thread-10638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:18:14.955 [DEBUG] [Thread-10638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:18:14.989 [INFO] [Thread-10638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:18:14.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:18:15.727 [DEBUG] [Thread-10638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:18:15.727 [DEBUG] [Thread-10638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:18:15.727 [DEBUG] [Thread-10638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:18:15.767 [DEBUG] [Thread-10638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:18:15.768 [DEBUG] [Thread-10638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:18:15.770 [DEBUG] [Thread-10638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:18:15.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:18:15.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:18:15.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:18:15.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:18:15.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:18:15.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:18:15.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:18:15.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:18:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:18:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.387215 -999.00  +23.50  19.38     33   +6.50 1 2 1 1 1   888    0 16.42 -34.46 ----- 19.4 19.4 313.8 23.9 28.8 -21.4 28.4 -21.7 27.7 -21.5 28.1 -20.5
2025-12-25T11:18:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:18:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:18:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.387215
2025-12-25T11:18:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:18:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:18:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:18:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:18:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:18:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:18:07', tmtdew=19.99, humidity=27.49, cloud=0.0, wind=19.29, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:17:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:18:15.788 [DEBUG] [Thread-10638] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:18:15.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-25T11:18:15.879 [DEBUG] [Thread-10641] [transport.py] [_log()] starting thread (client mode): 0xb6be1810
2025-12-25T11:18:15.879 [DEBUG] [Thread-10641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:18:15.894 [DEBUG] [Thread-10641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:18:15.894 [INFO] [Thread-10641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:15.902 [DEBUG] [Thread-10641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] client lang: <none>
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] server lang: <none>
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] kex follows: False
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] Compression: none
2025-12-25T11:18:15.903 [DEBUG] [Thread-10641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:18:15.966 [DEBUG] [Thread-10641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:18:15.966 [DEBUG] [Thread-10641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:18:15.967 [DEBUG] [Thread-10641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:18:15.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:18:15.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:18:16.025 [DEBUG] [Thread-10641] [transport.py] [_log()] userauth is OK
2025-12-25T11:18:16.026 [DEBUG] [Thread-10641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:18:16.026 [DEBUG] [Thread-10641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:18:16.026 [DEBUG] [Thread-10641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:18:16.026 [DEBUG] [Thread-10641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:18:16.045 [INFO] [Thread-10641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:18:16.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-25T11:18:16.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:18:16.899 [DEBUG] [Thread-10641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:18:16.900 [DEBUG] [Thread-10641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:18:16.948 [DEBUG] [Thread-10641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:18:16.948 [DEBUG] [Thread-10641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:18:16.957 [DEBUG] [Thread-10641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:18:16.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:18:16.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:18:16.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:18:16.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:18:16.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:18:16.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:18:16.994 [DEBUG] [Thread-10641] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:18:23.586 [DEBUG] [Thread-10643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:38.642 [DEBUG] [Thread-10644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:47.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:18:47.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:18:47.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-25T11:18:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 18, 39), 19.94, 27.75, 0.0, 21.05, 24.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:18:47.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:18:39
2025-12-25T11:18:47.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:18:47.995 [DEBUG] [Thread-10645] [transport.py] [_log()] starting thread (client mode): 0xb6be2560
2025-12-25T11:18:47.995 [DEBUG] [Thread-10645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:18:48.014 [DEBUG] [Thread-10645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:18:48.014 [INFO] [Thread-10645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] client lang: <none>
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] server lang: <none>
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] kex follows: False
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:18:48.018 [DEBUG] [Thread-10645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:18:48.019 [DEBUG] [Thread-10645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:18:48.019 [DEBUG] [Thread-10645] [transport.py] [_log()] Compression: none
2025-12-25T11:18:48.019 [DEBUG] [Thread-10645] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:18:48.035 [DEBUG] [Thread-10645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:18:48.036 [DEBUG] [Thread-10645] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:18:48.036 [DEBUG] [Thread-10645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:18:48.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:18:48.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:18:48.038 [DEBUG] [Thread-10645] [transport.py] [_log()] userauth is OK
2025-12-25T11:18:48.038 [DEBUG] [Thread-10645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:18:48.039 [DEBUG] [Thread-10645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:18:48.039 [DEBUG] [Thread-10645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:18:48.039 [DEBUG] [Thread-10645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:18:48.056 [INFO] [Thread-10645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:18:48.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:18:48.701 [DEBUG] [Thread-10645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:18:48.701 [DEBUG] [Thread-10645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:18:48.702 [DEBUG] [Thread-10645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:18:48.742 [DEBUG] [Thread-10645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:18:48.742 [DEBUG] [Thread-10645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:18:48.746 [DEBUG] [Thread-10645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:18:48.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:18:48.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:18:48.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:18:48.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:18:48.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:18:48.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:18:48.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:18:48.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:18:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:18:48.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.387562 -999.00  +23.70  17.91     33   +6.80 1 2 1 1 1   888    0 16.06 -45.88 ----- 17.9 17.9 317.6 28.1 28.9 -20.3 28.6 -18.5 27.8 -17.8 28.4 -17.6
2025-12-25T11:18:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:18:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:18:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.387562
2025-12-25T11:18:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:18:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:18:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:18:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:18:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:18:48.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:18:39', tmtdew=19.94, humidity=27.75, cloud=0.0, wind=21.05, temperature=24.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:18:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:18:48.771 [DEBUG] [Thread-10645] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:18:48.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-25T11:18:48.864 [DEBUG] [Thread-10648] [transport.py] [_log()] starting thread (client mode): 0xb6be27d0
2025-12-25T11:18:48.864 [DEBUG] [Thread-10648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:18:48.879 [DEBUG] [Thread-10648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:18:48.879 [INFO] [Thread-10648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] client lang: <none>
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] server lang: <none>
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] kex follows: False
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:18:48.887 [DEBUG] [Thread-10648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:18:48.888 [DEBUG] [Thread-10648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:18:48.888 [DEBUG] [Thread-10648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:18:48.888 [DEBUG] [Thread-10648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:18:48.888 [DEBUG] [Thread-10648] [transport.py] [_log()] Compression: none
2025-12-25T11:18:48.888 [DEBUG] [Thread-10648] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:18:48.946 [DEBUG] [Thread-10648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:18:48.947 [DEBUG] [Thread-10648] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:18:48.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:18:48.948 [DEBUG] [Thread-10648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:18:48.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:18:49.002 [DEBUG] [Thread-10648] [transport.py] [_log()] userauth is OK
2025-12-25T11:18:49.003 [DEBUG] [Thread-10648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:18:49.003 [DEBUG] [Thread-10648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:18:49.003 [DEBUG] [Thread-10648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:18:49.003 [DEBUG] [Thread-10648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:18:49.022 [INFO] [Thread-10648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:18:49.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-25T11:18:49.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:18:49.851 [DEBUG] [Thread-10648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:18:49.852 [DEBUG] [Thread-10648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:18:49.899 [DEBUG] [Thread-10648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:18:49.899 [DEBUG] [Thread-10648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:18:49.909 [DEBUG] [Thread-10648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:18:49.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:18:49.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-25T11:18:49.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:18:49.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:18:49.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:18:49.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:18:49.945 [DEBUG] [Thread-10648] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:18:53.677 [DEBUG] [Thread-10650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:18:58.213 [DEBUG] [Thread-10651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:08.727 [DEBUG] [Thread-10652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:09.675 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:09.676 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:19.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:19:19.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:19:19.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-25T11:19:20.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 19, 11), 20.28, 27.1, 0.0, 20.38, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:19:20.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:19:11
2025-12-25T11:19:20.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:19:20.939 [DEBUG] [Thread-10653] [transport.py] [_log()] starting thread (client mode): 0xb957a740
2025-12-25T11:19:20.939 [DEBUG] [Thread-10653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:19:20.959 [DEBUG] [Thread-10653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:19:20.959 [INFO] [Thread-10653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] client lang: <none>
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] server lang: <none>
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] kex follows: False
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:19:20.962 [DEBUG] [Thread-10653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:19:20.963 [DEBUG] [Thread-10653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:19:20.963 [DEBUG] [Thread-10653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:19:20.963 [DEBUG] [Thread-10653] [transport.py] [_log()] Compression: none
2025-12-25T11:19:20.963 [DEBUG] [Thread-10653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:19:20.978 [DEBUG] [Thread-10653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:19:20.978 [DEBUG] [Thread-10653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:19:20.979 [DEBUG] [Thread-10653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:19:20.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:19:20.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:19:21.020 [DEBUG] [Thread-10653] [transport.py] [_log()] userauth is OK
2025-12-25T11:19:21.021 [DEBUG] [Thread-10653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:19:21.021 [DEBUG] [Thread-10653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:19:21.021 [DEBUG] [Thread-10653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:19:21.021 [DEBUG] [Thread-10653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:19:21.044 [INFO] [Thread-10653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:19:21.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:19:21.764 [DEBUG] [Thread-10653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:19:21.765 [DEBUG] [Thread-10653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:19:21.765 [DEBUG] [Thread-10653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:19:21.806 [DEBUG] [Thread-10653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:19:21.806 [DEBUG] [Thread-10653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:19:21.809 [DEBUG] [Thread-10653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:19:21.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:19:21.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:19:21.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:19:21.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:19:21.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:19:21.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:19:21.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:19:21.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:19:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:19:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.387910 -999.00  +23.60  22.26     34   +6.90 1 2 1 1 1   888    0 15.63 -56.01 ----- 22.3 22.3 317.2 26.9 29.3 -18.5 28.8 -18.4 28.1 -16.8 28.6 -17.3
2025-12-25T11:19:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:19:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:19:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.387910
2025-12-25T11:19:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:19:21.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:19:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:19:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:19:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:19:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:19:11', tmtdew=20.28, humidity=27.1, cloud=0.0, wind=20.38, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:18:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:19:21.837 [DEBUG] [Thread-10653] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:19:21.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-25T11:19:21.930 [DEBUG] [Thread-10656] [transport.py] [_log()] starting thread (client mode): 0xb95794e0
2025-12-25T11:19:21.931 [DEBUG] [Thread-10656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:19:21.944 [DEBUG] [Thread-10656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:19:21.945 [INFO] [Thread-10656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] client lang: <none>
2025-12-25T11:19:21.952 [DEBUG] [Thread-10656] [transport.py] [_log()] server lang: <none>
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] kex follows: False
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] Compression: none
2025-12-25T11:19:21.953 [DEBUG] [Thread-10656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:19:22.014 [DEBUG] [Thread-10656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:19:22.014 [DEBUG] [Thread-10656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:19:22.015 [DEBUG] [Thread-10656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:19:22.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:19:22.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:19:22.072 [DEBUG] [Thread-10656] [transport.py] [_log()] userauth is OK
2025-12-25T11:19:22.072 [DEBUG] [Thread-10656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:19:22.072 [DEBUG] [Thread-10656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:19:22.073 [DEBUG] [Thread-10656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:19:22.073 [DEBUG] [Thread-10656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:19:22.091 [INFO] [Thread-10656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:19:22.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-25T11:19:22.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:19:22.900 [DEBUG] [Thread-10656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:19:22.900 [DEBUG] [Thread-10656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:19:22.948 [DEBUG] [Thread-10656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:19:22.948 [DEBUG] [Thread-10656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:19:22.957 [DEBUG] [Thread-10656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:19:22.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:19:22.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-25T11:19:22.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-25T11:19:22.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:19:22.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:19:22.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:19:22.992 [DEBUG] [Thread-10656] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:19:23.762 [DEBUG] [Thread-10658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:38.818 [DEBUG] [Thread-10659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:19:53.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:19:53.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-25T11:19:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 19, 43), 20.22, 26.85, 0.0, 20.22, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:19:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:19:43
2025-12-25T11:19:53.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:19:53.849 [DEBUG] [Thread-10660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:19:53.955 [DEBUG] [Thread-10661] [transport.py] [_log()] starting thread (client mode): 0xb6be1510
2025-12-25T11:19:53.955 [DEBUG] [Thread-10661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:19:53.977 [DEBUG] [Thread-10661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:19:53.977 [INFO] [Thread-10661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] client lang: <none>
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] server lang: <none>
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] kex follows: False
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] Compression: none
2025-12-25T11:19:53.980 [DEBUG] [Thread-10661] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:19:53.994 [DEBUG] [Thread-10661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:19:53.994 [DEBUG] [Thread-10661] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:19:53.995 [DEBUG] [Thread-10661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:19:53.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:19:53.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:19:53.996 [DEBUG] [Thread-10661] [transport.py] [_log()] userauth is OK
2025-12-25T11:19:53.997 [DEBUG] [Thread-10661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:19:53.997 [DEBUG] [Thread-10661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:19:53.997 [DEBUG] [Thread-10661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:19:53.997 [DEBUG] [Thread-10661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:19:54.015 [INFO] [Thread-10661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:19:54.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:19:54.684 [DEBUG] [Thread-10661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:19:54.684 [DEBUG] [Thread-10661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:19:54.684 [DEBUG] [Thread-10661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:19:54.725 [DEBUG] [Thread-10661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:19:54.725 [DEBUG] [Thread-10661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:19:54.727 [DEBUG] [Thread-10661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:19:54.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:19:54.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:19:54.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:19:54.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:19:54.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:19:54.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:19:54.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:19:54.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:19:54.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:19:54.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.388257 -999.00  +24.50  27.63     33   +7.20 1 2 1 1 1   888    0 15.16 -68.08 ----- 27.6 27.6 309.8 30.4 29.7 -18.4 29.2 -17.6 28.4 -16.2 28.9 -18.5
2025-12-25T11:19:54.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:19:54.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:19:54.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.388257
2025-12-25T11:19:54.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:19:54.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:19:54.752 [DEBUG] [Thread-10661] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:19:54.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:19:54.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:19:54.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:19:54.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:19:43', tmtdew=20.22, humidity=26.85, cloud=0.0, wind=20.22, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:19:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:19:54.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-25T11:19:54.843 [DEBUG] [Thread-10664] [transport.py] [_log()] starting thread (client mode): 0xb6be1060
2025-12-25T11:19:54.843 [DEBUG] [Thread-10664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:19:54.858 [DEBUG] [Thread-10664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:19:54.858 [INFO] [Thread-10664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:19:54.866 [DEBUG] [Thread-10664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:19:54.866 [DEBUG] [Thread-10664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:19:54.866 [DEBUG] [Thread-10664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:19:54.866 [DEBUG] [Thread-10664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] client lang: <none>
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] server lang: <none>
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] kex follows: False
2025-12-25T11:19:54.867 [DEBUG] [Thread-10664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:19:54.868 [DEBUG] [Thread-10664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:19:54.868 [DEBUG] [Thread-10664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:19:54.868 [DEBUG] [Thread-10664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:19:54.868 [DEBUG] [Thread-10664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:19:54.868 [DEBUG] [Thread-10664] [transport.py] [_log()] Compression: none
2025-12-25T11:19:54.868 [DEBUG] [Thread-10664] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:19:54.925 [DEBUG] [Thread-10664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:19:54.926 [DEBUG] [Thread-10664] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:19:54.927 [DEBUG] [Thread-10664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:19:54.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:19:54.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:19:54.981 [DEBUG] [Thread-10664] [transport.py] [_log()] userauth is OK
2025-12-25T11:19:54.982 [DEBUG] [Thread-10664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:19:54.982 [DEBUG] [Thread-10664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:19:54.982 [DEBUG] [Thread-10664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:19:54.982 [DEBUG] [Thread-10664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:19:54.999 [INFO] [Thread-10664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:19:55.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:19:55.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:19:55.812 [DEBUG] [Thread-10664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:19:55.812 [DEBUG] [Thread-10664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:19:55.861 [DEBUG] [Thread-10664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:19:55.861 [DEBUG] [Thread-10664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:19:55.871 [DEBUG] [Thread-10664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:19:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:19:55.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:19:55.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-25T11:19:55.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:19:55.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:19:55.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:19:55.909 [DEBUG] [Thread-10664] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:19:58.261 [DEBUG] [Thread-10666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:08.884 [DEBUG] [Thread-10667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:09.823 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:09.825 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:23.932 [DEBUG] [Thread-10668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:25.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:20:25.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:20:25.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-25T11:20:26.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 20, 16), 20.33, 26.65, 0.0, 27.42, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:20:26.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:20:16
2025-12-25T11:20:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:20:26.941 [DEBUG] [Thread-10669] [transport.py] [_log()] starting thread (client mode): 0xb95793f0
2025-12-25T11:20:26.942 [DEBUG] [Thread-10669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:20:26.964 [DEBUG] [Thread-10669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:20:26.964 [INFO] [Thread-10669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] client lang: <none>
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] server lang: <none>
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] kex follows: False
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] Compression: none
2025-12-25T11:20:26.967 [DEBUG] [Thread-10669] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:20:26.982 [DEBUG] [Thread-10669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:20:26.982 [DEBUG] [Thread-10669] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:20:26.983 [DEBUG] [Thread-10669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:20:26.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:20:26.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:20:26.983 [DEBUG] [Thread-10669] [transport.py] [_log()] userauth is OK
2025-12-25T11:20:26.983 [DEBUG] [Thread-10669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:20:26.983 [DEBUG] [Thread-10669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:20:26.983 [DEBUG] [Thread-10669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:20:26.983 [DEBUG] [Thread-10669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:20:26.998 [INFO] [Thread-10669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:20:26.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:20:27.696 [DEBUG] [Thread-10669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:20:27.696 [DEBUG] [Thread-10669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:20:27.696 [DEBUG] [Thread-10669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:20:27.738 [DEBUG] [Thread-10669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:20:27.738 [DEBUG] [Thread-10669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:20:27.740 [DEBUG] [Thread-10669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:20:27.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:20:27.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:20:27.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:20:27.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:20:27.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:20:27.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:20:27.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.388951 -999.00  +24.70  29.15     32   +7.30 1 2 1 1 1   888    0 14.84 -86.12 ----- 29.1 29.1 310.6 36.4 29.6 -19.4 29.1 -18.9 28.4 -16.7 28.9 -17.3
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.388951
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:20:27.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:20:16', tmtdew=20.33, humidity=26.65, cloud=0.0, wind=27.42, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:20:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:20:27.758 [DEBUG] [Thread-10669] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:20:27.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-25T11:20:27.839 [DEBUG] [Thread-10672] [transport.py] [_log()] starting thread (client mode): 0xb957acb0
2025-12-25T11:20:27.839 [DEBUG] [Thread-10672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:20:27.854 [DEBUG] [Thread-10672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:20:27.854 [INFO] [Thread-10672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] client lang: <none>
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] server lang: <none>
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] kex follows: False
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] Compression: none
2025-12-25T11:20:27.862 [DEBUG] [Thread-10672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:20:27.917 [DEBUG] [Thread-10672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:20:27.917 [DEBUG] [Thread-10672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:20:27.917 [DEBUG] [Thread-10672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:20:27.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:20:27.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:20:27.977 [DEBUG] [Thread-10672] [transport.py] [_log()] userauth is OK
2025-12-25T11:20:27.978 [DEBUG] [Thread-10672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:20:27.978 [DEBUG] [Thread-10672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:20:27.978 [DEBUG] [Thread-10672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:20:27.978 [DEBUG] [Thread-10672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:20:27.994 [INFO] [Thread-10672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:20:27.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-25T11:20:27.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:20:28.834 [DEBUG] [Thread-10672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:20:28.835 [DEBUG] [Thread-10672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:20:28.882 [DEBUG] [Thread-10672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:20:28.882 [DEBUG] [Thread-10672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:20:28.891 [DEBUG] [Thread-10672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:20:28.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:20:28.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-25T11:20: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-25T11:20:28.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:20:28.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:20:28.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:20:28.928 [DEBUG] [Thread-10672] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:20:38.963 [DEBUG] [Thread-10674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:54.026 [DEBUG] [Thread-10675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:58.314 [DEBUG] [Thread-10676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:20:58.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:20:58.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:20:58.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-25T11:20:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 20, 48), 20.62, 26.22, 0.0, 33.65, 24.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:20:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:20:48
2025-12-25T11:20:59.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:20:59.934 [DEBUG] [Thread-10677] [transport.py] [_log()] starting thread (client mode): 0xb957a650
2025-12-25T11:20:59.934 [DEBUG] [Thread-10677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:20:59.955 [DEBUG] [Thread-10677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:20:59.955 [INFO] [Thread-10677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] client lang: <none>
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] server lang: <none>
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] kex follows: False
2025-12-25T11:20:59.958 [DEBUG] [Thread-10677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:20:59.959 [DEBUG] [Thread-10677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:20:59.959 [DEBUG] [Thread-10677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:20:59.959 [DEBUG] [Thread-10677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:20:59.959 [DEBUG] [Thread-10677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:20:59.959 [DEBUG] [Thread-10677] [transport.py] [_log()] Compression: none
2025-12-25T11:20:59.959 [DEBUG] [Thread-10677] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:20:59.975 [DEBUG] [Thread-10677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:20:59.975 [DEBUG] [Thread-10677] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:20:59.975 [DEBUG] [Thread-10677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:20:59.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:20:59.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:20:59.977 [DEBUG] [Thread-10677] [transport.py] [_log()] userauth is OK
2025-12-25T11:20:59.977 [DEBUG] [Thread-10677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:20:59.977 [DEBUG] [Thread-10677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:20:59.977 [DEBUG] [Thread-10677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:20:59.977 [DEBUG] [Thread-10677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:20:59.989 [INFO] [Thread-10677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:20:59.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:21:00.663 [DEBUG] [Thread-10677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:21:00.663 [DEBUG] [Thread-10677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:21:00.664 [DEBUG] [Thread-10677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:21:00.704 [DEBUG] [Thread-10677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:21:00.704 [DEBUG] [Thread-10677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:21:00.707 [DEBUG] [Thread-10677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:21:00.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:21:00.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:21:00.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:21:00.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:21:00.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:21:00.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:21:00.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:21:00.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:21:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.389299 -999.00  +24.90  24.53     32   +7.10 1 2 1 1 1   888    0 14.80 -92.52 ----- 24.5 24.5 347.1 32.6 29.8 -20.3 29.2 -19.0 28.4 -18.6 29.0 -17.8
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.389299
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:21:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:20:48', tmtdew=20.62, humidity=26.22, cloud=0.0, wind=33.65, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:20:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:21:00.727 [DEBUG] [Thread-10677] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:21:00.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-25T11:21:00.814 [DEBUG] [Thread-10680] [transport.py] [_log()] starting thread (client mode): 0xb957ace0
2025-12-25T11:21:00.815 [DEBUG] [Thread-10680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:21:00.829 [DEBUG] [Thread-10680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:21:00.829 [INFO] [Thread-10680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:21:00.836 [DEBUG] [Thread-10680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:21:00.836 [DEBUG] [Thread-10680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:21:00.836 [DEBUG] [Thread-10680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:21:00.836 [DEBUG] [Thread-10680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:21:00.836 [DEBUG] [Thread-10680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:21:00.836 [DEBUG] [Thread-10680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] client lang: <none>
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] server lang: <none>
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] kex follows: False
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] Compression: none
2025-12-25T11:21:00.837 [DEBUG] [Thread-10680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:21:00.894 [DEBUG] [Thread-10680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:21:00.894 [DEBUG] [Thread-10680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:21:00.894 [DEBUG] [Thread-10680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:21:00.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:21:00.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:21:00.951 [DEBUG] [Thread-10680] [transport.py] [_log()] userauth is OK
2025-12-25T11:21:00.951 [DEBUG] [Thread-10680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:21:00.951 [DEBUG] [Thread-10680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:21:00.951 [DEBUG] [Thread-10680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:21:00.951 [DEBUG] [Thread-10680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:21:00.965 [INFO] [Thread-10680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:21:00.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-25T11:21:00.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:21:01.827 [DEBUG] [Thread-10680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:21:01.827 [DEBUG] [Thread-10680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:21:01.874 [DEBUG] [Thread-10680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:21:01.874 [DEBUG] [Thread-10680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:21:01.883 [DEBUG] [Thread-10680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:21:01.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:21:01.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-25T11:21:01.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-25T11:21:01.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:21:01.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:21:01.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:21:01.914 [DEBUG] [Thread-10680] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:21:09.058 [DEBUG] [Thread-10682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:21:09.967 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:21:09.969 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:21:24.110 [DEBUG] [Thread-10683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:21:31.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:21:31.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:21:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:21:32.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 21, 20), 20.61, 26.23, 0.0, 31.07, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:21:32.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:21:20
2025-12-25T11:21:32.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:21:32.901 [DEBUG] [Thread-10684] [transport.py] [_log()] starting thread (client mode): 0xb6be2260
2025-12-25T11:21:32.901 [DEBUG] [Thread-10684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:21:32.920 [DEBUG] [Thread-10684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:21:32.920 [INFO] [Thread-10684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] client lang: <none>
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] server lang: <none>
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] kex follows: False
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] Compression: none
2025-12-25T11:21:32.923 [DEBUG] [Thread-10684] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:21:32.939 [DEBUG] [Thread-10684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:21:32.939 [DEBUG] [Thread-10684] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:21:32.940 [DEBUG] [Thread-10684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:21:32.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:21:32.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:21:32.942 [DEBUG] [Thread-10684] [transport.py] [_log()] userauth is OK
2025-12-25T11:21:32.942 [DEBUG] [Thread-10684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:21:32.942 [DEBUG] [Thread-10684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:21:32.942 [DEBUG] [Thread-10684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:21:32.942 [DEBUG] [Thread-10684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:21:32.961 [INFO] [Thread-10684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:21:32.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:21:33.538 [DEBUG] [Thread-10684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:21:33.538 [DEBUG] [Thread-10684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:21:33.539 [DEBUG] [Thread-10684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:21:33.579 [DEBUG] [Thread-10684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:21:33.579 [DEBUG] [Thread-10684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:21:33.582 [DEBUG] [Thread-10684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:21:33.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:21:33.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:21:33.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:21:33.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:21:33.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:21:33.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:21:33.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:21:33.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:21:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:21:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.389646 -999.00  +24.40  32.45     32   +6.70 1 2 2 1 1   888    0 14.45 -97.06 ----- 32.5 32.5 323.0 36.3 29.9 -20.3 29.2 -18.7 28.6 -17.3 29.1 -18.2
2025-12-25T11:21:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:21:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:21:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.389646
2025-12-25T11:21:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:21:33.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:21:33.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:21:33.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:21:33.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:21:33.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:21:20', tmtdew=20.61, humidity=26.23, cloud=0.0, wind=31.07, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:21:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:21:33.610 [DEBUG] [Thread-10684] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:21:33.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:21:33.703 [DEBUG] [Thread-10687] [transport.py] [_log()] starting thread (client mode): 0xb6be01f0
2025-12-25T11:21:33.703 [DEBUG] [Thread-10687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:21:33.718 [DEBUG] [Thread-10687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:21:33.719 [INFO] [Thread-10687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:21:33.726 [DEBUG] [Thread-10687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:21:33.727 [DEBUG] [Thread-10687] [transport.py] [_log()] client lang: <none>
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] server lang: <none>
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] kex follows: False
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:21:33.728 [DEBUG] [Thread-10687] [transport.py] [_log()] Compression: none
2025-12-25T11:21:33.729 [DEBUG] [Thread-10687] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:21:33.785 [DEBUG] [Thread-10687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:21:33.785 [DEBUG] [Thread-10687] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:21:33.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:21:33.787 [DEBUG] [Thread-10687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:21:33.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:21:33.840 [DEBUG] [Thread-10687] [transport.py] [_log()] userauth is OK
2025-12-25T11:21:33.841 [DEBUG] [Thread-10687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:21:33.841 [DEBUG] [Thread-10687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:21:33.841 [DEBUG] [Thread-10687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:21:33.841 [DEBUG] [Thread-10687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:21:33.860 [INFO] [Thread-10687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:21:33.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-25T11:21:33.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:21:34.701 [DEBUG] [Thread-10687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:21:34.701 [DEBUG] [Thread-10687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:21:34.749 [DEBUG] [Thread-10687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:21:34.749 [DEBUG] [Thread-10687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:21:34.758 [DEBUG] [Thread-10687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:21:34.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:21:34.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-25T11:21:34.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-25T11:21:34.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:21:34.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:21:34.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:21:34.795 [DEBUG] [Thread-10687] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:21:39.149 [DEBUG] [Thread-10689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:21:54.202 [DEBUG] [Thread-10690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:21:58.369 [DEBUG] [Thread-10691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:04.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:22:04.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:22:04.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-25T11:22:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 21, 52), 20.93, 25.9, 0.0, 28.41, 24.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:22:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:21:52
2025-12-25T11:22:05.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:22:05.787 [DEBUG] [Thread-10692] [transport.py] [_log()] starting thread (client mode): 0xb957b640
2025-12-25T11:22:05.787 [DEBUG] [Thread-10692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:22:05.806 [DEBUG] [Thread-10692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:22:05.807 [INFO] [Thread-10692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:22:05.809 [DEBUG] [Thread-10692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] client lang: <none>
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] server lang: <none>
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] kex follows: False
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:22:05.810 [DEBUG] [Thread-10692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:22:05.811 [DEBUG] [Thread-10692] [transport.py] [_log()] Compression: none
2025-12-25T11:22:05.811 [DEBUG] [Thread-10692] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:22:05.827 [DEBUG] [Thread-10692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:22:05.828 [DEBUG] [Thread-10692] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:22:05.828 [DEBUG] [Thread-10692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:22:05.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:22:05.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:22:05.873 [DEBUG] [Thread-10692] [transport.py] [_log()] userauth is OK
2025-12-25T11:22:05.873 [DEBUG] [Thread-10692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:22:05.873 [DEBUG] [Thread-10692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:22:05.873 [DEBUG] [Thread-10692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:22:05.874 [DEBUG] [Thread-10692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:22:05.894 [INFO] [Thread-10692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:22:05.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:22:06.476 [DEBUG] [Thread-10692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:22:06.476 [DEBUG] [Thread-10692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:22:06.477 [DEBUG] [Thread-10692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:22:06.517 [DEBUG] [Thread-10692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:22:06.517 [DEBUG] [Thread-10692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:22:06.521 [DEBUG] [Thread-10692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:22:06.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:22:06.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:22:06.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:22:06.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:22:06.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:22:06.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:22:06.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:22:06.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:22:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:22:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.389993 -999.00  +24.70  24.32     32   +7.00 1 2 1 1 1   888    0 14.61 -102.00 ----- 24.3 24.3 313.0 34.6 30.0 -20.6 29.3 -18.5 28.7 -16.8 29.2 -17.7
2025-12-25T11:22:06.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:22:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:22:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.389993
2025-12-25T11:22:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:22:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:22:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:22:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:22:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:22:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:21:52', tmtdew=20.93, humidity=25.9, cloud=0.0, wind=28.41, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:21:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:22:06.542 [DEBUG] [Thread-10692] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:22:06.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-25T11:22:06.628 [DEBUG] [Thread-10695] [transport.py] [_log()] starting thread (client mode): 0xb957ada0
2025-12-25T11:22:06.629 [DEBUG] [Thread-10695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:22:06.645 [DEBUG] [Thread-10695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:22:06.645 [INFO] [Thread-10695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] client lang: <none>
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] server lang: <none>
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] kex follows: False
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:22:06.654 [DEBUG] [Thread-10695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:22:06.655 [DEBUG] [Thread-10695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:22:06.655 [DEBUG] [Thread-10695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:22:06.655 [DEBUG] [Thread-10695] [transport.py] [_log()] Compression: none
2025-12-25T11:22:06.655 [DEBUG] [Thread-10695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:22:06.710 [DEBUG] [Thread-10695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:22:06.710 [DEBUG] [Thread-10695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:22:06.711 [DEBUG] [Thread-10695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:22:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:22:06.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:22:06.766 [DEBUG] [Thread-10695] [transport.py] [_log()] userauth is OK
2025-12-25T11:22:06.766 [DEBUG] [Thread-10695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:22:06.766 [DEBUG] [Thread-10695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:22:06.766 [DEBUG] [Thread-10695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:22:06.766 [DEBUG] [Thread-10695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:22:06.785 [INFO] [Thread-10695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:22:06.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-25T11:22:06.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:22:07.643 [DEBUG] [Thread-10695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:22:07.643 [DEBUG] [Thread-10695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:22:07.691 [DEBUG] [Thread-10695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:22:07.691 [DEBUG] [Thread-10695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:22:07.701 [DEBUG] [Thread-10695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:22:07.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:22:07.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-25T11:22:07.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-25T11:22:07.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:22:07.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:22:07.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:22:07.738 [DEBUG] [Thread-10695] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:22:09.234 [DEBUG] [Thread-10697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:10.110 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:10.111 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:24.288 [DEBUG] [Thread-10698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:22:37.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:22:37.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-25T11:22:38.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 22, 24), 21.04, 25.72, 0.0, 28.99, 24.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:22:38.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:22:24
2025-12-25T11:22:38.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:22:38.695 [DEBUG] [Thread-10699] [transport.py] [_log()] starting thread (client mode): 0xb957b6d0
2025-12-25T11:22:38.695 [DEBUG] [Thread-10699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:22:38.715 [DEBUG] [Thread-10699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:22:38.715 [INFO] [Thread-10699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:22:38.718 [DEBUG] [Thread-10699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] client lang: <none>
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] server lang: <none>
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] kex follows: False
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] Compression: none
2025-12-25T11:22:38.719 [DEBUG] [Thread-10699] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:22:38.735 [DEBUG] [Thread-10699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:22:38.736 [DEBUG] [Thread-10699] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:22:38.736 [DEBUG] [Thread-10699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:22:38.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:22:38.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:22:38.781 [DEBUG] [Thread-10699] [transport.py] [_log()] userauth is OK
2025-12-25T11:22:38.781 [DEBUG] [Thread-10699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:22:38.781 [DEBUG] [Thread-10699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:22:38.781 [DEBUG] [Thread-10699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:22:38.781 [DEBUG] [Thread-10699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:22:38.801 [INFO] [Thread-10699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:22:38.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:22:39.321 [DEBUG] [Thread-10701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:39.366 [DEBUG] [Thread-10699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:22:39.367 [DEBUG] [Thread-10699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:22:39.367 [DEBUG] [Thread-10699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:22:39.408 [DEBUG] [Thread-10699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:22:39.408 [DEBUG] [Thread-10699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:22:39.411 [DEBUG] [Thread-10699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:22:39.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:22:39.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:22:39.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:22:39.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:22:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:22:39.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:22:39.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:22:39.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:22:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:22:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.390340 -999.00  +25.20  21.90     31   +7.10 1 2 1 1 1   888    0 14.21 -99.05 ----- 21.9 21.9 331.4 31.0 30.2 -20.2 29.6 -18.5 28.8 -17.6 29.4 -17.9
2025-12-25T11:22:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:22:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:22:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.390340
2025-12-25T11:22:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:22:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:22:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:22:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:22:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:22:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:22:24', tmtdew=21.04, humidity=25.72, cloud=0.0, wind=28.99, temperature=24.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:22:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:22:39.436 [DEBUG] [Thread-10699] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:22:39.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-25T11:22:39.530 [DEBUG] [Thread-10703] [transport.py] [_log()] starting thread (client mode): 0xb9579750
2025-12-25T11:22:39.530 [DEBUG] [Thread-10703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:22:39.544 [DEBUG] [Thread-10703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:22:39.545 [INFO] [Thread-10703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:39.552 [DEBUG] [Thread-10703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] client lang: <none>
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] server lang: <none>
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] kex follows: False
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] Compression: none
2025-12-25T11:22:39.553 [DEBUG] [Thread-10703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:22:39.609 [DEBUG] [Thread-10703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:22:39.610 [DEBUG] [Thread-10703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:22:39.610 [DEBUG] [Thread-10703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:22:39.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:22:39.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:22:39.670 [DEBUG] [Thread-10703] [transport.py] [_log()] userauth is OK
2025-12-25T11:22:39.670 [DEBUG] [Thread-10703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:22:39.671 [DEBUG] [Thread-10703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:22:39.671 [DEBUG] [Thread-10703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:22:39.671 [DEBUG] [Thread-10703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:22:39.693 [INFO] [Thread-10703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:22:39.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-25T11:22:39.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:22:40.545 [DEBUG] [Thread-10703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:22:40.545 [DEBUG] [Thread-10703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:22:40.593 [DEBUG] [Thread-10703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:22:40.593 [DEBUG] [Thread-10703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:22:40.603 [DEBUG] [Thread-10703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:22:40.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:22:40.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-25T11:22:40.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-25T11:22:40.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:22:40.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:22:40.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:22:40.640 [DEBUG] [Thread-10703] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:22:54.357 [DEBUG] [Thread-10705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:22:58.415 [DEBUG] [Thread-10706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:09.413 [DEBUG] [Thread-10707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:10.271 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:10.272 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:10.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:23:10.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:23:10.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-25T11:23:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 22, 56), 21.23, 25.26, 0.0, 28.97, 24.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:23:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:22:56
2025-12-25T11:23:11.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:23:11.611 [DEBUG] [Thread-10708] [transport.py] [_log()] starting thread (client mode): 0xb6be3af0
2025-12-25T11:23:11.611 [DEBUG] [Thread-10708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:23:11.631 [DEBUG] [Thread-10708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:23:11.631 [INFO] [Thread-10708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:23:11.634 [DEBUG] [Thread-10708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] client lang: <none>
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] server lang: <none>
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] kex follows: False
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] Compression: none
2025-12-25T11:23:11.635 [DEBUG] [Thread-10708] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:23:11.652 [DEBUG] [Thread-10708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:23:11.652 [DEBUG] [Thread-10708] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:23:11.653 [DEBUG] [Thread-10708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:23:11.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:23:11.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:23:11.696 [DEBUG] [Thread-10708] [transport.py] [_log()] userauth is OK
2025-12-25T11:23:11.697 [DEBUG] [Thread-10708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:23:11.697 [DEBUG] [Thread-10708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:23:11.697 [DEBUG] [Thread-10708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:23:11.697 [DEBUG] [Thread-10708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:23:11.729 [INFO] [Thread-10708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:23:11.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:23:12.414 [DEBUG] [Thread-10708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:23:12.414 [DEBUG] [Thread-10708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:23:12.415 [DEBUG] [Thread-10708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:23:12.455 [DEBUG] [Thread-10708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:23:12.456 [DEBUG] [Thread-10708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:23:12.459 [DEBUG] [Thread-10708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:23:12.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:23:12.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:23:12.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:23:12.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:23:12.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:23:12.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:23:12.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:23:12.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:23:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:23:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.390687 -999.00  +25.00  22.57     31   +6.70 1 2 1 1 1   888    0 14.76 -89.85 ----- 22.6 22.6 319.4 35.5 30.5 -20.7 29.7 -20.8 29.0 -18.3 29.6 -18.7
2025-12-25T11:23:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:23:12.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:23:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.390687
2025-12-25T11:23:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:23:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:23:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:23:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:23:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:23:12.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:22:56', tmtdew=21.23, humidity=25.26, cloud=0.0, wind=28.97, temperature=24.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:22:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:23:12.485 [DEBUG] [Thread-10708] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:23:12.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-25T11:23:12.591 [DEBUG] [Thread-10711] [transport.py] [_log()] starting thread (client mode): 0xb957a1d0
2025-12-25T11:23:12.591 [DEBUG] [Thread-10711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:23:12.609 [DEBUG] [Thread-10711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:23:12.609 [INFO] [Thread-10711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:23:12.616 [DEBUG] [Thread-10711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:23:12.617 [DEBUG] [Thread-10711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:23:12.617 [DEBUG] [Thread-10711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:23:12.617 [DEBUG] [Thread-10711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:12.617 [DEBUG] [Thread-10711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:12.617 [DEBUG] [Thread-10711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:12.617 [DEBUG] [Thread-10711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] client lang: <none>
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] server lang: <none>
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] kex follows: False
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:23:12.618 [DEBUG] [Thread-10711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:23:12.619 [DEBUG] [Thread-10711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:23:12.619 [DEBUG] [Thread-10711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:23:12.619 [DEBUG] [Thread-10711] [transport.py] [_log()] Compression: none
2025-12-25T11:23:12.619 [DEBUG] [Thread-10711] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:23:12.676 [DEBUG] [Thread-10711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:23:12.677 [DEBUG] [Thread-10711] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:23:12.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:23:12.678 [DEBUG] [Thread-10711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:23:12.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:23:12.732 [DEBUG] [Thread-10711] [transport.py] [_log()] userauth is OK
2025-12-25T11:23:12.733 [DEBUG] [Thread-10711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:23:12.733 [DEBUG] [Thread-10711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:23:12.733 [DEBUG] [Thread-10711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:23:12.733 [DEBUG] [Thread-10711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:23:12.752 [INFO] [Thread-10711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:23:12.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:23:12.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:23:13.622 [DEBUG] [Thread-10711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:23:13.622 [DEBUG] [Thread-10711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:23:13.670 [DEBUG] [Thread-10711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:23:13.670 [DEBUG] [Thread-10711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:23:13.679 [DEBUG] [Thread-10711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:23:13.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:23:13.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-25T11:23:13.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-25T11:23:13.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:23:13.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:23:13.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:23:13.716 [DEBUG] [Thread-10711] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:23:24.454 [DEBUG] [Thread-10713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:39.500 [DEBUG] [Thread-10714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:43.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:23:43.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:23:43.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:23:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 23, 28), 21.04, 25.54, 0.0, 27.07, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:23:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:23:28
2025-12-25T11:23:44.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:23:44.690 [DEBUG] [Thread-10715] [transport.py] [_log()] starting thread (client mode): 0xb6b294e0
2025-12-25T11:23:44.690 [DEBUG] [Thread-10715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:23:44.711 [DEBUG] [Thread-10715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:23:44.711 [INFO] [Thread-10715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:23:44.715 [DEBUG] [Thread-10715] [transport.py] [_log()] client lang: <none>
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] server lang: <none>
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] kex follows: False
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] Compression: none
2025-12-25T11:23:44.716 [DEBUG] [Thread-10715] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:23:44.735 [DEBUG] [Thread-10715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:23:44.735 [DEBUG] [Thread-10715] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:23:44.736 [DEBUG] [Thread-10715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:23:44.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:23:44.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:23:44.738 [DEBUG] [Thread-10715] [transport.py] [_log()] userauth is OK
2025-12-25T11:23:44.738 [DEBUG] [Thread-10715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:23:44.738 [DEBUG] [Thread-10715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:23:44.738 [DEBUG] [Thread-10715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:23:44.738 [DEBUG] [Thread-10715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:23:44.756 [INFO] [Thread-10715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:23:44.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:23:45.381 [DEBUG] [Thread-10715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:23:45.381 [DEBUG] [Thread-10715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:23:45.382 [DEBUG] [Thread-10715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:23:45.423 [DEBUG] [Thread-10715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:23:45.423 [DEBUG] [Thread-10715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:23:45.426 [DEBUG] [Thread-10715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:23:45.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:23:45.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:23:45.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:23:45.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:23:45.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:23:45.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:23:45.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:23:45.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:23:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:23:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.391035 -999.00  +24.80  28.09     30   +6.40 1 2 1 1 1   888    0 15.09 -79.90 ----- 28.1 28.1 312.6 32.1 30.6 -21.2 29.9 -19.9 29.0 -20.0 29.6 -19.0
2025-12-25T11:23:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:23:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:23:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.391035
2025-12-25T11:23:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:23:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:23:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:23:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:23:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:23:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:23:28', tmtdew=21.04, humidity=25.54, cloud=0.0, wind=27.07, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:23:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:23:45.451 [DEBUG] [Thread-10715] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:23:45.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:23:45.547 [DEBUG] [Thread-10718] [transport.py] [_log()] starting thread (client mode): 0xb6b2b730
2025-12-25T11:23:45.547 [DEBUG] [Thread-10718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:23:45.561 [DEBUG] [Thread-10718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:23:45.561 [INFO] [Thread-10718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:23:45.569 [DEBUG] [Thread-10718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] client lang: <none>
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] server lang: <none>
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] kex follows: False
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] Compression: none
2025-12-25T11:23:45.570 [DEBUG] [Thread-10718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:23:45.632 [DEBUG] [Thread-10718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:23:45.633 [DEBUG] [Thread-10718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:23:45.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:23:45.635 [DEBUG] [Thread-10718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:23:45.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:23:45.688 [DEBUG] [Thread-10718] [transport.py] [_log()] userauth is OK
2025-12-25T11:23:45.689 [DEBUG] [Thread-10718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:23:45.689 [DEBUG] [Thread-10718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:23:45.689 [DEBUG] [Thread-10718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:23:45.689 [DEBUG] [Thread-10718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:23:45.709 [INFO] [Thread-10718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:23:45.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-25T11:23:45.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:23:46.549 [DEBUG] [Thread-10718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:23:46.549 [DEBUG] [Thread-10718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:23:46.597 [DEBUG] [Thread-10718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:23:46.597 [DEBUG] [Thread-10718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:23:46.606 [DEBUG] [Thread-10718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:23:46.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:23:46.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-25T11:23:46.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:23:46.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:23:46.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:23:46.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:23:46.642 [DEBUG] [Thread-10718] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:23:54.532 [DEBUG] [Thread-10720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:23:58.476 [DEBUG] [Thread-10721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:09.590 [DEBUG] [Thread-10722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:10.412 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:10.413 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:24:16.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:24:16.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-25T11:24:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 23, 28), 21.09, 25.54, 0.0, 21.67, 24.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:24:17.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:23:28
2025-12-25T11:24:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:24:17.690 [DEBUG] [Thread-10723] [transport.py] [_log()] starting thread (client mode): 0xb95780d0
2025-12-25T11:24:17.690 [DEBUG] [Thread-10723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:24:17.711 [DEBUG] [Thread-10723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:24:17.711 [INFO] [Thread-10723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] client lang: <none>
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] server lang: <none>
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] kex follows: False
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:24:17.714 [DEBUG] [Thread-10723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:24:17.715 [DEBUG] [Thread-10723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:24:17.715 [DEBUG] [Thread-10723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:24:17.715 [DEBUG] [Thread-10723] [transport.py] [_log()] Compression: none
2025-12-25T11:24:17.715 [DEBUG] [Thread-10723] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:24:17.730 [DEBUG] [Thread-10723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:24:17.730 [DEBUG] [Thread-10723] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:24:17.731 [DEBUG] [Thread-10723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:24:17.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:24:17.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:24:17.731 [DEBUG] [Thread-10723] [transport.py] [_log()] userauth is OK
2025-12-25T11:24:17.731 [DEBUG] [Thread-10723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:24:17.732 [DEBUG] [Thread-10723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:24:17.732 [DEBUG] [Thread-10723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:24:17.732 [DEBUG] [Thread-10723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:24:17.750 [INFO] [Thread-10723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:24:17.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:24:18.380 [DEBUG] [Thread-10723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:24:18.380 [DEBUG] [Thread-10723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:24:18.380 [DEBUG] [Thread-10723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:24:18.422 [DEBUG] [Thread-10723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:24:18.422 [DEBUG] [Thread-10723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:24:18.424 [DEBUG] [Thread-10723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:24:18.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:24:18.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:24:18.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:24:18.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:24:18.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:24:18.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:24:18.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:24:18.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:24:18.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:24:18.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.391729 -999.00  +24.30  31.77     29   +5.50 1 2 2 1 1   888    0 15.52 -67.18 ----- 31.8 31.8 2.8 45.0 30.7 -21.3 29.8 -21.2 29.1 -18.6 29.5 -21.1
2025-12-25T11:24:18.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:24:18.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.391729
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:24:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:23:28', tmtdew=21.09, humidity=25.54, cloud=0.0, wind=21.67, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:24:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:24:18.443 [DEBUG] [Thread-10723] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:24:18.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:24:18.528 [DEBUG] [Thread-10726] [transport.py] [_log()] starting thread (client mode): 0xb9579540
2025-12-25T11:24:18.528 [DEBUG] [Thread-10726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:24:18.543 [DEBUG] [Thread-10726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:24:18.543 [INFO] [Thread-10726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:24:18.552 [DEBUG] [Thread-10726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] client lang: <none>
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] server lang: <none>
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] kex follows: False
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] Compression: none
2025-12-25T11:24:18.553 [DEBUG] [Thread-10726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:24:18.607 [DEBUG] [Thread-10726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:24:18.608 [DEBUG] [Thread-10726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:24:18.608 [DEBUG] [Thread-10726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:24:18.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:24:18.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:24:18.665 [DEBUG] [Thread-10726] [transport.py] [_log()] userauth is OK
2025-12-25T11:24:18.665 [DEBUG] [Thread-10726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:24:18.665 [DEBUG] [Thread-10726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:24:18.665 [DEBUG] [Thread-10726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:24:18.665 [DEBUG] [Thread-10726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:24:18.679 [INFO] [Thread-10726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:24:18.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-25T11:24:18.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:24:19.517 [DEBUG] [Thread-10726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:24:19.517 [DEBUG] [Thread-10726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:24:19.565 [DEBUG] [Thread-10726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:24:19.565 [DEBUG] [Thread-10726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:24:19.573 [DEBUG] [Thread-10726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:24:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:24:19.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-25T11:24:19.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:24:19.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:24:19.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:24:19.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:24:19.604 [DEBUG] [Thread-10726] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:24:24.626 [DEBUG] [Thread-10728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:39.688 [DEBUG] [Thread-10729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:49.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:24:49.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:24:49.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-25T11:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 24, 32), 21.65, 24.71, 0.0, 24.91, 24.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:24:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:24:32
2025-12-25T11:24:50.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:24:50.606 [DEBUG] [Thread-10730] [transport.py] [_log()] starting thread (client mode): 0xb957af80
2025-12-25T11:24:50.606 [DEBUG] [Thread-10730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:24:50.626 [DEBUG] [Thread-10730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:24:50.626 [INFO] [Thread-10730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] client lang: <none>
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] server lang: <none>
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] kex follows: False
2025-12-25T11:24:50.629 [DEBUG] [Thread-10730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:24:50.630 [DEBUG] [Thread-10730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:24:50.630 [DEBUG] [Thread-10730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:24:50.630 [DEBUG] [Thread-10730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:24:50.630 [DEBUG] [Thread-10730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:24:50.630 [DEBUG] [Thread-10730] [transport.py] [_log()] Compression: none
2025-12-25T11:24:50.630 [DEBUG] [Thread-10730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:24:50.647 [DEBUG] [Thread-10730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:24:50.647 [DEBUG] [Thread-10730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:24:50.648 [DEBUG] [Thread-10730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:24:50.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:24:50.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:24:50.650 [DEBUG] [Thread-10730] [transport.py] [_log()] userauth is OK
2025-12-25T11:24:50.650 [DEBUG] [Thread-10730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:24:50.650 [DEBUG] [Thread-10730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:24:50.650 [DEBUG] [Thread-10730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:24:50.651 [DEBUG] [Thread-10730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:24:50.669 [INFO] [Thread-10730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:24:50.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:24:51.317 [DEBUG] [Thread-10730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:24:51.317 [DEBUG] [Thread-10730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:24:51.318 [DEBUG] [Thread-10730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:24:51.358 [DEBUG] [Thread-10730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:24:51.358 [DEBUG] [Thread-10730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:24:51.360 [DEBUG] [Thread-10730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:24:51.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:24:51.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:24:51.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:24:51.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:24:51.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:24:51.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:24:51.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:24:51.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:24:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:24:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.392076 -999.00  +23.70  39.45     30   +5.30 1 2 2 1 1   888    0 16.41 -51.14 ----- 39.5 39.5 315.0 46.7 30.6 -21.7 29.8 -20.0 29.1 -18.7 29.5 -19.4
2025-12-25T11:24:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:24:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:24:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.392076
2025-12-25T11:24:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:24:51.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:24:51.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:24:51.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:24:51.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:24:51.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:24:32', tmtdew=21.65, humidity=24.71, cloud=0.0, wind=24.91, temperature=24.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:24:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:24:51.391 [DEBUG] [Thread-10730] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:24:51.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-25T11:24:51.485 [DEBUG] [Thread-10733] [transport.py] [_log()] starting thread (client mode): 0xb6b2b8b0
2025-12-25T11:24:51.485 [DEBUG] [Thread-10733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:24:51.499 [DEBUG] [Thread-10733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:24:51.500 [INFO] [Thread-10733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:24:51.509 [DEBUG] [Thread-10733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] client lang: <none>
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] server lang: <none>
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] kex follows: False
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:24:51.510 [DEBUG] [Thread-10733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:24:51.511 [DEBUG] [Thread-10733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:24:51.511 [DEBUG] [Thread-10733] [transport.py] [_log()] Compression: none
2025-12-25T11:24:51.511 [DEBUG] [Thread-10733] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:24:51.566 [DEBUG] [Thread-10733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:24:51.566 [DEBUG] [Thread-10733] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:24:51.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:24:51.567 [DEBUG] [Thread-10733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:24:51.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:24:51.629 [DEBUG] [Thread-10733] [transport.py] [_log()] userauth is OK
2025-12-25T11:24:51.629 [DEBUG] [Thread-10733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:24:51.629 [DEBUG] [Thread-10733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:24:51.629 [DEBUG] [Thread-10733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:24:51.629 [DEBUG] [Thread-10733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:24:51.643 [INFO] [Thread-10733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:24:51.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:24:51.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:24:52.487 [DEBUG] [Thread-10733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:24:52.487 [DEBUG] [Thread-10733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:24:52.535 [DEBUG] [Thread-10733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:24:52.535 [DEBUG] [Thread-10733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:24:52.544 [DEBUG] [Thread-10733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:24:52.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:24:52.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:24:52.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-25T11:24:52.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:24:52.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:24:52.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:24:52.583 [DEBUG] [Thread-10733] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:24:54.723 [DEBUG] [Thread-10735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:24:58.521 [DEBUG] [Thread-10736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:09.763 [DEBUG] [Thread-10737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:10.604 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:10.605 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:25:22.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:25:22.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:25:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 25, 4), 21.73, 24.58, 0.0, 23.75, 24.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:25:23.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:25:04
2025-12-25T11:25:23.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:25:23.564 [DEBUG] [Thread-10738] [transport.py] [_log()] starting thread (client mode): 0xb6b2ac50
2025-12-25T11:25:23.564 [DEBUG] [Thread-10738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:25:23.584 [DEBUG] [Thread-10738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:25:23.585 [INFO] [Thread-10738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:25:23.586 [DEBUG] [Thread-10738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] client lang: <none>
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] server lang: <none>
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] kex follows: False
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] Compression: none
2025-12-25T11:25:23.587 [DEBUG] [Thread-10738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:25:23.599 [DEBUG] [Thread-10738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:25:23.599 [DEBUG] [Thread-10738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:25:23.600 [DEBUG] [Thread-10738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:25:23.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:25:23.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:25:23.602 [DEBUG] [Thread-10738] [transport.py] [_log()] userauth is OK
2025-12-25T11:25:23.602 [DEBUG] [Thread-10738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:25:23.602 [DEBUG] [Thread-10738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:25:23.603 [DEBUG] [Thread-10738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:25:23.603 [DEBUG] [Thread-10738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:25:23.639 [INFO] [Thread-10738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:25:23.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:25:24.293 [DEBUG] [Thread-10738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:25:24.293 [DEBUG] [Thread-10738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:25:24.293 [DEBUG] [Thread-10738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:25:24.334 [DEBUG] [Thread-10738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:25:24.334 [DEBUG] [Thread-10738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:25:24.338 [DEBUG] [Thread-10738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:25:24.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:25:24.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:25:24.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:25:24.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:25:24.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:25:24.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:25:24.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:25:24.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:25:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:25:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.392423 -999.00  +23.90  23.34     29   +5.20 1 2 1 1 1   888    0 16.66 -30.08 ----- 23.3 23.3 336.0 35.3 30.6 -22.5 29.8 -20.9 29.1 -19.2 29.6 -19.9
2025-12-25T11:25:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:25:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:25:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.392423
2025-12-25T11:25:24.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:25:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:25:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:25:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:25:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:25:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:25:04', tmtdew=21.73, humidity=24.58, cloud=0.0, wind=23.75, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:25:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:25:24.365 [DEBUG] [Thread-10738] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:25:24.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-25T11:25:24.460 [DEBUG] [Thread-10741] [transport.py] [_log()] starting thread (client mode): 0xb6b281c0
2025-12-25T11:25:24.460 [DEBUG] [Thread-10741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:25:24.475 [DEBUG] [Thread-10741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:25:24.475 [INFO] [Thread-10741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:25:24.483 [DEBUG] [Thread-10741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:25:24.483 [DEBUG] [Thread-10741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:25:24.483 [DEBUG] [Thread-10741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:25:24.483 [DEBUG] [Thread-10741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:24.483 [DEBUG] [Thread-10741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:24.483 [DEBUG] [Thread-10741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] client lang: <none>
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] server lang: <none>
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] kex follows: False
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] Compression: none
2025-12-25T11:25:24.484 [DEBUG] [Thread-10741] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:25:24.549 [DEBUG] [Thread-10741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:25:24.550 [DEBUG] [Thread-10741] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:25:24.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:25:24.551 [DEBUG] [Thread-10741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:25:24.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:25:24.611 [DEBUG] [Thread-10741] [transport.py] [_log()] userauth is OK
2025-12-25T11:25:24.612 [DEBUG] [Thread-10741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:25:24.612 [DEBUG] [Thread-10741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:25:24.612 [DEBUG] [Thread-10741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:25:24.612 [DEBUG] [Thread-10741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:25:24.631 [INFO] [Thread-10741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:25:24.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:25:24.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:25:24.800 [DEBUG] [Thread-10743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:25.462 [DEBUG] [Thread-10741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:25:25.462 [DEBUG] [Thread-10741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:25:25.509 [DEBUG] [Thread-10741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:25:25.510 [DEBUG] [Thread-10741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:25:25.518 [DEBUG] [Thread-10741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:25:25.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:25:25.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:25:25.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-25T11:25:25.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:25:25.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:25:25.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:25:25.554 [DEBUG] [Thread-10741] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:25:39.854 [DEBUG] [Thread-10744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:54.893 [DEBUG] [Thread-10745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:25:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:25:55.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:25:55.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-25T11:25:56.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 25, 36), 22.68, 22.89, 0.0, 24.63, 24.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:25:56.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:25:36
2025-12-25T11:25:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:25:56.567 [DEBUG] [Thread-10746] [transport.py] [_log()] starting thread (client mode): 0xb95787f0
2025-12-25T11:25:56.568 [DEBUG] [Thread-10746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:25:56.587 [DEBUG] [Thread-10746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:25:56.587 [INFO] [Thread-10746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:25:56.590 [DEBUG] [Thread-10746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:25:56.590 [DEBUG] [Thread-10746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:25:56.590 [DEBUG] [Thread-10746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:25:56.590 [DEBUG] [Thread-10746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:56.590 [DEBUG] [Thread-10746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:56.590 [DEBUG] [Thread-10746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] client lang: <none>
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] server lang: <none>
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] kex follows: False
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] Compression: none
2025-12-25T11:25:56.591 [DEBUG] [Thread-10746] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:25:56.608 [DEBUG] [Thread-10746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:25:56.608 [DEBUG] [Thread-10746] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:25:56.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:25:56.609 [DEBUG] [Thread-10746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:25:56.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:25:56.611 [DEBUG] [Thread-10746] [transport.py] [_log()] userauth is OK
2025-12-25T11:25:56.612 [DEBUG] [Thread-10746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:25:56.612 [DEBUG] [Thread-10746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:25:56.612 [DEBUG] [Thread-10746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:25:56.612 [DEBUG] [Thread-10746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:25:56.631 [INFO] [Thread-10746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:25:56.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:25:57.251 [DEBUG] [Thread-10746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:25:57.252 [DEBUG] [Thread-10746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:25:57.252 [DEBUG] [Thread-10746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:25:57.293 [DEBUG] [Thread-10746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:25:57.294 [DEBUG] [Thread-10746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:25:57.297 [DEBUG] [Thread-10746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:25:57.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:25:57.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:25:57.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:25:57.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:25:57.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:25:57.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:25:57.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:25:57.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:25:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:25:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.392771 -999.00  +24.60  22.35     28   +5.20 1 2 1 1 1   888    0 17.35 -7.42 ----- 22.4 22.4 2.8 31.6 30.7 -22.1 29.9 -21.2 29.1 -20.2 29.6 -22.2
2025-12-25T11:25:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:25:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:25:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.392771
2025-12-25T11:25:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:25:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:25:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:25:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:25:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:25:57.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:25:36', tmtdew=22.68, humidity=22.89, cloud=0.0, wind=24.63, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:25:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:25:57.325 [DEBUG] [Thread-10746] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:25:57.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:25:57.418 [DEBUG] [Thread-10749] [transport.py] [_log()] starting thread (client mode): 0xb6b29ba0
2025-12-25T11:25:57.418 [DEBUG] [Thread-10749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:25:57.432 [DEBUG] [Thread-10749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:25:57.432 [INFO] [Thread-10749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:25:57.440 [DEBUG] [Thread-10749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:25:57.440 [DEBUG] [Thread-10749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:25:57.440 [DEBUG] [Thread-10749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:25:57.440 [DEBUG] [Thread-10749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] client lang: <none>
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] server lang: <none>
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] kex follows: False
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:25:57.441 [DEBUG] [Thread-10749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:25:57.442 [DEBUG] [Thread-10749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:25:57.442 [DEBUG] [Thread-10749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:25:57.442 [DEBUG] [Thread-10749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:25:57.442 [DEBUG] [Thread-10749] [transport.py] [_log()] Compression: none
2025-12-25T11:25:57.442 [DEBUG] [Thread-10749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:25:57.500 [DEBUG] [Thread-10749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:25:57.501 [DEBUG] [Thread-10749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:25:57.502 [DEBUG] [Thread-10749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:25:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:25:57.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:25:57.557 [DEBUG] [Thread-10749] [transport.py] [_log()] userauth is OK
2025-12-25T11:25:57.557 [DEBUG] [Thread-10749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:25:57.557 [DEBUG] [Thread-10749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:25:57.558 [DEBUG] [Thread-10749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:25:57.558 [DEBUG] [Thread-10749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:25:57.577 [INFO] [Thread-10749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:25:57.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-25T11:25:57.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:25:58.427 [DEBUG] [Thread-10749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:25:58.427 [DEBUG] [Thread-10749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:25:58.475 [DEBUG] [Thread-10749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:25:58.475 [DEBUG] [Thread-10749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:25:58.484 [DEBUG] [Thread-10749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:25:58.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:25:58.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-25T11:25:58.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-25T11:25:58.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:25:58.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:25:58.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:25:58.521 [DEBUG] [Thread-10749] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:25:58.571 [DEBUG] [Thread-10751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:09.924 [DEBUG] [Thread-10752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:10.743 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:10.744 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:24.960 [DEBUG] [Thread-10753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:28.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:26:28.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:26:28.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-25T11:26:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 26, 8), 22.65, 22.91, 0.0, 22.55, 24.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:26:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:26:08
2025-12-25T11:26:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:26:29.507 [DEBUG] [Thread-10754] [transport.py] [_log()] starting thread (client mode): 0xb6b2a740
2025-12-25T11:26:29.507 [DEBUG] [Thread-10754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:26:29.523 [DEBUG] [Thread-10754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:26:29.523 [INFO] [Thread-10754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:26:29.524 [DEBUG] [Thread-10754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] client lang: <none>
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] server lang: <none>
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] kex follows: False
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] Compression: none
2025-12-25T11:26:29.525 [DEBUG] [Thread-10754] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:26:29.532 [DEBUG] [Thread-10754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:26:29.532 [DEBUG] [Thread-10754] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:26:29.532 [DEBUG] [Thread-10754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:26:29.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:26:29.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:26:29.533 [DEBUG] [Thread-10754] [transport.py] [_log()] userauth is OK
2025-12-25T11:26:29.534 [DEBUG] [Thread-10754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:26:29.534 [DEBUG] [Thread-10754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:26:29.534 [DEBUG] [Thread-10754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:26:29.534 [DEBUG] [Thread-10754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:26:29.553 [INFO] [Thread-10754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:26:29.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:26:30.212 [DEBUG] [Thread-10754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:26:30.213 [DEBUG] [Thread-10754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:26:30.213 [DEBUG] [Thread-10754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:26:30.254 [DEBUG] [Thread-10754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:26:30.254 [DEBUG] [Thread-10754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:26:30.258 [DEBUG] [Thread-10754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:26:30.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:26:30.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:26:30.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:26:30.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:26:30.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:26:30.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:26:30.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:26:30.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:26:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:26:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.393118 -999.00  +24.30  19.72     28   +5.00 1 2 1 1 1   888    0 17.96 12.35 ----- 19.7 19.7 4.4 30.6 30.4 -24.1 29.6 -23.1 29.0 -21.6 29.2 -20.7
2025-12-25T11:26:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:26:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:26:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.393118
2025-12-25T11:26:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:26:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:26:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:26:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:26:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:26:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:26:08', tmtdew=22.65, humidity=22.91, cloud=0.0, wind=22.55, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:26:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:26:30.284 [DEBUG] [Thread-10754] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:26: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-25T11:26:30.377 [DEBUG] [Thread-10757] [transport.py] [_log()] starting thread (client mode): 0xb6b29540
2025-12-25T11:26:30.377 [DEBUG] [Thread-10757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:26:30.394 [DEBUG] [Thread-10757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:26:30.394 [INFO] [Thread-10757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:26:30.402 [DEBUG] [Thread-10757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:26:30.402 [DEBUG] [Thread-10757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:26:30.402 [DEBUG] [Thread-10757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] client lang: <none>
2025-12-25T11:26:30.403 [DEBUG] [Thread-10757] [transport.py] [_log()] server lang: <none>
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] kex follows: False
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] Compression: none
2025-12-25T11:26:30.404 [DEBUG] [Thread-10757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:26:30.461 [DEBUG] [Thread-10757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:26:30.462 [DEBUG] [Thread-10757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:26:30.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:26:30.463 [DEBUG] [Thread-10757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:26:30.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:26:30.516 [DEBUG] [Thread-10757] [transport.py] [_log()] userauth is OK
2025-12-25T11:26:30.516 [DEBUG] [Thread-10757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:26:30.516 [DEBUG] [Thread-10757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:26:30.516 [DEBUG] [Thread-10757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:26:30.516 [DEBUG] [Thread-10757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:26:30.534 [INFO] [Thread-10757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:26:30.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-25T11:26:30.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:26:31.397 [DEBUG] [Thread-10757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:26:31.397 [DEBUG] [Thread-10757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:26:31.445 [DEBUG] [Thread-10757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:26:31.445 [DEBUG] [Thread-10757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:26:31.454 [DEBUG] [Thread-10757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:26:31.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:26:31.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:26:31.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:26:31.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:26:31.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:26:31.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:26:31.493 [DEBUG] [Thread-10757] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:26:39.999 [DEBUG] [Thread-10759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:55.047 [DEBUG] [Thread-10760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:26:58.605 [DEBUG] [Thread-10761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:27:01.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:27:01.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-25T11:27:02.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 26, 40), 22.46, 22.96, 0.0, 25.87, 24.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:27:02.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:26:40
2025-12-25T11:27:02.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:27:02.481 [DEBUG] [Thread-10762] [transport.py] [_log()] starting thread (client mode): 0xb6b2b5b0
2025-12-25T11:27:02.481 [DEBUG] [Thread-10762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:27:02.502 [DEBUG] [Thread-10762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:27:02.502 [INFO] [Thread-10762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] client lang: <none>
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] server lang: <none>
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] kex follows: False
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] Compression: none
2025-12-25T11:27:02.504 [DEBUG] [Thread-10762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:27:02.518 [DEBUG] [Thread-10762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:27:02.519 [DEBUG] [Thread-10762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:27:02.519 [DEBUG] [Thread-10762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:27:02.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:27:02.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:27:02.520 [DEBUG] [Thread-10762] [transport.py] [_log()] userauth is OK
2025-12-25T11:27:02.520 [DEBUG] [Thread-10762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:27:02.520 [DEBUG] [Thread-10762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:27:02.521 [DEBUG] [Thread-10762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:27:02.521 [DEBUG] [Thread-10762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:27:02.533 [INFO] [Thread-10762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:27:02.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:27:03.116 [DEBUG] [Thread-10762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:27:03.116 [DEBUG] [Thread-10762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:27:03.116 [DEBUG] [Thread-10762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:27:03.157 [DEBUG] [Thread-10762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:27:03.157 [DEBUG] [Thread-10762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:27:03.160 [DEBUG] [Thread-10762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:27:03.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:27:03.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:27:03.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:27:03.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:27:03.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:27:03.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:27:03.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:27:03.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:27:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:27:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.393465 -999.00  +23.80  23.57     30   +5.30 1 2 1 1 1   888    0 18.40 29.01 ----- 23.6 23.6 341.5 31.5 30.5 -22.0 29.7 -23.6 29.1 -21.3 29.1 -26.4
2025-12-25T11:27:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:27:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:27:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.393465
2025-12-25T11:27:03.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:27:03.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:27:03.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:27:03.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:27:03.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:27:03.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:26:40', tmtdew=22.46, humidity=22.96, cloud=0.0, wind=25.87, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:26:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:27:03.185 [DEBUG] [Thread-10762] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:27:03.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-25T11:27:03.278 [DEBUG] [Thread-10765] [transport.py] [_log()] starting thread (client mode): 0xb6b29900
2025-12-25T11:27:03.278 [DEBUG] [Thread-10765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:27:03.293 [DEBUG] [Thread-10765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:27:03.293 [INFO] [Thread-10765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:03.301 [DEBUG] [Thread-10765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] client lang: <none>
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] server lang: <none>
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] kex follows: False
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] Compression: none
2025-12-25T11:27:03.302 [DEBUG] [Thread-10765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:27:03.368 [DEBUG] [Thread-10765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:27:03.368 [DEBUG] [Thread-10765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:27:03.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:27:03.369 [DEBUG] [Thread-10765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:27:03.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:27:03.425 [DEBUG] [Thread-10765] [transport.py] [_log()] userauth is OK
2025-12-25T11:27:03.425 [DEBUG] [Thread-10765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:27:03.425 [DEBUG] [Thread-10765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:27:03.426 [DEBUG] [Thread-10765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:27:03.426 [DEBUG] [Thread-10765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:27:03.444 [INFO] [Thread-10765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:27:03.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:27:03.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:27:04.301 [DEBUG] [Thread-10765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:27:04.301 [DEBUG] [Thread-10765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:27:04.349 [DEBUG] [Thread-10765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:27:04.349 [DEBUG] [Thread-10765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:27:04.358 [DEBUG] [Thread-10765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:27:04.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:27:04.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:27:04.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-25T11:27:04.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:27:04.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:27:04.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:27:04.394 [DEBUG] [Thread-10765] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:27:10.080 [DEBUG] [Thread-10767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:10.932 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:10.934 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:25.128 [DEBUG] [Thread-10768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:34.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:27:34.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:27:34.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:27:35.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 27, 12), 22.11, 23.47, 0.0, 24.81, 24.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:27:35.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:27:12
2025-12-25T11:27:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:27:35.448 [DEBUG] [Thread-10769] [transport.py] [_log()] starting thread (client mode): 0xb6b2a500
2025-12-25T11:27:35.448 [DEBUG] [Thread-10769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:27:35.468 [DEBUG] [Thread-10769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:27:35.468 [INFO] [Thread-10769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] client lang: <none>
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] server lang: <none>
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] kex follows: False
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] Compression: none
2025-12-25T11:27:35.471 [DEBUG] [Thread-10769] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:27:35.489 [DEBUG] [Thread-10769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:27:35.489 [DEBUG] [Thread-10769] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:27:35.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:27:35.489 [DEBUG] [Thread-10769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:27:35.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:27:35.490 [DEBUG] [Thread-10769] [transport.py] [_log()] userauth is OK
2025-12-25T11:27:35.490 [DEBUG] [Thread-10769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:27:35.490 [DEBUG] [Thread-10769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:27:35.490 [DEBUG] [Thread-10769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:27:35.490 [DEBUG] [Thread-10769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:27:35.499 [INFO] [Thread-10769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:27:35.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:27:36.066 [DEBUG] [Thread-10769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:27:36.067 [DEBUG] [Thread-10769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:27:36.067 [DEBUG] [Thread-10769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:27:36.108 [DEBUG] [Thread-10769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:27:36.108 [DEBUG] [Thread-10769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:27:36.109 [DEBUG] [Thread-10769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:27:36.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:27:36.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:27:36.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:27:36.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:27:36.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:27:36.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:27:36.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.393812 -999.00  +23.70  24.02     30   +5.50 1 2 1 1 1   888    0 18.75 44.23 ----- 24.0 24.0 359.0 28.5 30.4 -23.2 29.5 -23.1 28.9 -20.9 29.2 -24.3
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.393812
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:27:36.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:27:12', tmtdew=22.11, humidity=23.47, cloud=0.0, wind=24.81, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:27:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:27:36.122 [DEBUG] [Thread-10769] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:27:36.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-25T11:27:36.205 [DEBUG] [Thread-10772] [transport.py] [_log()] starting thread (client mode): 0xb6b2a7a0
2025-12-25T11:27:36.205 [DEBUG] [Thread-10772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:27:36.220 [DEBUG] [Thread-10772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:27:36.220 [INFO] [Thread-10772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] client lang: <none>
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] server lang: <none>
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] kex follows: False
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] Compression: none
2025-12-25T11:27:36.227 [DEBUG] [Thread-10772] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:27:36.284 [DEBUG] [Thread-10772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:27:36.284 [DEBUG] [Thread-10772] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:27:36.284 [DEBUG] [Thread-10772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:27:36.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:27:36.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:27:36.342 [DEBUG] [Thread-10772] [transport.py] [_log()] userauth is OK
2025-12-25T11:27:36.342 [DEBUG] [Thread-10772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:27:36.342 [DEBUG] [Thread-10772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:27:36.342 [DEBUG] [Thread-10772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:27:36.342 [DEBUG] [Thread-10772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:27:36.355 [INFO] [Thread-10772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:27:36.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:27:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:27:37.175 [DEBUG] [Thread-10772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:27:37.175 [DEBUG] [Thread-10772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:27:37.222 [DEBUG] [Thread-10772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:27:37.223 [DEBUG] [Thread-10772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:27:37.231 [DEBUG] [Thread-10772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:27:37.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:27:37.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-25T11:27:37.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-25T11:27:37.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:27:37.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:27:37.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:27:37.267 [DEBUG] [Thread-10772] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:27:40.166 [DEBUG] [Thread-10774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:55.226 [DEBUG] [Thread-10775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:27:58.660 [DEBUG] [Thread-10776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:07.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:28:07.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:28:07.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-25T11:28:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 27, 44), 21.62, 24.19, 0.0, 22.55, 24.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:28:07.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:27:44
2025-12-25T11:28:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:28:08.265 [DEBUG] [Thread-10777] [transport.py] [_log()] starting thread (client mode): 0xb6b2bb20
2025-12-25T11:28:08.265 [DEBUG] [Thread-10777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:28:08.279 [DEBUG] [Thread-10777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:28:08.279 [INFO] [Thread-10777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] client lang: <none>
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] server lang: <none>
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] kex follows: False
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] Compression: none
2025-12-25T11:28:08.281 [DEBUG] [Thread-10777] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:28:08.292 [DEBUG] [Thread-10777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:28:08.293 [DEBUG] [Thread-10777] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:28:08.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:28:08.294 [DEBUG] [Thread-10777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:28:08.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:28:08.296 [DEBUG] [Thread-10777] [transport.py] [_log()] userauth is OK
2025-12-25T11:28:08.296 [DEBUG] [Thread-10777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:28:08.296 [DEBUG] [Thread-10777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:28:08.296 [DEBUG] [Thread-10777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:28:08.296 [DEBUG] [Thread-10777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:28:08.319 [INFO] [Thread-10777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:28:08.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:28:08.926 [DEBUG] [Thread-10777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:28:08.926 [DEBUG] [Thread-10777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:28:08.927 [DEBUG] [Thread-10777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:28:08.967 [DEBUG] [Thread-10777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:28:08.967 [DEBUG] [Thread-10777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:28:08.971 [DEBUG] [Thread-10777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:28:08.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:28:08.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:28:08.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:28:08.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:28:08.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:28:08.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:28:08.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:28:08.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:28:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:28:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.394160 -999.00  +23.60  18.66     31   +5.60 1 2 1 1 1   888    0 19.49 65.49 ----- 18.7 18.7 351.2 22.7 30.3 -22.4 -999.0 -999.0 28.9 -20.9 29.2 -20.7
2025-12-25T11:28:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:28:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:28:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.394160
2025-12-25T11:28:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:28:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:28:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:28:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:28:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:28:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:27:44', tmtdew=21.62, humidity=24.19, cloud=0.0, wind=22.55, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:27:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:28:08.996 [DEBUG] [Thread-10777] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:28:09.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-25T11:28:09.084 [DEBUG] [Thread-10780] [transport.py] [_log()] starting thread (client mode): 0xb6b2a110
2025-12-25T11:28:09.084 [DEBUG] [Thread-10780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:28:09.099 [DEBUG] [Thread-10780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:28:09.099 [INFO] [Thread-10780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:09.107 [DEBUG] [Thread-10780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] client lang: <none>
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] server lang: <none>
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] kex follows: False
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:28:09.108 [DEBUG] [Thread-10780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:28:09.109 [DEBUG] [Thread-10780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:28:09.109 [DEBUG] [Thread-10780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:28:09.109 [DEBUG] [Thread-10780] [transport.py] [_log()] Compression: none
2025-12-25T11:28:09.109 [DEBUG] [Thread-10780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:28:09.168 [DEBUG] [Thread-10780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:28:09.168 [DEBUG] [Thread-10780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:28:09.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:28:09.170 [DEBUG] [Thread-10780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:28:09.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:28:09.230 [DEBUG] [Thread-10780] [transport.py] [_log()] userauth is OK
2025-12-25T11:28:09.230 [DEBUG] [Thread-10780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:28:09.230 [DEBUG] [Thread-10780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:28:09.230 [DEBUG] [Thread-10780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:28:09.230 [DEBUG] [Thread-10780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:28:09.247 [INFO] [Thread-10780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:28:09.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-25T11:28:09.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:28:10.054 [DEBUG] [Thread-10780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:28:10.054 [DEBUG] [Thread-10780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:28:10.102 [DEBUG] [Thread-10780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:28:10.102 [DEBUG] [Thread-10780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:28:10.110 [DEBUG] [Thread-10780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:28:10.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:28:10.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:28:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:28:10.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:28:10.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:28:10.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:28:10.142 [DEBUG] [Thread-10780] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:28:10.258 [DEBUG] [Thread-10782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:11.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:11.084 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:25.299 [DEBUG] [Thread-10783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:40.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:28:40.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:28:40.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:28:40.338 [DEBUG] [Thread-10784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 28, 16), 21.6, 24.24, 0.0, 21.88, 24.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:28:40.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:28:16
2025-12-25T11:28:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:28:41.129 [DEBUG] [Thread-10785] [transport.py] [_log()] starting thread (client mode): 0xb6b29750
2025-12-25T11:28:41.130 [DEBUG] [Thread-10785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:28:41.150 [DEBUG] [Thread-10785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:28:41.150 [INFO] [Thread-10785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] client lang: <none>
2025-12-25T11:28:41.153 [DEBUG] [Thread-10785] [transport.py] [_log()] server lang: <none>
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] kex follows: False
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] Compression: none
2025-12-25T11:28:41.154 [DEBUG] [Thread-10785] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:28:41.173 [DEBUG] [Thread-10785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:28:41.174 [DEBUG] [Thread-10785] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:28:41.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:28:41.175 [DEBUG] [Thread-10785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:28:41.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:28:41.177 [DEBUG] [Thread-10785] [transport.py] [_log()] userauth is OK
2025-12-25T11:28:41.177 [DEBUG] [Thread-10785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:28:41.177 [DEBUG] [Thread-10785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:28:41.177 [DEBUG] [Thread-10785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:28:41.177 [DEBUG] [Thread-10785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:28:41.202 [INFO] [Thread-10785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:28:41.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:28:41.753 [DEBUG] [Thread-10785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:28:41.754 [DEBUG] [Thread-10785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:28:41.754 [DEBUG] [Thread-10785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:28:41.795 [DEBUG] [Thread-10785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:28:41.795 [DEBUG] [Thread-10785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:28:41.799 [DEBUG] [Thread-10785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:28:41.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:28:41.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:28:41.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:28:41.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:28:41.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:28:41.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:28:41.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:28:41.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:28:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:28:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.394160 -999.00  +23.60  18.66     31   +5.60 1 2 1 1 1   888    0 19.49 65.49 ----- 18.7 18.7 351.2 22.7 30.3 -22.4 -999.0 -999.0 28.9 -20.9 29.2 -20.7
2025-12-25T11:28:41.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:28:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:28:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.394160
2025-12-25T11:28:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:28:41.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:28:41.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:28:41.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:28:41.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:28:41.825 [DEBUG] [Thread-10785] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:28:41.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:28:16', tmtdew=21.6, humidity=24.24, cloud=0.0, wind=21.88, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:27:35.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:28:41.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-25T11:28:41.918 [DEBUG] [Thread-10788] [transport.py] [_log()] starting thread (client mode): 0xb6b2a770
2025-12-25T11:28:41.918 [DEBUG] [Thread-10788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:28:41.932 [DEBUG] [Thread-10788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:28:41.932 [INFO] [Thread-10788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:28:41.940 [DEBUG] [Thread-10788] [transport.py] [_log()] client lang: <none>
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] server lang: <none>
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] kex follows: False
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] Compression: none
2025-12-25T11:28:41.941 [DEBUG] [Thread-10788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:28:42.003 [DEBUG] [Thread-10788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:28:42.004 [DEBUG] [Thread-10788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:28:42.005 [DEBUG] [Thread-10788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:28:42.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:28:42.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:28:42.064 [DEBUG] [Thread-10788] [transport.py] [_log()] userauth is OK
2025-12-25T11:28:42.065 [DEBUG] [Thread-10788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:28:42.065 [DEBUG] [Thread-10788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:28:42.065 [DEBUG] [Thread-10788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:28:42.065 [DEBUG] [Thread-10788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:28:42.083 [INFO] [Thread-10788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:28:42.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-25T11:28:42.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:28:42.888 [DEBUG] [Thread-10788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:28:42.889 [DEBUG] [Thread-10788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:28:42.937 [DEBUG] [Thread-10788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:28:42.937 [DEBUG] [Thread-10788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:28:42.946 [DEBUG] [Thread-10788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:28:42.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:28:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:28:42.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-25T11:28:42.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:28:42.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:28:42.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:28:42.981 [DEBUG] [Thread-10788] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:28:55.368 [DEBUG] [Thread-10790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:28:58.714 [DEBUG] [Thread-10791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:10.429 [DEBUG] [Thread-10792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:11.253 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:11.254 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:12.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:29:12.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:29:12.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-25T11:29:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 28, 48), 23.47, 21.33, 0.0, 32.15, 24.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:29:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:28:48
2025-12-25T11:29:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:29:13.965 [DEBUG] [Thread-10793] [transport.py] [_log()] starting thread (client mode): 0xb9579a50
2025-12-25T11:29:13.965 [DEBUG] [Thread-10793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:29:13.977 [DEBUG] [Thread-10793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:29:13.977 [INFO] [Thread-10793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:29:13.978 [DEBUG] [Thread-10793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] client lang: <none>
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] server lang: <none>
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] kex follows: False
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] Compression: none
2025-12-25T11:29:13.979 [DEBUG] [Thread-10793] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:29:13.989 [DEBUG] [Thread-10793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:29:13.989 [DEBUG] [Thread-10793] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:29:13.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:29:13.990 [DEBUG] [Thread-10793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:29:13.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:29:13.991 [DEBUG] [Thread-10793] [transport.py] [_log()] userauth is OK
2025-12-25T11:29:13.991 [DEBUG] [Thread-10793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:29:13.991 [DEBUG] [Thread-10793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:29:13.991 [DEBUG] [Thread-10793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:29:13.991 [DEBUG] [Thread-10793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:29:14.003 [INFO] [Thread-10793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:29:14.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:29:14.825 [DEBUG] [Thread-10793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:29:14.826 [DEBUG] [Thread-10793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:29:14.826 [DEBUG] [Thread-10793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:29:14.867 [DEBUG] [Thread-10793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:29:14.867 [DEBUG] [Thread-10793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:29:14.871 [DEBUG] [Thread-10793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:29:14.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:29:14.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:29:14.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:29:14.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:29:14.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:29:14.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:29:14.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:29:14.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:29:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:29:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.394854 -999.00  +24.40  35.01     26   +3.90 1 2 2 1 1   888    0 21.01 104.52 ----- 35.0 35.0 309.0 42.2 30.4 -23.1 29.6 -23.3 28.8 -21.6 29.3 -21.3
2025-12-25T11:29:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:29:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:29:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.394854
2025-12-25T11:29:14.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:29:14.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:29:14.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:29:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:29:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:29:14.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:28:48', tmtdew=23.47, humidity=21.33, cloud=0.0, wind=32.15, temperature=24.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:28:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:29:14.897 [DEBUG] [Thread-10793] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:29:14.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:29:14.990 [DEBUG] [Thread-10796] [transport.py] [_log()] starting thread (client mode): 0xb957aaa0
2025-12-25T11:29:14.990 [DEBUG] [Thread-10796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:29:15.004 [DEBUG] [Thread-10796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:29:15.004 [INFO] [Thread-10796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] client lang: <none>
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] server lang: <none>
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] kex follows: False
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:29:15.012 [DEBUG] [Thread-10796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:29:15.013 [DEBUG] [Thread-10796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:29:15.013 [DEBUG] [Thread-10796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:29:15.013 [DEBUG] [Thread-10796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:29:15.013 [DEBUG] [Thread-10796] [transport.py] [_log()] Compression: none
2025-12-25T11:29:15.013 [DEBUG] [Thread-10796] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:29:15.072 [DEBUG] [Thread-10796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:29:15.072 [DEBUG] [Thread-10796] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:29:15.073 [DEBUG] [Thread-10796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:29:15.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:29:15.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:29:15.128 [DEBUG] [Thread-10796] [transport.py] [_log()] userauth is OK
2025-12-25T11:29:15.128 [DEBUG] [Thread-10796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:29:15.129 [DEBUG] [Thread-10796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:29:15.129 [DEBUG] [Thread-10796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:29:15.129 [DEBUG] [Thread-10796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:29:15.147 [INFO] [Thread-10796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:29:15.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-25T11:29:15.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:29:15.961 [DEBUG] [Thread-10796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:29:15.961 [DEBUG] [Thread-10796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:29:16.009 [DEBUG] [Thread-10796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:29:16.010 [DEBUG] [Thread-10796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:29:16.019 [DEBUG] [Thread-10796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:29:16.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:29:16.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-25T11:29:16.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:29:16.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:29:16.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:29:16.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:29:16.056 [DEBUG] [Thread-10796] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:29:25.462 [DEBUG] [Thread-10798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:40.507 [DEBUG] [Thread-10799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:46.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:29:46.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:29:46.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:29:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 29, 20), 23.75, 20.97, 0.0, 35.25, 25.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:29:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:29:20
2025-12-25T11:29:46.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:29:47.027 [DEBUG] [Thread-10800] [transport.py] [_log()] starting thread (client mode): 0xb9578580
2025-12-25T11:29:47.028 [DEBUG] [Thread-10800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:29:47.047 [DEBUG] [Thread-10800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:29:47.047 [INFO] [Thread-10800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:47.050 [DEBUG] [Thread-10800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] client lang: <none>
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] server lang: <none>
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] kex follows: False
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] Compression: none
2025-12-25T11:29:47.051 [DEBUG] [Thread-10800] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:29:47.069 [DEBUG] [Thread-10800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:29:47.070 [DEBUG] [Thread-10800] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:29:47.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:29:47.071 [DEBUG] [Thread-10800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:29:47.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:29:47.073 [DEBUG] [Thread-10800] [transport.py] [_log()] userauth is OK
2025-12-25T11:29:47.073 [DEBUG] [Thread-10800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:29:47.073 [DEBUG] [Thread-10800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:29:47.073 [DEBUG] [Thread-10800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:29:47.074 [DEBUG] [Thread-10800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:29:47.097 [INFO] [Thread-10800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:29:47.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:29:47.738 [DEBUG] [Thread-10800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:29:47.738 [DEBUG] [Thread-10800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:29:47.738 [DEBUG] [Thread-10800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:29:47.780 [DEBUG] [Thread-10800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:29:47.780 [DEBUG] [Thread-10800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:29:47.783 [DEBUG] [Thread-10800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:29:47.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:29:47.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:29:47.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:29:47.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:29:47.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:29:47.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:29:47.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:29:47.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:29:47.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:29:47.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.395201 -999.00  +24.10  32.26     26   +3.50 1 1 2 1 1   888    0 21.76 136.73 ----- 32.3 32.3 316.0 41.3 30.3 -23.4 29.5 -23.5 28.6 -24.1 29.3 -21.9
2025-12-25T11:29:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:29:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:29:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.395201
2025-12-25T11:29:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:29:47.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:29:47.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:29:47.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:29:47.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:29:47.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:29:20', tmtdew=23.75, humidity=20.97, cloud=0.0, wind=35.25, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:29:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:29:47.807 [DEBUG] [Thread-10800] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:29:47.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-25T11:29:47.901 [DEBUG] [Thread-10803] [transport.py] [_log()] starting thread (client mode): 0xb957a830
2025-12-25T11:29:47.901 [DEBUG] [Thread-10803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:29:47.917 [DEBUG] [Thread-10803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:29:47.917 [INFO] [Thread-10803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:29:47.924 [DEBUG] [Thread-10803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] client lang: <none>
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] server lang: <none>
2025-12-25T11:29:47.925 [DEBUG] [Thread-10803] [transport.py] [_log()] kex follows: False
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] Compression: none
2025-12-25T11:29:47.926 [DEBUG] [Thread-10803] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:29:47.984 [DEBUG] [Thread-10803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:29:47.984 [DEBUG] [Thread-10803] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:29:47.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:29:47.985 [DEBUG] [Thread-10803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:29:47.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:29:48.044 [DEBUG] [Thread-10803] [transport.py] [_log()] userauth is OK
2025-12-25T11:29:48.044 [DEBUG] [Thread-10803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:29:48.045 [DEBUG] [Thread-10803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:29:48.045 [DEBUG] [Thread-10803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:29:48.045 [DEBUG] [Thread-10803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:29:48.065 [INFO] [Thread-10803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:29:48.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-25T11:29:48.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:29:48.905 [DEBUG] [Thread-10803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:29:48.905 [DEBUG] [Thread-10803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:29:48.953 [DEBUG] [Thread-10803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:29:48.953 [DEBUG] [Thread-10803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:29:48.962 [DEBUG] [Thread-10803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:29:48.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:29:48.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-25T11:29:48.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-25T11:29:48.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:29:48.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:29:48.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:29:48.999 [DEBUG] [Thread-10803] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:29:55.543 [DEBUG] [Thread-10805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:29:58.763 [DEBUG] [Thread-10806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:10.598 [DEBUG] [Thread-10807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:11.392 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:11.393 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:30:19.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:30:19.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-25T11:30:19.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 29, 52), 24.32, 20.48, 0.0, 24.31, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:30:19.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:29:52
2025-12-25T11:30:19.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:30:20.005 [DEBUG] [Thread-10808] [transport.py] [_log()] starting thread (client mode): 0xb957b970
2025-12-25T11:30:20.005 [DEBUG] [Thread-10808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:30:20.025 [DEBUG] [Thread-10808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:30:20.025 [INFO] [Thread-10808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] client lang: <none>
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] server lang: <none>
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] kex follows: False
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] Compression: none
2025-12-25T11:30:20.028 [DEBUG] [Thread-10808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:30:20.044 [DEBUG] [Thread-10808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:30:20.044 [DEBUG] [Thread-10808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:30:20.045 [DEBUG] [Thread-10808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:30:20.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:30:20.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:30:20.046 [DEBUG] [Thread-10808] [transport.py] [_log()] userauth is OK
2025-12-25T11:30:20.047 [DEBUG] [Thread-10808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:30:20.047 [DEBUG] [Thread-10808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:30:20.047 [DEBUG] [Thread-10808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:30:20.047 [DEBUG] [Thread-10808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:30:20.068 [INFO] [Thread-10808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:30:20.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:30:20.722 [DEBUG] [Thread-10808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:30:20.722 [DEBUG] [Thread-10808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:30:20.722 [DEBUG] [Thread-10808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:30:20.762 [DEBUG] [Thread-10808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:30:20.763 [DEBUG] [Thread-10808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:30:20.765 [DEBUG] [Thread-10808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:30:20.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:30:20.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:30:20.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:30:20.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:30:20.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:30:20.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:30:20.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:30:20.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:30:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:30:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.395549 -999.00  +24.20  27.95     27   +4.00 1 2 1 1 1   888    0 22.50 160.27 ----- 27.9 27.9 323.6 39.5 30.4 -22.0 29.7 -22.3 28.9 -20.3 29.5 -20.8
2025-12-25T11:30:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:30:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:30:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.395549
2025-12-25T11:30:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:30:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:30:20.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:30:20.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:30:20.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:30:20.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:29:52', tmtdew=24.32, humidity=20.48, cloud=0.0, wind=24.31, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:29:35.434', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:30:20.787 [DEBUG] [Thread-10808] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:30:20.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-25T11:30:20.881 [DEBUG] [Thread-10811] [transport.py] [_log()] starting thread (client mode): 0xb6b2a3b0
2025-12-25T11:30:20.881 [DEBUG] [Thread-10811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:30:20.898 [DEBUG] [Thread-10811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:30:20.898 [INFO] [Thread-10811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:30:20.905 [DEBUG] [Thread-10811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:30:20.906 [DEBUG] [Thread-10811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] client lang: <none>
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] server lang: <none>
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] kex follows: False
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:30:20.907 [DEBUG] [Thread-10811] [transport.py] [_log()] Compression: none
2025-12-25T11:30:20.908 [DEBUG] [Thread-10811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:30:20.963 [DEBUG] [Thread-10811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:30:20.963 [DEBUG] [Thread-10811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:30:20.963 [DEBUG] [Thread-10811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:30:20.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:30:20.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:30:21.021 [DEBUG] [Thread-10811] [transport.py] [_log()] userauth is OK
2025-12-25T11:30:21.021 [DEBUG] [Thread-10811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:30:21.021 [DEBUG] [Thread-10811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:30:21.021 [DEBUG] [Thread-10811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:30:21.021 [DEBUG] [Thread-10811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:30:21.040 [INFO] [Thread-10811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:30:21.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:30:21.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:30:21.922 [DEBUG] [Thread-10811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:30:21.922 [DEBUG] [Thread-10811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:30:21.970 [DEBUG] [Thread-10811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:30:21.971 [DEBUG] [Thread-10811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:30:21.979 [DEBUG] [Thread-10811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:30:21.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:30:21.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-25T11:30:21.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-25T11:30:22.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:30:22.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:30:22.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:30:22.013 [DEBUG] [Thread-10811] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:30:25.627 [DEBUG] [Thread-10813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:40.672 [DEBUG] [Thread-10814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:52.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:30:52.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:30:52.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-25T11:30:52.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 30, 25), 23.92, 21.01, 0.0, 22.96, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:30:52.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:30:25
2025-12-25T11:30:52.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:30:53.000 [DEBUG] [Thread-10815] [transport.py] [_log()] starting thread (client mode): 0xb6b2bbb0
2025-12-25T11:30:53.000 [DEBUG] [Thread-10815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:30:53.021 [DEBUG] [Thread-10815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:30:53.021 [INFO] [Thread-10815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] client lang: <none>
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] server lang: <none>
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] kex follows: False
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:30:53.024 [DEBUG] [Thread-10815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:30:53.025 [DEBUG] [Thread-10815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:30:53.025 [DEBUG] [Thread-10815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:30:53.025 [DEBUG] [Thread-10815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:30:53.025 [DEBUG] [Thread-10815] [transport.py] [_log()] Compression: none
2025-12-25T11:30:53.025 [DEBUG] [Thread-10815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:30:53.044 [DEBUG] [Thread-10815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:30:53.045 [DEBUG] [Thread-10815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:30:53.045 [DEBUG] [Thread-10815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:30:53.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:30:53.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:30:53.048 [DEBUG] [Thread-10815] [transport.py] [_log()] userauth is OK
2025-12-25T11:30:53.048 [DEBUG] [Thread-10815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:30:53.048 [DEBUG] [Thread-10815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:30:53.048 [DEBUG] [Thread-10815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:30:53.048 [DEBUG] [Thread-10815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:30:53.073 [INFO] [Thread-10815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:30:53.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:30:53.718 [DEBUG] [Thread-10815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:30:53.718 [DEBUG] [Thread-10815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:30:53.718 [DEBUG] [Thread-10815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:30:53.759 [DEBUG] [Thread-10815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:30:53.759 [DEBUG] [Thread-10815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:30:53.763 [DEBUG] [Thread-10815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:30:53.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:30:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:30:53.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:30:53.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:30:53.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:30:53.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:30:53.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:30:53.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:30:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:30:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.395896 -999.00  +24.60  19.32     27   +4.60 1 2 1 1 1   888    0 23.22 182.71 ----- 19.3 19.3 330.6 27.2 30.5 -21.8 29.8 -22.6 29.0 -20.9 29.6 -21.0
2025-12-25T11:30:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:30:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:30:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.395896
2025-12-25T11:30:53.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:30:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:30:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:30:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:30:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:30:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:30:25', tmtdew=23.92, humidity=21.01, cloud=0.0, wind=22.96, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:30:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:30:53.791 [DEBUG] [Thread-10815] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:30:53.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-25T11:30:53.885 [DEBUG] [Thread-10818] [transport.py] [_log()] starting thread (client mode): 0xb9579450
2025-12-25T11:30:53.885 [DEBUG] [Thread-10818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:30:53.899 [DEBUG] [Thread-10818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:30:53.899 [INFO] [Thread-10818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:30:53.907 [DEBUG] [Thread-10818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:30:53.907 [DEBUG] [Thread-10818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:30:53.907 [DEBUG] [Thread-10818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:30:53.907 [DEBUG] [Thread-10818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:53.907 [DEBUG] [Thread-10818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] client lang: <none>
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] server lang: <none>
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] kex follows: False
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] Compression: none
2025-12-25T11:30:53.908 [DEBUG] [Thread-10818] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:30:53.966 [DEBUG] [Thread-10818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:30:53.967 [DEBUG] [Thread-10818] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:30:53.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:30:53.968 [DEBUG] [Thread-10818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:30:53.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:30:54.022 [DEBUG] [Thread-10818] [transport.py] [_log()] userauth is OK
2025-12-25T11:30:54.022 [DEBUG] [Thread-10818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:30:54.022 [DEBUG] [Thread-10818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:30:54.022 [DEBUG] [Thread-10818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:30:54.022 [DEBUG] [Thread-10818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:30:54.048 [INFO] [Thread-10818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:30:54.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:30:54.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:30:54.862 [DEBUG] [Thread-10818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:30:54.862 [DEBUG] [Thread-10818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:30:54.910 [DEBUG] [Thread-10818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:30:54.910 [DEBUG] [Thread-10818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:30:54.919 [DEBUG] [Thread-10818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:30:54.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:30:54.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-25T11:30:54.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:30:54.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:30:54.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:30:54.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:30:54.957 [DEBUG] [Thread-10818] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:30:55.703 [DEBUG] [Thread-10820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:30:58.811 [DEBUG] [Thread-10821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:10.751 [DEBUG] [Thread-10822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:11.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:11.535 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:31:24.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:31:24.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-25T11:31:25.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 30, 57), 23.52, 21.53, 0.0, 19.69, 24.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:31:25.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:30:57
2025-12-25T11:31:25.785 [DEBUG] [Thread-10823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:31:26.012 [DEBUG] [Thread-10824] [transport.py] [_log()] starting thread (client mode): 0xb9579510
2025-12-25T11:31:26.012 [DEBUG] [Thread-10824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:31:26.032 [DEBUG] [Thread-10824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:31:26.032 [INFO] [Thread-10824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] client lang: <none>
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] server lang: <none>
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] kex follows: False
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] Compression: none
2025-12-25T11:31:26.035 [DEBUG] [Thread-10824] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:31:26.050 [DEBUG] [Thread-10824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:31:26.051 [DEBUG] [Thread-10824] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:31:26.051 [DEBUG] [Thread-10824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:31:26.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:31:26.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:31:26.052 [DEBUG] [Thread-10824] [transport.py] [_log()] userauth is OK
2025-12-25T11:31:26.052 [DEBUG] [Thread-10824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:31:26.052 [DEBUG] [Thread-10824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:31:26.052 [DEBUG] [Thread-10824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:31:26.052 [DEBUG] [Thread-10824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:31:26.064 [INFO] [Thread-10824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:31:26.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:31:26.685 [DEBUG] [Thread-10824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:31:26.685 [DEBUG] [Thread-10824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:31:26.685 [DEBUG] [Thread-10824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:31:26.726 [DEBUG] [Thread-10824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:31:26.726 [DEBUG] [Thread-10824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:31:26.728 [DEBUG] [Thread-10824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:31:26.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:31:26.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:31:26.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:31:26.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:31:26.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:31:26.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:31:26.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:31:26.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.396243 -999.00  +24.70  20.79     27   +4.90 1 1 1 1 1   888    0 24.11 203.70 ----- 20.8 20.8 6.2 32.7 30.6 -23.7 29.7 -25.0 29.1 -22.2 29.4 -22.2
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.396243
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:31:26.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:30:57', tmtdew=23.52, humidity=21.53, cloud=0.0, wind=19.69, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:30:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:31:26.748 [DEBUG] [Thread-10824] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:31:26.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-25T11:31:26.831 [DEBUG] [Thread-10827] [transport.py] [_log()] starting thread (client mode): 0xb9578bb0
2025-12-25T11:31:26.831 [DEBUG] [Thread-10827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:31:26.845 [DEBUG] [Thread-10827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:31:26.845 [INFO] [Thread-10827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] client lang: <none>
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] server lang: <none>
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] kex follows: False
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] Compression: none
2025-12-25T11:31:26.853 [DEBUG] [Thread-10827] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:31:26.909 [DEBUG] [Thread-10827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:31:26.909 [DEBUG] [Thread-10827] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:31:26.909 [DEBUG] [Thread-10827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:31:26.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:31:26.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:31:26.966 [DEBUG] [Thread-10827] [transport.py] [_log()] userauth is OK
2025-12-25T11:31:26.966 [DEBUG] [Thread-10827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:31:26.966 [DEBUG] [Thread-10827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:31:26.966 [DEBUG] [Thread-10827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:31:26.966 [DEBUG] [Thread-10827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:31:26.980 [INFO] [Thread-10827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:31:26.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:31:26.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:31:27.822 [DEBUG] [Thread-10827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:31:27.822 [DEBUG] [Thread-10827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:31:27.871 [DEBUG] [Thread-10827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:31:27.871 [DEBUG] [Thread-10827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:31:27.879 [DEBUG] [Thread-10827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:31:27.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:31:27.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-25T11:31:27.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-25T11:31:27.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:31:27.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:31:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:31:27.911 [DEBUG] [Thread-10827] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:31:40.818 [DEBUG] [Thread-10829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:55.868 [DEBUG] [Thread-10830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:31:57.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:31:57.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-25T11:31:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 31, 29), 23.36, 21.74, 0.0, 15.94, 24.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:31:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:31:29
2025-12-25T11:31:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:31:58.838 [DEBUG] [Thread-10831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:31:58.919 [DEBUG] [Thread-10832] [transport.py] [_log()] starting thread (client mode): 0xb957b910
2025-12-25T11:31:58.919 [DEBUG] [Thread-10832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:31:58.939 [DEBUG] [Thread-10832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:31:58.939 [INFO] [Thread-10832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] client lang: <none>
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] server lang: <none>
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] kex follows: False
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:31:58.942 [DEBUG] [Thread-10832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:31:58.943 [DEBUG] [Thread-10832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:31:58.943 [DEBUG] [Thread-10832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:31:58.943 [DEBUG] [Thread-10832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:31:58.943 [DEBUG] [Thread-10832] [transport.py] [_log()] Compression: none
2025-12-25T11:31:58.943 [DEBUG] [Thread-10832] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:31:58.961 [DEBUG] [Thread-10832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:31:58.962 [DEBUG] [Thread-10832] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:31:58.962 [DEBUG] [Thread-10832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:31:58.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:31:58.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:31:58.964 [DEBUG] [Thread-10832] [transport.py] [_log()] userauth is OK
2025-12-25T11:31:58.965 [DEBUG] [Thread-10832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:31:58.965 [DEBUG] [Thread-10832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:31:58.965 [DEBUG] [Thread-10832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:31:58.965 [DEBUG] [Thread-10832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:31:58.998 [INFO] [Thread-10832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:31:58.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:31:59.587 [DEBUG] [Thread-10832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:31:59.588 [DEBUG] [Thread-10832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:31:59.588 [DEBUG] [Thread-10832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:31:59.629 [DEBUG] [Thread-10832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:31:59.629 [DEBUG] [Thread-10832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:31:59.632 [DEBUG] [Thread-10832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:31:59.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:31:59.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:31:59.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:31:59.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:31:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:31:59.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:31:59.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:31:59.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:31:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:31:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.396590 -999.00  +24.60  23.13     28   +4.90 1 2 1 1 1   888    0 24.57 215.01 ----- 23.1 23.1 51.8 29.9 30.5 -23.4 29.6 -23.3 29.0 -21.2 29.4 -22.0
2025-12-25T11:31:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:31:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:31:59.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.396590
2025-12-25T11:31:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:31:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:31:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:31:59.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:31:59.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:31:59.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:31:29', tmtdew=23.36, humidity=21.74, cloud=0.0, wind=15.94, temperature=24.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:31:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:31:59.658 [DEBUG] [Thread-10832] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:31:59.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-25T11:31:59.754 [DEBUG] [Thread-10835] [transport.py] [_log()] starting thread (client mode): 0xb9578520
2025-12-25T11:31:59.754 [DEBUG] [Thread-10835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:31:59.769 [DEBUG] [Thread-10835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:31:59.769 [INFO] [Thread-10835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] client lang: <none>
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] server lang: <none>
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] kex follows: False
2025-12-25T11:31:59.777 [DEBUG] [Thread-10835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:31:59.778 [DEBUG] [Thread-10835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:31:59.778 [DEBUG] [Thread-10835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:31:59.778 [DEBUG] [Thread-10835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:31:59.778 [DEBUG] [Thread-10835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:31:59.778 [DEBUG] [Thread-10835] [transport.py] [_log()] Compression: none
2025-12-25T11:31:59.778 [DEBUG] [Thread-10835] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:31:59.835 [DEBUG] [Thread-10835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:31:59.836 [DEBUG] [Thread-10835] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:31:59.836 [DEBUG] [Thread-10835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:31:59.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:31:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:31:59.892 [DEBUG] [Thread-10835] [transport.py] [_log()] userauth is OK
2025-12-25T11:31:59.892 [DEBUG] [Thread-10835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:31:59.893 [DEBUG] [Thread-10835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:31:59.893 [DEBUG] [Thread-10835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:31:59.893 [DEBUG] [Thread-10835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:31:59.911 [INFO] [Thread-10835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:31:59.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-25T11:31:59.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:32:00.728 [DEBUG] [Thread-10835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:32:00.729 [DEBUG] [Thread-10835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:32:00.777 [DEBUG] [Thread-10835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:32:00.777 [DEBUG] [Thread-10835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:32:00.786 [DEBUG] [Thread-10835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:32:00.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:32:00.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-25T11:32:00.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-25T11:32:00.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:32:00.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:32:00.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:32:00.825 [DEBUG] [Thread-10835] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:32:10.902 [DEBUG] [Thread-10837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:32:11.675 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:32:11.677 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:32:25.952 [DEBUG] [Thread-10838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:32:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:32:30.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:32:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:32:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 32, 1), 22.83, 22.49, 0.0, 22.32, 24.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:32:31.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:32:01
2025-12-25T11:32:31.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:32:31.823 [DEBUG] [Thread-10839] [transport.py] [_log()] starting thread (client mode): 0xb6b2ba30
2025-12-25T11:32:31.823 [DEBUG] [Thread-10839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:32:31.842 [DEBUG] [Thread-10839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:32:31.842 [INFO] [Thread-10839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:32:31.845 [DEBUG] [Thread-10839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] client lang: <none>
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] server lang: <none>
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] kex follows: False
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:32:31.846 [DEBUG] [Thread-10839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:32:31.847 [DEBUG] [Thread-10839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:32:31.847 [DEBUG] [Thread-10839] [transport.py] [_log()] Compression: none
2025-12-25T11:32:31.847 [DEBUG] [Thread-10839] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:32:31.866 [DEBUG] [Thread-10839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:32:31.867 [DEBUG] [Thread-10839] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:32:31.867 [DEBUG] [Thread-10839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:32:31.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:32:31.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:32:31.908 [DEBUG] [Thread-10839] [transport.py] [_log()] userauth is OK
2025-12-25T11:32:31.908 [DEBUG] [Thread-10839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:32:31.909 [DEBUG] [Thread-10839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:32:31.909 [DEBUG] [Thread-10839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:32:31.909 [DEBUG] [Thread-10839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:32:31.940 [INFO] [Thread-10839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:32:31.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:32:32.572 [DEBUG] [Thread-10839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:32:32.573 [DEBUG] [Thread-10839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:32:32.573 [DEBUG] [Thread-10839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:32:32.614 [DEBUG] [Thread-10839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:32:32.614 [DEBUG] [Thread-10839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:32:32.618 [DEBUG] [Thread-10839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:32:32.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:32:32.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:32:32.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:32:32.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:32:32.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:32:32.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:32:32.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:32:32.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:32:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:32:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.396937 -999.00  +24.50  11.70     27   +4.70 1 2 1 1 1   888    0 25.15 231.91 ----- 11.7 11.7 311.3 25.6 30.6 -22.6 29.8 -22.7 29.0 -20.7 29.6 -20.9
2025-12-25T11:32:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:32:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:32:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.396937
2025-12-25T11:32:32.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:32:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:32:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:32:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:32:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:32:32.643 [DEBUG] [Thread-10839] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:32:32.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:32:01', tmtdew=22.83, humidity=22.49, cloud=0.0, wind=22.32, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:31:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:32:32.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-25T11:32:32.730 [DEBUG] [Thread-10842] [transport.py] [_log()] starting thread (client mode): 0xb6be2740
2025-12-25T11:32:32.730 [DEBUG] [Thread-10842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:32:32.745 [DEBUG] [Thread-10842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:32:32.745 [INFO] [Thread-10842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:32:32.753 [DEBUG] [Thread-10842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:32:32.753 [DEBUG] [Thread-10842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] client lang: <none>
2025-12-25T11:32:32.754 [DEBUG] [Thread-10842] [transport.py] [_log()] server lang: <none>
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] kex follows: False
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:32:32.755 [DEBUG] [Thread-10842] [transport.py] [_log()] Compression: none
2025-12-25T11:32:32.756 [DEBUG] [Thread-10842] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:32:32.812 [DEBUG] [Thread-10842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:32:32.812 [DEBUG] [Thread-10842] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:32:32.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:32:32.814 [DEBUG] [Thread-10842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:32:32.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:32:32.867 [DEBUG] [Thread-10842] [transport.py] [_log()] userauth is OK
2025-12-25T11:32:32.868 [DEBUG] [Thread-10842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:32:32.868 [DEBUG] [Thread-10842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:32:32.868 [DEBUG] [Thread-10842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:32:32.868 [DEBUG] [Thread-10842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:32:32.892 [INFO] [Thread-10842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:32:32.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-25T11:32:32.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:32:33.724 [DEBUG] [Thread-10842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:32:33.725 [DEBUG] [Thread-10842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:32:33.771 [DEBUG] [Thread-10842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:32:33.771 [DEBUG] [Thread-10842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:32:33.779 [DEBUG] [Thread-10842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:32:33.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:32:33.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-25T11:32:33.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:32:33.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:32:33.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:32:33.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:32:33.811 [DEBUG] [Thread-10842] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:32:40.990 [DEBUG] [Thread-10844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:32:56.039 [DEBUG] [Thread-10845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:32:58.892 [DEBUG] [Thread-10846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:33:03.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:33:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:33:04.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 32, 33), 23.95, 20.92, 0.0, 31.86, 24.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:33:04.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:32:33
2025-12-25T11:33:04.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:33:04.807 [DEBUG] [Thread-10847] [transport.py] [_log()] starting thread (client mode): 0xb6b28e50
2025-12-25T11:33:04.807 [DEBUG] [Thread-10847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:33:04.828 [DEBUG] [Thread-10847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:33:04.828 [INFO] [Thread-10847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:33:04.831 [DEBUG] [Thread-10847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:33:04.831 [DEBUG] [Thread-10847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] client lang: <none>
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] server lang: <none>
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] kex follows: False
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] Compression: none
2025-12-25T11:33:04.832 [DEBUG] [Thread-10847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:33:04.850 [DEBUG] [Thread-10847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:33:04.851 [DEBUG] [Thread-10847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:33:04.851 [DEBUG] [Thread-10847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:33:04.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:33:04.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:33:04.853 [DEBUG] [Thread-10847] [transport.py] [_log()] userauth is OK
2025-12-25T11:33:04.854 [DEBUG] [Thread-10847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:33:04.854 [DEBUG] [Thread-10847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:33:04.854 [DEBUG] [Thread-10847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:33:04.854 [DEBUG] [Thread-10847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:33:04.890 [INFO] [Thread-10847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:33:04.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:33:05.506 [DEBUG] [Thread-10847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:33:05.506 [DEBUG] [Thread-10847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:33:05.506 [DEBUG] [Thread-10847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:33:05.547 [DEBUG] [Thread-10847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:33:05.547 [DEBUG] [Thread-10847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:33:05.549 [DEBUG] [Thread-10847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:33:05.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:33:05.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:33:05.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:33:05.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:33:05.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:33:05.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:33:05.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:33:05.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:33:05.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:33:05.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.397285 -999.00  +25.10  27.50     26   +4.70 1 2 1 1 1   888    0 24.55 227.22 ----- 27.5 27.5 329.4 36.7 30.8 -22.4 30.0 -22.3 29.2 -21.4 29.8 -21.2
2025-12-25T11:33:05.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:33:05.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:33:05.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.397285
2025-12-25T11:33:05.574 [DEBUG] [Thread-10847] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:33:05.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:33:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:33:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:33:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:32:33', tmtdew=23.95, humidity=20.92, cloud=0.0, wind=31.86, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:32:05.424', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:33:05.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-25T11:33:05.677 [DEBUG] [Thread-10850] [transport.py] [_log()] starting thread (client mode): 0xb6be3580
2025-12-25T11:33:05.677 [DEBUG] [Thread-10850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:33:05.692 [DEBUG] [Thread-10850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:33:05.692 [INFO] [Thread-10850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:33:05.699 [DEBUG] [Thread-10850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:33:05.699 [DEBUG] [Thread-10850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:33:05.699 [DEBUG] [Thread-10850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:33:05.699 [DEBUG] [Thread-10850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] client lang: <none>
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] server lang: <none>
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] kex follows: False
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:33:05.700 [DEBUG] [Thread-10850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:33:05.701 [DEBUG] [Thread-10850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:33:05.701 [DEBUG] [Thread-10850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:33:05.701 [DEBUG] [Thread-10850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:33:05.701 [DEBUG] [Thread-10850] [transport.py] [_log()] Compression: none
2025-12-25T11:33:05.701 [DEBUG] [Thread-10850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:33:05.761 [DEBUG] [Thread-10850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:33:05.761 [DEBUG] [Thread-10850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:33:05.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:33:05.763 [DEBUG] [Thread-10850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:33:05.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:33:05.823 [DEBUG] [Thread-10850] [transport.py] [_log()] userauth is OK
2025-12-25T11:33:05.824 [DEBUG] [Thread-10850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:33:05.824 [DEBUG] [Thread-10850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:33:05.824 [DEBUG] [Thread-10850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:33:05.824 [DEBUG] [Thread-10850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:33:05.838 [INFO] [Thread-10850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:33:05.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-25T11:33:05.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:33:06.666 [DEBUG] [Thread-10850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:33:06.666 [DEBUG] [Thread-10850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:33:06.714 [DEBUG] [Thread-10850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:33:06.714 [DEBUG] [Thread-10850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:33:06.723 [DEBUG] [Thread-10850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:33:06.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:33:06.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:33:06.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-25T11:33:06.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:33:06.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:33:06.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:33:06.754 [DEBUG] [Thread-10850] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:33:11.074 [DEBUG] [Thread-10852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:11.820 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:11.821 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:26.120 [DEBUG] [Thread-10853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:36.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:33:36.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:33:36.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-25T11:33:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 33, 5), 24.23, 20.54, 0.0, 28.51, 24.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:33:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:33:05
2025-12-25T11:33:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:33:37.750 [DEBUG] [Thread-10854] [transport.py] [_log()] starting thread (client mode): 0xb6be0880
2025-12-25T11:33:37.750 [DEBUG] [Thread-10854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:33:37.772 [DEBUG] [Thread-10854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:33:37.772 [INFO] [Thread-10854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] client lang: <none>
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] server lang: <none>
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] kex follows: False
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:33:37.775 [DEBUG] [Thread-10854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:33:37.776 [DEBUG] [Thread-10854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:33:37.776 [DEBUG] [Thread-10854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:33:37.776 [DEBUG] [Thread-10854] [transport.py] [_log()] Compression: none
2025-12-25T11:33:37.776 [DEBUG] [Thread-10854] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:33:37.791 [DEBUG] [Thread-10854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:33:37.791 [DEBUG] [Thread-10854] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:33:37.792 [DEBUG] [Thread-10854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:33:37.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:33:37.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:33:37.793 [DEBUG] [Thread-10854] [transport.py] [_log()] userauth is OK
2025-12-25T11:33:37.793 [DEBUG] [Thread-10854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:33:37.793 [DEBUG] [Thread-10854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:33:37.793 [DEBUG] [Thread-10854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:33:37.793 [DEBUG] [Thread-10854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:33:37.809 [INFO] [Thread-10854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:33:37.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:33:38.440 [DEBUG] [Thread-10854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:33:38.440 [DEBUG] [Thread-10854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:33:38.440 [DEBUG] [Thread-10854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:33:38.482 [DEBUG] [Thread-10854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:33:38.482 [DEBUG] [Thread-10854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:33:38.484 [DEBUG] [Thread-10854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:33:38.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:33:38.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:33:38.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:33:38.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:33:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:33:38.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:33:38.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.397979 -999.00  +24.30  30.87     25   +3.50 1 1 2 1 1   888    0 25.67 249.88 ----- 30.9 30.9 327.0 45.5 30.6 -24.4 29.8 -24.6 29.1 -22.6 29.6 -22.5
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.397979
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:33:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:33:05', tmtdew=24.23, humidity=20.54, cloud=0.0, wind=28.51, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:33:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:33:38.502 [DEBUG] [Thread-10854] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:33:38.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-25T11:33:38.587 [DEBUG] [Thread-10857] [transport.py] [_log()] starting thread (client mode): 0xb6be3400
2025-12-25T11:33:38.587 [DEBUG] [Thread-10857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:33:38.602 [DEBUG] [Thread-10857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:33:38.602 [INFO] [Thread-10857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:33:38.609 [DEBUG] [Thread-10857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:33:38.609 [DEBUG] [Thread-10857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:33:38.609 [DEBUG] [Thread-10857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:33:38.609 [DEBUG] [Thread-10857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:38.609 [DEBUG] [Thread-10857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] client lang: <none>
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] server lang: <none>
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] kex follows: False
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] Compression: none
2025-12-25T11:33:38.610 [DEBUG] [Thread-10857] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:33:38.671 [DEBUG] [Thread-10857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:33:38.671 [DEBUG] [Thread-10857] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:33:38.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:33:38.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:33:38.671 [DEBUG] [Thread-10857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:33:38.728 [DEBUG] [Thread-10857] [transport.py] [_log()] userauth is OK
2025-12-25T11:33:38.728 [DEBUG] [Thread-10857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:33:38.728 [DEBUG] [Thread-10857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:33:38.728 [DEBUG] [Thread-10857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:33:38.728 [DEBUG] [Thread-10857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:33:38.746 [INFO] [Thread-10857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:33:38.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-25T11:33:38.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:33:39.620 [DEBUG] [Thread-10857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:33:39.620 [DEBUG] [Thread-10857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:33:39.669 [DEBUG] [Thread-10857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:33:39.669 [DEBUG] [Thread-10857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:33:39.677 [DEBUG] [Thread-10857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:33:39.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:33:39.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-25T11:33:39.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:33:39.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:33:39.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:33:39.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:33:39.711 [DEBUG] [Thread-10857] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:33:41.156 [DEBUG] [Thread-10859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:56.208 [DEBUG] [Thread-10860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:33:58.940 [DEBUG] [Thread-10861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:09.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:34:09.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:34:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:34:10.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 33, 37), 25.66, 18.51, 0.0, 32.98, 24.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:34:10.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:33:37
2025-12-25T11:34:10.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:34:10.788 [DEBUG] [Thread-10862] [transport.py] [_log()] starting thread (client mode): 0xb6be0430
2025-12-25T11:34:10.788 [DEBUG] [Thread-10862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:34:10.810 [DEBUG] [Thread-10862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:34:10.810 [INFO] [Thread-10862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] client lang: <none>
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] server lang: <none>
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] kex follows: False
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] Compression: none
2025-12-25T11:34:10.812 [DEBUG] [Thread-10862] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:34:10.822 [DEBUG] [Thread-10862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:34:10.822 [DEBUG] [Thread-10862] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:34:10.822 [DEBUG] [Thread-10862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:34:10.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:34:10.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:34:10.823 [DEBUG] [Thread-10862] [transport.py] [_log()] userauth is OK
2025-12-25T11:34:10.823 [DEBUG] [Thread-10862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:34:10.823 [DEBUG] [Thread-10862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:34:10.823 [DEBUG] [Thread-10862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:34:10.823 [DEBUG] [Thread-10862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:34:10.836 [INFO] [Thread-10862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:34:10.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:34:11.237 [DEBUG] [Thread-10864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:11.445 [DEBUG] [Thread-10862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:34:11.445 [DEBUG] [Thread-10862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:34:11.445 [DEBUG] [Thread-10862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:34:11.486 [DEBUG] [Thread-10862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:34:11.486 [DEBUG] [Thread-10862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:34:11.488 [DEBUG] [Thread-10862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:34:11.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:34:11.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:34:11.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:34:11.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:34:11.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:34:11.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:34:11.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.398326 -999.00  +24.40  24.50     24   +2.90 1 1 1 1 1   888    0 26.54 260.08 ----- 24.5 24.5 320.4 32.9 30.7 -24.3 29.9 -24.7 29.2 -22.3 29.7 -22.9
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.398326
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:34:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:33:37', tmtdew=25.66, humidity=18.51, cloud=0.0, wind=32.98, temperature=24.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:33:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:34:11.507 [DEBUG] [Thread-10862] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:34:11.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-25T11:34:11.588 [DEBUG] [Thread-10866] [transport.py] [_log()] starting thread (client mode): 0xb9579780
2025-12-25T11:34:11.588 [DEBUG] [Thread-10866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:34:11.604 [DEBUG] [Thread-10866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:34:11.604 [INFO] [Thread-10866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] client lang: <none>
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] server lang: <none>
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] kex follows: False
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] Compression: none
2025-12-25T11:34:11.612 [DEBUG] [Thread-10866] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:34:11.668 [DEBUG] [Thread-10866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:34:11.669 [DEBUG] [Thread-10866] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:34:11.669 [DEBUG] [Thread-10866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:34:11.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:34:11.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:34:11.724 [DEBUG] [Thread-10866] [transport.py] [_log()] userauth is OK
2025-12-25T11:34:11.724 [DEBUG] [Thread-10866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:34:11.724 [DEBUG] [Thread-10866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:34:11.725 [DEBUG] [Thread-10866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:34:11.725 [DEBUG] [Thread-10866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:34:11.739 [INFO] [Thread-10866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:34:11.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-25T11:34:11.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:34:11.963 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:11.964 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:12.560 [DEBUG] [Thread-10866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:34:12.560 [DEBUG] [Thread-10866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:34:12.608 [DEBUG] [Thread-10866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:34:12.608 [DEBUG] [Thread-10866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:34:12.618 [DEBUG] [Thread-10866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:34:12.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:34:12.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-25T11:34:12.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-25T11:34:12.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:34:12.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:34:12.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:34:12.656 [DEBUG] [Thread-10866] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:34:26.273 [DEBUG] [Thread-10868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:41.321 [DEBUG] [Thread-10869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:34:42.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:34:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:34:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 34, 9), 25.52, 18.7, 0.0, 29.17, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:34:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:34:09
2025-12-25T11:34:43.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:34:43.743 [DEBUG] [Thread-10870] [transport.py] [_log()] starting thread (client mode): 0xb6be13c0
2025-12-25T11:34:43.743 [DEBUG] [Thread-10870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:34:43.763 [DEBUG] [Thread-10870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:34:43.763 [INFO] [Thread-10870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:34:43.766 [DEBUG] [Thread-10870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] client lang: <none>
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] server lang: <none>
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] kex follows: False
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] Compression: none
2025-12-25T11:34:43.767 [DEBUG] [Thread-10870] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:34:43.782 [DEBUG] [Thread-10870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:34:43.783 [DEBUG] [Thread-10870] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:34:43.783 [DEBUG] [Thread-10870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:34:43.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:34:43.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:34:43.824 [DEBUG] [Thread-10870] [transport.py] [_log()] userauth is OK
2025-12-25T11:34:43.824 [DEBUG] [Thread-10870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:34:43.824 [DEBUG] [Thread-10870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:34:43.824 [DEBUG] [Thread-10870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:34:43.824 [DEBUG] [Thread-10870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:34:43.851 [INFO] [Thread-10870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:34:43.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:34:44.468 [DEBUG] [Thread-10870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:34:44.468 [DEBUG] [Thread-10870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:34:44.468 [DEBUG] [Thread-10870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:34:44.508 [DEBUG] [Thread-10870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:34:44.508 [DEBUG] [Thread-10870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:34:44.510 [DEBUG] [Thread-10870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:34:44.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:34:44.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:34:44.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:34:44.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:34:44.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:34:44.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:34:44.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:34:44.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.398674 -999.00  +24.30  27.04     24   +2.60 1 1 1 1 1   888    0 25.20 240.67 ----- 27.0 27.0 341.4 36.4 30.6 -24.4 29.7 -25.0 29.1 -23.4 29.6 -22.7
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.398674
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:34:44.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:34:09', tmtdew=25.52, humidity=18.7, cloud=0.0, wind=29.17, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:34:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:34:44.531 [DEBUG] [Thread-10870] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:34:44.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-25T11:34:44.613 [DEBUG] [Thread-10873] [transport.py] [_log()] starting thread (client mode): 0xb6be0fa0
2025-12-25T11:34:44.613 [DEBUG] [Thread-10873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:34:44.632 [DEBUG] [Thread-10873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:34:44.632 [INFO] [Thread-10873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] client lang: <none>
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] server lang: <none>
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] kex follows: False
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] Compression: none
2025-12-25T11:34:44.640 [DEBUG] [Thread-10873] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:34:44.696 [DEBUG] [Thread-10873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:34:44.696 [DEBUG] [Thread-10873] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:34:44.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:34:44.696 [DEBUG] [Thread-10873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:34:44.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:34:44.753 [DEBUG] [Thread-10873] [transport.py] [_log()] userauth is OK
2025-12-25T11:34:44.753 [DEBUG] [Thread-10873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:34:44.753 [DEBUG] [Thread-10873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:34:44.753 [DEBUG] [Thread-10873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:34:44.753 [DEBUG] [Thread-10873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:34:44.771 [INFO] [Thread-10873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:34:44.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-25T11:34:44.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:34:45.613 [DEBUG] [Thread-10873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:34:45.614 [DEBUG] [Thread-10873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:34:45.661 [DEBUG] [Thread-10873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:34:45.662 [DEBUG] [Thread-10873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:34:45.671 [DEBUG] [Thread-10873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:34:45.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:34:45.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:34:45.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-25T11:34:45.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:34:45.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:34:45.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:34:45.704 [DEBUG] [Thread-10873] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:34:56.352 [DEBUG] [Thread-10875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:34:58.988 [DEBUG] [Thread-10876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:11.407 [DEBUG] [Thread-10877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:12.112 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:12.114 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:35:15.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:35:15.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-25T11:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 34, 41), 25.82, 18.14, 0.0, 21.95, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:35:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:34:41
2025-12-25T11:35:16.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:35:16.723 [DEBUG] [Thread-10878] [transport.py] [_log()] starting thread (client mode): 0xb6b16920
2025-12-25T11:35:16.723 [DEBUG] [Thread-10878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:35:16.744 [DEBUG] [Thread-10878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:35:16.744 [INFO] [Thread-10878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] client lang: <none>
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] server lang: <none>
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] kex follows: False
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:35:16.747 [DEBUG] [Thread-10878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:35:16.748 [DEBUG] [Thread-10878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:35:16.748 [DEBUG] [Thread-10878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:35:16.748 [DEBUG] [Thread-10878] [transport.py] [_log()] Compression: none
2025-12-25T11:35:16.748 [DEBUG] [Thread-10878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:35:16.766 [DEBUG] [Thread-10878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:35:16.766 [DEBUG] [Thread-10878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:35:16.767 [DEBUG] [Thread-10878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:35:16.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:35:16.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:35:16.769 [DEBUG] [Thread-10878] [transport.py] [_log()] userauth is OK
2025-12-25T11:35:16.769 [DEBUG] [Thread-10878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:35:16.769 [DEBUG] [Thread-10878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:35:16.769 [DEBUG] [Thread-10878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:35:16.770 [DEBUG] [Thread-10878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:35:16.796 [INFO] [Thread-10878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:35:16.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:35:17.452 [DEBUG] [Thread-10878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:35:17.453 [DEBUG] [Thread-10878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:35:17.453 [DEBUG] [Thread-10878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:35:17.493 [DEBUG] [Thread-10878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:35:17.493 [DEBUG] [Thread-10878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:35:17.497 [DEBUG] [Thread-10878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:35:17.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:35:17.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:35:17.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:35:17.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:35:17.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:35:17.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:35:17.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:35:17.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:35:17.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:35:17.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.399020 -999.00  +24.50  15.70     23   +2.40 1 2 1 1 1   888    0 25.86 247.34 ----- 15.7 15.7 356.3 30.4 30.6 -23.4 29.8 -23.2 29.1 -21.4 29.8 -22.0
2025-12-25T11:35:17.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:35:17.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:35:17.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.399020
2025-12-25T11:35:17.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:35:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:35:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:35:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:35:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:35:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:34:41', tmtdew=25.82, humidity=18.14, cloud=0.0, wind=21.95, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:34:35.328', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:35:17.523 [DEBUG] [Thread-10878] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:35:17.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-25T11:35:17.616 [DEBUG] [Thread-10881] [transport.py] [_log()] starting thread (client mode): 0xb6b17a00
2025-12-25T11:35:17.617 [DEBUG] [Thread-10881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:35:17.631 [DEBUG] [Thread-10881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:35:17.632 [INFO] [Thread-10881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:35:17.639 [DEBUG] [Thread-10881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:35:17.639 [DEBUG] [Thread-10881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:35:17.639 [DEBUG] [Thread-10881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:35:17.639 [DEBUG] [Thread-10881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] client lang: <none>
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] server lang: <none>
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] kex follows: False
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] Compression: none
2025-12-25T11:35:17.640 [DEBUG] [Thread-10881] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:35:17.698 [DEBUG] [Thread-10881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:35:17.698 [DEBUG] [Thread-10881] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:35:17.699 [DEBUG] [Thread-10881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:35:17.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:35:17.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:35:17.754 [DEBUG] [Thread-10881] [transport.py] [_log()] userauth is OK
2025-12-25T11:35:17.754 [DEBUG] [Thread-10881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:35:17.754 [DEBUG] [Thread-10881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:35:17.754 [DEBUG] [Thread-10881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:35:17.754 [DEBUG] [Thread-10881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:35:17.778 [INFO] [Thread-10881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:35:17.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-25T11:35:17.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:35:18.587 [DEBUG] [Thread-10881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:35:18.587 [DEBUG] [Thread-10881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:35:18.635 [DEBUG] [Thread-10881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:35:18.635 [DEBUG] [Thread-10881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:35:18.643 [DEBUG] [Thread-10881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:35:18.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:35:18.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:35:18.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-25T11:35:18.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:35:18.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:35:18.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:35:18.675 [DEBUG] [Thread-10881] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:35:26.438 [DEBUG] [Thread-10883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:41.494 [DEBUG] [Thread-10884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:48.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:35:48.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:35:48.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-25T11:35:49.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 35, 45), 26.86, 16.63, 0.0, 20.89, 24.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:35:49.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:35:45
2025-12-25T11:35:49.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:35:49.679 [DEBUG] [Thread-10885] [transport.py] [_log()] starting thread (client mode): 0xb6b15ea0
2025-12-25T11:35:49.679 [DEBUG] [Thread-10885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:35:49.700 [DEBUG] [Thread-10885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:35:49.701 [INFO] [Thread-10885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:35:49.704 [DEBUG] [Thread-10885] [transport.py] [_log()] client lang: <none>
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] server lang: <none>
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] kex follows: False
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] Compression: none
2025-12-25T11:35:49.705 [DEBUG] [Thread-10885] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:35:49.719 [DEBUG] [Thread-10885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:35:49.720 [DEBUG] [Thread-10885] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:35:49.721 [DEBUG] [Thread-10885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:35:49.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:35:49.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:35:49.722 [DEBUG] [Thread-10885] [transport.py] [_log()] userauth is OK
2025-12-25T11:35:49.723 [DEBUG] [Thread-10885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:35:49.723 [DEBUG] [Thread-10885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:35:49.723 [DEBUG] [Thread-10885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:35:49.723 [DEBUG] [Thread-10885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:35:49.757 [INFO] [Thread-10885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:35:49.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:35:50.399 [DEBUG] [Thread-10885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:35:50.399 [DEBUG] [Thread-10885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:35:50.400 [DEBUG] [Thread-10885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:35:50.440 [DEBUG] [Thread-10885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:35:50.440 [DEBUG] [Thread-10885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:35:50.444 [DEBUG] [Thread-10885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:35:50.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:35:50.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:35:50.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:35:50.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:35:50.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:35:50.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:35:50.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:35:50.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:35:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:35:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.399368 -999.00  +25.40  17.09     22   +2.40 1 2 1 1 1   888    0 26.29 263.39 ----- 17.1 17.1 331.2 23.5 30.9 -23.5 30.1 -23.3 29.4 -21.2 30.0 -22.0
2025-12-25T11:35:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:35:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:35:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.399368
2025-12-25T11:35:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:35:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:35:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:35:50.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:35:50.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:35:50.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:35:45', tmtdew=26.86, humidity=16.63, cloud=0.0, wind=20.89, temperature=24.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:35:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:35:50.469 [DEBUG] [Thread-10885] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:35:50.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:35:50.562 [DEBUG] [Thread-10888] [transport.py] [_log()] starting thread (client mode): 0xb6be17e0
2025-12-25T11:35:50.563 [DEBUG] [Thread-10888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:35:50.578 [DEBUG] [Thread-10888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:35:50.578 [INFO] [Thread-10888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:35:50.586 [DEBUG] [Thread-10888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:35:50.586 [DEBUG] [Thread-10888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:35:50.586 [DEBUG] [Thread-10888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:35:50.586 [DEBUG] [Thread-10888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:50.586 [DEBUG] [Thread-10888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] client lang: <none>
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] server lang: <none>
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] kex follows: False
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:35:50.587 [DEBUG] [Thread-10888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:35:50.588 [DEBUG] [Thread-10888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:35:50.588 [DEBUG] [Thread-10888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:35:50.588 [DEBUG] [Thread-10888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:35:50.588 [DEBUG] [Thread-10888] [transport.py] [_log()] Compression: none
2025-12-25T11:35:50.588 [DEBUG] [Thread-10888] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:35:50.652 [DEBUG] [Thread-10888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:35:50.652 [DEBUG] [Thread-10888] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:35:50.653 [DEBUG] [Thread-10888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:35:50.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:35:50.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:35:50.715 [DEBUG] [Thread-10888] [transport.py] [_log()] userauth is OK
2025-12-25T11:35:50.715 [DEBUG] [Thread-10888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:35:50.716 [DEBUG] [Thread-10888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:35:50.716 [DEBUG] [Thread-10888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:35:50.716 [DEBUG] [Thread-10888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:35:50.736 [INFO] [Thread-10888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:35:50.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-25T11:35:50.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:35:51.573 [DEBUG] [Thread-10888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:35:51.573 [DEBUG] [Thread-10888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:35:51.621 [DEBUG] [Thread-10888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:35:51.621 [DEBUG] [Thread-10888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:35:51.630 [DEBUG] [Thread-10888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:35:51.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:35:51.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-25T11:35:51.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:35:51.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:35:51.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:35:51.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:35:51.667 [DEBUG] [Thread-10888] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:35:56.532 [DEBUG] [Thread-10890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:35:59.042 [DEBUG] [Thread-10891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:11.585 [DEBUG] [Thread-10892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:12.256 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:12.257 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:21.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:36:21.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:36:21.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-25T11:36:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 36, 17), 26.94, 16.53, 0.0, 19.34, 24.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:36:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:36:17
2025-12-25T11:36:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:36:22.673 [DEBUG] [Thread-10893] [transport.py] [_log()] starting thread (client mode): 0xb6b16320
2025-12-25T11:36:22.673 [DEBUG] [Thread-10893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:36:22.694 [DEBUG] [Thread-10893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:36:22.694 [INFO] [Thread-10893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:36:22.697 [DEBUG] [Thread-10893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:36:22.697 [DEBUG] [Thread-10893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:36:22.697 [DEBUG] [Thread-10893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:36:22.697 [DEBUG] [Thread-10893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:22.697 [DEBUG] [Thread-10893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:22.697 [DEBUG] [Thread-10893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] client lang: <none>
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] server lang: <none>
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] kex follows: False
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] Compression: none
2025-12-25T11:36:22.698 [DEBUG] [Thread-10893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:36:22.715 [DEBUG] [Thread-10893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:36:22.715 [DEBUG] [Thread-10893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:36:22.716 [DEBUG] [Thread-10893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:36:22.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:36:22.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:36:22.718 [DEBUG] [Thread-10893] [transport.py] [_log()] userauth is OK
2025-12-25T11:36:22.718 [DEBUG] [Thread-10893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:36:22.718 [DEBUG] [Thread-10893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:36:22.719 [DEBUG] [Thread-10893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:36:22.719 [DEBUG] [Thread-10893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:36:22.743 [INFO] [Thread-10893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:36:22.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:36:23.387 [DEBUG] [Thread-10893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:36:23.387 [DEBUG] [Thread-10893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:36:23.387 [DEBUG] [Thread-10893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:36:23.428 [DEBUG] [Thread-10893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:36:23.428 [DEBUG] [Thread-10893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:36:23.431 [DEBUG] [Thread-10893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:36:23.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:36:23.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:36:23.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:36:23.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:36:23.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:36:23.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:36:23.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:36:23.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:36:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:36:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.399715 -999.00  +25.60  15.72     21   +2.10 1 2 1 1 1   888    0 26.78 266.73 ----- 15.7 15.7 304.0 21.3 31.1 -23.1 30.2 -23.1 29.5 -21.3 30.1 -22.2
2025-12-25T11:36:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:36:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:36:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.399715
2025-12-25T11:36:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:36:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:36:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:36:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:36:23.460 [DEBUG] [Thread-10893] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:36:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:36:23.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:36:17', tmtdew=26.94, humidity=16.53, cloud=0.0, wind=19.34, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:35:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:36:23.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-25T11:36:23.555 [DEBUG] [Thread-10896] [transport.py] [_log()] starting thread (client mode): 0xb6b140a0
2025-12-25T11:36:23.556 [DEBUG] [Thread-10896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:36:23.570 [DEBUG] [Thread-10896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:36:23.570 [INFO] [Thread-10896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] client lang: <none>
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] server lang: <none>
2025-12-25T11:36:23.578 [DEBUG] [Thread-10896] [transport.py] [_log()] kex follows: False
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] Compression: none
2025-12-25T11:36:23.579 [DEBUG] [Thread-10896] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:36:23.635 [DEBUG] [Thread-10896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:36:23.636 [DEBUG] [Thread-10896] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:36:23.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:36:23.637 [DEBUG] [Thread-10896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:36:23.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:36:23.691 [DEBUG] [Thread-10896] [transport.py] [_log()] userauth is OK
2025-12-25T11:36:23.691 [DEBUG] [Thread-10896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:36:23.691 [DEBUG] [Thread-10896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:36:23.692 [DEBUG] [Thread-10896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:36:23.692 [DEBUG] [Thread-10896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:36:23.710 [INFO] [Thread-10896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:36:23.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-25T11:36:23.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:36:24.545 [DEBUG] [Thread-10896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:36:24.546 [DEBUG] [Thread-10896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:36:24.594 [DEBUG] [Thread-10896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:36:24.594 [DEBUG] [Thread-10896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:36:24.603 [DEBUG] [Thread-10896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:36:24.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:36:24.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-25T11:36:24.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:36:24.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:36:24.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:36:24.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:36:24.640 [DEBUG] [Thread-10896] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:36:26.620 [DEBUG] [Thread-10898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:41.678 [DEBUG] [Thread-10899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:54.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:36:54.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:36:54.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-25T11:36:55.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 36, 49), 25.94, 17.81, 0.0, 17.75, 24.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:36:55.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:36:49
2025-12-25T11:36:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:36:55.648 [DEBUG] [Thread-10900] [transport.py] [_log()] starting thread (client mode): 0xb957beb0
2025-12-25T11:36:55.648 [DEBUG] [Thread-10900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:36:55.668 [DEBUG] [Thread-10900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:36:55.668 [INFO] [Thread-10900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:36:55.671 [DEBUG] [Thread-10900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:36:55.671 [DEBUG] [Thread-10900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] client lang: <none>
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] server lang: <none>
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] kex follows: False
2025-12-25T11:36:55.672 [DEBUG] [Thread-10900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:36:55.673 [DEBUG] [Thread-10900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:36:55.673 [DEBUG] [Thread-10900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:36:55.673 [DEBUG] [Thread-10900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:36:55.673 [DEBUG] [Thread-10900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:36:55.673 [DEBUG] [Thread-10900] [transport.py] [_log()] Compression: none
2025-12-25T11:36:55.673 [DEBUG] [Thread-10900] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:36:55.692 [DEBUG] [Thread-10900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:36:55.693 [DEBUG] [Thread-10900] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:36:55.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:36:55.694 [DEBUG] [Thread-10900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:36:55.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:36:55.697 [DEBUG] [Thread-10900] [transport.py] [_log()] userauth is OK
2025-12-25T11:36:55.697 [DEBUG] [Thread-10900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:36:55.697 [DEBUG] [Thread-10900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:36:55.697 [DEBUG] [Thread-10900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:36:55.697 [DEBUG] [Thread-10900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:36:55.730 [INFO] [Thread-10900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:36:55.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:36:56.371 [DEBUG] [Thread-10900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:36:56.371 [DEBUG] [Thread-10900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:36:56.372 [DEBUG] [Thread-10900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:36:56.412 [DEBUG] [Thread-10900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:36:56.412 [DEBUG] [Thread-10900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:36:56.416 [DEBUG] [Thread-10900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:36:56.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:36:56.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:36:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:36:56.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:36:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:36:56.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:36:56.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:36:56.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:36:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:36:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.400062 -999.00  +25.30  19.68     22   +2.20 1 2 1 1 1   888    0 27.14 280.33 ----- 19.7 19.7 298.8 23.3 31.3 -23.7 30.4 -23.7 29.6 -22.3 30.2 -23.2
2025-12-25T11:36:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:36:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:36:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.400062
2025-12-25T11:36:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:36:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:36:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:36:56.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:36:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:36:56.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:36:49', tmtdew=25.94, humidity=17.81, cloud=0.0, wind=17.75, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:36:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:36:56.442 [DEBUG] [Thread-10900] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:36:56.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-25T11:36:56.532 [DEBUG] [Thread-10903] [transport.py] [_log()] starting thread (client mode): 0xb6b14700
2025-12-25T11:36:56.532 [DEBUG] [Thread-10903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:36:56.547 [DEBUG] [Thread-10903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:36:56.548 [INFO] [Thread-10903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:36:56.555 [DEBUG] [Thread-10903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] client lang: <none>
2025-12-25T11:36:56.556 [DEBUG] [Thread-10903] [transport.py] [_log()] server lang: <none>
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] kex follows: False
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] Compression: none
2025-12-25T11:36:56.557 [DEBUG] [Thread-10903] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:36:56.616 [DEBUG] [Thread-10903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:36:56.616 [DEBUG] [Thread-10903] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:36:56.617 [DEBUG] [Thread-10903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:36:56.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:36:56.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:36:56.674 [DEBUG] [Thread-10903] [transport.py] [_log()] userauth is OK
2025-12-25T11:36:56.674 [DEBUG] [Thread-10903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:36:56.674 [DEBUG] [Thread-10903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:36:56.674 [DEBUG] [Thread-10903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:36:56.674 [DEBUG] [Thread-10903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:36:56.693 [INFO] [Thread-10903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:36:56.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-25T11:36:56.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:36:56.708 [DEBUG] [Thread-10905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:36:57.527 [DEBUG] [Thread-10903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:36:57.527 [DEBUG] [Thread-10903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:36:57.577 [DEBUG] [Thread-10903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:36:57.577 [DEBUG] [Thread-10903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:36:57.589 [DEBUG] [Thread-10903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:36:57.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:36:57.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-25T11:36:57.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:36:57.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:36:57.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:36:57.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:36:57.625 [DEBUG] [Thread-10903] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:36:59.095 [DEBUG] [Thread-10906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:11.772 [DEBUG] [Thread-10907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:12.410 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:12.411 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:26.802 [DEBUG] [Thread-10908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:27.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:37:27.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:37:27.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-25T11:37:28.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 37, 21), 25.68, 18.11, 0.0, 15.3, 24.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:37:28.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:37:21
2025-12-25T11:37:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:37:28.623 [DEBUG] [Thread-10909] [transport.py] [_log()] starting thread (client mode): 0xb6b156c0
2025-12-25T11:37:28.623 [DEBUG] [Thread-10909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:37:28.643 [DEBUG] [Thread-10909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:37:28.643 [INFO] [Thread-10909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] client lang: <none>
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] server lang: <none>
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] kex follows: False
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:37:28.647 [DEBUG] [Thread-10909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:37:28.648 [DEBUG] [Thread-10909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:37:28.648 [DEBUG] [Thread-10909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:37:28.648 [DEBUG] [Thread-10909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:37:28.648 [DEBUG] [Thread-10909] [transport.py] [_log()] Compression: none
2025-12-25T11:37:28.648 [DEBUG] [Thread-10909] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:37:28.666 [DEBUG] [Thread-10909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:37:28.667 [DEBUG] [Thread-10909] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:37:28.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:37:28.668 [DEBUG] [Thread-10909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:37:28.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:37:28.708 [DEBUG] [Thread-10909] [transport.py] [_log()] userauth is OK
2025-12-25T11:37:28.709 [DEBUG] [Thread-10909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:37:28.709 [DEBUG] [Thread-10909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:37:28.709 [DEBUG] [Thread-10909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:37:28.709 [DEBUG] [Thread-10909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:37:28.731 [INFO] [Thread-10909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:37:28.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:37:29.359 [DEBUG] [Thread-10909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:37:29.359 [DEBUG] [Thread-10909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:37:29.359 [DEBUG] [Thread-10909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:37:29.400 [DEBUG] [Thread-10909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:37:29.400 [DEBUG] [Thread-10909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:37:29.404 [DEBUG] [Thread-10909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:37:29.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:37:29.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:37:29.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:37:29.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:37:29.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:37:29.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:37:29.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:37:29.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:37:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:37:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.400757 -999.00  +24.70  16.56     23   +2.30 1 1 1 1 1   888    0 29.43 342.27 ----- 16.6 16.6 297.2 25.2 31.3 -24.4 30.6 -24.2 29.6 -22.1 30.3 -23.1
2025-12-25T11:37:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:37:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:37:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.400757
2025-12-25T11:37:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:37:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:37:21', tmtdew=25.68, humidity=18.11, cloud=0.0, wind=15.3, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:37:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:37:29.431 [DEBUG] [Thread-10909] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:37:29.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:37:29.528 [DEBUG] [Thread-10912] [transport.py] [_log()] starting thread (client mode): 0xb6b14220
2025-12-25T11:37:29.528 [DEBUG] [Thread-10912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:37:29.543 [DEBUG] [Thread-10912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:37:29.543 [INFO] [Thread-10912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:37:29.551 [DEBUG] [Thread-10912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:37:29.551 [DEBUG] [Thread-10912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:37:29.551 [DEBUG] [Thread-10912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] client lang: <none>
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] server lang: <none>
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] kex follows: False
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] Compression: none
2025-12-25T11:37:29.552 [DEBUG] [Thread-10912] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:37:29.615 [DEBUG] [Thread-10912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:37:29.616 [DEBUG] [Thread-10912] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:37:29.617 [DEBUG] [Thread-10912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:37:29.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:37:29.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:37:29.672 [DEBUG] [Thread-10912] [transport.py] [_log()] userauth is OK
2025-12-25T11:37:29.672 [DEBUG] [Thread-10912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:37:29.672 [DEBUG] [Thread-10912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:37:29.672 [DEBUG] [Thread-10912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:37:29.672 [DEBUG] [Thread-10912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:37:29.692 [INFO] [Thread-10912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:37:29.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-25T11:37:29.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:37:30.569 [DEBUG] [Thread-10912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:37:30.569 [DEBUG] [Thread-10912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:37:30.619 [DEBUG] [Thread-10912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:37:30.620 [DEBUG] [Thread-10912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:37:30.629 [DEBUG] [Thread-10912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:37:30.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:37:30.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-25T11:37:30.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-25T11:37:30.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:37:30.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:37:30.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:37:30.673 [DEBUG] [Thread-10912] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:37:41.843 [DEBUG] [Thread-10914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:56.890 [DEBUG] [Thread-10915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:37:59.137 [DEBUG] [Thread-10916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:00.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:38:00.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:38:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:38:01.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 37, 53), 25.33, 18.69, 0.0, 14.26, 24.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:38:01.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:37:53
2025-12-25T11:38:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:38:01.663 [DEBUG] [Thread-10917] [transport.py] [_log()] starting thread (client mode): 0xb6be2890
2025-12-25T11:38:01.663 [DEBUG] [Thread-10917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:38:01.684 [DEBUG] [Thread-10917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:38:01.684 [INFO] [Thread-10917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:38:01.687 [DEBUG] [Thread-10917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:38:01.687 [DEBUG] [Thread-10917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] client lang: <none>
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] server lang: <none>
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] kex follows: False
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] Compression: none
2025-12-25T11:38:01.688 [DEBUG] [Thread-10917] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:38:01.705 [DEBUG] [Thread-10917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:38:01.705 [DEBUG] [Thread-10917] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:38:01.706 [DEBUG] [Thread-10917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:38:01.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:38:01.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:38:01.708 [DEBUG] [Thread-10917] [transport.py] [_log()] userauth is OK
2025-12-25T11:38:01.708 [DEBUG] [Thread-10917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:38:01.708 [DEBUG] [Thread-10917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:38:01.708 [DEBUG] [Thread-10917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:38:01.708 [DEBUG] [Thread-10917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:38:01.730 [INFO] [Thread-10917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:38:01.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:38:02.393 [DEBUG] [Thread-10917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:38:02.393 [DEBUG] [Thread-10917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:38:02.394 [DEBUG] [Thread-10917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:38:02.434 [DEBUG] [Thread-10917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:38:02.434 [DEBUG] [Thread-10917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:38:02.437 [DEBUG] [Thread-10917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:38:02.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:38:02.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:38:02.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:38:02.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:38:02.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:38:02.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:38:02.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:38:02.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:38:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:38:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.401104 -999.00  +24.80  16.14     23   +2.40 1 1 1 1 1   888    0 30.25 343.54 ----- 16.1 16.1 283.1 18.0 31.4 -24.6 30.6 -24.7 29.6 -24.1 30.4 -22.9
2025-12-25T11:38:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:38:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:38:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.401104
2025-12-25T11:38:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:38:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:38:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:38:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:38:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:38:02.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:37:53', tmtdew=25.33, humidity=18.69, cloud=0.0, wind=14.26, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:37:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:38:02.464 [DEBUG] [Thread-10917] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:38:02.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-25T11:38:11.921 [DEBUG] [Thread-10920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:12.550 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:12.551 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:26.971 [DEBUG] [Thread-10921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:42.003 [DEBUG] [Thread-10922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:57.040 [DEBUG] [Thread-10923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:38:59.186 [DEBUG] [Thread-10924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:12.072 [DEBUG] [Thread-10925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:12.707 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:12.708 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:27.101 [DEBUG] [Thread-10926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:42.141 [DEBUG] [Thread-10927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:57.174 [DEBUG] [Thread-10928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:39:59.243 [DEBUG] [Thread-10929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:12.209 [DEBUG] [Thread-10930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:12.847 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:12.848 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:16.981 [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-25T11:40:27.248 [DEBUG] [Thread-10931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:42.275 [DEBUG] [Thread-10932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:46.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:40:46.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:40:46.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-25T11:40:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 40, 33), 28.66, 14.49, 0.0, 32.25, 24.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:40:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:40:33
2025-12-25T11:40:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:40:47.969 [DEBUG] [Thread-10933] [transport.py] [_log()] starting thread (client mode): 0xb6be26b0
2025-12-25T11:40:47.969 [DEBUG] [Thread-10933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:40:47.989 [DEBUG] [Thread-10933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:40:47.989 [INFO] [Thread-10933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] client lang: <none>
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] server lang: <none>
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] kex follows: False
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] Compression: none
2025-12-25T11:40:47.991 [DEBUG] [Thread-10933] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:40:47.999 [DEBUG] [Thread-10933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:40:47.999 [DEBUG] [Thread-10933] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:40:48.000 [DEBUG] [Thread-10933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:40:48.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:40:48.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:40:48.002 [DEBUG] [Thread-10933] [transport.py] [_log()] userauth is OK
2025-12-25T11:40:48.003 [DEBUG] [Thread-10933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:40:48.003 [DEBUG] [Thread-10933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:40:48.003 [DEBUG] [Thread-10933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:40:48.003 [DEBUG] [Thread-10933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:40:48.018 [INFO] [Thread-10933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:40:48.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:40:48.650 [DEBUG] [Thread-10933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:40:48.650 [DEBUG] [Thread-10933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:40:48.650 [DEBUG] [Thread-10933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:40:48.691 [DEBUG] [Thread-10933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:40:48.691 [DEBUG] [Thread-10933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:40:48.694 [DEBUG] [Thread-10933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:40:48.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:40:48.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:40:48.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:40:48.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:40:48.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:40:48.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:40:48.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:40:48.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:40:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:40:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.402840 -999.00  +25.30  31.65     20   +0.90 1 1 2 1 1   888    0 30.73 370.16 ----- 31.6 31.6 329.6 40.4 31.4 -26.2 30.6 -24.6 29.8 -26.5 30.4 -23.6
2025-12-25T11:40:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:40:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:40:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.402840
2025-12-25T11:40:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:40:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:40:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:40:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:40:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:40:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:40:33', tmtdew=28.66, humidity=14.49, cloud=0.0, wind=32.25, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:40:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:40:48.720 [DEBUG] [Thread-10933] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:40:48.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-25T11:40:48.827 [DEBUG] [Thread-10936] [transport.py] [_log()] starting thread (client mode): 0xb6be39d0
2025-12-25T11:40:48.827 [DEBUG] [Thread-10936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:40:48.841 [DEBUG] [Thread-10936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:40:48.841 [INFO] [Thread-10936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:40:48.849 [DEBUG] [Thread-10936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] client lang: <none>
2025-12-25T11:40:48.850 [DEBUG] [Thread-10936] [transport.py] [_log()] server lang: <none>
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] kex follows: False
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] Compression: none
2025-12-25T11:40:48.851 [DEBUG] [Thread-10936] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:40:48.911 [DEBUG] [Thread-10936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:40:48.912 [DEBUG] [Thread-10936] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:40:48.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:40:48.913 [DEBUG] [Thread-10936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:40:48.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:40:48.974 [DEBUG] [Thread-10936] [transport.py] [_log()] userauth is OK
2025-12-25T11:40:48.975 [DEBUG] [Thread-10936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:40:48.975 [DEBUG] [Thread-10936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:40:48.975 [DEBUG] [Thread-10936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:40:48.975 [DEBUG] [Thread-10936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:40:48.995 [INFO] [Thread-10936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:40:48.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-25T11:40:48.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:40:49.868 [DEBUG] [Thread-10936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:40:49.868 [DEBUG] [Thread-10936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:40:49.916 [DEBUG] [Thread-10936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:40:49.916 [DEBUG] [Thread-10936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:40:49.925 [DEBUG] [Thread-10936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:40:49.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:40:49.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:40:49.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-25T11:40:49.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:40:49.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:40:49.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:40:49.962 [DEBUG] [Thread-10936] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:40:57.309 [DEBUG] [Thread-10938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:40:59.308 [DEBUG] [Thread-10939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:12.364 [DEBUG] [Thread-10940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:12.999 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:13.000 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:19.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:41:19.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:41:19.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-25T11:41:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 41, 6), 28.51, 14.67, 0.0, 31.88, 24.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:41:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:41:06
2025-12-25T11:41:20.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:41:20.948 [DEBUG] [Thread-10941] [transport.py] [_log()] starting thread (client mode): 0xb6be1360
2025-12-25T11:41:20.948 [DEBUG] [Thread-10941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:41:20.969 [DEBUG] [Thread-10941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:41:20.969 [INFO] [Thread-10941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:41:20.972 [DEBUG] [Thread-10941] [transport.py] [_log()] client lang: <none>
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] server lang: <none>
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] kex follows: False
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] Compression: none
2025-12-25T11:41:20.973 [DEBUG] [Thread-10941] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:41:20.990 [DEBUG] [Thread-10941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:41:20.990 [DEBUG] [Thread-10941] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:41:20.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:41:20.991 [DEBUG] [Thread-10941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:41:20.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:41:20.993 [DEBUG] [Thread-10941] [transport.py] [_log()] userauth is OK
2025-12-25T11:41:20.993 [DEBUG] [Thread-10941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:41:20.994 [DEBUG] [Thread-10941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:41:20.994 [DEBUG] [Thread-10941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:41:20.994 [DEBUG] [Thread-10941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:41:21.026 [INFO] [Thread-10941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:41:21.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:41:21.676 [DEBUG] [Thread-10941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:41:21.676 [DEBUG] [Thread-10941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:41:21.676 [DEBUG] [Thread-10941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:41:21.717 [DEBUG] [Thread-10941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:41:21.717 [DEBUG] [Thread-10941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:41:21.720 [DEBUG] [Thread-10941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:41:21.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:41:21.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:41:21.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:41:21.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:41:21.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:41:21.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:41:21.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:41:21.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:41:21.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:41:21.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.403187 -999.00  +25.30  20.81     19   +0.20 1 1 1 1 1   888    0 29.91 342.41 ----- 20.8 20.8 334.4 33.6 31.3 -25.3 30.5 -25.0 29.7 -23.1 30.4 -22.9
2025-12-25T11:41:21.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:41:21.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:41:21.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.403187
2025-12-25T11:41:21.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:41:21.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:41:21.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:41:21.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:41:21.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:41:21.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:41:06', tmtdew=28.51, humidity=14.67, cloud=0.0, wind=31.88, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:40:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:41:21.748 [DEBUG] [Thread-10941] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:41:21.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:41:21.842 [DEBUG] [Thread-10944] [transport.py] [_log()] starting thread (client mode): 0xb6b17640
2025-12-25T11:41:21.842 [DEBUG] [Thread-10944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:41:21.856 [DEBUG] [Thread-10944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:41:21.856 [INFO] [Thread-10944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:41:21.864 [DEBUG] [Thread-10944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:41:21.865 [DEBUG] [Thread-10944] [transport.py] [_log()] client lang: <none>
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] server lang: <none>
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] kex follows: False
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:41:21.866 [DEBUG] [Thread-10944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:41:21.867 [DEBUG] [Thread-10944] [transport.py] [_log()] Compression: none
2025-12-25T11:41:21.867 [DEBUG] [Thread-10944] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:41:21.923 [DEBUG] [Thread-10944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:41:21.924 [DEBUG] [Thread-10944] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:41:21.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:41:21.925 [DEBUG] [Thread-10944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:41:21.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:41:21.983 [DEBUG] [Thread-10944] [transport.py] [_log()] userauth is OK
2025-12-25T11:41:21.983 [DEBUG] [Thread-10944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:41:21.983 [DEBUG] [Thread-10944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:41:21.983 [DEBUG] [Thread-10944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:41:21.983 [DEBUG] [Thread-10944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:41:22.002 [INFO] [Thread-10944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:41:22.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-25T11:41:22.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:41:22.834 [DEBUG] [Thread-10944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:41:22.834 [DEBUG] [Thread-10944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:41:22.882 [DEBUG] [Thread-10944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:41:22.882 [DEBUG] [Thread-10944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:41:22.891 [DEBUG] [Thread-10944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:41:22.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:41:22.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-25T11:41:22.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-25T11:41:22.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:41:22.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:41:22.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:41:22.934 [DEBUG] [Thread-10944] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:41:27.397 [DEBUG] [Thread-10946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:42.452 [DEBUG] [Thread-10947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:52.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:41:52.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:41:52.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-25T11:41:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 41, 38), 28.76, 14.49, 0.0, 32.75, 24.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:41:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:41:38
2025-12-25T11:41:53.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:41:53.959 [DEBUG] [Thread-10948] [transport.py] [_log()] starting thread (client mode): 0xb6b14ee0
2025-12-25T11:41:53.959 [DEBUG] [Thread-10948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:41:53.980 [DEBUG] [Thread-10948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:41:53.980 [INFO] [Thread-10948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] client lang: <none>
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] server lang: <none>
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] kex follows: False
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:41:53.983 [DEBUG] [Thread-10948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:41:53.984 [DEBUG] [Thread-10948] [transport.py] [_log()] Compression: none
2025-12-25T11:41:53.984 [DEBUG] [Thread-10948] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:41:54.002 [DEBUG] [Thread-10948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:41:54.003 [DEBUG] [Thread-10948] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:41:54.003 [DEBUG] [Thread-10948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:41:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:41:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:41:54.005 [DEBUG] [Thread-10948] [transport.py] [_log()] userauth is OK
2025-12-25T11:41:54.005 [DEBUG] [Thread-10948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:41:54.006 [DEBUG] [Thread-10948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:41:54.006 [DEBUG] [Thread-10948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:41:54.006 [DEBUG] [Thread-10948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:41:54.040 [INFO] [Thread-10948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:41:54.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:41:54.696 [DEBUG] [Thread-10948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:41:54.696 [DEBUG] [Thread-10948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:41:54.697 [DEBUG] [Thread-10948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:41:54.737 [DEBUG] [Thread-10948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:41:54.737 [DEBUG] [Thread-10948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:41:54.742 [DEBUG] [Thread-10948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:41:54.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:41:54.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:41:54.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:41:54.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:41:54.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:41:54.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:41:54.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:41:54.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:41:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:41:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.403882 -999.00  +25.10  32.38     20   +0.90 1 1 2 1 1   888    0 31.55 378.32 ----- 32.4 32.4 326.4 36.5 31.4 -25.0 30.5 -25.5 29.8 -22.1 30.4 -23.2
2025-12-25T11:41:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:41:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:41:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.403882
2025-12-25T11:41:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:41:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:41:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:41:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:41:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:41:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:41:38', tmtdew=28.76, humidity=14.49, cloud=0.0, wind=32.75, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:41:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:41:54.772 [DEBUG] [Thread-10948] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:41:54.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-25T11:41:54.865 [DEBUG] [Thread-10951] [transport.py] [_log()] starting thread (client mode): 0xb6be3220
2025-12-25T11:41:54.865 [DEBUG] [Thread-10951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:41:54.878 [DEBUG] [Thread-10951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:41:54.878 [INFO] [Thread-10951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] client lang: <none>
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] server lang: <none>
2025-12-25T11:41:54.886 [DEBUG] [Thread-10951] [transport.py] [_log()] kex follows: False
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] Compression: none
2025-12-25T11:41:54.887 [DEBUG] [Thread-10951] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:41:54.947 [DEBUG] [Thread-10951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:41:54.947 [DEBUG] [Thread-10951] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:41:54.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:41:54.948 [DEBUG] [Thread-10951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:41:54.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:41:55.003 [DEBUG] [Thread-10951] [transport.py] [_log()] userauth is OK
2025-12-25T11:41:55.003 [DEBUG] [Thread-10951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:41:55.004 [DEBUG] [Thread-10951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:41:55.004 [DEBUG] [Thread-10951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:41:55.004 [DEBUG] [Thread-10951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:41:55.022 [INFO] [Thread-10951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:41:55.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-25T11:41:55.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:41:55.842 [DEBUG] [Thread-10951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:41:55.842 [DEBUG] [Thread-10951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:41:55.890 [DEBUG] [Thread-10951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:41:55.890 [DEBUG] [Thread-10951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:41:55.899 [DEBUG] [Thread-10951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:41:55.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:41:55.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-25T11:41:55.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-25T11:41:55.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:41:55.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:41:55.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:41:55.935 [DEBUG] [Thread-10951] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:41:57.485 [DEBUG] [Thread-10953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:41:59.361 [DEBUG] [Thread-10954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:12.543 [DEBUG] [Thread-10955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:13.140 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:13.142 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:25.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:42:25.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:42:25.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:42:26.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 42, 10), 27.97, 15.35, 0.0, 33.61, 24.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:42:26.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:42:10
2025-12-25T11:42:26.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:42:26.975 [DEBUG] [Thread-10956] [transport.py] [_log()] starting thread (client mode): 0xb6be35e0
2025-12-25T11:42:26.975 [DEBUG] [Thread-10956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:42:26.995 [DEBUG] [Thread-10956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:42:26.995 [INFO] [Thread-10956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:42:26.998 [DEBUG] [Thread-10956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:42:26.998 [DEBUG] [Thread-10956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:42:26.998 [DEBUG] [Thread-10956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:42:26.998 [DEBUG] [Thread-10956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:42:26.998 [DEBUG] [Thread-10956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:42:26.998 [DEBUG] [Thread-10956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] client lang: <none>
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] server lang: <none>
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] kex follows: False
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] Compression: none
2025-12-25T11:42:26.999 [DEBUG] [Thread-10956] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:42:27.014 [DEBUG] [Thread-10956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:42:27.014 [DEBUG] [Thread-10956] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:42:27.015 [DEBUG] [Thread-10956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:42:27.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:42:27.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:42:27.016 [DEBUG] [Thread-10956] [transport.py] [_log()] userauth is OK
2025-12-25T11:42:27.016 [DEBUG] [Thread-10956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:42:27.016 [DEBUG] [Thread-10956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:42:27.016 [DEBUG] [Thread-10956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:42:27.016 [DEBUG] [Thread-10956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:42:27.028 [INFO] [Thread-10956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:42:27.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:42:27.574 [DEBUG] [Thread-10958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:27.644 [DEBUG] [Thread-10956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:42:27.644 [DEBUG] [Thread-10956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:42:27.644 [DEBUG] [Thread-10956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:42:27.685 [DEBUG] [Thread-10956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:42:27.685 [DEBUG] [Thread-10956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:42:27.688 [DEBUG] [Thread-10956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:42:27.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:42:27.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:42:27.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:42:27.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:42:27.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:42:27.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:42:27.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.404229 -999.00  +25.10  31.57     21   +1.30 1 1 2 1 1   888    0 31.16 360.79 ----- 31.6 31.6 325.6 38.5 31.3 -26.3 30.4 -25.9 29.7 -23.4 30.4 -23.0
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.404229
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:42:27.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:42:10', tmtdew=27.97, humidity=15.35, cloud=0.0, wind=33.61, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:42:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:42:27.707 [DEBUG] [Thread-10956] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:42:27.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-25T11:42:27.790 [DEBUG] [Thread-10960] [transport.py] [_log()] starting thread (client mode): 0xb6be2410
2025-12-25T11:42:27.790 [DEBUG] [Thread-10960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:42:27.805 [DEBUG] [Thread-10960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:42:27.805 [INFO] [Thread-10960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] client lang: <none>
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] server lang: <none>
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] kex follows: False
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:42:27.813 [DEBUG] [Thread-10960] [transport.py] [_log()] Compression: none
2025-12-25T11:42:27.814 [DEBUG] [Thread-10960] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:42:27.871 [DEBUG] [Thread-10960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:42:27.871 [DEBUG] [Thread-10960] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:42:27.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:42:27.872 [DEBUG] [Thread-10960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:42:27.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:42:27.930 [DEBUG] [Thread-10960] [transport.py] [_log()] userauth is OK
2025-12-25T11:42:27.930 [DEBUG] [Thread-10960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:42:27.930 [DEBUG] [Thread-10960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:42:27.930 [DEBUG] [Thread-10960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:42:27.930 [DEBUG] [Thread-10960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:42:27.945 [INFO] [Thread-10960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:42:27.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-25T11:42:27.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:42:28.748 [DEBUG] [Thread-10960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:42:28.748 [DEBUG] [Thread-10960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:42:28.796 [DEBUG] [Thread-10960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:42:28.796 [DEBUG] [Thread-10960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:42:28.804 [DEBUG] [Thread-10960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:42:28.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:42:28.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:42:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:42:28.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:42:28.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:42:28.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:42:28.837 [DEBUG] [Thread-10960] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:42:42.610 [DEBUG] [Thread-10962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:57.662 [DEBUG] [Thread-10963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:58.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:42:58.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:42:58.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-25T11:42:59.391 [DEBUG] [Thread-10964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:42:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 42, 42), 27.58, 15.93, 0.0, 34.58, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:42:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:42:42
2025-12-25T11:42:59.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:42:59.810 [DEBUG] [Thread-10965] [transport.py] [_log()] starting thread (client mode): 0xb6b17f70
2025-12-25T11:42:59.810 [DEBUG] [Thread-10965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:42:59.830 [DEBUG] [Thread-10965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:42:59.831 [INFO] [Thread-10965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] client lang: <none>
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] server lang: <none>
2025-12-25T11:42:59.834 [DEBUG] [Thread-10965] [transport.py] [_log()] kex follows: False
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] Compression: none
2025-12-25T11:42:59.835 [DEBUG] [Thread-10965] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:42:59.854 [DEBUG] [Thread-10965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:42:59.854 [DEBUG] [Thread-10965] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:42:59.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:42:59.855 [DEBUG] [Thread-10965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:42:59.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:42:59.857 [DEBUG] [Thread-10965] [transport.py] [_log()] userauth is OK
2025-12-25T11:42:59.858 [DEBUG] [Thread-10965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:42:59.858 [DEBUG] [Thread-10965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:42:59.858 [DEBUG] [Thread-10965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:42:59.858 [DEBUG] [Thread-10965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:42:59.879 [INFO] [Thread-10965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:42:59.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:43:00.529 [DEBUG] [Thread-10965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:43:00.529 [DEBUG] [Thread-10965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:43:00.530 [DEBUG] [Thread-10965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:43:00.570 [DEBUG] [Thread-10965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:43:00.570 [DEBUG] [Thread-10965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:43:00.574 [DEBUG] [Thread-10965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:43:00.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:43:00.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:43:00.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:43:00.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:43:00.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:43:00.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:43:00.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:43:00.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:43:00.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:43:00.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.404576 -999.00  +25.20  27.45     20   +1.20 1 1 1 1 1   888    0 30.52 344.54 ----- 27.4 27.4 307.0 39.2 31.4 -26.3 30.5 -26.6 29.8 -24.5 30.4 -24.0
2025-12-25T11:43:00.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:43:00.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:43:00.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.404576
2025-12-25T11:43:00.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:43:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:43:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:43:00.600 [DEBUG] [Thread-10965] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:43:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:43:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:43:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:42:42', tmtdew=27.58, humidity=15.93, cloud=0.0, wind=34.58, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:42:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:43:00.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-25T11:43:00.697 [DEBUG] [Thread-10968] [transport.py] [_log()] starting thread (client mode): 0xb9579a80
2025-12-25T11:43:00.697 [DEBUG] [Thread-10968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:43:00.711 [DEBUG] [Thread-10968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:43:00.711 [INFO] [Thread-10968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:43:00.719 [DEBUG] [Thread-10968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:43:00.719 [DEBUG] [Thread-10968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] client lang: <none>
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] server lang: <none>
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] kex follows: False
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] Compression: none
2025-12-25T11:43:00.720 [DEBUG] [Thread-10968] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:43:00.776 [DEBUG] [Thread-10968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:43:00.776 [DEBUG] [Thread-10968] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:43:00.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:43:00.777 [DEBUG] [Thread-10968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:43:00.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:43:00.832 [DEBUG] [Thread-10968] [transport.py] [_log()] userauth is OK
2025-12-25T11:43:00.832 [DEBUG] [Thread-10968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:43:00.832 [DEBUG] [Thread-10968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:43:00.832 [DEBUG] [Thread-10968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:43:00.832 [DEBUG] [Thread-10968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:43:00.856 [INFO] [Thread-10968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:43:00.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-25T11:43:00.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:43:01.663 [DEBUG] [Thread-10968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:43:01.663 [DEBUG] [Thread-10968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:43:01.711 [DEBUG] [Thread-10968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:43:01.711 [DEBUG] [Thread-10968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:43:01.720 [DEBUG] [Thread-10968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:43:01.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:43:01.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:43:01.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:43:01.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:43:01.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:43:01.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:43:01.757 [DEBUG] [Thread-10968] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:43:12.700 [DEBUG] [Thread-10970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:43:13.283 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:43:13.284 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:43:27.751 [DEBUG] [Thread-10971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:43:31.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:43:31.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:43:31.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-25T11:43:32.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 43, 14), 28.22, 15.22, 0.0, 36.54, 25.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:43:32.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:43:14
2025-12-25T11:43:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:43:32.761 [DEBUG] [Thread-10972] [transport.py] [_log()] starting thread (client mode): 0xb9579030
2025-12-25T11:43:32.761 [DEBUG] [Thread-10972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:43:32.783 [DEBUG] [Thread-10972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:43:32.783 [INFO] [Thread-10972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:43:32.786 [DEBUG] [Thread-10972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] client lang: <none>
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] server lang: <none>
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] kex follows: False
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] Compression: none
2025-12-25T11:43:32.787 [DEBUG] [Thread-10972] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:43:32.804 [DEBUG] [Thread-10972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:43:32.805 [DEBUG] [Thread-10972] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:43:32.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:43:32.806 [DEBUG] [Thread-10972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:43:32.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:43:32.808 [DEBUG] [Thread-10972] [transport.py] [_log()] userauth is OK
2025-12-25T11:43:32.808 [DEBUG] [Thread-10972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:43:32.808 [DEBUG] [Thread-10972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:43:32.808 [DEBUG] [Thread-10972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:43:32.808 [DEBUG] [Thread-10972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:43:32.831 [INFO] [Thread-10972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:43:32.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:43:33.455 [DEBUG] [Thread-10972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:43:33.456 [DEBUG] [Thread-10972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:43:33.456 [DEBUG] [Thread-10972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:43:33.496 [DEBUG] [Thread-10972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:43:33.496 [DEBUG] [Thread-10972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:43:33.499 [DEBUG] [Thread-10972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:43:33.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:43:33.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:43:33.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:43:33.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:43:33.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:43:33.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:43:33.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:43:33.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:43:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:43:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.404923 -999.00  +24.70  25.26     23   +2.20 1 1 1 1 1   888    0 30.49 348.74 ----- 25.3 25.3 308.6 37.7 31.2 -25.6 30.4 -25.5 29.6 -22.8 30.3 -23.4
2025-12-25T11:43:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:43:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:43:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.404923
2025-12-25T11:43:33.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:43:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:43:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:43:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:43:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:43:33.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:43:14', tmtdew=28.22, humidity=15.22, cloud=0.0, wind=36.54, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:43:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:43:33.525 [DEBUG] [Thread-10972] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:43:33.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-25T11:43:33.627 [DEBUG] [Thread-10975] [transport.py] [_log()] starting thread (client mode): 0xb6be1c60
2025-12-25T11:43:33.627 [DEBUG] [Thread-10975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:43:33.641 [DEBUG] [Thread-10975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:43:33.641 [INFO] [Thread-10975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:43:33.649 [DEBUG] [Thread-10975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:43:33.649 [DEBUG] [Thread-10975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:43:33.649 [DEBUG] [Thread-10975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:43:33.649 [DEBUG] [Thread-10975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] client lang: <none>
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] server lang: <none>
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] kex follows: False
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:43:33.650 [DEBUG] [Thread-10975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:43:33.651 [DEBUG] [Thread-10975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:43:33.651 [DEBUG] [Thread-10975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:43:33.651 [DEBUG] [Thread-10975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:43:33.651 [DEBUG] [Thread-10975] [transport.py] [_log()] Compression: none
2025-12-25T11:43:33.651 [DEBUG] [Thread-10975] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:43:33.708 [DEBUG] [Thread-10975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:43:33.709 [DEBUG] [Thread-10975] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:43:33.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:43:33.710 [DEBUG] [Thread-10975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:43:33.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:43:33.768 [DEBUG] [Thread-10975] [transport.py] [_log()] userauth is OK
2025-12-25T11:43:33.769 [DEBUG] [Thread-10975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:43:33.769 [DEBUG] [Thread-10975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:43:33.769 [DEBUG] [Thread-10975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:43:33.769 [DEBUG] [Thread-10975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:43:33.790 [INFO] [Thread-10975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:43:33.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:43:33.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:43:34.621 [DEBUG] [Thread-10975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:43:34.621 [DEBUG] [Thread-10975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:43:34.669 [DEBUG] [Thread-10975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:43:34.669 [DEBUG] [Thread-10975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:43:34.679 [DEBUG] [Thread-10975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:43:34.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:43:34.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:43:34.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:43:34.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:43:34.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:43:34.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:43:34.715 [DEBUG] [Thread-10975] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:43:42.793 [DEBUG] [Thread-10977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:43:57.840 [DEBUG] [Thread-10978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:43:59.432 [DEBUG] [Thread-10979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:44:04.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:44:04.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-25T11:44:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 43, 46), 27.17, 16.31, 0.0, 25.14, 24.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:44:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:43:46
2025-12-25T11:44:05.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:44:05.691 [DEBUG] [Thread-10980] [transport.py] [_log()] starting thread (client mode): 0xb6b17070
2025-12-25T11:44:05.691 [DEBUG] [Thread-10980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:44:05.711 [DEBUG] [Thread-10980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:44:05.711 [INFO] [Thread-10980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] client lang: <none>
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] server lang: <none>
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] kex follows: False
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] Compression: none
2025-12-25T11:44:05.715 [DEBUG] [Thread-10980] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:44:05.733 [DEBUG] [Thread-10980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:44:05.733 [DEBUG] [Thread-10980] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:44:05.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:44:05.734 [DEBUG] [Thread-10980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:44:05.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:44:05.736 [DEBUG] [Thread-10980] [transport.py] [_log()] userauth is OK
2025-12-25T11:44:05.736 [DEBUG] [Thread-10980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:44:05.736 [DEBUG] [Thread-10980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:44:05.736 [DEBUG] [Thread-10980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:44:05.737 [DEBUG] [Thread-10980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:44:05.773 [INFO] [Thread-10980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:44:05.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:44:06.404 [DEBUG] [Thread-10980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:44:06.405 [DEBUG] [Thread-10980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:44:06.405 [DEBUG] [Thread-10980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:44:06.446 [DEBUG] [Thread-10980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:44:06.446 [DEBUG] [Thread-10980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:44:06.449 [DEBUG] [Thread-10980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:44:06.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:44:06.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:44:06.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:44:06.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:44:06.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:44:06.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:44:06.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:44:06.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:44:06.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:44:06.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.405271 -999.00  +24.90  22.67     24   +3.00 1 1 1 1 1   888    0 30.59 330.99 ----- 22.7 22.7 334.0 35.8 31.2 -25.4 30.4 -24.9 29.7 -24.0 30.4 -23.1
2025-12-25T11:44:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:44:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:44:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.405271
2025-12-25T11:44:06.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:44:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:44:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:44:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:44:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:44:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:43:46', tmtdew=27.17, humidity=16.31, cloud=0.0, wind=25.14, temperature=24.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:43:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:44:06.475 [DEBUG] [Thread-10980] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:44:06.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-25T11:44:06.569 [DEBUG] [Thread-10983] [transport.py] [_log()] starting thread (client mode): 0xb6b163e0
2025-12-25T11:44:06.569 [DEBUG] [Thread-10983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:44:06.584 [DEBUG] [Thread-10983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:44:06.584 [INFO] [Thread-10983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:44:06.591 [DEBUG] [Thread-10983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:06.592 [DEBUG] [Thread-10983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] client lang: <none>
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] server lang: <none>
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] kex follows: False
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:44:06.593 [DEBUG] [Thread-10983] [transport.py] [_log()] Compression: none
2025-12-25T11:44:06.594 [DEBUG] [Thread-10983] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:44:06.649 [DEBUG] [Thread-10983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:44:06.649 [DEBUG] [Thread-10983] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:44:06.650 [DEBUG] [Thread-10983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:44:06.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:44:06.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:44:06.705 [DEBUG] [Thread-10983] [transport.py] [_log()] userauth is OK
2025-12-25T11:44:06.705 [DEBUG] [Thread-10983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:44:06.705 [DEBUG] [Thread-10983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:44:06.705 [DEBUG] [Thread-10983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:44:06.705 [DEBUG] [Thread-10983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:44:06.724 [INFO] [Thread-10983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:44:06.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-25T11:44:06.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:44:07.586 [DEBUG] [Thread-10983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:44:07.586 [DEBUG] [Thread-10983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:44:07.634 [DEBUG] [Thread-10983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:44:07.634 [DEBUG] [Thread-10983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:44:07.643 [DEBUG] [Thread-10983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:44:07.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:44:07.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-25T11:44:07.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-25T11:44:07.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:44:07.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:44:07.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:44:07.679 [DEBUG] [Thread-10983] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:44:12.877 [DEBUG] [Thread-10985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:13.425 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:13.426 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:27.932 [DEBUG] [Thread-10986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:44:37.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:44:37.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:44:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 44, 18), 26.88, 16.66, 0.0, 26.26, 24.58, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:44:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:44:18
2025-12-25T11:44:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:44:38.665 [DEBUG] [Thread-10987] [transport.py] [_log()] starting thread (client mode): 0xb957ad70
2025-12-25T11:44:38.665 [DEBUG] [Thread-10987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:44:38.685 [DEBUG] [Thread-10987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:44:38.685 [INFO] [Thread-10987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] client lang: <none>
2025-12-25T11:44:38.688 [DEBUG] [Thread-10987] [transport.py] [_log()] server lang: <none>
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] kex follows: False
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] Compression: none
2025-12-25T11:44:38.689 [DEBUG] [Thread-10987] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:44:38.703 [DEBUG] [Thread-10987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:44:38.704 [DEBUG] [Thread-10987] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:44:38.704 [DEBUG] [Thread-10987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:44:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:44:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:44:38.706 [DEBUG] [Thread-10987] [transport.py] [_log()] userauth is OK
2025-12-25T11:44:38.706 [DEBUG] [Thread-10987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:44:38.707 [DEBUG] [Thread-10987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:44:38.707 [DEBUG] [Thread-10987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:44:38.707 [DEBUG] [Thread-10987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:44:38.731 [INFO] [Thread-10987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:44:38.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:44:39.376 [DEBUG] [Thread-10987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:44:39.376 [DEBUG] [Thread-10987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:44:39.376 [DEBUG] [Thread-10987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:44:39.417 [DEBUG] [Thread-10987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:44:39.417 [DEBUG] [Thread-10987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:44:39.420 [DEBUG] [Thread-10987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:44:39.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:44:39.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:44:39.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:44:39.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:44:39.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:44:39.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:44:39.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:44:39.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:44:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:44:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.405618 -999.00  +25.00  27.43     24   +3.00 1 2 1 1 1   888    0 29.50 308.38 ----- 27.4 27.4 334.0 35.5 31.4 -24.6 30.5 -24.4 29.8 -21.6 30.5 -22.5
2025-12-25T11:44:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:44:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:44:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.405618
2025-12-25T11:44:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:44:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:44:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:44:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:44:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:44:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:44:18', tmtdew=26.88, humidity=16.66, cloud=0.0, wind=26.26, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:44:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:44:39.446 [DEBUG] [Thread-10987] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:44:39.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-25T11:44:39.543 [DEBUG] [Thread-10990] [transport.py] [_log()] starting thread (client mode): 0xb957b820
2025-12-25T11:44:39.543 [DEBUG] [Thread-10990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:44:39.558 [DEBUG] [Thread-10990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:44:39.559 [INFO] [Thread-10990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:44:39.566 [DEBUG] [Thread-10990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] client lang: <none>
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] server lang: <none>
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] kex follows: False
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] Compression: none
2025-12-25T11:44:39.567 [DEBUG] [Thread-10990] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:44:39.629 [DEBUG] [Thread-10990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:44:39.630 [DEBUG] [Thread-10990] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:44:39.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:44:39.631 [DEBUG] [Thread-10990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:44:39.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:44:39.689 [DEBUG] [Thread-10990] [transport.py] [_log()] userauth is OK
2025-12-25T11:44:39.689 [DEBUG] [Thread-10990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:44:39.689 [DEBUG] [Thread-10990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:44:39.689 [DEBUG] [Thread-10990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:44:39.689 [DEBUG] [Thread-10990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:44:39.707 [INFO] [Thread-10990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:44:39.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-25T11:44:39.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:44:40.527 [DEBUG] [Thread-10990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:44:40.527 [DEBUG] [Thread-10990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:44:40.575 [DEBUG] [Thread-10990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:44:40.575 [DEBUG] [Thread-10990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:44:40.585 [DEBUG] [Thread-10990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:44:40.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:44:40.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:44:40.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-25T11:44:40.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:44:40.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:44:40.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:44:40.622 [DEBUG] [Thread-10990] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:44:42.969 [DEBUG] [Thread-10992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:58.031 [DEBUG] [Thread-10993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:44:59.485 [DEBUG] [Thread-10994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:45:10.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:45:10.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-25T11:45:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 44, 50), 25.91, 18.09, 0.0, 26.56, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:45:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:44:50
2025-12-25T11:45:11.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:45:11.648 [DEBUG] [Thread-10995] [transport.py] [_log()] starting thread (client mode): 0xb957a260
2025-12-25T11:45:11.648 [DEBUG] [Thread-10995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:45:11.667 [DEBUG] [Thread-10995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:45:11.667 [INFO] [Thread-10995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:45:11.670 [DEBUG] [Thread-10995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] client lang: <none>
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] server lang: <none>
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] kex follows: False
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] Compression: none
2025-12-25T11:45:11.671 [DEBUG] [Thread-10995] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:45:11.689 [DEBUG] [Thread-10995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:45:11.690 [DEBUG] [Thread-10995] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:45:11.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:45:11.691 [DEBUG] [Thread-10995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:45:11.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:45:11.693 [DEBUG] [Thread-10995] [transport.py] [_log()] userauth is OK
2025-12-25T11:45:11.693 [DEBUG] [Thread-10995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:45:11.693 [DEBUG] [Thread-10995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:45:11.694 [DEBUG] [Thread-10995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:45:11.694 [DEBUG] [Thread-10995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:45:11.708 [INFO] [Thread-10995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:45:11.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:45:12.347 [DEBUG] [Thread-10995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:45:12.347 [DEBUG] [Thread-10995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:45:12.347 [DEBUG] [Thread-10995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:45:12.388 [DEBUG] [Thread-10995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:45:12.388 [DEBUG] [Thread-10995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:45:12.391 [DEBUG] [Thread-10995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:45:12.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:45:12.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:45:12.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:45:12.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:45:12.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:45:12.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:45:12.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:45:12.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:45:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:45:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.405965 -999.00  +25.10  27.58     23   +2.90 1 1 1 1 1   888    0 29.84 309.58 ----- 27.6 27.6 325.6 41.1 31.4 -25.2 30.6 -24.9 29.8 -21.6 30.5 -23.4
2025-12-25T11:45:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:45:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:45:12.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.405965
2025-12-25T11:45:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:45:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:45:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:45:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:45:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:45:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:44:50', tmtdew=25.91, humidity=18.09, cloud=0.0, wind=26.56, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:44:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:45:12.416 [DEBUG] [Thread-10995] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:45:12.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-25T11:45:12.510 [DEBUG] [Thread-10998] [transport.py] [_log()] starting thread (client mode): 0xb6be2e90
2025-12-25T11:45:12.510 [DEBUG] [Thread-10998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:45:12.524 [DEBUG] [Thread-10998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:45:12.524 [INFO] [Thread-10998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:45:12.531 [DEBUG] [Thread-10998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] client lang: <none>
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] server lang: <none>
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] kex follows: False
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] Compression: none
2025-12-25T11:45:12.532 [DEBUG] [Thread-10998] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:45:12.588 [DEBUG] [Thread-10998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:45:12.588 [DEBUG] [Thread-10998] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:45:12.589 [DEBUG] [Thread-10998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:45:12.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:45:12.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:45:12.645 [DEBUG] [Thread-10998] [transport.py] [_log()] userauth is OK
2025-12-25T11:45:12.645 [DEBUG] [Thread-10998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:45:12.645 [DEBUG] [Thread-10998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:45:12.645 [DEBUG] [Thread-10998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:45:12.645 [DEBUG] [Thread-10998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:45:12.667 [INFO] [Thread-10998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:45:12.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-25T11:45:12.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:45:13.064 [DEBUG] [Thread-11000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:13.513 [DEBUG] [Thread-10998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:45:13.514 [DEBUG] [Thread-10998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:45:13.562 [DEBUG] [Thread-10998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:45:13.562 [DEBUG] [Thread-10998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:45:13.563 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:13.564 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:13.570 [DEBUG] [Thread-10998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:45:13.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:45:13.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-25T11:45:13.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-25T11:45:13.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:45:13.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:45:13.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:45:13.610 [DEBUG] [Thread-10998] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:45:28.118 [DEBUG] [Thread-11001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:43.152 [DEBUG] [Thread-11002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:45:43.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:45:43.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-25T11:45:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 45, 22), 25.84, 18.19, 0.0, 27.31, 24.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:45:44.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:45:22
2025-12-25T11:45:44.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:45:44.627 [DEBUG] [Thread-11003] [transport.py] [_log()] starting thread (client mode): 0xb95789d0
2025-12-25T11:45:44.627 [DEBUG] [Thread-11003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:45:44.647 [DEBUG] [Thread-11003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:45:44.647 [INFO] [Thread-11003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:45:44.650 [DEBUG] [Thread-11003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:45:44.650 [DEBUG] [Thread-11003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] client lang: <none>
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] server lang: <none>
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] kex follows: False
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] Compression: none
2025-12-25T11:45:44.651 [DEBUG] [Thread-11003] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:45:44.666 [DEBUG] [Thread-11003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:45:44.666 [DEBUG] [Thread-11003] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:45:44.666 [DEBUG] [Thread-11003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:45:44.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:45:44.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:45:44.708 [DEBUG] [Thread-11003] [transport.py] [_log()] userauth is OK
2025-12-25T11:45:44.708 [DEBUG] [Thread-11003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:45:44.708 [DEBUG] [Thread-11003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:45:44.708 [DEBUG] [Thread-11003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:45:44.708 [DEBUG] [Thread-11003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:45:44.735 [INFO] [Thread-11003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:45:44.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:45:45.360 [DEBUG] [Thread-11003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:45:45.360 [DEBUG] [Thread-11003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:45:45.360 [DEBUG] [Thread-11003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:45:45.402 [DEBUG] [Thread-11003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:45:45.402 [DEBUG] [Thread-11003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:45:45.404 [DEBUG] [Thread-11003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:45:45.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:45:45.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:45:45.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:45:45.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:45:45.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:45:45.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:45:45.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.406312 -999.00  +24.50  26.52     24   +2.70 1 1 1 1 1   888    0 30.21 311.47 ----- 26.5 26.5 309.0 33.8 31.4 -25.5 30.5 -25.2 29.9 -22.1 30.5 -23.2
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.406312
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:45:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:45:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:45:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:45:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:45:45.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:45:22', tmtdew=25.84, humidity=18.19, cloud=0.0, wind=27.31, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:45:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:45:45.424 [DEBUG] [Thread-11003] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:45:45.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-25T11:45:45.507 [DEBUG] [Thread-11006] [transport.py] [_log()] starting thread (client mode): 0xb6be14e0
2025-12-25T11:45:45.507 [DEBUG] [Thread-11006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:45:45.522 [DEBUG] [Thread-11006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:45:45.522 [INFO] [Thread-11006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:45:45.529 [DEBUG] [Thread-11006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:45:45.529 [DEBUG] [Thread-11006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:45:45.529 [DEBUG] [Thread-11006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:45:45.529 [DEBUG] [Thread-11006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] client lang: <none>
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] server lang: <none>
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] kex follows: False
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] Compression: none
2025-12-25T11:45:45.530 [DEBUG] [Thread-11006] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:45:45.587 [DEBUG] [Thread-11006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:45:45.587 [DEBUG] [Thread-11006] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:45:45.587 [DEBUG] [Thread-11006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:45:45.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:45:45.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:45:45.645 [DEBUG] [Thread-11006] [transport.py] [_log()] userauth is OK
2025-12-25T11:45:45.645 [DEBUG] [Thread-11006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:45:45.645 [DEBUG] [Thread-11006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:45:45.645 [DEBUG] [Thread-11006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:45:45.645 [DEBUG] [Thread-11006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:45:45.658 [INFO] [Thread-11006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:45:45.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-25T11:45:45.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:45:46.490 [DEBUG] [Thread-11006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:45:46.490 [DEBUG] [Thread-11006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:45:46.538 [DEBUG] [Thread-11006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:45:46.538 [DEBUG] [Thread-11006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:45:46.547 [DEBUG] [Thread-11006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:45:46.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:45:46.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:45:46.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:45:46.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:45:46.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:45:46.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:45:46.578 [DEBUG] [Thread-11006] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:45:58.181 [DEBUG] [Thread-11008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:45:59.541 [DEBUG] [Thread-11009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:13.232 [DEBUG] [Thread-11010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:13.702 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:13.703 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:16.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:46:16.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:46:16.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:46:17.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 45, 54), 25.01, 19.34, 0.0, 21.77, 24.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:46:17.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:45:54
2025-12-25T11:46:17.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:46:17.592 [DEBUG] [Thread-11011] [transport.py] [_log()] starting thread (client mode): 0xb9578b80
2025-12-25T11:46:17.593 [DEBUG] [Thread-11011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:46:17.613 [DEBUG] [Thread-11011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:46:17.613 [INFO] [Thread-11011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:46:17.616 [DEBUG] [Thread-11011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] client lang: <none>
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] server lang: <none>
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] kex follows: False
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:46:17.617 [DEBUG] [Thread-11011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:46:17.618 [DEBUG] [Thread-11011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:46:17.618 [DEBUG] [Thread-11011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:46:17.618 [DEBUG] [Thread-11011] [transport.py] [_log()] Compression: none
2025-12-25T11:46:17.618 [DEBUG] [Thread-11011] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:46:17.636 [DEBUG] [Thread-11011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:46:17.637 [DEBUG] [Thread-11011] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:46:17.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:46:17.639 [DEBUG] [Thread-11011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:46:17.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:46:17.641 [DEBUG] [Thread-11011] [transport.py] [_log()] userauth is OK
2025-12-25T11:46:17.642 [DEBUG] [Thread-11011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:46:17.642 [DEBUG] [Thread-11011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:46:17.642 [DEBUG] [Thread-11011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:46:17.642 [DEBUG] [Thread-11011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:46:17.680 [INFO] [Thread-11011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:46:17.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:46:18.325 [DEBUG] [Thread-11011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:46:18.325 [DEBUG] [Thread-11011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:46:18.326 [DEBUG] [Thread-11011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:46:18.366 [DEBUG] [Thread-11011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:46:18.366 [DEBUG] [Thread-11011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:46:18.368 [DEBUG] [Thread-11011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:46:18.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:46:18.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:46:18.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:46:18.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:46:18.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:46:18.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:46:18.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:46:18.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.407007 -999.00  +24.60  26.94     24   +3.10 1 1 1 1 1   888    0 30.05 301.63 ----- 26.9 26.9 311.0 33.0 31.2 -25.8 30.4 -25.6 29.7 -22.0 30.4 -23.2
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.407007
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:46:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:45:54', tmtdew=25.01, humidity=19.34, cloud=0.0, wind=21.77, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:46:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:46:18.391 [DEBUG] [Thread-11011] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:46:18.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:46:18.478 [DEBUG] [Thread-11014] [transport.py] [_log()] starting thread (client mode): 0xb6b16380
2025-12-25T11:46:18.478 [DEBUG] [Thread-11014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:46:18.493 [DEBUG] [Thread-11014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:46:18.493 [INFO] [Thread-11014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:46:18.500 [DEBUG] [Thread-11014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:46:18.500 [DEBUG] [Thread-11014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] client lang: <none>
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] server lang: <none>
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] kex follows: False
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:46:18.501 [DEBUG] [Thread-11014] [transport.py] [_log()] Compression: none
2025-12-25T11:46:18.502 [DEBUG] [Thread-11014] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:46:18.562 [DEBUG] [Thread-11014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:46:18.562 [DEBUG] [Thread-11014] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:46:18.563 [DEBUG] [Thread-11014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:46:18.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:46:18.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:46:18.618 [DEBUG] [Thread-11014] [transport.py] [_log()] userauth is OK
2025-12-25T11:46:18.618 [DEBUG] [Thread-11014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:46:18.619 [DEBUG] [Thread-11014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:46:18.619 [DEBUG] [Thread-11014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:46:18.619 [DEBUG] [Thread-11014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:46:18.642 [INFO] [Thread-11014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:46:18.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-25T11:46:18.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:46:19.477 [DEBUG] [Thread-11014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:46:19.477 [DEBUG] [Thread-11014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:46:19.525 [DEBUG] [Thread-11014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:46:19.525 [DEBUG] [Thread-11014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:46:19.534 [DEBUG] [Thread-11014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:46:19.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:46:19.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-25T11:46:19.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:46:19.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:46:19.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:46:19.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:46:19.570 [DEBUG] [Thread-11014] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:46:28.258 [DEBUG] [Thread-11016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:43.299 [DEBUG] [Thread-11017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:49.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:46:49.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:46:49.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-25T11:46:50.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 46, 26), 25.95, 18.21, 0.0, 20.91, 24.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:46:50.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:46:26
2025-12-25T11:46:50.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:46:50.555 [DEBUG] [Thread-11018] [transport.py] [_log()] starting thread (client mode): 0xb6b29f90
2025-12-25T11:46:50.555 [DEBUG] [Thread-11018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:46:50.575 [DEBUG] [Thread-11018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:46:50.576 [INFO] [Thread-11018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] client lang: <none>
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] server lang: <none>
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] kex follows: False
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] Compression: none
2025-12-25T11:46:50.579 [DEBUG] [Thread-11018] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:46:50.597 [DEBUG] [Thread-11018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:46:50.597 [DEBUG] [Thread-11018] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:46:50.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:46:50.598 [DEBUG] [Thread-11018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:46:50.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:46:50.641 [DEBUG] [Thread-11018] [transport.py] [_log()] userauth is OK
2025-12-25T11:46:50.641 [DEBUG] [Thread-11018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:46:50.641 [DEBUG] [Thread-11018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:46:50.641 [DEBUG] [Thread-11018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:46:50.642 [DEBUG] [Thread-11018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:46:50.662 [INFO] [Thread-11018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:46:50.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:46:51.324 [DEBUG] [Thread-11018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:46:51.324 [DEBUG] [Thread-11018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:46:51.325 [DEBUG] [Thread-11018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:46:51.365 [DEBUG] [Thread-11018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:46:51.365 [DEBUG] [Thread-11018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:46:51.369 [DEBUG] [Thread-11018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:46:51.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:46:51.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:46:51.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:46:51.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:46:51.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:46:51.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:46:51.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:46:51.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:46:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:46:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.407354 -999.00  +23.90  17.81     23   +1.90 1 1 1 1 1   888    0 30.00 300.80 ----- 17.8 17.8 311.8 23.0 31.3 -25.0 30.5 -25.2 29.8 -21.6 30.4 -22.6
2025-12-25T11:46:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:46:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:46:51.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.407354
2025-12-25T11:46:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:46:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:46:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:46:51.396 [DEBUG] [Thread-11018] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:46:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:46:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:46:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:46:26', tmtdew=25.95, humidity=18.21, cloud=0.0, wind=20.91, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:46:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:46:51.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:46:51.491 [DEBUG] [Thread-11021] [transport.py] [_log()] starting thread (client mode): 0xb6b2aa70
2025-12-25T11:46:51.491 [DEBUG] [Thread-11021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:46:51.506 [DEBUG] [Thread-11021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:46:51.506 [INFO] [Thread-11021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:46:51.513 [DEBUG] [Thread-11021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:46:51.514 [DEBUG] [Thread-11021] [transport.py] [_log()] client lang: <none>
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] server lang: <none>
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] kex follows: False
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] Compression: none
2025-12-25T11:46:51.515 [DEBUG] [Thread-11021] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:46:51.571 [DEBUG] [Thread-11021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:46:51.571 [DEBUG] [Thread-11021] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:46:51.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:46:51.573 [DEBUG] [Thread-11021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:46:51.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:46:51.626 [DEBUG] [Thread-11021] [transport.py] [_log()] userauth is OK
2025-12-25T11:46:51.627 [DEBUG] [Thread-11021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:46:51.627 [DEBUG] [Thread-11021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:46:51.627 [DEBUG] [Thread-11021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:46:51.627 [DEBUG] [Thread-11021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:46:51.647 [INFO] [Thread-11021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:46:51.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-25T11:46:51.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:46:52.487 [DEBUG] [Thread-11021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:46:52.487 [DEBUG] [Thread-11021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:46:52.535 [DEBUG] [Thread-11021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:46:52.535 [DEBUG] [Thread-11021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:46:52.544 [DEBUG] [Thread-11021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:46:52.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:46:52.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:46:52.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-25T11:46:52.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:46:52.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:46:52.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:46:52.581 [DEBUG] [Thread-11021] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:46:58.335 [DEBUG] [Thread-11023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:46:59.589 [DEBUG] [Thread-11024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:13.382 [DEBUG] [Thread-11025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:13.842 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:13.843 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:22.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:47:22.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:47:22.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-25T11:47:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 46, 58), 25.5, 18.73, 0.0, 14.93, 24.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:47:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:46:58
2025-12-25T11:47:23.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:47:23.572 [DEBUG] [Thread-11026] [transport.py] [_log()] starting thread (client mode): 0xb6b153c0
2025-12-25T11:47:23.572 [DEBUG] [Thread-11026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:47:23.590 [DEBUG] [Thread-11026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:47:23.590 [INFO] [Thread-11026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] client lang: <none>
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] server lang: <none>
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] kex follows: False
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] Compression: none
2025-12-25T11:47:23.592 [DEBUG] [Thread-11026] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:47:23.604 [DEBUG] [Thread-11026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:47:23.604 [DEBUG] [Thread-11026] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:47:23.604 [DEBUG] [Thread-11026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:47:23.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:47:23.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:47:23.606 [DEBUG] [Thread-11026] [transport.py] [_log()] userauth is OK
2025-12-25T11:47:23.606 [DEBUG] [Thread-11026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:47:23.606 [DEBUG] [Thread-11026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:47:23.606 [DEBUG] [Thread-11026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:47:23.606 [DEBUG] [Thread-11026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:47:23.624 [INFO] [Thread-11026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:47:23.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:47:24.313 [DEBUG] [Thread-11026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:47:24.313 [DEBUG] [Thread-11026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:47:24.314 [DEBUG] [Thread-11026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:47:24.354 [DEBUG] [Thread-11026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:47:24.354 [DEBUG] [Thread-11026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:47:24.357 [DEBUG] [Thread-11026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:47:24.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:47:24.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:47:24.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:47:24.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:47:24.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:47:24.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:47:24.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:47:24.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:47:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:47:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.407701 -999.00  +23.70  12.49     24   +2.30 1 1 1 1 1   888    0 29.89 301.03 ----- 12.5 12.5 294.0 16.1 31.3 -25.5 30.4 -25.7 29.7 -22.7 30.4 -22.7
2025-12-25T11:47:24.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:47:24.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:47:24.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.407701
2025-12-25T11:47:24.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:47:24.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:47:24.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:47:24.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:47:24.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:47:24.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:46:58', tmtdew=25.5, humidity=18.73, cloud=0.0, wind=14.93, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:47:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:47:24.381 [DEBUG] [Thread-11026] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:47:24.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-25T11:47:24.475 [DEBUG] [Thread-11029] [transport.py] [_log()] starting thread (client mode): 0xb6be38e0
2025-12-25T11:47:24.476 [DEBUG] [Thread-11029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:47:24.490 [DEBUG] [Thread-11029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:47:24.491 [INFO] [Thread-11029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:47:24.498 [DEBUG] [Thread-11029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:47:24.498 [DEBUG] [Thread-11029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:47:24.498 [DEBUG] [Thread-11029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:47:24.498 [DEBUG] [Thread-11029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:24.498 [DEBUG] [Thread-11029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] client lang: <none>
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] server lang: <none>
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] kex follows: False
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:47:24.499 [DEBUG] [Thread-11029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:47:24.500 [DEBUG] [Thread-11029] [transport.py] [_log()] Compression: none
2025-12-25T11:47:24.500 [DEBUG] [Thread-11029] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:47:24.557 [DEBUG] [Thread-11029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:47:24.558 [DEBUG] [Thread-11029] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:47:24.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:47:24.559 [DEBUG] [Thread-11029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:47:24.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:47:24.614 [DEBUG] [Thread-11029] [transport.py] [_log()] userauth is OK
2025-12-25T11:47:24.614 [DEBUG] [Thread-11029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:47:24.614 [DEBUG] [Thread-11029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:47:24.614 [DEBUG] [Thread-11029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:47:24.614 [DEBUG] [Thread-11029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:47:24.633 [INFO] [Thread-11029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:47:24.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-25T11:47:24.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:47:25.459 [DEBUG] [Thread-11029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:47:25.459 [DEBUG] [Thread-11029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:47:25.506 [DEBUG] [Thread-11029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:47:25.507 [DEBUG] [Thread-11029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:47:25.515 [DEBUG] [Thread-11029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:47:25.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:47:25.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-25T11:47:25.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-25T11:47:25.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:47:25.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:47:25.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:47:25.550 [DEBUG] [Thread-11029] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:47:28.415 [DEBUG] [Thread-11031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:43.460 [DEBUG] [Thread-11032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:55.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:47:55.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:47:55.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:47:56.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 47, 30), 24.87, 19.44, 0.0, 20.94, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:47:56.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:47:30
2025-12-25T11:47:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:47:56.547 [DEBUG] [Thread-11033] [transport.py] [_log()] starting thread (client mode): 0xb6b28b20
2025-12-25T11:47:56.548 [DEBUG] [Thread-11033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:47:56.567 [DEBUG] [Thread-11033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:47:56.568 [INFO] [Thread-11033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:56.570 [DEBUG] [Thread-11033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] client lang: <none>
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] server lang: <none>
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] kex follows: False
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] Compression: none
2025-12-25T11:47:56.571 [DEBUG] [Thread-11033] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:47:56.590 [DEBUG] [Thread-11033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:47:56.591 [DEBUG] [Thread-11033] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:47:56.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:47:56.592 [DEBUG] [Thread-11033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:47:56.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:47:56.594 [DEBUG] [Thread-11033] [transport.py] [_log()] userauth is OK
2025-12-25T11:47:56.595 [DEBUG] [Thread-11033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:47:56.595 [DEBUG] [Thread-11033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:47:56.595 [DEBUG] [Thread-11033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:47:56.595 [DEBUG] [Thread-11033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:47:56.619 [INFO] [Thread-11033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:47:56.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:47:57.191 [DEBUG] [Thread-11033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:47:57.191 [DEBUG] [Thread-11033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:47:57.192 [DEBUG] [Thread-11033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:47:57.232 [DEBUG] [Thread-11033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:47:57.232 [DEBUG] [Thread-11033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:47:57.235 [DEBUG] [Thread-11033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:47:57.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:47:57.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:47:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:47:57.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:47:57.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:47:57.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:47:57.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:47:57.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.408048 -999.00  +23.70  13.26     25   +2.80 1 2 1 1 1   888    0 28.97 272.77 ----- 13.3 13.3 317.2 16.7 31.4 -25.1 30.4 -24.7 29.8 -21.3 30.5 -21.8
2025-12-25T11:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.408048
2025-12-25T11:47:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:47:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:47:57.255 [DEBUG] [Thread-11033] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:47:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:47:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:47:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:47:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:47:30', tmtdew=24.87, humidity=19.44, cloud=0.0, wind=20.94, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:47:35.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:47:57.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-25T11:47:57.352 [DEBUG] [Thread-11036] [transport.py] [_log()] starting thread (client mode): 0xb6b16410
2025-12-25T11:47:57.353 [DEBUG] [Thread-11036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:47:57.370 [DEBUG] [Thread-11036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:47:57.370 [INFO] [Thread-11036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] client lang: <none>
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] server lang: <none>
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] kex follows: False
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:47:57.378 [DEBUG] [Thread-11036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:47:57.379 [DEBUG] [Thread-11036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:47:57.379 [DEBUG] [Thread-11036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:47:57.379 [DEBUG] [Thread-11036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:47:57.379 [DEBUG] [Thread-11036] [transport.py] [_log()] Compression: none
2025-12-25T11:47:57.379 [DEBUG] [Thread-11036] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:47:57.439 [DEBUG] [Thread-11036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:47:57.440 [DEBUG] [Thread-11036] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:47:57.440 [DEBUG] [Thread-11036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:47:57.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:47:57.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:47:57.495 [DEBUG] [Thread-11036] [transport.py] [_log()] userauth is OK
2025-12-25T11:47:57.496 [DEBUG] [Thread-11036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:47:57.496 [DEBUG] [Thread-11036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:47:57.496 [DEBUG] [Thread-11036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:47:57.496 [DEBUG] [Thread-11036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:47:57.515 [INFO] [Thread-11036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:47:57.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:47:57.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:47:58.369 [DEBUG] [Thread-11036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:47:58.369 [DEBUG] [Thread-11036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:47:58.417 [DEBUG] [Thread-11036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:47:58.417 [DEBUG] [Thread-11036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:47:58.427 [DEBUG] [Thread-11036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:47:58.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:47:58.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:47:58.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-25T11:47:58.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:47:58.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:47:58.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:47:58.463 [DEBUG] [Thread-11036] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:47:58.495 [DEBUG] [Thread-11038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:47:59.645 [DEBUG] [Thread-11039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:13.554 [DEBUG] [Thread-11040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:13.984 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:13.985 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:28.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:48:28.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:48:28.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-25T11:48:28.586 [DEBUG] [Thread-11041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 48, 2), 25.0, 19.29, 0.0, 20.7, 24.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:48:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:48:02
2025-12-25T11:48:29.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:48:29.457 [DEBUG] [Thread-11042] [transport.py] [_log()] starting thread (client mode): 0xb6b29930
2025-12-25T11:48:29.457 [DEBUG] [Thread-11042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:48:29.476 [DEBUG] [Thread-11042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:48:29.476 [INFO] [Thread-11042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] client lang: <none>
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] server lang: <none>
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] kex follows: False
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] Compression: none
2025-12-25T11:48:29.478 [DEBUG] [Thread-11042] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:48:29.487 [DEBUG] [Thread-11042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:48:29.487 [DEBUG] [Thread-11042] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:48:29.487 [DEBUG] [Thread-11042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:48:29.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:48:29.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:48:29.489 [DEBUG] [Thread-11042] [transport.py] [_log()] userauth is OK
2025-12-25T11:48:29.489 [DEBUG] [Thread-11042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:48:29.489 [DEBUG] [Thread-11042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:48:29.489 [DEBUG] [Thread-11042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:48:29.489 [DEBUG] [Thread-11042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:48:29.507 [INFO] [Thread-11042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:48:29.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:48:30.130 [DEBUG] [Thread-11042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:48:30.130 [DEBUG] [Thread-11042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:48:30.131 [DEBUG] [Thread-11042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:48:30.171 [DEBUG] [Thread-11042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:48:30.171 [DEBUG] [Thread-11042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:48:30.174 [DEBUG] [Thread-11042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:48:30.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:48:30.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:48:30.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:48:30.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:48:30.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:48:30.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:48:30.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:48:30.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:48:30.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:48:30.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.408396 -999.00  +24.20  24.50     24   +2.70 1 1 1 1 1   888    0 28.42 248.43 ----- 24.5 24.5 18.0 33.0 31.3 -25.8 30.5 -25.9 29.8 -22.6 30.2 -29.5
2025-12-25T11:48:30.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:48:30.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:48:30.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.408396
2025-12-25T11:48:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:48:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:48:30.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:48:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:48:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:48:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:48:02', tmtdew=25.0, humidity=19.29, cloud=0.0, wind=20.7, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:48:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:48:30.207 [DEBUG] [Thread-11042] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:48:30.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-25T11:48:30.307 [DEBUG] [Thread-11045] [transport.py] [_log()] starting thread (client mode): 0xb9578b80
2025-12-25T11:48:30.307 [DEBUG] [Thread-11045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:48:30.322 [DEBUG] [Thread-11045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:48:30.322 [INFO] [Thread-11045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:48:30.329 [DEBUG] [Thread-11045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:48:30.329 [DEBUG] [Thread-11045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:48:30.329 [DEBUG] [Thread-11045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] client lang: <none>
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] server lang: <none>
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] kex follows: False
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] Compression: none
2025-12-25T11:48:30.330 [DEBUG] [Thread-11045] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:48:30.392 [DEBUG] [Thread-11045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:48:30.392 [DEBUG] [Thread-11045] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:48:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:48:30.394 [DEBUG] [Thread-11045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:48:30.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:48:30.447 [DEBUG] [Thread-11045] [transport.py] [_log()] userauth is OK
2025-12-25T11:48:30.447 [DEBUG] [Thread-11045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:48:30.447 [DEBUG] [Thread-11045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:48:30.448 [DEBUG] [Thread-11045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:48:30.448 [DEBUG] [Thread-11045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:48:30.466 [INFO] [Thread-11045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:48:30.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-25T11:48:30.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:48:31.293 [DEBUG] [Thread-11045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:48:31.293 [DEBUG] [Thread-11045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:48:31.342 [DEBUG] [Thread-11045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:48:31.342 [DEBUG] [Thread-11045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:48:31.354 [DEBUG] [Thread-11045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:48:31.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:48:31.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:48:31.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-25T11:48:31.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:48:31.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:48:31.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:48:31.390 [DEBUG] [Thread-11045] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:48:43.619 [DEBUG] [Thread-11047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:58.665 [DEBUG] [Thread-11048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:48:59.693 [DEBUG] [Thread-11049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:01.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:49:01.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:49:01.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-25T11:49:02.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 48, 34), 25.41, 18.79, 0.0, 24.1, 24.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:49:02.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:48:34
2025-12-25T11:49:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:49:02.429 [DEBUG] [Thread-11050] [transport.py] [_log()] starting thread (client mode): 0xb9546da0
2025-12-25T11:49:02.429 [DEBUG] [Thread-11050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:49:02.458 [DEBUG] [Thread-11050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:49:02.458 [INFO] [Thread-11050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] client lang: <none>
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] server lang: <none>
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] kex follows: False
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] Compression: none
2025-12-25T11:49:02.461 [DEBUG] [Thread-11050] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:49:02.468 [DEBUG] [Thread-11050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:49:02.468 [DEBUG] [Thread-11050] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:49:02.468 [DEBUG] [Thread-11050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:49:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:49:02.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:49:02.469 [DEBUG] [Thread-11050] [transport.py] [_log()] userauth is OK
2025-12-25T11:49:02.469 [DEBUG] [Thread-11050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:49:02.469 [DEBUG] [Thread-11050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:49:02.469 [DEBUG] [Thread-11050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:49:02.469 [DEBUG] [Thread-11050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:49:02.485 [INFO] [Thread-11050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:49:02.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:49:03.120 [DEBUG] [Thread-11050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:49:03.120 [DEBUG] [Thread-11050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:49:03.121 [DEBUG] [Thread-11050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:49:03.161 [DEBUG] [Thread-11050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:49:03.161 [DEBUG] [Thread-11050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:49:03.164 [DEBUG] [Thread-11050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:49:03.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:49:03.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:49:03.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:49:03.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:49:03.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:49:03.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:49:03.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:49:03.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:49:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:49:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.408743 -999.00  +23.80  14.56     24   +2.30 1 2 1 1 1   888    0 28.41 251.88 ----- 14.6 14.6 325.3 21.1 31.3 -24.6 30.4 -24.3 29.8 -21.2 30.2 -22.0
2025-12-25T11:49:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:49:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:49:03.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.408743
2025-12-25T11:49:03.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:49:03.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:49:03.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:49:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:49:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:49:03.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:48:34', tmtdew=25.41, humidity=18.79, cloud=0.0, wind=24.1, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:48:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:49:03.188 [DEBUG] [Thread-11050] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:49:03.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-25T11:49:13.698 [DEBUG] [Thread-11053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:14.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:14.128 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:28.747 [DEBUG] [Thread-11054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:43.780 [DEBUG] [Thread-11055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:58.822 [DEBUG] [Thread-11056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:49:59.747 [DEBUG] [Thread-11057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:13.860 [DEBUG] [Thread-11058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:14.269 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:14.270 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:28.892 [DEBUG] [Thread-11059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:43.925 [DEBUG] [Thread-11060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:58.952 [DEBUG] [Thread-11061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:50:59.802 [DEBUG] [Thread-11062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:13.988 [DEBUG] [Thread-11063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:14.408 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:14.410 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:16.437 [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-25T11:51:29.023 [DEBUG] [Thread-11064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:44.057 [DEBUG] [Thread-11065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:46.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:51:46.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:51:46.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-25T11:51:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 51, 15), 24.48, 20.22, 0.0, 17.01, 24.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:51:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:51:15
2025-12-25T11:51:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:51:47.437 [DEBUG] [Thread-11066] [transport.py] [_log()] starting thread (client mode): 0xb6be3a60
2025-12-25T11:51:47.437 [DEBUG] [Thread-11066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:51:47.458 [DEBUG] [Thread-11066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:51:47.459 [INFO] [Thread-11066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:51:47.461 [DEBUG] [Thread-11066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] client lang: <none>
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] server lang: <none>
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] kex follows: False
2025-12-25T11:51:47.462 [DEBUG] [Thread-11066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:51:47.463 [DEBUG] [Thread-11066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:51:47.463 [DEBUG] [Thread-11066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:51:47.463 [DEBUG] [Thread-11066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:51:47.463 [DEBUG] [Thread-11066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:51:47.463 [DEBUG] [Thread-11066] [transport.py] [_log()] Compression: none
2025-12-25T11:51:47.463 [DEBUG] [Thread-11066] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:51:47.481 [DEBUG] [Thread-11066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:51:47.482 [DEBUG] [Thread-11066] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:51:47.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:51:47.483 [DEBUG] [Thread-11066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:51:47.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:51:47.485 [DEBUG] [Thread-11066] [transport.py] [_log()] userauth is OK
2025-12-25T11:51:47.486 [DEBUG] [Thread-11066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:51:47.486 [DEBUG] [Thread-11066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:51:47.486 [DEBUG] [Thread-11066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:51:47.486 [DEBUG] [Thread-11066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:51:47.510 [INFO] [Thread-11066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:51:47.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:51:48.258 [DEBUG] [Thread-11066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:51:48.258 [DEBUG] [Thread-11066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:51:48.258 [DEBUG] [Thread-11066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:51:48.299 [DEBUG] [Thread-11066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:51:48.299 [DEBUG] [Thread-11066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:51:48.301 [DEBUG] [Thread-11066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:51:48.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:51:48.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:51:48.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:51:48.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:51:48.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:51:48.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:51:48.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.410479 -999.00  +24.50  14.46     26   +3.80 1 2 1 1 1   888    0 28.59 237.37 ----- 14.5 14.5 4.7 21.4 31.2 -23.5 30.3 -22.7 29.8 -20.5 30.2 -22.5
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.410479
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:51:48.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:51:15', tmtdew=24.48, humidity=20.22, cloud=0.0, wind=17.01, temperature=24.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:51:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:51:48.318 [DEBUG] [Thread-11066] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:51:48.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-25T11:51:48.404 [DEBUG] [Thread-11069] [transport.py] [_log()] starting thread (client mode): 0xb9544580
2025-12-25T11:51:48.404 [DEBUG] [Thread-11069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:51:48.418 [DEBUG] [Thread-11069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:51:48.419 [INFO] [Thread-11069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] client lang: <none>
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] server lang: <none>
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] kex follows: False
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] Compression: none
2025-12-25T11:51:48.426 [DEBUG] [Thread-11069] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:51:48.483 [DEBUG] [Thread-11069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:51:48.484 [DEBUG] [Thread-11069] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:51:48.484 [DEBUG] [Thread-11069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:51:48.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:51:48.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:51:48.541 [DEBUG] [Thread-11069] [transport.py] [_log()] userauth is OK
2025-12-25T11:51:48.541 [DEBUG] [Thread-11069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:51:48.541 [DEBUG] [Thread-11069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:51:48.541 [DEBUG] [Thread-11069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:51:48.541 [DEBUG] [Thread-11069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:51:48.554 [INFO] [Thread-11069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:51:48.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-25T11:51:48.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:51:49.380 [DEBUG] [Thread-11069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:51:49.380 [DEBUG] [Thread-11069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:51:49.427 [DEBUG] [Thread-11069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:51:49.427 [DEBUG] [Thread-11069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:51:49.436 [DEBUG] [Thread-11069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:51:49.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:51:49.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-25T11:51:49.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-25T11:51:49.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:51:49.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:51:49.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:51:49.467 [DEBUG] [Thread-11069] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:51:59.093 [DEBUG] [Thread-11071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:51:59.857 [DEBUG] [Thread-11072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:14.139 [DEBUG] [Thread-11073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:14.572 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:14.573 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:19.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:52:19.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:52:19.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-25T11:52:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 51, 47), 24.75, 19.83, 0.0, 16.99, 25.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:52:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:51:47
2025-12-25T11:52:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:52:20.523 [DEBUG] [Thread-11074] [transport.py] [_log()] starting thread (client mode): 0xb9546290
2025-12-25T11:52:20.523 [DEBUG] [Thread-11074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:52:20.542 [DEBUG] [Thread-11074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:52:20.542 [INFO] [Thread-11074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:20.545 [DEBUG] [Thread-11074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] client lang: <none>
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] server lang: <none>
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] kex follows: False
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] Compression: none
2025-12-25T11:52:20.546 [DEBUG] [Thread-11074] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:52:20.560 [DEBUG] [Thread-11074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:52:20.561 [DEBUG] [Thread-11074] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:52:20.561 [DEBUG] [Thread-11074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:52:20.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:52:20.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:52:20.562 [DEBUG] [Thread-11074] [transport.py] [_log()] userauth is OK
2025-12-25T11:52:20.562 [DEBUG] [Thread-11074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:52:20.562 [DEBUG] [Thread-11074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:52:20.562 [DEBUG] [Thread-11074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:52:20.562 [DEBUG] [Thread-11074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:52:20.577 [INFO] [Thread-11074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:52:20.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:52:21.208 [DEBUG] [Thread-11074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:52:21.208 [DEBUG] [Thread-11074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:52:21.208 [DEBUG] [Thread-11074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:52:21.250 [DEBUG] [Thread-11074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:52:21.250 [DEBUG] [Thread-11074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:52:21.252 [DEBUG] [Thread-11074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:52:21.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:52:21.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:52:21.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:52:21.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:52:21.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:52:21.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:52:21.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.410826 -999.00  +24.20  25.94     24   +2.80 1 2 1 1 1   888    0 27.98 216.93 ----- 25.9 25.9 328.4 37.8 31.1 -24.0 30.3 -23.2 29.8 -20.6 30.2 -21.9
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.410826
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:52:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:51:47', tmtdew=24.75, humidity=19.83, cloud=0.0, wind=16.99, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:51:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:52:21.269 [DEBUG] [Thread-11074] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:52:21.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-25T11:52:21.355 [DEBUG] [Thread-11077] [transport.py] [_log()] starting thread (client mode): 0xb95441f0
2025-12-25T11:52:21.355 [DEBUG] [Thread-11077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:52:21.369 [DEBUG] [Thread-11077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:52:21.370 [INFO] [Thread-11077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] client lang: <none>
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] server lang: <none>
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] kex follows: False
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:52:21.377 [DEBUG] [Thread-11077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:52:21.378 [DEBUG] [Thread-11077] [transport.py] [_log()] Compression: none
2025-12-25T11:52:21.378 [DEBUG] [Thread-11077] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:52:21.437 [DEBUG] [Thread-11077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:52:21.437 [DEBUG] [Thread-11077] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:52:21.437 [DEBUG] [Thread-11077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:52:21.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:52:21.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:52:21.493 [DEBUG] [Thread-11077] [transport.py] [_log()] userauth is OK
2025-12-25T11:52:21.493 [DEBUG] [Thread-11077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:52:21.493 [DEBUG] [Thread-11077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:52:21.493 [DEBUG] [Thread-11077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:52:21.493 [DEBUG] [Thread-11077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:52:21.507 [INFO] [Thread-11077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:52:21.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-25T11:52:21.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:52:22.323 [DEBUG] [Thread-11077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:52:22.323 [DEBUG] [Thread-11077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:52:22.372 [DEBUG] [Thread-11077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:52:22.372 [DEBUG] [Thread-11077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:52:22.382 [DEBUG] [Thread-11077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:52:22.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:52:22.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-25T11:52:22.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-25T11:52:22.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:52:22.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:52:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:52:22.419 [DEBUG] [Thread-11077] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:52:29.171 [DEBUG] [Thread-11079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:44.227 [DEBUG] [Thread-11080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:52.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:52:52.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:52:52.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-25T11:52:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 52, 19), 24.87, 19.68, 0.0, 17.56, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:52:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:52:19
2025-12-25T11:52:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:52:53.490 [DEBUG] [Thread-11081] [transport.py] [_log()] starting thread (client mode): 0xb9546260
2025-12-25T11:52:53.490 [DEBUG] [Thread-11081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:52:53.511 [DEBUG] [Thread-11081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:52:53.511 [INFO] [Thread-11081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] client lang: <none>
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] server lang: <none>
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] kex follows: False
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] Compression: none
2025-12-25T11:52:53.515 [DEBUG] [Thread-11081] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:52:53.531 [DEBUG] [Thread-11081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:52:53.531 [DEBUG] [Thread-11081] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:52:53.532 [DEBUG] [Thread-11081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:52:53.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:52:53.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:52:53.532 [DEBUG] [Thread-11081] [transport.py] [_log()] userauth is OK
2025-12-25T11:52:53.532 [DEBUG] [Thread-11081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:52:53.532 [DEBUG] [Thread-11081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:52:53.532 [DEBUG] [Thread-11081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:52:53.532 [DEBUG] [Thread-11081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:52:53.544 [INFO] [Thread-11081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:52:53.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:52:54.278 [DEBUG] [Thread-11081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:52:54.278 [DEBUG] [Thread-11081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:52:54.278 [DEBUG] [Thread-11081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:52:54.319 [DEBUG] [Thread-11081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:52:54.319 [DEBUG] [Thread-11081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:52:54.321 [DEBUG] [Thread-11081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:52:54.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:52:54.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:52:54.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:52:54.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:52:54.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:52:54.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:52:54.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.411173 -999.00  +24.00  23.05     25   +3.00 1 2 1 1 1   888    0 27.16 191.07 ----- 23.1 23.1 332.6 32.8 31.2 -23.7 30.3 -23.1 29.8 -20.5 30.3 -21.4
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.411173
2025-12-25T11:52:54.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:52:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:52:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:52:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:52:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:52:54.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:52:19', tmtdew=24.87, humidity=19.68, cloud=0.0, wind=17.56, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:52:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:52:54.336 [DEBUG] [Thread-11081] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:52:54.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-25T11:52:54.424 [DEBUG] [Thread-11084] [transport.py] [_log()] starting thread (client mode): 0xb9544b50
2025-12-25T11:52:54.424 [DEBUG] [Thread-11084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:52:54.439 [DEBUG] [Thread-11084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:52:54.439 [INFO] [Thread-11084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] client lang: <none>
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] server lang: <none>
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] kex follows: False
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] Compression: none
2025-12-25T11:52:54.447 [DEBUG] [Thread-11084] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:52:54.504 [DEBUG] [Thread-11084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:52:54.504 [DEBUG] [Thread-11084] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:52:54.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:52:54.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:52:54.505 [DEBUG] [Thread-11084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:52:54.561 [DEBUG] [Thread-11084] [transport.py] [_log()] userauth is OK
2025-12-25T11:52:54.561 [DEBUG] [Thread-11084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:52:54.561 [DEBUG] [Thread-11084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:52:54.561 [DEBUG] [Thread-11084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:52:54.561 [DEBUG] [Thread-11084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:52:54.579 [INFO] [Thread-11084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:52:54.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-25T11:52:54.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:52:55.392 [DEBUG] [Thread-11084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:52:55.392 [DEBUG] [Thread-11084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:52:55.439 [DEBUG] [Thread-11084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:52:55.439 [DEBUG] [Thread-11084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:52:55.448 [DEBUG] [Thread-11084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:52:55.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:52:55.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:52:55.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-25T11:52:55.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:52:55.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:52:55.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:52:55.479 [DEBUG] [Thread-11084] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:52:59.259 [DEBUG] [Thread-11086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:52:59.910 [DEBUG] [Thread-11087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:14.316 [DEBUG] [Thread-11088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:14.713 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:14.715 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:25.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:53:25.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:53:25.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-25T11:53:26.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 52, 51), 25.62, 18.19, 0.0, 19.96, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:53:26.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:52:51
2025-12-25T11:53:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:53:26.492 [DEBUG] [Thread-11089] [transport.py] [_log()] starting thread (client mode): 0xb9544610
2025-12-25T11:53:26.492 [DEBUG] [Thread-11089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:53:26.511 [DEBUG] [Thread-11089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:53:26.511 [INFO] [Thread-11089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:53:26.514 [DEBUG] [Thread-11089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] client lang: <none>
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] server lang: <none>
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] kex follows: False
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] Compression: none
2025-12-25T11:53:26.515 [DEBUG] [Thread-11089] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:53:26.531 [DEBUG] [Thread-11089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:53:26.531 [DEBUG] [Thread-11089] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:53:26.532 [DEBUG] [Thread-11089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:53:26.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:53:26.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:53:26.534 [DEBUG] [Thread-11089] [transport.py] [_log()] userauth is OK
2025-12-25T11:53:26.534 [DEBUG] [Thread-11089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:53:26.534 [DEBUG] [Thread-11089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:53:26.534 [DEBUG] [Thread-11089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:53:26.534 [DEBUG] [Thread-11089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:53:26.558 [INFO] [Thread-11089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:53:26.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:53:27.217 [DEBUG] [Thread-11089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:53:27.218 [DEBUG] [Thread-11089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:53:27.218 [DEBUG] [Thread-11089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:53:27.259 [DEBUG] [Thread-11089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:53:27.259 [DEBUG] [Thread-11089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:53:27.262 [DEBUG] [Thread-11089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:53:27.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:53:27.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:53:27.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:53:27.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:53:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:53:27.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:53:27.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:53:27.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:53:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:53:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.411521 -999.00  +25.00  32.16     24   +3.30 1 2 2 1 1   888    0 27.42 181.18 ----- 32.2 32.2 318.5 36.1 31.2 -23.6 30.4 -22.1 29.9 -20.5 30.4 -21.5
2025-12-25T11:53:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:53:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:53:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.411521
2025-12-25T11:53:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:53:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:53:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:53:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:53:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:53:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:52:51', tmtdew=25.62, humidity=18.19, cloud=0.0, wind=19.96, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:52:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:53:27.288 [DEBUG] [Thread-11089] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:53: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-25T11:53:27.388 [DEBUG] [Thread-11092] [transport.py] [_log()] starting thread (client mode): 0xb9547910
2025-12-25T11:53:27.389 [DEBUG] [Thread-11092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:53:27.403 [DEBUG] [Thread-11092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:53:27.404 [INFO] [Thread-11092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:53:27.411 [DEBUG] [Thread-11092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:53:27.411 [DEBUG] [Thread-11092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:53:27.411 [DEBUG] [Thread-11092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:53:27.411 [DEBUG] [Thread-11092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] client lang: <none>
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] server lang: <none>
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] kex follows: False
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] Compression: none
2025-12-25T11:53:27.412 [DEBUG] [Thread-11092] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:53:27.471 [DEBUG] [Thread-11092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:53:27.471 [DEBUG] [Thread-11092] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:53:27.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:53:27.473 [DEBUG] [Thread-11092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:53:27.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:53:27.530 [DEBUG] [Thread-11092] [transport.py] [_log()] userauth is OK
2025-12-25T11:53:27.531 [DEBUG] [Thread-11092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:53:27.531 [DEBUG] [Thread-11092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:53:27.531 [DEBUG] [Thread-11092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:53:27.531 [DEBUG] [Thread-11092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:53:27.549 [INFO] [Thread-11092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:53:27.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:53:27.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:53:28.375 [DEBUG] [Thread-11092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:53:28.375 [DEBUG] [Thread-11092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:53:28.423 [DEBUG] [Thread-11092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:53:28.423 [DEBUG] [Thread-11092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:53:28.432 [DEBUG] [Thread-11092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:53:28.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:53:28.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-25T11:53:28.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-25T11:53:28.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:53:28.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:53:28.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:53:28.469 [DEBUG] [Thread-11092] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:53:29.351 [DEBUG] [Thread-11094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:44.397 [DEBUG] [Thread-11095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:58.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:53:58.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:53:58.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-25T11:53:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 53, 55), 26.2, 17.79, 0.0, 14.61, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:53:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:53:55
2025-12-25T11:53:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:53:59.428 [DEBUG] [Thread-11096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:53:59.485 [DEBUG] [Thread-11097] [transport.py] [_log()] starting thread (client mode): 0xb9546680
2025-12-25T11:53:59.485 [DEBUG] [Thread-11097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:53:59.505 [DEBUG] [Thread-11097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:53:59.505 [INFO] [Thread-11097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:53:59.507 [DEBUG] [Thread-11097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:53:59.507 [DEBUG] [Thread-11097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:53:59.507 [DEBUG] [Thread-11097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] client lang: <none>
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] server lang: <none>
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] kex follows: False
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] Compression: none
2025-12-25T11:53:59.508 [DEBUG] [Thread-11097] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:53:59.520 [DEBUG] [Thread-11097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:53:59.520 [DEBUG] [Thread-11097] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:53:59.521 [DEBUG] [Thread-11097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:53:59.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:53:59.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:53:59.522 [DEBUG] [Thread-11097] [transport.py] [_log()] userauth is OK
2025-12-25T11:53:59.523 [DEBUG] [Thread-11097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:53:59.523 [DEBUG] [Thread-11097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:53:59.523 [DEBUG] [Thread-11097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:53:59.523 [DEBUG] [Thread-11097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:53:59.558 [INFO] [Thread-11097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:53:59.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:53:59.965 [DEBUG] [Thread-11099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:54:00.289 [DEBUG] [Thread-11097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:54:00.289 [DEBUG] [Thread-11097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:54:00.289 [DEBUG] [Thread-11097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:54:00.330 [DEBUG] [Thread-11097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:54:00.330 [DEBUG] [Thread-11097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:54:00.333 [DEBUG] [Thread-11097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:54:00.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:54:00.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:54:00.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:54:00.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:54:00.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:54:00.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:54:00.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:54:00.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:54:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:54:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.411868 -999.00  +25.00  14.29     23   +2.50 1 1 1 1 1   888    0 26.59 163.85 ----- 14.3 14.3 294.2 37.0 31.2 -24.6 30.5 -23.9 29.8 -22.3 30.5 -22.8
2025-12-25T11:54:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:54:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:54:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.411868
2025-12-25T11:54:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:54:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:54:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:54:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:54:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:54:00.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:53:55', tmtdew=26.2, humidity=17.79, cloud=0.0, wind=14.61, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:53:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:54:00.359 [DEBUG] [Thread-11097] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:54:00.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-25T11:54:00.458 [DEBUG] [Thread-11101] [transport.py] [_log()] starting thread (client mode): 0xb9547130
2025-12-25T11:54:00.459 [DEBUG] [Thread-11101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:54:00.474 [DEBUG] [Thread-11101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:54:00.474 [INFO] [Thread-11101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:54:00.482 [DEBUG] [Thread-11101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:54:00.482 [DEBUG] [Thread-11101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:54:00.482 [DEBUG] [Thread-11101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] client lang: <none>
2025-12-25T11:54:00.483 [DEBUG] [Thread-11101] [transport.py] [_log()] server lang: <none>
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] kex follows: False
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:54:00.484 [DEBUG] [Thread-11101] [transport.py] [_log()] Compression: none
2025-12-25T11:54:00.485 [DEBUG] [Thread-11101] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:54:00.543 [DEBUG] [Thread-11101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:54:00.544 [DEBUG] [Thread-11101] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:54:00.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:54:00.545 [DEBUG] [Thread-11101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:54:00.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:54:00.600 [DEBUG] [Thread-11101] [transport.py] [_log()] userauth is OK
2025-12-25T11:54:00.601 [DEBUG] [Thread-11101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:54:00.601 [DEBUG] [Thread-11101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:54:00.601 [DEBUG] [Thread-11101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:54:00.601 [DEBUG] [Thread-11101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:54:00.620 [INFO] [Thread-11101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:54:00.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-25T11:54:00.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:54:01.463 [DEBUG] [Thread-11101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:54:01.463 [DEBUG] [Thread-11101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:54:01.515 [DEBUG] [Thread-11101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:54:01.515 [DEBUG] [Thread-11101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:54:01.523 [DEBUG] [Thread-11101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:54:01.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:54:01.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-25T11:54:01.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-25T11:54:01.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:54:01.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:54:01.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:54:01.556 [DEBUG] [Thread-11101] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:54:14.458 [DEBUG] [Thread-11103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:54:14.855 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:54:14.856 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:54:29.499 [DEBUG] [Thread-11104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:54:31.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:54:31.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:54:31.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-25T11:54:32.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 54, 27), 26.71, 17.23, 0.0, 27.13, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:54:32.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:54:27
2025-12-25T11:54:32.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:54:32.555 [DEBUG] [Thread-11105] [transport.py] [_log()] starting thread (client mode): 0xb9546020
2025-12-25T11:54:32.555 [DEBUG] [Thread-11105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:54:32.578 [DEBUG] [Thread-11105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:54:32.578 [INFO] [Thread-11105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] client lang: <none>
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] server lang: <none>
2025-12-25T11:54:32.581 [DEBUG] [Thread-11105] [transport.py] [_log()] kex follows: False
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] Compression: none
2025-12-25T11:54:32.582 [DEBUG] [Thread-11105] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:54:32.599 [DEBUG] [Thread-11105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:54:32.599 [DEBUG] [Thread-11105] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:54:32.600 [DEBUG] [Thread-11105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:54:32.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:54:32.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:54:32.602 [DEBUG] [Thread-11105] [transport.py] [_log()] userauth is OK
2025-12-25T11:54:32.602 [DEBUG] [Thread-11105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:54:32.602 [DEBUG] [Thread-11105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:54:32.603 [DEBUG] [Thread-11105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:54:32.603 [DEBUG] [Thread-11105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:54:32.627 [INFO] [Thread-11105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:54:32.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:54:33.277 [DEBUG] [Thread-11105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:54:33.277 [DEBUG] [Thread-11105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:54:33.278 [DEBUG] [Thread-11105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:54:33.318 [DEBUG] [Thread-11105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:54:33.318 [DEBUG] [Thread-11105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:54:33.322 [DEBUG] [Thread-11105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:54:33.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:54:33.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:54:33.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:54:33.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:54:33.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:54:33.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:54:33.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:54:33.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:54:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:54:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.412215 -999.00  +24.90  24.67     23   +2.50 1 2 1 1 1   888    0 25.99 144.14 ----- 24.7 24.7 292.4 29.6 31.2 -24.3 30.5 -23.6 29.8 -21.9 30.5 -22.8
2025-12-25T11:54:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:54:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:54:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.412215
2025-12-25T11:54:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:54:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:54:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:54:33.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:54:33.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:54:33.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:54:27', tmtdew=26.71, humidity=17.23, cloud=0.0, wind=27.13, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:53:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:54:33.351 [DEBUG] [Thread-11105] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:54:33.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-25T11:54:33.445 [DEBUG] [Thread-11108] [transport.py] [_log()] starting thread (client mode): 0xb9547760
2025-12-25T11:54:33.445 [DEBUG] [Thread-11108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:54:33.459 [DEBUG] [Thread-11108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:54:33.459 [INFO] [Thread-11108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] client lang: <none>
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] server lang: <none>
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] kex follows: False
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:54:33.467 [DEBUG] [Thread-11108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:54:33.468 [DEBUG] [Thread-11108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:54:33.468 [DEBUG] [Thread-11108] [transport.py] [_log()] Compression: none
2025-12-25T11:54:33.468 [DEBUG] [Thread-11108] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:54:33.527 [DEBUG] [Thread-11108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:54:33.527 [DEBUG] [Thread-11108] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:54:33.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:54:33.528 [DEBUG] [Thread-11108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:54:33.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:54:33.583 [DEBUG] [Thread-11108] [transport.py] [_log()] userauth is OK
2025-12-25T11:54:33.583 [DEBUG] [Thread-11108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:54:33.583 [DEBUG] [Thread-11108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:54:33.584 [DEBUG] [Thread-11108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:54:33.584 [DEBUG] [Thread-11108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:54:33.602 [INFO] [Thread-11108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:54:33.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-25T11:54:33.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:54:34.412 [DEBUG] [Thread-11108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:54:34.413 [DEBUG] [Thread-11108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:54:34.461 [DEBUG] [Thread-11108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:54:34.461 [DEBUG] [Thread-11108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:54:34.470 [DEBUG] [Thread-11108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:54:34.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:54:34.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:54: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') -> 00000000
2025-12-25T11:54:34.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:54:34.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:54:34.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:54:34.506 [DEBUG] [Thread-11108] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:54:44.532 [DEBUG] [Thread-11110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:54:59.587 [DEBUG] [Thread-11111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:00.014 [DEBUG] [Thread-11112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:55:04.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:55:04.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-25T11:55:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 54, 59), 27.13, 16.75, 0.0, 24.84, 25.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:55:05.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:54:59
2025-12-25T11:55:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:55:05.498 [DEBUG] [Thread-11113] [transport.py] [_log()] starting thread (client mode): 0xb6b29660
2025-12-25T11:55:05.498 [DEBUG] [Thread-11113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:55:05.518 [DEBUG] [Thread-11113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:55:05.518 [INFO] [Thread-11113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:55:05.521 [DEBUG] [Thread-11113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:55:05.521 [DEBUG] [Thread-11113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] client lang: <none>
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] server lang: <none>
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] kex follows: False
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] Compression: none
2025-12-25T11:55:05.522 [DEBUG] [Thread-11113] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:55:05.537 [DEBUG] [Thread-11113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:55:05.538 [DEBUG] [Thread-11113] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:55:05.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:55:05.538 [DEBUG] [Thread-11113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:55:05.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:55:05.539 [DEBUG] [Thread-11113] [transport.py] [_log()] userauth is OK
2025-12-25T11:55:05.539 [DEBUG] [Thread-11113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:55:05.540 [DEBUG] [Thread-11113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:55:05.540 [DEBUG] [Thread-11113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:55:05.540 [DEBUG] [Thread-11113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:55:05.557 [INFO] [Thread-11113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:55:05.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:55:06.386 [DEBUG] [Thread-11113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:55:06.386 [DEBUG] [Thread-11113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:55:06.387 [DEBUG] [Thread-11113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:55:06.427 [DEBUG] [Thread-11113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:55:06.427 [DEBUG] [Thread-11113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:55:06.430 [DEBUG] [Thread-11113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:55:06.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:55:06.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:55:06.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:55:06.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:55:06.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:55:06.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:55:06.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:55:06.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:55:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:55:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.412909 -999.00  +25.30  31.81     22   +2.20 1 2 2 1 1   888    0 26.49 136.66 ----- 31.8 31.8 330.0 37.0 31.3 -23.4 30.6 -22.7 30.0 -20.8 30.4 -22.4
2025-12-25T11:55:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:55:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:55:06.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.412909
2025-12-25T11:55:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:55:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:55:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:55:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:55:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:55:06.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:54:59', tmtdew=27.13, humidity=16.75, cloud=0.0, wind=24.84, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:54:35.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:55:06.459 [DEBUG] [Thread-11113] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:55:06.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-25T11:55:06.552 [DEBUG] [Thread-11116] [transport.py] [_log()] starting thread (client mode): 0xb6b29fc0
2025-12-25T11:55:06.552 [DEBUG] [Thread-11116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:55:06.567 [DEBUG] [Thread-11116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:55:06.567 [INFO] [Thread-11116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:55:06.574 [DEBUG] [Thread-11116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] client lang: <none>
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] server lang: <none>
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] kex follows: False
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] Compression: none
2025-12-25T11:55:06.575 [DEBUG] [Thread-11116] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:55:06.635 [DEBUG] [Thread-11116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:55:06.636 [DEBUG] [Thread-11116] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:55:06.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:55:06.637 [DEBUG] [Thread-11116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:55:06.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:55:06.691 [DEBUG] [Thread-11116] [transport.py] [_log()] userauth is OK
2025-12-25T11:55:06.691 [DEBUG] [Thread-11116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:55:06.692 [DEBUG] [Thread-11116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:55:06.692 [DEBUG] [Thread-11116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:55:06.692 [DEBUG] [Thread-11116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:55:06.711 [INFO] [Thread-11116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:55:06.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-25T11:55:06.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:55:07.555 [DEBUG] [Thread-11116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:55:07.555 [DEBUG] [Thread-11116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:55:07.603 [DEBUG] [Thread-11116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:55:07.603 [DEBUG] [Thread-11116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:55:07.612 [DEBUG] [Thread-11116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:55:07.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:55:07.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:55:07.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-25T11:55:07.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:55:07.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:55:07.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:55:07.649 [DEBUG] [Thread-11116] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:55:14.624 [DEBUG] [Thread-11118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:14.995 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:14.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:29.672 [DEBUG] [Thread-11119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:37.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:55:37.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:55:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:55:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 55, 31), 27.25, 16.6, 0.0, 28.02, 25.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:55:38.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:55:31
2025-12-25T11:55:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:55:38.630 [DEBUG] [Thread-11120] [transport.py] [_log()] starting thread (client mode): 0xb6b28850
2025-12-25T11:55:38.630 [DEBUG] [Thread-11120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:55:38.650 [DEBUG] [Thread-11120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:55:38.650 [INFO] [Thread-11120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:55:38.653 [DEBUG] [Thread-11120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] client lang: <none>
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] server lang: <none>
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] kex follows: False
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] Compression: none
2025-12-25T11:55:38.654 [DEBUG] [Thread-11120] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:55:38.671 [DEBUG] [Thread-11120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:55:38.672 [DEBUG] [Thread-11120] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:55:38.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:55:38.673 [DEBUG] [Thread-11120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:55:38.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:55:38.676 [DEBUG] [Thread-11120] [transport.py] [_log()] userauth is OK
2025-12-25T11:55:38.676 [DEBUG] [Thread-11120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:55:38.676 [DEBUG] [Thread-11120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:55:38.676 [DEBUG] [Thread-11120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:55:38.676 [DEBUG] [Thread-11120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:55:38.711 [INFO] [Thread-11120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:55:38.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:55:39.374 [DEBUG] [Thread-11120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:55:39.374 [DEBUG] [Thread-11120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:55:39.374 [DEBUG] [Thread-11120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:55:39.415 [DEBUG] [Thread-11120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:55:39.415 [DEBUG] [Thread-11120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:55:39.418 [DEBUG] [Thread-11120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:55:39.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:55:39.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:55:39.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:55:39.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:55:39.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:55:39.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:55:39.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:55:39.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:55:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:55:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.413256 -999.00  +25.60  38.08     21   +1.90 1 1 2 1 1   888    0 25.69 136.28 ----- 38.1 38.1 310.8 40.8 31.3 -25.2 30.6 -24.8 29.9 -22.3 30.6 -23.0
2025-12-25T11:55:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:55:39.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:55:39.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.413256
2025-12-25T11:55:39.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:55:39.447 [DEBUG] [Thread-11120] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:55:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:55:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:55:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:55:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:55:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:55:31', tmtdew=27.25, humidity=16.6, cloud=0.0, wind=28.02, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:55:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:55:39.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-25T11:55:39.542 [DEBUG] [Thread-11123] [transport.py] [_log()] starting thread (client mode): 0xb6b28bb0
2025-12-25T11:55:39.542 [DEBUG] [Thread-11123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:55:39.557 [DEBUG] [Thread-11123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:55:39.557 [INFO] [Thread-11123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] client lang: <none>
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] server lang: <none>
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] kex follows: False
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:55:39.565 [DEBUG] [Thread-11123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:55:39.566 [DEBUG] [Thread-11123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:55:39.566 [DEBUG] [Thread-11123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:55:39.566 [DEBUG] [Thread-11123] [transport.py] [_log()] Compression: none
2025-12-25T11:55:39.566 [DEBUG] [Thread-11123] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:55:39.627 [DEBUG] [Thread-11123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:55:39.628 [DEBUG] [Thread-11123] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:55:39.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:55:39.629 [DEBUG] [Thread-11123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:55:39.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:55:39.684 [DEBUG] [Thread-11123] [transport.py] [_log()] userauth is OK
2025-12-25T11:55:39.684 [DEBUG] [Thread-11123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:55:39.684 [DEBUG] [Thread-11123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:55:39.684 [DEBUG] [Thread-11123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:55:39.684 [DEBUG] [Thread-11123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:55:39.703 [INFO] [Thread-11123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:55:39.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:55:39.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:55:40.601 [DEBUG] [Thread-11123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:55:40.601 [DEBUG] [Thread-11123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:55:40.649 [DEBUG] [Thread-11123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:55:40.649 [DEBUG] [Thread-11123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:55:40.659 [DEBUG] [Thread-11123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:55:40.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:55:40.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-25T11:55:40.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:55:40.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:55:40.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:55:40.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:55:40.695 [DEBUG] [Thread-11123] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:55:44.705 [DEBUG] [Thread-11125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:55:59.758 [DEBUG] [Thread-11126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:00.063 [DEBUG] [Thread-11127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:10.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:56:10.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:56:10.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:56:11.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 56, 3), 27.26, 16.58, 0.0, 27.37, 25.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:56:11.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:56:03
2025-12-25T11:56:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:56:11.713 [DEBUG] [Thread-11128] [transport.py] [_log()] starting thread (client mode): 0xb9544a30
2025-12-25T11:56:11.713 [DEBUG] [Thread-11128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:56:11.738 [DEBUG] [Thread-11128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:56:11.738 [INFO] [Thread-11128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:56:11.739 [DEBUG] [Thread-11128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:56:11.739 [DEBUG] [Thread-11128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] client lang: <none>
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] server lang: <none>
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] kex follows: False
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] Compression: none
2025-12-25T11:56:11.740 [DEBUG] [Thread-11128] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:56:11.756 [DEBUG] [Thread-11128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:56:11.757 [DEBUG] [Thread-11128] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:56:11.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:56:11.758 [DEBUG] [Thread-11128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:56:11.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:56:11.760 [DEBUG] [Thread-11128] [transport.py] [_log()] userauth is OK
2025-12-25T11:56:11.760 [DEBUG] [Thread-11128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:56:11.760 [DEBUG] [Thread-11128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:56:11.761 [DEBUG] [Thread-11128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:56:11.761 [DEBUG] [Thread-11128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:56:11.779 [INFO] [Thread-11128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:56:11.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:56:12.450 [DEBUG] [Thread-11128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:56:12.450 [DEBUG] [Thread-11128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:56:12.451 [DEBUG] [Thread-11128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:56:12.491 [DEBUG] [Thread-11128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:56:12.491 [DEBUG] [Thread-11128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:56:12.494 [DEBUG] [Thread-11128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:56:12.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:56:12.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:56:12.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:56:12.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:56:12.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:56:12.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:56:12.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:56:12.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:56:12.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:56:12.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.413604 -999.00  +24.90  24.60     21   +1.50 1 1 1 1 1   888    0 26.12 129.44 ----- 24.6 24.6 322.4 34.0 31.1 -24.9 30.3 -25.1 29.9 -22.3 30.5 -24.2
2025-12-25T11:56:12.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:56:12.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:56:12.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.413604
2025-12-25T11:56:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:56:12.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:56:12.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:56:12.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:56:12.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:56:12.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:56:03', tmtdew=27.26, humidity=16.58, cloud=0.0, wind=27.37, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:55:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:56:12.521 [DEBUG] [Thread-11128] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:56:12.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-25T11:56:12.614 [DEBUG] [Thread-11131] [transport.py] [_log()] starting thread (client mode): 0xb9545510
2025-12-25T11:56:12.615 [DEBUG] [Thread-11131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:56:12.629 [DEBUG] [Thread-11131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:56:12.629 [INFO] [Thread-11131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:56:12.637 [DEBUG] [Thread-11131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:56:12.637 [DEBUG] [Thread-11131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:56:12.637 [DEBUG] [Thread-11131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:56:12.637 [DEBUG] [Thread-11131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] client lang: <none>
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] server lang: <none>
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] kex follows: False
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:56:12.638 [DEBUG] [Thread-11131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:56:12.639 [DEBUG] [Thread-11131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:56:12.639 [DEBUG] [Thread-11131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:56:12.639 [DEBUG] [Thread-11131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:56:12.639 [DEBUG] [Thread-11131] [transport.py] [_log()] Compression: none
2025-12-25T11:56:12.639 [DEBUG] [Thread-11131] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:56:12.697 [DEBUG] [Thread-11131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:56:12.697 [DEBUG] [Thread-11131] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:56:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:56:12.698 [DEBUG] [Thread-11131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:56:12.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:56:12.756 [DEBUG] [Thread-11131] [transport.py] [_log()] userauth is OK
2025-12-25T11:56:12.756 [DEBUG] [Thread-11131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:56:12.756 [DEBUG] [Thread-11131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:56:12.757 [DEBUG] [Thread-11131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:56:12.757 [DEBUG] [Thread-11131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:56:12.775 [INFO] [Thread-11131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:56:12.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-25T11:56:12.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:56:13.671 [DEBUG] [Thread-11131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:56:13.671 [DEBUG] [Thread-11131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:56:13.720 [DEBUG] [Thread-11131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:56:13.720 [DEBUG] [Thread-11131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:56:13.729 [DEBUG] [Thread-11131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:56:13.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:56:13.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:56:13.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-25T11:56:13.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:56:13.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:56:13.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:56:13.764 [DEBUG] [Thread-11131] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:56:14.791 [DEBUG] [Thread-11133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:15.146 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:15.147 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:29.844 [DEBUG] [Thread-11134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:56:43.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:56:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:56:44.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 56, 35), 28.14, 15.23, 0.0, 29.41, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:56:44.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:56:35
2025-12-25T11:56:44.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:56:44.770 [DEBUG] [Thread-11135] [transport.py] [_log()] starting thread (client mode): 0xb9546740
2025-12-25T11:56:44.770 [DEBUG] [Thread-11135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:56:44.791 [DEBUG] [Thread-11135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:56:44.791 [INFO] [Thread-11135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] client lang: <none>
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] server lang: <none>
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] kex follows: False
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] Compression: none
2025-12-25T11:56:44.794 [DEBUG] [Thread-11135] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:56:44.808 [DEBUG] [Thread-11135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:56:44.808 [DEBUG] [Thread-11135] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:56:44.808 [DEBUG] [Thread-11135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:56:44.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:56:44.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:56:44.810 [DEBUG] [Thread-11135] [transport.py] [_log()] userauth is OK
2025-12-25T11:56:44.810 [DEBUG] [Thread-11135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:56:44.810 [DEBUG] [Thread-11135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:56:44.810 [DEBUG] [Thread-11135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:56:44.810 [DEBUG] [Thread-11135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:56:44.825 [INFO] [Thread-11135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:56:44.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:56:44.880 [DEBUG] [Thread-11137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:56:45.422 [DEBUG] [Thread-11135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:56:45.422 [DEBUG] [Thread-11135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:56:45.422 [DEBUG] [Thread-11135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:56:45.462 [DEBUG] [Thread-11135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:56:45.462 [DEBUG] [Thread-11135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:56:45.464 [DEBUG] [Thread-11135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:56:45.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:56:45.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:56:45.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:56:45.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:56:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:56:45.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:56:45.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.413951 -999.00  +25.10  25.39     21   +1.60 1 2 1 1 1   888    0 25.99 136.88 ----- 25.4 25.4 338.4 31.1 31.3 -24.6 30.5 -24.2 29.9 -21.7 30.4 -23.0
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.413951
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T11:56:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:56:35', tmtdew=28.14, humidity=15.23, cloud=0.0, wind=29.41, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:56:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:56:45.483 [DEBUG] [Thread-11135] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:56:45.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-25T11:56:45.566 [DEBUG] [Thread-11139] [transport.py] [_log()] starting thread (client mode): 0xb6b28190
2025-12-25T11:56:45.566 [DEBUG] [Thread-11139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:56:45.585 [DEBUG] [Thread-11139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:56:45.585 [INFO] [Thread-11139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] client lang: <none>
2025-12-25T11:56:45.592 [DEBUG] [Thread-11139] [transport.py] [_log()] server lang: <none>
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] kex follows: False
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] Compression: none
2025-12-25T11:56:45.593 [DEBUG] [Thread-11139] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:56:45.651 [DEBUG] [Thread-11139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:56:45.651 [DEBUG] [Thread-11139] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:56:45.651 [DEBUG] [Thread-11139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:56:45.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:56:45.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:56:45.708 [DEBUG] [Thread-11139] [transport.py] [_log()] userauth is OK
2025-12-25T11:56:45.708 [DEBUG] [Thread-11139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:56:45.708 [DEBUG] [Thread-11139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:56:45.708 [DEBUG] [Thread-11139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:56:45.708 [DEBUG] [Thread-11139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:56:45.725 [INFO] [Thread-11139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:56:45.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:56:45.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:56:46.600 [DEBUG] [Thread-11139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:56:46.600 [DEBUG] [Thread-11139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:56:46.648 [DEBUG] [Thread-11139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:56:46.649 [DEBUG] [Thread-11139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:56:46.657 [DEBUG] [Thread-11139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:56:46.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:56:46.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-25T11:56: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-25T11:56:46.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:56:46.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:56:46.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:56:46.689 [DEBUG] [Thread-11139] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:56:59.911 [DEBUG] [Thread-11141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:00.116 [DEBUG] [Thread-11142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:14.971 [DEBUG] [Thread-11143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:15.288 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:15.289 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:57:16.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:57:16.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-25T11:57:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 57, 9), 28.17, 15.15, 0.0, 33.51, 25.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:57:17.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:57:09
2025-12-25T11:57:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:57:17.687 [DEBUG] [Thread-11144] [transport.py] [_log()] starting thread (client mode): 0xb6be20e0
2025-12-25T11:57:17.687 [DEBUG] [Thread-11144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:57:17.717 [DEBUG] [Thread-11144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:57:17.718 [INFO] [Thread-11144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] client lang: <none>
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] server lang: <none>
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] kex follows: False
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:57:17.720 [DEBUG] [Thread-11144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:57:17.721 [DEBUG] [Thread-11144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:57:17.721 [DEBUG] [Thread-11144] [transport.py] [_log()] Compression: none
2025-12-25T11:57:17.721 [DEBUG] [Thread-11144] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:57:17.732 [DEBUG] [Thread-11144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:57:17.732 [DEBUG] [Thread-11144] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:57:17.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:57:17.733 [DEBUG] [Thread-11144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:57:17.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:57:17.738 [DEBUG] [Thread-11144] [transport.py] [_log()] userauth is OK
2025-12-25T11:57:17.738 [DEBUG] [Thread-11144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:57:17.738 [DEBUG] [Thread-11144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:57:17.738 [DEBUG] [Thread-11144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:57:17.738 [DEBUG] [Thread-11144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:57:17.763 [INFO] [Thread-11144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:57:17.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:57:18.364 [DEBUG] [Thread-11144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:57:18.364 [DEBUG] [Thread-11144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:57:18.364 [DEBUG] [Thread-11144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:57:18.405 [DEBUG] [Thread-11144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:57:18.405 [DEBUG] [Thread-11144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:57:18.409 [DEBUG] [Thread-11144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:57:18.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:57:18.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:57:18.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:57:18.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:57:18.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:57:18.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:57:18.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:57:18.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:57:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:57:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.414298 -999.00  +25.10  34.16     21   +1.30 1 1 2 1 1   888    0 25.67 130.31 ----- 34.2 34.2 297.8 54.3 31.1 -25.9 30.3 -24.4 29.8 -26.0 30.6 -23.0
2025-12-25T11:57:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:57:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:57:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.414298
2025-12-25T11:57:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:57:18.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:57:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:57:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:57:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:57:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:57:09', tmtdew=28.17, humidity=15.15, cloud=0.0, wind=33.51, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:56:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:57:18.434 [DEBUG] [Thread-11144] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:57:18.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T11:57:18.528 [DEBUG] [Thread-11147] [transport.py] [_log()] starting thread (client mode): 0xb6be17b0
2025-12-25T11:57:18.528 [DEBUG] [Thread-11147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:57:18.544 [DEBUG] [Thread-11147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:57:18.544 [INFO] [Thread-11147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:57:18.551 [DEBUG] [Thread-11147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:57:18.552 [DEBUG] [Thread-11147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] client lang: <none>
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] server lang: <none>
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] kex follows: False
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] Compression: none
2025-12-25T11:57:18.553 [DEBUG] [Thread-11147] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:57:18.616 [DEBUG] [Thread-11147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:57:18.616 [DEBUG] [Thread-11147] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:57:18.617 [DEBUG] [Thread-11147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:57:18.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:57:18.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:57:18.676 [DEBUG] [Thread-11147] [transport.py] [_log()] userauth is OK
2025-12-25T11:57:18.677 [DEBUG] [Thread-11147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:57:18.677 [DEBUG] [Thread-11147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:57:18.677 [DEBUG] [Thread-11147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:57:18.677 [DEBUG] [Thread-11147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:57:18.697 [INFO] [Thread-11147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:57:18.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-25T11:57:18.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:57:19.518 [DEBUG] [Thread-11147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:57:19.518 [DEBUG] [Thread-11147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:57:19.566 [DEBUG] [Thread-11147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:57:19.566 [DEBUG] [Thread-11147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:57:19.575 [DEBUG] [Thread-11147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:57:19.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:57:19.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:57:19.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-25T11:57:19.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:57:19.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:57:19.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:57:19.613 [DEBUG] [Thread-11147] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:57:30.002 [DEBUG] [Thread-11149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:45.053 [DEBUG] [Thread-11150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:57:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:57:49.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:57:49.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-25T11:57:50.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 57, 41), 28.42, 15.23, 0.0, 30.15, 24.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:57:50.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:57:41
2025-12-25T11:57:50.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:57:50.603 [DEBUG] [Thread-11151] [transport.py] [_log()] starting thread (client mode): 0xb95455a0
2025-12-25T11:57:50.603 [DEBUG] [Thread-11151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:57:50.623 [DEBUG] [Thread-11151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:57:50.623 [INFO] [Thread-11151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] client lang: <none>
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] server lang: <none>
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] kex follows: False
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] Compression: none
2025-12-25T11:57:50.626 [DEBUG] [Thread-11151] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:57:50.646 [DEBUG] [Thread-11151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:57:50.646 [DEBUG] [Thread-11151] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:57:50.647 [DEBUG] [Thread-11151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:57:50.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:57:50.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:57:50.688 [DEBUG] [Thread-11151] [transport.py] [_log()] userauth is OK
2025-12-25T11:57:50.689 [DEBUG] [Thread-11151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:57:50.689 [DEBUG] [Thread-11151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:57:50.689 [DEBUG] [Thread-11151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:57:50.689 [DEBUG] [Thread-11151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:57:50.709 [INFO] [Thread-11151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:57:50.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:57:51.357 [DEBUG] [Thread-11151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:57:51.357 [DEBUG] [Thread-11151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:57:51.358 [DEBUG] [Thread-11151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:57:51.398 [DEBUG] [Thread-11151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:57:51.398 [DEBUG] [Thread-11151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:57:51.402 [DEBUG] [Thread-11151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:57:51.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:57:51.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:57:51.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:57:51.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:57:51.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:57:51.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:57:51.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:57:51.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:57:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:57:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.414646 -999.00  +25.30  26.22     20   +1.30 1 1 1 1 1   888    0 26.41 129.50 ----- 26.2 26.2 345.8 34.8 31.2 -25.2 30.4 -23.9 29.9 -22.2 30.4 -23.5
2025-12-25T11:57:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:57:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:57:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.414646
2025-12-25T11:57:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:57:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:57:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:57:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:57:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:57:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:57:41', tmtdew=28.42, humidity=15.23, cloud=0.0, wind=30.15, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:57:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:57:51.428 [DEBUG] [Thread-11151] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:57:51.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-25T11:57:51.521 [DEBUG] [Thread-11154] [transport.py] [_log()] starting thread (client mode): 0xb6b28fa0
2025-12-25T11:57:51.521 [DEBUG] [Thread-11154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:57:51.536 [DEBUG] [Thread-11154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:57:51.536 [INFO] [Thread-11154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] client lang: <none>
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] server lang: <none>
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] kex follows: False
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] Compression: none
2025-12-25T11:57:51.544 [DEBUG] [Thread-11154] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:57:51.600 [DEBUG] [Thread-11154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:57:51.601 [DEBUG] [Thread-11154] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:57:51.601 [DEBUG] [Thread-11154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:57:51.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:57:51.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:57:51.657 [DEBUG] [Thread-11154] [transport.py] [_log()] userauth is OK
2025-12-25T11:57:51.657 [DEBUG] [Thread-11154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:57:51.658 [DEBUG] [Thread-11154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:57:51.658 [DEBUG] [Thread-11154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:57:51.658 [DEBUG] [Thread-11154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:57:51.676 [INFO] [Thread-11154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:57:51.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T11:57:51.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:57:52.502 [DEBUG] [Thread-11154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:57:52.502 [DEBUG] [Thread-11154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:57:52.550 [DEBUG] [Thread-11154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:57:52.550 [DEBUG] [Thread-11154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:57:52.559 [DEBUG] [Thread-11154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:57:52.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:57:52.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:57: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') -> 00000000
2025-12-25T11:57:52.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:57:52.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:57:52.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:57:52.596 [DEBUG] [Thread-11154] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:58:00.088 [DEBUG] [Thread-11156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:00.178 [DEBUG] [Thread-11157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:15.140 [DEBUG] [Thread-11158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:15.428 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:15.429 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:58:22.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:58:22.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-25T11:58:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 58, 13), 29.03, 14.59, 0.0, 30.1, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:58:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:58:13
2025-12-25T11:58:23.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:58:23.579 [DEBUG] [Thread-11159] [transport.py] [_log()] starting thread (client mode): 0xb6b144f0
2025-12-25T11:58:23.579 [DEBUG] [Thread-11159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:58:23.600 [DEBUG] [Thread-11159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:58:23.600 [INFO] [Thread-11159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:58:23.601 [DEBUG] [Thread-11159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:58:23.601 [DEBUG] [Thread-11159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:58:23.601 [DEBUG] [Thread-11159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] client lang: <none>
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] server lang: <none>
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] kex follows: False
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:58:23.602 [DEBUG] [Thread-11159] [transport.py] [_log()] Compression: none
2025-12-25T11:58:23.603 [DEBUG] [Thread-11159] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:58:23.615 [DEBUG] [Thread-11159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:58:23.615 [DEBUG] [Thread-11159] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:58:23.616 [DEBUG] [Thread-11159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:58:23.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:58:23.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:58:23.619 [DEBUG] [Thread-11159] [transport.py] [_log()] userauth is OK
2025-12-25T11:58:23.620 [DEBUG] [Thread-11159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:58:23.620 [DEBUG] [Thread-11159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:58:23.620 [DEBUG] [Thread-11159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:58:23.620 [DEBUG] [Thread-11159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:58:23.638 [INFO] [Thread-11159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:58:23.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:58:24.358 [DEBUG] [Thread-11159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:58:24.358 [DEBUG] [Thread-11159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:58:24.358 [DEBUG] [Thread-11159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:58:24.399 [DEBUG] [Thread-11159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:58:24.399 [DEBUG] [Thread-11159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:58:24.403 [DEBUG] [Thread-11159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:58:24.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:58:24.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:58:24.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:58:24.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:58:24.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:58:24.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:58:24.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:58:24.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:58:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:58:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.414993 -999.00  +24.80  30.33     20   +0.50 1 1 2 1 1   888    0 25.81 115.39 ----- 30.3 30.3 330.6 44.3 31.1 -25.1 30.2 -24.9 29.9 -21.9 30.4 -24.5
2025-12-25T11:58:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:58:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:58:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.414993
2025-12-25T11:58:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:58:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:58:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:58:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:58:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:58:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:58:13', tmtdew=29.03, humidity=14.59, cloud=0.0, wind=30.1, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:57:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:58:24.428 [DEBUG] [Thread-11159] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:58:24.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-25T11:58:24.531 [DEBUG] [Thread-11162] [transport.py] [_log()] starting thread (client mode): 0xb6b17640
2025-12-25T11:58:24.531 [DEBUG] [Thread-11162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:58:24.546 [DEBUG] [Thread-11162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:58:24.546 [INFO] [Thread-11162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] client lang: <none>
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] server lang: <none>
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] kex follows: False
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] Compression: none
2025-12-25T11:58:24.554 [DEBUG] [Thread-11162] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:58:24.614 [DEBUG] [Thread-11162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:58:24.615 [DEBUG] [Thread-11162] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:58:24.616 [DEBUG] [Thread-11162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:58:24.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:58:24.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:58:24.674 [DEBUG] [Thread-11162] [transport.py] [_log()] userauth is OK
2025-12-25T11:58:24.674 [DEBUG] [Thread-11162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:58:24.674 [DEBUG] [Thread-11162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:58:24.674 [DEBUG] [Thread-11162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:58:24.674 [DEBUG] [Thread-11162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:58:24.693 [INFO] [Thread-11162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:58:24.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-25T11:58:24.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:58:25.570 [DEBUG] [Thread-11162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:58:25.570 [DEBUG] [Thread-11162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:58:25.617 [DEBUG] [Thread-11162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:58:25.618 [DEBUG] [Thread-11162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:58:25.626 [DEBUG] [Thread-11162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:58:25.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:58:25.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-25T11:58:25.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-25T11:58:25.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:58:25.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:58:25.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:58:25.659 [DEBUG] [Thread-11162] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:58:30.176 [DEBUG] [Thread-11164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:45.222 [DEBUG] [Thread-11165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:58:55.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:58:55.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:58:55.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:58:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 58, 45), 29.55, 14.06, 0.0, 22.96, 25.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:58:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:58:45
2025-12-25T11:58:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:58:56.675 [DEBUG] [Thread-11166] [transport.py] [_log()] starting thread (client mode): 0xb9544520
2025-12-25T11:58:56.675 [DEBUG] [Thread-11166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:58:56.695 [DEBUG] [Thread-11166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:58:56.695 [INFO] [Thread-11166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:58:56.696 [DEBUG] [Thread-11166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:58:56.696 [DEBUG] [Thread-11166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:58:56.696 [DEBUG] [Thread-11166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:58:56.696 [DEBUG] [Thread-11166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:56.696 [DEBUG] [Thread-11166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] client lang: <none>
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] server lang: <none>
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] kex follows: False
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] Compression: none
2025-12-25T11:58:56.697 [DEBUG] [Thread-11166] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:58:56.708 [DEBUG] [Thread-11166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:58:56.708 [DEBUG] [Thread-11166] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:58:56.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:58:56.710 [DEBUG] [Thread-11166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:58:56.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:58:56.712 [DEBUG] [Thread-11166] [transport.py] [_log()] userauth is OK
2025-12-25T11:58:56.712 [DEBUG] [Thread-11166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:58:56.713 [DEBUG] [Thread-11166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:58:56.713 [DEBUG] [Thread-11166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:58:56.713 [DEBUG] [Thread-11166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:58:56.731 [INFO] [Thread-11166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:58:56.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:58:57.382 [DEBUG] [Thread-11166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:58:57.382 [DEBUG] [Thread-11166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:58:57.383 [DEBUG] [Thread-11166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:58:57.423 [DEBUG] [Thread-11166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:58:57.423 [DEBUG] [Thread-11166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:58:57.426 [DEBUG] [Thread-11166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:58:57.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:58:57.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:58:57.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:58:57.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:58:57.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:58:57.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:58:57.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:58:57.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:58:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:58:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.415340 -999.00  +25.00  26.30     19   +0.20 1 1 1 1 1   888    0 25.37 100.97 ----- 26.3 26.3 335.8 31.3 31.0 -25.8 30.2 -25.9 29.8 -23.1 30.4 -23.1
2025-12-25T11:58:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:58:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:58:57.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.415340
2025-12-25T11:58:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:58:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:58:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:58:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:58:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:58:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:58:45', tmtdew=29.55, humidity=14.06, cloud=0.0, wind=22.96, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:58:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:58:57.448 [DEBUG] [Thread-11166] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:58:57.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-25T11:58:57.535 [DEBUG] [Thread-11169] [transport.py] [_log()] starting thread (client mode): 0xb6be34f0
2025-12-25T11:58:57.536 [DEBUG] [Thread-11169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:58:57.549 [DEBUG] [Thread-11169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:58:57.549 [INFO] [Thread-11169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:58:57.557 [DEBUG] [Thread-11169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:58:57.557 [DEBUG] [Thread-11169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] client lang: <none>
2025-12-25T11:58:57.558 [DEBUG] [Thread-11169] [transport.py] [_log()] server lang: <none>
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] kex follows: False
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] Compression: none
2025-12-25T11:58:57.559 [DEBUG] [Thread-11169] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:58:57.618 [DEBUG] [Thread-11169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:58:57.618 [DEBUG] [Thread-11169] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:58:57.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:58:57.620 [DEBUG] [Thread-11169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:58:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:58:57.678 [DEBUG] [Thread-11169] [transport.py] [_log()] userauth is OK
2025-12-25T11:58:57.678 [DEBUG] [Thread-11169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:58:57.678 [DEBUG] [Thread-11169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:58:57.679 [DEBUG] [Thread-11169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:58:57.679 [DEBUG] [Thread-11169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:58:57.697 [INFO] [Thread-11169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:58:57.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-25T11:58:57.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:58:58.564 [DEBUG] [Thread-11169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:58:58.564 [DEBUG] [Thread-11169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:58:58.612 [DEBUG] [Thread-11169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:58:58.612 [DEBUG] [Thread-11169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:58:58.621 [DEBUG] [Thread-11169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:58:58.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:58:58.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T11:58:58.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T11:58:58.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:58:58.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:58:58.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:58:58.658 [DEBUG] [Thread-11169] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:59:00.228 [DEBUG] [Thread-11171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:59:00.251 [DEBUG] [Thread-11172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:59:15.299 [DEBUG] [Thread-11173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:59:15.566 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:59:15.567 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:59:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T11:59:28.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T11:59:28.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T11:59:29.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 59, 17), 29.59, 14.04, 0.0, 22.78, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T11:59:29.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:59:17
2025-12-25T11:59:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T11:59:29.650 [DEBUG] [Thread-11174] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-25T11:59:29.650 [DEBUG] [Thread-11174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:59:29.667 [DEBUG] [Thread-11174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T11:59:29.667 [INFO] [Thread-11174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] client lang: <none>
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] server lang: <none>
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] kex follows: False
2025-12-25T11:59:29.669 [DEBUG] [Thread-11174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:59:29.670 [DEBUG] [Thread-11174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:59:29.670 [DEBUG] [Thread-11174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:59:29.670 [DEBUG] [Thread-11174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:59:29.670 [DEBUG] [Thread-11174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:59:29.670 [DEBUG] [Thread-11174] [transport.py] [_log()] Compression: none
2025-12-25T11:59:29.670 [DEBUG] [Thread-11174] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:59:29.682 [DEBUG] [Thread-11174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:59:29.682 [DEBUG] [Thread-11174] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:59:29.683 [DEBUG] [Thread-11174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T11:59:29.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T11:59:29.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:59:29.684 [DEBUG] [Thread-11174] [transport.py] [_log()] userauth is OK
2025-12-25T11:59:29.685 [DEBUG] [Thread-11174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:59:29.685 [DEBUG] [Thread-11174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:59:29.685 [DEBUG] [Thread-11174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T11:59:29.685 [DEBUG] [Thread-11174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:59:29.720 [INFO] [Thread-11174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:59:29.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:59:30.272 [DEBUG] [Thread-11174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:59:30.272 [DEBUG] [Thread-11174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:59:30.273 [DEBUG] [Thread-11174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T11:59:30.313 [DEBUG] [Thread-11174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:59:30.313 [DEBUG] [Thread-11174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:59:30.316 [DEBUG] [Thread-11174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:59:30.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:59:30.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T11:59:30.330 [DEBUG] [Thread-11176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T11:59:30.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T11:59:30.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T11:59:30.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:59:30.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T11:59:30.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:59:30.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:59:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T11:59:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.416035 -999.00  +24.20  27.87     20   +0.30 1 1 1 1 1   888    0 25.64 105.09 ----- 27.9 27.9 337.0 33.3 30.7 -26.3 29.9 -26.2 29.6 -23.7 29.9 -32.6
2025-12-25T11:59:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T11:59:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T11:59:30.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.416035
2025-12-25T11:59:30.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T11:59:30.341 [DEBUG] [Thread-11174] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:59:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T11:59:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T11:59:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T11:59:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T11:59:30.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:59:17', tmtdew=29.59, humidity=14.04, cloud=0.0, wind=22.78, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:59:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T11:59:30.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-25T11:59:30.442 [DEBUG] [Thread-11178] [transport.py] [_log()] starting thread (client mode): 0xb6b15cc0
2025-12-25T11:59:30.442 [DEBUG] [Thread-11178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T11:59:30.456 [DEBUG] [Thread-11178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T11:59:30.456 [INFO] [Thread-11178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] client lang: <none>
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] server lang: <none>
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] kex follows: False
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T11:59:30.464 [DEBUG] [Thread-11178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T11:59:30.465 [DEBUG] [Thread-11178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T11:59:30.465 [DEBUG] [Thread-11178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T11:59:30.465 [DEBUG] [Thread-11178] [transport.py] [_log()] Compression: none
2025-12-25T11:59:30.465 [DEBUG] [Thread-11178] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T11:59:30.521 [DEBUG] [Thread-11178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T11:59:30.522 [DEBUG] [Thread-11178] [transport.py] [_log()] Switch to new keys ...
2025-12-25T11:59:30.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T11:59:30.523 [DEBUG] [Thread-11178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T11:59:30.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T11:59:30.582 [DEBUG] [Thread-11178] [transport.py] [_log()] userauth is OK
2025-12-25T11:59:30.582 [DEBUG] [Thread-11178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T11:59:30.582 [DEBUG] [Thread-11178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T11:59:30.583 [DEBUG] [Thread-11178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T11:59:30.583 [DEBUG] [Thread-11178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T11:59:30.602 [INFO] [Thread-11178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T11:59:30.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-25T11:59:30.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T11:59:31.397 [DEBUG] [Thread-11178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T11:59:31.397 [DEBUG] [Thread-11178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T11:59:31.449 [DEBUG] [Thread-11178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T11:59:31.449 [DEBUG] [Thread-11178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T11:59:31.462 [DEBUG] [Thread-11178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T11:59:31.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T11:59:31.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-25T11:59:31.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-25T11:59:31.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T11:59:31.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T11:59:31.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T11:59:31.506 [DEBUG] [Thread-11178] [transport.py] [_log()] EOF in transport thread
2025-12-25T11:59:45.372 [DEBUG] [Thread-11180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:00.274 [DEBUG] [Thread-11181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:00.418 [DEBUG] [Thread-11182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:00:01.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:00:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:00:02.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 11, 59, 50), 29.84, 13.76, 0.0, 21.37, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:00:02.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 11:59:50
2025-12-25T12:00:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:00:02.616 [DEBUG] [Thread-11183] [transport.py] [_log()] starting thread (client mode): 0xb957a3b0
2025-12-25T12:00:02.616 [DEBUG] [Thread-11183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:00:02.636 [DEBUG] [Thread-11183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:00:02.636 [INFO] [Thread-11183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:00:02.639 [DEBUG] [Thread-11183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:00:02.639 [DEBUG] [Thread-11183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:00:02.639 [DEBUG] [Thread-11183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:00:02.639 [DEBUG] [Thread-11183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] client lang: <none>
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] server lang: <none>
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] kex follows: False
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] Compression: none
2025-12-25T12:00:02.640 [DEBUG] [Thread-11183] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:00:02.655 [DEBUG] [Thread-11183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:00:02.655 [DEBUG] [Thread-11183] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:00:02.655 [DEBUG] [Thread-11183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:00:02.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:00:02.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:00:02.656 [DEBUG] [Thread-11183] [transport.py] [_log()] userauth is OK
2025-12-25T12:00:02.656 [DEBUG] [Thread-11183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:00:02.656 [DEBUG] [Thread-11183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:00:02.656 [DEBUG] [Thread-11183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:00:02.656 [DEBUG] [Thread-11183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:00:02.666 [INFO] [Thread-11183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:00:02.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:00:03.887 [DEBUG] [Thread-11183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:00:03.887 [DEBUG] [Thread-11183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:00:03.887 [DEBUG] [Thread-11183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:00:03.928 [DEBUG] [Thread-11183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:00:03.928 [DEBUG] [Thread-11183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:00:03.931 [DEBUG] [Thread-11183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:00:03.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:00:03.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:00:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:00:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:00:03.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:00:03.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:00:03.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.416381 -999.00  +23.90  15.10     21   +0.30 1 1 1 1 1   888    0 25.72 97.70 ----- 15.1 15.1 1.8 25.7 30.7 -25.2 29.9 -25.8 29.6 -22.2 30.0 -24.3
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.416381
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:00:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T11:59:50', tmtdew=29.84, humidity=13.76, cloud=0.0, wind=21.37, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T09:59:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:00:03.957 [DEBUG] [Thread-11183] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:00: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-25T12:00:04.039 [DEBUG] [Thread-11186] [transport.py] [_log()] starting thread (client mode): 0xb6be2080
2025-12-25T12:00:04.039 [DEBUG] [Thread-11186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:00:04.055 [DEBUG] [Thread-11186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:00:04.055 [INFO] [Thread-11186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:04.062 [DEBUG] [Thread-11186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] client lang: <none>
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] server lang: <none>
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] kex follows: False
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] Compression: none
2025-12-25T12:00:04.063 [DEBUG] [Thread-11186] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:00:04.124 [DEBUG] [Thread-11186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:00:04.124 [DEBUG] [Thread-11186] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:00:04.124 [DEBUG] [Thread-11186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:00:04.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:00:04.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:00:04.186 [DEBUG] [Thread-11186] [transport.py] [_log()] userauth is OK
2025-12-25T12:00:04.186 [DEBUG] [Thread-11186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:00:04.186 [DEBUG] [Thread-11186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:00:04.186 [DEBUG] [Thread-11186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:00:04.186 [DEBUG] [Thread-11186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:00:04.205 [INFO] [Thread-11186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:00:04.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-25T12:00:04.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:00:05.077 [DEBUG] [Thread-11186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:00:05.077 [DEBUG] [Thread-11186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:00:05.124 [DEBUG] [Thread-11186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:00:05.125 [DEBUG] [Thread-11186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:00:05.134 [DEBUG] [Thread-11186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:00:05.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:00:05.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-25T12:00:05.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-25T12:00:05.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:00:05.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:00:05.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:00:05.169 [DEBUG] [Thread-11186] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:00:15.447 [DEBUG] [Thread-11188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:15.706 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:15.707 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:30.495 [DEBUG] [Thread-11189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:00:35.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:00:35.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:00:35.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-25T12:00:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 0, 22), 29.71, 13.89, 0.0, 24.46, 25.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:00:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:00:22
2025-12-25T12:00:36.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:00:36.156 [DEBUG] [Thread-11190] [transport.py] [_log()] starting thread (client mode): 0xb6b15660
2025-12-25T12:00:36.156 [DEBUG] [Thread-11190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:00:36.177 [DEBUG] [Thread-11190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:00:36.177 [INFO] [Thread-11190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:36.180 [DEBUG] [Thread-11190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] client lang: <none>
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] server lang: <none>
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] kex follows: False
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] Compression: none
2025-12-25T12:00:36.181 [DEBUG] [Thread-11190] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:00:36.200 [DEBUG] [Thread-11190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:00:36.200 [DEBUG] [Thread-11190] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:00:36.201 [DEBUG] [Thread-11190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:00:36.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:00:36.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:00:36.204 [DEBUG] [Thread-11190] [transport.py] [_log()] userauth is OK
2025-12-25T12:00:36.204 [DEBUG] [Thread-11190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:00:36.204 [DEBUG] [Thread-11190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:00:36.204 [DEBUG] [Thread-11190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:00:36.204 [DEBUG] [Thread-11190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:00:36.229 [INFO] [Thread-11190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:00:36.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:00:36.853 [DEBUG] [Thread-11190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:00:36.853 [DEBUG] [Thread-11190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:00:36.853 [DEBUG] [Thread-11190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:00:36.894 [DEBUG] [Thread-11190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:00:36.894 [DEBUG] [Thread-11190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:00:36.897 [DEBUG] [Thread-11190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:00:36.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:00:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:00:36.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:00:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:00:36.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:00:36.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:00:36.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:00:36.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:00:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:00:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.416729 -999.00  +24.30  19.67     21   +0.70 1 1 1 1 1   888    0 25.08 84.91 ----- 19.7 19.7 325.8 27.4 30.7 -25.3 29.9 -25.4 29.6 -23.3 29.9 -25.1
2025-12-25T12:00:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:00:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:00:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.416729
2025-12-25T12:00:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:00:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:00:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:00:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:00:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:00:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:00:22', tmtdew=29.71, humidity=13.89, cloud=0.0, wind=24.46, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:00:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:00:36.921 [DEBUG] [Thread-11190] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:00:37.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-25T12:00:37.018 [DEBUG] [Thread-11193] [transport.py] [_log()] starting thread (client mode): 0xb6b156c0
2025-12-25T12:00:37.018 [DEBUG] [Thread-11193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:00:37.032 [DEBUG] [Thread-11193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:00:37.032 [INFO] [Thread-11193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:00:37.040 [DEBUG] [Thread-11193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] client lang: <none>
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] server lang: <none>
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] kex follows: False
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] Compression: none
2025-12-25T12:00:37.041 [DEBUG] [Thread-11193] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:00:37.106 [DEBUG] [Thread-11193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:00:37.107 [DEBUG] [Thread-11193] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:00:37.107 [DEBUG] [Thread-11193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:00:37.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:00:37.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:00:37.166 [DEBUG] [Thread-11193] [transport.py] [_log()] userauth is OK
2025-12-25T12:00:37.167 [DEBUG] [Thread-11193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:00:37.167 [DEBUG] [Thread-11193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:00:37.167 [DEBUG] [Thread-11193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:00:37.167 [DEBUG] [Thread-11193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:00:37.185 [INFO] [Thread-11193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:00:37.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-25T12:00:37.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:00:38.020 [DEBUG] [Thread-11193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:00:38.020 [DEBUG] [Thread-11193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:00:38.068 [DEBUG] [Thread-11193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:00:38.068 [DEBUG] [Thread-11193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:00:38.076 [DEBUG] [Thread-11193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:00:38.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:00:38.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-25T12:00:38.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-25T12:00:38.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:00:38.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:00:38.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:00:38.108 [DEBUG] [Thread-11193] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:00:45.532 [DEBUG] [Thread-11195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:00.331 [DEBUG] [Thread-11196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:00.584 [DEBUG] [Thread-11197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:01:08.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:01:08.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-25T12:01:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 0, 54), 29.49, 14.19, 0.0, 26.25, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:01:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:00:54
2025-12-25T12:01:08.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:01:09.103 [DEBUG] [Thread-11198] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae90
2025-12-25T12:01:09.103 [DEBUG] [Thread-11198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:01:09.124 [DEBUG] [Thread-11198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:01:09.124 [INFO] [Thread-11198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] client lang: <none>
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] server lang: <none>
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] kex follows: False
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] Compression: none
2025-12-25T12:01:09.128 [DEBUG] [Thread-11198] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:01:09.146 [DEBUG] [Thread-11198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:01:09.147 [DEBUG] [Thread-11198] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:01:09.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:01:09.148 [DEBUG] [Thread-11198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:01:09.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:01:09.150 [DEBUG] [Thread-11198] [transport.py] [_log()] userauth is OK
2025-12-25T12:01:09.150 [DEBUG] [Thread-11198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:01:09.151 [DEBUG] [Thread-11198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:01:09.151 [DEBUG] [Thread-11198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:01:09.151 [DEBUG] [Thread-11198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:01:09.169 [INFO] [Thread-11198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:01:09.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:01:10.874 [DEBUG] [Thread-11198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:01:10.874 [DEBUG] [Thread-11198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:01:10.875 [DEBUG] [Thread-11198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:01:10.914 [DEBUG] [Thread-11198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:01:10.914 [DEBUG] [Thread-11198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:01:10.917 [DEBUG] [Thread-11198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:01:10.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:01:10.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:01:10.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:01:10.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:01:10.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:01:10.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:01:10.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:01:10.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:01:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:01:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.417076 -999.00  +24.60  18.72     20   +0.60 1 1 1 1 1   888    0 25.23 86.25 ----- 18.7 18.7 316.8 29.3 30.9 -25.3 30.1 -24.4 29.6 -22.2 30.1 -23.2
2025-12-25T12:01:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:01:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:01:10.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.417076
2025-12-25T12:01:10.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:01:10.941 [DEBUG] [Thread-11198] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:01:10.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:01:10.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:01:10.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:01:10.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:01:10.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:00:54', tmtdew=29.49, humidity=14.19, cloud=0.0, wind=26.25, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:00:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:01:11.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-25T12:01:11.036 [DEBUG] [Thread-11201] [transport.py] [_log()] starting thread (client mode): 0xb9547760
2025-12-25T12:01:11.036 [DEBUG] [Thread-11201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:01:11.051 [DEBUG] [Thread-11201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:01:11.051 [INFO] [Thread-11201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:01:11.059 [DEBUG] [Thread-11201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:01:11.059 [DEBUG] [Thread-11201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] client lang: <none>
2025-12-25T12:01:11.060 [DEBUG] [Thread-11201] [transport.py] [_log()] server lang: <none>
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] kex follows: False
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] Compression: none
2025-12-25T12:01:11.061 [DEBUG] [Thread-11201] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:01:11.120 [DEBUG] [Thread-11201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:01:11.120 [DEBUG] [Thread-11201] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:01:11.121 [DEBUG] [Thread-11201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:01:11.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:01:11.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:01:11.179 [DEBUG] [Thread-11201] [transport.py] [_log()] userauth is OK
2025-12-25T12:01:11.179 [DEBUG] [Thread-11201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:01:11.180 [DEBUG] [Thread-11201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:01:11.180 [DEBUG] [Thread-11201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:01:11.180 [DEBUG] [Thread-11201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:01:11.199 [INFO] [Thread-11201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:01:11.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-25T12:01:11.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:01:12.044 [DEBUG] [Thread-11201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:01:12.044 [DEBUG] [Thread-11201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:01:12.092 [DEBUG] [Thread-11201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:01:12.092 [DEBUG] [Thread-11201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:01:12.101 [DEBUG] [Thread-11201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:01:12.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:01:12.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:01:12.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-25T12:01:12.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:01:12.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:01:12.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:01:12.138 [DEBUG] [Thread-11201] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:01:15.622 [DEBUG] [Thread-11203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:15.845 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:15.847 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:30.667 [DEBUG] [Thread-11204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:01:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:01:42.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:01:42.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-25T12:01:42.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 1, 26), 31.0, 12.93, 0.0, 29.62, 25.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:01:42.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:01:26
2025-12-25T12:01:42.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:01:43.129 [DEBUG] [Thread-11205] [transport.py] [_log()] starting thread (client mode): 0xb6be1420
2025-12-25T12:01:43.129 [DEBUG] [Thread-11205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:01:43.149 [DEBUG] [Thread-11205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:01:43.149 [INFO] [Thread-11205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] client lang: <none>
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] server lang: <none>
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] kex follows: False
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] Compression: none
2025-12-25T12:01:43.152 [DEBUG] [Thread-11205] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:01:43.170 [DEBUG] [Thread-11205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:01:43.170 [DEBUG] [Thread-11205] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:01:43.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:01:43.171 [DEBUG] [Thread-11205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:01:43.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:01:43.173 [DEBUG] [Thread-11205] [transport.py] [_log()] userauth is OK
2025-12-25T12:01:43.173 [DEBUG] [Thread-11205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:01:43.174 [DEBUG] [Thread-11205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:01:43.174 [DEBUG] [Thread-11205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:01:43.174 [DEBUG] [Thread-11205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:01:43.210 [INFO] [Thread-11205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:01:43.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:01:43.865 [DEBUG] [Thread-11205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:01:43.865 [DEBUG] [Thread-11205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:01:43.865 [DEBUG] [Thread-11205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:01:43.906 [DEBUG] [Thread-11205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:01:43.906 [DEBUG] [Thread-11205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:01:43.909 [DEBUG] [Thread-11205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:01:43.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:01:43.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:01:43.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:01:43.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:01:43.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:01:43.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:01:43.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:01:43.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:01:43.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:01:43.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.417423 -999.00  +25.20  32.05     19   +0.10 1 2 2 1 1   888    0 25.10 77.05 ----- 32.0 32.0 319.7 34.7 31.0 -24.8 30.2 -24.4 29.8 -21.5 30.2 -22.5
2025-12-25T12:01:43.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:01:43.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:01:43.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.417423
2025-12-25T12:01:43.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:01:43.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:01:43.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:01:43.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:01:43.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:01:43.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:01:26', tmtdew=31.0, humidity=12.93, cloud=0.0, wind=29.62, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:01:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:01:43.933 [DEBUG] [Thread-11205] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:01:44.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-25T12:01:44.026 [DEBUG] [Thread-11208] [transport.py] [_log()] starting thread (client mode): 0xb6be3be0
2025-12-25T12:01:44.026 [DEBUG] [Thread-11208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:01:44.040 [DEBUG] [Thread-11208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:01:44.040 [INFO] [Thread-11208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:01:44.047 [DEBUG] [Thread-11208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:01:44.048 [DEBUG] [Thread-11208] [transport.py] [_log()] client lang: <none>
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] server lang: <none>
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] kex follows: False
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] Compression: none
2025-12-25T12:01:44.049 [DEBUG] [Thread-11208] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:01:44.111 [DEBUG] [Thread-11208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:01:44.112 [DEBUG] [Thread-11208] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:01:44.112 [DEBUG] [Thread-11208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:01:44.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:01:44.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:01:44.166 [DEBUG] [Thread-11208] [transport.py] [_log()] userauth is OK
2025-12-25T12:01:44.167 [DEBUG] [Thread-11208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:01:44.167 [DEBUG] [Thread-11208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:01:44.167 [DEBUG] [Thread-11208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:01:44.167 [DEBUG] [Thread-11208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:01:44.185 [INFO] [Thread-11208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:01:44.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-25T12:01:44.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:01:44.991 [DEBUG] [Thread-11208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:01:44.991 [DEBUG] [Thread-11208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:01:45.039 [DEBUG] [Thread-11208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:01:45.039 [DEBUG] [Thread-11208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:01:45.048 [DEBUG] [Thread-11208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:01:45.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:01:45.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-25T12:01:45.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-25T12:01:45.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:01:45.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:01:45.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:01:45.085 [DEBUG] [Thread-11208] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:01:45.706 [DEBUG] [Thread-11210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:00.381 [DEBUG] [Thread-11211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:00.751 [DEBUG] [Thread-11212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:15.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:02:15.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:02:15.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-25T12:02:15.778 [DEBUG] [Thread-11213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 1, 58), 32.56, 11.19, 0.0, 25.71, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:02:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:01:58
2025-12-25T12:02:15.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:02:15.987 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:15.988 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:16.092 [DEBUG] [Thread-11214] [transport.py] [_log()] starting thread (client mode): 0xb6be0250
2025-12-25T12:02:16.092 [DEBUG] [Thread-11214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:02:16.111 [DEBUG] [Thread-11214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:02:16.111 [INFO] [Thread-11214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] client lang: <none>
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] server lang: <none>
2025-12-25T12:02:16.114 [DEBUG] [Thread-11214] [transport.py] [_log()] kex follows: False
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] Compression: none
2025-12-25T12:02:16.115 [DEBUG] [Thread-11214] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:02:16.130 [DEBUG] [Thread-11214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:02:16.130 [DEBUG] [Thread-11214] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:02:16.131 [DEBUG] [Thread-11214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:02:16.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:02:16.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:02:16.132 [DEBUG] [Thread-11214] [transport.py] [_log()] userauth is OK
2025-12-25T12:02:16.132 [DEBUG] [Thread-11214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:02:16.132 [DEBUG] [Thread-11214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:02:16.132 [DEBUG] [Thread-11214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:02:16.132 [DEBUG] [Thread-11214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:02:16.150 [INFO] [Thread-11214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:02:16.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:02:16.885 [DEBUG] [Thread-11214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:02:16.885 [DEBUG] [Thread-11214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:02:16.886 [DEBUG] [Thread-11214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:02:16.926 [DEBUG] [Thread-11214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:02:16.926 [DEBUG] [Thread-11214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:02:16.929 [DEBUG] [Thread-11214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:02:16.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:02:16.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:02:16.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:02:16.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:02:16.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:02:16.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:02:16.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:02:16.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:02:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:02:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.417771 -999.00  +25.40  26.64     16   -1.40 1 1 1 1 1   888    0 25.27 80.39 ----- 26.6 26.6 327.6 38.2 31.0 -25.5 30.2 -24.9 29.7 -23.2 30.4 -23.4
2025-12-25T12:02:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:02:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:02:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.417771
2025-12-25T12:02:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:02:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:02:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:02:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:02:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:02:16.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:01:58', tmtdew=32.56, humidity=11.19, cloud=0.0, wind=25.71, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:01:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:02:16.956 [DEBUG] [Thread-11214] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:02:17.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-25T12:02:17.047 [DEBUG] [Thread-11217] [transport.py] [_log()] starting thread (client mode): 0xb95794b0
2025-12-25T12:02:17.047 [DEBUG] [Thread-11217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:02:17.062 [DEBUG] [Thread-11217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:02:17.062 [INFO] [Thread-11217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:02:17.069 [DEBUG] [Thread-11217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:02:17.069 [DEBUG] [Thread-11217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:02:17.069 [DEBUG] [Thread-11217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:02:17.069 [DEBUG] [Thread-11217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] client lang: <none>
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] server lang: <none>
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] kex follows: False
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:02:17.070 [DEBUG] [Thread-11217] [transport.py] [_log()] Compression: none
2025-12-25T12:02:17.071 [DEBUG] [Thread-11217] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:02:17.127 [DEBUG] [Thread-11217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:02:17.127 [DEBUG] [Thread-11217] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:02:17.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:02:17.128 [DEBUG] [Thread-11217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:02:17.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:02:17.187 [DEBUG] [Thread-11217] [transport.py] [_log()] userauth is OK
2025-12-25T12:02:17.187 [DEBUG] [Thread-11217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:02:17.187 [DEBUG] [Thread-11217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:02:17.187 [DEBUG] [Thread-11217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:02:17.187 [DEBUG] [Thread-11217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:02:17.206 [INFO] [Thread-11217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:02:17.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-25T12:02:17.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:02:18.084 [DEBUG] [Thread-11217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:02:18.085 [DEBUG] [Thread-11217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:02:18.133 [DEBUG] [Thread-11217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:02:18.133 [DEBUG] [Thread-11217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:02:18.142 [DEBUG] [Thread-11217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:02:18.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:02:18.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-25T12:02:18.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-25T12:02:18.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:02:18.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:02:18.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:02:18.180 [DEBUG] [Thread-11217] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:02:30.811 [DEBUG] [Thread-11219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:45.860 [DEBUG] [Thread-11220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:02:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:02:48.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:02:48.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-25T12:02:48.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 2, 30), 33.98, 10.33, 0.0, 25.74, 25.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:02:48.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:02:30
2025-12-25T12:02:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:02:49.199 [DEBUG] [Thread-11221] [transport.py] [_log()] starting thread (client mode): 0xb957b130
2025-12-25T12:02:49.199 [DEBUG] [Thread-11221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:02:49.219 [DEBUG] [Thread-11221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:02:49.220 [INFO] [Thread-11221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] client lang: <none>
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] server lang: <none>
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] kex follows: False
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] Compression: none
2025-12-25T12:02:49.223 [DEBUG] [Thread-11221] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:02:49.240 [DEBUG] [Thread-11221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:02:49.241 [DEBUG] [Thread-11221] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:02:49.241 [DEBUG] [Thread-11221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:02:49.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:02:49.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:02:49.285 [DEBUG] [Thread-11221] [transport.py] [_log()] userauth is OK
2025-12-25T12:02:49.285 [DEBUG] [Thread-11221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:02:49.285 [DEBUG] [Thread-11221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:02:49.285 [DEBUG] [Thread-11221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:02:49.285 [DEBUG] [Thread-11221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:02:49.305 [INFO] [Thread-11221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:02:49.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:02:49.955 [DEBUG] [Thread-11221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:02:49.956 [DEBUG] [Thread-11221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:02:49.966 [DEBUG] [Thread-11221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:02:49.997 [DEBUG] [Thread-11221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:02:49.997 [DEBUG] [Thread-11221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:02:50.001 [DEBUG] [Thread-11221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:02:50.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:02:50.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:02:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:02:50.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:02:50.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:02:50.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:02:50.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:02:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:02:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:02:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.418118 -999.00  +25.40  26.11     15   -2.90 1 1 1 1 1   888    0 25.61 87.45 ----- 26.1 26.1 345.8 34.1 30.9 -27.1 30.2 -27.3 29.8 -23.7 30.4 -24.0
2025-12-25T12:02:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:02:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:02:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.418118
2025-12-25T12:02:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:02:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:02:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:02:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:02:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:02:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:02:30', tmtdew=33.98, humidity=10.33, cloud=0.0, wind=25.74, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:02:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:02:50.030 [DEBUG] [Thread-11221] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:02:50.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-25T12:02:50.123 [DEBUG] [Thread-11224] [transport.py] [_log()] starting thread (client mode): 0xb6b14c40
2025-12-25T12:02:50.123 [DEBUG] [Thread-11224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:02:50.139 [DEBUG] [Thread-11224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:02:50.139 [INFO] [Thread-11224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:02:50.146 [DEBUG] [Thread-11224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:02:50.146 [DEBUG] [Thread-11224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] client lang: <none>
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] server lang: <none>
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] kex follows: False
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] Compression: none
2025-12-25T12:02:50.147 [DEBUG] [Thread-11224] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:02:50.211 [DEBUG] [Thread-11224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:02:50.212 [DEBUG] [Thread-11224] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:02:50.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:02:50.213 [DEBUG] [Thread-11224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:02:50.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:02:50.268 [DEBUG] [Thread-11224] [transport.py] [_log()] userauth is OK
2025-12-25T12:02:50.268 [DEBUG] [Thread-11224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:02:50.268 [DEBUG] [Thread-11224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:02:50.268 [DEBUG] [Thread-11224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:02:50.269 [DEBUG] [Thread-11224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:02:50.289 [INFO] [Thread-11224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:02:50.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-25T12:02:50.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:02:51.178 [DEBUG] [Thread-11224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:02:51.179 [DEBUG] [Thread-11224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:02:51.232 [DEBUG] [Thread-11224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:02:51.232 [DEBUG] [Thread-11224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:02:51.241 [DEBUG] [Thread-11224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:02:51.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:02:51.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-25T12:02:51.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:02:51.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:02:51.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:02:51.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:02:51.279 [DEBUG] [Thread-11224] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:03:00.435 [DEBUG] [Thread-11226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:00.898 [DEBUG] [Thread-11227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:15.945 [DEBUG] [Thread-11228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:16.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:16.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:21.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:03:21.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:03:21.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-25T12:03:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 3, 2), 33.71, 10.44, 0.0, 21.79, 25.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:03:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:03:02
2025-12-25T12:03:22.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:03:22.253 [DEBUG] [Thread-11229] [transport.py] [_log()] starting thread (client mode): 0xb9579540
2025-12-25T12:03:22.253 [DEBUG] [Thread-11229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:03:22.273 [DEBUG] [Thread-11229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:03:22.273 [INFO] [Thread-11229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] client lang: <none>
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] server lang: <none>
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] kex follows: False
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] Compression: none
2025-12-25T12:03:22.276 [DEBUG] [Thread-11229] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:03:22.292 [DEBUG] [Thread-11229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:03:22.293 [DEBUG] [Thread-11229] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:03:22.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:03:22.294 [DEBUG] [Thread-11229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:03:22.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:03:22.296 [DEBUG] [Thread-11229] [transport.py] [_log()] userauth is OK
2025-12-25T12:03:22.296 [DEBUG] [Thread-11229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:03:22.296 [DEBUG] [Thread-11229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:03:22.296 [DEBUG] [Thread-11229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:03:22.297 [DEBUG] [Thread-11229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:03:22.317 [INFO] [Thread-11229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:03:22.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:03:22.891 [DEBUG] [Thread-11229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:03:22.891 [DEBUG] [Thread-11229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:03:22.892 [DEBUG] [Thread-11229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:03:22.932 [DEBUG] [Thread-11229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:03:22.932 [DEBUG] [Thread-11229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:03:22.935 [DEBUG] [Thread-11229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:03:22.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:03:22.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:03:22.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:03:22.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:03:22.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:03:22.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:03:22.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:03:22.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:03:22.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:03:22.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.418812 -999.00  +24.60  19.01     15   -3.30 1 1 1 1 1   888    0 27.41 129.19 ----- 19.0 19.0 351.7 35.1 30.7 -27.3 30.0 -27.2 29.7 -23.4 29.9 -27.3
2025-12-25T12:03:22.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:03:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:03:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.418812
2025-12-25T12:03:22.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:03:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:03:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:03:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:03:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:03:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:03:02', tmtdew=33.71, humidity=10.44, cloud=0.0, wind=21.79, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:03:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:03:22.958 [DEBUG] [Thread-11229] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:03:23.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-25T12:03:23.054 [DEBUG] [Thread-11232] [transport.py] [_log()] starting thread (client mode): 0xb957ada0
2025-12-25T12:03:23.054 [DEBUG] [Thread-11232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:03:23.068 [DEBUG] [Thread-11232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:03:23.069 [INFO] [Thread-11232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:03:23.076 [DEBUG] [Thread-11232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:03:23.077 [DEBUG] [Thread-11232] [transport.py] [_log()] client lang: <none>
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] server lang: <none>
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] kex follows: False
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:03:23.078 [DEBUG] [Thread-11232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:03:23.079 [DEBUG] [Thread-11232] [transport.py] [_log()] Compression: none
2025-12-25T12:03:23.079 [DEBUG] [Thread-11232] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:03:23.141 [DEBUG] [Thread-11232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:03:23.141 [DEBUG] [Thread-11232] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:03:23.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:03:23.143 [DEBUG] [Thread-11232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:03:23.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:03:23.200 [DEBUG] [Thread-11232] [transport.py] [_log()] userauth is OK
2025-12-25T12:03:23.201 [DEBUG] [Thread-11232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:03:23.201 [DEBUG] [Thread-11232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:03:23.201 [DEBUG] [Thread-11232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:03:23.201 [DEBUG] [Thread-11232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:03:23.223 [INFO] [Thread-11232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:03:23.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-25T12:03:23.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:03:24.068 [DEBUG] [Thread-11232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:03:24.069 [DEBUG] [Thread-11232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:03:24.116 [DEBUG] [Thread-11232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:03:24.117 [DEBUG] [Thread-11232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:03:24.126 [DEBUG] [Thread-11232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:03:24.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:03:24.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-25T12:03:24.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:03:24.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:03:24.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:03:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:03:24.162 [DEBUG] [Thread-11232] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:03:30.975 [DEBUG] [Thread-11234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:46.025 [DEBUG] [Thread-11235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:03:54.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:03:54.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:03:54.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-25T12:03:54.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 3, 34), 34.74, 9.45, 0.0, 23.84, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:03:54.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:03:34
2025-12-25T12:03:55.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:03:55.198 [DEBUG] [Thread-11236] [transport.py] [_log()] starting thread (client mode): 0xb957be20
2025-12-25T12:03:55.198 [DEBUG] [Thread-11236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:03:55.218 [DEBUG] [Thread-11236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:03:55.218 [INFO] [Thread-11236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] client lang: <none>
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] server lang: <none>
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] kex follows: False
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:03:55.221 [DEBUG] [Thread-11236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:03:55.222 [DEBUG] [Thread-11236] [transport.py] [_log()] Compression: none
2025-12-25T12:03:55.222 [DEBUG] [Thread-11236] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:03:55.236 [DEBUG] [Thread-11236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:03:55.236 [DEBUG] [Thread-11236] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:03:55.236 [DEBUG] [Thread-11236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:03:55.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:03:55.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:03:55.237 [DEBUG] [Thread-11236] [transport.py] [_log()] userauth is OK
2025-12-25T12:03:55.237 [DEBUG] [Thread-11236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:03:55.237 [DEBUG] [Thread-11236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:03:55.237 [DEBUG] [Thread-11236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:03:55.237 [DEBUG] [Thread-11236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:03:55.255 [INFO] [Thread-11236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:03:55.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:03:55.915 [DEBUG] [Thread-11236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:03:55.915 [DEBUG] [Thread-11236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:03:55.915 [DEBUG] [Thread-11236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:03:55.957 [DEBUG] [Thread-11236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:03:55.957 [DEBUG] [Thread-11236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:03:55.959 [DEBUG] [Thread-11236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:03:55.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:03:55.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:03:55.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:03:55.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:03:55.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:03:55.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:03:55.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.419159 -999.00  +24.80  25.46     17   -1.80 1 1 1 1 1   888    0 27.43 132.15 ----- 25.5 25.5 328.6 27.8 30.9 -25.2 30.1 -24.6 29.8 -22.4 30.1 -24.4
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.419159
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:03:55.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:03:34', tmtdew=34.74, humidity=9.45, cloud=0.0, wind=23.84, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:03:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:03:55.979 [DEBUG] [Thread-11236] [transport.py] [_log()] EOF in transport thread
2025-12-25T12: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-25T12:03:56.063 [DEBUG] [Thread-11239] [transport.py] [_log()] starting thread (client mode): 0xb957b880
2025-12-25T12:03:56.063 [DEBUG] [Thread-11239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:03:56.077 [DEBUG] [Thread-11239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:03:56.077 [INFO] [Thread-11239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] client lang: <none>
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] server lang: <none>
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] kex follows: False
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] Compression: none
2025-12-25T12:03:56.085 [DEBUG] [Thread-11239] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:03:56.142 [DEBUG] [Thread-11239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:03:56.142 [DEBUG] [Thread-11239] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:03:56.143 [DEBUG] [Thread-11239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:03:56.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:03:56.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:03:56.200 [DEBUG] [Thread-11239] [transport.py] [_log()] userauth is OK
2025-12-25T12:03:56.200 [DEBUG] [Thread-11239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:03:56.200 [DEBUG] [Thread-11239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:03:56.200 [DEBUG] [Thread-11239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:03:56.200 [DEBUG] [Thread-11239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:03:56.213 [INFO] [Thread-11239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:03:56.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-25T12:03:56.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:03:57.097 [DEBUG] [Thread-11239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:03:57.097 [DEBUG] [Thread-11239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:03:57.145 [DEBUG] [Thread-11239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:03:57.145 [DEBUG] [Thread-11239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:03:57.153 [DEBUG] [Thread-11239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:03:57.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:03:57.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-25T12:03:57.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-25T12:03:57.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:03:57.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:03:57.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:03:57.185 [DEBUG] [Thread-11239] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:04:00.485 [DEBUG] [Thread-11241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:04:01.063 [DEBUG] [Thread-11242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:04:16.115 [DEBUG] [Thread-11243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:04:16.267 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:04:16.268 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:04:27.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:04:27.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:04:27.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-25T12:04:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 4, 6), 34.31, 9.73, 0.0, 20.19, 25.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:04:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:04:06
2025-12-25T12:04:28.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:04:28.176 [DEBUG] [Thread-11244] [transport.py] [_log()] starting thread (client mode): 0xb6be3eb0
2025-12-25T12:04:28.176 [DEBUG] [Thread-11244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:04:28.197 [DEBUG] [Thread-11244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:04:28.197 [INFO] [Thread-11244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:04:28.200 [DEBUG] [Thread-11244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:04:28.200 [DEBUG] [Thread-11244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:04:28.200 [DEBUG] [Thread-11244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:04:28.200 [DEBUG] [Thread-11244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:04:28.200 [DEBUG] [Thread-11244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] client lang: <none>
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] server lang: <none>
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] kex follows: False
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] Compression: none
2025-12-25T12:04:28.201 [DEBUG] [Thread-11244] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:04:28.218 [DEBUG] [Thread-11244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:04:28.219 [DEBUG] [Thread-11244] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:04:28.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:04:28.220 [DEBUG] [Thread-11244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:04:28.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:04:28.222 [DEBUG] [Thread-11244] [transport.py] [_log()] userauth is OK
2025-12-25T12:04:28.222 [DEBUG] [Thread-11244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:04:28.222 [DEBUG] [Thread-11244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:04:28.222 [DEBUG] [Thread-11244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:04:28.222 [DEBUG] [Thread-11244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:04:28.241 [INFO] [Thread-11244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:04:28.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:04:28.816 [DEBUG] [Thread-11244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:04:28.816 [DEBUG] [Thread-11244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:04:28.817 [DEBUG] [Thread-11244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:04:28.857 [DEBUG] [Thread-11244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:04:28.857 [DEBUG] [Thread-11244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:04:28.860 [DEBUG] [Thread-11244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:04:28.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:04:28.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:04:28.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:04:28.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:04:28.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:04:28.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:04:28.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.419507 -999.00  +24.80  18.49     15   -3.30 1 1 1 1 1   888    0 27.76 139.80 ----- 18.5 18.5 343.0 31.4 30.9 -26.1 30.1 -25.3 29.8 -23.1 30.3 -24.5
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.419507
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:04:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:04:06', tmtdew=34.31, humidity=9.73, cloud=0.0, wind=20.19, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:04:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:04:28.879 [DEBUG] [Thread-11244] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:04:28.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-25T12:04:28.959 [DEBUG] [Thread-11247] [transport.py] [_log()] starting thread (client mode): 0xb6be1060
2025-12-25T12:04:28.959 [DEBUG] [Thread-11247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:04:28.974 [DEBUG] [Thread-11247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:04:28.974 [INFO] [Thread-11247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] client lang: <none>
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] server lang: <none>
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] kex follows: False
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:04:28.982 [DEBUG] [Thread-11247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:04:28.983 [DEBUG] [Thread-11247] [transport.py] [_log()] Compression: none
2025-12-25T12:04:28.983 [DEBUG] [Thread-11247] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:04:29.040 [DEBUG] [Thread-11247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:04:29.040 [DEBUG] [Thread-11247] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:04:29.041 [DEBUG] [Thread-11247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:04:29.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:04:29.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:04:29.096 [DEBUG] [Thread-11247] [transport.py] [_log()] userauth is OK
2025-12-25T12:04:29.097 [DEBUG] [Thread-11247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:04:29.097 [DEBUG] [Thread-11247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:04:29.097 [DEBUG] [Thread-11247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:04:29.097 [DEBUG] [Thread-11247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:04:29.115 [INFO] [Thread-11247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:04:29.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:04:29.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:04:29.964 [DEBUG] [Thread-11247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:04:29.965 [DEBUG] [Thread-11247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:04:30.013 [DEBUG] [Thread-11247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:04:30.013 [DEBUG] [Thread-11247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:04:30.021 [DEBUG] [Thread-11247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:04:30.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:04:30.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-25T12:04:30.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-25T12:04:30.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:04:30.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:04:30.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:04:30.057 [DEBUG] [Thread-11247] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:04:31.145 [DEBUG] [Thread-11249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:04:46.182 [DEBUG] [Thread-11250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:05:00.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:05:00.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-25T12:05:00.535 [DEBUG] [Thread-11251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 4, 38), 34.63, 9.42, 0.0, 19.76, 24.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:05:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:04:38
2025-12-25T12:05:00.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:05:01.056 [DEBUG] [Thread-11252] [transport.py] [_log()] starting thread (client mode): 0xb957a320
2025-12-25T12:05:01.057 [DEBUG] [Thread-11252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:05:01.078 [DEBUG] [Thread-11252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:05:01.078 [INFO] [Thread-11252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] client lang: <none>
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] server lang: <none>
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] kex follows: False
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:05:01.082 [DEBUG] [Thread-11252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:05:01.083 [DEBUG] [Thread-11252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:05:01.083 [DEBUG] [Thread-11252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:05:01.083 [DEBUG] [Thread-11252] [transport.py] [_log()] Compression: none
2025-12-25T12:05:01.083 [DEBUG] [Thread-11252] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:05:01.100 [DEBUG] [Thread-11252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:05:01.101 [DEBUG] [Thread-11252] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:05:01.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:05:01.102 [DEBUG] [Thread-11252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:05:01.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:05:01.104 [DEBUG] [Thread-11252] [transport.py] [_log()] userauth is OK
2025-12-25T12:05:01.105 [DEBUG] [Thread-11252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:05:01.105 [DEBUG] [Thread-11252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:05:01.105 [DEBUG] [Thread-11252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:05:01.105 [DEBUG] [Thread-11252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:05:01.130 [INFO] [Thread-11252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:05:01.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:05:01.218 [DEBUG] [Thread-11254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:01.715 [DEBUG] [Thread-11252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:05:01.715 [DEBUG] [Thread-11252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:05:01.716 [DEBUG] [Thread-11252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:05:01.756 [DEBUG] [Thread-11252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:05:01.756 [DEBUG] [Thread-11252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:05:01.759 [DEBUG] [Thread-11252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:05:01.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:05:01.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:05:01.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:05:01.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:05:01.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:05:01.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:05:01.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:05:01.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:05:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:05:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.419854 -999.00  +25.20  16.56     12   -5.50 1 1 1 1 1   888    0 27.55 147.11 ----- 16.6 16.6 338.2 25.1 31.0 -26.4 30.2 -25.8 29.9 -22.9 30.3 -23.6
2025-12-25T12:05:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:05:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:05:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.419854
2025-12-25T12:05:01.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:05:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:05:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:05:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:05:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:05:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:04:38', tmtdew=34.63, humidity=9.42, cloud=0.0, wind=19.76, temperature=24.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:04:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:05:01.784 [DEBUG] [Thread-11252] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:05:01.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-25T12:05:01.878 [DEBUG] [Thread-11256] [transport.py] [_log()] starting thread (client mode): 0xb957a260
2025-12-25T12:05:01.878 [DEBUG] [Thread-11256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:05:01.893 [DEBUG] [Thread-11256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:05:01.893 [INFO] [Thread-11256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:05:01.901 [DEBUG] [Thread-11256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:05:01.901 [DEBUG] [Thread-11256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:05:01.902 [DEBUG] [Thread-11256] [transport.py] [_log()] client lang: <none>
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] server lang: <none>
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] kex follows: False
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:05:01.903 [DEBUG] [Thread-11256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:05:01.904 [DEBUG] [Thread-11256] [transport.py] [_log()] Compression: none
2025-12-25T12:05:01.904 [DEBUG] [Thread-11256] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:05:01.962 [DEBUG] [Thread-11256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:05:01.962 [DEBUG] [Thread-11256] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:05:01.963 [DEBUG] [Thread-11256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:05:01.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:05:01.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:05:02.021 [DEBUG] [Thread-11256] [transport.py] [_log()] userauth is OK
2025-12-25T12:05:02.022 [DEBUG] [Thread-11256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:05:02.022 [DEBUG] [Thread-11256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:05:02.022 [DEBUG] [Thread-11256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:05:02.022 [DEBUG] [Thread-11256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:05:02.040 [INFO] [Thread-11256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:05:02.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:05:02.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:05:02.869 [DEBUG] [Thread-11256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:05:02.869 [DEBUG] [Thread-11256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:05:02.917 [DEBUG] [Thread-11256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:05:02.918 [DEBUG] [Thread-11256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:05:02.927 [DEBUG] [Thread-11256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:05:02.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:05:02.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:05:02.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:05:02.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:05:02.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:05:02.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:05:02.963 [DEBUG] [Thread-11256] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:05:16.250 [DEBUG] [Thread-11258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:16.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:16.409 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:31.303 [DEBUG] [Thread-11259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:05:32.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:05:32.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:05:32.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:05:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 5, 10), 34.86, 9.22, 0.0, 21.0, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:05:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:05:10
2025-12-25T12:05:33.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:05:33.949 [DEBUG] [Thread-11260] [transport.py] [_log()] starting thread (client mode): 0xb957af20
2025-12-25T12:05:33.949 [DEBUG] [Thread-11260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:05:33.969 [DEBUG] [Thread-11260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:05:33.969 [INFO] [Thread-11260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:05:33.972 [DEBUG] [Thread-11260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:05:33.972 [DEBUG] [Thread-11260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:05:33.972 [DEBUG] [Thread-11260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] client lang: <none>
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] server lang: <none>
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] kex follows: False
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] Compression: none
2025-12-25T12:05:33.973 [DEBUG] [Thread-11260] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:05:33.992 [DEBUG] [Thread-11260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:05:33.992 [DEBUG] [Thread-11260] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:05:33.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:05:33.993 [DEBUG] [Thread-11260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:05:33.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:05:33.995 [DEBUG] [Thread-11260] [transport.py] [_log()] userauth is OK
2025-12-25T12:05:33.995 [DEBUG] [Thread-11260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:05:33.996 [DEBUG] [Thread-11260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:05:33.996 [DEBUG] [Thread-11260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:05:33.996 [DEBUG] [Thread-11260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:05:34.020 [INFO] [Thread-11260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:05:34.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:05:34.656 [DEBUG] [Thread-11260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:05:34.656 [DEBUG] [Thread-11260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:05:34.657 [DEBUG] [Thread-11260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:05:34.697 [DEBUG] [Thread-11260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:05:34.697 [DEBUG] [Thread-11260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:05:34.701 [DEBUG] [Thread-11260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:05:34.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:05:34.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:05:34.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:05:34.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:05:34.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:05:34.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:05:34.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:05:34.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:05:34.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:05:34.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.420201 -999.00  +24.80  12.43     12   -5.80 1 1 1 1 1   888    0 28.99 173.05 ----- 12.4 12.4 21.6 18.1 31.0 -25.9 30.1 -27.0 29.9 -22.2 30.4 -24.0
2025-12-25T12:05:34.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:05:34.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:05:34.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.420201
2025-12-25T12:05:34.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:05:34.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:05:34.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:05:34.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:05:34.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:05:34.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:05:10', tmtdew=34.86, humidity=9.22, cloud=0.0, wind=21.0, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:05:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:05:34.729 [DEBUG] [Thread-11260] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:05:34.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-25T12:05:34.823 [DEBUG] [Thread-11263] [transport.py] [_log()] starting thread (client mode): 0xb6b14c70
2025-12-25T12:05:34.823 [DEBUG] [Thread-11263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:05:34.838 [DEBUG] [Thread-11263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:05:34.839 [INFO] [Thread-11263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:05:34.847 [DEBUG] [Thread-11263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] client lang: <none>
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] server lang: <none>
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] kex follows: False
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] Compression: none
2025-12-25T12:05:34.848 [DEBUG] [Thread-11263] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:05:34.908 [DEBUG] [Thread-11263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:05:34.908 [DEBUG] [Thread-11263] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:05:34.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:05:34.909 [DEBUG] [Thread-11263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:05:34.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:05:34.966 [DEBUG] [Thread-11263] [transport.py] [_log()] userauth is OK
2025-12-25T12:05:34.967 [DEBUG] [Thread-11263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:05:34.967 [DEBUG] [Thread-11263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:05:34.967 [DEBUG] [Thread-11263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:05:34.967 [DEBUG] [Thread-11263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:05:34.986 [INFO] [Thread-11263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:05:34.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-25T12:05:34.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:05:35.891 [DEBUG] [Thread-11263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:05:35.892 [DEBUG] [Thread-11263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:05:35.939 [DEBUG] [Thread-11263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:05:35.939 [DEBUG] [Thread-11263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:05:35.949 [DEBUG] [Thread-11263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:05:35.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:05:35.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:05:35.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-25T12:05:35.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:05:35.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:05:35.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:05:35.985 [DEBUG] [Thread-11263] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:05:46.342 [DEBUG] [Thread-11265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:00.593 [DEBUG] [Thread-11266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:01.393 [DEBUG] [Thread-11267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:06:05.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:06:05.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-25T12:06:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 5, 42), 35.75, 8.24, 0.0, 20.34, 24.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:06:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:05:42
2025-12-25T12:06:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:06:06.958 [DEBUG] [Thread-11268] [transport.py] [_log()] starting thread (client mode): 0xb6be17b0
2025-12-25T12:06:06.958 [DEBUG] [Thread-11268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:06:06.979 [DEBUG] [Thread-11268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:06:06.979 [INFO] [Thread-11268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] client lang: <none>
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] server lang: <none>
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] kex follows: False
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:06:06.982 [DEBUG] [Thread-11268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:06:06.983 [DEBUG] [Thread-11268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:06:06.983 [DEBUG] [Thread-11268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:06:06.983 [DEBUG] [Thread-11268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:06:06.983 [DEBUG] [Thread-11268] [transport.py] [_log()] Compression: none
2025-12-25T12:06:06.983 [DEBUG] [Thread-11268] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:06:06.999 [DEBUG] [Thread-11268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:06:06.999 [DEBUG] [Thread-11268] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:06:07.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:06:07.000 [DEBUG] [Thread-11268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:06:07.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:06:07.002 [DEBUG] [Thread-11268] [transport.py] [_log()] userauth is OK
2025-12-25T12:06:07.002 [DEBUG] [Thread-11268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:06:07.002 [DEBUG] [Thread-11268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:06:07.003 [DEBUG] [Thread-11268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:06:07.003 [DEBUG] [Thread-11268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:06:07.021 [INFO] [Thread-11268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:06:07.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:06:07.624 [DEBUG] [Thread-11268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:06:07.624 [DEBUG] [Thread-11268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:06:07.625 [DEBUG] [Thread-11268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:06:07.665 [DEBUG] [Thread-11268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:06:07.665 [DEBUG] [Thread-11268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:06:07.668 [DEBUG] [Thread-11268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:06:07.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:06:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:06:07.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:06:07.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:06:07.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:06:07.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:06:07.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:06:07.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:06:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:06:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.420548 -999.00  +25.20  19.24     14   -3.60 1 1 1 1 1   888    0 29.39 189.25 ----- 19.2 19.2 312.6 23.5 31.2 -26.2 30.4 -24.1 30.0 -23.4 30.5 -23.7
2025-12-25T12:06:07.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:06:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:06:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.420548
2025-12-25T12:06:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:06:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:06:07.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:06:07.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:06:07.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:06:07.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:05:42', tmtdew=35.75, humidity=8.24, cloud=0.0, wind=20.34, temperature=24.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:05:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:06:07.694 [DEBUG] [Thread-11268] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:06:07.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:06:07.788 [DEBUG] [Thread-11271] [transport.py] [_log()] starting thread (client mode): 0xb9579570
2025-12-25T12:06:07.788 [DEBUG] [Thread-11271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:06:07.807 [DEBUG] [Thread-11271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:06:07.807 [INFO] [Thread-11271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] client lang: <none>
2025-12-25T12:06:07.815 [DEBUG] [Thread-11271] [transport.py] [_log()] server lang: <none>
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] kex follows: False
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] Compression: none
2025-12-25T12:06:07.816 [DEBUG] [Thread-11271] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:06:07.874 [DEBUG] [Thread-11271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:06:07.874 [DEBUG] [Thread-11271] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:06:07.875 [DEBUG] [Thread-11271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:06:07.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:06:07.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:06:07.930 [DEBUG] [Thread-11271] [transport.py] [_log()] userauth is OK
2025-12-25T12:06:07.930 [DEBUG] [Thread-11271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:06:07.931 [DEBUG] [Thread-11271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:06:07.931 [DEBUG] [Thread-11271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:06:07.931 [DEBUG] [Thread-11271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:06:07.949 [INFO] [Thread-11271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:06:07.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-25T12:06:07.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:06:08.787 [DEBUG] [Thread-11271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:06:08.787 [DEBUG] [Thread-11271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:06:08.835 [DEBUG] [Thread-11271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:06:08.835 [DEBUG] [Thread-11271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:06:08.845 [DEBUG] [Thread-11271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:06:08.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:06:08.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:06:08.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:06:08.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:06:08.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:06:08.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:06:08.881 [DEBUG] [Thread-11271] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:06:16.426 [DEBUG] [Thread-11273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:16.547 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:16.548 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:31.462 [DEBUG] [Thread-11274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:06:38.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:06:38.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:06:38.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-25T12:06:39.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 6, 14), 34.63, 9.07, 0.0, 20.03, 24.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:06:39.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:06:14
2025-12-25T12:06:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:06:39.868 [DEBUG] [Thread-11275] [transport.py] [_log()] starting thread (client mode): 0xb6b2a230
2025-12-25T12:06:39.868 [DEBUG] [Thread-11275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:06:39.893 [DEBUG] [Thread-11275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:06:39.893 [INFO] [Thread-11275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] client lang: <none>
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] server lang: <none>
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] kex follows: False
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:06:39.897 [DEBUG] [Thread-11275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:06:39.898 [DEBUG] [Thread-11275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:06:39.898 [DEBUG] [Thread-11275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:06:39.898 [DEBUG] [Thread-11275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:06:39.898 [DEBUG] [Thread-11275] [transport.py] [_log()] Compression: none
2025-12-25T12:06:39.898 [DEBUG] [Thread-11275] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:06:39.916 [DEBUG] [Thread-11275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:06:39.917 [DEBUG] [Thread-11275] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:06:39.917 [DEBUG] [Thread-11275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:06:39.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:06:39.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:06:39.919 [DEBUG] [Thread-11275] [transport.py] [_log()] userauth is OK
2025-12-25T12:06:39.920 [DEBUG] [Thread-11275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:06:39.920 [DEBUG] [Thread-11275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:06:39.920 [DEBUG] [Thread-11275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:06:39.920 [DEBUG] [Thread-11275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:06:39.944 [INFO] [Thread-11275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:06:39.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:06:40.604 [DEBUG] [Thread-11275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:06:40.605 [DEBUG] [Thread-11275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:06:40.605 [DEBUG] [Thread-11275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:06:40.646 [DEBUG] [Thread-11275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:06:40.646 [DEBUG] [Thread-11275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:06:40.650 [DEBUG] [Thread-11275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:06:40.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:06:40.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:06:40.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:06:40.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:06:40.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:06:40.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:06:40.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:06:40.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:06:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:06:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.420896 -999.00  +25.50  25.34     16   -1.40 1 1 1 1 1   888    0 30.31 204.55 ----- 25.3 25.3 325.6 30.4 31.2 -26.3 30.5 -24.3 30.1 -22.9 30.6 -23.2
2025-12-25T12:06:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:06:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:06:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.420896
2025-12-25T12:06:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:06:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:06:40.676 [DEBUG] [Thread-11275] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:06:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:06:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:06:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:06:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:06:14', tmtdew=34.63, humidity=9.07, cloud=0.0, wind=20.03, temperature=24.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:06:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:06:40.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-25T12:06:40.782 [DEBUG] [Thread-11278] [transport.py] [_log()] starting thread (client mode): 0xb6b2a6e0
2025-12-25T12:06:40.782 [DEBUG] [Thread-11278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:06:40.797 [DEBUG] [Thread-11278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:06:40.797 [INFO] [Thread-11278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:06:40.805 [DEBUG] [Thread-11278] [transport.py] [_log()] client lang: <none>
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] server lang: <none>
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] kex follows: False
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] Compression: none
2025-12-25T12:06:40.806 [DEBUG] [Thread-11278] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:06:40.862 [DEBUG] [Thread-11278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:06:40.863 [DEBUG] [Thread-11278] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:06:40.863 [DEBUG] [Thread-11278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:06:40.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:06:40.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:06:40.918 [DEBUG] [Thread-11278] [transport.py] [_log()] userauth is OK
2025-12-25T12:06:40.919 [DEBUG] [Thread-11278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:06:40.919 [DEBUG] [Thread-11278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:06:40.919 [DEBUG] [Thread-11278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:06:40.919 [DEBUG] [Thread-11278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:06:40.939 [INFO] [Thread-11278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:06: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-25T12:06:40.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:06:41.750 [DEBUG] [Thread-11278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:06:41.750 [DEBUG] [Thread-11278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:06:41.798 [DEBUG] [Thread-11278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:06:41.798 [DEBUG] [Thread-11278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:06:41.807 [DEBUG] [Thread-11278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:06:41.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:06:41.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:06:41.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:06:41.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:06:41.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:06:41.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:06:41.844 [DEBUG] [Thread-11278] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:06:46.497 [DEBUG] [Thread-11280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:00.648 [DEBUG] [Thread-11281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:01.553 [DEBUG] [Thread-11282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:07:11.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:07:11.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:07:12.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 6, 46), 31.9, 11.25, 0.0, 20.91, 24.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:07:12.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:06:46
2025-12-25T12:07:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:07:12.863 [DEBUG] [Thread-11283] [transport.py] [_log()] starting thread (client mode): 0xb9579b10
2025-12-25T12:07:12.863 [DEBUG] [Thread-11283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:07:12.884 [DEBUG] [Thread-11283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:07:12.884 [INFO] [Thread-11283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] client lang: <none>
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] server lang: <none>
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] kex follows: False
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] Compression: none
2025-12-25T12:07:12.887 [DEBUG] [Thread-11283] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:07:12.902 [DEBUG] [Thread-11283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:07:12.902 [DEBUG] [Thread-11283] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:07:12.902 [DEBUG] [Thread-11283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:07:12.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:07:12.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:07:12.903 [DEBUG] [Thread-11283] [transport.py] [_log()] userauth is OK
2025-12-25T12:07:12.903 [DEBUG] [Thread-11283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:07:12.903 [DEBUG] [Thread-11283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:07:12.903 [DEBUG] [Thread-11283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:07:12.903 [DEBUG] [Thread-11283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:07:12.914 [INFO] [Thread-11283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:07:12.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:07:13.537 [DEBUG] [Thread-11283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:07:13.537 [DEBUG] [Thread-11283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:07:13.538 [DEBUG] [Thread-11283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:07:13.578 [DEBUG] [Thread-11283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:07:13.578 [DEBUG] [Thread-11283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:07:13.582 [DEBUG] [Thread-11283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:07:13.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:07:13.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:07:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:07:13.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:07:13.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:07:13.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:07:13.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:07:13.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:07:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:07:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.421243 -999.00  +25.10  15.29     14   -3.40 1 1 1 1 1   888    0 30.36 213.22 ----- 15.3 15.3 353.4 23.5 31.2 -26.7 30.4 -26.6 30.0 -22.9 30.7 -23.6
2025-12-25T12:07:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:07:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:07:13.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.421243
2025-12-25T12:07:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:07:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:07:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:07:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:07:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:07:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:06:46', tmtdew=31.9, humidity=11.25, cloud=0.0, wind=20.91, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:06:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:07:13.607 [DEBUG] [Thread-11283] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:07:13.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:07:13.705 [DEBUG] [Thread-11286] [transport.py] [_log()] starting thread (client mode): 0xb6be2410
2025-12-25T12:07:13.705 [DEBUG] [Thread-11286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:07:13.720 [DEBUG] [Thread-11286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:07:13.720 [INFO] [Thread-11286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:07:13.728 [DEBUG] [Thread-11286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:07:13.728 [DEBUG] [Thread-11286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:07:13.728 [DEBUG] [Thread-11286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:07:13.728 [DEBUG] [Thread-11286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] client lang: <none>
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] server lang: <none>
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] kex follows: False
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] Compression: none
2025-12-25T12:07:13.729 [DEBUG] [Thread-11286] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:07:13.790 [DEBUG] [Thread-11286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:07:13.791 [DEBUG] [Thread-11286] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:07:13.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:07:13.792 [DEBUG] [Thread-11286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:07:13.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:07:13.846 [DEBUG] [Thread-11286] [transport.py] [_log()] userauth is OK
2025-12-25T12:07:13.847 [DEBUG] [Thread-11286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:07:13.847 [DEBUG] [Thread-11286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:07:13.847 [DEBUG] [Thread-11286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:07:13.847 [DEBUG] [Thread-11286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:07:13.866 [INFO] [Thread-11286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:07:13.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-25T12:07:13.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:07:14.676 [DEBUG] [Thread-11286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:07:14.676 [DEBUG] [Thread-11286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:07:14.724 [DEBUG] [Thread-11286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:07:14.724 [DEBUG] [Thread-11286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:07:14.734 [DEBUG] [Thread-11286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:07:14.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:07:14.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-25T12:07:14.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-25T12:07:14.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:07:14.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:07:14.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:07:14.770 [DEBUG] [Thread-11286] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:07:16.583 [DEBUG] [Thread-11288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:16.687 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:16.689 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:31.640 [DEBUG] [Thread-11289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:07:44.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:07:44.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-25T12:07:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 7, 18), 31.3, 11.76, 0.0, 20.01, 24.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:07:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:07:18
2025-12-25T12:07:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:07:45.762 [DEBUG] [Thread-11290] [transport.py] [_log()] starting thread (client mode): 0xb6b2ba90
2025-12-25T12:07:45.762 [DEBUG] [Thread-11290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:07:45.782 [DEBUG] [Thread-11290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:07:45.782 [INFO] [Thread-11290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:07:45.785 [DEBUG] [Thread-11290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:07:45.785 [DEBUG] [Thread-11290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:07:45.785 [DEBUG] [Thread-11290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:07:45.785 [DEBUG] [Thread-11290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:45.785 [DEBUG] [Thread-11290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:45.785 [DEBUG] [Thread-11290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] client lang: <none>
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] server lang: <none>
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] kex follows: False
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] Compression: none
2025-12-25T12:07:45.786 [DEBUG] [Thread-11290] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:07:45.803 [DEBUG] [Thread-11290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:07:45.803 [DEBUG] [Thread-11290] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:07:45.804 [DEBUG] [Thread-11290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:07:45.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:07:45.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:07:45.806 [DEBUG] [Thread-11290] [transport.py] [_log()] userauth is OK
2025-12-25T12:07:45.806 [DEBUG] [Thread-11290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:07:45.806 [DEBUG] [Thread-11290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:07:45.806 [DEBUG] [Thread-11290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:07:45.806 [DEBUG] [Thread-11290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:07:45.830 [INFO] [Thread-11290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:07:45.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:07:46.463 [DEBUG] [Thread-11290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:07:46.463 [DEBUG] [Thread-11290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:07:46.463 [DEBUG] [Thread-11290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:07:46.504 [DEBUG] [Thread-11290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:07:46.504 [DEBUG] [Thread-11290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:07:46.507 [DEBUG] [Thread-11290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:07:46.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:07:46.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:07:46.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:07:46.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:07:46.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:07:46.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:07:46.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:07:46.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.421937 -999.00  +24.40  16.20     18   -1.00 1 1 1 1 1   888    0 30.66 221.26 ----- 16.2 16.2 334.8 29.1 31.2 -25.4 30.4 -25.0 30.1 -22.6 30.5 -24.5
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.421937
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:07:46.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:07:18', tmtdew=31.3, humidity=11.76, cloud=0.0, wind=20.01, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:07:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:07:46.527 [DEBUG] [Thread-11290] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:07:46.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-25T12:07:46.609 [DEBUG] [Thread-11293] [transport.py] [_log()] starting thread (client mode): 0xb6b2b220
2025-12-25T12:07:46.609 [DEBUG] [Thread-11293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:07:46.626 [DEBUG] [Thread-11293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:07:46.626 [INFO] [Thread-11293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] client lang: <none>
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] server lang: <none>
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] kex follows: False
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] Compression: none
2025-12-25T12:07:46.634 [DEBUG] [Thread-11293] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:07:46.673 [DEBUG] [Thread-11295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:07:46.692 [DEBUG] [Thread-11293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:07:46.692 [DEBUG] [Thread-11293] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:07:46.692 [DEBUG] [Thread-11293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:07:46.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:07:46.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:07:46.750 [DEBUG] [Thread-11293] [transport.py] [_log()] userauth is OK
2025-12-25T12:07:46.750 [DEBUG] [Thread-11293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:07:46.750 [DEBUG] [Thread-11293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:07:46.750 [DEBUG] [Thread-11293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:07:46.750 [DEBUG] [Thread-11293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:07:46.764 [INFO] [Thread-11293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:07:46.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-25T12:07:46.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:07:47.622 [DEBUG] [Thread-11293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:07:47.622 [DEBUG] [Thread-11293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:07:47.669 [DEBUG] [Thread-11293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:07:47.669 [DEBUG] [Thread-11293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:07:47.677 [DEBUG] [Thread-11293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:07:47.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:07:47.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:07:47.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:07:47.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:07:47.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:07:47.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:07:47.709 [DEBUG] [Thread-11293] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:08:00.707 [DEBUG] [Thread-11296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:01.717 [DEBUG] [Thread-11297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:16.756 [DEBUG] [Thread-11298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:16.829 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:16.831 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:17.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:08:17.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:08:17.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-25T12:08:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 7, 50), 30.83, 12.37, 0.0, 20.86, 24.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:08:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:07:50
2025-12-25T12:08:18.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:08:18.682 [DEBUG] [Thread-11299] [transport.py] [_log()] starting thread (client mode): 0xb6b142e0
2025-12-25T12:08:18.682 [DEBUG] [Thread-11299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:08:18.702 [DEBUG] [Thread-11299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:08:18.702 [INFO] [Thread-11299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] client lang: <none>
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] server lang: <none>
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] kex follows: False
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:08:18.706 [DEBUG] [Thread-11299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:08:18.707 [DEBUG] [Thread-11299] [transport.py] [_log()] Compression: none
2025-12-25T12:08:18.707 [DEBUG] [Thread-11299] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:08:18.715 [DEBUG] [Thread-11299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:08:18.716 [DEBUG] [Thread-11299] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:08:18.716 [DEBUG] [Thread-11299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:08:18.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:08:18.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:08:18.719 [DEBUG] [Thread-11299] [transport.py] [_log()] userauth is OK
2025-12-25T12:08:18.719 [DEBUG] [Thread-11299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:08:18.719 [DEBUG] [Thread-11299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:08:18.719 [DEBUG] [Thread-11299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:08:18.719 [DEBUG] [Thread-11299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:08:18.755 [INFO] [Thread-11299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:08:18.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:08:19.348 [DEBUG] [Thread-11299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:08:19.348 [DEBUG] [Thread-11299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:08:19.349 [DEBUG] [Thread-11299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:08:19.389 [DEBUG] [Thread-11299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:08:19.389 [DEBUG] [Thread-11299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:08:19.392 [DEBUG] [Thread-11299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:08:19.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:08:19.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:08:19.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:08:19.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:08:19.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:08:19.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:08:19.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:08:19.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:08:19.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:08:19.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.422284 -999.00  +24.50  18.99     19   -0.40 1 1 1 1 1   888    0 31.11 236.58 ----- 19.0 19.0 317.2 22.4 31.3 -25.7 30.5 -24.4 30.1 -22.6 30.6 -22.6
2025-12-25T12:08:19.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:08:19.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:08:19.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.422284
2025-12-25T12:08:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:08:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:08:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:08:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:08:19.418 [DEBUG] [Thread-11299] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:08:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:08:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:07:50', tmtdew=30.83, humidity=12.37, cloud=0.0, wind=20.86, temperature=24.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:08:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:08:19.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-25T12:08:19.513 [DEBUG] [Thread-11302] [transport.py] [_log()] starting thread (client mode): 0xb6b2a050
2025-12-25T12:08:19.513 [DEBUG] [Thread-11302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:08:19.532 [DEBUG] [Thread-11302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:08:19.532 [INFO] [Thread-11302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:08:19.539 [DEBUG] [Thread-11302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] client lang: <none>
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] server lang: <none>
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] kex follows: False
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:08:19.540 [DEBUG] [Thread-11302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:08:19.541 [DEBUG] [Thread-11302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:08:19.541 [DEBUG] [Thread-11302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:08:19.541 [DEBUG] [Thread-11302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:08:19.541 [DEBUG] [Thread-11302] [transport.py] [_log()] Compression: none
2025-12-25T12:08:19.541 [DEBUG] [Thread-11302] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:08:19.599 [DEBUG] [Thread-11302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:08:19.600 [DEBUG] [Thread-11302] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:08:19.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:08:19.601 [DEBUG] [Thread-11302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:08:19.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:08:19.655 [DEBUG] [Thread-11302] [transport.py] [_log()] userauth is OK
2025-12-25T12:08:19.655 [DEBUG] [Thread-11302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:08:19.655 [DEBUG] [Thread-11302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:08:19.656 [DEBUG] [Thread-11302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:08:19.656 [DEBUG] [Thread-11302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:08:19.678 [INFO] [Thread-11302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:08:19.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-25T12:08:19.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:08:20.504 [DEBUG] [Thread-11302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:08:20.504 [DEBUG] [Thread-11302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:08:20.555 [DEBUG] [Thread-11302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:08:20.555 [DEBUG] [Thread-11302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:08:20.564 [DEBUG] [Thread-11302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:08:20.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:08:20.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-25T12:08:20.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-25T12:08:20.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:08:20.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:08:20.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:08:20.598 [DEBUG] [Thread-11302] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:08:31.791 [DEBUG] [Thread-11304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:46.842 [DEBUG] [Thread-11305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:08:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:08:50.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:08:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:08:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 8, 22), 30.35, 12.84, 0.0, 20.15, 24.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:08:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:08:22
2025-12-25T12:08:51.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:08:51.557 [DEBUG] [Thread-11306] [transport.py] [_log()] starting thread (client mode): 0xb957a0e0
2025-12-25T12:08:51.557 [DEBUG] [Thread-11306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:08:51.577 [DEBUG] [Thread-11306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:08:51.577 [INFO] [Thread-11306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] client lang: <none>
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] server lang: <none>
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] kex follows: False
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] Compression: none
2025-12-25T12:08:51.580 [DEBUG] [Thread-11306] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:08:51.597 [DEBUG] [Thread-11306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:08:51.598 [DEBUG] [Thread-11306] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:08:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:08:51.599 [DEBUG] [Thread-11306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:08:51.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:08:51.601 [DEBUG] [Thread-11306] [transport.py] [_log()] userauth is OK
2025-12-25T12:08:51.601 [DEBUG] [Thread-11306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:08:51.602 [DEBUG] [Thread-11306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:08:51.602 [DEBUG] [Thread-11306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:08:51.602 [DEBUG] [Thread-11306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:08:51.620 [INFO] [Thread-11306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:08:51.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:08:52.214 [DEBUG] [Thread-11306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:08:52.214 [DEBUG] [Thread-11306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:08:52.215 [DEBUG] [Thread-11306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:08:52.255 [DEBUG] [Thread-11306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:08:52.255 [DEBUG] [Thread-11306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:08:52.258 [DEBUG] [Thread-11306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:08:52.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:08:52.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:08:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:08:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:08:52.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:08:52.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:08:52.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:08:52.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:08:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:08:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.422632 -999.00  +24.60  23.82     19   +0.00 1 2 1 1 1   888    0 31.47 240.89 ----- 23.8 23.8 313.8 26.9 31.3 -24.7 30.5 -24.6 30.1 -21.2 30.7 -23.2
2025-12-25T12:08:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:08:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:08:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.422632
2025-12-25T12:08:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:08:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:08:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:08:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:08:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:08:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:08:22', tmtdew=30.35, humidity=12.84, cloud=0.0, wind=20.15, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:08:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:08:52.283 [DEBUG] [Thread-11306] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:08:52.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-25T12:08:52.377 [DEBUG] [Thread-11309] [transport.py] [_log()] starting thread (client mode): 0xb9579570
2025-12-25T12:08:52.377 [DEBUG] [Thread-11309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:08:52.393 [DEBUG] [Thread-11309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:08:52.393 [INFO] [Thread-11309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] client lang: <none>
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] server lang: <none>
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] kex follows: False
2025-12-25T12:08:52.401 [DEBUG] [Thread-11309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:08:52.402 [DEBUG] [Thread-11309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:08:52.402 [DEBUG] [Thread-11309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:08:52.402 [DEBUG] [Thread-11309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:08:52.402 [DEBUG] [Thread-11309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:08:52.402 [DEBUG] [Thread-11309] [transport.py] [_log()] Compression: none
2025-12-25T12:08:52.402 [DEBUG] [Thread-11309] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:08:52.459 [DEBUG] [Thread-11309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:08:52.460 [DEBUG] [Thread-11309] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:08:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:08:52.461 [DEBUG] [Thread-11309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:08:52.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:08:52.515 [DEBUG] [Thread-11309] [transport.py] [_log()] userauth is OK
2025-12-25T12:08:52.515 [DEBUG] [Thread-11309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:08:52.516 [DEBUG] [Thread-11309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:08:52.516 [DEBUG] [Thread-11309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:08:52.516 [DEBUG] [Thread-11309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:08:52.536 [INFO] [Thread-11309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:08:52.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-25T12:08:52.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:08:53.411 [DEBUG] [Thread-11309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:08:53.411 [DEBUG] [Thread-11309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:08:53.459 [DEBUG] [Thread-11309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:08:53.459 [DEBUG] [Thread-11309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:08:53.468 [DEBUG] [Thread-11309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:08:53.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:08:53.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:08:53.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-25T12:08:53.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:08:53.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:08:53.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:08:53.505 [DEBUG] [Thread-11309] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:09:00.770 [DEBUG] [Thread-11311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:01.875 [DEBUG] [Thread-11312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:16.926 [DEBUG] [Thread-11313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:16.973 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:16.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:23.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:09:23.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:09:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:09:24.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 8, 54), 29.0, 14.37, 0.0, 21.6, 24.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:09:24.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:08:54
2025-12-25T12:09:24.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:09:24.506 [DEBUG] [Thread-11314] [transport.py] [_log()] starting thread (client mode): 0xb6b2bfd0
2025-12-25T12:09:24.507 [DEBUG] [Thread-11314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:09:24.518 [DEBUG] [Thread-11314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:09:24.518 [INFO] [Thread-11314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] client lang: <none>
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] server lang: <none>
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] kex follows: False
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:09:24.521 [DEBUG] [Thread-11314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:09:24.522 [DEBUG] [Thread-11314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:09:24.522 [DEBUG] [Thread-11314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:09:24.522 [DEBUG] [Thread-11314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:09:24.522 [DEBUG] [Thread-11314] [transport.py] [_log()] Compression: none
2025-12-25T12:09:24.522 [DEBUG] [Thread-11314] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:09:24.540 [DEBUG] [Thread-11314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:09:24.541 [DEBUG] [Thread-11314] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:09:24.541 [DEBUG] [Thread-11314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:09:24.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:09:24.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:09:24.543 [DEBUG] [Thread-11314] [transport.py] [_log()] userauth is OK
2025-12-25T12:09:24.543 [DEBUG] [Thread-11314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:09:24.544 [DEBUG] [Thread-11314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:09:24.544 [DEBUG] [Thread-11314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:09:24.544 [DEBUG] [Thread-11314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:09:24.567 [INFO] [Thread-11314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:09:24.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:09:25.115 [DEBUG] [Thread-11314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:09:25.115 [DEBUG] [Thread-11314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:09:25.115 [DEBUG] [Thread-11314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:09:25.156 [DEBUG] [Thread-11314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:09:25.156 [DEBUG] [Thread-11314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:09:25.160 [DEBUG] [Thread-11314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:09:25.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:09:25.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:09:25.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:09:25.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:09:25.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:09:25.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:09:25.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:09:25.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:09:25.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:09:25.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.422979 -999.00  +25.10  15.35     20   +0.90 1 1 1 1 1   888    0 31.49 227.60 ----- 15.3 15.3 306.2 28.6 31.4 -25.2 30.6 -24.6 30.2 -21.8 30.8 -22.5
2025-12-25T12:09:25.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:09:25.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:09:25.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.422979
2025-12-25T12:09:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:09:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:09:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:09:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:09:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:09:25.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:08:54', tmtdew=29.0, humidity=14.37, cloud=0.0, wind=21.6, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:09:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:09:25.183 [DEBUG] [Thread-11314] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:09:25.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-25T12:09:25.273 [DEBUG] [Thread-11317] [transport.py] [_log()] starting thread (client mode): 0xb6b2a050
2025-12-25T12:09:25.273 [DEBUG] [Thread-11317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:09:25.288 [DEBUG] [Thread-11317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:09:25.289 [INFO] [Thread-11317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] client lang: <none>
2025-12-25T12:09:25.296 [DEBUG] [Thread-11317] [transport.py] [_log()] server lang: <none>
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] kex follows: False
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] Compression: none
2025-12-25T12:09:25.297 [DEBUG] [Thread-11317] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:09:25.356 [DEBUG] [Thread-11317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:09:25.357 [DEBUG] [Thread-11317] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:09:25.357 [DEBUG] [Thread-11317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:09:25.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:09:25.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:09:25.419 [DEBUG] [Thread-11317] [transport.py] [_log()] userauth is OK
2025-12-25T12:09:25.419 [DEBUG] [Thread-11317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:09:25.420 [DEBUG] [Thread-11317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:09:25.420 [DEBUG] [Thread-11317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:09:25.420 [DEBUG] [Thread-11317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:09:25.438 [INFO] [Thread-11317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:09:25.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-25T12:09:25.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:09:26.301 [DEBUG] [Thread-11317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:09:26.301 [DEBUG] [Thread-11317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:09:26.349 [DEBUG] [Thread-11317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:09:26.349 [DEBUG] [Thread-11317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:09:26.359 [DEBUG] [Thread-11317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:09:26.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:09:26.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:09:26.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:09:26.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:09:26.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:09:26.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:09:26.399 [DEBUG] [Thread-11317] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:09:31.960 [DEBUG] [Thread-11319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:47.009 [DEBUG] [Thread-11320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:09:56.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:09:56.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:09:56.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-25T12:09:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 9, 26), 29.16, 14.22, 0.0, 21.75, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:09:57.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:09:26
2025-12-25T12:09:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:09:57.373 [DEBUG] [Thread-11321] [transport.py] [_log()] starting thread (client mode): 0xb6b2ab90
2025-12-25T12:09:57.374 [DEBUG] [Thread-11321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:09:57.393 [DEBUG] [Thread-11321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:09:57.393 [INFO] [Thread-11321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] client lang: <none>
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] server lang: <none>
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] kex follows: False
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:09:57.395 [DEBUG] [Thread-11321] [transport.py] [_log()] Compression: none
2025-12-25T12:09:57.396 [DEBUG] [Thread-11321] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:09:57.409 [DEBUG] [Thread-11321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:09:57.409 [DEBUG] [Thread-11321] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:09:57.410 [DEBUG] [Thread-11321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:09:57.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:09:57.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:09:57.412 [DEBUG] [Thread-11321] [transport.py] [_log()] userauth is OK
2025-12-25T12:09:57.412 [DEBUG] [Thread-11321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:09:57.412 [DEBUG] [Thread-11321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:09:57.412 [DEBUG] [Thread-11321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:09:57.412 [DEBUG] [Thread-11321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:09:57.431 [INFO] [Thread-11321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:09:57.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:09:58.076 [DEBUG] [Thread-11321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:09:58.076 [DEBUG] [Thread-11321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:09:58.077 [DEBUG] [Thread-11321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:09:58.116 [DEBUG] [Thread-11321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:09:58.117 [DEBUG] [Thread-11321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:09:58.121 [DEBUG] [Thread-11321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:09:58.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:09:58.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:09:58.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:09:58.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:09:58.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:09:58.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:09:58.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:09:58.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:09:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:09:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.423326 -999.00  +25.00  22.56     20   +1.00 1 1 1 1 1   888    0 31.54 227.73 ----- 22.6 22.6 354.5 29.7 31.3 -26.2 30.5 -26.2 30.1 -22.5 30.8 -23.8
2025-12-25T12:09:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:09:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:09:58.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.423326
2025-12-25T12:09:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:09:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:09:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:09:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:09:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:09:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:09:26', tmtdew=29.16, humidity=14.22, cloud=0.0, wind=21.75, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:09:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:09:58.145 [DEBUG] [Thread-11321] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:09:58.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:09:58.248 [DEBUG] [Thread-11324] [transport.py] [_log()] starting thread (client mode): 0xb957bd60
2025-12-25T12:09:58.248 [DEBUG] [Thread-11324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:09:58.263 [DEBUG] [Thread-11324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:09:58.263 [INFO] [Thread-11324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:09:58.271 [DEBUG] [Thread-11324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:09:58.271 [DEBUG] [Thread-11324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:09:58.271 [DEBUG] [Thread-11324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:09:58.271 [DEBUG] [Thread-11324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] client lang: <none>
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] server lang: <none>
2025-12-25T12:09:58.272 [DEBUG] [Thread-11324] [transport.py] [_log()] kex follows: False
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] Compression: none
2025-12-25T12:09:58.273 [DEBUG] [Thread-11324] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:09:58.335 [DEBUG] [Thread-11324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:09:58.336 [DEBUG] [Thread-11324] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:09:58.337 [DEBUG] [Thread-11324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:09:58.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:09:58.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:09:58.392 [DEBUG] [Thread-11324] [transport.py] [_log()] userauth is OK
2025-12-25T12:09:58.392 [DEBUG] [Thread-11324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:09:58.392 [DEBUG] [Thread-11324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:09:58.393 [DEBUG] [Thread-11324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:09:58.393 [DEBUG] [Thread-11324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:09:58.412 [INFO] [Thread-11324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:09:58.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:09:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:09:59.228 [DEBUG] [Thread-11324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:09:59.229 [DEBUG] [Thread-11324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:09:59.277 [DEBUG] [Thread-11324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:09:59.277 [DEBUG] [Thread-11324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:09:59.286 [DEBUG] [Thread-11324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:09:59.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:09:59.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:09:59.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:09:59.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:09:59.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:09:59.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:09:59.324 [DEBUG] [Thread-11324] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:10:00.834 [DEBUG] [Thread-11326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:10:02.039 [DEBUG] [Thread-11327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:10:17.100 [DEBUG] [Thread-11328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:10:17.121 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:10:17.122 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:10:29.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:10:29.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:10:29.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:10:30.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 9, 58), 28.53, 14.63, 0.0, 22.13, 24.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:10:30.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:09:58
2025-12-25T12:10:30.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:10:30.319 [DEBUG] [Thread-11329] [transport.py] [_log()] starting thread (client mode): 0xb95456c0
2025-12-25T12:10:30.319 [DEBUG] [Thread-11329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:10:30.339 [DEBUG] [Thread-11329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:10:30.339 [INFO] [Thread-11329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:10:30.342 [DEBUG] [Thread-11329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] client lang: <none>
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] server lang: <none>
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] kex follows: False
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] Compression: none
2025-12-25T12:10:30.343 [DEBUG] [Thread-11329] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:10:30.360 [DEBUG] [Thread-11329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:10:30.360 [DEBUG] [Thread-11329] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:10:30.361 [DEBUG] [Thread-11329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:10:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:10:30.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:10:30.405 [DEBUG] [Thread-11329] [transport.py] [_log()] userauth is OK
2025-12-25T12:10:30.405 [DEBUG] [Thread-11329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:10:30.405 [DEBUG] [Thread-11329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:10:30.405 [DEBUG] [Thread-11329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:10:30.406 [DEBUG] [Thread-11329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:10:30.425 [INFO] [Thread-11329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:10:30.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:10:31.158 [DEBUG] [Thread-11329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:10:31.158 [DEBUG] [Thread-11329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:10:31.159 [DEBUG] [Thread-11329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:10:31.199 [DEBUG] [Thread-11329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:10:31.199 [DEBUG] [Thread-11329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:10:31.203 [DEBUG] [Thread-11329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:10:31.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:10:31.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:10:31.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:10:31.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:10:31.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:10:31.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:10:31.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:10:31.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:10:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:10:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.423673 -999.00  +24.90  21.06     21   +1.50 1 2 1 1 1   888    0 31.78 247.89 ----- 21.1 21.1 326.6 27.2 31.3 -24.9 30.4 -25.0 30.2 -20.7 30.4 -22.9
2025-12-25T12:10:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:10:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:10:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.423673
2025-12-25T12:10:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:10:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:10:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:10:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:10:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:10:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:09:58', tmtdew=28.53, humidity=14.63, cloud=0.0, wind=22.13, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:10:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:10:31.232 [DEBUG] [Thread-11329] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:10:31.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-25T12:10:31.327 [DEBUG] [Thread-11332] [transport.py] [_log()] starting thread (client mode): 0xb95475b0
2025-12-25T12:10:31.327 [DEBUG] [Thread-11332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:10:31.348 [DEBUG] [Thread-11332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:10:31.348 [INFO] [Thread-11332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:10:31.359 [DEBUG] [Thread-11332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:10:31.359 [DEBUG] [Thread-11332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] client lang: <none>
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] server lang: <none>
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] kex follows: False
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:10:31.360 [DEBUG] [Thread-11332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:10:31.361 [DEBUG] [Thread-11332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:10:31.361 [DEBUG] [Thread-11332] [transport.py] [_log()] Compression: none
2025-12-25T12:10:31.361 [DEBUG] [Thread-11332] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:10:31.416 [DEBUG] [Thread-11332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:10:31.417 [DEBUG] [Thread-11332] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:10:31.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:10:31.418 [DEBUG] [Thread-11332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:10:31.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:10:31.472 [DEBUG] [Thread-11332] [transport.py] [_log()] userauth is OK
2025-12-25T12:10:31.472 [DEBUG] [Thread-11332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:10:31.472 [DEBUG] [Thread-11332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:10:31.472 [DEBUG] [Thread-11332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:10:31.472 [DEBUG] [Thread-11332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:10:31.491 [INFO] [Thread-11332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:10:31.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-25T12:10:31.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:10:32.130 [DEBUG] [Thread-11334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:10:32.418 [DEBUG] [Thread-11332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:10:32.418 [DEBUG] [Thread-11332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:10:32.466 [DEBUG] [Thread-11332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:10:32.466 [DEBUG] [Thread-11332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:10:32.475 [DEBUG] [Thread-11332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:10:32.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:10:32.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:10:32.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-25T12:10:32.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:10:32.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:10:32.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:10:32.506 [DEBUG] [Thread-11332] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:10:47.173 [DEBUG] [Thread-11335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:00.885 [DEBUG] [Thread-11336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:02.208 [DEBUG] [Thread-11337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:11:02.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:11:02.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-25T12:11:03.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 10, 30), 28.1, 15.08, 0.0, 18.99, 24.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:11:03.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:10:30
2025-12-25T12:11:03.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:11:03.554 [DEBUG] [Thread-11338] [transport.py] [_log()] starting thread (client mode): 0xb6b169b0
2025-12-25T12:11:03.554 [DEBUG] [Thread-11338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:11:03.573 [DEBUG] [Thread-11338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:11:03.573 [INFO] [Thread-11338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] client lang: <none>
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] server lang: <none>
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] kex follows: False
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:11:03.575 [DEBUG] [Thread-11338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:11:03.576 [DEBUG] [Thread-11338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:11:03.576 [DEBUG] [Thread-11338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:11:03.576 [DEBUG] [Thread-11338] [transport.py] [_log()] Compression: none
2025-12-25T12:11:03.576 [DEBUG] [Thread-11338] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:11:03.583 [DEBUG] [Thread-11338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:11:03.583 [DEBUG] [Thread-11338] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:11:03.583 [DEBUG] [Thread-11338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:11:03.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:11:03.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:11:03.584 [DEBUG] [Thread-11338] [transport.py] [_log()] userauth is OK
2025-12-25T12:11:03.584 [DEBUG] [Thread-11338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:11:03.584 [DEBUG] [Thread-11338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:11:03.584 [DEBUG] [Thread-11338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:11:03.584 [DEBUG] [Thread-11338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:11:03.604 [INFO] [Thread-11338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:11:03.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:11:04.258 [DEBUG] [Thread-11338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:11:04.258 [DEBUG] [Thread-11338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:11:04.258 [DEBUG] [Thread-11338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:11:04.298 [DEBUG] [Thread-11338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:11:04.298 [DEBUG] [Thread-11338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:11:04.301 [DEBUG] [Thread-11338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:11:04.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:11:04.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:11:04.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:11:04.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:11:04.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:11:04.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:11:04.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.423673 -999.00  +24.90  21.06     21   +1.50 1 2 1 1 1   888    0 31.78 247.89 ----- 21.1 21.1 326.6 27.2 31.3 -24.9 30.4 -25.0 30.2 -20.7 30.4 -22.9
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.423673
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:11:04.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:10:30', tmtdew=28.1, humidity=15.08, cloud=0.0, wind=18.99, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:10:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:11:04.320 [DEBUG] [Thread-11338] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:11:04.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-25T12:11:04.404 [DEBUG] [Thread-11341] [transport.py] [_log()] starting thread (client mode): 0xb6b17ca0
2025-12-25T12:11:04.404 [DEBUG] [Thread-11341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:11:04.421 [DEBUG] [Thread-11341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:11:04.421 [INFO] [Thread-11341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] client lang: <none>
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] server lang: <none>
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] kex follows: False
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] Compression: none
2025-12-25T12:11:04.429 [DEBUG] [Thread-11341] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:11:04.486 [DEBUG] [Thread-11341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:11:04.486 [DEBUG] [Thread-11341] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:11:04.487 [DEBUG] [Thread-11341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:11:04.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:11:04.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:11:04.544 [DEBUG] [Thread-11341] [transport.py] [_log()] userauth is OK
2025-12-25T12:11:04.544 [DEBUG] [Thread-11341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:11:04.544 [DEBUG] [Thread-11341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:11:04.544 [DEBUG] [Thread-11341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:11:04.544 [DEBUG] [Thread-11341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:11:04.558 [INFO] [Thread-11341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:11:04.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-25T12:11:04.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:11:05.390 [DEBUG] [Thread-11341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:11:05.391 [DEBUG] [Thread-11341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:11:05.438 [DEBUG] [Thread-11341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:11:05.438 [DEBUG] [Thread-11341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:11:05.446 [DEBUG] [Thread-11341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:11:05.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:11:05.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-25T12:11:05.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-25T12:11:05.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:11:05.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:11:05.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:11:05.486 [DEBUG] [Thread-11341] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:11:17.242 [DEBUG] [Thread-11343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:17.263 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:17.264 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:32.291 [DEBUG] [Thread-11344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:11:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:11:35.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:11:35.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-25T12:11:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 11, 2), 28.17, 15.03, 0.0, 18.21, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:11:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:11:02
2025-12-25T12:11:36.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:11:36.547 [DEBUG] [Thread-11345] [transport.py] [_log()] starting thread (client mode): 0xb6b14e20
2025-12-25T12:11:36.547 [DEBUG] [Thread-11345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:11:36.569 [DEBUG] [Thread-11345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:11:36.569 [INFO] [Thread-11345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:36.572 [DEBUG] [Thread-11345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] client lang: <none>
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] server lang: <none>
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] kex follows: False
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] Compression: none
2025-12-25T12:11:36.573 [DEBUG] [Thread-11345] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:11:36.587 [DEBUG] [Thread-11345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:11:36.587 [DEBUG] [Thread-11345] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:11:36.587 [DEBUG] [Thread-11345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:11:36.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:11:36.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:11:36.588 [DEBUG] [Thread-11345] [transport.py] [_log()] userauth is OK
2025-12-25T12:11:36.588 [DEBUG] [Thread-11345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:11:36.588 [DEBUG] [Thread-11345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:11:36.588 [DEBUG] [Thread-11345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:11:36.588 [DEBUG] [Thread-11345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:11:36.616 [INFO] [Thread-11345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:11:36.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:11:37.404 [DEBUG] [Thread-11345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:11:37.404 [DEBUG] [Thread-11345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:11:37.404 [DEBUG] [Thread-11345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:11:37.445 [DEBUG] [Thread-11345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:11:37.446 [DEBUG] [Thread-11345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:11:37.448 [DEBUG] [Thread-11345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:11:37.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:11:37.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:11:37.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:11:37.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:11:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:11:37.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:11:37.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.424021 -999.00  +25.40  24.52     21   +1.60 1 2 1 1 1   888    0 31.81 240.82 ----- 24.5 24.5 314.2 28.3 31.5 -24.2 30.7 -23.1 30.4 -21.0 30.8 -21.1
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.424021
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:11:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:11:02', tmtdew=28.17, humidity=15.03, cloud=0.0, wind=18.21, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:10:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:11:37.467 [DEBUG] [Thread-11345] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:11:37.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-25T12:11:37.552 [DEBUG] [Thread-11348] [transport.py] [_log()] starting thread (client mode): 0xb9546650
2025-12-25T12:11:37.552 [DEBUG] [Thread-11348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:11:37.567 [DEBUG] [Thread-11348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:11:37.567 [INFO] [Thread-11348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:11:37.574 [DEBUG] [Thread-11348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] client lang: <none>
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] server lang: <none>
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] kex follows: False
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] Compression: none
2025-12-25T12:11:37.575 [DEBUG] [Thread-11348] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:11:37.637 [DEBUG] [Thread-11348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:11:37.638 [DEBUG] [Thread-11348] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:11:37.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:11:37.639 [DEBUG] [Thread-11348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:11:37.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:11:37.696 [DEBUG] [Thread-11348] [transport.py] [_log()] userauth is OK
2025-12-25T12:11:37.697 [DEBUG] [Thread-11348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:11:37.697 [DEBUG] [Thread-11348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:11:37.697 [DEBUG] [Thread-11348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:11:37.697 [DEBUG] [Thread-11348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:11:37.716 [INFO] [Thread-11348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:11:37.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-25T12:11:37.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:11:38.567 [DEBUG] [Thread-11348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:11:38.567 [DEBUG] [Thread-11348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:11:38.615 [DEBUG] [Thread-11348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:11:38.615 [DEBUG] [Thread-11348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:11:38.624 [DEBUG] [Thread-11348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:11:38.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:11:38.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:11:38.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-25T12:11:38.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:11:38.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:11:38.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:11:38.657 [DEBUG] [Thread-11348] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:11:47.323 [DEBUG] [Thread-11350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:00.937 [DEBUG] [Thread-11351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:02.376 [DEBUG] [Thread-11352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:08.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:12:08.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:12:08.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:12:09.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 11, 35), 28.82, 14.54, 0.0, 25.66, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:12:09.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:11:35
2025-12-25T12:12:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:12:09.713 [DEBUG] [Thread-11353] [transport.py] [_log()] starting thread (client mode): 0xb957a140
2025-12-25T12:12:09.713 [DEBUG] [Thread-11353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:12:09.734 [DEBUG] [Thread-11353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:12:09.734 [INFO] [Thread-11353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:12:09.737 [DEBUG] [Thread-11353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:12:09.737 [DEBUG] [Thread-11353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] client lang: <none>
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] server lang: <none>
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] kex follows: False
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:12:09.738 [DEBUG] [Thread-11353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:12:09.739 [DEBUG] [Thread-11353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:12:09.739 [DEBUG] [Thread-11353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:12:09.739 [DEBUG] [Thread-11353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:12:09.739 [DEBUG] [Thread-11353] [transport.py] [_log()] Compression: none
2025-12-25T12:12:09.739 [DEBUG] [Thread-11353] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:12:09.756 [DEBUG] [Thread-11353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:12:09.757 [DEBUG] [Thread-11353] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:12:09.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:12:09.758 [DEBUG] [Thread-11353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:12:09.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:12:09.760 [DEBUG] [Thread-11353] [transport.py] [_log()] userauth is OK
2025-12-25T12:12:09.760 [DEBUG] [Thread-11353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:12:09.760 [DEBUG] [Thread-11353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:12:09.760 [DEBUG] [Thread-11353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:12:09.760 [DEBUG] [Thread-11353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:12:09.785 [INFO] [Thread-11353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:12:09.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:12:10.412 [DEBUG] [Thread-11353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:12:10.412 [DEBUG] [Thread-11353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:12:10.412 [DEBUG] [Thread-11353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:12:10.453 [DEBUG] [Thread-11353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:12:10.453 [DEBUG] [Thread-11353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:12:10.457 [DEBUG] [Thread-11353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:12:10.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:12:10.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:12:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:12:10.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:12:10.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:12:10.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:12:10.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:12:10.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:12:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:12:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.424715 -999.00  +24.90  14.00     19   +0.00 1 1 1 1 1   888    0 32.20 258.76 ----- 14.0 14.0 350.2 38.3 31.4 -24.6 30.6 -24.4 30.4 -20.9 -999.0 -999.0
2025-12-25T12:12:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:12:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:12:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.424715
2025-12-25T12:12:10.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:12:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:12:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:12:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:12:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:12:10.484 [DEBUG] [Thread-11353] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:12:10.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:11:35', tmtdew=28.82, humidity=14.54, cloud=0.0, wind=25.66, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:11:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:12:10.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:12:10.577 [DEBUG] [Thread-11356] [transport.py] [_log()] starting thread (client mode): 0xb9579ba0
2025-12-25T12:12:10.578 [DEBUG] [Thread-11356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:12:10.593 [DEBUG] [Thread-11356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:12:10.594 [INFO] [Thread-11356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:12:10.601 [DEBUG] [Thread-11356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:12:10.602 [DEBUG] [Thread-11356] [transport.py] [_log()] client lang: <none>
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] server lang: <none>
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] kex follows: False
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:12:10.603 [DEBUG] [Thread-11356] [transport.py] [_log()] Compression: none
2025-12-25T12:12:10.604 [DEBUG] [Thread-11356] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:12:10.662 [DEBUG] [Thread-11356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:12:10.663 [DEBUG] [Thread-11356] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:12:10.664 [DEBUG] [Thread-11356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:12:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:12:10.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:12:10.721 [DEBUG] [Thread-11356] [transport.py] [_log()] userauth is OK
2025-12-25T12:12:10.722 [DEBUG] [Thread-11356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:12:10.722 [DEBUG] [Thread-11356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:12:10.722 [DEBUG] [Thread-11356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:12:10.722 [DEBUG] [Thread-11356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:12:10.741 [INFO] [Thread-11356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:12:10.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:12:10.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:12:11.628 [DEBUG] [Thread-11356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:12:11.628 [DEBUG] [Thread-11356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:12:11.676 [DEBUG] [Thread-11356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:12:11.676 [DEBUG] [Thread-11356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:12:11.686 [DEBUG] [Thread-11356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:12:11.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:12:11.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-25T12:12:11.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:12:11.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:12:11.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:12:11.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:12:11.724 [DEBUG] [Thread-11356] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:12:17.404 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:17.405 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:17.413 [DEBUG] [Thread-11358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:32.462 [DEBUG] [Thread-11359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:12:41.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:12:41.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:12:41.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-25T12:12:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 12, 39), 28.4, 14.98, 0.0, 13.76, 25.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:12:42.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:12:39
2025-12-25T12:12:42.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:12:42.722 [DEBUG] [Thread-11360] [transport.py] [_log()] starting thread (client mode): 0xb6be2ce0
2025-12-25T12:12:42.722 [DEBUG] [Thread-11360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:12:42.743 [DEBUG] [Thread-11360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:12:42.743 [INFO] [Thread-11360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:12:42.746 [DEBUG] [Thread-11360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:12:42.746 [DEBUG] [Thread-11360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] client lang: <none>
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] server lang: <none>
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] kex follows: False
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] Compression: none
2025-12-25T12:12:42.747 [DEBUG] [Thread-11360] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:12:42.764 [DEBUG] [Thread-11360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:12:42.765 [DEBUG] [Thread-11360] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:12:42.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:12:42.766 [DEBUG] [Thread-11360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:12:42.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:12:42.768 [DEBUG] [Thread-11360] [transport.py] [_log()] userauth is OK
2025-12-25T12:12:42.768 [DEBUG] [Thread-11360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:12:42.769 [DEBUG] [Thread-11360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:12:42.769 [DEBUG] [Thread-11360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:12:42.769 [DEBUG] [Thread-11360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:12:42.787 [INFO] [Thread-11360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:12:42.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:12:43.593 [DEBUG] [Thread-11360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:12:43.593 [DEBUG] [Thread-11360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:12:43.594 [DEBUG] [Thread-11360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:12:43.634 [DEBUG] [Thread-11360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:12:43.634 [DEBUG] [Thread-11360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:12:43.638 [DEBUG] [Thread-11360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:12:43.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:12:43.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:12:43.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:12:43.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:12:43.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:12:43.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:12:43.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:12:43.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:12:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:12:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.425062 -999.00  +24.50  11.97     19   -0.10 1 2 1 1 1   888    0 32.33 276.90 ----- 12.0 12.0 27.8 26.0 31.3 -24.0 30.6 -25.2 30.2 -20.4 30.7 -23.9
2025-12-25T12:12:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:12:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:12:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.425062
2025-12-25T12:12:43.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:12:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:12:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:12:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:12:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:12:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:12:39', tmtdew=28.4, humidity=14.98, cloud=0.0, wind=13.76, temperature=25.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:12:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:12:43.666 [DEBUG] [Thread-11360] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:12:43.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-25T12:12:43.759 [DEBUG] [Thread-11363] [transport.py] [_log()] starting thread (client mode): 0xb6be0220
2025-12-25T12:12:43.759 [DEBUG] [Thread-11363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:12:43.773 [DEBUG] [Thread-11363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:12:43.773 [INFO] [Thread-11363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:12:43.781 [DEBUG] [Thread-11363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:12:43.781 [DEBUG] [Thread-11363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:12:43.781 [DEBUG] [Thread-11363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:12:43.781 [DEBUG] [Thread-11363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:43.781 [DEBUG] [Thread-11363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] client lang: <none>
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] server lang: <none>
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] kex follows: False
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] Compression: none
2025-12-25T12:12:43.782 [DEBUG] [Thread-11363] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:12:43.841 [DEBUG] [Thread-11363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:12:43.841 [DEBUG] [Thread-11363] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:12:43.842 [DEBUG] [Thread-11363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:12:43.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:12:43.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:12:43.901 [DEBUG] [Thread-11363] [transport.py] [_log()] userauth is OK
2025-12-25T12:12:43.902 [DEBUG] [Thread-11363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:12:43.902 [DEBUG] [Thread-11363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:12:43.902 [DEBUG] [Thread-11363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:12:43.902 [DEBUG] [Thread-11363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:12:43.921 [INFO] [Thread-11363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:12:43.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-25T12:12:43.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:12:44.719 [DEBUG] [Thread-11363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:12:44.719 [DEBUG] [Thread-11363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:12:44.767 [DEBUG] [Thread-11363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:12:44.768 [DEBUG] [Thread-11363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:12:44.776 [DEBUG] [Thread-11363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:12:44.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:12:44.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:12:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:12:44.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:12:44.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:12:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:12:44.811 [DEBUG] [Thread-11363] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:12:47.499 [DEBUG] [Thread-11365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:00.981 [DEBUG] [Thread-11366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:02.543 [DEBUG] [Thread-11367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:14.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:13:14.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:13:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:13:15.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 13, 11), 27.71, 15.74, 0.0, 15.49, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:13:15.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:13:11
2025-12-25T12:13:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:13:15.822 [DEBUG] [Thread-11368] [transport.py] [_log()] starting thread (client mode): 0xb9546b60
2025-12-25T12:13:15.822 [DEBUG] [Thread-11368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:13:15.842 [DEBUG] [Thread-11368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:13:15.843 [INFO] [Thread-11368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:13:15.846 [DEBUG] [Thread-11368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:13:15.846 [DEBUG] [Thread-11368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:13:15.846 [DEBUG] [Thread-11368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:13:15.846 [DEBUG] [Thread-11368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:15.846 [DEBUG] [Thread-11368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:15.846 [DEBUG] [Thread-11368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] client lang: <none>
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] server lang: <none>
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] kex follows: False
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:13:15.847 [DEBUG] [Thread-11368] [transport.py] [_log()] Compression: none
2025-12-25T12:13:15.848 [DEBUG] [Thread-11368] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:13:15.866 [DEBUG] [Thread-11368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:13:15.867 [DEBUG] [Thread-11368] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:13:15.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:13:15.868 [DEBUG] [Thread-11368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:13:15.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:13:15.870 [DEBUG] [Thread-11368] [transport.py] [_log()] userauth is OK
2025-12-25T12:13:15.871 [DEBUG] [Thread-11368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:13:15.871 [DEBUG] [Thread-11368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:13:15.871 [DEBUG] [Thread-11368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:13:15.871 [DEBUG] [Thread-11368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:13:15.895 [INFO] [Thread-11368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:13:15.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:13:16.556 [DEBUG] [Thread-11368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:13:16.557 [DEBUG] [Thread-11368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:13:16.557 [DEBUG] [Thread-11368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:13:16.598 [DEBUG] [Thread-11368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:13:16.598 [DEBUG] [Thread-11368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:13:16.601 [DEBUG] [Thread-11368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:13:16.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:13:16.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:13:16.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:13:16.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:13:16.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:13:16.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:13:16.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:13:16.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:13:16.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:13:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.425409 -999.00  +24.40  11.33     20   +0.20 1 2 1 1 1   888    0 32.47 287.66 ----- 11.3 11.3 334.8 22.1 31.4 -22.7 30.6 -22.7 30.4 -18.8 30.8 -20.4
2025-12-25T12:13:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:13:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:13:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.425409
2025-12-25T12:13:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:13:16.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:13:16.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:13:16.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:13:16.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:13:16.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:13:11', tmtdew=27.71, humidity=15.74, cloud=0.0, wind=15.49, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:12:35.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:13:16.630 [DEBUG] [Thread-11368] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:13:16.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-25T12:13:16.725 [DEBUG] [Thread-11371] [transport.py] [_log()] starting thread (client mode): 0xb95473d0
2025-12-25T12:13:16.725 [DEBUG] [Thread-11371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:13:16.740 [DEBUG] [Thread-11371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:13:16.740 [INFO] [Thread-11371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] client lang: <none>
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] server lang: <none>
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] kex follows: False
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] Compression: none
2025-12-25T12:13:16.748 [DEBUG] [Thread-11371] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:13:16.806 [DEBUG] [Thread-11371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:13:16.806 [DEBUG] [Thread-11371] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:13:16.807 [DEBUG] [Thread-11371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:13:16.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:13:16.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:13:16.866 [DEBUG] [Thread-11371] [transport.py] [_log()] userauth is OK
2025-12-25T12:13:16.866 [DEBUG] [Thread-11371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:13:16.866 [DEBUG] [Thread-11371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:13:16.866 [DEBUG] [Thread-11371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:13:16.867 [DEBUG] [Thread-11371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:13:16.885 [INFO] [Thread-11371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:13:16.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-25T12:13:16.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:13:17.542 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:17.543 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:17.574 [DEBUG] [Thread-11373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:17.696 [DEBUG] [Thread-11371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:13:17.696 [DEBUG] [Thread-11371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:13:17.744 [DEBUG] [Thread-11371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:13:17.744 [DEBUG] [Thread-11371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:13:17.753 [DEBUG] [Thread-11371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:13:17.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:13: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-25T12:13:17.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-25T12:13:17.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:13:17.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:13:17.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:13:17.790 [DEBUG] [Thread-11371] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:13:32.635 [DEBUG] [Thread-11374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:47.664 [DEBUG] [Thread-11375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:13:47.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:13:47.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:13:47.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-25T12:13:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 13, 43), 27.03, 16.62, 0.0, 20.86, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:13:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:13:43
2025-12-25T12:13:48.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:13:48.815 [DEBUG] [Thread-11376] [transport.py] [_log()] starting thread (client mode): 0xb9545570
2025-12-25T12:13:48.815 [DEBUG] [Thread-11376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:13:48.836 [DEBUG] [Thread-11376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:13:48.836 [INFO] [Thread-11376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:48.839 [DEBUG] [Thread-11376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] client lang: <none>
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] server lang: <none>
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] kex follows: False
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] Compression: none
2025-12-25T12:13:48.840 [DEBUG] [Thread-11376] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:13:48.859 [DEBUG] [Thread-11376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:13:48.860 [DEBUG] [Thread-11376] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:13:48.860 [DEBUG] [Thread-11376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:13:48.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:13:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:13:48.862 [DEBUG] [Thread-11376] [transport.py] [_log()] userauth is OK
2025-12-25T12:13:48.862 [DEBUG] [Thread-11376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:13:48.863 [DEBUG] [Thread-11376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:13:48.863 [DEBUG] [Thread-11376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:13:48.863 [DEBUG] [Thread-11376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:13:48.886 [INFO] [Thread-11376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:13:48.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:13:49.688 [DEBUG] [Thread-11376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:13:49.689 [DEBUG] [Thread-11376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:13:49.689 [DEBUG] [Thread-11376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:13:49.730 [DEBUG] [Thread-11376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:13:49.730 [DEBUG] [Thread-11376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:13:49.734 [DEBUG] [Thread-11376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:13:49.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:13:49.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:13:49.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:13:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:13:49.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:13:49.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:13:49.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:13:49.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:13:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:13:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.425757 -999.00  +24.60  16.32     21   +0.90 1 2 1 1 1   888    0 32.82 287.98 ----- 16.3 16.3 6.8 20.5 31.6 -23.8 30.9 -21.6 30.5 -19.3 30.9 -19.4
2025-12-25T12:13:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:13:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:13:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.425757
2025-12-25T12:13:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:13:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:13:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:13:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:13:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:13:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:13:43', tmtdew=27.03, humidity=16.62, cloud=0.0, wind=20.86, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:13:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:13:49.759 [DEBUG] [Thread-11376] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:13:49.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-25T12:13:49.853 [DEBUG] [Thread-11379] [transport.py] [_log()] starting thread (client mode): 0xb9547550
2025-12-25T12:13:49.853 [DEBUG] [Thread-11379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:13:49.868 [DEBUG] [Thread-11379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:13:49.868 [INFO] [Thread-11379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:13:49.875 [DEBUG] [Thread-11379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] client lang: <none>
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] server lang: <none>
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] kex follows: False
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:13:49.876 [DEBUG] [Thread-11379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:13:49.877 [DEBUG] [Thread-11379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:13:49.877 [DEBUG] [Thread-11379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:13:49.877 [DEBUG] [Thread-11379] [transport.py] [_log()] Compression: none
2025-12-25T12:13:49.877 [DEBUG] [Thread-11379] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:13:49.934 [DEBUG] [Thread-11379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:13:49.935 [DEBUG] [Thread-11379] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:13:49.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:13:49.936 [DEBUG] [Thread-11379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:13:49.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:13:49.990 [DEBUG] [Thread-11379] [transport.py] [_log()] userauth is OK
2025-12-25T12:13:49.990 [DEBUG] [Thread-11379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:13:49.991 [DEBUG] [Thread-11379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:13:49.991 [DEBUG] [Thread-11379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:13:49.991 [DEBUG] [Thread-11379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:13:50.009 [INFO] [Thread-11379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:13:50.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-25T12:13:50.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:13:50.889 [DEBUG] [Thread-11379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:13:50.889 [DEBUG] [Thread-11379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:13:50.937 [DEBUG] [Thread-11379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:13:50.937 [DEBUG] [Thread-11379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:13:50.946 [DEBUG] [Thread-11379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:13:50.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:13:50.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:13:50.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-25T12:13:50.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:13:50.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:13:50.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:13:50.983 [DEBUG] [Thread-11379] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:14:01.042 [DEBUG] [Thread-11381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:02.700 [DEBUG] [Thread-11382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:17.683 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:17.684 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:17.754 [DEBUG] [Thread-11383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:21.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:14:21.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:14:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:14:21.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 14, 15), 25.91, 18.16, 0.0, 17.42, 25.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:14:21.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:14:15
2025-12-25T12:14:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:14:21.978 [DEBUG] [Thread-11384] [transport.py] [_log()] starting thread (client mode): 0xb6b15330
2025-12-25T12:14:21.978 [DEBUG] [Thread-11384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:14:21.998 [DEBUG] [Thread-11384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:14:21.998 [INFO] [Thread-11384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] client lang: <none>
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] server lang: <none>
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] kex follows: False
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] Compression: none
2025-12-25T12:14:22.001 [DEBUG] [Thread-11384] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:14:22.017 [DEBUG] [Thread-11384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:14:22.017 [DEBUG] [Thread-11384] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:14:22.018 [DEBUG] [Thread-11384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:14:22.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:14:22.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:14:22.019 [DEBUG] [Thread-11384] [transport.py] [_log()] userauth is OK
2025-12-25T12:14:22.019 [DEBUG] [Thread-11384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:14:22.019 [DEBUG] [Thread-11384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:14:22.019 [DEBUG] [Thread-11384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:14:22.019 [DEBUG] [Thread-11384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:14:22.029 [INFO] [Thread-11384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:14:22.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:14:22.656 [DEBUG] [Thread-11384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:14:22.656 [DEBUG] [Thread-11384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:14:22.656 [DEBUG] [Thread-11384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:14:22.697 [DEBUG] [Thread-11384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:14:22.697 [DEBUG] [Thread-11384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:14:22.700 [DEBUG] [Thread-11384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:14:22.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:14:22.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:14:22.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:14:22.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:14:22.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:14:22.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:14:22.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:14:22.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:14:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:14:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.426104 -999.00  +24.50  14.50     24   +2.80 1 2 1 1 1   888    0 31.48 246.33 ----- 14.5 14.5 10.5 16.4 31.6 -21.9 30.7 -22.9 30.5 -17.7 30.9 -20.6
2025-12-25T12:14:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:14:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:14:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.426104
2025-12-25T12:14:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:14:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:14:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:14:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:14:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:14:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:14:15', tmtdew=25.91, humidity=18.16, cloud=0.0, wind=17.42, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:13:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:14:22.722 [DEBUG] [Thread-11384] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:14:22.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-25T12:14:22.822 [DEBUG] [Thread-11387] [transport.py] [_log()] starting thread (client mode): 0xb95f3cd0
2025-12-25T12:14:22.822 [DEBUG] [Thread-11387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:14:22.837 [DEBUG] [Thread-11387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:14:22.837 [INFO] [Thread-11387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:14:22.844 [DEBUG] [Thread-11387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:14:22.845 [DEBUG] [Thread-11387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:14:22.845 [DEBUG] [Thread-11387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:14:22.845 [DEBUG] [Thread-11387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:22.845 [DEBUG] [Thread-11387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:22.845 [DEBUG] [Thread-11387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:22.845 [DEBUG] [Thread-11387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] client lang: <none>
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] server lang: <none>
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] kex follows: False
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:14:22.846 [DEBUG] [Thread-11387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:14:22.847 [DEBUG] [Thread-11387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:14:22.847 [DEBUG] [Thread-11387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:14:22.847 [DEBUG] [Thread-11387] [transport.py] [_log()] Compression: none
2025-12-25T12:14:22.847 [DEBUG] [Thread-11387] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:14:22.907 [DEBUG] [Thread-11387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:14:22.908 [DEBUG] [Thread-11387] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:14:22.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:14:22.910 [DEBUG] [Thread-11387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:14:22.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:14:22.967 [DEBUG] [Thread-11387] [transport.py] [_log()] userauth is OK
2025-12-25T12:14:22.967 [DEBUG] [Thread-11387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:14:22.967 [DEBUG] [Thread-11387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:14:22.967 [DEBUG] [Thread-11387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:14:22.968 [DEBUG] [Thread-11387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:14:22.986 [INFO] [Thread-11387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:14:22.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-25T12:14:22.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:14:23.866 [DEBUG] [Thread-11387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:14:23.867 [DEBUG] [Thread-11387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:14:23.915 [DEBUG] [Thread-11387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:14:23.915 [DEBUG] [Thread-11387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:14:23.924 [DEBUG] [Thread-11387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:14:23.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:14:23.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:14:23.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:14:23.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:14:23.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:14:23.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:14:23.961 [DEBUG] [Thread-11387] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:14:32.786 [DEBUG] [Thread-11389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:47.839 [DEBUG] [Thread-11390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:14:53.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:14:53.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:14:53.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-25T12:14:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 14, 47), 24.55, 20.18, 0.0, 15.74, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:14:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:14:47
2025-12-25T12:14:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:14:54.980 [DEBUG] [Thread-11391] [transport.py] [_log()] starting thread (client mode): 0xb95f1270
2025-12-25T12:14:54.980 [DEBUG] [Thread-11391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:14:55.000 [DEBUG] [Thread-11391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:14:55.000 [INFO] [Thread-11391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] client lang: <none>
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] server lang: <none>
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] kex follows: False
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] Compression: none
2025-12-25T12:14:55.004 [DEBUG] [Thread-11391] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:14:55.020 [DEBUG] [Thread-11391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:14:55.020 [DEBUG] [Thread-11391] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:14:55.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:14:55.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:14:55.020 [DEBUG] [Thread-11391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:14:55.021 [DEBUG] [Thread-11391] [transport.py] [_log()] userauth is OK
2025-12-25T12:14:55.021 [DEBUG] [Thread-11391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:14:55.021 [DEBUG] [Thread-11391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:14:55.021 [DEBUG] [Thread-11391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:14:55.021 [DEBUG] [Thread-11391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:14:55.051 [INFO] [Thread-11391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:14:55.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:14:55.835 [DEBUG] [Thread-11391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:14:55.835 [DEBUG] [Thread-11391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:14:55.835 [DEBUG] [Thread-11391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:14:55.876 [DEBUG] [Thread-11391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:14:55.877 [DEBUG] [Thread-11391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:14:55.879 [DEBUG] [Thread-11391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:14:55.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:14:55.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:14:55.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:14:55.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:14:55.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:14:55.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:14:55.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:14:55.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:14:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:14:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.426451 -999.00  +25.30  22.53     27   +5.00 1 2 1 1 1   888    0 30.91 225.44 ----- 22.5 22.5 34.2 31.9 31.7 -21.2 30.9 -22.2 30.7 -16.3 31.0 -18.3
2025-12-25T12:14:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:14:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.426451
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:14:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:14:47', tmtdew=24.55, humidity=20.18, cloud=0.0, wind=15.74, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:14:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:14:55.897 [DEBUG] [Thread-11391] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:14:55.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-25T12:14:55.981 [DEBUG] [Thread-11394] [transport.py] [_log()] starting thread (client mode): 0xb95f23e0
2025-12-25T12:14:55.981 [DEBUG] [Thread-11394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:14:55.996 [DEBUG] [Thread-11394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:14:55.996 [INFO] [Thread-11394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:14:56.003 [DEBUG] [Thread-11394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:14:56.003 [DEBUG] [Thread-11394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:14:56.003 [DEBUG] [Thread-11394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:14:56.003 [DEBUG] [Thread-11394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:56.003 [DEBUG] [Thread-11394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:14:56.003 [DEBUG] [Thread-11394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] client lang: <none>
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] server lang: <none>
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] kex follows: False
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] Compression: none
2025-12-25T12:14:56.004 [DEBUG] [Thread-11394] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:14:56.061 [DEBUG] [Thread-11394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:14:56.061 [DEBUG] [Thread-11394] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:14:56.062 [DEBUG] [Thread-11394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:14:56.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:14:56.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:14:56.118 [DEBUG] [Thread-11394] [transport.py] [_log()] userauth is OK
2025-12-25T12:14:56.118 [DEBUG] [Thread-11394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:14:56.118 [DEBUG] [Thread-11394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:14:56.118 [DEBUG] [Thread-11394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:14:56.118 [DEBUG] [Thread-11394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:14:56.132 [INFO] [Thread-11394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:14:56.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:14:56.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:14:56.947 [DEBUG] [Thread-11394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:14:56.947 [DEBUG] [Thread-11394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:14:56.995 [DEBUG] [Thread-11394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:14:56.995 [DEBUG] [Thread-11394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:14:57.003 [DEBUG] [Thread-11394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:14:57.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:14:57.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:14:57.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-25T12:14:57.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:14:57.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:14:57.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:14:57.034 [DEBUG] [Thread-11394] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:15:01.092 [DEBUG] [Thread-11396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:15:02.868 [DEBUG] [Thread-11397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:15:17.824 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:15:17.826 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:15:17.919 [DEBUG] [Thread-11398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:15:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:15:27.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:15:27.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:15:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 15, 19), 24.75, 19.92, 0.0, 20.06, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:15:27.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:15:19
2025-12-25T12:15:27.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:15:28.021 [DEBUG] [Thread-11399] [transport.py] [_log()] starting thread (client mode): 0xb95f0880
2025-12-25T12:15:28.021 [DEBUG] [Thread-11399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:15:28.041 [DEBUG] [Thread-11399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:15:28.041 [INFO] [Thread-11399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:15:28.044 [DEBUG] [Thread-11399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] client lang: <none>
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] server lang: <none>
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] kex follows: False
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] Compression: none
2025-12-25T12:15:28.045 [DEBUG] [Thread-11399] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:15:28.063 [DEBUG] [Thread-11399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:15:28.064 [DEBUG] [Thread-11399] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:15:28.064 [DEBUG] [Thread-11399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:15:28.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:15:28.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:15:28.066 [DEBUG] [Thread-11399] [transport.py] [_log()] userauth is OK
2025-12-25T12:15:28.067 [DEBUG] [Thread-11399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:15:28.067 [DEBUG] [Thread-11399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:15:28.067 [DEBUG] [Thread-11399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:15:28.067 [DEBUG] [Thread-11399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:15:28.102 [INFO] [Thread-11399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:15:28.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:15:28.768 [DEBUG] [Thread-11399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:15:28.768 [DEBUG] [Thread-11399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:15:28.769 [DEBUG] [Thread-11399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:15:28.809 [DEBUG] [Thread-11399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:15:28.810 [DEBUG] [Thread-11399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:15:28.813 [DEBUG] [Thread-11399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:15:28.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:15:28.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:15:28.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:15:28.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:15:28.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:15:28.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:15:28.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:15:28.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:15:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:15:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.426798 -999.00  +25.90  12.18     26   +5.40 1 2 1 1 1   888    0 30.53 208.84 ----- 12.2 12.2 21.0 35.0 31.8 -21.4 30.9 -20.2 -999.0 -999.0 31.1 -17.5
2025-12-25T12:15:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:15:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:15:28.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.426798
2025-12-25T12:15:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:15:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:15:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:15:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:15:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:15:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:15:19', tmtdew=24.75, humidity=19.92, cloud=0.0, wind=20.06, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:14:35.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:15:28.841 [DEBUG] [Thread-11399] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:15:28.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-25T12:15:28.937 [DEBUG] [Thread-11402] [transport.py] [_log()] starting thread (client mode): 0xb95f39a0
2025-12-25T12:15:28.937 [DEBUG] [Thread-11402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:15:28.952 [DEBUG] [Thread-11402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:15:28.952 [INFO] [Thread-11402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:15:28.959 [DEBUG] [Thread-11402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] client lang: <none>
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] server lang: <none>
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] kex follows: False
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] Compression: none
2025-12-25T12:15:28.960 [DEBUG] [Thread-11402] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:15:29.027 [DEBUG] [Thread-11402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:15:29.028 [DEBUG] [Thread-11402] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:15:29.029 [DEBUG] [Thread-11402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:15:29.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:15:29.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:15:29.088 [DEBUG] [Thread-11402] [transport.py] [_log()] userauth is OK
2025-12-25T12:15:29.088 [DEBUG] [Thread-11402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:15:29.088 [DEBUG] [Thread-11402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:15:29.088 [DEBUG] [Thread-11402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:15:29.088 [DEBUG] [Thread-11402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:15:29.107 [INFO] [Thread-11402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:15:29.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-25T12:15:29.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:15:29.925 [DEBUG] [Thread-11402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:15:29.925 [DEBUG] [Thread-11402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:15:29.973 [DEBUG] [Thread-11402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:15:29.973 [DEBUG] [Thread-11402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:15:29.983 [DEBUG] [Thread-11402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:15:29.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:15:29.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-25T12:15:30.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-25T12:15:30.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:15:30.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:15:30.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:15:30.019 [DEBUG] [Thread-11402] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:15:32.954 [DEBUG] [Thread-11404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:15:48.008 [DEBUG] [Thread-11405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:00.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:16:00.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:16:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:16:00.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 15, 51), 24.48, 20.38, 0.0, 18.46, 25.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:16:00.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:15:51
2025-12-25T12:16:00.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:16:01.012 [DEBUG] [Thread-11406] [transport.py] [_log()] starting thread (client mode): 0xb95f02e0
2025-12-25T12:16:01.012 [DEBUG] [Thread-11406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:16:01.031 [DEBUG] [Thread-11406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:16:01.031 [INFO] [Thread-11406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] client lang: <none>
2025-12-25T12:16:01.034 [DEBUG] [Thread-11406] [transport.py] [_log()] server lang: <none>
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] kex follows: False
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] Compression: none
2025-12-25T12:16:01.035 [DEBUG] [Thread-11406] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:16:01.052 [DEBUG] [Thread-11406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:16:01.052 [DEBUG] [Thread-11406] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:16:01.053 [DEBUG] [Thread-11406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:16:01.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:16:01.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:16:01.055 [DEBUG] [Thread-11406] [transport.py] [_log()] userauth is OK
2025-12-25T12:16:01.055 [DEBUG] [Thread-11406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:16:01.055 [DEBUG] [Thread-11406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:16:01.055 [DEBUG] [Thread-11406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:16:01.055 [DEBUG] [Thread-11406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:16:01.080 [INFO] [Thread-11406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:16:01.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:16:01.155 [DEBUG] [Thread-11408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:01.743 [DEBUG] [Thread-11406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:16:01.743 [DEBUG] [Thread-11406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:16:01.744 [DEBUG] [Thread-11406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:16:01.784 [DEBUG] [Thread-11406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:16:01.785 [DEBUG] [Thread-11406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:16:01.788 [DEBUG] [Thread-11406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:16:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:16:01.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:16:01.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:16:01.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:16:01.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:16:01.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:16:01.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:16:01.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:16:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:16:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.427145 -999.00  +25.60  14.29     25   +4.50 1 2 1 1 1   888    0 29.43 177.76 ----- 14.3 14.3 0.9 22.7 31.6 -21.1 30.9 -22.1 30.7 -17.5 31.2 -19.3
2025-12-25T12:16:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:16:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:16:01.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.427145
2025-12-25T12:16:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:16:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:16:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:16:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:16:01.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:16:01.815 [DEBUG] [Thread-11406] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:16:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:15:51', tmtdew=24.48, humidity=20.38, cloud=0.0, wind=18.46, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:15:05.328', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:16:01.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-25T12:16:01.912 [DEBUG] [Thread-11410] [transport.py] [_log()] starting thread (client mode): 0xb95f3d30
2025-12-25T12:16:01.912 [DEBUG] [Thread-11410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:16:01.926 [DEBUG] [Thread-11410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:16:01.926 [INFO] [Thread-11410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:16:01.935 [DEBUG] [Thread-11410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:16:01.935 [DEBUG] [Thread-11410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:16:01.935 [DEBUG] [Thread-11410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:16:01.935 [DEBUG] [Thread-11410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:01.935 [DEBUG] [Thread-11410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] client lang: <none>
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] server lang: <none>
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] kex follows: False
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] Compression: none
2025-12-25T12:16:01.936 [DEBUG] [Thread-11410] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:16:01.995 [DEBUG] [Thread-11410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:16:01.996 [DEBUG] [Thread-11410] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:16:01.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:16:01.997 [DEBUG] [Thread-11410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:16:01.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:16:02.051 [DEBUG] [Thread-11410] [transport.py] [_log()] userauth is OK
2025-12-25T12:16:02.052 [DEBUG] [Thread-11410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:16:02.052 [DEBUG] [Thread-11410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:16:02.052 [DEBUG] [Thread-11410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:16:02.052 [DEBUG] [Thread-11410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:16:02.070 [INFO] [Thread-11410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:16:02.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-25T12:16:02.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:16:02.919 [DEBUG] [Thread-11410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:16:02.919 [DEBUG] [Thread-11410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:16:02.967 [DEBUG] [Thread-11410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:16:02.967 [DEBUG] [Thread-11410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:16:02.976 [DEBUG] [Thread-11410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:16:02.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:16:02.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-25T12:16: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-25T12:16:03.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:16:03.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:16:03.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:16:03.013 [DEBUG] [Thread-11410] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:16:03.042 [DEBUG] [Thread-11412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:17.968 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:17.968 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:18.091 [DEBUG] [Thread-11413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:33.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:16:33.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:16:33.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-25T12:16:33.122 [DEBUG] [Thread-11414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:16:33.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 16, 23), 24.49, 20.37, 0.0, 17.95, 25.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:16:33.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:16:23
2025-12-25T12:16:33.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:16:33.990 [DEBUG] [Thread-11415] [transport.py] [_log()] starting thread (client mode): 0xb95f3fa0
2025-12-25T12:16:33.991 [DEBUG] [Thread-11415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:16:34.010 [DEBUG] [Thread-11415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:16:34.010 [INFO] [Thread-11415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:16:34.013 [DEBUG] [Thread-11415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:16:34.013 [DEBUG] [Thread-11415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:16:34.013 [DEBUG] [Thread-11415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:16:34.013 [DEBUG] [Thread-11415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] client lang: <none>
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] server lang: <none>
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] kex follows: False
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] Compression: none
2025-12-25T12:16:34.014 [DEBUG] [Thread-11415] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:16:34.030 [DEBUG] [Thread-11415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:16:34.031 [DEBUG] [Thread-11415] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:16:34.031 [DEBUG] [Thread-11415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:16:34.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:16:34.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:16:34.033 [DEBUG] [Thread-11415] [transport.py] [_log()] userauth is OK
2025-12-25T12:16:34.033 [DEBUG] [Thread-11415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:16:34.033 [DEBUG] [Thread-11415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:16:34.033 [DEBUG] [Thread-11415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:16:34.033 [DEBUG] [Thread-11415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:16:34.054 [INFO] [Thread-11415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:16:34.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:16:34.668 [DEBUG] [Thread-11415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:16:34.669 [DEBUG] [Thread-11415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:16:34.669 [DEBUG] [Thread-11415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:16:34.710 [DEBUG] [Thread-11415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:16:34.710 [DEBUG] [Thread-11415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:16:34.713 [DEBUG] [Thread-11415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:16:34.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:16:34.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:16:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:16:34.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:16:34.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:16:34.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:16:34.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:16:34.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:16:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:16:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.427840 -999.00  +25.20  26.31     24   +3.70 1 2 1 1 1   888    0 28.05 131.95 ----- 26.3 26.3 305.8 29.0 31.2 -19.9 30.6 -19.9 30.4 -15.8 30.6 -21.6
2025-12-25T12:16:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:16:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:16:34.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.427840
2025-12-25T12:16:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:16:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:16:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:16:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:16:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:16:34.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:16:23', tmtdew=24.49, humidity=20.37, cloud=0.0, wind=17.95, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:16:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:16:34.741 [DEBUG] [Thread-11415] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:16:34.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-25T12:16:34.834 [DEBUG] [Thread-11418] [transport.py] [_log()] starting thread (client mode): 0xb95f3220
2025-12-25T12:16:34.834 [DEBUG] [Thread-11418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:16:34.848 [DEBUG] [Thread-11418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:16:34.849 [INFO] [Thread-11418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:16:34.856 [DEBUG] [Thread-11418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:16:34.856 [DEBUG] [Thread-11418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:16:34.856 [DEBUG] [Thread-11418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:16:34.856 [DEBUG] [Thread-11418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] client lang: <none>
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] server lang: <none>
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] kex follows: False
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:16:34.857 [DEBUG] [Thread-11418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:16:34.858 [DEBUG] [Thread-11418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:16:34.858 [DEBUG] [Thread-11418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:16:34.858 [DEBUG] [Thread-11418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:16:34.858 [DEBUG] [Thread-11418] [transport.py] [_log()] Compression: none
2025-12-25T12:16:34.858 [DEBUG] [Thread-11418] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:16:34.916 [DEBUG] [Thread-11418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:16:34.916 [DEBUG] [Thread-11418] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:16:34.917 [DEBUG] [Thread-11418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:16:34.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:16:34.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:16:34.972 [DEBUG] [Thread-11418] [transport.py] [_log()] userauth is OK
2025-12-25T12:16:34.972 [DEBUG] [Thread-11418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:16:34.972 [DEBUG] [Thread-11418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:16:34.972 [DEBUG] [Thread-11418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:16:34.972 [DEBUG] [Thread-11418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:16:34.996 [INFO] [Thread-11418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:16:34.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-25T12:16:34.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:16:35.824 [DEBUG] [Thread-11418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:16:35.824 [DEBUG] [Thread-11418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:16:35.874 [DEBUG] [Thread-11418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:16:35.875 [DEBUG] [Thread-11418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:16:35.886 [DEBUG] [Thread-11418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:16:35.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:16: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-25T12:16:35.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:16:35.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:16:35.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:16:35.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:16:35.935 [DEBUG] [Thread-11418] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:16:48.155 [DEBUG] [Thread-11420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:01.187 [DEBUG] [Thread-11421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:03.215 [DEBUG] [Thread-11422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:05.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:17:05.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:17:05.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-25T12:17:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 16, 55), 23.15, 22.31, 0.0, 31.0, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:17:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:16:55
2025-12-25T12:17:06.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:17:06.927 [DEBUG] [Thread-11423] [transport.py] [_log()] starting thread (client mode): 0xb95f3250
2025-12-25T12:17:06.927 [DEBUG] [Thread-11423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:17:06.948 [DEBUG] [Thread-11423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:17:06.948 [INFO] [Thread-11423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] client lang: <none>
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] server lang: <none>
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] kex follows: False
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:17:06.951 [DEBUG] [Thread-11423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:17:06.952 [DEBUG] [Thread-11423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:17:06.952 [DEBUG] [Thread-11423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:17:06.952 [DEBUG] [Thread-11423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:17:06.952 [DEBUG] [Thread-11423] [transport.py] [_log()] Compression: none
2025-12-25T12:17:06.952 [DEBUG] [Thread-11423] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:17:06.968 [DEBUG] [Thread-11423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:17:06.968 [DEBUG] [Thread-11423] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:17:06.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:17:06.969 [DEBUG] [Thread-11423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:17:06.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:17:06.971 [DEBUG] [Thread-11423] [transport.py] [_log()] userauth is OK
2025-12-25T12:17:06.971 [DEBUG] [Thread-11423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:17:06.971 [DEBUG] [Thread-11423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:17:06.971 [DEBUG] [Thread-11423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:17:06.971 [DEBUG] [Thread-11423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:17:07.006 [INFO] [Thread-11423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:17:07.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:17:07.637 [DEBUG] [Thread-11423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:17:07.637 [DEBUG] [Thread-11423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:17:07.637 [DEBUG] [Thread-11423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:17:07.678 [DEBUG] [Thread-11423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:17:07.678 [DEBUG] [Thread-11423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:17:07.681 [DEBUG] [Thread-11423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:17:07.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:17:07.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:17:07.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:17:07.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:17:07.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:17:07.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:17:07.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:17:07.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:17:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:17:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.428187 -999.00  +25.90  32.82     27   +5.80 1 2 2 1 1   888    0 27.80 109.87 ----- 32.8 32.8 316.6 36.1 31.7 -19.1 31.0 -16.9 30.7 -13.7 31.0 -14.4
2025-12-25T12:17:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:17:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:17:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.428187
2025-12-25T12:17:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:17:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:17:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:17:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:17:07.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:17:07.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:16:55', tmtdew=23.15, humidity=22.31, cloud=0.0, wind=31.0, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:16:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:17:07.705 [DEBUG] [Thread-11423] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:17:07.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-25T12:17:18.107 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:18.108 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:18.250 [DEBUG] [Thread-11426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:33.295 [DEBUG] [Thread-11427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:17:48.330 [DEBUG] [Thread-11428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:01.217 [DEBUG] [Thread-11429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:03.367 [DEBUG] [Thread-11430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:18.251 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:18.252 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:18.403 [DEBUG] [Thread-11431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:33.442 [DEBUG] [Thread-11432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:18:48.475 [DEBUG] [Thread-11433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:01.267 [DEBUG] [Thread-11434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:03.505 [DEBUG] [Thread-11435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:18.391 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:18.392 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:18.543 [DEBUG] [Thread-11436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:19.893 [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-25T12:19:33.576 [DEBUG] [Thread-11437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:48.608 [DEBUG] [Thread-11438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:19:49.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:19:49.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:19:49.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:19:50.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 19, 36), 20.91, 25.78, 0.0, 15.97, 24.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:19:50.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:19:36
2025-12-25T12:19:50.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:19:50.895 [DEBUG] [Thread-11439] [transport.py] [_log()] starting thread (client mode): 0xb95f0340
2025-12-25T12:19:50.895 [DEBUG] [Thread-11439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:19:50.915 [DEBUG] [Thread-11439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:19:50.916 [INFO] [Thread-11439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:19:50.918 [DEBUG] [Thread-11439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] client lang: <none>
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] server lang: <none>
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] kex follows: False
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:19:50.919 [DEBUG] [Thread-11439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:19:50.920 [DEBUG] [Thread-11439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:19:50.920 [DEBUG] [Thread-11439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:19:50.920 [DEBUG] [Thread-11439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:19:50.920 [DEBUG] [Thread-11439] [transport.py] [_log()] Compression: none
2025-12-25T12:19:50.920 [DEBUG] [Thread-11439] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:19:50.938 [DEBUG] [Thread-11439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:19:50.939 [DEBUG] [Thread-11439] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:19:50.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:19:50.941 [DEBUG] [Thread-11439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:19:50.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:19:50.981 [DEBUG] [Thread-11439] [transport.py] [_log()] userauth is OK
2025-12-25T12:19:50.981 [DEBUG] [Thread-11439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:19:50.982 [DEBUG] [Thread-11439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:19:50.982 [DEBUG] [Thread-11439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:19:50.982 [DEBUG] [Thread-11439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:19:51.013 [INFO] [Thread-11439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:19:51.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:19:51.647 [DEBUG] [Thread-11439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:19:51.647 [DEBUG] [Thread-11439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:19:51.648 [DEBUG] [Thread-11439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:19:51.688 [DEBUG] [Thread-11439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:19:51.688 [DEBUG] [Thread-11439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:19:51.692 [DEBUG] [Thread-11439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:19:51.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:19:51.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:19:51.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:19:51.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:19:51.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:19:51.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:19:51.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:19:51.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:19:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:19:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.429923 -999.00  +24.80  26.40     30   +6.30 1 2 1 1 1   888    0 21.52 -72.38 ----- 26.4 26.4 305.2 31.4 30.1 -20.3 29.8 -19.0 29.5 -15.8 29.9 -18.1
2025-12-25T12:19:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:19:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:19:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.429923
2025-12-25T12:19:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:19:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:19:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:19:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:19:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:19:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:19:36', tmtdew=20.91, humidity=25.78, cloud=0.0, wind=15.97, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:19:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:19:51.720 [DEBUG] [Thread-11439] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:19:51.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-25T12:19:51.813 [DEBUG] [Thread-11442] [transport.py] [_log()] starting thread (client mode): 0xb9547400
2025-12-25T12:19:51.813 [DEBUG] [Thread-11442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:19:51.828 [DEBUG] [Thread-11442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:19:51.828 [INFO] [Thread-11442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] client lang: <none>
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] server lang: <none>
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] kex follows: False
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:19:51.836 [DEBUG] [Thread-11442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:19:51.837 [DEBUG] [Thread-11442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:19:51.837 [DEBUG] [Thread-11442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:19:51.837 [DEBUG] [Thread-11442] [transport.py] [_log()] Compression: none
2025-12-25T12:19:51.837 [DEBUG] [Thread-11442] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:19:51.893 [DEBUG] [Thread-11442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:19:51.894 [DEBUG] [Thread-11442] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:19:51.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:19:51.895 [DEBUG] [Thread-11442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:19:51.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:19:51.954 [DEBUG] [Thread-11442] [transport.py] [_log()] userauth is OK
2025-12-25T12:19:51.954 [DEBUG] [Thread-11442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:19:51.954 [DEBUG] [Thread-11442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:19:51.954 [DEBUG] [Thread-11442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:19:51.954 [DEBUG] [Thread-11442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:19:51.973 [INFO] [Thread-11442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:19:51.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-25T12:19:51.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:19:52.779 [DEBUG] [Thread-11442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:19:52.779 [DEBUG] [Thread-11442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:19:52.827 [DEBUG] [Thread-11442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:19:52.827 [DEBUG] [Thread-11442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:19:52.836 [DEBUG] [Thread-11442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:19:52.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:19:52.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-25T12:19:52.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-25T12:19:52.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:19:52.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:19:52.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:19:52.873 [DEBUG] [Thread-11442] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:20:01.300 [DEBUG] [Thread-11444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:03.641 [DEBUG] [Thread-11445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:18.532 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:18.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:18.697 [DEBUG] [Thread-11446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:20:22.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:20:22.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-25T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 20, 8), 21.11, 25.57, 0.0, 19.62, 24.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:20:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:20:08
2025-12-25T12:20:23.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:20:23.860 [DEBUG] [Thread-11447] [transport.py] [_log()] starting thread (client mode): 0xb9546f80
2025-12-25T12:20:23.860 [DEBUG] [Thread-11447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:20:23.882 [DEBUG] [Thread-11447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:20:23.882 [INFO] [Thread-11447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] client lang: <none>
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] server lang: <none>
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] kex follows: False
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] Compression: none
2025-12-25T12:20:23.885 [DEBUG] [Thread-11447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:20:23.903 [DEBUG] [Thread-11447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:20:23.903 [DEBUG] [Thread-11447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:20:23.904 [DEBUG] [Thread-11447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:20:23.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:20:23.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:20:23.906 [DEBUG] [Thread-11447] [transport.py] [_log()] userauth is OK
2025-12-25T12:20:23.906 [DEBUG] [Thread-11447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:20:23.906 [DEBUG] [Thread-11447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:20:23.906 [DEBUG] [Thread-11447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:20:23.906 [DEBUG] [Thread-11447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:20:23.930 [INFO] [Thread-11447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:20:23.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:20:24.582 [DEBUG] [Thread-11447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:20:24.582 [DEBUG] [Thread-11447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:20:24.582 [DEBUG] [Thread-11447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:20:24.623 [DEBUG] [Thread-11447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:20:24.623 [DEBUG] [Thread-11447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:20:24.627 [DEBUG] [Thread-11447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:20:24.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:20:24.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:20:24.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:20:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:20:24.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:20:24.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:20:24.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:20:24.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:20:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:20:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.430618 -999.00  +25.30  27.81     30   +6.60 1 2 1 1 1   888    0 19.06 -150.34 ----- 27.8 27.8 330.9 36.0 30.0 -20.7 29.8 -17.4 29.4 -16.0 29.9 -17.6
2025-12-25T12:20:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:20:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:20:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.430618
2025-12-25T12:20:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:20:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:20:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:20:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:20:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:20:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:20:08', tmtdew=21.11, humidity=25.57, cloud=0.0, wind=19.62, temperature=24.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:20:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:20:24.657 [DEBUG] [Thread-11447] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:20: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-25T12:20:24.750 [DEBUG] [Thread-11450] [transport.py] [_log()] starting thread (client mode): 0xb95f29e0
2025-12-25T12:20:24.750 [DEBUG] [Thread-11450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:20:24.765 [DEBUG] [Thread-11450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:20:24.765 [INFO] [Thread-11450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] client lang: <none>
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] server lang: <none>
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] kex follows: False
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:20:24.773 [DEBUG] [Thread-11450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:20:24.774 [DEBUG] [Thread-11450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:20:24.774 [DEBUG] [Thread-11450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:20:24.774 [DEBUG] [Thread-11450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:20:24.774 [DEBUG] [Thread-11450] [transport.py] [_log()] Compression: none
2025-12-25T12:20:24.774 [DEBUG] [Thread-11450] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:20:24.834 [DEBUG] [Thread-11450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:20:24.835 [DEBUG] [Thread-11450] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:20:24.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:20:24.837 [DEBUG] [Thread-11450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:20:24.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:20:24.894 [DEBUG] [Thread-11450] [transport.py] [_log()] userauth is OK
2025-12-25T12:20:24.894 [DEBUG] [Thread-11450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:20:24.895 [DEBUG] [Thread-11450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:20:24.895 [DEBUG] [Thread-11450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:20:24.895 [DEBUG] [Thread-11450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:20:24.914 [INFO] [Thread-11450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:20:24.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-25T12:20:24.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:20:25.772 [DEBUG] [Thread-11450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:20:25.772 [DEBUG] [Thread-11450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:20:25.819 [DEBUG] [Thread-11450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:20:25.819 [DEBUG] [Thread-11450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:20:25.828 [DEBUG] [Thread-11450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:20:25.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:20:25.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-25T12:20:25.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-25T12:20:25.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:20:25.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:20:25.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:20:25.862 [DEBUG] [Thread-11450] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:20:33.733 [DEBUG] [Thread-11452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:48.784 [DEBUG] [Thread-11453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:20:55.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:20:55.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:20:55.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-25T12:20:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 20, 40), 21.59, 24.59, 0.0, 23.26, 25.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:20:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:20:40
2025-12-25T12:20:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:20:56.883 [DEBUG] [Thread-11454] [transport.py] [_log()] starting thread (client mode): 0xb6b283a0
2025-12-25T12:20:56.883 [DEBUG] [Thread-11454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:20:56.903 [DEBUG] [Thread-11454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:20:56.903 [INFO] [Thread-11454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] client lang: <none>
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] server lang: <none>
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] kex follows: False
2025-12-25T12:20:56.906 [DEBUG] [Thread-11454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:20:56.907 [DEBUG] [Thread-11454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:20:56.907 [DEBUG] [Thread-11454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:20:56.907 [DEBUG] [Thread-11454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:20:56.907 [DEBUG] [Thread-11454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:20:56.907 [DEBUG] [Thread-11454] [transport.py] [_log()] Compression: none
2025-12-25T12:20:56.907 [DEBUG] [Thread-11454] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:20:56.922 [DEBUG] [Thread-11454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:20:56.923 [DEBUG] [Thread-11454] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:20:56.923 [DEBUG] [Thread-11454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:20:56.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:20:56.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:20:56.965 [DEBUG] [Thread-11454] [transport.py] [_log()] userauth is OK
2025-12-25T12:20:56.965 [DEBUG] [Thread-11454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:20:56.965 [DEBUG] [Thread-11454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:20:56.965 [DEBUG] [Thread-11454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:20:56.965 [DEBUG] [Thread-11454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:20:56.997 [INFO] [Thread-11454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:20:56.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:20:57.596 [DEBUG] [Thread-11454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:20:57.597 [DEBUG] [Thread-11454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:20:57.597 [DEBUG] [Thread-11454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:20:57.638 [DEBUG] [Thread-11454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:20:57.638 [DEBUG] [Thread-11454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:20:57.642 [DEBUG] [Thread-11454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:20:57.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:20:57.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:20:57.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:20:57.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:20:57.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:20:57.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:20:57.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:20:57.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:20:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:20:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.430965 -999.00  +24.90  21.61     30   +6.20 1 2 1 1 1   888    0 18.28 -178.61 ----- 21.6 21.6 316.0 33.2 29.7 -20.8 29.5 -17.8 29.2 -18.0 29.7 -18.6
2025-12-25T12:20:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:20:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:20:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.430965
2025-12-25T12:20:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:20:57.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:20:57.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:20:57.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:20:57.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:20:57.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:20:40', tmtdew=21.59, humidity=24.59, cloud=0.0, wind=23.26, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:20:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:20:57.670 [DEBUG] [Thread-11454] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:20:57.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-25T12:20:57.765 [DEBUG] [Thread-11457] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae30
2025-12-25T12:20:57.766 [DEBUG] [Thread-11457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:20:57.780 [DEBUG] [Thread-11457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:20:57.781 [INFO] [Thread-11457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:20:57.788 [DEBUG] [Thread-11457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:20:57.788 [DEBUG] [Thread-11457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:20:57.789 [DEBUG] [Thread-11457] [transport.py] [_log()] client lang: <none>
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] server lang: <none>
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] kex follows: False
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] Compression: none
2025-12-25T12:20:57.790 [DEBUG] [Thread-11457] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:20:57.850 [DEBUG] [Thread-11457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:20:57.851 [DEBUG] [Thread-11457] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:20:57.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:20:57.852 [DEBUG] [Thread-11457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:20:57.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:20:57.913 [DEBUG] [Thread-11457] [transport.py] [_log()] userauth is OK
2025-12-25T12:20:57.913 [DEBUG] [Thread-11457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:20:57.913 [DEBUG] [Thread-11457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:20:57.913 [DEBUG] [Thread-11457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:20:57.913 [DEBUG] [Thread-11457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:20:57.932 [INFO] [Thread-11457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:20:57.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-25T12:20:57.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:20:58.746 [DEBUG] [Thread-11457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:20:58.746 [DEBUG] [Thread-11457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:20:58.794 [DEBUG] [Thread-11457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:20:58.794 [DEBUG] [Thread-11457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:20:58.803 [DEBUG] [Thread-11457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:20:58.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:20:58.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-25T12:20:58.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-25T12:20:58.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:20:58.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:20:58.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:20:58.840 [DEBUG] [Thread-11457] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:21:01.342 [DEBUG] [Thread-11459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:21:03.814 [DEBUG] [Thread-11460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:21:18.672 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:21:18.673 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:21:18.871 [DEBUG] [Thread-11461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:21:28.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:21:28.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:21:28.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:21:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 21, 12), 22.34, 23.56, 0.0, 24.9, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:21:29.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:21:12
2025-12-25T12:21:29.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:21:29.906 [DEBUG] [Thread-11462] [transport.py] [_log()] starting thread (client mode): 0xb9544c40
2025-12-25T12:21:29.906 [DEBUG] [Thread-11462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:21:29.927 [DEBUG] [Thread-11462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:21:29.927 [INFO] [Thread-11462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] client lang: <none>
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] server lang: <none>
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] kex follows: False
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:21:29.930 [DEBUG] [Thread-11462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:21:29.931 [DEBUG] [Thread-11462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:21:29.931 [DEBUG] [Thread-11462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:21:29.931 [DEBUG] [Thread-11462] [transport.py] [_log()] Compression: none
2025-12-25T12:21:29.931 [DEBUG] [Thread-11462] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:21:29.944 [DEBUG] [Thread-11462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:21:29.944 [DEBUG] [Thread-11462] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:21:29.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:21:29.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:21:29.945 [DEBUG] [Thread-11462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:21:29.945 [DEBUG] [Thread-11462] [transport.py] [_log()] userauth is OK
2025-12-25T12:21:29.945 [DEBUG] [Thread-11462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:21:29.945 [DEBUG] [Thread-11462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:21:29.946 [DEBUG] [Thread-11462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:21:29.946 [DEBUG] [Thread-11462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:21:29.964 [INFO] [Thread-11462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:21:29.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:21:30.598 [DEBUG] [Thread-11462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:21:30.598 [DEBUG] [Thread-11462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:21:30.598 [DEBUG] [Thread-11462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:21:30.639 [DEBUG] [Thread-11462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:21:30.639 [DEBUG] [Thread-11462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:21:30.641 [DEBUG] [Thread-11462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:21:30.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:21:30.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:21:30.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:21:30.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:21:30.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:21:30.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:21:30.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.431312 -999.00  +24.70  29.61     31   +6.40 1 2 1 1 1   888    0 16.41 -206.30 ----- 29.6 29.6 310.6 35.8 29.7 -20.8 29.5 -17.2 29.1 -19.0 29.5 -16.3
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.431312
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:21:30.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:21:12', tmtdew=22.34, humidity=23.56, cloud=0.0, wind=24.9, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:21:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:21:30.661 [DEBUG] [Thread-11462] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:21:30.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-25T12:21:30.746 [DEBUG] [Thread-11465] [transport.py] [_log()] starting thread (client mode): 0xb9544dc0
2025-12-25T12:21:30.746 [DEBUG] [Thread-11465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:21:30.760 [DEBUG] [Thread-11465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:21:30.760 [INFO] [Thread-11465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:21:30.767 [DEBUG] [Thread-11465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] client lang: <none>
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] server lang: <none>
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] kex follows: False
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] Compression: none
2025-12-25T12:21:30.768 [DEBUG] [Thread-11465] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:21:30.828 [DEBUG] [Thread-11465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:21:30.829 [DEBUG] [Thread-11465] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:21:30.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:21:30.830 [DEBUG] [Thread-11465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:21:30.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:21:30.884 [DEBUG] [Thread-11465] [transport.py] [_log()] userauth is OK
2025-12-25T12:21:30.885 [DEBUG] [Thread-11465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:21:30.885 [DEBUG] [Thread-11465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:21:30.885 [DEBUG] [Thread-11465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:21:30.885 [DEBUG] [Thread-11465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:21:30.903 [INFO] [Thread-11465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:21:30.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-25T12:21:30.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:21:31.717 [DEBUG] [Thread-11465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:21:31.717 [DEBUG] [Thread-11465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:21:31.765 [DEBUG] [Thread-11465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:21:31.765 [DEBUG] [Thread-11465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:21:31.774 [DEBUG] [Thread-11465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:21:31.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:21:31.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-25T12:21:31.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-25T12:21:31.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:21:31.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:21:31.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:21:31.811 [DEBUG] [Thread-11465] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:21:33.901 [DEBUG] [Thread-11467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:21:48.951 [DEBUG] [Thread-11468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:01.375 [DEBUG] [Thread-11469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:01.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:22:01.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:22:01.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-25T12:22:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 21, 44), 22.16, 23.78, 0.0, 23.01, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:22:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:21:44
2025-12-25T12:22:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:22:02.819 [DEBUG] [Thread-11470] [transport.py] [_log()] starting thread (client mode): 0xb95f0f70
2025-12-25T12:22:02.819 [DEBUG] [Thread-11470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:22:02.839 [DEBUG] [Thread-11470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:22:02.839 [INFO] [Thread-11470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] client lang: <none>
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] server lang: <none>
2025-12-25T12:22:02.840 [DEBUG] [Thread-11470] [transport.py] [_log()] kex follows: False
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] Compression: none
2025-12-25T12:22:02.841 [DEBUG] [Thread-11470] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:22:02.858 [DEBUG] [Thread-11470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:22:02.859 [DEBUG] [Thread-11470] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:22:02.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:22:02.860 [DEBUG] [Thread-11470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:22:02.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:22:02.861 [DEBUG] [Thread-11470] [transport.py] [_log()] userauth is OK
2025-12-25T12:22:02.861 [DEBUG] [Thread-11470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:22:02.862 [DEBUG] [Thread-11470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:22:02.862 [DEBUG] [Thread-11470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:22:02.862 [DEBUG] [Thread-11470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:22:02.877 [INFO] [Thread-11470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:22:02.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:22:03.513 [DEBUG] [Thread-11470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:22:03.513 [DEBUG] [Thread-11470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:22:03.513 [DEBUG] [Thread-11470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:22:03.554 [DEBUG] [Thread-11470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:22:03.554 [DEBUG] [Thread-11470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:22:03.558 [DEBUG] [Thread-11470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:22:03.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:22:03.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:22:03.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:22:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:22:03.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:22:03.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:22:03.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:22:03.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:22:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:22:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.431659 -999.00  +24.50  29.88     30   +6.10 1 2 1 1 1   888    0 15.02 -264.55 ----- 29.9 29.9 318.0 37.9 29.7 -20.2 29.6 -11.7 29.7 -10.0 29.4 -17.8
2025-12-25T12:22:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:22:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:22:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.431659
2025-12-25T12:22:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:22:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:22:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:22:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:22:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:22:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:21:44', tmtdew=22.16, humidity=23.78, cloud=0.0, wind=23.01, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:21:35.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:22:03.584 [DEBUG] [Thread-11470] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:22:03.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-25T12:22:03.676 [DEBUG] [Thread-11473] [transport.py] [_log()] starting thread (client mode): 0xb95f27d0
2025-12-25T12:22:03.677 [DEBUG] [Thread-11473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:22:03.691 [DEBUG] [Thread-11473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:22:03.691 [INFO] [Thread-11473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:22:03.699 [DEBUG] [Thread-11473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:22:03.699 [DEBUG] [Thread-11473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] client lang: <none>
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] server lang: <none>
2025-12-25T12:22:03.700 [DEBUG] [Thread-11473] [transport.py] [_log()] kex follows: False
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] Compression: none
2025-12-25T12:22:03.701 [DEBUG] [Thread-11473] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:22:03.754 [DEBUG] [Thread-11473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:22:03.755 [DEBUG] [Thread-11473] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:22:03.755 [DEBUG] [Thread-11473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:22:03.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:22:03.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:22:03.812 [DEBUG] [Thread-11473] [transport.py] [_log()] userauth is OK
2025-12-25T12:22:03.812 [DEBUG] [Thread-11473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:22:03.812 [DEBUG] [Thread-11473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:22:03.812 [DEBUG] [Thread-11473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:22:03.812 [DEBUG] [Thread-11473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:22:03.827 [INFO] [Thread-11473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:22:03.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-25T12:22:03.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:22:03.985 [DEBUG] [Thread-11475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:04.690 [DEBUG] [Thread-11473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:22:04.690 [DEBUG] [Thread-11473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:22:04.737 [DEBUG] [Thread-11473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:22:04.737 [DEBUG] [Thread-11473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:22:04.745 [DEBUG] [Thread-11473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:22:04.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:22:04.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:22:04.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-25T12:22:04.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:22:04.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:22:04.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:22:04.777 [DEBUG] [Thread-11473] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:22:18.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:18.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:19.021 [DEBUG] [Thread-11476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:34.055 [DEBUG] [Thread-11477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:22:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:22:34.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:22:34.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-25T12:22:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 22, 16), 22.1, 23.88, 0.0, 26.64, 25.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:22:35.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:22:16
2025-12-25T12:22:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:22:35.767 [DEBUG] [Thread-11478] [transport.py] [_log()] starting thread (client mode): 0xb95f3550
2025-12-25T12:22:35.768 [DEBUG] [Thread-11478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:22:35.789 [DEBUG] [Thread-11478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:22:35.789 [INFO] [Thread-11478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:22:35.792 [DEBUG] [Thread-11478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:22:35.792 [DEBUG] [Thread-11478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:22:35.792 [DEBUG] [Thread-11478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:22:35.792 [DEBUG] [Thread-11478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:35.792 [DEBUG] [Thread-11478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] client lang: <none>
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] server lang: <none>
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] kex follows: False
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:22:35.793 [DEBUG] [Thread-11478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:22:35.794 [DEBUG] [Thread-11478] [transport.py] [_log()] Compression: none
2025-12-25T12:22:35.794 [DEBUG] [Thread-11478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:22:35.815 [DEBUG] [Thread-11478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:22:35.816 [DEBUG] [Thread-11478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:22:35.816 [DEBUG] [Thread-11478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:22:35.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:22:35.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:22:35.819 [DEBUG] [Thread-11478] [transport.py] [_log()] userauth is OK
2025-12-25T12:22:35.819 [DEBUG] [Thread-11478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:22:35.819 [DEBUG] [Thread-11478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:22:35.819 [DEBUG] [Thread-11478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:22:35.820 [DEBUG] [Thread-11478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:22:35.854 [INFO] [Thread-11478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:22:35.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:22:36.494 [DEBUG] [Thread-11478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:22:36.494 [DEBUG] [Thread-11478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:22:36.495 [DEBUG] [Thread-11478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:22:36.535 [DEBUG] [Thread-11478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:22:36.535 [DEBUG] [Thread-11478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:22:36.538 [DEBUG] [Thread-11478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:22:36.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:22:36.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:22:36.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:22:36.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:22:36.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:22:36.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:22:36.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:22:36.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:22:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:22:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.432007 -999.00  +24.60  38.61     30   +6.10 1 2 2 1 1   888    0 13.91 -297.85 ----- 38.6 38.6 313.4 49.8 30.2 -12.8 29.6 -16.3 29.4 -15.2 30.1 -12.7
2025-12-25T12:22:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:22:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:22:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.432007
2025-12-25T12:22:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:22:36.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:22:36.557 [DEBUG] [Thread-11478] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:22:36.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:22:36.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:22:36.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:22:36.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:22:16', tmtdew=22.1, humidity=23.88, cloud=0.0, wind=26.64, temperature=25.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:22:05.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:22:36.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:22:36.651 [DEBUG] [Thread-11481] [transport.py] [_log()] starting thread (client mode): 0xb9545e40
2025-12-25T12:22:36.651 [DEBUG] [Thread-11481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:22:36.667 [DEBUG] [Thread-11481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:22:36.667 [INFO] [Thread-11481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:22:36.674 [DEBUG] [Thread-11481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:22:36.674 [DEBUG] [Thread-11481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:22:36.674 [DEBUG] [Thread-11481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] client lang: <none>
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] server lang: <none>
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] kex follows: False
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] Compression: none
2025-12-25T12:22:36.675 [DEBUG] [Thread-11481] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:22:36.732 [DEBUG] [Thread-11481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:22:36.732 [DEBUG] [Thread-11481] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:22:36.733 [DEBUG] [Thread-11481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:22:36.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:22:36.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:22:36.788 [DEBUG] [Thread-11481] [transport.py] [_log()] userauth is OK
2025-12-25T12:22:36.788 [DEBUG] [Thread-11481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:22:36.789 [DEBUG] [Thread-11481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:22:36.789 [DEBUG] [Thread-11481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:22:36.789 [DEBUG] [Thread-11481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:22:36.808 [INFO] [Thread-11481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:22:36.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-25T12:22:36.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:22:37.619 [DEBUG] [Thread-11481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:22:37.619 [DEBUG] [Thread-11481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:22:37.667 [DEBUG] [Thread-11481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:22:37.667 [DEBUG] [Thread-11481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:22:37.678 [DEBUG] [Thread-11481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:22:37.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:22:37.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-25T12:22:37.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:22:37.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:22:37.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:22:37.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:22:37.715 [DEBUG] [Thread-11481] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:22:49.089 [DEBUG] [Thread-11483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:01.409 [DEBUG] [Thread-11484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:04.143 [DEBUG] [Thread-11485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:07.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:23:07.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:23:07.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-25T12:23:08.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 22, 48), 22.54, 23.51, 0.0, 31.07, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:23:08.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:22:48
2025-12-25T12:23:08.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:23:08.711 [DEBUG] [Thread-11486] [transport.py] [_log()] starting thread (client mode): 0xb6b17fd0
2025-12-25T12:23:08.711 [DEBUG] [Thread-11486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:23:08.732 [DEBUG] [Thread-11486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:23:08.732 [INFO] [Thread-11486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] client lang: <none>
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] server lang: <none>
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] kex follows: False
2025-12-25T12:23:08.735 [DEBUG] [Thread-11486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:23:08.736 [DEBUG] [Thread-11486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:23:08.736 [DEBUG] [Thread-11486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:23:08.736 [DEBUG] [Thread-11486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:23:08.736 [DEBUG] [Thread-11486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:23:08.736 [DEBUG] [Thread-11486] [transport.py] [_log()] Compression: none
2025-12-25T12:23:08.736 [DEBUG] [Thread-11486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:23:08.753 [DEBUG] [Thread-11486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:23:08.754 [DEBUG] [Thread-11486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:23:08.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:23:08.755 [DEBUG] [Thread-11486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:23:08.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:23:08.757 [DEBUG] [Thread-11486] [transport.py] [_log()] userauth is OK
2025-12-25T12:23:08.757 [DEBUG] [Thread-11486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:23:08.757 [DEBUG] [Thread-11486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:23:08.757 [DEBUG] [Thread-11486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:23:08.758 [DEBUG] [Thread-11486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:23:08.782 [INFO] [Thread-11486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:23:08.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:23:09.438 [DEBUG] [Thread-11486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:23:09.438 [DEBUG] [Thread-11486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:23:09.439 [DEBUG] [Thread-11486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:23:09.479 [DEBUG] [Thread-11486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:23:09.479 [DEBUG] [Thread-11486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:23:09.482 [DEBUG] [Thread-11486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:23:09.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:23:09.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:23:09.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:23:09.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:23:09.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:23:09.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:23:09.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:23:09.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:23:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:23:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.432354 -999.00  +24.90  31.74     30   +6.30 1 2 2 1 1   888    0 12.25 -338.50 ----- 31.7 31.7 298.7 48.4 29.9 -19.0 29.7 -15.0 29.1 -17.6 29.7 -14.8
2025-12-25T12:23:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:23:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:23:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.432354
2025-12-25T12:23:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:23:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:23:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:23:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:23:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:23:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:22:48', tmtdew=22.54, humidity=23.51, cloud=0.0, wind=31.07, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:22:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:23:09.512 [DEBUG] [Thread-11486] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:23:09.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-25T12:23:09.605 [DEBUG] [Thread-11489] [transport.py] [_log()] starting thread (client mode): 0xb95f01c0
2025-12-25T12:23:09.606 [DEBUG] [Thread-11489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:23:09.620 [DEBUG] [Thread-11489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:23:09.620 [INFO] [Thread-11489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:23:09.628 [DEBUG] [Thread-11489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:23:09.628 [DEBUG] [Thread-11489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:23:09.628 [DEBUG] [Thread-11489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] client lang: <none>
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] server lang: <none>
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] kex follows: False
2025-12-25T12:23:09.629 [DEBUG] [Thread-11489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:23:09.630 [DEBUG] [Thread-11489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:23:09.630 [DEBUG] [Thread-11489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:23:09.630 [DEBUG] [Thread-11489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:23:09.630 [DEBUG] [Thread-11489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:23:09.630 [DEBUG] [Thread-11489] [transport.py] [_log()] Compression: none
2025-12-25T12:23:09.630 [DEBUG] [Thread-11489] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:23:09.689 [DEBUG] [Thread-11489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:23:09.689 [DEBUG] [Thread-11489] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:23:09.690 [DEBUG] [Thread-11489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:23:09.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:23:09.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:23:09.749 [DEBUG] [Thread-11489] [transport.py] [_log()] userauth is OK
2025-12-25T12:23:09.749 [DEBUG] [Thread-11489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:23:09.749 [DEBUG] [Thread-11489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:23:09.749 [DEBUG] [Thread-11489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:23:09.749 [DEBUG] [Thread-11489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:23:09.768 [INFO] [Thread-11489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:23:09.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-25T12:23:09.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:23:10.587 [DEBUG] [Thread-11489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:23:10.587 [DEBUG] [Thread-11489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:23:10.635 [DEBUG] [Thread-11489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:23:10.635 [DEBUG] [Thread-11489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:23:10.644 [DEBUG] [Thread-11489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:23:10.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:23:10.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:23:10.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-25T12:23:10.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:23:10.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:23:10.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:23:10.681 [DEBUG] [Thread-11489] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:23:18.954 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:18.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:19.179 [DEBUG] [Thread-11491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:34.234 [DEBUG] [Thread-11492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:23:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:23:40.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:23:40.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-25T12:23:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 23, 20), 22.19, 23.97, 0.0, 32.01, 25.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:23:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:23:20
2025-12-25T12:23:41.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:23:41.676 [DEBUG] [Thread-11493] [transport.py] [_log()] starting thread (client mode): 0xb6b14130
2025-12-25T12:23:41.676 [DEBUG] [Thread-11493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:23:41.696 [DEBUG] [Thread-11493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:23:41.697 [INFO] [Thread-11493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] client lang: <none>
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] server lang: <none>
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] kex follows: False
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:23:41.700 [DEBUG] [Thread-11493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:23:41.701 [DEBUG] [Thread-11493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:23:41.701 [DEBUG] [Thread-11493] [transport.py] [_log()] Compression: none
2025-12-25T12:23:41.701 [DEBUG] [Thread-11493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:23:41.717 [DEBUG] [Thread-11493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:23:41.718 [DEBUG] [Thread-11493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:23:41.718 [DEBUG] [Thread-11493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:23:41.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:23:41.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:23:41.720 [DEBUG] [Thread-11493] [transport.py] [_log()] userauth is OK
2025-12-25T12:23:41.721 [DEBUG] [Thread-11493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:23:41.721 [DEBUG] [Thread-11493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:23:41.721 [DEBUG] [Thread-11493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:23:41.721 [DEBUG] [Thread-11493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:23:41.745 [INFO] [Thread-11493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:23:41.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:23:42.400 [DEBUG] [Thread-11493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:23:42.401 [DEBUG] [Thread-11493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:23:42.401 [DEBUG] [Thread-11493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:23:42.442 [DEBUG] [Thread-11493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:23:42.442 [DEBUG] [Thread-11493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:23:42.445 [DEBUG] [Thread-11493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:23:42.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:23:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:23:42.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:23:42.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:23:42.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:23:42.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:23:42.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:23:42.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:23:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:23:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.432701 -999.00  +25.00  37.41     30   +6.50 1 2 2 1 1   888    0 11.51 -369.92 ----- 37.4 37.4 307.8 42.8 29.8 -18.8 29.3 -17.4 28.9 -16.4 29.5 -18.4
2025-12-25T12:23:42.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:23:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:23:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.432701
2025-12-25T12:23:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:23:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:23:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:23:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:23:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:23:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:23:20', tmtdew=22.19, humidity=23.97, cloud=0.0, wind=32.01, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:23:05.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:23:42.472 [DEBUG] [Thread-11493] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:23:42.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-25T12:23:42.566 [DEBUG] [Thread-11496] [transport.py] [_log()] starting thread (client mode): 0xb957bd00
2025-12-25T12:23:42.566 [DEBUG] [Thread-11496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:23:42.579 [DEBUG] [Thread-11496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:23:42.579 [INFO] [Thread-11496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:23:42.587 [DEBUG] [Thread-11496] [transport.py] [_log()] client lang: <none>
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] server lang: <none>
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] kex follows: False
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] Compression: none
2025-12-25T12:23:42.588 [DEBUG] [Thread-11496] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:23:42.645 [DEBUG] [Thread-11496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:23:42.646 [DEBUG] [Thread-11496] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:23:42.646 [DEBUG] [Thread-11496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:23:42.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:23:42.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:23:42.701 [DEBUG] [Thread-11496] [transport.py] [_log()] userauth is OK
2025-12-25T12:23:42.701 [DEBUG] [Thread-11496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:23:42.702 [DEBUG] [Thread-11496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:23:42.702 [DEBUG] [Thread-11496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:23:42.702 [DEBUG] [Thread-11496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:23:42.720 [INFO] [Thread-11496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:23:42.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-25T12:23:42.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:23:43.538 [DEBUG] [Thread-11496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:23:43.538 [DEBUG] [Thread-11496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:23:43.586 [DEBUG] [Thread-11496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:23:43.586 [DEBUG] [Thread-11496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:23:43.595 [DEBUG] [Thread-11496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:23:43.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:23:43.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-25T12:23:43.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-25T12:23:43.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:23:43.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:23:43.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:23:43.631 [DEBUG] [Thread-11496] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:23:49.270 [DEBUG] [Thread-11498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:01.446 [DEBUG] [Thread-11499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:04.326 [DEBUG] [Thread-11500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:13.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:24:13.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:24:13.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-25T12:24:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 23, 52), 21.61, 24.5, 0.0, 26.52, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:24:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:23:52
2025-12-25T12:24:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:24:14.638 [DEBUG] [Thread-11501] [transport.py] [_log()] starting thread (client mode): 0xb6b2a5f0
2025-12-25T12:24:14.638 [DEBUG] [Thread-11501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:24:14.658 [DEBUG] [Thread-11501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:24:14.659 [INFO] [Thread-11501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:24:14.660 [DEBUG] [Thread-11501] [transport.py] [_log()] client lang: <none>
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] server lang: <none>
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] kex follows: False
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] Compression: none
2025-12-25T12:24:14.661 [DEBUG] [Thread-11501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:24:14.681 [DEBUG] [Thread-11501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:24:14.683 [DEBUG] [Thread-11501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:24:14.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:24:14.684 [DEBUG] [Thread-11501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:24:14.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:24:14.686 [DEBUG] [Thread-11501] [transport.py] [_log()] userauth is OK
2025-12-25T12:24:14.686 [DEBUG] [Thread-11501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:24:14.686 [DEBUG] [Thread-11501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:24:14.686 [DEBUG] [Thread-11501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:24:14.686 [DEBUG] [Thread-11501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:24:14.713 [INFO] [Thread-11501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:24:14.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:24:15.339 [DEBUG] [Thread-11501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:24:15.340 [DEBUG] [Thread-11501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:24:15.340 [DEBUG] [Thread-11501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:24:15.381 [DEBUG] [Thread-11501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:24:15.381 [DEBUG] [Thread-11501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:24:15.384 [DEBUG] [Thread-11501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:24:15.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:24:15.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:24:15.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:24:15.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:24:15.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:24:15.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:24:15.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:24:15.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:24:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:24:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.433048 -999.00  +25.30  26.74     30   +6.90 1 2 1 1 1   888    0 11.25 -388.88 ----- 26.7 26.7 297.6 34.1 29.5 -19.4 29.3 -17.0 28.9 -17.2 29.3 -18.3
2025-12-25T12:24:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:24:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:24:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.433048
2025-12-25T12:24:15.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:24:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:24:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:24:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:24:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:24:15.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:23:52', tmtdew=21.61, humidity=24.5, cloud=0.0, wind=26.52, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:23:35.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:24:15.406 [DEBUG] [Thread-11501] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:24:15.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-25T12:24:15.501 [DEBUG] [Thread-11504] [transport.py] [_log()] starting thread (client mode): 0xb9545db0
2025-12-25T12:24:15.501 [DEBUG] [Thread-11504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:24:15.516 [DEBUG] [Thread-11504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:24:15.516 [INFO] [Thread-11504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:24:15.523 [DEBUG] [Thread-11504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] client lang: <none>
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] server lang: <none>
2025-12-25T12:24:15.524 [DEBUG] [Thread-11504] [transport.py] [_log()] kex follows: False
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] Compression: none
2025-12-25T12:24:15.525 [DEBUG] [Thread-11504] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:24:15.582 [DEBUG] [Thread-11504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:24:15.582 [DEBUG] [Thread-11504] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:24:15.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:24:15.583 [DEBUG] [Thread-11504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:24:15.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:24:15.637 [DEBUG] [Thread-11504] [transport.py] [_log()] userauth is OK
2025-12-25T12:24:15.637 [DEBUG] [Thread-11504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:24:15.637 [DEBUG] [Thread-11504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:24:15.637 [DEBUG] [Thread-11504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:24:15.638 [DEBUG] [Thread-11504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:24:15.657 [INFO] [Thread-11504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:24:15.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-25T12:24:15.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:24:16.437 [DEBUG] [Thread-11504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:24:16.437 [DEBUG] [Thread-11504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:24:16.485 [DEBUG] [Thread-11504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:24:16.485 [DEBUG] [Thread-11504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:24:16.495 [DEBUG] [Thread-11504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:24:16.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:24:16.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-25T12:24:16.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-25T12:24:16.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:24:16.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:24:16.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:24:16.531 [DEBUG] [Thread-11504] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:24:19.103 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:19.105 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:19.360 [DEBUG] [Thread-11506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:34.410 [DEBUG] [Thread-11507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:46.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:24:46.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:24:46.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-25T12:24:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 24, 24), 21.33, 24.93, 0.0, 29.54, 24.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:24:47.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:24:24
2025-12-25T12:24:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:24:47.513 [DEBUG] [Thread-11508] [transport.py] [_log()] starting thread (client mode): 0xb95f0f70
2025-12-25T12:24:47.513 [DEBUG] [Thread-11508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:24:47.534 [DEBUG] [Thread-11508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:24:47.534 [INFO] [Thread-11508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:24:47.537 [DEBUG] [Thread-11508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:24:47.537 [DEBUG] [Thread-11508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:24:47.537 [DEBUG] [Thread-11508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] client lang: <none>
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] server lang: <none>
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] kex follows: False
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] Compression: none
2025-12-25T12:24:47.538 [DEBUG] [Thread-11508] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:24:47.556 [DEBUG] [Thread-11508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:24:47.557 [DEBUG] [Thread-11508] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:24:47.558 [DEBUG] [Thread-11508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:24:47.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:24:47.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:24:47.561 [DEBUG] [Thread-11508] [transport.py] [_log()] userauth is OK
2025-12-25T12:24:47.561 [DEBUG] [Thread-11508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:24:47.561 [DEBUG] [Thread-11508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:24:47.561 [DEBUG] [Thread-11508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:24:47.561 [DEBUG] [Thread-11508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:24:47.585 [INFO] [Thread-11508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:24:47.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:24:48.237 [DEBUG] [Thread-11508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:24:48.237 [DEBUG] [Thread-11508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:24:48.237 [DEBUG] [Thread-11508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:24:48.278 [DEBUG] [Thread-11508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:24:48.278 [DEBUG] [Thread-11508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:24:48.281 [DEBUG] [Thread-11508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:24:48.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:24:48.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:24:48.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:24:48.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:24:48.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:24:48.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:24:48.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:24:48.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:24:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:24:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.433743 -999.00  +24.80  34.32     31   +6.60 1 2 2 1 1   888    0 10.74 -397.79 ----- 34.3 34.3 311.5 37.9 29.2 -19.4 28.9 -18.7 28.4 -18.3 28.9 -19.0
2025-12-25T12:24:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:24:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:24:48.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.433743
2025-12-25T12:24:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:24:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:24:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:24:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:24:48.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:24:48.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:24:24', tmtdew=21.33, humidity=24.93, cloud=0.0, wind=29.54, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:24:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:24:48.307 [DEBUG] [Thread-11508] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:24:48.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-25T12:24:48.411 [DEBUG] [Thread-11511] [transport.py] [_log()] starting thread (client mode): 0xb95473a0
2025-12-25T12:24:48.411 [DEBUG] [Thread-11511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:24:48.425 [DEBUG] [Thread-11511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:24:48.425 [INFO] [Thread-11511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:24:48.432 [DEBUG] [Thread-11511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] client lang: <none>
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] server lang: <none>
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] kex follows: False
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] Compression: none
2025-12-25T12:24:48.433 [DEBUG] [Thread-11511] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:24:48.490 [DEBUG] [Thread-11511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:24:48.490 [DEBUG] [Thread-11511] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:24:48.490 [DEBUG] [Thread-11511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:24:48.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:24:48.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:24:48.546 [DEBUG] [Thread-11511] [transport.py] [_log()] userauth is OK
2025-12-25T12:24:48.546 [DEBUG] [Thread-11511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:24:48.546 [DEBUG] [Thread-11511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:24:48.547 [DEBUG] [Thread-11511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:24:48.547 [DEBUG] [Thread-11511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:24:48.569 [INFO] [Thread-11511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:24:48.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-25T12:24:48.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:24:49.393 [DEBUG] [Thread-11511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:24:49.394 [DEBUG] [Thread-11511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:24:49.441 [DEBUG] [Thread-11513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:24:49.442 [DEBUG] [Thread-11511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:24:49.443 [DEBUG] [Thread-11511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:24:49.452 [DEBUG] [Thread-11511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:24:49.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:24:49.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-25T12:24:49.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:24:49.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:24:49.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:24:49.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:24:49.486 [DEBUG] [Thread-11511] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:25:01.480 [DEBUG] [Thread-11514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:04.495 [DEBUG] [Thread-11515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:19.248 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:19.248 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:25:19.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:25:19.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-25T12:25:19.532 [DEBUG] [Thread-11516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 24, 56), 21.08, 25.5, 0.0, 30.36, 24.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:25:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:24:56
2025-12-25T12:25:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:25:20.541 [DEBUG] [Thread-11517] [transport.py] [_log()] starting thread (client mode): 0xb9545ff0
2025-12-25T12:25:20.541 [DEBUG] [Thread-11517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:25:20.561 [DEBUG] [Thread-11517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:25:20.561 [INFO] [Thread-11517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] client lang: <none>
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] server lang: <none>
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] kex follows: False
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:25:20.564 [DEBUG] [Thread-11517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:25:20.565 [DEBUG] [Thread-11517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:25:20.565 [DEBUG] [Thread-11517] [transport.py] [_log()] Compression: none
2025-12-25T12:25:20.565 [DEBUG] [Thread-11517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:25:20.582 [DEBUG] [Thread-11517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:25:20.582 [DEBUG] [Thread-11517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:25:20.582 [DEBUG] [Thread-11517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:25:20.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:25:20.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:25:20.583 [DEBUG] [Thread-11517] [transport.py] [_log()] userauth is OK
2025-12-25T12:25:20.583 [DEBUG] [Thread-11517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:25:20.583 [DEBUG] [Thread-11517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:25:20.583 [DEBUG] [Thread-11517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:25:20.583 [DEBUG] [Thread-11517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:25:20.592 [INFO] [Thread-11517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:25:20.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:25:21.254 [DEBUG] [Thread-11517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:25:21.254 [DEBUG] [Thread-11517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:25:21.254 [DEBUG] [Thread-11517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:25:21.294 [DEBUG] [Thread-11517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:25:21.294 [DEBUG] [Thread-11517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:25:21.296 [DEBUG] [Thread-11517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:25:21.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:25:21.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:25:21.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:25:21.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:25:21.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:25:21.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:25:21.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.434090 -999.00  +24.90  32.23     30   +6.50 1 2 2 1 1   888    0 11.22 -390.29 ----- 32.2 32.2 320.2 36.0 29.0 -19.8 28.8 -18.0 28.4 -18.3 28.7 -19.6
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.434090
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:25:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:24:56', tmtdew=21.08, humidity=25.5, cloud=0.0, wind=30.36, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:25:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:25:21.315 [DEBUG] [Thread-11517] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:25:21.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:25:21.398 [DEBUG] [Thread-11520] [transport.py] [_log()] starting thread (client mode): 0xb6be34f0
2025-12-25T12:25:21.398 [DEBUG] [Thread-11520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:25:21.412 [DEBUG] [Thread-11520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:25:21.412 [INFO] [Thread-11520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] client lang: <none>
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] server lang: <none>
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] kex follows: False
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] Compression: none
2025-12-25T12:25:21.420 [DEBUG] [Thread-11520] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:25:21.478 [DEBUG] [Thread-11520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:25:21.478 [DEBUG] [Thread-11520] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:25:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:25:21.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:25:21.479 [DEBUG] [Thread-11520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:25:21.535 [DEBUG] [Thread-11520] [transport.py] [_log()] userauth is OK
2025-12-25T12:25:21.535 [DEBUG] [Thread-11520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:25:21.535 [DEBUG] [Thread-11520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:25:21.535 [DEBUG] [Thread-11520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:25:21.535 [DEBUG] [Thread-11520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:25:21.549 [INFO] [Thread-11520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:25:21.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-25T12:25:21.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:25:22.359 [DEBUG] [Thread-11520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:25:22.359 [DEBUG] [Thread-11520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:25:22.407 [DEBUG] [Thread-11520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:25:22.407 [DEBUG] [Thread-11520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:25:22.415 [DEBUG] [Thread-11520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:25:22.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:25:22.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-25T12:25:22.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-25T12:25:22.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:25:22.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:25:22.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:25:22.447 [DEBUG] [Thread-11520] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:25:34.562 [DEBUG] [Thread-11522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:49.611 [DEBUG] [Thread-11523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:25:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:25:52.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:25:52.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-25T12:25:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 25, 29), 20.84, 25.89, 0.0, 27.07, 24.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:25:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:25:29
2025-12-25T12:25:53.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:25:53.461 [DEBUG] [Thread-11524] [transport.py] [_log()] starting thread (client mode): 0xb6b28b80
2025-12-25T12:25:53.461 [DEBUG] [Thread-11524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:25:53.479 [DEBUG] [Thread-11524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:25:53.480 [INFO] [Thread-11524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:25:53.483 [DEBUG] [Thread-11524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] client lang: <none>
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] server lang: <none>
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] kex follows: False
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] Compression: none
2025-12-25T12:25:53.484 [DEBUG] [Thread-11524] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:25:53.502 [DEBUG] [Thread-11524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:25:53.503 [DEBUG] [Thread-11524] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:25:53.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:25:53.505 [DEBUG] [Thread-11524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:25:53.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:25:53.507 [DEBUG] [Thread-11524] [transport.py] [_log()] userauth is OK
2025-12-25T12:25:53.507 [DEBUG] [Thread-11524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:25:53.507 [DEBUG] [Thread-11524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:25:53.507 [DEBUG] [Thread-11524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:25:53.507 [DEBUG] [Thread-11524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:25:53.528 [INFO] [Thread-11524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:25:53.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:25:54.138 [DEBUG] [Thread-11524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:25:54.138 [DEBUG] [Thread-11524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:25:54.138 [DEBUG] [Thread-11524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:25:54.179 [DEBUG] [Thread-11524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:25:54.179 [DEBUG] [Thread-11524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:25:54.183 [DEBUG] [Thread-11524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:25:54.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:25:54.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:25:54.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:25:54.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:25:54.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:25:54.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:25:54.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:25:54.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:25:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:25:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.434437 -999.00  +25.00  27.60     30   +6.60 1 2 1 1 1   888    0 10.38 -411.58 ----- 27.6 27.6 318.6 36.0 28.9 -19.9 28.9 -13.5 28.3 -18.8 28.6 -18.3
2025-12-25T12:25:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:25:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:25:54.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.434437
2025-12-25T12:25:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:25:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:25:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:25:54.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:25:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:25:54.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:25:29', tmtdew=20.84, humidity=25.89, cloud=0.0, wind=27.07, temperature=24.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:25:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:25:54.210 [DEBUG] [Thread-11524] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:25:54.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-25T12:25:54.307 [DEBUG] [Thread-11527] [transport.py] [_log()] starting thread (client mode): 0xb95472e0
2025-12-25T12:25:54.307 [DEBUG] [Thread-11527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:25:54.321 [DEBUG] [Thread-11527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:25:54.322 [INFO] [Thread-11527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:25:54.329 [DEBUG] [Thread-11527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:25:54.329 [DEBUG] [Thread-11527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:25:54.329 [DEBUG] [Thread-11527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] client lang: <none>
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] server lang: <none>
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] kex follows: False
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] Compression: none
2025-12-25T12:25:54.330 [DEBUG] [Thread-11527] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:25:54.388 [DEBUG] [Thread-11527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:25:54.389 [DEBUG] [Thread-11527] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:25:54.389 [DEBUG] [Thread-11527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:25:54.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:25:54.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:25:54.444 [DEBUG] [Thread-11527] [transport.py] [_log()] userauth is OK
2025-12-25T12:25:54.444 [DEBUG] [Thread-11527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:25:54.445 [DEBUG] [Thread-11527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:25:54.445 [DEBUG] [Thread-11527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:25:54.445 [DEBUG] [Thread-11527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:25:54.463 [INFO] [Thread-11527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:25:54.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-25T12:25:54.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:25:55.267 [DEBUG] [Thread-11527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:25:55.268 [DEBUG] [Thread-11527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:25:55.315 [DEBUG] [Thread-11527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:25:55.315 [DEBUG] [Thread-11527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:25:55.324 [DEBUG] [Thread-11527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:25:55.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:25:55.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-25T12:25:55.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-25T12:25:55.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:25:55.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:25:55.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:25:55.361 [DEBUG] [Thread-11527] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:26:01.515 [DEBUG] [Thread-11529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:04.642 [DEBUG] [Thread-11530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:19.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:19.388 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:19.705 [DEBUG] [Thread-11531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:25.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:26:25.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:26:25.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-25T12:26:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 26, 1), 20.84, 25.99, 0.0, 28.58, 24.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:26:26.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:26:01
2025-12-25T12:26:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:26:26.356 [DEBUG] [Thread-11532] [transport.py] [_log()] starting thread (client mode): 0xb95472e0
2025-12-25T12:26:26.356 [DEBUG] [Thread-11532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:26:26.375 [DEBUG] [Thread-11532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:26:26.375 [INFO] [Thread-11532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:26:26.376 [DEBUG] [Thread-11532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:26:26.376 [DEBUG] [Thread-11532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:26:26.376 [DEBUG] [Thread-11532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] client lang: <none>
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] server lang: <none>
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] kex follows: False
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] Compression: none
2025-12-25T12:26:26.377 [DEBUG] [Thread-11532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:26:26.391 [DEBUG] [Thread-11532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:26:26.392 [DEBUG] [Thread-11532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:26:26.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:26:26.393 [DEBUG] [Thread-11532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:26:26.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:26:26.395 [DEBUG] [Thread-11532] [transport.py] [_log()] userauth is OK
2025-12-25T12:26:26.395 [DEBUG] [Thread-11532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:26:26.395 [DEBUG] [Thread-11532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:26:26.395 [DEBUG] [Thread-11532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:26:26.395 [DEBUG] [Thread-11532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:26:26.417 [INFO] [Thread-11532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:26:26.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:26:26.993 [DEBUG] [Thread-11532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:26:26.994 [DEBUG] [Thread-11532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:26:26.994 [DEBUG] [Thread-11532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:26:27.035 [DEBUG] [Thread-11532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:26:27.035 [DEBUG] [Thread-11532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:26:27.037 [DEBUG] [Thread-11532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:26:27.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:26:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:26:27.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:26:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:26:27.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:26:27.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:26:27.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:26:27.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:26:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:26:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.434784 -999.00  +25.40  27.32     30   +6.90 1 2 1 1 1   888    0 9.34 -444.17 ----- 27.3 27.3 325.6 40.0 29.4 -12.6 29.1 -16.1 28.8 -11.6 29.3 -12.6
2025-12-25T12:26:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:26:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:26:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.434784
2025-12-25T12:26:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:26:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:26:27.062 [DEBUG] [Thread-11532] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:26:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:26:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:26:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:26:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:26:01', tmtdew=20.84, humidity=25.99, cloud=0.0, wind=28.58, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:26:05.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:26:27.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-25T12:26:27.157 [DEBUG] [Thread-11535] [transport.py] [_log()] starting thread (client mode): 0xb957a7a0
2025-12-25T12:26:27.157 [DEBUG] [Thread-11535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:26:27.172 [DEBUG] [Thread-11535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:26:27.172 [INFO] [Thread-11535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] client lang: <none>
2025-12-25T12:26:27.180 [DEBUG] [Thread-11535] [transport.py] [_log()] server lang: <none>
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] kex follows: False
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] Compression: none
2025-12-25T12:26:27.181 [DEBUG] [Thread-11535] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:26:27.239 [DEBUG] [Thread-11535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:26:27.239 [DEBUG] [Thread-11535] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:26:27.240 [DEBUG] [Thread-11535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:26:27.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:26:27.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:26:27.298 [DEBUG] [Thread-11535] [transport.py] [_log()] userauth is OK
2025-12-25T12:26:27.299 [DEBUG] [Thread-11535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:26:27.299 [DEBUG] [Thread-11535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:26:27.299 [DEBUG] [Thread-11535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:26:27.299 [DEBUG] [Thread-11535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:26:27.318 [INFO] [Thread-11535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:26:27.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-25T12:26:27.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:26:28.231 [DEBUG] [Thread-11535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:26:28.232 [DEBUG] [Thread-11535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:26:28.280 [DEBUG] [Thread-11535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:26:28.280 [DEBUG] [Thread-11535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:26:28.290 [DEBUG] [Thread-11535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:26:28.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:26:28.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-25T12:26:28.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-25T12:26:28.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:26:28.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:26:28.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:26:28.326 [DEBUG] [Thread-11535] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:26:34.740 [DEBUG] [Thread-11537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:49.780 [DEBUG] [Thread-11538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:26:58.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:26:58.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:26:58.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-25T12:26:59.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 26, 33), 20.62, 26.37, 0.0, 27.82, 24.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:26:59.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:26:33
2025-12-25T12:26:59.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:26:59.329 [DEBUG] [Thread-11539] [transport.py] [_log()] starting thread (client mode): 0xb6be3340
2025-12-25T12:26:59.329 [DEBUG] [Thread-11539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:26:59.348 [DEBUG] [Thread-11539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:26:59.348 [INFO] [Thread-11539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:26:59.352 [DEBUG] [Thread-11539] [transport.py] [_log()] client lang: <none>
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] server lang: <none>
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] kex follows: False
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] Compression: none
2025-12-25T12:26:59.353 [DEBUG] [Thread-11539] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:26:59.363 [DEBUG] [Thread-11539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:26:59.363 [DEBUG] [Thread-11539] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:26:59.364 [DEBUG] [Thread-11539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:26:59.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:26:59.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:26:59.365 [DEBUG] [Thread-11539] [transport.py] [_log()] userauth is OK
2025-12-25T12:26:59.366 [DEBUG] [Thread-11539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:26:59.366 [DEBUG] [Thread-11539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:26:59.366 [DEBUG] [Thread-11539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:26:59.366 [DEBUG] [Thread-11539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:26:59.392 [INFO] [Thread-11539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:26:59.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:27:00.005 [DEBUG] [Thread-11539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:27:00.005 [DEBUG] [Thread-11539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:27:00.006 [DEBUG] [Thread-11539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:27:00.046 [DEBUG] [Thread-11539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:27:00.046 [DEBUG] [Thread-11539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:27:00.049 [DEBUG] [Thread-11539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:27:00.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:27:00.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:27:00.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:27:00.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:27:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:27:00.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:27:00.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:27:00.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:27:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:27:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.435132 -999.00  +24.60  25.39     31   +6.70 1 2 1 1 1   888    0 8.58 -444.13 ----- 25.4 25.4 323.0 41.2 29.5 -15.9 29.3 -16.7 28.9 -14.8 29.2 -14.9
2025-12-25T12:27:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:27:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:27:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.435132
2025-12-25T12:27:00.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:27:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:27:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:27:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:27:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:27:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:26:33', tmtdew=20.62, humidity=26.37, cloud=0.0, wind=27.82, temperature=24.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:26:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:27:00.072 [DEBUG] [Thread-11539] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:27:00.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-25T12:27:00.167 [DEBUG] [Thread-11542] [transport.py] [_log()] starting thread (client mode): 0xb6be1cf0
2025-12-25T12:27:00.167 [DEBUG] [Thread-11542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:27:00.183 [DEBUG] [Thread-11542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:27:00.184 [INFO] [Thread-11542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:27:00.191 [DEBUG] [Thread-11542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:27:00.192 [DEBUG] [Thread-11542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] client lang: <none>
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] server lang: <none>
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] kex follows: False
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:27:00.193 [DEBUG] [Thread-11542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:27:00.194 [DEBUG] [Thread-11542] [transport.py] [_log()] Compression: none
2025-12-25T12:27:00.195 [DEBUG] [Thread-11542] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:27:00.252 [DEBUG] [Thread-11542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:27:00.253 [DEBUG] [Thread-11542] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:27:00.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:27:00.255 [DEBUG] [Thread-11542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:27:00.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:27:00.312 [DEBUG] [Thread-11542] [transport.py] [_log()] userauth is OK
2025-12-25T12:27:00.312 [DEBUG] [Thread-11542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:27:00.313 [DEBUG] [Thread-11542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:27:00.313 [DEBUG] [Thread-11542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:27:00.313 [DEBUG] [Thread-11542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:27:00.331 [INFO] [Thread-11542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:27:00.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-25T12:27:00.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:27:01.157 [DEBUG] [Thread-11542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:27:01.157 [DEBUG] [Thread-11542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:27:01.205 [DEBUG] [Thread-11542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:27:01.206 [DEBUG] [Thread-11542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:27:01.215 [DEBUG] [Thread-11542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:27:01.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:27:01.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-25T12:27:01.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-25T12:27:01.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:27:01.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:27:01.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:27:01.257 [DEBUG] [Thread-11542] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:27:01.559 [DEBUG] [Thread-11544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:27:04.819 [DEBUG] [Thread-11545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:27:19.526 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:27:19.527 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:27:19.873 [DEBUG] [Thread-11546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:27:31.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:27:31.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:27:31.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:27:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 27, 5), 20.68, 26.26, 0.0, 24.26, 24.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:27:31.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:27:05
2025-12-25T12:27:32.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:27:32.243 [DEBUG] [Thread-11547] [transport.py] [_log()] starting thread (client mode): 0xb6be06d0
2025-12-25T12:27:32.243 [DEBUG] [Thread-11547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:27:32.254 [DEBUG] [Thread-11547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:27:32.254 [INFO] [Thread-11547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:27:32.257 [DEBUG] [Thread-11547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] client lang: <none>
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] server lang: <none>
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] kex follows: False
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] Compression: none
2025-12-25T12:27:32.258 [DEBUG] [Thread-11547] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:27:32.274 [DEBUG] [Thread-11547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:27:32.274 [DEBUG] [Thread-11547] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:27:32.274 [DEBUG] [Thread-11547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:27:32.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:27:32.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:27:32.276 [DEBUG] [Thread-11547] [transport.py] [_log()] userauth is OK
2025-12-25T12:27:32.276 [DEBUG] [Thread-11547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:27:32.276 [DEBUG] [Thread-11547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:27:32.276 [DEBUG] [Thread-11547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:27:32.276 [DEBUG] [Thread-11547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:27:32.301 [INFO] [Thread-11547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:27:32.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:27:32.868 [DEBUG] [Thread-11547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:27:32.868 [DEBUG] [Thread-11547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:27:32.868 [DEBUG] [Thread-11547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:27:32.909 [DEBUG] [Thread-11547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:27:32.909 [DEBUG] [Thread-11547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:27:32.913 [DEBUG] [Thread-11547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:27:32.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:27:32.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:27:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:27:32.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:27:32.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:27:32.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:27:32.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:27:32.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:27:32.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:27:32.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.435479 -999.00  +25.10  38.83     31   +7.00 1 2 2 1 1   888    0 7.22 -494.14 ----- 38.8 38.8 292.6 43.2 29.7 -17.4 29.1 -20.1 29.1 -15.8 29.2 -19.1
2025-12-25T12:27:32.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:27:32.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:27:32.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.435479
2025-12-25T12:27:32.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:27:32.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:27:32.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:27:32.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:27:32.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:27:32.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:27:05', tmtdew=20.68, humidity=26.26, cloud=0.0, wind=24.26, temperature=24.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:27:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:27:32.940 [DEBUG] [Thread-11547] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:27: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-25T12:27:33.033 [DEBUG] [Thread-11550] [transport.py] [_log()] starting thread (client mode): 0xb6be3010
2025-12-25T12:27:33.033 [DEBUG] [Thread-11550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:27:33.048 [DEBUG] [Thread-11550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:27:33.049 [INFO] [Thread-11550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:27:33.056 [DEBUG] [Thread-11550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:27:33.056 [DEBUG] [Thread-11550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] client lang: <none>
2025-12-25T12:27:33.057 [DEBUG] [Thread-11550] [transport.py] [_log()] server lang: <none>
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] kex follows: False
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] Compression: none
2025-12-25T12:27:33.058 [DEBUG] [Thread-11550] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:27:33.114 [DEBUG] [Thread-11550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:27:33.115 [DEBUG] [Thread-11550] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:27:33.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:27:33.116 [DEBUG] [Thread-11550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:27:33.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:27:33.174 [DEBUG] [Thread-11550] [transport.py] [_log()] userauth is OK
2025-12-25T12:27:33.174 [DEBUG] [Thread-11550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:27:33.174 [DEBUG] [Thread-11550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:27:33.174 [DEBUG] [Thread-11550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:27:33.174 [DEBUG] [Thread-11550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:27:33.193 [INFO] [Thread-11550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:27:33.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-25T12:27:33.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:27:34.015 [DEBUG] [Thread-11550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:27:34.015 [DEBUG] [Thread-11550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:27:34.063 [DEBUG] [Thread-11550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:27:34.063 [DEBUG] [Thread-11550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:27:34.073 [DEBUG] [Thread-11550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:27:34.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:27:34.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-25T12:27: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-25T12:27:34.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:27:34.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:27:34.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:27:34.113 [DEBUG] [Thread-11550] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:27:34.907 [DEBUG] [Thread-11552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:27:49.960 [DEBUG] [Thread-11553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:01.592 [DEBUG] [Thread-11554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:28:04.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:28:04.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-25T12:28:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 27, 37), 20.67, 25.94, 0.0, 29.31, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:28:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:27:37
2025-12-25T12:28:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:28:04.990 [DEBUG] [Thread-11555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:05.107 [DEBUG] [Thread-11556] [transport.py] [_log()] starting thread (client mode): 0xb6be3340
2025-12-25T12:28:05.107 [DEBUG] [Thread-11556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:28:05.128 [DEBUG] [Thread-11556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:28:05.128 [INFO] [Thread-11556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:28:05.131 [DEBUG] [Thread-11556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] client lang: <none>
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] server lang: <none>
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] kex follows: False
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] Compression: none
2025-12-25T12:28:05.132 [DEBUG] [Thread-11556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:28:05.151 [DEBUG] [Thread-11556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:28:05.151 [DEBUG] [Thread-11556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:28:05.152 [DEBUG] [Thread-11556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:28:05.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:28:05.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:28:05.155 [DEBUG] [Thread-11556] [transport.py] [_log()] userauth is OK
2025-12-25T12:28:05.155 [DEBUG] [Thread-11556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:28:05.155 [DEBUG] [Thread-11556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:28:05.155 [DEBUG] [Thread-11556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:28:05.155 [DEBUG] [Thread-11556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:28:05.178 [INFO] [Thread-11556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:28:05.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:28:05.753 [DEBUG] [Thread-11556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:28:05.753 [DEBUG] [Thread-11556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:28:05.754 [DEBUG] [Thread-11556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:28:05.794 [DEBUG] [Thread-11556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:28:05.794 [DEBUG] [Thread-11556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:28:05.797 [DEBUG] [Thread-11556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:28:05.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:28:05.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:28:05.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:28:05.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:28:05.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:28:05.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:28:05.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:28:05.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:28:05.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:28:05.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.435826 -999.00  +24.90  40.06     31   +6.80 1 2 2 1 1   888    0 6.90 -507.22 ----- 40.1 40.1 311.8 44.4 29.2 -21.8 28.9 -19.9 28.5 -23.3 28.8 -21.8
2025-12-25T12:28:05.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:28:05.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:28:05.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.435826
2025-12-25T12:28:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:28:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:28:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:28:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:28:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:28:05.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:27:37', tmtdew=20.67, humidity=25.94, cloud=0.0, wind=29.31, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:27:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:28:05.820 [DEBUG] [Thread-11556] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:28:05.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-25T12:28:05.914 [DEBUG] [Thread-11559] [transport.py] [_log()] starting thread (client mode): 0xbbfce770
2025-12-25T12:28:05.914 [DEBUG] [Thread-11559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:28:05.929 [DEBUG] [Thread-11559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:28:05.929 [INFO] [Thread-11559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] client lang: <none>
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] server lang: <none>
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] kex follows: False
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:28:05.937 [DEBUG] [Thread-11559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:28:05.938 [DEBUG] [Thread-11559] [transport.py] [_log()] Compression: none
2025-12-25T12:28:05.938 [DEBUG] [Thread-11559] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:28:06.000 [DEBUG] [Thread-11559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:28:06.000 [DEBUG] [Thread-11559] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:28:06.001 [DEBUG] [Thread-11559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:28:06.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:28:06.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:28:06.060 [DEBUG] [Thread-11559] [transport.py] [_log()] userauth is OK
2025-12-25T12:28:06.060 [DEBUG] [Thread-11559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:28:06.060 [DEBUG] [Thread-11559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:28:06.060 [DEBUG] [Thread-11559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:28:06.060 [DEBUG] [Thread-11559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:28:06.078 [INFO] [Thread-11559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:28:06.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-25T12:28:06.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:28:06.941 [DEBUG] [Thread-11559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:28:06.941 [DEBUG] [Thread-11559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:28:06.989 [DEBUG] [Thread-11559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:28:06.990 [DEBUG] [Thread-11559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:28:06.999 [DEBUG] [Thread-11559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:28:07.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:28:07.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-25T12:28:07.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:28:07.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:28:07.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:28:07.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:28:07.036 [DEBUG] [Thread-11559] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:28:19.677 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:19.679 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:20.022 [DEBUG] [Thread-11561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:35.073 [DEBUG] [Thread-11562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:28:37.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:28:37.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:28:37.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:28:37.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 28, 9), 20.96, 25.51, 0.0, 32.66, 24.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:28:37.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:28:09
2025-12-25T12:28:37.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:28:38.084 [DEBUG] [Thread-11563] [transport.py] [_log()] starting thread (client mode): 0xbbfcd0f0
2025-12-25T12:28:38.084 [DEBUG] [Thread-11563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:28:38.105 [DEBUG] [Thread-11563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:28:38.105 [INFO] [Thread-11563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] client lang: <none>
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] server lang: <none>
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] kex follows: False
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] Compression: none
2025-12-25T12:28:38.108 [DEBUG] [Thread-11563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:28:38.124 [DEBUG] [Thread-11563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:28:38.124 [DEBUG] [Thread-11563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:28:38.125 [DEBUG] [Thread-11563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:28:38.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:28:38.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:28:38.126 [DEBUG] [Thread-11563] [transport.py] [_log()] userauth is OK
2025-12-25T12:28:38.126 [DEBUG] [Thread-11563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:28:38.126 [DEBUG] [Thread-11563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:28:38.126 [DEBUG] [Thread-11563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:28:38.126 [DEBUG] [Thread-11563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:28:38.136 [INFO] [Thread-11563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:28:38.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:28:38.724 [DEBUG] [Thread-11563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:28:38.724 [DEBUG] [Thread-11563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:28:38.724 [DEBUG] [Thread-11563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:28:38.765 [DEBUG] [Thread-11563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:28:38.766 [DEBUG] [Thread-11563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:28:38.768 [DEBUG] [Thread-11563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:28:38.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:28:38.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:28:38.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:28:38.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:28:38.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:28:38.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:28:38.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.435826 -999.00  +24.90  40.06     31   +6.80 1 2 2 1 1   888    0 6.90 -507.22 ----- 40.1 40.1 311.8 44.4 29.2 -21.8 28.9 -19.9 28.5 -23.3 28.8 -21.8
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.435826
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:28:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:28:09', tmtdew=20.96, humidity=25.51, cloud=0.0, wind=32.66, temperature=24.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:27:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:28:38.789 [DEBUG] [Thread-11563] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:28:38.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-25T12:28:38.873 [DEBUG] [Thread-11566] [transport.py] [_log()] starting thread (client mode): 0xbbfce470
2025-12-25T12:28:38.873 [DEBUG] [Thread-11566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:28:38.888 [DEBUG] [Thread-11566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:28:38.888 [INFO] [Thread-11566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:28:38.895 [DEBUG] [Thread-11566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] client lang: <none>
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] server lang: <none>
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] kex follows: False
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] Compression: none
2025-12-25T12:28:38.896 [DEBUG] [Thread-11566] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:28:38.951 [DEBUG] [Thread-11566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:28:38.951 [DEBUG] [Thread-11566] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:28:38.951 [DEBUG] [Thread-11566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:28:38.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:28:38.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:28:39.008 [DEBUG] [Thread-11566] [transport.py] [_log()] userauth is OK
2025-12-25T12:28:39.008 [DEBUG] [Thread-11566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:28:39.008 [DEBUG] [Thread-11566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:28:39.008 [DEBUG] [Thread-11566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:28:39.008 [DEBUG] [Thread-11566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:28:39.023 [INFO] [Thread-11566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:28:39.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-25T12:28:39.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:28:39.850 [DEBUG] [Thread-11566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:28:39.850 [DEBUG] [Thread-11566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:28:39.898 [DEBUG] [Thread-11566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:28:39.898 [DEBUG] [Thread-11566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:28:39.908 [DEBUG] [Thread-11566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:28:39.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:28:39.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-25T12:28:39.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-25T12:28:39.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:28:39.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:28:39.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:28:39.944 [DEBUG] [Thread-11566] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:28:50.106 [DEBUG] [Thread-11568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:01.626 [DEBUG] [Thread-11569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:05.158 [DEBUG] [Thread-11570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:09.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:29:09.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:29:09.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-25T12:29:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 28, 42), 20.72, 25.91, 0.0, 22.6, 24.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:29:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:28:42
2025-12-25T12:29:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:29:10.938 [DEBUG] [Thread-11571] [transport.py] [_log()] starting thread (client mode): 0xb95782e0
2025-12-25T12:29:10.938 [DEBUG] [Thread-11571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:29:10.957 [DEBUG] [Thread-11571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:29:10.957 [INFO] [Thread-11571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:29:10.961 [DEBUG] [Thread-11571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] client lang: <none>
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] server lang: <none>
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] kex follows: False
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] Compression: none
2025-12-25T12:29:10.962 [DEBUG] [Thread-11571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:29:10.972 [DEBUG] [Thread-11571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:29:10.973 [DEBUG] [Thread-11571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:29:10.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:29:10.975 [DEBUG] [Thread-11571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:29:10.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:29:10.976 [DEBUG] [Thread-11571] [transport.py] [_log()] userauth is OK
2025-12-25T12:29:10.977 [DEBUG] [Thread-11571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:29:10.977 [DEBUG] [Thread-11571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:29:10.977 [DEBUG] [Thread-11571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:29:10.977 [DEBUG] [Thread-11571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:29:11.001 [INFO] [Thread-11571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:29:11.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:29:11.628 [DEBUG] [Thread-11571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:29:11.629 [DEBUG] [Thread-11571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:29:11.629 [DEBUG] [Thread-11571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:29:11.670 [DEBUG] [Thread-11571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:29:11.670 [DEBUG] [Thread-11571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:29:11.674 [DEBUG] [Thread-11571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:29:11.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:29:11.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:29:11.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:29:11.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:29:11.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:29:11.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:29:11.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:29:11.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:29:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:29:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.436521 -999.00  +24.60  19.05     31   +6.70 1 2 1 1 1   888    0 4.69 -556.21 ----- 19.1 19.1 309.2 30.4 28.9 -21.6 29.0 -14.8 28.3 -20.8 28.5 -22.2
2025-12-25T12:29:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:29:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:29:11.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.436521
2025-12-25T12:29:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:29:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:29:11.699 [DEBUG] [Thread-11571] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:29:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:29:11.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:29:11.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:29:11.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:28:42', tmtdew=20.72, humidity=25.91, cloud=0.0, wind=22.6, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:28:35.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:29:11.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-25T12:29:11.791 [DEBUG] [Thread-11574] [transport.py] [_log()] starting thread (client mode): 0xb957b670
2025-12-25T12:29:11.791 [DEBUG] [Thread-11574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:29:11.806 [DEBUG] [Thread-11574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:29:11.806 [INFO] [Thread-11574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:29:11.814 [DEBUG] [Thread-11574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:29:11.814 [DEBUG] [Thread-11574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] client lang: <none>
2025-12-25T12:29:11.815 [DEBUG] [Thread-11574] [transport.py] [_log()] server lang: <none>
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] kex follows: False
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] Compression: none
2025-12-25T12:29:11.816 [DEBUG] [Thread-11574] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:29:11.871 [DEBUG] [Thread-11574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:29:11.871 [DEBUG] [Thread-11574] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:29:11.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:29:11.872 [DEBUG] [Thread-11574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:29:11.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:29:11.927 [DEBUG] [Thread-11574] [transport.py] [_log()] userauth is OK
2025-12-25T12:29:11.927 [DEBUG] [Thread-11574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:29:11.927 [DEBUG] [Thread-11574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:29:11.927 [DEBUG] [Thread-11574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:29:11.928 [DEBUG] [Thread-11574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:29:11.951 [INFO] [Thread-11574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:29:11.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-25T12:29:11.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:29:12.789 [DEBUG] [Thread-11574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:29:12.789 [DEBUG] [Thread-11574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:29:12.837 [DEBUG] [Thread-11574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:29:12.837 [DEBUG] [Thread-11574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:29:12.845 [DEBUG] [Thread-11574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:29:12.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:29:12.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:29: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-25T12:29:12.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:29:12.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:29:12.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:29:12.876 [DEBUG] [Thread-11574] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:29:19.819 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:19.820 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:20.188 [DEBUG] [Thread-11576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:35.249 [DEBUG] [Thread-11577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:29:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:29:42.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:29:42.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-25T12:29:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 29, 14), 21.18, 25.22, 0.0, 25.12, 24.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:29:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:29:14
2025-12-25T12:29:43.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:29:43.853 [DEBUG] [Thread-11578] [transport.py] [_log()] starting thread (client mode): 0xb6be04c0
2025-12-25T12:29:43.853 [DEBUG] [Thread-11578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:29:43.874 [DEBUG] [Thread-11578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:29:43.874 [INFO] [Thread-11578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] client lang: <none>
2025-12-25T12:29:43.877 [DEBUG] [Thread-11578] [transport.py] [_log()] server lang: <none>
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] kex follows: False
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] Compression: none
2025-12-25T12:29:43.878 [DEBUG] [Thread-11578] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:29:43.895 [DEBUG] [Thread-11578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:29:43.895 [DEBUG] [Thread-11578] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:29:43.896 [DEBUG] [Thread-11578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:29:43.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:29:43.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:29:43.898 [DEBUG] [Thread-11578] [transport.py] [_log()] userauth is OK
2025-12-25T12:29:43.898 [DEBUG] [Thread-11578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:29:43.899 [DEBUG] [Thread-11578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:29:43.899 [DEBUG] [Thread-11578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:29:43.899 [DEBUG] [Thread-11578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:29:43.923 [INFO] [Thread-11578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:29:43.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:29:44.509 [DEBUG] [Thread-11578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:29:44.509 [DEBUG] [Thread-11578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:29:44.509 [DEBUG] [Thread-11578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:29:44.550 [DEBUG] [Thread-11578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:29:44.551 [DEBUG] [Thread-11578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:29:44.554 [DEBUG] [Thread-11578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:29:44.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:29:44.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:29:44.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:29:44.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:29:44.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:29:44.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:29:44.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:29:44.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:29:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:29:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.436868 -999.00  +24.50  21.88     31   +6.50 1 2 1 1 1   888    0 4.52 -567.06 ----- 21.9 21.9 321.2 31.0 29.5 -14.8 29.3 -16.6 28.8 -14.5 29.2 -15.4
2025-12-25T12:29:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:29:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:29:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.436868
2025-12-25T12:29:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:29:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:29:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:29:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:29:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:29:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:29:14', tmtdew=21.18, humidity=25.22, cloud=0.0, wind=25.12, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:29:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:29:44.577 [DEBUG] [Thread-11578] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:29:44.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-25T12:29:44.676 [DEBUG] [Thread-11581] [transport.py] [_log()] starting thread (client mode): 0xb9578220
2025-12-25T12:29:44.676 [DEBUG] [Thread-11581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:29:44.691 [DEBUG] [Thread-11581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:29:44.691 [INFO] [Thread-11581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:29:44.699 [DEBUG] [Thread-11581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:29:44.699 [DEBUG] [Thread-11581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] client lang: <none>
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] server lang: <none>
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] kex follows: False
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:29:44.700 [DEBUG] [Thread-11581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:29:44.701 [DEBUG] [Thread-11581] [transport.py] [_log()] Compression: none
2025-12-25T12:29:44.701 [DEBUG] [Thread-11581] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:29:44.756 [DEBUG] [Thread-11581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:29:44.756 [DEBUG] [Thread-11581] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:29:44.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:29:44.757 [DEBUG] [Thread-11581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:29:44.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:29:44.813 [DEBUG] [Thread-11581] [transport.py] [_log()] userauth is OK
2025-12-25T12:29:44.813 [DEBUG] [Thread-11581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:29:44.813 [DEBUG] [Thread-11581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:29:44.813 [DEBUG] [Thread-11581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:29:44.814 [DEBUG] [Thread-11581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:29:44.833 [INFO] [Thread-11581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:29:44.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-25T12:29:44.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:29:45.655 [DEBUG] [Thread-11581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:29:45.655 [DEBUG] [Thread-11581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:29:45.703 [DEBUG] [Thread-11581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:29:45.704 [DEBUG] [Thread-11581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:29:45.712 [DEBUG] [Thread-11581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:29:45.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:29:45.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:29:45.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-25T12:29:45.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:29:45.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:29:45.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:29:45.746 [DEBUG] [Thread-11581] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:29:50.284 [DEBUG] [Thread-11583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:01.676 [DEBUG] [Thread-11584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:05.333 [DEBUG] [Thread-11585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:15.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:30:15.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:30:15.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-25T12:30:16.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 29, 46), 21.92, 24.36, 0.0, 32.18, 25.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:30:16.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:29:46
2025-12-25T12:30:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:30:16.755 [DEBUG] [Thread-11586] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-25T12:30:16.755 [DEBUG] [Thread-11586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:30:16.776 [DEBUG] [Thread-11586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:30:16.776 [INFO] [Thread-11586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:30:16.779 [DEBUG] [Thread-11586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:30:16.779 [DEBUG] [Thread-11586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:30:16.779 [DEBUG] [Thread-11586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:30:16.779 [DEBUG] [Thread-11586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] client lang: <none>
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] server lang: <none>
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] kex follows: False
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:30:16.780 [DEBUG] [Thread-11586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:30:16.781 [DEBUG] [Thread-11586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:30:16.781 [DEBUG] [Thread-11586] [transport.py] [_log()] Compression: none
2025-12-25T12:30:16.781 [DEBUG] [Thread-11586] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:30:16.800 [DEBUG] [Thread-11586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:30:16.801 [DEBUG] [Thread-11586] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:30:16.801 [DEBUG] [Thread-11586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:30:16.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:30:16.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:30:16.804 [DEBUG] [Thread-11586] [transport.py] [_log()] userauth is OK
2025-12-25T12:30:16.804 [DEBUG] [Thread-11586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:30:16.804 [DEBUG] [Thread-11586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:30:16.804 [DEBUG] [Thread-11586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:30:16.804 [DEBUG] [Thread-11586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:30:16.829 [INFO] [Thread-11586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:30:16.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:30:17.470 [DEBUG] [Thread-11586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:30:17.470 [DEBUG] [Thread-11586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:30:17.470 [DEBUG] [Thread-11586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:30:17.512 [DEBUG] [Thread-11586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:30:17.512 [DEBUG] [Thread-11586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:30:17.516 [DEBUG] [Thread-11586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:30:17.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:30:17.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:30:17.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:30:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:30:17.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:30:17.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:30:17.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:30:17.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:30:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:30:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.437215 -999.00  +24.60  32.40     30   +6.20 1 2 2 1 1   888    0 3.11 -600.49 ----- 32.4 32.4 310.6 35.3 29.8 -16.0 29.4 -16.8 28.9 -15.7 29.4 -16.4
2025-12-25T12:30:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:30:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:30:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.437215
2025-12-25T12:30:17.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:30:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:30:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:30:17.542 [DEBUG] [Thread-11586] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:30:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:30:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:30:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:29:46', tmtdew=21.92, humidity=24.36, cloud=0.0, wind=32.18, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:29:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:30:17.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-25T12:30:17.636 [DEBUG] [Thread-11589] [transport.py] [_log()] starting thread (client mode): 0xb9579360
2025-12-25T12:30:17.636 [DEBUG] [Thread-11589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:30:17.652 [DEBUG] [Thread-11589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:30:17.652 [INFO] [Thread-11589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] client lang: <none>
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] server lang: <none>
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] kex follows: False
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:30:17.660 [DEBUG] [Thread-11589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:30:17.661 [DEBUG] [Thread-11589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:30:17.661 [DEBUG] [Thread-11589] [transport.py] [_log()] Compression: none
2025-12-25T12:30:17.661 [DEBUG] [Thread-11589] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:30:17.724 [DEBUG] [Thread-11589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:30:17.724 [DEBUG] [Thread-11589] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:30:17.725 [DEBUG] [Thread-11589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:30:17.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:30:17.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:30:17.783 [DEBUG] [Thread-11589] [transport.py] [_log()] userauth is OK
2025-12-25T12:30:17.783 [DEBUG] [Thread-11589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:30:17.784 [DEBUG] [Thread-11589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:30:17.784 [DEBUG] [Thread-11589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:30:17.784 [DEBUG] [Thread-11589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:30:17.803 [INFO] [Thread-11589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:30:17.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:30:17.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:30:18.623 [DEBUG] [Thread-11589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:30:18.623 [DEBUG] [Thread-11589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:30:18.671 [DEBUG] [Thread-11589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:30:18.671 [DEBUG] [Thread-11589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:30:18.681 [DEBUG] [Thread-11589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:30:18.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:30: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-25T12:30:18.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-25T12:30:18.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:30:18.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:30:18.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:30:18.726 [DEBUG] [Thread-11589] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:30:19.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:19.958 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:20.367 [DEBUG] [Thread-11591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:35.412 [DEBUG] [Thread-11592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:48.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:30:48.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:30:48.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-25T12:30:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 30, 18), 22.25, 23.89, 0.0, 27.56, 25.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:30:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:30:18
2025-12-25T12:30:49.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:30:49.717 [DEBUG] [Thread-11593] [transport.py] [_log()] starting thread (client mode): 0xb6be2a10
2025-12-25T12:30:49.717 [DEBUG] [Thread-11593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:30:49.736 [DEBUG] [Thread-11593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:30:49.736 [INFO] [Thread-11593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] client lang: <none>
2025-12-25T12:30:49.740 [DEBUG] [Thread-11593] [transport.py] [_log()] server lang: <none>
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] kex follows: False
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] Compression: none
2025-12-25T12:30:49.741 [DEBUG] [Thread-11593] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:30:49.760 [DEBUG] [Thread-11593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:30:49.761 [DEBUG] [Thread-11593] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:30:49.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:30:49.762 [DEBUG] [Thread-11593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:30:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:30:49.764 [DEBUG] [Thread-11593] [transport.py] [_log()] userauth is OK
2025-12-25T12:30:49.764 [DEBUG] [Thread-11593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:30:49.764 [DEBUG] [Thread-11593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:30:49.764 [DEBUG] [Thread-11593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:30:49.765 [DEBUG] [Thread-11593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:30:49.801 [INFO] [Thread-11593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:30:49.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:30:50.445 [DEBUG] [Thread-11595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:30:50.580 [DEBUG] [Thread-11593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:30:50.581 [DEBUG] [Thread-11593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:30:50.581 [DEBUG] [Thread-11593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:30:50.622 [DEBUG] [Thread-11593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:30:50.622 [DEBUG] [Thread-11593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:30:50.625 [DEBUG] [Thread-11593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:30:50.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:30:50.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:30:50.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:30:50.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:30:50.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:30:50.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:30:50.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:30:50.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:30:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:30:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.437562 -999.00  +25.00  22.85     26   +4.40 1 2 1 1 1   888    0 4.05 -592.30 ----- 22.9 22.9 293.8 35.9 29.9 -16.9 29.6 -16.4 29.0 -16.8 29.5 -16.7
2025-12-25T12:30:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:30:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:30:50.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.437562
2025-12-25T12:30:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:30:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:30:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:30:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:30:50.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:30:50.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:30:18', tmtdew=22.25, humidity=23.89, cloud=0.0, wind=27.56, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:30:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:30:50.645 [DEBUG] [Thread-11593] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:30:50.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:31:01.729 [DEBUG] [Thread-11597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:31:05.479 [DEBUG] [Thread-11598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:31:20.100 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:31:20.101 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:31:20.528 [DEBUG] [Thread-11599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:31:35.567 [DEBUG] [Thread-11600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:31:50.603 [DEBUG] [Thread-11601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:01.764 [DEBUG] [Thread-11602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:05.632 [DEBUG] [Thread-11603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:20.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:20.242 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:20.670 [DEBUG] [Thread-11604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:35.698 [DEBUG] [Thread-11605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:32:50.735 [DEBUG] [Thread-11606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:01.801 [DEBUG] [Thread-11607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:03.189 [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-25T12:33:05.775 [DEBUG] [Thread-11608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:20.380 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:20.381 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:20.805 [DEBUG] [Thread-11609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:33:33.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:33:33.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-25T12:33:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 32, 59), 25.32, 19.02, 0.0, 26.32, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:33:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:32:59
2025-12-25T12:33:34.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:33:34.213 [DEBUG] [Thread-11610] [transport.py] [_log()] starting thread (client mode): 0xb6b14640
2025-12-25T12:33:34.213 [DEBUG] [Thread-11610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:33:34.232 [DEBUG] [Thread-11610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:33:34.233 [INFO] [Thread-11610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:33:34.235 [DEBUG] [Thread-11610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:33:34.235 [DEBUG] [Thread-11610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:33:34.235 [DEBUG] [Thread-11610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:33:34.235 [DEBUG] [Thread-11610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:33:34.235 [DEBUG] [Thread-11610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:33:34.235 [DEBUG] [Thread-11610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] client lang: <none>
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] server lang: <none>
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] kex follows: False
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] Compression: none
2025-12-25T12:33:34.236 [DEBUG] [Thread-11610] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:33:34.252 [DEBUG] [Thread-11610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:33:34.253 [DEBUG] [Thread-11610] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:33:34.253 [DEBUG] [Thread-11610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:33:34.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:33:34.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:33:34.255 [DEBUG] [Thread-11610] [transport.py] [_log()] userauth is OK
2025-12-25T12:33:34.256 [DEBUG] [Thread-11610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:33:34.256 [DEBUG] [Thread-11610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:33:34.256 [DEBUG] [Thread-11610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:33:34.256 [DEBUG] [Thread-11610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:33:34.282 [INFO] [Thread-11610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:33:34.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:33:34.937 [DEBUG] [Thread-11610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:33:34.937 [DEBUG] [Thread-11610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:33:34.938 [DEBUG] [Thread-11610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:33:34.978 [DEBUG] [Thread-11610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:33:34.978 [DEBUG] [Thread-11610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:33:34.982 [DEBUG] [Thread-11610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:33:34.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:33:34.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:33:34.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:33:34.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:33:35.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:33:35.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:33:35.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:33:35.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:33:35.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:33:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.439646 -999.00  +26.00  27.64     23   +3.20 1 2 1 1 1   888    0 9.90 -385.68 ----- 27.6 27.6 313.8 38.6 30.9 -19.9 30.2 -20.2 29.7 -19.9 30.4 -19.2
2025-12-25T12:33:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:33:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:33:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.439646
2025-12-25T12:33:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:33:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:33:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:33:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:33:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:33:35.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:32:59', tmtdew=25.32, humidity=19.02, cloud=0.0, wind=26.32, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:33:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:33:35.010 [DEBUG] [Thread-11610] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:33:35.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:33:35.104 [DEBUG] [Thread-11613] [transport.py] [_log()] starting thread (client mode): 0xb9578af0
2025-12-25T12:33:35.104 [DEBUG] [Thread-11613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:33:35.118 [DEBUG] [Thread-11613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:33:35.119 [INFO] [Thread-11613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:33:35.126 [DEBUG] [Thread-11613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:33:35.126 [DEBUG] [Thread-11613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] client lang: <none>
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] server lang: <none>
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] kex follows: False
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] Compression: none
2025-12-25T12:33:35.127 [DEBUG] [Thread-11613] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:33:35.186 [DEBUG] [Thread-11613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:33:35.187 [DEBUG] [Thread-11613] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:33:35.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:33:35.188 [DEBUG] [Thread-11613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:33:35.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:33:35.244 [DEBUG] [Thread-11613] [transport.py] [_log()] userauth is OK
2025-12-25T12:33:35.245 [DEBUG] [Thread-11613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:33:35.245 [DEBUG] [Thread-11613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:33:35.245 [DEBUG] [Thread-11613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:33:35.245 [DEBUG] [Thread-11613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:33:35.263 [INFO] [Thread-11613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:33:35.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-25T12:33:35.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:33:35.838 [DEBUG] [Thread-11615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:33:36.089 [DEBUG] [Thread-11613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:33:36.089 [DEBUG] [Thread-11613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:33:36.137 [DEBUG] [Thread-11613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:33:36.137 [DEBUG] [Thread-11613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:33:36.147 [DEBUG] [Thread-11613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:33:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:33:36.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:33:36.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:33:36.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:33:36.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:33:36.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:33:36.184 [DEBUG] [Thread-11613] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:33:50.882 [DEBUG] [Thread-11616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:01.849 [DEBUG] [Thread-11617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:05.913 [DEBUG] [Thread-11618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:06.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:34:06.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:34:06.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-25T12:34:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 34, 3), 25.09, 19.27, 0.0, 18.26, 25.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:34:06.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:34:03
2025-12-25T12:34:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:34:07.205 [DEBUG] [Thread-11619] [transport.py] [_log()] starting thread (client mode): 0xb6be1000
2025-12-25T12:34:07.205 [DEBUG] [Thread-11619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:34:07.226 [DEBUG] [Thread-11619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:34:07.226 [INFO] [Thread-11619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:34:07.229 [DEBUG] [Thread-11619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:34:07.229 [DEBUG] [Thread-11619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] client lang: <none>
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] server lang: <none>
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] kex follows: False
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:34:07.230 [DEBUG] [Thread-11619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:34:07.231 [DEBUG] [Thread-11619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:34:07.231 [DEBUG] [Thread-11619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:34:07.231 [DEBUG] [Thread-11619] [transport.py] [_log()] Compression: none
2025-12-25T12:34:07.231 [DEBUG] [Thread-11619] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:34:07.248 [DEBUG] [Thread-11619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:34:07.249 [DEBUG] [Thread-11619] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:34:07.249 [DEBUG] [Thread-11619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:34:07.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:34:07.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:34:07.251 [DEBUG] [Thread-11619] [transport.py] [_log()] userauth is OK
2025-12-25T12:34:07.251 [DEBUG] [Thread-11619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:34:07.251 [DEBUG] [Thread-11619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:34:07.251 [DEBUG] [Thread-11619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:34:07.251 [DEBUG] [Thread-11619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:34:07.274 [INFO] [Thread-11619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:34:07.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:34:08.074 [DEBUG] [Thread-11619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:34:08.074 [DEBUG] [Thread-11619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:34:08.074 [DEBUG] [Thread-11619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:34:08.115 [DEBUG] [Thread-11619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:34:08.115 [DEBUG] [Thread-11619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:34:08.117 [DEBUG] [Thread-11619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:34:08.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:34:08.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:34:08.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:34:08.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:34:08.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:34:08.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:34:08.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:34:08.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:34:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:34:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.439993 -999.00  +26.20  31.10     20   +2.10 1 2 2 1 1   888    0 11.07 -336.80 ----- 31.1 31.1 312.2 39.2 31.1 -21.1 30.4 -20.8 29.9 -19.2 30.4 -19.8
2025-12-25T12:34:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:34:08.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:34:08.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.439993
2025-12-25T12:34:08.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:34:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:34:08.142 [DEBUG] [Thread-11619] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:34:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:34:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:34:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:34:08.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:34:03', tmtdew=25.09, humidity=19.27, cloud=0.0, wind=18.26, temperature=25.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:33:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:34:08.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-25T12:34:08.234 [DEBUG] [Thread-11622] [transport.py] [_log()] starting thread (client mode): 0xb6b2ae30
2025-12-25T12:34:08.234 [DEBUG] [Thread-11622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:34:08.252 [DEBUG] [Thread-11622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:34:08.252 [INFO] [Thread-11622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:34:08.260 [DEBUG] [Thread-11622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:34:08.260 [DEBUG] [Thread-11622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:34:08.260 [DEBUG] [Thread-11622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:34:08.260 [DEBUG] [Thread-11622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:08.260 [DEBUG] [Thread-11622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:08.260 [DEBUG] [Thread-11622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] client lang: <none>
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] server lang: <none>
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] kex follows: False
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] Compression: none
2025-12-25T12:34:08.261 [DEBUG] [Thread-11622] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:34:08.318 [DEBUG] [Thread-11622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:34:08.319 [DEBUG] [Thread-11622] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:34:08.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:34:08.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:34:08.320 [DEBUG] [Thread-11622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:34:08.379 [DEBUG] [Thread-11622] [transport.py] [_log()] userauth is OK
2025-12-25T12:34:08.380 [DEBUG] [Thread-11622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:34:08.380 [DEBUG] [Thread-11622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:34:08.380 [DEBUG] [Thread-11622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:34:08.380 [DEBUG] [Thread-11622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:34:08.398 [INFO] [Thread-11622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:34:08.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-25T12:34:08.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:34:09.236 [DEBUG] [Thread-11622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:34:09.237 [DEBUG] [Thread-11622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:34:09.285 [DEBUG] [Thread-11622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:34:09.286 [DEBUG] [Thread-11622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:34:09.295 [DEBUG] [Thread-11622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:34:09.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:34:09.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-25T12:34: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-25T12:34:09.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:34:09.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:34:09.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:34:09.338 [DEBUG] [Thread-11622] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:34:20.521 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:20.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:20.947 [DEBUG] [Thread-11624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:35.993 [DEBUG] [Thread-11625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:34:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:34:39.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:34:39.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:34:40.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 34, 35), 27.04, 16.61, 0.0, 28.64, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:34:40.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:34:35
2025-12-25T12:34:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:34:40.328 [DEBUG] [Thread-11626] [transport.py] [_log()] starting thread (client mode): 0xb6be19f0
2025-12-25T12:34:40.328 [DEBUG] [Thread-11626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:34:40.348 [DEBUG] [Thread-11626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:34:40.348 [INFO] [Thread-11626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:34:40.351 [DEBUG] [Thread-11626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] client lang: <none>
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] server lang: <none>
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] kex follows: False
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] Compression: none
2025-12-25T12:34:40.352 [DEBUG] [Thread-11626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:34:40.368 [DEBUG] [Thread-11626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:34:40.369 [DEBUG] [Thread-11626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:34:40.370 [DEBUG] [Thread-11626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:34:40.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:34:40.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:34:40.371 [DEBUG] [Thread-11626] [transport.py] [_log()] userauth is OK
2025-12-25T12:34:40.372 [DEBUG] [Thread-11626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:34:40.372 [DEBUG] [Thread-11626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:34:40.372 [DEBUG] [Thread-11626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:34:40.372 [DEBUG] [Thread-11626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:34:40.391 [INFO] [Thread-11626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:34:40.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:34:41.025 [DEBUG] [Thread-11626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:34:41.025 [DEBUG] [Thread-11626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:34:41.026 [DEBUG] [Thread-11626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:34:41.066 [DEBUG] [Thread-11626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:34:41.066 [DEBUG] [Thread-11626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:34:41.070 [DEBUG] [Thread-11626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:34:41.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:34:41.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:34:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:34:41.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:34:41.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:34:41.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:34:41.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:34:41.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:34:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:34:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.440340 -999.00  +25.30  35.17     22   +2.20 1 2 2 1 1   888    0 11.68 -318.91 ----- 35.2 35.2 309.2 41.5 31.1 -22.4 30.3 -21.1 29.9 -20.3 30.4 -20.6
2025-12-25T12:34:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:34:41.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:34:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.440340
2025-12-25T12:34:41.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:34:41.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:34:41.097 [DEBUG] [Thread-11626] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:34:41.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:34:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:34:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:34:41.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:34:35', tmtdew=27.04, humidity=16.61, cloud=0.0, wind=28.64, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:34:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:34:41.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-25T12:34:41.186 [DEBUG] [Thread-11629] [transport.py] [_log()] starting thread (client mode): 0xb6be2f80
2025-12-25T12:34:41.186 [DEBUG] [Thread-11629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:34:41.200 [DEBUG] [Thread-11629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:34:41.200 [INFO] [Thread-11629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:34:41.208 [DEBUG] [Thread-11629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] client lang: <none>
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] server lang: <none>
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] kex follows: False
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:34:41.209 [DEBUG] [Thread-11629] [transport.py] [_log()] Compression: none
2025-12-25T12:34:41.210 [DEBUG] [Thread-11629] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:34:41.267 [DEBUG] [Thread-11629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:34:41.268 [DEBUG] [Thread-11629] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:34:41.268 [DEBUG] [Thread-11629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:34:41.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:34:41.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:34:41.324 [DEBUG] [Thread-11629] [transport.py] [_log()] userauth is OK
2025-12-25T12:34:41.324 [DEBUG] [Thread-11629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:34:41.324 [DEBUG] [Thread-11629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:34:41.324 [DEBUG] [Thread-11629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:34:41.325 [DEBUG] [Thread-11629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:34:41.349 [INFO] [Thread-11629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:34:41.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-25T12:34:41.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:34:42.149 [DEBUG] [Thread-11629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:34:42.149 [DEBUG] [Thread-11629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:34:42.197 [DEBUG] [Thread-11629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:34:42.198 [DEBUG] [Thread-11629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:34:42.207 [DEBUG] [Thread-11629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:34:42.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:34:42.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-25T12:34:42.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-25T12:34:42.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:34:42.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:34:42.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:34:42.252 [DEBUG] [Thread-11629] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:34:51.026 [DEBUG] [Thread-11631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:01.894 [DEBUG] [Thread-11632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:06.081 [DEBUG] [Thread-11633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:12.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:35:12.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:35:12.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-25T12:35:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 35, 7), 26.71, 16.99, 0.0, 24.61, 25.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:35:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:35:07
2025-12-25T12:35:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:35:13.247 [DEBUG] [Thread-11634] [transport.py] [_log()] starting thread (client mode): 0xb6be3be0
2025-12-25T12:35:13.247 [DEBUG] [Thread-11634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:35:13.268 [DEBUG] [Thread-11634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:35:13.269 [INFO] [Thread-11634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:35:13.272 [DEBUG] [Thread-11634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:35:13.272 [DEBUG] [Thread-11634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:35:13.272 [DEBUG] [Thread-11634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:35:13.272 [DEBUG] [Thread-11634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] client lang: <none>
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] server lang: <none>
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] kex follows: False
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:35:13.273 [DEBUG] [Thread-11634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:35:13.274 [DEBUG] [Thread-11634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:35:13.274 [DEBUG] [Thread-11634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:35:13.274 [DEBUG] [Thread-11634] [transport.py] [_log()] Compression: none
2025-12-25T12:35:13.274 [DEBUG] [Thread-11634] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:35:13.294 [DEBUG] [Thread-11634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:35:13.295 [DEBUG] [Thread-11634] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:35:13.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:35:13.297 [DEBUG] [Thread-11634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:35:13.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:35:13.299 [DEBUG] [Thread-11634] [transport.py] [_log()] userauth is OK
2025-12-25T12:35:13.299 [DEBUG] [Thread-11634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:35:13.299 [DEBUG] [Thread-11634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:35:13.299 [DEBUG] [Thread-11634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:35:13.299 [DEBUG] [Thread-11634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:35:13.323 [INFO] [Thread-11634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:35:13.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:35:14.333 [DEBUG] [Thread-11634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:35:14.333 [DEBUG] [Thread-11634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:35:14.334 [DEBUG] [Thread-11634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:35:14.374 [DEBUG] [Thread-11634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:35:14.374 [DEBUG] [Thread-11634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:35:14.377 [DEBUG] [Thread-11634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:35:14.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:35:14.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:35:14.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:35:14.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:35:14.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:35:14.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:35:14.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:35:14.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:35:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:35:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.440687 -999.00  +24.50  20.75     23   +2.30 1 2 1 1 1   888    0 12.60 -270.83 ----- 20.8 20.8 298.8 33.6 30.9 -22.7 30.2 -21.4 29.7 -22.0 30.4 -21.3
2025-12-25T12:35:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:35:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:35:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.440687
2025-12-25T12:35:14.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:35:14.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:35:14.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:35:14.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:35:14.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:35:14.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:35:07', tmtdew=26.71, humidity=16.99, cloud=0.0, wind=24.61, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:34:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:35:14.404 [DEBUG] [Thread-11634] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:35:14.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-25T12:35:14.497 [DEBUG] [Thread-11637] [transport.py] [_log()] starting thread (client mode): 0xb6be1510
2025-12-25T12:35:14.497 [DEBUG] [Thread-11637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:35:14.511 [DEBUG] [Thread-11637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:35:14.512 [INFO] [Thread-11637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:35:14.519 [DEBUG] [Thread-11637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] client lang: <none>
2025-12-25T12:35:14.520 [DEBUG] [Thread-11637] [transport.py] [_log()] server lang: <none>
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] kex follows: False
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] Compression: none
2025-12-25T12:35:14.521 [DEBUG] [Thread-11637] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:35:14.578 [DEBUG] [Thread-11637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:35:14.579 [DEBUG] [Thread-11637] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:35:14.579 [DEBUG] [Thread-11637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:35:14.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:35:14.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:35:14.635 [DEBUG] [Thread-11637] [transport.py] [_log()] userauth is OK
2025-12-25T12:35:14.635 [DEBUG] [Thread-11637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:35:14.635 [DEBUG] [Thread-11637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:35:14.635 [DEBUG] [Thread-11637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:35:14.635 [DEBUG] [Thread-11637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:35:14.654 [INFO] [Thread-11637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:35:14.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-25T12:35:14.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:35:15.461 [DEBUG] [Thread-11637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:35:15.462 [DEBUG] [Thread-11637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:35:15.510 [DEBUG] [Thread-11637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:35:15.510 [DEBUG] [Thread-11637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:35:15.519 [DEBUG] [Thread-11637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:35:15.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:35:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:35:15.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:35:15.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:35:15.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:35:15.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:35:15.552 [DEBUG] [Thread-11637] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:35:20.660 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:20.662 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:21.114 [DEBUG] [Thread-11639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:36.178 [DEBUG] [Thread-11640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:35:45.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:35:45.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:35:45.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-25T12:35:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 35, 39), 26.05, 17.76, 0.0, 22.11, 25.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:35:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:35:39
2025-12-25T12:35:46.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:35:46.591 [DEBUG] [Thread-11641] [transport.py] [_log()] starting thread (client mode): 0xb957b0a0
2025-12-25T12:35:46.591 [DEBUG] [Thread-11641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:35:46.611 [DEBUG] [Thread-11641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:35:46.611 [INFO] [Thread-11641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] client lang: <none>
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] server lang: <none>
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] kex follows: False
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] Compression: none
2025-12-25T12:35:46.615 [DEBUG] [Thread-11641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:35:46.630 [DEBUG] [Thread-11641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:35:46.630 [DEBUG] [Thread-11641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:35:46.630 [DEBUG] [Thread-11641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:35:46.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:35:46.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:35:46.672 [DEBUG] [Thread-11641] [transport.py] [_log()] userauth is OK
2025-12-25T12:35:46.672 [DEBUG] [Thread-11641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:35:46.672 [DEBUG] [Thread-11641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:35:46.672 [DEBUG] [Thread-11641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:35:46.672 [DEBUG] [Thread-11641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:35:46.699 [INFO] [Thread-11641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:35:46.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:35:47.318 [DEBUG] [Thread-11641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:35:47.318 [DEBUG] [Thread-11641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:35:47.319 [DEBUG] [Thread-11641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:35:47.359 [DEBUG] [Thread-11641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:35:47.359 [DEBUG] [Thread-11641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:35:47.362 [DEBUG] [Thread-11641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:35:47.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:35:47.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:35:47.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:35:47.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:35:47.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:35:47.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:35:47.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.441034 -999.00  +24.60  20.22     23   +2.40 1 2 1 1 1   888    0 13.98 -225.94 ----- 20.2 20.2 312.8 30.5 30.9 -21.5 30.3 -22.4 29.7 -20.2 30.5 -21.1
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.441034
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:35:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:35:39', tmtdew=26.05, humidity=17.76, cloud=0.0, wind=22.11, temperature=25.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:35:05.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:35:47.381 [DEBUG] [Thread-11641] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:35:47.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:35:47.462 [DEBUG] [Thread-11644] [transport.py] [_log()] starting thread (client mode): 0xb6b2b4c0
2025-12-25T12:35:47.462 [DEBUG] [Thread-11644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:35:47.477 [DEBUG] [Thread-11644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:35:47.477 [INFO] [Thread-11644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] client lang: <none>
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] server lang: <none>
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] kex follows: False
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:35:47.485 [DEBUG] [Thread-11644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:35:47.486 [DEBUG] [Thread-11644] [transport.py] [_log()] Compression: none
2025-12-25T12:35:47.486 [DEBUG] [Thread-11644] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:35:47.548 [DEBUG] [Thread-11644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:35:47.548 [DEBUG] [Thread-11644] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:35:47.548 [DEBUG] [Thread-11644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:35:47.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:35:47.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:35:47.607 [DEBUG] [Thread-11644] [transport.py] [_log()] userauth is OK
2025-12-25T12:35:47.607 [DEBUG] [Thread-11644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:35:47.607 [DEBUG] [Thread-11644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:35:47.607 [DEBUG] [Thread-11644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:35:47.607 [DEBUG] [Thread-11644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:35:47.625 [INFO] [Thread-11644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:35:47.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-25T12:35:47.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:35:48.474 [DEBUG] [Thread-11644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:35:48.474 [DEBUG] [Thread-11644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:35:48.521 [DEBUG] [Thread-11644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:35:48.521 [DEBUG] [Thread-11644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:35:48.530 [DEBUG] [Thread-11644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:35:48.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:35:48.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-25T12:35:48.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-25T12:35:48.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:35:48.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:35:48.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:35:48.565 [DEBUG] [Thread-11644] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:35:51.212 [DEBUG] [Thread-11646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:01.944 [DEBUG] [Thread-11647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:06.262 [DEBUG] [Thread-11648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:36:18.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:36:18.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-25T12:36:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 36, 11), 25.31, 18.72, 0.0, 20.11, 25.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:36:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:36:11
2025-12-25T12:36:19.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:36:19.573 [DEBUG] [Thread-11649] [transport.py] [_log()] starting thread (client mode): 0xb6be3790
2025-12-25T12:36:19.573 [DEBUG] [Thread-11649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:36:19.595 [DEBUG] [Thread-11649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:36:19.595 [INFO] [Thread-11649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] client lang: <none>
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] server lang: <none>
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] kex follows: False
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:36:19.598 [DEBUG] [Thread-11649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:36:19.599 [DEBUG] [Thread-11649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:36:19.599 [DEBUG] [Thread-11649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:36:19.599 [DEBUG] [Thread-11649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:36:19.599 [DEBUG] [Thread-11649] [transport.py] [_log()] Compression: none
2025-12-25T12:36:19.599 [DEBUG] [Thread-11649] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:36:19.616 [DEBUG] [Thread-11649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:36:19.617 [DEBUG] [Thread-11649] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:36:19.617 [DEBUG] [Thread-11649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:36:19.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:36:19.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:36:19.619 [DEBUG] [Thread-11649] [transport.py] [_log()] userauth is OK
2025-12-25T12:36:19.619 [DEBUG] [Thread-11649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:36:19.619 [DEBUG] [Thread-11649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:36:19.619 [DEBUG] [Thread-11649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:36:19.619 [DEBUG] [Thread-11649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:36:19.643 [INFO] [Thread-11649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:36:19.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:36:20.452 [DEBUG] [Thread-11649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:36:20.452 [DEBUG] [Thread-11649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:36:20.453 [DEBUG] [Thread-11649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:36:20.494 [DEBUG] [Thread-11649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:36:20.494 [DEBUG] [Thread-11649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:36:20.496 [DEBUG] [Thread-11649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:36:20.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:36:20.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:36:20.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:36:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:36:20.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:36:20.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:36:20.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:36:20.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:36:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:36:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.441382 -999.00  +25.20  28.92     23   +3.00 1 2 1 1 1   888    0 14.86 -197.64 ----- 28.9 28.9 321.4 33.6 31.1 -21.6 30.4 -22.8 29.8 -21.2 30.6 -19.5
2025-12-25T12:36:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:36:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:36:20.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.441382
2025-12-25T12:36:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:36:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:36:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:36:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:36:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:36:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:36:11', tmtdew=25.31, humidity=18.72, cloud=0.0, wind=20.11, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:35:35.405', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:36:20.523 [DEBUG] [Thread-11649] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:36:20.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-25T12:36:20.614 [DEBUG] [Thread-11652] [transport.py] [_log()] starting thread (client mode): 0xb6b15ea0
2025-12-25T12:36:20.614 [DEBUG] [Thread-11652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:36:20.628 [DEBUG] [Thread-11652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:36:20.628 [INFO] [Thread-11652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:36:20.635 [DEBUG] [Thread-11652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] client lang: <none>
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] server lang: <none>
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] kex follows: False
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] Compression: none
2025-12-25T12:36:20.636 [DEBUG] [Thread-11652] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:36:20.696 [DEBUG] [Thread-11652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:36:20.697 [DEBUG] [Thread-11652] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:36:20.697 [DEBUG] [Thread-11652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:36:20.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:36:20.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:36:20.752 [DEBUG] [Thread-11652] [transport.py] [_log()] userauth is OK
2025-12-25T12:36:20.752 [DEBUG] [Thread-11652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:36:20.752 [DEBUG] [Thread-11652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:36:20.752 [DEBUG] [Thread-11652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:36:20.752 [DEBUG] [Thread-11652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:36:20.770 [INFO] [Thread-11652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:36:20.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-25T12:36:20.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:36:20.802 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:20.803 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:21.295 [DEBUG] [Thread-11654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:21.566 [DEBUG] [Thread-11652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:36:21.566 [DEBUG] [Thread-11652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:36:21.614 [DEBUG] [Thread-11652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:36:21.615 [DEBUG] [Thread-11652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:36:21.623 [DEBUG] [Thread-11652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:36:21.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:36:21.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-25T12:36: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') -> 00000000
2025-12-25T12:36:21.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:36:21.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:36:21.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:36:21.658 [DEBUG] [Thread-11652] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:36:36.340 [DEBUG] [Thread-11655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:51.379 [DEBUG] [Thread-11656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:36:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:36:51.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:36:51.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-25T12:36:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 36, 43), 25.36, 18.96, 0.0, 24.08, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:36:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:36:43
2025-12-25T12:36:52.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:36:52.647 [DEBUG] [Thread-11657] [transport.py] [_log()] starting thread (client mode): 0xb6b16080
2025-12-25T12:36:52.647 [DEBUG] [Thread-11657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:36:52.667 [DEBUG] [Thread-11657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:36:52.668 [INFO] [Thread-11657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] client lang: <none>
2025-12-25T12:36:52.671 [DEBUG] [Thread-11657] [transport.py] [_log()] server lang: <none>
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] kex follows: False
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] Compression: none
2025-12-25T12:36:52.672 [DEBUG] [Thread-11657] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:36:52.692 [DEBUG] [Thread-11657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:36:52.693 [DEBUG] [Thread-11657] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:36:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:36:52.694 [DEBUG] [Thread-11657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:36:52.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:36:52.736 [DEBUG] [Thread-11657] [transport.py] [_log()] userauth is OK
2025-12-25T12:36:52.737 [DEBUG] [Thread-11657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:36:52.737 [DEBUG] [Thread-11657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:36:52.737 [DEBUG] [Thread-11657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:36:52.737 [DEBUG] [Thread-11657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:36:52.771 [INFO] [Thread-11657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:36:52.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:36:53.364 [DEBUG] [Thread-11657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:36:53.365 [DEBUG] [Thread-11657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:36:53.365 [DEBUG] [Thread-11657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:36:53.405 [DEBUG] [Thread-11657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:36:53.405 [DEBUG] [Thread-11657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:36:53.409 [DEBUG] [Thread-11657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:36:53.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:36:53.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:36:53.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:36:53.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:36:53.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:36:53.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:36:53.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:36:53.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:36:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:36:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.441729 -999.00  +25.20  23.75     23   +2.80 1 2 1 1 1   888    0 15.74 -169.06 ----- 23.8 23.8 327.2 28.7 31.1 -22.6 30.3 -22.8 29.9 -20.5 30.6 -20.5
2025-12-25T12:36:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:36:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:36:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.441729
2025-12-25T12:36:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:36:53.436 [DEBUG] [Thread-11657] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:36:53.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:36:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:36:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:36:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:36:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:36:43', tmtdew=25.36, humidity=18.96, cloud=0.0, wind=24.08, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:36:05.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:36:53.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-25T12:36:53.529 [DEBUG] [Thread-11660] [transport.py] [_log()] starting thread (client mode): 0xb6b14a60
2025-12-25T12:36:53.529 [DEBUG] [Thread-11660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:36:53.545 [DEBUG] [Thread-11660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:36:53.545 [INFO] [Thread-11660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:36:53.552 [DEBUG] [Thread-11660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:36:53.552 [DEBUG] [Thread-11660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:36:53.552 [DEBUG] [Thread-11660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:36:53.552 [DEBUG] [Thread-11660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:53.552 [DEBUG] [Thread-11660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] client lang: <none>
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] server lang: <none>
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] kex follows: False
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:36:53.553 [DEBUG] [Thread-11660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:36:53.554 [DEBUG] [Thread-11660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:36:53.554 [DEBUG] [Thread-11660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:36:53.554 [DEBUG] [Thread-11660] [transport.py] [_log()] Compression: none
2025-12-25T12:36:53.554 [DEBUG] [Thread-11660] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:36:53.613 [DEBUG] [Thread-11660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:36:53.615 [DEBUG] [Thread-11660] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:36:53.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:36:53.616 [DEBUG] [Thread-11660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:36:53.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:36:53.671 [DEBUG] [Thread-11660] [transport.py] [_log()] userauth is OK
2025-12-25T12:36:53.671 [DEBUG] [Thread-11660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:36:53.671 [DEBUG] [Thread-11660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:36:53.671 [DEBUG] [Thread-11660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:36:53.671 [DEBUG] [Thread-11660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:36:53.691 [INFO] [Thread-11660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:36:53.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-25T12:36:53.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:36:54.523 [DEBUG] [Thread-11660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:36:54.524 [DEBUG] [Thread-11660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:36:54.572 [DEBUG] [Thread-11660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:36:54.572 [DEBUG] [Thread-11660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:36:54.581 [DEBUG] [Thread-11660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:36:54.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:36:54.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-25T12:36:54.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-25T12:36:54.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:36:54.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:36:54.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:36:54.618 [DEBUG] [Thread-11660] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:37:01.972 [DEBUG] [Thread-11662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:06.413 [DEBUG] [Thread-11663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:20.942 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:20.943 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:21.455 [DEBUG] [Thread-11664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:37:24.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:37:24.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-25T12:37:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 37, 15), 25.14, 19.26, 0.0, 19.41, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:37:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:37:15
2025-12-25T12:37:25.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:37:25.632 [DEBUG] [Thread-11665] [transport.py] [_log()] starting thread (client mode): 0xb9544880
2025-12-25T12:37:25.632 [DEBUG] [Thread-11665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:37:25.652 [DEBUG] [Thread-11665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:37:25.652 [INFO] [Thread-11665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:37:25.656 [DEBUG] [Thread-11665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:37:25.656 [DEBUG] [Thread-11665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:37:25.656 [DEBUG] [Thread-11665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:37:25.656 [DEBUG] [Thread-11665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] client lang: <none>
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] server lang: <none>
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] kex follows: False
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:37:25.657 [DEBUG] [Thread-11665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:37:25.658 [DEBUG] [Thread-11665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:37:25.658 [DEBUG] [Thread-11665] [transport.py] [_log()] Compression: none
2025-12-25T12:37:25.658 [DEBUG] [Thread-11665] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:37:25.676 [DEBUG] [Thread-11665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:37:25.676 [DEBUG] [Thread-11665] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:37:25.677 [DEBUG] [Thread-11665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:37:25.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:37:25.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:37:25.679 [DEBUG] [Thread-11665] [transport.py] [_log()] userauth is OK
2025-12-25T12:37:25.679 [DEBUG] [Thread-11665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:37:25.679 [DEBUG] [Thread-11665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:37:25.679 [DEBUG] [Thread-11665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:37:25.679 [DEBUG] [Thread-11665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:37:25.696 [INFO] [Thread-11665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:37:25.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:37:26.504 [DEBUG] [Thread-11665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:37:26.504 [DEBUG] [Thread-11665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:37:26.504 [DEBUG] [Thread-11665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:37:26.545 [DEBUG] [Thread-11665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:37:26.545 [DEBUG] [Thread-11665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:37:26.548 [DEBUG] [Thread-11665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:37:26.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:37:26.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:37:26.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:37:26.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:37:26.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:37:26.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:37:26.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:37:26.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:37:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:37:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.442076 -999.00  +25.40  10.86     23   +3.20 1 2 1 1 1   888    0 16.48 -136.28 ----- 10.9 10.9 4.0 24.1 31.2 -22.5 30.4 -21.8 30.0 -19.9 30.7 -20.1
2025-12-25T12:37:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:37:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:37:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.442076
2025-12-25T12:37:26.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:37:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:37:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:37:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:37:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:37:26.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:37:15', tmtdew=25.14, humidity=19.26, cloud=0.0, wind=19.41, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:36:35.366', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:37:26.574 [DEBUG] [Thread-11665] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:37:26.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-25T12:37:26.665 [DEBUG] [Thread-11668] [transport.py] [_log()] starting thread (client mode): 0xb9545c30
2025-12-25T12:37:26.665 [DEBUG] [Thread-11668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:37:26.679 [DEBUG] [Thread-11668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:37:26.680 [INFO] [Thread-11668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:37:26.687 [DEBUG] [Thread-11668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] client lang: <none>
2025-12-25T12:37:26.688 [DEBUG] [Thread-11668] [transport.py] [_log()] server lang: <none>
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] kex follows: False
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] Compression: none
2025-12-25T12:37:26.689 [DEBUG] [Thread-11668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:37:26.750 [DEBUG] [Thread-11668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:37:26.750 [DEBUG] [Thread-11668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:37:26.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:37:26.752 [DEBUG] [Thread-11668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:37:26.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:37:26.806 [DEBUG] [Thread-11668] [transport.py] [_log()] userauth is OK
2025-12-25T12:37:26.807 [DEBUG] [Thread-11668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:37:26.807 [DEBUG] [Thread-11668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:37:26.807 [DEBUG] [Thread-11668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:37:26.807 [DEBUG] [Thread-11668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:37:26.831 [INFO] [Thread-11668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:37:26.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-25T12:37:26.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:37:27.696 [DEBUG] [Thread-11668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:37:27.696 [DEBUG] [Thread-11668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:37:27.744 [DEBUG] [Thread-11668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:37:27.744 [DEBUG] [Thread-11668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:37:27.753 [DEBUG] [Thread-11668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:37:27.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:37:27.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-25T12:37: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') -> 00000000
2025-12-25T12:37:27.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:37:27.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:37:27.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:37:27.790 [DEBUG] [Thread-11668] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:37:36.490 [DEBUG] [Thread-11670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:51.539 [DEBUG] [Thread-11671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:37:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:37:57.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:37:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:37:58.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 37, 47), 24.75, 19.63, 0.0, 20.24, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:37:58.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:37:47
2025-12-25T12:37:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:37:58.770 [DEBUG] [Thread-11672] [transport.py] [_log()] starting thread (client mode): 0xb6be39a0
2025-12-25T12:37:58.770 [DEBUG] [Thread-11672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:37:58.791 [DEBUG] [Thread-11672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:37:58.791 [INFO] [Thread-11672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] client lang: <none>
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] server lang: <none>
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] kex follows: False
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:37:58.794 [DEBUG] [Thread-11672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:37:58.795 [DEBUG] [Thread-11672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:37:58.795 [DEBUG] [Thread-11672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:37:58.795 [DEBUG] [Thread-11672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:37:58.795 [DEBUG] [Thread-11672] [transport.py] [_log()] Compression: none
2025-12-25T12:37:58.795 [DEBUG] [Thread-11672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:37:58.812 [DEBUG] [Thread-11672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:37:58.813 [DEBUG] [Thread-11672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:37:58.813 [DEBUG] [Thread-11672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:37:58.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:37:58.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:37:58.815 [DEBUG] [Thread-11672] [transport.py] [_log()] userauth is OK
2025-12-25T12:37:58.815 [DEBUG] [Thread-11672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:37:58.815 [DEBUG] [Thread-11672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:37:58.816 [DEBUG] [Thread-11672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:37:58.816 [DEBUG] [Thread-11672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:37:58.834 [INFO] [Thread-11672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:37:58.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:37:59.476 [DEBUG] [Thread-11672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:37:59.476 [DEBUG] [Thread-11672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:37:59.476 [DEBUG] [Thread-11672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:37:59.517 [DEBUG] [Thread-11672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:37:59.517 [DEBUG] [Thread-11672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:37:59.521 [DEBUG] [Thread-11672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:37:59.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:37:59.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:37:59.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:37:59.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:37:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:37:59.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:37:59.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:37:59.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:37:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:37:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.442770 -999.00  +25.30  12.94     24   +3.70 1 2 1 1 1   888    0 18.16 -93.07 ----- 12.9 12.9 331.6 21.1 31.2 -21.8 30.4 -22.6 30.1 -19.9 30.5 -19.9
2025-12-25T12:37:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:37:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:37:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.442770
2025-12-25T12:37:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:37:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:37:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:37:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:37:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:37:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:37:47', tmtdew=24.75, humidity=19.63, cloud=0.0, wind=20.24, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:37:35.328', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:37:59.550 [DEBUG] [Thread-11672] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:37:59.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:37:59.659 [DEBUG] [Thread-11675] [transport.py] [_log()] starting thread (client mode): 0xbbfcead0
2025-12-25T12:37:59.660 [DEBUG] [Thread-11675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:37:59.674 [DEBUG] [Thread-11675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:37:59.675 [INFO] [Thread-11675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:37:59.682 [DEBUG] [Thread-11675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] client lang: <none>
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] server lang: <none>
2025-12-25T12:37:59.683 [DEBUG] [Thread-11675] [transport.py] [_log()] kex follows: False
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] Compression: none
2025-12-25T12:37:59.684 [DEBUG] [Thread-11675] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:37:59.749 [DEBUG] [Thread-11675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:37:59.749 [DEBUG] [Thread-11675] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:37:59.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:37:59.750 [DEBUG] [Thread-11675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:37:59.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:37:59.811 [DEBUG] [Thread-11675] [transport.py] [_log()] userauth is OK
2025-12-25T12:37:59.811 [DEBUG] [Thread-11675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:37:59.811 [DEBUG] [Thread-11675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:37:59.811 [DEBUG] [Thread-11675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:37:59.811 [DEBUG] [Thread-11675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:37:59.838 [INFO] [Thread-11675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:37:59.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-25T12:37:59.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:38:00.678 [DEBUG] [Thread-11675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:38:00.678 [DEBUG] [Thread-11675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:38:00.725 [DEBUG] [Thread-11675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:38:00.726 [DEBUG] [Thread-11675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:38:00.734 [DEBUG] [Thread-11675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:38:00.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:38:00.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-25T12:38:00.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-25T12:38:00.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:38:00.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:38:00.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:38:00.772 [DEBUG] [Thread-11675] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:38:02.009 [DEBUG] [Thread-11677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:38:06.578 [DEBUG] [Thread-11678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:38:21.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:38:21.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:38:21.625 [DEBUG] [Thread-11679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:38:30.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:38:30.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:38:30.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-25T12:38:31.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 38, 19), 24.46, 20.04, 0.0, 17.49, 25.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:38:31.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:38:19
2025-12-25T12:38:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:38:31.758 [DEBUG] [Thread-11680] [transport.py] [_log()] starting thread (client mode): 0xb9546c50
2025-12-25T12:38:31.758 [DEBUG] [Thread-11680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:38:31.779 [DEBUG] [Thread-11680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:38:31.779 [INFO] [Thread-11680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] client lang: <none>
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] server lang: <none>
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] kex follows: False
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] Compression: none
2025-12-25T12:38:31.782 [DEBUG] [Thread-11680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:38:31.798 [DEBUG] [Thread-11680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:38:31.799 [DEBUG] [Thread-11680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:38:31.799 [DEBUG] [Thread-11680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:38:31.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:38:31.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:38:31.800 [DEBUG] [Thread-11680] [transport.py] [_log()] userauth is OK
2025-12-25T12:38:31.800 [DEBUG] [Thread-11680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:38:31.800 [DEBUG] [Thread-11680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:38:31.801 [DEBUG] [Thread-11680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:38:31.801 [DEBUG] [Thread-11680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:38:31.820 [INFO] [Thread-11680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:38:31.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:38:32.560 [DEBUG] [Thread-11680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:38:32.560 [DEBUG] [Thread-11680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:38:32.561 [DEBUG] [Thread-11680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:38:32.601 [DEBUG] [Thread-11680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:38:32.601 [DEBUG] [Thread-11680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:38:32.605 [DEBUG] [Thread-11680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:38:32.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:38:32.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:38:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:38:32.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:38:32.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:38:32.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:38:32.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:38:32.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:38:32.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:38:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.443118 -999.00  +25.90  16.47     23   +3.60 1 2 1 1 1   888    0 18.50 -71.37 ----- 16.5 16.5 310.8 21.6 31.4 -20.5 30.7 -20.9 30.3 -18.2 30.8 -18.6
2025-12-25T12:38:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:38:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:38:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.443118
2025-12-25T12:38:32.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:38:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:38:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:38:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:38:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:38:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:38:19', tmtdew=24.46, humidity=20.04, cloud=0.0, wind=17.49, temperature=25.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:38:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:38:32.635 [DEBUG] [Thread-11680] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:38:32.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-25T12:38:32.730 [DEBUG] [Thread-11683] [transport.py] [_log()] starting thread (client mode): 0xb9545570
2025-12-25T12:38:32.731 [DEBUG] [Thread-11683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:38:32.746 [DEBUG] [Thread-11683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:38:32.746 [INFO] [Thread-11683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:38:32.754 [DEBUG] [Thread-11683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:38:32.754 [DEBUG] [Thread-11683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] client lang: <none>
2025-12-25T12:38:32.755 [DEBUG] [Thread-11683] [transport.py] [_log()] server lang: <none>
2025-12-25T12:38:32.756 [DEBUG] [Thread-11683] [transport.py] [_log()] kex follows: False
2025-12-25T12:38:32.756 [DEBUG] [Thread-11683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:38:32.756 [DEBUG] [Thread-11683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:38:32.756 [DEBUG] [Thread-11683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:38:32.756 [DEBUG] [Thread-11683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:38:32.756 [DEBUG] [Thread-11683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:38:32.757 [DEBUG] [Thread-11683] [transport.py] [_log()] Compression: none
2025-12-25T12:38:32.758 [DEBUG] [Thread-11683] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:38:32.813 [DEBUG] [Thread-11683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:38:32.813 [DEBUG] [Thread-11683] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:38:32.814 [DEBUG] [Thread-11683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:38:32.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:38:32.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:38:32.873 [DEBUG] [Thread-11683] [transport.py] [_log()] userauth is OK
2025-12-25T12:38:32.873 [DEBUG] [Thread-11683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:38:32.873 [DEBUG] [Thread-11683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:38:32.873 [DEBUG] [Thread-11683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:38:32.873 [DEBUG] [Thread-11683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:38:32.892 [INFO] [Thread-11683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:38:32.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-25T12:38:32.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:38:33.687 [DEBUG] [Thread-11683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:38:33.687 [DEBUG] [Thread-11683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:38:33.735 [DEBUG] [Thread-11683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:38:33.736 [DEBUG] [Thread-11683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:38:33.745 [DEBUG] [Thread-11683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:38:33.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:38:33.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-25T12:38:33.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-25T12:38:33.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:38:33.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:38:33.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:38:33.786 [DEBUG] [Thread-11683] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:38:36.656 [DEBUG] [Thread-11685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:38:51.718 [DEBUG] [Thread-11686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:02.038 [DEBUG] [Thread-11687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:03.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:39:03.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:39:03.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-25T12:39:04.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 38, 51), 25.42, 18.96, 0.0, 12.09, 25.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:39:04.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:38:51
2025-12-25T12:39:04.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:39:04.776 [DEBUG] [Thread-11688] [transport.py] [_log()] starting thread (client mode): 0xb9547ac0
2025-12-25T12:39:04.776 [DEBUG] [Thread-11688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:39:04.797 [DEBUG] [Thread-11688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:39:04.797 [INFO] [Thread-11688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:39:04.800 [DEBUG] [Thread-11688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:39:04.800 [DEBUG] [Thread-11688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:39:04.800 [DEBUG] [Thread-11688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] client lang: <none>
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] server lang: <none>
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] kex follows: False
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] Compression: none
2025-12-25T12:39:04.801 [DEBUG] [Thread-11688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:39:04.818 [DEBUG] [Thread-11688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:39:04.819 [DEBUG] [Thread-11688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:39:04.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:39:04.820 [DEBUG] [Thread-11688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:39:04.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:39:04.822 [DEBUG] [Thread-11688] [transport.py] [_log()] userauth is OK
2025-12-25T12:39:04.822 [DEBUG] [Thread-11688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:39:04.822 [DEBUG] [Thread-11688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:39:04.822 [DEBUG] [Thread-11688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:39:04.822 [DEBUG] [Thread-11688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:39:04.845 [INFO] [Thread-11688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:39:04.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:39:05.450 [DEBUG] [Thread-11688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:39:05.450 [DEBUG] [Thread-11688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:39:05.451 [DEBUG] [Thread-11688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:39:05.491 [DEBUG] [Thread-11688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:39:05.491 [DEBUG] [Thread-11688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:39:05.494 [DEBUG] [Thread-11688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:39:05.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:39:05.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:39:05.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:39:05.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:39:05.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:39:05.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:39:05.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:39:05.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:39:05.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:39:05.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.443465 -999.00  +25.40  17.31     22   +2.70 1 2 1 1 1   888    0 19.40 -47.90 ----- 17.3 17.3 271.2 30.1 31.5 -20.7 30.7 -21.7 30.4 -19.1 31.0 -19.4
2025-12-25T12:39:05.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:39:05.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:39:05.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.443465
2025-12-25T12:39:05.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:39:05.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:39:05.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:39:05.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:39:05.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:39:05.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:38:51', tmtdew=25.42, humidity=18.96, cloud=0.0, wind=12.09, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:38:35.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:39:05.517 [DEBUG] [Thread-11688] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:39:05.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-25T12:39:05.615 [DEBUG] [Thread-11691] [transport.py] [_log()] starting thread (client mode): 0xb9547f70
2025-12-25T12:39:05.616 [DEBUG] [Thread-11691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:39:05.634 [DEBUG] [Thread-11691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:39:05.634 [INFO] [Thread-11691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:39:05.641 [DEBUG] [Thread-11691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] client lang: <none>
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] server lang: <none>
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] kex follows: False
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:39:05.642 [DEBUG] [Thread-11691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:39:05.643 [DEBUG] [Thread-11691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:39:05.643 [DEBUG] [Thread-11691] [transport.py] [_log()] Compression: none
2025-12-25T12:39:05.643 [DEBUG] [Thread-11691] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:39:05.703 [DEBUG] [Thread-11691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:39:05.703 [DEBUG] [Thread-11691] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:39:05.704 [DEBUG] [Thread-11691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:39:05.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:39:05.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:39:05.759 [DEBUG] [Thread-11691] [transport.py] [_log()] userauth is OK
2025-12-25T12:39:05.760 [DEBUG] [Thread-11691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:39:05.760 [DEBUG] [Thread-11691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:39:05.760 [DEBUG] [Thread-11691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:39:05.760 [DEBUG] [Thread-11691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:39:05.778 [INFO] [Thread-11691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:39:05.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:39:05.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:39:06.611 [DEBUG] [Thread-11691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:39:06.611 [DEBUG] [Thread-11691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:39:06.659 [DEBUG] [Thread-11691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:39:06.659 [DEBUG] [Thread-11691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:39:06.668 [DEBUG] [Thread-11691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:39:06.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:39:06.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:39:06.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-25T12:39:06.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:39:06.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:39:06.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:39:06.705 [DEBUG] [Thread-11691] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:39:06.750 [DEBUG] [Thread-11693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:21.223 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:21.224 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:21.803 [DEBUG] [Thread-11694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:36.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:39:36.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:39:36.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:39:36.841 [DEBUG] [Thread-11695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:39:37.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 39, 23), 25.62, 18.67, 0.0, 11.98, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:39:37.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:39:23
2025-12-25T12:39:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:39:37.758 [DEBUG] [Thread-11696] [transport.py] [_log()] starting thread (client mode): 0xb95448b0
2025-12-25T12:39:37.758 [DEBUG] [Thread-11696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:39:37.777 [DEBUG] [Thread-11696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:39:37.777 [INFO] [Thread-11696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] client lang: <none>
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] server lang: <none>
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] kex follows: False
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:39:37.780 [DEBUG] [Thread-11696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:39:37.781 [DEBUG] [Thread-11696] [transport.py] [_log()] Compression: none
2025-12-25T12:39:37.781 [DEBUG] [Thread-11696] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:39:37.797 [DEBUG] [Thread-11696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:39:37.797 [DEBUG] [Thread-11696] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:39:37.798 [DEBUG] [Thread-11696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:39:37.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:39:37.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:39:37.799 [DEBUG] [Thread-11696] [transport.py] [_log()] userauth is OK
2025-12-25T12:39:37.799 [DEBUG] [Thread-11696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:39:37.799 [DEBUG] [Thread-11696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:39:37.799 [DEBUG] [Thread-11696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:39:37.799 [DEBUG] [Thread-11696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:39:37.815 [INFO] [Thread-11696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:39:37.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:39:38.535 [DEBUG] [Thread-11696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:39:38.535 [DEBUG] [Thread-11696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:39:38.536 [DEBUG] [Thread-11696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:39:38.577 [DEBUG] [Thread-11696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:39:38.577 [DEBUG] [Thread-11696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:39:38.579 [DEBUG] [Thread-11696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:39:38.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:39:38.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:39:38.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:39:38.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:39:38.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:39:38.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:39:38.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.443812 -999.00  +25.10  21.13     22   +2.50 1 2 1 1 1   888    0 19.32 -25.20 ----- 21.1 21.1 295.2 24.4 31.3 -22.5 30.8 -22.3 30.1 -22.6 30.9 -19.0
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.443812
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:39:38.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:39:23', tmtdew=25.62, humidity=18.67, cloud=0.0, wind=11.98, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:39:05.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:39:38.598 [DEBUG] [Thread-11696] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:39:38.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-25T12:39:38.682 [DEBUG] [Thread-11699] [transport.py] [_log()] starting thread (client mode): 0xb957ada0
2025-12-25T12:39:38.682 [DEBUG] [Thread-11699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:39:38.696 [DEBUG] [Thread-11699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:39:38.696 [INFO] [Thread-11699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] client lang: <none>
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] server lang: <none>
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] kex follows: False
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:39:38.704 [DEBUG] [Thread-11699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:39:38.705 [DEBUG] [Thread-11699] [transport.py] [_log()] Compression: none
2025-12-25T12:39:38.705 [DEBUG] [Thread-11699] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:39:38.761 [DEBUG] [Thread-11699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:39:38.761 [DEBUG] [Thread-11699] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:39:38.761 [DEBUG] [Thread-11699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:39:38.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:39:38.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:39:38.818 [DEBUG] [Thread-11699] [transport.py] [_log()] userauth is OK
2025-12-25T12:39:38.818 [DEBUG] [Thread-11699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:39:38.818 [DEBUG] [Thread-11699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:39:38.818 [DEBUG] [Thread-11699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:39:38.818 [DEBUG] [Thread-11699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:39:38.833 [INFO] [Thread-11699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:39:38.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-25T12:39:38.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:39:39.648 [DEBUG] [Thread-11699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:39:39.648 [DEBUG] [Thread-11699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:39:39.695 [DEBUG] [Thread-11699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:39:39.695 [DEBUG] [Thread-11699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:39:39.704 [DEBUG] [Thread-11699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:39:39.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:39:39.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-25T12:39:39.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:39:39.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:39:39.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:39:39.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:39:39.736 [DEBUG] [Thread-11699] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:39:51.871 [DEBUG] [Thread-11701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:02.069 [DEBUG] [Thread-11702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:06.925 [DEBUG] [Thread-11703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:40:09.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:40:09.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-25T12:40:10.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 39, 55), 25.85, 18.15, 0.0, 17.94, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:40:10.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:39:55
2025-12-25T12:40:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:40:10.749 [DEBUG] [Thread-11704] [transport.py] [_log()] starting thread (client mode): 0xb95f08e0
2025-12-25T12:40:10.749 [DEBUG] [Thread-11704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:40:10.769 [DEBUG] [Thread-11704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:40:10.769 [INFO] [Thread-11704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:40:10.772 [DEBUG] [Thread-11704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:40:10.772 [DEBUG] [Thread-11704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] client lang: <none>
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] server lang: <none>
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] kex follows: False
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] Compression: none
2025-12-25T12:40:10.773 [DEBUG] [Thread-11704] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:40:10.791 [DEBUG] [Thread-11704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:40:10.791 [DEBUG] [Thread-11704] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:40:10.792 [DEBUG] [Thread-11704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:40:10.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:40:10.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:40:10.794 [DEBUG] [Thread-11704] [transport.py] [_log()] userauth is OK
2025-12-25T12:40:10.794 [DEBUG] [Thread-11704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:40:10.794 [DEBUG] [Thread-11704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:40:10.794 [DEBUG] [Thread-11704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:40:10.794 [DEBUG] [Thread-11704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:40:10.811 [INFO] [Thread-11704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:40:10.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:40:11.808 [DEBUG] [Thread-11704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:40:11.808 [DEBUG] [Thread-11704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:40:11.808 [DEBUG] [Thread-11704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:40:11.849 [DEBUG] [Thread-11704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:40:11.849 [DEBUG] [Thread-11704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:40:11.850 [DEBUG] [Thread-11704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:40:11.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:40:11.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:40:11.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:40:11.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:40:11.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:40:11.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:40:11.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:40:11.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:40:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:40:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.444159 -999.00  +25.20  21.48     22   +2.20 1 2 1 1 1   888    0 20.51 1.63 ----- 21.5 21.5 281.0 28.2 31.4 -24.5 30.8 -20.3 30.1 -22.3 30.9 -19.7
2025-12-25T12:40:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:40:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:40:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.444159
2025-12-25T12:40:11.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:40:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:40:11.873 [DEBUG] [Thread-11704] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:40:11.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:40:11.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:40:11.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:40:11.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:39:55', tmtdew=25.85, humidity=18.15, cloud=0.0, wind=17.94, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:39:35.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:40:11.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-25T12:40:11.971 [DEBUG] [Thread-11707] [transport.py] [_log()] starting thread (client mode): 0xbbfcfbb0
2025-12-25T12:40:11.971 [DEBUG] [Thread-11707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:40:11.985 [DEBUG] [Thread-11707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:40:11.985 [INFO] [Thread-11707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] client lang: <none>
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] server lang: <none>
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] kex follows: False
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:40:11.993 [DEBUG] [Thread-11707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:40:11.994 [DEBUG] [Thread-11707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:40:11.994 [DEBUG] [Thread-11707] [transport.py] [_log()] Compression: none
2025-12-25T12:40:11.994 [DEBUG] [Thread-11707] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:40:12.050 [DEBUG] [Thread-11707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:40:12.050 [DEBUG] [Thread-11707] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:40:12.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:40:12.052 [DEBUG] [Thread-11707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:40:12.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:40:12.106 [DEBUG] [Thread-11707] [transport.py] [_log()] userauth is OK
2025-12-25T12:40:12.106 [DEBUG] [Thread-11707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:40:12.106 [DEBUG] [Thread-11707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:40:12.106 [DEBUG] [Thread-11707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:40:12.106 [DEBUG] [Thread-11707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:40:12.124 [INFO] [Thread-11707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:40: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-25T12:40:12.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:40:12.977 [DEBUG] [Thread-11707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:40:12.978 [DEBUG] [Thread-11707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:40:13.026 [DEBUG] [Thread-11707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:40:13.026 [DEBUG] [Thread-11707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:40:13.035 [DEBUG] [Thread-11707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:40:13.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:40:13.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:40: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-25T12:40:13.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:40:13.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:40:13.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:40:13.072 [DEBUG] [Thread-11707] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:40:21.364 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:21.365 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:21.954 [DEBUG] [Thread-11709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:36.996 [DEBUG] [Thread-11710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:40:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:40:43.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:40:43.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-25T12:40:43.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 40, 28), 25.7, 18.37, 0.0, 14.05, 24.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:40:43.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:40:28
2025-12-25T12:40:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:40:44.088 [DEBUG] [Thread-11711] [transport.py] [_log()] starting thread (client mode): 0xb957b3d0
2025-12-25T12:40:44.088 [DEBUG] [Thread-11711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:40:44.109 [DEBUG] [Thread-11711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:40:44.109 [INFO] [Thread-11711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:40:44.112 [DEBUG] [Thread-11711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:40:44.112 [DEBUG] [Thread-11711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:40:44.112 [DEBUG] [Thread-11711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:40:44.112 [DEBUG] [Thread-11711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] client lang: <none>
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] server lang: <none>
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] kex follows: False
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] Compression: none
2025-12-25T12:40:44.113 [DEBUG] [Thread-11711] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:40:44.130 [DEBUG] [Thread-11711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:40:44.131 [DEBUG] [Thread-11711] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:40:44.131 [DEBUG] [Thread-11711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:40:44.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:40:44.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:40:44.133 [DEBUG] [Thread-11711] [transport.py] [_log()] userauth is OK
2025-12-25T12:40:44.134 [DEBUG] [Thread-11711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:40:44.134 [DEBUG] [Thread-11711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:40:44.134 [DEBUG] [Thread-11711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:40:44.134 [DEBUG] [Thread-11711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:40:44.157 [INFO] [Thread-11711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:40:44.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:40:44.759 [DEBUG] [Thread-11711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:40:44.759 [DEBUG] [Thread-11711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:40:44.760 [DEBUG] [Thread-11711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:40:44.799 [DEBUG] [Thread-11711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:40:44.800 [DEBUG] [Thread-11711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:40:44.803 [DEBUG] [Thread-11711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:40:44.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:40:44.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:40:44.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:40:44.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:40:44.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:40:44.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:40:44.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:40:44.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:40:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:40:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.444506 -999.00  +24.80  15.55     23   +2.60 1 2 1 1 1   888    0 20.87 23.24 ----- 15.6 15.6 302.0 21.0 31.5 -21.1 30.6 -25.0 30.2 -20.9 31.1 -19.8
2025-12-25T12:40:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:40:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:40:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.444506
2025-12-25T12:40:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:40:28', tmtdew=25.7, humidity=18.37, cloud=0.0, wind=14.05, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:40:05.318', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:40:44.829 [DEBUG] [Thread-11711] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:40:44.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:40:44.922 [DEBUG] [Thread-11714] [transport.py] [_log()] starting thread (client mode): 0xb95f1990
2025-12-25T12:40:44.922 [DEBUG] [Thread-11714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:40:44.942 [DEBUG] [Thread-11714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:40:44.942 [INFO] [Thread-11714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:40:44.950 [DEBUG] [Thread-11714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:40:44.950 [DEBUG] [Thread-11714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:40:44.951 [DEBUG] [Thread-11714] [transport.py] [_log()] client lang: <none>
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] server lang: <none>
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] kex follows: False
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:40:44.952 [DEBUG] [Thread-11714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:40:44.953 [DEBUG] [Thread-11714] [transport.py] [_log()] Compression: none
2025-12-25T12:40:44.953 [DEBUG] [Thread-11714] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:40:45.010 [DEBUG] [Thread-11714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:40:45.010 [DEBUG] [Thread-11714] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:40:45.011 [DEBUG] [Thread-11714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:40:45.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:40:45.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:40:45.069 [DEBUG] [Thread-11714] [transport.py] [_log()] userauth is OK
2025-12-25T12:40:45.069 [DEBUG] [Thread-11714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:40:45.069 [DEBUG] [Thread-11714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:40:45.069 [DEBUG] [Thread-11714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:40:45.069 [DEBUG] [Thread-11714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:40:45.088 [INFO] [Thread-11714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:40:45.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-25T12:40:45.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:40:45.925 [DEBUG] [Thread-11714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:40:45.926 [DEBUG] [Thread-11714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:40:45.974 [DEBUG] [Thread-11714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:40:45.975 [DEBUG] [Thread-11714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:40:45.984 [DEBUG] [Thread-11714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:40:45.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:40: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-25T12:40: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-25T12:40:46.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:40:46.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:40:46.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:40:46.020 [DEBUG] [Thread-11714] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:40:52.033 [DEBUG] [Thread-11716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:02.097 [DEBUG] [Thread-11717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:07.083 [DEBUG] [Thread-11718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:16.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:41:16.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:41: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-25T12:41:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 40, 28), 25.7, 18.37, 0.0, 14.05, 24.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:41:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:40:28
2025-12-25T12:41:16.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:41:17.021 [DEBUG] [Thread-11719] [transport.py] [_log()] starting thread (client mode): 0xb6be1450
2025-12-25T12:41:17.021 [DEBUG] [Thread-11719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:41:17.042 [DEBUG] [Thread-11719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:41:17.042 [INFO] [Thread-11719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] client lang: <none>
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] server lang: <none>
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] kex follows: False
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:41:17.046 [DEBUG] [Thread-11719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:41:17.047 [DEBUG] [Thread-11719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:41:17.047 [DEBUG] [Thread-11719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:41:17.047 [DEBUG] [Thread-11719] [transport.py] [_log()] Compression: none
2025-12-25T12:41:17.047 [DEBUG] [Thread-11719] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:41:17.065 [DEBUG] [Thread-11719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:41:17.065 [DEBUG] [Thread-11719] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:41:17.066 [DEBUG] [Thread-11719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:41:17.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:41:17.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:41:17.068 [DEBUG] [Thread-11719] [transport.py] [_log()] userauth is OK
2025-12-25T12:41:17.068 [DEBUG] [Thread-11719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:41:17.068 [DEBUG] [Thread-11719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:41:17.068 [DEBUG] [Thread-11719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:41:17.068 [DEBUG] [Thread-11719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:41:17.093 [INFO] [Thread-11719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:41:17.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:41:17.740 [DEBUG] [Thread-11719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:41:17.740 [DEBUG] [Thread-11719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:41:17.741 [DEBUG] [Thread-11719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:41:17.781 [DEBUG] [Thread-11719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:41:17.781 [DEBUG] [Thread-11719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:41:17.784 [DEBUG] [Thread-11719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:41:17.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:41:17.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:41:17.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:41:17.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:41:17.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:41:17.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:41:17.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:41:17.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:41:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:41:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.444854 -999.00  +24.60  11.42     24   +3.20 1 1 1 1 1   888    0 21.91 43.84 ----- 11.4 11.4 286.6 20.4 31.0 -26.8 30.2 -26.2 29.8 -24.4 30.4 -25.2
2025-12-25T12:41:17.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:41:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:41:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.444854
2025-12-25T12:41:17.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:41:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:41:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:41:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:41:17.810 [DEBUG] [Thread-11719] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:41:17.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:41:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:40:28', tmtdew=25.7, humidity=18.37, cloud=0.0, wind=14.05, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:40:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:41:17.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-25T12:41:17.912 [DEBUG] [Thread-11722] [transport.py] [_log()] starting thread (client mode): 0xb957abc0
2025-12-25T12:41:17.912 [DEBUG] [Thread-11722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:41:17.931 [DEBUG] [Thread-11722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:41:17.931 [INFO] [Thread-11722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:41:17.939 [DEBUG] [Thread-11722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:41:17.939 [DEBUG] [Thread-11722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:41:17.939 [DEBUG] [Thread-11722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:41:17.939 [DEBUG] [Thread-11722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] client lang: <none>
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] server lang: <none>
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] kex follows: False
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:41:17.940 [DEBUG] [Thread-11722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:41:17.942 [DEBUG] [Thread-11722] [transport.py] [_log()] Compression: none
2025-12-25T12:41:17.942 [DEBUG] [Thread-11722] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:41:17.996 [DEBUG] [Thread-11722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:41:17.997 [DEBUG] [Thread-11722] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:41:17.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:41:17.998 [DEBUG] [Thread-11722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:41:17.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:41:18.053 [DEBUG] [Thread-11722] [transport.py] [_log()] userauth is OK
2025-12-25T12:41:18.053 [DEBUG] [Thread-11722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:41:18.053 [DEBUG] [Thread-11722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:41:18.053 [DEBUG] [Thread-11722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:41:18.053 [DEBUG] [Thread-11722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:41:18.073 [INFO] [Thread-11722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:41:18.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-25T12:41:18.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:41:18.892 [DEBUG] [Thread-11722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:41:18.893 [DEBUG] [Thread-11722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:41:18.941 [DEBUG] [Thread-11722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:41:18.941 [DEBUG] [Thread-11722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:41:18.951 [DEBUG] [Thread-11722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:41:18.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:41:18.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-25T12:41:18.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:41:18.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:41:18.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:41:18.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:41:18.990 [DEBUG] [Thread-11722] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:41:21.504 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:21.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:22.121 [DEBUG] [Thread-11724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:37.172 [DEBUG] [Thread-11725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:41:48.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:41:48.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:41:48.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-25T12:41:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 41, 32), 25.08, 19.33, 0.0, 13.75, 25.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:41:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:41:32
2025-12-25T12:41:49.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:41:49.956 [DEBUG] [Thread-11726] [transport.py] [_log()] starting thread (client mode): 0xb95f3670
2025-12-25T12:41:49.956 [DEBUG] [Thread-11726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:41:49.976 [DEBUG] [Thread-11726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:41:49.977 [INFO] [Thread-11726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:41:49.979 [DEBUG] [Thread-11726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:41:49.979 [DEBUG] [Thread-11726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:41:49.979 [DEBUG] [Thread-11726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:41:49.979 [DEBUG] [Thread-11726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] client lang: <none>
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] server lang: <none>
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] kex follows: False
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:41:49.980 [DEBUG] [Thread-11726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:41:49.981 [DEBUG] [Thread-11726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:41:49.981 [DEBUG] [Thread-11726] [transport.py] [_log()] Compression: none
2025-12-25T12:41:49.981 [DEBUG] [Thread-11726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:41:49.998 [DEBUG] [Thread-11726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:41:49.998 [DEBUG] [Thread-11726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:41:49.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:41:49.999 [DEBUG] [Thread-11726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:41:50.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:41:50.002 [DEBUG] [Thread-11726] [transport.py] [_log()] userauth is OK
2025-12-25T12:41:50.002 [DEBUG] [Thread-11726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:41:50.002 [DEBUG] [Thread-11726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:41:50.002 [DEBUG] [Thread-11726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:41:50.002 [DEBUG] [Thread-11726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:41:50.027 [INFO] [Thread-11726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:41:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:41:50.603 [DEBUG] [Thread-11726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:41:50.603 [DEBUG] [Thread-11726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:41:50.604 [DEBUG] [Thread-11726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:41:50.644 [DEBUG] [Thread-11726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:41:50.644 [DEBUG] [Thread-11726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:41:50.650 [DEBUG] [Thread-11726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:41:50.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:41:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:41:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:41:50.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:41:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:41:50.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:41:50.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:41:50.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:41:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:41:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.445548 -999.00  +24.60  16.09     26   +3.80 1 2 1 1 1   888    0 23.79 92.54 ----- 16.1 16.1 286.4 22.4 30.7 -23.9 30.3 -20.4 29.6 -20.4 30.2 -21.0
2025-12-25T12:41:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:41:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:41:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.445548
2025-12-25T12:41:50.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:41:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:41:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:41:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:41:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:41:50.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:41:32', tmtdew=25.08, humidity=19.33, cloud=0.0, wind=13.75, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:41:35.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:41:50.677 [DEBUG] [Thread-11726] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:41:50.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-25T12:41:50.768 [DEBUG] [Thread-11729] [transport.py] [_log()] starting thread (client mode): 0xb95f2200
2025-12-25T12:41:50.769 [DEBUG] [Thread-11729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:41:50.783 [DEBUG] [Thread-11729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:41:50.784 [INFO] [Thread-11729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:41:50.791 [DEBUG] [Thread-11729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:41:50.791 [DEBUG] [Thread-11729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] client lang: <none>
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] server lang: <none>
2025-12-25T12:41:50.792 [DEBUG] [Thread-11729] [transport.py] [_log()] kex follows: False
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] Compression: none
2025-12-25T12:41:50.793 [DEBUG] [Thread-11729] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:41:50.858 [DEBUG] [Thread-11729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:41:50.859 [DEBUG] [Thread-11729] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:41:50.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:41:50.860 [DEBUG] [Thread-11729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:41:50.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:41:50.919 [DEBUG] [Thread-11729] [transport.py] [_log()] userauth is OK
2025-12-25T12:41:50.919 [DEBUG] [Thread-11729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:41:50.919 [DEBUG] [Thread-11729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:41:50.919 [DEBUG] [Thread-11729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:41:50.920 [DEBUG] [Thread-11729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:41:50.938 [INFO] [Thread-11729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:41:50.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-25T12:41:50.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:41:51.790 [DEBUG] [Thread-11729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:41:51.790 [DEBUG] [Thread-11729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:41:51.838 [DEBUG] [Thread-11729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:41:51.838 [DEBUG] [Thread-11729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:41:51.847 [DEBUG] [Thread-11729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:41:51.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:41: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')
2025-12-25T12:41:51.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-25T12:41:51.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:41:51.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:41:51.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:41:51.884 [DEBUG] [Thread-11729] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:41:52.204 [DEBUG] [Thread-11731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:02.142 [DEBUG] [Thread-11732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:07.255 [DEBUG] [Thread-11733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:21.643 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:21.645 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:42:21.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:42:21.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-25T12:42:22.288 [DEBUG] [Thread-11734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:22.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 42, 4), 25.08, 19.35, 0.0, 14.66, 25.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:42:22.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:42:04
2025-12-25T12:42:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:42:22.864 [DEBUG] [Thread-11735] [transport.py] [_log()] starting thread (client mode): 0xb6be2380
2025-12-25T12:42:22.864 [DEBUG] [Thread-11735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:42:22.884 [DEBUG] [Thread-11735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:42:22.885 [INFO] [Thread-11735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] client lang: <none>
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] server lang: <none>
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] kex follows: False
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] Compression: none
2025-12-25T12:42:22.888 [DEBUG] [Thread-11735] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:42:22.906 [DEBUG] [Thread-11735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:42:22.907 [DEBUG] [Thread-11735] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:42:22.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:42:22.908 [DEBUG] [Thread-11735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:42:22.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:42:22.910 [DEBUG] [Thread-11735] [transport.py] [_log()] userauth is OK
2025-12-25T12:42:22.910 [DEBUG] [Thread-11735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:42:22.910 [DEBUG] [Thread-11735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:42:22.910 [DEBUG] [Thread-11735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:42:22.910 [DEBUG] [Thread-11735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:42:22.935 [INFO] [Thread-11735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:42:22.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:42:23.558 [DEBUG] [Thread-11735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:42:23.558 [DEBUG] [Thread-11735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:42:23.558 [DEBUG] [Thread-11735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:42:23.599 [DEBUG] [Thread-11735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:42:23.599 [DEBUG] [Thread-11735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:42:23.602 [DEBUG] [Thread-11735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:42:23.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:42:23.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:42:23.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:42:23.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:42:23.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:42:23.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:42:23.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:42:23.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:42:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:42:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.445896 -999.00  +24.90  14.10     26   +4.20 1 2 1 1 1   888    0 23.46 115.98 ----- 14.1 14.1 272.9 26.2 31.1 -18.8 30.5 -22.7 29.9 -17.2 30.7 -18.5
2025-12-25T12:42:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:42:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:42:23.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.445896
2025-12-25T12:42:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:42:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:42:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:42:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:42:23.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:42:23.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:42:04', tmtdew=25.08, humidity=19.35, cloud=0.0, wind=14.66, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:42:05.414', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:42:23.630 [DEBUG] [Thread-11735] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:42:23.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-25T12:42:23.728 [DEBUG] [Thread-11738] [transport.py] [_log()] starting thread (client mode): 0xb6be10c0
2025-12-25T12:42:23.728 [DEBUG] [Thread-11738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:42:23.742 [DEBUG] [Thread-11738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:42:23.743 [INFO] [Thread-11738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:42:23.750 [DEBUG] [Thread-11738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:42:23.750 [DEBUG] [Thread-11738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:42:23.750 [DEBUG] [Thread-11738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:42:23.750 [DEBUG] [Thread-11738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] client lang: <none>
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] server lang: <none>
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] kex follows: False
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] Compression: none
2025-12-25T12:42:23.751 [DEBUG] [Thread-11738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:42:23.815 [DEBUG] [Thread-11738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:42:23.815 [DEBUG] [Thread-11738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:42:23.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:42:23.816 [DEBUG] [Thread-11738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:42:23.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:42:23.871 [DEBUG] [Thread-11738] [transport.py] [_log()] userauth is OK
2025-12-25T12:42:23.871 [DEBUG] [Thread-11738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:42:23.871 [DEBUG] [Thread-11738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:42:23.872 [DEBUG] [Thread-11738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:42:23.872 [DEBUG] [Thread-11738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:42:23.891 [INFO] [Thread-11738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:42:23.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-25T12:42:23.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:42:24.762 [DEBUG] [Thread-11738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:42:24.762 [DEBUG] [Thread-11738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:42:24.810 [DEBUG] [Thread-11738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:42:24.810 [DEBUG] [Thread-11738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:42:24.820 [DEBUG] [Thread-11738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:42:24.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:42:24.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:42: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') -> 00000000
2025-12-25T12:42:24.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:42:24.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:42:24.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:42:24.856 [DEBUG] [Thread-11738] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:42:37.320 [DEBUG] [Thread-11740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:52.357 [DEBUG] [Thread-11741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:42:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:42:54.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:42:54.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-25T12:42:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 42, 36), 24.37, 20.17, 0.0, 21.35, 25.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:42:55.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:42:36
2025-12-25T12:42:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:42:55.850 [DEBUG] [Thread-11742] [transport.py] [_log()] starting thread (client mode): 0xb95f1690
2025-12-25T12:42:55.850 [DEBUG] [Thread-11742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:42:55.870 [DEBUG] [Thread-11742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:42:55.870 [INFO] [Thread-11742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] client lang: <none>
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] server lang: <none>
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] kex follows: False
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] Compression: none
2025-12-25T12:42:55.874 [DEBUG] [Thread-11742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:42:55.889 [DEBUG] [Thread-11742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:42:55.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:42:55.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] userauth is OK
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:42:55.890 [DEBUG] [Thread-11742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:42:55.907 [INFO] [Thread-11742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:42:55.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:42:56.565 [DEBUG] [Thread-11742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:42:56.565 [DEBUG] [Thread-11742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:42:56.565 [DEBUG] [Thread-11742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:42:56.606 [DEBUG] [Thread-11742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:42:56.606 [DEBUG] [Thread-11742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:42:56.609 [DEBUG] [Thread-11742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:42:56.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:42:56.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:42:56.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:42:56.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:42:56.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:42:56.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:42:56.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.446243 -999.00  +25.00  18.27     25   +4.10 1 2 1 1 1   888    0 24.73 137.06 ----- 18.3 18.3 284.9 26.0 30.9 -25.1 30.5 -20.6 29.7 -21.9 30.4 -19.4
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.446243
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:42:56.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:42:36', tmtdew=24.37, humidity=20.17, cloud=0.0, wind=21.35, temperature=25.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:42:35.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:42:56.635 [DEBUG] [Thread-11742] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:42:56.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-25T12:42:56.717 [DEBUG] [Thread-11745] [transport.py] [_log()] starting thread (client mode): 0xb95f1c90
2025-12-25T12:42:56.718 [DEBUG] [Thread-11745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:42:56.733 [DEBUG] [Thread-11745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:42:56.733 [INFO] [Thread-11745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] client lang: <none>
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] server lang: <none>
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] kex follows: False
2025-12-25T12:42:56.740 [DEBUG] [Thread-11745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:42:56.741 [DEBUG] [Thread-11745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:42:56.741 [DEBUG] [Thread-11745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:42:56.741 [DEBUG] [Thread-11745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:42:56.741 [DEBUG] [Thread-11745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:42:56.741 [DEBUG] [Thread-11745] [transport.py] [_log()] Compression: none
2025-12-25T12:42:56.741 [DEBUG] [Thread-11745] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:42:56.796 [DEBUG] [Thread-11745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:42:56.796 [DEBUG] [Thread-11745] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:42:56.796 [DEBUG] [Thread-11745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:42:56.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:42:56.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:42:56.853 [DEBUG] [Thread-11745] [transport.py] [_log()] userauth is OK
2025-12-25T12:42:56.853 [DEBUG] [Thread-11745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:42:56.853 [DEBUG] [Thread-11745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:42:56.853 [DEBUG] [Thread-11745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:42:56.853 [DEBUG] [Thread-11745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:42:56.868 [INFO] [Thread-11745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:42:56.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:42:56.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:42:57.667 [DEBUG] [Thread-11745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:42:57.667 [DEBUG] [Thread-11745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:42:57.714 [DEBUG] [Thread-11745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:42:57.714 [DEBUG] [Thread-11745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:42:57.723 [DEBUG] [Thread-11745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:42:57.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:42:57.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:42:57.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-25T12:42:57.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:42:57.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:42:57.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:42:57.755 [DEBUG] [Thread-11745] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:43:02.194 [DEBUG] [Thread-11747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:43:07.388 [DEBUG] [Thread-11748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:43:21.785 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:43:21.786 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:43:22.436 [DEBUG] [Thread-11749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:43:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:43:27.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:43:27.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-25T12:43:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 43, 8), 24.56, 19.97, 0.0, 23.66, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:43:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:43:08
2025-12-25T12:43:28.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:43:28.757 [DEBUG] [Thread-11750] [transport.py] [_log()] starting thread (client mode): 0xb6b283d0
2025-12-25T12:43:28.757 [DEBUG] [Thread-11750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:43:28.774 [DEBUG] [Thread-11750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:43:28.774 [INFO] [Thread-11750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] client lang: <none>
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] server lang: <none>
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] kex follows: False
2025-12-25T12:43:28.778 [DEBUG] [Thread-11750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:43:28.779 [DEBUG] [Thread-11750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:43:28.779 [DEBUG] [Thread-11750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:43:28.779 [DEBUG] [Thread-11750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:43:28.779 [DEBUG] [Thread-11750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:43:28.779 [DEBUG] [Thread-11750] [transport.py] [_log()] Compression: none
2025-12-25T12:43:28.779 [DEBUG] [Thread-11750] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:43:28.797 [DEBUG] [Thread-11750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:43:28.798 [DEBUG] [Thread-11750] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:43:28.798 [DEBUG] [Thread-11750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:43:28.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:43:28.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:43:28.800 [DEBUG] [Thread-11750] [transport.py] [_log()] userauth is OK
2025-12-25T12:43:28.801 [DEBUG] [Thread-11750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:43:28.801 [DEBUG] [Thread-11750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:43:28.801 [DEBUG] [Thread-11750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:43:28.801 [DEBUG] [Thread-11750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:43:28.825 [INFO] [Thread-11750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:43:28.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:43:29.461 [DEBUG] [Thread-11750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:43:29.461 [DEBUG] [Thread-11750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:43:29.462 [DEBUG] [Thread-11750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:43:29.502 [DEBUG] [Thread-11750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:43:29.502 [DEBUG] [Thread-11750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:43:29.505 [DEBUG] [Thread-11750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:43:29.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:43:29.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:43:29.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:43:29.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:43:29.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:43:29.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:43:29.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.446590 -999.00  +25.20  22.78     25   +3.90 1 2 1 1 1   888    0 25.15 153.11 ----- 22.8 22.8 303.8 30.0 31.1 -20.0 30.6 -20.9 29.8 -19.1 30.6 -19.5
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.446590
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:43:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:43:08', tmtdew=24.56, humidity=19.97, cloud=0.0, wind=23.66, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:43:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:43:29.523 [DEBUG] [Thread-11750] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:43:29.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-25T12:43:29.604 [DEBUG] [Thread-11753] [transport.py] [_log()] starting thread (client mode): 0xb6b2b820
2025-12-25T12:43:29.604 [DEBUG] [Thread-11753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:43:29.620 [DEBUG] [Thread-11753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:43:29.620 [INFO] [Thread-11753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:43:29.628 [DEBUG] [Thread-11753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:43:29.628 [DEBUG] [Thread-11753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] client lang: <none>
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] server lang: <none>
2025-12-25T12:43:29.629 [DEBUG] [Thread-11753] [transport.py] [_log()] kex follows: False
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] Compression: none
2025-12-25T12:43:29.630 [DEBUG] [Thread-11753] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:43:29.689 [DEBUG] [Thread-11753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:43:29.690 [DEBUG] [Thread-11753] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:43:29.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:43:29.691 [DEBUG] [Thread-11753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:43:29.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:43:29.749 [DEBUG] [Thread-11753] [transport.py] [_log()] userauth is OK
2025-12-25T12:43:29.750 [DEBUG] [Thread-11753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:43:29.750 [DEBUG] [Thread-11753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:43:29.750 [DEBUG] [Thread-11753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:43:29.750 [DEBUG] [Thread-11753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:43:29.769 [INFO] [Thread-11753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:43:29.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-25T12:43:29.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:43:30.630 [DEBUG] [Thread-11753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:43:30.630 [DEBUG] [Thread-11753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:43:30.677 [DEBUG] [Thread-11753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:43:30.677 [DEBUG] [Thread-11753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:43:30.686 [DEBUG] [Thread-11753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:43:30.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:43:30.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:43:30.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:43:30.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:43:30.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:43:30.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:43:30.722 [DEBUG] [Thread-11753] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:43:37.471 [DEBUG] [Thread-11755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:43:52.524 [DEBUG] [Thread-11756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:00.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:44:00.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:44:00.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-25T12:44:01.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 43, 40), 25.36, 18.75, 0.0, 21.54, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:44:01.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:43:40
2025-12-25T12:44:01.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:44:01.732 [DEBUG] [Thread-11757] [transport.py] [_log()] starting thread (client mode): 0xb6b2b850
2025-12-25T12:44:01.733 [DEBUG] [Thread-11757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:44:01.758 [DEBUG] [Thread-11757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:44:01.758 [INFO] [Thread-11757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:44:01.761 [DEBUG] [Thread-11757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:44:01.761 [DEBUG] [Thread-11757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] client lang: <none>
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] server lang: <none>
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] kex follows: False
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] Compression: none
2025-12-25T12:44:01.762 [DEBUG] [Thread-11757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:44:01.777 [DEBUG] [Thread-11757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:44:01.777 [DEBUG] [Thread-11757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:44:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:44:01.777 [DEBUG] [Thread-11757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:44:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:44:01.778 [DEBUG] [Thread-11757] [transport.py] [_log()] userauth is OK
2025-12-25T12:44:01.778 [DEBUG] [Thread-11757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:44:01.778 [DEBUG] [Thread-11757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:44:01.778 [DEBUG] [Thread-11757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:44:01.778 [DEBUG] [Thread-11757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:44:01.787 [INFO] [Thread-11757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:44:01.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:44:02.247 [DEBUG] [Thread-11759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:02.388 [DEBUG] [Thread-11757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:44:02.388 [DEBUG] [Thread-11757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:44:02.389 [DEBUG] [Thread-11757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:44:02.429 [DEBUG] [Thread-11757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:44:02.430 [DEBUG] [Thread-11757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:44:02.433 [DEBUG] [Thread-11757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:44:02.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:44:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:44:02.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:44:02.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:44:02.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:44:02.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:44:02.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:44:02.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:44:02.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:44:02.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.446937 -999.00  +24.90  21.29     25   +3.80 1 2 1 1 1   888    0 25.94 166.30 ----- 21.3 21.3 305.2 32.2 31.1 -21.5 30.6 -22.0 29.9 -20.2 30.7 -20.0
2025-12-25T12:44:02.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:44:02.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:44:02.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.446937
2025-12-25T12:44:02.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:44:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:44:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:44:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:44:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:44:02.459 [DEBUG] [Thread-11757] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:44:02.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:43:40', tmtdew=25.36, humidity=18.75, cloud=0.0, wind=21.54, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:43:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:44:02.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-25T12:44:02.554 [DEBUG] [Thread-11761] [transport.py] [_log()] starting thread (client mode): 0xb6b2ba60
2025-12-25T12:44:02.554 [DEBUG] [Thread-11761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:44:02.569 [DEBUG] [Thread-11761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:44:02.569 [INFO] [Thread-11761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:02.577 [DEBUG] [Thread-11761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] client lang: <none>
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] server lang: <none>
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] kex follows: False
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:44:02.578 [DEBUG] [Thread-11761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:44:02.579 [DEBUG] [Thread-11761] [transport.py] [_log()] Compression: none
2025-12-25T12:44:02.579 [DEBUG] [Thread-11761] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:44:02.640 [DEBUG] [Thread-11761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:44:02.641 [DEBUG] [Thread-11761] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:44:02.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:44:02.642 [DEBUG] [Thread-11761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:44:02.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:44:02.701 [DEBUG] [Thread-11761] [transport.py] [_log()] userauth is OK
2025-12-25T12:44:02.701 [DEBUG] [Thread-11761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:44:02.701 [DEBUG] [Thread-11761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:44:02.702 [DEBUG] [Thread-11761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:44:02.702 [DEBUG] [Thread-11761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:44:02.721 [INFO] [Thread-11761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:44:02.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-25T12:44:02.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:44:03.550 [DEBUG] [Thread-11761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:44:03.550 [DEBUG] [Thread-11761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:44:03.598 [DEBUG] [Thread-11761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:44:03.598 [DEBUG] [Thread-11761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:44:03.608 [DEBUG] [Thread-11761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:44:03.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:44:03.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:44:03.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-25T12:44:03.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:44:03.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:44:03.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:44:03.644 [DEBUG] [Thread-11761] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:44:07.560 [DEBUG] [Thread-11763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:21.926 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:21.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:22.609 [DEBUG] [Thread-11764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:33.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:44:33.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:44:33.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-25T12:44:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 44, 12), 25.62, 18.5, 0.0, 21.81, 26.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:44:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:44:12
2025-12-25T12:44:34.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:44:34.641 [DEBUG] [Thread-11765] [transport.py] [_log()] starting thread (client mode): 0xb6b28070
2025-12-25T12:44:34.641 [DEBUG] [Thread-11765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:44:34.661 [DEBUG] [Thread-11765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:44:34.662 [INFO] [Thread-11765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:44:34.665 [DEBUG] [Thread-11765] [transport.py] [_log()] client lang: <none>
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] server lang: <none>
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] kex follows: False
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] Compression: none
2025-12-25T12:44:34.666 [DEBUG] [Thread-11765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:44:34.685 [DEBUG] [Thread-11765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:44:34.686 [DEBUG] [Thread-11765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:44:34.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:44:34.687 [DEBUG] [Thread-11765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:44:34.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:44:34.690 [DEBUG] [Thread-11765] [transport.py] [_log()] userauth is OK
2025-12-25T12:44:34.690 [DEBUG] [Thread-11765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:44:34.690 [DEBUG] [Thread-11765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:44:34.690 [DEBUG] [Thread-11765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:44:34.690 [DEBUG] [Thread-11765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:44:34.712 [INFO] [Thread-11765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:44:34.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:44:35.362 [DEBUG] [Thread-11765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:44:35.363 [DEBUG] [Thread-11765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:44:35.363 [DEBUG] [Thread-11765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:44:35.404 [DEBUG] [Thread-11765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:44:35.404 [DEBUG] [Thread-11765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:44:35.408 [DEBUG] [Thread-11765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:44:35.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:44:35.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:44:35.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:44:35.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:44:35.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:44:35.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:44:35.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:44:35.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:44:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:44:35.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.447284 -999.00  +24.90  18.42     25   +3.90 1 2 1 1 1   888    0 26.54 183.79 ----- 18.4 18.4 288.8 28.9 31.2 -21.5 30.7 -20.7 30.0 -20.2 30.7 -19.7
2025-12-25T12:44:35.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:44:35.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:44:35.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.447284
2025-12-25T12:44:35.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:44:35.433 [DEBUG] [Thread-11765] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:44:35.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:44:35.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:44:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:44:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:44:35.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:44:12', tmtdew=25.62, humidity=18.5, cloud=0.0, wind=21.81, temperature=26.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:44:05.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:44:35.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-25T12:44:35.536 [DEBUG] [Thread-11768] [transport.py] [_log()] starting thread (client mode): 0xb9544310
2025-12-25T12:44:35.536 [DEBUG] [Thread-11768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:44:35.551 [DEBUG] [Thread-11768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:44:35.551 [INFO] [Thread-11768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:44:35.558 [DEBUG] [Thread-11768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:44:35.558 [DEBUG] [Thread-11768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:44:35.558 [DEBUG] [Thread-11768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:44:35.558 [DEBUG] [Thread-11768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:35.558 [DEBUG] [Thread-11768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] client lang: <none>
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] server lang: <none>
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] kex follows: False
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] Compression: none
2025-12-25T12:44:35.559 [DEBUG] [Thread-11768] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:44:35.615 [DEBUG] [Thread-11768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:44:35.615 [DEBUG] [Thread-11768] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:44:35.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:44:35.617 [DEBUG] [Thread-11768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:44:35.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:44:35.676 [DEBUG] [Thread-11768] [transport.py] [_log()] userauth is OK
2025-12-25T12:44:35.676 [DEBUG] [Thread-11768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:44:35.676 [DEBUG] [Thread-11768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:44:35.676 [DEBUG] [Thread-11768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:44:35.676 [DEBUG] [Thread-11768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:44:35.694 [INFO] [Thread-11768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:44:35.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-25T12:44:35.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:44:36.542 [DEBUG] [Thread-11768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:44:36.542 [DEBUG] [Thread-11768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:44:36.590 [DEBUG] [Thread-11768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:44:36.591 [DEBUG] [Thread-11768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:44:36.600 [DEBUG] [Thread-11768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:44:36.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:44:36.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-25T12:44:36.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:44:36.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:44:36.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:44:36.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:44:36.636 [DEBUG] [Thread-11768] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:44:37.651 [DEBUG] [Thread-11770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:44:52.702 [DEBUG] [Thread-11771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:02.293 [DEBUG] [Thread-11772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:06.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:45:06.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:45:06.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-25T12:45:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 44, 44), 25.76, 18.39, 0.0, 29.8, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:45:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:44:44
2025-12-25T12:45:07.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:45:07.646 [DEBUG] [Thread-11773] [transport.py] [_log()] starting thread (client mode): 0xb6b29150
2025-12-25T12:45:07.647 [DEBUG] [Thread-11773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:45:07.664 [DEBUG] [Thread-11773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:45:07.664 [INFO] [Thread-11773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] client lang: <none>
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] server lang: <none>
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] kex follows: False
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] Compression: none
2025-12-25T12:45:07.666 [DEBUG] [Thread-11773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:45:07.680 [DEBUG] [Thread-11773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:45:07.680 [DEBUG] [Thread-11773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:45:07.681 [DEBUG] [Thread-11773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:45:07.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:45:07.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:45:07.682 [DEBUG] [Thread-11773] [transport.py] [_log()] userauth is OK
2025-12-25T12:45:07.683 [DEBUG] [Thread-11773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:45:07.683 [DEBUG] [Thread-11773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:45:07.683 [DEBUG] [Thread-11773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:45:07.683 [DEBUG] [Thread-11773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:45:07.708 [INFO] [Thread-11773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:45:07.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:45:07.733 [DEBUG] [Thread-11775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:08.453 [DEBUG] [Thread-11773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:45:08.454 [DEBUG] [Thread-11773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:45:08.454 [DEBUG] [Thread-11773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:45:08.494 [DEBUG] [Thread-11773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:45:08.494 [DEBUG] [Thread-11773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:45:08.497 [DEBUG] [Thread-11773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:45:08.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:45:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:45:08.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:45:08.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:45:08.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:45:08.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:45:08.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:45:08.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:45:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:45:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.447631 -999.00  +25.20  22.97     24   +3.70 1 2 1 1 1   888    0 26.12 179.36 ----- 23.0 23.0 283.6 32.6 31.4 -22.0 30.7 -22.2 30.1 -20.8 30.8 -20.7
2025-12-25T12:45:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:45:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:45:08.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.447631
2025-12-25T12:45:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:45:08.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:45:08.569 [DEBUG] [Thread-11773] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:45:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:45:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:45:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:45:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:44:44', tmtdew=25.76, humidity=18.39, cloud=0.0, wind=29.8, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:44:35.318', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:45:08.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-25T12:45:08.668 [DEBUG] [Thread-11777] [transport.py] [_log()] starting thread (client mode): 0xb6b14670
2025-12-25T12:45:08.668 [DEBUG] [Thread-11777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:45:08.686 [DEBUG] [Thread-11777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:45:08.686 [INFO] [Thread-11777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:45:08.699 [DEBUG] [Thread-11777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:45:08.699 [DEBUG] [Thread-11777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:45:08.699 [DEBUG] [Thread-11777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:45:08.699 [DEBUG] [Thread-11777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] client lang: <none>
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] server lang: <none>
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] kex follows: False
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] Compression: none
2025-12-25T12:45:08.700 [DEBUG] [Thread-11777] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:45:08.755 [DEBUG] [Thread-11777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:45:08.755 [DEBUG] [Thread-11777] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:45:08.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:45:08.757 [DEBUG] [Thread-11777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:45:08.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:45:08.814 [DEBUG] [Thread-11777] [transport.py] [_log()] userauth is OK
2025-12-25T12:45:08.814 [DEBUG] [Thread-11777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:45:08.814 [DEBUG] [Thread-11777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:45:08.815 [DEBUG] [Thread-11777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:45:08.815 [DEBUG] [Thread-11777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:45:08.836 [INFO] [Thread-11777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:45:08.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-25T12:45:08.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:45:09.669 [DEBUG] [Thread-11777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:45:09.669 [DEBUG] [Thread-11777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:45:09.717 [DEBUG] [Thread-11777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:45:09.717 [DEBUG] [Thread-11777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:45:09.726 [DEBUG] [Thread-11777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:45:09.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:45:09.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-25T12:45:09.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-25T12:45:09.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:45:09.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:45:09.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:45:09.769 [DEBUG] [Thread-11777] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:45:22.065 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:22.066 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:22.768 [DEBUG] [Thread-11779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:37.829 [DEBUG] [Thread-11780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:45:39.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:45:39.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:45:39.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:45:40.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 45, 16), 25.78, 18.39, 0.0, 31.92, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:45:40.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:45:16
2025-12-25T12:45:40.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:45:40.776 [DEBUG] [Thread-11781] [transport.py] [_log()] starting thread (client mode): 0xb95f0640
2025-12-25T12:45:40.776 [DEBUG] [Thread-11781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:45:40.786 [DEBUG] [Thread-11781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:45:40.786 [INFO] [Thread-11781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] client lang: <none>
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] server lang: <none>
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] kex follows: False
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] Compression: none
2025-12-25T12:45:40.788 [DEBUG] [Thread-11781] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:45:40.795 [DEBUG] [Thread-11781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:45:40.795 [DEBUG] [Thread-11781] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:45:40.796 [DEBUG] [Thread-11781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:45:40.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:45:40.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:45:40.798 [DEBUG] [Thread-11781] [transport.py] [_log()] userauth is OK
2025-12-25T12:45:40.798 [DEBUG] [Thread-11781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:45:40.798 [DEBUG] [Thread-11781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:45:40.798 [DEBUG] [Thread-11781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:45:40.798 [DEBUG] [Thread-11781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:45:40.811 [INFO] [Thread-11781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:45:40.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:45:41.385 [DEBUG] [Thread-11781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:45:41.385 [DEBUG] [Thread-11781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:45:41.386 [DEBUG] [Thread-11781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:45:41.426 [DEBUG] [Thread-11781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:45:41.426 [DEBUG] [Thread-11781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:45:41.429 [DEBUG] [Thread-11781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:45:41.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:45:41.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:45:41.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:45:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:45:41.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:45:41.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:45:41.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:45:41.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:45:41.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:45:41.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.447978 -999.00  +25.40  25.08     24   +3.90 1 1 1 1 1   888    0 26.24 185.89 ----- 25.1 25.1 281.6 33.4 31.2 -22.7 30.7 -22.2 30.0 -24.1 30.7 -20.4
2025-12-25T12:45:41.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:45:41.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:45:41.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.447978
2025-12-25T12:45:41.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:45:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:45:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:45:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:45:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:45:41.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:45:16', tmtdew=25.78, humidity=18.39, cloud=0.0, wind=31.92, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:45:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:45:41.449 [DEBUG] [Thread-11781] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:45:41.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-25T12:45:41.542 [DEBUG] [Thread-11784] [transport.py] [_log()] starting thread (client mode): 0xb9545360
2025-12-25T12:45:41.542 [DEBUG] [Thread-11784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:45:41.556 [DEBUG] [Thread-11784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:45:41.556 [INFO] [Thread-11784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:41.564 [DEBUG] [Thread-11784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] client lang: <none>
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] server lang: <none>
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] kex follows: False
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] Compression: none
2025-12-25T12:45:41.565 [DEBUG] [Thread-11784] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:45:41.623 [DEBUG] [Thread-11784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:45:41.623 [DEBUG] [Thread-11784] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:45:41.624 [DEBUG] [Thread-11784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:45:41.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:45:41.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:45:41.679 [DEBUG] [Thread-11784] [transport.py] [_log()] userauth is OK
2025-12-25T12:45:41.679 [DEBUG] [Thread-11784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:45:41.680 [DEBUG] [Thread-11784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:45:41.680 [DEBUG] [Thread-11784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:45:41.680 [DEBUG] [Thread-11784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:45:41.704 [INFO] [Thread-11784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:45:41.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:45:41.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:45:42.509 [DEBUG] [Thread-11784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:45:42.510 [DEBUG] [Thread-11784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:45:42.558 [DEBUG] [Thread-11784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:45:42.558 [DEBUG] [Thread-11784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:45:42.568 [DEBUG] [Thread-11784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:45:42.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:45:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:45:42.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:45:42.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:45:42.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:45:42.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:45:42.605 [DEBUG] [Thread-11784] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:45:52.868 [DEBUG] [Thread-11786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:02.356 [DEBUG] [Thread-11787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:07.916 [DEBUG] [Thread-11788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:46:12.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:46:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:46:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 45, 48), 26.02, 18.36, 0.0, 27.14, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:46:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:45:48
2025-12-25T12:46:13.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:46:13.621 [DEBUG] [Thread-11789] [transport.py] [_log()] starting thread (client mode): 0xb6be2080
2025-12-25T12:46:13.622 [DEBUG] [Thread-11789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:46:13.642 [DEBUG] [Thread-11789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:46:13.642 [INFO] [Thread-11789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:46:13.645 [DEBUG] [Thread-11789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:46:13.645 [DEBUG] [Thread-11789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:46:13.645 [DEBUG] [Thread-11789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:46:13.645 [DEBUG] [Thread-11789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] client lang: <none>
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] server lang: <none>
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] kex follows: False
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:46:13.646 [DEBUG] [Thread-11789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:46:13.647 [DEBUG] [Thread-11789] [transport.py] [_log()] Compression: none
2025-12-25T12:46:13.647 [DEBUG] [Thread-11789] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:46:13.664 [DEBUG] [Thread-11789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:46:13.665 [DEBUG] [Thread-11789] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:46:13.665 [DEBUG] [Thread-11789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:46:13.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:46:13.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:46:13.667 [DEBUG] [Thread-11789] [transport.py] [_log()] userauth is OK
2025-12-25T12:46:13.668 [DEBUG] [Thread-11789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:46:13.668 [DEBUG] [Thread-11789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:46:13.668 [DEBUG] [Thread-11789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:46:13.668 [DEBUG] [Thread-11789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:46:13.684 [INFO] [Thread-11789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:46:13.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:46:14.269 [DEBUG] [Thread-11789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:46:14.269 [DEBUG] [Thread-11789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:46:14.270 [DEBUG] [Thread-11789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:46:14.310 [DEBUG] [Thread-11789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:46:14.310 [DEBUG] [Thread-11789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:46:14.313 [DEBUG] [Thread-11789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:46:14.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:46:14.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:46:14.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:46:14.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:46:14.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:46:14.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:46:14.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:46:14.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:46:14.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:46:14.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.448673 -999.00  +26.20  21.52     24   +4.30 1 2 1 1 1   888    0 27.65 220.53 ----- 21.5 21.5 290.4 27.3 31.5 -21.1 30.9 -22.1 30.1 -20.0 30.9 -21.5
2025-12-25T12:46:14.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:46:14.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:46:14.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.448673
2025-12-25T12:46:14.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:46:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:46:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:46:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:46:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:46:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:45:48', tmtdew=26.02, humidity=18.36, cloud=0.0, wind=27.14, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:46:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:46:14.337 [DEBUG] [Thread-11789] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:46:14.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-25T12:46:14.430 [DEBUG] [Thread-11792] [transport.py] [_log()] starting thread (client mode): 0xbbfcf8e0
2025-12-25T12:46:14.430 [DEBUG] [Thread-11792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:46:14.445 [DEBUG] [Thread-11792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:46:14.445 [INFO] [Thread-11792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:46:14.452 [DEBUG] [Thread-11792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:46:14.452 [DEBUG] [Thread-11792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:46:14.452 [DEBUG] [Thread-11792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:46:14.452 [DEBUG] [Thread-11792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:14.452 [DEBUG] [Thread-11792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] client lang: <none>
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] server lang: <none>
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] kex follows: False
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:46:14.453 [DEBUG] [Thread-11792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:46:14.454 [DEBUG] [Thread-11792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:46:14.454 [DEBUG] [Thread-11792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:46:14.454 [DEBUG] [Thread-11792] [transport.py] [_log()] Compression: none
2025-12-25T12:46:14.454 [DEBUG] [Thread-11792] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:46:14.510 [DEBUG] [Thread-11792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:46:14.511 [DEBUG] [Thread-11792] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:46:14.512 [DEBUG] [Thread-11792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:46:14.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:46:14.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:46:14.566 [DEBUG] [Thread-11792] [transport.py] [_log()] userauth is OK
2025-12-25T12:46:14.567 [DEBUG] [Thread-11792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:46:14.567 [DEBUG] [Thread-11792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:46:14.568 [DEBUG] [Thread-11792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:46:14.568 [DEBUG] [Thread-11792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:46:14.587 [INFO] [Thread-11792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:46:14.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-25T12:46:14.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:46:15.377 [DEBUG] [Thread-11792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:46:15.378 [DEBUG] [Thread-11792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:46:15.426 [DEBUG] [Thread-11792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:46:15.426 [DEBUG] [Thread-11792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:46:15.435 [DEBUG] [Thread-11792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:46:15.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:46:15.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-25T12:46: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-25T12:46:15.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:46:15.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:46:15.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:46:15.468 [DEBUG] [Thread-11792] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:46:22.205 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:22.206 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:22.942 [DEBUG] [Thread-11794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:37.984 [DEBUG] [Thread-11795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:46:45.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:46:45.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:46:45.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-25T12:46:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 46, 20), 26.05, 18.31, 0.0, 25.09, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:46:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:46:20
2025-12-25T12:46:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:46:46.527 [DEBUG] [Thread-11796] [transport.py] [_log()] starting thread (client mode): 0xb95f25c0
2025-12-25T12:46:46.527 [DEBUG] [Thread-11796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:46:46.546 [DEBUG] [Thread-11796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:46:46.547 [INFO] [Thread-11796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] client lang: <none>
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] server lang: <none>
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] kex follows: False
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] Compression: none
2025-12-25T12:46:46.548 [DEBUG] [Thread-11796] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:46:46.558 [DEBUG] [Thread-11796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:46:46.559 [DEBUG] [Thread-11796] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:46:46.559 [DEBUG] [Thread-11796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:46:46.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:46:46.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:46:46.559 [DEBUG] [Thread-11796] [transport.py] [_log()] userauth is OK
2025-12-25T12:46:46.560 [DEBUG] [Thread-11796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:46:46.560 [DEBUG] [Thread-11796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:46:46.560 [DEBUG] [Thread-11796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:46:46.560 [DEBUG] [Thread-11796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:46:46.578 [INFO] [Thread-11796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:46:46.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:46:47.194 [DEBUG] [Thread-11796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:46:47.194 [DEBUG] [Thread-11796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:46:47.195 [DEBUG] [Thread-11796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:46:47.235 [DEBUG] [Thread-11796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:46:47.235 [DEBUG] [Thread-11796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:46:47.237 [DEBUG] [Thread-11796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:46:47.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:46:47.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:46:47.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:46:47.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:46:47.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:46:47.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:46:47.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:46:47.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:46:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:46:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.449020 -999.00  +26.10  27.58     23   +3.80 1 2 1 1 1   888    0 27.84 233.82 ----- 27.6 27.6 281.4 35.2 31.5 -22.0 30.8 -23.8 30.2 -19.8 31.0 -22.8
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.449020
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:46:47.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:46:20', tmtdew=26.05, humidity=18.31, cloud=0.0, wind=25.09, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:46:35.328', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:46:47.256 [DEBUG] [Thread-11796] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:46:47.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-25T12:46:47.339 [DEBUG] [Thread-11799] [transport.py] [_log()] starting thread (client mode): 0xb6b14c70
2025-12-25T12:46:47.339 [DEBUG] [Thread-11799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:46:47.354 [DEBUG] [Thread-11799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:46:47.354 [INFO] [Thread-11799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:46:47.361 [DEBUG] [Thread-11799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:46:47.361 [DEBUG] [Thread-11799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:46:47.361 [DEBUG] [Thread-11799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:46:47.361 [DEBUG] [Thread-11799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] client lang: <none>
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] server lang: <none>
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] kex follows: False
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] Compression: none
2025-12-25T12:46:47.362 [DEBUG] [Thread-11799] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:46:47.420 [DEBUG] [Thread-11799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:46:47.420 [DEBUG] [Thread-11799] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:46:47.420 [DEBUG] [Thread-11799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:46:47.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:46:47.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:46:47.477 [DEBUG] [Thread-11799] [transport.py] [_log()] userauth is OK
2025-12-25T12:46:47.477 [DEBUG] [Thread-11799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:46:47.477 [DEBUG] [Thread-11799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:46:47.477 [DEBUG] [Thread-11799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:46:47.477 [DEBUG] [Thread-11799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:46:47.491 [INFO] [Thread-11799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:46:47.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-25T12:46:47.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:46:48.340 [DEBUG] [Thread-11799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:46:48.340 [DEBUG] [Thread-11799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:46:48.388 [DEBUG] [Thread-11799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:46:48.388 [DEBUG] [Thread-11799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:46:48.396 [DEBUG] [Thread-11799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:46:48.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:46:48.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:46:48.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-25T12:46:48.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:46:48.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:46:48.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:46:48.427 [DEBUG] [Thread-11799] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:46:53.016 [DEBUG] [Thread-11801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:02.406 [DEBUG] [Thread-11802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:08.058 [DEBUG] [Thread-11803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:47:18.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:47:18.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-25T12:47:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 46, 52), 26.29, 17.88, 0.0, 30.26, 26.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:47:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:46:52
2025-12-25T12:47:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:47:19.392 [DEBUG] [Thread-11804] [transport.py] [_log()] starting thread (client mode): 0xb9545690
2025-12-25T12:47:19.392 [DEBUG] [Thread-11804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:47:19.412 [DEBUG] [Thread-11804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:47:19.412 [INFO] [Thread-11804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] client lang: <none>
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] server lang: <none>
2025-12-25T12:47:19.414 [DEBUG] [Thread-11804] [transport.py] [_log()] kex follows: False
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] Compression: none
2025-12-25T12:47:19.415 [DEBUG] [Thread-11804] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:47:19.423 [DEBUG] [Thread-11804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:47:19.424 [DEBUG] [Thread-11804] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:47:19.424 [DEBUG] [Thread-11804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:47:19.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:47:19.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:47:19.426 [DEBUG] [Thread-11804] [transport.py] [_log()] userauth is OK
2025-12-25T12:47:19.426 [DEBUG] [Thread-11804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:47:19.426 [DEBUG] [Thread-11804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:47:19.426 [DEBUG] [Thread-11804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:47:19.426 [DEBUG] [Thread-11804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:47:19.446 [INFO] [Thread-11804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:47:19.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:47:20.024 [DEBUG] [Thread-11804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:47:20.024 [DEBUG] [Thread-11804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:47:20.024 [DEBUG] [Thread-11804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:47:20.065 [DEBUG] [Thread-11804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:47:20.065 [DEBUG] [Thread-11804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:47:20.068 [DEBUG] [Thread-11804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:47:20.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:47:20.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:47:20.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:47:20.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:47:20.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:47:20.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:47:20.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:47:20.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:47:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:47:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.449368 -999.00  +25.90  29.44     24   +3.80 1 2 1 1 1   888    0 27.72 246.44 ----- 29.4 29.4 287.6 40.0 31.3 -22.1 30.7 -23.0 29.8 -20.3 30.9 -21.6
2025-12-25T12:47:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:47:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:47:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.449368
2025-12-25T12:47:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:47:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:47:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:47:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:47:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:47:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:46:52', tmtdew=26.29, humidity=17.88, cloud=0.0, wind=30.26, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:47:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:47:20.093 [DEBUG] [Thread-11804] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:47:20.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-25T12:47:20.177 [DEBUG] [Thread-11807] [transport.py] [_log()] starting thread (client mode): 0xb9547520
2025-12-25T12:47:20.177 [DEBUG] [Thread-11807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:47:20.192 [DEBUG] [Thread-11807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:47:20.192 [INFO] [Thread-11807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] client lang: <none>
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] server lang: <none>
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] kex follows: False
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:47:20.200 [DEBUG] [Thread-11807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:47:20.201 [DEBUG] [Thread-11807] [transport.py] [_log()] Compression: none
2025-12-25T12:47:20.201 [DEBUG] [Thread-11807] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:47:20.256 [DEBUG] [Thread-11807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:47:20.256 [DEBUG] [Thread-11807] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:47:20.256 [DEBUG] [Thread-11807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:47:20.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:47:20.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:47:20.313 [DEBUG] [Thread-11807] [transport.py] [_log()] userauth is OK
2025-12-25T12:47:20.313 [DEBUG] [Thread-11807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:47:20.313 [DEBUG] [Thread-11807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:47:20.313 [DEBUG] [Thread-11807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:47:20.313 [DEBUG] [Thread-11807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:47:20.332 [INFO] [Thread-11807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:47:20.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-25T12:47:20.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:47:21.147 [DEBUG] [Thread-11807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:47:21.147 [DEBUG] [Thread-11807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:47:21.195 [DEBUG] [Thread-11807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:47:21.196 [DEBUG] [Thread-11807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:47:21.205 [DEBUG] [Thread-11807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:47:21.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:47:21.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:47:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:47:21.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:47:21.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:47:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:47:21.244 [DEBUG] [Thread-11807] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:47:22.346 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:22.348 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:23.095 [DEBUG] [Thread-11809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:38.145 [DEBUG] [Thread-11810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:51.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:47:51.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:47:51.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:47:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 47, 24), 26.21, 17.96, 0.0, 27.39, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:47:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:47:24
2025-12-25T12:47:52.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:47:52.211 [DEBUG] [Thread-11811] [transport.py] [_log()] starting thread (client mode): 0xb95472e0
2025-12-25T12:47:52.211 [DEBUG] [Thread-11811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:47:52.230 [DEBUG] [Thread-11811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:47:52.230 [INFO] [Thread-11811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] client lang: <none>
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] server lang: <none>
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] kex follows: False
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] Compression: none
2025-12-25T12:47:52.234 [DEBUG] [Thread-11811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:47:52.252 [DEBUG] [Thread-11811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:47:52.252 [DEBUG] [Thread-11811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:47:52.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:47:52.253 [DEBUG] [Thread-11811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:47:52.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:47:52.255 [DEBUG] [Thread-11811] [transport.py] [_log()] userauth is OK
2025-12-25T12:47:52.255 [DEBUG] [Thread-11811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:47:52.255 [DEBUG] [Thread-11811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:47:52.255 [DEBUG] [Thread-11811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:47:52.255 [DEBUG] [Thread-11811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:47:52.265 [INFO] [Thread-11811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:47:52.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:47:52.861 [DEBUG] [Thread-11811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:47:52.862 [DEBUG] [Thread-11811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:47:52.862 [DEBUG] [Thread-11811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:47:52.903 [DEBUG] [Thread-11811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:47:52.903 [DEBUG] [Thread-11811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:47:52.907 [DEBUG] [Thread-11811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:47:52.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:47:52.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:47:52.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:47:52.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:47:52.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:47:52.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:47:52.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:47:52.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:47:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:47:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.449368 -999.00  +25.90  29.44     24   +3.80 1 2 1 1 1   888    0 27.72 246.44 ----- 29.4 29.4 287.6 40.0 31.3 -22.1 30.7 -23.0 29.8 -20.3 30.9 -21.6
2025-12-25T12:47:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:47:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:47:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.449368
2025-12-25T12:47:52.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:47:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:47:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:47:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:47:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:47:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:47:24', tmtdew=26.21, humidity=17.96, cloud=0.0, wind=27.39, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:47:05.395', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:47:52.936 [DEBUG] [Thread-11811] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:47:53.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-25T12:47:53.030 [DEBUG] [Thread-11814] [transport.py] [_log()] starting thread (client mode): 0xb95796f0
2025-12-25T12:47:53.030 [DEBUG] [Thread-11814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:47:53.044 [DEBUG] [Thread-11814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:47:53.044 [INFO] [Thread-11814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:47:53.052 [DEBUG] [Thread-11814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:47:53.052 [DEBUG] [Thread-11814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:47:53.052 [DEBUG] [Thread-11814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:47:53.052 [DEBUG] [Thread-11814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:53.052 [DEBUG] [Thread-11814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:47:53.052 [DEBUG] [Thread-11814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] client lang: <none>
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] server lang: <none>
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] kex follows: False
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:47:53.053 [DEBUG] [Thread-11814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:47:53.054 [DEBUG] [Thread-11814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:47:53.054 [DEBUG] [Thread-11814] [transport.py] [_log()] Compression: none
2025-12-25T12:47:53.054 [DEBUG] [Thread-11814] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:47:53.109 [DEBUG] [Thread-11814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:47:53.109 [DEBUG] [Thread-11814] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:47:53.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:47:53.110 [DEBUG] [Thread-11814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:47:53.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:47:53.164 [DEBUG] [Thread-11814] [transport.py] [_log()] userauth is OK
2025-12-25T12:47:53.165 [DEBUG] [Thread-11814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:47:53.165 [DEBUG] [Thread-11814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:47:53.165 [DEBUG] [Thread-11814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:47:53.165 [DEBUG] [Thread-11814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:47:53.182 [DEBUG] [Thread-11816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:47:53.183 [INFO] [Thread-11814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:47:53.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-25T12:47:53.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:47:54.011 [DEBUG] [Thread-11814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:47:54.011 [DEBUG] [Thread-11814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:47:54.059 [DEBUG] [Thread-11814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:47:54.060 [DEBUG] [Thread-11814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:47:54.068 [DEBUG] [Thread-11814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:47:54.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:47:54.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-25T12:47:54.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-25T12:47:54.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:47:54.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:47:54.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:47:54.104 [DEBUG] [Thread-11814] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:48:02.460 [DEBUG] [Thread-11817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:08.237 [DEBUG] [Thread-11818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:22.487 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:22.489 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:23.269 [DEBUG] [Thread-11819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:24.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:48:24.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:48:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:48:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 47, 56), 26.27, 17.96, 0.0, 31.92, 26.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:48:24.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:47:56
2025-12-25T12:48:24.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:48:25.108 [DEBUG] [Thread-11820] [transport.py] [_log()] starting thread (client mode): 0xb9544460
2025-12-25T12:48:25.108 [DEBUG] [Thread-11820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:48:25.129 [DEBUG] [Thread-11820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:48:25.130 [INFO] [Thread-11820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] client lang: <none>
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] server lang: <none>
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] kex follows: False
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] Compression: none
2025-12-25T12:48:25.133 [DEBUG] [Thread-11820] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:48:25.151 [DEBUG] [Thread-11820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:48:25.151 [DEBUG] [Thread-11820] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:48:25.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:48:25.152 [DEBUG] [Thread-11820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:48:25.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:48:25.154 [DEBUG] [Thread-11820] [transport.py] [_log()] userauth is OK
2025-12-25T12:48:25.154 [DEBUG] [Thread-11820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:48:25.154 [DEBUG] [Thread-11820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:48:25.154 [DEBUG] [Thread-11820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:48:25.154 [DEBUG] [Thread-11820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:48:25.176 [INFO] [Thread-11820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:48:25.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:48:25.817 [DEBUG] [Thread-11820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:48:25.818 [DEBUG] [Thread-11820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:48:25.818 [DEBUG] [Thread-11820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:48:25.859 [DEBUG] [Thread-11820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:48:25.859 [DEBUG] [Thread-11820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:48:25.862 [DEBUG] [Thread-11820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:48:25.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:48:25.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:48:25.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:48:25.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:48:25.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:48:25.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:48:25.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:48:25.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:48:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:48:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.449715 -999.00  +25.40  23.80     24   +3.40 1 1 1 1 1   888    0 28.58 277.07 ----- 23.8 23.8 289.2 33.2 31.2 -24.8 30.6 -22.5 29.8 -27.6 30.7 -22.2
2025-12-25T12:48:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:48:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:48:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.449715
2025-12-25T12:48:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:48:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:48:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:48:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:48:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:48:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:47:56', tmtdew=26.27, humidity=17.96, cloud=0.0, wind=31.92, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:47:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:48:25.883 [DEBUG] [Thread-11820] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:48:25.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-25T12:48:25.978 [DEBUG] [Thread-11823] [transport.py] [_log()] starting thread (client mode): 0xb95f39d0
2025-12-25T12:48:25.978 [DEBUG] [Thread-11823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:48:25.992 [DEBUG] [Thread-11823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:48:25.993 [INFO] [Thread-11823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:48:26.000 [DEBUG] [Thread-11823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:48:26.000 [DEBUG] [Thread-11823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:48:26.000 [DEBUG] [Thread-11823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] client lang: <none>
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] server lang: <none>
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] kex follows: False
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] Compression: none
2025-12-25T12:48:26.001 [DEBUG] [Thread-11823] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:48:26.065 [DEBUG] [Thread-11823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:48:26.065 [DEBUG] [Thread-11823] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:48:26.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:48:26.066 [DEBUG] [Thread-11823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:48:26.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:48:26.121 [DEBUG] [Thread-11823] [transport.py] [_log()] userauth is OK
2025-12-25T12:48:26.121 [DEBUG] [Thread-11823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:48:26.121 [DEBUG] [Thread-11823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:48:26.121 [DEBUG] [Thread-11823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:48:26.121 [DEBUG] [Thread-11823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:48:26.139 [INFO] [Thread-11823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:48:26.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-25T12:48:26.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:48:26.966 [DEBUG] [Thread-11823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:48:26.966 [DEBUG] [Thread-11823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:48:27.014 [DEBUG] [Thread-11823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:48:27.014 [DEBUG] [Thread-11823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:48:27.023 [DEBUG] [Thread-11823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:48:27.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:48:27.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:48:27.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-25T12:48:27.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:48:27.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:48:27.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:48:27.061 [DEBUG] [Thread-11823] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:48:38.302 [DEBUG] [Thread-11825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:53.349 [DEBUG] [Thread-11826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:48:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:48:57.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:48:57.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-25T12:48:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 48, 28), 26.84, 17.3, 0.0, 29.06, 26.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:48:57.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:48:28
2025-12-25T12:48:57.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:48:58.061 [DEBUG] [Thread-11827] [transport.py] [_log()] starting thread (client mode): 0xb95f3c40
2025-12-25T12:48:58.061 [DEBUG] [Thread-11827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:48:58.082 [DEBUG] [Thread-11827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:48:58.082 [INFO] [Thread-11827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:48:58.085 [DEBUG] [Thread-11827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:48:58.085 [DEBUG] [Thread-11827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:48:58.085 [DEBUG] [Thread-11827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] client lang: <none>
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] server lang: <none>
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] kex follows: False
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:48:58.086 [DEBUG] [Thread-11827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:48:58.087 [DEBUG] [Thread-11827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:48:58.087 [DEBUG] [Thread-11827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:48:58.087 [DEBUG] [Thread-11827] [transport.py] [_log()] Compression: none
2025-12-25T12:48:58.087 [DEBUG] [Thread-11827] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:48:58.107 [DEBUG] [Thread-11827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:48:58.108 [DEBUG] [Thread-11827] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:48:58.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:48:58.108 [DEBUG] [Thread-11827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:48:58.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:48:58.110 [DEBUG] [Thread-11827] [transport.py] [_log()] userauth is OK
2025-12-25T12:48:58.110 [DEBUG] [Thread-11827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:48:58.110 [DEBUG] [Thread-11827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:48:58.110 [DEBUG] [Thread-11827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:48:58.110 [DEBUG] [Thread-11827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:48:58.133 [INFO] [Thread-11827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:48:58.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:48:58.802 [DEBUG] [Thread-11827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:48:58.802 [DEBUG] [Thread-11827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:48:58.802 [DEBUG] [Thread-11827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:48:58.843 [DEBUG] [Thread-11827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:48:58.843 [DEBUG] [Thread-11827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:48:58.846 [DEBUG] [Thread-11827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:48:58.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:48:58.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:48:58.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:48:58.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:48:58.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:48:58.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:48:58.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:48:58.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:48:58.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:48:58.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.450062 -999.00  +25.50  21.01     23   +3.20 1 1 1 1 1   888    0 30.15 303.40 ----- 21.0 21.0 274.8 37.5 31.3 -24.8 30.6 -23.2 30.0 -23.9 30.7 -22.9
2025-12-25T12:48:58.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:48:58.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:48:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.450062
2025-12-25T12:48:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:48:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:48:58.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:48:58.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:48:58.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:48:58.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:48:28', tmtdew=26.84, humidity=17.3, cloud=0.0, wind=29.06, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:48:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:48:58.871 [DEBUG] [Thread-11827] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:48:58.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-25T12:48:58.977 [DEBUG] [Thread-11830] [transport.py] [_log()] starting thread (client mode): 0xb95f06d0
2025-12-25T12:48:58.977 [DEBUG] [Thread-11830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:48:58.991 [DEBUG] [Thread-11830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:48:58.991 [INFO] [Thread-11830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:48:58.998 [DEBUG] [Thread-11830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] client lang: <none>
2025-12-25T12:48:58.999 [DEBUG] [Thread-11830] [transport.py] [_log()] server lang: <none>
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] kex follows: False
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] Compression: none
2025-12-25T12:48:59.000 [DEBUG] [Thread-11830] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:48:59.059 [DEBUG] [Thread-11830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:48:59.060 [DEBUG] [Thread-11830] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:48:59.060 [DEBUG] [Thread-11830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:48:59.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:48:59.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:48:59.115 [DEBUG] [Thread-11830] [transport.py] [_log()] userauth is OK
2025-12-25T12:48:59.115 [DEBUG] [Thread-11830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:48:59.115 [DEBUG] [Thread-11830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:48:59.115 [DEBUG] [Thread-11830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:48:59.115 [DEBUG] [Thread-11830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:48:59.134 [INFO] [Thread-11830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:48:59.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-25T12:48:59.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:48:59.958 [DEBUG] [Thread-11830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:48:59.959 [DEBUG] [Thread-11830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:49:00.006 [DEBUG] [Thread-11830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:49:00.006 [DEBUG] [Thread-11830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:49:00.018 [DEBUG] [Thread-11830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:49:00.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:49:00.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-25T12:49:00.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-25T12:49:00.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:49:00.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:49:00.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:49:00.059 [DEBUG] [Thread-11830] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:49:02.507 [DEBUG] [Thread-11832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:49:08.383 [DEBUG] [Thread-11833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:49:22.626 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:49:22.627 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:49:23.433 [DEBUG] [Thread-11834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:49:30.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:49:30.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:49:30.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-25T12:49:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 49), 26.36, 17.91, 0.0, 22.18, 25.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:49:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:49:00
2025-12-25T12:49:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:49:31.070 [DEBUG] [Thread-11835] [transport.py] [_log()] starting thread (client mode): 0xb9579ba0
2025-12-25T12:49:31.070 [DEBUG] [Thread-11835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:49:31.090 [DEBUG] [Thread-11835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:49:31.090 [INFO] [Thread-11835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:49:31.093 [DEBUG] [Thread-11835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] client lang: <none>
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] server lang: <none>
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] kex follows: False
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:49:31.094 [DEBUG] [Thread-11835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:49:31.095 [DEBUG] [Thread-11835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:49:31.095 [DEBUG] [Thread-11835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:49:31.095 [DEBUG] [Thread-11835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:49:31.095 [DEBUG] [Thread-11835] [transport.py] [_log()] Compression: none
2025-12-25T12:49:31.095 [DEBUG] [Thread-11835] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:49:31.112 [DEBUG] [Thread-11835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:49:31.113 [DEBUG] [Thread-11835] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:49:31.113 [DEBUG] [Thread-11835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:49:31.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:49:31.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:49:31.116 [DEBUG] [Thread-11835] [transport.py] [_log()] userauth is OK
2025-12-25T12:49:31.116 [DEBUG] [Thread-11835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:49:31.116 [DEBUG] [Thread-11835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:49:31.116 [DEBUG] [Thread-11835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:49:31.116 [DEBUG] [Thread-11835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:49:31.141 [INFO] [Thread-11835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:49:31.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:49:31.813 [DEBUG] [Thread-11835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:49:31.813 [DEBUG] [Thread-11835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:49:31.813 [DEBUG] [Thread-11835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:49:31.854 [DEBUG] [Thread-11835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:49:31.854 [DEBUG] [Thread-11835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:49:31.858 [DEBUG] [Thread-11835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:49:31.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:49:31.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:49:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:49:31.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:49:31.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:49:31.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:49:31.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:49:31.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:49:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:49:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.450409 -999.00  +25.40  22.20     23   +3.30 1 2 1 1 1   888    0 30.12 302.69 ----- 22.2 22.2 289.4 27.0 31.1 -25.6 30.6 -22.4 29.9 -22.7 30.7 -22.6
2025-12-25T12:49:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:49:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:49:31.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.450409
2025-12-25T12:49:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:49:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:49:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:49:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:49:31.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:49:31.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:49:00', tmtdew=26.36, humidity=17.91, cloud=0.0, wind=22.18, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:48:35.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:49:31.885 [DEBUG] [Thread-11835] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:49:31.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-25T12:49:31.978 [DEBUG] [Thread-11838] [transport.py] [_log()] starting thread (client mode): 0xb9579c90
2025-12-25T12:49:31.979 [DEBUG] [Thread-11838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:49:31.993 [DEBUG] [Thread-11838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:49:31.993 [INFO] [Thread-11838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] client lang: <none>
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] server lang: <none>
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] kex follows: False
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:49:32.001 [DEBUG] [Thread-11838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:49:32.002 [DEBUG] [Thread-11838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:49:32.002 [DEBUG] [Thread-11838] [transport.py] [_log()] Compression: none
2025-12-25T12:49:32.002 [DEBUG] [Thread-11838] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:49:32.063 [DEBUG] [Thread-11838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:49:32.064 [DEBUG] [Thread-11838] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:49:32.064 [DEBUG] [Thread-11838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:49:32.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:49:32.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:49:32.119 [DEBUG] [Thread-11838] [transport.py] [_log()] userauth is OK
2025-12-25T12:49:32.119 [DEBUG] [Thread-11838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:49:32.120 [DEBUG] [Thread-11838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:49:32.120 [DEBUG] [Thread-11838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:49:32.120 [DEBUG] [Thread-11838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:49:32.139 [INFO] [Thread-11838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:49:32.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:49:32.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:49:33.014 [DEBUG] [Thread-11838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:49:33.014 [DEBUG] [Thread-11838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:49:33.062 [DEBUG] [Thread-11838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:49:33.062 [DEBUG] [Thread-11838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:49:33.071 [DEBUG] [Thread-11838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:49:33.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:49:33.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-25T12:49:33.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-25T12:49:33.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:49:33.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:49:33.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:49:33.107 [DEBUG] [Thread-11838] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:49:38.462 [DEBUG] [Thread-11840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:49:53.515 [DEBUG] [Thread-11841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:02.551 [DEBUG] [Thread-11842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:50:03.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:50:03.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:50:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 49, 32), 26.66, 17.54, 0.0, 19.04, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:50:03.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:49:32
2025-12-25T12:50:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:50:04.168 [DEBUG] [Thread-11843] [transport.py] [_log()] starting thread (client mode): 0xb95448e0
2025-12-25T12:50:04.168 [DEBUG] [Thread-11843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:50:04.189 [DEBUG] [Thread-11843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:50:04.189 [INFO] [Thread-11843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] client lang: <none>
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] server lang: <none>
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] kex follows: False
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] Compression: none
2025-12-25T12:50:04.192 [DEBUG] [Thread-11843] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:50:04.208 [DEBUG] [Thread-11843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:50:04.208 [DEBUG] [Thread-11843] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:50:04.208 [DEBUG] [Thread-11843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:50:04.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:50:04.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:50:04.208 [DEBUG] [Thread-11843] [transport.py] [_log()] userauth is OK
2025-12-25T12:50:04.208 [DEBUG] [Thread-11843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:50:04.209 [DEBUG] [Thread-11843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:50:04.209 [DEBUG] [Thread-11843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:50:04.209 [DEBUG] [Thread-11843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:50:04.217 [INFO] [Thread-11843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:50:04.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:50:05.087 [DEBUG] [Thread-11843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:50:05.087 [DEBUG] [Thread-11843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:50:05.087 [DEBUG] [Thread-11843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:50:05.129 [DEBUG] [Thread-11843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:50:05.129 [DEBUG] [Thread-11843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:50:05.131 [DEBUG] [Thread-11843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:50:05.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:50:05.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:50:05.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:50:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:50:05.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:50:05.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:50:05.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.450756 -999.00  +25.10  21.74     24   +3.20 1 2 1 1 1   888    0 29.18 270.51 ----- 21.7 21.7 298.6 27.0 31.3 -23.3 30.6 -23.4 29.9 -22.1 30.8 -21.5
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.450756
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:50:05.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:49:32', tmtdew=26.66, humidity=17.54, cloud=0.0, wind=19.04, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:49:05.318', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:50:05.153 [DEBUG] [Thread-11843] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:50:05.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-25T12:50:05.237 [DEBUG] [Thread-11846] [transport.py] [_log()] starting thread (client mode): 0xb957b070
2025-12-25T12:50:05.238 [DEBUG] [Thread-11846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:50:05.252 [DEBUG] [Thread-11846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:50:05.252 [INFO] [Thread-11846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] client lang: <none>
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] server lang: <none>
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] kex follows: False
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] Compression: none
2025-12-25T12:50:05.260 [DEBUG] [Thread-11846] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:50:05.321 [DEBUG] [Thread-11846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:50:05.321 [DEBUG] [Thread-11846] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:50:05.321 [DEBUG] [Thread-11846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:50:05.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:50:05.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:50:05.378 [DEBUG] [Thread-11846] [transport.py] [_log()] userauth is OK
2025-12-25T12:50:05.378 [DEBUG] [Thread-11846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:50:05.378 [DEBUG] [Thread-11846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:50:05.378 [DEBUG] [Thread-11846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:50:05.378 [DEBUG] [Thread-11846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:50:05.394 [INFO] [Thread-11846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:50:05.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-25T12:50:05.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:50:06.220 [DEBUG] [Thread-11846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:50:06.220 [DEBUG] [Thread-11846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:50:06.268 [DEBUG] [Thread-11846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:50:06.268 [DEBUG] [Thread-11846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:50:06.276 [DEBUG] [Thread-11846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:50:06.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:50:06.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-25T12:50:06.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-25T12:50:06.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:50:06.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:50:06.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:50:06.307 [DEBUG] [Thread-11846] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:50:08.546 [DEBUG] [Thread-11848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:22.764 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:22.766 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:23.598 [DEBUG] [Thread-11849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:36.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:50:36.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:50:36.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-25T12:50:37.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 50, 4), 27.02, 17.21, 0.0, 25.94, 26.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:50:37.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:50:04
2025-12-25T12:50:37.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:50:37.317 [DEBUG] [Thread-11850] [transport.py] [_log()] starting thread (client mode): 0xb955ab00
2025-12-25T12:50:37.317 [DEBUG] [Thread-11850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:50:37.339 [DEBUG] [Thread-11850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:50:37.339 [INFO] [Thread-11850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:50:37.342 [DEBUG] [Thread-11850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] client lang: <none>
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] server lang: <none>
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] kex follows: False
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] Compression: none
2025-12-25T12:50:37.343 [DEBUG] [Thread-11850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:50:37.351 [DEBUG] [Thread-11850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:50:37.351 [DEBUG] [Thread-11850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:50:37.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:50:37.351 [DEBUG] [Thread-11850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:50:37.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:50:37.352 [DEBUG] [Thread-11850] [transport.py] [_log()] userauth is OK
2025-12-25T12:50:37.352 [DEBUG] [Thread-11850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:50:37.352 [DEBUG] [Thread-11850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:50:37.352 [DEBUG] [Thread-11850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:50:37.352 [DEBUG] [Thread-11850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:50:37.364 [INFO] [Thread-11850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:50:37.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:50:38.010 [DEBUG] [Thread-11850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:50:38.010 [DEBUG] [Thread-11850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:50:38.010 [DEBUG] [Thread-11850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:50:38.050 [DEBUG] [Thread-11850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:50:38.051 [DEBUG] [Thread-11850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:50:38.053 [DEBUG] [Thread-11850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:50:38.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:50:38.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:50:38.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:50:38.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:50:38.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:50:38.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:50:38.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.451104 -999.00  +24.90  15.67     24   +3.20 1 2 1 1 1   888    0 28.61 254.50 ----- 15.7 15.7 301.2 18.1 31.3 -23.1 30.7 -22.4 30.0 -21.0 30.8 -21.2
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.451104
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:50:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:50:04', tmtdew=27.02, humidity=17.21, cloud=0.0, wind=25.94, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:49:35.386', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:50:38.071 [DEBUG] [Thread-11850] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:50:38.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-25T12:50:38.161 [DEBUG] [Thread-11853] [transport.py] [_log()] starting thread (client mode): 0xbbfcc460
2025-12-25T12:50:38.161 [DEBUG] [Thread-11853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:50:38.175 [DEBUG] [Thread-11853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:50:38.175 [INFO] [Thread-11853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] client lang: <none>
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] server lang: <none>
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] kex follows: False
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] Compression: none
2025-12-25T12:50:38.183 [DEBUG] [Thread-11853] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:50:38.240 [DEBUG] [Thread-11853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:50:38.240 [DEBUG] [Thread-11853] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:50:38.241 [DEBUG] [Thread-11853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:50:38.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:50:38.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:50:38.297 [DEBUG] [Thread-11853] [transport.py] [_log()] userauth is OK
2025-12-25T12:50:38.297 [DEBUG] [Thread-11853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:50:38.297 [DEBUG] [Thread-11853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:50:38.297 [DEBUG] [Thread-11853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:50:38.297 [DEBUG] [Thread-11853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:50:38.311 [INFO] [Thread-11853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:50: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-25T12:50:38.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:50:38.631 [DEBUG] [Thread-11855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:50:39.110 [DEBUG] [Thread-11853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:50:39.110 [DEBUG] [Thread-11853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:50:39.158 [DEBUG] [Thread-11853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:50:39.158 [DEBUG] [Thread-11853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:50:39.166 [DEBUG] [Thread-11853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:50:39.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:50:39.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-25T12:50:39.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-25T12:50:39.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:50:39.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:50:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:50:39.199 [DEBUG] [Thread-11853] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:50:53.671 [DEBUG] [Thread-11856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:02.603 [DEBUG] [Thread-11857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:08.707 [DEBUG] [Thread-11858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:09.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:51:09.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:51:09.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-25T12:51:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 50, 36), 27.01, 16.96, 0.0, 22.96, 26.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:51:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:50:36
2025-12-25T12:51:10.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:51:10.252 [DEBUG] [Thread-11859] [transport.py] [_log()] starting thread (client mode): 0xb9546590
2025-12-25T12:51:10.252 [DEBUG] [Thread-11859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:51:10.267 [DEBUG] [Thread-11859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:51:10.267 [INFO] [Thread-11859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:51:10.270 [DEBUG] [Thread-11859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] client lang: <none>
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] server lang: <none>
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] kex follows: False
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] Compression: none
2025-12-25T12:51:10.271 [DEBUG] [Thread-11859] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:51:10.288 [DEBUG] [Thread-11859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:51:10.288 [DEBUG] [Thread-11859] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:51:10.288 [DEBUG] [Thread-11859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:51:10.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:51:10.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:51:10.289 [DEBUG] [Thread-11859] [transport.py] [_log()] userauth is OK
2025-12-25T12:51:10.289 [DEBUG] [Thread-11859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:51:10.289 [DEBUG] [Thread-11859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:51:10.289 [DEBUG] [Thread-11859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:51:10.289 [DEBUG] [Thread-11859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:51:10.315 [INFO] [Thread-11859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:51:10.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:51:10.898 [DEBUG] [Thread-11859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:51:10.898 [DEBUG] [Thread-11859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:51:10.898 [DEBUG] [Thread-11859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:51:10.939 [DEBUG] [Thread-11859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:51:10.940 [DEBUG] [Thread-11859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:51:10.942 [DEBUG] [Thread-11859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:51:10.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:51:10.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:51:10.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:51:10.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:51:10.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:51:10.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:51:10.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.451798 -999.00  +25.30  32.77     24   +3.40 1 2 2 1 1   888    0 28.42 239.47 ----- 32.8 32.8 296.8 45.3 31.5 -25.0 30.8 -23.5 30.3 -21.9 30.9 -21.9
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.451798
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:51:10.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:50:36', tmtdew=27.01, humidity=16.96, cloud=0.0, wind=22.96, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:50:35.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:51:10.960 [DEBUG] [Thread-11859] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:51:11.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-25T12:51:11.043 [DEBUG] [Thread-11862] [transport.py] [_log()] starting thread (client mode): 0xb955a7a0
2025-12-25T12:51:11.043 [DEBUG] [Thread-11862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:51:11.058 [DEBUG] [Thread-11862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:51:11.058 [INFO] [Thread-11862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] client lang: <none>
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] server lang: <none>
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] kex follows: False
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] Compression: none
2025-12-25T12:51:11.066 [DEBUG] [Thread-11862] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:51:11.125 [DEBUG] [Thread-11862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:51:11.125 [DEBUG] [Thread-11862] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:51:11.126 [DEBUG] [Thread-11862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:51:11.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:51:11.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:51:11.181 [DEBUG] [Thread-11862] [transport.py] [_log()] userauth is OK
2025-12-25T12:51:11.181 [DEBUG] [Thread-11862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:51:11.181 [DEBUG] [Thread-11862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:51:11.181 [DEBUG] [Thread-11862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:51:11.181 [DEBUG] [Thread-11862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:51:11.195 [INFO] [Thread-11862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:51:11.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-25T12:51:11.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:51:12.075 [DEBUG] [Thread-11862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:51:12.076 [DEBUG] [Thread-11862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:51:12.124 [DEBUG] [Thread-11862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:51:12.124 [DEBUG] [Thread-11862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:51:12.134 [DEBUG] [Thread-11862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:51:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:51:12.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-25T12:51: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-25T12:51:12.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:51:12.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:51:12.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:51:12.171 [DEBUG] [Thread-11862] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:51:22.902 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:22.903 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:23.740 [DEBUG] [Thread-11864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:38.787 [DEBUG] [Thread-11865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:51:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:51:42.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:51:42.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-25T12:51:42.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 51, 8), 26.52, 17.51, 0.0, 27.37, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:51:42.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:51:08
2025-12-25T12:51:43.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:51:43.233 [DEBUG] [Thread-11866] [transport.py] [_log()] starting thread (client mode): 0xb6b28070
2025-12-25T12:51:43.233 [DEBUG] [Thread-11866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:51:43.244 [DEBUG] [Thread-11866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:51:43.244 [INFO] [Thread-11866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] client lang: <none>
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] server lang: <none>
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] kex follows: False
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:51:43.247 [DEBUG] [Thread-11866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:51:43.248 [DEBUG] [Thread-11866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:51:43.248 [DEBUG] [Thread-11866] [transport.py] [_log()] Compression: none
2025-12-25T12:51:43.248 [DEBUG] [Thread-11866] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:51:43.262 [DEBUG] [Thread-11866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:51:43.262 [DEBUG] [Thread-11866] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:51:43.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:51:43.263 [DEBUG] [Thread-11866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:51:43.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:51:43.263 [DEBUG] [Thread-11866] [transport.py] [_log()] userauth is OK
2025-12-25T12:51:43.263 [DEBUG] [Thread-11866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:51:43.263 [DEBUG] [Thread-11866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:51:43.263 [DEBUG] [Thread-11866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:51:43.263 [DEBUG] [Thread-11866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:51:43.278 [INFO] [Thread-11866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:51:43.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:51:43.878 [DEBUG] [Thread-11866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:51:43.878 [DEBUG] [Thread-11866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:51:43.878 [DEBUG] [Thread-11866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:51:43.919 [DEBUG] [Thread-11866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:51:43.919 [DEBUG] [Thread-11866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:51:43.923 [DEBUG] [Thread-11866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:51:43.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:51:43.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:51:43.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:51:43.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:51:43.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:51:43.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:51:43.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:51:43.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:51:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:51:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.452145 -999.00  +25.50  34.58     23   +3.40 1 2 2 1 1   888    0 27.28 216.63 ----- 34.6 34.6 292.4 39.3 31.4 -22.5 30.8 -24.7 30.2 -21.0 31.0 -21.6
2025-12-25T12:51:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:51:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:51:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.452145
2025-12-25T12:51:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:51:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:51:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:51:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:51:43.950 [DEBUG] [Thread-11866] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:51:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:51:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:51:08', tmtdew=26.52, humidity=17.51, cloud=0.0, wind=27.37, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:51:05.328', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:51:44.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-25T12:51:44.045 [DEBUG] [Thread-11869] [transport.py] [_log()] starting thread (client mode): 0xb9546ce0
2025-12-25T12:51:44.045 [DEBUG] [Thread-11869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:51:44.059 [DEBUG] [Thread-11869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:51:44.059 [INFO] [Thread-11869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:44.067 [DEBUG] [Thread-11869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] client lang: <none>
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] server lang: <none>
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] kex follows: False
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] Compression: none
2025-12-25T12:51:44.068 [DEBUG] [Thread-11869] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:51:44.125 [DEBUG] [Thread-11869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:51:44.125 [DEBUG] [Thread-11869] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:51:44.126 [DEBUG] [Thread-11869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:51:44.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:51:44.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:51:44.181 [DEBUG] [Thread-11869] [transport.py] [_log()] userauth is OK
2025-12-25T12:51:44.182 [DEBUG] [Thread-11869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:51:44.182 [DEBUG] [Thread-11869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:51:44.182 [DEBUG] [Thread-11869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:51:44.182 [DEBUG] [Thread-11869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:51:44.201 [INFO] [Thread-11869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:51:44.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-25T12:51:44.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:51:45.028 [DEBUG] [Thread-11869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:51:45.029 [DEBUG] [Thread-11869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:51:45.077 [DEBUG] [Thread-11869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:51:45.077 [DEBUG] [Thread-11869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:51:45.086 [DEBUG] [Thread-11869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:51:45.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:51:45.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:51:45.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:51:45.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:51:45.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:51:45.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:51:45.123 [DEBUG] [Thread-11869] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:51:53.821 [DEBUG] [Thread-11871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:02.649 [DEBUG] [Thread-11872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:08.865 [DEBUG] [Thread-11873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:52:15.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:52: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-25T12:52:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 51, 40), 27.01, 16.79, 0.0, 27.75, 26.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:52:15.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:51:40
2025-12-25T12:52:16.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:52:16.160 [DEBUG] [Thread-11874] [transport.py] [_log()] starting thread (client mode): 0xb955a110
2025-12-25T12:52:16.160 [DEBUG] [Thread-11874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:52:16.179 [DEBUG] [Thread-11874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:52:16.179 [INFO] [Thread-11874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] client lang: <none>
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] server lang: <none>
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] kex follows: False
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] Compression: none
2025-12-25T12:52:16.183 [DEBUG] [Thread-11874] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:52:16.199 [DEBUG] [Thread-11874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:52:16.200 [DEBUG] [Thread-11874] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:52:16.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:52:16.201 [DEBUG] [Thread-11874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:52:16.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:52:16.203 [DEBUG] [Thread-11874] [transport.py] [_log()] userauth is OK
2025-12-25T12:52:16.203 [DEBUG] [Thread-11874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:52:16.204 [DEBUG] [Thread-11874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:52:16.204 [DEBUG] [Thread-11874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:52:16.204 [DEBUG] [Thread-11874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:52:16.229 [INFO] [Thread-11874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:52:16.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:52:16.881 [DEBUG] [Thread-11874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:52:16.881 [DEBUG] [Thread-11874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:52:16.882 [DEBUG] [Thread-11874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:52:16.922 [DEBUG] [Thread-11874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:52:16.922 [DEBUG] [Thread-11874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:52:16.925 [DEBUG] [Thread-11874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:52:16.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:52:16.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:52:16.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:52:16.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:52:16.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:52:16.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:52:16.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:52:16.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:52:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:52:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.452493 -999.00  +25.10  23.17     24   +3.40 1 1 1 1 1   888    0 26.72 195.72 ----- 23.2 23.2 306.4 30.8 31.3 -24.0 30.7 -24.4 30.1 -21.7 30.9 -22.5
2025-12-25T12:52:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:52:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:52:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.452493
2025-12-25T12:52:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:52:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:52:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:52:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:52:16.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:52:16.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:51:40', tmtdew=27.01, humidity=16.79, cloud=0.0, wind=27.75, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:51:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:52:16.953 [DEBUG] [Thread-11874] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:52:17.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-25T12:52:17.046 [DEBUG] [Thread-11877] [transport.py] [_log()] starting thread (client mode): 0xbbfcf340
2025-12-25T12:52:17.046 [DEBUG] [Thread-11877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:52:17.061 [DEBUG] [Thread-11877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:52:17.061 [INFO] [Thread-11877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:52:17.068 [DEBUG] [Thread-11877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:52:17.068 [DEBUG] [Thread-11877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:52:17.068 [DEBUG] [Thread-11877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:52:17.068 [DEBUG] [Thread-11877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:17.068 [DEBUG] [Thread-11877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:17.068 [DEBUG] [Thread-11877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] client lang: <none>
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] server lang: <none>
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] kex follows: False
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] Compression: none
2025-12-25T12:52:17.069 [DEBUG] [Thread-11877] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:52:17.129 [DEBUG] [Thread-11877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:52:17.130 [DEBUG] [Thread-11877] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:52:17.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:52:17.131 [DEBUG] [Thread-11877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:52:17.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:52:17.189 [DEBUG] [Thread-11877] [transport.py] [_log()] userauth is OK
2025-12-25T12:52:17.189 [DEBUG] [Thread-11877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:52:17.189 [DEBUG] [Thread-11877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:52:17.189 [DEBUG] [Thread-11877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:52:17.189 [DEBUG] [Thread-11877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:52:17.209 [INFO] [Thread-11877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:52:17.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-25T12:52:17.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:52:18.028 [DEBUG] [Thread-11877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:52:18.028 [DEBUG] [Thread-11877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:52:18.075 [DEBUG] [Thread-11877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:52:18.076 [DEBUG] [Thread-11877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:52:18.085 [DEBUG] [Thread-11877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:52:18.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:52: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-25T12:52: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-25T12:52:18.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:52:18.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:52:18.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:52:18.119 [DEBUG] [Thread-11877] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:52:23.042 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:23.043 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:23.901 [DEBUG] [Thread-11879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:38.951 [DEBUG] [Thread-11880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:52:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:52:48.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:52: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-25T12:52:48.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 52, 45), 25.94, 18.01, 0.0, 26.49, 25.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:52:48.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:52:45
2025-12-25T12:52:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:52:49.166 [DEBUG] [Thread-11881] [transport.py] [_log()] starting thread (client mode): 0xbbfceda0
2025-12-25T12:52:49.166 [DEBUG] [Thread-11881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:52:49.187 [DEBUG] [Thread-11881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:52:49.187 [INFO] [Thread-11881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:52:49.190 [DEBUG] [Thread-11881] [transport.py] [_log()] client lang: <none>
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] server lang: <none>
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] kex follows: False
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] Compression: none
2025-12-25T12:52:49.191 [DEBUG] [Thread-11881] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:52:49.210 [DEBUG] [Thread-11881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:52:49.211 [DEBUG] [Thread-11881] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:52:49.211 [DEBUG] [Thread-11881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:52:49.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:52:49.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:52:49.213 [DEBUG] [Thread-11881] [transport.py] [_log()] userauth is OK
2025-12-25T12:52:49.213 [DEBUG] [Thread-11881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:52:49.214 [DEBUG] [Thread-11881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:52:49.214 [DEBUG] [Thread-11881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:52:49.214 [DEBUG] [Thread-11881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:52:49.239 [INFO] [Thread-11881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:52:49.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:52:49.896 [DEBUG] [Thread-11881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:52:49.896 [DEBUG] [Thread-11881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:52:49.897 [DEBUG] [Thread-11881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:52:49.937 [DEBUG] [Thread-11881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:52:49.937 [DEBUG] [Thread-11881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:52:49.940 [DEBUG] [Thread-11881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:52:49.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:52:49.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:52:49.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:52:49.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:52:49.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:52:49.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:52:49.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:52:49.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:52:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.452840 -999.00  +24.90  20.76     24   +3.10 1 2 1 1 1   888    0 26.52 190.91 ----- 20.8 20.8 329.4 29.7 31.4 -23.9 30.7 -23.8 30.2 -21.9 30.9 -22.0
2025-12-25T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.452840
2025-12-25T12:52:49.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:52:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:52:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:52:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:52:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:52:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:52:45', tmtdew=25.94, humidity=18.01, cloud=0.0, wind=26.49, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:52:05.376', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:52:49.967 [DEBUG] [Thread-11881] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:52:50.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-25T12:52:50.063 [DEBUG] [Thread-11884] [transport.py] [_log()] starting thread (client mode): 0xbbfccfd0
2025-12-25T12:52:50.063 [DEBUG] [Thread-11884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:52:50.078 [DEBUG] [Thread-11884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:52:50.078 [INFO] [Thread-11884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:52:50.086 [DEBUG] [Thread-11884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:52:50.086 [DEBUG] [Thread-11884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:52:50.086 [DEBUG] [Thread-11884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:52:50.086 [DEBUG] [Thread-11884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] client lang: <none>
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] server lang: <none>
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] kex follows: False
2025-12-25T12:52:50.087 [DEBUG] [Thread-11884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:52:50.088 [DEBUG] [Thread-11884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:52:50.088 [DEBUG] [Thread-11884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:52:50.088 [DEBUG] [Thread-11884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:52:50.088 [DEBUG] [Thread-11884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:52:50.088 [DEBUG] [Thread-11884] [transport.py] [_log()] Compression: none
2025-12-25T12:52:50.088 [DEBUG] [Thread-11884] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:52:50.145 [DEBUG] [Thread-11884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:52:50.145 [DEBUG] [Thread-11884] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:52:50.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:52:50.147 [DEBUG] [Thread-11884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:52:50.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:52:50.208 [DEBUG] [Thread-11884] [transport.py] [_log()] userauth is OK
2025-12-25T12:52:50.208 [DEBUG] [Thread-11884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:52:50.209 [DEBUG] [Thread-11884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:52:50.209 [DEBUG] [Thread-11884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:52:50.209 [DEBUG] [Thread-11884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:52:50.230 [INFO] [Thread-11884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:52:50.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-25T12:52:50.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:52:51.076 [DEBUG] [Thread-11884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:52:51.077 [DEBUG] [Thread-11884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:52:51.124 [DEBUG] [Thread-11884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:52:51.124 [DEBUG] [Thread-11884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:52:51.134 [DEBUG] [Thread-11884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:52:51.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:52: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-25T12:52: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-25T12:52:51.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:52:51.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:52:51.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:52:51.174 [DEBUG] [Thread-11884] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:52:53.980 [DEBUG] [Thread-11886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:02.701 [DEBUG] [Thread-11887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:09.027 [DEBUG] [Thread-11888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:53:21.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:53: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-25T12:53:21.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 53, 17), 25.8, 18.17, 0.0, 24.99, 25.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:53:21.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:53:17
2025-12-25T12:53:22.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:53:22.190 [DEBUG] [Thread-11889] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-25T12:53:22.190 [DEBUG] [Thread-11889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:53:22.211 [DEBUG] [Thread-11889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:53:22.211 [INFO] [Thread-11889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:53:22.214 [DEBUG] [Thread-11889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:53:22.214 [DEBUG] [Thread-11889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:53:22.214 [DEBUG] [Thread-11889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:53:22.214 [DEBUG] [Thread-11889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:22.214 [DEBUG] [Thread-11889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:22.214 [DEBUG] [Thread-11889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] client lang: <none>
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] server lang: <none>
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] kex follows: False
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:53:22.215 [DEBUG] [Thread-11889] [transport.py] [_log()] Compression: none
2025-12-25T12:53:22.216 [DEBUG] [Thread-11889] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:53:22.234 [DEBUG] [Thread-11889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:53:22.235 [DEBUG] [Thread-11889] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:53:22.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:53:22.236 [DEBUG] [Thread-11889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:53:22.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:53:22.238 [DEBUG] [Thread-11889] [transport.py] [_log()] userauth is OK
2025-12-25T12:53:22.238 [DEBUG] [Thread-11889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:53:22.238 [DEBUG] [Thread-11889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:53:22.238 [DEBUG] [Thread-11889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:53:22.238 [DEBUG] [Thread-11889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:53:22.263 [INFO] [Thread-11889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:53:22.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:53:22.862 [DEBUG] [Thread-11889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:53:22.862 [DEBUG] [Thread-11889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:53:22.863 [DEBUG] [Thread-11889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:53:22.903 [DEBUG] [Thread-11889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:53:22.903 [DEBUG] [Thread-11889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:53:22.907 [DEBUG] [Thread-11889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:53:22.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:53:22.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:53:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:53:22.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:53:22.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:53:22.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:53:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:53:22.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:53:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:53:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.453187 -999.00  +25.10  27.18     24   +3.40 1 1 1 1 1   888    0 27.09 193.17 ----- 27.2 27.2 291.4 32.8 31.4 -25.4 30.7 -24.7 30.3 -22.8 30.9 -22.4
2025-12-25T12:53:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:53:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:53:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.453187
2025-12-25T12:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:53:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:53:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:53:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:53:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:53:17', tmtdew=25.8, humidity=18.17, cloud=0.0, wind=24.99, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:52:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:53:22.934 [DEBUG] [Thread-11889] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:53:23.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-25T12:53:23.029 [DEBUG] [Thread-11892] [transport.py] [_log()] starting thread (client mode): 0xb957bcd0
2025-12-25T12:53:23.029 [DEBUG] [Thread-11892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:53:23.047 [DEBUG] [Thread-11892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:53:23.047 [INFO] [Thread-11892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:53:23.054 [DEBUG] [Thread-11892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] client lang: <none>
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] server lang: <none>
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] kex follows: False
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:53:23.055 [DEBUG] [Thread-11892] [transport.py] [_log()] Compression: none
2025-12-25T12:53:23.056 [DEBUG] [Thread-11892] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:53:23.111 [DEBUG] [Thread-11892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:53:23.112 [DEBUG] [Thread-11892] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:53:23.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:53:23.113 [DEBUG] [Thread-11892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:53:23.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:53:23.168 [DEBUG] [Thread-11892] [transport.py] [_log()] userauth is OK
2025-12-25T12:53:23.168 [DEBUG] [Thread-11892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:53:23.168 [DEBUG] [Thread-11892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:53:23.168 [DEBUG] [Thread-11892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:53:23.168 [DEBUG] [Thread-11892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:53:23.181 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:23.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:23.187 [INFO] [Thread-11892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:53:23.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-25T12:53:23.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:53:24.050 [DEBUG] [Thread-11892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:53:24.051 [DEBUG] [Thread-11892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:53:24.054 [DEBUG] [Thread-11894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:24.098 [DEBUG] [Thread-11892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:53:24.098 [DEBUG] [Thread-11892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:53:24.107 [DEBUG] [Thread-11892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:53:24.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:53:24.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:53:24.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:53:24.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:53:24.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:53:24.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:53:24.143 [DEBUG] [Thread-11892] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:53:39.107 [DEBUG] [Thread-11895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:54.144 [DEBUG] [Thread-11896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:53:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:53:54.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:53: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-25T12:53:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 53, 49), 26.75, 17.31, 0.0, 22.52, 25.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:53:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:53:49
2025-12-25T12:53:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:53:55.179 [DEBUG] [Thread-11897] [transport.py] [_log()] starting thread (client mode): 0xb9578430
2025-12-25T12:53:55.179 [DEBUG] [Thread-11897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:53:55.198 [DEBUG] [Thread-11897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:53:55.198 [INFO] [Thread-11897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] client lang: <none>
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] server lang: <none>
2025-12-25T12:53:55.201 [DEBUG] [Thread-11897] [transport.py] [_log()] kex follows: False
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] Compression: none
2025-12-25T12:53:55.202 [DEBUG] [Thread-11897] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:53:55.217 [DEBUG] [Thread-11897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:53:55.217 [DEBUG] [Thread-11897] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:53:55.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:53:55.217 [DEBUG] [Thread-11897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:53:55.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:53:55.218 [DEBUG] [Thread-11897] [transport.py] [_log()] userauth is OK
2025-12-25T12:53:55.218 [DEBUG] [Thread-11897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:53:55.218 [DEBUG] [Thread-11897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:53:55.218 [DEBUG] [Thread-11897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:53:55.218 [DEBUG] [Thread-11897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:53:55.228 [INFO] [Thread-11897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:53:55.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:53:55.868 [DEBUG] [Thread-11897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:53:55.869 [DEBUG] [Thread-11897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:53:55.869 [DEBUG] [Thread-11897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:53:55.910 [DEBUG] [Thread-11897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:53:55.910 [DEBUG] [Thread-11897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:53:55.912 [DEBUG] [Thread-11897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:53:55.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:53:55.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:53:55.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:53:55.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:53:55.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:53:55.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:53:55.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.453534 -999.00  +25.10  25.71     23   +2.70 1 2 1 1 1   888    0 27.43 189.07 ----- 25.7 25.7 312.0 31.0 31.3 -25.0 30.6 -23.7 30.1 -22.1 30.8 -22.5
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.453534
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:53:55.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:53:49', tmtdew=26.75, humidity=17.31, cloud=0.0, wind=22.52, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:53:05.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:53:55.932 [DEBUG] [Thread-11897] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:53:56.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-25T12:53:56.016 [DEBUG] [Thread-11900] [transport.py] [_log()] starting thread (client mode): 0xb9558220
2025-12-25T12:53:56.016 [DEBUG] [Thread-11900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:53:56.034 [DEBUG] [Thread-11900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:53:56.034 [INFO] [Thread-11900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] client lang: <none>
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] server lang: <none>
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] kex follows: False
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] Compression: none
2025-12-25T12:53:56.042 [DEBUG] [Thread-11900] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:53:56.097 [DEBUG] [Thread-11900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:53:56.097 [DEBUG] [Thread-11900] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:53:56.097 [DEBUG] [Thread-11900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:53:56.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:53:56.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:53:56.155 [DEBUG] [Thread-11900] [transport.py] [_log()] userauth is OK
2025-12-25T12:53:56.155 [DEBUG] [Thread-11900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:53:56.155 [DEBUG] [Thread-11900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:53:56.155 [DEBUG] [Thread-11900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:53:56.155 [DEBUG] [Thread-11900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:53:56.169 [INFO] [Thread-11900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:53:56.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-25T12:53:56.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:53:56.951 [DEBUG] [Thread-11900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:53:56.951 [DEBUG] [Thread-11900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:53:56.998 [DEBUG] [Thread-11900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:53:56.998 [DEBUG] [Thread-11900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:53:57.006 [DEBUG] [Thread-11900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:53:57.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:53:57.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-25T12:53:57.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-25T12:53:57.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:53:57.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:53:57.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:53:57.037 [DEBUG] [Thread-11900] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:54:02.764 [DEBUG] [Thread-11902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:54:09.178 [DEBUG] [Thread-11903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:54:23.323 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:54:23.324 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:54:24.228 [DEBUG] [Thread-11904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:54:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:54:27.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:54:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:54:27.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 54, 21), 26.82, 17.24, 0.0, 21.12, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:54:27.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:54:21
2025-12-25T12:54:27.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:54:28.046 [DEBUG] [Thread-11905] [transport.py] [_log()] starting thread (client mode): 0xbbfcffd0
2025-12-25T12:54:28.046 [DEBUG] [Thread-11905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:54:28.064 [DEBUG] [Thread-11905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:54:28.064 [INFO] [Thread-11905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:54:28.066 [DEBUG] [Thread-11905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] client lang: <none>
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] server lang: <none>
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] kex follows: False
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] Compression: none
2025-12-25T12:54:28.067 [DEBUG] [Thread-11905] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:54:28.086 [DEBUG] [Thread-11905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:54:28.086 [DEBUG] [Thread-11905] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:54:28.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:54:28.088 [DEBUG] [Thread-11905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:54:28.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:54:28.090 [DEBUG] [Thread-11905] [transport.py] [_log()] userauth is OK
2025-12-25T12:54:28.090 [DEBUG] [Thread-11905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:54:28.090 [DEBUG] [Thread-11905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:54:28.091 [DEBUG] [Thread-11905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:54:28.091 [DEBUG] [Thread-11905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:54:28.123 [INFO] [Thread-11905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:54:28.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:54:28.746 [DEBUG] [Thread-11905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:54:28.746 [DEBUG] [Thread-11905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:54:28.747 [DEBUG] [Thread-11905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:54:28.787 [DEBUG] [Thread-11905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:54:28.787 [DEBUG] [Thread-11905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:54:28.791 [DEBUG] [Thread-11905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:54:28.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:54:28.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:54:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:54:28.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:54:28.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:54:28.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:54:28.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:54:28.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:54:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:54:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.453881 -999.00  +25.00  23.75     23   +2.70 1 2 1 1 1   888    0 27.34 187.04 ----- 23.8 23.8 297.4 30.2 31.4 -23.8 30.6 -24.6 30.2 -20.7 30.9 -22.3
2025-12-25T12:54:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:54:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:54:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.453881
2025-12-25T12:54:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:54:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:54:28.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:54:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:54:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T12:54:28.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:54:21', tmtdew=26.82, humidity=17.24, cloud=0.0, wind=21.12, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:53:35.318', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:54:28.819 [DEBUG] [Thread-11905] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:54:28.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-25T12:54:28.918 [DEBUG] [Thread-11908] [transport.py] [_log()] starting thread (client mode): 0xb955a320
2025-12-25T12:54:28.918 [DEBUG] [Thread-11908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:54:28.934 [DEBUG] [Thread-11908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:54:28.935 [INFO] [Thread-11908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:54:28.942 [DEBUG] [Thread-11908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:54:28.943 [DEBUG] [Thread-11908] [transport.py] [_log()] client lang: <none>
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] server lang: <none>
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] kex follows: False
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] Compression: none
2025-12-25T12:54:28.944 [DEBUG] [Thread-11908] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:54:29.013 [DEBUG] [Thread-11908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:54:29.013 [DEBUG] [Thread-11908] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:54:29.014 [DEBUG] [Thread-11908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:54:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:54:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:54:29.071 [DEBUG] [Thread-11908] [transport.py] [_log()] userauth is OK
2025-12-25T12:54:29.071 [DEBUG] [Thread-11908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:54:29.071 [DEBUG] [Thread-11908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:54:29.071 [DEBUG] [Thread-11908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:54:29.071 [DEBUG] [Thread-11908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:54:29.087 [INFO] [Thread-11908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:54:29.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-25T12:54:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:54:29.957 [DEBUG] [Thread-11908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:54:29.957 [DEBUG] [Thread-11908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:54:30.005 [DEBUG] [Thread-11908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:54:30.005 [DEBUG] [Thread-11908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:54:30.014 [DEBUG] [Thread-11908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:54:30.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:54:30.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-25T12:54:30.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:54:30.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:54:30.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:54:30.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:54:30.051 [DEBUG] [Thread-11908] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:54:39.260 [DEBUG] [Thread-11910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:54:54.301 [DEBUG] [Thread-11911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:55:00.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:55:00.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-25T12:55:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 54, 53), 26.67, 17.51, 0.0, 23.8, 25.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:55:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:54:53
2025-12-25T12:55:00.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:55:01.052 [DEBUG] [Thread-11912] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-25T12:55:01.052 [DEBUG] [Thread-11912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:55:01.072 [DEBUG] [Thread-11912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:55:01.073 [INFO] [Thread-11912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:55:01.075 [DEBUG] [Thread-11912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:55:01.075 [DEBUG] [Thread-11912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:55:01.075 [DEBUG] [Thread-11912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] client lang: <none>
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] server lang: <none>
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] kex follows: False
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] Compression: none
2025-12-25T12:55:01.076 [DEBUG] [Thread-11912] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:55:01.091 [DEBUG] [Thread-11912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:55:01.092 [DEBUG] [Thread-11912] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:55:01.092 [DEBUG] [Thread-11912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:55:01.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:55:01.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:55:01.094 [DEBUG] [Thread-11912] [transport.py] [_log()] userauth is OK
2025-12-25T12:55:01.094 [DEBUG] [Thread-11912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:55:01.094 [DEBUG] [Thread-11912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:55:01.094 [DEBUG] [Thread-11912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:55:01.094 [DEBUG] [Thread-11912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:55:01.112 [INFO] [Thread-11912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:55:01.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:55:01.759 [DEBUG] [Thread-11912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:55:01.759 [DEBUG] [Thread-11912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:55:01.759 [DEBUG] [Thread-11912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:55:01.799 [DEBUG] [Thread-11912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:55:01.799 [DEBUG] [Thread-11912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:55:01.801 [DEBUG] [Thread-11912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:55:01.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:55:01.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:55:01.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:55:01.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:55:01.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:55:01.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:55:01.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:55:01.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:55:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:55:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:55:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:55:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:55:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:55:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:55:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:55:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:55:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:55:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:55:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:54:53', tmtdew=26.67, humidity=17.51, cloud=0.0, wind=23.8, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:55:01.819 [DEBUG] [Thread-11912] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:55:01.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-25T12:55:01.905 [DEBUG] [Thread-11915] [transport.py] [_log()] starting thread (client mode): 0xb957b4c0
2025-12-25T12:55:01.905 [DEBUG] [Thread-11915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:55:01.919 [DEBUG] [Thread-11915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:55:01.920 [INFO] [Thread-11915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:55:01.927 [DEBUG] [Thread-11915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:55:01.927 [DEBUG] [Thread-11915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] client lang: <none>
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] server lang: <none>
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] kex follows: False
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:55:01.928 [DEBUG] [Thread-11915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:55:01.929 [DEBUG] [Thread-11915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:55:01.929 [DEBUG] [Thread-11915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:55:01.929 [DEBUG] [Thread-11915] [transport.py] [_log()] Compression: none
2025-12-25T12:55:01.929 [DEBUG] [Thread-11915] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:55:01.987 [DEBUG] [Thread-11915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:55:01.988 [DEBUG] [Thread-11915] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:55:01.988 [DEBUG] [Thread-11915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:55:01.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:55:01.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:55:02.047 [DEBUG] [Thread-11915] [transport.py] [_log()] userauth is OK
2025-12-25T12:55:02.047 [DEBUG] [Thread-11915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:55:02.047 [DEBUG] [Thread-11915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:55:02.047 [DEBUG] [Thread-11915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:55:02.047 [DEBUG] [Thread-11915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:55:02.065 [INFO] [Thread-11915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:55:02.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-25T12:55:02.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:55:02.816 [DEBUG] [Thread-11917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:02.891 [DEBUG] [Thread-11915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:55:02.892 [DEBUG] [Thread-11915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:55:02.939 [DEBUG] [Thread-11915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:55:02.939 [DEBUG] [Thread-11915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:55:02.948 [DEBUG] [Thread-11915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:55:02.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:55:02.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:55:02.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:55:02.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:55:02.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:55:02.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:55:02.988 [DEBUG] [Thread-11915] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:55:09.334 [DEBUG] [Thread-11918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:23.465 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:23.466 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:24.381 [DEBUG] [Thread-11919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:33.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:55:33.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:55:33.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-25T12:55:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 55, 25), 26.88, 17.3, 0.0, 25.2, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:55:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:55:25
2025-12-25T12:55:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:55:34.000 [DEBUG] [Thread-11920] [transport.py] [_log()] starting thread (client mode): 0xb957a020
2025-12-25T12:55:34.000 [DEBUG] [Thread-11920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:55:34.020 [DEBUG] [Thread-11920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:55:34.020 [INFO] [Thread-11920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:55:34.023 [DEBUG] [Thread-11920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:55:34.023 [DEBUG] [Thread-11920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:55:34.023 [DEBUG] [Thread-11920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] client lang: <none>
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] server lang: <none>
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] kex follows: False
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] Compression: none
2025-12-25T12:55:34.024 [DEBUG] [Thread-11920] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:55:34.039 [DEBUG] [Thread-11920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:55:34.040 [DEBUG] [Thread-11920] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:55:34.040 [DEBUG] [Thread-11920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:55:34.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:55:34.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:55:34.042 [DEBUG] [Thread-11920] [transport.py] [_log()] userauth is OK
2025-12-25T12:55:34.043 [DEBUG] [Thread-11920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:55:34.043 [DEBUG] [Thread-11920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:55:34.043 [DEBUG] [Thread-11920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:55:34.043 [DEBUG] [Thread-11920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:55:34.067 [INFO] [Thread-11920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:55:34.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:55:34.734 [DEBUG] [Thread-11920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:55:34.734 [DEBUG] [Thread-11920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:55:34.735 [DEBUG] [Thread-11920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:55:34.775 [DEBUG] [Thread-11920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:55:34.775 [DEBUG] [Thread-11920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:55:34.778 [DEBUG] [Thread-11920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:55:34.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:55:34.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:55:34.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:55:34.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:55:34.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:55:34.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:55:34.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:55:34.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:55:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:55:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:55:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:55:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:55:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:55:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:55:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:55:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:55:34.806 [DEBUG] [Thread-11920] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:55:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:55:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:55:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:55:25', tmtdew=26.88, humidity=17.3, cloud=0.0, wind=25.2, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:55:34.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-25T12:55:34.899 [DEBUG] [Thread-11923] [transport.py] [_log()] starting thread (client mode): 0xb955a0e0
2025-12-25T12:55:34.900 [DEBUG] [Thread-11923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:55:34.914 [DEBUG] [Thread-11923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:55:34.914 [INFO] [Thread-11923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:55:34.922 [DEBUG] [Thread-11923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:55:34.922 [DEBUG] [Thread-11923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:55:34.922 [DEBUG] [Thread-11923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:55:34.922 [DEBUG] [Thread-11923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:34.922 [DEBUG] [Thread-11923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] client lang: <none>
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] server lang: <none>
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] kex follows: False
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:55:34.923 [DEBUG] [Thread-11923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:55:34.924 [DEBUG] [Thread-11923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:55:34.924 [DEBUG] [Thread-11923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:55:34.924 [DEBUG] [Thread-11923] [transport.py] [_log()] Compression: none
2025-12-25T12:55:34.924 [DEBUG] [Thread-11923] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:55:34.985 [DEBUG] [Thread-11923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:55:34.986 [DEBUG] [Thread-11923] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:55:34.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:55:34.987 [DEBUG] [Thread-11923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:55:34.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:55:35.047 [DEBUG] [Thread-11923] [transport.py] [_log()] userauth is OK
2025-12-25T12:55:35.048 [DEBUG] [Thread-11923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:55:35.048 [DEBUG] [Thread-11923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:55:35.048 [DEBUG] [Thread-11923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:55:35.048 [DEBUG] [Thread-11923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:55:35.066 [INFO] [Thread-11923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:55: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-25T12:55:35.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:55:35.917 [DEBUG] [Thread-11923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:55:35.917 [DEBUG] [Thread-11923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:55:35.965 [DEBUG] [Thread-11923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:55:35.965 [DEBUG] [Thread-11923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:55:35.974 [DEBUG] [Thread-11923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:55:35.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:55:35.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:55:35.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:55:35.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:55:36.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:55:36.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:55:36.008 [DEBUG] [Thread-11923] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:55:39.417 [DEBUG] [Thread-11925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:55:54.465 [DEBUG] [Thread-11926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:02.881 [DEBUG] [Thread-11927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:06.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:56:06.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:56:06.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-25T12:56:06.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 55, 57), 27.16, 16.78, 0.0, 21.0, 26.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:56:06.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:55:57
2025-12-25T12:56:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:56:07.017 [DEBUG] [Thread-11928] [transport.py] [_log()] starting thread (client mode): 0xb95f0790
2025-12-25T12:56:07.017 [DEBUG] [Thread-11928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:56:07.037 [DEBUG] [Thread-11928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:56:07.037 [INFO] [Thread-11928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:56:07.040 [DEBUG] [Thread-11928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] client lang: <none>
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] server lang: <none>
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] kex follows: False
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] Compression: none
2025-12-25T12:56:07.041 [DEBUG] [Thread-11928] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:56:07.059 [DEBUG] [Thread-11928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:56:07.060 [DEBUG] [Thread-11928] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:56:07.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:56:07.061 [DEBUG] [Thread-11928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:56:07.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:56:07.063 [DEBUG] [Thread-11928] [transport.py] [_log()] userauth is OK
2025-12-25T12:56:07.063 [DEBUG] [Thread-11928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:56:07.063 [DEBUG] [Thread-11928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:56:07.063 [DEBUG] [Thread-11928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:56:07.063 [DEBUG] [Thread-11928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:56:07.088 [INFO] [Thread-11928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:56:07.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:56:07.717 [DEBUG] [Thread-11928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:56:07.718 [DEBUG] [Thread-11928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:56:07.718 [DEBUG] [Thread-11928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:56:07.759 [DEBUG] [Thread-11928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:56:07.759 [DEBUG] [Thread-11928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:56:07.763 [DEBUG] [Thread-11928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:56:07.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:56:07.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:56:07.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:56:07.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:56:07.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:56:07.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:56:07.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:56:07.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:56:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:56:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:56:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:56:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:56:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:56:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:56:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:56:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:56:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:56:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:56:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:55:57', tmtdew=27.16, humidity=16.78, cloud=0.0, wind=21.0, temperature=26.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:56:07.789 [DEBUG] [Thread-11928] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:56:07.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-25T12:56:07.892 [DEBUG] [Thread-11931] [transport.py] [_log()] starting thread (client mode): 0xb95f1f30
2025-12-25T12:56:07.892 [DEBUG] [Thread-11931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:56:07.907 [DEBUG] [Thread-11931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:56:07.907 [INFO] [Thread-11931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:56:07.914 [DEBUG] [Thread-11931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:56:07.915 [DEBUG] [Thread-11931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] client lang: <none>
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] server lang: <none>
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] kex follows: False
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:56:07.916 [DEBUG] [Thread-11931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:56:07.917 [DEBUG] [Thread-11931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:56:07.917 [DEBUG] [Thread-11931] [transport.py] [_log()] Compression: none
2025-12-25T12:56:07.917 [DEBUG] [Thread-11931] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:56:07.974 [DEBUG] [Thread-11931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:56:07.974 [DEBUG] [Thread-11931] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:56:07.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:56:07.975 [DEBUG] [Thread-11931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:56:07.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:56:08.033 [DEBUG] [Thread-11931] [transport.py] [_log()] userauth is OK
2025-12-25T12:56:08.033 [DEBUG] [Thread-11931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:56:08.033 [DEBUG] [Thread-11931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:56:08.034 [DEBUG] [Thread-11931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:56:08.034 [DEBUG] [Thread-11931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:56:08.051 [INFO] [Thread-11931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:56:08.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-25T12:56:08.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:56:08.915 [DEBUG] [Thread-11931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:56:08.915 [DEBUG] [Thread-11931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:56:08.963 [DEBUG] [Thread-11931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:56:08.963 [DEBUG] [Thread-11931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:56:08.972 [DEBUG] [Thread-11931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:56:08.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:56:08.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T12:56:08.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:56:09.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:56:09.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:56:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:56:09.009 [DEBUG] [Thread-11931] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:56:09.495 [DEBUG] [Thread-11933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:23.607 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:23.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:24.547 [DEBUG] [Thread-11934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:39.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:56:39.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:56:39.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-25T12:56:39.580 [DEBUG] [Thread-11935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:56:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 56, 29), 27.25, 16.68, 0.0, 24.6, 26.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:56:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:56:29
2025-12-25T12:56:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:56:39.999 [DEBUG] [Thread-11936] [transport.py] [_log()] starting thread (client mode): 0xb6b17e80
2025-12-25T12:56:39.999 [DEBUG] [Thread-11936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:56:40.020 [DEBUG] [Thread-11936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:56:40.020 [INFO] [Thread-11936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:56:40.021 [DEBUG] [Thread-11936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] client lang: <none>
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] server lang: <none>
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] kex follows: False
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:56:40.022 [DEBUG] [Thread-11936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:56:40.023 [DEBUG] [Thread-11936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:56:40.023 [DEBUG] [Thread-11936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:56:40.023 [DEBUG] [Thread-11936] [transport.py] [_log()] Compression: none
2025-12-25T12:56:40.023 [DEBUG] [Thread-11936] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:56:40.042 [DEBUG] [Thread-11936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:56:40.043 [DEBUG] [Thread-11936] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:56:40.044 [DEBUG] [Thread-11936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:56:40.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:56:40.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:56:40.085 [DEBUG] [Thread-11936] [transport.py] [_log()] userauth is OK
2025-12-25T12:56:40.085 [DEBUG] [Thread-11936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:56:40.085 [DEBUG] [Thread-11936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:56:40.085 [DEBUG] [Thread-11936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:56:40.086 [DEBUG] [Thread-11936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:56:40.106 [INFO] [Thread-11936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:56:40.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:56:40.757 [DEBUG] [Thread-11936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:56:40.757 [DEBUG] [Thread-11936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:56:40.758 [DEBUG] [Thread-11936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:56:40.798 [DEBUG] [Thread-11936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:56:40.798 [DEBUG] [Thread-11936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:56:40.802 [DEBUG] [Thread-11936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:56:40.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:56:40.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:56:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:56:40.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:56:40.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:56:40.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:56:40.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:56:40.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:56:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:56:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:56:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:56:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:56:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:56:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:56:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:56:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:56:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:56:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:56:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:56:29', tmtdew=27.25, humidity=16.68, cloud=0.0, wind=24.6, temperature=26.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:56:40.830 [DEBUG] [Thread-11936] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:56:40.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-25T12:56:40.923 [DEBUG] [Thread-11939] [transport.py] [_log()] starting thread (client mode): 0xb95f0520
2025-12-25T12:56:40.923 [DEBUG] [Thread-11939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:56:40.937 [DEBUG] [Thread-11939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:56:40.937 [INFO] [Thread-11939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] client lang: <none>
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] server lang: <none>
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] kex follows: False
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:56:40.945 [DEBUG] [Thread-11939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:56:40.946 [DEBUG] [Thread-11939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:56:40.946 [DEBUG] [Thread-11939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:56:40.946 [DEBUG] [Thread-11939] [transport.py] [_log()] Compression: none
2025-12-25T12:56:40.946 [DEBUG] [Thread-11939] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:56:41.002 [DEBUG] [Thread-11939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:56:41.002 [DEBUG] [Thread-11939] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:56:41.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:56:41.003 [DEBUG] [Thread-11939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:56:41.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:56:41.058 [DEBUG] [Thread-11939] [transport.py] [_log()] userauth is OK
2025-12-25T12:56:41.058 [DEBUG] [Thread-11939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:56:41.058 [DEBUG] [Thread-11939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:56:41.058 [DEBUG] [Thread-11939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:56:41.058 [DEBUG] [Thread-11939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:56:41.083 [INFO] [Thread-11939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:56:41.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-25T12:56:41.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:56:41.888 [DEBUG] [Thread-11939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:56:41.889 [DEBUG] [Thread-11939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:56:41.937 [DEBUG] [Thread-11939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:56:41.937 [DEBUG] [Thread-11939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:56:41.946 [DEBUG] [Thread-11939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:56:41.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:56:41.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-25T12:56:41.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-25T12:56:41.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:56:41.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:56:41.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:56:41.983 [DEBUG] [Thread-11939] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:56:54.617 [DEBUG] [Thread-11941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:02.928 [DEBUG] [Thread-11942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:09.668 [DEBUG] [Thread-11943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:12.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:57:12.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:57:12.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:57:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 57, 1), 27.46, 16.48, 0.0, 24.95, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:57:12.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:57:01
2025-12-25T12:57:12.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:57:13.019 [DEBUG] [Thread-11944] [transport.py] [_log()] starting thread (client mode): 0xb6be2050
2025-12-25T12:57:13.019 [DEBUG] [Thread-11944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:57:13.035 [DEBUG] [Thread-11944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:57:13.035 [INFO] [Thread-11944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] client lang: <none>
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] server lang: <none>
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] kex follows: False
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] Compression: none
2025-12-25T12:57:13.038 [DEBUG] [Thread-11944] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:57:13.056 [DEBUG] [Thread-11944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:57:13.056 [DEBUG] [Thread-11944] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:57:13.056 [DEBUG] [Thread-11944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:57:13.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:57:13.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:57:13.057 [DEBUG] [Thread-11944] [transport.py] [_log()] userauth is OK
2025-12-25T12:57:13.057 [DEBUG] [Thread-11944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:57:13.057 [DEBUG] [Thread-11944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:57:13.057 [DEBUG] [Thread-11944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:57:13.057 [DEBUG] [Thread-11944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:57:13.087 [INFO] [Thread-11944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:57:13.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:57:13.741 [DEBUG] [Thread-11944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:57:13.741 [DEBUG] [Thread-11944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:57:13.741 [DEBUG] [Thread-11944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:57:13.781 [DEBUG] [Thread-11944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:57:13.781 [DEBUG] [Thread-11944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:57:13.783 [DEBUG] [Thread-11944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:57:13.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:57:13.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:57:13.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:57:13.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:57:13.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:57:13.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:57:13.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:57:13.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:57:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:57:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:57:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:57:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:57:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:57:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:57:01', tmtdew=27.46, humidity=16.48, cloud=0.0, wind=24.95, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:57:13.801 [DEBUG] [Thread-11944] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:57:13.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T12:57:13.885 [DEBUG] [Thread-11947] [transport.py] [_log()] starting thread (client mode): 0xb6be38b0
2025-12-25T12:57:13.885 [DEBUG] [Thread-11947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:57:13.899 [DEBUG] [Thread-11947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:57:13.900 [INFO] [Thread-11947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] client lang: <none>
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] server lang: <none>
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] kex follows: False
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] Compression: none
2025-12-25T12:57:13.907 [DEBUG] [Thread-11947] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:57:13.965 [DEBUG] [Thread-11947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:57:13.965 [DEBUG] [Thread-11947] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:57:13.965 [DEBUG] [Thread-11947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:57:13.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:57:13.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:57:14.022 [DEBUG] [Thread-11947] [transport.py] [_log()] userauth is OK
2025-12-25T12:57:14.022 [DEBUG] [Thread-11947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:57:14.022 [DEBUG] [Thread-11947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:57:14.022 [DEBUG] [Thread-11947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:57:14.022 [DEBUG] [Thread-11947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:57:14.036 [INFO] [Thread-11947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:57:14.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:57:14.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:57:14.878 [DEBUG] [Thread-11947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:57:14.878 [DEBUG] [Thread-11947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:57:14.926 [DEBUG] [Thread-11947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:57:14.926 [DEBUG] [Thread-11947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:57:14.935 [DEBUG] [Thread-11947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:57:14.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:57:14.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-25T12:57:14.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-25T12:57:14.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:57:14.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:57:14.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:57:14.967 [DEBUG] [Thread-11947] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:57:23.747 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:23.748 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:24.697 [DEBUG] [Thread-11949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:39.752 [DEBUG] [Thread-11950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:57:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:57:44.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:57:44.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-25T12:57:45.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 57, 33), 28.97, 15.0, 0.0, 23.25, 27.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:57:45.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:57:33
2025-12-25T12:57:45.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:57:45.952 [DEBUG] [Thread-11951] [transport.py] [_log()] starting thread (client mode): 0xb95582e0
2025-12-25T12:57:45.952 [DEBUG] [Thread-11951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:57:45.974 [DEBUG] [Thread-11951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:57:45.974 [INFO] [Thread-11951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] client lang: <none>
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] server lang: <none>
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] kex follows: False
2025-12-25T12:57:45.977 [DEBUG] [Thread-11951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:57:45.978 [DEBUG] [Thread-11951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:57:45.978 [DEBUG] [Thread-11951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:57:45.978 [DEBUG] [Thread-11951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:57:45.978 [DEBUG] [Thread-11951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:57:45.978 [DEBUG] [Thread-11951] [transport.py] [_log()] Compression: none
2025-12-25T12:57:45.978 [DEBUG] [Thread-11951] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:57:45.995 [DEBUG] [Thread-11951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:57:45.995 [DEBUG] [Thread-11951] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:57:45.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:57:45.996 [DEBUG] [Thread-11951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:57:45.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:57:45.998 [DEBUG] [Thread-11951] [transport.py] [_log()] userauth is OK
2025-12-25T12:57:45.999 [DEBUG] [Thread-11951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:57:45.999 [DEBUG] [Thread-11951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:57:45.999 [DEBUG] [Thread-11951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:57:45.999 [DEBUG] [Thread-11951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:57:46.022 [INFO] [Thread-11951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:57:46.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:57:46.661 [DEBUG] [Thread-11951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:57:46.661 [DEBUG] [Thread-11951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:57:46.662 [DEBUG] [Thread-11951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:57:46.702 [DEBUG] [Thread-11951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:57:46.702 [DEBUG] [Thread-11951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:57:46.704 [DEBUG] [Thread-11951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:57:46.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:57:46.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:57:46.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:57:46.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:57:46.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:57:46.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:57:46.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:57:46.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:57:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:57:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:57:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:57:46.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:57:33', tmtdew=28.97, humidity=15.0, cloud=0.0, wind=23.25, temperature=27.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:57:46.726 [DEBUG] [Thread-11951] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:57:46.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-25T12:57:46.816 [DEBUG] [Thread-11954] [transport.py] [_log()] starting thread (client mode): 0xb95582b0
2025-12-25T12:57:46.816 [DEBUG] [Thread-11954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:57:46.832 [DEBUG] [Thread-11954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:57:46.832 [INFO] [Thread-11954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:57:46.840 [DEBUG] [Thread-11954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] client lang: <none>
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] server lang: <none>
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] kex follows: False
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] Compression: none
2025-12-25T12:57:46.841 [DEBUG] [Thread-11954] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:57:46.899 [DEBUG] [Thread-11954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:57:46.900 [DEBUG] [Thread-11954] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:57:46.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:57:46.901 [DEBUG] [Thread-11954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:57:46.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:57:46.956 [DEBUG] [Thread-11954] [transport.py] [_log()] userauth is OK
2025-12-25T12:57:46.956 [DEBUG] [Thread-11954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:57:46.956 [DEBUG] [Thread-11954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:57:46.956 [DEBUG] [Thread-11954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:57:46.956 [DEBUG] [Thread-11954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:57:46.975 [INFO] [Thread-11954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:57:46.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-25T12:57:46.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:57:47.769 [DEBUG] [Thread-11954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:57:47.769 [DEBUG] [Thread-11954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:57:47.817 [DEBUG] [Thread-11954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:57:47.817 [DEBUG] [Thread-11954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:57:47.826 [DEBUG] [Thread-11954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:57:47.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:57:47.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-25T12:57:47.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:57:47.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:57:47.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:57:47.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:57:47.857 [DEBUG] [Thread-11954] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:57:54.784 [DEBUG] [Thread-11956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:02.993 [DEBUG] [Thread-11957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:09.836 [DEBUG] [Thread-11958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:58:17.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:58: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-25T12:58:18.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 58, 5), 28.36, 15.44, 0.0, 28.64, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:58:18.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:58:05
2025-12-25T12:58:18.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:58:18.825 [DEBUG] [Thread-11959] [transport.py] [_log()] starting thread (client mode): 0xb9558d00
2025-12-25T12:58:18.825 [DEBUG] [Thread-11959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:58:18.846 [DEBUG] [Thread-11959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:58:18.846 [INFO] [Thread-11959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:58:18.849 [DEBUG] [Thread-11959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:58:18.849 [DEBUG] [Thread-11959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] client lang: <none>
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] server lang: <none>
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] kex follows: False
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] Compression: none
2025-12-25T12:58:18.850 [DEBUG] [Thread-11959] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:58:18.867 [DEBUG] [Thread-11959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:58:18.867 [DEBUG] [Thread-11959] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:58:18.868 [DEBUG] [Thread-11959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:58:18.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:58:18.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:58:18.870 [DEBUG] [Thread-11959] [transport.py] [_log()] userauth is OK
2025-12-25T12:58:18.870 [DEBUG] [Thread-11959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:58:18.870 [DEBUG] [Thread-11959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:58:18.870 [DEBUG] [Thread-11959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:58:18.870 [DEBUG] [Thread-11959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:58:18.893 [INFO] [Thread-11959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:58:18.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:58:19.511 [DEBUG] [Thread-11959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:58:19.511 [DEBUG] [Thread-11959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:58:19.512 [DEBUG] [Thread-11959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:58:19.552 [DEBUG] [Thread-11959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:58:19.552 [DEBUG] [Thread-11959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:58:19.556 [DEBUG] [Thread-11959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:58:19.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:58:19.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:58:19.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:58:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:58:19.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:58:19.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:58:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:58:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:58:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:58:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:58:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:58:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:58:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:58:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:58:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:58:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:58:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:58:05', tmtdew=28.36, humidity=15.44, cloud=0.0, wind=28.64, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:58:19.584 [DEBUG] [Thread-11959] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:58:19.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-25T12:58:19.674 [DEBUG] [Thread-11962] [transport.py] [_log()] starting thread (client mode): 0xb6be0610
2025-12-25T12:58:19.674 [DEBUG] [Thread-11962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:58:19.689 [DEBUG] [Thread-11962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:58:19.689 [INFO] [Thread-11962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] client lang: <none>
2025-12-25T12:58:19.696 [DEBUG] [Thread-11962] [transport.py] [_log()] server lang: <none>
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] kex follows: False
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] Compression: none
2025-12-25T12:58:19.697 [DEBUG] [Thread-11962] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:58:19.756 [DEBUG] [Thread-11962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:58:19.756 [DEBUG] [Thread-11962] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:58:19.757 [DEBUG] [Thread-11962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:58:19.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:58:19.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:58:19.812 [DEBUG] [Thread-11962] [transport.py] [_log()] userauth is OK
2025-12-25T12:58:19.813 [DEBUG] [Thread-11962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:58:19.813 [DEBUG] [Thread-11962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:58:19.813 [DEBUG] [Thread-11962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:58:19.813 [DEBUG] [Thread-11962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:58:19.835 [INFO] [Thread-11962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:58:19.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-25T12:58:19.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:58:20.722 [DEBUG] [Thread-11962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:58:20.722 [DEBUG] [Thread-11962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:58:20.771 [DEBUG] [Thread-11962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:58:20.771 [DEBUG] [Thread-11962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:58:20.782 [DEBUG] [Thread-11962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:58:20.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:58:20.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-25T12:58:20.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-25T12:58:20.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:58:20.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:58:20.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:58:20.824 [DEBUG] [Thread-11962] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:58:23.888 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:23.889 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:24.873 [DEBUG] [Thread-11964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:39.922 [DEBUG] [Thread-11965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:58:50.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:58:50.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:58:50.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T12:58:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 58, 37), 30.31, 13.51, 0.0, 29.15, 26.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:58:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:58:37
2025-12-25T12:58:51.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:58:51.815 [DEBUG] [Thread-11966] [transport.py] [_log()] starting thread (client mode): 0xb95f1ff0
2025-12-25T12:58:51.815 [DEBUG] [Thread-11966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:58:51.836 [DEBUG] [Thread-11966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:58:51.836 [INFO] [Thread-11966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:58:51.839 [DEBUG] [Thread-11966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:58:51.839 [DEBUG] [Thread-11966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:58:51.839 [DEBUG] [Thread-11966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:58:51.839 [DEBUG] [Thread-11966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:51.839 [DEBUG] [Thread-11966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] client lang: <none>
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] server lang: <none>
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] kex follows: False
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:58:51.840 [DEBUG] [Thread-11966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:58:51.841 [DEBUG] [Thread-11966] [transport.py] [_log()] Compression: none
2025-12-25T12:58:51.841 [DEBUG] [Thread-11966] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:58:51.861 [DEBUG] [Thread-11966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:58:51.862 [DEBUG] [Thread-11966] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:58:51.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:58:51.863 [DEBUG] [Thread-11966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:58:51.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:58:51.865 [DEBUG] [Thread-11966] [transport.py] [_log()] userauth is OK
2025-12-25T12:58:51.865 [DEBUG] [Thread-11966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:58:51.865 [DEBUG] [Thread-11966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:58:51.865 [DEBUG] [Thread-11966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:58:51.865 [DEBUG] [Thread-11966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:58:51.890 [INFO] [Thread-11966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:58:51.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:58:52.513 [DEBUG] [Thread-11966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:58:52.513 [DEBUG] [Thread-11966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:58:52.513 [DEBUG] [Thread-11966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:58:52.554 [DEBUG] [Thread-11966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:58:52.555 [DEBUG] [Thread-11966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:58:52.558 [DEBUG] [Thread-11966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:58:52.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:58:52.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:58:52.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:58:52.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:58:52.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:58:52.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:58:52.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:58:52.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:58:52.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:58:52.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:58:52.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:58:52.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:58:52.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:58:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:58:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:58:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:58:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:58:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:58:52.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:58:37', tmtdew=30.31, humidity=13.51, cloud=0.0, wind=29.15, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:58:52.585 [DEBUG] [Thread-11966] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:58:52.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-25T12:58:52.681 [DEBUG] [Thread-11969] [transport.py] [_log()] starting thread (client mode): 0xb9544fa0
2025-12-25T12:58:52.681 [DEBUG] [Thread-11969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:58:52.697 [DEBUG] [Thread-11969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:58:52.697 [INFO] [Thread-11969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:58:52.705 [DEBUG] [Thread-11969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:58:52.705 [DEBUG] [Thread-11969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] client lang: <none>
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] server lang: <none>
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] kex follows: False
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] Compression: none
2025-12-25T12:58:52.706 [DEBUG] [Thread-11969] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:58:52.769 [DEBUG] [Thread-11969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:58:52.769 [DEBUG] [Thread-11969] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:58:52.770 [DEBUG] [Thread-11969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:58:52.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:58:52.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:58:52.825 [DEBUG] [Thread-11969] [transport.py] [_log()] userauth is OK
2025-12-25T12:58:52.825 [DEBUG] [Thread-11969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:58:52.825 [DEBUG] [Thread-11969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:58:52.826 [DEBUG] [Thread-11969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:58:52.826 [DEBUG] [Thread-11969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:58:52.844 [INFO] [Thread-11969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:58:52.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T12:58:52.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:58:53.706 [DEBUG] [Thread-11969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:58:53.707 [DEBUG] [Thread-11969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:58:53.757 [DEBUG] [Thread-11969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:58:53.757 [DEBUG] [Thread-11969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:58:53.768 [DEBUG] [Thread-11969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:58:53.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:58:53.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-25T12:58:53.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:58:53.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:58:53.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:58:53.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:58:53.810 [DEBUG] [Thread-11969] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:58:54.956 [DEBUG] [Thread-11971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:03.038 [DEBUG] [Thread-11972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:10.005 [DEBUG] [Thread-11973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:23.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:59:23.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:59:23.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-25T12:59:24.027 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:24.028 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 59, 9), 30.25, 13.52, 0.0, 22.5, 26.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:59:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:59:09
2025-12-25T12:59:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:59:24.800 [DEBUG] [Thread-11974] [transport.py] [_log()] starting thread (client mode): 0xb955be80
2025-12-25T12:59:24.800 [DEBUG] [Thread-11974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:59:24.820 [DEBUG] [Thread-11974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:59:24.820 [INFO] [Thread-11974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:59:24.823 [DEBUG] [Thread-11974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:59:24.823 [DEBUG] [Thread-11974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:59:24.823 [DEBUG] [Thread-11974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] client lang: <none>
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] server lang: <none>
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] kex follows: False
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] Compression: none
2025-12-25T12:59:24.824 [DEBUG] [Thread-11974] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:59:24.844 [DEBUG] [Thread-11974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:59:24.844 [DEBUG] [Thread-11974] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:59:24.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:59:24.846 [DEBUG] [Thread-11974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:59:24.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:59:24.848 [DEBUG] [Thread-11974] [transport.py] [_log()] userauth is OK
2025-12-25T12:59:24.848 [DEBUG] [Thread-11974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:59:24.848 [DEBUG] [Thread-11974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:59:24.848 [DEBUG] [Thread-11974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:59:24.848 [DEBUG] [Thread-11974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:59:24.872 [INFO] [Thread-11974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:59:24.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:59:25.038 [DEBUG] [Thread-11976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:25.496 [DEBUG] [Thread-11974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:59:25.496 [DEBUG] [Thread-11974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:59:25.497 [DEBUG] [Thread-11974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:59:25.537 [DEBUG] [Thread-11974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:59:25.538 [DEBUG] [Thread-11974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:59:25.540 [DEBUG] [Thread-11974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:59:25.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:59:25.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:59:25.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:59:25.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:59:25.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:59:25.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:59:25.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:59:25.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:59:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:59:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:59:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:59:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:59:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:59:25.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:59:25.562 [DEBUG] [Thread-11974] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:59:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:59:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:59:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:59:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:59:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:59:09', tmtdew=30.25, humidity=13.52, cloud=0.0, wind=22.5, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:59:25.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-25T12:59:25.661 [DEBUG] [Thread-11978] [transport.py] [_log()] starting thread (client mode): 0xb95f1690
2025-12-25T12:59:25.661 [DEBUG] [Thread-11978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:59:25.676 [DEBUG] [Thread-11978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:59:25.676 [INFO] [Thread-11978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:59:25.683 [DEBUG] [Thread-11978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:59:25.683 [DEBUG] [Thread-11978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:59:25.683 [DEBUG] [Thread-11978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] client lang: <none>
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] server lang: <none>
2025-12-25T12:59:25.684 [DEBUG] [Thread-11978] [transport.py] [_log()] kex follows: False
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] Compression: none
2025-12-25T12:59:25.685 [DEBUG] [Thread-11978] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:59:25.742 [DEBUG] [Thread-11978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:59:25.743 [DEBUG] [Thread-11978] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:59:25.744 [DEBUG] [Thread-11978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:59:25.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:59:25.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:59:25.802 [DEBUG] [Thread-11978] [transport.py] [_log()] userauth is OK
2025-12-25T12:59:25.802 [DEBUG] [Thread-11978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:59:25.803 [DEBUG] [Thread-11978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:59:25.803 [DEBUG] [Thread-11978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:59:25.803 [DEBUG] [Thread-11978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:59:25.822 [INFO] [Thread-11978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:59:25.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-25T12:59:25.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:59:26.738 [DEBUG] [Thread-11978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:59:26.738 [DEBUG] [Thread-11978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:59:26.786 [DEBUG] [Thread-11978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:59:26.786 [DEBUG] [Thread-11978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:59:26.795 [DEBUG] [Thread-11978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:59:26.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:59:26.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-25T12:59:26.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T12:59:26.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:59:26.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:59:26.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:59:26.832 [DEBUG] [Thread-11978] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:59:40.074 [DEBUG] [Thread-11980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:55.122 [DEBUG] [Thread-11981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T12:59:56.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T12:59:56.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T12:59:56.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-25T12:59:57.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 12, 59, 42), 31.31, 12.49, 0.0, 26.61, 26.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T12:59:57.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 12:59:42
2025-12-25T12:59:57.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T12:59:57.820 [DEBUG] [Thread-11982] [transport.py] [_log()] starting thread (client mode): 0xb95f3e50
2025-12-25T12:59:57.821 [DEBUG] [Thread-11982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:59:57.840 [DEBUG] [Thread-11982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T12:59:57.841 [INFO] [Thread-11982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:57.844 [DEBUG] [Thread-11982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] client lang: <none>
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] server lang: <none>
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] kex follows: False
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] Compression: none
2025-12-25T12:59:57.845 [DEBUG] [Thread-11982] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:59:57.865 [DEBUG] [Thread-11982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:59:57.865 [DEBUG] [Thread-11982] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:59:57.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T12:59:57.866 [DEBUG] [Thread-11982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T12:59:57.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:59:57.869 [DEBUG] [Thread-11982] [transport.py] [_log()] userauth is OK
2025-12-25T12:59:57.869 [DEBUG] [Thread-11982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:59:57.869 [DEBUG] [Thread-11982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:59:57.869 [DEBUG] [Thread-11982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T12:59:57.869 [DEBUG] [Thread-11982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:59:57.905 [INFO] [Thread-11982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:59:57.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:59:58.541 [DEBUG] [Thread-11982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:59:58.541 [DEBUG] [Thread-11982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:59:58.541 [DEBUG] [Thread-11982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T12:59:58.582 [DEBUG] [Thread-11982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:59:58.582 [DEBUG] [Thread-11982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:59:58.586 [DEBUG] [Thread-11982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:59:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:59:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T12:59:58.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T12:59:58.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T12:59:58.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:59:58.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T12:59:58.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:59:58.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:59:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T12:59:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.454576 -999.00  +25.20  27.55     23   +2.70 1 1 1 1 1   888    0 27.34 195.74 ----- 27.6 27.6 288.4 31.5 31.4 -24.6 30.7 -24.2 30.2 -23.6 30.9 -22.8
2025-12-25T12:59:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T12:59:58.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T12:59:58.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.454576
2025-12-25T12:59:58.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T12:59:58.613 [DEBUG] [Thread-11982] [transport.py] [_log()] EOF in transport thread
2025-12-25T12:59:58.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T12:59:58.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T12:59:58.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T12:59:58.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T12:59:58.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T12:59:42', tmtdew=31.31, humidity=12.49, cloud=0.0, wind=26.61, temperature=26.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T10:54:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T12:59:58.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-25T12:59:58.707 [DEBUG] [Thread-11985] [transport.py] [_log()] starting thread (client mode): 0xb95f2860
2025-12-25T12:59:58.707 [DEBUG] [Thread-11985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T12:59:58.721 [DEBUG] [Thread-11985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T12:59:58.721 [INFO] [Thread-11985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T12:59:58.729 [DEBUG] [Thread-11985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T12:59:58.729 [DEBUG] [Thread-11985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] client lang: <none>
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] server lang: <none>
2025-12-25T12:59:58.730 [DEBUG] [Thread-11985] [transport.py] [_log()] kex follows: False
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] Compression: none
2025-12-25T12:59:58.731 [DEBUG] [Thread-11985] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T12:59:58.787 [DEBUG] [Thread-11985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T12:59:58.788 [DEBUG] [Thread-11985] [transport.py] [_log()] Switch to new keys ...
2025-12-25T12:59:58.788 [DEBUG] [Thread-11985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T12:59:58.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T12:59:58.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T12:59:58.846 [DEBUG] [Thread-11985] [transport.py] [_log()] userauth is OK
2025-12-25T12:59:58.847 [DEBUG] [Thread-11985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T12:59:58.847 [DEBUG] [Thread-11985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T12:59:58.847 [DEBUG] [Thread-11985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T12:59:58.847 [DEBUG] [Thread-11985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T12:59:58.866 [INFO] [Thread-11985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T12:59:58.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-25T12:59:58.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T12:59:59.671 [DEBUG] [Thread-11985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T12:59:59.671 [DEBUG] [Thread-11985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T12:59:59.719 [DEBUG] [Thread-11985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T12:59:59.719 [DEBUG] [Thread-11985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T12:59:59.729 [DEBUG] [Thread-11985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T12:59:59.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T12:59:59.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-25T12:59:59.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-25T12:59:59.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T12:59:59.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T12:59:59.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T12:59:59.765 [DEBUG] [Thread-11985] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:00:03.089 [DEBUG] [Thread-11987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:00:10.158 [DEBUG] [Thread-11988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:00:24.167 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:00:24.168 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:00:25.206 [DEBUG] [Thread-11989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:00:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:00:29.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:00:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:00:30.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 0, 13), 30.88, 12.84, 0.0, 18.19, 26.58, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:00:30.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:00:13
2025-12-25T13:00:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:00:30.766 [DEBUG] [Thread-11990] [transport.py] [_log()] starting thread (client mode): 0xb9545150
2025-12-25T13:00:30.767 [DEBUG] [Thread-11990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:00:30.787 [DEBUG] [Thread-11990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:00:30.787 [INFO] [Thread-11990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:00:30.789 [DEBUG] [Thread-11990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:00:30.789 [DEBUG] [Thread-11990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] client lang: <none>
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] server lang: <none>
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] kex follows: False
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] Compression: none
2025-12-25T13:00:30.790 [DEBUG] [Thread-11990] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:00:30.805 [DEBUG] [Thread-11990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:00:30.806 [DEBUG] [Thread-11990] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:00:30.806 [DEBUG] [Thread-11990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:00:30.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:00:30.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:00:30.808 [DEBUG] [Thread-11990] [transport.py] [_log()] userauth is OK
2025-12-25T13:00:30.808 [DEBUG] [Thread-11990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:00:30.809 [DEBUG] [Thread-11990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:00:30.809 [DEBUG] [Thread-11990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:00:30.809 [DEBUG] [Thread-11990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:00:30.833 [INFO] [Thread-11990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:00:30.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:00:31.440 [DEBUG] [Thread-11990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:00:31.440 [DEBUG] [Thread-11990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:00:31.440 [DEBUG] [Thread-11990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:00:31.481 [DEBUG] [Thread-11990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:00:31.481 [DEBUG] [Thread-11990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:00:31.485 [DEBUG] [Thread-11990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:00:31.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:00:31.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:00:31.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:00:31.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:00:31.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:00:31.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:00:31.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:00:31.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:00:31.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:00:31.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.458395 -999.00  +26.20  26.04     18   +0.30 1 1 1 1 1   888    0 24.96 92.70 NA 26.0 26.0 330.2 36.4 31.8 -25.1 30.9 -25.1 30.9 -23.0 31.5 -24.2
2025-12-25T13:00:31.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:00:31.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:00:31.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.458395
2025-12-25T13:00:31.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:00:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:00:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:00:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:00:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:00:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:00:13', tmtdew=30.88, humidity=12.84, cloud=0.0, wind=18.19, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:00:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:00:31.511 [DEBUG] [Thread-11990] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:00:31.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-25T13:00:31.605 [DEBUG] [Thread-11993] [transport.py] [_log()] starting thread (client mode): 0xb9544160
2025-12-25T13:00:31.605 [DEBUG] [Thread-11993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:00:31.623 [DEBUG] [Thread-11993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:00:31.624 [INFO] [Thread-11993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:00:31.631 [DEBUG] [Thread-11993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:00:31.631 [DEBUG] [Thread-11993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] client lang: <none>
2025-12-25T13:00:31.632 [DEBUG] [Thread-11993] [transport.py] [_log()] server lang: <none>
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] kex follows: False
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:00:31.633 [DEBUG] [Thread-11993] [transport.py] [_log()] Compression: none
2025-12-25T13:00:31.634 [DEBUG] [Thread-11993] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:00:31.697 [DEBUG] [Thread-11993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:00:31.698 [DEBUG] [Thread-11993] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:00:31.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:00:31.699 [DEBUG] [Thread-11993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:00:31.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:00:31.755 [DEBUG] [Thread-11993] [transport.py] [_log()] userauth is OK
2025-12-25T13:00:31.756 [DEBUG] [Thread-11993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:00:31.756 [DEBUG] [Thread-11993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:00:31.756 [DEBUG] [Thread-11993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:00:31.756 [DEBUG] [Thread-11993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:00:31.774 [INFO] [Thread-11993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:00:31.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-25T13:00:31.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:00:32.640 [DEBUG] [Thread-11993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:00:32.640 [DEBUG] [Thread-11993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:00:32.689 [DEBUG] [Thread-11993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:00:32.690 [DEBUG] [Thread-11993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:00:32.701 [DEBUG] [Thread-11993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:00:32.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:00:32.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-25T13:00:32.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:00:32.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:00:32.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:00:32.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:00:32.743 [DEBUG] [Thread-11993] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:00:40.240 [DEBUG] [Thread-11995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:00:55.300 [DEBUG] [Thread-11996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:02.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:01:02.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:01:02.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-25T13:01:03.150 [DEBUG] [Thread-11997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:03.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 0, 45), 31.08, 12.62, 0.0, 31.23, 26.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:01:03.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:00:45
2025-12-25T13:01:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:01:03.795 [DEBUG] [Thread-11998] [transport.py] [_log()] starting thread (client mode): 0xb95453f0
2025-12-25T13:01:03.796 [DEBUG] [Thread-11998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:01:03.815 [DEBUG] [Thread-11998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:01:03.815 [INFO] [Thread-11998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] client lang: <none>
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] server lang: <none>
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] kex follows: False
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] Compression: none
2025-12-25T13:01:03.818 [DEBUG] [Thread-11998] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:01:03.832 [DEBUG] [Thread-11998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:01:03.832 [DEBUG] [Thread-11998] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:01:03.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:01:03.832 [DEBUG] [Thread-11998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:01:03.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:01:03.833 [DEBUG] [Thread-11998] [transport.py] [_log()] userauth is OK
2025-12-25T13:01:03.833 [DEBUG] [Thread-11998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:01:03.833 [DEBUG] [Thread-11998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:01:03.833 [DEBUG] [Thread-11998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:01:03.833 [DEBUG] [Thread-11998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:01:03.860 [INFO] [Thread-11998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:01:03.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:01:04.504 [DEBUG] [Thread-11998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:01:04.504 [DEBUG] [Thread-11998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:01:04.504 [DEBUG] [Thread-11998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:01:04.546 [DEBUG] [Thread-11998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:01:04.546 [DEBUG] [Thread-11998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:01:04.548 [DEBUG] [Thread-11998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:01:04.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:01:04.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:01:04.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:01:04.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:01:04.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:01:04.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:01:04.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.458743 -999.00  +25.80  21.80     18   +0.30 1 1 1 1 1   888    0 25.52 94.51 NA 21.8 21.8 319.4 34.8 31.7 -24.3 30.9 -25.1 30.9 -21.8 31.5 -22.9
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.458743
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:01:04.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:01:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:01:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:01:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:00:45', tmtdew=31.08, humidity=12.62, cloud=0.0, wind=31.23, temperature=26.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:00:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:01:04.567 [DEBUG] [Thread-11998] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:01:04.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-25T13:01:04.652 [DEBUG] [Thread-12001] [transport.py] [_log()] starting thread (client mode): 0xb6be1450
2025-12-25T13:01:04.653 [DEBUG] [Thread-12001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:01:04.667 [DEBUG] [Thread-12001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:01:04.667 [INFO] [Thread-12001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] client lang: <none>
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] server lang: <none>
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] kex follows: False
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] Compression: none
2025-12-25T13:01:04.675 [DEBUG] [Thread-12001] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:01:04.729 [DEBUG] [Thread-12001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:01:04.729 [DEBUG] [Thread-12001] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:01:04.729 [DEBUG] [Thread-12001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:01:04.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:01:04.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:01:04.787 [DEBUG] [Thread-12001] [transport.py] [_log()] userauth is OK
2025-12-25T13:01:04.787 [DEBUG] [Thread-12001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:01:04.787 [DEBUG] [Thread-12001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:01:04.787 [DEBUG] [Thread-12001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:01:04.787 [DEBUG] [Thread-12001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:01:04.801 [INFO] [Thread-12001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:01:04.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-25T13:01:04.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:01:05.633 [DEBUG] [Thread-12001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:01:05.633 [DEBUG] [Thread-12001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:01:05.680 [DEBUG] [Thread-12001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:01:05.680 [DEBUG] [Thread-12001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:01:05.689 [DEBUG] [Thread-12001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:01:05.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:01: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')
2025-12-25T13:01:05.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:01:05.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:01:05.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:01:05.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:01:05.721 [DEBUG] [Thread-12001] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:01:10.334 [DEBUG] [Thread-12003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:24.307 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:24.308 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:25.389 [DEBUG] [Thread-12004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:35.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:01:35.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:01:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:01:36.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 1, 17), 30.77, 12.86, 0.0, 33.72, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:01:36.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:01:17
2025-12-25T13:01:36.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:01:36.729 [DEBUG] [Thread-12005] [transport.py] [_log()] starting thread (client mode): 0xb95595a0
2025-12-25T13:01:36.729 [DEBUG] [Thread-12005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:01:36.749 [DEBUG] [Thread-12005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:01:36.750 [INFO] [Thread-12005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:01:36.753 [DEBUG] [Thread-12005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:01:36.753 [DEBUG] [Thread-12005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:01:36.753 [DEBUG] [Thread-12005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:01:36.753 [DEBUG] [Thread-12005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] client lang: <none>
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] server lang: <none>
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] kex follows: False
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:01:36.754 [DEBUG] [Thread-12005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:01:36.755 [DEBUG] [Thread-12005] [transport.py] [_log()] Compression: none
2025-12-25T13:01:36.755 [DEBUG] [Thread-12005] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:01:36.772 [DEBUG] [Thread-12005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:01:36.772 [DEBUG] [Thread-12005] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:01:36.773 [DEBUG] [Thread-12005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:01:36.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:01:36.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:01:36.775 [DEBUG] [Thread-12005] [transport.py] [_log()] userauth is OK
2025-12-25T13:01:36.775 [DEBUG] [Thread-12005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:01:36.775 [DEBUG] [Thread-12005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:01:36.775 [DEBUG] [Thread-12005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:01:36.775 [DEBUG] [Thread-12005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:01:36.811 [INFO] [Thread-12005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:01:36.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:01:37.442 [DEBUG] [Thread-12005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:01:37.442 [DEBUG] [Thread-12005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:01:37.443 [DEBUG] [Thread-12005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:01:37.484 [DEBUG] [Thread-12005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:01:37.484 [DEBUG] [Thread-12005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:01:37.487 [DEBUG] [Thread-12005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:01:37.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:01:37.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:01:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:01:37.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:01:37.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:01:37.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:01:37.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:01:37.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:01:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:01:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.459090 -999.00  +25.80  17.32     20   +1.10 1 1 1 1 1   888    0 25.75 104.10 NA 17.3 17.3 327.4 31.9 31.7 -25.0 31.1 -23.5 30.9 -22.2 -999.0 -999.0
2025-12-25T13:01:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:01:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:01:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.459090
2025-12-25T13:01:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:01:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:01:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:01:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:01:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:01:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:01:17', tmtdew=30.77, humidity=12.86, cloud=0.0, wind=33.72, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:01:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:01:37.509 [DEBUG] [Thread-12005] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:01:37.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-25T13:01:37.603 [DEBUG] [Thread-12008] [transport.py] [_log()] starting thread (client mode): 0xb95449d0
2025-12-25T13:01:37.603 [DEBUG] [Thread-12008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:01:37.620 [DEBUG] [Thread-12008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:01:37.620 [INFO] [Thread-12008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:01:37.627 [DEBUG] [Thread-12008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] client lang: <none>
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] server lang: <none>
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] kex follows: False
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] Compression: none
2025-12-25T13:01:37.628 [DEBUG] [Thread-12008] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:01:37.686 [DEBUG] [Thread-12008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:01:37.687 [DEBUG] [Thread-12008] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:01:37.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:01:37.687 [DEBUG] [Thread-12008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:01:37.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:01:37.743 [DEBUG] [Thread-12008] [transport.py] [_log()] userauth is OK
2025-12-25T13:01:37.743 [DEBUG] [Thread-12008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:01:37.743 [DEBUG] [Thread-12008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:01:37.743 [DEBUG] [Thread-12008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:01:37.743 [DEBUG] [Thread-12008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:01:37.758 [INFO] [Thread-12008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:01:37.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-25T13:01:37.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:01:38.592 [DEBUG] [Thread-12008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:01:38.592 [DEBUG] [Thread-12008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:01:38.639 [DEBUG] [Thread-12008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:01:38.640 [DEBUG] [Thread-12008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:01:38.648 [DEBUG] [Thread-12008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:01:38.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:01:38.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:01:38.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-25T13:01:38.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:01:38.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:01:38.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:01:38.682 [DEBUG] [Thread-12008] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:01:40.424 [DEBUG] [Thread-12010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:01:55.468 [DEBUG] [Thread-12011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:03.206 [DEBUG] [Thread-12012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:02:08.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:02:08.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-25T13:02:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 1, 50), 30.29, 13.34, 0.0, 20.91, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:02:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:01:50
2025-12-25T13:02:09.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:02:09.687 [DEBUG] [Thread-12013] [transport.py] [_log()] starting thread (client mode): 0xbbfcdc30
2025-12-25T13:02:09.687 [DEBUG] [Thread-12013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:02:09.707 [DEBUG] [Thread-12013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:02:09.708 [INFO] [Thread-12013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:09.711 [DEBUG] [Thread-12013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] client lang: <none>
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] server lang: <none>
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] kex follows: False
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] Compression: none
2025-12-25T13:02:09.712 [DEBUG] [Thread-12013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:02:09.722 [DEBUG] [Thread-12013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:02:09.723 [DEBUG] [Thread-12013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:02:09.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:02:09.724 [DEBUG] [Thread-12013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:02:09.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:02:09.765 [DEBUG] [Thread-12013] [transport.py] [_log()] userauth is OK
2025-12-25T13:02:09.765 [DEBUG] [Thread-12013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:02:09.765 [DEBUG] [Thread-12013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:02:09.765 [DEBUG] [Thread-12013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:02:09.765 [DEBUG] [Thread-12013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:02:09.796 [INFO] [Thread-12013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:02:09.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:02:10.434 [DEBUG] [Thread-12013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:02:10.434 [DEBUG] [Thread-12013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:02:10.435 [DEBUG] [Thread-12013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:02:10.475 [DEBUG] [Thread-12013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:02:10.475 [DEBUG] [Thread-12013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:02:10.479 [DEBUG] [Thread-12013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:02:10.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:02:10.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:02:10.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:02:10.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:02:10.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:02:10.503 [DEBUG] [Thread-12016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:10.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:02:10.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:02:10.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:02:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:02:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.459437 -999.00  +26.80  20.69     20   +2.00 1 2 1 1 1   888    0 25.27 102.40 ----- 20.7 20.7 315.0 25.7 31.9 -23.5 31.3 -23.1 31.0 -21.2 31.7 -22.1
2025-12-25T13:02:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:02:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:02:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.459437
2025-12-25T13:02:10.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:02:10.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:02:10.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:02:10.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:02:10.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T13:02:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:01:50', tmtdew=30.29, humidity=13.34, cloud=0.0, wind=20.91, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:01:35.357', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:02:10.508 [DEBUG] [Thread-12013] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:02:10.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:02:10.601 [DEBUG] [Thread-12017] [transport.py] [_log()] starting thread (client mode): 0xb95905e0
2025-12-25T13:02:10.601 [DEBUG] [Thread-12017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:02:10.616 [DEBUG] [Thread-12017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:02:10.617 [INFO] [Thread-12017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:02:10.624 [DEBUG] [Thread-12017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:02:10.624 [DEBUG] [Thread-12017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:02:10.624 [DEBUG] [Thread-12017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:02:10.624 [DEBUG] [Thread-12017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] client lang: <none>
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] server lang: <none>
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] kex follows: False
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:02:10.625 [DEBUG] [Thread-12017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:02:10.626 [DEBUG] [Thread-12017] [transport.py] [_log()] Compression: none
2025-12-25T13:02:10.626 [DEBUG] [Thread-12017] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:02:10.686 [DEBUG] [Thread-12017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:02:10.686 [DEBUG] [Thread-12017] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:02:10.687 [DEBUG] [Thread-12017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:02:10.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:02:10.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:02:10.744 [DEBUG] [Thread-12017] [transport.py] [_log()] userauth is OK
2025-12-25T13:02:10.745 [DEBUG] [Thread-12017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:02:10.745 [DEBUG] [Thread-12017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:02:10.745 [DEBUG] [Thread-12017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:02:10.745 [DEBUG] [Thread-12017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:02:10.763 [INFO] [Thread-12017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:02:10.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-25T13:02:10.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:02:11.613 [DEBUG] [Thread-12017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:02:11.613 [DEBUG] [Thread-12017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:02:11.661 [DEBUG] [Thread-12017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:02:11.661 [DEBUG] [Thread-12017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:02:11.670 [DEBUG] [Thread-12017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:02:11.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:02:11.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-25T13:02:11.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-25T13:02:11.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:02:11.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:02:11.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:02:11.710 [DEBUG] [Thread-12017] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:02:24.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:24.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:25.536 [DEBUG] [Thread-12019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:40.582 [DEBUG] [Thread-12020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:02:41.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:02:41.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:02:41.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:02:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 2, 22), 30.39, 13.27, 0.0, 25.94, 26.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:02:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:02:22
2025-12-25T13:02:42.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:02:42.709 [DEBUG] [Thread-12021] [transport.py] [_log()] starting thread (client mode): 0xbbfcdc30
2025-12-25T13:02:42.710 [DEBUG] [Thread-12021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:02:42.730 [DEBUG] [Thread-12021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:02:42.730 [INFO] [Thread-12021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] client lang: <none>
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] server lang: <none>
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] kex follows: False
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] Compression: none
2025-12-25T13:02:42.734 [DEBUG] [Thread-12021] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:02:42.751 [DEBUG] [Thread-12021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:02:42.751 [DEBUG] [Thread-12021] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:02:42.751 [DEBUG] [Thread-12021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:02:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:02:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:02:42.752 [DEBUG] [Thread-12021] [transport.py] [_log()] userauth is OK
2025-12-25T13:02:42.752 [DEBUG] [Thread-12021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:02:42.753 [DEBUG] [Thread-12021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:02:42.753 [DEBUG] [Thread-12021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:02:42.753 [DEBUG] [Thread-12021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:02:42.777 [INFO] [Thread-12021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:02:42.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:02:43.378 [DEBUG] [Thread-12021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:02:43.378 [DEBUG] [Thread-12021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:02:43.378 [DEBUG] [Thread-12021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:02:43.419 [DEBUG] [Thread-12021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:02:43.419 [DEBUG] [Thread-12021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:02:43.422 [DEBUG] [Thread-12021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:02:43.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:02:43.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:02:43.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:02:43.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:02:43.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:02:43.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:02:43.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:02:43.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:02:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:02:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.459784 -999.00  +27.60  29.28     19   +1.80 1 1 1 1 1   888    0 25.99 111.94 ----- 29.3 29.3 311.6 35.1 32.1 -24.1 31.5 -23.7 31.1 -22.6 31.9 -22.1
2025-12-25T13:02:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:02:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:02:43.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.459784
2025-12-25T13:02:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:02:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:02:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:02:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:02:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:02:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:02:22', tmtdew=30.39, humidity=13.27, cloud=0.0, wind=25.94, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:02:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:02:43.448 [DEBUG] [Thread-12021] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:02:43.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-25T13:02:43.541 [DEBUG] [Thread-12024] [transport.py] [_log()] starting thread (client mode): 0xb9590c10
2025-12-25T13:02:43.541 [DEBUG] [Thread-12024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:02:43.555 [DEBUG] [Thread-12024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:02:43.555 [INFO] [Thread-12024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:02:43.563 [DEBUG] [Thread-12024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:02:43.563 [DEBUG] [Thread-12024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:02:43.563 [DEBUG] [Thread-12024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:02:43.563 [DEBUG] [Thread-12024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:43.563 [DEBUG] [Thread-12024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] client lang: <none>
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] server lang: <none>
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] kex follows: False
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] Compression: none
2025-12-25T13:02:43.564 [DEBUG] [Thread-12024] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:02:43.620 [DEBUG] [Thread-12024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:02:43.621 [DEBUG] [Thread-12024] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:02:43.622 [DEBUG] [Thread-12024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:02:43.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:02:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:02:43.677 [DEBUG] [Thread-12024] [transport.py] [_log()] userauth is OK
2025-12-25T13:02:43.677 [DEBUG] [Thread-12024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:02:43.677 [DEBUG] [Thread-12024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:02:43.677 [DEBUG] [Thread-12024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:02:43.677 [DEBUG] [Thread-12024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:02:43.695 [INFO] [Thread-12024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:02:43.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-25T13:02:43.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:02:44.514 [DEBUG] [Thread-12024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:02:44.514 [DEBUG] [Thread-12024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:02:44.562 [DEBUG] [Thread-12024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:02:44.562 [DEBUG] [Thread-12024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:02:44.571 [DEBUG] [Thread-12024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:02:44.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:02:44.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-25T13:02:44.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:02:44.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:02:44.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:02:44.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:02:44.608 [DEBUG] [Thread-12024] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:02:55.619 [DEBUG] [Thread-12026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:03.266 [DEBUG] [Thread-12027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:10.654 [DEBUG] [Thread-12028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:14.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:03:14.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:03:14.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-25T13:03:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 2, 54), 31.06, 12.54, 0.0, 25.16, 26.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:03:15.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:02:54
2025-12-25T13:03:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:03:15.610 [DEBUG] [Thread-12029] [transport.py] [_log()] starting thread (client mode): 0xb95904c0
2025-12-25T13:03:15.610 [DEBUG] [Thread-12029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:03:15.629 [DEBUG] [Thread-12029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:03:15.629 [INFO] [Thread-12029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] client lang: <none>
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] server lang: <none>
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] kex follows: False
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:03:15.632 [DEBUG] [Thread-12029] [transport.py] [_log()] Compression: none
2025-12-25T13:03:15.633 [DEBUG] [Thread-12029] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:03:15.640 [DEBUG] [Thread-12029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:03:15.641 [DEBUG] [Thread-12029] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:03:15.641 [DEBUG] [Thread-12029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:03:15.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:03:15.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:03:15.643 [DEBUG] [Thread-12029] [transport.py] [_log()] userauth is OK
2025-12-25T13:03:15.643 [DEBUG] [Thread-12029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:03:15.643 [DEBUG] [Thread-12029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:03:15.644 [DEBUG] [Thread-12029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:03:15.644 [DEBUG] [Thread-12029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:03:15.668 [INFO] [Thread-12029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:03:15.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:03:16.305 [DEBUG] [Thread-12029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:03:16.305 [DEBUG] [Thread-12029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:03:16.305 [DEBUG] [Thread-12029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:03:16.346 [DEBUG] [Thread-12029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:03:16.346 [DEBUG] [Thread-12029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:03:16.350 [DEBUG] [Thread-12029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:03:16.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:03:16.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:03:16.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:03:16.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:03:16.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:03:16.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:03:16.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:03:16.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:03:16.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:03:16.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.460131 -999.00  +27.40  31.56     18   +1.20 1 1 2 1 1   888    0 26.52 118.99 ----- 31.6 31.6 318.8 37.0 32.2 -23.9 31.5 -25.4 31.3 -21.4 32.0 -23.4
2025-12-25T13:03:16.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:03:16.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:03:16.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.460131
2025-12-25T13:03:16.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:03:16.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:03:16.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:03:16.378 [DEBUG] [Thread-12029] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:03:16.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:03:16.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:03:16.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:02:54', tmtdew=31.06, humidity=12.54, cloud=0.0, wind=25.16, temperature=26.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:02:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:03:16.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-25T13:03:16.483 [DEBUG] [Thread-12032] [transport.py] [_log()] starting thread (client mode): 0xb6be2170
2025-12-25T13:03:16.483 [DEBUG] [Thread-12032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:03:16.499 [DEBUG] [Thread-12032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:03:16.499 [INFO] [Thread-12032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:03:16.506 [DEBUG] [Thread-12032] [transport.py] [_log()] client lang: <none>
2025-12-25T13:03:16.507 [DEBUG] [Thread-12032] [transport.py] [_log()] server lang: <none>
2025-12-25T13:03:16.507 [DEBUG] [Thread-12032] [transport.py] [_log()] kex follows: False
2025-12-25T13:03:16.507 [DEBUG] [Thread-12032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:03:16.507 [DEBUG] [Thread-12032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:03:16.507 [DEBUG] [Thread-12032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:03:16.507 [DEBUG] [Thread-12032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:03:16.508 [DEBUG] [Thread-12032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:03:16.508 [DEBUG] [Thread-12032] [transport.py] [_log()] Compression: none
2025-12-25T13:03:16.508 [DEBUG] [Thread-12032] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:03:16.568 [DEBUG] [Thread-12032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:03:16.569 [DEBUG] [Thread-12032] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:03:16.569 [DEBUG] [Thread-12032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:03:16.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:03:16.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:03:16.625 [DEBUG] [Thread-12032] [transport.py] [_log()] userauth is OK
2025-12-25T13:03:16.626 [DEBUG] [Thread-12032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:03:16.626 [DEBUG] [Thread-12032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:03:16.626 [DEBUG] [Thread-12032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:03:16.626 [DEBUG] [Thread-12032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:03:16.645 [INFO] [Thread-12032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:03:16.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-25T13:03:16.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:03:17.509 [DEBUG] [Thread-12032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:03:17.509 [DEBUG] [Thread-12032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:03:17.557 [DEBUG] [Thread-12032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:03:17.557 [DEBUG] [Thread-12032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:03:17.567 [DEBUG] [Thread-12032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:03:17.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:03:17.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-25T13:03:17.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-25T13:03:17.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:03:17.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:03:17.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:03:17.603 [DEBUG] [Thread-12032] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:03:24.615 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:24.617 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:25.693 [DEBUG] [Thread-12034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:40.748 [DEBUG] [Thread-12035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:03:47.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:03:47.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:03:47.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-25T13:03:48.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 3, 26), 30.72, 12.81, 0.0, 24.26, 26.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:03:48.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:03:26
2025-12-25T13:03:48.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:03:48.645 [DEBUG] [Thread-12036] [transport.py] [_log()] starting thread (client mode): 0xb6be01f0
2025-12-25T13:03:48.645 [DEBUG] [Thread-12036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:03:48.659 [DEBUG] [Thread-12036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:03:48.659 [INFO] [Thread-12036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:03:48.662 [DEBUG] [Thread-12036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] client lang: <none>
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] server lang: <none>
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] kex follows: False
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] Compression: none
2025-12-25T13:03:48.663 [DEBUG] [Thread-12036] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:03:48.680 [DEBUG] [Thread-12036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:03:48.681 [DEBUG] [Thread-12036] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:03:48.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:03:48.681 [DEBUG] [Thread-12036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:03:48.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:03:48.683 [DEBUG] [Thread-12036] [transport.py] [_log()] userauth is OK
2025-12-25T13:03:48.684 [DEBUG] [Thread-12036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:03:48.684 [DEBUG] [Thread-12036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:03:48.684 [DEBUG] [Thread-12036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:03:48.684 [DEBUG] [Thread-12036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:03:48.705 [INFO] [Thread-12036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:03:48.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:03:49.336 [DEBUG] [Thread-12036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:03:49.337 [DEBUG] [Thread-12036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:03:49.337 [DEBUG] [Thread-12036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:03:49.378 [DEBUG] [Thread-12036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:03:49.378 [DEBUG] [Thread-12036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:03:49.381 [DEBUG] [Thread-12036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:03:49.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:03:49.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:03:49.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:03:49.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:03:49.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:03:49.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:03:49.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:03:49.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:03:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:03:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.460479 -999.00  +26.90  28.79     17   +0.50 1 1 1 1 1   888    0 26.50 127.36 ----- 28.8 28.8 354.1 44.3 32.2 -25.4 31.3 -27.3 31.4 -22.7 31.9 -25.5
2025-12-25T13:03:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:03:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:03:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.460479
2025-12-25T13:03:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:03:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:03:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:03:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:03:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:03:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:03:26', tmtdew=30.72, humidity=12.81, cloud=0.0, wind=24.26, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:03:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:03:49.405 [DEBUG] [Thread-12036] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:03:49.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:03:49.498 [DEBUG] [Thread-12039] [transport.py] [_log()] starting thread (client mode): 0xb9544dc0
2025-12-25T13:03:49.499 [DEBUG] [Thread-12039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:03:49.514 [DEBUG] [Thread-12039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:03:49.514 [INFO] [Thread-12039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] client lang: <none>
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] server lang: <none>
2025-12-25T13:03:49.522 [DEBUG] [Thread-12039] [transport.py] [_log()] kex follows: False
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] Compression: none
2025-12-25T13:03:49.523 [DEBUG] [Thread-12039] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:03:49.581 [DEBUG] [Thread-12039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:03:49.581 [DEBUG] [Thread-12039] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:03:49.582 [DEBUG] [Thread-12039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:03:49.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:03:49.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:03:49.637 [DEBUG] [Thread-12039] [transport.py] [_log()] userauth is OK
2025-12-25T13:03:49.637 [DEBUG] [Thread-12039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:03:49.637 [DEBUG] [Thread-12039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:03:49.637 [DEBUG] [Thread-12039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:03:49.637 [DEBUG] [Thread-12039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:03:49.658 [INFO] [Thread-12039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:03:49.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-25T13:03:49.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:03:50.565 [DEBUG] [Thread-12039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:03:50.565 [DEBUG] [Thread-12039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:03:50.614 [DEBUG] [Thread-12039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:03:50.614 [DEBUG] [Thread-12039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:03:50.623 [DEBUG] [Thread-12039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:03:50.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:03:50.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:03:50.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:03:50.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:03:50.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:03:50.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:03:50.655 [DEBUG] [Thread-12039] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:03:55.775 [DEBUG] [Thread-12041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:03.318 [DEBUG] [Thread-12042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:10.824 [DEBUG] [Thread-12043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:04:20.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:04:20.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:04:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 3, 58), 30.13, 13.61, 0.0, 26.13, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:04:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:03:58
2025-12-25T13:04:21.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:04:21.708 [DEBUG] [Thread-12044] [transport.py] [_log()] starting thread (client mode): 0xb6be1570
2025-12-25T13:04:21.708 [DEBUG] [Thread-12044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:04:21.728 [DEBUG] [Thread-12044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:04:21.728 [INFO] [Thread-12044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] client lang: <none>
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] server lang: <none>
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] kex follows: False
2025-12-25T13:04:21.731 [DEBUG] [Thread-12044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:04:21.732 [DEBUG] [Thread-12044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:04:21.732 [DEBUG] [Thread-12044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:04:21.732 [DEBUG] [Thread-12044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:04:21.732 [DEBUG] [Thread-12044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:04:21.732 [DEBUG] [Thread-12044] [transport.py] [_log()] Compression: none
2025-12-25T13:04:21.732 [DEBUG] [Thread-12044] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:04:21.748 [DEBUG] [Thread-12044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:04:21.748 [DEBUG] [Thread-12044] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:04:21.748 [DEBUG] [Thread-12044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:04:21.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:04:21.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:04:21.749 [DEBUG] [Thread-12044] [transport.py] [_log()] userauth is OK
2025-12-25T13:04:21.749 [DEBUG] [Thread-12044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:04:21.749 [DEBUG] [Thread-12044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:04:21.749 [DEBUG] [Thread-12044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:04:21.749 [DEBUG] [Thread-12044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:04:21.759 [INFO] [Thread-12044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:04:21.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:04:22.408 [DEBUG] [Thread-12044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:04:22.408 [DEBUG] [Thread-12044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:04:22.408 [DEBUG] [Thread-12044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:04:22.448 [DEBUG] [Thread-12044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:04:22.448 [DEBUG] [Thread-12044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:04:22.451 [DEBUG] [Thread-12044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:04:22.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:04:22.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:04:22.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:04:22.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:04:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:04:22.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:04:22.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.460826 -999.00  +26.50  24.39     20   +2.20 1 1 1 1 1   888    0 27.09 137.56 ----- 24.4 24.4 305.6 34.9 32.1 -25.6 31.4 -24.0 31.2 -24.1 31.9 -22.9
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.460826
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:04:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:03:58', tmtdew=30.13, humidity=13.61, cloud=0.0, wind=26.13, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:03:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:04:22.470 [DEBUG] [Thread-12044] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:04:22.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-25T13:04:22.554 [DEBUG] [Thread-12047] [transport.py] [_log()] starting thread (client mode): 0xb6b2b4f0
2025-12-25T13:04:22.555 [DEBUG] [Thread-12047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:04:22.568 [DEBUG] [Thread-12047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:04:22.568 [INFO] [Thread-12047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] client lang: <none>
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] server lang: <none>
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] kex follows: False
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] Compression: none
2025-12-25T13:04:22.576 [DEBUG] [Thread-12047] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:04:22.636 [DEBUG] [Thread-12047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:04:22.636 [DEBUG] [Thread-12047] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:04:22.636 [DEBUG] [Thread-12047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:04:22.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:04:22.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:04:22.698 [DEBUG] [Thread-12047] [transport.py] [_log()] userauth is OK
2025-12-25T13:04:22.698 [DEBUG] [Thread-12047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:04:22.698 [DEBUG] [Thread-12047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:04:22.698 [DEBUG] [Thread-12047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:04:22.698 [DEBUG] [Thread-12047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:04:22.712 [INFO] [Thread-12047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:04:22.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-25T13:04:22.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:04:23.559 [DEBUG] [Thread-12047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:04:23.560 [DEBUG] [Thread-12047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:04:23.615 [DEBUG] [Thread-12047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:04:23.615 [DEBUG] [Thread-12047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:04:23.624 [DEBUG] [Thread-12047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:04:23.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:04: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')
2025-12-25T13:04:23.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:04:23.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:04:23.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:04:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:04:23.661 [DEBUG] [Thread-12047] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:04:24.756 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:24.757 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:25.855 [DEBUG] [Thread-12049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:40.906 [DEBUG] [Thread-12050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:04:53.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:04:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:04:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 4, 30), 30.1, 13.67, 0.0, 22.62, 26.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:04:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:04:30
2025-12-25T13:04:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:04:54.672 [DEBUG] [Thread-12051] [transport.py] [_log()] starting thread (client mode): 0xb95f2680
2025-12-25T13:04:54.672 [DEBUG] [Thread-12051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:04:54.694 [DEBUG] [Thread-12051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:04:54.694 [INFO] [Thread-12051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:04:54.697 [DEBUG] [Thread-12051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] client lang: <none>
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] server lang: <none>
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] kex follows: False
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] Compression: none
2025-12-25T13:04:54.698 [DEBUG] [Thread-12051] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:04:54.716 [DEBUG] [Thread-12051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:04:54.717 [DEBUG] [Thread-12051] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:04:54.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:04:54.718 [DEBUG] [Thread-12051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:04:54.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:04:54.721 [DEBUG] [Thread-12051] [transport.py] [_log()] userauth is OK
2025-12-25T13:04:54.721 [DEBUG] [Thread-12051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:04:54.722 [DEBUG] [Thread-12051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:04:54.722 [DEBUG] [Thread-12051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:04:54.722 [DEBUG] [Thread-12051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:04:54.756 [INFO] [Thread-12051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:04:54.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:04:55.393 [DEBUG] [Thread-12051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:04:55.394 [DEBUG] [Thread-12051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:04:55.394 [DEBUG] [Thread-12051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:04:55.435 [DEBUG] [Thread-12051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:04:55.435 [DEBUG] [Thread-12051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:04:55.438 [DEBUG] [Thread-12051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:04:55.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:04:55.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:04:55.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:04:55.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:04:55.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:04:55.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:04:55.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:04:55.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.461173 -999.00  +26.90  27.55     20   +2.60 1 1 1 1 1   888    0 27.53 150.43 ----- 27.6 27.6 305.2 34.6 32.2 -24.3 31.5 -24.5 31.2 -23.7 32.0 -22.5
2025-12-25T13:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.461173
2025-12-25T13:04:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:04:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:04:30', tmtdew=30.1, humidity=13.67, cloud=0.0, wind=22.62, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:04:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:04:55.462 [DEBUG] [Thread-12051] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:04:55.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-25T13:04:55.559 [DEBUG] [Thread-12054] [transport.py] [_log()] starting thread (client mode): 0xb95f2fb0
2025-12-25T13:04:55.559 [DEBUG] [Thread-12054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:04:55.574 [DEBUG] [Thread-12054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:04:55.574 [INFO] [Thread-12054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] client lang: <none>
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] server lang: <none>
2025-12-25T13:04:55.581 [DEBUG] [Thread-12054] [transport.py] [_log()] kex follows: False
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] Compression: none
2025-12-25T13:04:55.582 [DEBUG] [Thread-12054] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:04:55.640 [DEBUG] [Thread-12054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:04:55.641 [DEBUG] [Thread-12054] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:04:55.641 [DEBUG] [Thread-12054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:04:55.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:04:55.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:04:55.702 [DEBUG] [Thread-12054] [transport.py] [_log()] userauth is OK
2025-12-25T13:04:55.702 [DEBUG] [Thread-12054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:04:55.702 [DEBUG] [Thread-12054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:04:55.702 [DEBUG] [Thread-12054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:04:55.702 [DEBUG] [Thread-12054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:04:55.717 [INFO] [Thread-12054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:04:55.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-25T13:04:55.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:04:55.943 [DEBUG] [Thread-12056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:04:56.566 [DEBUG] [Thread-12054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:04:56.567 [DEBUG] [Thread-12054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:04:56.614 [DEBUG] [Thread-12054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:04:56.614 [DEBUG] [Thread-12054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:04:56.623 [DEBUG] [Thread-12054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:04:56.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:04: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')
2025-12-25T13:04:56.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:04:56.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:04:56.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:04:56.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:04:56.654 [DEBUG] [Thread-12054] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:05:03.363 [DEBUG] [Thread-12057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:10.994 [DEBUG] [Thread-12058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:24.899 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:24.900 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:26.030 [DEBUG] [Thread-12059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:26.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:05:26.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:05:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:05:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 5, 2), 29.97, 13.79, 0.0, 24.38, 26.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:05:27.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:05:02
2025-12-25T13:05:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:05:27.672 [DEBUG] [Thread-12060] [transport.py] [_log()] starting thread (client mode): 0xb6be3400
2025-12-25T13:05:27.672 [DEBUG] [Thread-12060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:05:27.692 [DEBUG] [Thread-12060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:05:27.692 [INFO] [Thread-12060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:05:27.695 [DEBUG] [Thread-12060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:05:27.695 [DEBUG] [Thread-12060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:05:27.695 [DEBUG] [Thread-12060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:05:27.695 [DEBUG] [Thread-12060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:05:27.695 [DEBUG] [Thread-12060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:05:27.695 [DEBUG] [Thread-12060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] client lang: <none>
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] server lang: <none>
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] kex follows: False
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] Compression: none
2025-12-25T13:05:27.696 [DEBUG] [Thread-12060] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:05:27.716 [DEBUG] [Thread-12060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:05:27.717 [DEBUG] [Thread-12060] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:05:27.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:05:27.718 [DEBUG] [Thread-12060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:05:27.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:05:27.720 [DEBUG] [Thread-12060] [transport.py] [_log()] userauth is OK
2025-12-25T13:05:27.721 [DEBUG] [Thread-12060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:05:27.721 [DEBUG] [Thread-12060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:05:27.721 [DEBUG] [Thread-12060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:05:27.721 [DEBUG] [Thread-12060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:05:27.743 [INFO] [Thread-12060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:05:27.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:05:28.412 [DEBUG] [Thread-12060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:05:28.412 [DEBUG] [Thread-12060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:05:28.412 [DEBUG] [Thread-12060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:05:28.453 [DEBUG] [Thread-12060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:05:28.453 [DEBUG] [Thread-12060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:05:28.456 [DEBUG] [Thread-12060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:05:28.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:05:28.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:05:28.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:05:28.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:05:28.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:05:28.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:05:28.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:05:28.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:05:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:05:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.461520 -999.00  +26.80  32.05     21   +2.60 1 1 2 1 1   888    0 27.43 147.89 ----- 32.0 32.0 315.6 37.5 32.1 -25.2 31.4 -24.6 31.2 -23.3 32.0 -22.8
2025-12-25T13:05:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:05:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:05:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.461520
2025-12-25T13:05:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:05:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:05:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:05:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:05:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:05:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:05:02', tmtdew=29.97, humidity=13.79, cloud=0.0, wind=24.38, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:04:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:05:28.483 [DEBUG] [Thread-12060] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:05:28.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:05:28.576 [DEBUG] [Thread-12063] [transport.py] [_log()] starting thread (client mode): 0xb9545120
2025-12-25T13:05:28.576 [DEBUG] [Thread-12063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:05:28.590 [DEBUG] [Thread-12063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:05:28.590 [INFO] [Thread-12063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:05:28.597 [DEBUG] [Thread-12063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] client lang: <none>
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] server lang: <none>
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] kex follows: False
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:05:28.598 [DEBUG] [Thread-12063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:05:28.599 [DEBUG] [Thread-12063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:05:28.599 [DEBUG] [Thread-12063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:05:28.599 [DEBUG] [Thread-12063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:05:28.599 [DEBUG] [Thread-12063] [transport.py] [_log()] Compression: none
2025-12-25T13:05:28.599 [DEBUG] [Thread-12063] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:05:28.657 [DEBUG] [Thread-12063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:05:28.658 [DEBUG] [Thread-12063] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:05:28.658 [DEBUG] [Thread-12063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:05:28.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:05:28.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:05:28.713 [DEBUG] [Thread-12063] [transport.py] [_log()] userauth is OK
2025-12-25T13:05:28.713 [DEBUG] [Thread-12063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:05:28.714 [DEBUG] [Thread-12063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:05:28.714 [DEBUG] [Thread-12063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:05:28.714 [DEBUG] [Thread-12063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:05:28.732 [INFO] [Thread-12063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:05: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-25T13:05:28.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:05:29.547 [DEBUG] [Thread-12063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:05:29.547 [DEBUG] [Thread-12063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:05:29.595 [DEBUG] [Thread-12063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:05:29.595 [DEBUG] [Thread-12063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:05:29.604 [DEBUG] [Thread-12063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:05:29.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:05:29.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:05:29.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-25T13:05:29.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:05:29.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:05:29.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:05:29.638 [DEBUG] [Thread-12063] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:05:41.061 [DEBUG] [Thread-12065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:56.102 [DEBUG] [Thread-12066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:05:59.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:05:59.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:05:59.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-25T13:06:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 5, 34), 29.37, 14.27, 0.0, 25.99, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:06:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:05:34
2025-12-25T13:06:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:06:00.645 [DEBUG] [Thread-12067] [transport.py] [_log()] starting thread (client mode): 0xb6b2ac80
2025-12-25T13:06:00.645 [DEBUG] [Thread-12067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:06:00.665 [DEBUG] [Thread-12067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:06:00.666 [INFO] [Thread-12067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:06:00.668 [DEBUG] [Thread-12067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] client lang: <none>
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] server lang: <none>
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] kex follows: False
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] Compression: none
2025-12-25T13:06:00.669 [DEBUG] [Thread-12067] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:06:00.686 [DEBUG] [Thread-12067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:06:00.686 [DEBUG] [Thread-12067] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:06:00.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:06:00.687 [DEBUG] [Thread-12067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:06:00.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:06:00.689 [DEBUG] [Thread-12067] [transport.py] [_log()] userauth is OK
2025-12-25T13:06:00.689 [DEBUG] [Thread-12067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:06:00.690 [DEBUG] [Thread-12067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:06:00.690 [DEBUG] [Thread-12067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:06:00.690 [DEBUG] [Thread-12067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:06:00.709 [INFO] [Thread-12067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:06:00.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:06:01.323 [DEBUG] [Thread-12067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:06:01.323 [DEBUG] [Thread-12067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:06:01.324 [DEBUG] [Thread-12067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:06:01.369 [DEBUG] [Thread-12067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:06:01.370 [DEBUG] [Thread-12067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:06:01.373 [DEBUG] [Thread-12067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:06:01.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:06:01.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:06:01.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:06:01.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:06:01.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:06:01.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:06:01.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:06:01.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:06:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:06:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.461867 -999.00  +26.20  24.96     21   +2.60 1 1 1 1 1   888    0 27.26 143.95 ----- 25.0 25.0 317.0 38.4 32.0 -25.1 31.3 -25.1 31.1 -23.6 31.8 -23.4
2025-12-25T13:06:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:06:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:06:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.461867
2025-12-25T13:06:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:06:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:06:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:06:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:06:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:06:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:05:34', tmtdew=29.37, humidity=14.27, cloud=0.0, wind=25.99, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:05:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:06:01.396 [DEBUG] [Thread-12067] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:06:01.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-25T13:06:01.493 [DEBUG] [Thread-12070] [transport.py] [_log()] starting thread (client mode): 0xb95f1ff0
2025-12-25T13:06:01.493 [DEBUG] [Thread-12070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:06:01.507 [DEBUG] [Thread-12070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:06:01.507 [INFO] [Thread-12070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] client lang: <none>
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] server lang: <none>
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] kex follows: False
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:06:01.515 [DEBUG] [Thread-12070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:06:01.516 [DEBUG] [Thread-12070] [transport.py] [_log()] Compression: none
2025-12-25T13:06:01.516 [DEBUG] [Thread-12070] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:06:01.579 [DEBUG] [Thread-12070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:06:01.579 [DEBUG] [Thread-12070] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:06:01.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:06:01.580 [DEBUG] [Thread-12070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:06:01.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:06:01.644 [DEBUG] [Thread-12070] [transport.py] [_log()] userauth is OK
2025-12-25T13:06:01.644 [DEBUG] [Thread-12070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:06:01.644 [DEBUG] [Thread-12070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:06:01.644 [DEBUG] [Thread-12070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:06:01.644 [DEBUG] [Thread-12070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:06:01.659 [INFO] [Thread-12070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:06:01.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-25T13:06:01.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:06:02.508 [DEBUG] [Thread-12070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:06:02.508 [DEBUG] [Thread-12070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:06:02.556 [DEBUG] [Thread-12070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:06:02.556 [DEBUG] [Thread-12070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:06:02.565 [DEBUG] [Thread-12070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:06:02.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:06:02.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-25T13:06:02.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:06:02.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:06:02.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:06:02.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:06:02.609 [DEBUG] [Thread-12070] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:06:03.417 [DEBUG] [Thread-12072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:06:11.134 [DEBUG] [Thread-12073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:06:25.038 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:06:25.039 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:06:26.182 [DEBUG] [Thread-12074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:06:32.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:06:32.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:06:32.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:06:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 6, 6), 29.28, 14.32, 0.0, 27.3, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:06:33.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:06:06
2025-12-25T13:06:33.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:06:33.594 [DEBUG] [Thread-12075] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2025-12-25T13:06:33.594 [DEBUG] [Thread-12075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:06:33.617 [DEBUG] [Thread-12075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:06:33.618 [INFO] [Thread-12075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:06:33.619 [DEBUG] [Thread-12075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:06:33.619 [DEBUG] [Thread-12075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:06:33.619 [DEBUG] [Thread-12075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:06:33.619 [DEBUG] [Thread-12075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:33.619 [DEBUG] [Thread-12075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] client lang: <none>
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] server lang: <none>
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] kex follows: False
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:06:33.620 [DEBUG] [Thread-12075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:06:33.621 [DEBUG] [Thread-12075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:06:33.621 [DEBUG] [Thread-12075] [transport.py] [_log()] Compression: none
2025-12-25T13:06:33.621 [DEBUG] [Thread-12075] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:06:33.635 [DEBUG] [Thread-12075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:06:33.635 [DEBUG] [Thread-12075] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:06:33.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:06:33.637 [DEBUG] [Thread-12075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:06:33.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:06:33.639 [DEBUG] [Thread-12075] [transport.py] [_log()] userauth is OK
2025-12-25T13:06:33.639 [DEBUG] [Thread-12075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:06:33.640 [DEBUG] [Thread-12075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:06:33.640 [DEBUG] [Thread-12075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:06:33.640 [DEBUG] [Thread-12075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:06:33.662 [INFO] [Thread-12075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:06:33.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:06:34.313 [DEBUG] [Thread-12075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:06:34.313 [DEBUG] [Thread-12075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:06:34.314 [DEBUG] [Thread-12075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:06:34.354 [DEBUG] [Thread-12075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:06:34.354 [DEBUG] [Thread-12075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:06:34.358 [DEBUG] [Thread-12075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:06:34.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:06:34.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:06:34.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:06:34.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:06:34.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:06:34.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:06:34.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:06:34.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:06:34.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:06:34.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.462562 -999.00  +26.20  25.04     22   +3.10 1 1 1 1 1   888    0 27.61 168.49 ----- 25.0 25.0 284.7 34.9 31.8 -27.0 31.3 -25.3 31.0 -24.6 31.7 -23.8
2025-12-25T13:06:34.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:06:34.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:06:34.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.462562
2025-12-25T13:06:34.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:06:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:06:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:06:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:06:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:06:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:06:06', tmtdew=29.28, humidity=14.32, cloud=0.0, wind=27.3, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:06:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:06:34.384 [DEBUG] [Thread-12075] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:06:34.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-25T13:06:34.478 [DEBUG] [Thread-12078] [transport.py] [_log()] starting thread (client mode): 0xb9547970
2025-12-25T13:06:34.478 [DEBUG] [Thread-12078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:06:34.493 [DEBUG] [Thread-12078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:06:34.493 [INFO] [Thread-12078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] client lang: <none>
2025-12-25T13:06:34.501 [DEBUG] [Thread-12078] [transport.py] [_log()] server lang: <none>
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] kex follows: False
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] Compression: none
2025-12-25T13:06:34.502 [DEBUG] [Thread-12078] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:06:34.558 [DEBUG] [Thread-12078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:06:34.559 [DEBUG] [Thread-12078] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:06:34.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:06:34.560 [DEBUG] [Thread-12078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:06:34.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:06:34.614 [DEBUG] [Thread-12078] [transport.py] [_log()] userauth is OK
2025-12-25T13:06:34.615 [DEBUG] [Thread-12078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:06:34.615 [DEBUG] [Thread-12078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:06:34.615 [DEBUG] [Thread-12078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:06:34.615 [DEBUG] [Thread-12078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:06:34.633 [INFO] [Thread-12078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:06:34.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-25T13:06:34.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:06:35.437 [DEBUG] [Thread-12078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:06:35.438 [DEBUG] [Thread-12078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:06:35.485 [DEBUG] [Thread-12078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:06:35.486 [DEBUG] [Thread-12078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:06:35.494 [DEBUG] [Thread-12078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:06:35.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:06:35.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-25T13:06:35.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:06:35.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:06:35.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:06:35.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:06:35.528 [DEBUG] [Thread-12078] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:06:41.217 [DEBUG] [Thread-12080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:06:56.268 [DEBUG] [Thread-12081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:03.472 [DEBUG] [Thread-12082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:05.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:07:05.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:07:05.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-25T13:07:06.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 6, 38), 28.34, 15.67, 0.0, 26.24, 25.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:07:06.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:06:38
2025-12-25T13:07:06.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:07:06.537 [DEBUG] [Thread-12083] [transport.py] [_log()] starting thread (client mode): 0xb9547130
2025-12-25T13:07:06.537 [DEBUG] [Thread-12083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:07:06.557 [DEBUG] [Thread-12083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:07:06.558 [INFO] [Thread-12083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:06.561 [DEBUG] [Thread-12083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] client lang: <none>
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] server lang: <none>
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] kex follows: False
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] Compression: none
2025-12-25T13:07:06.562 [DEBUG] [Thread-12083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:07:06.582 [DEBUG] [Thread-12083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:07:06.582 [DEBUG] [Thread-12083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:07:06.583 [DEBUG] [Thread-12083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:07:06.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:07:06.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:07:06.585 [DEBUG] [Thread-12083] [transport.py] [_log()] userauth is OK
2025-12-25T13:07:06.585 [DEBUG] [Thread-12083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:07:06.585 [DEBUG] [Thread-12083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:07:06.585 [DEBUG] [Thread-12083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:07:06.585 [DEBUG] [Thread-12083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:07:06.620 [INFO] [Thread-12083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:07:06.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:07:07.240 [DEBUG] [Thread-12083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:07:07.240 [DEBUG] [Thread-12083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:07:07.240 [DEBUG] [Thread-12083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:07:07.281 [DEBUG] [Thread-12083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:07:07.281 [DEBUG] [Thread-12083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:07:07.285 [DEBUG] [Thread-12083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:07:07.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:07:07.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:07:07.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:07:07.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:07:07.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:07:07.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:07:07.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:07:07.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:07:07.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:07:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.462909 -999.00  +25.80  30.83     22   +2.70 1 1 2 1 1   888    0 27.79 171.47 ----- 30.8 30.8 288.8 32.3 31.9 -25.9 31.3 -25.9 30.9 -24.8 31.6 -24.1
2025-12-25T13:07:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:07:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:07:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.462909
2025-12-25T13:07:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:07:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:07:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:07:07.311 [DEBUG] [Thread-12083] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:07:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:07:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:07:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:06:38', tmtdew=28.34, humidity=15.67, cloud=0.0, wind=26.24, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:06:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:07:07.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-25T13:07:07.404 [DEBUG] [Thread-12086] [transport.py] [_log()] starting thread (client mode): 0xb95f3520
2025-12-25T13:07:07.404 [DEBUG] [Thread-12086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:07:07.419 [DEBUG] [Thread-12086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:07:07.419 [INFO] [Thread-12086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] client lang: <none>
2025-12-25T13:07:07.427 [DEBUG] [Thread-12086] [transport.py] [_log()] server lang: <none>
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] kex follows: False
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] Compression: none
2025-12-25T13:07:07.428 [DEBUG] [Thread-12086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:07:07.487 [DEBUG] [Thread-12086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:07:07.487 [DEBUG] [Thread-12086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:07:07.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:07:07.488 [DEBUG] [Thread-12086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:07:07.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:07:07.542 [DEBUG] [Thread-12086] [transport.py] [_log()] userauth is OK
2025-12-25T13:07:07.543 [DEBUG] [Thread-12086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:07:07.543 [DEBUG] [Thread-12086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:07:07.543 [DEBUG] [Thread-12086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:07:07.543 [DEBUG] [Thread-12086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:07:07.562 [INFO] [Thread-12086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:07:07.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:07:07.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:07:08.436 [DEBUG] [Thread-12086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:07:08.436 [DEBUG] [Thread-12086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:07:08.484 [DEBUG] [Thread-12086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:07:08.485 [DEBUG] [Thread-12086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:07:08.493 [DEBUG] [Thread-12086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:07:08.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:07:08.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-25T13:07:08.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-25T13:07:08.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:07:08.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:07:08.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:07:08.528 [DEBUG] [Thread-12086] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:07:11.300 [DEBUG] [Thread-12088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:25.178 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:25.179 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:26.340 [DEBUG] [Thread-12089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:07:38.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:07:38.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-25T13:07:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 7, 10), 27.39, 16.73, 0.0, 24.77, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:07:39.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:07:10
2025-12-25T13:07:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:07:39.534 [DEBUG] [Thread-12090] [transport.py] [_log()] starting thread (client mode): 0xb95593f0
2025-12-25T13:07:39.534 [DEBUG] [Thread-12090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:07:39.552 [DEBUG] [Thread-12090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:07:39.552 [INFO] [Thread-12090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] client lang: <none>
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] server lang: <none>
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] kex follows: False
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:07:39.555 [DEBUG] [Thread-12090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:07:39.556 [DEBUG] [Thread-12090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:07:39.556 [DEBUG] [Thread-12090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:07:39.556 [DEBUG] [Thread-12090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:07:39.556 [DEBUG] [Thread-12090] [transport.py] [_log()] Compression: none
2025-12-25T13:07:39.556 [DEBUG] [Thread-12090] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:07:39.572 [DEBUG] [Thread-12090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:07:39.572 [DEBUG] [Thread-12090] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:07:39.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:07:39.573 [DEBUG] [Thread-12090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:07:39.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:07:39.575 [DEBUG] [Thread-12090] [transport.py] [_log()] userauth is OK
2025-12-25T13:07:39.575 [DEBUG] [Thread-12090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:07:39.576 [DEBUG] [Thread-12090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:07:39.576 [DEBUG] [Thread-12090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:07:39.576 [DEBUG] [Thread-12090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:07:39.600 [INFO] [Thread-12090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:07:39.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:07:40.267 [DEBUG] [Thread-12090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:07:40.267 [DEBUG] [Thread-12090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:07:40.268 [DEBUG] [Thread-12090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:07:40.308 [DEBUG] [Thread-12090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:07:40.308 [DEBUG] [Thread-12090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:07:40.312 [DEBUG] [Thread-12090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:07:40.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:07:40.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:07:40.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:07:40.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:07:40.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:07:40.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:07:40.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:07:40.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:07:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:07:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.463256 -999.00  +25.60  18.97     23   +3.00 1 1 1 1 1   888    0 27.47 157.36 ----- 19.0 19.0 281.4 24.7 31.8 -25.7 31.3 -24.9 30.9 -22.3 31.6 -22.6
2025-12-25T13:07:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:07:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:07:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.463256
2025-12-25T13:07:40.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:07:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:07:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:07:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:07:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:07:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:07:10', tmtdew=27.39, humidity=16.73, cloud=0.0, wind=24.77, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:07:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:07:40.340 [DEBUG] [Thread-12090] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:07:40.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-25T13:07:40.433 [DEBUG] [Thread-12093] [transport.py] [_log()] starting thread (client mode): 0xb9544910
2025-12-25T13:07:40.434 [DEBUG] [Thread-12093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:07:40.448 [DEBUG] [Thread-12093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:07:40.448 [INFO] [Thread-12093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] client lang: <none>
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] server lang: <none>
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] kex follows: False
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:07:40.456 [DEBUG] [Thread-12093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:07:40.457 [DEBUG] [Thread-12093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:07:40.457 [DEBUG] [Thread-12093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:07:40.457 [DEBUG] [Thread-12093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:07:40.457 [DEBUG] [Thread-12093] [transport.py] [_log()] Compression: none
2025-12-25T13:07:40.457 [DEBUG] [Thread-12093] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:07:40.514 [DEBUG] [Thread-12093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:07:40.515 [DEBUG] [Thread-12093] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:07:40.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:07:40.516 [DEBUG] [Thread-12093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:07:40.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:07:40.570 [DEBUG] [Thread-12093] [transport.py] [_log()] userauth is OK
2025-12-25T13:07:40.570 [DEBUG] [Thread-12093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:07:40.570 [DEBUG] [Thread-12093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:07:40.571 [DEBUG] [Thread-12093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:07:40.571 [DEBUG] [Thread-12093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:07:40.590 [INFO] [Thread-12093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:07:40.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-25T13:07:40.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:07:41.378 [DEBUG] [Thread-12095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:07:41.456 [DEBUG] [Thread-12093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:07:41.456 [DEBUG] [Thread-12093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:07:41.504 [DEBUG] [Thread-12093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:07:41.505 [DEBUG] [Thread-12093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:07:41.514 [DEBUG] [Thread-12093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:07:41.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:07:41.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-25T13:07:41.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-25T13:07:41.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:07:41.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:07:41.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:07:41.549 [DEBUG] [Thread-12093] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:07:56.439 [DEBUG] [Thread-12096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:03.506 [DEBUG] [Thread-12097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:11.474 [DEBUG] [Thread-12098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:11.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:08:11.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:08:11.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-25T13:08:12.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 7, 42), 27.27, 16.83, 0.0, 22.51, 26.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:08:12.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:07:42
2025-12-25T13:08:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:08:12.598 [DEBUG] [Thread-12099] [transport.py] [_log()] starting thread (client mode): 0xb957b6d0
2025-12-25T13:08:12.598 [DEBUG] [Thread-12099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:08:12.618 [DEBUG] [Thread-12099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:08:12.619 [INFO] [Thread-12099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] client lang: <none>
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] server lang: <none>
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] kex follows: False
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] Compression: none
2025-12-25T13:08:12.622 [DEBUG] [Thread-12099] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:08:12.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:08:12.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] userauth is OK
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:08:12.639 [DEBUG] [Thread-12099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:08:12.648 [INFO] [Thread-12099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:08:12.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:08:13.299 [DEBUG] [Thread-12099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:08:13.299 [DEBUG] [Thread-12099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:08:13.299 [DEBUG] [Thread-12099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:08:13.340 [DEBUG] [Thread-12099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:08:13.340 [DEBUG] [Thread-12099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:08:13.342 [DEBUG] [Thread-12099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:08:13.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:08:13.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:08:13.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:08:13.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:08:13.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:08:13.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:08:13.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.463604 -999.00  +26.20  35.42     22   +3.20 1 1 2 1 1   888    0 27.49 153.90 ----- 35.4 35.4 286.2 40.4 31.8 -24.2 31.3 -24.8 30.9 -25.0 31.7 -22.2
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.463604
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:08:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:07:42', tmtdew=27.27, humidity=16.83, cloud=0.0, wind=22.51, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:07:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:08:13.359 [DEBUG] [Thread-12099] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:08:13.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-25T13:08:13.443 [DEBUG] [Thread-12102] [transport.py] [_log()] starting thread (client mode): 0xb9544550
2025-12-25T13:08:13.443 [DEBUG] [Thread-12102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:08:13.458 [DEBUG] [Thread-12102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:08:13.458 [INFO] [Thread-12102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] client lang: <none>
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] server lang: <none>
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] kex follows: False
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] Compression: none
2025-12-25T13:08:13.466 [DEBUG] [Thread-12102] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:08:13.521 [DEBUG] [Thread-12102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:08:13.521 [DEBUG] [Thread-12102] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:08:13.521 [DEBUG] [Thread-12102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:08:13.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:08:13.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:08:13.582 [DEBUG] [Thread-12102] [transport.py] [_log()] userauth is OK
2025-12-25T13:08:13.582 [DEBUG] [Thread-12102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:08:13.582 [DEBUG] [Thread-12102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:08:13.582 [DEBUG] [Thread-12102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:08:13.582 [DEBUG] [Thread-12102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:08:13.596 [INFO] [Thread-12102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:08:13.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:08:13.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:08:14.411 [DEBUG] [Thread-12102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:08:14.411 [DEBUG] [Thread-12102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:08:14.459 [DEBUG] [Thread-12102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:08:14.459 [DEBUG] [Thread-12102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:08:14.469 [DEBUG] [Thread-12102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:08:14.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:08:14.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-25T13:08:14.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-25T13:08:14.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:08:14.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:08:14.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:08:14.504 [DEBUG] [Thread-12102] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:08:25.319 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:25.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:26.509 [DEBUG] [Thread-12104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:41.564 [DEBUG] [Thread-12105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:08:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:08:44.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:08:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:08:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 8, 14), 27.51, 16.6, 0.0, 21.47, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:08:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:08:14
2025-12-25T13:08:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:08:45.492 [DEBUG] [Thread-12106] [transport.py] [_log()] starting thread (client mode): 0xb955a2f0
2025-12-25T13:08:45.492 [DEBUG] [Thread-12106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:08:45.511 [DEBUG] [Thread-12106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:08:45.511 [INFO] [Thread-12106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:08:45.514 [DEBUG] [Thread-12106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] client lang: <none>
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] server lang: <none>
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] kex follows: False
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:08:45.515 [DEBUG] [Thread-12106] [transport.py] [_log()] Compression: none
2025-12-25T13:08:45.516 [DEBUG] [Thread-12106] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:08:45.523 [DEBUG] [Thread-12106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:08:45.524 [DEBUG] [Thread-12106] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:08:45.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:08:45.524 [DEBUG] [Thread-12106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:08:45.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:08:45.525 [DEBUG] [Thread-12106] [transport.py] [_log()] userauth is OK
2025-12-25T13:08:45.525 [DEBUG] [Thread-12106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:08:45.526 [DEBUG] [Thread-12106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:08:45.526 [DEBUG] [Thread-12106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:08:45.526 [DEBUG] [Thread-12106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:08:45.540 [INFO] [Thread-12106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:08:45.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:08:46.124 [DEBUG] [Thread-12106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:08:46.124 [DEBUG] [Thread-12106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:08:46.125 [DEBUG] [Thread-12106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:08:46.165 [DEBUG] [Thread-12106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:08:46.165 [DEBUG] [Thread-12106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:08:46.169 [DEBUG] [Thread-12106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:08:46.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:08:46.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:08:46.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:08:46.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:08:46.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:08:46.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:08:46.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:08:46.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:08:46.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:08:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.463951 -999.00  +25.60  20.44     22   +2.30 1 1 1 1 1   888    0 27.64 154.77 ----- 20.4 20.4 301.0 33.5 31.8 -25.3 31.2 -24.9 30.9 -23.1 31.6 -23.8
2025-12-25T13:08:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:08:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:08:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.463951
2025-12-25T13:08:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:08:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:08:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:08:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:08:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:08:46.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:08:14', tmtdew=27.51, humidity=16.6, cloud=0.0, wind=21.47, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:08:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:08:46.194 [DEBUG] [Thread-12106] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:08:46.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-25T13:08:46.288 [DEBUG] [Thread-12109] [transport.py] [_log()] starting thread (client mode): 0xb6be3400
2025-12-25T13:08:46.288 [DEBUG] [Thread-12109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:08:46.305 [DEBUG] [Thread-12109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:08:46.305 [INFO] [Thread-12109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] client lang: <none>
2025-12-25T13:08:46.313 [DEBUG] [Thread-12109] [transport.py] [_log()] server lang: <none>
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] kex follows: False
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] Compression: none
2025-12-25T13:08:46.314 [DEBUG] [Thread-12109] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:08:46.370 [DEBUG] [Thread-12109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:08:46.371 [DEBUG] [Thread-12109] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:08:46.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:08:46.372 [DEBUG] [Thread-12109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:08:46.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:08:46.431 [DEBUG] [Thread-12109] [transport.py] [_log()] userauth is OK
2025-12-25T13:08:46.431 [DEBUG] [Thread-12109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:08:46.431 [DEBUG] [Thread-12109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:08:46.432 [DEBUG] [Thread-12109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:08:46.432 [DEBUG] [Thread-12109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:08:46.454 [INFO] [Thread-12109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:08:46.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-25T13:08:46.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:08:47.283 [DEBUG] [Thread-12109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:08:47.283 [DEBUG] [Thread-12109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:08:47.331 [DEBUG] [Thread-12109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:08:47.331 [DEBUG] [Thread-12109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:08:47.340 [DEBUG] [Thread-12109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:08:47.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:08:47.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:08:47.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:08:47.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:08:47.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:08:47.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:08:47.376 [DEBUG] [Thread-12109] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:08:56.592 [DEBUG] [Thread-12111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:03.557 [DEBUG] [Thread-12112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:11.640 [DEBUG] [Thread-12113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:17.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:09:17.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:09:17.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:09:18.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 8, 46), 27.78, 16.08, 0.0, 25.58, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:09:18.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:08:46
2025-12-25T13:09:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:09:18.382 [DEBUG] [Thread-12114] [transport.py] [_log()] starting thread (client mode): 0xb955add0
2025-12-25T13:09:18.382 [DEBUG] [Thread-12114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:09:18.402 [DEBUG] [Thread-12114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:09:18.402 [INFO] [Thread-12114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:09:18.405 [DEBUG] [Thread-12114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:09:18.405 [DEBUG] [Thread-12114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] client lang: <none>
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] server lang: <none>
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] kex follows: False
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:09:18.406 [DEBUG] [Thread-12114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:09:18.407 [DEBUG] [Thread-12114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:09:18.407 [DEBUG] [Thread-12114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:09:18.407 [DEBUG] [Thread-12114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:09:18.407 [DEBUG] [Thread-12114] [transport.py] [_log()] Compression: none
2025-12-25T13:09:18.407 [DEBUG] [Thread-12114] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:09:18.425 [DEBUG] [Thread-12114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:09:18.426 [DEBUG] [Thread-12114] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:09:18.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:09:18.427 [DEBUG] [Thread-12114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:09:18.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:09:18.429 [DEBUG] [Thread-12114] [transport.py] [_log()] userauth is OK
2025-12-25T13:09:18.429 [DEBUG] [Thread-12114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:09:18.429 [DEBUG] [Thread-12114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:09:18.429 [DEBUG] [Thread-12114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:09:18.430 [DEBUG] [Thread-12114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:09:18.447 [INFO] [Thread-12114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:09:18.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:09:19.056 [DEBUG] [Thread-12114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:09:19.056 [DEBUG] [Thread-12114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:09:19.057 [DEBUG] [Thread-12114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:09:19.097 [DEBUG] [Thread-12114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:09:19.097 [DEBUG] [Thread-12114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:09:19.101 [DEBUG] [Thread-12114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:09:19.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:09:19.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:09:19.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:09:19.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:09:19.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:09:19.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:09:19.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:09:19.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:09:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:09:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.464298 -999.00  +25.30  22.53     22   +2.50 1 1 1 1 1   888    0 28.13 171.39 ----- 22.5 22.5 307.0 29.0 31.8 -25.3 31.2 -24.6 30.9 -22.1 31.6 -23.0
2025-12-25T13:09:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:09:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:09:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.464298
2025-12-25T13:09:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:09:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:09:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:09:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:09:19.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:09:19.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:08:46', tmtdew=27.78, humidity=16.08, cloud=0.0, wind=25.58, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:08:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:09:19.129 [DEBUG] [Thread-12114] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:09:19.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-25T13:09:19.222 [DEBUG] [Thread-12117] [transport.py] [_log()] starting thread (client mode): 0xb9559720
2025-12-25T13:09:19.222 [DEBUG] [Thread-12117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:09:19.237 [DEBUG] [Thread-12117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:09:19.237 [INFO] [Thread-12117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] client lang: <none>
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] server lang: <none>
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] kex follows: False
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:09:19.245 [DEBUG] [Thread-12117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:09:19.246 [DEBUG] [Thread-12117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:09:19.246 [DEBUG] [Thread-12117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:09:19.246 [DEBUG] [Thread-12117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:09:19.246 [DEBUG] [Thread-12117] [transport.py] [_log()] Compression: none
2025-12-25T13:09:19.246 [DEBUG] [Thread-12117] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:09:19.303 [DEBUG] [Thread-12117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:09:19.303 [DEBUG] [Thread-12117] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:09:19.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:09:19.305 [DEBUG] [Thread-12117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:09:19.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:09:19.359 [DEBUG] [Thread-12117] [transport.py] [_log()] userauth is OK
2025-12-25T13:09:19.359 [DEBUG] [Thread-12117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:09:19.360 [DEBUG] [Thread-12117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:09:19.360 [DEBUG] [Thread-12117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:09:19.360 [DEBUG] [Thread-12117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:09:19.385 [INFO] [Thread-12117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:09:19.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:09:19.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:09:20.213 [DEBUG] [Thread-12117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:09:20.213 [DEBUG] [Thread-12117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:09:20.261 [DEBUG] [Thread-12117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:09:20.261 [DEBUG] [Thread-12117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:09:20.269 [DEBUG] [Thread-12117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:09:20.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:09:20.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:09:20.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-25T13:09:20.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:09:20.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:09:20.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:09:20.300 [DEBUG] [Thread-12117] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:09:25.458 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:25.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:26.675 [DEBUG] [Thread-12119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:41.724 [DEBUG] [Thread-12120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:09:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:09:50.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:09:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:09:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 9, 18), 27.7, 16.15, 0.0, 26.13, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:09:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:09:18
2025-12-25T13:09:51.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:09:51.287 [DEBUG] [Thread-12121] [transport.py] [_log()] starting thread (client mode): 0xb9578e20
2025-12-25T13:09:51.287 [DEBUG] [Thread-12121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:09:51.304 [DEBUG] [Thread-12121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:09:51.304 [INFO] [Thread-12121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:51.307 [DEBUG] [Thread-12121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] client lang: <none>
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] server lang: <none>
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] kex follows: False
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] Compression: none
2025-12-25T13:09:51.308 [DEBUG] [Thread-12121] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:09:51.326 [DEBUG] [Thread-12121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:09:51.326 [DEBUG] [Thread-12121] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:09:51.327 [DEBUG] [Thread-12121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:09:51.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:09:51.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:09:51.329 [DEBUG] [Thread-12121] [transport.py] [_log()] userauth is OK
2025-12-25T13:09:51.329 [DEBUG] [Thread-12121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:09:51.329 [DEBUG] [Thread-12121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:09:51.329 [DEBUG] [Thread-12121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:09:51.329 [DEBUG] [Thread-12121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:09:51.352 [INFO] [Thread-12121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:09:51.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:09:51.967 [DEBUG] [Thread-12121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:09:51.967 [DEBUG] [Thread-12121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:09:51.967 [DEBUG] [Thread-12121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:09:52.007 [DEBUG] [Thread-12121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:09:52.008 [DEBUG] [Thread-12121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:09:52.010 [DEBUG] [Thread-12121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:09:52.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:09:52.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:09:52.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:09:52.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:09:52.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:09:52.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:09:52.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.464645 -999.00  +25.60  33.85     22   +2.60 1 1 2 1 1   888    0 27.56 158.02 ----- 33.9 33.9 302.6 37.9 31.9 -25.0 31.2 -25.4 30.9 -22.3 31.6 -23.6
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.464645
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:09:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:09:18', tmtdew=27.7, humidity=16.15, cloud=0.0, wind=26.13, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:09:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:09:52.028 [DEBUG] [Thread-12121] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:09:52.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-25T13:09:52.112 [DEBUG] [Thread-12124] [transport.py] [_log()] starting thread (client mode): 0xb955b160
2025-12-25T13:09:52.112 [DEBUG] [Thread-12124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:09:52.129 [DEBUG] [Thread-12124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:09:52.129 [INFO] [Thread-12124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] client lang: <none>
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] server lang: <none>
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] kex follows: False
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] Compression: none
2025-12-25T13:09:52.137 [DEBUG] [Thread-12124] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:09:52.198 [DEBUG] [Thread-12124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:09:52.198 [DEBUG] [Thread-12124] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:09:52.198 [DEBUG] [Thread-12124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:09:52.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:09:52.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:09:52.258 [DEBUG] [Thread-12124] [transport.py] [_log()] userauth is OK
2025-12-25T13:09:52.258 [DEBUG] [Thread-12124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:09:52.258 [DEBUG] [Thread-12124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:09:52.258 [DEBUG] [Thread-12124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:09:52.258 [DEBUG] [Thread-12124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:09:52.278 [INFO] [Thread-12124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:09:52.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-25T13:09:52.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:09:53.193 [DEBUG] [Thread-12124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:09:53.193 [DEBUG] [Thread-12124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:09:53.240 [DEBUG] [Thread-12124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:09:53.240 [DEBUG] [Thread-12124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:09:53.249 [DEBUG] [Thread-12124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:09:53.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:09:53.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-25T13:09:53.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-25T13:09:53.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:09:53.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:09:53.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:09:53.281 [DEBUG] [Thread-12124] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:09:56.760 [DEBUG] [Thread-12126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:03.620 [DEBUG] [Thread-12127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:11.815 [DEBUG] [Thread-12128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:10:23.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:10:23.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-25T13:10:24.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 9, 51), 27.93, 16.01, 0.0, 27.1, 26.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:10:24.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:09:51
2025-12-25T13:10:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:10:24.319 [DEBUG] [Thread-12129] [transport.py] [_log()] starting thread (client mode): 0xb9545e40
2025-12-25T13:10:24.319 [DEBUG] [Thread-12129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:10:24.342 [DEBUG] [Thread-12129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:10:24.342 [INFO] [Thread-12129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] client lang: <none>
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] server lang: <none>
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] kex follows: False
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] Compression: none
2025-12-25T13:10:24.346 [DEBUG] [Thread-12129] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:10:24.360 [DEBUG] [Thread-12129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:10:24.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:10:24.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] userauth is OK
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:10:24.361 [DEBUG] [Thread-12129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:10:24.377 [INFO] [Thread-12129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:10:24.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:10:25.021 [DEBUG] [Thread-12129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:10:25.021 [DEBUG] [Thread-12129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:10:25.021 [DEBUG] [Thread-12129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:10:25.063 [DEBUG] [Thread-12129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:10:25.063 [DEBUG] [Thread-12129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:10:25.065 [DEBUG] [Thread-12129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:10:25.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:10:25.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:10:25.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:10:25.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:10:25.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:10:25.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:10:25.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.464992 -999.00  +26.10  30.03     22   +2.70 1 1 2 1 1   888    0 27.55 151.50 ----- 30.0 30.0 289.8 39.2 31.8 -25.0 31.2 -24.0 30.9 -22.1 31.6 -22.5
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.464992
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:10:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:09:51', tmtdew=27.93, humidity=16.01, cloud=0.0, wind=27.1, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:09:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:10:25.085 [DEBUG] [Thread-12129] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:10:25.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-25T13:10:25.168 [DEBUG] [Thread-12132] [transport.py] [_log()] starting thread (client mode): 0xb9546980
2025-12-25T13:10:25.169 [DEBUG] [Thread-12132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:10:25.183 [DEBUG] [Thread-12132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:10:25.183 [INFO] [Thread-12132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] client lang: <none>
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] server lang: <none>
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] kex follows: False
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] Compression: none
2025-12-25T13:10:25.191 [DEBUG] [Thread-12132] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:10:25.253 [DEBUG] [Thread-12132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:10:25.253 [DEBUG] [Thread-12132] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:10:25.254 [DEBUG] [Thread-12132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:10:25.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:10:25.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:10:25.310 [DEBUG] [Thread-12132] [transport.py] [_log()] userauth is OK
2025-12-25T13:10:25.310 [DEBUG] [Thread-12132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:10:25.310 [DEBUG] [Thread-12132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:10:25.310 [DEBUG] [Thread-12132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:10:25.310 [DEBUG] [Thread-12132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:10:25.324 [INFO] [Thread-12132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:10:25.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-25T13:10:25.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:10:25.597 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:25.598 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:26.190 [DEBUG] [Thread-12132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:10:26.190 [DEBUG] [Thread-12132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:10:26.238 [DEBUG] [Thread-12132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:10:26.238 [DEBUG] [Thread-12132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:10:26.248 [DEBUG] [Thread-12132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:10:26.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:10:26.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-25T13:10:26.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-25T13:10:26.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:10:26.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:10:26.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:10:26.285 [DEBUG] [Thread-12132] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:10:26.845 [DEBUG] [Thread-12134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:41.898 [DEBUG] [Thread-12135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:10:56.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:10:56.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-25T13:10:56.926 [DEBUG] [Thread-12136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:10:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 10, 23), 28.71, 15.24, 0.0, 22.27, 26.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:10:57.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:10:23
2025-12-25T13:10:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:10:57.340 [DEBUG] [Thread-12137] [transport.py] [_log()] starting thread (client mode): 0xb95f3700
2025-12-25T13:10:57.340 [DEBUG] [Thread-12137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:10:57.350 [DEBUG] [Thread-12137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:10:57.350 [INFO] [Thread-12137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] client lang: <none>
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] server lang: <none>
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] kex follows: False
2025-12-25T13:10:57.351 [DEBUG] [Thread-12137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:10:57.352 [DEBUG] [Thread-12137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:10:57.352 [DEBUG] [Thread-12137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:10:57.352 [DEBUG] [Thread-12137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:10:57.352 [DEBUG] [Thread-12137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:10:57.352 [DEBUG] [Thread-12137] [transport.py] [_log()] Compression: none
2025-12-25T13:10:57.352 [DEBUG] [Thread-12137] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:10:57.359 [DEBUG] [Thread-12137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:10:57.359 [DEBUG] [Thread-12137] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:10:57.359 [DEBUG] [Thread-12137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:10:57.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:10:57.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:10:57.360 [DEBUG] [Thread-12137] [transport.py] [_log()] userauth is OK
2025-12-25T13:10:57.360 [DEBUG] [Thread-12137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:10:57.360 [DEBUG] [Thread-12137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:10:57.360 [DEBUG] [Thread-12137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:10:57.360 [DEBUG] [Thread-12137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:10:57.369 [INFO] [Thread-12137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:10:57.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:10:57.986 [DEBUG] [Thread-12137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:10:57.987 [DEBUG] [Thread-12137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:10:57.987 [DEBUG] [Thread-12137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:10:58.028 [DEBUG] [Thread-12137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:10:58.028 [DEBUG] [Thread-12137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:10:58.032 [DEBUG] [Thread-12137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:10:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:10:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:10:58.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:10:58.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:10:58.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:10:58.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:10:58.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:10:58.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:10:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:10:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.465339 -999.00  +26.40  18.17     21   +2.70 1 1 1 1 1   888    0 27.51 151.91 ----- 18.2 18.2 280.0 28.4 31.9 -24.3 31.2 -25.0 31.0 -21.4 31.7 -24.7
2025-12-25T13:10:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:10:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:10:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.465339
2025-12-25T13:10:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:10:58.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:10:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:10:58.058 [DEBUG] [Thread-12137] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:10:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:10:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:10:58.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:10:23', tmtdew=28.71, humidity=15.24, cloud=0.0, wind=22.27, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:10:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:10:58.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-25T13:10:58.157 [DEBUG] [Thread-12140] [transport.py] [_log()] starting thread (client mode): 0xb95f06d0
2025-12-25T13:10:58.157 [DEBUG] [Thread-12140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:10:58.173 [DEBUG] [Thread-12140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:10:58.173 [INFO] [Thread-12140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:10:58.181 [DEBUG] [Thread-12140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:10:58.181 [DEBUG] [Thread-12140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] client lang: <none>
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] server lang: <none>
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] kex follows: False
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] Compression: none
2025-12-25T13:10:58.182 [DEBUG] [Thread-12140] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:10:58.238 [DEBUG] [Thread-12140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:10:58.239 [DEBUG] [Thread-12140] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:10:58.240 [DEBUG] [Thread-12140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:10:58.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:10:58.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:10:58.295 [DEBUG] [Thread-12140] [transport.py] [_log()] userauth is OK
2025-12-25T13:10:58.295 [DEBUG] [Thread-12140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:10:58.295 [DEBUG] [Thread-12140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:10:58.295 [DEBUG] [Thread-12140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:10:58.295 [DEBUG] [Thread-12140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:10:58.314 [INFO] [Thread-12140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:10: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-25T13:10:58.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:10:59.148 [DEBUG] [Thread-12140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:10:59.148 [DEBUG] [Thread-12140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:10:59.196 [DEBUG] [Thread-12140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:10:59.196 [DEBUG] [Thread-12140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:10:59.206 [DEBUG] [Thread-12140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:10:59.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:10:59.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-25T13:10:59.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:10:59.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:10:59.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:10:59.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:10:59.243 [DEBUG] [Thread-12140] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:11:03.679 [DEBUG] [Thread-12142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:11:11.961 [DEBUG] [Thread-12143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:11:25.736 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:11:25.737 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:11:27.013 [DEBUG] [Thread-12144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:11:29.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:11:29.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:11:29.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-25T13:11:30.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 10, 55), 28.74, 15.17, 0.0, 21.42, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:11:30.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:10:55
2025-12-25T13:11:30.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:11:30.322 [DEBUG] [Thread-12145] [transport.py] [_log()] starting thread (client mode): 0xb95466b0
2025-12-25T13:11:30.322 [DEBUG] [Thread-12145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:11:30.343 [DEBUG] [Thread-12145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:11:30.343 [INFO] [Thread-12145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] client lang: <none>
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] server lang: <none>
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] kex follows: False
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] Compression: none
2025-12-25T13:11:30.346 [DEBUG] [Thread-12145] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:11:30.364 [DEBUG] [Thread-12145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:11:30.364 [DEBUG] [Thread-12145] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:11:30.364 [DEBUG] [Thread-12145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:11:30.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:11:30.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:11:30.365 [DEBUG] [Thread-12145] [transport.py] [_log()] userauth is OK
2025-12-25T13:11:30.365 [DEBUG] [Thread-12145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:11:30.365 [DEBUG] [Thread-12145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:11:30.365 [DEBUG] [Thread-12145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:11:30.365 [DEBUG] [Thread-12145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:11:30.374 [INFO] [Thread-12145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:11:30.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:11:31.029 [DEBUG] [Thread-12145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:11:31.029 [DEBUG] [Thread-12145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:11:31.029 [DEBUG] [Thread-12145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:11:31.070 [DEBUG] [Thread-12145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:11:31.071 [DEBUG] [Thread-12145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:11:31.073 [DEBUG] [Thread-12145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:11:31.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:11:31.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:11:31.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:11:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:11:31.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:11:31.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:11:31.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.466034 -999.00  +26.60  30.31     21   +2.70 1 2 2 1 1   888    0 27.79 150.64 ----- 30.3 30.3 301.8 34.9 32.0 -24.3 31.3 -24.5 31.0 -21.2 31.8 -23.4
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.466034
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T13:11:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:10:55', tmtdew=28.74, humidity=15.17, cloud=0.0, wind=21.42, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:11:05.338', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:11:31.093 [DEBUG] [Thread-12145] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:11:31.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-25T13:11:31.177 [DEBUG] [Thread-12148] [transport.py] [_log()] starting thread (client mode): 0xb9593d30
2025-12-25T13:11:31.177 [DEBUG] [Thread-12148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:11:31.192 [DEBUG] [Thread-12148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:11:31.192 [INFO] [Thread-12148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] client lang: <none>
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] server lang: <none>
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] kex follows: False
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:11:31.199 [DEBUG] [Thread-12148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:11:31.200 [DEBUG] [Thread-12148] [transport.py] [_log()] Compression: none
2025-12-25T13:11:31.200 [DEBUG] [Thread-12148] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:11:31.257 [DEBUG] [Thread-12148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:11:31.257 [DEBUG] [Thread-12148] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:11:31.257 [DEBUG] [Thread-12148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:11:31.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:11:31.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:11:31.314 [DEBUG] [Thread-12148] [transport.py] [_log()] userauth is OK
2025-12-25T13:11:31.314 [DEBUG] [Thread-12148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:11:31.314 [DEBUG] [Thread-12148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:11:31.314 [DEBUG] [Thread-12148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:11:31.314 [DEBUG] [Thread-12148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:11:31.328 [INFO] [Thread-12148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:11:31.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-25T13:11:31.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:11:32.165 [DEBUG] [Thread-12148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:11:32.165 [DEBUG] [Thread-12148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:11:32.213 [DEBUG] [Thread-12148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:11:32.213 [DEBUG] [Thread-12148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:11:32.222 [DEBUG] [Thread-12148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:11:32.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:11:32.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:11:32.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-25T13:11:32.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:11:32.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:11:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:11:32.253 [DEBUG] [Thread-12148] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:11:42.045 [DEBUG] [Thread-12150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:11:57.096 [DEBUG] [Thread-12151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:02.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:12:02.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:12:02.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:12:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 11, 59), 28.78, 14.99, 0.0, 23.29, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:12:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:11:59
2025-12-25T13:12:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:12:03.271 [DEBUG] [Thread-12152] [transport.py] [_log()] starting thread (client mode): 0xb9578430
2025-12-25T13:12:03.271 [DEBUG] [Thread-12152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:12:03.294 [DEBUG] [Thread-12152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:12:03.294 [INFO] [Thread-12152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:12:03.298 [DEBUG] [Thread-12152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] client lang: <none>
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] server lang: <none>
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] kex follows: False
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] Compression: none
2025-12-25T13:12:03.299 [DEBUG] [Thread-12152] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:12:03.315 [DEBUG] [Thread-12152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:12:03.316 [DEBUG] [Thread-12152] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:12:03.316 [DEBUG] [Thread-12152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:12:03.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:12:03.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:12:03.362 [DEBUG] [Thread-12152] [transport.py] [_log()] userauth is OK
2025-12-25T13:12:03.363 [DEBUG] [Thread-12152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:12:03.363 [DEBUG] [Thread-12152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:12:03.363 [DEBUG] [Thread-12152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:12:03.363 [DEBUG] [Thread-12152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:12:03.376 [INFO] [Thread-12152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:12:03.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:12:03.735 [DEBUG] [Thread-12154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:04.051 [DEBUG] [Thread-12152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:12:04.051 [DEBUG] [Thread-12152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:12:04.051 [DEBUG] [Thread-12152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:12:04.092 [DEBUG] [Thread-12152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:12:04.092 [DEBUG] [Thread-12152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:12:04.096 [DEBUG] [Thread-12152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:12:04.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:12:04.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:12:04.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:12:04.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:12:04.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:12:04.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:12:04.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:12:04.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:12:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:12:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.466381 -999.00  +25.70  20.56     22   +2.40 1 1 1 1 1   888    0 28.01 155.59 ----- 20.6 20.6 309.6 29.9 31.7 -26.1 31.1 -25.6 30.7 -26.5 31.6 -23.3
2025-12-25T13:12:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:12:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:12:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.466381
2025-12-25T13:12:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:12:04.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:12:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:12:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:12:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:12:04.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:11:59', tmtdew=28.78, humidity=14.99, cloud=0.0, wind=23.29, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:11:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:12:04.124 [DEBUG] [Thread-12152] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:12:04.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-25T13:12:04.217 [DEBUG] [Thread-12156] [transport.py] [_log()] starting thread (client mode): 0xb6b28be0
2025-12-25T13:12:04.217 [DEBUG] [Thread-12156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:12:04.233 [DEBUG] [Thread-12156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:12:04.233 [INFO] [Thread-12156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:12:04.240 [DEBUG] [Thread-12156] [transport.py] [_log()] client lang: <none>
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] server lang: <none>
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] kex follows: False
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] Compression: none
2025-12-25T13:12:04.241 [DEBUG] [Thread-12156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:12:04.299 [DEBUG] [Thread-12156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:12:04.300 [DEBUG] [Thread-12156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:12:04.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:12:04.301 [DEBUG] [Thread-12156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:12:04.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:12:04.358 [DEBUG] [Thread-12156] [transport.py] [_log()] userauth is OK
2025-12-25T13:12:04.359 [DEBUG] [Thread-12156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:12:04.359 [DEBUG] [Thread-12156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:12:04.359 [DEBUG] [Thread-12156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:12:04.359 [DEBUG] [Thread-12156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:12:04.377 [INFO] [Thread-12156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:12:04.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-25T13:12:04.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:12:05.235 [DEBUG] [Thread-12156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:12:05.235 [DEBUG] [Thread-12156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:12:05.283 [DEBUG] [Thread-12156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:12:05.283 [DEBUG] [Thread-12156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:12:05.292 [DEBUG] [Thread-12156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:12:05.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:12:05.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-25T13:12:05.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-25T13:12:05.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:12:05.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:12:05.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:12:05.327 [DEBUG] [Thread-12156] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:12:12.127 [DEBUG] [Thread-12158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:25.878 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:25.879 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:27.164 [DEBUG] [Thread-12159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:35.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:12:35.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:12:35.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-25T13:12:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 12, 31), 28.6, 15.17, 0.0, 20.89, 26.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:12:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:12:31
2025-12-25T13:12:36.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:12:36.332 [DEBUG] [Thread-12160] [transport.py] [_log()] starting thread (client mode): 0xb955b160
2025-12-25T13:12:36.332 [DEBUG] [Thread-12160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:12:36.354 [DEBUG] [Thread-12160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:12:36.354 [INFO] [Thread-12160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:12:36.355 [DEBUG] [Thread-12160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] client lang: <none>
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] server lang: <none>
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] kex follows: False
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] Compression: none
2025-12-25T13:12:36.356 [DEBUG] [Thread-12160] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:12:36.374 [DEBUG] [Thread-12160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:12:36.374 [DEBUG] [Thread-12160] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:12:36.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:12:36.375 [DEBUG] [Thread-12160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:12:36.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:12:36.377 [DEBUG] [Thread-12160] [transport.py] [_log()] userauth is OK
2025-12-25T13:12:36.378 [DEBUG] [Thread-12160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:12:36.378 [DEBUG] [Thread-12160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:12:36.378 [DEBUG] [Thread-12160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:12:36.378 [DEBUG] [Thread-12160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:12:36.411 [INFO] [Thread-12160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:12:36.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:12:37.073 [DEBUG] [Thread-12160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:12:37.073 [DEBUG] [Thread-12160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:12:37.073 [DEBUG] [Thread-12160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:12:37.114 [DEBUG] [Thread-12160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:12:37.114 [DEBUG] [Thread-12160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:12:37.118 [DEBUG] [Thread-12160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:12:37.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:12:37.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:12:37.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:12:37.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:12:37.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:12:37.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:12:37.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:12:37.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:12:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:12:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.466729 -999.00  +25.50  27.83     22   +2.50 1 1 1 1 1   888    0 27.41 152.46 ----- 27.8 27.8 299.0 32.6 31.6 -27.1 31.1 -25.3 30.6 -22.3 31.6 -23.4
2025-12-25T13:12:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:12:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:12:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.466729
2025-12-25T13:12:37.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:12:37.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:12:37.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:12:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:12:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:12:37.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:12:31', tmtdew=28.6, humidity=15.17, cloud=0.0, wind=20.89, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:12:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:12:37.145 [DEBUG] [Thread-12160] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:12:37.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-25T13:12:37.240 [DEBUG] [Thread-12163] [transport.py] [_log()] starting thread (client mode): 0xb9547550
2025-12-25T13:12:37.240 [DEBUG] [Thread-12163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:12:37.255 [DEBUG] [Thread-12163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:12:37.256 [INFO] [Thread-12163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:12:37.263 [DEBUG] [Thread-12163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:12:37.263 [DEBUG] [Thread-12163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] client lang: <none>
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] server lang: <none>
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] kex follows: False
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] Compression: none
2025-12-25T13:12:37.264 [DEBUG] [Thread-12163] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:12:37.326 [DEBUG] [Thread-12163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:12:37.326 [DEBUG] [Thread-12163] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:12:37.327 [DEBUG] [Thread-12163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:12:37.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:12:37.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:12:37.383 [DEBUG] [Thread-12163] [transport.py] [_log()] userauth is OK
2025-12-25T13:12:37.383 [DEBUG] [Thread-12163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:12:37.383 [DEBUG] [Thread-12163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:12:37.384 [DEBUG] [Thread-12163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:12:37.384 [DEBUG] [Thread-12163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:12:37.403 [INFO] [Thread-12163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:12:37.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-25T13:12:37.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:12:38.280 [DEBUG] [Thread-12163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:12:38.281 [DEBUG] [Thread-12163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:12:38.328 [DEBUG] [Thread-12163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:12:38.328 [DEBUG] [Thread-12163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:12:38.338 [DEBUG] [Thread-12163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:12:38.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:12: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-25T13:12: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') -> 00000000
2025-12-25T13:12:38.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:12:38.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:12:38.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:12:38.374 [DEBUG] [Thread-12163] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:12:42.199 [DEBUG] [Thread-12165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:12:57.253 [DEBUG] [Thread-12166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:03.767 [DEBUG] [Thread-12167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:08.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:13:08.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:13:08.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:13:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 13, 3), 28.12, 15.65, 0.0, 20.54, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:13:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:13:03
2025-12-25T13:13:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:13:09.379 [DEBUG] [Thread-12168] [transport.py] [_log()] starting thread (client mode): 0xb9591ea0
2025-12-25T13:13:09.379 [DEBUG] [Thread-12168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:13:09.397 [DEBUG] [Thread-12168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:13:09.397 [INFO] [Thread-12168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:09.398 [DEBUG] [Thread-12168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] client lang: <none>
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] server lang: <none>
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] kex follows: False
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] Compression: none
2025-12-25T13:13:09.399 [DEBUG] [Thread-12168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:13:09.414 [DEBUG] [Thread-12168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:13:09.415 [DEBUG] [Thread-12168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:13:09.416 [DEBUG] [Thread-12168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:13:09.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:13:09.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:13:09.418 [DEBUG] [Thread-12168] [transport.py] [_log()] userauth is OK
2025-12-25T13:13:09.418 [DEBUG] [Thread-12168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:13:09.418 [DEBUG] [Thread-12168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:13:09.418 [DEBUG] [Thread-12168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:13:09.419 [DEBUG] [Thread-12168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:13:09.437 [INFO] [Thread-12168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:13:09.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:13:10.083 [DEBUG] [Thread-12168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:13:10.083 [DEBUG] [Thread-12168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:13:10.083 [DEBUG] [Thread-12168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:13:10.124 [DEBUG] [Thread-12168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:13:10.124 [DEBUG] [Thread-12168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:13:10.127 [DEBUG] [Thread-12168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:13:10.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:13:10.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:13:10.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:13:10.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:13:10.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:13:10.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:13:10.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:13:10.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:13:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:13:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.467076 -999.00  +25.70  19.03     22   +2.50 1 1 1 1 1   888    0 27.19 143.69 ----- 19.0 19.0 298.0 22.9 31.7 -24.5 31.2 -25.3 30.7 -25.7 31.6 -23.6
2025-12-25T13:13:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:13:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:13:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.467076
2025-12-25T13:13:10.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:13:10.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:13:10.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:13:10.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:13:10.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:13:10.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:13:03', tmtdew=28.12, humidity=15.65, cloud=0.0, wind=20.54, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:12:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:13:10.150 [DEBUG] [Thread-12168] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:13:10.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-25T13:13:10.242 [DEBUG] [Thread-12171] [transport.py] [_log()] starting thread (client mode): 0xb9590220
2025-12-25T13:13:10.242 [DEBUG] [Thread-12171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:13:10.258 [DEBUG] [Thread-12171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:13:10.259 [INFO] [Thread-12171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:13:10.266 [DEBUG] [Thread-12171] [transport.py] [_log()] client lang: <none>
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] server lang: <none>
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] kex follows: False
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] Compression: none
2025-12-25T13:13:10.267 [DEBUG] [Thread-12171] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:13:10.327 [DEBUG] [Thread-12171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:13:10.327 [DEBUG] [Thread-12171] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:13:10.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:13:10.329 [DEBUG] [Thread-12171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:13:10.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:13:10.383 [DEBUG] [Thread-12171] [transport.py] [_log()] userauth is OK
2025-12-25T13:13:10.383 [DEBUG] [Thread-12171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:13:10.383 [DEBUG] [Thread-12171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:13:10.383 [DEBUG] [Thread-12171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:13:10.383 [DEBUG] [Thread-12171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:13:10.402 [INFO] [Thread-12171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:13:10.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-25T13:13:10.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:13:11.332 [DEBUG] [Thread-12171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:13:11.333 [DEBUG] [Thread-12171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:13:11.380 [DEBUG] [Thread-12171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:13:11.380 [DEBUG] [Thread-12171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:13:11.390 [DEBUG] [Thread-12171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:13:11.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:13:11.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-25T13:13:11.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-25T13:13:11.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:13:11.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:13:11.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:13:11.429 [DEBUG] [Thread-12171] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:13:12.288 [DEBUG] [Thread-12173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:26.019 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:26.020 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:27.335 [DEBUG] [Thread-12174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:41.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:13:41.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:13:41.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-25T13:13:42.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 13, 35), 27.91, 15.98, 0.0, 21.3, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:13:42.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:13:35
2025-12-25T13:13:42.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:13:42.367 [DEBUG] [Thread-12175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:13:42.403 [DEBUG] [Thread-12176] [transport.py] [_log()] starting thread (client mode): 0xbbfce440
2025-12-25T13:13:42.403 [DEBUG] [Thread-12176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:13:42.423 [DEBUG] [Thread-12176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:13:42.424 [INFO] [Thread-12176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:13:42.427 [DEBUG] [Thread-12176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:13:42.427 [DEBUG] [Thread-12176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:13:42.427 [DEBUG] [Thread-12176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:13:42.427 [DEBUG] [Thread-12176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:42.427 [DEBUG] [Thread-12176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:42.427 [DEBUG] [Thread-12176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] client lang: <none>
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] server lang: <none>
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] kex follows: False
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] Compression: none
2025-12-25T13:13:42.428 [DEBUG] [Thread-12176] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:13:42.445 [DEBUG] [Thread-12176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:13:42.446 [DEBUG] [Thread-12176] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:13:42.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:13:42.447 [DEBUG] [Thread-12176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:13:42.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:13:42.489 [DEBUG] [Thread-12176] [transport.py] [_log()] userauth is OK
2025-12-25T13:13:42.489 [DEBUG] [Thread-12176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:13:42.489 [DEBUG] [Thread-12176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:13:42.489 [DEBUG] [Thread-12176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:13:42.489 [DEBUG] [Thread-12176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:13:42.509 [INFO] [Thread-12176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:13:42.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:13:43.124 [DEBUG] [Thread-12176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:13:43.125 [DEBUG] [Thread-12176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:13:43.125 [DEBUG] [Thread-12176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:13:43.166 [DEBUG] [Thread-12176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:13:43.166 [DEBUG] [Thread-12176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:13:43.170 [DEBUG] [Thread-12176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:13:43.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:13:43.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:13:43.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:13:43.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:13:43.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:13:43.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:13:43.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:13:43.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:13:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:13:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.467423 -999.00  +25.50  22.54     22   +2.30 1 1 1 1 1   888    0 27.42 140.91 ----- 22.5 22.5 282.6 32.5 31.8 -25.4 31.2 -25.4 30.9 -22.0 31.5 -23.9
2025-12-25T13:13:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:13:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:13:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.467423
2025-12-25T13:13:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:13:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:13:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:13:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:13:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:13:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:13:35', tmtdew=27.91, humidity=15.98, cloud=0.0, wind=21.3, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:13:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:13:43.198 [DEBUG] [Thread-12176] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:13:43.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:13:43.291 [DEBUG] [Thread-12179] [transport.py] [_log()] starting thread (client mode): 0xb9592c50
2025-12-25T13:13:43.291 [DEBUG] [Thread-12179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:13:43.306 [DEBUG] [Thread-12179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:13:43.306 [INFO] [Thread-12179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] client lang: <none>
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] server lang: <none>
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] kex follows: False
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:13:43.314 [DEBUG] [Thread-12179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:13:43.315 [DEBUG] [Thread-12179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:13:43.315 [DEBUG] [Thread-12179] [transport.py] [_log()] Compression: none
2025-12-25T13:13:43.315 [DEBUG] [Thread-12179] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:13:43.371 [DEBUG] [Thread-12179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:13:43.371 [DEBUG] [Thread-12179] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:13:43.372 [DEBUG] [Thread-12179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:13:43.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:13:43.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:13:43.427 [DEBUG] [Thread-12179] [transport.py] [_log()] userauth is OK
2025-12-25T13:13:43.427 [DEBUG] [Thread-12179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:13:43.427 [DEBUG] [Thread-12179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:13:43.427 [DEBUG] [Thread-12179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:13:43.428 [DEBUG] [Thread-12179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:13:43.447 [INFO] [Thread-12179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:13:43.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-25T13:13:43.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:13:44.302 [DEBUG] [Thread-12179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:13:44.302 [DEBUG] [Thread-12179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:13:44.350 [DEBUG] [Thread-12179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:13:44.350 [DEBUG] [Thread-12179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:13:44.359 [DEBUG] [Thread-12179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:13:44.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:13:44.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:13:44.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-25T13:13:44.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:13:44.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:13:44.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:13:44.395 [DEBUG] [Thread-12179] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:13:57.404 [DEBUG] [Thread-12181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:03.814 [DEBUG] [Thread-12182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:12.453 [DEBUG] [Thread-12183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:14:14.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:14:14.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-25T13:14:15.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 14, 7), 28.36, 15.58, 0.0, 27.37, 26.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:14:15.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:14:07
2025-12-25T13:14:15.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:14:15.388 [DEBUG] [Thread-12184] [transport.py] [_log()] starting thread (client mode): 0xb95925c0
2025-12-25T13:14:15.388 [DEBUG] [Thread-12184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:14:15.408 [DEBUG] [Thread-12184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:14:15.409 [INFO] [Thread-12184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] client lang: <none>
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] server lang: <none>
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] kex follows: False
2025-12-25T13:14:15.412 [DEBUG] [Thread-12184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:14:15.413 [DEBUG] [Thread-12184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:14:15.413 [DEBUG] [Thread-12184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:14:15.413 [DEBUG] [Thread-12184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:14:15.413 [DEBUG] [Thread-12184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:14:15.413 [DEBUG] [Thread-12184] [transport.py] [_log()] Compression: none
2025-12-25T13:14:15.413 [DEBUG] [Thread-12184] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:14:15.429 [DEBUG] [Thread-12184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:14:15.430 [DEBUG] [Thread-12184] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:14:15.431 [DEBUG] [Thread-12184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:14:15.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:14:15.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:14:15.433 [DEBUG] [Thread-12184] [transport.py] [_log()] userauth is OK
2025-12-25T13:14:15.433 [DEBUG] [Thread-12184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:14:15.433 [DEBUG] [Thread-12184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:14:15.433 [DEBUG] [Thread-12184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:14:15.433 [DEBUG] [Thread-12184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:14:15.455 [INFO] [Thread-12184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:14:15.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:14:16.192 [DEBUG] [Thread-12184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:14:16.193 [DEBUG] [Thread-12184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:14:16.193 [DEBUG] [Thread-12184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:14:16.233 [DEBUG] [Thread-12184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:14:16.233 [DEBUG] [Thread-12184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:14:16.242 [DEBUG] [Thread-12184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:14:16.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:14:16.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:14:16.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:14:16.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:14:16.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:14:16.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:14:16.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:14:16.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:14:16.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:14:16.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.467770 -999.00  +25.50  23.08     22   +2.30 1 1 1 1 1   888    0 27.07 124.52 ----- 23.1 23.1 282.2 29.7 31.7 -24.4 31.2 -25.0 30.8 -22.2 31.6 -23.0
2025-12-25T13:14:16.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:14:16.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:14:16.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.467770
2025-12-25T13:14:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:14:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:14:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:14:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:14:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:14:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:14:07', tmtdew=28.36, humidity=15.58, cloud=0.0, wind=27.37, temperature=26.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:13:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:14:16.262 [DEBUG] [Thread-12184] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:14:16.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-25T13:14:16.353 [DEBUG] [Thread-12187] [transport.py] [_log()] starting thread (client mode): 0xb95b2cb0
2025-12-25T13:14:16.353 [DEBUG] [Thread-12187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:14:16.368 [DEBUG] [Thread-12187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:14:16.368 [INFO] [Thread-12187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:14:16.376 [DEBUG] [Thread-12187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:14:16.377 [DEBUG] [Thread-12187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] client lang: <none>
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] server lang: <none>
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] kex follows: False
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:14:16.378 [DEBUG] [Thread-12187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:14:16.379 [DEBUG] [Thread-12187] [transport.py] [_log()] Compression: none
2025-12-25T13:14:16.379 [DEBUG] [Thread-12187] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:14:16.438 [DEBUG] [Thread-12187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:14:16.439 [DEBUG] [Thread-12187] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:14:16.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:14:16.440 [DEBUG] [Thread-12187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:14:16.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:14:16.495 [DEBUG] [Thread-12187] [transport.py] [_log()] userauth is OK
2025-12-25T13:14:16.495 [DEBUG] [Thread-12187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:14:16.496 [DEBUG] [Thread-12187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:14:16.496 [DEBUG] [Thread-12187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:14:16.496 [DEBUG] [Thread-12187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:14:16.514 [INFO] [Thread-12187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:14:16.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-25T13:14:16.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:14:17.356 [DEBUG] [Thread-12187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:14:17.356 [DEBUG] [Thread-12187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:14:17.404 [DEBUG] [Thread-12187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:14:17.404 [DEBUG] [Thread-12187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:14:17.413 [DEBUG] [Thread-12187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:14:17.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:14:17.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:14: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-25T13:14:17.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:14:17.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:14:17.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:14:17.450 [DEBUG] [Thread-12187] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:14:26.158 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:26.160 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:27.486 [DEBUG] [Thread-12189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:42.534 [DEBUG] [Thread-12190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:14:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:14:47.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:14:47.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-25T13:14:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 14, 39), 29.59, 14.14, 0.0, 41.13, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:14:48.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:14:39
2025-12-25T13:14:48.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:14:48.496 [DEBUG] [Thread-12191] [transport.py] [_log()] starting thread (client mode): 0xb9547550
2025-12-25T13:14:48.496 [DEBUG] [Thread-12191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:14:48.518 [DEBUG] [Thread-12191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:14:48.519 [INFO] [Thread-12191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] client lang: <none>
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] server lang: <none>
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] kex follows: False
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] Compression: none
2025-12-25T13:14:48.521 [DEBUG] [Thread-12191] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:14:48.537 [DEBUG] [Thread-12191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:14:48.537 [DEBUG] [Thread-12191] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:14:48.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:14:48.537 [DEBUG] [Thread-12191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:14:48.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:14:48.538 [DEBUG] [Thread-12191] [transport.py] [_log()] userauth is OK
2025-12-25T13:14:48.539 [DEBUG] [Thread-12191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:14:48.539 [DEBUG] [Thread-12191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:14:48.539 [DEBUG] [Thread-12191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:14:48.539 [DEBUG] [Thread-12191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:14:48.555 [INFO] [Thread-12191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:14:48.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:14:49.145 [DEBUG] [Thread-12191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:14:49.145 [DEBUG] [Thread-12191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:14:49.146 [DEBUG] [Thread-12191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:14:49.186 [DEBUG] [Thread-12191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:14:49.186 [DEBUG] [Thread-12191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:14:49.189 [DEBUG] [Thread-12191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:14:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:14:49.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:14:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:14:49.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:14:49.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:14:49.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:14:49.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:14:49.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:14:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:14:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.468117 -999.00  +25.70  31.83     20   +1.70 1 1 2 1 1   888    0 26.75 119.59 ----- 31.8 31.8 288.8 40.7 31.6 -25.3 31.1 -24.8 30.7 -22.9 31.5 -23.8
2025-12-25T13:14:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:14:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:14:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.468117
2025-12-25T13:14:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:14:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:14:49.213 [DEBUG] [Thread-12191] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:14:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:14:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:14:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:14:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:14:39', tmtdew=29.59, humidity=14.14, cloud=0.0, wind=41.13, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:14:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:14:49.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-25T13:14:49.303 [DEBUG] [Thread-12194] [transport.py] [_log()] starting thread (client mode): 0xb95913c0
2025-12-25T13:14:49.303 [DEBUG] [Thread-12194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:14:49.318 [DEBUG] [Thread-12194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:14:49.318 [INFO] [Thread-12194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] client lang: <none>
2025-12-25T13:14:49.325 [DEBUG] [Thread-12194] [transport.py] [_log()] server lang: <none>
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] kex follows: False
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] Compression: none
2025-12-25T13:14:49.326 [DEBUG] [Thread-12194] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:14:49.383 [DEBUG] [Thread-12194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:14:49.384 [DEBUG] [Thread-12194] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:14:49.384 [DEBUG] [Thread-12194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:14:49.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:14:49.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:14:49.438 [DEBUG] [Thread-12194] [transport.py] [_log()] userauth is OK
2025-12-25T13:14:49.438 [DEBUG] [Thread-12194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:14:49.438 [DEBUG] [Thread-12194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:14:49.438 [DEBUG] [Thread-12194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:14:49.439 [DEBUG] [Thread-12194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:14:49.457 [INFO] [Thread-12194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:14:49.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-25T13:14:49.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:14:50.322 [DEBUG] [Thread-12194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:14:50.322 [DEBUG] [Thread-12194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:14:50.370 [DEBUG] [Thread-12194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:14:50.370 [DEBUG] [Thread-12194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:14:50.379 [DEBUG] [Thread-12194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:14:50.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:14:50.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-25T13:14:50.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-25T13:14:50.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:14:50.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:14:50.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:14:50.415 [DEBUG] [Thread-12194] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:14:57.571 [DEBUG] [Thread-12196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:03.873 [DEBUG] [Thread-12197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:12.621 [DEBUG] [Thread-12198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:15:20.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:15:20.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-25T13:15:21.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 15, 11), 29.57, 14.14, 0.0, 38.47, 26.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:15:21.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:15:11
2025-12-25T13:15:21.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:15:21.401 [DEBUG] [Thread-12199] [transport.py] [_log()] starting thread (client mode): 0xb9546bc0
2025-12-25T13:15:21.401 [DEBUG] [Thread-12199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:15:21.421 [DEBUG] [Thread-12199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:15:21.421 [INFO] [Thread-12199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] client lang: <none>
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] server lang: <none>
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] kex follows: False
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] Compression: none
2025-12-25T13:15:21.424 [DEBUG] [Thread-12199] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:15:21.438 [DEBUG] [Thread-12199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:15:21.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:15:21.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] userauth is OK
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:15:21.439 [DEBUG] [Thread-12199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:15:21.454 [INFO] [Thread-12199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:15:21.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:15:22.220 [DEBUG] [Thread-12199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:15:22.220 [DEBUG] [Thread-12199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:15:22.220 [DEBUG] [Thread-12199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:15:22.260 [DEBUG] [Thread-12199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:15:22.260 [DEBUG] [Thread-12199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:15:22.263 [DEBUG] [Thread-12199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:15:22.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:15:22.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:15:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:15:22.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:15:22.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:15:22.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:15:22.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.468464 -999.00  +26.40  38.64     20   +1.70 1 1 2 1 1   888    0 27.06 110.22 ----- 38.6 38.6 299.2 47.4 31.8 -24.4 31.1 -25.6 30.9 -21.3 31.6 -23.6
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.468464
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:15:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:15:11', tmtdew=29.57, humidity=14.14, cloud=0.0, wind=38.47, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:14:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:15:22.280 [DEBUG] [Thread-12199] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:15:22.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-25T13:15:22.366 [DEBUG] [Thread-12202] [transport.py] [_log()] starting thread (client mode): 0xb955ab60
2025-12-25T13:15:22.367 [DEBUG] [Thread-12202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:15:22.382 [DEBUG] [Thread-12202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:15:22.382 [INFO] [Thread-12202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:15:22.390 [DEBUG] [Thread-12202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] client lang: <none>
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] server lang: <none>
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] kex follows: False
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] Compression: none
2025-12-25T13:15:22.391 [DEBUG] [Thread-12202] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:15:22.445 [DEBUG] [Thread-12202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:15:22.445 [DEBUG] [Thread-12202] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:15:22.445 [DEBUG] [Thread-12202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:15:22.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:15:22.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:15:22.503 [DEBUG] [Thread-12202] [transport.py] [_log()] userauth is OK
2025-12-25T13:15:22.503 [DEBUG] [Thread-12202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:15:22.503 [DEBUG] [Thread-12202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:15:22.503 [DEBUG] [Thread-12202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:15:22.503 [DEBUG] [Thread-12202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:15:22.521 [INFO] [Thread-12202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:15:22.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-25T13:15:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:15:23.379 [DEBUG] [Thread-12202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:15:23.379 [DEBUG] [Thread-12202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:15:23.428 [DEBUG] [Thread-12202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:15:23.428 [DEBUG] [Thread-12202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:15:23.436 [DEBUG] [Thread-12202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:15:23.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:15:23.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-25T13:15:23.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-25T13:15:23.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:15:23.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:15:23.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:15:23.467 [DEBUG] [Thread-12202] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:15:26.299 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:26.299 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:27.648 [DEBUG] [Thread-12204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:42.702 [DEBUG] [Thread-12205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:15:53.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:15:53.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:15:53.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-25T13:15:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 15, 43), 29.03, 14.75, 0.0, 32.85, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:15:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:15:43
2025-12-25T13:15:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:15:54.459 [DEBUG] [Thread-12206] [transport.py] [_log()] starting thread (client mode): 0xb955a3e0
2025-12-25T13:15:54.460 [DEBUG] [Thread-12206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:15:54.480 [DEBUG] [Thread-12206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:15:54.481 [INFO] [Thread-12206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:15:54.484 [DEBUG] [Thread-12206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:15:54.484 [DEBUG] [Thread-12206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:15:54.484 [DEBUG] [Thread-12206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:15:54.484 [DEBUG] [Thread-12206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:54.484 [DEBUG] [Thread-12206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:54.484 [DEBUG] [Thread-12206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] client lang: <none>
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] server lang: <none>
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] kex follows: False
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:15:54.485 [DEBUG] [Thread-12206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:15:54.486 [DEBUG] [Thread-12206] [transport.py] [_log()] Compression: none
2025-12-25T13:15:54.486 [DEBUG] [Thread-12206] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:15:54.504 [DEBUG] [Thread-12206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:15:54.505 [DEBUG] [Thread-12206] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:15:54.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:15:54.506 [DEBUG] [Thread-12206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:15:54.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:15:54.509 [DEBUG] [Thread-12206] [transport.py] [_log()] userauth is OK
2025-12-25T13:15:54.509 [DEBUG] [Thread-12206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:15:54.509 [DEBUG] [Thread-12206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:15:54.510 [DEBUG] [Thread-12206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:15:54.510 [DEBUG] [Thread-12206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:15:54.535 [INFO] [Thread-12206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:15:54.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:15:55.186 [DEBUG] [Thread-12206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:15:55.187 [DEBUG] [Thread-12206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:15:55.187 [DEBUG] [Thread-12206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:15:55.228 [DEBUG] [Thread-12206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:15:55.228 [DEBUG] [Thread-12206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:15:55.231 [DEBUG] [Thread-12206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:15:55.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:15:55.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:15:55.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:15:55.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:15:55.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:15:55.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:15:55.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:15:55.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:15:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:15:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.468812 -999.00  +26.30  28.58     20   +2.00 1 1 1 1 1   888    0 26.65 110.09 ----- 28.6 28.6 318.6 36.2 31.7 -24.7 31.2 -24.8 30.7 -22.7 31.5 -22.6
2025-12-25T13:15:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:15:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:15:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.468812
2025-12-25T13:15:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:15:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:15:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:15:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:15:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:15:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:15:43', tmtdew=29.03, humidity=14.75, cloud=0.0, wind=32.85, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:15:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:15:55.260 [DEBUG] [Thread-12206] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:15:55.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-25T13:15:55.359 [DEBUG] [Thread-12209] [transport.py] [_log()] starting thread (client mode): 0xb9593d60
2025-12-25T13:15:55.359 [DEBUG] [Thread-12209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:15:55.377 [DEBUG] [Thread-12209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:15:55.377 [INFO] [Thread-12209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:15:55.384 [DEBUG] [Thread-12209] [transport.py] [_log()] client lang: <none>
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] server lang: <none>
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] kex follows: False
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] Compression: none
2025-12-25T13:15:55.385 [DEBUG] [Thread-12209] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:15:55.442 [DEBUG] [Thread-12209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:15:55.443 [DEBUG] [Thread-12209] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:15:55.443 [DEBUG] [Thread-12209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:15:55.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:15:55.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:15:55.498 [DEBUG] [Thread-12209] [transport.py] [_log()] userauth is OK
2025-12-25T13:15:55.498 [DEBUG] [Thread-12209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:15:55.498 [DEBUG] [Thread-12209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:15:55.498 [DEBUG] [Thread-12209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:15:55.498 [DEBUG] [Thread-12209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:15:55.519 [INFO] [Thread-12209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:15:55.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-25T13:15:55.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:15:56.367 [DEBUG] [Thread-12209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:15:56.367 [DEBUG] [Thread-12209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:15:56.415 [DEBUG] [Thread-12209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:15:56.415 [DEBUG] [Thread-12209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:15:56.424 [DEBUG] [Thread-12209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:15:56.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:15:56.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-25T13:15:56.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-25T13:15:56.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:15:56.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:15:56.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:15:56.462 [DEBUG] [Thread-12209] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:15:57.739 [DEBUG] [Thread-12211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:03.923 [DEBUG] [Thread-12212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:12.797 [DEBUG] [Thread-12213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:26.438 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:26.439 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:26.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:16:26.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:16:26.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-25T13:16:27.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 16, 15), 28.9, 14.89, 0.0, 38.68, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:16:27.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:16:15
2025-12-25T13:16:27.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:16:27.466 [DEBUG] [Thread-12214] [transport.py] [_log()] starting thread (client mode): 0xb95449d0
2025-12-25T13:16:27.466 [DEBUG] [Thread-12214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:16:27.476 [DEBUG] [Thread-12214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:16:27.477 [INFO] [Thread-12214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:16:27.477 [DEBUG] [Thread-12214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] client lang: <none>
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] server lang: <none>
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] kex follows: False
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] Compression: none
2025-12-25T13:16:27.478 [DEBUG] [Thread-12214] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:16:27.486 [DEBUG] [Thread-12214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:16:27.487 [DEBUG] [Thread-12214] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:16:27.487 [DEBUG] [Thread-12214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:16:27.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:16:27.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:16:27.489 [DEBUG] [Thread-12214] [transport.py] [_log()] userauth is OK
2025-12-25T13:16:27.489 [DEBUG] [Thread-12214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:16:27.489 [DEBUG] [Thread-12214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:16:27.489 [DEBUG] [Thread-12214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:16:27.489 [DEBUG] [Thread-12214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:16:27.509 [INFO] [Thread-12214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:16:27.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:16:27.831 [DEBUG] [Thread-12216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:28.167 [DEBUG] [Thread-12214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:16:28.167 [DEBUG] [Thread-12214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:16:28.168 [DEBUG] [Thread-12214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:16:28.208 [DEBUG] [Thread-12214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:16:28.208 [DEBUG] [Thread-12214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:16:28.211 [DEBUG] [Thread-12214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:16:28.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:16:28.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:16:28.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:16:28.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:16:28.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:16:28.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:16:28.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:16:28.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:16:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:16:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.469159 -999.00  +26.70  43.60     20   +1.90 1 1 2 1 1   888    0 26.89 103.44 ----- 43.6 43.6 309.6 50.5 31.6 -25.4 31.1 -24.5 30.6 -26.1 31.4 -23.4
2025-12-25T13:16:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:16:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:16:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.469159
2025-12-25T13:16:28.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:16:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:16:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:16:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:16:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:16:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:16:15', tmtdew=28.9, humidity=14.89, cloud=0.0, wind=38.68, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:15:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:16:28.242 [DEBUG] [Thread-12214] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:16:28.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-25T13:16:28.335 [DEBUG] [Thread-12218] [transport.py] [_log()] starting thread (client mode): 0xb95782e0
2025-12-25T13:16:28.335 [DEBUG] [Thread-12218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:16:28.351 [DEBUG] [Thread-12218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:16:28.351 [INFO] [Thread-12218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:16:28.358 [DEBUG] [Thread-12218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:16:28.359 [DEBUG] [Thread-12218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] client lang: <none>
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] server lang: <none>
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] kex follows: False
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:16:28.360 [DEBUG] [Thread-12218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:16:28.361 [DEBUG] [Thread-12218] [transport.py] [_log()] Compression: none
2025-12-25T13:16:28.361 [DEBUG] [Thread-12218] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:16:28.419 [DEBUG] [Thread-12218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:16:28.420 [DEBUG] [Thread-12218] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:16:28.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:16:28.421 [DEBUG] [Thread-12218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:16:28.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:16:28.480 [DEBUG] [Thread-12218] [transport.py] [_log()] userauth is OK
2025-12-25T13:16:28.481 [DEBUG] [Thread-12218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:16:28.481 [DEBUG] [Thread-12218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:16:28.481 [DEBUG] [Thread-12218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:16:28.481 [DEBUG] [Thread-12218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:16:28.503 [INFO] [Thread-12218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:16:28.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-25T13:16:28.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:16:29.350 [DEBUG] [Thread-12218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:16:29.350 [DEBUG] [Thread-12218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:16:29.399 [DEBUG] [Thread-12218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:16:29.399 [DEBUG] [Thread-12218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:16:29.408 [DEBUG] [Thread-12218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:16:29.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:16:29.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-25T13:16:29.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:16:29.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:16:29.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:16:29.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:16:29.444 [DEBUG] [Thread-12218] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:16:42.861 [DEBUG] [Thread-12220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:57.898 [DEBUG] [Thread-12221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:16:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:16:59.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:16:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:17:00.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 16, 47), 29.56, 14.49, 0.0, 37.41, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:17:00.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:16:47
2025-12-25T13:17:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:17:00.441 [DEBUG] [Thread-12222] [transport.py] [_log()] starting thread (client mode): 0xb9590940
2025-12-25T13:17:00.441 [DEBUG] [Thread-12222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:17:00.462 [DEBUG] [Thread-12222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:17:00.462 [INFO] [Thread-12222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:17:00.465 [DEBUG] [Thread-12222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] client lang: <none>
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] server lang: <none>
2025-12-25T13:17:00.466 [DEBUG] [Thread-12222] [transport.py] [_log()] kex follows: False
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] Compression: none
2025-12-25T13:17:00.467 [DEBUG] [Thread-12222] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:17:00.486 [DEBUG] [Thread-12222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:17:00.486 [DEBUG] [Thread-12222] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:17:00.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:17:00.487 [DEBUG] [Thread-12222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:17:00.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:17:00.489 [DEBUG] [Thread-12222] [transport.py] [_log()] userauth is OK
2025-12-25T13:17:00.490 [DEBUG] [Thread-12222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:17:00.490 [DEBUG] [Thread-12222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:17:00.490 [DEBUG] [Thread-12222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:17:00.490 [DEBUG] [Thread-12222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:17:00.525 [INFO] [Thread-12222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:17:00.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:17:01.107 [DEBUG] [Thread-12222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:17:01.107 [DEBUG] [Thread-12222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:17:01.107 [DEBUG] [Thread-12222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:17:01.148 [DEBUG] [Thread-12222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:17:01.148 [DEBUG] [Thread-12222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:17:01.152 [DEBUG] [Thread-12222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:17:01.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:17:01.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:17:01.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:17:01.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:17:01.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:17:01.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:17:01.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:17:01.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:17:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:17:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.469854 -999.00  +26.30  41.26     20   +1.50 1 1 2 1 1   888    0 26.88 116.05 ----- 41.3 41.3 309.0 52.7 31.3 -26.2 30.8 -26.1 30.4 -26.4 31.3 -23.2
2025-12-25T13:17:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:17:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:17:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.469854
2025-12-25T13:17:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:17:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:17:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:17:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:17:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:17:01.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:16:47', tmtdew=29.56, humidity=14.49, cloud=0.0, wind=37.41, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:16:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:17:01.179 [DEBUG] [Thread-12222] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:17:01.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-25T13:17:01.273 [DEBUG] [Thread-12225] [transport.py] [_log()] starting thread (client mode): 0xb9558c70
2025-12-25T13:17:01.273 [DEBUG] [Thread-12225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:17:01.288 [DEBUG] [Thread-12225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:17:01.288 [INFO] [Thread-12225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:17:01.296 [DEBUG] [Thread-12225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:17:01.296 [DEBUG] [Thread-12225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:17:01.296 [DEBUG] [Thread-12225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:17:01.296 [DEBUG] [Thread-12225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:01.296 [DEBUG] [Thread-12225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] client lang: <none>
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] server lang: <none>
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] kex follows: False
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:17:01.297 [DEBUG] [Thread-12225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:17:01.298 [DEBUG] [Thread-12225] [transport.py] [_log()] Compression: none
2025-12-25T13:17:01.298 [DEBUG] [Thread-12225] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:17:01.355 [DEBUG] [Thread-12225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:17:01.356 [DEBUG] [Thread-12225] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:17:01.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:17:01.357 [DEBUG] [Thread-12225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:17:01.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:17:01.414 [DEBUG] [Thread-12225] [transport.py] [_log()] userauth is OK
2025-12-25T13:17:01.415 [DEBUG] [Thread-12225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:17:01.415 [DEBUG] [Thread-12225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:17:01.415 [DEBUG] [Thread-12225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:17:01.415 [DEBUG] [Thread-12225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:17:01.433 [INFO] [Thread-12225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:17:01.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:17:01.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:17:02.296 [DEBUG] [Thread-12225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:17:02.296 [DEBUG] [Thread-12225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:17:02.344 [DEBUG] [Thread-12225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:17:02.344 [DEBUG] [Thread-12225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:17:02.353 [DEBUG] [Thread-12225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:17:02.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:17:02.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-25T13:17:02.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:17:02.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:17:02.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:17:02.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:17:02.389 [DEBUG] [Thread-12225] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:17:03.976 [DEBUG] [Thread-12227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:17:12.934 [DEBUG] [Thread-12228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:17:26.578 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:17:26.579 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:17:27.983 [DEBUG] [Thread-12229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:17:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:17:32.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:17:32.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-25T13:17:33.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 17, 19), 29.42, 14.6, 0.0, 40.83, 26.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:17:33.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:17:19
2025-12-25T13:17:33.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:17:33.383 [DEBUG] [Thread-12230] [transport.py] [_log()] starting thread (client mode): 0xb957b3d0
2025-12-25T13:17:33.383 [DEBUG] [Thread-12230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:17:33.399 [DEBUG] [Thread-12230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:17:33.399 [INFO] [Thread-12230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] client lang: <none>
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] server lang: <none>
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] kex follows: False
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] Compression: none
2025-12-25T13:17:33.402 [DEBUG] [Thread-12230] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:17:33.419 [DEBUG] [Thread-12230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:17:33.419 [DEBUG] [Thread-12230] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:17:33.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:17:33.420 [DEBUG] [Thread-12230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:17:33.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:17:33.422 [DEBUG] [Thread-12230] [transport.py] [_log()] userauth is OK
2025-12-25T13:17:33.423 [DEBUG] [Thread-12230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:17:33.423 [DEBUG] [Thread-12230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:17:33.423 [DEBUG] [Thread-12230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:17:33.423 [DEBUG] [Thread-12230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:17:33.448 [INFO] [Thread-12230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:17:33.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:17:34.180 [DEBUG] [Thread-12230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:17:34.180 [DEBUG] [Thread-12230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:17:34.181 [DEBUG] [Thread-12230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:17:34.221 [DEBUG] [Thread-12230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:17:34.221 [DEBUG] [Thread-12230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:17:34.225 [DEBUG] [Thread-12230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:17:34.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:17:34.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:17:34.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:17:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:17:34.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:17:34.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:17:34.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:17:34.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:17:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:17:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.470201 -999.00  +26.20  27.58     20   +1.60 1 1 1 1 1   888    0 27.34 120.04 ----- 27.6 27.6 305.6 41.3 31.4 -24.8 30.9 -24.6 30.5 -23.1 31.3 -22.6
2025-12-25T13:17:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:17:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:17:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.470201
2025-12-25T13:17:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:17:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:17:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:17:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:17:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:17:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:17:19', tmtdew=29.42, humidity=14.6, cloud=0.0, wind=40.83, temperature=26.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:17:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:17:34.253 [DEBUG] [Thread-12230] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:17: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-25T13:17:34.347 [DEBUG] [Thread-12233] [transport.py] [_log()] starting thread (client mode): 0xb95796f0
2025-12-25T13:17:34.347 [DEBUG] [Thread-12233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:17:34.361 [DEBUG] [Thread-12233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:17:34.361 [INFO] [Thread-12233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:17:34.369 [DEBUG] [Thread-12233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:17:34.369 [DEBUG] [Thread-12233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:17:34.369 [DEBUG] [Thread-12233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:17:34.369 [DEBUG] [Thread-12233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:34.369 [DEBUG] [Thread-12233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] client lang: <none>
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] server lang: <none>
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] kex follows: False
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:17:34.370 [DEBUG] [Thread-12233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:17:34.371 [DEBUG] [Thread-12233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:17:34.371 [DEBUG] [Thread-12233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:17:34.371 [DEBUG] [Thread-12233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:17:34.371 [DEBUG] [Thread-12233] [transport.py] [_log()] Compression: none
2025-12-25T13:17:34.371 [DEBUG] [Thread-12233] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:17:34.426 [DEBUG] [Thread-12233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:17:34.426 [DEBUG] [Thread-12233] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:17:34.426 [DEBUG] [Thread-12233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:17:34.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:17:34.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:17:34.482 [DEBUG] [Thread-12233] [transport.py] [_log()] userauth is OK
2025-12-25T13:17:34.482 [DEBUG] [Thread-12233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:17:34.482 [DEBUG] [Thread-12233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:17:34.482 [DEBUG] [Thread-12233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:17:34.482 [DEBUG] [Thread-12233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:17:34.504 [INFO] [Thread-12233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:17: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-25T13:17:34.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:17:35.345 [DEBUG] [Thread-12233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:17:35.345 [DEBUG] [Thread-12233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:17:35.393 [DEBUG] [Thread-12233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:17:35.393 [DEBUG] [Thread-12233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:17:35.403 [DEBUG] [Thread-12233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:17:35.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:17:35.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-25T13:17:35.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-25T13:17:35.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:17:35.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:17:35.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:17:35.437 [DEBUG] [Thread-12233] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:17:43.019 [DEBUG] [Thread-12235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:17:58.068 [DEBUG] [Thread-12236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:04.021 [DEBUG] [Thread-12237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:05.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:18:05.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:18:05.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-25T13:18:06.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 17, 51), 29.59, 14.19, 0.0, 38.43, 26.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:18:06.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:17:51
2025-12-25T13:18:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:18:06.447 [DEBUG] [Thread-12238] [transport.py] [_log()] starting thread (client mode): 0xb95931c0
2025-12-25T13:18:06.447 [DEBUG] [Thread-12238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:18:06.467 [DEBUG] [Thread-12238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:18:06.467 [INFO] [Thread-12238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:18:06.470 [DEBUG] [Thread-12238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:18:06.470 [DEBUG] [Thread-12238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:18:06.470 [DEBUG] [Thread-12238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:18:06.470 [DEBUG] [Thread-12238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:06.470 [DEBUG] [Thread-12238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] client lang: <none>
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] server lang: <none>
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] kex follows: False
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] Compression: none
2025-12-25T13:18:06.471 [DEBUG] [Thread-12238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:18:06.490 [DEBUG] [Thread-12238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:18:06.491 [DEBUG] [Thread-12238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:18:06.491 [DEBUG] [Thread-12238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:18:06.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:18:06.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:18:06.533 [DEBUG] [Thread-12238] [transport.py] [_log()] userauth is OK
2025-12-25T13:18:06.533 [DEBUG] [Thread-12238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:18:06.533 [DEBUG] [Thread-12238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:18:06.534 [DEBUG] [Thread-12238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:18:06.534 [DEBUG] [Thread-12238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:18:06.554 [INFO] [Thread-12238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:18:06.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:18:07.218 [DEBUG] [Thread-12238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:18:07.218 [DEBUG] [Thread-12238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:18:07.218 [DEBUG] [Thread-12238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:18:07.259 [DEBUG] [Thread-12238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:18:07.259 [DEBUG] [Thread-12238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:18:07.263 [DEBUG] [Thread-12238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:18:07.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:18:07.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:18:07.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:18:07.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:18:07.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:18:07.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:18:07.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:18:07.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:18:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:18:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.470548 -999.00  +26.70  36.48     19   +1.80 1 1 2 1 1   888    0 27.10 108.84 ----- 36.5 36.5 307.7 46.7 31.4 -25.7 30.9 -25.2 30.6 -24.2 31.3 -23.0
2025-12-25T13:18:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:18:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:18:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.470548
2025-12-25T13:18:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:18:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:18:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:18:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:18:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:18:07.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:17:51', tmtdew=29.59, humidity=14.19, cloud=0.0, wind=38.43, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:17:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:18:07.289 [DEBUG] [Thread-12238] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:18:07.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-25T13:18:07.382 [DEBUG] [Thread-12241] [transport.py] [_log()] starting thread (client mode): 0xb6b2b4f0
2025-12-25T13:18:07.382 [DEBUG] [Thread-12241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:18:07.396 [DEBUG] [Thread-12241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:18:07.396 [INFO] [Thread-12241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:18:07.403 [DEBUG] [Thread-12241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:18:07.404 [DEBUG] [Thread-12241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] client lang: <none>
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] server lang: <none>
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] kex follows: False
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] Compression: none
2025-12-25T13:18:07.405 [DEBUG] [Thread-12241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:18:07.466 [DEBUG] [Thread-12241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:18:07.466 [DEBUG] [Thread-12241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:18:07.467 [DEBUG] [Thread-12241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:18:07.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:18:07.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:18:07.526 [DEBUG] [Thread-12241] [transport.py] [_log()] userauth is OK
2025-12-25T13:18:07.526 [DEBUG] [Thread-12241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:18:07.526 [DEBUG] [Thread-12241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:18:07.527 [DEBUG] [Thread-12241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:18:07.527 [DEBUG] [Thread-12241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:18:07.546 [INFO] [Thread-12241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:18:07.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-25T13:18:07.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:18:08.359 [DEBUG] [Thread-12241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:18:08.360 [DEBUG] [Thread-12241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:18:08.408 [DEBUG] [Thread-12241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:18:08.409 [DEBUG] [Thread-12241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:18:08.417 [DEBUG] [Thread-12241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:18:08.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:18: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')
2025-12-25T13:18:08.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-25T13:18:08.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:18:08.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:18:08.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:18:08.454 [DEBUG] [Thread-12241] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:18:13.101 [DEBUG] [Thread-12243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:26.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:26.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:28.153 [DEBUG] [Thread-12244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:38.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:18:38.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:18:38.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-25T13:18:39.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 18, 24), 29.48, 14.29, 0.0, 37.32, 26.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:18:39.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:18:24
2025-12-25T13:18:39.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:18:39.509 [DEBUG] [Thread-12245] [transport.py] [_log()] starting thread (client mode): 0xb957a710
2025-12-25T13:18:39.509 [DEBUG] [Thread-12245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:18:39.527 [DEBUG] [Thread-12245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:18:39.527 [INFO] [Thread-12245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:18:39.530 [DEBUG] [Thread-12245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:18:39.530 [DEBUG] [Thread-12245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:18:39.530 [DEBUG] [Thread-12245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:18:39.530 [DEBUG] [Thread-12245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] client lang: <none>
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] server lang: <none>
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] kex follows: False
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] Compression: none
2025-12-25T13:18:39.531 [DEBUG] [Thread-12245] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:18:39.546 [DEBUG] [Thread-12245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:18:39.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:18:39.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] userauth is OK
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:18:39.547 [DEBUG] [Thread-12245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:18:39.564 [INFO] [Thread-12245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:18:39.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:18:40.251 [DEBUG] [Thread-12245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:18:40.251 [DEBUG] [Thread-12245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:18:40.251 [DEBUG] [Thread-12245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:18:40.292 [DEBUG] [Thread-12245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:18:40.292 [DEBUG] [Thread-12245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:18:40.294 [DEBUG] [Thread-12245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:18:40.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:18:40.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:18:40.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:18:40.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:18:40.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:18:40.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:18:40.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.470895 -999.00  +26.20  34.57     20   +1.50 1 1 2 1 1   888    0 27.14 105.29 ----- 34.6 34.6 294.3 43.2 31.3 -25.4 30.8 -26.1 30.4 -24.4 31.2 -23.1
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.470895
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:18:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:18:24', tmtdew=29.48, humidity=14.29, cloud=0.0, wind=37.32, temperature=26.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:18:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:18:40.313 [DEBUG] [Thread-12245] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:18:40.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:18:40.396 [DEBUG] [Thread-12248] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-25T13:18:40.396 [DEBUG] [Thread-12248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:18:40.410 [DEBUG] [Thread-12248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:18:40.410 [INFO] [Thread-12248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] client lang: <none>
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] server lang: <none>
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] kex follows: False
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] Compression: none
2025-12-25T13:18:40.418 [DEBUG] [Thread-12248] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:18:40.476 [DEBUG] [Thread-12248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:18:40.476 [DEBUG] [Thread-12248] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:18:40.476 [DEBUG] [Thread-12248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:18:40.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:18:40.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:18:40.533 [DEBUG] [Thread-12248] [transport.py] [_log()] userauth is OK
2025-12-25T13:18:40.533 [DEBUG] [Thread-12248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:18:40.533 [DEBUG] [Thread-12248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:18:40.533 [DEBUG] [Thread-12248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:18:40.533 [DEBUG] [Thread-12248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:18:40.547 [INFO] [Thread-12248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:18:40.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-25T13:18:40.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:18:41.366 [DEBUG] [Thread-12248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:18:41.366 [DEBUG] [Thread-12248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:18:41.414 [DEBUG] [Thread-12248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:18:41.414 [DEBUG] [Thread-12248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:18:41.422 [DEBUG] [Thread-12248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:18:41.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:18:41.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:18:41.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-25T13:18:41.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:18:41.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:18:41.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:18:41.453 [DEBUG] [Thread-12248] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:18:43.185 [DEBUG] [Thread-12250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:18:58.242 [DEBUG] [Thread-12251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:04.073 [DEBUG] [Thread-12252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:19:11.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:19:11.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-25T13:19:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 18, 56), 28.8, 14.89, 0.0, 40.53, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:19:12.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:18:56
2025-12-25T13:19:12.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:19:12.447 [DEBUG] [Thread-12253] [transport.py] [_log()] starting thread (client mode): 0xb6b142b0
2025-12-25T13:19:12.447 [DEBUG] [Thread-12253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:19:12.467 [DEBUG] [Thread-12253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:19:12.467 [INFO] [Thread-12253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] client lang: <none>
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] server lang: <none>
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] kex follows: False
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:19:12.468 [DEBUG] [Thread-12253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:19:12.469 [DEBUG] [Thread-12253] [transport.py] [_log()] Compression: none
2025-12-25T13:19:12.469 [DEBUG] [Thread-12253] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:19:12.488 [DEBUG] [Thread-12253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:19:12.488 [DEBUG] [Thread-12253] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:19:12.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:19:12.489 [DEBUG] [Thread-12253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:19:12.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:19:12.491 [DEBUG] [Thread-12253] [transport.py] [_log()] userauth is OK
2025-12-25T13:19:12.491 [DEBUG] [Thread-12253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:19:12.492 [DEBUG] [Thread-12253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:19:12.492 [DEBUG] [Thread-12253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:19:12.492 [DEBUG] [Thread-12253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:19:12.516 [INFO] [Thread-12253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:19:12.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:19:13.141 [DEBUG] [Thread-12253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:19:13.141 [DEBUG] [Thread-12253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:19:13.141 [DEBUG] [Thread-12253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:19:13.182 [DEBUG] [Thread-12253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:19:13.182 [DEBUG] [Thread-12253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:19:13.185 [DEBUG] [Thread-12253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:19:13.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:19:13.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:19:13.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:19:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:19:13.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:19:13.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:19:13.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.471242 -999.00  +25.90  41.29     20   +1.70 1 1 2 1 1   888    0 26.53 96.79 ----- 41.3 41.3 294.4 45.9 31.2 -26.2 30.7 -26.0 30.3 -24.1 31.1 -24.2
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.471242
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:19:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:18:56', tmtdew=28.8, humidity=14.89, cloud=0.0, wind=40.53, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:18:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:19:13.204 [DEBUG] [Thread-12253] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:19:13.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:19:13.276 [DEBUG] [Thread-12256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:13.284 [DEBUG] [Thread-12257] [transport.py] [_log()] starting thread (client mode): 0xb955b2b0
2025-12-25T13:19:13.284 [DEBUG] [Thread-12257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:19:13.298 [DEBUG] [Thread-12257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:19:13.298 [INFO] [Thread-12257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:13.306 [DEBUG] [Thread-12257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] client lang: <none>
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] server lang: <none>
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] kex follows: False
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] Compression: none
2025-12-25T13:19:13.307 [DEBUG] [Thread-12257] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:19:13.366 [DEBUG] [Thread-12257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:19:13.366 [DEBUG] [Thread-12257] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:19:13.367 [DEBUG] [Thread-12257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:19:13.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:19:13.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:19:13.426 [DEBUG] [Thread-12257] [transport.py] [_log()] userauth is OK
2025-12-25T13:19:13.426 [DEBUG] [Thread-12257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:19:13.426 [DEBUG] [Thread-12257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:19:13.426 [DEBUG] [Thread-12257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:19:13.426 [DEBUG] [Thread-12257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:19:13.446 [INFO] [Thread-12257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:19:13.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:19:13.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:19:14.309 [DEBUG] [Thread-12257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:19:14.309 [DEBUG] [Thread-12257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:19:14.357 [DEBUG] [Thread-12257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:19:14.357 [DEBUG] [Thread-12257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:19:14.366 [DEBUG] [Thread-12257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:19:14.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:19:14.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-25T13:19:14.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-25T13:19:14.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:19:14.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:19:14.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:19:14.399 [DEBUG] [Thread-12257] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:19:26.860 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:26.861 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:28.314 [DEBUG] [Thread-12259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:43.353 [DEBUG] [Thread-12260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:19:44.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:19:44.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:19:44.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:19:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 19, 28), 28.83, 14.89, 0.0, 33.4, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:19:45.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:19:28
2025-12-25T13:19:45.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:19:45.399 [DEBUG] [Thread-12261] [transport.py] [_log()] starting thread (client mode): 0xb9590f10
2025-12-25T13:19:45.399 [DEBUG] [Thread-12261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:19:45.420 [DEBUG] [Thread-12261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:19:45.420 [INFO] [Thread-12261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] client lang: <none>
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] server lang: <none>
2025-12-25T13:19:45.422 [DEBUG] [Thread-12261] [transport.py] [_log()] kex follows: False
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] Compression: none
2025-12-25T13:19:45.423 [DEBUG] [Thread-12261] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:19:45.436 [DEBUG] [Thread-12261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:19:45.437 [DEBUG] [Thread-12261] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:19:45.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:19:45.438 [DEBUG] [Thread-12261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:19:45.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:19:45.439 [DEBUG] [Thread-12261] [transport.py] [_log()] userauth is OK
2025-12-25T13:19:45.439 [DEBUG] [Thread-12261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:19:45.439 [DEBUG] [Thread-12261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:19:45.439 [DEBUG] [Thread-12261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:19:45.439 [DEBUG] [Thread-12261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:19:45.453 [INFO] [Thread-12261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:19:45.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:19:46.211 [DEBUG] [Thread-12261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:19:46.211 [DEBUG] [Thread-12261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:19:46.212 [DEBUG] [Thread-12261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:19:46.252 [DEBUG] [Thread-12261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:19:46.253 [DEBUG] [Thread-12261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:19:46.256 [DEBUG] [Thread-12261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:19:46.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:19:46.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:19:46.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:19:46.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:19:46.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:19:46.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:19:46.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:19:46.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:19:46.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:19:46.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.471590 -999.00  +26.00  25.71     20   +1.60 1 1 1 1 1   888    0 26.69 97.57 ----- 25.7 25.7 305.6 45.3 31.1 -25.7 30.8 -24.9 30.4 -23.3 31.1 -22.7
2025-12-25T13:19:46.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:19:46.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:19:46.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.471590
2025-12-25T13:19:46.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:19:46.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:19:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:19:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:19:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:19:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:19:28', tmtdew=28.83, humidity=14.89, cloud=0.0, wind=33.4, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:19:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:19:46.284 [DEBUG] [Thread-12261] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:19:46.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-25T13:19:46.390 [DEBUG] [Thread-12264] [transport.py] [_log()] starting thread (client mode): 0xb957a5f0
2025-12-25T13:19:46.390 [DEBUG] [Thread-12264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:19:46.404 [DEBUG] [Thread-12264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:19:46.404 [INFO] [Thread-12264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:19:46.411 [DEBUG] [Thread-12264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] client lang: <none>
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] server lang: <none>
2025-12-25T13:19:46.412 [DEBUG] [Thread-12264] [transport.py] [_log()] kex follows: False
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] Compression: none
2025-12-25T13:19:46.413 [DEBUG] [Thread-12264] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:19:46.469 [DEBUG] [Thread-12264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:19:46.470 [DEBUG] [Thread-12264] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:19:46.470 [DEBUG] [Thread-12264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:19:46.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:19:46.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:19:46.526 [DEBUG] [Thread-12264] [transport.py] [_log()] userauth is OK
2025-12-25T13:19:46.526 [DEBUG] [Thread-12264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:19:46.526 [DEBUG] [Thread-12264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:19:46.526 [DEBUG] [Thread-12264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:19:46.526 [DEBUG] [Thread-12264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:19:46.544 [INFO] [Thread-12264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:19:46.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-25T13:19:46.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:19:47.375 [DEBUG] [Thread-12264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:19:47.376 [DEBUG] [Thread-12264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:19:47.424 [DEBUG] [Thread-12264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:19:47.424 [DEBUG] [Thread-12264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:19:47.434 [DEBUG] [Thread-12264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:19:47.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:19:47.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:19:47.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:19:47.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:19:47.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:19:47.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:19:47.470 [DEBUG] [Thread-12264] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:19:58.385 [DEBUG] [Thread-12266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:04.120 [DEBUG] [Thread-12267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:13.428 [DEBUG] [Thread-12268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:17.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:20:17.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:20:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:20:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 19, 28), 28.83, 14.89, 0.0, 33.4, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:20:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:19:28
2025-12-25T13:20:18.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:20:18.444 [DEBUG] [Thread-12269] [transport.py] [_log()] starting thread (client mode): 0xb6b299f0
2025-12-25T13:20:18.444 [DEBUG] [Thread-12269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:20:18.465 [DEBUG] [Thread-12269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:20:18.465 [INFO] [Thread-12269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:20:18.468 [DEBUG] [Thread-12269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] client lang: <none>
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] server lang: <none>
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] kex follows: False
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] Compression: none
2025-12-25T13:20:18.469 [DEBUG] [Thread-12269] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:20:18.486 [DEBUG] [Thread-12269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:20:18.486 [DEBUG] [Thread-12269] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:20:18.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:20:18.487 [DEBUG] [Thread-12269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:20:18.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:20:18.490 [DEBUG] [Thread-12269] [transport.py] [_log()] userauth is OK
2025-12-25T13:20:18.490 [DEBUG] [Thread-12269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:20:18.490 [DEBUG] [Thread-12269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:20:18.490 [DEBUG] [Thread-12269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:20:18.490 [DEBUG] [Thread-12269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:20:18.523 [INFO] [Thread-12269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:20:18.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:20:19.140 [DEBUG] [Thread-12269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:20:19.140 [DEBUG] [Thread-12269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:20:19.141 [DEBUG] [Thread-12269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:20:19.181 [DEBUG] [Thread-12269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:20:19.181 [DEBUG] [Thread-12269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:20:19.185 [DEBUG] [Thread-12269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:20:19.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:20:19.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:20:19.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:20:19.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:20:19.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:20:19.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:20:19.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:20:19.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:20:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:20:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.471937 -999.00  +25.80  30.02     20   +1.60 1 1 2 1 1   888    0 26.13 84.94 ----- 30.0 30.0 310.6 39.4 31.2 -25.9 30.7 -25.1 30.4 -22.7 31.1 -23.0
2025-12-25T13:20:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:20:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:20:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.471937
2025-12-25T13:20:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:20:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:20:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:20:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:20:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:20:19.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:19:28', tmtdew=28.83, humidity=14.89, cloud=0.0, wind=33.4, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:19:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:20:19.211 [DEBUG] [Thread-12269] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:20:19.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-25T13:20:19.304 [DEBUG] [Thread-12272] [transport.py] [_log()] starting thread (client mode): 0xb9591600
2025-12-25T13:20:19.304 [DEBUG] [Thread-12272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:20:19.319 [DEBUG] [Thread-12272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:20:19.319 [INFO] [Thread-12272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:20:19.327 [DEBUG] [Thread-12272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:20:19.327 [DEBUG] [Thread-12272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:20:19.327 [DEBUG] [Thread-12272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:20:19.327 [DEBUG] [Thread-12272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:19.327 [DEBUG] [Thread-12272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] client lang: <none>
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] server lang: <none>
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] kex follows: False
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:20:19.328 [DEBUG] [Thread-12272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:20:19.329 [DEBUG] [Thread-12272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:20:19.329 [DEBUG] [Thread-12272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:20:19.329 [DEBUG] [Thread-12272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:20:19.329 [DEBUG] [Thread-12272] [transport.py] [_log()] Compression: none
2025-12-25T13:20:19.329 [DEBUG] [Thread-12272] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:20:19.388 [DEBUG] [Thread-12272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:20:19.389 [DEBUG] [Thread-12272] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:20:19.389 [DEBUG] [Thread-12272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:20:19.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:20:19.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:20:19.450 [DEBUG] [Thread-12272] [transport.py] [_log()] userauth is OK
2025-12-25T13:20:19.450 [DEBUG] [Thread-12272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:20:19.450 [DEBUG] [Thread-12272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:20:19.450 [DEBUG] [Thread-12272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:20:19.450 [DEBUG] [Thread-12272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:20:19.471 [INFO] [Thread-12272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:20:19.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-25T13:20:19.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:20:20.288 [DEBUG] [Thread-12272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:20:20.288 [DEBUG] [Thread-12272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:20:20.336 [DEBUG] [Thread-12272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:20:20.337 [DEBUG] [Thread-12272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:20:20.345 [DEBUG] [Thread-12272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:20:20.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:20:20.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-25T13:20:20.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-25T13:20:20.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:20:20.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:20:20.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:20:20.380 [DEBUG] [Thread-12272] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:20:27.010 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:27.011 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:28.463 [DEBUG] [Thread-12274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:43.510 [DEBUG] [Thread-12275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:20:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:20:50.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:20:50.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-25T13:20:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 20, 32), 28.62, 14.89, 0.0, 25.3, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:20:51.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:20:32
2025-12-25T13:20:51.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:20:51.376 [DEBUG] [Thread-12276] [transport.py] [_log()] starting thread (client mode): 0xb957b8e0
2025-12-25T13:20:51.384 [DEBUG] [Thread-12276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:20:51.396 [DEBUG] [Thread-12276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:20:51.396 [INFO] [Thread-12276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] client lang: <none>
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] server lang: <none>
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] kex follows: False
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] Compression: none
2025-12-25T13:20:51.400 [DEBUG] [Thread-12276] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:20:51.416 [DEBUG] [Thread-12276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:20:51.417 [DEBUG] [Thread-12276] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:20:51.417 [DEBUG] [Thread-12276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:20:51.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:20:51.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:20:51.419 [DEBUG] [Thread-12276] [transport.py] [_log()] userauth is OK
2025-12-25T13:20:51.419 [DEBUG] [Thread-12276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:20:51.419 [DEBUG] [Thread-12276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:20:51.419 [DEBUG] [Thread-12276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:20:51.419 [DEBUG] [Thread-12276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:20:51.435 [INFO] [Thread-12276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:20:51.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:20:52.211 [DEBUG] [Thread-12276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:20:52.212 [DEBUG] [Thread-12276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:20:52.212 [DEBUG] [Thread-12276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:20:52.253 [DEBUG] [Thread-12276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:20:52.253 [DEBUG] [Thread-12276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:20:52.257 [DEBUG] [Thread-12276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:20:52.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:20:52.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:20:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:20:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:20:52.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:20:52.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:20:52.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:20:52.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:20:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:20:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.472284 -999.00  +25.40  25.06     21   +1.60 1 1 1 1 1   888    0 26.01 79.29 ----- 25.1 25.1 301.8 35.9 31.2 -25.9 30.6 -25.8 30.4 -22.7 31.1 -23.8
2025-12-25T13:20:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:20:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:20:52.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.472284
2025-12-25T13:20:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:20:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:20:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:20:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:20:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:20:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:20:32', tmtdew=28.62, humidity=14.89, cloud=0.0, wind=25.3, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:20:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:20:52.284 [DEBUG] [Thread-12276] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:20:52.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:20:52.377 [DEBUG] [Thread-12279] [transport.py] [_log()] starting thread (client mode): 0xb6b16500
2025-12-25T13:20:52.378 [DEBUG] [Thread-12279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:20:52.391 [DEBUG] [Thread-12279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:20:52.392 [INFO] [Thread-12279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:20:52.399 [DEBUG] [Thread-12279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:20:52.399 [DEBUG] [Thread-12279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] client lang: <none>
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] server lang: <none>
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] kex follows: False
2025-12-25T13:20:52.400 [DEBUG] [Thread-12279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:20:52.401 [DEBUG] [Thread-12279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:20:52.401 [DEBUG] [Thread-12279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:20:52.401 [DEBUG] [Thread-12279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:20:52.401 [DEBUG] [Thread-12279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:20:52.401 [DEBUG] [Thread-12279] [transport.py] [_log()] Compression: none
2025-12-25T13:20:52.401 [DEBUG] [Thread-12279] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:20:52.458 [DEBUG] [Thread-12279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:20:52.458 [DEBUG] [Thread-12279] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:20:52.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:20:52.459 [DEBUG] [Thread-12279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:20:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:20:52.514 [DEBUG] [Thread-12279] [transport.py] [_log()] userauth is OK
2025-12-25T13:20:52.514 [DEBUG] [Thread-12279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:20:52.514 [DEBUG] [Thread-12279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:20:52.514 [DEBUG] [Thread-12279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:20:52.515 [DEBUG] [Thread-12279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:20:52.534 [INFO] [Thread-12279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:20:52.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-25T13:20:52.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:20:53.368 [DEBUG] [Thread-12279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:20:53.368 [DEBUG] [Thread-12279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:20:53.416 [DEBUG] [Thread-12279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:20:53.416 [DEBUG] [Thread-12279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:20:53.426 [DEBUG] [Thread-12279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:20:53.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:20:53.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-25T13:20:53.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-25T13:20:53.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:20:53.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:20:53.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:20:53.463 [DEBUG] [Thread-12279] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:20:58.546 [DEBUG] [Thread-12281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:04.175 [DEBUG] [Thread-12282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:13.597 [DEBUG] [Thread-12283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:23.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:21:23.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:21:23.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-25T13:21:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 21, 4), 28.5, 14.97, 0.0, 23.56, 26.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:21:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:21:04
2025-12-25T13:21:24.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:21:24.460 [DEBUG] [Thread-12284] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-25T13:21:24.460 [DEBUG] [Thread-12284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:21:24.480 [DEBUG] [Thread-12284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:21:24.480 [INFO] [Thread-12284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:21:24.482 [DEBUG] [Thread-12284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:21:24.482 [DEBUG] [Thread-12284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] client lang: <none>
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] server lang: <none>
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] kex follows: False
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:21:24.483 [DEBUG] [Thread-12284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:21:24.484 [DEBUG] [Thread-12284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:21:24.484 [DEBUG] [Thread-12284] [transport.py] [_log()] Compression: none
2025-12-25T13:21:24.484 [DEBUG] [Thread-12284] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:21:24.503 [DEBUG] [Thread-12284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:21:24.504 [DEBUG] [Thread-12284] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:21:24.505 [DEBUG] [Thread-12284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:21:24.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:21:24.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:21:24.508 [DEBUG] [Thread-12284] [transport.py] [_log()] userauth is OK
2025-12-25T13:21:24.508 [DEBUG] [Thread-12284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:21:24.508 [DEBUG] [Thread-12284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:21:24.508 [DEBUG] [Thread-12284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:21:24.508 [DEBUG] [Thread-12284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:21:24.545 [INFO] [Thread-12284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:21:24.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:21:25.193 [DEBUG] [Thread-12284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:21:25.194 [DEBUG] [Thread-12284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:21:25.194 [DEBUG] [Thread-12284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:21:25.235 [DEBUG] [Thread-12284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:21:25.236 [DEBUG] [Thread-12284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:21:25.239 [DEBUG] [Thread-12284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:21:25.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:21:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:21:25.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:21:25.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:21:25.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:21:25.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:21:25.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:21:25.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:21:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:21:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.472631 -999.00  +25.10  19.52     21   +1.40 1 1 1 1 1   888    0 26.36 71.96 ----- 19.5 19.5 310.4 24.9 31.2 -25.7 30.7 -24.5 30.4 -23.4 31.1 -22.9
2025-12-25T13:21:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:21:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:21:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.472631
2025-12-25T13:21:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:21:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:21:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:21:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:21:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:21:25.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:21:04', tmtdew=28.5, humidity=14.97, cloud=0.0, wind=23.56, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:20:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:21:25.265 [DEBUG] [Thread-12284] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:21:25.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-25T13:21:25.358 [DEBUG] [Thread-12287] [transport.py] [_log()] starting thread (client mode): 0xb95b2380
2025-12-25T13:21:25.358 [DEBUG] [Thread-12287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:21:25.373 [DEBUG] [Thread-12287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:21:25.373 [INFO] [Thread-12287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:21:25.380 [DEBUG] [Thread-12287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:21:25.380 [DEBUG] [Thread-12287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] client lang: <none>
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] server lang: <none>
2025-12-25T13:21:25.381 [DEBUG] [Thread-12287] [transport.py] [_log()] kex follows: False
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] Compression: none
2025-12-25T13:21:25.382 [DEBUG] [Thread-12287] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:21:25.437 [DEBUG] [Thread-12287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:21:25.438 [DEBUG] [Thread-12287] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:21:25.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:21:25.440 [DEBUG] [Thread-12287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:21:25.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:21:25.493 [DEBUG] [Thread-12287] [transport.py] [_log()] userauth is OK
2025-12-25T13:21:25.493 [DEBUG] [Thread-12287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:21:25.493 [DEBUG] [Thread-12287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:21:25.494 [DEBUG] [Thread-12287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:21:25.494 [DEBUG] [Thread-12287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:21:25.518 [INFO] [Thread-12287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:21:25.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-25T13:21:25.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:21:26.319 [DEBUG] [Thread-12287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:21:26.319 [DEBUG] [Thread-12287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:21:26.367 [DEBUG] [Thread-12287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:21:26.367 [DEBUG] [Thread-12287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:21:26.377 [DEBUG] [Thread-12287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:21:26.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:21:26.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-25T13:21:26.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-25T13:21:26.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:21:26.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:21:26.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:21:26.417 [DEBUG] [Thread-12287] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:21:27.148 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:27.149 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:28.629 [DEBUG] [Thread-12289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:43.684 [DEBUG] [Thread-12290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:56.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:21:56.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:21:56.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:21:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 21, 36), 28.54, 15.12, 0.0, 30.37, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:21:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:21:36
2025-12-25T13:21:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:21:57.453 [DEBUG] [Thread-12291] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-25T13:21:57.453 [DEBUG] [Thread-12291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:21:57.474 [DEBUG] [Thread-12291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:21:57.474 [INFO] [Thread-12291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] client lang: <none>
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] server lang: <none>
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] kex follows: False
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] Compression: none
2025-12-25T13:21:57.477 [DEBUG] [Thread-12291] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:21:57.492 [DEBUG] [Thread-12291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:21:57.492 [DEBUG] [Thread-12291] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:21:57.492 [DEBUG] [Thread-12291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:21:57.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:21:57.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:21:57.493 [DEBUG] [Thread-12291] [transport.py] [_log()] userauth is OK
2025-12-25T13:21:57.493 [DEBUG] [Thread-12291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:21:57.493 [DEBUG] [Thread-12291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:21:57.493 [DEBUG] [Thread-12291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:21:57.493 [DEBUG] [Thread-12291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:21:57.509 [INFO] [Thread-12291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:21:57.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:21:58.241 [DEBUG] [Thread-12291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:21:58.241 [DEBUG] [Thread-12291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:21:58.242 [DEBUG] [Thread-12291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:21:58.282 [DEBUG] [Thread-12291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:21:58.282 [DEBUG] [Thread-12291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:21:58.285 [DEBUG] [Thread-12291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:21:58.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:21:58.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:21:58.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:21:58.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:21:58.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:21:58.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:21:58.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:21:58.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:21:58.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:21:58.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.473326 -999.00  +26.10  45.48     20   +1.60 1 1 2 1 1   888    0 25.40 56.21 ----- 45.5 45.5 306.4 57.8 31.4 -26.6 30.6 -27.1 30.7 -21.8 31.2 -24.9
2025-12-25T13:21:58.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:21:58.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:21:58.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.473326
2025-12-25T13:21:58.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:21:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:21:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:21:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:21:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:21:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:21:36', tmtdew=28.54, humidity=15.12, cloud=0.0, wind=30.37, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:21:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:21:58.311 [DEBUG] [Thread-12291] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:21:58.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-25T13:21:58.410 [DEBUG] [Thread-12294] [transport.py] [_log()] starting thread (client mode): 0xb9593070
2025-12-25T13:21:58.411 [DEBUG] [Thread-12294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:21:58.425 [DEBUG] [Thread-12294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:21:58.426 [INFO] [Thread-12294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:21:58.433 [DEBUG] [Thread-12294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:21:58.434 [DEBUG] [Thread-12294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] client lang: <none>
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] server lang: <none>
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] kex follows: False
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] Compression: none
2025-12-25T13:21:58.435 [DEBUG] [Thread-12294] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:21:58.493 [DEBUG] [Thread-12294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:21:58.493 [DEBUG] [Thread-12294] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:21:58.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:21:58.495 [DEBUG] [Thread-12294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:21:58.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:21:58.549 [DEBUG] [Thread-12294] [transport.py] [_log()] userauth is OK
2025-12-25T13:21:58.550 [DEBUG] [Thread-12294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:21:58.550 [DEBUG] [Thread-12294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:21:58.550 [DEBUG] [Thread-12294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:21:58.550 [DEBUG] [Thread-12294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:21:58.569 [INFO] [Thread-12294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:21: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-25T13:21:58.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:21:58.717 [DEBUG] [Thread-12296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:21:59.357 [DEBUG] [Thread-12294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:21:59.357 [DEBUG] [Thread-12294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:21:59.405 [DEBUG] [Thread-12294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:21:59.405 [DEBUG] [Thread-12294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:21:59.414 [DEBUG] [Thread-12294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:21:59.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:21:59.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-25T13:21:59.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-25T13:21:59.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:21:59.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:21:59.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:21:59.451 [DEBUG] [Thread-12294] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:22:04.228 [DEBUG] [Thread-12297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:22:13.779 [DEBUG] [Thread-12298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:22:27.288 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:22:27.290 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:22:28.817 [DEBUG] [Thread-12299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:22:29.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:22:29.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:22:29.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-25T13:22:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 22, 8), 28.57, 15.08, 0.0, 37.32, 26.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:22:30.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:22:08
2025-12-25T13:22:30.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:22:30.450 [DEBUG] [Thread-12300] [transport.py] [_log()] starting thread (client mode): 0xb95b3340
2025-12-25T13:22:30.450 [DEBUG] [Thread-12300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:22:30.470 [DEBUG] [Thread-12300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:22:30.470 [INFO] [Thread-12300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:22:30.473 [DEBUG] [Thread-12300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:22:30.473 [DEBUG] [Thread-12300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:22:30.473 [DEBUG] [Thread-12300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:22:30.473 [DEBUG] [Thread-12300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] client lang: <none>
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] server lang: <none>
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] kex follows: False
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] Compression: none
2025-12-25T13:22:30.474 [DEBUG] [Thread-12300] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:22:30.489 [DEBUG] [Thread-12300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:22:30.490 [DEBUG] [Thread-12300] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:22:30.490 [DEBUG] [Thread-12300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:22:30.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:22:30.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:22:30.491 [DEBUG] [Thread-12300] [transport.py] [_log()] userauth is OK
2025-12-25T13:22:30.491 [DEBUG] [Thread-12300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:22:30.491 [DEBUG] [Thread-12300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:22:30.491 [DEBUG] [Thread-12300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:22:30.491 [DEBUG] [Thread-12300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:22:30.509 [INFO] [Thread-12300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:22:30.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:22:31.116 [DEBUG] [Thread-12300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:22:31.116 [DEBUG] [Thread-12300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:22:31.116 [DEBUG] [Thread-12300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:22:31.156 [DEBUG] [Thread-12300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:22:31.156 [DEBUG] [Thread-12300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:22:31.159 [DEBUG] [Thread-12300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:22:31.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:22:31.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:22:31.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:22:31.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:22:31.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:22:31.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:22:31.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.473673 -999.00  +25.50  22.01     20   +1.50 1 1 1 1 1   888    0 25.54 48.29 ----- 22.0 22.0 317.6 38.5 31.3 -24.9 30.7 -24.6 30.5 -25.2 31.2 -22.7
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.473673
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:22:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:22:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:22:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:22:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:22:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:22:08', tmtdew=28.57, humidity=15.08, cloud=0.0, wind=37.32, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:22:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:22:31.178 [DEBUG] [Thread-12300] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:22:31.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-25T13:22:31.262 [DEBUG] [Thread-12303] [transport.py] [_log()] starting thread (client mode): 0xb6b2a680
2025-12-25T13:22:31.262 [DEBUG] [Thread-12303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:22:31.276 [DEBUG] [Thread-12303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:22:31.276 [INFO] [Thread-12303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] client lang: <none>
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] server lang: <none>
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] kex follows: False
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] Compression: none
2025-12-25T13:22:31.284 [DEBUG] [Thread-12303] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:22:31.339 [DEBUG] [Thread-12303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:22:31.340 [DEBUG] [Thread-12303] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:22:31.340 [DEBUG] [Thread-12303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:22:31.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:22:31.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:22:31.397 [DEBUG] [Thread-12303] [transport.py] [_log()] userauth is OK
2025-12-25T13:22:31.397 [DEBUG] [Thread-12303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:22:31.397 [DEBUG] [Thread-12303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:22:31.397 [DEBUG] [Thread-12303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:22:31.397 [DEBUG] [Thread-12303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:22:31.414 [INFO] [Thread-12303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:22:31.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-25T13:22:31.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:22:32.247 [DEBUG] [Thread-12303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:22:32.247 [DEBUG] [Thread-12303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:22:32.295 [DEBUG] [Thread-12303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:22:32.295 [DEBUG] [Thread-12303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:22:32.304 [DEBUG] [Thread-12303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:22:32.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:22:32.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-25T13:22:32.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-25T13:22:32.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:22:32.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:22:32.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:22:32.335 [DEBUG] [Thread-12303] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:22:43.855 [DEBUG] [Thread-12305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:22:58.905 [DEBUG] [Thread-12306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:23:02.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:23:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:23:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 22, 40), 28.84, 14.95, 0.0, 29.73, 26.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:23:03.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:22:40
2025-12-25T13:23:03.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:23:03.305 [DEBUG] [Thread-12307] [transport.py] [_log()] starting thread (client mode): 0xb9591f90
2025-12-25T13:23:03.305 [DEBUG] [Thread-12307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:23:03.327 [DEBUG] [Thread-12307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:23:03.327 [INFO] [Thread-12307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] client lang: <none>
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] server lang: <none>
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] kex follows: False
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] Compression: none
2025-12-25T13:23:03.330 [DEBUG] [Thread-12307] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:23:03.347 [DEBUG] [Thread-12307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:23:03.348 [DEBUG] [Thread-12307] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:23:03.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:23:03.349 [DEBUG] [Thread-12307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:23:03.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:23:03.351 [DEBUG] [Thread-12307] [transport.py] [_log()] userauth is OK
2025-12-25T13:23:03.352 [DEBUG] [Thread-12307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:23:03.352 [DEBUG] [Thread-12307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:23:03.352 [DEBUG] [Thread-12307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:23:03.352 [DEBUG] [Thread-12307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:23:03.370 [INFO] [Thread-12307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:23:03.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:23:04.132 [DEBUG] [Thread-12307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:23:04.133 [DEBUG] [Thread-12307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:23:04.133 [DEBUG] [Thread-12307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:23:04.174 [DEBUG] [Thread-12307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:23:04.174 [DEBUG] [Thread-12307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:23:04.178 [DEBUG] [Thread-12307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:23:04.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:23:04.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:23:04.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:23:04.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:23:04.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:23:04.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:23:04.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:23:04.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:23:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:23:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.474020 -999.00  +25.90  37.43     20   +1.20 1 1 2 1 1   888    0 25.02 35.92 ----- 37.4 37.4 300.0 43.3 31.3 -25.6 30.7 -25.9 30.5 -25.2 31.2 -23.5
2025-12-25T13:23:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:23:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:23:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.474020
2025-12-25T13:23:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:23:04.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:23:04.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:23:04.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:23:04.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:23:04.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:22:40', tmtdew=28.84, humidity=14.95, cloud=0.0, wind=29.73, temperature=26.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:22:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:23:04.204 [DEBUG] [Thread-12307] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:23:04.277 [DEBUG] [Thread-12310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:04.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-25T13:23:04.297 [DEBUG] [Thread-12311] [transport.py] [_log()] starting thread (client mode): 0xb9579b10
2025-12-25T13:23:04.297 [DEBUG] [Thread-12311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:23:04.312 [DEBUG] [Thread-12311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:23:04.312 [INFO] [Thread-12311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] client lang: <none>
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] server lang: <none>
2025-12-25T13:23:04.320 [DEBUG] [Thread-12311] [transport.py] [_log()] kex follows: False
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] Compression: none
2025-12-25T13:23:04.321 [DEBUG] [Thread-12311] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:23:04.377 [DEBUG] [Thread-12311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:23:04.377 [DEBUG] [Thread-12311] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:23:04.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:23:04.378 [DEBUG] [Thread-12311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:23:04.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:23:04.433 [DEBUG] [Thread-12311] [transport.py] [_log()] userauth is OK
2025-12-25T13:23:04.433 [DEBUG] [Thread-12311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:23:04.433 [DEBUG] [Thread-12311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:23:04.433 [DEBUG] [Thread-12311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:23:04.433 [DEBUG] [Thread-12311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:23:04.452 [INFO] [Thread-12311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:23:04.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:23:04.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:23:05.288 [DEBUG] [Thread-12311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:23:05.288 [DEBUG] [Thread-12311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:23:05.336 [DEBUG] [Thread-12311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:23:05.336 [DEBUG] [Thread-12311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:23:05.345 [DEBUG] [Thread-12311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:23:05.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:23:05.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:23:05.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:23:05.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:23:05.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:23:05.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:23:05.382 [DEBUG] [Thread-12311] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:23:13.934 [DEBUG] [Thread-12313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:27.431 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:27.432 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:28.976 [DEBUG] [Thread-12314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:35.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:23:35.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:23:35.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-25T13:23:36.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 23, 12), 28.89, 14.92, 0.0, 27.74, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:23:36.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:23:12
2025-12-25T13:23:36.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:23:36.388 [DEBUG] [Thread-12315] [transport.py] [_log()] starting thread (client mode): 0xb95b0be0
2025-12-25T13:23:36.388 [DEBUG] [Thread-12315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:23:36.408 [DEBUG] [Thread-12315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:23:36.408 [INFO] [Thread-12315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] client lang: <none>
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] server lang: <none>
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] kex follows: False
2025-12-25T13:23:36.411 [DEBUG] [Thread-12315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:23:36.412 [DEBUG] [Thread-12315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:23:36.412 [DEBUG] [Thread-12315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:23:36.412 [DEBUG] [Thread-12315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:23:36.412 [DEBUG] [Thread-12315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:23:36.412 [DEBUG] [Thread-12315] [transport.py] [_log()] Compression: none
2025-12-25T13:23:36.412 [DEBUG] [Thread-12315] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:23:36.431 [DEBUG] [Thread-12315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:23:36.431 [DEBUG] [Thread-12315] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:23:36.432 [DEBUG] [Thread-12315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:23:36.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:23:36.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:23:36.434 [DEBUG] [Thread-12315] [transport.py] [_log()] userauth is OK
2025-12-25T13:23:36.434 [DEBUG] [Thread-12315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:23:36.434 [DEBUG] [Thread-12315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:23:36.434 [DEBUG] [Thread-12315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:23:36.434 [DEBUG] [Thread-12315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:23:36.455 [INFO] [Thread-12315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:23:36.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:23:37.125 [DEBUG] [Thread-12315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:23:37.126 [DEBUG] [Thread-12315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:23:37.126 [DEBUG] [Thread-12315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:23:37.167 [DEBUG] [Thread-12315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:23:37.167 [DEBUG] [Thread-12315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:23:37.171 [DEBUG] [Thread-12315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:23:37.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:23:37.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:23:37.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:23:37.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:23:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:23:37.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:23:37.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:23:37.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:23:37.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:23:37.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.474367 -999.00  +25.30  22.32     20   +1.10 1 1 1 1 1   888    0 25.08 28.94 ----- 22.3 22.3 309.8 37.8 31.3 -24.5 30.8 -24.6 30.4 -23.0 31.2 -23.0
2025-12-25T13:23:37.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:23:37.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:23:37.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.474367
2025-12-25T13:23:37.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:23:37.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:23:37.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:23:37.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:23:37.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:23:37.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:23:12', tmtdew=28.89, humidity=14.92, cloud=0.0, wind=27.74, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:23:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:23:37.198 [DEBUG] [Thread-12315] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:23:37.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-25T13:23:37.292 [DEBUG] [Thread-12318] [transport.py] [_log()] starting thread (client mode): 0xb95924d0
2025-12-25T13:23:37.292 [DEBUG] [Thread-12318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:23:37.307 [DEBUG] [Thread-12318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:23:37.307 [INFO] [Thread-12318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:23:37.314 [DEBUG] [Thread-12318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] client lang: <none>
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] server lang: <none>
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] kex follows: False
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] Compression: none
2025-12-25T13:23:37.315 [DEBUG] [Thread-12318] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:23:37.372 [DEBUG] [Thread-12318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:23:37.372 [DEBUG] [Thread-12318] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:23:37.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:23:37.374 [DEBUG] [Thread-12318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:23:37.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:23:37.429 [DEBUG] [Thread-12318] [transport.py] [_log()] userauth is OK
2025-12-25T13:23:37.429 [DEBUG] [Thread-12318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:23:37.429 [DEBUG] [Thread-12318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:23:37.429 [DEBUG] [Thread-12318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:23:37.429 [DEBUG] [Thread-12318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:23:37.448 [INFO] [Thread-12318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:23:37.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-25T13:23:37.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:23:38.263 [DEBUG] [Thread-12318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:23:38.263 [DEBUG] [Thread-12318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:23:38.311 [DEBUG] [Thread-12318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:23:38.311 [DEBUG] [Thread-12318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:23:38.320 [DEBUG] [Thread-12318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:23:38.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:23:38.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:23:38.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-25T13:23:38.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:23:38.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:23:38.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:23:38.357 [DEBUG] [Thread-12318] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:23:44.015 [DEBUG] [Thread-12320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:23:59.059 [DEBUG] [Thread-12321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:04.332 [DEBUG] [Thread-12322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:08.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:24:08.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:24:08.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:24:09.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 23, 44), 29.11, 14.32, 0.0, 34.04, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:24:09.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:23:44
2025-12-25T13:24:09.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:24:09.346 [DEBUG] [Thread-12323] [transport.py] [_log()] starting thread (client mode): 0xb95b1db0
2025-12-25T13:24:09.346 [DEBUG] [Thread-12323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:24:09.370 [DEBUG] [Thread-12323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:24:09.370 [INFO] [Thread-12323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:24:09.374 [DEBUG] [Thread-12323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:24:09.374 [DEBUG] [Thread-12323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:24:09.374 [DEBUG] [Thread-12323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:24:09.374 [DEBUG] [Thread-12323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] client lang: <none>
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] server lang: <none>
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] kex follows: False
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] Compression: none
2025-12-25T13:24:09.375 [DEBUG] [Thread-12323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:24:09.391 [DEBUG] [Thread-12323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:24:09.392 [DEBUG] [Thread-12323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:24:09.393 [DEBUG] [Thread-12323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:24:09.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:24:09.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:24:09.395 [DEBUG] [Thread-12323] [transport.py] [_log()] userauth is OK
2025-12-25T13:24:09.395 [DEBUG] [Thread-12323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:24:09.395 [DEBUG] [Thread-12323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:24:09.395 [DEBUG] [Thread-12323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:24:09.396 [DEBUG] [Thread-12323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:24:09.431 [INFO] [Thread-12323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:24:09.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:24:10.212 [DEBUG] [Thread-12323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:24:10.212 [DEBUG] [Thread-12323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:24:10.213 [DEBUG] [Thread-12323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:24:10.253 [DEBUG] [Thread-12323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:24:10.254 [DEBUG] [Thread-12323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:24:10.256 [DEBUG] [Thread-12323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:24:10.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:24:10.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:24:10.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:24:10.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:24:10.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:24:10.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:24:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:24:10.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:24:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:24:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.474715 -999.00  +25.70  32.06     20   +1.20 1 1 2 1 1   888    0 24.63 23.90 ----- 32.1 32.1 286.0 38.4 31.2 -25.8 30.8 -24.7 30.5 -24.9 31.2 -23.0
2025-12-25T13:24:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:24:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:24:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.474715
2025-12-25T13:24:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:24:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:24:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:24:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:24:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:24:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:23:44', tmtdew=29.11, humidity=14.32, cloud=0.0, wind=34.04, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:23:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:24:10.278 [DEBUG] [Thread-12323] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:24:10.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-25T13:24:10.372 [DEBUG] [Thread-12326] [transport.py] [_log()] starting thread (client mode): 0xb9593b80
2025-12-25T13:24:10.372 [DEBUG] [Thread-12326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:24:10.387 [DEBUG] [Thread-12326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:24:10.387 [INFO] [Thread-12326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] client lang: <none>
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] server lang: <none>
2025-12-25T13:24:10.394 [DEBUG] [Thread-12326] [transport.py] [_log()] kex follows: False
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] Compression: none
2025-12-25T13:24:10.395 [DEBUG] [Thread-12326] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:24:10.452 [DEBUG] [Thread-12326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:24:10.453 [DEBUG] [Thread-12326] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:24:10.454 [DEBUG] [Thread-12326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:24:10.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:24:10.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:24:10.513 [DEBUG] [Thread-12326] [transport.py] [_log()] userauth is OK
2025-12-25T13:24:10.513 [DEBUG] [Thread-12326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:24:10.513 [DEBUG] [Thread-12326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:24:10.513 [DEBUG] [Thread-12326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:24:10.513 [DEBUG] [Thread-12326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:24:10.531 [INFO] [Thread-12326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:24: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-25T13:24:10.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:24:11.344 [DEBUG] [Thread-12326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:24:11.345 [DEBUG] [Thread-12326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:24:11.392 [DEBUG] [Thread-12326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:24:11.393 [DEBUG] [Thread-12326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:24:11.402 [DEBUG] [Thread-12326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:24:11.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:24:11.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-25T13:24:11.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-25T13:24:11.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:24:11.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:24:11.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:24:11.439 [DEBUG] [Thread-12326] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:24:14.093 [DEBUG] [Thread-12328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:27.571 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:27.572 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:29.138 [DEBUG] [Thread-12329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:41.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:24:41.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:24:41.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-25T13:24:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 24, 16), 29.51, 13.99, 0.0, 39.7, 26.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:24:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:24:16
2025-12-25T13:24:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:24:42.452 [DEBUG] [Thread-12330] [transport.py] [_log()] starting thread (client mode): 0xb95b1db0
2025-12-25T13:24:42.452 [DEBUG] [Thread-12330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:24:42.467 [DEBUG] [Thread-12330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:24:42.467 [INFO] [Thread-12330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:24:42.470 [DEBUG] [Thread-12330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:24:42.470 [DEBUG] [Thread-12330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:24:42.470 [DEBUG] [Thread-12330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:24:42.470 [DEBUG] [Thread-12330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] client lang: <none>
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] server lang: <none>
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] kex follows: False
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] Compression: none
2025-12-25T13:24:42.471 [DEBUG] [Thread-12330] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:24:42.490 [DEBUG] [Thread-12330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:24:42.490 [DEBUG] [Thread-12330] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:24:42.491 [DEBUG] [Thread-12330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:24:42.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:24:42.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:24:42.493 [DEBUG] [Thread-12330] [transport.py] [_log()] userauth is OK
2025-12-25T13:24:42.493 [DEBUG] [Thread-12330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:24:42.493 [DEBUG] [Thread-12330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:24:42.493 [DEBUG] [Thread-12330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:24:42.493 [DEBUG] [Thread-12330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:24:42.517 [INFO] [Thread-12330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:24:42.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:24:43.144 [DEBUG] [Thread-12330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:24:43.144 [DEBUG] [Thread-12330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:24:43.145 [DEBUG] [Thread-12330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:24:43.186 [DEBUG] [Thread-12330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:24:43.186 [DEBUG] [Thread-12330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:24:43.190 [DEBUG] [Thread-12330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:24:43.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:24:43.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:24:43.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:24:43.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:24:43.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:24:43.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:24:43.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:24:43.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:24:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:24:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.475062 -999.00  +26.10  29.58     20   +1.50 1 1 1 1 1   888    0 24.55 17.05 ----- 29.6 29.6 294.4 47.8 31.2 -25.4 30.8 -24.9 30.5 -21.8 31.2 -23.4
2025-12-25T13:24:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:24:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:24:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.475062
2025-12-25T13:24:43.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:24:43.214 [DEBUG] [Thread-12330] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:24:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:24:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:24:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:24:43.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:24:43.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:24:16', tmtdew=29.51, humidity=13.99, cloud=0.0, wind=39.7, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:24:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:24:43.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-25T13:24:43.306 [DEBUG] [Thread-12333] [transport.py] [_log()] starting thread (client mode): 0xb95b1a80
2025-12-25T13:24:43.306 [DEBUG] [Thread-12333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:24:43.320 [DEBUG] [Thread-12333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:24:43.321 [INFO] [Thread-12333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:24:43.328 [DEBUG] [Thread-12333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:24:43.328 [DEBUG] [Thread-12333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] client lang: <none>
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] server lang: <none>
2025-12-25T13:24:43.329 [DEBUG] [Thread-12333] [transport.py] [_log()] kex follows: False
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] Compression: none
2025-12-25T13:24:43.330 [DEBUG] [Thread-12333] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:24:43.389 [DEBUG] [Thread-12333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:24:43.390 [DEBUG] [Thread-12333] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:24:43.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:24:43.392 [DEBUG] [Thread-12333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:24:43.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:24:43.448 [DEBUG] [Thread-12333] [transport.py] [_log()] userauth is OK
2025-12-25T13:24:43.449 [DEBUG] [Thread-12333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:24:43.449 [DEBUG] [Thread-12333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:24:43.450 [DEBUG] [Thread-12333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:24:43.450 [DEBUG] [Thread-12333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:24:43.468 [INFO] [Thread-12333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:24:43.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-25T13:24:43.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:24:44.167 [DEBUG] [Thread-12335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:24:44.277 [DEBUG] [Thread-12333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:24:44.277 [DEBUG] [Thread-12333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:24:44.325 [DEBUG] [Thread-12333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:24:44.325 [DEBUG] [Thread-12333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:24:44.335 [DEBUG] [Thread-12333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:24:44.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:24:44.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-25T13:24:44.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:24:44.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:24:44.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:24:44.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:24:44.371 [DEBUG] [Thread-12333] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:24:59.225 [DEBUG] [Thread-12336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:04.389 [DEBUG] [Thread-12337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:14.256 [DEBUG] [Thread-12338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:14.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:25:14.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:25:14.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-25T13:25:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 24, 48), 30.06, 13.55, 0.0, 31.95, 26.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:25:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:24:48
2025-12-25T13:25:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:25:15.372 [DEBUG] [Thread-12339] [transport.py] [_log()] starting thread (client mode): 0xb95d6380
2025-12-25T13:25:15.372 [DEBUG] [Thread-12339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:25:15.394 [DEBUG] [Thread-12339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:25:15.394 [INFO] [Thread-12339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:25:15.398 [DEBUG] [Thread-12339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:25:15.398 [DEBUG] [Thread-12339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:25:15.398 [DEBUG] [Thread-12339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:25:15.398 [DEBUG] [Thread-12339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] client lang: <none>
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] server lang: <none>
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] kex follows: False
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:25:15.399 [DEBUG] [Thread-12339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:25:15.400 [DEBUG] [Thread-12339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:25:15.400 [DEBUG] [Thread-12339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:25:15.400 [DEBUG] [Thread-12339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:25:15.400 [DEBUG] [Thread-12339] [transport.py] [_log()] Compression: none
2025-12-25T13:25:15.400 [DEBUG] [Thread-12339] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:25:15.419 [DEBUG] [Thread-12339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:25:15.420 [DEBUG] [Thread-12339] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:25:15.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:25:15.421 [DEBUG] [Thread-12339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:25:15.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:25:15.423 [DEBUG] [Thread-12339] [transport.py] [_log()] userauth is OK
2025-12-25T13:25:15.423 [DEBUG] [Thread-12339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:25:15.423 [DEBUG] [Thread-12339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:25:15.423 [DEBUG] [Thread-12339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:25:15.424 [DEBUG] [Thread-12339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:25:15.443 [INFO] [Thread-12339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:25:15.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:25:16.644 [DEBUG] [Thread-12339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:25:16.644 [DEBUG] [Thread-12339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:25:16.645 [DEBUG] [Thread-12339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:25:16.685 [DEBUG] [Thread-12339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:25:16.685 [DEBUG] [Thread-12339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:25:16.689 [DEBUG] [Thread-12339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:25:16.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:25:16.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:25:16.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:25:16.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:25:16.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:25:16.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:25:16.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:25:16.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:25:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:25:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.475409 -999.00  +26.00  29.73     20   +1.70 1 1 1 1 1   888    0 25.25 13.91 ----- 29.7 29.7 302.0 45.4 31.2 -23.7 30.8 -24.0 30.4 -22.5 31.1 -22.4
2025-12-25T13:25:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:25:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:25:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.475409
2025-12-25T13:25:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:25:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:25:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:25:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:25:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:25:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:24:48', tmtdew=30.06, humidity=13.55, cloud=0.0, wind=31.95, temperature=26.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:24:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:25:16.711 [DEBUG] [Thread-12339] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:25:16.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:25:16.806 [DEBUG] [Thread-12342] [transport.py] [_log()] starting thread (client mode): 0xb95d5a20
2025-12-25T13:25:16.806 [DEBUG] [Thread-12342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:25:16.821 [DEBUG] [Thread-12342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:25:16.821 [INFO] [Thread-12342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] client lang: <none>
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] server lang: <none>
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] kex follows: False
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:25:16.829 [DEBUG] [Thread-12342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:25:16.830 [DEBUG] [Thread-12342] [transport.py] [_log()] Compression: none
2025-12-25T13:25:16.830 [DEBUG] [Thread-12342] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:25:16.888 [DEBUG] [Thread-12342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:25:16.889 [DEBUG] [Thread-12342] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:25:16.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:25:16.890 [DEBUG] [Thread-12342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:25:16.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:25:16.944 [DEBUG] [Thread-12342] [transport.py] [_log()] userauth is OK
2025-12-25T13:25:16.945 [DEBUG] [Thread-12342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:25:16.945 [DEBUG] [Thread-12342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:25:16.945 [DEBUG] [Thread-12342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:25:16.945 [DEBUG] [Thread-12342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:25:16.964 [INFO] [Thread-12342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:25:16.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:25:16.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:25:17.771 [DEBUG] [Thread-12342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:25:17.771 [DEBUG] [Thread-12342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:25:17.819 [DEBUG] [Thread-12342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:25:17.819 [DEBUG] [Thread-12342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:25:17.828 [DEBUG] [Thread-12342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:25:17.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:25:17.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-25T13:25:17.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-25T13:25:17.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:25:17.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:25:17.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:25:17.864 [DEBUG] [Thread-12342] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:25:27.720 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:27.721 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:29.292 [DEBUG] [Thread-12344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:44.345 [DEBUG] [Thread-12345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:25:47.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:25:47.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:25:47.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-25T13:25:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 25, 20), 29.77, 13.8, 0.0, 30.47, 26.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:25:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:25:20
2025-12-25T13:25:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:25:48.906 [DEBUG] [Thread-12346] [transport.py] [_log()] starting thread (client mode): 0xb6b2b460
2025-12-25T13:25:48.906 [DEBUG] [Thread-12346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:25:48.926 [DEBUG] [Thread-12346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:25:48.926 [INFO] [Thread-12346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] client lang: <none>
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] server lang: <none>
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] kex follows: False
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] Compression: none
2025-12-25T13:25:48.929 [DEBUG] [Thread-12346] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:25:48.945 [DEBUG] [Thread-12346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:25:48.946 [DEBUG] [Thread-12346] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:25:48.946 [DEBUG] [Thread-12346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:25:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:25:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:25:48.947 [DEBUG] [Thread-12346] [transport.py] [_log()] userauth is OK
2025-12-25T13:25:48.947 [DEBUG] [Thread-12346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:25:48.947 [DEBUG] [Thread-12346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:25:48.947 [DEBUG] [Thread-12346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:25:48.947 [DEBUG] [Thread-12346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:25:48.957 [INFO] [Thread-12346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:25:48.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:25:49.610 [DEBUG] [Thread-12346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:25:49.610 [DEBUG] [Thread-12346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:25:49.610 [DEBUG] [Thread-12346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:25:49.651 [DEBUG] [Thread-12346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:25:49.651 [DEBUG] [Thread-12346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:25:49.654 [DEBUG] [Thread-12346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:25:49.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:25:49.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:25:49.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:25:49.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:25:49.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:25:49.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:25:49.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:25:49.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.475756 -999.00  +26.50  22.29     19   +1.60 1 2 1 1 1   888    0 24.10 6.78 ----- 22.3 22.3 300.1 34.8 31.4 -24.1 30.9 -24.5 30.6 -21.3 31.4 -22.7
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.475756
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T13:25:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:25:20', tmtdew=29.77, humidity=13.8, cloud=0.0, wind=30.47, temperature=26.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:25:05.318', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:25:49.675 [DEBUG] [Thread-12346] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:25: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-25T13:25:49.758 [DEBUG] [Thread-12349] [transport.py] [_log()] starting thread (client mode): 0xb6b2be20
2025-12-25T13:25:49.759 [DEBUG] [Thread-12349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:25:49.773 [DEBUG] [Thread-12349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:25:49.773 [INFO] [Thread-12349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] client lang: <none>
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] server lang: <none>
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] kex follows: False
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] Compression: none
2025-12-25T13:25:49.781 [DEBUG] [Thread-12349] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:25:49.841 [DEBUG] [Thread-12349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:25:49.841 [DEBUG] [Thread-12349] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:25:49.841 [DEBUG] [Thread-12349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:25:49.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:25:49.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:25:49.900 [DEBUG] [Thread-12349] [transport.py] [_log()] userauth is OK
2025-12-25T13:25:49.900 [DEBUG] [Thread-12349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:25:49.900 [DEBUG] [Thread-12349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:25:49.900 [DEBUG] [Thread-12349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:25:49.900 [DEBUG] [Thread-12349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:25:49.914 [INFO] [Thread-12349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:25:49.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-25T13:25:49.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:25:50.760 [DEBUG] [Thread-12349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:25:50.760 [DEBUG] [Thread-12349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:25:50.808 [DEBUG] [Thread-12349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:25:50.808 [DEBUG] [Thread-12349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:25:50.816 [DEBUG] [Thread-12349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:25:50.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:25:50.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-25T13:25:50.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-25T13:25:50.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:25:50.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:25:50.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:25:50.848 [DEBUG] [Thread-12349] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:25:59.377 [DEBUG] [Thread-12351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:04.445 [DEBUG] [Thread-12352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:14.428 [DEBUG] [Thread-12353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:26:20.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:26:20.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-25T13:26:21.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 25, 52), 29.98, 13.75, 0.0, 32.91, 26.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:26:21.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:25:52
2025-12-25T13:26:21.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:26:21.858 [DEBUG] [Thread-12354] [transport.py] [_log()] starting thread (client mode): 0xb95b32b0
2025-12-25T13:26:21.858 [DEBUG] [Thread-12354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:26:21.879 [DEBUG] [Thread-12354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:26:21.879 [INFO] [Thread-12354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] client lang: <none>
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] server lang: <none>
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] kex follows: False
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:26:21.882 [DEBUG] [Thread-12354] [transport.py] [_log()] Compression: none
2025-12-25T13:26:21.883 [DEBUG] [Thread-12354] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:26:21.901 [DEBUG] [Thread-12354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:26:21.901 [DEBUG] [Thread-12354] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:26:21.902 [DEBUG] [Thread-12354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:26:21.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:26:21.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:26:21.905 [DEBUG] [Thread-12354] [transport.py] [_log()] userauth is OK
2025-12-25T13:26:21.905 [DEBUG] [Thread-12354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:26:21.905 [DEBUG] [Thread-12354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:26:21.905 [DEBUG] [Thread-12354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:26:21.905 [DEBUG] [Thread-12354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:26:21.930 [INFO] [Thread-12354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:26:21.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:26:22.692 [DEBUG] [Thread-12354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:26:22.692 [DEBUG] [Thread-12354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:26:22.693 [DEBUG] [Thread-12354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:26:22.733 [DEBUG] [Thread-12354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:26:22.733 [DEBUG] [Thread-12354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:26:22.735 [DEBUG] [Thread-12354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:26:22.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:26:22.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:26:22.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:26:22.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:26:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:26:22.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:26:22.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:26:22.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:26:22.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:26:22.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.476104 -999.00  +26.50  24.67     19   +1.40 1 1 1 1 1   888    0 24.36 2.20 ----- 24.7 24.7 297.2 32.6 31.4 -25.1 30.9 -25.2 30.6 -23.4 31.3 -23.7
2025-12-25T13:26:22.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:26:22.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:26:22.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.476104
2025-12-25T13:26:22.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:26:22.762 [DEBUG] [Thread-12354] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:26:22.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:26:22.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:26:22.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:26:22.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:26:22.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:25:52', tmtdew=29.98, humidity=13.75, cloud=0.0, wind=32.91, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:25:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:26:22.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-25T13:26:22.858 [DEBUG] [Thread-12357] [transport.py] [_log()] starting thread (client mode): 0xb6b2a920
2025-12-25T13:26:22.859 [DEBUG] [Thread-12357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:26:22.877 [DEBUG] [Thread-12357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:26:22.878 [INFO] [Thread-12357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:26:22.885 [DEBUG] [Thread-12357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:26:22.885 [DEBUG] [Thread-12357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] client lang: <none>
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] server lang: <none>
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] kex follows: False
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:26:22.886 [DEBUG] [Thread-12357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:26:22.887 [DEBUG] [Thread-12357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:26:22.887 [DEBUG] [Thread-12357] [transport.py] [_log()] Compression: none
2025-12-25T13:26:22.887 [DEBUG] [Thread-12357] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:26:22.948 [DEBUG] [Thread-12357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:26:22.949 [DEBUG] [Thread-12357] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:26:22.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:26:22.950 [DEBUG] [Thread-12357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:26:22.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:26:23.004 [DEBUG] [Thread-12357] [transport.py] [_log()] userauth is OK
2025-12-25T13:26:23.005 [DEBUG] [Thread-12357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:26:23.005 [DEBUG] [Thread-12357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:26:23.005 [DEBUG] [Thread-12357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:26:23.005 [DEBUG] [Thread-12357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:26:23.023 [INFO] [Thread-12357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:26:23.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-25T13:26:23.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:26:23.870 [DEBUG] [Thread-12357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:26:23.870 [DEBUG] [Thread-12357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:26:23.919 [DEBUG] [Thread-12357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:26:23.919 [DEBUG] [Thread-12357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:26:23.928 [DEBUG] [Thread-12357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:26:23.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:26:23.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-25T13:26:23.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-25T13:26:23.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:26:23.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:26:23.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:26:23.965 [DEBUG] [Thread-12357] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:26:27.860 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:27.861 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:29.458 [DEBUG] [Thread-12359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:44.504 [DEBUG] [Thread-12360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:26:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:26:53.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:26:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:26:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 26, 24), 29.92, 13.79, 0.0, 31.88, 26.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:26:54.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:26:24
2025-12-25T13:26:54.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:26:54.952 [DEBUG] [Thread-12361] [transport.py] [_log()] starting thread (client mode): 0xb95b3f70
2025-12-25T13:26:54.952 [DEBUG] [Thread-12361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:26:54.973 [DEBUG] [Thread-12361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:26:54.973 [INFO] [Thread-12361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:26:54.975 [DEBUG] [Thread-12361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] client lang: <none>
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] server lang: <none>
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] kex follows: False
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] Compression: none
2025-12-25T13:26:54.976 [DEBUG] [Thread-12361] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:26:54.996 [DEBUG] [Thread-12361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:26:54.997 [DEBUG] [Thread-12361] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:26:54.997 [DEBUG] [Thread-12361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:26:54.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:26:54.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:26:54.999 [DEBUG] [Thread-12361] [transport.py] [_log()] userauth is OK
2025-12-25T13:26:54.999 [DEBUG] [Thread-12361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:26:55.000 [DEBUG] [Thread-12361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:26:55.000 [DEBUG] [Thread-12361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:26:55.000 [DEBUG] [Thread-12361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:26:55.025 [INFO] [Thread-12361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:26:55.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:26:55.667 [DEBUG] [Thread-12361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:26:55.667 [DEBUG] [Thread-12361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:26:55.667 [DEBUG] [Thread-12361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:26:55.708 [DEBUG] [Thread-12361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:26:55.708 [DEBUG] [Thread-12361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:26:55.711 [DEBUG] [Thread-12361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:26:55.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:26:55.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:26:55.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:26:55.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:26:55.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:26:55.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:26:55.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:26:55.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:26:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:26:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.476451 -999.00  +25.90  30.15     20   +1.20 1 1 2 1 1   888    0 24.41 -0.22 ----- 30.1 30.1 267.8 32.4 31.1 -26.3 30.7 -27.3 30.2 -23.1 31.1 -26.2
2025-12-25T13:26:55.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:26:55.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:26:55.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.476451
2025-12-25T13:26:55.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:26:55.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:26:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:26:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:26:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:26:55.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:26:24', tmtdew=29.92, humidity=13.79, cloud=0.0, wind=31.88, temperature=26.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:26:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:26:55.733 [DEBUG] [Thread-12361] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:26:55.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:26:55.835 [DEBUG] [Thread-12364] [transport.py] [_log()] starting thread (client mode): 0xb95b3fd0
2025-12-25T13:26:55.835 [DEBUG] [Thread-12364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:26:55.855 [DEBUG] [Thread-12364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:26:55.856 [INFO] [Thread-12364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:26:55.863 [DEBUG] [Thread-12364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:26:55.863 [DEBUG] [Thread-12364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:26:55.863 [DEBUG] [Thread-12364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:26:55.863 [DEBUG] [Thread-12364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] client lang: <none>
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] server lang: <none>
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] kex follows: False
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] Compression: none
2025-12-25T13:26:55.864 [DEBUG] [Thread-12364] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:26:55.925 [DEBUG] [Thread-12364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:26:55.926 [DEBUG] [Thread-12364] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:26:55.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:26:55.936 [DEBUG] [Thread-12364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:26:55.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:26:55.985 [DEBUG] [Thread-12364] [transport.py] [_log()] userauth is OK
2025-12-25T13:26:55.985 [DEBUG] [Thread-12364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:26:55.985 [DEBUG] [Thread-12364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:26:55.985 [DEBUG] [Thread-12364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:26:55.985 [DEBUG] [Thread-12364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:26:56.005 [INFO] [Thread-12364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:26:56.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:26:56.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:26:56.849 [DEBUG] [Thread-12364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:26:56.849 [DEBUG] [Thread-12364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:26:56.896 [DEBUG] [Thread-12364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:26:56.897 [DEBUG] [Thread-12364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:26:56.905 [DEBUG] [Thread-12364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:26:56.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:26:56.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:26:56.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-25T13:26:56.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:26:56.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:26:56.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:26:56.942 [DEBUG] [Thread-12364] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:26:59.540 [DEBUG] [Thread-12366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:04.489 [DEBUG] [Thread-12367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:14.576 [DEBUG] [Thread-12368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:26.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:27:26.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:27:26.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-25T13:27:27.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 26, 57), 29.1, 14.8, 0.0, 28.81, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:27:27.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:26:57
2025-12-25T13:27:27.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:27:27.935 [DEBUG] [Thread-12369] [transport.py] [_log()] starting thread (client mode): 0xb957a260
2025-12-25T13:27:27.935 [DEBUG] [Thread-12369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:27:27.955 [DEBUG] [Thread-12369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:27:27.955 [INFO] [Thread-12369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] client lang: <none>
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] server lang: <none>
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] kex follows: False
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:27:27.958 [DEBUG] [Thread-12369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:27:27.959 [DEBUG] [Thread-12369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:27:27.959 [DEBUG] [Thread-12369] [transport.py] [_log()] Compression: none
2025-12-25T13:27:27.959 [DEBUG] [Thread-12369] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:27:27.976 [DEBUG] [Thread-12369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:27:27.976 [DEBUG] [Thread-12369] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:27:27.977 [DEBUG] [Thread-12369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:27:27.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:27:27.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:27:27.979 [DEBUG] [Thread-12369] [transport.py] [_log()] userauth is OK
2025-12-25T13:27:27.979 [DEBUG] [Thread-12369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:27:27.979 [DEBUG] [Thread-12369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:27:27.979 [DEBUG] [Thread-12369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:27:27.979 [DEBUG] [Thread-12369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:27:27.994 [INFO] [Thread-12369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:27:27.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:27:28.004 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:28.005 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:28.748 [DEBUG] [Thread-12369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:27:28.748 [DEBUG] [Thread-12369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:27:28.748 [DEBUG] [Thread-12369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:27:28.789 [DEBUG] [Thread-12369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:27:28.789 [DEBUG] [Thread-12369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:27:28.792 [DEBUG] [Thread-12369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:27:28.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:27:28.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:27:28.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:27:28.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:27:28.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:27:28.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:27:28.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:27:28.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:27:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:27:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.477145 -999.00  +25.80  25.72     20   +1.70 1 1 1 1 1   888    0 24.32 -18.34 ----- 25.7 25.7 294.6 34.7 31.1 -26.9 30.7 -25.0 30.2 -22.8 31.1 -22.9
2025-12-25T13:27:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:27:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:27:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.477145
2025-12-25T13:27:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:27:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:27:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:27:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:27:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:27:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:26:57', tmtdew=29.1, humidity=14.8, cloud=0.0, wind=28.81, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:27:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:27:28.814 [DEBUG] [Thread-12369] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:27:28.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-25T13:27:28.907 [DEBUG] [Thread-12372] [transport.py] [_log()] starting thread (client mode): 0xb9545f90
2025-12-25T13:27:28.907 [DEBUG] [Thread-12372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:27:28.923 [DEBUG] [Thread-12372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:27:28.923 [INFO] [Thread-12372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:27:28.931 [DEBUG] [Thread-12372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:27:28.931 [DEBUG] [Thread-12372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:27:28.931 [DEBUG] [Thread-12372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:27:28.931 [DEBUG] [Thread-12372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:27:28.931 [DEBUG] [Thread-12372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] client lang: <none>
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] server lang: <none>
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] kex follows: False
2025-12-25T13:27:28.932 [DEBUG] [Thread-12372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:27:28.933 [DEBUG] [Thread-12372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:27:28.933 [DEBUG] [Thread-12372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:27:28.933 [DEBUG] [Thread-12372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:27:28.933 [DEBUG] [Thread-12372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:27:28.933 [DEBUG] [Thread-12372] [transport.py] [_log()] Compression: none
2025-12-25T13:27:28.933 [DEBUG] [Thread-12372] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:27:28.988 [DEBUG] [Thread-12372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:27:28.989 [DEBUG] [Thread-12372] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:27:28.989 [DEBUG] [Thread-12372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:27:28.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:27:28.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:27:29.044 [DEBUG] [Thread-12372] [transport.py] [_log()] userauth is OK
2025-12-25T13:27:29.045 [DEBUG] [Thread-12372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:27:29.045 [DEBUG] [Thread-12372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:27:29.045 [DEBUG] [Thread-12372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:27:29.045 [DEBUG] [Thread-12372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:27:29.064 [INFO] [Thread-12372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:27:29.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:27:29.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:27:29.610 [DEBUG] [Thread-12374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:29.945 [DEBUG] [Thread-12372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:27:29.945 [DEBUG] [Thread-12372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:27:29.993 [DEBUG] [Thread-12372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:27:29.993 [DEBUG] [Thread-12372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:27:30.001 [DEBUG] [Thread-12372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:27:30.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:27:30.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-25T13:27:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:27:30.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:27:30.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:27:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:27:30.032 [DEBUG] [Thread-12372] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:27:44.664 [DEBUG] [Thread-12375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:27:59.698 [DEBUG] [Thread-12376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:00.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:28:00.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:28:00.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:28:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 27, 29), 29.31, 14.65, 0.0, 33.77, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:28:00.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:27:29
2025-12-25T13:28:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:28:01.041 [DEBUG] [Thread-12377] [transport.py] [_log()] starting thread (client mode): 0xb95b06d0
2025-12-25T13:28:01.041 [DEBUG] [Thread-12377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:28:01.063 [DEBUG] [Thread-12377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:28:01.063 [INFO] [Thread-12377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] client lang: <none>
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] server lang: <none>
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] kex follows: False
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:28:01.066 [DEBUG] [Thread-12377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:28:01.067 [DEBUG] [Thread-12377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:28:01.067 [DEBUG] [Thread-12377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:28:01.067 [DEBUG] [Thread-12377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:28:01.067 [DEBUG] [Thread-12377] [transport.py] [_log()] Compression: none
2025-12-25T13:28:01.067 [DEBUG] [Thread-12377] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:28:01.083 [DEBUG] [Thread-12377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:28:01.083 [DEBUG] [Thread-12377] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:28:01.083 [DEBUG] [Thread-12377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:28:01.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:28:01.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:28:01.085 [DEBUG] [Thread-12377] [transport.py] [_log()] userauth is OK
2025-12-25T13:28:01.085 [DEBUG] [Thread-12377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:28:01.085 [DEBUG] [Thread-12377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:28:01.085 [DEBUG] [Thread-12377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:28:01.085 [DEBUG] [Thread-12377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:28:01.103 [INFO] [Thread-12377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:28:01.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:28:01.687 [DEBUG] [Thread-12377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:28:01.687 [DEBUG] [Thread-12377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:28:01.688 [DEBUG] [Thread-12377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:28:01.728 [DEBUG] [Thread-12377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:28:01.728 [DEBUG] [Thread-12377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:28:01.729 [DEBUG] [Thread-12377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:28:01.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:28:01.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:28:01.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:28:01.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:28:01.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:28:01.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.477492 -999.00  +26.20  23.95     20   +1.60 1 1 1 1 1   888    0 23.24 -24.87 ----- 23.9 23.9 302.0 37.5 31.1 -24.9 30.7 -23.8 30.1 -24.9 31.1 -22.0
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.477492
2025-12-25T13:28:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:28:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:28:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:28:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:28:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:28:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:27:29', tmtdew=29.31, humidity=14.65, cloud=0.0, wind=33.77, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:27:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:28:01.748 [DEBUG] [Thread-12377] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:28:01.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-25T13:28:01.832 [DEBUG] [Thread-12380] [transport.py] [_log()] starting thread (client mode): 0xb95b16f0
2025-12-25T13:28:01.832 [DEBUG] [Thread-12380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:28:01.847 [DEBUG] [Thread-12380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:28:01.847 [INFO] [Thread-12380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] client lang: <none>
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] server lang: <none>
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] kex follows: False
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:28:01.855 [DEBUG] [Thread-12380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:28:01.856 [DEBUG] [Thread-12380] [transport.py] [_log()] Compression: none
2025-12-25T13:28:01.856 [DEBUG] [Thread-12380] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:28:01.914 [DEBUG] [Thread-12380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:28:01.915 [DEBUG] [Thread-12380] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:28:01.915 [DEBUG] [Thread-12380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:28:01.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:28:01.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:28:01.971 [DEBUG] [Thread-12380] [transport.py] [_log()] userauth is OK
2025-12-25T13:28:01.971 [DEBUG] [Thread-12380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:28:01.971 [DEBUG] [Thread-12380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:28:01.971 [DEBUG] [Thread-12380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:28:01.971 [DEBUG] [Thread-12380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:28:01.989 [INFO] [Thread-12380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:28:01.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-25T13:28:01.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:28:02.828 [DEBUG] [Thread-12380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:28:02.829 [DEBUG] [Thread-12380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:28:02.876 [DEBUG] [Thread-12380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:28:02.876 [DEBUG] [Thread-12380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:28:02.885 [DEBUG] [Thread-12380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:28:02.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:28:02.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:28:02.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:28:02.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:28:02.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:28:02.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:28:02.916 [DEBUG] [Thread-12380] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:28:04.543 [DEBUG] [Thread-12382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:14.733 [DEBUG] [Thread-12383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:28.142 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:28.143 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:29.782 [DEBUG] [Thread-12384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:32.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:28:32.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:28:32.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-25T13:28:33.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 28, 1), 29.55, 14.22, 0.0, 35.53, 27.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:28:33.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:28:01
2025-12-25T13:28:33.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:28:33.915 [DEBUG] [Thread-12385] [transport.py] [_log()] starting thread (client mode): 0xb95f3b50
2025-12-25T13:28:33.915 [DEBUG] [Thread-12385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:28:33.935 [DEBUG] [Thread-12385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:28:33.935 [INFO] [Thread-12385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] client lang: <none>
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] server lang: <none>
2025-12-25T13:28:33.938 [DEBUG] [Thread-12385] [transport.py] [_log()] kex follows: False
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] Compression: none
2025-12-25T13:28:33.939 [DEBUG] [Thread-12385] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:28:33.955 [DEBUG] [Thread-12385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:28:33.955 [DEBUG] [Thread-12385] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:28:33.955 [DEBUG] [Thread-12385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:28:33.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:28:33.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:28:33.956 [DEBUG] [Thread-12385] [transport.py] [_log()] userauth is OK
2025-12-25T13:28:33.956 [DEBUG] [Thread-12385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:28:33.956 [DEBUG] [Thread-12385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:28:33.956 [DEBUG] [Thread-12385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:28:33.956 [DEBUG] [Thread-12385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:28:33.984 [INFO] [Thread-12385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:28:33.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:28:34.737 [DEBUG] [Thread-12385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:28:34.738 [DEBUG] [Thread-12385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:28:34.738 [DEBUG] [Thread-12385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:28:34.779 [DEBUG] [Thread-12385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:28:34.779 [DEBUG] [Thread-12385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:28:34.781 [DEBUG] [Thread-12385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:28:34.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:28:34.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:28:34.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:28:34.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:28:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:28:34.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:28:34.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.477840 -999.00  +26.20  30.00     19   +1.20 1 1 2 1 1   888    0 23.67 -26.38 ----- 30.0 30.0 304.8 39.2 31.2 -24.6 30.7 -24.6 30.4 -23.2 31.1 -22.9
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.477840
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:28:34.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:28:01', tmtdew=29.55, humidity=14.22, cloud=0.0, wind=35.53, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:28:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:28:34.799 [DEBUG] [Thread-12385] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:28:34.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-25T13:28:34.882 [DEBUG] [Thread-12388] [transport.py] [_log()] starting thread (client mode): 0xb95f05e0
2025-12-25T13:28:34.883 [DEBUG] [Thread-12388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:28:34.897 [DEBUG] [Thread-12388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:28:34.897 [INFO] [Thread-12388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:28:34.904 [DEBUG] [Thread-12388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] client lang: <none>
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] server lang: <none>
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] kex follows: False
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] Compression: none
2025-12-25T13:28:34.905 [DEBUG] [Thread-12388] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:28:34.962 [DEBUG] [Thread-12388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:28:34.962 [DEBUG] [Thread-12388] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:28:34.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:28:34.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:28:34.963 [DEBUG] [Thread-12388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:28:35.023 [DEBUG] [Thread-12388] [transport.py] [_log()] userauth is OK
2025-12-25T13:28:35.023 [DEBUG] [Thread-12388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:28:35.023 [DEBUG] [Thread-12388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:28:35.023 [DEBUG] [Thread-12388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:28:35.023 [DEBUG] [Thread-12388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:28:35.041 [INFO] [Thread-12388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:28:35.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:28:35.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:28:35.825 [DEBUG] [Thread-12388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:28:35.825 [DEBUG] [Thread-12388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:28:35.873 [DEBUG] [Thread-12388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:28:35.873 [DEBUG] [Thread-12388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:28:35.882 [DEBUG] [Thread-12388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:28:35.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:28:35.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:28:35.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-25T13:28:35.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:28:35.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:28:35.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:28:35.918 [DEBUG] [Thread-12388] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:28:44.817 [DEBUG] [Thread-12390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:28:59.878 [DEBUG] [Thread-12391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:29:04.588 [DEBUG] [Thread-12392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:29:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:29:05.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:29:05.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-25T13:29:06.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 28, 33), 29.0, 14.65, 0.0, 32.59, 26.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:29:06.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:28:33
2025-12-25T13:29:06.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:29:07.005 [DEBUG] [Thread-12393] [transport.py] [_log()] starting thread (client mode): 0xb95b2d10
2025-12-25T13:29:07.005 [DEBUG] [Thread-12393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:29:07.025 [DEBUG] [Thread-12393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:29:07.025 [INFO] [Thread-12393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:29:07.028 [DEBUG] [Thread-12393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:29:07.028 [DEBUG] [Thread-12393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] client lang: <none>
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] server lang: <none>
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] kex follows: False
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] Compression: none
2025-12-25T13:29:07.029 [DEBUG] [Thread-12393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:29:07.043 [DEBUG] [Thread-12393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:29:07.043 [DEBUG] [Thread-12393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:29:07.043 [DEBUG] [Thread-12393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:29:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:29:07.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:29:07.044 [DEBUG] [Thread-12393] [transport.py] [_log()] userauth is OK
2025-12-25T13:29:07.044 [DEBUG] [Thread-12393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:29:07.044 [DEBUG] [Thread-12393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:29:07.044 [DEBUG] [Thread-12393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:29:07.044 [DEBUG] [Thread-12393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:29:07.061 [INFO] [Thread-12393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:29:07.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:29:07.703 [DEBUG] [Thread-12393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:29:07.703 [DEBUG] [Thread-12393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:29:07.704 [DEBUG] [Thread-12393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:29:07.745 [DEBUG] [Thread-12393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:29:07.745 [DEBUG] [Thread-12393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:29:07.747 [DEBUG] [Thread-12393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:29:07.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:29:07.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:29:07.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:29:07.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:29:07.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:29:07.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:29:07.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:29:07.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:29:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:29:07.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.478187 -999.00  +26.50  23.19     19   +1.20 1 1 1 1 1   888    0 23.76 -18.39 ----- 23.2 23.2 298.2 31.7 31.3 -24.9 30.8 -23.9 30.6 -22.5 31.3 -22.3
2025-12-25T13:29:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:29:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:29:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.478187
2025-12-25T13:29:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:29:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:29:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:29:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:29:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:29:07.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:28:33', tmtdew=29.0, humidity=14.65, cloud=0.0, wind=32.59, temperature=26.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:28:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:29:07.774 [DEBUG] [Thread-12393] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:29:07.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-25T13:29:07.867 [DEBUG] [Thread-12396] [transport.py] [_log()] starting thread (client mode): 0xb6b2ac80
2025-12-25T13:29:07.867 [DEBUG] [Thread-12396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:29:07.881 [DEBUG] [Thread-12396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:29:07.881 [INFO] [Thread-12396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] client lang: <none>
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] server lang: <none>
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] kex follows: False
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:29:07.889 [DEBUG] [Thread-12396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:29:07.890 [DEBUG] [Thread-12396] [transport.py] [_log()] Compression: none
2025-12-25T13:29:07.890 [DEBUG] [Thread-12396] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:29:07.948 [DEBUG] [Thread-12396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:29:07.948 [DEBUG] [Thread-12396] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:29:07.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:29:07.949 [DEBUG] [Thread-12396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:29:07.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:29:08.003 [DEBUG] [Thread-12396] [transport.py] [_log()] userauth is OK
2025-12-25T13:29:08.004 [DEBUG] [Thread-12396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:29:08.004 [DEBUG] [Thread-12396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:29:08.004 [DEBUG] [Thread-12396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:29:08.004 [DEBUG] [Thread-12396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:29:08.024 [INFO] [Thread-12396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:29:08.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-25T13:29:08.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:29:08.893 [DEBUG] [Thread-12396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:29:08.894 [DEBUG] [Thread-12396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:29:08.941 [DEBUG] [Thread-12396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:29:08.941 [DEBUG] [Thread-12396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:29:08.950 [DEBUG] [Thread-12396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:29:08.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:29:08.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-25T13:29:08.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-25T13:29:08.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:29:08.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:29:08.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:29:08.987 [DEBUG] [Thread-12396] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:29:14.910 [DEBUG] [Thread-12398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:29:28.283 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:29:28.285 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:29:29.961 [DEBUG] [Thread-12399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:29:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:29:38.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:29:38.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-25T13:29:39.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 29, 5), 28.57, 15.03, 0.0, 30.1, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:29:39.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:29:05
2025-12-25T13:29:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:29:40.034 [DEBUG] [Thread-12400] [transport.py] [_log()] starting thread (client mode): 0xb95b3a90
2025-12-25T13:29:40.034 [DEBUG] [Thread-12400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:29:40.054 [DEBUG] [Thread-12400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:29:40.054 [INFO] [Thread-12400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] client lang: <none>
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] server lang: <none>
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] kex follows: False
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] Compression: none
2025-12-25T13:29:40.056 [DEBUG] [Thread-12400] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:29:40.063 [DEBUG] [Thread-12400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:29:40.063 [DEBUG] [Thread-12400] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:29:40.063 [DEBUG] [Thread-12400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:29:40.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:29:40.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:29:40.064 [DEBUG] [Thread-12400] [transport.py] [_log()] userauth is OK
2025-12-25T13:29:40.064 [DEBUG] [Thread-12400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:29:40.064 [DEBUG] [Thread-12400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:29:40.064 [DEBUG] [Thread-12400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:29:40.064 [DEBUG] [Thread-12400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:29:40.073 [INFO] [Thread-12400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:29:40.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:29:40.790 [DEBUG] [Thread-12400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:29:40.790 [DEBUG] [Thread-12400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:29:40.790 [DEBUG] [Thread-12400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:29:40.831 [DEBUG] [Thread-12400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:29:40.832 [DEBUG] [Thread-12400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:29:40.833 [DEBUG] [Thread-12400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:29:40.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:29:40.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:29:40.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:29:40.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:29:40.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:29:40.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:29:40.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.478534 -999.00  +26.30  26.15     20   +1.90 1 1 1 1 1   888    0 24.44 -7.18 ----- 26.1 26.1 302.4 32.6 31.4 -25.4 30.9 -25.4 30.7 -24.7 31.4 -23.0
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.478534
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:29:40.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:29:05', tmtdew=28.57, humidity=15.03, cloud=0.0, wind=30.1, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:29:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:29:40.853 [DEBUG] [Thread-12400] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:29:40.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:29:40.936 [DEBUG] [Thread-12403] [transport.py] [_log()] starting thread (client mode): 0xb95b0b80
2025-12-25T13:29:40.937 [DEBUG] [Thread-12403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:29:40.951 [DEBUG] [Thread-12403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:29:40.951 [INFO] [Thread-12403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] client lang: <none>
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] server lang: <none>
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] kex follows: False
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] Compression: none
2025-12-25T13:29:40.959 [DEBUG] [Thread-12403] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:29:41.014 [DEBUG] [Thread-12403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:29:41.014 [DEBUG] [Thread-12403] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:29:41.014 [DEBUG] [Thread-12403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:29:41.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:29:41.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:29:41.071 [DEBUG] [Thread-12403] [transport.py] [_log()] userauth is OK
2025-12-25T13:29:41.071 [DEBUG] [Thread-12403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:29:41.071 [DEBUG] [Thread-12403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:29:41.071 [DEBUG] [Thread-12403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:29:41.071 [DEBUG] [Thread-12403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:29:41.085 [INFO] [Thread-12403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:29:41.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-25T13:29:41.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:29:41.916 [DEBUG] [Thread-12403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:29:41.916 [DEBUG] [Thread-12403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:29:41.964 [DEBUG] [Thread-12403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:29:41.964 [DEBUG] [Thread-12403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:29:41.972 [DEBUG] [Thread-12403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:29:41.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:29:41.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-25T13:29:41.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-25T13:29:41.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:29:41.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:29:41.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:29:42.004 [DEBUG] [Thread-12403] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:29:44.994 [DEBUG] [Thread-12405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:00.036 [DEBUG] [Thread-12406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:04.640 [DEBUG] [Thread-12407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:12.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:30:12.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:30:12.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-25T13:30:12.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 30, 9), 28.61, 15.08, 0.0, 21.84, 26.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:30:12.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:30:09
2025-12-25T13:30:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:30:12.993 [DEBUG] [Thread-12408] [transport.py] [_log()] starting thread (client mode): 0xb95f2950
2025-12-25T13:30:12.994 [DEBUG] [Thread-12408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:30:13.014 [DEBUG] [Thread-12408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:30:13.014 [INFO] [Thread-12408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:30:13.017 [DEBUG] [Thread-12408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:30:13.017 [DEBUG] [Thread-12408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:30:13.017 [DEBUG] [Thread-12408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] client lang: <none>
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] server lang: <none>
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] kex follows: False
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] Compression: none
2025-12-25T13:30:13.018 [DEBUG] [Thread-12408] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:30:13.034 [DEBUG] [Thread-12408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:30:13.035 [DEBUG] [Thread-12408] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:30:13.035 [DEBUG] [Thread-12408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:30:13.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:30:13.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:30:13.036 [DEBUG] [Thread-12408] [transport.py] [_log()] userauth is OK
2025-12-25T13:30:13.036 [DEBUG] [Thread-12408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:30:13.036 [DEBUG] [Thread-12408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:30:13.036 [DEBUG] [Thread-12408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:30:13.036 [DEBUG] [Thread-12408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:30:13.052 [INFO] [Thread-12408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:30:13.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:30:13.805 [DEBUG] [Thread-12408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:30:13.805 [DEBUG] [Thread-12408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:30:13.806 [DEBUG] [Thread-12408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:30:13.846 [DEBUG] [Thread-12408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:30:13.846 [DEBUG] [Thread-12408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:30:13.850 [DEBUG] [Thread-12408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:30:13.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:30:13.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:30:13.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:30:13.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:30:13.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:30:13.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:30:13.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:30:13.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:30:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:30:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.478881 -999.00  +26.40  27.26     20   +2.00 1 1 1 1 1   888    0 24.24 4.98 ----- 27.3 27.3 314.2 33.6 31.6 -24.4 31.0 -24.3 30.9 -22.4 31.6 -22.7
2025-12-25T13:30:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:30:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:30:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.478881
2025-12-25T13:30:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:30:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:30:13.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:30:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:30:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:30:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:30:09', tmtdew=28.61, humidity=15.08, cloud=0.0, wind=21.84, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:29:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:30:13.878 [DEBUG] [Thread-12408] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:30:13.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-25T13:30:13.974 [DEBUG] [Thread-12411] [transport.py] [_log()] starting thread (client mode): 0xb9593d30
2025-12-25T13:30:13.975 [DEBUG] [Thread-12411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:30:13.989 [DEBUG] [Thread-12411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:30:13.990 [INFO] [Thread-12411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] client lang: <none>
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] server lang: <none>
2025-12-25T13:30:13.997 [DEBUG] [Thread-12411] [transport.py] [_log()] kex follows: False
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] Compression: none
2025-12-25T13:30:13.998 [DEBUG] [Thread-12411] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:30:14.056 [DEBUG] [Thread-12411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:30:14.056 [DEBUG] [Thread-12411] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:30:14.057 [DEBUG] [Thread-12411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:30:14.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:30:14.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:30:14.113 [DEBUG] [Thread-12411] [transport.py] [_log()] userauth is OK
2025-12-25T13:30:14.113 [DEBUG] [Thread-12411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:30:14.113 [DEBUG] [Thread-12411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:30:14.113 [DEBUG] [Thread-12411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:30:14.113 [DEBUG] [Thread-12411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:30:14.134 [INFO] [Thread-12411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:30:14.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-25T13:30:14.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:30:14.926 [DEBUG] [Thread-12411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:30:14.926 [DEBUG] [Thread-12411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:30:14.974 [DEBUG] [Thread-12411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:30:14.975 [DEBUG] [Thread-12411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:30:14.984 [DEBUG] [Thread-12411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:30:14.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:30:14.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')
2025-12-25T13:30:15.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-25T13:30:15.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:30:15.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:30:15.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:30:15.020 [DEBUG] [Thread-12411] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:30:15.073 [DEBUG] [Thread-12413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:28.423 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:28.424 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:30.121 [DEBUG] [Thread-12414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:45.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:30:45.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:30:45.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-25T13:30:45.161 [DEBUG] [Thread-12415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:30:45.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 30, 41), 28.63, 14.88, 0.0, 21.24, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:30:45.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:30:41
2025-12-25T13:30:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:30:46.032 [DEBUG] [Thread-12416] [transport.py] [_log()] starting thread (client mode): 0xb9590b80
2025-12-25T13:30:46.032 [DEBUG] [Thread-12416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:30:46.054 [DEBUG] [Thread-12416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:30:46.054 [INFO] [Thread-12416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] client lang: <none>
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] server lang: <none>
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] kex follows: False
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:30:46.057 [DEBUG] [Thread-12416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:30:46.058 [DEBUG] [Thread-12416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:30:46.058 [DEBUG] [Thread-12416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:30:46.058 [DEBUG] [Thread-12416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:30:46.058 [DEBUG] [Thread-12416] [transport.py] [_log()] Compression: none
2025-12-25T13:30:46.058 [DEBUG] [Thread-12416] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:30:46.075 [DEBUG] [Thread-12416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:30:46.076 [DEBUG] [Thread-12416] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:30:46.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:30:46.077 [DEBUG] [Thread-12416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:30:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:30:46.079 [DEBUG] [Thread-12416] [transport.py] [_log()] userauth is OK
2025-12-25T13:30:46.080 [DEBUG] [Thread-12416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:30:46.080 [DEBUG] [Thread-12416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:30:46.080 [DEBUG] [Thread-12416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:30:46.080 [DEBUG] [Thread-12416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:30:46.103 [INFO] [Thread-12416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:30:46.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:30:46.852 [DEBUG] [Thread-12416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:30:46.852 [DEBUG] [Thread-12416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:30:46.852 [DEBUG] [Thread-12416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:30:46.893 [DEBUG] [Thread-12416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:30:46.893 [DEBUG] [Thread-12416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:30:46.897 [DEBUG] [Thread-12416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:30:46.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:30:46.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:30:46.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:30:46.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:30:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:30:46.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:30:46.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:30:46.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:30:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:30:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.479228 -999.00  +26.50  24.31     20   +1.70 1 1 1 1 1   888    0 24.46 17.98 ----- 24.3 24.3 305.6 32.4 31.6 -26.1 31.0 -25.6 30.9 -23.5 31.6 -24.3
2025-12-25T13:30:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:30:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:30:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.479228
2025-12-25T13:30:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:30:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:30:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:30:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:30:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:30:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:30:41', tmtdew=28.63, humidity=14.88, cloud=0.0, wind=21.24, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:30:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:30:46.925 [DEBUG] [Thread-12416] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:30:47.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-25T13:30:47.020 [DEBUG] [Thread-12419] [transport.py] [_log()] starting thread (client mode): 0xb95f26e0
2025-12-25T13:30:47.020 [DEBUG] [Thread-12419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:30:47.034 [DEBUG] [Thread-12419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:30:47.034 [INFO] [Thread-12419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:30:47.042 [DEBUG] [Thread-12419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:30:47.042 [DEBUG] [Thread-12419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:30:47.042 [DEBUG] [Thread-12419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] client lang: <none>
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] server lang: <none>
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] kex follows: False
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:30:47.043 [DEBUG] [Thread-12419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:30:47.044 [DEBUG] [Thread-12419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:30:47.044 [DEBUG] [Thread-12419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:30:47.044 [DEBUG] [Thread-12419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:30:47.044 [DEBUG] [Thread-12419] [transport.py] [_log()] Compression: none
2025-12-25T13:30:47.044 [DEBUG] [Thread-12419] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:30:47.106 [DEBUG] [Thread-12419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:30:47.107 [DEBUG] [Thread-12419] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:30:47.108 [DEBUG] [Thread-12419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:30:47.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:30:47.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:30:47.161 [DEBUG] [Thread-12419] [transport.py] [_log()] userauth is OK
2025-12-25T13:30:47.161 [DEBUG] [Thread-12419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:30:47.162 [DEBUG] [Thread-12419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:30:47.162 [DEBUG] [Thread-12419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:30:47.162 [DEBUG] [Thread-12419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:30:47.180 [INFO] [Thread-12419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:30:47.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-25T13:30:47.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:30:48.030 [DEBUG] [Thread-12419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:30:48.030 [DEBUG] [Thread-12419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:30:48.078 [DEBUG] [Thread-12419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:30:48.079 [DEBUG] [Thread-12419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:30:48.087 [DEBUG] [Thread-12419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:30:48.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:30:48.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:30:48.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:30:48.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:30:48.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:30:48.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:30:48.121 [DEBUG] [Thread-12419] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:31:00.192 [DEBUG] [Thread-12421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:04.673 [DEBUG] [Thread-12422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:15.233 [DEBUG] [Thread-12423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:31:18.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:31:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:31:18.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 31, 13), 29.24, 14.32, 0.0, 28.0, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:31:18.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:31:13
2025-12-25T13:31:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:31:19.118 [DEBUG] [Thread-12424] [transport.py] [_log()] starting thread (client mode): 0xb9559810
2025-12-25T13:31:19.118 [DEBUG] [Thread-12424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:31:19.138 [DEBUG] [Thread-12424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:31:19.139 [INFO] [Thread-12424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:19.141 [DEBUG] [Thread-12424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] client lang: <none>
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] server lang: <none>
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] kex follows: False
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] Compression: none
2025-12-25T13:31:19.142 [DEBUG] [Thread-12424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:31:19.159 [DEBUG] [Thread-12424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:31:19.160 [DEBUG] [Thread-12424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:31:19.160 [DEBUG] [Thread-12424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:31:19.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:31:19.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:31:19.162 [DEBUG] [Thread-12424] [transport.py] [_log()] userauth is OK
2025-12-25T13:31:19.163 [DEBUG] [Thread-12424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:31:19.163 [DEBUG] [Thread-12424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:31:19.163 [DEBUG] [Thread-12424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:31:19.163 [DEBUG] [Thread-12424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:31:19.188 [INFO] [Thread-12424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:31:19.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:31:19.826 [DEBUG] [Thread-12424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:31:19.827 [DEBUG] [Thread-12424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:31:19.827 [DEBUG] [Thread-12424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:31:19.868 [DEBUG] [Thread-12424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:31:19.868 [DEBUG] [Thread-12424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:31:19.872 [DEBUG] [Thread-12424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:31:19.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:31:19.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:31:19.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:31:19.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:31:19.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:31:19.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:31:19.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:31:19.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:31:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:31:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.479576 -999.00  +26.80  31.09     19   +1.80 1 1 2 1 1   888    0 25.18 29.10 ----- 31.1 31.1 312.4 34.1 31.7 -26.0 31.1 -25.4 31.0 -22.7 31.7 -23.0
2025-12-25T13:31:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:31:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:31:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.479576
2025-12-25T13:31:19.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:31:19.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:31:19.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:31:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:31:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:31:19.899 [DEBUG] [Thread-12424] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:31:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:31:13', tmtdew=29.24, humidity=14.32, cloud=0.0, wind=28.0, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:30:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:31:19.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:31:19.995 [DEBUG] [Thread-12427] [transport.py] [_log()] starting thread (client mode): 0xb9559d50
2025-12-25T13:31:19.995 [DEBUG] [Thread-12427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:31:20.009 [DEBUG] [Thread-12427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:31:20.010 [INFO] [Thread-12427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:31:20.017 [DEBUG] [Thread-12427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:31:20.017 [DEBUG] [Thread-12427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:31:20.018 [DEBUG] [Thread-12427] [transport.py] [_log()] client lang: <none>
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] server lang: <none>
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] kex follows: False
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:31:20.019 [DEBUG] [Thread-12427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:31:20.020 [DEBUG] [Thread-12427] [transport.py] [_log()] Compression: none
2025-12-25T13:31:20.020 [DEBUG] [Thread-12427] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:31:20.074 [DEBUG] [Thread-12427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:31:20.075 [DEBUG] [Thread-12427] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:31:20.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:31:20.077 [DEBUG] [Thread-12427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:31:20.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:31:20.130 [DEBUG] [Thread-12427] [transport.py] [_log()] userauth is OK
2025-12-25T13:31:20.131 [DEBUG] [Thread-12427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:31:20.131 [DEBUG] [Thread-12427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:31:20.131 [DEBUG] [Thread-12427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:31:20.131 [DEBUG] [Thread-12427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:31:20.149 [INFO] [Thread-12427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:31:20.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-25T13:31:20.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:31:20.972 [DEBUG] [Thread-12427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:31:20.973 [DEBUG] [Thread-12427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:31:21.021 [DEBUG] [Thread-12427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:31:21.021 [DEBUG] [Thread-12427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:31:21.030 [DEBUG] [Thread-12427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:31:21.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:31: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')
2025-12-25T13:31:21.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-25T13:31:21.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:31:21.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:31:21.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:31:21.071 [DEBUG] [Thread-12427] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:31:28.563 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:28.564 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:30.261 [DEBUG] [Thread-12429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:45.308 [DEBUG] [Thread-12430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:31:51.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:31:51.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:31:51.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-25T13:31:51.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 31, 45), 29.08, 14.4, 0.0, 31.39, 26.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:31:51.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:31:45
2025-12-25T13:31:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:31:52.058 [DEBUG] [Thread-12431] [transport.py] [_log()] starting thread (client mode): 0xb9592fe0
2025-12-25T13:31:52.058 [DEBUG] [Thread-12431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:31:52.078 [DEBUG] [Thread-12431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:31:52.078 [INFO] [Thread-12431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:31:52.081 [DEBUG] [Thread-12431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:31:52.081 [DEBUG] [Thread-12431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:31:52.081 [DEBUG] [Thread-12431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:31:52.081 [DEBUG] [Thread-12431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:52.081 [DEBUG] [Thread-12431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] client lang: <none>
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] server lang: <none>
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] kex follows: False
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:31:52.082 [DEBUG] [Thread-12431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:31:52.083 [DEBUG] [Thread-12431] [transport.py] [_log()] Compression: none
2025-12-25T13:31:52.083 [DEBUG] [Thread-12431] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:31:52.100 [DEBUG] [Thread-12431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:31:52.101 [DEBUG] [Thread-12431] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:31:52.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:31:52.102 [DEBUG] [Thread-12431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:31:52.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:31:52.104 [DEBUG] [Thread-12431] [transport.py] [_log()] userauth is OK
2025-12-25T13:31:52.104 [DEBUG] [Thread-12431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:31:52.104 [DEBUG] [Thread-12431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:31:52.105 [DEBUG] [Thread-12431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:31:52.105 [DEBUG] [Thread-12431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:31:52.129 [INFO] [Thread-12431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:31:52.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:31:52.853 [DEBUG] [Thread-12431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:31:52.853 [DEBUG] [Thread-12431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:31:52.854 [DEBUG] [Thread-12431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:31:52.894 [DEBUG] [Thread-12431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:31:52.894 [DEBUG] [Thread-12431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:31:52.897 [DEBUG] [Thread-12431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:31:52.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:31:52.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:31:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:31:52.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:31:52.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:31:52.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:31:52.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:31:52.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:31:52.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:31:52.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.479923 -999.00  +26.30  21.87     19   +1.20 1 1 1 1 1   888    0 25.21 41.03 ----- 21.9 21.9 3.9 34.2 31.6 -27.1 30.9 -26.6 31.1 -24.2 31.5 -24.4
2025-12-25T13:31:52.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:31:52.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:31:52.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.479923
2025-12-25T13:31:52.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:31:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:31:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:31:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:31:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:31:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:31:45', tmtdew=29.08, humidity=14.4, cloud=0.0, wind=31.39, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:31:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:31:52.924 [DEBUG] [Thread-12431] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:31:53.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-25T13:31:53.018 [DEBUG] [Thread-12434] [transport.py] [_log()] starting thread (client mode): 0xb9593340
2025-12-25T13:31:53.018 [DEBUG] [Thread-12434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:31:53.033 [DEBUG] [Thread-12434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:31:53.033 [INFO] [Thread-12434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] client lang: <none>
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] server lang: <none>
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] kex follows: False
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:31:53.042 [DEBUG] [Thread-12434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:31:53.043 [DEBUG] [Thread-12434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:31:53.043 [DEBUG] [Thread-12434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:31:53.043 [DEBUG] [Thread-12434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:31:53.043 [DEBUG] [Thread-12434] [transport.py] [_log()] Compression: none
2025-12-25T13:31:53.043 [DEBUG] [Thread-12434] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:31:53.098 [DEBUG] [Thread-12434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:31:53.099 [DEBUG] [Thread-12434] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:31:53.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:31:53.100 [DEBUG] [Thread-12434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:31:53.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:31:53.155 [DEBUG] [Thread-12434] [transport.py] [_log()] userauth is OK
2025-12-25T13:31:53.155 [DEBUG] [Thread-12434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:31:53.155 [DEBUG] [Thread-12434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:31:53.155 [DEBUG] [Thread-12434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:31:53.155 [DEBUG] [Thread-12434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:31:53.174 [INFO] [Thread-12434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:31:53.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:31:53.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:31:53.981 [DEBUG] [Thread-12434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:31:53.982 [DEBUG] [Thread-12434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:31:54.030 [DEBUG] [Thread-12434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:31:54.030 [DEBUG] [Thread-12434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:31:54.039 [DEBUG] [Thread-12434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:31:54.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:31:54.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')
2025-12-25T13:31:54.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:31:54.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:31:54.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:31:54.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:31:54.076 [DEBUG] [Thread-12434] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:32:00.345 [DEBUG] [Thread-12436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:04.724 [DEBUG] [Thread-12437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:15.408 [DEBUG] [Thread-12438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:32:24.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:32:24.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-25T13:32:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 32, 17), 28.88, 14.55, 0.0, 28.21, 26.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:32:24.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:32:17
2025-12-25T13:32:24.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:32:25.070 [DEBUG] [Thread-12439] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-25T13:32:25.070 [DEBUG] [Thread-12439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:32:25.090 [DEBUG] [Thread-12439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:32:25.091 [INFO] [Thread-12439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] client lang: <none>
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] server lang: <none>
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] kex follows: False
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] Compression: none
2025-12-25T13:32:25.094 [DEBUG] [Thread-12439] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:32:25.111 [DEBUG] [Thread-12439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:32:25.112 [DEBUG] [Thread-12439] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:32:25.112 [DEBUG] [Thread-12439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:32:25.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:32:25.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:32:25.115 [DEBUG] [Thread-12439] [transport.py] [_log()] userauth is OK
2025-12-25T13:32:25.115 [DEBUG] [Thread-12439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:32:25.115 [DEBUG] [Thread-12439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:32:25.115 [DEBUG] [Thread-12439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:32:25.115 [DEBUG] [Thread-12439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:32:25.143 [INFO] [Thread-12439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:32:25.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:32:25.796 [DEBUG] [Thread-12439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:32:25.797 [DEBUG] [Thread-12439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:32:25.797 [DEBUG] [Thread-12439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:32:25.838 [DEBUG] [Thread-12439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:32:25.838 [DEBUG] [Thread-12439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:32:25.841 [DEBUG] [Thread-12439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:32:25.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:32:25.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:32:25.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:32:25.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:32:25.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:32:25.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:32:25.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:32:25.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:32:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:32:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.480270 -999.00  +25.90  18.90     19   +1.10 1 1 1 1 1   888    0 25.06 43.12 ----- 18.9 18.9 2.3 33.5 31.3 -29.9 30.7 -27.1 30.9 -24.9 31.2 -23.9
2025-12-25T13:32:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:32:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:32:25.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.480270
2025-12-25T13:32:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:32:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:32:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:32:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:32:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:32:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:32:17', tmtdew=28.88, humidity=14.55, cloud=0.0, wind=28.21, temperature=26.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:31:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:32:25.863 [DEBUG] [Thread-12439] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:32:25.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-25T13:32:25.957 [DEBUG] [Thread-12442] [transport.py] [_log()] starting thread (client mode): 0xb95b1750
2025-12-25T13:32:25.957 [DEBUG] [Thread-12442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:32:25.972 [DEBUG] [Thread-12442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:32:25.972 [INFO] [Thread-12442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:32:25.979 [DEBUG] [Thread-12442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:32:25.979 [DEBUG] [Thread-12442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] client lang: <none>
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] server lang: <none>
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] kex follows: False
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] Compression: none
2025-12-25T13:32:25.980 [DEBUG] [Thread-12442] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:32:26.039 [DEBUG] [Thread-12442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:32:26.039 [DEBUG] [Thread-12442] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:32:26.040 [DEBUG] [Thread-12442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:32:26.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:32:26.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:32:26.099 [DEBUG] [Thread-12442] [transport.py] [_log()] userauth is OK
2025-12-25T13:32:26.099 [DEBUG] [Thread-12442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:32:26.099 [DEBUG] [Thread-12442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:32:26.100 [DEBUG] [Thread-12442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:32:26.100 [DEBUG] [Thread-12442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:32:26.119 [INFO] [Thread-12442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:32:26.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-25T13:32:26.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:32:26.944 [DEBUG] [Thread-12442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:32:26.944 [DEBUG] [Thread-12442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:32:26.995 [DEBUG] [Thread-12442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:32:26.995 [DEBUG] [Thread-12442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:32:27.007 [DEBUG] [Thread-12442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:32:27.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:32:27.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-25T13:32:27.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-25T13:32:27.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:32:27.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:32:27.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:32:27.052 [DEBUG] [Thread-12442] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:32:28.705 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:28.706 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:30.444 [DEBUG] [Thread-12444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:45.497 [DEBUG] [Thread-12445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:32:57.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:32:57.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:32:57.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-25T13:32:57.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 32, 49), 29.29, 14.4, 0.0, 30.63, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:32:57.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:32:49
2025-12-25T13:32:57.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:32:58.053 [DEBUG] [Thread-12446] [transport.py] [_log()] starting thread (client mode): 0xb95f3520
2025-12-25T13:32:58.053 [DEBUG] [Thread-12446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:32:58.072 [DEBUG] [Thread-12446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:32:58.073 [INFO] [Thread-12446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] client lang: <none>
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] server lang: <none>
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] kex follows: False
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] Compression: none
2025-12-25T13:32:58.076 [DEBUG] [Thread-12446] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:32:58.091 [DEBUG] [Thread-12446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:32:58.091 [DEBUG] [Thread-12446] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:32:58.091 [DEBUG] [Thread-12446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:32:58.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:32:58.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:32:58.092 [DEBUG] [Thread-12446] [transport.py] [_log()] userauth is OK
2025-12-25T13:32:58.092 [DEBUG] [Thread-12446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:32:58.092 [DEBUG] [Thread-12446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:32:58.092 [DEBUG] [Thread-12446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:32:58.092 [DEBUG] [Thread-12446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:32:58.103 [INFO] [Thread-12446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:32:58.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:32:58.824 [DEBUG] [Thread-12446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:32:58.824 [DEBUG] [Thread-12446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:32:58.824 [DEBUG] [Thread-12446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:32:58.866 [DEBUG] [Thread-12446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:32:58.866 [DEBUG] [Thread-12446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:32:58.868 [DEBUG] [Thread-12446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:32:58.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:32:58.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:32:58.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:32:58.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:32:58.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:32:58.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.480965 -999.00  +25.10  22.59     20   +0.60 1 1 1 1 1   888    0 26.06 64.33 ----- 22.6 22.6 331.8 33.7 31.2 -26.6 30.4 -26.1 30.8 -24.4 31.1 -23.8
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:32:58.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.480965
2025-12-25T13:32:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:32:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:32:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:32:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:32:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:32:58.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:32:49', tmtdew=29.29, humidity=14.4, cloud=0.0, wind=30.63, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:32:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:32:58.886 [DEBUG] [Thread-12446] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:32:58.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-25T13:32:58.971 [DEBUG] [Thread-12449] [transport.py] [_log()] starting thread (client mode): 0xb95b2a10
2025-12-25T13:32:58.972 [DEBUG] [Thread-12449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:32:58.986 [DEBUG] [Thread-12449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:32:58.986 [INFO] [Thread-12449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] client lang: <none>
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] server lang: <none>
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] kex follows: False
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] Compression: none
2025-12-25T13:32:58.994 [DEBUG] [Thread-12449] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:32:59.054 [DEBUG] [Thread-12449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:32:59.054 [DEBUG] [Thread-12449] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:32:59.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:32:59.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:32:59.055 [DEBUG] [Thread-12449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:32:59.111 [DEBUG] [Thread-12449] [transport.py] [_log()] userauth is OK
2025-12-25T13:32:59.111 [DEBUG] [Thread-12449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:32:59.111 [DEBUG] [Thread-12449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:32:59.111 [DEBUG] [Thread-12449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:32:59.111 [DEBUG] [Thread-12449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:32:59.129 [INFO] [Thread-12449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:32:59.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-25T13:32:59.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:32:59.963 [DEBUG] [Thread-12449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:32:59.963 [DEBUG] [Thread-12449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:33:00.011 [DEBUG] [Thread-12449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:33:00.011 [DEBUG] [Thread-12449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:33:00.020 [DEBUG] [Thread-12449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:33:00.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:33:00.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-25T13:33:00.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-25T13:33:00.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:33:00.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:33:00.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:33:00.051 [DEBUG] [Thread-12449] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:33:00.528 [DEBUG] [Thread-12451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:33:04.779 [DEBUG] [Thread-12452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:33:15.571 [DEBUG] [Thread-12453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:33:28.844 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:33:28.845 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:33:30.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:33:30.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:33:30.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-25T13:33:30.602 [DEBUG] [Thread-12454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:33:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 33, 21), 29.14, 14.53, 0.0, 28.66, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:33:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:33:21
2025-12-25T13:33:30.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:33:31.043 [DEBUG] [Thread-12455] [transport.py] [_log()] starting thread (client mode): 0xb95d7b80
2025-12-25T13:33:31.043 [DEBUG] [Thread-12455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:33:31.063 [DEBUG] [Thread-12455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:33:31.063 [INFO] [Thread-12455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] client lang: <none>
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] server lang: <none>
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] kex follows: False
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] Compression: none
2025-12-25T13:33:31.066 [DEBUG] [Thread-12455] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:33:31.083 [DEBUG] [Thread-12455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:33:31.083 [DEBUG] [Thread-12455] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:33:31.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:33:31.084 [DEBUG] [Thread-12455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:33:31.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:33:31.085 [DEBUG] [Thread-12455] [transport.py] [_log()] userauth is OK
2025-12-25T13:33:31.085 [DEBUG] [Thread-12455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:33:31.085 [DEBUG] [Thread-12455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:33:31.085 [DEBUG] [Thread-12455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:33:31.086 [DEBUG] [Thread-12455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:33:31.120 [INFO] [Thread-12455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:33:31.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:33:31.761 [DEBUG] [Thread-12455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:33:31.761 [DEBUG] [Thread-12455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:33:31.762 [DEBUG] [Thread-12455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:33:31.802 [DEBUG] [Thread-12455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:33:31.802 [DEBUG] [Thread-12455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:33:31.805 [DEBUG] [Thread-12455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:33:31.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:33:31.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:33:31.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:33:31.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:33:31.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:33:31.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:33:31.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:33:31.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:33:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:33:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.481312 -999.00  +24.80  18.38     20   +0.60 1 1 1 1 1   888    0 26.16 75.30 ----- 18.4 18.4 7.9 28.3 31.1 -26.5 30.4 -26.3 30.7 -23.6 31.1 -25.6
2025-12-25T13:33:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:33:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:33:31.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.481312
2025-12-25T13:33:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:33:31.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:33:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:33:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:33:31.831 [DEBUG] [Thread-12455] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:33:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:33:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:33:21', tmtdew=29.14, humidity=14.53, cloud=0.0, wind=28.66, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:33:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:33:31.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-25T13:33:31.928 [DEBUG] [Thread-12458] [transport.py] [_log()] starting thread (client mode): 0xb95d6c20
2025-12-25T13:33:31.928 [DEBUG] [Thread-12458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:33:31.942 [DEBUG] [Thread-12458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:33:31.942 [INFO] [Thread-12458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:33:31.949 [DEBUG] [Thread-12458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] client lang: <none>
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] server lang: <none>
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] kex follows: False
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:33:31.950 [DEBUG] [Thread-12458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:33:31.951 [DEBUG] [Thread-12458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:33:31.951 [DEBUG] [Thread-12458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:33:31.951 [DEBUG] [Thread-12458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:33:31.951 [DEBUG] [Thread-12458] [transport.py] [_log()] Compression: none
2025-12-25T13:33:31.951 [DEBUG] [Thread-12458] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:33:32.007 [DEBUG] [Thread-12458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:33:32.007 [DEBUG] [Thread-12458] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:33:32.008 [DEBUG] [Thread-12458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:33:32.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:33:32.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:33:32.063 [DEBUG] [Thread-12458] [transport.py] [_log()] userauth is OK
2025-12-25T13:33:32.064 [DEBUG] [Thread-12458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:33:32.064 [DEBUG] [Thread-12458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:33:32.064 [DEBUG] [Thread-12458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:33:32.064 [DEBUG] [Thread-12458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:33:32.086 [INFO] [Thread-12458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:33:32.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-25T13:33:32.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:33:32.977 [DEBUG] [Thread-12458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:33:32.977 [DEBUG] [Thread-12458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:33:33.025 [DEBUG] [Thread-12458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:33:33.026 [DEBUG] [Thread-12458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:33:33.034 [DEBUG] [Thread-12458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:33:33.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:33:33.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-25T13:33:33.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-25T13:33:33.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:33:33.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:33:33.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:33:33.068 [DEBUG] [Thread-12458] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:33:45.631 [DEBUG] [Thread-12460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:00.681 [DEBUG] [Thread-12461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:03.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:34:03.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:34:03.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:34:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 33, 53), 28.75, 14.58, 0.0, 21.74, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:34:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:33:53
2025-12-25T13:34:03.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:34:04.052 [DEBUG] [Thread-12462] [transport.py] [_log()] starting thread (client mode): 0xb95d7070
2025-12-25T13:34:04.052 [DEBUG] [Thread-12462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:34:04.068 [DEBUG] [Thread-12462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:34:04.068 [INFO] [Thread-12462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:34:04.071 [DEBUG] [Thread-12462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:34:04.071 [DEBUG] [Thread-12462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:34:04.071 [DEBUG] [Thread-12462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] client lang: <none>
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] server lang: <none>
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] kex follows: False
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] Compression: none
2025-12-25T13:34:04.072 [DEBUG] [Thread-12462] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:34:04.089 [DEBUG] [Thread-12462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:34:04.090 [DEBUG] [Thread-12462] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:34:04.090 [DEBUG] [Thread-12462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:34:04.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:34:04.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:34:04.092 [DEBUG] [Thread-12462] [transport.py] [_log()] userauth is OK
2025-12-25T13:34:04.092 [DEBUG] [Thread-12462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:34:04.092 [DEBUG] [Thread-12462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:34:04.092 [DEBUG] [Thread-12462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:34:04.092 [DEBUG] [Thread-12462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:34:04.110 [INFO] [Thread-12462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:34:04.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:34:04.842 [DEBUG] [Thread-12464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:04.851 [DEBUG] [Thread-12462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:34:04.851 [DEBUG] [Thread-12462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:34:04.851 [DEBUG] [Thread-12462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:34:04.893 [DEBUG] [Thread-12462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:34:04.893 [DEBUG] [Thread-12462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:34:04.897 [DEBUG] [Thread-12462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:34:04.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:34:04.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:34:04.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:34:04.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:34:04.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:34:04.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:34:04.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:34:04.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:34:04.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:34:04.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.481659 -999.00  +24.90  20.33     20   +0.60 1 1 1 1 1   888    0 27.06 85.18 ----- 20.3 20.3 354.2 25.9 31.1 -26.0 30.4 -26.5 30.7 -23.1 31.0 -25.7
2025-12-25T13:34:04.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:34:04.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:34:04.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.481659
2025-12-25T13:34:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:34:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:34:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:34:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:34:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:34:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:33:53', tmtdew=28.75, humidity=14.58, cloud=0.0, wind=21.74, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:33:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:34:04.929 [DEBUG] [Thread-12462] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:34:05.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-25T13:34:05.032 [DEBUG] [Thread-12466] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-25T13:34:05.033 [DEBUG] [Thread-12466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:34:05.047 [DEBUG] [Thread-12466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:34:05.048 [INFO] [Thread-12466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:34:05.055 [DEBUG] [Thread-12466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:34:05.056 [DEBUG] [Thread-12466] [transport.py] [_log()] client lang: <none>
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] server lang: <none>
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] kex follows: False
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:34:05.057 [DEBUG] [Thread-12466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:34:05.058 [DEBUG] [Thread-12466] [transport.py] [_log()] Compression: none
2025-12-25T13:34:05.058 [DEBUG] [Thread-12466] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:34:05.113 [DEBUG] [Thread-12466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:34:05.113 [DEBUG] [Thread-12466] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:34:05.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:34:05.115 [DEBUG] [Thread-12466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:34:05.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:34:05.172 [DEBUG] [Thread-12466] [transport.py] [_log()] userauth is OK
2025-12-25T13:34:05.173 [DEBUG] [Thread-12466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:34:05.173 [DEBUG] [Thread-12466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:34:05.173 [DEBUG] [Thread-12466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:34:05.173 [DEBUG] [Thread-12466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:34:05.197 [INFO] [Thread-12466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:34:05.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-25T13:34:05.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:34:06.045 [DEBUG] [Thread-12466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:34:06.045 [DEBUG] [Thread-12466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:34:06.093 [DEBUG] [Thread-12466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:34:06.093 [DEBUG] [Thread-12466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:34:06.103 [DEBUG] [Thread-12466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:34:06.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:34:06.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-25T13:34:06.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-25T13:34:06.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:34:06.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:34:06.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:34:06.138 [DEBUG] [Thread-12466] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:34:15.714 [DEBUG] [Thread-12468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:28.985 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:28.986 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:30.754 [DEBUG] [Thread-12469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:34:36.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:34:36.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:34:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:34:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 34, 25), 28.72, 14.6, 0.0, 24.31, 25.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:34:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:34:25
2025-12-25T13:34:36.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:34:37.108 [DEBUG] [Thread-12470] [transport.py] [_log()] starting thread (client mode): 0xb95b0a00
2025-12-25T13:34:37.109 [DEBUG] [Thread-12470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:34:37.129 [DEBUG] [Thread-12470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:34:37.129 [INFO] [Thread-12470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:34:37.132 [DEBUG] [Thread-12470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:34:37.132 [DEBUG] [Thread-12470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:34:37.132 [DEBUG] [Thread-12470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:34:37.132 [DEBUG] [Thread-12470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] client lang: <none>
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] server lang: <none>
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] kex follows: False
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:34:37.133 [DEBUG] [Thread-12470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:34:37.134 [DEBUG] [Thread-12470] [transport.py] [_log()] Compression: none
2025-12-25T13:34:37.134 [DEBUG] [Thread-12470] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:34:37.153 [DEBUG] [Thread-12470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:34:37.154 [DEBUG] [Thread-12470] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:34:37.155 [DEBUG] [Thread-12470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:34:37.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:34:37.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:34:37.157 [DEBUG] [Thread-12470] [transport.py] [_log()] userauth is OK
2025-12-25T13:34:37.157 [DEBUG] [Thread-12470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:34:37.157 [DEBUG] [Thread-12470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:34:37.157 [DEBUG] [Thread-12470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:34:37.157 [DEBUG] [Thread-12470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:34:37.192 [INFO] [Thread-12470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:34:37.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:34:37.843 [DEBUG] [Thread-12470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:34:37.844 [DEBUG] [Thread-12470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:34:37.844 [DEBUG] [Thread-12470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:34:37.885 [DEBUG] [Thread-12470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:34:37.885 [DEBUG] [Thread-12470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:34:37.889 [DEBUG] [Thread-12470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:34:37.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:34:37.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:34:37.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:34:37.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:34:37.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:34:37.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:34:37.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:34:37.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:34:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:34:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.482006 -999.00  +25.40  17.53     20   +1.00 1 1 1 1 1   888    0 27.01 82.88 ----- 17.5 17.5 344.3 27.4 31.1 -25.2 30.6 -25.3 30.7 -22.5 31.2 -22.8
2025-12-25T13:34:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:34:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:34:37.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.482006
2025-12-25T13:34:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:34:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:34:37.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:34:37.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:34:37.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:34:37.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:34:25', tmtdew=28.72, humidity=14.6, cloud=0.0, wind=24.31, temperature=25.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:34:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:34:37.917 [DEBUG] [Thread-12470] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:34:38.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-25T13:34:38.012 [DEBUG] [Thread-12473] [transport.py] [_log()] starting thread (client mode): 0xb9590790
2025-12-25T13:34:38.013 [DEBUG] [Thread-12473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:34:38.028 [DEBUG] [Thread-12473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:34:38.028 [INFO] [Thread-12473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:34:38.036 [DEBUG] [Thread-12473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] client lang: <none>
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] server lang: <none>
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] kex follows: False
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] Compression: none
2025-12-25T13:34:38.037 [DEBUG] [Thread-12473] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:34:38.092 [DEBUG] [Thread-12473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:34:38.093 [DEBUG] [Thread-12473] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:34:38.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:34:38.094 [DEBUG] [Thread-12473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:34:38.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:34:38.148 [DEBUG] [Thread-12473] [transport.py] [_log()] userauth is OK
2025-12-25T13:34:38.149 [DEBUG] [Thread-12473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:34:38.149 [DEBUG] [Thread-12473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:34:38.149 [DEBUG] [Thread-12473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:34:38.149 [DEBUG] [Thread-12473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:34:38.174 [INFO] [Thread-12473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:34:38.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:34:38.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:34:39.007 [DEBUG] [Thread-12473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:34:39.008 [DEBUG] [Thread-12473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:34:39.056 [DEBUG] [Thread-12473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:34:39.056 [DEBUG] [Thread-12473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:34:39.066 [DEBUG] [Thread-12473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:34:39.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:34:39.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-25T13:34:39.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-25T13:34:39.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:34:39.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:34:39.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:34:39.103 [DEBUG] [Thread-12473] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:34:45.792 [DEBUG] [Thread-12475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:00.847 [DEBUG] [Thread-12476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:04.891 [DEBUG] [Thread-12477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:09.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:35:09.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:35:09.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:35:09.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 34, 57), 29.28, 14.05, 0.0, 27.42, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:35:09.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:34:57
2025-12-25T13:35:09.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:35:10.079 [DEBUG] [Thread-12478] [transport.py] [_log()] starting thread (client mode): 0xb9558490
2025-12-25T13:35:10.079 [DEBUG] [Thread-12478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:35:10.098 [DEBUG] [Thread-12478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:35:10.098 [INFO] [Thread-12478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:35:10.101 [DEBUG] [Thread-12478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] client lang: <none>
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] server lang: <none>
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] kex follows: False
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] Compression: none
2025-12-25T13:35:10.102 [DEBUG] [Thread-12478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:35:10.119 [DEBUG] [Thread-12478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:35:10.119 [DEBUG] [Thread-12478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:35:10.120 [DEBUG] [Thread-12478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:35:10.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:35:10.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:35:10.122 [DEBUG] [Thread-12478] [transport.py] [_log()] userauth is OK
2025-12-25T13:35:10.122 [DEBUG] [Thread-12478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:35:10.122 [DEBUG] [Thread-12478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:35:10.122 [DEBUG] [Thread-12478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:35:10.122 [DEBUG] [Thread-12478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:35:10.140 [INFO] [Thread-12478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:35:10.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:35:11.317 [DEBUG] [Thread-12478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:35:11.317 [DEBUG] [Thread-12478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:35:11.317 [DEBUG] [Thread-12478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:35:11.357 [DEBUG] [Thread-12478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:35:11.358 [DEBUG] [Thread-12478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:35:11.361 [DEBUG] [Thread-12478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:35:11.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:35:11.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:35:11.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:35:11.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:35:11.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:35:11.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:35:11.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:35:11.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:35:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:35:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.482353 -999.00  +26.10  32.02     19   +1.30 1 1 2 1 1   888    0 26.56 83.63 ----- 32.0 32.0 310.6 39.4 31.2 -27.2 30.6 -26.3 30.8 -22.7 31.3 -24.0
2025-12-25T13:35:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:35:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:35:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.482353
2025-12-25T13:35:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:35:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:35:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:35:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:35:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:35:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:34:57', tmtdew=29.28, humidity=14.05, cloud=0.0, wind=27.42, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:34:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:35:11.387 [DEBUG] [Thread-12478] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:35:11.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-25T13:35:11.483 [DEBUG] [Thread-12481] [transport.py] [_log()] starting thread (client mode): 0xb9558fa0
2025-12-25T13:35:11.483 [DEBUG] [Thread-12481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:35:11.498 [DEBUG] [Thread-12481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:35:11.498 [INFO] [Thread-12481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] client lang: <none>
2025-12-25T13:35:11.506 [DEBUG] [Thread-12481] [transport.py] [_log()] server lang: <none>
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] kex follows: False
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] Compression: none
2025-12-25T13:35:11.507 [DEBUG] [Thread-12481] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:35:11.565 [DEBUG] [Thread-12481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:35:11.566 [DEBUG] [Thread-12481] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:35:11.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:35:11.567 [DEBUG] [Thread-12481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:35:11.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:35:11.621 [DEBUG] [Thread-12481] [transport.py] [_log()] userauth is OK
2025-12-25T13:35:11.621 [DEBUG] [Thread-12481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:35:11.622 [DEBUG] [Thread-12481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:35:11.622 [DEBUG] [Thread-12481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:35:11.622 [DEBUG] [Thread-12481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:35:11.640 [INFO] [Thread-12481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:35:11.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-25T13:35:11.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:35:12.481 [DEBUG] [Thread-12481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:35:12.481 [DEBUG] [Thread-12481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:35:12.529 [DEBUG] [Thread-12481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:35:12.529 [DEBUG] [Thread-12481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:35:12.538 [DEBUG] [Thread-12481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:35:12.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:35:12.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-25T13:35:12.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:35:12.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:35:12.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:35:12.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:35:12.575 [DEBUG] [Thread-12481] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:35:15.885 [DEBUG] [Thread-12483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:29.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:29.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:30.939 [DEBUG] [Thread-12484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:35:42.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:35:42.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:35:42.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-25T13:35:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 35, 29), 29.06, 14.28, 0.0, 28.02, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:35:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:35:29
2025-12-25T13:35:43.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:35:43.579 [DEBUG] [Thread-12485] [transport.py] [_log()] starting thread (client mode): 0xb95d4940
2025-12-25T13:35:43.579 [DEBUG] [Thread-12485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:35:43.599 [DEBUG] [Thread-12485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:35:43.599 [INFO] [Thread-12485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] client lang: <none>
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] server lang: <none>
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] kex follows: False
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:35:43.602 [DEBUG] [Thread-12485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:35:43.603 [DEBUG] [Thread-12485] [transport.py] [_log()] Compression: none
2025-12-25T13:35:43.603 [DEBUG] [Thread-12485] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:35:43.617 [DEBUG] [Thread-12485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:35:43.618 [DEBUG] [Thread-12485] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:35:43.618 [DEBUG] [Thread-12485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:35:43.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:35:43.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:35:43.620 [DEBUG] [Thread-12485] [transport.py] [_log()] userauth is OK
2025-12-25T13:35:43.620 [DEBUG] [Thread-12485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:35:43.620 [DEBUG] [Thread-12485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:35:43.620 [DEBUG] [Thread-12485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:35:43.620 [DEBUG] [Thread-12485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:35:43.637 [INFO] [Thread-12485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:35:43.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:35:44.278 [DEBUG] [Thread-12485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:35:44.278 [DEBUG] [Thread-12485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:35:44.279 [DEBUG] [Thread-12485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:35:44.318 [DEBUG] [Thread-12485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:35:44.319 [DEBUG] [Thread-12485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:35:44.322 [DEBUG] [Thread-12485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:35:44.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:35:44.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:35:44.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:35:44.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:35:44.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:35:44.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:35:44.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:35:44.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:35:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:35:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.482700 -999.00  +25.20  23.07     20   +1.10 1 1 1 1 1   888    0 26.62 82.31 ----- 23.1 23.1 322.4 34.0 31.1 -25.6 30.6 -25.4 30.6 -23.8 31.3 -23.3
2025-12-25T13:35:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:35:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:35:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.482700
2025-12-25T13:35:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:35:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:35:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:35:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:35:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:35:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:35:29', tmtdew=29.06, humidity=14.28, cloud=0.0, wind=28.02, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:35:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:35:44.345 [DEBUG] [Thread-12485] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:35:44.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-25T13:35:44.437 [DEBUG] [Thread-12488] [transport.py] [_log()] starting thread (client mode): 0xb9559720
2025-12-25T13:35:44.438 [DEBUG] [Thread-12488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:35:44.453 [DEBUG] [Thread-12488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:35:44.453 [INFO] [Thread-12488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] client lang: <none>
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] server lang: <none>
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] kex follows: False
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:35:44.460 [DEBUG] [Thread-12488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:35:44.461 [DEBUG] [Thread-12488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:35:44.461 [DEBUG] [Thread-12488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:35:44.461 [DEBUG] [Thread-12488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:35:44.461 [DEBUG] [Thread-12488] [transport.py] [_log()] Compression: none
2025-12-25T13:35:44.461 [DEBUG] [Thread-12488] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:35:44.516 [DEBUG] [Thread-12488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:35:44.516 [DEBUG] [Thread-12488] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:35:44.517 [DEBUG] [Thread-12488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:35:44.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:35:44.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:35:44.573 [DEBUG] [Thread-12488] [transport.py] [_log()] userauth is OK
2025-12-25T13:35:44.573 [DEBUG] [Thread-12488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:35:44.573 [DEBUG] [Thread-12488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:35:44.573 [DEBUG] [Thread-12488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:35:44.573 [DEBUG] [Thread-12488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:35:44.592 [INFO] [Thread-12488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:35:44.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-25T13:35:44.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:35:45.415 [DEBUG] [Thread-12488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:35:45.416 [DEBUG] [Thread-12488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:35:45.464 [DEBUG] [Thread-12488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:35:45.464 [DEBUG] [Thread-12488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:35:45.473 [DEBUG] [Thread-12488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:35:45.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:35:45.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:35:45.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:35:45.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:35:45.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:35:45.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:35:45.506 [DEBUG] [Thread-12488] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:35:45.966 [DEBUG] [Thread-12490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:01.019 [DEBUG] [Thread-12491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:04.946 [DEBUG] [Thread-12492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:15.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:36:15.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:36:15.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-25T13:36:16.047 [DEBUG] [Thread-12493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 36, 1), 29.03, 14.36, 0.0, 26.78, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:36:16.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:36:01
2025-12-25T13:36:16.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:36:16.516 [DEBUG] [Thread-12494] [transport.py] [_log()] starting thread (client mode): 0xb95b1b10
2025-12-25T13:36:16.516 [DEBUG] [Thread-12494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:36:16.536 [DEBUG] [Thread-12494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:36:16.537 [INFO] [Thread-12494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] client lang: <none>
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] server lang: <none>
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] kex follows: False
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] Compression: none
2025-12-25T13:36:16.540 [DEBUG] [Thread-12494] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:36:16.558 [DEBUG] [Thread-12494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:36:16.558 [DEBUG] [Thread-12494] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:36:16.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:36:16.559 [DEBUG] [Thread-12494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:36:16.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:36:16.561 [DEBUG] [Thread-12494] [transport.py] [_log()] userauth is OK
2025-12-25T13:36:16.562 [DEBUG] [Thread-12494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:36:16.562 [DEBUG] [Thread-12494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:36:16.562 [DEBUG] [Thread-12494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:36:16.562 [DEBUG] [Thread-12494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:36:16.593 [INFO] [Thread-12494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:36:16.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:36:17.326 [DEBUG] [Thread-12494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:36:17.326 [DEBUG] [Thread-12494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:36:17.326 [DEBUG] [Thread-12494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:36:17.366 [DEBUG] [Thread-12494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:36:17.367 [DEBUG] [Thread-12494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:36:17.370 [DEBUG] [Thread-12494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:36:17.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:36:17.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:36:17.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:36:17.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:36:17.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:36:17.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:36:17.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:36:17.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:36:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:36:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.483048 -999.00  +25.70  18.69     20   +1.60 1 1 1 1 1   888    0 26.29 80.68 ----- 18.7 18.7 311.4 36.0 31.2 -25.1 30.7 -24.7 30.7 -22.7 31.4 -22.7
2025-12-25T13:36:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:36:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:36:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.483048
2025-12-25T13:36:17.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:36:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:36:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:36:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:36:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:36:17.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:36:01', tmtdew=29.03, humidity=14.36, cloud=0.0, wind=26.78, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:35:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:36:17.394 [DEBUG] [Thread-12494] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:36:17.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-25T13:36:17.492 [DEBUG] [Thread-12497] [transport.py] [_log()] starting thread (client mode): 0xb95b1b40
2025-12-25T13:36:17.492 [DEBUG] [Thread-12497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:36:17.505 [DEBUG] [Thread-12497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:36:17.505 [INFO] [Thread-12497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:17.513 [DEBUG] [Thread-12497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] client lang: <none>
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] server lang: <none>
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] kex follows: False
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:36:17.514 [DEBUG] [Thread-12497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:36:17.515 [DEBUG] [Thread-12497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:36:17.515 [DEBUG] [Thread-12497] [transport.py] [_log()] Compression: none
2025-12-25T13:36:17.515 [DEBUG] [Thread-12497] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:36:17.574 [DEBUG] [Thread-12497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:36:17.575 [DEBUG] [Thread-12497] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:36:17.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:36:17.576 [DEBUG] [Thread-12497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:36:17.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:36:17.630 [DEBUG] [Thread-12497] [transport.py] [_log()] userauth is OK
2025-12-25T13:36:17.630 [DEBUG] [Thread-12497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:36:17.630 [DEBUG] [Thread-12497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:36:17.630 [DEBUG] [Thread-12497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:36:17.630 [DEBUG] [Thread-12497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:36:17.649 [INFO] [Thread-12497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:36:17.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:36:17.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:36:18.482 [DEBUG] [Thread-12497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:36:18.482 [DEBUG] [Thread-12497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:36:18.530 [DEBUG] [Thread-12497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:36:18.531 [DEBUG] [Thread-12497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:36:18.539 [DEBUG] [Thread-12497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:36:18.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:36:18.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:36:18.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-25T13:36:18.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:36:18.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:36:18.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:36:18.576 [DEBUG] [Thread-12497] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:36:29.266 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:29.267 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:31.081 [DEBUG] [Thread-12499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:46.131 [DEBUG] [Thread-12500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:36:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:36:48.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:36:48.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-25T13:36:49.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 36, 33), 28.9, 14.68, 0.0, 30.4, 26.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:36:49.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:36:33
2025-12-25T13:36:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:36:49.630 [DEBUG] [Thread-12501] [transport.py] [_log()] starting thread (client mode): 0xb95d7670
2025-12-25T13:36:49.630 [DEBUG] [Thread-12501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:36:49.651 [DEBUG] [Thread-12501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:36:49.651 [INFO] [Thread-12501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] client lang: <none>
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] server lang: <none>
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] kex follows: False
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] Compression: none
2025-12-25T13:36:49.654 [DEBUG] [Thread-12501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:36:49.670 [DEBUG] [Thread-12501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:36:49.670 [DEBUG] [Thread-12501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:36:49.670 [DEBUG] [Thread-12501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:36:49.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:36:49.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:36:49.671 [DEBUG] [Thread-12501] [transport.py] [_log()] userauth is OK
2025-12-25T13:36:49.671 [DEBUG] [Thread-12501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:36:49.671 [DEBUG] [Thread-12501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:36:49.671 [DEBUG] [Thread-12501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:36:49.671 [DEBUG] [Thread-12501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:36:49.687 [INFO] [Thread-12501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:36:49.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:36:50.329 [DEBUG] [Thread-12501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:36:50.329 [DEBUG] [Thread-12501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:36:50.329 [DEBUG] [Thread-12501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:36:50.370 [DEBUG] [Thread-12501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:36:50.370 [DEBUG] [Thread-12501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:36:50.372 [DEBUG] [Thread-12501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:36:50.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:36:50.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:36:50.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:36:50.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:36:50.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:36:50.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:36:50.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.483395 -999.00  +26.30  39.91     20   +1.90 1 1 2 1 1   888    0 26.28 77.78 ----- 39.9 39.9 312.6 46.5 31.4 -24.5 30.8 -25.8 30.9 -21.5 31.5 -24.1
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.483395
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:36:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:36:33', tmtdew=28.9, humidity=14.68, cloud=0.0, wind=30.4, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:36:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:36:50.392 [DEBUG] [Thread-12501] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:36:50.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-25T13:36:50.475 [DEBUG] [Thread-12504] [transport.py] [_log()] starting thread (client mode): 0xb95d6860
2025-12-25T13:36:50.475 [DEBUG] [Thread-12504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:36:50.489 [DEBUG] [Thread-12504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:36:50.489 [INFO] [Thread-12504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] client lang: <none>
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] server lang: <none>
2025-12-25T13:36:50.496 [DEBUG] [Thread-12504] [transport.py] [_log()] kex follows: False
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] Compression: none
2025-12-25T13:36:50.497 [DEBUG] [Thread-12504] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:36:50.557 [DEBUG] [Thread-12504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:36:50.557 [DEBUG] [Thread-12504] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:36:50.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:36:50.557 [DEBUG] [Thread-12504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:36:50.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:36:50.615 [DEBUG] [Thread-12504] [transport.py] [_log()] userauth is OK
2025-12-25T13:36:50.615 [DEBUG] [Thread-12504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:36:50.615 [DEBUG] [Thread-12504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:36:50.615 [DEBUG] [Thread-12504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:36:50.615 [DEBUG] [Thread-12504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:36:50.629 [INFO] [Thread-12504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:36:50.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:36:50.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:36:51.470 [DEBUG] [Thread-12504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:36:51.470 [DEBUG] [Thread-12504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:36:51.518 [DEBUG] [Thread-12504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:36:51.518 [DEBUG] [Thread-12504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:36:51.527 [DEBUG] [Thread-12504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:36:51.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:36:51.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:36:51.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-25T13:36:51.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:36:51.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:36:51.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:36:51.560 [DEBUG] [Thread-12504] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:37:01.169 [DEBUG] [Thread-12506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:04.997 [DEBUG] [Thread-12507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:16.217 [DEBUG] [Thread-12508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:21.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:37:21.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:37:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:37:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 37, 5), 28.87, 14.78, 0.0, 34.28, 26.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:37:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:37:05
2025-12-25T13:37:22.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:37:22.581 [DEBUG] [Thread-12509] [transport.py] [_log()] starting thread (client mode): 0xb9546dd0
2025-12-25T13:37:22.581 [DEBUG] [Thread-12509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:37:22.601 [DEBUG] [Thread-12509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:37:22.601 [INFO] [Thread-12509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:37:22.602 [DEBUG] [Thread-12509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] client lang: <none>
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] server lang: <none>
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] kex follows: False
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] Compression: none
2025-12-25T13:37:22.603 [DEBUG] [Thread-12509] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:37:22.616 [DEBUG] [Thread-12509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:37:22.616 [DEBUG] [Thread-12509] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:37:22.617 [DEBUG] [Thread-12509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:37:22.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:37:22.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:37:22.619 [DEBUG] [Thread-12509] [transport.py] [_log()] userauth is OK
2025-12-25T13:37:22.619 [DEBUG] [Thread-12509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:37:22.619 [DEBUG] [Thread-12509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:37:22.619 [DEBUG] [Thread-12509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:37:22.619 [DEBUG] [Thread-12509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:37:22.648 [INFO] [Thread-12509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:37:22.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:37:23.201 [DEBUG] [Thread-12509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:37:23.201 [DEBUG] [Thread-12509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:37:23.201 [DEBUG] [Thread-12509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:37:23.242 [DEBUG] [Thread-12509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:37:23.242 [DEBUG] [Thread-12509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:37:23.245 [DEBUG] [Thread-12509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:37:23.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:37:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:37:23.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:37:23.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:37:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:37:23.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:37:23.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:37:23.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:37:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:37:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.483742 -999.00  +26.00  31.66     21   +2.20 1 1 2 1 1   888    0 26.04 66.61 ----- 31.7 31.7 297.2 47.7 31.3 -25.8 30.7 -26.6 30.8 -23.5 31.4 -24.1
2025-12-25T13:37:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:37:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:37:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.483742
2025-12-25T13:37:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:37:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:37:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:37:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:37:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:37:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:37:05', tmtdew=28.87, humidity=14.78, cloud=0.0, wind=34.28, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:36:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:37:23.266 [DEBUG] [Thread-12509] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:37:23.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-25T13:37:23.361 [DEBUG] [Thread-12512] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T13:37:23.361 [DEBUG] [Thread-12512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:37:23.375 [DEBUG] [Thread-12512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:37:23.375 [INFO] [Thread-12512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:37:23.382 [DEBUG] [Thread-12512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] client lang: <none>
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] server lang: <none>
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] kex follows: False
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] Compression: none
2025-12-25T13:37:23.383 [DEBUG] [Thread-12512] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:37:23.442 [DEBUG] [Thread-12512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:37:23.443 [DEBUG] [Thread-12512] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:37:23.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:37:23.444 [DEBUG] [Thread-12512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:37:23.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:37:23.503 [DEBUG] [Thread-12512] [transport.py] [_log()] userauth is OK
2025-12-25T13:37:23.503 [DEBUG] [Thread-12512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:37:23.503 [DEBUG] [Thread-12512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:37:23.503 [DEBUG] [Thread-12512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:37:23.503 [DEBUG] [Thread-12512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:37:23.522 [INFO] [Thread-12512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:37: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-25T13:37:23.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:37:24.348 [DEBUG] [Thread-12512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:37:24.348 [DEBUG] [Thread-12512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:37:24.396 [DEBUG] [Thread-12512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:37:24.396 [DEBUG] [Thread-12512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:37:24.405 [DEBUG] [Thread-12512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:37:24.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:37:24.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-25T13:37:24.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:37:24.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:37:24.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:37:24.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:37:24.441 [DEBUG] [Thread-12512] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:37:29.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:29.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:31.249 [DEBUG] [Thread-12514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:46.296 [DEBUG] [Thread-12515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:37:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:37:54.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:37:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:37:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 37, 37), 28.37, 15.55, 0.0, 26.04, 26.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:37:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:37:37
2025-12-25T13:37:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:37:55.442 [DEBUG] [Thread-12516] [transport.py] [_log()] starting thread (client mode): 0xb955a920
2025-12-25T13:37:55.442 [DEBUG] [Thread-12516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:37:55.462 [DEBUG] [Thread-12516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:37:55.462 [INFO] [Thread-12516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] client lang: <none>
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] server lang: <none>
2025-12-25T13:37:55.465 [DEBUG] [Thread-12516] [transport.py] [_log()] kex follows: False
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] Compression: none
2025-12-25T13:37:55.466 [DEBUG] [Thread-12516] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:37:55.484 [DEBUG] [Thread-12516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:37:55.485 [DEBUG] [Thread-12516] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:37:55.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:37:55.486 [DEBUG] [Thread-12516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:37:55.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:37:55.487 [DEBUG] [Thread-12516] [transport.py] [_log()] userauth is OK
2025-12-25T13:37:55.487 [DEBUG] [Thread-12516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:37:55.487 [DEBUG] [Thread-12516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:37:55.487 [DEBUG] [Thread-12516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:37:55.487 [DEBUG] [Thread-12516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:37:55.507 [INFO] [Thread-12516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:37:55.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:37:56.157 [DEBUG] [Thread-12516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:37:56.158 [DEBUG] [Thread-12516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:37:56.158 [DEBUG] [Thread-12516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:37:56.198 [DEBUG] [Thread-12516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:37:56.198 [DEBUG] [Thread-12516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:37:56.202 [DEBUG] [Thread-12516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:37:56.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:37:56.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:37:56.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:37:56.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:37:56.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:37:56.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:37:56.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:37:56.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:37:56.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:37:56.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.484437 -999.00  +24.80  25.47     22   +1.80 1 1 1 1 1   888    0 25.67 45.45 ----- 25.5 25.5 332.6 37.1 31.1 -25.7 30.4 -25.8 30.5 -23.6 31.2 -23.7
2025-12-25T13:37:56.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:37:56.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:37:56.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.484437
2025-12-25T13:37:56.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:37:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:37:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:37:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:37:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:37:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:37:37', tmtdew=28.37, humidity=15.55, cloud=0.0, wind=26.04, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:37:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:37:56.227 [DEBUG] [Thread-12516] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:37:56.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:37:56.321 [DEBUG] [Thread-12519] [transport.py] [_log()] starting thread (client mode): 0xb95d5a80
2025-12-25T13:37:56.321 [DEBUG] [Thread-12519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:37:56.336 [DEBUG] [Thread-12519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:37:56.336 [INFO] [Thread-12519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:37:56.343 [DEBUG] [Thread-12519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:37:56.343 [DEBUG] [Thread-12519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:37:56.343 [DEBUG] [Thread-12519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:37:56.343 [DEBUG] [Thread-12519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:56.343 [DEBUG] [Thread-12519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:37:56.343 [DEBUG] [Thread-12519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] client lang: <none>
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] server lang: <none>
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] kex follows: False
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] Compression: none
2025-12-25T13:37:56.344 [DEBUG] [Thread-12519] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:37:56.403 [DEBUG] [Thread-12519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:37:56.403 [DEBUG] [Thread-12519] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:37:56.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:37:56.404 [DEBUG] [Thread-12519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:37:56.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:37:56.459 [DEBUG] [Thread-12519] [transport.py] [_log()] userauth is OK
2025-12-25T13:37:56.459 [DEBUG] [Thread-12519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:37:56.459 [DEBUG] [Thread-12519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:37:56.460 [DEBUG] [Thread-12519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:37:56.460 [DEBUG] [Thread-12519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:37:56.478 [INFO] [Thread-12519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:37:56.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-25T13:37:56.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:37:57.292 [DEBUG] [Thread-12519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:37:57.293 [DEBUG] [Thread-12519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:37:57.341 [DEBUG] [Thread-12519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:37:57.341 [DEBUG] [Thread-12519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:37:57.350 [DEBUG] [Thread-12519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:37:57.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:37:57.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:37:57.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-25T13:37:57.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:37:57.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:37:57.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:37:57.387 [DEBUG] [Thread-12519] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:38:01.330 [DEBUG] [Thread-12521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:38:05.046 [DEBUG] [Thread-12522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:38:16.379 [DEBUG] [Thread-12523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:38:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:38:27.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:38:27.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-25T13:38:28.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 38, 10), 28.4, 15.5, 0.0, 21.63, 26.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:38:28.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:38:10
2025-12-25T13:38:28.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:38:28.388 [DEBUG] [Thread-12524] [transport.py] [_log()] starting thread (client mode): 0xb95d75b0
2025-12-25T13:38:28.389 [DEBUG] [Thread-12524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:38:28.408 [DEBUG] [Thread-12524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:38:28.408 [INFO] [Thread-12524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:38:28.411 [DEBUG] [Thread-12524] [transport.py] [_log()] client lang: <none>
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] server lang: <none>
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] kex follows: False
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] Compression: none
2025-12-25T13:38:28.412 [DEBUG] [Thread-12524] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:38:28.420 [DEBUG] [Thread-12524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:38:28.420 [DEBUG] [Thread-12524] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:38:28.421 [DEBUG] [Thread-12524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:38:28.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:38:28.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:38:28.422 [DEBUG] [Thread-12524] [transport.py] [_log()] userauth is OK
2025-12-25T13:38:28.422 [DEBUG] [Thread-12524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:38:28.422 [DEBUG] [Thread-12524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:38:28.422 [DEBUG] [Thread-12524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:38:28.422 [DEBUG] [Thread-12524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:38:28.441 [INFO] [Thread-12524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:38:28.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:38:29.208 [DEBUG] [Thread-12524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:38:29.208 [DEBUG] [Thread-12524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:38:29.209 [DEBUG] [Thread-12524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:38:29.249 [DEBUG] [Thread-12524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:38:29.249 [DEBUG] [Thread-12524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:38:29.252 [DEBUG] [Thread-12524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:38:29.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:38:29.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:38:29.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:38:29.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:38:29.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:38:29.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:38:29.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:38:29.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:38:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:38:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.484784 -999.00  +24.70  14.95     22   +2.00 1 1 1 1 1   888    0 25.33 31.84 ----- 14.9 14.9 307.4 21.5 31.2 -24.9 30.6 -25.0 30.7 -23.0 31.4 -23.2
2025-12-25T13:38:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:38:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:38:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.484784
2025-12-25T13:38:29.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:38:29.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:38:29.278 [DEBUG] [Thread-12524] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:38:29.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:38:29.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:38:29.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:38:29.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:38:10', tmtdew=28.4, humidity=15.5, cloud=0.0, wind=21.63, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:38:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:38:29.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-25T13:38:29.375 [DEBUG] [Thread-12527] [transport.py] [_log()] starting thread (client mode): 0xb95d4af0
2025-12-25T13:38:29.375 [DEBUG] [Thread-12527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:38:29.390 [DEBUG] [Thread-12527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:38:29.390 [INFO] [Thread-12527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:38:29.397 [DEBUG] [Thread-12527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] client lang: <none>
2025-12-25T13:38:29.398 [DEBUG] [Thread-12527] [transport.py] [_log()] server lang: <none>
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] kex follows: False
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] Compression: none
2025-12-25T13:38:29.399 [DEBUG] [Thread-12527] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:38:29.455 [DEBUG] [Thread-12527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:38:29.456 [DEBUG] [Thread-12527] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:38:29.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:38:29.457 [DEBUG] [Thread-12527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:38:29.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:38:29.511 [DEBUG] [Thread-12527] [transport.py] [_log()] userauth is OK
2025-12-25T13:38:29.511 [DEBUG] [Thread-12527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:38:29.511 [DEBUG] [Thread-12527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:38:29.512 [DEBUG] [Thread-12527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:38:29.512 [DEBUG] [Thread-12527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:38:29.533 [INFO] [Thread-12527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:38:29.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-25T13:38:29.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:38:29.544 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:38:29.545 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:38:30.394 [DEBUG] [Thread-12527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:38:30.394 [DEBUG] [Thread-12527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:38:30.442 [DEBUG] [Thread-12527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:38:30.442 [DEBUG] [Thread-12527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:38:30.451 [DEBUG] [Thread-12527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:38:30.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:38: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-25T13:38: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-25T13:38:30.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:38:30.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:38:30.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:38:30.488 [DEBUG] [Thread-12527] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:38:31.413 [DEBUG] [Thread-12529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:38:46.468 [DEBUG] [Thread-12530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:00.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:39:00.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:39:00.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-25T13:39:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 38, 42), 27.77, 15.77, 0.0, 19.83, 25.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:39:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:38:42
2025-12-25T13:39:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:39:01.496 [DEBUG] [Thread-12531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:01.505 [DEBUG] [Thread-12532] [transport.py] [_log()] starting thread (client mode): 0xb95d7b80
2025-12-25T13:39:01.505 [DEBUG] [Thread-12532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:39:01.519 [DEBUG] [Thread-12532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:39:01.519 [INFO] [Thread-12532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] client lang: <none>
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] server lang: <none>
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] kex follows: False
2025-12-25T13:39:01.522 [DEBUG] [Thread-12532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:39:01.523 [DEBUG] [Thread-12532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:39:01.523 [DEBUG] [Thread-12532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:39:01.523 [DEBUG] [Thread-12532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:39:01.523 [DEBUG] [Thread-12532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:39:01.523 [DEBUG] [Thread-12532] [transport.py] [_log()] Compression: none
2025-12-25T13:39:01.523 [DEBUG] [Thread-12532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:39:01.539 [DEBUG] [Thread-12532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:39:01.539 [DEBUG] [Thread-12532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:39:01.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:39:01.540 [DEBUG] [Thread-12532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:39:01.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:39:01.542 [DEBUG] [Thread-12532] [transport.py] [_log()] userauth is OK
2025-12-25T13:39:01.542 [DEBUG] [Thread-12532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:39:01.542 [DEBUG] [Thread-12532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:39:01.542 [DEBUG] [Thread-12532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:39:01.542 [DEBUG] [Thread-12532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:39:01.567 [INFO] [Thread-12532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:39:01.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:39:02.213 [DEBUG] [Thread-12532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:39:02.213 [DEBUG] [Thread-12532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:39:02.213 [DEBUG] [Thread-12532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:39:02.254 [DEBUG] [Thread-12532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:39:02.254 [DEBUG] [Thread-12532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:39:02.257 [DEBUG] [Thread-12532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:39:02.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:39:02.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:39:02.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:39:02.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:39:02.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:39:02.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:39:02.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:39:02.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:39:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:39:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.485131 -999.00  +25.30  21.32     22   +2.10 1 1 1 1 1   888    0 25.16 22.13 ----- 21.3 21.3 308.2 23.6 31.4 -25.1 30.8 -25.5 30.9 -21.9 31.5 -23.6
2025-12-25T13:39:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:39:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:39:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.485131
2025-12-25T13:39:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:39:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:39:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:39:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:39:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:39:02.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:38:42', tmtdew=27.77, humidity=15.77, cloud=0.0, wind=19.83, temperature=25.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:38:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:39:02.283 [DEBUG] [Thread-12532] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:39:02.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-25T13:39:02.390 [DEBUG] [Thread-12535] [transport.py] [_log()] starting thread (client mode): 0xb9558ee0
2025-12-25T13:39:02.390 [DEBUG] [Thread-12535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:39:02.405 [DEBUG] [Thread-12535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:39:02.405 [INFO] [Thread-12535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:39:02.412 [DEBUG] [Thread-12535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:39:02.412 [DEBUG] [Thread-12535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:39:02.412 [DEBUG] [Thread-12535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] client lang: <none>
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] server lang: <none>
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] kex follows: False
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] Compression: none
2025-12-25T13:39:02.413 [DEBUG] [Thread-12535] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:39:02.470 [DEBUG] [Thread-12535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:39:02.471 [DEBUG] [Thread-12535] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:39:02.471 [DEBUG] [Thread-12535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:39:02.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:39:02.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:39:02.529 [DEBUG] [Thread-12535] [transport.py] [_log()] userauth is OK
2025-12-25T13:39:02.529 [DEBUG] [Thread-12535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:39:02.529 [DEBUG] [Thread-12535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:39:02.529 [DEBUG] [Thread-12535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:39:02.530 [DEBUG] [Thread-12535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:39:02.551 [INFO] [Thread-12535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:39:02.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-25T13:39:02.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:39:03.356 [DEBUG] [Thread-12535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:39:03.357 [DEBUG] [Thread-12535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:39:03.406 [DEBUG] [Thread-12535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:39:03.406 [DEBUG] [Thread-12535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:39:03.418 [DEBUG] [Thread-12535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:39:03.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:39:03.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:39:03.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:39:03.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:39:03.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:39:03.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:39:03.454 [DEBUG] [Thread-12535] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:39:05.108 [DEBUG] [Thread-12537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:16.528 [DEBUG] [Thread-12538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:29.685 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:29.686 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:31.566 [DEBUG] [Thread-12539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:39:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:39:33.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:39:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:39:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 39, 14), 27.64, 15.91, 0.0, 21.03, 25.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:39:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:39:14
2025-12-25T13:39:34.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:39:34.433 [DEBUG] [Thread-12540] [transport.py] [_log()] starting thread (client mode): 0xb95d6aa0
2025-12-25T13:39:34.434 [DEBUG] [Thread-12540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:39:34.456 [DEBUG] [Thread-12540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:39:34.456 [INFO] [Thread-12540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:39:34.460 [DEBUG] [Thread-12540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:39:34.460 [DEBUG] [Thread-12540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:39:34.460 [DEBUG] [Thread-12540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:39:34.460 [DEBUG] [Thread-12540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:34.460 [DEBUG] [Thread-12540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] client lang: <none>
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] server lang: <none>
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] kex follows: False
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:39:34.461 [DEBUG] [Thread-12540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:39:34.462 [DEBUG] [Thread-12540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:39:34.462 [DEBUG] [Thread-12540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:39:34.462 [DEBUG] [Thread-12540] [transport.py] [_log()] Compression: none
2025-12-25T13:39:34.462 [DEBUG] [Thread-12540] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:39:34.480 [DEBUG] [Thread-12540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:39:34.481 [DEBUG] [Thread-12540] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:39:34.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:39:34.482 [DEBUG] [Thread-12540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:39:34.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:39:34.484 [DEBUG] [Thread-12540] [transport.py] [_log()] userauth is OK
2025-12-25T13:39:34.484 [DEBUG] [Thread-12540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:39:34.484 [DEBUG] [Thread-12540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:39:34.484 [DEBUG] [Thread-12540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:39:34.484 [DEBUG] [Thread-12540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:39:34.507 [INFO] [Thread-12540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:39:34.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:39:35.235 [DEBUG] [Thread-12540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:39:35.235 [DEBUG] [Thread-12540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:39:35.236 [DEBUG] [Thread-12540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:39:35.276 [DEBUG] [Thread-12540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:39:35.276 [DEBUG] [Thread-12540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:39:35.279 [DEBUG] [Thread-12540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:39:35.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:39:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:39:35.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:39:35.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:39:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:39:35.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:39:35.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:39:35.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.485478 -999.00  +25.60  29.07     21   +1.90 1 1 1 1 1   888    0 24.51 13.38 ----- 29.1 29.1 293.6 35.6 31.4 -26.2 30.8 -26.2 30.9 -22.4 31.4 -23.9
2025-12-25T13:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.485478
2025-12-25T13:39:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:39:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:39:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:39:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:39:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:39:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:39:14', tmtdew=27.64, humidity=15.91, cloud=0.0, wind=21.03, temperature=25.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:39:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:39:35.304 [DEBUG] [Thread-12540] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:39:35.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-25T13:39:35.415 [DEBUG] [Thread-12543] [transport.py] [_log()] starting thread (client mode): 0xb95d4640
2025-12-25T13:39:35.415 [DEBUG] [Thread-12543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:39:35.429 [DEBUG] [Thread-12543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:39:35.429 [INFO] [Thread-12543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] client lang: <none>
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] server lang: <none>
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] kex follows: False
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] Compression: none
2025-12-25T13:39:35.437 [DEBUG] [Thread-12543] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:39:35.494 [DEBUG] [Thread-12543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:39:35.494 [DEBUG] [Thread-12543] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:39:35.495 [DEBUG] [Thread-12543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:39:35.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:39:35.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:39:35.551 [DEBUG] [Thread-12543] [transport.py] [_log()] userauth is OK
2025-12-25T13:39:35.551 [DEBUG] [Thread-12543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:39:35.551 [DEBUG] [Thread-12543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:39:35.551 [DEBUG] [Thread-12543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:39:35.551 [DEBUG] [Thread-12543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:39:35.575 [INFO] [Thread-12543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:39:35.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-25T13:39:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:39:36.414 [DEBUG] [Thread-12543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:39:36.414 [DEBUG] [Thread-12543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:39:36.462 [DEBUG] [Thread-12543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:39:36.462 [DEBUG] [Thread-12543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:39:36.472 [DEBUG] [Thread-12543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:39:36.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:39:36.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-25T13:39:36.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:39:36.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:39:36.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:39:36.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:39:36.508 [DEBUG] [Thread-12543] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:39:46.601 [DEBUG] [Thread-12545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:01.649 [DEBUG] [Thread-12546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:05.163 [DEBUG] [Thread-12547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:06.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:40:06.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:40:06.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-25T13:40:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 39, 46), 28.03, 15.5, 0.0, 21.46, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:40:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:39:46
2025-12-25T13:40:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:40:07.551 [DEBUG] [Thread-12548] [transport.py] [_log()] starting thread (client mode): 0xb9558a00
2025-12-25T13:40:07.551 [DEBUG] [Thread-12548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:40:07.572 [DEBUG] [Thread-12548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:40:07.572 [INFO] [Thread-12548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:07.575 [DEBUG] [Thread-12548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] client lang: <none>
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] server lang: <none>
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] kex follows: False
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] Compression: none
2025-12-25T13:40:07.576 [DEBUG] [Thread-12548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:40:07.590 [DEBUG] [Thread-12548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:40:07.590 [DEBUG] [Thread-12548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:40:07.590 [DEBUG] [Thread-12548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:40:07.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:40:07.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:40:07.591 [DEBUG] [Thread-12548] [transport.py] [_log()] userauth is OK
2025-12-25T13:40:07.591 [DEBUG] [Thread-12548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:40:07.591 [DEBUG] [Thread-12548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:40:07.591 [DEBUG] [Thread-12548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:40:07.591 [DEBUG] [Thread-12548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:40:07.600 [INFO] [Thread-12548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:40:07.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:40:08.477 [DEBUG] [Thread-12548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:40:08.477 [DEBUG] [Thread-12548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:40:08.478 [DEBUG] [Thread-12548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:40:08.520 [DEBUG] [Thread-12548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:40:08.520 [DEBUG] [Thread-12548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:40:08.522 [DEBUG] [Thread-12548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:40:08.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:40:08.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:40:08.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:40:08.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:40:08.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:40:08.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:40:08.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.485825 -999.00  +25.00  21.69     21   +1.80 1 1 1 1 1   888    0 24.66 6.68 ----- 21.7 21.7 315.8 34.5 31.3 -25.6 30.7 -25.5 30.8 -22.7 31.5 -22.8
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.485825
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:40:08.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:39:46', tmtdew=28.03, humidity=15.5, cloud=0.0, wind=21.46, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:39:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:40:08.544 [DEBUG] [Thread-12548] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:40:08.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-25T13:40:08.625 [DEBUG] [Thread-12551] [transport.py] [_log()] starting thread (client mode): 0xb9558970
2025-12-25T13:40:08.626 [DEBUG] [Thread-12551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:40:08.639 [DEBUG] [Thread-12551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:40:08.639 [INFO] [Thread-12551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] client lang: <none>
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] server lang: <none>
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] kex follows: False
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] Compression: none
2025-12-25T13:40:08.647 [DEBUG] [Thread-12551] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:40:08.707 [DEBUG] [Thread-12551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:40:08.707 [DEBUG] [Thread-12551] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:40:08.707 [DEBUG] [Thread-12551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:40:08.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:40:08.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:40:08.764 [DEBUG] [Thread-12551] [transport.py] [_log()] userauth is OK
2025-12-25T13:40:08.764 [DEBUG] [Thread-12551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:40:08.764 [DEBUG] [Thread-12551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:40:08.764 [DEBUG] [Thread-12551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:40:08.765 [DEBUG] [Thread-12551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:40:08.793 [INFO] [Thread-12551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:40:08.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-25T13:40:08.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:40:09.626 [DEBUG] [Thread-12551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:40:09.626 [DEBUG] [Thread-12551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:40:09.674 [DEBUG] [Thread-12551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:40:09.674 [DEBUG] [Thread-12551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:40:09.683 [DEBUG] [Thread-12551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:40:09.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:40:09.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-25T13:40:09.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-25T13:40:09.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:40:09.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:40:09.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:40:09.721 [DEBUG] [Thread-12551] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:40:16.682 [DEBUG] [Thread-12553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:29.826 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:29.827 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:31.735 [DEBUG] [Thread-12554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:40:39.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:40:39.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:40:39.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-25T13:40:40.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 40, 18), 27.66, 15.88, 0.0, 19.39, 25.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:40:40.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:40:18
2025-12-25T13:40:40.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:40:40.717 [DEBUG] [Thread-12555] [transport.py] [_log()] starting thread (client mode): 0xb9591090
2025-12-25T13:40:40.717 [DEBUG] [Thread-12555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:40:40.737 [DEBUG] [Thread-12555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:40:40.738 [INFO] [Thread-12555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] client lang: <none>
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] server lang: <none>
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] kex follows: False
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] Compression: none
2025-12-25T13:40:40.739 [DEBUG] [Thread-12555] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:40:40.755 [DEBUG] [Thread-12555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:40:40.755 [DEBUG] [Thread-12555] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:40:40.756 [DEBUG] [Thread-12555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:40:40.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:40:40.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:40:40.758 [DEBUG] [Thread-12555] [transport.py] [_log()] userauth is OK
2025-12-25T13:40:40.758 [DEBUG] [Thread-12555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:40:40.758 [DEBUG] [Thread-12555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:40:40.758 [DEBUG] [Thread-12555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:40:40.758 [DEBUG] [Thread-12555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:40:40.785 [INFO] [Thread-12555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:40:40.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:40:41.370 [DEBUG] [Thread-12555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:40:41.371 [DEBUG] [Thread-12555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:40:41.371 [DEBUG] [Thread-12555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:40:41.412 [DEBUG] [Thread-12555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:40:41.413 [DEBUG] [Thread-12555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:40:41.416 [DEBUG] [Thread-12555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:40:41.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:40:41.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:40:41.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:40:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:40:41.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:40:41.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:40:41.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:40:41.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:40:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:40:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.486173 -999.00  +25.20  17.74     22   +2.10 1 2 1 1 1   888    0 24.12 -1.46 ----- 17.7 17.7 310.4 24.9 31.6 -24.7 30.9 -24.2 30.9 -21.2 31.7 -22.3
2025-12-25T13:40:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:40:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:40:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.486173
2025-12-25T13:40:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:40:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:40:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:40:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:40:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T13:40:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:40:18', tmtdew=27.66, humidity=15.88, cloud=0.0, wind=19.39, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:40:05.347', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:40:41.442 [DEBUG] [Thread-12555] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:40:41.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-25T13:40:41.538 [DEBUG] [Thread-12558] [transport.py] [_log()] starting thread (client mode): 0xb95905b0
2025-12-25T13:40:41.538 [DEBUG] [Thread-12558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:40:41.552 [DEBUG] [Thread-12558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:40:41.552 [INFO] [Thread-12558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] client lang: <none>
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] server lang: <none>
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] kex follows: False
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] Compression: none
2025-12-25T13:40:41.560 [DEBUG] [Thread-12558] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:40:41.618 [DEBUG] [Thread-12558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:40:41.618 [DEBUG] [Thread-12558] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:40:41.618 [DEBUG] [Thread-12558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:40:41.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:40:41.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:40:41.675 [DEBUG] [Thread-12558] [transport.py] [_log()] userauth is OK
2025-12-25T13:40:41.675 [DEBUG] [Thread-12558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:40:41.675 [DEBUG] [Thread-12558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:40:41.675 [DEBUG] [Thread-12558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:40:41.675 [DEBUG] [Thread-12558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:40:41.689 [INFO] [Thread-12558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:40:41.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:40:41.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:40:42.502 [DEBUG] [Thread-12558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:40:42.502 [DEBUG] [Thread-12558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:40:42.549 [DEBUG] [Thread-12558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:40:42.549 [DEBUG] [Thread-12558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:40:42.557 [DEBUG] [Thread-12558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:40:42.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:40:42.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-25T13:40:42.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-25T13:40:42.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:40:42.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:40:42.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:40:42.589 [DEBUG] [Thread-12558] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:40:46.766 [DEBUG] [Thread-12560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:01.808 [DEBUG] [Thread-12561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:05.207 [DEBUG] [Thread-12562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:12.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:41:12.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:41:12.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-25T13:41:13.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 40, 50), 27.16, 16.69, 0.0, 29.98, 25.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:41:13.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:40:50
2025-12-25T13:41:13.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:41:13.561 [DEBUG] [Thread-12563] [transport.py] [_log()] starting thread (client mode): 0xb6b288b0
2025-12-25T13:41:13.561 [DEBUG] [Thread-12563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:41:13.578 [DEBUG] [Thread-12563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:41:13.578 [INFO] [Thread-12563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:41:13.581 [DEBUG] [Thread-12563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:41:13.581 [DEBUG] [Thread-12563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:41:13.581 [DEBUG] [Thread-12563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] client lang: <none>
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] server lang: <none>
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] kex follows: False
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] Compression: none
2025-12-25T13:41:13.582 [DEBUG] [Thread-12563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:41:13.600 [DEBUG] [Thread-12563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:41:13.601 [DEBUG] [Thread-12563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:41:13.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:41:13.603 [DEBUG] [Thread-12563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:41:13.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:41:13.605 [DEBUG] [Thread-12563] [transport.py] [_log()] userauth is OK
2025-12-25T13:41:13.606 [DEBUG] [Thread-12563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:41:13.606 [DEBUG] [Thread-12563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:41:13.606 [DEBUG] [Thread-12563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:41:13.606 [DEBUG] [Thread-12563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:41:13.629 [INFO] [Thread-12563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:41:13.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:41:14.299 [DEBUG] [Thread-12563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:41:14.299 [DEBUG] [Thread-12563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:41:14.300 [DEBUG] [Thread-12563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:41:14.340 [DEBUG] [Thread-12563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:41:14.340 [DEBUG] [Thread-12563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:41:14.344 [DEBUG] [Thread-12563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:41:14.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:41:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:41:14.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:41:14.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:41:14.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:41:14.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:41:14.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:41:14.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:41:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:41:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.486520 -999.00  +26.20  22.02     21   +2.70 1 1 1 1 1   888    0 23.52 -7.68 ----- 22.0 22.0 354.0 27.2 31.7 -24.1 31.1 -25.2 31.1 -21.5 31.7 -22.3
2025-12-25T13:41:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:41:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:41:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.486520
2025-12-25T13:41:14.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:41:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:41:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:41:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:41:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:41:14.375 [DEBUG] [Thread-12563] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:41:14.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:40:50', tmtdew=27.16, humidity=16.69, cloud=0.0, wind=29.98, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:40:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:41:14.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-25T13:41:14.469 [DEBUG] [Thread-12566] [transport.py] [_log()] starting thread (client mode): 0xb9579ff0
2025-12-25T13:41:14.469 [DEBUG] [Thread-12566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:41:14.484 [DEBUG] [Thread-12566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:41:14.484 [INFO] [Thread-12566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:41:14.492 [DEBUG] [Thread-12566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] client lang: <none>
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] server lang: <none>
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] kex follows: False
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] Compression: none
2025-12-25T13:41:14.493 [DEBUG] [Thread-12566] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:41:14.551 [DEBUG] [Thread-12566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:41:14.552 [DEBUG] [Thread-12566] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:41:14.552 [DEBUG] [Thread-12566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:41:14.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:41:14.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:41:14.608 [DEBUG] [Thread-12566] [transport.py] [_log()] userauth is OK
2025-12-25T13:41:14.608 [DEBUG] [Thread-12566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:41:14.608 [DEBUG] [Thread-12566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:41:14.609 [DEBUG] [Thread-12566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:41:14.609 [DEBUG] [Thread-12566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:41:14.627 [INFO] [Thread-12566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:41:14.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-25T13:41:14.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:41:15.463 [DEBUG] [Thread-12566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:41:15.463 [DEBUG] [Thread-12566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:41:15.513 [DEBUG] [Thread-12566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:41:15.513 [DEBUG] [Thread-12566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:41:15.522 [DEBUG] [Thread-12566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:41:15.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:41:15.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-25T13:41:15.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-25T13:41:15.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:41:15.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:41:15.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:41:15.557 [DEBUG] [Thread-12566] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:41:16.846 [DEBUG] [Thread-12568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:29.965 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:29.967 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:31.896 [DEBUG] [Thread-12569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:41:45.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:41:45.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-25T13:41:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 41, 22), 27.21, 16.64, 0.0, 27.21, 25.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:41:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:41:22
2025-12-25T13:41:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:41:46.562 [DEBUG] [Thread-12570] [transport.py] [_log()] starting thread (client mode): 0xb957a5f0
2025-12-25T13:41:46.562 [DEBUG] [Thread-12570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:41:46.582 [DEBUG] [Thread-12570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:41:46.582 [INFO] [Thread-12570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:41:46.585 [DEBUG] [Thread-12570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] client lang: <none>
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] server lang: <none>
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] kex follows: False
2025-12-25T13:41:46.586 [DEBUG] [Thread-12570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:41:46.587 [DEBUG] [Thread-12570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:41:46.587 [DEBUG] [Thread-12570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:41:46.587 [DEBUG] [Thread-12570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:41:46.587 [DEBUG] [Thread-12570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:41:46.587 [DEBUG] [Thread-12570] [transport.py] [_log()] Compression: none
2025-12-25T13:41:46.587 [DEBUG] [Thread-12570] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:41:46.606 [DEBUG] [Thread-12570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:41:46.607 [DEBUG] [Thread-12570] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:41:46.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:41:46.608 [DEBUG] [Thread-12570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:41:46.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:41:46.610 [DEBUG] [Thread-12570] [transport.py] [_log()] userauth is OK
2025-12-25T13:41:46.610 [DEBUG] [Thread-12570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:41:46.610 [DEBUG] [Thread-12570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:41:46.610 [DEBUG] [Thread-12570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:41:46.610 [DEBUG] [Thread-12570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:41:46.630 [INFO] [Thread-12570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:41:46.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:41:46.933 [DEBUG] [Thread-12572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:41:47.355 [DEBUG] [Thread-12570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:41:47.356 [DEBUG] [Thread-12570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:41:47.356 [DEBUG] [Thread-12570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:41:47.397 [DEBUG] [Thread-12570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:41:47.398 [DEBUG] [Thread-12570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:41:47.401 [DEBUG] [Thread-12570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:41:47.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:41:47.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:41:47.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:41:47.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:41:47.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:41:47.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:41:47.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:41:47.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:41:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:41:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.486867 -999.00  +26.20  34.34     21   +2.40 1 1 2 1 1   888    0 23.93 -9.84 ----- 34.3 34.3 318.2 43.9 31.7 -24.7 31.0 -26.8 31.1 -22.8 31.8 -23.5
2025-12-25T13:41:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:41:47.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:41:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.486867
2025-12-25T13:41:47.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:41:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:41:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:41:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:41:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:41:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:41:22', tmtdew=27.21, humidity=16.64, cloud=0.0, wind=27.21, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:41:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:41:47.428 [DEBUG] [Thread-12570] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:41:47.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-25T13:41:47.523 [DEBUG] [Thread-12574] [transport.py] [_log()] starting thread (client mode): 0xb95d6e30
2025-12-25T13:41:47.524 [DEBUG] [Thread-12574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:41:47.539 [DEBUG] [Thread-12574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:41:47.539 [INFO] [Thread-12574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] client lang: <none>
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] server lang: <none>
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] kex follows: False
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:41:47.547 [DEBUG] [Thread-12574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:41:47.548 [DEBUG] [Thread-12574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:41:47.548 [DEBUG] [Thread-12574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:41:47.548 [DEBUG] [Thread-12574] [transport.py] [_log()] Compression: none
2025-12-25T13:41:47.548 [DEBUG] [Thread-12574] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:41:47.608 [DEBUG] [Thread-12574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:41:47.608 [DEBUG] [Thread-12574] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:41:47.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:41:47.610 [DEBUG] [Thread-12574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:41:47.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:41:47.664 [DEBUG] [Thread-12574] [transport.py] [_log()] userauth is OK
2025-12-25T13:41:47.665 [DEBUG] [Thread-12574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:41:47.665 [DEBUG] [Thread-12574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:41:47.665 [DEBUG] [Thread-12574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:41:47.665 [DEBUG] [Thread-12574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:41:47.684 [INFO] [Thread-12574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:41:47.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-25T13:41:47.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:41:48.517 [DEBUG] [Thread-12574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:41:48.517 [DEBUG] [Thread-12574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:41:48.564 [DEBUG] [Thread-12574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:41:48.565 [DEBUG] [Thread-12574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:41:48.573 [DEBUG] [Thread-12574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:41:48.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:41:48.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-25T13:41:48.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-25T13:41:48.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:41:48.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:41:48.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:41:48.607 [DEBUG] [Thread-12574] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:42:01.965 [DEBUG] [Thread-12576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:05.256 [DEBUG] [Thread-12577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:17.010 [DEBUG] [Thread-12578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:18.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:42:18.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:42:18.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:42:19.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 41, 54), 27.36, 16.23, 0.0, 27.47, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:42:19.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:41:54
2025-12-25T13:42:19.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:42:19.614 [DEBUG] [Thread-12579] [transport.py] [_log()] starting thread (client mode): 0xb95b3130
2025-12-25T13:42:19.614 [DEBUG] [Thread-12579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:42:19.634 [DEBUG] [Thread-12579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:42:19.634 [INFO] [Thread-12579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:42:19.637 [DEBUG] [Thread-12579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:42:19.637 [DEBUG] [Thread-12579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:42:19.637 [DEBUG] [Thread-12579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:42:19.637 [DEBUG] [Thread-12579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] client lang: <none>
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] server lang: <none>
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] kex follows: False
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] Compression: none
2025-12-25T13:42:19.638 [DEBUG] [Thread-12579] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:42:19.655 [DEBUG] [Thread-12579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:42:19.656 [DEBUG] [Thread-12579] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:42:19.656 [DEBUG] [Thread-12579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:42:19.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:42:19.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:42:19.658 [DEBUG] [Thread-12579] [transport.py] [_log()] userauth is OK
2025-12-25T13:42:19.658 [DEBUG] [Thread-12579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:42:19.658 [DEBUG] [Thread-12579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:42:19.658 [DEBUG] [Thread-12579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:42:19.658 [DEBUG] [Thread-12579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:42:19.682 [INFO] [Thread-12579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:42:19.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:42:20.306 [DEBUG] [Thread-12579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:42:20.306 [DEBUG] [Thread-12579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:42:20.307 [DEBUG] [Thread-12579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:42:20.348 [DEBUG] [Thread-12579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:42:20.348 [DEBUG] [Thread-12579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:42:20.351 [DEBUG] [Thread-12579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:42:20.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:42:20.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:42:20.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:42:20.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:42:20.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:42:20.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:42:20.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:42:20.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:42:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:42:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.487215 -999.00  +26.30  27.39     21   +2.80 1 1 1 1 1   888    0 23.74 -15.18 ----- 27.4 27.4 299.6 46.2 31.6 -24.7 31.1 -24.8 31.0 -23.7 31.8 -23.7
2025-12-25T13:42:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:42:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:42:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.487215
2025-12-25T13:42:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:42:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:42:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:42:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:42:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:42:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:41:54', tmtdew=27.36, humidity=16.23, cloud=0.0, wind=27.47, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:41:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:42:20.379 [DEBUG] [Thread-12579] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:42:20.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:42:20.472 [DEBUG] [Thread-12582] [transport.py] [_log()] starting thread (client mode): 0xb95d5000
2025-12-25T13:42:20.472 [DEBUG] [Thread-12582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:42:20.487 [DEBUG] [Thread-12582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:42:20.487 [INFO] [Thread-12582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:42:20.494 [DEBUG] [Thread-12582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] client lang: <none>
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] server lang: <none>
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] kex follows: False
2025-12-25T13:42:20.495 [DEBUG] [Thread-12582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:42:20.496 [DEBUG] [Thread-12582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:42:20.496 [DEBUG] [Thread-12582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:42:20.496 [DEBUG] [Thread-12582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:42:20.496 [DEBUG] [Thread-12582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:42:20.496 [DEBUG] [Thread-12582] [transport.py] [_log()] Compression: none
2025-12-25T13:42:20.496 [DEBUG] [Thread-12582] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:42:20.551 [DEBUG] [Thread-12582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:42:20.552 [DEBUG] [Thread-12582] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:42:20.552 [DEBUG] [Thread-12582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:42:20.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:42:20.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:42:20.608 [DEBUG] [Thread-12582] [transport.py] [_log()] userauth is OK
2025-12-25T13:42:20.608 [DEBUG] [Thread-12582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:42:20.608 [DEBUG] [Thread-12582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:42:20.608 [DEBUG] [Thread-12582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:42:20.608 [DEBUG] [Thread-12582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:42:20.625 [INFO] [Thread-12582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:42:20.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:42:20.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:42:21.503 [DEBUG] [Thread-12582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:42:21.503 [DEBUG] [Thread-12582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:42:21.551 [DEBUG] [Thread-12582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:42:21.552 [DEBUG] [Thread-12582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:42:21.560 [DEBUG] [Thread-12582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:42:21.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:42:21.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:42:21.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:42:21.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:42:21.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:42:21.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:42:21.599 [DEBUG] [Thread-12582] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:42:30.106 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:30.108 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:32.046 [DEBUG] [Thread-12584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:47.093 [DEBUG] [Thread-12585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:42:51.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:42:51.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:42:51.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-25T13:42:52.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 42, 26), 27.54, 16.11, 0.0, 32.8, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:42:52.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:42:26
2025-12-25T13:42:52.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:42:52.592 [DEBUG] [Thread-12586] [transport.py] [_log()] starting thread (client mode): 0xb95b2b60
2025-12-25T13:42:52.592 [DEBUG] [Thread-12586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:42:52.611 [DEBUG] [Thread-12586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:42:52.612 [INFO] [Thread-12586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:42:52.613 [DEBUG] [Thread-12586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] client lang: <none>
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] server lang: <none>
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] kex follows: False
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] Compression: none
2025-12-25T13:42:52.614 [DEBUG] [Thread-12586] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:42:52.628 [DEBUG] [Thread-12586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:42:52.629 [DEBUG] [Thread-12586] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:42:52.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:42:52.630 [DEBUG] [Thread-12586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:42:52.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:42:52.632 [DEBUG] [Thread-12586] [transport.py] [_log()] userauth is OK
2025-12-25T13:42:52.632 [DEBUG] [Thread-12586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:42:52.632 [DEBUG] [Thread-12586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:42:52.632 [DEBUG] [Thread-12586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:42:52.632 [DEBUG] [Thread-12586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:42:52.657 [INFO] [Thread-12586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:42:52.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:42:53.393 [DEBUG] [Thread-12586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:42:53.393 [DEBUG] [Thread-12586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:42:53.393 [DEBUG] [Thread-12586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:42:53.434 [DEBUG] [Thread-12586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:42:53.434 [DEBUG] [Thread-12586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:42:53.437 [DEBUG] [Thread-12586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:42:53.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:42:53.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:42:53.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:42:53.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:42:53.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:42:53.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:42:53.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:42:53.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:42:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:42:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.487562 -999.00  +26.40  34.48     20   +2.10 1 1 2 1 1   888    0 23.47 -22.11 ----- 34.5 34.5 311.6 50.9 31.4 -25.6 30.9 -25.2 30.9 -26.5 31.8 -23.0
2025-12-25T13:42:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:42:53.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:42:53.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.487562
2025-12-25T13:42:53.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:42:53.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:42:53.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:42:53.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:42:53.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:42:53.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:42:26', tmtdew=27.54, humidity=16.11, cloud=0.0, wind=32.8, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:42:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:42:53.457 [DEBUG] [Thread-12586] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:42:53.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-25T13:42:53.551 [DEBUG] [Thread-12589] [transport.py] [_log()] starting thread (client mode): 0xb95b0970
2025-12-25T13:42:53.551 [DEBUG] [Thread-12589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:42:53.567 [DEBUG] [Thread-12589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:42:53.568 [INFO] [Thread-12589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:42:53.575 [DEBUG] [Thread-12589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] client lang: <none>
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] server lang: <none>
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] kex follows: False
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] Compression: none
2025-12-25T13:42:53.576 [DEBUG] [Thread-12589] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:42:53.631 [DEBUG] [Thread-12589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:42:53.632 [DEBUG] [Thread-12589] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:42:53.633 [DEBUG] [Thread-12589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:42:53.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:42:53.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:42:53.688 [DEBUG] [Thread-12589] [transport.py] [_log()] userauth is OK
2025-12-25T13:42:53.689 [DEBUG] [Thread-12589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:42:53.689 [DEBUG] [Thread-12589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:42:53.689 [DEBUG] [Thread-12589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:42:53.689 [DEBUG] [Thread-12589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:42:53.708 [INFO] [Thread-12589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:42:53.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-25T13:42:53.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:42:54.554 [DEBUG] [Thread-12589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:42:54.554 [DEBUG] [Thread-12589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:42:54.602 [DEBUG] [Thread-12589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:42:54.602 [DEBUG] [Thread-12589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:42:54.611 [DEBUG] [Thread-12589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:42:54.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:42:54.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:42:54.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:42:54.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:42:54.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:42:54.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:42:54.648 [DEBUG] [Thread-12589] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:43:02.128 [DEBUG] [Thread-12591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:05.307 [DEBUG] [Thread-12592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:17.182 [DEBUG] [Thread-12593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:24.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:43:24.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:43:24.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-25T13:43:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 42, 58), 28.0, 15.76, 0.0, 37.48, 26.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:43:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:42:58
2025-12-25T13:43:25.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:43:25.659 [DEBUG] [Thread-12594] [transport.py] [_log()] starting thread (client mode): 0xb6b28bb0
2025-12-25T13:43:25.659 [DEBUG] [Thread-12594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:43:25.679 [DEBUG] [Thread-12594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:43:25.679 [INFO] [Thread-12594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:43:25.682 [DEBUG] [Thread-12594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:43:25.682 [DEBUG] [Thread-12594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] client lang: <none>
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] server lang: <none>
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] kex follows: False
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] Compression: none
2025-12-25T13:43:25.683 [DEBUG] [Thread-12594] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:43:25.705 [DEBUG] [Thread-12594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:43:25.705 [DEBUG] [Thread-12594] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:43:25.706 [DEBUG] [Thread-12594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:43:25.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:43:25.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:43:25.749 [DEBUG] [Thread-12594] [transport.py] [_log()] userauth is OK
2025-12-25T13:43:25.749 [DEBUG] [Thread-12594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:43:25.749 [DEBUG] [Thread-12594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:43:25.749 [DEBUG] [Thread-12594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:43:25.749 [DEBUG] [Thread-12594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:43:25.768 [INFO] [Thread-12594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:43:25.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:43:26.383 [DEBUG] [Thread-12594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:43:26.383 [DEBUG] [Thread-12594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:43:26.383 [DEBUG] [Thread-12594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:43:26.424 [DEBUG] [Thread-12594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:43:26.424 [DEBUG] [Thread-12594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:43:26.428 [DEBUG] [Thread-12594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:43:26.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:43:26.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:43:26.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:43:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:43:26.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:43:26.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:43:26.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:43:26.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:43:26.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:43:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.488256 -999.00  +26.20  39.95     21   +2.20 1 1 2 1 1   888    0 23.31 -35.95 ----- 40.0 40.0 313.0 46.7 31.4 -25.7 30.9 -25.8 30.7 -26.9 31.7 -24.3
2025-12-25T13:43:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:43:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:43:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.488256
2025-12-25T13:43:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:43:26.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:43:26.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:43:26.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:43:26.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:43:26.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:42:58', tmtdew=28.0, humidity=15.76, cloud=0.0, wind=37.48, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:43:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:43:26.456 [DEBUG] [Thread-12594] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:43:26.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-25T13:43:26.549 [DEBUG] [Thread-12597] [transport.py] [_log()] starting thread (client mode): 0xb9590880
2025-12-25T13:43:26.549 [DEBUG] [Thread-12597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:43:26.564 [DEBUG] [Thread-12597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:43:26.564 [INFO] [Thread-12597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:43:26.571 [DEBUG] [Thread-12597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:43:26.571 [DEBUG] [Thread-12597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:43:26.571 [DEBUG] [Thread-12597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:43:26.571 [DEBUG] [Thread-12597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] client lang: <none>
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] server lang: <none>
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] kex follows: False
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] Compression: none
2025-12-25T13:43:26.572 [DEBUG] [Thread-12597] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:43:26.631 [DEBUG] [Thread-12597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:43:26.631 [DEBUG] [Thread-12597] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:43:26.632 [DEBUG] [Thread-12597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:43:26.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:43:26.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:43:26.688 [DEBUG] [Thread-12597] [transport.py] [_log()] userauth is OK
2025-12-25T13:43:26.688 [DEBUG] [Thread-12597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:43:26.688 [DEBUG] [Thread-12597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:43:26.688 [DEBUG] [Thread-12597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:43:26.688 [DEBUG] [Thread-12597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:43:26.706 [INFO] [Thread-12597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:43:26.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-25T13:43:26.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:43:27.557 [DEBUG] [Thread-12597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:43:27.557 [DEBUG] [Thread-12597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:43:27.605 [DEBUG] [Thread-12597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:43:27.605 [DEBUG] [Thread-12597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:43:27.615 [DEBUG] [Thread-12597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:43:27.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:43:27.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-25T13:43:27.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-25T13:43:27.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:43:27.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:43:27.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:43:27.651 [DEBUG] [Thread-12597] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:43:30.245 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:30.247 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:32.212 [DEBUG] [Thread-12599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:47.253 [DEBUG] [Thread-12600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:43:57.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:43:57.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:43:57.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:43:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 43, 30), 28.44, 15.33, 0.0, 38.36, 26.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:43:58.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:43:30
2025-12-25T13:43:58.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:43:58.707 [DEBUG] [Thread-12601] [transport.py] [_log()] starting thread (client mode): 0xb9593460
2025-12-25T13:43:58.707 [DEBUG] [Thread-12601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:43:58.731 [DEBUG] [Thread-12601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:43:58.731 [INFO] [Thread-12601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:43:58.732 [DEBUG] [Thread-12601] [transport.py] [_log()] client lang: <none>
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] server lang: <none>
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] kex follows: False
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] Compression: none
2025-12-25T13:43:58.733 [DEBUG] [Thread-12601] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:43:58.743 [DEBUG] [Thread-12601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:43:58.743 [DEBUG] [Thread-12601] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:43:58.743 [DEBUG] [Thread-12601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:43:58.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:43:58.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:43:58.744 [DEBUG] [Thread-12601] [transport.py] [_log()] userauth is OK
2025-12-25T13:43:58.744 [DEBUG] [Thread-12601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:43:58.744 [DEBUG] [Thread-12601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:43:58.744 [DEBUG] [Thread-12601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:43:58.744 [DEBUG] [Thread-12601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:43:58.757 [INFO] [Thread-12601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:43:58.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:43:59.381 [DEBUG] [Thread-12601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:43:59.382 [DEBUG] [Thread-12601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:43:59.382 [DEBUG] [Thread-12601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:43:59.423 [DEBUG] [Thread-12601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:43:59.423 [DEBUG] [Thread-12601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:43:59.425 [DEBUG] [Thread-12601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:43:59.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:43:59.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:43:59.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:43:59.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:43:59.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:43:59.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:43:59.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.488603 -999.00  +26.20  32.79     20   +1.80 1 1 2 1 1   888    0 23.24 -37.41 ----- 32.8 32.8 299.8 52.1 31.4 -26.8 30.8 -26.6 30.9 -23.7 31.6 -23.7
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.488603
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:43:59.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:43:30', tmtdew=28.44, humidity=15.33, cloud=0.0, wind=38.36, temperature=26.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:43:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:43:59.438 [DEBUG] [Thread-12601] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:43:59.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-25T13:43:59.522 [DEBUG] [Thread-12604] [transport.py] [_log()] starting thread (client mode): 0xb9578ac0
2025-12-25T13:43:59.523 [DEBUG] [Thread-12604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:43:59.542 [DEBUG] [Thread-12604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:43:59.542 [INFO] [Thread-12604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:43:59.549 [DEBUG] [Thread-12604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] client lang: <none>
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] server lang: <none>
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] kex follows: False
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] Compression: none
2025-12-25T13:43:59.550 [DEBUG] [Thread-12604] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:43:59.606 [DEBUG] [Thread-12604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:43:59.606 [DEBUG] [Thread-12604] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:43:59.607 [DEBUG] [Thread-12604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:43:59.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:43:59.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:43:59.664 [DEBUG] [Thread-12604] [transport.py] [_log()] userauth is OK
2025-12-25T13:43:59.664 [DEBUG] [Thread-12604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:43:59.664 [DEBUG] [Thread-12604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:43:59.664 [DEBUG] [Thread-12604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:43:59.664 [DEBUG] [Thread-12604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:43:59.678 [INFO] [Thread-12604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:43:59.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-25T13:43:59.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:44:00.520 [DEBUG] [Thread-12604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:44:00.521 [DEBUG] [Thread-12604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:44:00.569 [DEBUG] [Thread-12604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:44:00.569 [DEBUG] [Thread-12604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:44:00.577 [DEBUG] [Thread-12604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:44:00.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:44:00.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-25T13:44:00.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-25T13:44:00.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:44:00.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:44:00.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:44:00.608 [DEBUG] [Thread-12604] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:44:02.285 [DEBUG] [Thread-12606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:44:05.373 [DEBUG] [Thread-12607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:44:17.321 [DEBUG] [Thread-12608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:44:30.385 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:44:30.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:44:30.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:44:30.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:44:30.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-25T13:44:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 44, 2), 28.86, 14.93, 0.0, 36.88, 26.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:44:31.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:44:02
2025-12-25T13:44:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:44:31.622 [DEBUG] [Thread-12609] [transport.py] [_log()] starting thread (client mode): 0xb95b3a90
2025-12-25T13:44:31.622 [DEBUG] [Thread-12609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:44:31.639 [DEBUG] [Thread-12609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:44:31.640 [INFO] [Thread-12609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] client lang: <none>
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] server lang: <none>
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] kex follows: False
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:44:31.643 [DEBUG] [Thread-12609] [transport.py] [_log()] Compression: none
2025-12-25T13:44:31.644 [DEBUG] [Thread-12609] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:44:31.662 [DEBUG] [Thread-12609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:44:31.662 [DEBUG] [Thread-12609] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:44:31.663 [DEBUG] [Thread-12609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:44:31.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:44:31.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:44:31.665 [DEBUG] [Thread-12609] [transport.py] [_log()] userauth is OK
2025-12-25T13:44:31.665 [DEBUG] [Thread-12609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:44:31.665 [DEBUG] [Thread-12609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:44:31.665 [DEBUG] [Thread-12609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:44:31.665 [DEBUG] [Thread-12609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:44:31.680 [INFO] [Thread-12609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:44:31.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:44:32.291 [DEBUG] [Thread-12609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:44:32.292 [DEBUG] [Thread-12609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:44:32.292 [DEBUG] [Thread-12609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:44:32.333 [DEBUG] [Thread-12609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:44:32.333 [DEBUG] [Thread-12609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:44:32.337 [DEBUG] [Thread-12609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:44:32.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:44:32.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:44:32.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:44:32.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:44:32.357 [DEBUG] [Thread-12612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:44:32.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:44:32.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:44:32.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:44:32.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:44:32.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:44:32.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.488951 -999.00  +25.80  30.77     21   +1.90 1 1 2 1 1   888    0 22.55 -39.86 ----- 30.8 30.8 305.9 49.1 31.2 -26.0 30.7 -27.0 30.7 -27.2 31.6 -24.5
2025-12-25T13:44:32.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:44:32.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:44:32.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.488951
2025-12-25T13:44:32.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:44:32.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:44:32.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:44:32.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:44:32.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:44:32.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:44:02', tmtdew=28.86, humidity=14.93, cloud=0.0, wind=36.88, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:44:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:44:32.364 [DEBUG] [Thread-12609] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:44:32.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-25T13:44:32.460 [DEBUG] [Thread-12613] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-25T13:44:32.460 [DEBUG] [Thread-12613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:44:32.475 [DEBUG] [Thread-12613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:44:32.475 [INFO] [Thread-12613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] client lang: <none>
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] server lang: <none>
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] kex follows: False
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] Compression: none
2025-12-25T13:44:32.483 [DEBUG] [Thread-12613] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:44:32.540 [DEBUG] [Thread-12613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:44:32.541 [DEBUG] [Thread-12613] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:44:32.541 [DEBUG] [Thread-12613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:44:32.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:44:32.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:44:32.596 [DEBUG] [Thread-12613] [transport.py] [_log()] userauth is OK
2025-12-25T13:44:32.597 [DEBUG] [Thread-12613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:44:32.597 [DEBUG] [Thread-12613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:44:32.597 [DEBUG] [Thread-12613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:44:32.597 [DEBUG] [Thread-12613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:44:32.622 [INFO] [Thread-12613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:44:32.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-25T13:44:32.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:44:33.509 [DEBUG] [Thread-12613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:44:33.509 [DEBUG] [Thread-12613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:44:33.557 [DEBUG] [Thread-12613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:44:33.557 [DEBUG] [Thread-12613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:44:33.567 [DEBUG] [Thread-12613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:44:33.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:44:33.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-25T13:44:33.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-25T13:44:33.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:44:33.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:44:33.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:44:33.603 [DEBUG] [Thread-12613] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:44:47.390 [DEBUG] [Thread-12615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:02.448 [DEBUG] [Thread-12616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:03.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:45:03.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:45:03.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-25T13:45:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 44, 34), 28.14, 15.6, 0.0, 39.17, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:45:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:44:34
2025-12-25T13:45:04.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:45:04.602 [DEBUG] [Thread-12617] [transport.py] [_log()] starting thread (client mode): 0xb6b2a860
2025-12-25T13:45:04.602 [DEBUG] [Thread-12617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:45:04.623 [DEBUG] [Thread-12617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:45:04.623 [INFO] [Thread-12617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] client lang: <none>
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] server lang: <none>
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] kex follows: False
2025-12-25T13:45:04.627 [DEBUG] [Thread-12617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:45:04.628 [DEBUG] [Thread-12617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:45:04.628 [DEBUG] [Thread-12617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:45:04.628 [DEBUG] [Thread-12617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:45:04.628 [DEBUG] [Thread-12617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:45:04.628 [DEBUG] [Thread-12617] [transport.py] [_log()] Compression: none
2025-12-25T13:45:04.628 [DEBUG] [Thread-12617] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:45:04.646 [DEBUG] [Thread-12617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:45:04.647 [DEBUG] [Thread-12617] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:45:04.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:45:04.648 [DEBUG] [Thread-12617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:45:04.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:45:04.649 [DEBUG] [Thread-12617] [transport.py] [_log()] userauth is OK
2025-12-25T13:45:04.649 [DEBUG] [Thread-12617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:45:04.649 [DEBUG] [Thread-12617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:45:04.650 [DEBUG] [Thread-12617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:45:04.650 [DEBUG] [Thread-12617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:45:04.664 [INFO] [Thread-12617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:45:04.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:45:05.422 [DEBUG] [Thread-12619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:05.562 [DEBUG] [Thread-12617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:45:05.563 [DEBUG] [Thread-12617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:45:05.563 [DEBUG] [Thread-12617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:45:05.605 [DEBUG] [Thread-12617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:45:05.605 [DEBUG] [Thread-12617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:45:05.607 [DEBUG] [Thread-12617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:45:05.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:45:05.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:45:05.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:45:05.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:45:05.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:45:05.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:45:05.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:45:05.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:45:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:45:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.489298 -999.00  +25.50  27.63     21   +1.80 1 1 1 1 1   888    0 22.84 -43.10 ----- 27.6 27.6 311.2 38.8 31.1 -26.5 30.6 -25.8 30.4 -26.6 31.4 -24.5
2025-12-25T13:45:05.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:45:05.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:45:05.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.489298
2025-12-25T13:45:05.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:45:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:45:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:45:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:45:05.627 [DEBUG] [Thread-12617] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:45:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:45:05.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:44:34', tmtdew=28.14, humidity=15.6, cloud=0.0, wind=39.17, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:44:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:45:05.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-25T13:45:05.719 [DEBUG] [Thread-12621] [transport.py] [_log()] starting thread (client mode): 0xb95b3a90
2025-12-25T13:45:05.719 [DEBUG] [Thread-12621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:45:05.734 [DEBUG] [Thread-12621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:45:05.734 [INFO] [Thread-12621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] client lang: <none>
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] server lang: <none>
2025-12-25T13:45:05.742 [DEBUG] [Thread-12621] [transport.py] [_log()] kex follows: False
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] Compression: none
2025-12-25T13:45:05.743 [DEBUG] [Thread-12621] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:45:05.805 [DEBUG] [Thread-12621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:45:05.806 [DEBUG] [Thread-12621] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:45:05.806 [DEBUG] [Thread-12621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:45:05.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:45:05.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:45:05.861 [DEBUG] [Thread-12621] [transport.py] [_log()] userauth is OK
2025-12-25T13:45:05.861 [DEBUG] [Thread-12621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:45:05.861 [DEBUG] [Thread-12621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:45:05.862 [DEBUG] [Thread-12621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:45:05.862 [DEBUG] [Thread-12621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:45:05.880 [INFO] [Thread-12621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:45:05.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-25T13:45:05.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:45:06.709 [DEBUG] [Thread-12621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:45:06.709 [DEBUG] [Thread-12621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:45:06.757 [DEBUG] [Thread-12621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:45:06.757 [DEBUG] [Thread-12621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:45:06.767 [DEBUG] [Thread-12621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:45:06.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:45:06.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:45:06.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-25T13:45:06.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:45:06.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:45:06.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:45:06.804 [DEBUG] [Thread-12621] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:45:17.477 [DEBUG] [Thread-12623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:30.526 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:30.528 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:32.526 [DEBUG] [Thread-12624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:45:36.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:45:36.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:45:36.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-25T13:45:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 45, 6), 28.14, 15.57, 0.0, 37.11, 25.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:45:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:45:06
2025-12-25T13:45:37.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:45:37.805 [DEBUG] [Thread-12625] [transport.py] [_log()] starting thread (client mode): 0xb6b027a0
2025-12-25T13:45:37.805 [DEBUG] [Thread-12625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:45:37.825 [DEBUG] [Thread-12625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:45:37.825 [INFO] [Thread-12625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] client lang: <none>
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] server lang: <none>
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] kex follows: False
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:45:37.828 [DEBUG] [Thread-12625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:45:37.829 [DEBUG] [Thread-12625] [transport.py] [_log()] Compression: none
2025-12-25T13:45:37.829 [DEBUG] [Thread-12625] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:45:37.848 [DEBUG] [Thread-12625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:45:37.848 [DEBUG] [Thread-12625] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:45:37.849 [DEBUG] [Thread-12625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:45:37.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:45:37.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:45:37.851 [DEBUG] [Thread-12625] [transport.py] [_log()] userauth is OK
2025-12-25T13:45:37.851 [DEBUG] [Thread-12625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:45:37.851 [DEBUG] [Thread-12625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:45:37.851 [DEBUG] [Thread-12625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:45:37.851 [DEBUG] [Thread-12625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:45:37.888 [INFO] [Thread-12625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:45:37.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:45:38.550 [DEBUG] [Thread-12625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:45:38.551 [DEBUG] [Thread-12625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:45:38.551 [DEBUG] [Thread-12625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:45:38.591 [DEBUG] [Thread-12625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:45:38.591 [DEBUG] [Thread-12625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:45:38.595 [DEBUG] [Thread-12625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:45:38.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:45:38.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:45:38.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:45:38.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:45:38.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:45:38.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:45:38.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:45:38.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:45:38.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:45:38.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.489645 -999.00  +25.80  34.57     21   +2.00 1 1 2 1 1   888    0 22.69 -47.05 ----- 34.6 34.6 297.8 43.7 31.1 -25.7 30.6 -25.6 30.4 -23.5 31.3 -23.4
2025-12-25T13:45:38.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:45:38.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:45:38.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.489645
2025-12-25T13:45:38.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:45:38.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:45:38.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:45:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:45:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:45:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:45:06', tmtdew=28.14, humidity=15.57, cloud=0.0, wind=37.11, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:45:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:45:38.621 [DEBUG] [Thread-12625] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:45:38.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-25T13:45:38.712 [DEBUG] [Thread-12628] [transport.py] [_log()] starting thread (client mode): 0xb95d6c20
2025-12-25T13:45:38.712 [DEBUG] [Thread-12628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:45:38.726 [DEBUG] [Thread-12628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:45:38.727 [INFO] [Thread-12628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:45:38.734 [DEBUG] [Thread-12628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:45:38.734 [DEBUG] [Thread-12628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:45:38.734 [DEBUG] [Thread-12628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:45:38.734 [DEBUG] [Thread-12628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:38.734 [DEBUG] [Thread-12628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:45:38.734 [DEBUG] [Thread-12628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] client lang: <none>
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] server lang: <none>
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] kex follows: False
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] Compression: none
2025-12-25T13:45:38.735 [DEBUG] [Thread-12628] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:45:38.792 [DEBUG] [Thread-12628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:45:38.793 [DEBUG] [Thread-12628] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:45:38.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:45:38.794 [DEBUG] [Thread-12628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:45:38.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:45:38.849 [DEBUG] [Thread-12628] [transport.py] [_log()] userauth is OK
2025-12-25T13:45:38.849 [DEBUG] [Thread-12628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:45:38.850 [DEBUG] [Thread-12628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:45:38.850 [DEBUG] [Thread-12628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:45:38.850 [DEBUG] [Thread-12628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:45:38.868 [INFO] [Thread-12628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:45:38.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:45:38.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:45:39.692 [DEBUG] [Thread-12628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:45:39.692 [DEBUG] [Thread-12628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:45:39.739 [DEBUG] [Thread-12628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:45:39.739 [DEBUG] [Thread-12628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:45:39.748 [DEBUG] [Thread-12628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:45:39.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:45:39.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-25T13:45:39.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-25T13:45:39.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:45:39.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:45:39.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:45:39.779 [DEBUG] [Thread-12628] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:45:47.567 [DEBUG] [Thread-12630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:02.621 [DEBUG] [Thread-12631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:05.486 [DEBUG] [Thread-12632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:09.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:46:09.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:46:09.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-25T13:46:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 45, 38), 29.21, 14.5, 0.0, 29.08, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:46:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:45:38
2025-12-25T13:46:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:46:10.788 [DEBUG] [Thread-12633] [transport.py] [_log()] starting thread (client mode): 0xb6b00190
2025-12-25T13:46:10.788 [DEBUG] [Thread-12633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:46:10.804 [DEBUG] [Thread-12633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:46:10.804 [INFO] [Thread-12633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:10.807 [DEBUG] [Thread-12633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] client lang: <none>
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] server lang: <none>
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] kex follows: False
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] Compression: none
2025-12-25T13:46:10.808 [DEBUG] [Thread-12633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:46:10.825 [DEBUG] [Thread-12633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:46:10.826 [DEBUG] [Thread-12633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:46:10.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:46:10.827 [DEBUG] [Thread-12633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:46:10.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:46:10.828 [DEBUG] [Thread-12633] [transport.py] [_log()] userauth is OK
2025-12-25T13:46:10.828 [DEBUG] [Thread-12633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:46:10.828 [DEBUG] [Thread-12633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:46:10.828 [DEBUG] [Thread-12633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:46:10.828 [DEBUG] [Thread-12633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:46:10.843 [INFO] [Thread-12633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:46:10.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:46:11.599 [DEBUG] [Thread-12633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:46:11.599 [DEBUG] [Thread-12633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:46:11.600 [DEBUG] [Thread-12633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:46:11.641 [DEBUG] [Thread-12633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:46:11.641 [DEBUG] [Thread-12633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:46:11.642 [DEBUG] [Thread-12633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:46:11.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:46:11.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:46:11.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:46:11.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:46:11.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:46:11.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:46:11.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.489992 -999.00  +26.20  36.63     20   +1.80 1 1 2 1 1   888    0 23.03 -40.92 ----- 36.6 36.6 295.4 42.2 31.1 -27.1 30.6 -26.1 30.6 -23.8 31.4 -22.9
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.489992
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:46:11.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:45:38', tmtdew=29.21, humidity=14.5, cloud=0.0, wind=29.08, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:45:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:46:11.654 [DEBUG] [Thread-12633] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:46:11.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-25T13:46:11.738 [DEBUG] [Thread-12636] [transport.py] [_log()] starting thread (client mode): 0xb957a5f0
2025-12-25T13:46:11.738 [DEBUG] [Thread-12636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:46:11.753 [DEBUG] [Thread-12636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:46:11.753 [INFO] [Thread-12636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:46:11.760 [DEBUG] [Thread-12636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] client lang: <none>
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] server lang: <none>
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] kex follows: False
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] Compression: none
2025-12-25T13:46:11.761 [DEBUG] [Thread-12636] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:46:11.819 [DEBUG] [Thread-12636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:46:11.819 [DEBUG] [Thread-12636] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:46:11.819 [DEBUG] [Thread-12636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:46:11.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:46:11.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:46:11.876 [DEBUG] [Thread-12636] [transport.py] [_log()] userauth is OK
2025-12-25T13:46:11.876 [DEBUG] [Thread-12636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:46:11.876 [DEBUG] [Thread-12636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:46:11.876 [DEBUG] [Thread-12636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:46:11.876 [DEBUG] [Thread-12636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:46:11.890 [INFO] [Thread-12636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:46:11.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-25T13:46:11.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:46:12.715 [DEBUG] [Thread-12636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:46:12.715 [DEBUG] [Thread-12636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:46:12.762 [DEBUG] [Thread-12636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:46:12.762 [DEBUG] [Thread-12636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:46:12.771 [DEBUG] [Thread-12636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:46:12.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:46:12.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-25T13:46:12.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-25T13:46:12.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:46:12.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:46:12.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:46:12.803 [DEBUG] [Thread-12636] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:46:17.652 [DEBUG] [Thread-12638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:30.669 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:30.670 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:32.699 [DEBUG] [Thread-12639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:46:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:46:42.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:46:42.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-25T13:46:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 46, 10), 28.78, 14.97, 0.0, 32.34, 26.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:46:43.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:46:10
2025-12-25T13:46:43.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:46:43.854 [DEBUG] [Thread-12640] [transport.py] [_log()] starting thread (client mode): 0xb95d6c20
2025-12-25T13:46:43.854 [DEBUG] [Thread-12640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:46:43.876 [DEBUG] [Thread-12640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:46:43.876 [INFO] [Thread-12640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] client lang: <none>
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] server lang: <none>
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] kex follows: False
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] Compression: none
2025-12-25T13:46:43.878 [DEBUG] [Thread-12640] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:46:43.890 [DEBUG] [Thread-12640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:46:43.890 [DEBUG] [Thread-12640] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:46:43.890 [DEBUG] [Thread-12640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:46:43.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:46:43.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:46:43.891 [DEBUG] [Thread-12640] [transport.py] [_log()] userauth is OK
2025-12-25T13:46:43.891 [DEBUG] [Thread-12640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:46:43.891 [DEBUG] [Thread-12640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:46:43.891 [DEBUG] [Thread-12640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:46:43.891 [DEBUG] [Thread-12640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:46:43.920 [INFO] [Thread-12640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:46:43.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:46:44.611 [DEBUG] [Thread-12640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:46:44.611 [DEBUG] [Thread-12640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:46:44.611 [DEBUG] [Thread-12640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:46:44.652 [DEBUG] [Thread-12640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:46:44.653 [DEBUG] [Thread-12640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:46:44.655 [DEBUG] [Thread-12640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:46:44.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:46:44.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:46:44.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:46:44.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:46:44.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:46:44.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:46:44.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.490340 -999.00  +25.60  31.28     20   +1.20 1 1 2 1 1   888    0 23.02 -42.48 ----- 31.3 31.3 296.4 41.0 31.1 -26.5 30.6 -25.8 30.6 -23.6 31.3 -24.5
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.490340
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:46:44.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:46:10', tmtdew=28.78, humidity=14.97, cloud=0.0, wind=32.34, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:46:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:46:44.673 [DEBUG] [Thread-12640] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:46:44.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-25T13:46:44.754 [DEBUG] [Thread-12643] [transport.py] [_log()] starting thread (client mode): 0xb9592800
2025-12-25T13:46:44.754 [DEBUG] [Thread-12643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:46:44.769 [DEBUG] [Thread-12643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:46:44.769 [INFO] [Thread-12643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] client lang: <none>
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] server lang: <none>
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] kex follows: False
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] Compression: none
2025-12-25T13:46:44.777 [DEBUG] [Thread-12643] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:46:44.834 [DEBUG] [Thread-12643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:46:44.834 [DEBUG] [Thread-12643] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:46:44.835 [DEBUG] [Thread-12643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:46:44.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:46:44.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:46:44.892 [DEBUG] [Thread-12643] [transport.py] [_log()] userauth is OK
2025-12-25T13:46:44.892 [DEBUG] [Thread-12643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:46:44.892 [DEBUG] [Thread-12643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:46:44.892 [DEBUG] [Thread-12643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:46:44.892 [DEBUG] [Thread-12643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:46:44.906 [INFO] [Thread-12643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:46:44.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-25T13:46:44.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:46:45.714 [DEBUG] [Thread-12643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:46:45.714 [DEBUG] [Thread-12643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:46:45.763 [DEBUG] [Thread-12643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:46:45.764 [DEBUG] [Thread-12643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:46:45.772 [DEBUG] [Thread-12643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:46:45.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:46:45.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:46:45.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-25T13:46:45.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:46:45.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:46:45.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:46:45.806 [DEBUG] [Thread-12643] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:46:47.727 [DEBUG] [Thread-12645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:02.779 [DEBUG] [Thread-12646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:05.557 [DEBUG] [Thread-12647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:15.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:47:15.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:47:15.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-25T13:47:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 46, 42), 29.0, 14.92, 0.0, 30.38, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:47:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:46:42
2025-12-25T13:47:16.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:47:16.884 [DEBUG] [Thread-12648] [transport.py] [_log()] starting thread (client mode): 0xb6b01600
2025-12-25T13:47:16.884 [DEBUG] [Thread-12648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:47:16.903 [DEBUG] [Thread-12648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:47:16.903 [INFO] [Thread-12648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:47:16.906 [DEBUG] [Thread-12648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:47:16.906 [DEBUG] [Thread-12648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:47:16.906 [DEBUG] [Thread-12648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:47:16.906 [DEBUG] [Thread-12648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:16.906 [DEBUG] [Thread-12648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] client lang: <none>
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] server lang: <none>
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] kex follows: False
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] Compression: none
2025-12-25T13:47:16.907 [DEBUG] [Thread-12648] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:47:16.923 [DEBUG] [Thread-12648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:47:16.923 [DEBUG] [Thread-12648] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:47:16.923 [DEBUG] [Thread-12648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:47:16.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:47:16.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:47:16.924 [DEBUG] [Thread-12648] [transport.py] [_log()] userauth is OK
2025-12-25T13:47:16.924 [DEBUG] [Thread-12648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:47:16.924 [DEBUG] [Thread-12648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:47:16.924 [DEBUG] [Thread-12648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:47:16.924 [DEBUG] [Thread-12648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:47:16.933 [INFO] [Thread-12648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:47:16.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:47:17.666 [DEBUG] [Thread-12648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:47:17.666 [DEBUG] [Thread-12648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:47:17.666 [DEBUG] [Thread-12648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:47:17.708 [DEBUG] [Thread-12648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:47:17.708 [DEBUG] [Thread-12648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:47:17.710 [DEBUG] [Thread-12648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:47:17.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:47:17.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:47:17.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:47:17.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:47:17.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:47:17.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:47:17.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:47:17.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:47:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:47:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.490687 -999.00  +25.50  27.23     20   +1.50 1 1 1 1 1   888    0 22.95 -40.04 ----- 27.2 27.2 298.6 37.2 31.1 -24.9 30.6 -25.2 30.5 -23.6 31.3 -23.2
2025-12-25T13:47:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:47:17.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.490687
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:47:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:46:42', tmtdew=29.0, humidity=14.92, cloud=0.0, wind=30.38, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:46:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:47:17.729 [DEBUG] [Thread-12648] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:47:17.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-25T13:47:17.810 [DEBUG] [Thread-12651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:17.811 [DEBUG] [Thread-12652] [transport.py] [_log()] starting thread (client mode): 0xb9592da0
2025-12-25T13:47:17.811 [DEBUG] [Thread-12652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:47:17.826 [DEBUG] [Thread-12652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:47:17.826 [INFO] [Thread-12652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] client lang: <none>
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] server lang: <none>
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] kex follows: False
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:47:17.833 [DEBUG] [Thread-12652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:47:17.834 [DEBUG] [Thread-12652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:47:17.834 [DEBUG] [Thread-12652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:47:17.834 [DEBUG] [Thread-12652] [transport.py] [_log()] Compression: none
2025-12-25T13:47:17.834 [DEBUG] [Thread-12652] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:47:17.891 [DEBUG] [Thread-12652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:47:17.891 [DEBUG] [Thread-12652] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:47:17.891 [DEBUG] [Thread-12652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:47:17.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:47:17.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:47:17.948 [DEBUG] [Thread-12652] [transport.py] [_log()] userauth is OK
2025-12-25T13:47:17.949 [DEBUG] [Thread-12652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:47:17.949 [DEBUG] [Thread-12652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:47:17.949 [DEBUG] [Thread-12652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:47:17.949 [DEBUG] [Thread-12652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:47:17.972 [INFO] [Thread-12652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:47: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-25T13:47:17.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:47:18.813 [DEBUG] [Thread-12652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:47:18.813 [DEBUG] [Thread-12652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:47:18.861 [DEBUG] [Thread-12652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:47:18.861 [DEBUG] [Thread-12652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:47:18.870 [DEBUG] [Thread-12652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:47:18.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:47:18.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:47:18.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:47:18.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:47:18.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:47:18.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:47:18.907 [DEBUG] [Thread-12652] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:47:30.809 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:30.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:32.852 [DEBUG] [Thread-12654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:47.887 [DEBUG] [Thread-12655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:47:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:47:48.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:47:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:47:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 47, 14), 29.11, 14.84, 0.0, 33.7, 26.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:47:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:47:14
2025-12-25T13:47:49.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:47:49.943 [DEBUG] [Thread-12656] [transport.py] [_log()] starting thread (client mode): 0xb95f1c90
2025-12-25T13:47:49.943 [DEBUG] [Thread-12656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:47:49.964 [DEBUG] [Thread-12656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:47:49.964 [INFO] [Thread-12656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] client lang: <none>
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] server lang: <none>
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] kex follows: False
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] Compression: none
2025-12-25T13:47:49.967 [DEBUG] [Thread-12656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:47:49.986 [DEBUG] [Thread-12656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:47:49.987 [DEBUG] [Thread-12656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:47:49.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:47:49.988 [DEBUG] [Thread-12656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:47:49.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:47:50.029 [DEBUG] [Thread-12656] [transport.py] [_log()] userauth is OK
2025-12-25T13:47:50.029 [DEBUG] [Thread-12656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:47:50.030 [DEBUG] [Thread-12656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:47:50.030 [DEBUG] [Thread-12656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:47:50.030 [DEBUG] [Thread-12656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:47:50.051 [INFO] [Thread-12656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:47:50.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:47:50.671 [DEBUG] [Thread-12656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:47:50.672 [DEBUG] [Thread-12656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:47:50.672 [DEBUG] [Thread-12656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:47:50.712 [DEBUG] [Thread-12656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:47:50.712 [DEBUG] [Thread-12656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:47:50.715 [DEBUG] [Thread-12656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:47:50.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:47:50.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:47:50.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:47:50.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:47:50.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:47:50.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:47:50.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.491034 -999.00  +26.00  24.56     20   +1.30 1 1 1 1 1   888    0 23.76 -37.42 ----- 24.6 24.6 287.8 35.9 31.0 -27.4 30.6 -25.9 30.4 -27.6 31.3 -22.7
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.491034
2025-12-25T13:47:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:47:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:47:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:47:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:47:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:47:50.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:47:14', tmtdew=29.11, humidity=14.84, cloud=0.0, wind=33.7, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:47:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:47:50.737 [DEBUG] [Thread-12656] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:47:50.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-25T13:47:52.861 [DEBUG] [Thread-12659] [transport.py] [_log()] starting thread (client mode): 0xb9578ac0
2025-12-25T13:47:52.861 [DEBUG] [Thread-12659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:47:52.875 [DEBUG] [Thread-12659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:47:52.876 [INFO] [Thread-12659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] client lang: <none>
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] server lang: <none>
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] kex follows: False
2025-12-25T13:47:52.883 [DEBUG] [Thread-12659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:47:52.884 [DEBUG] [Thread-12659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:47:52.884 [DEBUG] [Thread-12659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:47:52.884 [DEBUG] [Thread-12659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:47:52.884 [DEBUG] [Thread-12659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:47:52.884 [DEBUG] [Thread-12659] [transport.py] [_log()] Compression: none
2025-12-25T13:47:52.884 [DEBUG] [Thread-12659] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:47:52.939 [DEBUG] [Thread-12659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:47:52.939 [DEBUG] [Thread-12659] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:47:52.940 [DEBUG] [Thread-12659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:47:52.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:47:52.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:47:52.997 [DEBUG] [Thread-12659] [transport.py] [_log()] userauth is OK
2025-12-25T13:47:52.997 [DEBUG] [Thread-12659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:47:52.997 [DEBUG] [Thread-12659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:47:52.997 [DEBUG] [Thread-12659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:47:52.997 [DEBUG] [Thread-12659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:47:53.011 [INFO] [Thread-12659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:47:53.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-25T13:47:53.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:47:53.847 [DEBUG] [Thread-12659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:47:53.847 [DEBUG] [Thread-12659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:47:53.895 [DEBUG] [Thread-12659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:47:53.895 [DEBUG] [Thread-12659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:47:53.904 [DEBUG] [Thread-12659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:47:53.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:47:53.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-25T13:47:53.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-25T13:47:53.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:47:53.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:47:53.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:47:53.935 [DEBUG] [Thread-12659] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:48:02.919 [DEBUG] [Thread-12661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:05.621 [DEBUG] [Thread-12662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:17.973 [DEBUG] [Thread-12663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:23.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:48:23.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:48:23.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:48:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 48, 19), 29.02, 14.4, 0.0, 30.51, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:48:24.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:48:19
2025-12-25T13:48:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:48:24.950 [DEBUG] [Thread-12664] [transport.py] [_log()] starting thread (client mode): 0xb9579c90
2025-12-25T13:48:24.950 [DEBUG] [Thread-12664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:48:24.970 [DEBUG] [Thread-12664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:48:24.970 [INFO] [Thread-12664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] client lang: <none>
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] server lang: <none>
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] kex follows: False
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:48:24.974 [DEBUG] [Thread-12664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:48:24.975 [DEBUG] [Thread-12664] [transport.py] [_log()] Compression: none
2025-12-25T13:48:24.975 [DEBUG] [Thread-12664] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:48:24.991 [DEBUG] [Thread-12664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:48:24.992 [DEBUG] [Thread-12664] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:48:24.992 [DEBUG] [Thread-12664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:48:24.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:48:24.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:48:24.994 [DEBUG] [Thread-12664] [transport.py] [_log()] userauth is OK
2025-12-25T13:48:24.994 [DEBUG] [Thread-12664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:48:24.995 [DEBUG] [Thread-12664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:48:24.995 [DEBUG] [Thread-12664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:48:24.995 [DEBUG] [Thread-12664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:48:25.030 [INFO] [Thread-12664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:48:25.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:48:25.690 [DEBUG] [Thread-12664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:48:25.690 [DEBUG] [Thread-12664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:48:25.691 [DEBUG] [Thread-12664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:48:25.732 [DEBUG] [Thread-12664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:48:25.732 [DEBUG] [Thread-12664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:48:25.735 [DEBUG] [Thread-12664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:48:25.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:48:25.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:48:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:48:25.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:48:25.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:48:25.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:48:25.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:48:25.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:48:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:48:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.491728 -999.00  +25.90  30.95     20   +1.50 1 1 2 1 1   888    0 23.45 -26.55 ----- 30.9 30.9 277.9 44.1 30.9 -27.3 30.6 -25.6 30.4 -26.5 31.4 -22.9
2025-12-25T13:48:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:48:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:48:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.491728
2025-12-25T13:48:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:48:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:48:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:48:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:48:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:48:25.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:48:19', tmtdew=29.02, humidity=14.4, cloud=0.0, wind=30.51, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:48:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:48:25.757 [DEBUG] [Thread-12664] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:48:25.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-25T13:48:25.863 [DEBUG] [Thread-12667] [transport.py] [_log()] starting thread (client mode): 0xb95f0580
2025-12-25T13:48:25.863 [DEBUG] [Thread-12667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:48:25.879 [DEBUG] [Thread-12667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:48:25.879 [INFO] [Thread-12667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:48:25.886 [DEBUG] [Thread-12667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:48:25.886 [DEBUG] [Thread-12667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:48:25.886 [DEBUG] [Thread-12667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] client lang: <none>
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] server lang: <none>
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] kex follows: False
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] Compression: none
2025-12-25T13:48:25.887 [DEBUG] [Thread-12667] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:48:25.944 [DEBUG] [Thread-12667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:48:25.944 [DEBUG] [Thread-12667] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:48:25.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:48:25.945 [DEBUG] [Thread-12667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:48:25.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:48:26.000 [DEBUG] [Thread-12667] [transport.py] [_log()] userauth is OK
2025-12-25T13:48:26.000 [DEBUG] [Thread-12667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:48:26.001 [DEBUG] [Thread-12667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:48:26.001 [DEBUG] [Thread-12667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:48:26.001 [DEBUG] [Thread-12667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:48:26.023 [INFO] [Thread-12667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:48:26.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-25T13:48:26.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:48:26.935 [DEBUG] [Thread-12667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:48:26.935 [DEBUG] [Thread-12667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:48:26.983 [DEBUG] [Thread-12667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:48:26.983 [DEBUG] [Thread-12667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:48:26.993 [DEBUG] [Thread-12667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:48:27.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:48:27.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-25T13:48:27.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-25T13:48:27.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:48:27.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:48:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:48:27.027 [DEBUG] [Thread-12667] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:48:30.948 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:30.949 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:33.002 [DEBUG] [Thread-12669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:48.051 [DEBUG] [Thread-12670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:48:57.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:48:57.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:48:57.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:48:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 48, 52), 29.27, 14.19, 0.0, 29.77, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:48:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:48:52
2025-12-25T13:48:57.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:48:58.038 [DEBUG] [Thread-12671] [transport.py] [_log()] starting thread (client mode): 0xb95f0d60
2025-12-25T13:48:58.038 [DEBUG] [Thread-12671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:48:58.059 [DEBUG] [Thread-12671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:48:58.059 [INFO] [Thread-12671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:48:58.062 [DEBUG] [Thread-12671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:48:58.062 [DEBUG] [Thread-12671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:48:58.062 [DEBUG] [Thread-12671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] client lang: <none>
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] server lang: <none>
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] kex follows: False
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] Compression: none
2025-12-25T13:48:58.063 [DEBUG] [Thread-12671] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:48:58.082 [DEBUG] [Thread-12671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:48:58.082 [DEBUG] [Thread-12671] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:48:58.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:48:58.083 [DEBUG] [Thread-12671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:48:58.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:48:58.085 [DEBUG] [Thread-12671] [transport.py] [_log()] userauth is OK
2025-12-25T13:48:58.086 [DEBUG] [Thread-12671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:48:58.086 [DEBUG] [Thread-12671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:48:58.086 [DEBUG] [Thread-12671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:48:58.086 [DEBUG] [Thread-12671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:48:58.122 [INFO] [Thread-12671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:48:58.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:48:58.780 [DEBUG] [Thread-12671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:48:58.780 [DEBUG] [Thread-12671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:48:58.781 [DEBUG] [Thread-12671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:48:58.821 [DEBUG] [Thread-12671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:48:58.821 [DEBUG] [Thread-12671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:48:58.825 [DEBUG] [Thread-12671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:48:58.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:48:58.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:48:58.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:48:58.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:48:58.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:48:58.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:48:58.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:48:58.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:48:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:48:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.492076 -999.00  +26.10  33.18     20   +1.60 1 1 2 1 1   888    0 23.85 -22.55 ----- 33.2 33.2 292.6 35.5 31.1 -26.4 30.6 -25.8 30.4 -24.5 31.3 -23.7
2025-12-25T13:48:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:48:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:48:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.492076
2025-12-25T13:48:58.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:48:58.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:48:58.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:48:58.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:48:58.852 [DEBUG] [Thread-12671] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:48:58.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:48:58.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:48:52', tmtdew=29.27, humidity=14.19, cloud=0.0, wind=29.77, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:48:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:48:58.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-25T13:48:58.947 [DEBUG] [Thread-12674] [transport.py] [_log()] starting thread (client mode): 0xb95f0dc0
2025-12-25T13:48:58.947 [DEBUG] [Thread-12674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:48:58.961 [DEBUG] [Thread-12674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:48:58.961 [INFO] [Thread-12674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:48:58.968 [DEBUG] [Thread-12674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:48:58.968 [DEBUG] [Thread-12674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] client lang: <none>
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] server lang: <none>
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] kex follows: False
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] Compression: none
2025-12-25T13:48:58.969 [DEBUG] [Thread-12674] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:48:59.033 [DEBUG] [Thread-12674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:48:59.033 [DEBUG] [Thread-12674] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:48:59.034 [DEBUG] [Thread-12674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:48:59.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:48:59.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:48:59.089 [DEBUG] [Thread-12674] [transport.py] [_log()] userauth is OK
2025-12-25T13:48:59.089 [DEBUG] [Thread-12674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:48:59.089 [DEBUG] [Thread-12674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:48:59.090 [DEBUG] [Thread-12674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:48:59.090 [DEBUG] [Thread-12674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:48:59.108 [INFO] [Thread-12674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:48:59.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:48:59.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:48:59.894 [DEBUG] [Thread-12674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:48:59.894 [DEBUG] [Thread-12674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:48:59.942 [DEBUG] [Thread-12674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:48:59.942 [DEBUG] [Thread-12674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:48:59.951 [DEBUG] [Thread-12674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:48:59.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:48:59.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:48:59.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:48:59.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:48:59.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:48:59.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:48:59.985 [DEBUG] [Thread-12674] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:49:03.085 [DEBUG] [Thread-12676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:49:05.665 [DEBUG] [Thread-12677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:49:18.143 [DEBUG] [Thread-12678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:49:30.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:49:30.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:49:30.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-25T13:49:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 49, 24), 29.17, 14.25, 0.0, 31.37, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:49:30.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:49:24
2025-12-25T13:49:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:49:30.983 [DEBUG] [Thread-12679] [transport.py] [_log()] starting thread (client mode): 0xb6b00c40
2025-12-25T13:49:30.983 [DEBUG] [Thread-12679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:49:31.003 [DEBUG] [Thread-12679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:49:31.004 [INFO] [Thread-12679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] client lang: <none>
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] server lang: <none>
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] kex follows: False
2025-12-25T13:49:31.005 [DEBUG] [Thread-12679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:49:31.006 [DEBUG] [Thread-12679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:49:31.006 [DEBUG] [Thread-12679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:49:31.006 [DEBUG] [Thread-12679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:49:31.006 [DEBUG] [Thread-12679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:49:31.006 [DEBUG] [Thread-12679] [transport.py] [_log()] Compression: none
2025-12-25T13:49:31.006 [DEBUG] [Thread-12679] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:49:31.016 [DEBUG] [Thread-12679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:49:31.017 [DEBUG] [Thread-12679] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:49:31.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:49:31.018 [DEBUG] [Thread-12679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:49:31.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:49:31.020 [DEBUG] [Thread-12679] [transport.py] [_log()] userauth is OK
2025-12-25T13:49:31.021 [DEBUG] [Thread-12679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:49:31.021 [DEBUG] [Thread-12679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:49:31.021 [DEBUG] [Thread-12679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:49:31.021 [DEBUG] [Thread-12679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:49:31.046 [INFO] [Thread-12679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:49:31.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:49:31.088 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:49:31.090 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:49:31.635 [DEBUG] [Thread-12679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:49:31.636 [DEBUG] [Thread-12679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:49:31.636 [DEBUG] [Thread-12679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:49:31.677 [DEBUG] [Thread-12679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:49:31.677 [DEBUG] [Thread-12679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:49:31.681 [DEBUG] [Thread-12679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:49:31.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:49:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:49:31.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:49:31.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:49:31.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:49:31.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:49:31.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:49:31.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:49:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:49:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.492423 -999.00  +25.60  27.81     20   +1.30 1 1 1 1 1   888    0 23.48 -19.62 ----- 27.8 27.8 293.4 36.0 31.0 -26.2 30.5 -26.7 30.5 -26.2 31.3 -23.6
2025-12-25T13:49:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:49:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:49:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.492423
2025-12-25T13:49:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:49:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:49:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:49:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:49:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:49:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:49:24', tmtdew=29.17, humidity=14.25, cloud=0.0, wind=31.37, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:49:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:49:31.709 [DEBUG] [Thread-12679] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:49:31.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-25T13:49:31.801 [DEBUG] [Thread-12682] [transport.py] [_log()] starting thread (client mode): 0xb9578ee0
2025-12-25T13:49:31.801 [DEBUG] [Thread-12682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:49:31.816 [DEBUG] [Thread-12682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:49:31.816 [INFO] [Thread-12682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:49:31.824 [DEBUG] [Thread-12682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] client lang: <none>
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] server lang: <none>
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] kex follows: False
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] Compression: none
2025-12-25T13:49:31.825 [DEBUG] [Thread-12682] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:49:31.881 [DEBUG] [Thread-12682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:49:31.881 [DEBUG] [Thread-12682] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:49:31.882 [DEBUG] [Thread-12682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:49:31.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:49:31.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:49:31.937 [DEBUG] [Thread-12682] [transport.py] [_log()] userauth is OK
2025-12-25T13:49:31.937 [DEBUG] [Thread-12682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:49:31.937 [DEBUG] [Thread-12682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:49:31.938 [DEBUG] [Thread-12682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:49:31.938 [DEBUG] [Thread-12682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:49:31.956 [INFO] [Thread-12682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:49:31.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-25T13:49:31.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:49:32.767 [DEBUG] [Thread-12682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:49:32.768 [DEBUG] [Thread-12682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:49:32.815 [DEBUG] [Thread-12682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:49:32.816 [DEBUG] [Thread-12682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:49:32.824 [DEBUG] [Thread-12682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:49:32.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:49:32.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-25T13:49:32.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-25T13:49:32.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:49:32.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:49:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:49:32.858 [DEBUG] [Thread-12682] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:49:33.178 [DEBUG] [Thread-12684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:49:48.227 [DEBUG] [Thread-12685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:02.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:50:02.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:50:02.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:50:03.253 [DEBUG] [Thread-12686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 49, 56), 28.83, 14.92, 0.0, 25.85, 25.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:50:03.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:49:56
2025-12-25T13:50:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:50:03.840 [DEBUG] [Thread-12687] [transport.py] [_log()] starting thread (client mode): 0xb9579b10
2025-12-25T13:50:03.840 [DEBUG] [Thread-12687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:50:03.860 [DEBUG] [Thread-12687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:50:03.861 [INFO] [Thread-12687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:50:03.863 [DEBUG] [Thread-12687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] client lang: <none>
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] server lang: <none>
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] kex follows: False
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] Compression: none
2025-12-25T13:50:03.864 [DEBUG] [Thread-12687] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:50:03.881 [DEBUG] [Thread-12687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:50:03.881 [DEBUG] [Thread-12687] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:50:03.881 [DEBUG] [Thread-12687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:50:03.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:50:03.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:50:03.883 [DEBUG] [Thread-12687] [transport.py] [_log()] userauth is OK
2025-12-25T13:50:03.883 [DEBUG] [Thread-12687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:50:03.883 [DEBUG] [Thread-12687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:50:03.883 [DEBUG] [Thread-12687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:50:03.883 [DEBUG] [Thread-12687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:50:03.896 [INFO] [Thread-12687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:50:03.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:50:04.666 [DEBUG] [Thread-12687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:50:04.666 [DEBUG] [Thread-12687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:50:04.666 [DEBUG] [Thread-12687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:50:04.706 [DEBUG] [Thread-12687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:50:04.707 [DEBUG] [Thread-12687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:50:04.709 [DEBUG] [Thread-12687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:50:04.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:50:04.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:50:04.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:50:04.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:50:04.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:50:04.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:50:04.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:50:04.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:50:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:50:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.492770 -999.00  +25.30  27.91     20   +1.20 1 1 1 1 1   888    0 23.82 -18.88 ----- 27.9 27.9 304.8 31.5 31.1 -25.7 30.6 -25.4 30.5 -23.0 31.2 -24.3
2025-12-25T13:50:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:50:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:50:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.492770
2025-12-25T13:50:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:50:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:50:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:50:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:50:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:50:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:49:56', tmtdew=28.83, humidity=14.92, cloud=0.0, wind=25.85, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:49:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:50:04.742 [DEBUG] [Thread-12687] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:50:04.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-25T13:50:04.834 [DEBUG] [Thread-12690] [transport.py] [_log()] starting thread (client mode): 0xb6b01b40
2025-12-25T13:50:04.834 [DEBUG] [Thread-12690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:50:04.849 [DEBUG] [Thread-12690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:50:04.849 [INFO] [Thread-12690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:50:04.856 [DEBUG] [Thread-12690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] client lang: <none>
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] server lang: <none>
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] kex follows: False
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] Compression: none
2025-12-25T13:50:04.857 [DEBUG] [Thread-12690] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:50:04.916 [DEBUG] [Thread-12690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:50:04.917 [DEBUG] [Thread-12690] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:50:04.918 [DEBUG] [Thread-12690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:50:04.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:50:04.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:50:04.973 [DEBUG] [Thread-12690] [transport.py] [_log()] userauth is OK
2025-12-25T13:50:04.973 [DEBUG] [Thread-12690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:50:04.974 [DEBUG] [Thread-12690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:50:04.974 [DEBUG] [Thread-12690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:50:04.974 [DEBUG] [Thread-12690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:50:04.993 [INFO] [Thread-12690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:50:04.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-25T13:50:04.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:50:05.733 [DEBUG] [Thread-12692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:05.829 [DEBUG] [Thread-12690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:50:05.829 [DEBUG] [Thread-12690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:50:05.877 [DEBUG] [Thread-12690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:50:05.877 [DEBUG] [Thread-12690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:50:05.886 [DEBUG] [Thread-12690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:50:05.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:50:05.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:50:05.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:50:05.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:50:05.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:50:05.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:50:05.921 [DEBUG] [Thread-12690] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:50:18.283 [DEBUG] [Thread-12693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:31.231 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:31.232 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:33.320 [DEBUG] [Thread-12694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:50:35.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:50:35.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:50:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:50:36.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 50, 29), 28.61, 15.15, 0.0, 23.66, 25.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:50:36.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:50:29
2025-12-25T13:50:36.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:50:36.898 [DEBUG] [Thread-12695] [transport.py] [_log()] starting thread (client mode): 0xb95f0d60
2025-12-25T13:50:36.898 [DEBUG] [Thread-12695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:50:36.918 [DEBUG] [Thread-12695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:50:36.919 [INFO] [Thread-12695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] client lang: <none>
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] server lang: <none>
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] kex follows: False
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:50:36.922 [DEBUG] [Thread-12695] [transport.py] [_log()] Compression: none
2025-12-25T13:50:36.923 [DEBUG] [Thread-12695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:50:36.939 [DEBUG] [Thread-12695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:50:36.939 [DEBUG] [Thread-12695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:50:36.940 [DEBUG] [Thread-12695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:50:36.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:50:36.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:50:36.942 [DEBUG] [Thread-12695] [transport.py] [_log()] userauth is OK
2025-12-25T13:50:36.942 [DEBUG] [Thread-12695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:50:36.942 [DEBUG] [Thread-12695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:50:36.942 [DEBUG] [Thread-12695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:50:36.942 [DEBUG] [Thread-12695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:50:36.963 [INFO] [Thread-12695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:50:36.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:50:37.591 [DEBUG] [Thread-12695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:50:37.591 [DEBUG] [Thread-12695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:50:37.592 [DEBUG] [Thread-12695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:50:37.632 [DEBUG] [Thread-12695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:50:37.633 [DEBUG] [Thread-12695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:50:37.637 [DEBUG] [Thread-12695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:50:37.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:50:37.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:50:37.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:50:37.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:50:37.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:50:37.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:50:37.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:50:37.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:50:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:50:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.493117 -999.00  +25.50  29.43     20   +1.40 1 1 1 1 1   888    0 23.58 -18.32 ----- 29.4 29.4 290.8 31.8 31.1 -26.3 30.6 -26.3 30.6 -23.7 31.3 -23.9
2025-12-25T13:50:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:50:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:50:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.493117
2025-12-25T13:50:37.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:50:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:50:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:50:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:50:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:50:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:50:29', tmtdew=28.61, humidity=15.15, cloud=0.0, wind=23.66, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:50:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:50:37.665 [DEBUG] [Thread-12695] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:50:37.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-25T13:50:37.760 [DEBUG] [Thread-12698] [transport.py] [_log()] starting thread (client mode): 0xb95f2110
2025-12-25T13:50:37.760 [DEBUG] [Thread-12698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:50:37.776 [DEBUG] [Thread-12698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:50:37.776 [INFO] [Thread-12698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:50:37.783 [DEBUG] [Thread-12698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:50:37.784 [DEBUG] [Thread-12698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:50:37.784 [DEBUG] [Thread-12698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:50:37.784 [DEBUG] [Thread-12698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:37.784 [DEBUG] [Thread-12698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:50:37.784 [DEBUG] [Thread-12698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:37.784 [DEBUG] [Thread-12698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] client lang: <none>
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] server lang: <none>
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] kex follows: False
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:50:37.785 [DEBUG] [Thread-12698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:50:37.786 [DEBUG] [Thread-12698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:50:37.786 [DEBUG] [Thread-12698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:50:37.786 [DEBUG] [Thread-12698] [transport.py] [_log()] Compression: none
2025-12-25T13:50:37.786 [DEBUG] [Thread-12698] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:50:37.841 [DEBUG] [Thread-12698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:50:37.842 [DEBUG] [Thread-12698] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:50:37.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:50:37.843 [DEBUG] [Thread-12698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:50:37.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:50:37.904 [DEBUG] [Thread-12698] [transport.py] [_log()] userauth is OK
2025-12-25T13:50:37.904 [DEBUG] [Thread-12698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:50:37.904 [DEBUG] [Thread-12698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:50:37.904 [DEBUG] [Thread-12698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:50:37.905 [DEBUG] [Thread-12698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:50:37.924 [INFO] [Thread-12698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:50:37.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-25T13:50:37.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:50:38.765 [DEBUG] [Thread-12698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:50:38.765 [DEBUG] [Thread-12698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:50:38.813 [DEBUG] [Thread-12698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:50:38.813 [DEBUG] [Thread-12698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:50:38.822 [DEBUG] [Thread-12698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:50:38.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:50:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T13:50:38.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:50:38.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:50:38.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:50:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:50:38.859 [DEBUG] [Thread-12698] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:50:48.354 [DEBUG] [Thread-12700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:03.401 [DEBUG] [Thread-12701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:05.796 [DEBUG] [Thread-12702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:51:08.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:51:08.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-25T13:51:09.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 51, 1), 28.62, 15.13, 0.0, 19.99, 26.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:51:09.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:51:01
2025-12-25T13:51:09.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:51:09.900 [DEBUG] [Thread-12703] [transport.py] [_log()] starting thread (client mode): 0xb6b02290
2025-12-25T13:51:09.900 [DEBUG] [Thread-12703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:51:09.919 [DEBUG] [Thread-12703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:51:09.920 [INFO] [Thread-12703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] client lang: <none>
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] server lang: <none>
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] kex follows: False
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] Compression: none
2025-12-25T13:51:09.923 [DEBUG] [Thread-12703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:51:09.938 [DEBUG] [Thread-12703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:51:09.938 [DEBUG] [Thread-12703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:51:09.938 [DEBUG] [Thread-12703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:51:09.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:51:09.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:51:09.939 [DEBUG] [Thread-12703] [transport.py] [_log()] userauth is OK
2025-12-25T13:51:09.939 [DEBUG] [Thread-12703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:51:09.939 [DEBUG] [Thread-12703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:51:09.939 [DEBUG] [Thread-12703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:51:09.939 [DEBUG] [Thread-12703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:51:09.955 [INFO] [Thread-12703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:51:09.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:51:10.602 [DEBUG] [Thread-12703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:51:10.602 [DEBUG] [Thread-12703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:51:10.602 [DEBUG] [Thread-12703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:51:10.643 [DEBUG] [Thread-12703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:51:10.643 [DEBUG] [Thread-12703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:51:10.646 [DEBUG] [Thread-12703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:51:10.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:51:10.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:51:10.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:51:10.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:51:10.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:51:10.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:51:10.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.493464 -999.00  +25.20  24.81     21   +1.50 1 1 1 1 1   888    0 23.47 -20.82 ----- 24.8 24.8 308.6 28.0 31.1 -25.1 30.6 -25.4 30.5 -23.5 31.2 -23.8
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.493464
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:51:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:51:01', tmtdew=28.62, humidity=15.13, cloud=0.0, wind=19.99, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:50:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:51:10.664 [DEBUG] [Thread-12703] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:51:10.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-25T13:51:10.748 [DEBUG] [Thread-12706] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-25T13:51:10.748 [DEBUG] [Thread-12706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:51:10.763 [DEBUG] [Thread-12706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:51:10.763 [INFO] [Thread-12706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] client lang: <none>
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] server lang: <none>
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] kex follows: False
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] Compression: none
2025-12-25T13:51:10.771 [DEBUG] [Thread-12706] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:51:10.829 [DEBUG] [Thread-12706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:51:10.829 [DEBUG] [Thread-12706] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:51:10.829 [DEBUG] [Thread-12706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:51:10.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:51:10.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:51:10.889 [DEBUG] [Thread-12706] [transport.py] [_log()] userauth is OK
2025-12-25T13:51:10.889 [DEBUG] [Thread-12706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:51:10.889 [DEBUG] [Thread-12706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:51:10.889 [DEBUG] [Thread-12706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:51:10.889 [DEBUG] [Thread-12706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:51:10.904 [INFO] [Thread-12706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:51:10.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-25T13:51:10.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:51:11.729 [DEBUG] [Thread-12706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:51:11.730 [DEBUG] [Thread-12706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:51:11.778 [DEBUG] [Thread-12706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:51:11.778 [DEBUG] [Thread-12706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:51:11.787 [DEBUG] [Thread-12706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:51:11.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:51: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-25T13:51: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-25T13:51:11.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:51:11.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:51:11.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:51:11.820 [DEBUG] [Thread-12706] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:51:18.433 [DEBUG] [Thread-12708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:31.371 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:31.372 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:33.487 [DEBUG] [Thread-12709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:51:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:51:41.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:51:41.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-25T13:51:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 51, 33), 28.81, 14.97, 0.0, 22.02, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:51:42.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:51:33
2025-12-25T13:51:42.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:51:42.820 [DEBUG] [Thread-12710] [transport.py] [_log()] starting thread (client mode): 0xb95b3f70
2025-12-25T13:51:42.820 [DEBUG] [Thread-12710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:51:42.841 [DEBUG] [Thread-12710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:51:42.841 [INFO] [Thread-12710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:51:42.844 [DEBUG] [Thread-12710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] client lang: <none>
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] server lang: <none>
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] kex follows: False
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] Compression: none
2025-12-25T13:51:42.845 [DEBUG] [Thread-12710] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:51:42.863 [DEBUG] [Thread-12710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:51:42.863 [DEBUG] [Thread-12710] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:51:42.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:51:42.864 [DEBUG] [Thread-12710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:51:42.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:51:42.867 [DEBUG] [Thread-12710] [transport.py] [_log()] userauth is OK
2025-12-25T13:51:42.867 [DEBUG] [Thread-12710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:51:42.867 [DEBUG] [Thread-12710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:51:42.867 [DEBUG] [Thread-12710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:51:42.867 [DEBUG] [Thread-12710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:51:42.903 [INFO] [Thread-12710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:51:42.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:51:43.534 [DEBUG] [Thread-12710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:51:43.535 [DEBUG] [Thread-12710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:51:43.535 [DEBUG] [Thread-12710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:51:43.576 [DEBUG] [Thread-12710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:51:43.576 [DEBUG] [Thread-12710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:51:43.580 [DEBUG] [Thread-12710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:51:43.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:51:43.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:51:43.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:51:43.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:51:43.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:51:43.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:51:43.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:51:43.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:51:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:51:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.493812 -999.00  +25.00  16.29     21   +1.50 1 1 1 1 1   888    0 23.26 -25.35 ----- 16.3 16.3 316.0 30.5 31.2 -25.2 30.6 -25.1 30.7 -23.4 31.3 -23.4
2025-12-25T13:51:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:51:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:51:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.493812
2025-12-25T13:51:43.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:51:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:51:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:51:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:51:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:51:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:51:33', tmtdew=28.81, humidity=14.97, cloud=0.0, wind=22.02, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:51:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:51:43.608 [DEBUG] [Thread-12710] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:51:43.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:51:43.706 [DEBUG] [Thread-12713] [transport.py] [_log()] starting thread (client mode): 0xb95b0490
2025-12-25T13:51:43.706 [DEBUG] [Thread-12713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:51:43.720 [DEBUG] [Thread-12713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:51:43.720 [INFO] [Thread-12713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:51:43.728 [DEBUG] [Thread-12713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:51:43.728 [DEBUG] [Thread-12713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] client lang: <none>
2025-12-25T13:51:43.729 [DEBUG] [Thread-12713] [transport.py] [_log()] server lang: <none>
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] kex follows: False
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] Compression: none
2025-12-25T13:51:43.730 [DEBUG] [Thread-12713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:51:43.785 [DEBUG] [Thread-12713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:51:43.785 [DEBUG] [Thread-12713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:51:43.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:51:43.786 [DEBUG] [Thread-12713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:51:43.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:51:43.841 [DEBUG] [Thread-12713] [transport.py] [_log()] userauth is OK
2025-12-25T13:51:43.842 [DEBUG] [Thread-12713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:51:43.842 [DEBUG] [Thread-12713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:51:43.842 [DEBUG] [Thread-12713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:51:43.842 [DEBUG] [Thread-12713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:51:43.866 [INFO] [Thread-12713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:51:43.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-25T13:51:43.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:51:44.671 [DEBUG] [Thread-12713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:51:44.671 [DEBUG] [Thread-12713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:51:44.719 [DEBUG] [Thread-12713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:51:44.719 [DEBUG] [Thread-12713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:51:44.728 [DEBUG] [Thread-12713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:51:44.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:51:44.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-25T13:51:44.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-25T13:51:44.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:51:44.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:51:44.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:51:44.763 [DEBUG] [Thread-12713] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:51:48.518 [DEBUG] [Thread-12715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:03.561 [DEBUG] [Thread-12716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:05.842 [DEBUG] [Thread-12717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:14.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:52:14.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:52:14.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-25T13:52:15.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 52, 5), 28.76, 15.0, 0.0, 19.43, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:52:15.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:52:05
2025-12-25T13:52:15.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:52:15.740 [DEBUG] [Thread-12718] [transport.py] [_log()] starting thread (client mode): 0xb9592380
2025-12-25T13:52:15.740 [DEBUG] [Thread-12718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:52:15.761 [DEBUG] [Thread-12718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:52:15.761 [INFO] [Thread-12718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:52:15.764 [DEBUG] [Thread-12718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:52:15.764 [DEBUG] [Thread-12718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:52:15.764 [DEBUG] [Thread-12718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:52:15.764 [DEBUG] [Thread-12718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:15.764 [DEBUG] [Thread-12718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:15.764 [DEBUG] [Thread-12718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] client lang: <none>
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] server lang: <none>
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] kex follows: False
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] Compression: none
2025-12-25T13:52:15.765 [DEBUG] [Thread-12718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:52:15.784 [DEBUG] [Thread-12718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:52:15.785 [DEBUG] [Thread-12718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:52:15.785 [DEBUG] [Thread-12718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:52:15.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:52:15.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:52:15.787 [DEBUG] [Thread-12718] [transport.py] [_log()] userauth is OK
2025-12-25T13:52:15.787 [DEBUG] [Thread-12718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:52:15.787 [DEBUG] [Thread-12718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:52:15.787 [DEBUG] [Thread-12718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:52:15.788 [DEBUG] [Thread-12718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:52:15.811 [INFO] [Thread-12718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:52:15.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:52:16.462 [DEBUG] [Thread-12718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:52:16.462 [DEBUG] [Thread-12718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:52:16.462 [DEBUG] [Thread-12718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:52:16.503 [DEBUG] [Thread-12718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:52:16.503 [DEBUG] [Thread-12718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:52:16.506 [DEBUG] [Thread-12718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:52:16.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:52:16.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:52:16.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:52:16.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:52:16.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:52:16.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:52:16.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:52:16.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:52:16.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:52:16.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.494159 -999.00  +25.10  15.73     20   +0.70 1 1 1 1 1   888    0 23.61 -27.57 ----- 15.7 15.7 294.2 33.0 31.2 -25.5 30.7 -25.2 30.7 -23.1 31.4 -23.0
2025-12-25T13:52:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:52:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:52:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.494159
2025-12-25T13:52:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:52:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:52:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:52:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:52:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:52:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:52:05', tmtdew=28.76, humidity=15.0, cloud=0.0, wind=19.43, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:51:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:52:16.534 [DEBUG] [Thread-12718] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:52:16.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-25T13:52:16.629 [DEBUG] [Thread-12721] [transport.py] [_log()] starting thread (client mode): 0xb6b00460
2025-12-25T13:52:16.629 [DEBUG] [Thread-12721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:52:16.644 [DEBUG] [Thread-12721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:52:16.644 [INFO] [Thread-12721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] client lang: <none>
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] server lang: <none>
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] kex follows: False
2025-12-25T13:52:16.652 [DEBUG] [Thread-12721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:52:16.653 [DEBUG] [Thread-12721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:52:16.653 [DEBUG] [Thread-12721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:52:16.653 [DEBUG] [Thread-12721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:52:16.653 [DEBUG] [Thread-12721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:52:16.653 [DEBUG] [Thread-12721] [transport.py] [_log()] Compression: none
2025-12-25T13:52:16.653 [DEBUG] [Thread-12721] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:52:16.711 [DEBUG] [Thread-12721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:52:16.711 [DEBUG] [Thread-12721] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:52:16.712 [DEBUG] [Thread-12721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:52:16.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:52:16.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:52:16.776 [DEBUG] [Thread-12721] [transport.py] [_log()] userauth is OK
2025-12-25T13:52:16.777 [DEBUG] [Thread-12721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:52:16.777 [DEBUG] [Thread-12721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:52:16.777 [DEBUG] [Thread-12721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:52:16.777 [DEBUG] [Thread-12721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:52:16.795 [INFO] [Thread-12721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:52:16.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-25T13:52:16.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:52:17.640 [DEBUG] [Thread-12721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:52:17.640 [DEBUG] [Thread-12721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:52:17.688 [DEBUG] [Thread-12721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:52:17.688 [DEBUG] [Thread-12721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:52:17.697 [DEBUG] [Thread-12721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:52:17.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:52:17.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-25T13:52:17.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-25T13:52:17.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:52:17.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:52:17.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:52:17.733 [DEBUG] [Thread-12721] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:52:18.596 [DEBUG] [Thread-12723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:31.511 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:31.512 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:33.644 [DEBUG] [Thread-12724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:47.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:52:47.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:52:47.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-25T13:52:48.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 52, 37), 29.36, 14.03, 0.0, 14.56, 26.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:52:48.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:52:37
2025-12-25T13:52:48.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:52:48.675 [DEBUG] [Thread-12725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:52:48.742 [DEBUG] [Thread-12726] [transport.py] [_log()] starting thread (client mode): 0xb95903a0
2025-12-25T13:52:48.742 [DEBUG] [Thread-12726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:52:48.762 [DEBUG] [Thread-12726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:52:48.762 [INFO] [Thread-12726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:48.763 [DEBUG] [Thread-12726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] client lang: <none>
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] server lang: <none>
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] kex follows: False
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] Compression: none
2025-12-25T13:52:48.764 [DEBUG] [Thread-12726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:52:48.773 [DEBUG] [Thread-12726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:52:48.774 [DEBUG] [Thread-12726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:52:48.775 [DEBUG] [Thread-12726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:52:48.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:52:48.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:52:48.777 [DEBUG] [Thread-12726] [transport.py] [_log()] userauth is OK
2025-12-25T13:52:48.777 [DEBUG] [Thread-12726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:52:48.777 [DEBUG] [Thread-12726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:52:48.777 [DEBUG] [Thread-12726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:52:48.777 [DEBUG] [Thread-12726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:52:48.802 [INFO] [Thread-12726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:52:48.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:52:49.438 [DEBUG] [Thread-12726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:52:49.438 [DEBUG] [Thread-12726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:52:49.439 [DEBUG] [Thread-12726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:52:49.479 [DEBUG] [Thread-12726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:52:49.479 [DEBUG] [Thread-12726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:52:49.482 [DEBUG] [Thread-12726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:52:49.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:52:49.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:52:49.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:52:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:52:49.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:52:49.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:52:49.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:52:49.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:52:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:52:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.494506 -999.00  +25.50  19.23     20   +1.20 1 1 1 1 1   888    0 23.00 -27.29 ----- 19.2 19.2 302.2 21.9 31.4 -24.7 30.9 -25.1 30.9 -21.9 31.4 -23.3
2025-12-25T13:52:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:52:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:52:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.494506
2025-12-25T13:52:49.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:52:49.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:52:49.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:52:49.508 [DEBUG] [Thread-12726] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:52:49.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:52:49.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:52:49.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:52:37', tmtdew=29.36, humidity=14.03, cloud=0.0, wind=14.56, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:52:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:52:49.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-25T13:52:49.601 [DEBUG] [Thread-12729] [transport.py] [_log()] starting thread (client mode): 0xb95b1900
2025-12-25T13:52:49.601 [DEBUG] [Thread-12729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:52:49.615 [DEBUG] [Thread-12729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:52:49.615 [INFO] [Thread-12729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:52:49.623 [DEBUG] [Thread-12729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:52:49.623 [DEBUG] [Thread-12729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:52:49.623 [DEBUG] [Thread-12729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:52:49.623 [DEBUG] [Thread-12729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:49.623 [DEBUG] [Thread-12729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:52:49.623 [DEBUG] [Thread-12729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] client lang: <none>
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] server lang: <none>
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] kex follows: False
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] Compression: none
2025-12-25T13:52:49.624 [DEBUG] [Thread-12729] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:52:49.681 [DEBUG] [Thread-12729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:52:49.681 [DEBUG] [Thread-12729] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:52:49.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:52:49.682 [DEBUG] [Thread-12729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:52:49.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:52:49.737 [DEBUG] [Thread-12729] [transport.py] [_log()] userauth is OK
2025-12-25T13:52:49.737 [DEBUG] [Thread-12729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:52:49.738 [DEBUG] [Thread-12729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:52:49.738 [DEBUG] [Thread-12729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:52:49.738 [DEBUG] [Thread-12729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:52:49.757 [INFO] [Thread-12729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:52:49.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:52:50.547 [DEBUG] [Thread-12729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:52:50.548 [DEBUG] [Thread-12729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:52:50.596 [DEBUG] [Thread-12729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:52:50.596 [DEBUG] [Thread-12729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:52:50.605 [DEBUG] [Thread-12729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:52:50.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:52:50.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-25T13:52:50.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:52:50.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:52:50.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:52:50.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:52:50.641 [DEBUG] [Thread-12729] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:53:03.709 [DEBUG] [Thread-12731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:05.892 [DEBUG] [Thread-12732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:18.748 [DEBUG] [Thread-12733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:53:20.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:53:20.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-25T13:53:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 53, 9), 29.56, 13.83, 0.0, 13.82, 26.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:53:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:53:09
2025-12-25T13:53:21.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:53:21.633 [DEBUG] [Thread-12734] [transport.py] [_log()] starting thread (client mode): 0xb9592530
2025-12-25T13:53:21.633 [DEBUG] [Thread-12734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:53:21.653 [DEBUG] [Thread-12734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:53:21.653 [INFO] [Thread-12734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:53:21.656 [DEBUG] [Thread-12734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:53:21.656 [DEBUG] [Thread-12734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:53:21.656 [DEBUG] [Thread-12734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] client lang: <none>
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] server lang: <none>
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] kex follows: False
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:53:21.657 [DEBUG] [Thread-12734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:53:21.658 [DEBUG] [Thread-12734] [transport.py] [_log()] Compression: none
2025-12-25T13:53:21.658 [DEBUG] [Thread-12734] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:53:21.674 [DEBUG] [Thread-12734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:53:21.675 [DEBUG] [Thread-12734] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:53:21.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:53:21.676 [DEBUG] [Thread-12734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:53:21.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:53:21.678 [DEBUG] [Thread-12734] [transport.py] [_log()] userauth is OK
2025-12-25T13:53:21.678 [DEBUG] [Thread-12734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:53:21.678 [DEBUG] [Thread-12734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:53:21.679 [DEBUG] [Thread-12734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:53:21.679 [DEBUG] [Thread-12734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:53:21.702 [INFO] [Thread-12734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:53:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:53:22.332 [DEBUG] [Thread-12734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:53:22.332 [DEBUG] [Thread-12734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:53:22.333 [DEBUG] [Thread-12734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:53:22.374 [DEBUG] [Thread-12734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:53:22.374 [DEBUG] [Thread-12734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:53:22.378 [DEBUG] [Thread-12734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:53:22.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:53:22.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:53:22.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:53:22.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:53:22.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:53:22.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:53:22.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:53:22.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:53:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:53:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.494853 -999.00  +25.30  16.96     20   +1.10 1 1 1 1 1   888    0 23.14 -26.95 ----- 17.0 17.0 313.8 21.7 31.4 -25.3 30.9 -25.2 30.8 -25.6 31.6 -23.7
2025-12-25T13:53:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:53:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:53:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.494853
2025-12-25T13:53:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:53:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:53:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:53:22.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:53:22.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:53:22.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:53:09', tmtdew=29.56, humidity=13.83, cloud=0.0, wind=13.82, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:52:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:53:22.406 [DEBUG] [Thread-12734] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:53:22.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-25T13:53:22.499 [DEBUG] [Thread-12737] [transport.py] [_log()] starting thread (client mode): 0xb95b3be0
2025-12-25T13:53:22.499 [DEBUG] [Thread-12737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:53:22.518 [DEBUG] [Thread-12737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:53:22.518 [INFO] [Thread-12737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:53:22.526 [DEBUG] [Thread-12737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] client lang: <none>
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] server lang: <none>
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] kex follows: False
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:53:22.527 [DEBUG] [Thread-12737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:53:22.528 [DEBUG] [Thread-12737] [transport.py] [_log()] Compression: none
2025-12-25T13:53:22.528 [DEBUG] [Thread-12737] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:53:22.585 [DEBUG] [Thread-12737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:53:22.586 [DEBUG] [Thread-12737] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:53:22.586 [DEBUG] [Thread-12737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:53:22.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:53:22.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:53:22.641 [DEBUG] [Thread-12737] [transport.py] [_log()] userauth is OK
2025-12-25T13:53:22.641 [DEBUG] [Thread-12737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:53:22.642 [DEBUG] [Thread-12737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:53:22.642 [DEBUG] [Thread-12737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:53:22.642 [DEBUG] [Thread-12737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:53:22.660 [INFO] [Thread-12737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:53:22.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-25T13:53:22.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:53:23.503 [DEBUG] [Thread-12737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:53:23.503 [DEBUG] [Thread-12737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:53:23.551 [DEBUG] [Thread-12737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:53:23.551 [DEBUG] [Thread-12737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:53:23.561 [DEBUG] [Thread-12737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:53:23.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:53:23.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-25T13:53:23.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-25T13:53:23.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:53:23.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:53:23.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:53:23.597 [DEBUG] [Thread-12737] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:53:31.661 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:31.662 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:33.785 [DEBUG] [Thread-12739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:48.839 [DEBUG] [Thread-12740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:53:53.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:53:53.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:53:53.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T13:53:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 53, 41), 29.16, 14.42, 0.0, 14.77, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:53:54.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:53:41
2025-12-25T13:53:54.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:53:54.557 [DEBUG] [Thread-12741] [transport.py] [_log()] starting thread (client mode): 0xb6b03910
2025-12-25T13:53:54.557 [DEBUG] [Thread-12741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:53:54.579 [DEBUG] [Thread-12741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:53:54.580 [INFO] [Thread-12741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:53:54.583 [DEBUG] [Thread-12741] [transport.py] [_log()] client lang: <none>
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] server lang: <none>
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] kex follows: False
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] Compression: none
2025-12-25T13:53:54.584 [DEBUG] [Thread-12741] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:53:54.602 [DEBUG] [Thread-12741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:53:54.603 [DEBUG] [Thread-12741] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:53:54.603 [DEBUG] [Thread-12741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:53:54.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:53:54.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:53:54.604 [DEBUG] [Thread-12741] [transport.py] [_log()] userauth is OK
2025-12-25T13:53:54.604 [DEBUG] [Thread-12741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:53:54.604 [DEBUG] [Thread-12741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:53:54.604 [DEBUG] [Thread-12741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:53:54.605 [DEBUG] [Thread-12741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:53:54.629 [INFO] [Thread-12741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:53:54.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:53:55.273 [DEBUG] [Thread-12741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:53:55.274 [DEBUG] [Thread-12741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:53:55.274 [DEBUG] [Thread-12741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:53:55.315 [DEBUG] [Thread-12741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:53:55.315 [DEBUG] [Thread-12741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:53:55.319 [DEBUG] [Thread-12741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:53:55.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:53:55.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:53:55.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:53:55.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:53:55.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:53:55.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:53:55.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:53:55.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:53:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:53:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.495548 -999.00  +24.90  13.44     21   +1.10 1 1 1 1 1   888    0 22.98 -30.08 ----- 13.4 13.4 306.8 18.1 31.6 -25.1 31.0 -25.4 31.1 -22.0 31.7 -24.0
2025-12-25T13:53:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:53:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:53:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.495548
2025-12-25T13:53:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:53:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:53:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:53:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:53:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:53:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:53:41', tmtdew=29.16, humidity=14.42, cloud=0.0, wind=14.77, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:53:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:53:55.349 [DEBUG] [Thread-12741] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:53:55.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-25T13:53:55.444 [DEBUG] [Thread-12744] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-25T13:53:55.444 [DEBUG] [Thread-12744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:53:55.459 [DEBUG] [Thread-12744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:53:55.459 [INFO] [Thread-12744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:53:55.466 [DEBUG] [Thread-12744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:53:55.466 [DEBUG] [Thread-12744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:53:55.466 [DEBUG] [Thread-12744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:53:55.466 [DEBUG] [Thread-12744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:55.466 [DEBUG] [Thread-12744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:53:55.466 [DEBUG] [Thread-12744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] client lang: <none>
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] server lang: <none>
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] kex follows: False
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] Compression: none
2025-12-25T13:53:55.467 [DEBUG] [Thread-12744] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:53:55.525 [DEBUG] [Thread-12744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:53:55.526 [DEBUG] [Thread-12744] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:53:55.527 [DEBUG] [Thread-12744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:53:55.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:53:55.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:53:55.581 [DEBUG] [Thread-12744] [transport.py] [_log()] userauth is OK
2025-12-25T13:53:55.581 [DEBUG] [Thread-12744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:53:55.581 [DEBUG] [Thread-12744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:53:55.581 [DEBUG] [Thread-12744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:53:55.581 [DEBUG] [Thread-12744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:53:55.604 [INFO] [Thread-12744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:53:55.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-25T13:53:55.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:53:56.405 [DEBUG] [Thread-12744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:53:56.405 [DEBUG] [Thread-12744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:53:56.453 [DEBUG] [Thread-12744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:53:56.454 [DEBUG] [Thread-12744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:53:56.463 [DEBUG] [Thread-12744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:53:56.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:53:56.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-25T13:53:56.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:53:56.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:53:56.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:53:56.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:53:56.500 [DEBUG] [Thread-12744] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:54:03.878 [DEBUG] [Thread-12746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:05.945 [DEBUG] [Thread-12747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:18.930 [DEBUG] [Thread-12748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:54:26.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:54:26.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-25T13:54:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 54, 13), 28.77, 14.78, 0.0, 17.2, 25.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:54:27.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:54:13
2025-12-25T13:54:27.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:54:27.499 [DEBUG] [Thread-12749] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-25T13:54:27.499 [DEBUG] [Thread-12749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:54:27.519 [DEBUG] [Thread-12749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:54:27.520 [INFO] [Thread-12749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] client lang: <none>
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] server lang: <none>
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] kex follows: False
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] Compression: none
2025-12-25T13:54:27.523 [DEBUG] [Thread-12749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:54:27.541 [DEBUG] [Thread-12749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:54:27.542 [DEBUG] [Thread-12749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:54:27.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:54:27.543 [DEBUG] [Thread-12749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:54:27.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:54:27.545 [DEBUG] [Thread-12749] [transport.py] [_log()] userauth is OK
2025-12-25T13:54:27.545 [DEBUG] [Thread-12749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:54:27.545 [DEBUG] [Thread-12749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:54:27.545 [DEBUG] [Thread-12749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:54:27.545 [DEBUG] [Thread-12749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:54:27.583 [INFO] [Thread-12749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:54:27.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:54:28.203 [DEBUG] [Thread-12749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:54:28.204 [DEBUG] [Thread-12749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:54:28.204 [DEBUG] [Thread-12749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:54:28.245 [DEBUG] [Thread-12749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:54:28.245 [DEBUG] [Thread-12749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:54:28.249 [DEBUG] [Thread-12749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:54:28.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:54:28.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:54:28.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:54:28.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:54:28.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:54:28.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:54:28.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:54:28.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:54:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:54:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.495895 -999.00  +25.60  20.66     21   +1.70 1 1 1 1 1   888    0 22.84 -29.34 ----- 20.7 20.7 290.0 24.9 31.6 -24.9 31.2 -25.3 31.1 -24.1 31.8 -23.2
2025-12-25T13:54:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:54:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:54:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.495895
2025-12-25T13:54:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:54:28.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:54:28.274 [DEBUG] [Thread-12749] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:54:28.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:54:28.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:54:28.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:54:28.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:54:13', tmtdew=28.77, humidity=14.78, cloud=0.0, wind=17.2, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:54:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:54:28.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-25T13:54:28.368 [DEBUG] [Thread-12752] [transport.py] [_log()] starting thread (client mode): 0xb95d7610
2025-12-25T13:54:28.368 [DEBUG] [Thread-12752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:54:28.382 [DEBUG] [Thread-12752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:54:28.382 [INFO] [Thread-12752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:54:28.390 [DEBUG] [Thread-12752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] client lang: <none>
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] server lang: <none>
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] kex follows: False
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] Compression: none
2025-12-25T13:54:28.391 [DEBUG] [Thread-12752] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:54:28.449 [DEBUG] [Thread-12752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:54:28.450 [DEBUG] [Thread-12752] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:54:28.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:54:28.451 [DEBUG] [Thread-12752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:54:28.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:54:28.505 [DEBUG] [Thread-12752] [transport.py] [_log()] userauth is OK
2025-12-25T13:54:28.505 [DEBUG] [Thread-12752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:54:28.505 [DEBUG] [Thread-12752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:54:28.506 [DEBUG] [Thread-12752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:54:28.506 [DEBUG] [Thread-12752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:54:28.528 [INFO] [Thread-12752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:54:28.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-25T13:54:28.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:54:29.378 [DEBUG] [Thread-12752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:54:29.378 [DEBUG] [Thread-12752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:54:29.426 [DEBUG] [Thread-12752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:54:29.426 [DEBUG] [Thread-12752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:54:29.435 [DEBUG] [Thread-12752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:54:29.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:54: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-25T13:54:29.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-25T13:54:29.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:54:29.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:54:29.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:54:29.472 [DEBUG] [Thread-12752] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:54:31.801 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:31.802 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:33.965 [DEBUG] [Thread-12754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:49.015 [DEBUG] [Thread-12755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:54:59.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:54:59.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:54:59.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-25T13:55:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 54, 45), 28.84, 14.53, 0.0, 30.47, 26.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:55:00.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:54:45
2025-12-25T13:55:00.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:55:00.496 [DEBUG] [Thread-12756] [transport.py] [_log()] starting thread (client mode): 0xb6b03820
2025-12-25T13:55:00.496 [DEBUG] [Thread-12756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:55:00.512 [DEBUG] [Thread-12756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:55:00.512 [INFO] [Thread-12756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:55:00.514 [DEBUG] [Thread-12756] [transport.py] [_log()] client lang: <none>
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] server lang: <none>
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] kex follows: False
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] Compression: none
2025-12-25T13:55:00.515 [DEBUG] [Thread-12756] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:55:00.524 [DEBUG] [Thread-12756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:55:00.524 [DEBUG] [Thread-12756] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:55:00.525 [DEBUG] [Thread-12756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:55:00.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:55:00.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:55:00.525 [DEBUG] [Thread-12756] [transport.py] [_log()] userauth is OK
2025-12-25T13:55:00.525 [DEBUG] [Thread-12756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:55:00.525 [DEBUG] [Thread-12756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:55:00.525 [DEBUG] [Thread-12756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:55:00.525 [DEBUG] [Thread-12756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:55:00.534 [INFO] [Thread-12756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:55:00.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:55:01.198 [DEBUG] [Thread-12756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:55:01.198 [DEBUG] [Thread-12756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:55:01.198 [DEBUG] [Thread-12756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:55:01.239 [DEBUG] [Thread-12756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:55:01.240 [DEBUG] [Thread-12756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:55:01.242 [DEBUG] [Thread-12756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:55:01.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:55:01.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:55:01.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:55:01.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:55:01.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:55:01.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:55:01.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.496242 -999.00  +26.60  26.57     20   +1.70 1 1 1 1 1   888    0 23.29 -27.25 ----- 26.6 26.6 292.0 31.6 31.8 -25.3 31.2 -24.9 31.3 -24.3 31.9 -22.7
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.496242
2025-12-25T13:55:01.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:55:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:55:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:55:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:55:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:55:01.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:54:45', tmtdew=28.84, humidity=14.53, cloud=0.0, wind=30.47, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:54:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:55:01.262 [DEBUG] [Thread-12756] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:55:01.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-25T13:55:01.345 [DEBUG] [Thread-12759] [transport.py] [_log()] starting thread (client mode): 0xb6b03bb0
2025-12-25T13:55:01.345 [DEBUG] [Thread-12759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:55:01.363 [DEBUG] [Thread-12759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:55:01.364 [INFO] [Thread-12759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] client lang: <none>
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] server lang: <none>
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] kex follows: False
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:55:01.371 [DEBUG] [Thread-12759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:55:01.372 [DEBUG] [Thread-12759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:55:01.372 [DEBUG] [Thread-12759] [transport.py] [_log()] Compression: none
2025-12-25T13:55:01.372 [DEBUG] [Thread-12759] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:55:01.427 [DEBUG] [Thread-12759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:55:01.428 [DEBUG] [Thread-12759] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:55:01.428 [DEBUG] [Thread-12759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:55:01.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:55:01.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:55:01.484 [DEBUG] [Thread-12759] [transport.py] [_log()] userauth is OK
2025-12-25T13:55:01.484 [DEBUG] [Thread-12759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:55:01.484 [DEBUG] [Thread-12759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:55:01.484 [DEBUG] [Thread-12759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:55:01.485 [DEBUG] [Thread-12759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:55:01.502 [INFO] [Thread-12759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:55:01.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-25T13:55:01.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:55:02.346 [DEBUG] [Thread-12759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:55:02.346 [DEBUG] [Thread-12759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:55:02.396 [DEBUG] [Thread-12759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:55:02.397 [DEBUG] [Thread-12759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:55:02.405 [DEBUG] [Thread-12759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:55:02.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:55:02.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-25T13:55:02.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-25T13:55:02.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:55:02.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:55:02.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:55:02.437 [DEBUG] [Thread-12759] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:55:04.048 [DEBUG] [Thread-12761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:55:06.000 [DEBUG] [Thread-12762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:55:19.088 [DEBUG] [Thread-12763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:55:31.943 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:55:31.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:55:32.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:55:32.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:55:32.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-25T13:55:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 55, 17), 28.84, 14.56, 0.0, 29.1, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:55:33.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:55:17
2025-12-25T13:55:33.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:55:33.428 [DEBUG] [Thread-12764] [transport.py] [_log()] starting thread (client mode): 0xb95d68c0
2025-12-25T13:55:33.428 [DEBUG] [Thread-12764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:55:33.450 [DEBUG] [Thread-12764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:55:33.450 [INFO] [Thread-12764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] client lang: <none>
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] server lang: <none>
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] kex follows: False
2025-12-25T13:55:33.451 [DEBUG] [Thread-12764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:55:33.452 [DEBUG] [Thread-12764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:55:33.452 [DEBUG] [Thread-12764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:55:33.452 [DEBUG] [Thread-12764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:55:33.452 [DEBUG] [Thread-12764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:55:33.452 [DEBUG] [Thread-12764] [transport.py] [_log()] Compression: none
2025-12-25T13:55:33.452 [DEBUG] [Thread-12764] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:55:33.469 [DEBUG] [Thread-12764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:55:33.469 [DEBUG] [Thread-12764] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:55:33.470 [DEBUG] [Thread-12764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:55:33.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:55:33.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:55:33.472 [DEBUG] [Thread-12764] [transport.py] [_log()] userauth is OK
2025-12-25T13:55:33.472 [DEBUG] [Thread-12764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:55:33.472 [DEBUG] [Thread-12764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:55:33.472 [DEBUG] [Thread-12764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:55:33.472 [DEBUG] [Thread-12764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:55:33.491 [INFO] [Thread-12764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:55:33.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:55:34.121 [DEBUG] [Thread-12766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:55:34.139 [DEBUG] [Thread-12764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:55:34.139 [DEBUG] [Thread-12764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:55:34.139 [DEBUG] [Thread-12764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:55:34.180 [DEBUG] [Thread-12764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:55:34.180 [DEBUG] [Thread-12764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:55:34.184 [DEBUG] [Thread-12764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:55:34.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:55:34.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:55:34.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:55:34.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:55:34.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:55:34.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:55:34.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:55:34.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:55:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:55:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.496589 -999.00  +26.50  18.35     19   +1.30 1 1 1 1 1   888    0 23.45 -21.94 ----- 18.4 18.4 300.6 26.1 31.8 -25.1 31.3 -25.6 31.3 -23.1 32.0 -23.1
2025-12-25T13:55:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:55:34.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:55:34.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.496589
2025-12-25T13:55:34.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:55:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:55:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:55:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:55:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:55:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:55:17', tmtdew=28.84, humidity=14.56, cloud=0.0, wind=29.1, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:55:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:55:34.211 [DEBUG] [Thread-12764] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:55:34.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:55:34.296 [DEBUG] [Thread-12768] [transport.py] [_log()] starting thread (client mode): 0xb95f2080
2025-12-25T13:55:34.296 [DEBUG] [Thread-12768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:55:34.310 [DEBUG] [Thread-12768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:55:34.310 [INFO] [Thread-12768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:55:34.318 [DEBUG] [Thread-12768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:55:34.318 [DEBUG] [Thread-12768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:55:34.318 [DEBUG] [Thread-12768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:55:34.318 [DEBUG] [Thread-12768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:34.318 [DEBUG] [Thread-12768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] client lang: <none>
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] server lang: <none>
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] kex follows: False
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] Compression: none
2025-12-25T13:55:34.319 [DEBUG] [Thread-12768] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:55:34.377 [DEBUG] [Thread-12768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:55:34.377 [DEBUG] [Thread-12768] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:55:34.378 [DEBUG] [Thread-12768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:55:34.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:55:34.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:55:34.433 [DEBUG] [Thread-12768] [transport.py] [_log()] userauth is OK
2025-12-25T13:55:34.433 [DEBUG] [Thread-12768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:55:34.433 [DEBUG] [Thread-12768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:55:34.433 [DEBUG] [Thread-12768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:55:34.433 [DEBUG] [Thread-12768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:55:34.452 [INFO] [Thread-12768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:55:34.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-25T13:55:34.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:55:35.275 [DEBUG] [Thread-12768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:55:35.275 [DEBUG] [Thread-12768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:55:35.323 [DEBUG] [Thread-12768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:55:35.323 [DEBUG] [Thread-12768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:55:35.332 [DEBUG] [Thread-12768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:55:35.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:55:35.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-25T13:55:35.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T13:55:35.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:55:35.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:55:35.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:55:35.369 [DEBUG] [Thread-12768] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:55:49.157 [DEBUG] [Thread-12770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:04.208 [DEBUG] [Thread-12771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:05.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:56:05.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:56:05.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-25T13:56:06.046 [DEBUG] [Thread-12772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:06.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 55, 49), 28.4, 15.01, 0.0, 25.97, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:56:06.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:55:49
2025-12-25T13:56:06.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:56:06.348 [DEBUG] [Thread-12773] [transport.py] [_log()] starting thread (client mode): 0xb9590280
2025-12-25T13:56:06.348 [DEBUG] [Thread-12773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:56:06.361 [DEBUG] [Thread-12773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:56:06.361 [INFO] [Thread-12773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] client lang: <none>
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] server lang: <none>
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] kex follows: False
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] Compression: none
2025-12-25T13:56:06.365 [DEBUG] [Thread-12773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:56:06.383 [DEBUG] [Thread-12773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:56:06.384 [DEBUG] [Thread-12773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:56:06.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:56:06.385 [DEBUG] [Thread-12773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:56:06.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:56:06.387 [DEBUG] [Thread-12773] [transport.py] [_log()] userauth is OK
2025-12-25T13:56:06.387 [DEBUG] [Thread-12773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:56:06.387 [DEBUG] [Thread-12773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:56:06.387 [DEBUG] [Thread-12773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:56:06.388 [DEBUG] [Thread-12773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:56:06.412 [INFO] [Thread-12773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:56:06.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:56:07.005 [DEBUG] [Thread-12773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:56:07.005 [DEBUG] [Thread-12773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:56:07.005 [DEBUG] [Thread-12773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:56:07.046 [DEBUG] [Thread-12773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:56:07.046 [DEBUG] [Thread-12773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:56:07.049 [DEBUG] [Thread-12773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:56:07.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:56:07.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:56:07.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:56:07.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:56:07.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:56:07.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:56:07.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:56:07.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:56:07.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:56:07.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.496937 -999.00  +26.20  12.64     20   +2.10 1 1 1 1 1   888    0 23.81 -16.16 ----- 12.6 12.6 287.4 22.6 31.9 -25.0 31.4 -24.9 31.4 -21.8 32.1 -23.7
2025-12-25T13:56:07.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:56:07.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:56:07.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.496937
2025-12-25T13:56:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:56:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:56:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:56:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:56:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:56:07.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:55:49', tmtdew=28.4, humidity=15.01, cloud=0.0, wind=25.97, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:55:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:56:07.076 [DEBUG] [Thread-12773] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:56:07.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-25T13:56:07.168 [DEBUG] [Thread-12776] [transport.py] [_log()] starting thread (client mode): 0xb6b15960
2025-12-25T13:56:07.168 [DEBUG] [Thread-12776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:56:07.182 [DEBUG] [Thread-12776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:56:07.183 [INFO] [Thread-12776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] client lang: <none>
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] server lang: <none>
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] kex follows: False
2025-12-25T13:56:07.190 [DEBUG] [Thread-12776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:56:07.191 [DEBUG] [Thread-12776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:56:07.191 [DEBUG] [Thread-12776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:56:07.191 [DEBUG] [Thread-12776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:56:07.191 [DEBUG] [Thread-12776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:56:07.191 [DEBUG] [Thread-12776] [transport.py] [_log()] Compression: none
2025-12-25T13:56:07.191 [DEBUG] [Thread-12776] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:56:07.249 [DEBUG] [Thread-12776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:56:07.249 [DEBUG] [Thread-12776] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:56:07.250 [DEBUG] [Thread-12776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:56:07.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:56:07.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:56:07.309 [DEBUG] [Thread-12776] [transport.py] [_log()] userauth is OK
2025-12-25T13:56:07.309 [DEBUG] [Thread-12776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:56:07.309 [DEBUG] [Thread-12776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:56:07.309 [DEBUG] [Thread-12776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:56:07.309 [DEBUG] [Thread-12776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:56:07.328 [INFO] [Thread-12776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:56:07.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-25T13:56:07.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:56:08.155 [DEBUG] [Thread-12776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:56:08.156 [DEBUG] [Thread-12776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:56:08.203 [DEBUG] [Thread-12776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:56:08.204 [DEBUG] [Thread-12776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:56:08.212 [DEBUG] [Thread-12776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:56:08.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:56:08.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-25T13:56:08.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-25T13:56:08.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:56:08.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:56:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:56:08.246 [DEBUG] [Thread-12776] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:56:19.242 [DEBUG] [Thread-12778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:32.086 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:32.088 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:34.280 [DEBUG] [Thread-12779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:56:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:56:38.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:56:38.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-25T13:56:38.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 56, 21), 28.18, 15.23, 0.0, 24.61, 25.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:56:38.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:56:21
2025-12-25T13:56:39.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:56:39.237 [DEBUG] [Thread-12780] [transport.py] [_log()] starting thread (client mode): 0xb9547f10
2025-12-25T13:56:39.237 [DEBUG] [Thread-12780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:56:39.259 [DEBUG] [Thread-12780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:56:39.259 [INFO] [Thread-12780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:39.263 [DEBUG] [Thread-12780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] client lang: <none>
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] server lang: <none>
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] kex follows: False
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:56:39.264 [DEBUG] [Thread-12780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:56:39.265 [DEBUG] [Thread-12780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:56:39.265 [DEBUG] [Thread-12780] [transport.py] [_log()] Compression: none
2025-12-25T13:56:39.265 [DEBUG] [Thread-12780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:56:39.284 [DEBUG] [Thread-12780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:56:39.284 [DEBUG] [Thread-12780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:56:39.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:56:39.285 [DEBUG] [Thread-12780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:56:39.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:56:39.287 [DEBUG] [Thread-12780] [transport.py] [_log()] userauth is OK
2025-12-25T13:56:39.288 [DEBUG] [Thread-12780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:56:39.288 [DEBUG] [Thread-12780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:56:39.288 [DEBUG] [Thread-12780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:56:39.288 [DEBUG] [Thread-12780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:56:39.320 [INFO] [Thread-12780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:56:39.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:56:39.952 [DEBUG] [Thread-12780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:56:39.952 [DEBUG] [Thread-12780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:56:39.953 [DEBUG] [Thread-12780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:56:39.993 [DEBUG] [Thread-12780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:56:39.993 [DEBUG] [Thread-12780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:56:39.997 [DEBUG] [Thread-12780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:56:40.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:56:40.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:56:40.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:56:40.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:56:40.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:56:40.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:56:40.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:56:40.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:56:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:56:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.497284 -999.00  +26.60  18.68     21   +2.60 1 1 1 1 1   888    0 23.55 -14.87 ----- 17.6 18.7 307.6 21.8 32.1 -24.7 31.5 -25.1 31.6 -22.4 32.2 -22.8
2025-12-25T13:56:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:56:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:56:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.497284
2025-12-25T13:56:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:56:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:56:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:56:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:56:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:56:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:56:21', tmtdew=28.18, humidity=15.23, cloud=0.0, wind=24.61, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:56:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:56:40.024 [DEBUG] [Thread-12780] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:56:40.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-25T13:56:40.117 [DEBUG] [Thread-12783] [transport.py] [_log()] starting thread (client mode): 0xb9545630
2025-12-25T13:56:40.117 [DEBUG] [Thread-12783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:56:40.132 [DEBUG] [Thread-12783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:56:40.132 [INFO] [Thread-12783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:56:40.140 [DEBUG] [Thread-12783] [transport.py] [_log()] client lang: <none>
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] server lang: <none>
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] kex follows: False
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] Compression: none
2025-12-25T13:56:40.141 [DEBUG] [Thread-12783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:56:40.197 [DEBUG] [Thread-12783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:56:40.197 [DEBUG] [Thread-12783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:56:40.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:56:40.198 [DEBUG] [Thread-12783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:56:40.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:56:40.253 [DEBUG] [Thread-12783] [transport.py] [_log()] userauth is OK
2025-12-25T13:56:40.253 [DEBUG] [Thread-12783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:56:40.253 [DEBUG] [Thread-12783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:56:40.253 [DEBUG] [Thread-12783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:56:40.253 [DEBUG] [Thread-12783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:56:40.274 [INFO] [Thread-12783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:56:40.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-25T13:56:40.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:56:41.106 [DEBUG] [Thread-12783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:56:41.107 [DEBUG] [Thread-12783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:56:41.155 [DEBUG] [Thread-12783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:56:41.155 [DEBUG] [Thread-12783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:56:41.165 [DEBUG] [Thread-12783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:56:41.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:56:41.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-25T13:56:41.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-25T13:56:41.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:56:41.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:56:41.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:56:41.202 [DEBUG] [Thread-12783] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:56:49.320 [DEBUG] [Thread-12785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:04.364 [DEBUG] [Thread-12786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:06.106 [DEBUG] [Thread-12787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:11.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:57:11.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:57:11.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-25T13:57:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 56, 53), 27.85, 15.86, 0.0, 26.33, 26.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:57:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:56:53
2025-12-25T13:57:12.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:57:12.203 [DEBUG] [Thread-12788] [transport.py] [_log()] starting thread (client mode): 0xb95d74c0
2025-12-25T13:57:12.203 [DEBUG] [Thread-12788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:57:12.223 [DEBUG] [Thread-12788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:57:12.223 [INFO] [Thread-12788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] client lang: <none>
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] server lang: <none>
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] kex follows: False
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] Compression: none
2025-12-25T13:57:12.227 [DEBUG] [Thread-12788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:57:12.244 [DEBUG] [Thread-12788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:57:12.244 [DEBUG] [Thread-12788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:57:12.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:57:12.245 [DEBUG] [Thread-12788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:57:12.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:57:12.247 [DEBUG] [Thread-12788] [transport.py] [_log()] userauth is OK
2025-12-25T13:57:12.247 [DEBUG] [Thread-12788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:57:12.247 [DEBUG] [Thread-12788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:57:12.247 [DEBUG] [Thread-12788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:57:12.247 [DEBUG] [Thread-12788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:57:12.267 [INFO] [Thread-12788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:57:12.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:57:12.875 [DEBUG] [Thread-12788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:57:12.875 [DEBUG] [Thread-12788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:57:12.875 [DEBUG] [Thread-12788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:57:12.916 [DEBUG] [Thread-12788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:57:12.916 [DEBUG] [Thread-12788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:57:12.919 [DEBUG] [Thread-12788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:57:12.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:57:12.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:57:12.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:57:12.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:57:12.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:57:12.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:57:12.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:57:12.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:57:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:57:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.497631 -999.00  +26.20  32.91     21   +2.70 1 1 2 1 1   888    0 23.99 -15.40 ----- 32.1 32.9 329.2 41.6 32.0 -25.7 31.4 -25.7 31.7 -23.9 32.4 -24.0
2025-12-25T13:57:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:57:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:57:12.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.497631
2025-12-25T13:57:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:57:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:57:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:57:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:57:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:57:12.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:56:53', tmtdew=27.85, humidity=15.86, cloud=0.0, wind=26.33, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:56:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:57:12.943 [DEBUG] [Thread-12788] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:57:13.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-25T13:57:13.039 [DEBUG] [Thread-12791] [transport.py] [_log()] starting thread (client mode): 0xb95d6830
2025-12-25T13:57:13.039 [DEBUG] [Thread-12791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:57:13.054 [DEBUG] [Thread-12791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T13:57:13.054 [INFO] [Thread-12791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] client lang: <none>
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] server lang: <none>
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] kex follows: False
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:57:13.062 [DEBUG] [Thread-12791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:57:13.063 [DEBUG] [Thread-12791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:57:13.063 [DEBUG] [Thread-12791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:57:13.063 [DEBUG] [Thread-12791] [transport.py] [_log()] Compression: none
2025-12-25T13:57:13.063 [DEBUG] [Thread-12791] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:57:13.120 [DEBUG] [Thread-12791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:57:13.121 [DEBUG] [Thread-12791] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:57:13.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T13:57:13.122 [DEBUG] [Thread-12791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T13:57:13.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:57:13.177 [DEBUG] [Thread-12791] [transport.py] [_log()] userauth is OK
2025-12-25T13:57:13.177 [DEBUG] [Thread-12791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:57:13.177 [DEBUG] [Thread-12791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:57:13.177 [DEBUG] [Thread-12791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T13:57:13.178 [DEBUG] [Thread-12791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:57:13.196 [INFO] [Thread-12791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:57:13.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T13:57:13.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:57:13.985 [DEBUG] [Thread-12791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:57:13.985 [DEBUG] [Thread-12791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:57:14.033 [DEBUG] [Thread-12791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:57:14.033 [DEBUG] [Thread-12791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:57:14.042 [DEBUG] [Thread-12791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:57:14.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:57:14.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-25T13:57:14.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-25T13:57:14.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:57:14.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:57:14.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:57:14.077 [DEBUG] [Thread-12791] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:57:19.400 [DEBUG] [Thread-12793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:32.228 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:32.229 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:34.449 [DEBUG] [Thread-12794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:57:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T13:57:44.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T13:57:44.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-25T13:57:44.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 13, 57, 25), 28.25, 15.45, 0.0, 28.37, 26.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T13:57:44.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 13:57:25
2025-12-25T13:57:44.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T13:57:45.082 [DEBUG] [Thread-12795] [transport.py] [_log()] starting thread (client mode): 0xb6b22a10
2025-12-25T13:57:45.082 [DEBUG] [Thread-12795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T13:57:45.103 [DEBUG] [Thread-12795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T13:57:45.104 [INFO] [Thread-12795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] client lang: <none>
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] server lang: <none>
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] kex follows: False
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T13:57:45.107 [DEBUG] [Thread-12795] [transport.py] [_log()] Compression: none
2025-12-25T13:57:45.108 [DEBUG] [Thread-12795] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T13:57:45.125 [DEBUG] [Thread-12795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T13:57:45.125 [DEBUG] [Thread-12795] [transport.py] [_log()] Switch to new keys ...
2025-12-25T13:57:45.126 [DEBUG] [Thread-12795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T13:57:45.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T13:57:45.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T13:57:45.128 [DEBUG] [Thread-12795] [transport.py] [_log()] userauth is OK
2025-12-25T13:57:45.128 [DEBUG] [Thread-12795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T13:57:45.128 [DEBUG] [Thread-12795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T13:57:45.128 [DEBUG] [Thread-12795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T13:57:45.128 [DEBUG] [Thread-12795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T13:57:45.147 [INFO] [Thread-12795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T13:57:45.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T13:57:45.783 [DEBUG] [Thread-12795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T13:57:45.783 [DEBUG] [Thread-12795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T13:57:45.783 [DEBUG] [Thread-12795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T13:57:45.825 [DEBUG] [Thread-12795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T13:57:45.825 [DEBUG] [Thread-12795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T13:57:45.828 [DEBUG] [Thread-12795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T13:57:45.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T13:57:45.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T13:57:45.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T13:57:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T13:57:45.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T13:57:45.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T13:57:45.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T13:57:45.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T13:57:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T13:57:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.497978 -999.00  +26.50  29.48     21   +2.80 1 1 1 1 1   888    0 23.70 -19.41 ----- 29.5 29.5 309.2 39.6 32.0 -27.1 31.5 -26.9 31.6 -22.2 32.2 -23.7
2025-12-25T13:57:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T13:57:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T13:57:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.497978
2025-12-25T13:57:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T13:57:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T13:57:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T13:57:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T13:57:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T13:57:45.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T13:57:25', tmtdew=28.25, humidity=15.45, cloud=0.0, wind=28.37, temperature=26.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T11:57:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T13:57:45.853 [DEBUG] [Thread-12795] [transport.py] [_log()] EOF in transport thread
2025-12-25T13:57:45.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T13:57:49.484 [DEBUG] [Thread-12798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:04.536 [DEBUG] [Thread-12799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:06.155 [DEBUG] [Thread-12800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:19.568 [DEBUG] [Thread-12801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:32.370 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:32.370 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:34.602 [DEBUG] [Thread-12802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:58:49.640 [DEBUG] [Thread-12803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:04.675 [DEBUG] [Thread-12804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:06.208 [DEBUG] [Thread-12805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:19.713 [DEBUG] [Thread-12806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:32.509 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:32.510 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:34.748 [DEBUG] [Thread-12807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:49.779 [DEBUG] [Thread-12808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T13:59:57.397 [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-25T14:00:04.819 [DEBUG] [Thread-12809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:00:06.258 [DEBUG] [Thread-12810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:00:19.852 [DEBUG] [Thread-12811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:00:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:00:27.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:00:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:00:28.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 0, 6), 28.39, 15.36, 0.0, 20.4, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:00:28.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:00:06
2025-12-25T14:00:28.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:00:28.400 [DEBUG] [Thread-12812] [transport.py] [_log()] starting thread (client mode): 0xb6b235e0
2025-12-25T14:00:28.400 [DEBUG] [Thread-12812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:00:28.420 [DEBUG] [Thread-12812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:00:28.421 [INFO] [Thread-12812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:00:28.423 [DEBUG] [Thread-12812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:00:28.423 [DEBUG] [Thread-12812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] client lang: <none>
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] server lang: <none>
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] kex follows: False
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] Compression: none
2025-12-25T14:00:28.424 [DEBUG] [Thread-12812] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:00:28.440 [DEBUG] [Thread-12812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:00:28.441 [DEBUG] [Thread-12812] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:00:28.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:00:28.442 [DEBUG] [Thread-12812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:00:28.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:00:28.444 [DEBUG] [Thread-12812] [transport.py] [_log()] userauth is OK
2025-12-25T14:00:28.444 [DEBUG] [Thread-12812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:00:28.444 [DEBUG] [Thread-12812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:00:28.444 [DEBUG] [Thread-12812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:00:28.444 [DEBUG] [Thread-12812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:00:28.469 [INFO] [Thread-12812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:00:28.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:00:29.110 [DEBUG] [Thread-12812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:00:29.111 [DEBUG] [Thread-12812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:00:29.111 [DEBUG] [Thread-12812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:00:29.152 [DEBUG] [Thread-12812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:00:29.152 [DEBUG] [Thread-12812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:00:29.154 [DEBUG] [Thread-12812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:00:29.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:00:29.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:00:29.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:00:29.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:00:29.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:00:29.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:00:29.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:00:29.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:00:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:00:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.500061 -999.00  +25.00  23.90     21   +1.70 1 1 1 1 1   888    0 23.47 -10.96 ----- 25.5 23.9 293.6 30.1 31.4 -27.0 30.9 -26.7 31.1 -23.9 31.7 -24.7
2025-12-25T14:00:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:00:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:00:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.500061
2025-12-25T14:00:29.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:00:29.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:00:29.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:00:29.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:00:29.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:00:29.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:00:06', tmtdew=28.39, humidity=15.36, cloud=0.0, wind=20.4, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:00:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:00:29.181 [DEBUG] [Thread-12812] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:00:29.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-25T14:00:29.274 [DEBUG] [Thread-12815] [transport.py] [_log()] starting thread (client mode): 0xb6b23be0
2025-12-25T14:00:29.274 [DEBUG] [Thread-12815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:00:29.291 [DEBUG] [Thread-12815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:00:29.291 [INFO] [Thread-12815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:00:29.298 [DEBUG] [Thread-12815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] client lang: <none>
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] server lang: <none>
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] kex follows: False
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] Compression: none
2025-12-25T14:00:29.299 [DEBUG] [Thread-12815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:00:29.358 [DEBUG] [Thread-12815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:00:29.359 [DEBUG] [Thread-12815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:00:29.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:00:29.360 [DEBUG] [Thread-12815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:00:29.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:00:29.421 [DEBUG] [Thread-12815] [transport.py] [_log()] userauth is OK
2025-12-25T14:00:29.421 [DEBUG] [Thread-12815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:00:29.421 [DEBUG] [Thread-12815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:00:29.421 [DEBUG] [Thread-12815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:00:29.421 [DEBUG] [Thread-12815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:00:29.440 [INFO] [Thread-12815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:00:29.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-25T14:00:29.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:00:30.238 [DEBUG] [Thread-12815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:00:30.239 [DEBUG] [Thread-12815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:00:30.287 [DEBUG] [Thread-12815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:00:30.287 [DEBUG] [Thread-12815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:00:30.296 [DEBUG] [Thread-12815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:00:30.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:00:30.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:00: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-25T14:00:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:00:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:00:30.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:00:30.335 [DEBUG] [Thread-12815] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:00:32.650 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:00:32.651 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:00:34.893 [DEBUG] [Thread-12817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:00:49.954 [DEBUG] [Thread-12818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:01:00.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:01:00.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-25T14:01:01.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 0, 38), 28.1, 15.4, 0.0, 20.56, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:01:01.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:00:38
2025-12-25T14:01:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:01:01.328 [DEBUG] [Thread-12819] [transport.py] [_log()] starting thread (client mode): 0xb9546080
2025-12-25T14:01:01.328 [DEBUG] [Thread-12819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:01:01.348 [DEBUG] [Thread-12819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:01:01.348 [INFO] [Thread-12819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:01:01.351 [DEBUG] [Thread-12819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:01:01.351 [DEBUG] [Thread-12819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:01:01.351 [DEBUG] [Thread-12819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:01:01.351 [DEBUG] [Thread-12819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:01.351 [DEBUG] [Thread-12819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] client lang: <none>
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] server lang: <none>
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] kex follows: False
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] Compression: none
2025-12-25T14:01:01.352 [DEBUG] [Thread-12819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:01:01.370 [DEBUG] [Thread-12819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:01:01.370 [DEBUG] [Thread-12819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:01:01.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:01:01.371 [DEBUG] [Thread-12819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:01:01.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:01:01.373 [DEBUG] [Thread-12819] [transport.py] [_log()] userauth is OK
2025-12-25T14:01:01.373 [DEBUG] [Thread-12819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:01:01.374 [DEBUG] [Thread-12819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:01:01.374 [DEBUG] [Thread-12819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:01:01.374 [DEBUG] [Thread-12819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:01:01.398 [INFO] [Thread-12819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:01:01.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:01:02.046 [DEBUG] [Thread-12819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:01:02.046 [DEBUG] [Thread-12819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:01:02.046 [DEBUG] [Thread-12819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:01:02.087 [DEBUG] [Thread-12819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:01:02.087 [DEBUG] [Thread-12819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:01:02.090 [DEBUG] [Thread-12819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:01:02.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:01:02.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:01:02.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:01:02.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:01:02.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:01:02.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:01:02.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:01:02.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:01:02.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:01:02.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.500409 -999.00  +24.90  17.75     22   +1.80 1 1 1 1 1   888    0 23.44 -11.81 ----- 17.8 17.8 319.0 27.1 31.4 -25.5 30.9 -25.7 31.0 -24.1 31.7 -24.1
2025-12-25T14:01:02.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:01:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:01:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.500409
2025-12-25T14:01:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:01:02.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:01:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:01:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:01:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:01:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:00:38', tmtdew=28.1, humidity=15.4, cloud=0.0, wind=20.56, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:00:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:01:02.115 [DEBUG] [Thread-12819] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:01:02.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-25T14:01:02.207 [DEBUG] [Thread-12822] [transport.py] [_log()] starting thread (client mode): 0xb95f24a0
2025-12-25T14:01:02.208 [DEBUG] [Thread-12822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:01:02.222 [DEBUG] [Thread-12822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:01:02.222 [INFO] [Thread-12822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] client lang: <none>
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] server lang: <none>
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] kex follows: False
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] Compression: none
2025-12-25T14:01:02.230 [DEBUG] [Thread-12822] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:01:02.293 [DEBUG] [Thread-12822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:01:02.294 [DEBUG] [Thread-12822] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:01:02.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:01:02.295 [DEBUG] [Thread-12822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:01:02.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:01:02.349 [DEBUG] [Thread-12822] [transport.py] [_log()] userauth is OK
2025-12-25T14:01:02.349 [DEBUG] [Thread-12822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:01:02.349 [DEBUG] [Thread-12822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:01:02.349 [DEBUG] [Thread-12822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:01:02.350 [DEBUG] [Thread-12822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:01:02.368 [INFO] [Thread-12822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:01:02.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-25T14:01:02.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:01:03.231 [DEBUG] [Thread-12822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:01:03.231 [DEBUG] [Thread-12822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:01:03.279 [DEBUG] [Thread-12822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:01:03.279 [DEBUG] [Thread-12822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:01:03.288 [DEBUG] [Thread-12822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:01:03.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:01:03.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:01: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-25T14:01:03.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:01:03.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:01:03.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:01:03.325 [DEBUG] [Thread-12822] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:01:04.987 [DEBUG] [Thread-12824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:06.321 [DEBUG] [Thread-12825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:20.048 [DEBUG] [Thread-12826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:32.789 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:32.790 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:01:33.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:01:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:01:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 1, 10), 27.98, 15.51, 0.0, 21.46, 25.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:01:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:01:10
2025-12-25T14:01:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:01:34.376 [DEBUG] [Thread-12827] [transport.py] [_log()] starting thread (client mode): 0xb6b21630
2025-12-25T14:01:34.376 [DEBUG] [Thread-12827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:01:34.397 [DEBUG] [Thread-12827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:01:34.397 [INFO] [Thread-12827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] client lang: <none>
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] server lang: <none>
2025-12-25T14:01:34.400 [DEBUG] [Thread-12827] [transport.py] [_log()] kex follows: False
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] Compression: none
2025-12-25T14:01:34.401 [DEBUG] [Thread-12827] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:01:34.417 [DEBUG] [Thread-12827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:01:34.417 [DEBUG] [Thread-12827] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:01:34.417 [DEBUG] [Thread-12827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:01:34.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:01:34.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:01:34.418 [DEBUG] [Thread-12827] [transport.py] [_log()] userauth is OK
2025-12-25T14:01:34.418 [DEBUG] [Thread-12827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:01:34.418 [DEBUG] [Thread-12827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:01:34.418 [DEBUG] [Thread-12827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:01:34.418 [DEBUG] [Thread-12827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:01:34.436 [INFO] [Thread-12827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:01:34.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:01:35.080 [DEBUG] [Thread-12829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:01:35.106 [DEBUG] [Thread-12827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:01:35.106 [DEBUG] [Thread-12827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:01:35.106 [DEBUG] [Thread-12827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:01:35.148 [DEBUG] [Thread-12827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:01:35.148 [DEBUG] [Thread-12827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:01:35.151 [DEBUG] [Thread-12827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:01:35.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:01:35.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:01:35.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:01:35.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:01:35.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:01:35.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:01:35.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:01:35.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:01:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:01:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.500756 -999.00  +24.90  20.76     22   +1.80 1 1 1 1 1   888    0 23.93 -10.91 ----- 20.8 20.8 310.4 24.4 31.5 -25.6 30.9 -25.7 31.2 -23.4 31.8 -24.3
2025-12-25T14:01:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:01:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:01:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.500756
2025-12-25T14:01:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:01:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:01:35.178 [DEBUG] [Thread-12827] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:01:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:01:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:01:35.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:01:35.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:01:10', tmtdew=27.98, humidity=15.51, cloud=0.0, wind=21.46, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:01:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:01:35.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-25T14:01:35.284 [DEBUG] [Thread-12831] [transport.py] [_log()] starting thread (client mode): 0xb6b22fe0
2025-12-25T14:01:35.284 [DEBUG] [Thread-12831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:01:35.299 [DEBUG] [Thread-12831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:01:35.299 [INFO] [Thread-12831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:35.307 [DEBUG] [Thread-12831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] client lang: <none>
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] server lang: <none>
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] kex follows: False
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] Compression: none
2025-12-25T14:01:35.308 [DEBUG] [Thread-12831] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:01:35.365 [DEBUG] [Thread-12831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:01:35.366 [DEBUG] [Thread-12831] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:01:35.366 [DEBUG] [Thread-12831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:01:35.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:01:35.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:01:35.426 [DEBUG] [Thread-12831] [transport.py] [_log()] userauth is OK
2025-12-25T14:01:35.426 [DEBUG] [Thread-12831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:01:35.426 [DEBUG] [Thread-12831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:01:35.426 [DEBUG] [Thread-12831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:01:35.426 [DEBUG] [Thread-12831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:01:35.446 [INFO] [Thread-12831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:01:35.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-25T14:01:35.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:01:36.269 [DEBUG] [Thread-12831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:01:36.269 [DEBUG] [Thread-12831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:01:36.317 [DEBUG] [Thread-12831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:01:36.317 [DEBUG] [Thread-12831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:01:36.326 [DEBUG] [Thread-12831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:01:36.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:01:36.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:01:36.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:01:36.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:01:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:01:36.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:01:36.363 [DEBUG] [Thread-12831] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:01:50.113 [DEBUG] [Thread-12833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:05.178 [DEBUG] [Thread-12834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:06.369 [DEBUG] [Thread-12835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:06.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:02:06.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:02:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:02:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 1, 42), 27.86, 16.03, 0.0, 18.79, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:02:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:01:42
2025-12-25T14:02:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:02:07.359 [DEBUG] [Thread-12836] [transport.py] [_log()] starting thread (client mode): 0xb955b940
2025-12-25T14:02:07.359 [DEBUG] [Thread-12836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:02:07.381 [DEBUG] [Thread-12836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:02:07.381 [INFO] [Thread-12836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:02:07.384 [DEBUG] [Thread-12836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:02:07.384 [DEBUG] [Thread-12836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:02:07.384 [DEBUG] [Thread-12836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:02:07.384 [DEBUG] [Thread-12836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:07.384 [DEBUG] [Thread-12836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] client lang: <none>
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] server lang: <none>
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] kex follows: False
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:02:07.385 [DEBUG] [Thread-12836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:02:07.386 [DEBUG] [Thread-12836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:02:07.386 [DEBUG] [Thread-12836] [transport.py] [_log()] Compression: none
2025-12-25T14:02:07.386 [DEBUG] [Thread-12836] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:02:07.405 [DEBUG] [Thread-12836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:02:07.405 [DEBUG] [Thread-12836] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:02:07.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:02:07.407 [DEBUG] [Thread-12836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:02:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:02:07.409 [DEBUG] [Thread-12836] [transport.py] [_log()] userauth is OK
2025-12-25T14:02:07.409 [DEBUG] [Thread-12836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:02:07.409 [DEBUG] [Thread-12836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:02:07.409 [DEBUG] [Thread-12836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:02:07.409 [DEBUG] [Thread-12836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:02:07.446 [INFO] [Thread-12836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:02:07.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:02:08.096 [DEBUG] [Thread-12836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:02:08.096 [DEBUG] [Thread-12836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:02:08.096 [DEBUG] [Thread-12836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:02:08.136 [DEBUG] [Thread-12836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:02:08.136 [DEBUG] [Thread-12836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:02:08.139 [DEBUG] [Thread-12836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:02:08.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:02:08.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:02:08.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:02:08.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:02:08.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:02:08.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:02:08.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.501103 -999.00  +25.20  19.22     21   +1.80 1 1 1 1 1   888    0 24.03 -11.10 ----- 19.2 19.2 333.6 30.9 31.6 -25.9 31.1 -26.3 31.3 -23.2 31.8 -24.2
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.501103
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:02:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:02:08.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:02:08.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:01:42', tmtdew=27.86, humidity=16.03, cloud=0.0, wind=18.79, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:01:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:02:08.156 [DEBUG] [Thread-12836] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:02:08.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-25T14:02:08.241 [DEBUG] [Thread-12839] [transport.py] [_log()] starting thread (client mode): 0xb955bbb0
2025-12-25T14:02:08.241 [DEBUG] [Thread-12839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:02:08.255 [DEBUG] [Thread-12839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:02:08.255 [INFO] [Thread-12839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] client lang: <none>
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] server lang: <none>
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] kex follows: False
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] Compression: none
2025-12-25T14:02:08.263 [DEBUG] [Thread-12839] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:02:08.319 [DEBUG] [Thread-12839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:02:08.319 [DEBUG] [Thread-12839] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:02:08.319 [DEBUG] [Thread-12839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:02:08.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:02:08.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:02:08.376 [DEBUG] [Thread-12839] [transport.py] [_log()] userauth is OK
2025-12-25T14:02:08.376 [DEBUG] [Thread-12839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:02:08.376 [DEBUG] [Thread-12839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:02:08.376 [DEBUG] [Thread-12839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:02:08.376 [DEBUG] [Thread-12839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:02:08.393 [INFO] [Thread-12839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:02:08.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-25T14:02:08.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:02:09.195 [DEBUG] [Thread-12839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:02:09.196 [DEBUG] [Thread-12839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:02:09.243 [DEBUG] [Thread-12839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:02:09.244 [DEBUG] [Thread-12839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:02:09.252 [DEBUG] [Thread-12839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:02:09.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:02:09.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:02:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:02:09.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:02:09.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:02:09.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:02:09.284 [DEBUG] [Thread-12839] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:02:20.209 [DEBUG] [Thread-12841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:32.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:32.930 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:35.259 [DEBUG] [Thread-12842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:02:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:02:39.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:02:39.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-25T14:02:40.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 2, 14), 27.55, 16.34, 0.0, 23.03, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:02:40.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:02:14
2025-12-25T14:02:40.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:02:40.289 [DEBUG] [Thread-12843] [transport.py] [_log()] starting thread (client mode): 0xb955aa10
2025-12-25T14:02:40.289 [DEBUG] [Thread-12843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:02:40.310 [DEBUG] [Thread-12843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:02:40.310 [INFO] [Thread-12843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:02:40.313 [DEBUG] [Thread-12843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:02:40.313 [DEBUG] [Thread-12843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:02:40.313 [DEBUG] [Thread-12843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:02:40.313 [DEBUG] [Thread-12843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:40.313 [DEBUG] [Thread-12843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:40.313 [DEBUG] [Thread-12843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] client lang: <none>
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] server lang: <none>
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] kex follows: False
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] Compression: none
2025-12-25T14:02:40.314 [DEBUG] [Thread-12843] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:02:40.331 [DEBUG] [Thread-12843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:02:40.332 [DEBUG] [Thread-12843] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:02:40.332 [DEBUG] [Thread-12843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:02:40.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:02:40.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:02:40.334 [DEBUG] [Thread-12843] [transport.py] [_log()] userauth is OK
2025-12-25T14:02:40.335 [DEBUG] [Thread-12843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:02:40.335 [DEBUG] [Thread-12843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:02:40.335 [DEBUG] [Thread-12843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:02:40.335 [DEBUG] [Thread-12843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:02:40.371 [INFO] [Thread-12843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:02:40.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:02:40.993 [DEBUG] [Thread-12843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:02:40.993 [DEBUG] [Thread-12843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:02:40.994 [DEBUG] [Thread-12843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:02:41.034 [DEBUG] [Thread-12843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:02:41.034 [DEBUG] [Thread-12843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:02:41.037 [DEBUG] [Thread-12843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:02:41.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:02:41.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:02:41.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:02:41.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:02:41.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:02:41.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:02:41.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:02:41.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:02:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:02:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.501451 -999.00  +25.10  12.28     22   +2.00 1 1 1 1 1   888    0 23.81 -12.25 ----- 12.3 12.3 328.4 21.0 31.6 -26.5 31.0 -26.8 31.4 -23.7 32.0 -23.7
2025-12-25T14:02:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:02:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:02:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.501451
2025-12-25T14:02:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:02:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:02:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:02:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:02:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:02:41.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:02:14', tmtdew=27.55, humidity=16.34, cloud=0.0, wind=23.03, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:02:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:02:41.061 [DEBUG] [Thread-12843] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:02:41.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-25T14:02:41.154 [DEBUG] [Thread-12846] [transport.py] [_log()] starting thread (client mode): 0xb6b216f0
2025-12-25T14:02:41.154 [DEBUG] [Thread-12846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:02:41.169 [DEBUG] [Thread-12846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:02:41.169 [INFO] [Thread-12846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:02:41.176 [DEBUG] [Thread-12846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] client lang: <none>
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] server lang: <none>
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] kex follows: False
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] Compression: none
2025-12-25T14:02:41.177 [DEBUG] [Thread-12846] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:02:41.240 [DEBUG] [Thread-12846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:02:41.241 [DEBUG] [Thread-12846] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:02:41.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:02:41.242 [DEBUG] [Thread-12846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:02:41.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:02:41.296 [DEBUG] [Thread-12846] [transport.py] [_log()] userauth is OK
2025-12-25T14:02:41.296 [DEBUG] [Thread-12846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:02:41.296 [DEBUG] [Thread-12846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:02:41.296 [DEBUG] [Thread-12846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:02:41.296 [DEBUG] [Thread-12846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:02:41.310 [INFO] [Thread-12846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:02:41.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-25T14:02:41.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:02:42.151 [DEBUG] [Thread-12846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:02:42.152 [DEBUG] [Thread-12846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:02:42.199 [DEBUG] [Thread-12846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:02:42.199 [DEBUG] [Thread-12846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:02:42.208 [DEBUG] [Thread-12846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:02:42.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:02:42.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-25T14:02:42.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-25T14:02:42.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:02:42.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:02:42.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:02:42.245 [DEBUG] [Thread-12846] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:02:50.291 [DEBUG] [Thread-12848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:05.345 [DEBUG] [Thread-12849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:06.418 [DEBUG] [Thread-12850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:03:12.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:03:12.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-25T14:03:12.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 2, 46), 27.92, 15.88, 0.0, 16.18, 25.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:03:12.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:02:46
2025-12-25T14:03:13.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:03:13.237 [DEBUG] [Thread-12851] [transport.py] [_log()] starting thread (client mode): 0xb6b226e0
2025-12-25T14:03:13.237 [DEBUG] [Thread-12851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:03:13.259 [DEBUG] [Thread-12851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:03:13.259 [INFO] [Thread-12851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] client lang: <none>
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] server lang: <none>
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] kex follows: False
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] Compression: none
2025-12-25T14:03:13.262 [DEBUG] [Thread-12851] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:03:13.279 [DEBUG] [Thread-12851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:03:13.279 [DEBUG] [Thread-12851] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:03:13.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:03:13.280 [DEBUG] [Thread-12851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:03:13.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:03:13.282 [DEBUG] [Thread-12851] [transport.py] [_log()] userauth is OK
2025-12-25T14:03:13.282 [DEBUG] [Thread-12851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:03:13.282 [DEBUG] [Thread-12851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:03:13.282 [DEBUG] [Thread-12851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:03:13.282 [DEBUG] [Thread-12851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:03:13.300 [INFO] [Thread-12851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:03:13.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:03:13.925 [DEBUG] [Thread-12851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:03:13.926 [DEBUG] [Thread-12851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:03:13.926 [DEBUG] [Thread-12851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:03:13.966 [DEBUG] [Thread-12851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:03:13.967 [DEBUG] [Thread-12851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:03:13.969 [DEBUG] [Thread-12851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:03:13.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:03:13.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:03:13.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:03:13.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:03:13.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:03:13.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:03:13.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:03:13.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:03:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:03:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.501798 -999.00  +25.20  14.91     22   +2.00 1 1 1 1 1   888    0 23.59 -12.13 ----- 12.2 14.9 350.2 28.3 31.6 -26.2 31.0 -25.9 31.4 -23.2 31.9 -24.4
2025-12-25T14:03:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:03:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:03:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.501798
2025-12-25T14:03:13.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:03:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:03:13.991 [DEBUG] [Thread-12851] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:03:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:03:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:03:13.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:03:13.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:02:46', tmtdew=27.92, humidity=15.88, cloud=0.0, wind=16.18, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:02:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:03:14.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-25T14:03:14.102 [DEBUG] [Thread-12854] [transport.py] [_log()] starting thread (client mode): 0xb6b22740
2025-12-25T14:03:14.102 [DEBUG] [Thread-12854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:03:14.116 [DEBUG] [Thread-12854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:03:14.117 [INFO] [Thread-12854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] client lang: <none>
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] server lang: <none>
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] kex follows: False
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:03:14.124 [DEBUG] [Thread-12854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:03:14.125 [DEBUG] [Thread-12854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:03:14.125 [DEBUG] [Thread-12854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:03:14.125 [DEBUG] [Thread-12854] [transport.py] [_log()] Compression: none
2025-12-25T14:03:14.125 [DEBUG] [Thread-12854] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:03:14.184 [DEBUG] [Thread-12854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:03:14.184 [DEBUG] [Thread-12854] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:03:14.184 [DEBUG] [Thread-12854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:03:14.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:03:14.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:03:14.240 [DEBUG] [Thread-12854] [transport.py] [_log()] userauth is OK
2025-12-25T14:03:14.240 [DEBUG] [Thread-12854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:03:14.240 [DEBUG] [Thread-12854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:03:14.240 [DEBUG] [Thread-12854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:03:14.241 [DEBUG] [Thread-12854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:03:14.258 [INFO] [Thread-12854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:03:14.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-25T14:03:14.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:03:15.072 [DEBUG] [Thread-12854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:03:15.072 [DEBUG] [Thread-12854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:03:15.120 [DEBUG] [Thread-12854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:03:15.120 [DEBUG] [Thread-12854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:03:15.129 [DEBUG] [Thread-12854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:03:15.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:03:15.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-25T14:03: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') -> 00000000
2025-12-25T14:03:15.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:03:15.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:03:15.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:03:15.162 [DEBUG] [Thread-12854] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:03:20.379 [DEBUG] [Thread-12856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:33.069 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:33.070 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:35.425 [DEBUG] [Thread-12857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:03:45.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:03:45.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:03:45.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-25T14:03:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 3, 18), 27.63, 16.2, 0.0, 19.5, 25.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:03:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:03:18
2025-12-25T14:03:46.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:03:46.159 [DEBUG] [Thread-12858] [transport.py] [_log()] starting thread (client mode): 0xb6b238e0
2025-12-25T14:03:46.159 [DEBUG] [Thread-12858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:03:46.180 [DEBUG] [Thread-12858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:03:46.181 [INFO] [Thread-12858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:03:46.183 [DEBUG] [Thread-12858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:03:46.183 [DEBUG] [Thread-12858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] client lang: <none>
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] server lang: <none>
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] kex follows: False
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] Compression: none
2025-12-25T14:03:46.184 [DEBUG] [Thread-12858] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:03:46.201 [DEBUG] [Thread-12858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:03:46.201 [DEBUG] [Thread-12858] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:03:46.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:03:46.202 [DEBUG] [Thread-12858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:03:46.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:03:46.205 [DEBUG] [Thread-12858] [transport.py] [_log()] userauth is OK
2025-12-25T14:03:46.205 [DEBUG] [Thread-12858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:03:46.205 [DEBUG] [Thread-12858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:03:46.205 [DEBUG] [Thread-12858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:03:46.205 [DEBUG] [Thread-12858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:03:46.229 [INFO] [Thread-12858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:03:46.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:03:46.882 [DEBUG] [Thread-12858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:03:46.882 [DEBUG] [Thread-12858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:03:46.883 [DEBUG] [Thread-12858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:03:46.923 [DEBUG] [Thread-12858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:03:46.923 [DEBUG] [Thread-12858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:03:46.927 [DEBUG] [Thread-12858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:03:46.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:03:46.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:03:46.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:03:46.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:03:46.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:03:46.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:03:46.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:03:46.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:03:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:03:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.502145 -999.00  +25.40  20.09     21   +2.00 1 1 1 1 1   888    0 23.44 -12.26 ----- 16.9 20.1 322.4 22.3 31.6 -26.2 31.0 -26.8 31.4 -24.0 31.9 -24.0
2025-12-25T14:03:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:03:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:03:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.502145
2025-12-25T14:03:46.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:03:46.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:03:46.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:03:46.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:03:46.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:03:46.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:03:18', tmtdew=27.63, humidity=16.2, cloud=0.0, wind=19.5, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:03:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:03:46.957 [DEBUG] [Thread-12858] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:03:47.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:03:47.040 [DEBUG] [Thread-12861] [transport.py] [_log()] starting thread (client mode): 0xb95d5ba0
2025-12-25T14:03:47.041 [DEBUG] [Thread-12861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:03:47.055 [DEBUG] [Thread-12861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:03:47.056 [INFO] [Thread-12861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:03:47.063 [DEBUG] [Thread-12861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] client lang: <none>
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] server lang: <none>
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] kex follows: False
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] Compression: none
2025-12-25T14:03:47.064 [DEBUG] [Thread-12861] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:03:47.122 [DEBUG] [Thread-12861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:03:47.122 [DEBUG] [Thread-12861] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:03:47.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:03:47.124 [DEBUG] [Thread-12861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:03:47.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:03:47.181 [DEBUG] [Thread-12861] [transport.py] [_log()] userauth is OK
2025-12-25T14:03:47.181 [DEBUG] [Thread-12861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:03:47.181 [DEBUG] [Thread-12861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:03:47.182 [DEBUG] [Thread-12861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:03:47.182 [DEBUG] [Thread-12861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:03:47.200 [INFO] [Thread-12861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:03:47.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-25T14:03:47.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:03:48.103 [DEBUG] [Thread-12861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:03:48.103 [DEBUG] [Thread-12861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:03:48.152 [DEBUG] [Thread-12861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:03:48.152 [DEBUG] [Thread-12861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:03:48.161 [DEBUG] [Thread-12861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:03:48.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:03: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')
2025-12-25T14:03:48.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-25T14:03:48.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:03:48.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:03:48.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:03:48.194 [DEBUG] [Thread-12861] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:03:50.457 [DEBUG] [Thread-12863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:05.512 [DEBUG] [Thread-12864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:06.464 [DEBUG] [Thread-12865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:18.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:04:18.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:04:18.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-25T14:04:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 3, 50), 27.94, 15.68, 0.0, 24.0, 25.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:04:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:03:50
2025-12-25T14:04:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:04:19.196 [DEBUG] [Thread-12866] [transport.py] [_log()] starting thread (client mode): 0xb95f3c40
2025-12-25T14:04:19.196 [DEBUG] [Thread-12866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:04:19.217 [DEBUG] [Thread-12866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:04:19.217 [INFO] [Thread-12866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:04:19.220 [DEBUG] [Thread-12866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:04:19.220 [DEBUG] [Thread-12866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:04:19.220 [DEBUG] [Thread-12866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:04:19.220 [DEBUG] [Thread-12866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:19.220 [DEBUG] [Thread-12866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:19.220 [DEBUG] [Thread-12866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] client lang: <none>
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] server lang: <none>
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] kex follows: False
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:04:19.221 [DEBUG] [Thread-12866] [transport.py] [_log()] Compression: none
2025-12-25T14:04:19.222 [DEBUG] [Thread-12866] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:04:19.242 [DEBUG] [Thread-12866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:04:19.242 [DEBUG] [Thread-12866] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:04:19.242 [DEBUG] [Thread-12866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:04:19.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:04:19.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:04:19.243 [DEBUG] [Thread-12866] [transport.py] [_log()] userauth is OK
2025-12-25T14:04:19.243 [DEBUG] [Thread-12866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:04:19.243 [DEBUG] [Thread-12866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:04:19.243 [DEBUG] [Thread-12866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:04:19.243 [DEBUG] [Thread-12866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:04:19.265 [INFO] [Thread-12866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:04:19.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:04:19.913 [DEBUG] [Thread-12866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:04:19.913 [DEBUG] [Thread-12866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:04:19.914 [DEBUG] [Thread-12866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:04:19.954 [DEBUG] [Thread-12866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:04:19.954 [DEBUG] [Thread-12866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:04:19.958 [DEBUG] [Thread-12866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:04:19.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:04:19.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:04:19.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:04:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:04:19.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:04:19.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:04:19.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:04:19.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:04:19.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.502839 -999.00  +26.40  24.97     20   +2.20 1 1 1 1 1   888    0 23.59 -11.44 ----- 25.0 25.0 297.9 31.5 31.6 -25.7 31.1 -25.3 31.4 -24.5 32.0 -23.7
2025-12-25T14:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.502839
2025-12-25T14:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:04:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:04:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:04:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:04:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:04:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:03:50', tmtdew=27.94, humidity=15.68, cloud=0.0, wind=24.0, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:04:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:04:19.985 [DEBUG] [Thread-12866] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:04:20.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-25T14:04:20.078 [DEBUG] [Thread-12869] [transport.py] [_log()] starting thread (client mode): 0xb95587c0
2025-12-25T14:04:20.078 [DEBUG] [Thread-12869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:04:20.096 [DEBUG] [Thread-12869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:04:20.097 [INFO] [Thread-12869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:04:20.104 [DEBUG] [Thread-12869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:04:20.104 [DEBUG] [Thread-12869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] client lang: <none>
2025-12-25T14:04:20.105 [DEBUG] [Thread-12869] [transport.py] [_log()] server lang: <none>
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] kex follows: False
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] Compression: none
2025-12-25T14:04:20.106 [DEBUG] [Thread-12869] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:04:20.166 [DEBUG] [Thread-12869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:04:20.167 [DEBUG] [Thread-12869] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:04:20.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:04:20.169 [DEBUG] [Thread-12869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:04:20.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:04:20.226 [DEBUG] [Thread-12869] [transport.py] [_log()] userauth is OK
2025-12-25T14:04:20.226 [DEBUG] [Thread-12869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:04:20.227 [DEBUG] [Thread-12869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:04:20.227 [DEBUG] [Thread-12869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:04:20.227 [DEBUG] [Thread-12869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:04:20.245 [INFO] [Thread-12869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:04:20.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-25T14:04:20.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:04:20.543 [DEBUG] [Thread-12871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:21.081 [DEBUG] [Thread-12869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:04:21.081 [DEBUG] [Thread-12869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:04:21.129 [DEBUG] [Thread-12869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:04:21.129 [DEBUG] [Thread-12869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:04:21.139 [DEBUG] [Thread-12869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:04:21.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:04:21.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:04:21.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-25T14:04:21.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:04:21.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:04:21.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:04:21.175 [DEBUG] [Thread-12869] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:04:33.211 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:33.212 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:35.600 [DEBUG] [Thread-12872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:50.632 [DEBUG] [Thread-12873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:04:51.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:04:51.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:04:51.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-25T14:04:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 4, 22), 28.13, 15.51, 0.0, 24.54, 26.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:04:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:04:22
2025-12-25T14:04:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:04:52.177 [DEBUG] [Thread-12874] [transport.py] [_log()] starting thread (client mode): 0xb95f3f40
2025-12-25T14:04:52.177 [DEBUG] [Thread-12874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:04:52.199 [DEBUG] [Thread-12874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:04:52.199 [INFO] [Thread-12874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:04:52.202 [DEBUG] [Thread-12874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:04:52.202 [DEBUG] [Thread-12874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:04:52.202 [DEBUG] [Thread-12874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:04:52.202 [DEBUG] [Thread-12874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:52.202 [DEBUG] [Thread-12874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] client lang: <none>
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] server lang: <none>
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] kex follows: False
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] Compression: none
2025-12-25T14:04:52.203 [DEBUG] [Thread-12874] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:04:52.221 [DEBUG] [Thread-12874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:04:52.222 [DEBUG] [Thread-12874] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:04:52.222 [DEBUG] [Thread-12874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:04:52.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:04:52.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:04:52.224 [DEBUG] [Thread-12874] [transport.py] [_log()] userauth is OK
2025-12-25T14:04:52.225 [DEBUG] [Thread-12874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:04:52.225 [DEBUG] [Thread-12874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:04:52.225 [DEBUG] [Thread-12874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:04:52.225 [DEBUG] [Thread-12874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:04:52.244 [INFO] [Thread-12874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:04:52.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:04:52.917 [DEBUG] [Thread-12874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:04:52.917 [DEBUG] [Thread-12874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:04:52.918 [DEBUG] [Thread-12874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:04:52.958 [DEBUG] [Thread-12874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:04:52.958 [DEBUG] [Thread-12874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:04:52.962 [DEBUG] [Thread-12874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:04:52.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:04:52.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:04:52.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:04:52.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:04:52.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:04:52.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:04:52.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:04:52.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:04:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:04:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.503187 -999.00  +26.70  20.51     20   +1.90 1 1 1 1 1   888    0 23.76 -1.57 ----- 32.7 20.5 307.4 31.5 31.7 -25.2 31.2 -26.4 31.5 -22.1 32.2 -24.4
2025-12-25T14:04:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:04:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:04:52.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.503187
2025-12-25T14:04:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:04:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:04:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:04:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:04:52.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:04:52.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:04:22', tmtdew=28.13, humidity=15.51, cloud=0.0, wind=24.54, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:04:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:04:52.989 [DEBUG] [Thread-12874] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:04:53.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:04:53.093 [DEBUG] [Thread-12877] [transport.py] [_log()] starting thread (client mode): 0xb9593eb0
2025-12-25T14:04:53.093 [DEBUG] [Thread-12877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:04:53.108 [DEBUG] [Thread-12877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:04:53.108 [INFO] [Thread-12877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] client lang: <none>
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] server lang: <none>
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] kex follows: False
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:04:53.116 [DEBUG] [Thread-12877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:04:53.117 [DEBUG] [Thread-12877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:04:53.117 [DEBUG] [Thread-12877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:04:53.117 [DEBUG] [Thread-12877] [transport.py] [_log()] Compression: none
2025-12-25T14:04:53.117 [DEBUG] [Thread-12877] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:04:53.174 [DEBUG] [Thread-12877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:04:53.174 [DEBUG] [Thread-12877] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:04:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:04:53.175 [DEBUG] [Thread-12877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:04:53.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:04:53.232 [DEBUG] [Thread-12877] [transport.py] [_log()] userauth is OK
2025-12-25T14:04:53.232 [DEBUG] [Thread-12877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:04:53.233 [DEBUG] [Thread-12877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:04:53.233 [DEBUG] [Thread-12877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:04:53.233 [DEBUG] [Thread-12877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:04:53.253 [INFO] [Thread-12877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:04:53.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-25T14:04:53.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:04:54.096 [DEBUG] [Thread-12877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:04:54.097 [DEBUG] [Thread-12877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:04:54.147 [DEBUG] [Thread-12877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:04:54.148 [DEBUG] [Thread-12877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:04:54.159 [DEBUG] [Thread-12877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:04:54.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:04:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:04:54.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:04:54.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:04:54.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:04:54.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:04:54.207 [DEBUG] [Thread-12877] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:05:05.671 [DEBUG] [Thread-12879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:06.518 [DEBUG] [Thread-12880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:20.726 [DEBUG] [Thread-12881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:24.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:05:24.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:05:24.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-25T14:05:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 4, 54), 28.59, 15.18, 0.0, 21.65, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:05:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:04:54
2025-12-25T14:05:25.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:05:25.252 [DEBUG] [Thread-12882] [transport.py] [_log()] starting thread (client mode): 0xb6b20370
2025-12-25T14:05:25.252 [DEBUG] [Thread-12882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:05:25.273 [DEBUG] [Thread-12882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:05:25.273 [INFO] [Thread-12882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] client lang: <none>
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] server lang: <none>
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] kex follows: False
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] Compression: none
2025-12-25T14:05:25.276 [DEBUG] [Thread-12882] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:05:25.291 [DEBUG] [Thread-12882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:05:25.291 [DEBUG] [Thread-12882] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:05:25.291 [DEBUG] [Thread-12882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:05:25.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:05:25.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:05:25.292 [DEBUG] [Thread-12882] [transport.py] [_log()] userauth is OK
2025-12-25T14:05:25.292 [DEBUG] [Thread-12882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:05:25.292 [DEBUG] [Thread-12882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:05:25.292 [DEBUG] [Thread-12882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:05:25.292 [DEBUG] [Thread-12882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:05:25.301 [INFO] [Thread-12882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:05:25.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:05:25.951 [DEBUG] [Thread-12882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:05:25.951 [DEBUG] [Thread-12882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:05:25.951 [DEBUG] [Thread-12882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:05:25.992 [DEBUG] [Thread-12882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:05:25.992 [DEBUG] [Thread-12882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:05:25.994 [DEBUG] [Thread-12882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:05:26.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:05:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:05:26.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:05:26.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:05:26.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:05:26.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:05:26.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.503534 -999.00  +25.70  25.14     20   +1.60 1 1 1 1 1   888    0 24.06 5.02 ----- 27.8 25.1 309.2 43.7 31.7 -27.2 31.1 -26.3 31.3 -26.0 32.0 -24.4
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.503534
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:05:26.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:04:54', tmtdew=28.59, humidity=15.18, cloud=0.0, wind=21.65, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:05:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:05:26.012 [DEBUG] [Thread-12882] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:05:26.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-25T14:05:26.094 [DEBUG] [Thread-12885] [transport.py] [_log()] starting thread (client mode): 0xb9558a00
2025-12-25T14:05:26.094 [DEBUG] [Thread-12885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:05:26.109 [DEBUG] [Thread-12885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:05:26.109 [INFO] [Thread-12885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] client lang: <none>
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] server lang: <none>
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] kex follows: False
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:05:26.116 [DEBUG] [Thread-12885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:05:26.117 [DEBUG] [Thread-12885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:05:26.117 [DEBUG] [Thread-12885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:05:26.117 [DEBUG] [Thread-12885] [transport.py] [_log()] Compression: none
2025-12-25T14:05:26.117 [DEBUG] [Thread-12885] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:05:26.171 [DEBUG] [Thread-12885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:05:26.171 [DEBUG] [Thread-12885] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:05:26.171 [DEBUG] [Thread-12885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:05:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:05:26.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:05:26.228 [DEBUG] [Thread-12885] [transport.py] [_log()] userauth is OK
2025-12-25T14:05:26.228 [DEBUG] [Thread-12885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:05:26.229 [DEBUG] [Thread-12885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:05:26.229 [DEBUG] [Thread-12885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:05:26.229 [DEBUG] [Thread-12885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:05:26.243 [INFO] [Thread-12885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:05:26.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-25T14:05:26.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:05:27.094 [DEBUG] [Thread-12885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:05:27.094 [DEBUG] [Thread-12885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:05:27.141 [DEBUG] [Thread-12885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:05:27.141 [DEBUG] [Thread-12885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:05:27.150 [DEBUG] [Thread-12885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:05:27.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:05:27.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-25T14:05:27.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-25T14:05:27.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:05:27.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:05:27.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:05:27.181 [DEBUG] [Thread-12885] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:05:33.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:33.352 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:35.756 [DEBUG] [Thread-12887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:50.808 [DEBUG] [Thread-12888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:05:57.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:05:57.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:05:57.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:05:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 5, 26), 28.87, 14.93, 0.0, 21.9, 26.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:05:57.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:05:26
2025-12-25T14:05:58.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:05:58.151 [DEBUG] [Thread-12889] [transport.py] [_log()] starting thread (client mode): 0xb95d4a00
2025-12-25T14:05:58.152 [DEBUG] [Thread-12889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:05:58.172 [DEBUG] [Thread-12889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:05:58.172 [INFO] [Thread-12889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:05:58.175 [DEBUG] [Thread-12889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:05:58.175 [DEBUG] [Thread-12889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:05:58.175 [DEBUG] [Thread-12889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] client lang: <none>
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] server lang: <none>
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] kex follows: False
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] Compression: none
2025-12-25T14:05:58.176 [DEBUG] [Thread-12889] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:05:58.192 [DEBUG] [Thread-12889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:05:58.192 [DEBUG] [Thread-12889] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:05:58.193 [DEBUG] [Thread-12889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:05:58.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:05:58.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:05:58.195 [DEBUG] [Thread-12889] [transport.py] [_log()] userauth is OK
2025-12-25T14:05:58.195 [DEBUG] [Thread-12889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:05:58.195 [DEBUG] [Thread-12889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:05:58.195 [DEBUG] [Thread-12889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:05:58.195 [DEBUG] [Thread-12889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:05:58.216 [INFO] [Thread-12889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:05:58.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:05:58.828 [DEBUG] [Thread-12889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:05:58.828 [DEBUG] [Thread-12889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:05:58.828 [DEBUG] [Thread-12889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:05:58.869 [DEBUG] [Thread-12889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:05:58.870 [DEBUG] [Thread-12889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:05:58.873 [DEBUG] [Thread-12889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:05:58.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:05:58.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:05:58.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:05:58.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:05:58.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:05:58.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:05:58.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:05:58.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:05:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:05:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.503881 -999.00  +25.60  25.53     21   +1.70 1 1 1 1 1   888    0 24.47 5.93 ----- 29.0 25.5 292.1 35.7 31.6 -26.8 31.1 -26.4 31.1 -25.2 32.0 -24.4
2025-12-25T14:05:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:05:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:05:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.503881
2025-12-25T14:05:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:05:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:05:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:05:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:05:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:05:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:05:26', tmtdew=28.87, humidity=14.93, cloud=0.0, wind=21.9, temperature=26.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:05:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:05:58.902 [DEBUG] [Thread-12889] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:05:58.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-25T14:05:59.010 [DEBUG] [Thread-12892] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T14:05:59.010 [DEBUG] [Thread-12892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:05:59.026 [DEBUG] [Thread-12892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:05:59.026 [INFO] [Thread-12892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:05:59.033 [DEBUG] [Thread-12892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] client lang: <none>
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] server lang: <none>
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] kex follows: False
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] Compression: none
2025-12-25T14:05:59.034 [DEBUG] [Thread-12892] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:05:59.094 [DEBUG] [Thread-12892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:05:59.094 [DEBUG] [Thread-12892] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:05:59.095 [DEBUG] [Thread-12892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:05:59.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:05:59.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:05:59.149 [DEBUG] [Thread-12892] [transport.py] [_log()] userauth is OK
2025-12-25T14:05:59.149 [DEBUG] [Thread-12892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:05:59.149 [DEBUG] [Thread-12892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:05:59.149 [DEBUG] [Thread-12892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:05:59.149 [DEBUG] [Thread-12892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:05:59.172 [INFO] [Thread-12892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:05:59.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:05:59.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:06:00.003 [DEBUG] [Thread-12892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:06:00.003 [DEBUG] [Thread-12892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:06:00.051 [DEBUG] [Thread-12892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:06:00.051 [DEBUG] [Thread-12892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:06:00.059 [DEBUG] [Thread-12892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:06:00.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:06:00.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-25T14:06:00.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-25T14:06:00.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:06:00.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:06:00.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:06:00.091 [DEBUG] [Thread-12892] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:06:05.839 [DEBUG] [Thread-12894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:06:06.564 [DEBUG] [Thread-12895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:06:20.880 [DEBUG] [Thread-12896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:06:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:06:30.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:06:30.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-25T14:06:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 5, 58), 29.64, 14.34, 0.0, 27.67, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:06:30.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:05:58
2025-12-25T14:06:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:06:31.085 [DEBUG] [Thread-12897] [transport.py] [_log()] starting thread (client mode): 0xb9590af0
2025-12-25T14:06:31.085 [DEBUG] [Thread-12897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:06:31.105 [DEBUG] [Thread-12897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:06:31.105 [INFO] [Thread-12897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] client lang: <none>
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] server lang: <none>
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] kex follows: False
2025-12-25T14:06:31.109 [DEBUG] [Thread-12897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:06:31.110 [DEBUG] [Thread-12897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:06:31.110 [DEBUG] [Thread-12897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:06:31.110 [DEBUG] [Thread-12897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:06:31.110 [DEBUG] [Thread-12897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:06:31.110 [DEBUG] [Thread-12897] [transport.py] [_log()] Compression: none
2025-12-25T14:06:31.110 [DEBUG] [Thread-12897] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:06:31.127 [DEBUG] [Thread-12897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:06:31.128 [DEBUG] [Thread-12897] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:06:31.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:06:31.129 [DEBUG] [Thread-12897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:06:31.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:06:31.131 [DEBUG] [Thread-12897] [transport.py] [_log()] userauth is OK
2025-12-25T14:06:31.131 [DEBUG] [Thread-12897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:06:31.131 [DEBUG] [Thread-12897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:06:31.131 [DEBUG] [Thread-12897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:06:31.131 [DEBUG] [Thread-12897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:06:31.167 [INFO] [Thread-12897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:06:31.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:06:31.766 [DEBUG] [Thread-12897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:06:31.766 [DEBUG] [Thread-12897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:06:31.766 [DEBUG] [Thread-12897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:06:31.806 [DEBUG] [Thread-12897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:06:31.807 [DEBUG] [Thread-12897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:06:31.809 [DEBUG] [Thread-12897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:06:31.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:06:31.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:06:31.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:06:31.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:06:31.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:06:31.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:06:31.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.504228 -999.00  +25.80  26.04     21   +2.00 1 1 1 1 1   888    0 24.36 8.38 ----- 24.3 26.0 298.0 30.6 31.5 -26.0 31.1 -25.3 31.3 -22.9 32.0 -23.8
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.504228
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:06:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:05:58', tmtdew=29.64, humidity=14.34, cloud=0.0, wind=27.67, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:06:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:06:31.827 [DEBUG] [Thread-12897] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:06:31.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:06:31.911 [DEBUG] [Thread-12900] [transport.py] [_log()] starting thread (client mode): 0xb9578850
2025-12-25T14:06:31.911 [DEBUG] [Thread-12900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:06:31.925 [DEBUG] [Thread-12900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:06:31.925 [INFO] [Thread-12900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] client lang: <none>
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] server lang: <none>
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] kex follows: False
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] Compression: none
2025-12-25T14:06:31.933 [DEBUG] [Thread-12900] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:06:31.996 [DEBUG] [Thread-12900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:06:31.996 [DEBUG] [Thread-12900] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:06:31.996 [DEBUG] [Thread-12900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:06:31.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:06:31.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:06:32.053 [DEBUG] [Thread-12900] [transport.py] [_log()] userauth is OK
2025-12-25T14:06:32.053 [DEBUG] [Thread-12900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:06:32.053 [DEBUG] [Thread-12900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:06:32.053 [DEBUG] [Thread-12900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:06:32.053 [DEBUG] [Thread-12900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:06:32.070 [INFO] [Thread-12900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:06:32.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-25T14:06:32.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:06:32.911 [DEBUG] [Thread-12900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:06:32.911 [DEBUG] [Thread-12900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:06:32.959 [DEBUG] [Thread-12900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:06:32.959 [DEBUG] [Thread-12900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:06:32.967 [DEBUG] [Thread-12900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:06:32.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:06:32.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:06:32.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-25T14:06:32.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:06:32.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:06:32.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:06:32.999 [DEBUG] [Thread-12900] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:06:33.491 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:06:33.492 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:06:35.914 [DEBUG] [Thread-12902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:06:50.961 [DEBUG] [Thread-12903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:03.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:07:03.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:07:03.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-25T14:07:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 6, 30), 29.96, 14.07, 0.0, 25.78, 26.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:07:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:06:30
2025-12-25T14:07:03.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:07:04.067 [DEBUG] [Thread-12904] [transport.py] [_log()] starting thread (client mode): 0xb955a080
2025-12-25T14:07:04.067 [DEBUG] [Thread-12904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:07:04.087 [DEBUG] [Thread-12904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:07:04.087 [INFO] [Thread-12904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:07:04.090 [DEBUG] [Thread-12904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] client lang: <none>
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] server lang: <none>
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] kex follows: False
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] Compression: none
2025-12-25T14:07:04.091 [DEBUG] [Thread-12904] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:07:04.108 [DEBUG] [Thread-12904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:07:04.108 [DEBUG] [Thread-12904] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:07:04.108 [DEBUG] [Thread-12904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:07:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:07:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:07:04.152 [DEBUG] [Thread-12904] [transport.py] [_log()] userauth is OK
2025-12-25T14:07:04.152 [DEBUG] [Thread-12904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:07:04.152 [DEBUG] [Thread-12904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:07:04.152 [DEBUG] [Thread-12904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:07:04.152 [DEBUG] [Thread-12904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:07:04.181 [INFO] [Thread-12904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:07:04.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:07:04.813 [DEBUG] [Thread-12904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:07:04.814 [DEBUG] [Thread-12904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:07:04.814 [DEBUG] [Thread-12904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:07:04.855 [DEBUG] [Thread-12904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:07:04.855 [DEBUG] [Thread-12904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:07:04.857 [DEBUG] [Thread-12904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:07:04.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:07:04.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:07:04.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:07:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:07:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:07:04.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:07:04.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.504576 -999.00  +26.50  20.89     21   +2.60 1 1 1 1 1   888    0 24.70 12.42 ----- 28.2 20.9 301.7 28.7 31.6 -25.4 31.2 -25.7 31.5 -23.8 32.0 -23.5
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.504576
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:07:04.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:06:30', tmtdew=29.96, humidity=14.07, cloud=0.0, wind=25.78, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:06:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:07:04.877 [DEBUG] [Thread-12904] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:07:04.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:07:04.958 [DEBUG] [Thread-12907] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T14:07:04.958 [DEBUG] [Thread-12907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:07:04.972 [DEBUG] [Thread-12907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:07:04.972 [INFO] [Thread-12907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] client lang: <none>
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] server lang: <none>
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] kex follows: False
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] Compression: none
2025-12-25T14:07:04.980 [DEBUG] [Thread-12907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:07:05.040 [DEBUG] [Thread-12907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:07:05.040 [DEBUG] [Thread-12907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:07:05.040 [DEBUG] [Thread-12907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:07:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:07:05.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:07:05.097 [DEBUG] [Thread-12907] [transport.py] [_log()] userauth is OK
2025-12-25T14:07:05.097 [DEBUG] [Thread-12907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:07:05.097 [DEBUG] [Thread-12907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:07:05.097 [DEBUG] [Thread-12907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:07:05.097 [DEBUG] [Thread-12907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:07:05.111 [INFO] [Thread-12907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:07:05.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-25T14:07:05.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:07:05.960 [DEBUG] [Thread-12907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:07:05.961 [DEBUG] [Thread-12907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:07:05.995 [DEBUG] [Thread-12909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:06.010 [DEBUG] [Thread-12907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:07:06.010 [DEBUG] [Thread-12907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:07:06.019 [DEBUG] [Thread-12907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:07:06.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:07:06.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-25T14:07:06.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-25T14:07:06.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:07:06.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:07:06.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:07:06.053 [DEBUG] [Thread-12907] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:07:06.620 [DEBUG] [Thread-12910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:21.044 [DEBUG] [Thread-12911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:33.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:33.629 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:36.067 [DEBUG] [Thread-12912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:07:36.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:07:36.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:07:36.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-25T14:07:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 7, 2), 30.14, 13.92, 0.0, 25.96, 26.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:07:36.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:07:02
2025-12-25T14:07:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:07:37.108 [DEBUG] [Thread-12913] [transport.py] [_log()] starting thread (client mode): 0xb95d4160
2025-12-25T14:07:37.108 [DEBUG] [Thread-12913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:07:37.129 [DEBUG] [Thread-12913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:07:37.129 [INFO] [Thread-12913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] client lang: <none>
2025-12-25T14:07:37.132 [DEBUG] [Thread-12913] [transport.py] [_log()] server lang: <none>
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] kex follows: False
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] Compression: none
2025-12-25T14:07:37.133 [DEBUG] [Thread-12913] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:07:37.149 [DEBUG] [Thread-12913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:07:37.149 [DEBUG] [Thread-12913] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:07:37.149 [DEBUG] [Thread-12913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:07:37.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:07:37.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:07:37.150 [DEBUG] [Thread-12913] [transport.py] [_log()] userauth is OK
2025-12-25T14:07:37.150 [DEBUG] [Thread-12913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:07:37.150 [DEBUG] [Thread-12913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:07:37.150 [DEBUG] [Thread-12913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:07:37.150 [DEBUG] [Thread-12913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:07:37.160 [INFO] [Thread-12913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:07:37.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:07:37.767 [DEBUG] [Thread-12913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:07:37.767 [DEBUG] [Thread-12913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:07:37.768 [DEBUG] [Thread-12913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:07:37.808 [DEBUG] [Thread-12913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:07:37.808 [DEBUG] [Thread-12913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:07:37.812 [DEBUG] [Thread-12913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:07:37.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:07:37.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:07:37.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:07:37.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:07:37.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:07:37.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:07:37.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:07:37.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:07:37.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:07:37.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.504923 -999.00  +26.60  29.36     21   +2.70 1 1 1 1 1   888    0 23.63 11.46 ----- 28.5 29.4 296.2 40.8 31.7 -25.6 31.1 -25.7 31.3 -22.8 32.1 -24.8
2025-12-25T14:07:37.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:07:37.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:07:37.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.504923
2025-12-25T14:07:37.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:07:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:07:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:07:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:07:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:07:37.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:07:02', tmtdew=30.14, humidity=13.92, cloud=0.0, wind=25.96, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:07:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:07:37.839 [DEBUG] [Thread-12913] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:07:37.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-25T14:07:37.935 [DEBUG] [Thread-12916] [transport.py] [_log()] starting thread (client mode): 0xb955b700
2025-12-25T14:07:37.935 [DEBUG] [Thread-12916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:07:37.951 [DEBUG] [Thread-12916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:07:37.951 [INFO] [Thread-12916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] client lang: <none>
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] server lang: <none>
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] kex follows: False
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:07:37.959 [DEBUG] [Thread-12916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:07:37.960 [DEBUG] [Thread-12916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:07:37.960 [DEBUG] [Thread-12916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:07:37.960 [DEBUG] [Thread-12916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:07:37.960 [DEBUG] [Thread-12916] [transport.py] [_log()] Compression: none
2025-12-25T14:07:37.960 [DEBUG] [Thread-12916] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:07:38.018 [DEBUG] [Thread-12916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:07:38.018 [DEBUG] [Thread-12916] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:07:38.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:07:38.020 [DEBUG] [Thread-12916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:07:38.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:07:38.074 [DEBUG] [Thread-12916] [transport.py] [_log()] userauth is OK
2025-12-25T14:07:38.074 [DEBUG] [Thread-12916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:07:38.075 [DEBUG] [Thread-12916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:07:38.075 [DEBUG] [Thread-12916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:07:38.075 [DEBUG] [Thread-12916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:07:38.098 [INFO] [Thread-12916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:07:38.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-25T14:07:38.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:07:38.918 [DEBUG] [Thread-12916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:07:38.918 [DEBUG] [Thread-12916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:07:38.966 [DEBUG] [Thread-12916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:07:38.966 [DEBUG] [Thread-12916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:07:38.976 [DEBUG] [Thread-12916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:07:38.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:07:38.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-25T14:07:38.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:07:39.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:07:39.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:07:39.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:07:39.011 [DEBUG] [Thread-12916] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:07:51.100 [DEBUG] [Thread-12918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:06.150 [DEBUG] [Thread-12919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:06.674 [DEBUG] [Thread-12920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:09.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:08:09.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:08:09.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-25T14:08:09.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 7, 34), 29.62, 14.37, 0.0, 31.51, 26.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:08:09.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:07:34
2025-12-25T14:08:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:08:10.032 [DEBUG] [Thread-12921] [transport.py] [_log()] starting thread (client mode): 0xb9593bb0
2025-12-25T14:08:10.032 [DEBUG] [Thread-12921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:08:10.053 [DEBUG] [Thread-12921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:08:10.053 [INFO] [Thread-12921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:08:10.056 [DEBUG] [Thread-12921] [transport.py] [_log()] client lang: <none>
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] server lang: <none>
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] kex follows: False
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] Compression: none
2025-12-25T14:08:10.057 [DEBUG] [Thread-12921] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:08:10.075 [DEBUG] [Thread-12921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:08:10.075 [DEBUG] [Thread-12921] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:08:10.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:08:10.076 [DEBUG] [Thread-12921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:08:10.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:08:10.078 [DEBUG] [Thread-12921] [transport.py] [_log()] userauth is OK
2025-12-25T14:08:10.078 [DEBUG] [Thread-12921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:08:10.078 [DEBUG] [Thread-12921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:08:10.078 [DEBUG] [Thread-12921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:08:10.078 [DEBUG] [Thread-12921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:08:10.101 [INFO] [Thread-12921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:08:10.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:08:10.767 [DEBUG] [Thread-12921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:08:10.767 [DEBUG] [Thread-12921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:08:10.768 [DEBUG] [Thread-12921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:08:10.808 [DEBUG] [Thread-12921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:08:10.809 [DEBUG] [Thread-12921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:08:10.812 [DEBUG] [Thread-12921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:08:10.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:08:10.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:08:10.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:08:10.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:08:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:08:10.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:08:10.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:08:10.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:08:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:08:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.505270 -999.00  +26.50  20.59     21   +2.60 1 1 1 1 1   888    0 24.18 5.49 ----- 20.6 20.6 298.0 37.9 31.6 -26.1 31.2 -25.5 31.4 -22.3 32.0 -24.3
2025-12-25T14:08:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:08:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:08:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.505270
2025-12-25T14:08:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:08:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:08:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:08:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:08:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:08:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:07:34', tmtdew=29.62, humidity=14.37, cloud=0.0, wind=31.51, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:07:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:08:10.841 [DEBUG] [Thread-12921] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:08:10.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-25T14:08:10.934 [DEBUG] [Thread-12924] [transport.py] [_log()] starting thread (client mode): 0xb9591b10
2025-12-25T14:08:10.934 [DEBUG] [Thread-12924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:08:10.948 [DEBUG] [Thread-12924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:08:10.948 [INFO] [Thread-12924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] client lang: <none>
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] server lang: <none>
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] kex follows: False
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:08:10.956 [DEBUG] [Thread-12924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:08:10.957 [DEBUG] [Thread-12924] [transport.py] [_log()] Compression: none
2025-12-25T14:08:10.957 [DEBUG] [Thread-12924] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:08:11.013 [DEBUG] [Thread-12924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:08:11.014 [DEBUG] [Thread-12924] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:08:11.014 [DEBUG] [Thread-12924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:08:11.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:08:11.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:08:11.070 [DEBUG] [Thread-12924] [transport.py] [_log()] userauth is OK
2025-12-25T14:08:11.070 [DEBUG] [Thread-12924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:08:11.070 [DEBUG] [Thread-12924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:08:11.071 [DEBUG] [Thread-12924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:08:11.071 [DEBUG] [Thread-12924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:08:11.089 [INFO] [Thread-12924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:08:11.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-25T14:08:11.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:08:11.910 [DEBUG] [Thread-12924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:08:11.911 [DEBUG] [Thread-12924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:08:11.959 [DEBUG] [Thread-12924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:08:11.959 [DEBUG] [Thread-12924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:08:11.968 [DEBUG] [Thread-12924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:08:11.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:08:11.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:08:11.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-25T14:08:11.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:08:11.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:08:11.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:08:12.005 [DEBUG] [Thread-12924] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:08:21.186 [DEBUG] [Thread-12926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:33.769 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:33.770 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:36.241 [DEBUG] [Thread-12927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:08:42.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:08:42.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:08:42.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-25T14:08:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 8, 38), 28.99, 14.84, 0.0, 27.79, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:08:42.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:08:38
2025-12-25T14:08:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:08:43.024 [DEBUG] [Thread-12928] [transport.py] [_log()] starting thread (client mode): 0xb95584c0
2025-12-25T14:08:43.024 [DEBUG] [Thread-12928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:08:43.044 [DEBUG] [Thread-12928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:08:43.044 [INFO] [Thread-12928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] client lang: <none>
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] server lang: <none>
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] kex follows: False
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:08:43.047 [DEBUG] [Thread-12928] [transport.py] [_log()] Compression: none
2025-12-25T14:08:43.048 [DEBUG] [Thread-12928] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:08:43.062 [DEBUG] [Thread-12928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:08:43.063 [DEBUG] [Thread-12928] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:08:43.063 [DEBUG] [Thread-12928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:08:43.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:08:43.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:08:43.064 [DEBUG] [Thread-12928] [transport.py] [_log()] userauth is OK
2025-12-25T14:08:43.064 [DEBUG] [Thread-12928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:08:43.064 [DEBUG] [Thread-12928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:08:43.064 [DEBUG] [Thread-12928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:08:43.064 [DEBUG] [Thread-12928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:08:43.078 [INFO] [Thread-12928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:08:43.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:08:43.673 [DEBUG] [Thread-12928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:08:43.673 [DEBUG] [Thread-12928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:08:43.673 [DEBUG] [Thread-12928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:08:43.714 [DEBUG] [Thread-12928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:08:43.714 [DEBUG] [Thread-12928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:08:43.717 [DEBUG] [Thread-12928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:08:43.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:08:43.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:08:43.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:08:43.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:08:43.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:08:43.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:08:43.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.505617 -999.00  +26.50  24.24     21   +2.60 1 1 1 1 1   888    0 23.12 -1.12 ----- 24.2 24.2 312.0 35.8 31.7 -27.0 31.2 -25.3 31.3 -24.6 32.0 -24.4
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.505617
2025-12-25T14:08:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:08:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:08:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:08:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:08:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:08:43.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:08:38', tmtdew=28.99, humidity=14.84, cloud=0.0, wind=27.79, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:08:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:08:43.735 [DEBUG] [Thread-12928] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:08:43.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-25T14:08:43.822 [DEBUG] [Thread-12931] [transport.py] [_log()] starting thread (client mode): 0xb957a170
2025-12-25T14:08:43.822 [DEBUG] [Thread-12931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:08:43.836 [DEBUG] [Thread-12931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:08:43.836 [INFO] [Thread-12931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:08:43.843 [DEBUG] [Thread-12931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] client lang: <none>
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] server lang: <none>
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] kex follows: False
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] Compression: none
2025-12-25T14:08:43.844 [DEBUG] [Thread-12931] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:08:43.900 [DEBUG] [Thread-12931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:08:43.900 [DEBUG] [Thread-12931] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:08:43.900 [DEBUG] [Thread-12931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:08:43.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:08:43.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:08:43.957 [DEBUG] [Thread-12931] [transport.py] [_log()] userauth is OK
2025-12-25T14:08:43.958 [DEBUG] [Thread-12931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:08:43.958 [DEBUG] [Thread-12931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:08:43.958 [DEBUG] [Thread-12931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:08:43.958 [DEBUG] [Thread-12931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:08:43.977 [INFO] [Thread-12931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:08:43.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-25T14:08:43.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:08:44.794 [DEBUG] [Thread-12931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:08:44.794 [DEBUG] [Thread-12931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:08:44.842 [DEBUG] [Thread-12931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:08:44.842 [DEBUG] [Thread-12931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:08:44.851 [DEBUG] [Thread-12931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:08:44.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:08:44.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-25T14:08:44.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:08:44.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:08:44.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:08:44.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:08:44.888 [DEBUG] [Thread-12931] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:08:51.279 [DEBUG] [Thread-12933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:06.332 [DEBUG] [Thread-12934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:06.725 [DEBUG] [Thread-12935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:09:14.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:09: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-25T14:09:15.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 9, 11), 29.2, 14.69, 0.0, 27.72, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:09:15.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:09:11
2025-12-25T14:09:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:09:15.903 [DEBUG] [Thread-12936] [transport.py] [_log()] starting thread (client mode): 0xb6b29420
2025-12-25T14:09:15.904 [DEBUG] [Thread-12936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:09:15.924 [DEBUG] [Thread-12936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:09:15.924 [INFO] [Thread-12936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] client lang: <none>
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] server lang: <none>
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] kex follows: False
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] Compression: none
2025-12-25T14:09:15.928 [DEBUG] [Thread-12936] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:09:15.946 [DEBUG] [Thread-12936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:09:15.947 [DEBUG] [Thread-12936] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:09:15.947 [DEBUG] [Thread-12936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:09:15.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:09:15.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:09:15.949 [DEBUG] [Thread-12936] [transport.py] [_log()] userauth is OK
2025-12-25T14:09:15.949 [DEBUG] [Thread-12936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:09:15.949 [DEBUG] [Thread-12936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:09:15.950 [DEBUG] [Thread-12936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:09:15.950 [DEBUG] [Thread-12936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:09:15.974 [INFO] [Thread-12936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:09:15.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:09:16.621 [DEBUG] [Thread-12936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:09:16.621 [DEBUG] [Thread-12936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:09:16.622 [DEBUG] [Thread-12936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:09:16.661 [DEBUG] [Thread-12936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:09:16.662 [DEBUG] [Thread-12936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:09:16.664 [DEBUG] [Thread-12936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:09:16.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:09:16.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:09:16.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:09:16.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:09:16.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:09:16.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:09:16.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:09:16.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:09:16.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:09:16.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.505964 -999.00  +26.60  25.72     21   +2.40 1 1 1 1 1   888    0 23.57 -6.02 ----- 25.8 25.7 302.0 29.8 31.8 -25.6 31.3 -25.2 31.5 -23.3 32.1 -24.5
2025-12-25T14:09:16.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:09:16.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.505964
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:09:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:09:11', tmtdew=29.2, humidity=14.69, cloud=0.0, wind=27.72, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:08:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:09:16.684 [DEBUG] [Thread-12936] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:09:16.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-25T14:09:16.765 [DEBUG] [Thread-12939] [transport.py] [_log()] starting thread (client mode): 0xb9592fe0
2025-12-25T14:09:16.765 [DEBUG] [Thread-12939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:09:16.779 [DEBUG] [Thread-12939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:09:16.779 [INFO] [Thread-12939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] client lang: <none>
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] server lang: <none>
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] kex follows: False
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:09:16.786 [DEBUG] [Thread-12939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:09:16.787 [DEBUG] [Thread-12939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:09:16.787 [DEBUG] [Thread-12939] [transport.py] [_log()] Compression: none
2025-12-25T14:09:16.787 [DEBUG] [Thread-12939] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:09:16.844 [DEBUG] [Thread-12939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:09:16.845 [DEBUG] [Thread-12939] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:09:16.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:09:16.845 [DEBUG] [Thread-12939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:09:16.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:09:16.902 [DEBUG] [Thread-12939] [transport.py] [_log()] userauth is OK
2025-12-25T14:09:16.902 [DEBUG] [Thread-12939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:09:16.902 [DEBUG] [Thread-12939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:09:16.902 [DEBUG] [Thread-12939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:09:16.902 [DEBUG] [Thread-12939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:09:16.916 [INFO] [Thread-12939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:09:16.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:09:16.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:09:17.719 [DEBUG] [Thread-12939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:09:17.719 [DEBUG] [Thread-12939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:09:17.766 [DEBUG] [Thread-12939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:09:17.767 [DEBUG] [Thread-12939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:09:17.775 [DEBUG] [Thread-12939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:09:17.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:09:17.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-25T14:09:17.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-25T14:09:17.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:09:17.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:09:17.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:09:17.806 [DEBUG] [Thread-12939] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:09:21.362 [DEBUG] [Thread-12941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:33.912 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:33.914 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:36.412 [DEBUG] [Thread-12942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:09:47.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:09:47.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:09:47.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-25T14:09:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 9, 43), 30.51, 13.41, 0.0, 30.03, 26.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:09:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:09:43
2025-12-25T14:09:48.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:09:48.819 [DEBUG] [Thread-12943] [transport.py] [_log()] starting thread (client mode): 0xb9578130
2025-12-25T14:09:48.820 [DEBUG] [Thread-12943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:09:48.840 [DEBUG] [Thread-12943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:09:48.840 [INFO] [Thread-12943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] client lang: <none>
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] server lang: <none>
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] kex follows: False
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] Compression: none
2025-12-25T14:09:48.843 [DEBUG] [Thread-12943] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:09:48.860 [DEBUG] [Thread-12943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:09:48.861 [DEBUG] [Thread-12943] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:09:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:09:48.861 [DEBUG] [Thread-12943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:09:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:09:48.862 [DEBUG] [Thread-12943] [transport.py] [_log()] userauth is OK
2025-12-25T14:09:48.862 [DEBUG] [Thread-12943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:09:48.862 [DEBUG] [Thread-12943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:09:48.862 [DEBUG] [Thread-12943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:09:48.862 [DEBUG] [Thread-12943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:09:48.875 [INFO] [Thread-12943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:09:48.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:09:49.518 [DEBUG] [Thread-12943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:09:49.518 [DEBUG] [Thread-12943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:09:49.518 [DEBUG] [Thread-12943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:09:49.559 [DEBUG] [Thread-12943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:09:49.559 [DEBUG] [Thread-12943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:09:49.562 [DEBUG] [Thread-12943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:09:49.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:09:49.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:09:49.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:09:49.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:09:49.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:09:49.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:09:49.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:09:49.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:09:49.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:09:49.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.506659 -999.00  +26.50  24.68     20   +1.70 1 1 1 1 1   888    0 24.07 0.90 ----- 43.3 24.7 321.4 39.0 31.8 -27.1 31.2 -27.5 31.6 -23.9 32.1 -24.5
2025-12-25T14:09:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:09:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:09:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.506659
2025-12-25T14:09:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:09:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:09:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:09:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:09:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:09:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:09:43', tmtdew=30.51, humidity=13.41, cloud=0.0, wind=30.03, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:09:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:09:49.579 [DEBUG] [Thread-12943] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:09:49.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:09:49.673 [DEBUG] [Thread-12946] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf10
2025-12-25T14:09:49.673 [DEBUG] [Thread-12946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:09:49.688 [DEBUG] [Thread-12946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:09:49.688 [INFO] [Thread-12946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] client lang: <none>
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] server lang: <none>
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] kex follows: False
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] Compression: none
2025-12-25T14:09:49.696 [DEBUG] [Thread-12946] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:09:49.755 [DEBUG] [Thread-12946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:09:49.755 [DEBUG] [Thread-12946] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:09:49.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:09:49.756 [DEBUG] [Thread-12946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:09:49.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:09:49.810 [DEBUG] [Thread-12946] [transport.py] [_log()] userauth is OK
2025-12-25T14:09:49.810 [DEBUG] [Thread-12946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:09:49.811 [DEBUG] [Thread-12946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:09:49.811 [DEBUG] [Thread-12946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:09:49.811 [DEBUG] [Thread-12946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:09:49.830 [INFO] [Thread-12946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:09:49.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-25T14:09:49.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:09:50.692 [DEBUG] [Thread-12946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:09:50.692 [DEBUG] [Thread-12946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:09:50.740 [DEBUG] [Thread-12946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:09:50.740 [DEBUG] [Thread-12946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:09:50.749 [DEBUG] [Thread-12946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:09:50.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:09:50.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-25T14:09:50.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-25T14:09:50.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:09:50.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:09:50.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:09:50.786 [DEBUG] [Thread-12946] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:09:51.447 [DEBUG] [Thread-12948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:06.497 [DEBUG] [Thread-12949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:06.772 [DEBUG] [Thread-12950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:10:20.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:10:20.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-25T14:10:21.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 10, 15), 30.06, 13.82, 0.0, 29.48, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:10:21.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:10:15
2025-12-25T14:10:21.531 [DEBUG] [Thread-12951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:21.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:10:21.778 [DEBUG] [Thread-12952] [transport.py] [_log()] starting thread (client mode): 0xb957bac0
2025-12-25T14:10:21.778 [DEBUG] [Thread-12952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:10:21.798 [DEBUG] [Thread-12952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:10:21.798 [INFO] [Thread-12952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:10:21.801 [DEBUG] [Thread-12952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:10:21.801 [DEBUG] [Thread-12952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:10:21.801 [DEBUG] [Thread-12952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:10:21.801 [DEBUG] [Thread-12952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] client lang: <none>
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] server lang: <none>
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] kex follows: False
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:10:21.802 [DEBUG] [Thread-12952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:10:21.803 [DEBUG] [Thread-12952] [transport.py] [_log()] Compression: none
2025-12-25T14:10:21.803 [DEBUG] [Thread-12952] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:10:21.820 [DEBUG] [Thread-12952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:10:21.821 [DEBUG] [Thread-12952] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:10:21.821 [DEBUG] [Thread-12952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:10:21.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:10:21.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:10:21.823 [DEBUG] [Thread-12952] [transport.py] [_log()] userauth is OK
2025-12-25T14:10:21.824 [DEBUG] [Thread-12952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:10:21.824 [DEBUG] [Thread-12952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:10:21.824 [DEBUG] [Thread-12952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:10:21.824 [DEBUG] [Thread-12952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:10:21.848 [INFO] [Thread-12952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:10:21.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:10:22.523 [DEBUG] [Thread-12952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:10:22.523 [DEBUG] [Thread-12952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:10:22.524 [DEBUG] [Thread-12952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:10:22.564 [DEBUG] [Thread-12952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:10:22.564 [DEBUG] [Thread-12952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:10:22.568 [DEBUG] [Thread-12952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:10:22.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:10:22.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:10:22.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:10:22.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:10:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:10:22.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:10:22.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:10:22.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:10:22.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:10:22.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.507006 -999.00  +25.80  27.58     21   +2.00 1 1 1 1 1   888    0 23.45 -2.10 ----- 31.5 27.6 308.0 50.0 31.7 -27.1 31.1 -26.9 31.4 -23.6 32.1 -24.7
2025-12-25T14:10:22.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:10:22.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:10:22.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.507006
2025-12-25T14:10:22.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:10:22.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:10:22.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:10:22.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:10:22.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:10:22.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:10:15', tmtdew=30.06, humidity=13.82, cloud=0.0, wind=29.48, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:10:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:10:22.595 [DEBUG] [Thread-12952] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:10: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-25T14:10:22.691 [DEBUG] [Thread-12955] [transport.py] [_log()] starting thread (client mode): 0xb957ac80
2025-12-25T14:10:22.691 [DEBUG] [Thread-12955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:10:22.710 [DEBUG] [Thread-12955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:10:22.710 [INFO] [Thread-12955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] client lang: <none>
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] server lang: <none>
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] kex follows: False
2025-12-25T14:10:22.718 [DEBUG] [Thread-12955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:10:22.719 [DEBUG] [Thread-12955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:10:22.719 [DEBUG] [Thread-12955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:10:22.719 [DEBUG] [Thread-12955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:10:22.719 [DEBUG] [Thread-12955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:10:22.719 [DEBUG] [Thread-12955] [transport.py] [_log()] Compression: none
2025-12-25T14:10:22.719 [DEBUG] [Thread-12955] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:10:22.778 [DEBUG] [Thread-12955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:10:22.779 [DEBUG] [Thread-12955] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:10:22.779 [DEBUG] [Thread-12955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:10:22.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:10:22.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:10:22.834 [DEBUG] [Thread-12955] [transport.py] [_log()] userauth is OK
2025-12-25T14:10:22.834 [DEBUG] [Thread-12955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:10:22.835 [DEBUG] [Thread-12955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:10:22.835 [DEBUG] [Thread-12955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:10:22.835 [DEBUG] [Thread-12955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:10:22.858 [INFO] [Thread-12955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:10:22.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-25T14:10:22.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:10:23.685 [DEBUG] [Thread-12955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:10:23.685 [DEBUG] [Thread-12955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:10:23.733 [DEBUG] [Thread-12955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:10:23.733 [DEBUG] [Thread-12955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:10:23.742 [DEBUG] [Thread-12955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:10:23.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:10: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-25T14:10:23.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-25T14:10:23.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:10:23.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:10:23.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:10:23.779 [DEBUG] [Thread-12955] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:10:34.061 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:34.062 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:36.562 [DEBUG] [Thread-12957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:51.606 [DEBUG] [Thread-12958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:10:53.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:10:53.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:10:53.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-25T14:10:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 10, 15), 30.06, 13.82, 0.0, 29.48, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:10:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:10:15
2025-12-25T14:10:54.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:10:54.752 [DEBUG] [Thread-12959] [transport.py] [_log()] starting thread (client mode): 0xb6b02f80
2025-12-25T14:10:54.752 [DEBUG] [Thread-12959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:10:54.773 [DEBUG] [Thread-12959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:10:54.774 [INFO] [Thread-12959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:10:54.777 [DEBUG] [Thread-12959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] client lang: <none>
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] server lang: <none>
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] kex follows: False
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:10:54.778 [DEBUG] [Thread-12959] [transport.py] [_log()] Compression: none
2025-12-25T14:10:54.779 [DEBUG] [Thread-12959] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:10:54.798 [DEBUG] [Thread-12959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:10:54.798 [DEBUG] [Thread-12959] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:10:54.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:10:54.800 [DEBUG] [Thread-12959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:10:54.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:10:54.802 [DEBUG] [Thread-12959] [transport.py] [_log()] userauth is OK
2025-12-25T14:10:54.802 [DEBUG] [Thread-12959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:10:54.802 [DEBUG] [Thread-12959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:10:54.802 [DEBUG] [Thread-12959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:10:54.803 [DEBUG] [Thread-12959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:10:54.839 [INFO] [Thread-12959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:10:54.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:10:55.462 [DEBUG] [Thread-12959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:10:55.463 [DEBUG] [Thread-12959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:10:55.463 [DEBUG] [Thread-12959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:10:55.504 [DEBUG] [Thread-12959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:10:55.504 [DEBUG] [Thread-12959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:10:55.507 [DEBUG] [Thread-12959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:10:55.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:10:55.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:10:55.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:10:55.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:10:55.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:10:55.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:10:55.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:10:55.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:10:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:10:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.507353 -999.00  +25.60  23.39     20   +1.50 1 1 1 1 1   888    0 23.96 -6.89 ----- 20.0 23.4 15.9 39.5 31.6 -27.2 30.9 -27.7 31.4 -23.8 32.0 -24.0
2025-12-25T14:10:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:10:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:10:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.507353
2025-12-25T14:10:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:10:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:10:55.528 [DEBUG] [Thread-12959] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:10:55.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:10:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:10:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:10:55.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:10:15', tmtdew=30.06, humidity=13.82, cloud=0.0, wind=29.48, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:10:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:10:55.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-25T14:10:55.624 [DEBUG] [Thread-12962] [transport.py] [_log()] starting thread (client mode): 0xb95d5d80
2025-12-25T14:10:55.624 [DEBUG] [Thread-12962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:10:55.642 [DEBUG] [Thread-12962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:10:55.643 [INFO] [Thread-12962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] client lang: <none>
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] server lang: <none>
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] kex follows: False
2025-12-25T14:10:55.650 [DEBUG] [Thread-12962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:10:55.651 [DEBUG] [Thread-12962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:10:55.651 [DEBUG] [Thread-12962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:10:55.651 [DEBUG] [Thread-12962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:10:55.651 [DEBUG] [Thread-12962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:10:55.651 [DEBUG] [Thread-12962] [transport.py] [_log()] Compression: none
2025-12-25T14:10:55.651 [DEBUG] [Thread-12962] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:10:55.710 [DEBUG] [Thread-12962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:10:55.710 [DEBUG] [Thread-12962] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:10:55.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:10:55.711 [DEBUG] [Thread-12962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:10:55.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:10:55.768 [DEBUG] [Thread-12962] [transport.py] [_log()] userauth is OK
2025-12-25T14:10:55.769 [DEBUG] [Thread-12962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:10:55.769 [DEBUG] [Thread-12962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:10:55.769 [DEBUG] [Thread-12962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:10:55.769 [DEBUG] [Thread-12962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:10:55.788 [INFO] [Thread-12962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:10:55.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-25T14:10:55.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:10:56.629 [DEBUG] [Thread-12962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:10:56.629 [DEBUG] [Thread-12962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:10:56.677 [DEBUG] [Thread-12962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:10:56.677 [DEBUG] [Thread-12962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:10:56.686 [DEBUG] [Thread-12962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:10:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:10:56.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-25T14:10:56.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-25T14:10:56.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:10:56.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:10:56.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:10:56.723 [DEBUG] [Thread-12962] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:11:06.641 [DEBUG] [Thread-12964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:06.825 [DEBUG] [Thread-12965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:21.688 [DEBUG] [Thread-12966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:11:26.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:11:26.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-25T14:11:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 10, 15), 30.06, 13.82, 0.0, 29.48, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:11:27.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:10:15
2025-12-25T14:11:27.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:11:27.708 [DEBUG] [Thread-12967] [transport.py] [_log()] starting thread (client mode): 0xb95b1060
2025-12-25T14:11:27.708 [DEBUG] [Thread-12967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:11:27.728 [DEBUG] [Thread-12967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:11:27.728 [INFO] [Thread-12967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:11:27.731 [DEBUG] [Thread-12967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:11:27.731 [DEBUG] [Thread-12967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:11:27.731 [DEBUG] [Thread-12967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:11:27.731 [DEBUG] [Thread-12967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:11:27.731 [DEBUG] [Thread-12967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] client lang: <none>
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] server lang: <none>
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] kex follows: False
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:11:27.732 [DEBUG] [Thread-12967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:11:27.733 [DEBUG] [Thread-12967] [transport.py] [_log()] Compression: none
2025-12-25T14:11:27.733 [DEBUG] [Thread-12967] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:11:27.753 [DEBUG] [Thread-12967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:11:27.754 [DEBUG] [Thread-12967] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:11:27.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:11:27.756 [DEBUG] [Thread-12967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:11:27.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:11:27.758 [DEBUG] [Thread-12967] [transport.py] [_log()] userauth is OK
2025-12-25T14:11:27.759 [DEBUG] [Thread-12967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:11:27.759 [DEBUG] [Thread-12967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:11:27.759 [DEBUG] [Thread-12967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:11:27.759 [DEBUG] [Thread-12967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:11:27.784 [INFO] [Thread-12967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:11:27.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:11:28.411 [DEBUG] [Thread-12967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:11:28.411 [DEBUG] [Thread-12967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:11:28.412 [DEBUG] [Thread-12967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:11:28.452 [DEBUG] [Thread-12967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:11:28.452 [DEBUG] [Thread-12967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:11:28.456 [DEBUG] [Thread-12967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:11:28.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:11:28.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:11:28.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:11:28.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:11:28.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:11:28.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:11:28.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:11:28.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:11:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:11:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.507701 -999.00  +25.20  25.57     21   +1.80 1 1 1 1 1   888    0 24.15 -8.50 ----- 16.3 25.6 325.8 30.3 31.5 -28.6 30.9 -26.1 31.4 -24.0 31.7 -26.2
2025-12-25T14:11:28.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:11:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:11:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.507701
2025-12-25T14:11:28.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:11:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:11:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:11:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:11:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:11:28.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:10:15', tmtdew=30.06, humidity=13.82, cloud=0.0, wind=29.48, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:11:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:11:28.482 [DEBUG] [Thread-12967] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:11:28.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:11:28.575 [DEBUG] [Thread-12970] [transport.py] [_log()] starting thread (client mode): 0xb9591360
2025-12-25T14:11:28.575 [DEBUG] [Thread-12970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:11:28.589 [DEBUG] [Thread-12970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:11:28.589 [INFO] [Thread-12970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] client lang: <none>
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] server lang: <none>
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] kex follows: False
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] Compression: none
2025-12-25T14:11:28.597 [DEBUG] [Thread-12970] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:11:28.655 [DEBUG] [Thread-12970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:11:28.655 [DEBUG] [Thread-12970] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:11:28.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:11:28.656 [DEBUG] [Thread-12970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:11:28.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:11:28.714 [DEBUG] [Thread-12970] [transport.py] [_log()] userauth is OK
2025-12-25T14:11:28.715 [DEBUG] [Thread-12970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:11:28.715 [DEBUG] [Thread-12970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:11:28.715 [DEBUG] [Thread-12970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:11:28.715 [DEBUG] [Thread-12970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:11:28.733 [INFO] [Thread-12970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:11:28.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-25T14:11:28.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:11:29.581 [DEBUG] [Thread-12970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:11:29.581 [DEBUG] [Thread-12970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:11:29.629 [DEBUG] [Thread-12970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:11:29.629 [DEBUG] [Thread-12970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:11:29.638 [DEBUG] [Thread-12970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:11:29.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:11:29.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:11:29.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-25T14:11:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:11:29.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:11:29.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:11:29.675 [DEBUG] [Thread-12970] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:11:34.201 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:34.202 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:36.724 [DEBUG] [Thread-12972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:51.781 [DEBUG] [Thread-12973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:11:59.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:11:59.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:11:59.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:12:00.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 10, 15), 30.06, 13.82, 0.0, 29.48, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:12:00.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:10:15
2025-12-25T14:12:00.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:12:00.650 [DEBUG] [Thread-12974] [transport.py] [_log()] starting thread (client mode): 0xb6b03130
2025-12-25T14:12:00.650 [DEBUG] [Thread-12974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:12:00.670 [DEBUG] [Thread-12974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:12:00.670 [INFO] [Thread-12974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:12:00.674 [DEBUG] [Thread-12974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:12:00.674 [DEBUG] [Thread-12974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:12:00.674 [DEBUG] [Thread-12974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:12:00.674 [DEBUG] [Thread-12974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:00.674 [DEBUG] [Thread-12974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] client lang: <none>
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] server lang: <none>
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] kex follows: False
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:12:00.675 [DEBUG] [Thread-12974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:12:00.676 [DEBUG] [Thread-12974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:12:00.676 [DEBUG] [Thread-12974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:12:00.676 [DEBUG] [Thread-12974] [transport.py] [_log()] Compression: none
2025-12-25T14:12:00.676 [DEBUG] [Thread-12974] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:12:00.694 [DEBUG] [Thread-12974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:12:00.695 [DEBUG] [Thread-12974] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:12:00.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:12:00.696 [DEBUG] [Thread-12974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:12:00.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:12:00.698 [DEBUG] [Thread-12974] [transport.py] [_log()] userauth is OK
2025-12-25T14:12:00.698 [DEBUG] [Thread-12974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:12:00.698 [DEBUG] [Thread-12974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:12:00.698 [DEBUG] [Thread-12974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:12:00.698 [DEBUG] [Thread-12974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:12:00.722 [INFO] [Thread-12974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:12:00.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:12:01.378 [DEBUG] [Thread-12974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:12:01.378 [DEBUG] [Thread-12974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:12:01.379 [DEBUG] [Thread-12974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:12:01.419 [DEBUG] [Thread-12974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:12:01.419 [DEBUG] [Thread-12974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:12:01.422 [DEBUG] [Thread-12974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:12:01.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:12:01.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:12:01.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:12:01.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:12:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:12:01.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:12:01.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:12:01.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:12:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:12:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.508048 -999.00  +25.60  20.64     22   +2.30 1 1 1 1 1   888    0 23.63 -12.88 ----- 24.1 20.6 341.9 33.4 31.4 -25.8 30.9 -26.4 31.5 -22.1 31.8 -28.5
2025-12-25T14:12:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:12:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:12:01.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.508048
2025-12-25T14:12:01.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:12:01.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:12:01.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:12:01.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:12:01.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:12:01.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:10:15', tmtdew=30.06, humidity=13.82, cloud=0.0, wind=29.48, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:11:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:12:01.449 [DEBUG] [Thread-12974] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:12:01.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-25T14:12:01.543 [DEBUG] [Thread-12977] [transport.py] [_log()] starting thread (client mode): 0xb95f3460
2025-12-25T14:12:01.543 [DEBUG] [Thread-12977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:12:01.558 [DEBUG] [Thread-12977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:12:01.558 [INFO] [Thread-12977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:01.566 [DEBUG] [Thread-12977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] client lang: <none>
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] server lang: <none>
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] kex follows: False
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] Compression: none
2025-12-25T14:12:01.567 [DEBUG] [Thread-12977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:12:01.626 [DEBUG] [Thread-12977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:12:01.627 [DEBUG] [Thread-12977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:12:01.627 [DEBUG] [Thread-12977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:12:01.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:12:01.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:12:01.681 [DEBUG] [Thread-12977] [transport.py] [_log()] userauth is OK
2025-12-25T14:12:01.681 [DEBUG] [Thread-12977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:12:01.681 [DEBUG] [Thread-12977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:12:01.682 [DEBUG] [Thread-12977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:12:01.682 [DEBUG] [Thread-12977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:12:01.695 [INFO] [Thread-12977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:12:01.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-25T14:12:01.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:12:02.547 [DEBUG] [Thread-12977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:12:02.547 [DEBUG] [Thread-12977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:12:02.599 [DEBUG] [Thread-12977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:12:02.599 [DEBUG] [Thread-12977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:12:02.608 [DEBUG] [Thread-12977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:12:02.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:12:02.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-25T14:12:02.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-25T14:12:02.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:12:02.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:12:02.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:12:02.645 [DEBUG] [Thread-12977] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:12:06.814 [DEBUG] [Thread-12979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:12:06.875 [DEBUG] [Thread-12980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:12:21.869 [DEBUG] [Thread-12981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:12:32.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:12:32.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:12:32.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-25T14:12:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 10, 15), 30.06, 13.82, 0.0, 29.48, 26.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:12:33.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:10:15
2025-12-25T14:12:33.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:12:33.667 [DEBUG] [Thread-12982] [transport.py] [_log()] starting thread (client mode): 0xb6b037c0
2025-12-25T14:12:33.667 [DEBUG] [Thread-12982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:12:33.691 [DEBUG] [Thread-12982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:12:33.691 [INFO] [Thread-12982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] client lang: <none>
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] server lang: <none>
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] kex follows: False
2025-12-25T14:12:33.693 [DEBUG] [Thread-12982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:12:33.694 [DEBUG] [Thread-12982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:12:33.694 [DEBUG] [Thread-12982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:12:33.694 [DEBUG] [Thread-12982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:12:33.694 [DEBUG] [Thread-12982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:12:33.694 [DEBUG] [Thread-12982] [transport.py] [_log()] Compression: none
2025-12-25T14:12:33.694 [DEBUG] [Thread-12982] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:12:33.701 [DEBUG] [Thread-12982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:12:33.701 [DEBUG] [Thread-12982] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:12:33.701 [DEBUG] [Thread-12982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:12:33.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:12:33.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:12:33.703 [DEBUG] [Thread-12982] [transport.py] [_log()] userauth is OK
2025-12-25T14:12:33.703 [DEBUG] [Thread-12982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:12:33.703 [DEBUG] [Thread-12982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:12:33.703 [DEBUG] [Thread-12982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:12:33.703 [DEBUG] [Thread-12982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:12:33.722 [INFO] [Thread-12982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:12:33.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:12:34.380 [DEBUG] [Thread-12982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:12:34.380 [DEBUG] [Thread-12982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:12:34.380 [DEBUG] [Thread-12982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:12:34.393 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:12:34.394 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:12:34.421 [DEBUG] [Thread-12982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:12:34.422 [DEBUG] [Thread-12982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:12:34.424 [DEBUG] [Thread-12982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:12:34.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:12:34.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:12:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:12:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:12:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:12:34.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:12:34.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:12:34.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.508395 -999.00  +26.20  16.78     21   +2.60 1 1 1 1 1   888    0 23.79 -16.02 ----- 20.4 16.8 352.0 28.4 31.5 -25.6 31.2 -24.7 31.6 -22.2 32.0 -23.1
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.508395
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:12:34.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:10:15', tmtdew=30.06, humidity=13.82, cloud=0.0, wind=29.48, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:12:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:12:34.447 [DEBUG] [Thread-12982] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:12:34.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-25T14:12:34.529 [DEBUG] [Thread-12985] [transport.py] [_log()] starting thread (client mode): 0xb6b03460
2025-12-25T14:12:34.530 [DEBUG] [Thread-12985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:12:34.544 [DEBUG] [Thread-12985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:12:34.544 [INFO] [Thread-12985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:12:34.551 [DEBUG] [Thread-12985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] client lang: <none>
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] server lang: <none>
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] kex follows: False
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] Compression: none
2025-12-25T14:12:34.552 [DEBUG] [Thread-12985] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:12:34.608 [DEBUG] [Thread-12985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:12:34.608 [DEBUG] [Thread-12985] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:12:34.608 [DEBUG] [Thread-12985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:12:34.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:12:34.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:12:34.665 [DEBUG] [Thread-12985] [transport.py] [_log()] userauth is OK
2025-12-25T14:12:34.665 [DEBUG] [Thread-12985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:12:34.665 [DEBUG] [Thread-12985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:12:34.666 [DEBUG] [Thread-12985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:12:34.666 [DEBUG] [Thread-12985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:12:34.679 [INFO] [Thread-12985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:12:34.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-25T14:12:34.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:12:35.497 [DEBUG] [Thread-12985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:12:35.497 [DEBUG] [Thread-12985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:12:35.548 [DEBUG] [Thread-12985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:12:35.548 [DEBUG] [Thread-12985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:12:35.557 [DEBUG] [Thread-12985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:12:35.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:12:35.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:12:35.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-25T14:12:35.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:12:35.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:12:35.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:12:35.588 [DEBUG] [Thread-12985] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:12:36.907 [DEBUG] [Thread-12987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:12:51.946 [DEBUG] [Thread-12988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:05.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:13:05.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:13:05.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-25T14:13:06.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 10, 47), 29.85, 13.99, 0.0, 29.55, 26.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:13:06.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:10:47
2025-12-25T14:13:06.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:13:06.579 [DEBUG] [Thread-12989] [transport.py] [_log()] starting thread (client mode): 0xb6b018d0
2025-12-25T14:13:06.579 [DEBUG] [Thread-12989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:13:06.600 [DEBUG] [Thread-12989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:13:06.600 [INFO] [Thread-12989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] client lang: <none>
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] server lang: <none>
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] kex follows: False
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] Compression: none
2025-12-25T14:13:06.603 [DEBUG] [Thread-12989] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:13:06.621 [DEBUG] [Thread-12989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:13:06.622 [DEBUG] [Thread-12989] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:13:06.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:13:06.623 [DEBUG] [Thread-12989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:13:06.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:13:06.665 [DEBUG] [Thread-12989] [transport.py] [_log()] userauth is OK
2025-12-25T14:13:06.665 [DEBUG] [Thread-12989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:13:06.665 [DEBUG] [Thread-12989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:13:06.665 [DEBUG] [Thread-12989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:13:06.665 [DEBUG] [Thread-12989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:13:06.697 [INFO] [Thread-12989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:13:06.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:13:06.931 [DEBUG] [Thread-12991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:06.981 [DEBUG] [Thread-12992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:07.356 [DEBUG] [Thread-12989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:13:07.356 [DEBUG] [Thread-12989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:13:07.357 [DEBUG] [Thread-12989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:13:07.397 [DEBUG] [Thread-12989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:13:07.397 [DEBUG] [Thread-12989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:13:07.401 [DEBUG] [Thread-12989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:13:07.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:13:07.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:13:07.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:13:07.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:13:07.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:13:07.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:13:07.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:13:07.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:13:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:13:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.508742 -999.00  +26.80  26.68     21   +3.00 1 1 1 1 1   888    0 23.91 -17.98 ----- 27.4 26.7 308.4 32.1 31.7 -24.6 31.2 -25.7 31.6 -24.3 32.2 -23.0
2025-12-25T14:13:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:13:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:13:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.508742
2025-12-25T14:13:07.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:13:07.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:13:07.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:13:07.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:13:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:13:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:10:47', tmtdew=29.85, humidity=13.99, cloud=0.0, wind=29.55, temperature=26.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:12:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:13:07.429 [DEBUG] [Thread-12989] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:13:07.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:13:07.524 [DEBUG] [Thread-12994] [transport.py] [_log()] starting thread (client mode): 0xb6b02830
2025-12-25T14:13:07.524 [DEBUG] [Thread-12994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:13:07.540 [DEBUG] [Thread-12994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:13:07.540 [INFO] [Thread-12994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:13:07.547 [DEBUG] [Thread-12994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] client lang: <none>
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] server lang: <none>
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] kex follows: False
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:13:07.548 [DEBUG] [Thread-12994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:13:07.549 [DEBUG] [Thread-12994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:13:07.549 [DEBUG] [Thread-12994] [transport.py] [_log()] Compression: none
2025-12-25T14:13:07.549 [DEBUG] [Thread-12994] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:13:07.606 [DEBUG] [Thread-12994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:13:07.607 [DEBUG] [Thread-12994] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:13:07.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:13:07.608 [DEBUG] [Thread-12994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:13:07.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:13:07.662 [DEBUG] [Thread-12994] [transport.py] [_log()] userauth is OK
2025-12-25T14:13:07.663 [DEBUG] [Thread-12994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:13:07.663 [DEBUG] [Thread-12994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:13:07.663 [DEBUG] [Thread-12994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:13:07.663 [DEBUG] [Thread-12994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:13:07.681 [INFO] [Thread-12994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:13:07.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-25T14:13:07.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:13:08.536 [DEBUG] [Thread-12994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:13:08.536 [DEBUG] [Thread-12994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:13:08.584 [DEBUG] [Thread-12994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:13:08.584 [DEBUG] [Thread-12994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:13:08.593 [DEBUG] [Thread-12994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:13:08.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:13: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-25T14:13:08.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-25T14:13:08.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:13:08.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:13:08.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:13:08.630 [DEBUG] [Thread-12994] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:13:22.014 [DEBUG] [Thread-12996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:34.549 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:34.550 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:37.064 [DEBUG] [Thread-12997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:13:38.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:13:38.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:13:38.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:13:39.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 13, 31), 28.18, 15.66, 0.0, 29.5, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:13:39.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:13:31
2025-12-25T14:13:39.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:13:39.598 [DEBUG] [Thread-12998] [transport.py] [_log()] starting thread (client mode): 0xb6b027d0
2025-12-25T14:13:39.598 [DEBUG] [Thread-12998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:13:39.619 [DEBUG] [Thread-12998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:13:39.619 [INFO] [Thread-12998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] client lang: <none>
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] server lang: <none>
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] kex follows: False
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] Compression: none
2025-12-25T14:13:39.622 [DEBUG] [Thread-12998] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:13:39.639 [DEBUG] [Thread-12998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:13:39.639 [DEBUG] [Thread-12998] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:13:39.640 [DEBUG] [Thread-12998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:13:39.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:13:39.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:13:39.642 [DEBUG] [Thread-12998] [transport.py] [_log()] userauth is OK
2025-12-25T14:13:39.643 [DEBUG] [Thread-12998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:13:39.643 [DEBUG] [Thread-12998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:13:39.643 [DEBUG] [Thread-12998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:13:39.643 [DEBUG] [Thread-12998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:13:39.678 [INFO] [Thread-12998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:13:39.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:13:40.338 [DEBUG] [Thread-12998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:13:40.338 [DEBUG] [Thread-12998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:13:40.348 [DEBUG] [Thread-12998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:13:40.379 [DEBUG] [Thread-12998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:13:40.379 [DEBUG] [Thread-12998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:13:40.383 [DEBUG] [Thread-12998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:13:40.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:13:40.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:13:40.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:13:40.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:13:40.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:13:40.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:13:40.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:13:40.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:13:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:13:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.509089 -999.00  +27.00  21.35     22   +3.50 1 1 1 1 1   888    0 23.57 -19.55 ----- 31.4 21.4 293.7 31.0 31.7 -24.9 31.3 -26.2 31.6 -24.7 32.2 -23.2
2025-12-25T14:13:40.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:13:40.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:13:40.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.509089
2025-12-25T14:13:40.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:13:40.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:13:40.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:13:40.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:13:40.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:13:40.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:13:31', tmtdew=28.18, humidity=15.66, cloud=0.0, wind=29.5, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:13:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:13:40.411 [DEBUG] [Thread-12998] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:13:40.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-25T14:13:40.504 [DEBUG] [Thread-13001] [transport.py] [_log()] starting thread (client mode): 0xb6b2a8f0
2025-12-25T14:13:40.504 [DEBUG] [Thread-13001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:13:40.519 [DEBUG] [Thread-13001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:13:40.519 [INFO] [Thread-13001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] client lang: <none>
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] server lang: <none>
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] kex follows: False
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:13:40.526 [DEBUG] [Thread-13001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:13:40.527 [DEBUG] [Thread-13001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:13:40.527 [DEBUG] [Thread-13001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:13:40.527 [DEBUG] [Thread-13001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:13:40.527 [DEBUG] [Thread-13001] [transport.py] [_log()] Compression: none
2025-12-25T14:13:40.527 [DEBUG] [Thread-13001] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:13:40.586 [DEBUG] [Thread-13001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:13:40.587 [DEBUG] [Thread-13001] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:13:40.587 [DEBUG] [Thread-13001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:13:40.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:13:40.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:13:40.643 [DEBUG] [Thread-13001] [transport.py] [_log()] userauth is OK
2025-12-25T14:13:40.643 [DEBUG] [Thread-13001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:13:40.643 [DEBUG] [Thread-13001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:13:40.643 [DEBUG] [Thread-13001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:13:40.643 [DEBUG] [Thread-13001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:13:40.662 [INFO] [Thread-13001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:13:40.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-25T14:13:40.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:13:41.496 [DEBUG] [Thread-13001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:13:41.496 [DEBUG] [Thread-13001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:13:41.544 [DEBUG] [Thread-13001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:13:41.544 [DEBUG] [Thread-13001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:13:41.554 [DEBUG] [Thread-13001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:13:41.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:13:41.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:13:41.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-25T14:13:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:13:41.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:13:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:13:41.591 [DEBUG] [Thread-13001] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:13:52.096 [DEBUG] [Thread-13003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:06.964 [DEBUG] [Thread-13004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:07.143 [DEBUG] [Thread-13005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:11.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:14:11.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:14:11.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-25T14:14:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 14, 3), 28.34, 15.51, 0.0, 26.49, 26.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:14:12.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:14:03
2025-12-25T14:14:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:14:12.562 [DEBUG] [Thread-13006] [transport.py] [_log()] starting thread (client mode): 0xb6b2b370
2025-12-25T14:14:12.563 [DEBUG] [Thread-13006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:14:12.581 [DEBUG] [Thread-13006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:14:12.582 [INFO] [Thread-13006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:14:12.584 [DEBUG] [Thread-13006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:14:12.584 [DEBUG] [Thread-13006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:14:12.584 [DEBUG] [Thread-13006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:14:12.584 [DEBUG] [Thread-13006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] client lang: <none>
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] server lang: <none>
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] kex follows: False
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] Compression: none
2025-12-25T14:14:12.585 [DEBUG] [Thread-13006] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:14:12.602 [DEBUG] [Thread-13006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:14:12.603 [DEBUG] [Thread-13006] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:14:12.603 [DEBUG] [Thread-13006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:14:12.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:14:12.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:14:12.605 [DEBUG] [Thread-13006] [transport.py] [_log()] userauth is OK
2025-12-25T14:14:12.606 [DEBUG] [Thread-13006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:14:12.606 [DEBUG] [Thread-13006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:14:12.606 [DEBUG] [Thread-13006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:14:12.606 [DEBUG] [Thread-13006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:14:12.631 [INFO] [Thread-13006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:14:12.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:14:13.259 [DEBUG] [Thread-13006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:14:13.259 [DEBUG] [Thread-13006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:14:13.259 [DEBUG] [Thread-13006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:14:13.300 [DEBUG] [Thread-13006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:14:13.300 [DEBUG] [Thread-13006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:14:13.303 [DEBUG] [Thread-13006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:14:13.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:14:13.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:14:13.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:14:13.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:14:13.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:14:13.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:14:13.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:14:13.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:14:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:14:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.509437 -999.00  +27.20  34.88     22   +3.70 1 1 2 1 1   888    0 23.46 -19.69 ----- 29.8 34.9 298.8 42.3 31.6 -26.3 31.4 -25.9 31.7 -25.2 32.3 -23.3
2025-12-25T14:14:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:14:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:14:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.509437
2025-12-25T14:14:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:14:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:14:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:14:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:14:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:14:13.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:14:03', tmtdew=28.34, humidity=15.51, cloud=0.0, wind=26.49, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:13:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:14:13.331 [DEBUG] [Thread-13006] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:14:13.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-25T14:14:13.425 [DEBUG] [Thread-13009] [transport.py] [_log()] starting thread (client mode): 0xb6b2b1c0
2025-12-25T14:14:13.425 [DEBUG] [Thread-13009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:14:13.440 [DEBUG] [Thread-13009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:14:13.440 [INFO] [Thread-13009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] client lang: <none>
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] server lang: <none>
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] kex follows: False
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] Compression: none
2025-12-25T14:14:13.448 [DEBUG] [Thread-13009] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:14:13.506 [DEBUG] [Thread-13009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:14:13.507 [DEBUG] [Thread-13009] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:14:13.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:14:13.508 [DEBUG] [Thread-13009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:14:13.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:14:13.562 [DEBUG] [Thread-13009] [transport.py] [_log()] userauth is OK
2025-12-25T14:14:13.563 [DEBUG] [Thread-13009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:14:13.563 [DEBUG] [Thread-13009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:14:13.563 [DEBUG] [Thread-13009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:14:13.563 [DEBUG] [Thread-13009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:14:13.582 [INFO] [Thread-13009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:14:13.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-25T14:14:13.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:14:14.448 [DEBUG] [Thread-13009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:14:14.448 [DEBUG] [Thread-13009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:14:14.496 [DEBUG] [Thread-13009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:14:14.496 [DEBUG] [Thread-13009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:14:14.505 [DEBUG] [Thread-13009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:14:14.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:14:14.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:14:14.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-25T14:14:14.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:14:14.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:14:14.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:14:14.541 [DEBUG] [Thread-13009] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:14:22.181 [DEBUG] [Thread-13011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:34.695 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:34.697 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:37.226 [DEBUG] [Thread-13012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:14:44.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:14:44.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:14:44.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-25T14:14:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 14, 35), 27.15, 16.56, 0.0, 39.01, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:14:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:14:35
2025-12-25T14:14:45.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:14:45.521 [DEBUG] [Thread-13013] [transport.py] [_log()] starting thread (client mode): 0xb6b02980
2025-12-25T14:14:45.521 [DEBUG] [Thread-13013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:14:45.541 [DEBUG] [Thread-13013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:14:45.542 [INFO] [Thread-13013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:14:45.544 [DEBUG] [Thread-13013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] client lang: <none>
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] server lang: <none>
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] kex follows: False
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:14:45.545 [DEBUG] [Thread-13013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:14:45.546 [DEBUG] [Thread-13013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:14:45.546 [DEBUG] [Thread-13013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:14:45.546 [DEBUG] [Thread-13013] [transport.py] [_log()] Compression: none
2025-12-25T14:14:45.546 [DEBUG] [Thread-13013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:14:45.562 [DEBUG] [Thread-13013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:14:45.562 [DEBUG] [Thread-13013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:14:45.563 [DEBUG] [Thread-13013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:14:45.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:14:45.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:14:45.564 [DEBUG] [Thread-13013] [transport.py] [_log()] userauth is OK
2025-12-25T14:14:45.565 [DEBUG] [Thread-13013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:14:45.565 [DEBUG] [Thread-13013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:14:45.565 [DEBUG] [Thread-13013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:14:45.565 [DEBUG] [Thread-13013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:14:45.600 [INFO] [Thread-13013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:14:45.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:14:46.242 [DEBUG] [Thread-13013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:14:46.243 [DEBUG] [Thread-13013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:14:46.243 [DEBUG] [Thread-13013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:14:46.284 [DEBUG] [Thread-13013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:14:46.284 [DEBUG] [Thread-13013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:14:46.287 [DEBUG] [Thread-13013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:14:46.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:14:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:14:46.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:14:46.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:14:46.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:14:46.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:14:46.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:14:46.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:14:46.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:14:46.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.510131 -999.00  +26.10  41.95     22   +2.80 1 1 2 1 1   888    0 23.32 -17.77 ----- 33.2 42.0 312.8 50.3 31.6 -27.8 31.1 -26.0 31.4 -27.8 32.1 -24.7
2025-12-25T14:14:46.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:14:46.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:14:46.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.510131
2025-12-25T14:14:46.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:14:46.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:14:46.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:14:46.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:14:46.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:14:46.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:14:35', tmtdew=27.15, humidity=16.56, cloud=0.0, wind=39.01, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:14:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:14:46.315 [DEBUG] [Thread-13013] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:14:46.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-25T14:14:46.408 [DEBUG] [Thread-13016] [transport.py] [_log()] starting thread (client mode): 0xb955b8b0
2025-12-25T14:14:46.408 [DEBUG] [Thread-13016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:14:46.423 [DEBUG] [Thread-13016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:14:46.424 [INFO] [Thread-13016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:14:46.431 [DEBUG] [Thread-13016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:14:46.431 [DEBUG] [Thread-13016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] client lang: <none>
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] server lang: <none>
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] kex follows: False
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] Compression: none
2025-12-25T14:14:46.432 [DEBUG] [Thread-13016] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:14:46.490 [DEBUG] [Thread-13016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:14:46.491 [DEBUG] [Thread-13016] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:14:46.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:14:46.492 [DEBUG] [Thread-13016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:14:46.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:14:46.546 [DEBUG] [Thread-13016] [transport.py] [_log()] userauth is OK
2025-12-25T14:14:46.546 [DEBUG] [Thread-13016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:14:46.547 [DEBUG] [Thread-13016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:14:46.547 [DEBUG] [Thread-13016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:14:46.547 [DEBUG] [Thread-13016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:14:46.570 [INFO] [Thread-13016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:14:46.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:14:46.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:14:47.414 [DEBUG] [Thread-13016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:14:47.414 [DEBUG] [Thread-13016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:14:47.462 [DEBUG] [Thread-13016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:14:47.462 [DEBUG] [Thread-13016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:14:47.471 [DEBUG] [Thread-13016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:14:47.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:14:47.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-25T14:14:47.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:14:47.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:14:47.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:14:47.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:14:47.508 [DEBUG] [Thread-13016] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:14:52.259 [DEBUG] [Thread-13018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:07.011 [DEBUG] [Thread-13019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:07.316 [DEBUG] [Thread-13020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:15:17.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:15:17.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:15:18.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 15, 7), 26.99, 16.72, 0.0, 34.81, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:15:18.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:15:07
2025-12-25T14:15:18.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:15:18.468 [DEBUG] [Thread-13021] [transport.py] [_log()] starting thread (client mode): 0xb95b3730
2025-12-25T14:15:18.468 [DEBUG] [Thread-13021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:15:18.480 [DEBUG] [Thread-13021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:15:18.480 [INFO] [Thread-13021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:15:18.481 [DEBUG] [Thread-13021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] client lang: <none>
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] server lang: <none>
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] kex follows: False
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] Compression: none
2025-12-25T14:15:18.482 [DEBUG] [Thread-13021] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:15:18.492 [DEBUG] [Thread-13021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:15:18.493 [DEBUG] [Thread-13021] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:15:18.493 [DEBUG] [Thread-13021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:15:18.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:15:18.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:15:18.494 [DEBUG] [Thread-13021] [transport.py] [_log()] userauth is OK
2025-12-25T14:15:18.494 [DEBUG] [Thread-13021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:15:18.494 [DEBUG] [Thread-13021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:15:18.494 [DEBUG] [Thread-13021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:15:18.494 [DEBUG] [Thread-13021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:15:18.514 [INFO] [Thread-13021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:15:18.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:15:19.074 [DEBUG] [Thread-13021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:15:19.074 [DEBUG] [Thread-13021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:15:19.074 [DEBUG] [Thread-13021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:15:19.115 [DEBUG] [Thread-13021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:15:19.115 [DEBUG] [Thread-13021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:15:19.118 [DEBUG] [Thread-13021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:15:19.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:15:19.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:15:19.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:15:19.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:15:19.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:15:19.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:15:19.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:15:19.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:15:19.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:15:19.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.510478 -999.00  +25.70  34.72     23   +3.00 1 1 2 1 1   888    0 23.21 -24.52 ----- 43.1 34.7 292.6 40.0 31.5 -26.5 31.1 -26.0 31.2 -25.8 32.0 -23.5
2025-12-25T14:15:19.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:15:19.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:15:19.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.510478
2025-12-25T14:15:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:15:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:15:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:15:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:15:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:15:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:15:07', tmtdew=26.99, humidity=16.72, cloud=0.0, wind=34.81, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:15:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:15:19.143 [DEBUG] [Thread-13021] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:15:19.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-25T14:15:19.236 [DEBUG] [Thread-13024] [transport.py] [_log()] starting thread (client mode): 0xb95b34c0
2025-12-25T14:15:19.237 [DEBUG] [Thread-13024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:15:19.251 [DEBUG] [Thread-13024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:15:19.251 [INFO] [Thread-13024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:15:19.259 [DEBUG] [Thread-13024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:15:19.259 [DEBUG] [Thread-13024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:15:19.259 [DEBUG] [Thread-13024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:15:19.259 [DEBUG] [Thread-13024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:19.259 [DEBUG] [Thread-13024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:19.259 [DEBUG] [Thread-13024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] client lang: <none>
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] server lang: <none>
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] kex follows: False
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:15:19.260 [DEBUG] [Thread-13024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:15:19.261 [DEBUG] [Thread-13024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:15:19.261 [DEBUG] [Thread-13024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:15:19.261 [DEBUG] [Thread-13024] [transport.py] [_log()] Compression: none
2025-12-25T14:15:19.261 [DEBUG] [Thread-13024] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:15:19.319 [DEBUG] [Thread-13024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:15:19.319 [DEBUG] [Thread-13024] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:15:19.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:15:19.321 [DEBUG] [Thread-13024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:15:19.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:15:19.374 [DEBUG] [Thread-13024] [transport.py] [_log()] userauth is OK
2025-12-25T14:15:19.374 [DEBUG] [Thread-13024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:15:19.374 [DEBUG] [Thread-13024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:15:19.374 [DEBUG] [Thread-13024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:15:19.374 [DEBUG] [Thread-13024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:15:19.389 [INFO] [Thread-13024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:15:19.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:15:19.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:15:20.256 [DEBUG] [Thread-13024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:15:20.257 [DEBUG] [Thread-13024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:15:20.305 [DEBUG] [Thread-13024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:15:20.305 [DEBUG] [Thread-13024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:15:20.314 [DEBUG] [Thread-13024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:15:20.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:15:20.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-25T14:15:20.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-25T14:15:20.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:15:20.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:15:20.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:15:20.348 [DEBUG] [Thread-13024] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:15:22.348 [DEBUG] [Thread-13026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:34.839 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:34.841 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:37.403 [DEBUG] [Thread-13027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:50.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:15:50.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:15:50.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-25T14:15:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 15, 39), 26.96, 16.78, 0.0, 33.61, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:15:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:15:39
2025-12-25T14:15:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:15:51.381 [DEBUG] [Thread-13028] [transport.py] [_log()] starting thread (client mode): 0xb957ab00
2025-12-25T14:15:51.381 [DEBUG] [Thread-13028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:15:51.402 [DEBUG] [Thread-13028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:15:51.402 [INFO] [Thread-13028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:15:51.405 [DEBUG] [Thread-13028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] client lang: <none>
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] server lang: <none>
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] kex follows: False
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] Compression: none
2025-12-25T14:15:51.406 [DEBUG] [Thread-13028] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:15:51.422 [DEBUG] [Thread-13028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:15:51.422 [DEBUG] [Thread-13028] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:15:51.422 [DEBUG] [Thread-13028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:15:51.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:15:51.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:15:51.423 [DEBUG] [Thread-13028] [transport.py] [_log()] userauth is OK
2025-12-25T14:15:51.423 [DEBUG] [Thread-13028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:15:51.423 [DEBUG] [Thread-13028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:15:51.423 [DEBUG] [Thread-13028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:15:51.423 [DEBUG] [Thread-13028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:15:51.442 [INFO] [Thread-13028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:15:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:15:52.082 [DEBUG] [Thread-13028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:15:52.082 [DEBUG] [Thread-13028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:15:52.083 [DEBUG] [Thread-13028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:15:52.123 [DEBUG] [Thread-13028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:15:52.123 [DEBUG] [Thread-13028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:15:52.127 [DEBUG] [Thread-13028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:15:52.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:15:52.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:15:52.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:15:52.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:15:52.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:15:52.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:15:52.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:15:52.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:15:52.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:15:52.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.510826 -999.00  +25.90  30.87     22   +2.70 1 1 2 1 1   888    0 22.87 -28.97 ----- 43.5 30.9 301.2 50.4 31.4 -26.5 30.9 -27.3 31.2 -23.4 31.8 -24.4
2025-12-25T14:15:52.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:15:52.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:15:52.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.510826
2025-12-25T14:15:52.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:15:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:15:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:15:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:15:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:15:52.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:15:39', tmtdew=26.96, humidity=16.78, cloud=0.0, wind=33.61, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:15:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:15:52.155 [DEBUG] [Thread-13028] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:15:52.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-25T14:15:52.247 [DEBUG] [Thread-13031] [transport.py] [_log()] starting thread (client mode): 0xb6b2a680
2025-12-25T14:15:52.247 [DEBUG] [Thread-13031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:15:52.268 [DEBUG] [Thread-13031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:15:52.268 [INFO] [Thread-13031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:15:52.277 [DEBUG] [Thread-13031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:15:52.278 [DEBUG] [Thread-13031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:15:52.278 [DEBUG] [Thread-13031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:15:52.278 [DEBUG] [Thread-13031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:52.278 [DEBUG] [Thread-13031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] client lang: <none>
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] server lang: <none>
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] kex follows: False
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] Compression: none
2025-12-25T14:15:52.279 [DEBUG] [Thread-13031] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:15:52.336 [DEBUG] [Thread-13031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:15:52.337 [DEBUG] [Thread-13031] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:15:52.338 [DEBUG] [Thread-13031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:15:52.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:15:52.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:15:52.394 [DEBUG] [Thread-13031] [transport.py] [_log()] userauth is OK
2025-12-25T14:15:52.395 [DEBUG] [Thread-13031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:15:52.395 [DEBUG] [Thread-13031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:15:52.395 [DEBUG] [Thread-13031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:15:52.395 [DEBUG] [Thread-13031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:15:52.418 [INFO] [Thread-13031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:15:52.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-25T14:15:52.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:15:52.434 [DEBUG] [Thread-13033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:15:53.271 [DEBUG] [Thread-13031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:15:53.272 [DEBUG] [Thread-13031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:15:53.323 [DEBUG] [Thread-13031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:15:53.323 [DEBUG] [Thread-13031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:15:53.337 [DEBUG] [Thread-13031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:15:53.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:15:53.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:15:53.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-25T14:15:53.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:15:53.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:15:53.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:15:53.389 [DEBUG] [Thread-13031] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:16:07.067 [DEBUG] [Thread-13034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:07.482 [DEBUG] [Thread-13035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:22.516 [DEBUG] [Thread-13036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:16:23.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:16:23.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-25T14:16:24.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 16, 11), 27.87, 15.88, 0.0, 32.27, 26.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:16:24.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:16:11
2025-12-25T14:16:24.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:16:24.355 [DEBUG] [Thread-13037] [transport.py] [_log()] starting thread (client mode): 0xb95b3fd0
2025-12-25T14:16:24.355 [DEBUG] [Thread-13037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:16:24.375 [DEBUG] [Thread-13037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:16:24.375 [INFO] [Thread-13037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:16:24.378 [DEBUG] [Thread-13037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] client lang: <none>
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] server lang: <none>
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] kex follows: False
2025-12-25T14:16:24.379 [DEBUG] [Thread-13037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:16:24.380 [DEBUG] [Thread-13037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:16:24.380 [DEBUG] [Thread-13037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:16:24.380 [DEBUG] [Thread-13037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:16:24.380 [DEBUG] [Thread-13037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:16:24.380 [DEBUG] [Thread-13037] [transport.py] [_log()] Compression: none
2025-12-25T14:16:24.380 [DEBUG] [Thread-13037] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:16:24.397 [DEBUG] [Thread-13037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:16:24.398 [DEBUG] [Thread-13037] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:16:24.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:16:24.399 [DEBUG] [Thread-13037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:16:24.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:16:24.440 [DEBUG] [Thread-13037] [transport.py] [_log()] userauth is OK
2025-12-25T14:16:24.441 [DEBUG] [Thread-13037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:16:24.441 [DEBUG] [Thread-13037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:16:24.441 [DEBUG] [Thread-13037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:16:24.441 [DEBUG] [Thread-13037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:16:24.476 [INFO] [Thread-13037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:16:24.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:16:25.093 [DEBUG] [Thread-13037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:16:25.093 [DEBUG] [Thread-13037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:16:25.093 [DEBUG] [Thread-13037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:16:25.134 [DEBUG] [Thread-13037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:16:25.134 [DEBUG] [Thread-13037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:16:25.137 [DEBUG] [Thread-13037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:16:25.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:16:25.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:16:25.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:16:25.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:16:25.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:16:25.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:16:25.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.511173 -999.00  +25.00  28.22     22   +2.00 1 1 1 1 1   888    0 22.61 -29.95 ----- 26.0 28.2 311.2 48.2 31.3 -26.9 30.9 -27.8 31.1 -24.1 31.7 -25.2
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.511173
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:16:25.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:16:11', tmtdew=27.87, humidity=15.88, cloud=0.0, wind=32.27, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:16:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:16:25.153 [DEBUG] [Thread-13037] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:16:25.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-25T14:16:25.238 [DEBUG] [Thread-13040] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T14:16:25.238 [DEBUG] [Thread-13040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:16:25.252 [DEBUG] [Thread-13040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:16:25.252 [INFO] [Thread-13040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] client lang: <none>
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] server lang: <none>
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] kex follows: False
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] Compression: none
2025-12-25T14:16:25.260 [DEBUG] [Thread-13040] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:16:25.321 [DEBUG] [Thread-13040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:16:25.321 [DEBUG] [Thread-13040] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:16:25.321 [DEBUG] [Thread-13040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:16:25.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:16:25.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:16:25.378 [DEBUG] [Thread-13040] [transport.py] [_log()] userauth is OK
2025-12-25T14:16:25.378 [DEBUG] [Thread-13040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:16:25.378 [DEBUG] [Thread-13040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:16:25.378 [DEBUG] [Thread-13040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:16:25.378 [DEBUG] [Thread-13040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:16:25.392 [INFO] [Thread-13040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:16:25.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-25T14:16:25.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:16:26.226 [DEBUG] [Thread-13040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:16:26.226 [DEBUG] [Thread-13040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:16:26.274 [DEBUG] [Thread-13040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:16:26.275 [DEBUG] [Thread-13040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:16:26.283 [DEBUG] [Thread-13040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:16:26.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:16:26.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-25T14:16:26.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-25T14:16:26.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:16:26.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:16:26.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:16:26.318 [DEBUG] [Thread-13040] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:16:35.020 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:35.022 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:37.553 [DEBUG] [Thread-13042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:52.605 [DEBUG] [Thread-13043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:16:56.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:16:56.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:16:56.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-25T14:16:57.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 16, 43), 28.54, 15.43, 0.0, 23.22, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:16:57.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:16:43
2025-12-25T14:16:57.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:16:57.304 [DEBUG] [Thread-13044] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T14:16:57.305 [DEBUG] [Thread-13044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:16:57.325 [DEBUG] [Thread-13044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:16:57.325 [INFO] [Thread-13044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:16:57.328 [DEBUG] [Thread-13044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] client lang: <none>
2025-12-25T14:16:57.329 [DEBUG] [Thread-13044] [transport.py] [_log()] server lang: <none>
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] kex follows: False
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] Compression: none
2025-12-25T14:16:57.330 [DEBUG] [Thread-13044] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:16:57.348 [DEBUG] [Thread-13044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:16:57.349 [DEBUG] [Thread-13044] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:16:57.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:16:57.351 [DEBUG] [Thread-13044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:16:57.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:16:57.353 [DEBUG] [Thread-13044] [transport.py] [_log()] userauth is OK
2025-12-25T14:16:57.353 [DEBUG] [Thread-13044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:16:57.354 [DEBUG] [Thread-13044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:16:57.354 [DEBUG] [Thread-13044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:16:57.354 [DEBUG] [Thread-13044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:16:57.379 [INFO] [Thread-13044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:16:57.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:16:57.996 [DEBUG] [Thread-13044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:16:57.997 [DEBUG] [Thread-13044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:16:57.997 [DEBUG] [Thread-13044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:16:58.037 [DEBUG] [Thread-13044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:16:58.037 [DEBUG] [Thread-13044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:16:58.041 [DEBUG] [Thread-13044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:16:58.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:16:58.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:16:58.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:16:58.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:16:58.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:16:58.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:16:58.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:16:58.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:16:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:16:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.511520 -999.00  +24.80  25.70     22   +1.80 1 1 1 1 1   888    0 23.11 -32.21 ----- 24.3 25.7 333.8 31.4 31.3 -26.4 30.9 -26.4 31.1 -24.0 31.7 -24.3
2025-12-25T14:16:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:16:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:16:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.511520
2025-12-25T14:16:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:16:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:16:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:16:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:16:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:16:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:16:43', tmtdew=28.54, humidity=15.43, cloud=0.0, wind=23.22, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:16:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:16:58.068 [DEBUG] [Thread-13044] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:16:58.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:16:58.167 [DEBUG] [Thread-13047] [transport.py] [_log()] starting thread (client mode): 0xb95b2680
2025-12-25T14:16:58.167 [DEBUG] [Thread-13047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:16:58.182 [DEBUG] [Thread-13047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:16:58.182 [INFO] [Thread-13047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] client lang: <none>
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] server lang: <none>
2025-12-25T14:16:58.190 [DEBUG] [Thread-13047] [transport.py] [_log()] kex follows: False
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] Compression: none
2025-12-25T14:16:58.191 [DEBUG] [Thread-13047] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:16:58.250 [DEBUG] [Thread-13047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:16:58.251 [DEBUG] [Thread-13047] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:16:58.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:16:58.252 [DEBUG] [Thread-13047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:16:58.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:16:58.307 [DEBUG] [Thread-13047] [transport.py] [_log()] userauth is OK
2025-12-25T14:16:58.307 [DEBUG] [Thread-13047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:16:58.307 [DEBUG] [Thread-13047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:16:58.307 [DEBUG] [Thread-13047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:16:58.307 [DEBUG] [Thread-13047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:16:58.326 [INFO] [Thread-13047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:16:58.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-25T14:16:58.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:16:59.144 [DEBUG] [Thread-13047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:16:59.145 [DEBUG] [Thread-13047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:16:59.192 [DEBUG] [Thread-13047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:16:59.193 [DEBUG] [Thread-13047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:16:59.201 [DEBUG] [Thread-13047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:16:59.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:16:59.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-25T14:16:59.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-25T14:16:59.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:16:59.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:16:59.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:16:59.235 [DEBUG] [Thread-13047] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:17:07.111 [DEBUG] [Thread-13049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:17:07.636 [DEBUG] [Thread-13050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:17:22.678 [DEBUG] [Thread-13051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:17:29.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:17:29.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:17:29.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-25T14:17:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 17, 15), 27.86, 16.08, 0.0, 23.61, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:17:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:17:15
2025-12-25T14:17:30.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:17:30.186 [DEBUG] [Thread-13052] [transport.py] [_log()] starting thread (client mode): 0xb9559a20
2025-12-25T14:17:30.187 [DEBUG] [Thread-13052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:17:30.207 [DEBUG] [Thread-13052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:17:30.207 [INFO] [Thread-13052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] client lang: <none>
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] server lang: <none>
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] kex follows: False
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] Compression: none
2025-12-25T14:17:30.210 [DEBUG] [Thread-13052] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:17:30.218 [DEBUG] [Thread-13052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:17:30.219 [DEBUG] [Thread-13052] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:17:30.219 [DEBUG] [Thread-13052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:17:30.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:17:30.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:17:30.220 [DEBUG] [Thread-13052] [transport.py] [_log()] userauth is OK
2025-12-25T14:17:30.220 [DEBUG] [Thread-13052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:17:30.220 [DEBUG] [Thread-13052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:17:30.220 [DEBUG] [Thread-13052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:17:30.220 [DEBUG] [Thread-13052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:17:30.233 [INFO] [Thread-13052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:17:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:17:30.871 [DEBUG] [Thread-13052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:17:30.871 [DEBUG] [Thread-13052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:17:30.871 [DEBUG] [Thread-13052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:17:30.912 [DEBUG] [Thread-13052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:17:30.912 [DEBUG] [Thread-13052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:17:30.920 [DEBUG] [Thread-13052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:17:30.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:17:30.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:17:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:17:30.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:17:30.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:17:30.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:17:30.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:17:30.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:17:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:17:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.511867 -999.00  +25.00  22.76     22   +2.30 1 1 1 1 1   888    0 22.52 -38.99 ----- 14.8 22.8 307.2 36.1 31.3 -26.4 30.7 -25.1 31.1 -22.5 31.7 -24.2
2025-12-25T14:17:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:17:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:17:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.511867
2025-12-25T14:17:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:17:30.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:17:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:17:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:17:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:17:30.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:17:15', tmtdew=27.86, humidity=16.08, cloud=0.0, wind=23.61, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:17:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:17:30.939 [DEBUG] [Thread-13052] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:17:31.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-25T14:17:31.032 [DEBUG] [Thread-13055] [transport.py] [_log()] starting thread (client mode): 0xb6b2aaa0
2025-12-25T14:17:31.032 [DEBUG] [Thread-13055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:17:31.047 [DEBUG] [Thread-13055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:17:31.047 [INFO] [Thread-13055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:17:31.055 [DEBUG] [Thread-13055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] client lang: <none>
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] server lang: <none>
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] kex follows: False
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:17:31.056 [DEBUG] [Thread-13055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:17:31.057 [DEBUG] [Thread-13055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:17:31.057 [DEBUG] [Thread-13055] [transport.py] [_log()] Compression: none
2025-12-25T14:17:31.057 [DEBUG] [Thread-13055] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:17:31.115 [DEBUG] [Thread-13055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:17:31.115 [DEBUG] [Thread-13055] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:17:31.116 [DEBUG] [Thread-13055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:17:31.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:17:31.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:17:31.171 [DEBUG] [Thread-13055] [transport.py] [_log()] userauth is OK
2025-12-25T14:17:31.171 [DEBUG] [Thread-13055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:17:31.171 [DEBUG] [Thread-13055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:17:31.171 [DEBUG] [Thread-13055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:17:31.171 [DEBUG] [Thread-13055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:17:31.190 [INFO] [Thread-13055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:17:31.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:17:31.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:17:32.040 [DEBUG] [Thread-13055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:17:32.040 [DEBUG] [Thread-13055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:17:32.088 [DEBUG] [Thread-13055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:17:32.089 [DEBUG] [Thread-13055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:17:32.098 [DEBUG] [Thread-13055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:17:32.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:17:32.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-25T14:17:32.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-25T14:17:32.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:17:32.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:17:32.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:17:32.135 [DEBUG] [Thread-13055] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:17:35.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:17:35.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:17:37.716 [DEBUG] [Thread-13057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:17:52.766 [DEBUG] [Thread-13058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:02.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:18:02.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:18:02.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:18:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 17, 47), 27.25, 16.36, 0.0, 26.59, 25.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:18:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:17:47
2025-12-25T14:18:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:18:03.114 [DEBUG] [Thread-13059] [transport.py] [_log()] starting thread (client mode): 0xb9546bc0
2025-12-25T14:18:03.115 [DEBUG] [Thread-13059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:18:03.136 [DEBUG] [Thread-13059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:18:03.136 [INFO] [Thread-13059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] client lang: <none>
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] server lang: <none>
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] kex follows: False
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] Compression: none
2025-12-25T14:18:03.139 [DEBUG] [Thread-13059] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:18:03.155 [DEBUG] [Thread-13059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:18:03.155 [DEBUG] [Thread-13059] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:18:03.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:18:03.156 [DEBUG] [Thread-13059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:18:03.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:18:03.158 [DEBUG] [Thread-13059] [transport.py] [_log()] userauth is OK
2025-12-25T14:18:03.158 [DEBUG] [Thread-13059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:18:03.158 [DEBUG] [Thread-13059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:18:03.159 [DEBUG] [Thread-13059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:18:03.159 [DEBUG] [Thread-13059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:18:03.182 [INFO] [Thread-13059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:18:03.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:18:03.803 [DEBUG] [Thread-13059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:18:03.804 [DEBUG] [Thread-13059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:18:03.805 [DEBUG] [Thread-13059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:18:03.845 [DEBUG] [Thread-13059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:18:03.845 [DEBUG] [Thread-13059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:18:03.849 [DEBUG] [Thread-13059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:18:03.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:18:03.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:18:03.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:18:03.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:18:03.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:18:03.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:18:03.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:18:03.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:18:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:18:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.512214 -999.00  +25.30  34.15     23   +2.80 1 1 2 1 1   888    0 22.36 -43.86 ----- 28.6 34.1 324.0 43.1 31.2 -26.3 30.9 -25.7 31.0 -23.5 31.6 -24.5
2025-12-25T14:18:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:18:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:18:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.512214
2025-12-25T14:18:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:18:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:18:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:18:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:18:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:18:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:17:47', tmtdew=27.25, humidity=16.36, cloud=0.0, wind=26.59, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:17:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:18:03.877 [DEBUG] [Thread-13059] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:18:03.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-25T14:18:03.970 [DEBUG] [Thread-13062] [transport.py] [_log()] starting thread (client mode): 0xb95b1750
2025-12-25T14:18:03.970 [DEBUG] [Thread-13062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:18:03.984 [DEBUG] [Thread-13062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:18:03.984 [INFO] [Thread-13062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:18:03.992 [DEBUG] [Thread-13062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:18:03.992 [DEBUG] [Thread-13062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:18:03.992 [DEBUG] [Thread-13062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:18:03.992 [DEBUG] [Thread-13062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:03.992 [DEBUG] [Thread-13062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:03.992 [DEBUG] [Thread-13062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] client lang: <none>
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] server lang: <none>
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] kex follows: False
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:18:03.993 [DEBUG] [Thread-13062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:18:03.994 [DEBUG] [Thread-13062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:18:03.994 [DEBUG] [Thread-13062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:18:03.994 [DEBUG] [Thread-13062] [transport.py] [_log()] Compression: none
2025-12-25T14:18:03.994 [DEBUG] [Thread-13062] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:18:04.050 [DEBUG] [Thread-13062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:18:04.051 [DEBUG] [Thread-13062] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:18:04.051 [DEBUG] [Thread-13062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:18:04.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:18:04.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:18:04.106 [DEBUG] [Thread-13062] [transport.py] [_log()] userauth is OK
2025-12-25T14:18:04.107 [DEBUG] [Thread-13062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:18:04.107 [DEBUG] [Thread-13062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:18:04.107 [DEBUG] [Thread-13062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:18:04.107 [DEBUG] [Thread-13062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:18:04.126 [INFO] [Thread-13062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:18:04.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-25T14:18:04.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:18:04.953 [DEBUG] [Thread-13062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:18:04.953 [DEBUG] [Thread-13062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:18:05.004 [DEBUG] [Thread-13062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:18:05.004 [DEBUG] [Thread-13062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:18:05.016 [DEBUG] [Thread-13062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:18:05.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:18:05.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:18:05.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-25T14:18:05.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:18:05.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:18:05.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:18:05.056 [DEBUG] [Thread-13062] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:18:07.174 [DEBUG] [Thread-13064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:07.800 [DEBUG] [Thread-13065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:22.855 [DEBUG] [Thread-13066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:18:35.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:18:35.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:18:35.334 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:35.335 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 18, 19), 27.03, 16.61, 0.0, 30.23, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:18:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:18:19
2025-12-25T14:18:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:18:36.014 [DEBUG] [Thread-13067] [transport.py] [_log()] starting thread (client mode): 0xb9591990
2025-12-25T14:18:36.014 [DEBUG] [Thread-13067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:18:36.036 [DEBUG] [Thread-13067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:18:36.036 [INFO] [Thread-13067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] client lang: <none>
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] server lang: <none>
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] kex follows: False
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:18:36.037 [DEBUG] [Thread-13067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:18:36.038 [DEBUG] [Thread-13067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:18:36.038 [DEBUG] [Thread-13067] [transport.py] [_log()] Compression: none
2025-12-25T14:18:36.038 [DEBUG] [Thread-13067] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:18:36.055 [DEBUG] [Thread-13067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:18:36.056 [DEBUG] [Thread-13067] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:18:36.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:18:36.057 [DEBUG] [Thread-13067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:18:36.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:18:36.059 [DEBUG] [Thread-13067] [transport.py] [_log()] userauth is OK
2025-12-25T14:18:36.059 [DEBUG] [Thread-13067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:18:36.059 [DEBUG] [Thread-13067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:18:36.059 [DEBUG] [Thread-13067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:18:36.059 [DEBUG] [Thread-13067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:18:36.078 [INFO] [Thread-13067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:18:36.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:18:36.736 [DEBUG] [Thread-13067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:18:36.737 [DEBUG] [Thread-13067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:18:36.737 [DEBUG] [Thread-13067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:18:36.778 [DEBUG] [Thread-13067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:18:36.778 [DEBUG] [Thread-13067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:18:36.782 [DEBUG] [Thread-13067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:18:36.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:18:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:18:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:18:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:18:36.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:18:36.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:18:36.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:18:36.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:18:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:18:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.512562 -999.00  +25.20  24.71     22   +2.40 1 1 1 1 1   888    0 22.47 -45.04 ----- 25.9 24.7 296.9 34.1 31.1 -26.9 30.6 -25.8 31.1 -26.3 31.6 -23.2
2025-12-25T14:18:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:18:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:18:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.512562
2025-12-25T14:18:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:18:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:18:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:18:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:18:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:18:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:18:19', tmtdew=27.03, humidity=16.61, cloud=0.0, wind=30.23, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:18:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:18:36.808 [DEBUG] [Thread-13067] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:18:36.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-25T14:18:36.908 [DEBUG] [Thread-13070] [transport.py] [_log()] starting thread (client mode): 0xb95b30a0
2025-12-25T14:18:36.909 [DEBUG] [Thread-13070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:18:36.923 [DEBUG] [Thread-13070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:18:36.924 [INFO] [Thread-13070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] client lang: <none>
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] server lang: <none>
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] kex follows: False
2025-12-25T14:18:36.931 [DEBUG] [Thread-13070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:18:36.932 [DEBUG] [Thread-13070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:18:36.932 [DEBUG] [Thread-13070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:18:36.932 [DEBUG] [Thread-13070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:18:36.932 [DEBUG] [Thread-13070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:18:36.932 [DEBUG] [Thread-13070] [transport.py] [_log()] Compression: none
2025-12-25T14:18:36.932 [DEBUG] [Thread-13070] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:18:36.990 [DEBUG] [Thread-13070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:18:36.991 [DEBUG] [Thread-13070] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:18:36.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:18:36.992 [DEBUG] [Thread-13070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:18:36.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:18:37.047 [DEBUG] [Thread-13070] [transport.py] [_log()] userauth is OK
2025-12-25T14:18:37.047 [DEBUG] [Thread-13070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:18:37.047 [DEBUG] [Thread-13070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:18:37.047 [DEBUG] [Thread-13070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:18:37.047 [DEBUG] [Thread-13070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:18:37.065 [INFO] [Thread-13070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:18:37.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-25T14:18:37.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:18:37.892 [DEBUG] [Thread-13072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:18:37.958 [DEBUG] [Thread-13070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:18:37.959 [DEBUG] [Thread-13070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:18:38.007 [DEBUG] [Thread-13070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:18:38.007 [DEBUG] [Thread-13070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:18:38.016 [DEBUG] [Thread-13070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:18:38.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:18:38.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-25T14:18:38.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-25T14:18:38.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:18:38.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:18:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:18:38.053 [DEBUG] [Thread-13070] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:18:52.940 [DEBUG] [Thread-13073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:07.231 [DEBUG] [Thread-13074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:07.970 [DEBUG] [Thread-13075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:08.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:19:08.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:19:08.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-25T14:19:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 18, 52), 27.11, 16.88, 0.0, 29.29, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:19:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:18:52
2025-12-25T14:19:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:19:09.021 [DEBUG] [Thread-13076] [transport.py] [_log()] starting thread (client mode): 0xb9591ea0
2025-12-25T14:19:09.021 [DEBUG] [Thread-13076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:19:09.041 [DEBUG] [Thread-13076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:19:09.041 [INFO] [Thread-13076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] client lang: <none>
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] server lang: <none>
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] kex follows: False
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] Compression: none
2025-12-25T14:19:09.045 [DEBUG] [Thread-13076] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:19:09.063 [DEBUG] [Thread-13076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:19:09.063 [DEBUG] [Thread-13076] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:19:09.064 [DEBUG] [Thread-13076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:19:09.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:19:09.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:19:09.065 [DEBUG] [Thread-13076] [transport.py] [_log()] userauth is OK
2025-12-25T14:19:09.066 [DEBUG] [Thread-13076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:19:09.066 [DEBUG] [Thread-13076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:19:09.066 [DEBUG] [Thread-13076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:19:09.066 [DEBUG] [Thread-13076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:19:09.087 [INFO] [Thread-13076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:19:09.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:19:09.708 [DEBUG] [Thread-13076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:19:09.708 [DEBUG] [Thread-13076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:19:09.709 [DEBUG] [Thread-13076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:19:09.749 [DEBUG] [Thread-13076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:19:09.749 [DEBUG] [Thread-13076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:19:09.753 [DEBUG] [Thread-13076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:19:09.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:19:09.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:19:09.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:19:09.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:19:09.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:19:09.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:19:09.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:19:09.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:19:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:19:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.512909 -999.00  +25.50  25.65     22   +2.50 1 1 1 1 1   888    0 21.79 -54.62 ----- 32.5 25.6 295.6 28.1 31.2 -25.5 30.8 -25.6 31.1 -23.7 31.7 -23.5
2025-12-25T14:19:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:19:09.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:19:09.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.512909
2025-12-25T14:19:09.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:19:09.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:19:09.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:19:09.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:19:09.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:19:09.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:18:52', tmtdew=27.11, humidity=16.88, cloud=0.0, wind=29.29, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:18:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:19:09.778 [DEBUG] [Thread-13076] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:19:09.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-25T14:19:09.869 [DEBUG] [Thread-13079] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T14:19:09.869 [DEBUG] [Thread-13079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:19:09.887 [DEBUG] [Thread-13079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:19:09.888 [INFO] [Thread-13079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:19:09.897 [DEBUG] [Thread-13079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:19:09.898 [DEBUG] [Thread-13079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:19:09.898 [DEBUG] [Thread-13079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:19:09.898 [DEBUG] [Thread-13079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:09.898 [DEBUG] [Thread-13079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:09.898 [DEBUG] [Thread-13079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:09.898 [DEBUG] [Thread-13079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] client lang: <none>
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] server lang: <none>
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] kex follows: False
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] Compression: none
2025-12-25T14:19:09.899 [DEBUG] [Thread-13079] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:19:09.954 [DEBUG] [Thread-13079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:19:09.955 [DEBUG] [Thread-13079] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:19:09.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:19:09.956 [DEBUG] [Thread-13079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:19:09.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:19:10.011 [DEBUG] [Thread-13079] [transport.py] [_log()] userauth is OK
2025-12-25T14:19:10.011 [DEBUG] [Thread-13079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:19:10.011 [DEBUG] [Thread-13079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:19:10.011 [DEBUG] [Thread-13079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:19:10.011 [DEBUG] [Thread-13079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:19:10.030 [INFO] [Thread-13079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:19:10.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:19:10.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:19:10.877 [DEBUG] [Thread-13079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:19:10.877 [DEBUG] [Thread-13079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:19:10.925 [DEBUG] [Thread-13079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:19:10.925 [DEBUG] [Thread-13079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:19:10.934 [DEBUG] [Thread-13079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:19:10.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:19:10.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:19:10.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-25T14:19:10.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:19:10.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:19:10.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:19:10.969 [DEBUG] [Thread-13079] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:19:23.008 [DEBUG] [Thread-13081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:35.474 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:35.475 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:38.067 [DEBUG] [Thread-13082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:19:40.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:19:40.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:19:40.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-25T14:19:41.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 19, 24), 27.41, 16.6, 0.0, 27.88, 25.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:19:41.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:19:24
2025-12-25T14:19:41.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:19:41.991 [DEBUG] [Thread-13083] [transport.py] [_log()] starting thread (client mode): 0xb95b30a0
2025-12-25T14:19:41.991 [DEBUG] [Thread-13083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:19:42.012 [DEBUG] [Thread-13083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:19:42.012 [INFO] [Thread-13083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] client lang: <none>
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] server lang: <none>
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] kex follows: False
2025-12-25T14:19:42.015 [DEBUG] [Thread-13083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:19:42.016 [DEBUG] [Thread-13083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:19:42.016 [DEBUG] [Thread-13083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:19:42.016 [DEBUG] [Thread-13083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:19:42.016 [DEBUG] [Thread-13083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:19:42.016 [DEBUG] [Thread-13083] [transport.py] [_log()] Compression: none
2025-12-25T14:19:42.016 [DEBUG] [Thread-13083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:19:42.031 [DEBUG] [Thread-13083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:19:42.031 [DEBUG] [Thread-13083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:19:42.031 [DEBUG] [Thread-13083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:19:42.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:19:42.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:19:42.032 [DEBUG] [Thread-13083] [transport.py] [_log()] userauth is OK
2025-12-25T14:19:42.032 [DEBUG] [Thread-13083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:19:42.032 [DEBUG] [Thread-13083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:19:42.032 [DEBUG] [Thread-13083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:19:42.032 [DEBUG] [Thread-13083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:19:42.042 [INFO] [Thread-13083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:19:42.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:19:42.676 [DEBUG] [Thread-13083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:19:42.676 [DEBUG] [Thread-13083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:19:42.676 [DEBUG] [Thread-13083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:19:42.717 [DEBUG] [Thread-13083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:19:42.718 [DEBUG] [Thread-13083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:19:42.720 [DEBUG] [Thread-13083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:19:42.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:19:42.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:19:42.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:19:42.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:19:42.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:19:42.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:19:42.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:19:42.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:19:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:19:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.513256 -999.00  +25.40  24.37     22   +2.50 1 1 1 1 1   888    0 21.80 -51.65 ----- 13.7 24.4 298.4 39.1 31.1 -26.8 30.8 -26.7 31.2 -22.6 31.6 -24.8
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.513256
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:19:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:19:24', tmtdew=27.41, humidity=16.6, cloud=0.0, wind=27.88, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:19:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:19:42.739 [DEBUG] [Thread-13083] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:19:42.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-25T14:19:42.822 [DEBUG] [Thread-13086] [transport.py] [_log()] starting thread (client mode): 0xb9590d00
2025-12-25T14:19:42.822 [DEBUG] [Thread-13086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:19:42.837 [DEBUG] [Thread-13086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:19:42.837 [INFO] [Thread-13086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] client lang: <none>
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] server lang: <none>
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] kex follows: False
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] Compression: none
2025-12-25T14:19:42.845 [DEBUG] [Thread-13086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:19:42.900 [DEBUG] [Thread-13086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:19:42.901 [DEBUG] [Thread-13086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:19:42.901 [DEBUG] [Thread-13086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:19:42.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:19:42.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:19:42.958 [DEBUG] [Thread-13086] [transport.py] [_log()] userauth is OK
2025-12-25T14:19:42.958 [DEBUG] [Thread-13086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:19:42.958 [DEBUG] [Thread-13086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:19:42.958 [DEBUG] [Thread-13086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:19:42.958 [DEBUG] [Thread-13086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:19:42.972 [INFO] [Thread-13086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:19:42.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-25T14:19:42.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:19:43.813 [DEBUG] [Thread-13086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:19:43.813 [DEBUG] [Thread-13086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:19:43.863 [DEBUG] [Thread-13086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:19:43.863 [DEBUG] [Thread-13086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:19:43.871 [DEBUG] [Thread-13086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:19:43.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:19:43.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-25T14:19:43.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-25T14:19:43.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:19:43.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:19:43.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:19:43.903 [DEBUG] [Thread-13086] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:19:53.104 [DEBUG] [Thread-13088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:07.280 [DEBUG] [Thread-13089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:08.156 [DEBUG] [Thread-13090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:13.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:20:13.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:20:13.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:20:14.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 19, 56), 27.04, 16.79, 0.0, 18.65, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:20:14.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:19:56
2025-12-25T14:20:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:20:14.910 [DEBUG] [Thread-13091] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-25T14:20:14.910 [DEBUG] [Thread-13091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:20:14.931 [DEBUG] [Thread-13091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:20:14.931 [INFO] [Thread-13091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:20:14.934 [DEBUG] [Thread-13091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:20:14.934 [DEBUG] [Thread-13091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] client lang: <none>
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] server lang: <none>
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] kex follows: False
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] Compression: none
2025-12-25T14:20:14.935 [DEBUG] [Thread-13091] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:20:14.951 [DEBUG] [Thread-13091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:20:14.952 [DEBUG] [Thread-13091] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:20:14.952 [DEBUG] [Thread-13091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:20:14.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:20:14.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:20:14.954 [DEBUG] [Thread-13091] [transport.py] [_log()] userauth is OK
2025-12-25T14:20:14.954 [DEBUG] [Thread-13091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:20:14.954 [DEBUG] [Thread-13091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:20:14.954 [DEBUG] [Thread-13091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:20:14.954 [DEBUG] [Thread-13091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:20:14.968 [INFO] [Thread-13091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:20:14.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:20:15.601 [DEBUG] [Thread-13091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:20:15.601 [DEBUG] [Thread-13091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:20:15.601 [DEBUG] [Thread-13091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:20:15.644 [DEBUG] [Thread-13091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:20:15.644 [DEBUG] [Thread-13091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:20:15.646 [DEBUG] [Thread-13091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:20:15.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:20:15.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:20:15.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:20:15.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:20:15.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:20:15.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:20:15.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:20:15.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:20:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:20:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.513950 -999.00  +25.00  20.58     22   +2.10 1 1 1 1 1   888    0 21.99 -61.77 ----- 18.3 20.6 290.8 30.0 31.3 -26.2 30.9 -26.1 30.9 -28.1 31.8 -24.6
2025-12-25T14:20:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:20:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:20:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.513950
2025-12-25T14:20:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:20:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:20:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:20:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:20:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:20:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:19:56', tmtdew=27.04, humidity=16.79, cloud=0.0, wind=18.65, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:20:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:20:15.669 [DEBUG] [Thread-13091] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:20: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-25T14:20:15.767 [DEBUG] [Thread-13094] [transport.py] [_log()] starting thread (client mode): 0xb95b1420
2025-12-25T14:20:15.767 [DEBUG] [Thread-13094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:20:15.782 [DEBUG] [Thread-13094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:20:15.782 [INFO] [Thread-13094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] client lang: <none>
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] server lang: <none>
2025-12-25T14:20:15.790 [DEBUG] [Thread-13094] [transport.py] [_log()] kex follows: False
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] Compression: none
2025-12-25T14:20:15.791 [DEBUG] [Thread-13094] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:20:15.849 [DEBUG] [Thread-13094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:20:15.850 [DEBUG] [Thread-13094] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:20:15.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:20:15.851 [DEBUG] [Thread-13094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:20:15.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:20:15.906 [DEBUG] [Thread-13094] [transport.py] [_log()] userauth is OK
2025-12-25T14:20:15.906 [DEBUG] [Thread-13094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:20:15.906 [DEBUG] [Thread-13094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:20:15.906 [DEBUG] [Thread-13094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:20:15.906 [DEBUG] [Thread-13094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:20:15.920 [INFO] [Thread-13094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:20:15.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:20:15.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:20:16.795 [DEBUG] [Thread-13094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:20:16.795 [DEBUG] [Thread-13094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:20:16.842 [DEBUG] [Thread-13094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:20:16.843 [DEBUG] [Thread-13094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:20:16.851 [DEBUG] [Thread-13094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:20:16.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:20:16.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-25T14:20:16.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-25T14:20:16.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:20:16.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:20:16.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:20:16.885 [DEBUG] [Thread-13094] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:20:23.185 [DEBUG] [Thread-13096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:35.632 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:35.633 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:38.226 [DEBUG] [Thread-13097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:20:46.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:20:46.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:20:46.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-25T14:20:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 20, 28), 26.99, 16.79, 0.0, 18.23, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:20:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:20:28
2025-12-25T14:20:47.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:20:47.865 [DEBUG] [Thread-13098] [transport.py] [_log()] starting thread (client mode): 0xb95913c0
2025-12-25T14:20:47.865 [DEBUG] [Thread-13098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:20:47.885 [DEBUG] [Thread-13098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:20:47.885 [INFO] [Thread-13098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] client lang: <none>
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] server lang: <none>
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] kex follows: False
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] Compression: none
2025-12-25T14:20:47.889 [DEBUG] [Thread-13098] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:20:47.906 [DEBUG] [Thread-13098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:20:47.906 [DEBUG] [Thread-13098] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:20:47.906 [DEBUG] [Thread-13098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:20:47.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:20:47.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:20:47.908 [DEBUG] [Thread-13098] [transport.py] [_log()] userauth is OK
2025-12-25T14:20:47.908 [DEBUG] [Thread-13098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:20:47.909 [DEBUG] [Thread-13098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:20:47.909 [DEBUG] [Thread-13098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:20:47.909 [DEBUG] [Thread-13098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:20:47.933 [INFO] [Thread-13098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:20:47.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:20:48.567 [DEBUG] [Thread-13098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:20:48.568 [DEBUG] [Thread-13098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:20:48.568 [DEBUG] [Thread-13098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:20:48.608 [DEBUG] [Thread-13098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:20:48.608 [DEBUG] [Thread-13098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:20:48.611 [DEBUG] [Thread-13098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:20:48.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:20:48.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:20:48.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:20:48.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:20:48.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:20:48.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:20:48.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.514298 -999.00  +25.40  26.45     22   +2.20 1 1 1 1 1   888    0 22.27 -65.29 ----- 34.4 26.4 292.8 34.1 31.2 -26.8 30.9 -25.7 30.8 -23.5 31.7 -24.9
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.514298
2025-12-25T14:20:48.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:20:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:20:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:20:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:20:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:20:48.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:20:28', tmtdew=26.99, humidity=16.79, cloud=0.0, wind=18.23, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:20:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:20:48.632 [DEBUG] [Thread-13098] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:20:48.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-25T14:20:48.743 [DEBUG] [Thread-13101] [transport.py] [_log()] starting thread (client mode): 0xb6b20490
2025-12-25T14:20:48.743 [DEBUG] [Thread-13101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:20:48.759 [DEBUG] [Thread-13101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:20:48.759 [INFO] [Thread-13101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:20:48.770 [DEBUG] [Thread-13101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:20:48.771 [DEBUG] [Thread-13101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] client lang: <none>
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] server lang: <none>
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] kex follows: False
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] Compression: none
2025-12-25T14:20:48.772 [DEBUG] [Thread-13101] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:20:48.826 [DEBUG] [Thread-13101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:20:48.827 [DEBUG] [Thread-13101] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:20:48.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:20:48.837 [DEBUG] [Thread-13101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:20:48.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:20:48.882 [DEBUG] [Thread-13101] [transport.py] [_log()] userauth is OK
2025-12-25T14:20:48.883 [DEBUG] [Thread-13101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:20:48.883 [DEBUG] [Thread-13101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:20:48.883 [DEBUG] [Thread-13101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:20:48.883 [DEBUG] [Thread-13101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:20:48.902 [INFO] [Thread-13101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:20:48.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:20:48.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:20:49.750 [DEBUG] [Thread-13101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:20:49.751 [DEBUG] [Thread-13101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:20:49.798 [DEBUG] [Thread-13101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:20:49.798 [DEBUG] [Thread-13101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:20:49.807 [DEBUG] [Thread-13101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:20:49.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:20:49.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:20:49.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-25T14:20:49.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:20:49.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:20:49.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:20:49.844 [DEBUG] [Thread-13101] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:20:53.262 [DEBUG] [Thread-13103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:07.330 [DEBUG] [Thread-13104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:08.312 [DEBUG] [Thread-13105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:21:19.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:21:19.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:21:20.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 20, 28), 27.44, 16.29, 0.0, 25.43, 25.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:21:20.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:20:28
2025-12-25T14:21:20.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:21:20.812 [DEBUG] [Thread-13106] [transport.py] [_log()] starting thread (client mode): 0xb95907c0
2025-12-25T14:21:20.813 [DEBUG] [Thread-13106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:21:20.833 [DEBUG] [Thread-13106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:21:20.833 [INFO] [Thread-13106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] client lang: <none>
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] server lang: <none>
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] kex follows: False
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] Compression: none
2025-12-25T14:21:20.836 [DEBUG] [Thread-13106] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:21:20.851 [DEBUG] [Thread-13106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:21:20.851 [DEBUG] [Thread-13106] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:21:20.852 [DEBUG] [Thread-13106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:21:20.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:21:20.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:21:20.854 [DEBUG] [Thread-13106] [transport.py] [_log()] userauth is OK
2025-12-25T14:21:20.854 [DEBUG] [Thread-13106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:21:20.854 [DEBUG] [Thread-13106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:21:20.854 [DEBUG] [Thread-13106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:21:20.854 [DEBUG] [Thread-13106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:21:20.877 [INFO] [Thread-13106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:21:20.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:21:21.509 [DEBUG] [Thread-13106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:21:21.509 [DEBUG] [Thread-13106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:21:21.509 [DEBUG] [Thread-13106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:21:21.551 [DEBUG] [Thread-13106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:21:21.551 [DEBUG] [Thread-13106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:21:21.554 [DEBUG] [Thread-13106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:21:21.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:21:21.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:21:21.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:21:21.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:21:21.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:21:21.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:21:21.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:21:21.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:21:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:21:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.514645 -999.00  +26.30  37.75     21   +2.40 1 1 2 1 1   888    0 21.28 -65.04 ----- 34.5 37.8 302.8 47.9 31.2 -25.7 30.8 -25.3 31.1 -23.0 31.8 -24.3
2025-12-25T14:21:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:21:21.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:21:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.514645
2025-12-25T14:21:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:21:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:21:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:21:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:21:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:21:21.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:20:28', tmtdew=27.44, humidity=16.29, cloud=0.0, wind=25.43, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:21:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:21:21.581 [DEBUG] [Thread-13106] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:21:21.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:21:21.674 [DEBUG] [Thread-13109] [transport.py] [_log()] starting thread (client mode): 0xb95d5270
2025-12-25T14:21:21.674 [DEBUG] [Thread-13109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:21:21.690 [DEBUG] [Thread-13109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:21:21.691 [INFO] [Thread-13109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:21.699 [DEBUG] [Thread-13109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] client lang: <none>
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] server lang: <none>
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] kex follows: False
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] Compression: none
2025-12-25T14:21:21.700 [DEBUG] [Thread-13109] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:21:21.757 [DEBUG] [Thread-13109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:21:21.758 [DEBUG] [Thread-13109] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:21:21.758 [DEBUG] [Thread-13109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:21:21.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:21:21.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:21:21.814 [DEBUG] [Thread-13109] [transport.py] [_log()] userauth is OK
2025-12-25T14:21:21.814 [DEBUG] [Thread-13109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:21:21.815 [DEBUG] [Thread-13109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:21:21.815 [DEBUG] [Thread-13109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:21:21.815 [DEBUG] [Thread-13109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:21:21.834 [INFO] [Thread-13109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:21:21.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-25T14:21:21.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:21:22.716 [DEBUG] [Thread-13109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:21:22.716 [DEBUG] [Thread-13109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:21:22.764 [DEBUG] [Thread-13109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:21:22.764 [DEBUG] [Thread-13109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:21:22.774 [DEBUG] [Thread-13109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:21:22.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:21:22.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-25T14:21:22.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-25T14:21:22.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:21:22.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:21:22.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:21:22.809 [DEBUG] [Thread-13109] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:21:23.349 [DEBUG] [Thread-13111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:35.772 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:35.773 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:38.399 [DEBUG] [Thread-13112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:52.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:21:52.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:21:52.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-25T14:21:53.429 [DEBUG] [Thread-13113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:21:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 21, 32), 27.57, 16.18, 0.0, 32.57, 25.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:21:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:21:32
2025-12-25T14:21:53.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:21:53.789 [DEBUG] [Thread-13114] [transport.py] [_log()] starting thread (client mode): 0xb955b700
2025-12-25T14:21:53.789 [DEBUG] [Thread-13114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:21:53.809 [DEBUG] [Thread-13114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:21:53.809 [INFO] [Thread-13114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] client lang: <none>
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] server lang: <none>
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] kex follows: False
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] Compression: none
2025-12-25T14:21:53.813 [DEBUG] [Thread-13114] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:21:53.831 [DEBUG] [Thread-13114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:21:53.831 [DEBUG] [Thread-13114] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:21:53.832 [DEBUG] [Thread-13114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:21:53.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:21:53.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:21:53.834 [DEBUG] [Thread-13114] [transport.py] [_log()] userauth is OK
2025-12-25T14:21:53.834 [DEBUG] [Thread-13114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:21:53.834 [DEBUG] [Thread-13114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:21:53.834 [DEBUG] [Thread-13114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:21:53.835 [DEBUG] [Thread-13114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:21:53.871 [INFO] [Thread-13114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:21:53.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:21:54.527 [DEBUG] [Thread-13114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:21:54.528 [DEBUG] [Thread-13114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:21:54.528 [DEBUG] [Thread-13114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:21:54.569 [DEBUG] [Thread-13114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:21:54.569 [DEBUG] [Thread-13114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:21:54.573 [DEBUG] [Thread-13114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:21:54.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:21:54.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:21:54.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:21:54.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:21:54.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:21:54.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:21:54.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:21:54.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:21:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:21:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.514992 -999.00  +26.20  42.94     21   +2.20 1 1 2 1 1   888    0 21.63 -65.80 ----- 38.5 42.9 309.6 51.0 31.3 -25.4 30.9 -25.7 31.1 -24.5 31.8 -25.2
2025-12-25T14:21:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:21:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:21:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.514992
2025-12-25T14:21:54.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:21:54.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:21:54.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:21:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:21:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:21:54.599 [DEBUG] [Thread-13114] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:21:54.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:21:32', tmtdew=27.57, humidity=16.18, cloud=0.0, wind=32.57, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:21:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:21:54.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-25T14:21:54.695 [DEBUG] [Thread-13117] [transport.py] [_log()] starting thread (client mode): 0xb9592200
2025-12-25T14:21:54.695 [DEBUG] [Thread-13117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:21:54.710 [DEBUG] [Thread-13117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:21:54.710 [INFO] [Thread-13117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:21:54.718 [DEBUG] [Thread-13117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] client lang: <none>
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] server lang: <none>
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] kex follows: False
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:21:54.719 [DEBUG] [Thread-13117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:21:54.720 [DEBUG] [Thread-13117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:21:54.720 [DEBUG] [Thread-13117] [transport.py] [_log()] Compression: none
2025-12-25T14:21:54.720 [DEBUG] [Thread-13117] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:21:54.779 [DEBUG] [Thread-13117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:21:54.779 [DEBUG] [Thread-13117] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:21:54.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:21:54.780 [DEBUG] [Thread-13117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:21:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:21:54.834 [DEBUG] [Thread-13117] [transport.py] [_log()] userauth is OK
2025-12-25T14:21:54.835 [DEBUG] [Thread-13117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:21:54.835 [DEBUG] [Thread-13117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:21:54.835 [DEBUG] [Thread-13117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:21:54.835 [DEBUG] [Thread-13117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:21:54.855 [INFO] [Thread-13117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:21:54.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-25T14:21:54.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:21:55.687 [DEBUG] [Thread-13117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:21:55.687 [DEBUG] [Thread-13117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:21:55.735 [DEBUG] [Thread-13117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:21:55.735 [DEBUG] [Thread-13117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:21:55.744 [DEBUG] [Thread-13117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:21:55.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:21:55.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-25T14:21:55.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-25T14:21:55.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:21:55.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:21:55.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:21:55.777 [DEBUG] [Thread-13117] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:22:07.365 [DEBUG] [Thread-13119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:08.461 [DEBUG] [Thread-13120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:23.522 [DEBUG] [Thread-13121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:22:25.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:22:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:22:26.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 22, 4), 27.38, 16.34, 0.0, 36.68, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:22:26.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:22:04
2025-12-25T14:22:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:22:26.786 [DEBUG] [Thread-13122] [transport.py] [_log()] starting thread (client mode): 0xb95b2530
2025-12-25T14:22:26.786 [DEBUG] [Thread-13122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:22:26.806 [DEBUG] [Thread-13122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:22:26.806 [INFO] [Thread-13122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:22:26.809 [DEBUG] [Thread-13122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:22:26.809 [DEBUG] [Thread-13122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:22:26.809 [DEBUG] [Thread-13122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] client lang: <none>
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] server lang: <none>
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] kex follows: False
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] Compression: none
2025-12-25T14:22:26.810 [DEBUG] [Thread-13122] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:22:26.825 [DEBUG] [Thread-13122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:22:26.825 [DEBUG] [Thread-13122] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:22:26.825 [DEBUG] [Thread-13122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:22:26.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:22:26.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:22:26.826 [DEBUG] [Thread-13122] [transport.py] [_log()] userauth is OK
2025-12-25T14:22:26.827 [DEBUG] [Thread-13122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:22:26.827 [DEBUG] [Thread-13122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:22:26.827 [DEBUG] [Thread-13122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:22:26.827 [DEBUG] [Thread-13122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:22:26.843 [INFO] [Thread-13122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:22:26.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:22:27.442 [DEBUG] [Thread-13122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:22:27.442 [DEBUG] [Thread-13122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:22:27.443 [DEBUG] [Thread-13122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:22:27.483 [DEBUG] [Thread-13122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:22:27.483 [DEBUG] [Thread-13122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:22:27.487 [DEBUG] [Thread-13122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:22:27.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:22:27.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:22:27.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:22:27.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:22:27.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:22:27.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:22:27.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:22:27.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:22:27.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:22:27.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.515339 -999.00  +26.70  28.17     20   +2.20 1 1 1 1 1   888    0 21.89 -55.65 ----- 32.9 28.2 309.8 43.8 31.2 -25.7 30.8 -25.2 31.0 -25.2 31.7 -23.6
2025-12-25T14:22:27.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:22:27.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:22:27.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.515339
2025-12-25T14:22:27.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:22:27.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:22:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:22:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:22:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:22:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:22:04', tmtdew=27.38, humidity=16.34, cloud=0.0, wind=36.68, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:22:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:22:27.515 [DEBUG] [Thread-13122] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:22:27.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-25T14:22:27.608 [DEBUG] [Thread-13125] [transport.py] [_log()] starting thread (client mode): 0xb9591de0
2025-12-25T14:22:27.609 [DEBUG] [Thread-13125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:22:27.622 [DEBUG] [Thread-13125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:22:27.622 [INFO] [Thread-13125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:22:27.630 [DEBUG] [Thread-13125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:22:27.630 [DEBUG] [Thread-13125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] client lang: <none>
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] server lang: <none>
2025-12-25T14:22:27.631 [DEBUG] [Thread-13125] [transport.py] [_log()] kex follows: False
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] Compression: none
2025-12-25T14:22:27.632 [DEBUG] [Thread-13125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:22:27.694 [DEBUG] [Thread-13125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:22:27.695 [DEBUG] [Thread-13125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:22:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:22:27.696 [DEBUG] [Thread-13125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:22:27.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:22:27.750 [DEBUG] [Thread-13125] [transport.py] [_log()] userauth is OK
2025-12-25T14:22:27.751 [DEBUG] [Thread-13125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:22:27.751 [DEBUG] [Thread-13125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:22:27.751 [DEBUG] [Thread-13125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:22:27.751 [DEBUG] [Thread-13125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:22:27.770 [INFO] [Thread-13125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:22:27.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-25T14:22:27.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:22:28.616 [DEBUG] [Thread-13125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:22:28.616 [DEBUG] [Thread-13125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:22:28.664 [DEBUG] [Thread-13125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:22:28.664 [DEBUG] [Thread-13125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:22:28.673 [DEBUG] [Thread-13125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:22:28.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:22: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-25T14:22:28.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-25T14:22:28.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:22:28.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:22:28.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:22:28.710 [DEBUG] [Thread-13125] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:22:35.954 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:35.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:38.556 [DEBUG] [Thread-13127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:53.604 [DEBUG] [Thread-13128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:22:58.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:22:58.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:22:58.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-25T14:22:59.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 22, 36), 27.97, 15.53, 0.0, 33.93, 25.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:22:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:22:36
2025-12-25T14:22:59.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:22:59.739 [DEBUG] [Thread-13129] [transport.py] [_log()] starting thread (client mode): 0xb9591ed0
2025-12-25T14:22:59.739 [DEBUG] [Thread-13129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:22:59.759 [DEBUG] [Thread-13129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:22:59.759 [INFO] [Thread-13129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:22:59.762 [DEBUG] [Thread-13129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:22:59.762 [DEBUG] [Thread-13129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] client lang: <none>
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] server lang: <none>
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] kex follows: False
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] Compression: none
2025-12-25T14:22:59.763 [DEBUG] [Thread-13129] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:22:59.779 [DEBUG] [Thread-13129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:22:59.779 [DEBUG] [Thread-13129] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:22:59.779 [DEBUG] [Thread-13129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:22:59.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:22:59.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:22:59.820 [DEBUG] [Thread-13129] [transport.py] [_log()] userauth is OK
2025-12-25T14:22:59.820 [DEBUG] [Thread-13129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:22:59.820 [DEBUG] [Thread-13129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:22:59.820 [DEBUG] [Thread-13129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:22:59.820 [DEBUG] [Thread-13129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:22:59.836 [INFO] [Thread-13129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:22:59.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:23:00.468 [DEBUG] [Thread-13129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:23:00.468 [DEBUG] [Thread-13129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:23:00.469 [DEBUG] [Thread-13129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:23:00.509 [DEBUG] [Thread-13129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:23:00.509 [DEBUG] [Thread-13129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:23:00.513 [DEBUG] [Thread-13129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:23:00.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:23:00.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:23:00.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:23:00.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:23:00.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:23:00.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:23:00.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:23:00.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:23:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:23:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.515687 -999.00  +26.40  30.70     20   +2.20 1 1 2 1 1   888    0 22.52 -46.38 ----- 34.9 30.7 300.6 39.5 31.1 -26.3 30.8 -26.5 31.0 -24.0 31.7 -24.8
2025-12-25T14:23:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:23:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:23:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.515687
2025-12-25T14:23:00.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:23:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:23:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:23:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:23:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:23:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:22:36', tmtdew=27.97, humidity=15.53, cloud=0.0, wind=33.93, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:22:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:23:00.537 [DEBUG] [Thread-13129] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:23:00.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-25T14:23:00.633 [DEBUG] [Thread-13132] [transport.py] [_log()] starting thread (client mode): 0xb9545630
2025-12-25T14:23:00.633 [DEBUG] [Thread-13132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:23:00.647 [DEBUG] [Thread-13132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:23:00.648 [INFO] [Thread-13132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:23:00.655 [DEBUG] [Thread-13132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:23:00.655 [DEBUG] [Thread-13132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] client lang: <none>
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] server lang: <none>
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] kex follows: False
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] Compression: none
2025-12-25T14:23:00.656 [DEBUG] [Thread-13132] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:23:00.714 [DEBUG] [Thread-13132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:23:00.715 [DEBUG] [Thread-13132] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:23:00.716 [DEBUG] [Thread-13132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:23:00.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:23:00.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:23:00.771 [DEBUG] [Thread-13132] [transport.py] [_log()] userauth is OK
2025-12-25T14:23:00.771 [DEBUG] [Thread-13132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:23:00.771 [DEBUG] [Thread-13132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:23:00.771 [DEBUG] [Thread-13132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:23:00.771 [DEBUG] [Thread-13132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:23:00.790 [INFO] [Thread-13132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:23:00.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-25T14:23:00.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:23:01.642 [DEBUG] [Thread-13132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:23:01.643 [DEBUG] [Thread-13132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:23:01.691 [DEBUG] [Thread-13132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:23:01.691 [DEBUG] [Thread-13132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:23:01.700 [DEBUG] [Thread-13132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:23:01.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:23:01.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-25T14:23:01.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:23:01.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:23:01.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:23:01.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:23:01.738 [DEBUG] [Thread-13132] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:23:07.417 [DEBUG] [Thread-13134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:23:08.639 [DEBUG] [Thread-13135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:23:23.692 [DEBUG] [Thread-13136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:23:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:23:31.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:23:31.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-25T14:23:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 23, 8), 28.31, 15.25, 0.0, 39.43, 26.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:23:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:23:08
2025-12-25T14:23:32.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:23:32.733 [DEBUG] [Thread-13137] [transport.py] [_log()] starting thread (client mode): 0xb6b61e70
2025-12-25T14:23:32.733 [DEBUG] [Thread-13137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:23:32.754 [DEBUG] [Thread-13137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:23:32.754 [INFO] [Thread-13137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:23:32.757 [DEBUG] [Thread-13137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] client lang: <none>
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] server lang: <none>
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] kex follows: False
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] Compression: none
2025-12-25T14:23:32.758 [DEBUG] [Thread-13137] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:23:32.775 [DEBUG] [Thread-13137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:23:32.776 [DEBUG] [Thread-13137] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:23:32.776 [DEBUG] [Thread-13137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:23:32.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:23:32.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:23:32.778 [DEBUG] [Thread-13137] [transport.py] [_log()] userauth is OK
2025-12-25T14:23:32.778 [DEBUG] [Thread-13137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:23:32.778 [DEBUG] [Thread-13137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:23:32.778 [DEBUG] [Thread-13137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:23:32.779 [DEBUG] [Thread-13137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:23:32.802 [INFO] [Thread-13137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:23:32.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:23:33.414 [DEBUG] [Thread-13137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:23:33.414 [DEBUG] [Thread-13137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:23:33.414 [DEBUG] [Thread-13137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:23:33.456 [DEBUG] [Thread-13137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:23:33.456 [DEBUG] [Thread-13137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:23:33.458 [DEBUG] [Thread-13137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:23:33.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:23:33.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:23:33.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:23:33.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:23:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:23:33.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:23:33.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.516034 -999.00  +26.10  36.86     20   +2.00 1 1 2 1 1   888    0 22.54 -42.84 ----- 34.0 36.9 305.0 44.8 31.1 -26.1 30.8 -26.6 30.9 -24.4 31.6 -24.6
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.516034
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:23:33.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:23:08', tmtdew=28.31, humidity=15.25, cloud=0.0, wind=39.43, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:23:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:23:33.480 [DEBUG] [Thread-13137] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:23:33.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-25T14:23:33.566 [DEBUG] [Thread-13140] [transport.py] [_log()] starting thread (client mode): 0xb6b620e0
2025-12-25T14:23:33.566 [DEBUG] [Thread-13140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:23:33.580 [DEBUG] [Thread-13140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:23:33.580 [INFO] [Thread-13140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:23:33.587 [DEBUG] [Thread-13140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] client lang: <none>
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] server lang: <none>
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] kex follows: False
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] Compression: none
2025-12-25T14:23:33.588 [DEBUG] [Thread-13140] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:23:33.644 [DEBUG] [Thread-13140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:23:33.644 [DEBUG] [Thread-13140] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:23:33.645 [DEBUG] [Thread-13140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:23:33.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:23:33.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:23:33.703 [DEBUG] [Thread-13140] [transport.py] [_log()] userauth is OK
2025-12-25T14:23:33.703 [DEBUG] [Thread-13140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:23:33.703 [DEBUG] [Thread-13140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:23:33.703 [DEBUG] [Thread-13140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:23:33.703 [DEBUG] [Thread-13140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:23:33.717 [INFO] [Thread-13140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:23:33.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-25T14:23:33.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:23:34.550 [DEBUG] [Thread-13140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:23:34.550 [DEBUG] [Thread-13140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:23:34.598 [DEBUG] [Thread-13140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:23:34.598 [DEBUG] [Thread-13140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:23:34.606 [DEBUG] [Thread-13140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:23:34.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:23:34.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:23:34.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:23:34.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:23:34.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:23:34.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:23:34.637 [DEBUG] [Thread-13140] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:23:36.094 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:23:36.095 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:23:38.724 [DEBUG] [Thread-13142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:23:53.769 [DEBUG] [Thread-13143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:04.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:24:04.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:24:04.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-25T14:24:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 23, 40), 28.18, 15.68, 0.0, 38.89, 26.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:24:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:23:40
2025-12-25T14:24:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:24:05.616 [DEBUG] [Thread-13144] [transport.py] [_log()] starting thread (client mode): 0xb95d6a70
2025-12-25T14:24:05.616 [DEBUG] [Thread-13144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:24:05.636 [DEBUG] [Thread-13144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:24:05.636 [INFO] [Thread-13144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:24:05.639 [DEBUG] [Thread-13144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:24:05.639 [DEBUG] [Thread-13144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:24:05.639 [DEBUG] [Thread-13144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:24:05.639 [DEBUG] [Thread-13144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:05.639 [DEBUG] [Thread-13144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:05.639 [DEBUG] [Thread-13144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] client lang: <none>
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] server lang: <none>
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] kex follows: False
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] Compression: none
2025-12-25T14:24:05.640 [DEBUG] [Thread-13144] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:24:05.659 [DEBUG] [Thread-13144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:24:05.659 [DEBUG] [Thread-13144] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:24:05.660 [DEBUG] [Thread-13144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:24:05.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:24:05.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:24:05.663 [DEBUG] [Thread-13144] [transport.py] [_log()] userauth is OK
2025-12-25T14:24:05.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:24:05.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:24:05.663 [DEBUG] [Thread-13144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:24:05.664 [DEBUG] [Thread-13144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:24:05.688 [INFO] [Thread-13144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:24:05.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:24:06.314 [DEBUG] [Thread-13144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:24:06.314 [DEBUG] [Thread-13144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:24:06.314 [DEBUG] [Thread-13144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:24:06.355 [DEBUG] [Thread-13144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:24:06.355 [DEBUG] [Thread-13144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:24:06.359 [DEBUG] [Thread-13144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:24:06.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:24:06.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:24:06.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:24:06.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:24:06.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:24:06.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:24:06.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:24:06.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:24:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:24:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.516381 -999.00  +26.20  30.06     21   +2.30 1 1 2 1 1   888    0 22.69 -37.78 ----- 28.2 30.1 300.4 43.3 31.1 -26.3 30.7 -26.4 30.9 -29.1 31.6 -23.9
2025-12-25T14:24:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:24:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:24:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.516381
2025-12-25T14:24:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:24:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:24:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:24:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:24:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:24:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:23:40', tmtdew=28.18, humidity=15.68, cloud=0.0, wind=38.89, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:23:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:24:06.376 [DEBUG] [Thread-13144] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:24:06.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-25T14:24:06.458 [DEBUG] [Thread-13147] [transport.py] [_log()] starting thread (client mode): 0xb95d4d90
2025-12-25T14:24:06.459 [DEBUG] [Thread-13147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:24:06.474 [DEBUG] [Thread-13147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:24:06.474 [INFO] [Thread-13147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:24:06.481 [DEBUG] [Thread-13147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] client lang: <none>
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] server lang: <none>
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] kex follows: False
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] Compression: none
2025-12-25T14:24:06.482 [DEBUG] [Thread-13147] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:24:06.542 [DEBUG] [Thread-13147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:24:06.543 [DEBUG] [Thread-13147] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:24:06.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:24:06.544 [DEBUG] [Thread-13147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:24:06.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:24:06.598 [DEBUG] [Thread-13147] [transport.py] [_log()] userauth is OK
2025-12-25T14:24:06.598 [DEBUG] [Thread-13147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:24:06.599 [DEBUG] [Thread-13147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:24:06.599 [DEBUG] [Thread-13147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:24:06.599 [DEBUG] [Thread-13147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:24:06.618 [INFO] [Thread-13147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:24:06.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-25T14:24:06.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:24:07.475 [DEBUG] [Thread-13147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:24:07.475 [DEBUG] [Thread-13147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:24:07.483 [DEBUG] [Thread-13149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:07.523 [DEBUG] [Thread-13147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:24:07.523 [DEBUG] [Thread-13147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:24:07.532 [DEBUG] [Thread-13147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:24:07.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:24:07.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-25T14:24: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-25T14:24:07.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:24:07.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:24:07.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:24:07.569 [DEBUG] [Thread-13147] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:24:08.811 [DEBUG] [Thread-13150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:23.858 [DEBUG] [Thread-13151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:36.245 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:36.246 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:37.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:24:37.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:24:37.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-25T14:24:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 24, 12), 28.28, 15.58, 0.0, 34.95, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:24:38.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:24:12
2025-12-25T14:24:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:24:38.547 [DEBUG] [Thread-13152] [transport.py] [_log()] starting thread (client mode): 0xb95d4e20
2025-12-25T14:24:38.548 [DEBUG] [Thread-13152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:24:38.567 [DEBUG] [Thread-13152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:24:38.567 [INFO] [Thread-13152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:24:38.570 [DEBUG] [Thread-13152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:24:38.570 [DEBUG] [Thread-13152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:24:38.570 [DEBUG] [Thread-13152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:24:38.570 [DEBUG] [Thread-13152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] client lang: <none>
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] server lang: <none>
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] kex follows: False
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] Compression: none
2025-12-25T14:24:38.571 [DEBUG] [Thread-13152] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:24:38.588 [DEBUG] [Thread-13152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:24:38.588 [DEBUG] [Thread-13152] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:24:38.589 [DEBUG] [Thread-13152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:24:38.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:24:38.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:24:38.591 [DEBUG] [Thread-13152] [transport.py] [_log()] userauth is OK
2025-12-25T14:24:38.591 [DEBUG] [Thread-13152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:24:38.591 [DEBUG] [Thread-13152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:24:38.591 [DEBUG] [Thread-13152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:24:38.591 [DEBUG] [Thread-13152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:24:38.627 [INFO] [Thread-13152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:24:38.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:24:38.891 [DEBUG] [Thread-13154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:24:39.290 [DEBUG] [Thread-13152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:24:39.290 [DEBUG] [Thread-13152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:24:39.291 [DEBUG] [Thread-13152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:24:39.331 [DEBUG] [Thread-13152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:24:39.331 [DEBUG] [Thread-13152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:24:39.335 [DEBUG] [Thread-13152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:24:39.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:24:39.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:24:39.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:24:39.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:24:39.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:24:39.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:24:39.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:24:39.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:24:39.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:24:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.516728 -999.00  +25.70  25.55     21   +2.00 1 1 1 1 1   888    0 22.80 -35.74 ----- 26.5 25.6 298.2 38.9 31.1 -26.6 30.7 -26.9 30.9 -24.0 31.6 -24.6
2025-12-25T14:24:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:24:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:24:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.516728
2025-12-25T14:24:39.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:24:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:24:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:24:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:24:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:24:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:24:12', tmtdew=28.28, humidity=15.58, cloud=0.0, wind=34.95, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:24:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:24:39.360 [DEBUG] [Thread-13152] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:24:39.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-25T14:24:39.457 [DEBUG] [Thread-13156] [transport.py] [_log()] starting thread (client mode): 0xb95d7550
2025-12-25T14:24:39.457 [DEBUG] [Thread-13156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:24:39.472 [DEBUG] [Thread-13156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:24:39.473 [INFO] [Thread-13156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:24:39.480 [DEBUG] [Thread-13156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] client lang: <none>
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] server lang: <none>
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] kex follows: False
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] Compression: none
2025-12-25T14:24:39.481 [DEBUG] [Thread-13156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:24:39.538 [DEBUG] [Thread-13156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:24:39.539 [DEBUG] [Thread-13156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:24:39.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:24:39.540 [DEBUG] [Thread-13156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:24:39.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:24:39.594 [DEBUG] [Thread-13156] [transport.py] [_log()] userauth is OK
2025-12-25T14:24:39.595 [DEBUG] [Thread-13156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:24:39.595 [DEBUG] [Thread-13156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:24:39.595 [DEBUG] [Thread-13156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:24:39.595 [DEBUG] [Thread-13156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:24:39.613 [INFO] [Thread-13156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:24:39.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:24:39.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:24:40.436 [DEBUG] [Thread-13156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:24:40.437 [DEBUG] [Thread-13156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:24:40.485 [DEBUG] [Thread-13156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:24:40.485 [DEBUG] [Thread-13156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:24:40.494 [DEBUG] [Thread-13156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:24:40.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:24:40.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-25T14:24:40.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-25T14:24:40.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:24:40.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:24:40.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:24:40.531 [DEBUG] [Thread-13156] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:24:53.922 [DEBUG] [Thread-13158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:07.531 [DEBUG] [Thread-13159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:08.971 [DEBUG] [Thread-13160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:10.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:25:10.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:25:10.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-25T14:25:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 24, 44), 28.2, 15.7, 0.0, 27.08, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:25:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:24:44
2025-12-25T14:25:11.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:25:11.522 [DEBUG] [Thread-13161] [transport.py] [_log()] starting thread (client mode): 0xb6b60370
2025-12-25T14:25:11.522 [DEBUG] [Thread-13161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:25:11.542 [DEBUG] [Thread-13161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:25:11.542 [INFO] [Thread-13161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:25:11.544 [DEBUG] [Thread-13161] [transport.py] [_log()] client lang: <none>
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] server lang: <none>
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] kex follows: False
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] Compression: none
2025-12-25T14:25:11.545 [DEBUG] [Thread-13161] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:25:11.554 [DEBUG] [Thread-13161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:25:11.554 [DEBUG] [Thread-13161] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:25:11.555 [DEBUG] [Thread-13161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:25:11.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:25:11.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:25:11.556 [DEBUG] [Thread-13161] [transport.py] [_log()] userauth is OK
2025-12-25T14:25:11.556 [DEBUG] [Thread-13161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:25:11.557 [DEBUG] [Thread-13161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:25:11.557 [DEBUG] [Thread-13161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:25:11.557 [DEBUG] [Thread-13161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:25:11.575 [INFO] [Thread-13161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:25:11.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:25:12.232 [DEBUG] [Thread-13161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:25:12.232 [DEBUG] [Thread-13161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:25:12.233 [DEBUG] [Thread-13161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:25:12.273 [DEBUG] [Thread-13161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:25:12.273 [DEBUG] [Thread-13161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:25:12.277 [DEBUG] [Thread-13161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:25:12.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:25:12.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:25:12.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:25:12.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:25:12.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:25:12.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:25:12.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:25:12.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:25:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:25:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.517075 -999.00  +25.60  18.69     21   +2.00 1 1 1 1 1   888    0 22.38 -36.90 ----- 18.1 18.7 311.0 29.5 31.0 -27.0 30.7 -26.5 31.1 -22.5 31.5 -24.1
2025-12-25T14:25:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:25:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:25:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.517075
2025-12-25T14:25:12.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:25:12.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:25:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:25:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:25:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:25:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:24:44', tmtdew=28.2, humidity=15.7, cloud=0.0, wind=27.08, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:24:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:25:12.305 [DEBUG] [Thread-13161] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:25:12.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:25:12.399 [DEBUG] [Thread-13164] [transport.py] [_log()] starting thread (client mode): 0xb6b61660
2025-12-25T14:25:12.399 [DEBUG] [Thread-13164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:25:12.413 [DEBUG] [Thread-13164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:25:12.413 [INFO] [Thread-13164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:25:12.421 [DEBUG] [Thread-13164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:25:12.421 [DEBUG] [Thread-13164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:25:12.421 [DEBUG] [Thread-13164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:25:12.421 [DEBUG] [Thread-13164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:12.421 [DEBUG] [Thread-13164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:12.421 [DEBUG] [Thread-13164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] client lang: <none>
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] server lang: <none>
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] kex follows: False
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:25:12.422 [DEBUG] [Thread-13164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:25:12.423 [DEBUG] [Thread-13164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:25:12.423 [DEBUG] [Thread-13164] [transport.py] [_log()] Compression: none
2025-12-25T14:25:12.423 [DEBUG] [Thread-13164] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:25:12.479 [DEBUG] [Thread-13164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:25:12.480 [DEBUG] [Thread-13164] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:25:12.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:25:12.482 [DEBUG] [Thread-13164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:25:12.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:25:12.539 [DEBUG] [Thread-13164] [transport.py] [_log()] userauth is OK
2025-12-25T14:25:12.539 [DEBUG] [Thread-13164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:25:12.539 [DEBUG] [Thread-13164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:25:12.539 [DEBUG] [Thread-13164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:25:12.540 [DEBUG] [Thread-13164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:25:12.561 [INFO] [Thread-13164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:25:12.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-25T14:25:12.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:25:13.379 [DEBUG] [Thread-13164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:25:13.380 [DEBUG] [Thread-13164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:25:13.428 [DEBUG] [Thread-13164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:25:13.428 [DEBUG] [Thread-13164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:25:13.437 [DEBUG] [Thread-13164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:25:13.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:25:13.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-25T14:25:13.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-25T14:25:13.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:25:13.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:25:13.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:25:13.474 [DEBUG] [Thread-13164] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:25:24.007 [DEBUG] [Thread-13166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:36.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:36.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:39.056 [DEBUG] [Thread-13167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:25:43.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:25:43.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:25:43.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-25T14:25:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 25, 17), 28.25, 15.65, 0.0, 26.33, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:25:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:25:17
2025-12-25T14:25:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:25:44.447 [DEBUG] [Thread-13168] [transport.py] [_log()] starting thread (client mode): 0xb95d5a80
2025-12-25T14:25:44.447 [DEBUG] [Thread-13168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:25:44.469 [DEBUG] [Thread-13168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:25:44.469 [INFO] [Thread-13168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:25:44.472 [DEBUG] [Thread-13168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] client lang: <none>
2025-12-25T14:25:44.473 [DEBUG] [Thread-13168] [transport.py] [_log()] server lang: <none>
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] kex follows: False
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] Compression: none
2025-12-25T14:25:44.474 [DEBUG] [Thread-13168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:25:44.486 [DEBUG] [Thread-13168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:25:44.487 [DEBUG] [Thread-13168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:25:44.488 [DEBUG] [Thread-13168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:25:44.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:25:44.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:25:44.489 [DEBUG] [Thread-13168] [transport.py] [_log()] userauth is OK
2025-12-25T14:25:44.490 [DEBUG] [Thread-13168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:25:44.490 [DEBUG] [Thread-13168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:25:44.490 [DEBUG] [Thread-13168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:25:44.490 [DEBUG] [Thread-13168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:25:44.526 [INFO] [Thread-13168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:25:44.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:25:45.205 [DEBUG] [Thread-13168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:25:45.205 [DEBUG] [Thread-13168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:25:45.206 [DEBUG] [Thread-13168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:25:45.246 [DEBUG] [Thread-13168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:25:45.246 [DEBUG] [Thread-13168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:25:45.250 [DEBUG] [Thread-13168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:25:45.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:25:45.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:25:45.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:25:45.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:25:45.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:25:45.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:25:45.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:25:45.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:25:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:25:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.517770 -999.00  +26.20  27.70     20   +2.10 1 1 1 1 1   888    0 23.25 -15.76 ----- 41.2 27.7 308.5 35.5 31.1 -25.8 30.7 -27.0 31.1 -25.9 31.7 -23.1
2025-12-25T14:25:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:25:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:25:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.517770
2025-12-25T14:25:45.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:25:45.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:25:45.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:25:45.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:25:45.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:25:45.279 [DEBUG] [Thread-13168] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:25:45.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:25:17', tmtdew=28.25, humidity=15.65, cloud=0.0, wind=26.33, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:25:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:25:45.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-25T14:25:45.373 [DEBUG] [Thread-13171] [transport.py] [_log()] starting thread (client mode): 0xb6b60d00
2025-12-25T14:25:45.373 [DEBUG] [Thread-13171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:25:45.388 [DEBUG] [Thread-13171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:25:45.388 [INFO] [Thread-13171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] client lang: <none>
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] server lang: <none>
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] kex follows: False
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:25:45.396 [DEBUG] [Thread-13171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:25:45.397 [DEBUG] [Thread-13171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:25:45.397 [DEBUG] [Thread-13171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:25:45.397 [DEBUG] [Thread-13171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:25:45.397 [DEBUG] [Thread-13171] [transport.py] [_log()] Compression: none
2025-12-25T14:25:45.397 [DEBUG] [Thread-13171] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:25:45.453 [DEBUG] [Thread-13171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:25:45.454 [DEBUG] [Thread-13171] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:25:45.454 [DEBUG] [Thread-13171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:25:45.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:25:45.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:25:45.509 [DEBUG] [Thread-13171] [transport.py] [_log()] userauth is OK
2025-12-25T14:25:45.510 [DEBUG] [Thread-13171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:25:45.510 [DEBUG] [Thread-13171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:25:45.510 [DEBUG] [Thread-13171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:25:45.510 [DEBUG] [Thread-13171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:25:45.532 [INFO] [Thread-13171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:25:45.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-25T14:25:45.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:25:46.392 [DEBUG] [Thread-13171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:25:46.392 [DEBUG] [Thread-13171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:25:46.440 [DEBUG] [Thread-13171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:25:46.440 [DEBUG] [Thread-13171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:25:46.449 [DEBUG] [Thread-13171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:25:46.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:25:46.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-25T14:25:46.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-25T14:25:46.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:25:46.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:25:46.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:25:46.486 [DEBUG] [Thread-13171] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:25:54.092 [DEBUG] [Thread-13173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:07.587 [DEBUG] [Thread-13174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:09.139 [DEBUG] [Thread-13175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:26:16.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:26:16.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:26:17.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 25, 48), 28.1, 15.43, 0.0, 28.16, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:26:17.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:25:48
2025-12-25T14:26:17.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:26:17.475 [DEBUG] [Thread-13176] [transport.py] [_log()] starting thread (client mode): 0xb95d59c0
2025-12-25T14:26:17.475 [DEBUG] [Thread-13176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:26:17.494 [DEBUG] [Thread-13176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:26:17.494 [INFO] [Thread-13176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:17.496 [DEBUG] [Thread-13176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] client lang: <none>
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] server lang: <none>
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] kex follows: False
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] Compression: none
2025-12-25T14:26:17.497 [DEBUG] [Thread-13176] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:26:17.509 [DEBUG] [Thread-13176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:26:17.510 [DEBUG] [Thread-13176] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:26:17.510 [DEBUG] [Thread-13176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:26:17.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:26:17.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:26:17.512 [DEBUG] [Thread-13176] [transport.py] [_log()] userauth is OK
2025-12-25T14:26:17.512 [DEBUG] [Thread-13176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:26:17.512 [DEBUG] [Thread-13176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:26:17.513 [DEBUG] [Thread-13176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:26:17.513 [DEBUG] [Thread-13176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:26:17.528 [INFO] [Thread-13176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:26:17.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:26:18.147 [DEBUG] [Thread-13176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:26:18.147 [DEBUG] [Thread-13176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:26:18.147 [DEBUG] [Thread-13176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:26:18.188 [DEBUG] [Thread-13176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:26:18.189 [DEBUG] [Thread-13176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:26:18.193 [DEBUG] [Thread-13176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:26:18.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:26:18.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:26:18.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:26:18.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:26:18.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:26:18.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:26:18.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:26:18.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:26:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:26:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.518117 -999.00  +25.90  29.58     20   +1.80 1 1 1 1 1   888    0 23.11 -10.03 ----- 26.5 29.6 299.4 48.6 31.1 -26.3 30.7 -26.1 31.1 -22.3 31.7 -24.6
2025-12-25T14:26:18.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:26:18.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:26:18.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.518117
2025-12-25T14:26:18.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:26:18.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:26:18.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:26:18.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:26:18.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:26:18.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:25:48', tmtdew=28.1, humidity=15.43, cloud=0.0, wind=28.16, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:26:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:26:18.220 [DEBUG] [Thread-13176] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:26:18.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-25T14:26:18.313 [DEBUG] [Thread-13179] [transport.py] [_log()] starting thread (client mode): 0xb95d5c60
2025-12-25T14:26:18.313 [DEBUG] [Thread-13179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:26:18.327 [DEBUG] [Thread-13179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:26:18.328 [INFO] [Thread-13179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:26:18.335 [DEBUG] [Thread-13179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:26:18.335 [DEBUG] [Thread-13179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:26:18.335 [DEBUG] [Thread-13179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:26:18.335 [DEBUG] [Thread-13179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] client lang: <none>
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] server lang: <none>
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] kex follows: False
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:26:18.336 [DEBUG] [Thread-13179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:26:18.337 [DEBUG] [Thread-13179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:26:18.337 [DEBUG] [Thread-13179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:26:18.337 [DEBUG] [Thread-13179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:26:18.337 [DEBUG] [Thread-13179] [transport.py] [_log()] Compression: none
2025-12-25T14:26:18.337 [DEBUG] [Thread-13179] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:26:18.395 [DEBUG] [Thread-13179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:26:18.395 [DEBUG] [Thread-13179] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:26:18.396 [DEBUG] [Thread-13179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:26:18.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:26:18.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:26:18.454 [DEBUG] [Thread-13179] [transport.py] [_log()] userauth is OK
2025-12-25T14:26:18.454 [DEBUG] [Thread-13179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:26:18.454 [DEBUG] [Thread-13179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:26:18.455 [DEBUG] [Thread-13179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:26:18.455 [DEBUG] [Thread-13179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:26:18.472 [INFO] [Thread-13179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:26:18.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-25T14:26:18.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:26:19.314 [DEBUG] [Thread-13179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:26:19.315 [DEBUG] [Thread-13179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:26:19.363 [DEBUG] [Thread-13179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:26:19.364 [DEBUG] [Thread-13179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:26:19.373 [DEBUG] [Thread-13179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:26:19.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:26:19.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-25T14:26:19.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:26:19.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:26:19.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:26:19.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:26:19.412 [DEBUG] [Thread-13179] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:26:24.167 [DEBUG] [Thread-13181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:36.527 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:36.528 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:39.215 [DEBUG] [Thread-13182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:26:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:26:49.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:26:49.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-25T14:26:50.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 26, 21), 28.36, 15.18, 0.0, 31.07, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:26:50.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:26:21
2025-12-25T14:26:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:26:50.456 [DEBUG] [Thread-13183] [transport.py] [_log()] starting thread (client mode): 0xb6b20e50
2025-12-25T14:26:50.456 [DEBUG] [Thread-13183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:26:50.473 [DEBUG] [Thread-13183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:26:50.473 [INFO] [Thread-13183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] client lang: <none>
2025-12-25T14:26:50.474 [DEBUG] [Thread-13183] [transport.py] [_log()] server lang: <none>
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] kex follows: False
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] Compression: none
2025-12-25T14:26:50.475 [DEBUG] [Thread-13183] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:26:50.482 [DEBUG] [Thread-13183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:26:50.483 [DEBUG] [Thread-13183] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:26:50.483 [DEBUG] [Thread-13183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:26:50.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:26:50.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:26:50.484 [DEBUG] [Thread-13183] [transport.py] [_log()] userauth is OK
2025-12-25T14:26:50.484 [DEBUG] [Thread-13183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:26:50.484 [DEBUG] [Thread-13183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:26:50.484 [DEBUG] [Thread-13183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:26:50.484 [DEBUG] [Thread-13183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:26:50.500 [INFO] [Thread-13183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:26:50.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:26:51.112 [DEBUG] [Thread-13183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:26:51.112 [DEBUG] [Thread-13183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:26:51.112 [DEBUG] [Thread-13183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:26:51.153 [DEBUG] [Thread-13183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:26:51.154 [DEBUG] [Thread-13183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:26:51.156 [DEBUG] [Thread-13183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:26:51.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:26:51.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:26:51.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:26:51.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:26:51.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:26:51.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:26:51.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:26:51.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:26:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:26:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.518464 -999.00  +26.60  28.22     19   +1.60 1 1 1 1 1   888    0 23.74 -3.74 ----- 39.9 28.2 298.4 33.0 31.2 -26.2 30.9 -25.3 30.9 -25.6 31.8 -24.7
2025-12-25T14:26:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:26:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:26:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.518464
2025-12-25T14:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:26:51.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:26:21', tmtdew=28.36, humidity=15.18, cloud=0.0, wind=31.07, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:26:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:26:51.176 [DEBUG] [Thread-13183] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:26: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-25T14:26:51.264 [DEBUG] [Thread-13186] [transport.py] [_log()] starting thread (client mode): 0xb6b20280
2025-12-25T14:26:51.264 [DEBUG] [Thread-13186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:26:51.279 [DEBUG] [Thread-13186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:26:51.279 [INFO] [Thread-13186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:26:51.286 [DEBUG] [Thread-13186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] client lang: <none>
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] server lang: <none>
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] kex follows: False
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] Compression: none
2025-12-25T14:26:51.287 [DEBUG] [Thread-13186] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:26:51.348 [DEBUG] [Thread-13186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:26:51.348 [DEBUG] [Thread-13186] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:26:51.348 [DEBUG] [Thread-13186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:26:51.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:26:51.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:26:51.405 [DEBUG] [Thread-13186] [transport.py] [_log()] userauth is OK
2025-12-25T14:26:51.405 [DEBUG] [Thread-13186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:26:51.405 [DEBUG] [Thread-13186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:26:51.405 [DEBUG] [Thread-13186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:26:51.405 [DEBUG] [Thread-13186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:26:51.419 [INFO] [Thread-13186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:26:51.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-25T14:26:51.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:26:52.275 [DEBUG] [Thread-13186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:26:52.275 [DEBUG] [Thread-13186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:26:52.322 [DEBUG] [Thread-13186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:26:52.322 [DEBUG] [Thread-13186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:26:52.330 [DEBUG] [Thread-13186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:26:52.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:26:52.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-25T14:26:52.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-25T14:26:52.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:26:52.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:26:52.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:26:52.362 [DEBUG] [Thread-13186] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:26:54.244 [DEBUG] [Thread-13188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:07.651 [DEBUG] [Thread-13189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:09.296 [DEBUG] [Thread-13190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:22.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:27:22.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:27:22.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-25T14:27:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 26, 53), 29.42, 14.19, 0.0, 28.51, 26.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:27:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:26:53
2025-12-25T14:27:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:27:23.354 [DEBUG] [Thread-13191] [transport.py] [_log()] starting thread (client mode): 0xb95d7190
2025-12-25T14:27:23.354 [DEBUG] [Thread-13191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:27:23.373 [DEBUG] [Thread-13191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:27:23.373 [INFO] [Thread-13191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] client lang: <none>
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] server lang: <none>
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] kex follows: False
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:27:23.376 [DEBUG] [Thread-13191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:27:23.377 [DEBUG] [Thread-13191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:27:23.377 [DEBUG] [Thread-13191] [transport.py] [_log()] Compression: none
2025-12-25T14:27:23.377 [DEBUG] [Thread-13191] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:27:23.390 [DEBUG] [Thread-13191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:27:23.390 [DEBUG] [Thread-13191] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:27:23.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:27:23.391 [DEBUG] [Thread-13191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:27:23.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:27:23.393 [DEBUG] [Thread-13191] [transport.py] [_log()] userauth is OK
2025-12-25T14:27:23.393 [DEBUG] [Thread-13191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:27:23.393 [DEBUG] [Thread-13191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:27:23.394 [DEBUG] [Thread-13191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:27:23.394 [DEBUG] [Thread-13191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:27:23.412 [INFO] [Thread-13191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:27:23.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:27:24.067 [DEBUG] [Thread-13191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:27:24.067 [DEBUG] [Thread-13191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:27:24.067 [DEBUG] [Thread-13191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:27:24.108 [DEBUG] [Thread-13191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:27:24.108 [DEBUG] [Thread-13191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:27:24.111 [DEBUG] [Thread-13191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:27:24.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:27:24.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:27:24.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:27:24.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:27:24.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:27:24.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:27:24.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:27:24.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:27:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:27:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.518812 -999.00  +26.20  30.68     20   +1.60 1 1 2 1 1   888    0 24.05 0.98 ----- 24.9 30.7 306.4 44.3 31.1 -26.3 30.7 -26.1 31.1 -23.8 31.7 -23.8
2025-12-25T14:27:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:27:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:27:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.518812
2025-12-25T14:27:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:27:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:27:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:27:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:27:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:27:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:26:53', tmtdew=29.42, humidity=14.19, cloud=0.0, wind=28.51, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:27:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:27:24.135 [DEBUG] [Thread-13191] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:27:24.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:27:24.221 [DEBUG] [Thread-13194] [transport.py] [_log()] starting thread (client mode): 0xb6b623e0
2025-12-25T14:27:24.221 [DEBUG] [Thread-13194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:27:24.235 [DEBUG] [Thread-13194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:27:24.235 [INFO] [Thread-13194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:27:24.243 [DEBUG] [Thread-13194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:27:24.243 [DEBUG] [Thread-13194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:27:24.243 [DEBUG] [Thread-13194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] client lang: <none>
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] server lang: <none>
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] kex follows: False
2025-12-25T14:27:24.244 [DEBUG] [Thread-13194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:27:24.245 [DEBUG] [Thread-13194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:27:24.245 [DEBUG] [Thread-13194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:27:24.245 [DEBUG] [Thread-13194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:27:24.245 [DEBUG] [Thread-13194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:27:24.245 [DEBUG] [Thread-13194] [transport.py] [_log()] Compression: none
2025-12-25T14:27:24.245 [DEBUG] [Thread-13194] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:27:24.303 [DEBUG] [Thread-13194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:27:24.303 [DEBUG] [Thread-13194] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:27:24.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:27:24.304 [DEBUG] [Thread-13194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:27:24.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:27:24.332 [DEBUG] [Thread-13196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:24.362 [DEBUG] [Thread-13194] [transport.py] [_log()] userauth is OK
2025-12-25T14:27:24.362 [DEBUG] [Thread-13194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:27:24.362 [DEBUG] [Thread-13194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:27:24.362 [DEBUG] [Thread-13194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:27:24.362 [DEBUG] [Thread-13194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:27:24.384 [INFO] [Thread-13194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:27:24.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:27:24.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:27:25.227 [DEBUG] [Thread-13194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:27:25.227 [DEBUG] [Thread-13194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:27:25.275 [DEBUG] [Thread-13194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:27:25.275 [DEBUG] [Thread-13194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:27:25.284 [DEBUG] [Thread-13194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:27:25.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:27:25.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:27:25.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:27:25.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:27:25.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:27:25.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:27:25.321 [DEBUG] [Thread-13194] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:27:36.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:36.668 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:39.381 [DEBUG] [Thread-13197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:54.418 [DEBUG] [Thread-13198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:27:55.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:27:55.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:27:55.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-25T14:27:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 27, 25), 29.31, 14.27, 0.0, 32.59, 26.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:27:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:27:25
2025-12-25T14:27:56.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:27:56.318 [DEBUG] [Thread-13199] [transport.py] [_log()] starting thread (client mode): 0xb6b63c10
2025-12-25T14:27:56.318 [DEBUG] [Thread-13199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:27:56.334 [DEBUG] [Thread-13199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:27:56.334 [INFO] [Thread-13199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] client lang: <none>
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] server lang: <none>
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] kex follows: False
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:27:56.338 [DEBUG] [Thread-13199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:27:56.339 [DEBUG] [Thread-13199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:27:56.339 [DEBUG] [Thread-13199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:27:56.339 [DEBUG] [Thread-13199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:27:56.339 [DEBUG] [Thread-13199] [transport.py] [_log()] Compression: none
2025-12-25T14:27:56.339 [DEBUG] [Thread-13199] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:27:56.348 [DEBUG] [Thread-13199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:27:56.348 [DEBUG] [Thread-13199] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:27:56.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:27:56.350 [DEBUG] [Thread-13199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:27:56.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:27:56.352 [DEBUG] [Thread-13199] [transport.py] [_log()] userauth is OK
2025-12-25T14:27:56.352 [DEBUG] [Thread-13199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:27:56.352 [DEBUG] [Thread-13199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:27:56.352 [DEBUG] [Thread-13199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:27:56.352 [DEBUG] [Thread-13199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:27:56.367 [INFO] [Thread-13199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:27:56.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:27:57.065 [DEBUG] [Thread-13199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:27:57.066 [DEBUG] [Thread-13199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:27:57.066 [DEBUG] [Thread-13199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:27:57.107 [DEBUG] [Thread-13199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:27:57.108 [DEBUG] [Thread-13199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:27:57.111 [DEBUG] [Thread-13199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:27:57.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:27:57.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:27:57.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:27:57.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:27:57.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:27:57.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:27:57.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:27:57.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:27:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:27:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.519159 -999.00  +26.30  34.96     19   +1.40 1 1 2 1 1   888    0 23.84 8.17 ----- 29.2 35.0 295.0 38.5 31.3 -25.9 30.9 -25.3 30.9 -26.9 31.8 -25.7
2025-12-25T14:27:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:27:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:27:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.519159
2025-12-25T14:27:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:27:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:27:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:27:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:27:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:27:57.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:27:25', tmtdew=29.31, humidity=14.27, cloud=0.0, wind=32.59, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:27:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:27:57.138 [DEBUG] [Thread-13199] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:27:57.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-25T14:27:57.231 [DEBUG] [Thread-13202] [transport.py] [_log()] starting thread (client mode): 0xb95d7790
2025-12-25T14:27:57.231 [DEBUG] [Thread-13202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:27:57.246 [DEBUG] [Thread-13202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:27:57.246 [INFO] [Thread-13202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] client lang: <none>
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] server lang: <none>
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] kex follows: False
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:27:57.254 [DEBUG] [Thread-13202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:27:57.255 [DEBUG] [Thread-13202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:27:57.255 [DEBUG] [Thread-13202] [transport.py] [_log()] Compression: none
2025-12-25T14:27:57.255 [DEBUG] [Thread-13202] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:27:57.313 [DEBUG] [Thread-13202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:27:57.313 [DEBUG] [Thread-13202] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:27:57.314 [DEBUG] [Thread-13202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:27:57.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:27:57.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:27:57.370 [DEBUG] [Thread-13202] [transport.py] [_log()] userauth is OK
2025-12-25T14:27:57.371 [DEBUG] [Thread-13202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:27:57.371 [DEBUG] [Thread-13202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:27:57.371 [DEBUG] [Thread-13202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:27:57.371 [DEBUG] [Thread-13202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:27:57.390 [INFO] [Thread-13202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:27:57.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-25T14:27:57.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:27:58.218 [DEBUG] [Thread-13202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:27:58.218 [DEBUG] [Thread-13202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:27:58.265 [DEBUG] [Thread-13202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:27:58.265 [DEBUG] [Thread-13202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:27:58.273 [DEBUG] [Thread-13202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:27:58.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:27:58.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:27:58.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:27:58.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:27:58.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:27:58.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:27:58.305 [DEBUG] [Thread-13202] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:28:07.700 [DEBUG] [Thread-13204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:28:09.446 [DEBUG] [Thread-13205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:28:24.484 [DEBUG] [Thread-13206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:28:28.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:28:28.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:28:28.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-25T14:28:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 27, 57), 29.34, 14.37, 0.0, 31.27, 26.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:28:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:27:57
2025-12-25T14:28:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:28:29.281 [DEBUG] [Thread-13207] [transport.py] [_log()] starting thread (client mode): 0xb6b21bd0
2025-12-25T14:28:29.281 [DEBUG] [Thread-13207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:28:29.302 [DEBUG] [Thread-13207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:28:29.302 [INFO] [Thread-13207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:28:29.303 [DEBUG] [Thread-13207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:28:29.303 [DEBUG] [Thread-13207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:28:29.303 [DEBUG] [Thread-13207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] client lang: <none>
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] server lang: <none>
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] kex follows: False
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:28:29.304 [DEBUG] [Thread-13207] [transport.py] [_log()] Compression: none
2025-12-25T14:28:29.305 [DEBUG] [Thread-13207] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:28:29.314 [DEBUG] [Thread-13207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:28:29.315 [DEBUG] [Thread-13207] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:28:29.316 [DEBUG] [Thread-13207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:28:29.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:28:29.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:28:29.318 [DEBUG] [Thread-13207] [transport.py] [_log()] userauth is OK
2025-12-25T14:28:29.319 [DEBUG] [Thread-13207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:28:29.319 [DEBUG] [Thread-13207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:28:29.319 [DEBUG] [Thread-13207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:28:29.319 [DEBUG] [Thread-13207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:28:29.334 [INFO] [Thread-13207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:28:29.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:28:29.944 [DEBUG] [Thread-13207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:28:29.945 [DEBUG] [Thread-13207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:28:29.945 [DEBUG] [Thread-13207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:28:29.985 [DEBUG] [Thread-13207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:28:29.985 [DEBUG] [Thread-13207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:28:29.987 [DEBUG] [Thread-13207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:28:29.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:28:29.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:28:30.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:28:30.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:28:30.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:28:30.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.519506 -999.00  +26.10  33.98     20   +1.80 1 1 2 1 1   888    0 24.65 11.57 ----- 50.6 34.0 300.0 46.3 31.1 -26.5 30.8 -25.8 30.9 -25.0 31.7 -24.2
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:28:30.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.519506
2025-12-25T14:28:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:28:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:28:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:28:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:28:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:28:30.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:27:57', tmtdew=29.34, humidity=14.37, cloud=0.0, wind=31.27, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:28:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:28:30.005 [DEBUG] [Thread-13207] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:28:30.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:28:30.089 [DEBUG] [Thread-13210] [transport.py] [_log()] starting thread (client mode): 0xb9579fc0
2025-12-25T14:28:30.089 [DEBUG] [Thread-13210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:28:30.104 [DEBUG] [Thread-13210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:28:30.104 [INFO] [Thread-13210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] client lang: <none>
2025-12-25T14:28:30.111 [DEBUG] [Thread-13210] [transport.py] [_log()] server lang: <none>
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] kex follows: False
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] Compression: none
2025-12-25T14:28:30.112 [DEBUG] [Thread-13210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:28:30.168 [DEBUG] [Thread-13210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:28:30.168 [DEBUG] [Thread-13210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:28:30.168 [DEBUG] [Thread-13210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:28:30.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:28:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:28:30.225 [DEBUG] [Thread-13210] [transport.py] [_log()] userauth is OK
2025-12-25T14:28:30.225 [DEBUG] [Thread-13210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:28:30.225 [DEBUG] [Thread-13210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:28:30.226 [DEBUG] [Thread-13210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:28:30.226 [DEBUG] [Thread-13210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:28:30.239 [INFO] [Thread-13210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:28:30.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-25T14:28:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:28:31.155 [DEBUG] [Thread-13210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:28:31.155 [DEBUG] [Thread-13210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:28:31.202 [DEBUG] [Thread-13210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:28:31.203 [DEBUG] [Thread-13210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:28:31.211 [DEBUG] [Thread-13210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:28:31.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:28:31.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:28:31.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:28:31.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:28:31.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:28:31.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:28:31.243 [DEBUG] [Thread-13210] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:28:36.806 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:28:36.808 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:28:39.523 [DEBUG] [Thread-13212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:28:54.571 [DEBUG] [Thread-13213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:01.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:29:01.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:29:01.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-25T14:29:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 28, 29), 29.22, 14.48, 0.0, 37.81, 26.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:29:01.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:28:29
2025-12-25T14:29:02.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:29:02.278 [DEBUG] [Thread-13214] [transport.py] [_log()] starting thread (client mode): 0xb6b614b0
2025-12-25T14:29:02.278 [DEBUG] [Thread-13214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:29:02.300 [DEBUG] [Thread-13214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:29:02.300 [INFO] [Thread-13214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] client lang: <none>
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] server lang: <none>
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] kex follows: False
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] Compression: none
2025-12-25T14:29:02.302 [DEBUG] [Thread-13214] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:29:02.310 [DEBUG] [Thread-13214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:29:02.311 [DEBUG] [Thread-13214] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:29:02.311 [DEBUG] [Thread-13214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:29:02.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:29:02.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:29:02.312 [DEBUG] [Thread-13214] [transport.py] [_log()] userauth is OK
2025-12-25T14:29:02.312 [DEBUG] [Thread-13214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:29:02.312 [DEBUG] [Thread-13214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:29:02.312 [DEBUG] [Thread-13214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:29:02.312 [DEBUG] [Thread-13214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:29:02.342 [INFO] [Thread-13214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:29:02.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:29:03.009 [DEBUG] [Thread-13214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:29:03.009 [DEBUG] [Thread-13214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:29:03.009 [DEBUG] [Thread-13214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:29:03.049 [DEBUG] [Thread-13214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:29:03.049 [DEBUG] [Thread-13214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:29:03.052 [DEBUG] [Thread-13214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:29:03.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:29:03.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:29:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:29:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:29:03.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:29:03.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:29:03.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:29:03.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:29:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:29:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.519853 -999.00  +25.70  28.05     21   +1.90 1 1 1 1 1   888    0 24.64 15.16 ----- 26.2 28.1 279.4 51.9 30.9 -27.0 30.6 -27.4 30.6 -27.0 31.5 -25.4
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.519853
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:29:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:28:29', tmtdew=29.22, humidity=14.48, cloud=0.0, wind=37.81, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:28:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:29:03.068 [DEBUG] [Thread-13214] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:29:03.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-25T14:29:03.151 [DEBUG] [Thread-13217] [transport.py] [_log()] starting thread (client mode): 0xb95927a0
2025-12-25T14:29:03.151 [DEBUG] [Thread-13217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:29:03.165 [DEBUG] [Thread-13217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:29:03.165 [INFO] [Thread-13217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:03.172 [DEBUG] [Thread-13217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] client lang: <none>
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] server lang: <none>
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] kex follows: False
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] Compression: none
2025-12-25T14:29:03.173 [DEBUG] [Thread-13217] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:29:03.228 [DEBUG] [Thread-13217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:29:03.228 [DEBUG] [Thread-13217] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:29:03.228 [DEBUG] [Thread-13217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:29:03.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:29:03.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:29:03.285 [DEBUG] [Thread-13217] [transport.py] [_log()] userauth is OK
2025-12-25T14:29:03.285 [DEBUG] [Thread-13217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:29:03.285 [DEBUG] [Thread-13217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:29:03.285 [DEBUG] [Thread-13217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:29:03.285 [DEBUG] [Thread-13217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:29:03.299 [INFO] [Thread-13217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:29:03.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-25T14:29:03.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:29:04.166 [DEBUG] [Thread-13217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:29:04.167 [DEBUG] [Thread-13217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:29:04.219 [DEBUG] [Thread-13217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:29:04.219 [DEBUG] [Thread-13217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:29:04.232 [DEBUG] [Thread-13217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:29:04.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:29: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')
2025-12-25T14:29:04.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:29:04.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:29:04.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:29:04.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:29:04.279 [DEBUG] [Thread-13217] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:29:07.754 [DEBUG] [Thread-13219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:09.605 [DEBUG] [Thread-13220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:24.661 [DEBUG] [Thread-13221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:34.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:29:34.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:29:34.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:29:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 29, 1), 29.46, 14.28, 0.0, 39.66, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:29:35.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:29:01
2025-12-25T14:29:35.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:29:35.335 [DEBUG] [Thread-13222] [transport.py] [_log()] starting thread (client mode): 0xb95931f0
2025-12-25T14:29:35.335 [DEBUG] [Thread-13222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:29:35.348 [DEBUG] [Thread-13222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:29:35.348 [INFO] [Thread-13222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] client lang: <none>
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] server lang: <none>
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] kex follows: False
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] Compression: none
2025-12-25T14:29:35.351 [DEBUG] [Thread-13222] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:29:35.361 [DEBUG] [Thread-13222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:29:35.361 [DEBUG] [Thread-13222] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:29:35.362 [DEBUG] [Thread-13222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:29:35.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:29:35.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:29:35.363 [DEBUG] [Thread-13222] [transport.py] [_log()] userauth is OK
2025-12-25T14:29:35.363 [DEBUG] [Thread-13222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:29:35.363 [DEBUG] [Thread-13222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:29:35.363 [DEBUG] [Thread-13222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:29:35.363 [DEBUG] [Thread-13222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:29:35.377 [INFO] [Thread-13222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:29:35.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:29:36.033 [DEBUG] [Thread-13222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:29:36.034 [DEBUG] [Thread-13222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:29:36.034 [DEBUG] [Thread-13222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:29:36.075 [DEBUG] [Thread-13222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:29:36.075 [DEBUG] [Thread-13222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:29:36.078 [DEBUG] [Thread-13222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:29:36.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:29:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:29:36.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:29:36.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:29:36.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:29:36.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:29:36.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:29:36.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:29:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:29:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.520201 -999.00  +25.80  38.61     21   +1.90 1 1 2 1 1   888    0 23.91 19.84 ----- 35.7 38.6 294.6 40.3 30.9 -26.6 30.6 -26.1 30.8 -22.4 31.5 -24.6
2025-12-25T14:29:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:29:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:29:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.520201
2025-12-25T14:29:36.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:29:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:29:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:29:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:29:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:29:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:29:01', tmtdew=29.46, humidity=14.28, cloud=0.0, wind=39.66, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:29:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:29:36.103 [DEBUG] [Thread-13222] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:29:36.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:29:36.197 [DEBUG] [Thread-13225] [transport.py] [_log()] starting thread (client mode): 0xb6b2a200
2025-12-25T14:29:36.198 [DEBUG] [Thread-13225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:29:36.212 [DEBUG] [Thread-13225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:29:36.212 [INFO] [Thread-13225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:29:36.219 [DEBUG] [Thread-13225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:29:36.219 [DEBUG] [Thread-13225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:29:36.219 [DEBUG] [Thread-13225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] client lang: <none>
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] server lang: <none>
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] kex follows: False
2025-12-25T14:29:36.220 [DEBUG] [Thread-13225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:29:36.221 [DEBUG] [Thread-13225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:29:36.221 [DEBUG] [Thread-13225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:29:36.221 [DEBUG] [Thread-13225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:29:36.221 [DEBUG] [Thread-13225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:29:36.221 [DEBUG] [Thread-13225] [transport.py] [_log()] Compression: none
2025-12-25T14:29:36.221 [DEBUG] [Thread-13225] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:29:36.278 [DEBUG] [Thread-13225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:29:36.278 [DEBUG] [Thread-13225] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:29:36.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:29:36.280 [DEBUG] [Thread-13225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:29:36.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:29:36.338 [DEBUG] [Thread-13225] [transport.py] [_log()] userauth is OK
2025-12-25T14:29:36.338 [DEBUG] [Thread-13225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:29:36.338 [DEBUG] [Thread-13225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:29:36.339 [DEBUG] [Thread-13225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:29:36.339 [DEBUG] [Thread-13225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:29:36.357 [INFO] [Thread-13225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:29:36.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-25T14:29:36.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:29:36.947 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:36.948 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:37.146 [DEBUG] [Thread-13225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:29:37.147 [DEBUG] [Thread-13225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:29:37.195 [DEBUG] [Thread-13225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:29:37.195 [DEBUG] [Thread-13225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:29:37.204 [DEBUG] [Thread-13225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:29:37.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:29:37.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-25T14:29:37.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-25T14:29:37.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:29:37.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:29:37.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:29:37.246 [DEBUG] [Thread-13225] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:29:39.690 [DEBUG] [Thread-13227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:29:54.745 [DEBUG] [Thread-13228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:30:07.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:30:07.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-25T14:30:07.804 [DEBUG] [Thread-13229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 29, 33), 30.51, 13.5, 0.0, 41.0, 28.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:30:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:29:33
2025-12-25T14:30:08.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:30:08.333 [DEBUG] [Thread-13230] [transport.py] [_log()] starting thread (client mode): 0xb6b215a0
2025-12-25T14:30:08.334 [DEBUG] [Thread-13230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:30:08.352 [DEBUG] [Thread-13230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:30:08.353 [INFO] [Thread-13230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:30:08.355 [DEBUG] [Thread-13230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] client lang: <none>
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] server lang: <none>
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] kex follows: False
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] Compression: none
2025-12-25T14:30:08.356 [DEBUG] [Thread-13230] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:30:08.364 [DEBUG] [Thread-13230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:30:08.364 [DEBUG] [Thread-13230] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:30:08.364 [DEBUG] [Thread-13230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:30:08.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:30:08.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:30:08.365 [DEBUG] [Thread-13230] [transport.py] [_log()] userauth is OK
2025-12-25T14:30:08.365 [DEBUG] [Thread-13230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:30:08.365 [DEBUG] [Thread-13230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:30:08.365 [DEBUG] [Thread-13230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:30:08.365 [DEBUG] [Thread-13230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:30:08.379 [INFO] [Thread-13230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:30:08.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:30:09.007 [DEBUG] [Thread-13230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:30:09.008 [DEBUG] [Thread-13230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:30:09.008 [DEBUG] [Thread-13230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:30:09.049 [DEBUG] [Thread-13230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:30:09.049 [DEBUG] [Thread-13230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:30:09.051 [DEBUG] [Thread-13230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:30:09.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:30:09.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:30:09.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:30:09.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:30:09.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:30:09.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:30:09.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:30:09.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:30:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:30:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.520547 -999.00  +26.20  38.87     20   +1.90 1 1 2 1 1   888    0 24.25 21.43 ----- 36.5 38.9 294.8 46.8 30.9 -26.7 30.6 -26.0 30.8 -25.5 31.5 -24.3
2025-12-25T14:30:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:30:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:30:09.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.520547
2025-12-25T14:30:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:30:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:30:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:30:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:30:09.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:30:09.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:29:33', tmtdew=30.51, humidity=13.5, cloud=0.0, wind=41.0, temperature=28.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:29:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:30:09.077 [DEBUG] [Thread-13230] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:30:09.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-25T14:30:09.171 [DEBUG] [Thread-13233] [transport.py] [_log()] starting thread (client mode): 0xb6b61ae0
2025-12-25T14:30:09.172 [DEBUG] [Thread-13233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:30:09.186 [DEBUG] [Thread-13233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:30:09.186 [INFO] [Thread-13233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:30:09.193 [DEBUG] [Thread-13233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] client lang: <none>
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] server lang: <none>
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] kex follows: False
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] Compression: none
2025-12-25T14:30:09.194 [DEBUG] [Thread-13233] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:30:09.254 [DEBUG] [Thread-13233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:30:09.255 [DEBUG] [Thread-13233] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:30:09.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:30:09.256 [DEBUG] [Thread-13233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:30:09.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:30:09.310 [DEBUG] [Thread-13233] [transport.py] [_log()] userauth is OK
2025-12-25T14:30:09.310 [DEBUG] [Thread-13233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:30:09.311 [DEBUG] [Thread-13233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:30:09.311 [DEBUG] [Thread-13233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:30:09.311 [DEBUG] [Thread-13233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:30:09.329 [INFO] [Thread-13233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:30:09.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-25T14:30:09.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:30:09.777 [DEBUG] [Thread-13235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:10.151 [DEBUG] [Thread-13233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:30:10.151 [DEBUG] [Thread-13233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:30:10.199 [DEBUG] [Thread-13233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:30:10.199 [DEBUG] [Thread-13233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:30:10.209 [DEBUG] [Thread-13233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:30:10.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:30:10.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:30:10.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:30:10.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:30:10.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:30:10.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:30:10.246 [DEBUG] [Thread-13233] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:30:24.838 [DEBUG] [Thread-13236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:37.088 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:37.089 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:39.872 [DEBUG] [Thread-13237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:30:40.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:30:40.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:30:40.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-25T14:30:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 30, 37), 29.12, 14.77, 0.0, 31.04, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:30:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:30:37
2025-12-25T14:30:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:30:41.226 [DEBUG] [Thread-13238] [transport.py] [_log()] starting thread (client mode): 0xb957a5f0
2025-12-25T14:30:41.226 [DEBUG] [Thread-13238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:30:41.246 [DEBUG] [Thread-13238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:30:41.247 [INFO] [Thread-13238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] client lang: <none>
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] server lang: <none>
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] kex follows: False
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] Compression: none
2025-12-25T14:30:41.250 [DEBUG] [Thread-13238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:30:41.268 [DEBUG] [Thread-13238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:30:41.268 [DEBUG] [Thread-13238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:30:41.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:30:41.269 [DEBUG] [Thread-13238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:30:41.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:30:41.271 [DEBUG] [Thread-13238] [transport.py] [_log()] userauth is OK
2025-12-25T14:30:41.271 [DEBUG] [Thread-13238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:30:41.271 [DEBUG] [Thread-13238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:30:41.271 [DEBUG] [Thread-13238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:30:41.271 [DEBUG] [Thread-13238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:30:41.288 [INFO] [Thread-13238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:30:41.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:30:41.888 [DEBUG] [Thread-13238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:30:41.888 [DEBUG] [Thread-13238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:30:41.889 [DEBUG] [Thread-13238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:30:41.929 [DEBUG] [Thread-13238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:30:41.929 [DEBUG] [Thread-13238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:30:41.932 [DEBUG] [Thread-13238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:30:41.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:30:41.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:30:41.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:30:41.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:30:41.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:30:41.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:30:41.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:30:41.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:30:41.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:30:41.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.521242 -999.00  +26.00  34.39     20   +1.80 1 1 2 1 1   888    0 24.61 24.27 ----- 32.0 34.4 299.0 40.4 30.9 -26.8 30.5 -26.6 30.6 -23.7 31.4 -24.0
2025-12-25T14:30:41.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:30:41.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:30:41.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.521242
2025-12-25T14:30:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:30:41.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:30:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:30:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:30:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:30:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:30:37', tmtdew=29.12, humidity=14.77, cloud=0.0, wind=31.04, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:30:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:30:41.952 [DEBUG] [Thread-13238] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:30:42.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-25T14:30:42.049 [DEBUG] [Thread-13241] [transport.py] [_log()] starting thread (client mode): 0xb95d7a60
2025-12-25T14:30:42.049 [DEBUG] [Thread-13241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:30:42.063 [DEBUG] [Thread-13241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:30:42.064 [INFO] [Thread-13241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] client lang: <none>
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] server lang: <none>
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] kex follows: False
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:30:42.071 [DEBUG] [Thread-13241] [transport.py] [_log()] Compression: none
2025-12-25T14:30:42.072 [DEBUG] [Thread-13241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:30:42.128 [DEBUG] [Thread-13241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:30:42.128 [DEBUG] [Thread-13241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:30:42.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:30:42.129 [DEBUG] [Thread-13241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:30:42.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:30:42.185 [DEBUG] [Thread-13241] [transport.py] [_log()] userauth is OK
2025-12-25T14:30:42.185 [DEBUG] [Thread-13241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:30:42.185 [DEBUG] [Thread-13241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:30:42.185 [DEBUG] [Thread-13241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:30:42.185 [DEBUG] [Thread-13241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:30:42.203 [INFO] [Thread-13241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:30:42.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:30:42.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:30:43.048 [DEBUG] [Thread-13241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:30:43.049 [DEBUG] [Thread-13241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:30:43.096 [DEBUG] [Thread-13241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:30:43.096 [DEBUG] [Thread-13241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:30:43.104 [DEBUG] [Thread-13241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:30:43.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:30:43.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:30:43.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-25T14:30:43.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:30:43.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:30:43.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:30:43.136 [DEBUG] [Thread-13241] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:30:54.899 [DEBUG] [Thread-13243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:07.859 [DEBUG] [Thread-13244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:09.951 [DEBUG] [Thread-13245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:13.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:31:13.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:31:13.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-25T14:31:13.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 31, 9), 28.97, 14.92, 0.0, 29.96, 26.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:31:13.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:31:09
2025-12-25T14:31:13.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:31:14.140 [DEBUG] [Thread-13246] [transport.py] [_log()] starting thread (client mode): 0xb6b61900
2025-12-25T14:31:14.140 [DEBUG] [Thread-13246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:31:14.159 [DEBUG] [Thread-13246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:31:14.159 [INFO] [Thread-13246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] client lang: <none>
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] server lang: <none>
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] kex follows: False
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] Compression: none
2025-12-25T14:31:14.163 [DEBUG] [Thread-13246] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:31:14.178 [DEBUG] [Thread-13246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:31:14.178 [DEBUG] [Thread-13246] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:31:14.179 [DEBUG] [Thread-13246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:31:14.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:31:14.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:31:14.181 [DEBUG] [Thread-13246] [transport.py] [_log()] userauth is OK
2025-12-25T14:31:14.181 [DEBUG] [Thread-13246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:31:14.181 [DEBUG] [Thread-13246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:31:14.181 [DEBUG] [Thread-13246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:31:14.181 [DEBUG] [Thread-13246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:31:14.204 [INFO] [Thread-13246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:31:14.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:31:14.761 [DEBUG] [Thread-13246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:31:14.761 [DEBUG] [Thread-13246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:31:14.762 [DEBUG] [Thread-13246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:31:14.802 [DEBUG] [Thread-13246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:31:14.802 [DEBUG] [Thread-13246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:31:14.804 [DEBUG] [Thread-13246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:31:14.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:31:14.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:31:14.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:31:14.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:31:14.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:31:14.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:31:14.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:31:14.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:31:14.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:31:14.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.521589 -999.00  +26.10  33.95     20   +1.80 1 1 2 1 1   888    0 24.89 22.63 ----- 24.8 34.0 309.0 40.0 30.9 -26.5 30.5 -25.7 30.9 -23.3 31.4 -24.1
2025-12-25T14:31:14.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:31:14.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:31:14.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.521589
2025-12-25T14:31:14.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:31:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:31:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:31:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:31:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:31:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:31:09', tmtdew=28.97, humidity=14.92, cloud=0.0, wind=29.96, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:31:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:31:14.823 [DEBUG] [Thread-13246] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:31:14.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-25T14:31:14.917 [DEBUG] [Thread-13249] [transport.py] [_log()] starting thread (client mode): 0xb6b625f0
2025-12-25T14:31:14.917 [DEBUG] [Thread-13249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:31:14.932 [DEBUG] [Thread-13249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:31:14.932 [INFO] [Thread-13249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:31:14.939 [DEBUG] [Thread-13249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:31:14.939 [DEBUG] [Thread-13249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:31:14.939 [DEBUG] [Thread-13249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] client lang: <none>
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] server lang: <none>
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] kex follows: False
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] Compression: none
2025-12-25T14:31:14.940 [DEBUG] [Thread-13249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:31:14.998 [DEBUG] [Thread-13249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:31:14.998 [DEBUG] [Thread-13249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:31:14.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:31:14.999 [DEBUG] [Thread-13249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:31:15.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:31:15.054 [DEBUG] [Thread-13249] [transport.py] [_log()] userauth is OK
2025-12-25T14:31:15.054 [DEBUG] [Thread-13249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:31:15.054 [DEBUG] [Thread-13249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:31:15.054 [DEBUG] [Thread-13249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:31:15.054 [DEBUG] [Thread-13249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:31:15.072 [INFO] [Thread-13249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:31:15.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-25T14:31:15.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:31:15.887 [DEBUG] [Thread-13249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:31:15.887 [DEBUG] [Thread-13249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:31:15.935 [DEBUG] [Thread-13249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:31:15.935 [DEBUG] [Thread-13249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:31:15.944 [DEBUG] [Thread-13249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:31:15.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:31:15.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-25T14:31:15.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-25T14:31:15.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:31:15.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:31:15.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:31:15.980 [DEBUG] [Thread-13249] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:31:24.982 [DEBUG] [Thread-13251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:37.229 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:37.230 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:40.034 [DEBUG] [Thread-13252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:31:46.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:31:46.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:31:46.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-25T14:31:46.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 31, 41), 29.02, 14.72, 0.0, 28.97, 26.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:31:46.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:31:41
2025-12-25T14:31:46.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:31:46.986 [DEBUG] [Thread-13253] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T14:31:46.986 [DEBUG] [Thread-13253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:31:47.001 [DEBUG] [Thread-13253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:31:47.001 [INFO] [Thread-13253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:31:47.003 [DEBUG] [Thread-13253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] client lang: <none>
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] server lang: <none>
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] kex follows: False
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:31:47.004 [DEBUG] [Thread-13253] [transport.py] [_log()] Compression: none
2025-12-25T14:31:47.005 [DEBUG] [Thread-13253] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:31:47.019 [DEBUG] [Thread-13253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:31:47.020 [DEBUG] [Thread-13253] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:31:47.020 [DEBUG] [Thread-13253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:31:47.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:31:47.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:31:47.022 [DEBUG] [Thread-13253] [transport.py] [_log()] userauth is OK
2025-12-25T14:31:47.022 [DEBUG] [Thread-13253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:31:47.022 [DEBUG] [Thread-13253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:31:47.022 [DEBUG] [Thread-13253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:31:47.022 [DEBUG] [Thread-13253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:31:47.041 [INFO] [Thread-13253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:31:47.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:31:47.624 [DEBUG] [Thread-13253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:31:47.624 [DEBUG] [Thread-13253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:31:47.625 [DEBUG] [Thread-13253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:31:47.665 [DEBUG] [Thread-13253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:31:47.665 [DEBUG] [Thread-13253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:31:47.669 [DEBUG] [Thread-13253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:31:47.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:31:47.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:31:47.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:31:47.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:31:47.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:31:47.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:31:47.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:31:47.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:31:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:31:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.521937 -999.00  +26.10  25.31     20   +1.90 1 1 1 1 1   888    0 24.45 18.60 ----- 18.6 25.3 307.6 29.2 31.0 -25.7 30.6 -26.3 31.0 -23.3 31.6 -24.3
2025-12-25T14:31:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:31:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:31:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.521937
2025-12-25T14:31:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:31:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:31:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:31:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:31:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:31:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:31:41', tmtdew=29.02, humidity=14.72, cloud=0.0, wind=28.97, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:31:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:31:47.694 [DEBUG] [Thread-13253] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:31:47.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:31:47.798 [DEBUG] [Thread-13256] [transport.py] [_log()] starting thread (client mode): 0xb6b2a800
2025-12-25T14:31:47.798 [DEBUG] [Thread-13256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:31:47.813 [DEBUG] [Thread-13256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:31:47.813 [INFO] [Thread-13256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:31:47.820 [DEBUG] [Thread-13256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] client lang: <none>
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] server lang: <none>
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] kex follows: False
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:31:47.821 [DEBUG] [Thread-13256] [transport.py] [_log()] Compression: none
2025-12-25T14:31:47.822 [DEBUG] [Thread-13256] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:31:47.877 [DEBUG] [Thread-13256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:31:47.877 [DEBUG] [Thread-13256] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:31:47.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:31:47.878 [DEBUG] [Thread-13256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:31:47.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:31:47.933 [DEBUG] [Thread-13256] [transport.py] [_log()] userauth is OK
2025-12-25T14:31:47.933 [DEBUG] [Thread-13256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:31:47.933 [DEBUG] [Thread-13256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:31:47.933 [DEBUG] [Thread-13256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:31:47.933 [DEBUG] [Thread-13256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:31:47.947 [INFO] [Thread-13256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:31:47.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:31:47.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:31:48.801 [DEBUG] [Thread-13256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:31:48.801 [DEBUG] [Thread-13256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:31:48.849 [DEBUG] [Thread-13256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:31:48.850 [DEBUG] [Thread-13256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:31:48.859 [DEBUG] [Thread-13256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:31:48.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:31:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:31:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:31:48.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:31:48.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:31:48.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:31:48.895 [DEBUG] [Thread-13256] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:31:55.069 [DEBUG] [Thread-13258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:07.897 [DEBUG] [Thread-13259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:10.117 [DEBUG] [Thread-13260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:32:18.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:32:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:32:19.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 32, 13), 29.32, 14.47, 0.0, 32.06, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:32:19.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:32:13
2025-12-25T14:32:19.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:32:19.872 [DEBUG] [Thread-13261] [transport.py] [_log()] starting thread (client mode): 0xb9559930
2025-12-25T14:32:19.872 [DEBUG] [Thread-13261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:32:19.893 [DEBUG] [Thread-13261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:32:19.893 [INFO] [Thread-13261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] client lang: <none>
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] server lang: <none>
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] kex follows: False
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] Compression: none
2025-12-25T14:32:19.896 [DEBUG] [Thread-13261] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:32:19.914 [DEBUG] [Thread-13261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:32:19.914 [DEBUG] [Thread-13261] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:32:19.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:32:19.915 [DEBUG] [Thread-13261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:32:19.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:32:19.917 [DEBUG] [Thread-13261] [transport.py] [_log()] userauth is OK
2025-12-25T14:32:19.918 [DEBUG] [Thread-13261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:32:19.918 [DEBUG] [Thread-13261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:32:19.918 [DEBUG] [Thread-13261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:32:19.918 [DEBUG] [Thread-13261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:32:19.936 [INFO] [Thread-13261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:32:19.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:32:20.519 [DEBUG] [Thread-13261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:32:20.520 [DEBUG] [Thread-13261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:32:20.520 [DEBUG] [Thread-13261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:32:20.560 [DEBUG] [Thread-13261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:32:20.561 [DEBUG] [Thread-13261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:32:20.563 [DEBUG] [Thread-13261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:32:20.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:32:20.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:32:20.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:32:20.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:32:20.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:32:20.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:32:20.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:32:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:32:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:32:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.522284 -999.00  +25.90  42.86     20   +1.70 1 1 2 1 1   888    0 24.48 17.25 ----- 41.0 42.9 297.8 62.4 30.9 -28.1 30.6 -27.2 31.0 -25.7 31.4 -24.6
2025-12-25T14:32:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:32:20.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:32:20.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.522284
2025-12-25T14:32:20.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:32:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:32:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:32:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:32:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:32:20.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:32:13', tmtdew=29.32, humidity=14.47, cloud=0.0, wind=32.06, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:32:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:32:20.587 [DEBUG] [Thread-13261] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:32:20.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-25T14:32:20.677 [DEBUG] [Thread-13264] [transport.py] [_log()] starting thread (client mode): 0xb6b28d00
2025-12-25T14:32:20.677 [DEBUG] [Thread-13264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:32:20.692 [DEBUG] [Thread-13264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:32:20.692 [INFO] [Thread-13264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] client lang: <none>
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] server lang: <none>
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] kex follows: False
2025-12-25T14:32:20.700 [DEBUG] [Thread-13264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:32:20.701 [DEBUG] [Thread-13264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:32:20.701 [DEBUG] [Thread-13264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:32:20.701 [DEBUG] [Thread-13264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:32:20.701 [DEBUG] [Thread-13264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:32:20.701 [DEBUG] [Thread-13264] [transport.py] [_log()] Compression: none
2025-12-25T14:32:20.701 [DEBUG] [Thread-13264] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:32:20.757 [DEBUG] [Thread-13264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:32:20.757 [DEBUG] [Thread-13264] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:32:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:32:20.758 [DEBUG] [Thread-13264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:32:20.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:32:20.813 [DEBUG] [Thread-13264] [transport.py] [_log()] userauth is OK
2025-12-25T14:32:20.813 [DEBUG] [Thread-13264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:32:20.814 [DEBUG] [Thread-13264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:32:20.814 [DEBUG] [Thread-13264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:32:20.814 [DEBUG] [Thread-13264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:32:20.832 [INFO] [Thread-13264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:32:20.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-25T14:32:20.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:32:21.662 [DEBUG] [Thread-13264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:32:21.662 [DEBUG] [Thread-13264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:32:21.709 [DEBUG] [Thread-13264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:32:21.709 [DEBUG] [Thread-13264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:32:21.720 [DEBUG] [Thread-13264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:32:21.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:32:21.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:32:21.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:32:21.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:32:21.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:32:21.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:32:21.754 [DEBUG] [Thread-13264] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:32:25.155 [DEBUG] [Thread-13266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:37.369 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:37.370 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:40.203 [DEBUG] [Thread-13267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:32:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:32:51.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:32:51.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:32:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 32, 45), 29.27, 14.65, 0.0, 39.12, 26.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:32:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:32:45
2025-12-25T14:32:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:32:52.737 [DEBUG] [Thread-13268] [transport.py] [_log()] starting thread (client mode): 0xb6b029e0
2025-12-25T14:32:52.737 [DEBUG] [Thread-13268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:32:52.756 [DEBUG] [Thread-13268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:32:52.757 [INFO] [Thread-13268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] client lang: <none>
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] server lang: <none>
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] kex follows: False
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] Compression: none
2025-12-25T14:32:52.760 [DEBUG] [Thread-13268] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:32:52.776 [DEBUG] [Thread-13268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:32:52.777 [DEBUG] [Thread-13268] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:32:52.777 [DEBUG] [Thread-13268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:32:52.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:32:52.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:32:52.779 [DEBUG] [Thread-13268] [transport.py] [_log()] userauth is OK
2025-12-25T14:32:52.779 [DEBUG] [Thread-13268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:32:52.779 [DEBUG] [Thread-13268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:32:52.780 [DEBUG] [Thread-13268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:32:52.780 [DEBUG] [Thread-13268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:32:52.797 [INFO] [Thread-13268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:32:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:32:53.424 [DEBUG] [Thread-13268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:32:53.425 [DEBUG] [Thread-13268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:32:53.425 [DEBUG] [Thread-13268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:32:53.466 [DEBUG] [Thread-13268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:32:53.466 [DEBUG] [Thread-13268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:32:53.470 [DEBUG] [Thread-13268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:32:53.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:32:53.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:32:53.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:32:53.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:32:53.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:32:53.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:32:53.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:32:53.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:32:53.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:32:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.522631 -999.00  +25.50  37.28     20   +1.30 1 1 2 1 1   888    0 24.34 16.40 ----- 28.8 37.3 287.0 49.3 30.7 -27.0 30.4 -27.6 30.7 -27.5 31.3 -24.8
2025-12-25T14:32:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:32:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:32:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.522631
2025-12-25T14:32:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:32:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:32:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:32:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:32:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:32:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:32:45', tmtdew=29.27, humidity=14.65, cloud=0.0, wind=39.12, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:32:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:32:53.496 [DEBUG] [Thread-13268] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:32:53.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-25T14:32:53.589 [DEBUG] [Thread-13271] [transport.py] [_log()] starting thread (client mode): 0xb9593910
2025-12-25T14:32:53.589 [DEBUG] [Thread-13271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:32:53.604 [DEBUG] [Thread-13271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:32:53.604 [INFO] [Thread-13271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:32:53.611 [DEBUG] [Thread-13271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:32:53.611 [DEBUG] [Thread-13271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:32:53.611 [DEBUG] [Thread-13271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] client lang: <none>
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] server lang: <none>
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] kex follows: False
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] Compression: none
2025-12-25T14:32:53.612 [DEBUG] [Thread-13271] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:32:53.673 [DEBUG] [Thread-13271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:32:53.674 [DEBUG] [Thread-13271] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:32:53.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:32:53.675 [DEBUG] [Thread-13271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:32:53.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:32:53.729 [DEBUG] [Thread-13271] [transport.py] [_log()] userauth is OK
2025-12-25T14:32:53.729 [DEBUG] [Thread-13271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:32:53.729 [DEBUG] [Thread-13271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:32:53.729 [DEBUG] [Thread-13271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:32:53.729 [DEBUG] [Thread-13271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:32:53.751 [INFO] [Thread-13271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:32:53.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:32:53.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:32:54.604 [DEBUG] [Thread-13271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:32:54.604 [DEBUG] [Thread-13271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:32:54.652 [DEBUG] [Thread-13271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:32:54.652 [DEBUG] [Thread-13271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:32:54.662 [DEBUG] [Thread-13271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:32:54.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:32:54.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:32:54.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:32:54.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:32:54.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:32:54.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:32:54.698 [DEBUG] [Thread-13271] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:32:55.230 [DEBUG] [Thread-13273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:07.951 [DEBUG] [Thread-13274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:10.281 [DEBUG] [Thread-13275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:24.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:33:24.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:33:24.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-25T14:33:25.314 [DEBUG] [Thread-13276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:25.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 33, 17), 29.35, 14.57, 0.0, 38.57, 26.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:33:25.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:33:17
2025-12-25T14:33:25.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:33:25.660 [DEBUG] [Thread-13277] [transport.py] [_log()] starting thread (client mode): 0xb6b299c0
2025-12-25T14:33:25.660 [DEBUG] [Thread-13277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:33:25.670 [DEBUG] [Thread-13277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:33:25.670 [INFO] [Thread-13277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] client lang: <none>
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] server lang: <none>
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] kex follows: False
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] Compression: none
2025-12-25T14:33:25.673 [DEBUG] [Thread-13277] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:33:25.692 [DEBUG] [Thread-13277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:33:25.693 [DEBUG] [Thread-13277] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:33:25.693 [DEBUG] [Thread-13277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:33:25.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:33:25.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:33:25.697 [DEBUG] [Thread-13277] [transport.py] [_log()] userauth is OK
2025-12-25T14:33:25.697 [DEBUG] [Thread-13277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:33:25.697 [DEBUG] [Thread-13277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:33:25.697 [DEBUG] [Thread-13277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:33:25.697 [DEBUG] [Thread-13277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:33:25.717 [INFO] [Thread-13277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:33:25.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:33:26.272 [DEBUG] [Thread-13277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:33:26.272 [DEBUG] [Thread-13277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:33:26.273 [DEBUG] [Thread-13277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:33:26.313 [DEBUG] [Thread-13277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:33:26.313 [DEBUG] [Thread-13277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:33:26.317 [DEBUG] [Thread-13277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:33:26.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:33:26.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:33:26.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:33:26.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:33:26.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:33:26.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:33:26.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:33:26.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:33:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:33:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.522978 -999.00  +25.20  44.78     21   +1.40 1 1 2 1 1   888    0 24.35 14.33 ----- 33.9 44.8 293.2 51.1 30.6 -27.6 30.4 -26.6 30.6 -25.4 31.1 -24.9
2025-12-25T14:33:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:33:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:33:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.522978
2025-12-25T14:33:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:33:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:33:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:33:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:33:26.337 [DEBUG] [Thread-13277] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:33:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:33:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:33:17', tmtdew=29.35, humidity=14.57, cloud=0.0, wind=38.57, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:33:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:33:26.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-25T14:33:26.427 [DEBUG] [Thread-13280] [transport.py] [_log()] starting thread (client mode): 0xb957b730
2025-12-25T14:33:26.427 [DEBUG] [Thread-13280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:33:26.441 [DEBUG] [Thread-13280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:33:26.442 [INFO] [Thread-13280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:33:26.449 [DEBUG] [Thread-13280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:33:26.449 [DEBUG] [Thread-13280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:33:26.449 [DEBUG] [Thread-13280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:33:26.449 [DEBUG] [Thread-13280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:26.449 [DEBUG] [Thread-13280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] client lang: <none>
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] server lang: <none>
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] kex follows: False
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] Compression: none
2025-12-25T14:33:26.450 [DEBUG] [Thread-13280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:33:26.510 [DEBUG] [Thread-13280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:33:26.510 [DEBUG] [Thread-13280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:33:26.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:33:26.511 [DEBUG] [Thread-13280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:33:26.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:33:26.565 [DEBUG] [Thread-13280] [transport.py] [_log()] userauth is OK
2025-12-25T14:33:26.565 [DEBUG] [Thread-13280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:33:26.566 [DEBUG] [Thread-13280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:33:26.566 [DEBUG] [Thread-13280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:33:26.566 [DEBUG] [Thread-13280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:33:26.588 [INFO] [Thread-13280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:33:26.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:33:26.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:33:27.444 [DEBUG] [Thread-13280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:33:27.444 [DEBUG] [Thread-13280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:33:27.492 [DEBUG] [Thread-13280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:33:27.492 [DEBUG] [Thread-13280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:33:27.501 [DEBUG] [Thread-13280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:33:27.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:33: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')
2025-12-25T14:33:27.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:33:27.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:33:27.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:33:27.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:33:27.537 [DEBUG] [Thread-13280] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:33:37.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:37.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:40.348 [DEBUG] [Thread-13282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:55.408 [DEBUG] [Thread-13283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:33:57.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:33:57.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:33:57.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-25T14:33:58.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 33, 49), 29.36, 14.52, 0.0, 35.29, 26.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:33:58.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:33:49
2025-12-25T14:33:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:33:58.544 [DEBUG] [Thread-13284] [transport.py] [_log()] starting thread (client mode): 0xb9578460
2025-12-25T14:33:58.544 [DEBUG] [Thread-13284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:33:58.563 [DEBUG] [Thread-13284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:33:58.563 [INFO] [Thread-13284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] client lang: <none>
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] server lang: <none>
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] kex follows: False
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] Compression: none
2025-12-25T14:33:58.565 [DEBUG] [Thread-13284] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:33:58.578 [DEBUG] [Thread-13284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:33:58.579 [DEBUG] [Thread-13284] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:33:58.579 [DEBUG] [Thread-13284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:33:58.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:33:58.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:33:58.580 [DEBUG] [Thread-13284] [transport.py] [_log()] userauth is OK
2025-12-25T14:33:58.580 [DEBUG] [Thread-13284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:33:58.580 [DEBUG] [Thread-13284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:33:58.580 [DEBUG] [Thread-13284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:33:58.580 [DEBUG] [Thread-13284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:33:58.589 [INFO] [Thread-13284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:33:58.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:33:59.158 [DEBUG] [Thread-13284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:33:59.158 [DEBUG] [Thread-13284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:33:59.158 [DEBUG] [Thread-13284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:33:59.199 [DEBUG] [Thread-13284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:33:59.199 [DEBUG] [Thread-13284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:33:59.201 [DEBUG] [Thread-13284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:33:59.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:33:59.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:33:59.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:33:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:33:59.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:33:59.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:33:59.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.523325 -999.00  +25.70  42.90     20   +1.60 1 1 2 1 1   888    0 24.14 13.29 ----- 38.3 42.9 306.6 46.4 30.7 -25.3 30.2 -26.4 30.5 -24.5 31.2 -24.8
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.523325
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:33:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:33:49', tmtdew=29.36, humidity=14.52, cloud=0.0, wind=35.29, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:33:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:33:59.212 [DEBUG] [Thread-13284] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:33:59.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-25T14:33:59.296 [DEBUG] [Thread-13287] [transport.py] [_log()] starting thread (client mode): 0xb9546bc0
2025-12-25T14:33:59.296 [DEBUG] [Thread-13287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:33:59.310 [DEBUG] [Thread-13287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:33:59.310 [INFO] [Thread-13287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:33:59.317 [DEBUG] [Thread-13287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] client lang: <none>
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] server lang: <none>
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] kex follows: False
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] Compression: none
2025-12-25T14:33:59.318 [DEBUG] [Thread-13287] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:33:59.376 [DEBUG] [Thread-13287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:33:59.376 [DEBUG] [Thread-13287] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:33:59.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:33:59.376 [DEBUG] [Thread-13287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:33:59.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:33:59.433 [DEBUG] [Thread-13287] [transport.py] [_log()] userauth is OK
2025-12-25T14:33:59.433 [DEBUG] [Thread-13287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:33:59.433 [DEBUG] [Thread-13287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:33:59.433 [DEBUG] [Thread-13287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:33:59.433 [DEBUG] [Thread-13287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:33:59.447 [INFO] [Thread-13287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:33:59.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-25T14:33:59.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:34:00.295 [DEBUG] [Thread-13287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:34:00.295 [DEBUG] [Thread-13287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:34:00.343 [DEBUG] [Thread-13287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:34:00.343 [DEBUG] [Thread-13287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:34:00.351 [DEBUG] [Thread-13287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:34:00.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:34:00.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-25T14:34:00.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-25T14:34:00.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:34:00.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:34:00.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:34:00.383 [DEBUG] [Thread-13287] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:34:08.004 [DEBUG] [Thread-13289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:34:10.441 [DEBUG] [Thread-13290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:34:25.495 [DEBUG] [Thread-13291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:34:30.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:34:30.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:34:30.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-25T14:34:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 34, 22), 29.29, 14.59, 0.0, 33.77, 26.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:34:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:34:22
2025-12-25T14:34:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:34:31.391 [DEBUG] [Thread-13292] [transport.py] [_log()] starting thread (client mode): 0xb6b2a1d0
2025-12-25T14:34:31.391 [DEBUG] [Thread-13292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:34:31.402 [DEBUG] [Thread-13292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:34:31.402 [INFO] [Thread-13292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:34:31.403 [DEBUG] [Thread-13292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] client lang: <none>
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] server lang: <none>
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] kex follows: False
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] Compression: none
2025-12-25T14:34:31.404 [DEBUG] [Thread-13292] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:34:31.412 [DEBUG] [Thread-13292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:34:31.412 [DEBUG] [Thread-13292] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:34:31.412 [DEBUG] [Thread-13292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:34:31.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:34:31.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:34:31.413 [DEBUG] [Thread-13292] [transport.py] [_log()] userauth is OK
2025-12-25T14:34:31.414 [DEBUG] [Thread-13292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:34:31.414 [DEBUG] [Thread-13292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:34:31.414 [DEBUG] [Thread-13292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:34:31.414 [DEBUG] [Thread-13292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:34:31.426 [INFO] [Thread-13292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:34:31.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:34:31.985 [DEBUG] [Thread-13292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:34:31.985 [DEBUG] [Thread-13292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:34:31.986 [DEBUG] [Thread-13292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:34:32.026 [DEBUG] [Thread-13292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:34:32.027 [DEBUG] [Thread-13292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:34:32.029 [DEBUG] [Thread-13292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:34:32.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:34:32.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:34:32.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:34:32.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:34:32.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:34:32.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:34:32.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:34:32.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:34:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:34:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.523673 -999.00  +26.20  37.30     20   +1.80 1 1 2 1 1   888    0 24.49 16.21 ----- 29.6 37.3 309.4 48.6 30.7 -25.2 30.3 -25.1 30.6 -22.7 31.3 -23.5
2025-12-25T14:34:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:34:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:34:32.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.523673
2025-12-25T14:34:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:34:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:34:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:34:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:34:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:34:32.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:34:22', tmtdew=29.29, humidity=14.59, cloud=0.0, wind=33.77, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:34:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:34:32.057 [DEBUG] [Thread-13292] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:34:32.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-25T14:34:32.151 [DEBUG] [Thread-13295] [transport.py] [_log()] starting thread (client mode): 0xb6b2a710
2025-12-25T14:34:32.152 [DEBUG] [Thread-13295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:34:32.167 [DEBUG] [Thread-13295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:34:32.167 [INFO] [Thread-13295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:34:32.174 [DEBUG] [Thread-13295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] client lang: <none>
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] server lang: <none>
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] kex follows: False
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:34:32.175 [DEBUG] [Thread-13295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:34:32.176 [DEBUG] [Thread-13295] [transport.py] [_log()] Compression: none
2025-12-25T14:34:32.176 [DEBUG] [Thread-13295] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:34:32.234 [DEBUG] [Thread-13295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:34:32.235 [DEBUG] [Thread-13295] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:34:32.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:34:32.236 [DEBUG] [Thread-13295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:34:32.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:34:32.290 [DEBUG] [Thread-13295] [transport.py] [_log()] userauth is OK
2025-12-25T14:34:32.290 [DEBUG] [Thread-13295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:34:32.290 [DEBUG] [Thread-13295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:34:32.290 [DEBUG] [Thread-13295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:34:32.290 [DEBUG] [Thread-13295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:34:32.309 [INFO] [Thread-13295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:34:32.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-25T14:34:32.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:34:33.155 [DEBUG] [Thread-13295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:34:33.156 [DEBUG] [Thread-13295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:34:33.204 [DEBUG] [Thread-13295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:34:33.204 [DEBUG] [Thread-13295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:34:33.213 [DEBUG] [Thread-13295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:34:33.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:34:33.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-25T14:34:33.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:34:33.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:34:33.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:34:33.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:34:33.250 [DEBUG] [Thread-13295] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:34:37.661 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:34:37.662 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:34:40.527 [DEBUG] [Thread-13297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:34:55.572 [DEBUG] [Thread-13298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:35:03.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:35:03.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-25T14:35:03.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 34, 54), 29.03, 14.87, 0.0, 35.64, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:35:03.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:34:54
2025-12-25T14:35:04.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:35:04.258 [DEBUG] [Thread-13299] [transport.py] [_log()] starting thread (client mode): 0xb6b2b700
2025-12-25T14:35:04.258 [DEBUG] [Thread-13299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:35:04.277 [DEBUG] [Thread-13299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:35:04.277 [INFO] [Thread-13299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] client lang: <none>
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] server lang: <none>
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] kex follows: False
2025-12-25T14:35:04.280 [DEBUG] [Thread-13299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:35:04.281 [DEBUG] [Thread-13299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:35:04.281 [DEBUG] [Thread-13299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:35:04.281 [DEBUG] [Thread-13299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:35:04.281 [DEBUG] [Thread-13299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:35:04.281 [DEBUG] [Thread-13299] [transport.py] [_log()] Compression: none
2025-12-25T14:35:04.281 [DEBUG] [Thread-13299] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:35:04.298 [DEBUG] [Thread-13299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:35:04.298 [DEBUG] [Thread-13299] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:35:04.299 [DEBUG] [Thread-13299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:35:04.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:35:04.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:35:04.301 [DEBUG] [Thread-13299] [transport.py] [_log()] userauth is OK
2025-12-25T14:35:04.301 [DEBUG] [Thread-13299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:35:04.301 [DEBUG] [Thread-13299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:35:04.301 [DEBUG] [Thread-13299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:35:04.301 [DEBUG] [Thread-13299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:35:04.320 [INFO] [Thread-13299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:35:04.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:35:04.894 [DEBUG] [Thread-13299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:35:04.894 [DEBUG] [Thread-13299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:35:04.895 [DEBUG] [Thread-13299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:35:04.935 [DEBUG] [Thread-13299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:35:04.935 [DEBUG] [Thread-13299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:35:04.937 [DEBUG] [Thread-13299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:35:04.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:35:04.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:35:04.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:35:04.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:35:04.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:35:04.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:35:04.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:35:04.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:35:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:35:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.524020 -999.00  +26.00  32.17     20   +1.50 1 1 2 1 1   888    0 24.31 22.18 ----- 34.0 32.2 304.2 43.8 30.7 -27.0 30.4 -26.1 30.8 -23.6 31.3 -24.5
2025-12-25T14:35:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:35:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:35:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.524020
2025-12-25T14:35:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:35:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:35:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:35:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:35:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:35:04.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:34:54', tmtdew=29.03, humidity=14.87, cloud=0.0, wind=35.64, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:34:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:35:04.964 [DEBUG] [Thread-13299] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:35:05.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-25T14:35:05.058 [DEBUG] [Thread-13302] [transport.py] [_log()] starting thread (client mode): 0xb6b28d00
2025-12-25T14:35:05.058 [DEBUG] [Thread-13302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:35:05.072 [DEBUG] [Thread-13302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:35:05.072 [INFO] [Thread-13302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:35:05.079 [DEBUG] [Thread-13302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:35:05.079 [DEBUG] [Thread-13302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:35:05.079 [DEBUG] [Thread-13302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] client lang: <none>
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] server lang: <none>
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] kex follows: False
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:35:05.080 [DEBUG] [Thread-13302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:35:05.081 [DEBUG] [Thread-13302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:35:05.081 [DEBUG] [Thread-13302] [transport.py] [_log()] Compression: none
2025-12-25T14:35:05.081 [DEBUG] [Thread-13302] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:35:05.136 [DEBUG] [Thread-13302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:35:05.137 [DEBUG] [Thread-13302] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:35:05.137 [DEBUG] [Thread-13302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:35:05.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:35:05.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:35:05.193 [DEBUG] [Thread-13302] [transport.py] [_log()] userauth is OK
2025-12-25T14:35:05.193 [DEBUG] [Thread-13302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:35:05.193 [DEBUG] [Thread-13302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:35:05.193 [DEBUG] [Thread-13302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:35:05.193 [DEBUG] [Thread-13302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:35:05.215 [INFO] [Thread-13302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:35:05.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-25T14:35:05.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:35:06.033 [DEBUG] [Thread-13302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:35:06.033 [DEBUG] [Thread-13302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:35:06.080 [DEBUG] [Thread-13302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:35:06.081 [DEBUG] [Thread-13302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:35:06.089 [DEBUG] [Thread-13302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:35:06.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:35: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')
2025-12-25T14:35:06.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-25T14:35:06.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:35:06.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:35:06.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:35:06.122 [DEBUG] [Thread-13302] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:35:08.064 [DEBUG] [Thread-13304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:10.606 [DEBUG] [Thread-13305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:25.651 [DEBUG] [Thread-13306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:36.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:35:36.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:35:36.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-25T14:35:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 35, 26), 28.86, 15.02, 0.0, 27.16, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:35:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:35:26
2025-12-25T14:35:36.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:35:37.093 [DEBUG] [Thread-13307] [transport.py] [_log()] starting thread (client mode): 0xb95b2dd0
2025-12-25T14:35:37.094 [DEBUG] [Thread-13307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:35:37.114 [DEBUG] [Thread-13307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:35:37.114 [INFO] [Thread-13307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] client lang: <none>
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] server lang: <none>
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] kex follows: False
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:35:37.115 [DEBUG] [Thread-13307] [transport.py] [_log()] Compression: none
2025-12-25T14:35:37.116 [DEBUG] [Thread-13307] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:35:37.133 [DEBUG] [Thread-13307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:35:37.134 [DEBUG] [Thread-13307] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:35:37.134 [DEBUG] [Thread-13307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:35:37.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:35:37.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:35:37.136 [DEBUG] [Thread-13307] [transport.py] [_log()] userauth is OK
2025-12-25T14:35:37.136 [DEBUG] [Thread-13307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:35:37.137 [DEBUG] [Thread-13307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:35:37.137 [DEBUG] [Thread-13307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:35:37.137 [DEBUG] [Thread-13307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:35:37.152 [INFO] [Thread-13307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:35:37.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:35:37.803 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:37.804 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:37.906 [DEBUG] [Thread-13307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:35:37.906 [DEBUG] [Thread-13307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:35:37.906 [DEBUG] [Thread-13307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:35:37.947 [DEBUG] [Thread-13307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:35:37.947 [DEBUG] [Thread-13307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:35:37.950 [DEBUG] [Thread-13307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:35:37.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:35:37.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:35:37.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:35:37.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:35:37.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:35:37.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:35:37.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:35:37.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:35:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:35:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.524020 -999.00  +26.00  32.17     20   +1.50 1 1 2 1 1   888    0 24.31 22.18 ----- 34.0 32.2 304.2 43.8 30.7 -27.0 30.4 -26.1 30.8 -23.6 31.3 -24.5
2025-12-25T14:35:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:35:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:35:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.524020
2025-12-25T14:35:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:35:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:35:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:35:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:35:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:35:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:35:26', tmtdew=28.86, humidity=15.02, cloud=0.0, wind=27.16, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:34:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:35:37.968 [DEBUG] [Thread-13307] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:35:38.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-25T14:35:38.064 [DEBUG] [Thread-13310] [transport.py] [_log()] starting thread (client mode): 0xb95b2b30
2025-12-25T14:35:38.064 [DEBUG] [Thread-13310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:35:38.078 [DEBUG] [Thread-13310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:35:38.078 [INFO] [Thread-13310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] client lang: <none>
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] server lang: <none>
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] kex follows: False
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:35:38.086 [DEBUG] [Thread-13310] [transport.py] [_log()] Compression: none
2025-12-25T14:35:38.087 [DEBUG] [Thread-13310] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:35:38.145 [DEBUG] [Thread-13310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:35:38.145 [DEBUG] [Thread-13310] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:35:38.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:35:38.147 [DEBUG] [Thread-13310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:35:38.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:35:38.205 [DEBUG] [Thread-13310] [transport.py] [_log()] userauth is OK
2025-12-25T14:35:38.205 [DEBUG] [Thread-13310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:35:38.205 [DEBUG] [Thread-13310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:35:38.205 [DEBUG] [Thread-13310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:35:38.205 [DEBUG] [Thread-13310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:35:38.224 [INFO] [Thread-13310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:35:38.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-25T14:35:38.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:35:39.040 [DEBUG] [Thread-13310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:35:39.040 [DEBUG] [Thread-13310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:35:39.088 [DEBUG] [Thread-13310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:35:39.088 [DEBUG] [Thread-13310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:35:39.098 [DEBUG] [Thread-13310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:35:39.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:35:39.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:35:39.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-25T14:35:39.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:35:39.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:35:39.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:35:39.133 [DEBUG] [Thread-13310] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:35:40.691 [DEBUG] [Thread-13312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:35:55.743 [DEBUG] [Thread-13313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:08.127 [DEBUG] [Thread-13314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:09.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:36:09.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:36:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:36:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 35, 58), 29.28, 14.33, 0.0, 24.99, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:36:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:35:58
2025-12-25T14:36:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:36:10.107 [DEBUG] [Thread-13315] [transport.py] [_log()] starting thread (client mode): 0xb95b0f40
2025-12-25T14:36:10.107 [DEBUG] [Thread-13315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:36:10.127 [DEBUG] [Thread-13315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:36:10.127 [INFO] [Thread-13315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:36:10.130 [DEBUG] [Thread-13315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:36:10.130 [DEBUG] [Thread-13315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:36:10.130 [DEBUG] [Thread-13315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] client lang: <none>
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] server lang: <none>
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] kex follows: False
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] Compression: none
2025-12-25T14:36:10.131 [DEBUG] [Thread-13315] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:36:10.148 [DEBUG] [Thread-13315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:36:10.148 [DEBUG] [Thread-13315] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:36:10.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:36:10.149 [DEBUG] [Thread-13315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:36:10.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:36:10.193 [DEBUG] [Thread-13315] [transport.py] [_log()] userauth is OK
2025-12-25T14:36:10.193 [DEBUG] [Thread-13315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:36:10.194 [DEBUG] [Thread-13315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:36:10.194 [DEBUG] [Thread-13315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:36:10.194 [DEBUG] [Thread-13315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:36:10.213 [INFO] [Thread-13315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:36:10.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:36:10.775 [DEBUG] [Thread-13317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:10.791 [DEBUG] [Thread-13315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:36:10.791 [DEBUG] [Thread-13315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:36:10.791 [DEBUG] [Thread-13315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:36:10.832 [DEBUG] [Thread-13315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:36:10.832 [DEBUG] [Thread-13315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:36:10.836 [DEBUG] [Thread-13315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:36:10.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:36:10.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:36:10.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:36:10.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:36:10.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:36:10.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:36:10.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:36:10.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:36:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:36:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.524367 -999.00  +25.80  32.58     20   +1.30 1 1 2 1 1   888    0 24.61 27.39 ----- 24.4 32.6 302.1 37.7 30.7 -26.8 30.4 -25.1 30.7 -22.3 31.3 -24.8
2025-12-25T14:36:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:36:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:36:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.524367
2025-12-25T14:36:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:36:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:36:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:36:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:36:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:36:10.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:35:58', tmtdew=29.28, humidity=14.33, cloud=0.0, wind=24.99, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:35:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:36:10.864 [DEBUG] [Thread-13315] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:36:10.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-25T14:36:10.957 [DEBUG] [Thread-13319] [transport.py] [_log()] starting thread (client mode): 0xb9547550
2025-12-25T14:36:10.957 [DEBUG] [Thread-13319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:36:10.972 [DEBUG] [Thread-13319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:36:10.972 [INFO] [Thread-13319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] client lang: <none>
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] server lang: <none>
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] kex follows: False
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] Compression: none
2025-12-25T14:36:10.980 [DEBUG] [Thread-13319] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:36:11.037 [DEBUG] [Thread-13319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:36:11.038 [DEBUG] [Thread-13319] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:36:11.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:36:11.039 [DEBUG] [Thread-13319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:36:11.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:36:11.094 [DEBUG] [Thread-13319] [transport.py] [_log()] userauth is OK
2025-12-25T14:36:11.094 [DEBUG] [Thread-13319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:36:11.094 [DEBUG] [Thread-13319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:36:11.094 [DEBUG] [Thread-13319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:36:11.095 [DEBUG] [Thread-13319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:36:11.114 [INFO] [Thread-13319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:36:11.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:36:11.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:36:11.985 [DEBUG] [Thread-13319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:36:11.985 [DEBUG] [Thread-13319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:36:12.033 [DEBUG] [Thread-13319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:36:12.033 [DEBUG] [Thread-13319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:36:12.043 [DEBUG] [Thread-13319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:36:12.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:36:12.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-25T14:36:12.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-25T14:36:12.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:36:12.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:36:12.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:36:12.079 [DEBUG] [Thread-13319] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:36:25.813 [DEBUG] [Thread-13321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:37.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:37.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:40.858 [DEBUG] [Thread-13322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:36:42.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:36:42.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:36:42.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-25T14:36:42.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 36, 30), 28.9, 14.65, 0.0, 22.11, 25.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:36:42.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:36:30
2025-12-25T14:36:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:36:43.058 [DEBUG] [Thread-13323] [transport.py] [_log()] starting thread (client mode): 0xb6b038b0
2025-12-25T14:36:43.058 [DEBUG] [Thread-13323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:36:43.078 [DEBUG] [Thread-13323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:36:43.078 [INFO] [Thread-13323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:43.081 [DEBUG] [Thread-13323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] client lang: <none>
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] server lang: <none>
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] kex follows: False
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] Compression: none
2025-12-25T14:36:43.082 [DEBUG] [Thread-13323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:36:43.101 [DEBUG] [Thread-13323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:36:43.101 [DEBUG] [Thread-13323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:36:43.101 [DEBUG] [Thread-13323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:36:43.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:36:43.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:36:43.103 [DEBUG] [Thread-13323] [transport.py] [_log()] userauth is OK
2025-12-25T14:36:43.104 [DEBUG] [Thread-13323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:36:43.104 [DEBUG] [Thread-13323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:36:43.104 [DEBUG] [Thread-13323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:36:43.104 [DEBUG] [Thread-13323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:36:43.122 [INFO] [Thread-13323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:36:43.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:36:43.872 [DEBUG] [Thread-13323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:36:43.872 [DEBUG] [Thread-13323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:36:43.872 [DEBUG] [Thread-13323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:36:43.913 [DEBUG] [Thread-13323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:36:43.913 [DEBUG] [Thread-13323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:36:43.916 [DEBUG] [Thread-13323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:36:43.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:36:43.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:36:43.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:36:43.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:36:43.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:36:43.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:36:43.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:36:43.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:36:43.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:36:43.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.525062 -999.00  +25.10  22.24     20   +1.10 1 1 1 1 1   888    0 24.50 33.60 ----- 21.7 22.2 288.8 33.4 30.6 -26.6 30.3 -26.6 30.7 -24.2 31.2 -24.8
2025-12-25T14:36:43.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:36:43.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:36:43.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.525062
2025-12-25T14:36:43.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:36:43.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:36:43.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:36:43.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:36:43.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:36:43.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:36:30', tmtdew=28.9, humidity=14.65, cloud=0.0, wind=22.11, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:36:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:36:43.943 [DEBUG] [Thread-13323] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:36:44.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-25T14:36:44.038 [DEBUG] [Thread-13326] [transport.py] [_log()] starting thread (client mode): 0xb9558760
2025-12-25T14:36:44.038 [DEBUG] [Thread-13326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:36:44.052 [DEBUG] [Thread-13326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:36:44.052 [INFO] [Thread-13326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:36:44.059 [DEBUG] [Thread-13326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:36:44.059 [DEBUG] [Thread-13326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:36:44.059 [DEBUG] [Thread-13326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] client lang: <none>
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] server lang: <none>
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] kex follows: False
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] Compression: none
2025-12-25T14:36:44.060 [DEBUG] [Thread-13326] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:36:44.117 [DEBUG] [Thread-13326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:36:44.118 [DEBUG] [Thread-13326] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:36:44.118 [DEBUG] [Thread-13326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:36:44.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:36:44.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:36:44.174 [DEBUG] [Thread-13326] [transport.py] [_log()] userauth is OK
2025-12-25T14:36:44.174 [DEBUG] [Thread-13326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:36:44.174 [DEBUG] [Thread-13326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:36:44.174 [DEBUG] [Thread-13326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:36:44.174 [DEBUG] [Thread-13326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:36:44.193 [INFO] [Thread-13326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:36:44.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-25T14:36:44.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:36:45.027 [DEBUG] [Thread-13326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:36:45.027 [DEBUG] [Thread-13326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:36:45.075 [DEBUG] [Thread-13326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:36:45.076 [DEBUG] [Thread-13326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:36:45.085 [DEBUG] [Thread-13326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:36:45.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:36:45.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-25T14:36: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') -> 00000000
2025-12-25T14:36:45.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:36:45.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:36:45.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:36:45.137 [DEBUG] [Thread-13326] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:36:55.895 [DEBUG] [Thread-13328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:08.179 [DEBUG] [Thread-13329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:10.943 [DEBUG] [Thread-13330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:15.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:37:15.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:37:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:37:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 37, 2), 28.95, 14.62, 0.0, 23.7, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:37:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:37:02
2025-12-25T14:37:16.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:37:16.197 [DEBUG] [Thread-13331] [transport.py] [_log()] starting thread (client mode): 0xb95b1bd0
2025-12-25T14:37:16.197 [DEBUG] [Thread-13331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:37:16.217 [DEBUG] [Thread-13331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:37:16.217 [INFO] [Thread-13331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] client lang: <none>
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] server lang: <none>
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] kex follows: False
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] Compression: none
2025-12-25T14:37:16.221 [DEBUG] [Thread-13331] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:37:16.237 [DEBUG] [Thread-13331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:37:16.237 [DEBUG] [Thread-13331] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:37:16.237 [DEBUG] [Thread-13331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:37:16.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:37:16.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:37:16.238 [DEBUG] [Thread-13331] [transport.py] [_log()] userauth is OK
2025-12-25T14:37:16.238 [DEBUG] [Thread-13331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:37:16.238 [DEBUG] [Thread-13331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:37:16.238 [DEBUG] [Thread-13331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:37:16.238 [DEBUG] [Thread-13331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:37:16.248 [INFO] [Thread-13331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:37:16.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:37:16.836 [DEBUG] [Thread-13331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:37:16.836 [DEBUG] [Thread-13331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:37:16.836 [DEBUG] [Thread-13331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:37:16.877 [DEBUG] [Thread-13331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:37:16.877 [DEBUG] [Thread-13331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:37:16.880 [DEBUG] [Thread-13331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:37:16.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:37:16.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:37:16.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:37:16.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:37:16.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:37:16.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:37:16.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:37:16.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.525409 -999.00  +25.30  20.11     20   +1.20 1 1 1 1 1   888    0 25.22 33.96 ----- 25.0 20.1 275.4 31.3 30.6 -27.4 30.4 -26.3 30.6 -25.3 31.3 -24.2
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.525409
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:37:16.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:37:02', tmtdew=28.95, humidity=14.62, cloud=0.0, wind=23.7, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:36:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:37:16.897 [DEBUG] [Thread-13331] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:37:16.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-25T14:37:16.981 [DEBUG] [Thread-13334] [transport.py] [_log()] starting thread (client mode): 0xb95b28c0
2025-12-25T14:37:16.981 [DEBUG] [Thread-13334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:37:16.995 [DEBUG] [Thread-13334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:37:16.996 [INFO] [Thread-13334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] client lang: <none>
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] server lang: <none>
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] kex follows: False
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] Compression: none
2025-12-25T14:37:17.003 [DEBUG] [Thread-13334] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:37:17.059 [DEBUG] [Thread-13334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:37:17.059 [DEBUG] [Thread-13334] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:37:17.059 [DEBUG] [Thread-13334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:37:17.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:37:17.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:37:17.117 [DEBUG] [Thread-13334] [transport.py] [_log()] userauth is OK
2025-12-25T14:37:17.117 [DEBUG] [Thread-13334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:37:17.117 [DEBUG] [Thread-13334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:37:17.117 [DEBUG] [Thread-13334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:37:17.117 [DEBUG] [Thread-13334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:37:17.130 [INFO] [Thread-13334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:37:17.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-25T14:37:17.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:37:17.974 [DEBUG] [Thread-13334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:37:17.974 [DEBUG] [Thread-13334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:37:18.022 [DEBUG] [Thread-13334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:37:18.023 [DEBUG] [Thread-13334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:37:18.031 [DEBUG] [Thread-13334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:37:18.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:37:18.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:37: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-25T14:37:18.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:37:18.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:37:18.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:37:18.067 [DEBUG] [Thread-13334] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:37:25.975 [DEBUG] [Thread-13336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:38.084 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:38.086 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:41.029 [DEBUG] [Thread-13337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:37:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:37:48.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:37:48.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-25T14:37:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 37, 34), 28.99, 14.87, 0.0, 26.63, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:37:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:37:34
2025-12-25T14:37:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:37:49.095 [DEBUG] [Thread-13338] [transport.py] [_log()] starting thread (client mode): 0xb95b2b60
2025-12-25T14:37:49.095 [DEBUG] [Thread-13338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:37:49.114 [DEBUG] [Thread-13338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:37:49.114 [INFO] [Thread-13338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] client lang: <none>
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] server lang: <none>
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] kex follows: False
2025-12-25T14:37:49.118 [DEBUG] [Thread-13338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:37:49.119 [DEBUG] [Thread-13338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:37:49.119 [DEBUG] [Thread-13338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:37:49.119 [DEBUG] [Thread-13338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:37:49.119 [DEBUG] [Thread-13338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:37:49.119 [DEBUG] [Thread-13338] [transport.py] [_log()] Compression: none
2025-12-25T14:37:49.119 [DEBUG] [Thread-13338] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:37:49.135 [DEBUG] [Thread-13338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:37:49.136 [DEBUG] [Thread-13338] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:37:49.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:37:49.137 [DEBUG] [Thread-13338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:37:49.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:37:49.138 [DEBUG] [Thread-13338] [transport.py] [_log()] userauth is OK
2025-12-25T14:37:49.139 [DEBUG] [Thread-13338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:37:49.139 [DEBUG] [Thread-13338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:37:49.139 [DEBUG] [Thread-13338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:37:49.139 [DEBUG] [Thread-13338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:37:49.156 [INFO] [Thread-13338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:37:49.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:37:49.948 [DEBUG] [Thread-13338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:37:49.949 [DEBUG] [Thread-13338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:37:49.949 [DEBUG] [Thread-13338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:37:49.990 [DEBUG] [Thread-13338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:37:49.990 [DEBUG] [Thread-13338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:37:49.994 [DEBUG] [Thread-13338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:37:50.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:37:50.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:37:50.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:37:50.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:37:50.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:37:50.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:37:50.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:37:50.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:37:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:37:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.525756 -999.00  +25.20  28.68     20   +1.30 1 1 1 1 1   888    0 24.93 37.26 ----- 23.5 28.7 308.6 33.1 30.8 -26.3 30.4 -26.7 30.7 -24.3 31.4 -23.9
2025-12-25T14:37:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:37:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:37:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.525756
2025-12-25T14:37:50.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:37:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:37:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:37:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:37:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:37:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:37:34', tmtdew=28.99, humidity=14.87, cloud=0.0, wind=26.63, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:37:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:37:50.020 [DEBUG] [Thread-13338] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:37:50.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-25T14:37:50.125 [DEBUG] [Thread-13341] [transport.py] [_log()] starting thread (client mode): 0xb6b03490
2025-12-25T14:37:50.125 [DEBUG] [Thread-13341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:37:50.139 [DEBUG] [Thread-13341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:37:50.140 [INFO] [Thread-13341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:37:50.147 [DEBUG] [Thread-13341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:37:50.147 [DEBUG] [Thread-13341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:37:50.147 [DEBUG] [Thread-13341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:37:50.147 [DEBUG] [Thread-13341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:50.147 [DEBUG] [Thread-13341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] client lang: <none>
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] server lang: <none>
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] kex follows: False
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:37:50.148 [DEBUG] [Thread-13341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:37:50.149 [DEBUG] [Thread-13341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:37:50.149 [DEBUG] [Thread-13341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:37:50.149 [DEBUG] [Thread-13341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:37:50.149 [DEBUG] [Thread-13341] [transport.py] [_log()] Compression: none
2025-12-25T14:37:50.149 [DEBUG] [Thread-13341] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:37:50.207 [DEBUG] [Thread-13341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:37:50.208 [DEBUG] [Thread-13341] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:37:50.208 [DEBUG] [Thread-13341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:37:50.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:37:50.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:37:50.263 [DEBUG] [Thread-13341] [transport.py] [_log()] userauth is OK
2025-12-25T14:37:50.264 [DEBUG] [Thread-13341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:37:50.264 [DEBUG] [Thread-13341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:37:50.264 [DEBUG] [Thread-13341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:37:50.264 [DEBUG] [Thread-13341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:37:50.286 [INFO] [Thread-13341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:37:50.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-25T14:37:50.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:37:51.117 [DEBUG] [Thread-13341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:37:51.117 [DEBUG] [Thread-13341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:37:51.164 [DEBUG] [Thread-13341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:37:51.164 [DEBUG] [Thread-13341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:37:51.173 [DEBUG] [Thread-13341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:37:51.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:37:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:37:51.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-25T14:37:51.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:37:51.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:37:51.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:37:51.204 [DEBUG] [Thread-13341] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:37:56.058 [DEBUG] [Thread-13343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:08.230 [DEBUG] [Thread-13344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:11.108 [DEBUG] [Thread-13345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:21.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:38:21.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:38:21.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-25T14:38:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 38, 6), 29.6, 14.34, 0.0, 32.48, 26.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:38:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:38:06
2025-12-25T14:38:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:38:22.206 [DEBUG] [Thread-13346] [transport.py] [_log()] starting thread (client mode): 0xb95b0f40
2025-12-25T14:38:22.206 [DEBUG] [Thread-13346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:38:22.227 [DEBUG] [Thread-13346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:38:22.227 [INFO] [Thread-13346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:38:22.230 [DEBUG] [Thread-13346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] client lang: <none>
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] server lang: <none>
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] kex follows: False
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:38:22.231 [DEBUG] [Thread-13346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:38:22.232 [DEBUG] [Thread-13346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:38:22.232 [DEBUG] [Thread-13346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:38:22.232 [DEBUG] [Thread-13346] [transport.py] [_log()] Compression: none
2025-12-25T14:38:22.232 [DEBUG] [Thread-13346] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:38:22.249 [DEBUG] [Thread-13346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:38:22.249 [DEBUG] [Thread-13346] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:38:22.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:38:22.250 [DEBUG] [Thread-13346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:38:22.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:38:22.252 [DEBUG] [Thread-13346] [transport.py] [_log()] userauth is OK
2025-12-25T14:38:22.252 [DEBUG] [Thread-13346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:38:22.253 [DEBUG] [Thread-13346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:38:22.253 [DEBUG] [Thread-13346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:38:22.253 [DEBUG] [Thread-13346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:38:22.277 [INFO] [Thread-13346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:38:22.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:38:22.906 [DEBUG] [Thread-13346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:38:22.906 [DEBUG] [Thread-13346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:38:22.906 [DEBUG] [Thread-13346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:38:22.947 [DEBUG] [Thread-13346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:38:22.947 [DEBUG] [Thread-13346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:38:22.950 [DEBUG] [Thread-13346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:38:22.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:38:22.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:38:22.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:38:22.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:38:22.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:38:22.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:38:22.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:38:22.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:38:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:38:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.526103 -999.00  +25.70  25.26     20   +1.10 1 1 1 1 1   888    0 25.04 41.13 ----- 35.1 25.3 319.8 37.3 30.7 -26.5 30.3 -27.3 30.6 -25.7 31.3 -23.7
2025-12-25T14:38:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:38:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:38:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.526103
2025-12-25T14:38:22.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:38:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:38:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:38:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:38:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:38:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:38:06', tmtdew=29.6, humidity=14.34, cloud=0.0, wind=32.48, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:37:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:38:22.973 [DEBUG] [Thread-13346] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:38:23.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-25T14:38:23.070 [DEBUG] [Thread-13349] [transport.py] [_log()] starting thread (client mode): 0xb9558e50
2025-12-25T14:38:23.070 [DEBUG] [Thread-13349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:38:23.084 [DEBUG] [Thread-13349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:38:23.084 [INFO] [Thread-13349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:23.092 [DEBUG] [Thread-13349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] client lang: <none>
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] server lang: <none>
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] kex follows: False
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] Compression: none
2025-12-25T14:38:23.093 [DEBUG] [Thread-13349] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:38:23.150 [DEBUG] [Thread-13349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:38:23.150 [DEBUG] [Thread-13349] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:38:23.151 [DEBUG] [Thread-13349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:38:23.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:38:23.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:38:23.206 [DEBUG] [Thread-13349] [transport.py] [_log()] userauth is OK
2025-12-25T14:38:23.206 [DEBUG] [Thread-13349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:38:23.206 [DEBUG] [Thread-13349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:38:23.206 [DEBUG] [Thread-13349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:38:23.206 [DEBUG] [Thread-13349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:38:23.225 [INFO] [Thread-13349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:38:23.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-25T14:38:23.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:38:24.082 [DEBUG] [Thread-13349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:38:24.082 [DEBUG] [Thread-13349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:38:24.130 [DEBUG] [Thread-13349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:38:24.131 [DEBUG] [Thread-13349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:38:24.140 [DEBUG] [Thread-13349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:38:24.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:38:24.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-25T14:38:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:38:24.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:38:24.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:38:24.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:38:24.177 [DEBUG] [Thread-13349] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:38:26.143 [DEBUG] [Thread-13351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:38.226 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:38.227 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:41.196 [DEBUG] [Thread-13352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:54.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:38:54.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:38:54.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-25T14:38:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 38, 38), 30.25, 13.42, 0.0, 30.1, 26.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:38:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:38:38
2025-12-25T14:38:55.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:38:55.184 [DEBUG] [Thread-13353] [transport.py] [_log()] starting thread (client mode): 0xb6b2b4f0
2025-12-25T14:38:55.185 [DEBUG] [Thread-13353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:38:55.204 [DEBUG] [Thread-13353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:38:55.204 [INFO] [Thread-13353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:38:55.207 [DEBUG] [Thread-13353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:38:55.207 [DEBUG] [Thread-13353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:38:55.207 [DEBUG] [Thread-13353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:38:55.207 [DEBUG] [Thread-13353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:55.207 [DEBUG] [Thread-13353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:55.207 [DEBUG] [Thread-13353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] client lang: <none>
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] server lang: <none>
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] kex follows: False
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] Compression: none
2025-12-25T14:38:55.208 [DEBUG] [Thread-13353] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:38:55.224 [DEBUG] [Thread-13353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:38:55.225 [DEBUG] [Thread-13353] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:38:55.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:38:55.226 [DEBUG] [Thread-13353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:38:55.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:38:55.228 [DEBUG] [Thread-13353] [transport.py] [_log()] userauth is OK
2025-12-25T14:38:55.228 [DEBUG] [Thread-13353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:38:55.228 [DEBUG] [Thread-13353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:38:55.228 [DEBUG] [Thread-13353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:38:55.228 [DEBUG] [Thread-13353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:38:55.247 [INFO] [Thread-13353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:38:55.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:38:56.047 [DEBUG] [Thread-13353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:38:56.047 [DEBUG] [Thread-13353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:38:56.047 [DEBUG] [Thread-13353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:38:56.088 [DEBUG] [Thread-13353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:38:56.088 [DEBUG] [Thread-13353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:38:56.090 [DEBUG] [Thread-13353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:38:56.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:38:56.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:38:56.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:38:56.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:38:56.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:38:56.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:38:56.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:38:56.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:38:56.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:38:56.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.526450 -999.00  +25.30  39.64     19   +0.50 1 1 2 1 1   888    0 25.16 42.90 ----- 34.4 39.6 313.2 46.0 30.7 -27.9 30.4 -26.0 30.7 -24.1 31.3 -25.2
2025-12-25T14:38:56.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:38:56.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:38:56.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.526450
2025-12-25T14:38:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:38:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:38:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:38:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:38:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:38:56.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:38:38', tmtdew=30.25, humidity=13.42, cloud=0.0, wind=30.1, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:38:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:38:56.109 [DEBUG] [Thread-13353] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:38:56.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-25T14:38:56.202 [DEBUG] [Thread-13356] [transport.py] [_log()] starting thread (client mode): 0xb9559a20
2025-12-25T14:38:56.202 [DEBUG] [Thread-13356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:38:56.218 [DEBUG] [Thread-13356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:38:56.219 [INFO] [Thread-13356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:38:56.226 [DEBUG] [Thread-13356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:38:56.227 [DEBUG] [Thread-13356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:38:56.227 [DEBUG] [Thread-13356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:38:56.227 [DEBUG] [Thread-13356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:56.227 [DEBUG] [Thread-13356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:38:56.227 [DEBUG] [Thread-13356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] client lang: <none>
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] server lang: <none>
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] kex follows: False
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] Compression: none
2025-12-25T14:38:56.228 [DEBUG] [Thread-13356] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:38:56.233 [DEBUG] [Thread-13358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:38:56.283 [DEBUG] [Thread-13356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:38:56.283 [DEBUG] [Thread-13356] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:38:56.284 [DEBUG] [Thread-13356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:38:56.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:38:56.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:38:56.341 [DEBUG] [Thread-13356] [transport.py] [_log()] userauth is OK
2025-12-25T14:38:56.341 [DEBUG] [Thread-13356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:38:56.341 [DEBUG] [Thread-13356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:38:56.342 [DEBUG] [Thread-13356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:38:56.342 [DEBUG] [Thread-13356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:38:56.364 [INFO] [Thread-13356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:38:56.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-25T14:38:56.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:38:57.273 [DEBUG] [Thread-13356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:38:57.273 [DEBUG] [Thread-13356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:38:57.321 [DEBUG] [Thread-13356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:38:57.321 [DEBUG] [Thread-13356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:38:57.330 [DEBUG] [Thread-13356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:38:57.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:38:57.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:38:57.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:38:57.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:38:57.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:38:57.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:38:57.368 [DEBUG] [Thread-13356] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:39:08.284 [DEBUG] [Thread-13359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:39:11.282 [DEBUG] [Thread-13360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:39:26.312 [DEBUG] [Thread-13361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:39:27.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:39:27.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:39:27.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-25T14:39:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 39, 10), 29.61, 13.93, 0.0, 24.26, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:39:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:39:10
2025-12-25T14:39:28.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:39:28.351 [DEBUG] [Thread-13362] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-25T14:39:28.351 [DEBUG] [Thread-13362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:39:28.371 [DEBUG] [Thread-13362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:39:28.372 [INFO] [Thread-13362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] client lang: <none>
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] server lang: <none>
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] kex follows: False
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:39:28.375 [DEBUG] [Thread-13362] [transport.py] [_log()] Compression: none
2025-12-25T14:39:28.376 [DEBUG] [Thread-13362] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:39:28.392 [DEBUG] [Thread-13362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:39:28.392 [DEBUG] [Thread-13362] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:39:28.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:39:28.393 [DEBUG] [Thread-13362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:39:28.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:39:28.395 [DEBUG] [Thread-13362] [transport.py] [_log()] userauth is OK
2025-12-25T14:39:28.396 [DEBUG] [Thread-13362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:39:28.396 [DEBUG] [Thread-13362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:39:28.396 [DEBUG] [Thread-13362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:39:28.396 [DEBUG] [Thread-13362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:39:28.432 [INFO] [Thread-13362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:39:28.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:39:29.082 [DEBUG] [Thread-13362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:39:29.082 [DEBUG] [Thread-13362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:39:29.083 [DEBUG] [Thread-13362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:39:29.123 [DEBUG] [Thread-13362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:39:29.123 [DEBUG] [Thread-13362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:39:29.127 [DEBUG] [Thread-13362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:39:29.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:39:29.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:39:29.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:39:29.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:39:29.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:39:29.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:39:29.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:39:29.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:39:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:39:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.526798 -999.00  +25.40  21.00     20   +0.80 1 1 1 1 1   888    0 25.76 51.32 ----- 22.9 21.0 317.4 39.1 30.8 -26.2 30.3 -26.0 30.6 -23.8 31.4 -23.7
2025-12-25T14:39:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:39:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:39:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.526798
2025-12-25T14:39:29.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:39:29.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:39:29.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:39:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:39:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:39:29.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:39:10', tmtdew=29.61, humidity=13.93, cloud=0.0, wind=24.26, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:38:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:39:29.151 [DEBUG] [Thread-13362] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:39:29.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-25T14:39:29.241 [DEBUG] [Thread-13365] [transport.py] [_log()] starting thread (client mode): 0xb6b610c0
2025-12-25T14:39:29.242 [DEBUG] [Thread-13365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:39:29.256 [DEBUG] [Thread-13365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:39:29.257 [INFO] [Thread-13365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:39:29.264 [DEBUG] [Thread-13365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] client lang: <none>
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] server lang: <none>
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] kex follows: False
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] Compression: none
2025-12-25T14:39:29.265 [DEBUG] [Thread-13365] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:39:29.320 [DEBUG] [Thread-13365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:39:29.321 [DEBUG] [Thread-13365] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:39:29.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:39:29.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:39:29.323 [DEBUG] [Thread-13365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:39:29.377 [DEBUG] [Thread-13365] [transport.py] [_log()] userauth is OK
2025-12-25T14:39:29.377 [DEBUG] [Thread-13365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:39:29.377 [DEBUG] [Thread-13365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:39:29.377 [DEBUG] [Thread-13365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:39:29.377 [DEBUG] [Thread-13365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:39:29.400 [INFO] [Thread-13365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:39:29.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-25T14:39:29.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:39:30.251 [DEBUG] [Thread-13365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:39:30.251 [DEBUG] [Thread-13365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:39:30.299 [DEBUG] [Thread-13365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:39:30.299 [DEBUG] [Thread-13365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:39:30.308 [DEBUG] [Thread-13365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:39:30.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:39:30.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-25T14:39:30.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-25T14:39:30.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:39:30.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:39:30.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:39:30.345 [DEBUG] [Thread-13365] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:39:38.373 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:39:38.374 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:39:41.348 [DEBUG] [Thread-13367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:39:56.397 [DEBUG] [Thread-13368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:00.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:40:00.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:40:00.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:40:01.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 39, 42), 29.08, 14.52, 0.0, 19.71, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:40:01.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:39:42
2025-12-25T14:40:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:40:01.350 [DEBUG] [Thread-13369] [transport.py] [_log()] starting thread (client mode): 0xb6b62050
2025-12-25T14:40:01.350 [DEBUG] [Thread-13369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:40:01.372 [DEBUG] [Thread-13369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:40:01.372 [INFO] [Thread-13369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:01.376 [DEBUG] [Thread-13369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] client lang: <none>
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] server lang: <none>
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] kex follows: False
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:40:01.377 [DEBUG] [Thread-13369] [transport.py] [_log()] Compression: none
2025-12-25T14:40:01.378 [DEBUG] [Thread-13369] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:40:01.398 [DEBUG] [Thread-13369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:40:01.398 [DEBUG] [Thread-13369] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:40:01.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:40:01.399 [DEBUG] [Thread-13369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:40:01.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:40:01.404 [DEBUG] [Thread-13369] [transport.py] [_log()] userauth is OK
2025-12-25T14:40:01.404 [DEBUG] [Thread-13369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:40:01.404 [DEBUG] [Thread-13369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:40:01.404 [DEBUG] [Thread-13369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:40:01.404 [DEBUG] [Thread-13369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:40:01.429 [INFO] [Thread-13369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:40:01.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:40:02.182 [DEBUG] [Thread-13369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:40:02.183 [DEBUG] [Thread-13369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:40:02.183 [DEBUG] [Thread-13369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:40:02.224 [DEBUG] [Thread-13369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:40:02.224 [DEBUG] [Thread-13369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:40:02.228 [DEBUG] [Thread-13369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:40:02.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:40:02.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:40:02.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:40:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:40:02.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:40:02.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:40:02.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:40:02.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:40:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:40:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.527145 -999.00  +25.80  20.49     19   +0.90 1 1 1 1 1   888    0 26.05 65.90 ----- 24.8 20.5 303.4 30.8 30.8 -26.3 30.4 -26.5 30.9 -25.5 31.5 -23.6
2025-12-25T14:40:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:40:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:40:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.527145
2025-12-25T14:40:02.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:40:02.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:40:02.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:40:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:40:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:40:02.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:39:42', tmtdew=29.08, humidity=14.52, cloud=0.0, wind=19.71, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:39:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:40:02.250 [DEBUG] [Thread-13369] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:40:02.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-25T14:40:02.351 [DEBUG] [Thread-13372] [transport.py] [_log()] starting thread (client mode): 0xb955b8b0
2025-12-25T14:40:02.351 [DEBUG] [Thread-13372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:40:02.366 [DEBUG] [Thread-13372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:40:02.366 [INFO] [Thread-13372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:40:02.374 [DEBUG] [Thread-13372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:40:02.374 [DEBUG] [Thread-13372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] client lang: <none>
2025-12-25T14:40:02.375 [DEBUG] [Thread-13372] [transport.py] [_log()] server lang: <none>
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] kex follows: False
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] Compression: none
2025-12-25T14:40:02.376 [DEBUG] [Thread-13372] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:40:02.431 [DEBUG] [Thread-13372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:40:02.432 [DEBUG] [Thread-13372] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:40:02.433 [DEBUG] [Thread-13372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:40:02.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:40:02.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:40:02.487 [DEBUG] [Thread-13372] [transport.py] [_log()] userauth is OK
2025-12-25T14:40:02.488 [DEBUG] [Thread-13372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:40:02.488 [DEBUG] [Thread-13372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:40:02.489 [DEBUG] [Thread-13372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:40:02.489 [DEBUG] [Thread-13372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:40:02.508 [INFO] [Thread-13372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:40:02.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-25T14:40:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:40:03.376 [DEBUG] [Thread-13372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:40:03.376 [DEBUG] [Thread-13372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:40:03.424 [DEBUG] [Thread-13372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:40:03.424 [DEBUG] [Thread-13372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:40:03.434 [DEBUG] [Thread-13372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:40:03.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:40:03.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-25T14:40:03.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-25T14:40:03.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:40:03.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:40:03.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:40:03.471 [DEBUG] [Thread-13372] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:40:08.339 [DEBUG] [Thread-13374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:11.434 [DEBUG] [Thread-13375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:26.483 [DEBUG] [Thread-13376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:40:33.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:40:33.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:40:34.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 40, 14), 29.26, 14.35, 0.0, 24.9, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:40:34.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:40:14
2025-12-25T14:40:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:40:34.455 [DEBUG] [Thread-13377] [transport.py] [_log()] starting thread (client mode): 0xb957b400
2025-12-25T14:40:34.455 [DEBUG] [Thread-13377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:40:34.476 [DEBUG] [Thread-13377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:40:34.477 [INFO] [Thread-13377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] client lang: <none>
2025-12-25T14:40:34.480 [DEBUG] [Thread-13377] [transport.py] [_log()] server lang: <none>
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] kex follows: False
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] Compression: none
2025-12-25T14:40:34.481 [DEBUG] [Thread-13377] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:40:34.498 [DEBUG] [Thread-13377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:40:34.499 [DEBUG] [Thread-13377] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:40:34.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:40:34.500 [DEBUG] [Thread-13377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:40:34.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:40:34.502 [DEBUG] [Thread-13377] [transport.py] [_log()] userauth is OK
2025-12-25T14:40:34.503 [DEBUG] [Thread-13377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:40:34.503 [DEBUG] [Thread-13377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:40:34.503 [DEBUG] [Thread-13377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:40:34.503 [DEBUG] [Thread-13377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:40:34.527 [INFO] [Thread-13377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:40:34.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:40:35.177 [DEBUG] [Thread-13377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:40:35.177 [DEBUG] [Thread-13377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:40:35.178 [DEBUG] [Thread-13377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:40:35.218 [DEBUG] [Thread-13377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:40:35.218 [DEBUG] [Thread-13377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:40:35.222 [DEBUG] [Thread-13377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:40:35.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:40:35.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:40:35.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:40:35.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:40:35.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:40:35.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:40:35.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:40:35.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:40:35.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:40:35.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.527492 -999.00  +25.40  21.69     19   +0.60 1 1 1 1 1   888    0 26.34 71.41 ----- 25.8 21.7 298.0 28.6 30.8 -26.9 30.4 -26.5 30.8 -26.0 31.4 -24.8
2025-12-25T14:40:35.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:40:35.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:40:35.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.527492
2025-12-25T14:40:35.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:40:35.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:40:35.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:40:35.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:40:35.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:40:35.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:40:14', tmtdew=29.26, humidity=14.35, cloud=0.0, wind=24.9, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:39:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:40:35.250 [DEBUG] [Thread-13377] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:40:35.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:40:35.344 [DEBUG] [Thread-13380] [transport.py] [_log()] starting thread (client mode): 0xb955abf0
2025-12-25T14:40:35.344 [DEBUG] [Thread-13380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:40:35.359 [DEBUG] [Thread-13380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:40:35.359 [INFO] [Thread-13380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:40:35.366 [DEBUG] [Thread-13380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:40:35.366 [DEBUG] [Thread-13380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] client lang: <none>
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] server lang: <none>
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] kex follows: False
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] Compression: none
2025-12-25T14:40:35.367 [DEBUG] [Thread-13380] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:40:35.423 [DEBUG] [Thread-13380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:40:35.423 [DEBUG] [Thread-13380] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:40:35.423 [DEBUG] [Thread-13380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:40:35.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:40:35.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:40:35.480 [DEBUG] [Thread-13380] [transport.py] [_log()] userauth is OK
2025-12-25T14:40:35.480 [DEBUG] [Thread-13380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:40:35.481 [DEBUG] [Thread-13380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:40:35.481 [DEBUG] [Thread-13380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:40:35.481 [DEBUG] [Thread-13380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:40:35.503 [INFO] [Thread-13380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:40:35.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-25T14:40:35.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:40:36.336 [DEBUG] [Thread-13380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:40:36.336 [DEBUG] [Thread-13380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:40:36.384 [DEBUG] [Thread-13380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:40:36.385 [DEBUG] [Thread-13380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:40:36.394 [DEBUG] [Thread-13380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:40:36.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:40:36.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-25T14:40:36.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-25T14:40:36.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:40:36.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:40:36.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:40:36.430 [DEBUG] [Thread-13380] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:40:38.512 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:38.513 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:41.516 [DEBUG] [Thread-13382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:40:56.565 [DEBUG] [Thread-13383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:41:06.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:41:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:41:07.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 40, 46), 30.3, 13.6, 0.0, 29.94, 26.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:41:07.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:40:46
2025-12-25T14:41:07.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:41:07.475 [DEBUG] [Thread-13384] [transport.py] [_log()] starting thread (client mode): 0xb9590910
2025-12-25T14:41:07.475 [DEBUG] [Thread-13384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:41:07.495 [DEBUG] [Thread-13384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:41:07.495 [INFO] [Thread-13384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:41:07.498 [DEBUG] [Thread-13384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] client lang: <none>
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] server lang: <none>
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] kex follows: False
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] Compression: none
2025-12-25T14:41:07.499 [DEBUG] [Thread-13384] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:41:07.517 [DEBUG] [Thread-13384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:41:07.517 [DEBUG] [Thread-13384] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:41:07.517 [DEBUG] [Thread-13384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:41:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:41:07.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:41:07.560 [DEBUG] [Thread-13384] [transport.py] [_log()] userauth is OK
2025-12-25T14:41:07.560 [DEBUG] [Thread-13384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:41:07.560 [DEBUG] [Thread-13384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:41:07.560 [DEBUG] [Thread-13384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:41:07.561 [DEBUG] [Thread-13384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:41:07.579 [INFO] [Thread-13384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:41:07.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:41:08.385 [DEBUG] [Thread-13386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:08.391 [DEBUG] [Thread-13384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:41:08.391 [DEBUG] [Thread-13384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:41:08.391 [DEBUG] [Thread-13384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:41:08.431 [DEBUG] [Thread-13384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:41:08.431 [DEBUG] [Thread-13384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:41:08.434 [DEBUG] [Thread-13384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:41:08.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:41:08.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:41:08.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:41:08.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:41:08.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:41:08.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:41:08.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.527839 -999.00  +25.60  27.21     19   +0.70 1 1 1 1 1   888    0 26.95 75.80 ----- 34.7 27.2 298.4 35.0 30.8 -26.9 30.4 -26.5 30.9 -25.8 31.5 -24.7
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.527839
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:41:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:41:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:41:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:41:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:40:46', tmtdew=30.3, humidity=13.6, cloud=0.0, wind=29.94, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:40:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:41:08.451 [DEBUG] [Thread-13384] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:41: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-25T14:41:08.534 [DEBUG] [Thread-13388] [transport.py] [_log()] starting thread (client mode): 0xb6b625f0
2025-12-25T14:41:08.534 [DEBUG] [Thread-13388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:41:08.549 [DEBUG] [Thread-13388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:41:08.549 [INFO] [Thread-13388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] client lang: <none>
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] server lang: <none>
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] kex follows: False
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:41:08.556 [DEBUG] [Thread-13388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:41:08.557 [DEBUG] [Thread-13388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:41:08.557 [DEBUG] [Thread-13388] [transport.py] [_log()] Compression: none
2025-12-25T14:41:08.557 [DEBUG] [Thread-13388] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:41:08.612 [DEBUG] [Thread-13388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:41:08.612 [DEBUG] [Thread-13388] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:41:08.612 [DEBUG] [Thread-13388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:41:08.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:41:08.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:41:08.669 [DEBUG] [Thread-13388] [transport.py] [_log()] userauth is OK
2025-12-25T14:41:08.669 [DEBUG] [Thread-13388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:41:08.669 [DEBUG] [Thread-13388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:41:08.670 [DEBUG] [Thread-13388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:41:08.670 [DEBUG] [Thread-13388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:41:08.683 [INFO] [Thread-13388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:41:08.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:41:08.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:41:09.547 [DEBUG] [Thread-13388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:41:09.547 [DEBUG] [Thread-13388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:41:09.595 [DEBUG] [Thread-13388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:41:09.595 [DEBUG] [Thread-13388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:41:09.603 [DEBUG] [Thread-13388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:41:09.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:41:09.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-25T14:41:09.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:41:09.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:41:09.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:41:09.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:41:09.635 [DEBUG] [Thread-13388] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:41:11.604 [DEBUG] [Thread-13390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:26.661 [DEBUG] [Thread-13391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:38.655 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:38.656 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:39.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:41:39.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:41:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:41:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 41, 18), 30.58, 13.37, 0.0, 33.45, 26.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:41:40.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:41:18
2025-12-25T14:41:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:41:40.639 [DEBUG] [Thread-13392] [transport.py] [_log()] starting thread (client mode): 0xb9592a40
2025-12-25T14:41:40.640 [DEBUG] [Thread-13392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:41:40.659 [DEBUG] [Thread-13392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:41:40.659 [INFO] [Thread-13392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] client lang: <none>
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] server lang: <none>
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] kex follows: False
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] Compression: none
2025-12-25T14:41:40.662 [DEBUG] [Thread-13392] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:41:40.678 [DEBUG] [Thread-13392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:41:40.679 [DEBUG] [Thread-13392] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:41:40.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:41:40.679 [DEBUG] [Thread-13392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:41:40.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:41:40.681 [DEBUG] [Thread-13392] [transport.py] [_log()] userauth is OK
2025-12-25T14:41:40.681 [DEBUG] [Thread-13392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:41:40.681 [DEBUG] [Thread-13392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:41:40.681 [DEBUG] [Thread-13392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:41:40.681 [DEBUG] [Thread-13392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:41:40.705 [INFO] [Thread-13392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:41:40.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:41:41.328 [DEBUG] [Thread-13392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:41:41.328 [DEBUG] [Thread-13392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:41:41.329 [DEBUG] [Thread-13392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:41:41.369 [DEBUG] [Thread-13392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:41:41.369 [DEBUG] [Thread-13392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:41:41.373 [DEBUG] [Thread-13392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:41:41.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:41:41.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:41:41.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:41:41.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:41:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:41:41.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:41:41.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:41:41.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:41:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:41:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.528533 -999.00  +26.20  30.88     19   +0.90 1 1 2 1 1   888    0 26.90 85.57 ----- 38.1 30.9 309.6 41.8 30.8 -26.7 30.5 -26.7 30.7 -25.4 31.5 -24.2
2025-12-25T14:41:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:41:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:41:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.528533
2025-12-25T14:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:41:18', tmtdew=30.58, humidity=13.37, cloud=0.0, wind=33.45, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:41:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:41:41.401 [DEBUG] [Thread-13392] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:41:41.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-25T14:41:41.494 [DEBUG] [Thread-13395] [transport.py] [_log()] starting thread (client mode): 0xb6b63d90
2025-12-25T14:41:41.494 [DEBUG] [Thread-13395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:41:41.509 [DEBUG] [Thread-13395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:41:41.509 [INFO] [Thread-13395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] client lang: <none>
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] server lang: <none>
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] kex follows: False
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] Compression: none
2025-12-25T14:41:41.517 [DEBUG] [Thread-13395] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:41:41.574 [DEBUG] [Thread-13395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:41:41.574 [DEBUG] [Thread-13395] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:41:41.574 [DEBUG] [Thread-13395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:41:41.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:41:41.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:41:41.631 [DEBUG] [Thread-13395] [transport.py] [_log()] userauth is OK
2025-12-25T14:41:41.632 [DEBUG] [Thread-13395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:41:41.632 [DEBUG] [Thread-13395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:41:41.632 [DEBUG] [Thread-13395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:41:41.632 [DEBUG] [Thread-13395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:41:41.650 [INFO] [Thread-13395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:41:41.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-25T14:41:41.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:41:41.696 [DEBUG] [Thread-13397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:41:42.501 [DEBUG] [Thread-13395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:41:42.501 [DEBUG] [Thread-13395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:41:42.549 [DEBUG] [Thread-13395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:41:42.549 [DEBUG] [Thread-13395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:41:42.559 [DEBUG] [Thread-13395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:41:42.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:41:42.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:41:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:41:42.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:41:42.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:41:42.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:41:42.597 [DEBUG] [Thread-13395] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:41:56.742 [DEBUG] [Thread-13398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:08.439 [DEBUG] [Thread-13399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:11.777 [DEBUG] [Thread-13400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:42:12.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:42:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:42:13.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 41, 50), 30.8, 12.89, 0.0, 30.49, 26.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:42:13.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:41:50
2025-12-25T14:42:13.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:42:13.594 [DEBUG] [Thread-13401] [transport.py] [_log()] starting thread (client mode): 0xb9592650
2025-12-25T14:42:13.594 [DEBUG] [Thread-13401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:42:13.615 [DEBUG] [Thread-13401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:42:13.615 [INFO] [Thread-13401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] client lang: <none>
2025-12-25T14:42:13.618 [DEBUG] [Thread-13401] [transport.py] [_log()] server lang: <none>
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] kex follows: False
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] Compression: none
2025-12-25T14:42:13.619 [DEBUG] [Thread-13401] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:42:13.635 [DEBUG] [Thread-13401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:42:13.636 [DEBUG] [Thread-13401] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:42:13.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:42:13.637 [DEBUG] [Thread-13401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:42:13.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:42:13.639 [DEBUG] [Thread-13401] [transport.py] [_log()] userauth is OK
2025-12-25T14:42:13.639 [DEBUG] [Thread-13401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:42:13.640 [DEBUG] [Thread-13401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:42:13.640 [DEBUG] [Thread-13401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:42:13.640 [DEBUG] [Thread-13401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:42:13.656 [INFO] [Thread-13401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:42:13.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:42:14.441 [DEBUG] [Thread-13401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:42:14.441 [DEBUG] [Thread-13401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:42:14.442 [DEBUG] [Thread-13401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:42:14.482 [DEBUG] [Thread-13401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:42:14.482 [DEBUG] [Thread-13401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:42:14.485 [DEBUG] [Thread-13401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:42:14.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:42:14.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:42:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:42:14.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:42:14.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:42:14.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:42:14.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:42:14.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:42:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:42:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.528881 -999.00  +26.20  33.64     18   +0.60 1 1 2 1 1   888    0 26.37 84.79 ----- 32.3 33.6 293.4 40.6 30.9 -27.6 30.6 -25.7 31.0 -24.2 31.5 -25.8
2025-12-25T14:42:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:42:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:42:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.528881
2025-12-25T14:42:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:42:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:41:50', tmtdew=30.8, humidity=12.89, cloud=0.0, wind=30.49, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:41:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:42:14.511 [DEBUG] [Thread-13401] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:42:14.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-25T14:42:14.618 [DEBUG] [Thread-13404] [transport.py] [_log()] starting thread (client mode): 0xb95593c0
2025-12-25T14:42:14.618 [DEBUG] [Thread-13404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:42:14.633 [DEBUG] [Thread-13404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:42:14.633 [INFO] [Thread-13404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:14.641 [DEBUG] [Thread-13404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] client lang: <none>
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] server lang: <none>
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] kex follows: False
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] Compression: none
2025-12-25T14:42:14.642 [DEBUG] [Thread-13404] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:42:14.701 [DEBUG] [Thread-13404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:42:14.702 [DEBUG] [Thread-13404] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:42:14.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:42:14.703 [DEBUG] [Thread-13404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:42:14.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:42:14.761 [DEBUG] [Thread-13404] [transport.py] [_log()] userauth is OK
2025-12-25T14:42:14.762 [DEBUG] [Thread-13404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:42:14.762 [DEBUG] [Thread-13404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:42:14.762 [DEBUG] [Thread-13404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:42:14.762 [DEBUG] [Thread-13404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:42:14.780 [INFO] [Thread-13404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:42:14.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-25T14:42:14.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:42:15.610 [DEBUG] [Thread-13404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:42:15.610 [DEBUG] [Thread-13404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:42:15.663 [DEBUG] [Thread-13404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:42:15.663 [DEBUG] [Thread-13404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:42:15.673 [DEBUG] [Thread-13404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:42:15.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:42:15.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:42:15.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-25T14:42:15.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:42:15.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:42:15.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:42:15.711 [DEBUG] [Thread-13404] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:42:26.809 [DEBUG] [Thread-13406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:38.796 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:38.797 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:41.851 [DEBUG] [Thread-13407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:42:45.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:42:45.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:42:45.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-25T14:42:46.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 42, 22), 30.87, 12.82, 0.0, 27.95, 26.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:42:46.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:42:22
2025-12-25T14:42:46.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:42:46.706 [DEBUG] [Thread-13408] [transport.py] [_log()] starting thread (client mode): 0xb95b2680
2025-12-25T14:42:46.706 [DEBUG] [Thread-13408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:42:46.723 [DEBUG] [Thread-13408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:42:46.723 [INFO] [Thread-13408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:42:46.726 [DEBUG] [Thread-13408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] client lang: <none>
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] server lang: <none>
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] kex follows: False
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] Compression: none
2025-12-25T14:42:46.727 [DEBUG] [Thread-13408] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:42:46.744 [DEBUG] [Thread-13408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:42:46.744 [DEBUG] [Thread-13408] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:42:46.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:42:46.745 [DEBUG] [Thread-13408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:42:46.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:42:46.748 [DEBUG] [Thread-13408] [transport.py] [_log()] userauth is OK
2025-12-25T14:42:46.748 [DEBUG] [Thread-13408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:42:46.748 [DEBUG] [Thread-13408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:42:46.748 [DEBUG] [Thread-13408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:42:46.748 [DEBUG] [Thread-13408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:42:46.767 [INFO] [Thread-13408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:42:46.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:42:47.412 [DEBUG] [Thread-13408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:42:47.413 [DEBUG] [Thread-13408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:42:47.413 [DEBUG] [Thread-13408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:42:47.453 [DEBUG] [Thread-13408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:42:47.453 [DEBUG] [Thread-13408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:42:47.457 [DEBUG] [Thread-13408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:42:47.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:42:47.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:42:47.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:42:47.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:42:47.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:42:47.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:42:47.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:42:47.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:42:47.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:42:47.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.529228 -999.00  +26.20  38.34     18   +0.70 1 1 2 1 1   888    0 26.37 92.56 ----- 27.1 38.3 292.8 40.8 30.9 -26.8 30.4 -25.7 30.9 -24.2 31.5 -26.1
2025-12-25T14:42:47.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:42:47.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:42:47.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.529228
2025-12-25T14:42:47.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:42:47.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:42:47.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:42:47.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:42:47.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:42:47.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:42:22', tmtdew=30.87, humidity=12.82, cloud=0.0, wind=27.95, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:42:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:42:47.482 [DEBUG] [Thread-13408] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:42:47.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:42:47.575 [DEBUG] [Thread-13411] [transport.py] [_log()] starting thread (client mode): 0xb95d7910
2025-12-25T14:42:47.575 [DEBUG] [Thread-13411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:42:47.589 [DEBUG] [Thread-13411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:42:47.589 [INFO] [Thread-13411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] client lang: <none>
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] server lang: <none>
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] kex follows: False
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:42:47.597 [DEBUG] [Thread-13411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:42:47.598 [DEBUG] [Thread-13411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:42:47.598 [DEBUG] [Thread-13411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:42:47.598 [DEBUG] [Thread-13411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:42:47.598 [DEBUG] [Thread-13411] [transport.py] [_log()] Compression: none
2025-12-25T14:42:47.598 [DEBUG] [Thread-13411] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:42:47.656 [DEBUG] [Thread-13411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:42:47.656 [DEBUG] [Thread-13411] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:42:47.657 [DEBUG] [Thread-13411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:42:47.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:42:47.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:42:47.714 [DEBUG] [Thread-13411] [transport.py] [_log()] userauth is OK
2025-12-25T14:42:47.715 [DEBUG] [Thread-13411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:42:47.715 [DEBUG] [Thread-13411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:42:47.715 [DEBUG] [Thread-13411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:42:47.715 [DEBUG] [Thread-13411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:42:47.734 [INFO] [Thread-13411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:42:47.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-25T14:42:47.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:42:48.570 [DEBUG] [Thread-13411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:42:48.571 [DEBUG] [Thread-13411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:42:48.619 [DEBUG] [Thread-13411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:42:48.620 [DEBUG] [Thread-13411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:42:48.628 [DEBUG] [Thread-13411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:42:48.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:42:48.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-25T14:42:48.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-25T14:42:48.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:42:48.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:42:48.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:42:48.660 [DEBUG] [Thread-13411] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:42:56.884 [DEBUG] [Thread-13413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:08.492 [DEBUG] [Thread-13414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:11.923 [DEBUG] [Thread-13415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:18.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:43:18.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:43:18.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-25T14:43:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 42, 54), 30.36, 13.17, 0.0, 30.08, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:43:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:42:54
2025-12-25T14:43:19.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:43:19.650 [DEBUG] [Thread-13416] [transport.py] [_log()] starting thread (client mode): 0xb6b61900
2025-12-25T14:43:19.650 [DEBUG] [Thread-13416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:43:19.664 [DEBUG] [Thread-13416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:43:19.664 [INFO] [Thread-13416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] client lang: <none>
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] server lang: <none>
2025-12-25T14:43:19.665 [DEBUG] [Thread-13416] [transport.py] [_log()] kex follows: False
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] Compression: none
2025-12-25T14:43:19.666 [DEBUG] [Thread-13416] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:43:19.675 [DEBUG] [Thread-13416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:43:19.675 [DEBUG] [Thread-13416] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:43:19.676 [DEBUG] [Thread-13416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:43:19.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:43:19.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:43:19.678 [DEBUG] [Thread-13416] [transport.py] [_log()] userauth is OK
2025-12-25T14:43:19.678 [DEBUG] [Thread-13416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:43:19.678 [DEBUG] [Thread-13416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:43:19.678 [DEBUG] [Thread-13416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:43:19.678 [DEBUG] [Thread-13416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:43:19.695 [INFO] [Thread-13416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:43:19.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:43:20.498 [DEBUG] [Thread-13416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:43:20.498 [DEBUG] [Thread-13416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:43:20.498 [DEBUG] [Thread-13416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:43:20.539 [DEBUG] [Thread-13416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:43:20.539 [DEBUG] [Thread-13416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:43:20.542 [DEBUG] [Thread-13416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:43:20.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:43:20.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:43:20.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:43:20.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:43:20.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:43:20.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:43:20.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:43:20.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:43:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:43:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.529575 -999.00  +26.10  25.09     19   +0.80 1 1 1 1 1   888    0 26.84 98.83 ----- 23.9 25.1 294.0 35.4 30.8 -26.2 30.5 -26.8 30.7 -32.4 31.5 -24.2
2025-12-25T14:43:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:43:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:43:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.529575
2025-12-25T14:43:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:43:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:43:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:43:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:43:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:43:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:42:54', tmtdew=30.36, humidity=13.17, cloud=0.0, wind=30.08, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:42:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:43:20.566 [DEBUG] [Thread-13416] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:43:20.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-25T14:43:20.661 [DEBUG] [Thread-13419] [transport.py] [_log()] starting thread (client mode): 0xb6b02c80
2025-12-25T14:43:20.661 [DEBUG] [Thread-13419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:43:20.675 [DEBUG] [Thread-13419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:43:20.676 [INFO] [Thread-13419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] client lang: <none>
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] server lang: <none>
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] kex follows: False
2025-12-25T14:43:20.683 [DEBUG] [Thread-13419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:43:20.684 [DEBUG] [Thread-13419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:43:20.684 [DEBUG] [Thread-13419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:43:20.684 [DEBUG] [Thread-13419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:43:20.684 [DEBUG] [Thread-13419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:43:20.684 [DEBUG] [Thread-13419] [transport.py] [_log()] Compression: none
2025-12-25T14:43:20.684 [DEBUG] [Thread-13419] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:43:20.742 [DEBUG] [Thread-13419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:43:20.743 [DEBUG] [Thread-13419] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:43:20.743 [DEBUG] [Thread-13419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:43:20.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:43:20.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:43:20.799 [DEBUG] [Thread-13419] [transport.py] [_log()] userauth is OK
2025-12-25T14:43:20.800 [DEBUG] [Thread-13419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:43:20.800 [DEBUG] [Thread-13419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:43:20.800 [DEBUG] [Thread-13419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:43:20.800 [DEBUG] [Thread-13419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:43:20.820 [INFO] [Thread-13419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:43:20.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-25T14:43:20.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:43:21.640 [DEBUG] [Thread-13419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:43:21.641 [DEBUG] [Thread-13419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:43:21.688 [DEBUG] [Thread-13419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:43:21.688 [DEBUG] [Thread-13419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:43:21.696 [DEBUG] [Thread-13419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:43:21.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:43:21.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:43:21.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-25T14:43:21.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:43:21.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:43:21.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:43:21.730 [DEBUG] [Thread-13419] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:43:26.959 [DEBUG] [Thread-13421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:38.937 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:38.938 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:42.008 [DEBUG] [Thread-13422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:43:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:43:51.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:43:51.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-25T14:43:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 43, 27), 30.12, 13.34, 0.0, 26.1, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:43:52.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:43:27
2025-12-25T14:43:52.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:43:52.732 [DEBUG] [Thread-13423] [transport.py] [_log()] starting thread (client mode): 0xb95d77c0
2025-12-25T14:43:52.732 [DEBUG] [Thread-13423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:43:52.753 [DEBUG] [Thread-13423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:43:52.753 [INFO] [Thread-13423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:43:52.756 [DEBUG] [Thread-13423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:43:52.756 [DEBUG] [Thread-13423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:43:52.756 [DEBUG] [Thread-13423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:43:52.756 [DEBUG] [Thread-13423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] client lang: <none>
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] server lang: <none>
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] kex follows: False
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] Compression: none
2025-12-25T14:43:52.757 [DEBUG] [Thread-13423] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:43:52.774 [DEBUG] [Thread-13423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:43:52.775 [DEBUG] [Thread-13423] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:43:52.775 [DEBUG] [Thread-13423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:43:52.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:43:52.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:43:52.777 [DEBUG] [Thread-13423] [transport.py] [_log()] userauth is OK
2025-12-25T14:43:52.778 [DEBUG] [Thread-13423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:43:52.778 [DEBUG] [Thread-13423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:43:52.778 [DEBUG] [Thread-13423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:43:52.778 [DEBUG] [Thread-13423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:43:52.803 [INFO] [Thread-13423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:43:52.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:43:53.436 [DEBUG] [Thread-13423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:43:53.436 [DEBUG] [Thread-13423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:43:53.437 [DEBUG] [Thread-13423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:43:53.477 [DEBUG] [Thread-13423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:43:53.477 [DEBUG] [Thread-13423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:43:53.481 [DEBUG] [Thread-13423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:43:53.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:43:53.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:43:53.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:43:53.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:43:53.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:43:53.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:43:53.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:43:53.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:43:53.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:43:53.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.529923 -999.00  +25.90  38.84     19   +0.60 1 1 2 1 1   888    0 27.49 98.84 ----- 31.8 38.8 297.8 46.4 30.9 -27.7 30.6 -25.6 31.0 -22.8 31.6 -25.9
2025-12-25T14:43:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:43:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:43:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.529923
2025-12-25T14:43:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:43:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:43:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:43:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:43:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:43:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:43:27', tmtdew=30.12, humidity=13.34, cloud=0.0, wind=26.1, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:43:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:43:53.508 [DEBUG] [Thread-13423] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:43:53.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-25T14:43:53.600 [DEBUG] [Thread-13426] [transport.py] [_log()] starting thread (client mode): 0xb95929e0
2025-12-25T14:43:53.601 [DEBUG] [Thread-13426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:43:53.616 [DEBUG] [Thread-13426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:43:53.616 [INFO] [Thread-13426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:43:53.623 [DEBUG] [Thread-13426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] client lang: <none>
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] server lang: <none>
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] kex follows: False
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] Compression: none
2025-12-25T14:43:53.624 [DEBUG] [Thread-13426] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:43:53.682 [DEBUG] [Thread-13426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:43:53.682 [DEBUG] [Thread-13426] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:43:53.683 [DEBUG] [Thread-13426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:43:53.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:43:53.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:43:53.741 [DEBUG] [Thread-13426] [transport.py] [_log()] userauth is OK
2025-12-25T14:43:53.741 [DEBUG] [Thread-13426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:43:53.741 [DEBUG] [Thread-13426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:43:53.741 [DEBUG] [Thread-13426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:43:53.741 [DEBUG] [Thread-13426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:43:53.760 [INFO] [Thread-13426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:43:53.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-25T14:43:53.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:43:54.579 [DEBUG] [Thread-13426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:43:54.579 [DEBUG] [Thread-13426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:43:54.627 [DEBUG] [Thread-13426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:43:54.627 [DEBUG] [Thread-13426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:43:54.636 [DEBUG] [Thread-13426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:43:54.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:43:54.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-25T14:43:54.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-25T14:43:54.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:43:54.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:43:54.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:43:54.672 [DEBUG] [Thread-13426] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:43:57.037 [DEBUG] [Thread-13428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:08.545 [DEBUG] [Thread-13429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:12.085 [DEBUG] [Thread-13430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:44:24.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:44:24.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-25T14:44:25.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 43, 59), 30.22, 13.4, 0.0, 29.24, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:44:25.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:43:59
2025-12-25T14:44:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:44:25.733 [DEBUG] [Thread-13431] [transport.py] [_log()] starting thread (client mode): 0xb6b61f00
2025-12-25T14:44:25.733 [DEBUG] [Thread-13431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:44:25.752 [DEBUG] [Thread-13431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:44:25.752 [INFO] [Thread-13431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] client lang: <none>
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] server lang: <none>
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] kex follows: False
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:44:25.755 [DEBUG] [Thread-13431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:44:25.756 [DEBUG] [Thread-13431] [transport.py] [_log()] Compression: none
2025-12-25T14:44:25.756 [DEBUG] [Thread-13431] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:44:25.771 [DEBUG] [Thread-13431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:44:25.771 [DEBUG] [Thread-13431] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:44:25.771 [DEBUG] [Thread-13431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:44:25.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:44:25.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:44:25.772 [DEBUG] [Thread-13431] [transport.py] [_log()] userauth is OK
2025-12-25T14:44:25.772 [DEBUG] [Thread-13431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:44:25.772 [DEBUG] [Thread-13431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:44:25.772 [DEBUG] [Thread-13431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:44:25.772 [DEBUG] [Thread-13431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:44:25.781 [INFO] [Thread-13431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:44:25.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:44:26.431 [DEBUG] [Thread-13431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:44:26.431 [DEBUG] [Thread-13431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:44:26.432 [DEBUG] [Thread-13431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:44:26.472 [DEBUG] [Thread-13431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:44:26.472 [DEBUG] [Thread-13431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:44:26.476 [DEBUG] [Thread-13431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:44:26.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:44:26.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:44:26.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:44:26.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:44:26.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:44:26.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:44:26.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:44:26.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:44:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:44:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.530270 -999.00  +25.30  17.83     19   +0.50 1 1 1 1 1   888    0 27.41 97.62 ----- 36.1 17.8 300.2 37.6 30.9 -27.3 30.5 -27.1 30.9 -28.1 31.6 -24.7
2025-12-25T14:44:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:44:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:44:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.530270
2025-12-25T14:44:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:44:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:44:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:44:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:44:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:44:26.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:43:59', tmtdew=30.22, humidity=13.4, cloud=0.0, wind=29.24, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:43:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:44:26.503 [DEBUG] [Thread-13431] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:44:26.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-25T14:44:26.597 [DEBUG] [Thread-13434] [transport.py] [_log()] starting thread (client mode): 0xb95d7670
2025-12-25T14:44:26.597 [DEBUG] [Thread-13434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:44:26.611 [DEBUG] [Thread-13434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:44:26.611 [INFO] [Thread-13434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:44:26.619 [DEBUG] [Thread-13434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:44:26.619 [DEBUG] [Thread-13434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:44:26.619 [DEBUG] [Thread-13434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:44:26.619 [DEBUG] [Thread-13434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:26.619 [DEBUG] [Thread-13434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:26.619 [DEBUG] [Thread-13434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] client lang: <none>
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] server lang: <none>
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] kex follows: False
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] Compression: none
2025-12-25T14:44:26.620 [DEBUG] [Thread-13434] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:44:26.678 [DEBUG] [Thread-13434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:44:26.679 [DEBUG] [Thread-13434] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:44:26.679 [DEBUG] [Thread-13434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:44:26.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:44:26.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:44:26.742 [DEBUG] [Thread-13434] [transport.py] [_log()] userauth is OK
2025-12-25T14:44:26.742 [DEBUG] [Thread-13434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:44:26.742 [DEBUG] [Thread-13434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:44:26.742 [DEBUG] [Thread-13434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:44:26.742 [DEBUG] [Thread-13434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:44:26.761 [INFO] [Thread-13434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:44:26.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-25T14:44:26.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:44:27.114 [DEBUG] [Thread-13436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:27.634 [DEBUG] [Thread-13434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:44:27.634 [DEBUG] [Thread-13434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:44:27.682 [DEBUG] [Thread-13434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:44:27.682 [DEBUG] [Thread-13434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:44:27.692 [DEBUG] [Thread-13434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:44:27.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:44:27.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-25T14:44:27.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-25T14:44:27.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:44:27.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:44:27.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:44:27.727 [DEBUG] [Thread-13434] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:44:39.079 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:39.080 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:42.166 [DEBUG] [Thread-13437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:57.204 [DEBUG] [Thread-13438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:44:57.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:44:57.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:44:57.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-25T14:44:58.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 44, 31), 30.58, 13.11, 0.0, 30.29, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:44:58.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:44:31
2025-12-25T14:44:58.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:44:58.712 [DEBUG] [Thread-13439] [transport.py] [_log()] starting thread (client mode): 0xb6b21a20
2025-12-25T14:44:58.712 [DEBUG] [Thread-13439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:44:58.732 [DEBUG] [Thread-13439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:44:58.732 [INFO] [Thread-13439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:58.733 [DEBUG] [Thread-13439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] client lang: <none>
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] server lang: <none>
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] kex follows: False
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] Compression: none
2025-12-25T14:44:58.734 [DEBUG] [Thread-13439] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:44:58.752 [DEBUG] [Thread-13439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:44:58.753 [DEBUG] [Thread-13439] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:44:58.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:44:58.753 [DEBUG] [Thread-13439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:44:58.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:44:58.755 [DEBUG] [Thread-13439] [transport.py] [_log()] userauth is OK
2025-12-25T14:44:58.755 [DEBUG] [Thread-13439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:44:58.755 [DEBUG] [Thread-13439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:44:58.755 [DEBUG] [Thread-13439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:44:58.755 [DEBUG] [Thread-13439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:44:58.770 [INFO] [Thread-13439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:44:58.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:44:59.413 [DEBUG] [Thread-13439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:44:59.413 [DEBUG] [Thread-13439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:44:59.413 [DEBUG] [Thread-13439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:44:59.453 [DEBUG] [Thread-13439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:44:59.454 [DEBUG] [Thread-13439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:44:59.456 [DEBUG] [Thread-13439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:44:59.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:44:59.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:44:59.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:44:59.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:44:59.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:44:59.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:44:59.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.530617 -999.00  +25.50  30.90     19   +0.40 1 1 2 1 1   888    0 27.32 105.90 ----- 28.8 30.9 292.2 39.8 30.8 -27.3 30.6 -26.4 30.9 -23.6 31.5 -25.5
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.530617
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:44:59.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:44:31', tmtdew=30.58, humidity=13.11, cloud=0.0, wind=30.29, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:44:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:44:59.475 [DEBUG] [Thread-13439] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:44:59.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-25T14:44:59.559 [DEBUG] [Thread-13442] [transport.py] [_log()] starting thread (client mode): 0xb6b294e0
2025-12-25T14:44:59.559 [DEBUG] [Thread-13442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:44:59.573 [DEBUG] [Thread-13442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:44:59.573 [INFO] [Thread-13442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] client lang: <none>
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] server lang: <none>
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] kex follows: False
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:44:59.583 [DEBUG] [Thread-13442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:44:59.584 [DEBUG] [Thread-13442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:44:59.584 [DEBUG] [Thread-13442] [transport.py] [_log()] Compression: none
2025-12-25T14:44:59.584 [DEBUG] [Thread-13442] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:44:59.643 [DEBUG] [Thread-13442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:44:59.643 [DEBUG] [Thread-13442] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:44:59.643 [DEBUG] [Thread-13442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:44:59.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:44:59.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:44:59.698 [DEBUG] [Thread-13442] [transport.py] [_log()] userauth is OK
2025-12-25T14:44:59.698 [DEBUG] [Thread-13442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:44:59.698 [DEBUG] [Thread-13442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:44:59.698 [DEBUG] [Thread-13442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:44:59.698 [DEBUG] [Thread-13442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:44:59.712 [INFO] [Thread-13442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:44:59.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-25T14:44:59.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:45:00.562 [DEBUG] [Thread-13442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:45:00.562 [DEBUG] [Thread-13442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:45:00.610 [DEBUG] [Thread-13442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:45:00.610 [DEBUG] [Thread-13442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:45:00.618 [DEBUG] [Thread-13442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:45:00.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:45:00.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-25T14:45:00.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-25T14:45:00.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:45:00.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:45:00.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:45:00.650 [DEBUG] [Thread-13442] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:45:08.597 [DEBUG] [Thread-13444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:45:12.235 [DEBUG] [Thread-13445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:45:27.298 [DEBUG] [Thread-13446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:45:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:45:30.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:45:30.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-25T14:45:31.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 45, 3), 30.75, 12.97, 0.0, 31.85, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:45:31.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:45:03
2025-12-25T14:45:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:45:31.631 [DEBUG] [Thread-13447] [transport.py] [_log()] starting thread (client mode): 0xb6b23370
2025-12-25T14:45:31.632 [DEBUG] [Thread-13447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:45:31.652 [DEBUG] [Thread-13447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:45:31.652 [INFO] [Thread-13447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:45:31.655 [DEBUG] [Thread-13447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:45:31.655 [DEBUG] [Thread-13447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:45:31.655 [DEBUG] [Thread-13447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:45:31.655 [DEBUG] [Thread-13447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] client lang: <none>
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] server lang: <none>
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] kex follows: False
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:45:31.656 [DEBUG] [Thread-13447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:45:31.657 [DEBUG] [Thread-13447] [transport.py] [_log()] Compression: none
2025-12-25T14:45:31.657 [DEBUG] [Thread-13447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:45:31.666 [DEBUG] [Thread-13447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:45:31.667 [DEBUG] [Thread-13447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:45:31.667 [DEBUG] [Thread-13447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:45:31.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:45:31.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:45:31.669 [DEBUG] [Thread-13447] [transport.py] [_log()] userauth is OK
2025-12-25T14:45:31.669 [DEBUG] [Thread-13447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:45:31.669 [DEBUG] [Thread-13447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:45:31.669 [DEBUG] [Thread-13447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:45:31.669 [DEBUG] [Thread-13447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:45:31.693 [INFO] [Thread-13447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:45:31.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:45:32.341 [DEBUG] [Thread-13447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:45:32.341 [DEBUG] [Thread-13447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:45:32.341 [DEBUG] [Thread-13447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:45:32.382 [DEBUG] [Thread-13447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:45:32.382 [DEBUG] [Thread-13447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:45:32.386 [DEBUG] [Thread-13447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:45:32.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:45:32.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:45:32.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:45:32.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:45:32.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:45:32.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:45:32.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:45:32.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.530964 -999.00  +25.60  32.88     19   +0.30 1 1 2 1 1   888    0 27.71 104.57 ----- 34.3 32.9 296.0 46.2 30.8 -27.2 30.5 -26.5 30.9 -25.5 31.5 -25.4
2025-12-25T14:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:45:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.530964
2025-12-25T14:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:45:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:45:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:45:03', tmtdew=30.75, humidity=12.97, cloud=0.0, wind=31.85, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:44:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:45:32.412 [DEBUG] [Thread-13447] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:45:32.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-25T14:45:32.506 [DEBUG] [Thread-13450] [transport.py] [_log()] starting thread (client mode): 0xb6b23ca0
2025-12-25T14:45:32.507 [DEBUG] [Thread-13450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:45:32.521 [DEBUG] [Thread-13450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:45:32.521 [INFO] [Thread-13450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] client lang: <none>
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] server lang: <none>
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] kex follows: False
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] Compression: none
2025-12-25T14:45:32.529 [DEBUG] [Thread-13450] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:45:32.587 [DEBUG] [Thread-13450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:45:32.587 [DEBUG] [Thread-13450] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:45:32.588 [DEBUG] [Thread-13450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:45:32.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:45:32.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:45:32.644 [DEBUG] [Thread-13450] [transport.py] [_log()] userauth is OK
2025-12-25T14:45:32.644 [DEBUG] [Thread-13450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:45:32.644 [DEBUG] [Thread-13450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:45:32.645 [DEBUG] [Thread-13450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:45:32.645 [DEBUG] [Thread-13450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:45:32.668 [INFO] [Thread-13450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:45:32.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:45:32.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:45:33.484 [DEBUG] [Thread-13450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:45:33.485 [DEBUG] [Thread-13450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:45:33.533 [DEBUG] [Thread-13450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:45:33.533 [DEBUG] [Thread-13450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:45:33.542 [DEBUG] [Thread-13450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:45:33.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:45:33.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-25T14:45:33.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:45:33.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:45:33.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:45:33.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:45:33.579 [DEBUG] [Thread-13450] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:45:39.218 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:45:39.219 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:45:42.329 [DEBUG] [Thread-13452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:45:57.367 [DEBUG] [Thread-13453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:46:03.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:46:03.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-25T14:46:04.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 45, 35), 30.78, 12.87, 0.0, 36.58, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:46:04.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:45:35
2025-12-25T14:46:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:46:04.542 [DEBUG] [Thread-13454] [transport.py] [_log()] starting thread (client mode): 0xb6b22770
2025-12-25T14:46:04.542 [DEBUG] [Thread-13454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:46:04.562 [DEBUG] [Thread-13454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:46:04.562 [INFO] [Thread-13454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:46:04.565 [DEBUG] [Thread-13454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] client lang: <none>
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] server lang: <none>
2025-12-25T14:46:04.566 [DEBUG] [Thread-13454] [transport.py] [_log()] kex follows: False
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] Compression: none
2025-12-25T14:46:04.567 [DEBUG] [Thread-13454] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:46:04.588 [DEBUG] [Thread-13454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:46:04.589 [DEBUG] [Thread-13454] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:46:04.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:46:04.590 [DEBUG] [Thread-13454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:46:04.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:46:04.592 [DEBUG] [Thread-13454] [transport.py] [_log()] userauth is OK
2025-12-25T14:46:04.593 [DEBUG] [Thread-13454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:46:04.593 [DEBUG] [Thread-13454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:46:04.593 [DEBUG] [Thread-13454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:46:04.593 [DEBUG] [Thread-13454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:46:04.635 [INFO] [Thread-13454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:46:04.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:46:05.276 [DEBUG] [Thread-13454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:46:05.277 [DEBUG] [Thread-13454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:46:05.277 [DEBUG] [Thread-13454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:46:05.317 [DEBUG] [Thread-13454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:46:05.317 [DEBUG] [Thread-13454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:46:05.321 [DEBUG] [Thread-13454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:46:05.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:46:05.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:46:05.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:46:05.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:46:05.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:46:05.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:46:05.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:46:05.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:46:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:46:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.531311 -999.00  +25.80  33.81     19   +0.40 1 1 2 1 1   888    0 27.55 104.61 ----- 40.0 33.8 296.0 46.0 30.8 -27.4 30.4 -26.6 30.8 -24.7 31.4 -24.6
2025-12-25T14:46:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:46:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:46:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.531311
2025-12-25T14:46:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:46:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:46:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:46:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:46:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:46:05.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:45:35', tmtdew=30.78, humidity=12.87, cloud=0.0, wind=36.58, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:45:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:46:05.347 [DEBUG] [Thread-13454] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:46:05.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-25T14:46:05.443 [DEBUG] [Thread-13457] [transport.py] [_log()] starting thread (client mode): 0xb6b21990
2025-12-25T14:46:05.443 [DEBUG] [Thread-13457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:46:05.457 [DEBUG] [Thread-13457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:46:05.458 [INFO] [Thread-13457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] client lang: <none>
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] server lang: <none>
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] kex follows: False
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:46:05.465 [DEBUG] [Thread-13457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:46:05.466 [DEBUG] [Thread-13457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:46:05.466 [DEBUG] [Thread-13457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:46:05.466 [DEBUG] [Thread-13457] [transport.py] [_log()] Compression: none
2025-12-25T14:46:05.466 [DEBUG] [Thread-13457] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:46:05.524 [DEBUG] [Thread-13457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:46:05.524 [DEBUG] [Thread-13457] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:46:05.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:46:05.525 [DEBUG] [Thread-13457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:46:05.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:46:05.580 [DEBUG] [Thread-13457] [transport.py] [_log()] userauth is OK
2025-12-25T14:46:05.580 [DEBUG] [Thread-13457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:46:05.580 [DEBUG] [Thread-13457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:46:05.580 [DEBUG] [Thread-13457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:46:05.580 [DEBUG] [Thread-13457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:46:05.603 [INFO] [Thread-13457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:46: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-25T14:46:05.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:46:06.478 [DEBUG] [Thread-13457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:46:06.479 [DEBUG] [Thread-13457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:46:06.527 [DEBUG] [Thread-13457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:46:06.527 [DEBUG] [Thread-13457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:46:06.537 [DEBUG] [Thread-13457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:46:06.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:46:06.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-25T14:46:06.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:46:06.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:46:06.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:46:06.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:46:06.573 [DEBUG] [Thread-13457] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:46:08.644 [DEBUG] [Thread-13459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:12.405 [DEBUG] [Thread-13460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:27.454 [DEBUG] [Thread-13461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:46:36.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:46:36.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-25T14:46:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 46, 7), 30.6, 12.99, 0.0, 29.73, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:46:37.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:46:07
2025-12-25T14:46:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:46:37.598 [DEBUG] [Thread-13462] [transport.py] [_log()] starting thread (client mode): 0xb6b23130
2025-12-25T14:46:37.598 [DEBUG] [Thread-13462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:46:37.619 [DEBUG] [Thread-13462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:46:37.619 [INFO] [Thread-13462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:46:37.621 [DEBUG] [Thread-13462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] client lang: <none>
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] server lang: <none>
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] kex follows: False
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:46:37.622 [DEBUG] [Thread-13462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:46:37.623 [DEBUG] [Thread-13462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:46:37.623 [DEBUG] [Thread-13462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:46:37.623 [DEBUG] [Thread-13462] [transport.py] [_log()] Compression: none
2025-12-25T14:46:37.623 [DEBUG] [Thread-13462] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:46:37.639 [DEBUG] [Thread-13462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:46:37.639 [DEBUG] [Thread-13462] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:46:37.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:46:37.640 [DEBUG] [Thread-13462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:46:37.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:46:37.643 [DEBUG] [Thread-13462] [transport.py] [_log()] userauth is OK
2025-12-25T14:46:37.643 [DEBUG] [Thread-13462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:46:37.643 [DEBUG] [Thread-13462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:46:37.643 [DEBUG] [Thread-13462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:46:37.643 [DEBUG] [Thread-13462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:46:37.679 [INFO] [Thread-13462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:46:37.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:46:38.340 [DEBUG] [Thread-13462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:46:38.340 [DEBUG] [Thread-13462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:46:38.341 [DEBUG] [Thread-13462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:46:38.381 [DEBUG] [Thread-13462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:46:38.381 [DEBUG] [Thread-13462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:46:38.385 [DEBUG] [Thread-13462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:46:38.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:46:38.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:46:38.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:46:38.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:46:38.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:46:38.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:46:38.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:46:38.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:46:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:46:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.531659 -999.00  +26.00  44.09     18   +0.30 1 1 2 1 1   888    0 27.13 104.37 ----- 37.8 44.1 311.6 47.7 30.9 -26.9 30.5 -26.1 30.9 -23.6 31.5 -25.2
2025-12-25T14:46:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:46:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:46:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.531659
2025-12-25T14:46:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:46:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:46:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:46:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:46:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:46:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:46:07', tmtdew=30.6, humidity=12.99, cloud=0.0, wind=29.73, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:45:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:46:38.410 [DEBUG] [Thread-13462] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:46:38.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-25T14:46:38.502 [DEBUG] [Thread-13465] [transport.py] [_log()] starting thread (client mode): 0xb6b20280
2025-12-25T14:46:38.503 [DEBUG] [Thread-13465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:46:38.517 [DEBUG] [Thread-13465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:46:38.517 [INFO] [Thread-13465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:46:38.525 [DEBUG] [Thread-13465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:46:38.525 [DEBUG] [Thread-13465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] client lang: <none>
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] server lang: <none>
2025-12-25T14:46:38.526 [DEBUG] [Thread-13465] [transport.py] [_log()] kex follows: False
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] Compression: none
2025-12-25T14:46:38.527 [DEBUG] [Thread-13465] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:46:38.585 [DEBUG] [Thread-13465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:46:38.586 [DEBUG] [Thread-13465] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:46:38.586 [DEBUG] [Thread-13465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:46:38.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:46:38.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:46:38.641 [DEBUG] [Thread-13465] [transport.py] [_log()] userauth is OK
2025-12-25T14:46:38.641 [DEBUG] [Thread-13465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:46:38.641 [DEBUG] [Thread-13465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:46:38.641 [DEBUG] [Thread-13465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:46:38.641 [DEBUG] [Thread-13465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:46:38.659 [INFO] [Thread-13465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:46:38.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-25T14:46:38.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:46:39.358 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:39.359 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:39.507 [DEBUG] [Thread-13465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:46:39.508 [DEBUG] [Thread-13465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:46:39.556 [DEBUG] [Thread-13465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:46:39.556 [DEBUG] [Thread-13465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:46:39.565 [DEBUG] [Thread-13465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:46:39.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:46:39.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-25T14:46:39.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-25T14:46:39.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:46:39.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:46:39.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:46:39.601 [DEBUG] [Thread-13465] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:46:42.490 [DEBUG] [Thread-13467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:46:57.541 [DEBUG] [Thread-13468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:08.697 [DEBUG] [Thread-13469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:09.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:47:09.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:47:09.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-25T14:47:10.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 46, 39), 30.55, 13.22, 0.0, 34.83, 26.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:47:10.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:46:39
2025-12-25T14:47:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:47:10.568 [DEBUG] [Thread-13470] [transport.py] [_log()] starting thread (client mode): 0xb6b28c10
2025-12-25T14:47:10.568 [DEBUG] [Thread-13470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:47:10.588 [DEBUG] [Thread-13470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:47:10.589 [INFO] [Thread-13470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:47:10.592 [DEBUG] [Thread-13470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:47:10.592 [DEBUG] [Thread-13470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] client lang: <none>
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] server lang: <none>
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] kex follows: False
2025-12-25T14:47:10.593 [DEBUG] [Thread-13470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:47:10.594 [DEBUG] [Thread-13470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:47:10.594 [DEBUG] [Thread-13470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:47:10.594 [DEBUG] [Thread-13470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:47:10.594 [DEBUG] [Thread-13470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:47:10.594 [DEBUG] [Thread-13470] [transport.py] [_log()] Compression: none
2025-12-25T14:47:10.594 [DEBUG] [Thread-13470] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:47:10.612 [DEBUG] [Thread-13470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:47:10.613 [DEBUG] [Thread-13470] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:47:10.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:47:10.614 [DEBUG] [Thread-13470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:47:10.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:47:10.616 [DEBUG] [Thread-13470] [transport.py] [_log()] userauth is OK
2025-12-25T14:47:10.616 [DEBUG] [Thread-13470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:47:10.616 [DEBUG] [Thread-13470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:47:10.616 [DEBUG] [Thread-13470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:47:10.616 [DEBUG] [Thread-13470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:47:10.635 [INFO] [Thread-13470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:47:10.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:47:11.276 [DEBUG] [Thread-13470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:47:11.276 [DEBUG] [Thread-13470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:47:11.277 [DEBUG] [Thread-13470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:47:11.317 [DEBUG] [Thread-13470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:47:11.317 [DEBUG] [Thread-13470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:47:11.320 [DEBUG] [Thread-13470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:47:11.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:47:11.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:47:11.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:47:11.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:47:11.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:47:11.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:47:11.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:47:11.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:47:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:47:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.532353 -999.00  +26.40  35.46     18   +0.40 1 1 2 1 1   888    0 27.28 110.05 ----- 35.5 35.5 290.4 43.9 31.1 -26.2 30.6 -26.7 31.1 -24.7 31.6 -25.8
2025-12-25T14:47:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:47:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:47:11.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.532353
2025-12-25T14:47:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:47:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:47:11.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:47:11.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:47:11.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:47:11.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:46:39', tmtdew=30.55, humidity=13.22, cloud=0.0, wind=34.83, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:46:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:47:11.347 [DEBUG] [Thread-13470] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:47:11.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-25T14:47:11.441 [DEBUG] [Thread-13473] [transport.py] [_log()] starting thread (client mode): 0xb6b29f90
2025-12-25T14:47:11.441 [DEBUG] [Thread-13473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:47:11.456 [DEBUG] [Thread-13473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:47:11.457 [INFO] [Thread-13473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:47:11.464 [DEBUG] [Thread-13473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] client lang: <none>
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] server lang: <none>
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] kex follows: False
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] Compression: none
2025-12-25T14:47:11.465 [DEBUG] [Thread-13473] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:47:11.522 [DEBUG] [Thread-13473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:47:11.523 [DEBUG] [Thread-13473] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:47:11.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:47:11.524 [DEBUG] [Thread-13473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:47:11.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:47:11.579 [DEBUG] [Thread-13473] [transport.py] [_log()] userauth is OK
2025-12-25T14:47:11.579 [DEBUG] [Thread-13473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:47:11.579 [DEBUG] [Thread-13473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:47:11.579 [DEBUG] [Thread-13473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:47:11.580 [DEBUG] [Thread-13473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:47:11.599 [INFO] [Thread-13473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:47:11.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-25T14:47:11.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:47:12.421 [DEBUG] [Thread-13473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:47:12.421 [DEBUG] [Thread-13473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:47:12.469 [DEBUG] [Thread-13473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:47:12.469 [DEBUG] [Thread-13473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:47:12.478 [DEBUG] [Thread-13473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:47:12.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:47:12.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-25T14:47:12.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-25T14:47:12.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:47:12.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:47:12.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:47:12.510 [DEBUG] [Thread-13473] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:47:12.570 [DEBUG] [Thread-13475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:27.611 [DEBUG] [Thread-13476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:39.500 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:39.501 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:42.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:47:42.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:47: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-25T14:47:42.641 [DEBUG] [Thread-13477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:47:43.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 47, 11), 30.71, 13.12, 0.0, 32.85, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:47:43.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:47:11
2025-12-25T14:47:43.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:47:43.504 [DEBUG] [Thread-13478] [transport.py] [_log()] starting thread (client mode): 0xb6b20340
2025-12-25T14:47:43.504 [DEBUG] [Thread-13478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:47:43.524 [DEBUG] [Thread-13478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:47:43.524 [INFO] [Thread-13478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] client lang: <none>
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] server lang: <none>
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] kex follows: False
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:47:43.527 [DEBUG] [Thread-13478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:47:43.528 [DEBUG] [Thread-13478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:47:43.528 [DEBUG] [Thread-13478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:47:43.528 [DEBUG] [Thread-13478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:47:43.528 [DEBUG] [Thread-13478] [transport.py] [_log()] Compression: none
2025-12-25T14:47:43.528 [DEBUG] [Thread-13478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:47:43.540 [DEBUG] [Thread-13478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:47:43.540 [DEBUG] [Thread-13478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:47:43.541 [DEBUG] [Thread-13478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:47:43.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:47:43.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:47:43.543 [DEBUG] [Thread-13478] [transport.py] [_log()] userauth is OK
2025-12-25T14:47:43.543 [DEBUG] [Thread-13478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:47:43.543 [DEBUG] [Thread-13478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:47:43.543 [DEBUG] [Thread-13478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:47:43.543 [DEBUG] [Thread-13478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:47:43.568 [INFO] [Thread-13478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:47:43.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:47:44.244 [DEBUG] [Thread-13478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:47:44.245 [DEBUG] [Thread-13478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:47:44.245 [DEBUG] [Thread-13478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:47:44.286 [DEBUG] [Thread-13478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:47:44.286 [DEBUG] [Thread-13478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:47:44.288 [DEBUG] [Thread-13478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:47:44.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:47:44.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:47:44.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:47:44.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:47:44.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:47:44.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:47:44.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.532700 -999.00  +26.10  27.23     18   +0.30 1 1 1 1 1   888    0 27.19 109.92 ----- 21.7 27.2 299.6 39.2 31.0 -28.3 30.6 -26.5 31.1 -23.5 31.6 -25.8
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.532700
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:47:44.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:47:11', tmtdew=30.71, humidity=13.12, cloud=0.0, wind=32.85, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:47:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:47:44.308 [DEBUG] [Thread-13478] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:47:44.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-25T14:47:44.392 [DEBUG] [Thread-13481] [transport.py] [_log()] starting thread (client mode): 0xb95d6170
2025-12-25T14:47:44.392 [DEBUG] [Thread-13481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:47:44.406 [DEBUG] [Thread-13481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:47:44.406 [INFO] [Thread-13481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:47:44.413 [DEBUG] [Thread-13481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] client lang: <none>
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] server lang: <none>
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] kex follows: False
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] Compression: none
2025-12-25T14:47:44.414 [DEBUG] [Thread-13481] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:47:44.469 [DEBUG] [Thread-13481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:47:44.469 [DEBUG] [Thread-13481] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:47:44.469 [DEBUG] [Thread-13481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:47:44.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:47:44.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:47:44.531 [DEBUG] [Thread-13481] [transport.py] [_log()] userauth is OK
2025-12-25T14:47:44.531 [DEBUG] [Thread-13481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:47:44.531 [DEBUG] [Thread-13481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:47:44.531 [DEBUG] [Thread-13481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:47:44.531 [DEBUG] [Thread-13481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:47:44.545 [INFO] [Thread-13481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:47:44.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-25T14:47:44.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:47:45.399 [DEBUG] [Thread-13481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:47:45.399 [DEBUG] [Thread-13481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:47:45.447 [DEBUG] [Thread-13481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:47:45.447 [DEBUG] [Thread-13481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:47:45.455 [DEBUG] [Thread-13481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:47:45.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:47:45.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-25T14:47:45.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:47:45.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:47:45.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:47:45.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:47:45.486 [DEBUG] [Thread-13481] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:47:57.672 [DEBUG] [Thread-13483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:08.747 [DEBUG] [Thread-13484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:12.726 [DEBUG] [Thread-13485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:15.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:48:15.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:48:15.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-25T14:48:16.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 47, 43), 30.56, 13.22, 0.0, 21.23, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:48:16.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:47:43
2025-12-25T14:48:16.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:48:16.564 [DEBUG] [Thread-13486] [transport.py] [_log()] starting thread (client mode): 0xb6b2a830
2025-12-25T14:48:16.564 [DEBUG] [Thread-13486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:48:16.585 [DEBUG] [Thread-13486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:48:16.585 [INFO] [Thread-13486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] client lang: <none>
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] server lang: <none>
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] kex follows: False
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:48:16.588 [DEBUG] [Thread-13486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:48:16.589 [DEBUG] [Thread-13486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:48:16.589 [DEBUG] [Thread-13486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:48:16.589 [DEBUG] [Thread-13486] [transport.py] [_log()] Compression: none
2025-12-25T14:48:16.589 [DEBUG] [Thread-13486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:48:16.604 [DEBUG] [Thread-13486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:48:16.604 [DEBUG] [Thread-13486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:48:16.604 [DEBUG] [Thread-13486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:48:16.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:48:16.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:48:16.605 [DEBUG] [Thread-13486] [transport.py] [_log()] userauth is OK
2025-12-25T14:48:16.605 [DEBUG] [Thread-13486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:48:16.605 [DEBUG] [Thread-13486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:48:16.605 [DEBUG] [Thread-13486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:48:16.605 [DEBUG] [Thread-13486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:48:16.617 [INFO] [Thread-13486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:48:16.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:48:17.287 [DEBUG] [Thread-13486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:48:17.287 [DEBUG] [Thread-13486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:48:17.287 [DEBUG] [Thread-13486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:48:17.327 [DEBUG] [Thread-13486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:48:17.327 [DEBUG] [Thread-13486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:48:17.330 [DEBUG] [Thread-13486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:48:17.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:48:17.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:48:17.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:48:17.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:48:17.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:48:17.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:48:17.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.533048 -999.00  +25.40  22.25     18   -0.00 1 1 1 1 1   888    0 27.69 116.62 ----- 24.8 22.2 331.8 28.1 30.9 -26.9 30.6 -27.9 31.1 -25.9 31.7 -25.2
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.533048
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:48:17.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:47:43', tmtdew=30.56, humidity=13.22, cloud=0.0, wind=21.23, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:47:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:48:17.348 [DEBUG] [Thread-13486] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:48:17.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:48:17.432 [DEBUG] [Thread-13489] [transport.py] [_log()] starting thread (client mode): 0xb6b2b8b0
2025-12-25T14:48:17.432 [DEBUG] [Thread-13489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:48:17.448 [DEBUG] [Thread-13489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:48:17.448 [INFO] [Thread-13489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:48:17.455 [DEBUG] [Thread-13489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:48:17.455 [DEBUG] [Thread-13489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:48:17.455 [DEBUG] [Thread-13489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:48:17.455 [DEBUG] [Thread-13489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:17.455 [DEBUG] [Thread-13489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] client lang: <none>
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] server lang: <none>
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] kex follows: False
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] Compression: none
2025-12-25T14:48:17.456 [DEBUG] [Thread-13489] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:48:17.511 [DEBUG] [Thread-13489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:48:17.511 [DEBUG] [Thread-13489] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:48:17.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:48:17.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:48:17.511 [DEBUG] [Thread-13489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:48:17.568 [DEBUG] [Thread-13489] [transport.py] [_log()] userauth is OK
2025-12-25T14:48:17.568 [DEBUG] [Thread-13489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:48:17.568 [DEBUG] [Thread-13489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:48:17.568 [DEBUG] [Thread-13489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:48:17.568 [DEBUG] [Thread-13489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:48:17.586 [INFO] [Thread-13489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:48:17.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-25T14:48:17.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:48:18.405 [DEBUG] [Thread-13489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:48:18.405 [DEBUG] [Thread-13489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:48:18.453 [DEBUG] [Thread-13489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:48:18.453 [DEBUG] [Thread-13489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:48:18.461 [DEBUG] [Thread-13489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:48:18.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:48:18.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-25T14:48:18.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-25T14:48:18.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:48:18.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:48:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:48:18.493 [DEBUG] [Thread-13489] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:48:27.760 [DEBUG] [Thread-13491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:39.642 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:39.643 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:42.813 [DEBUG] [Thread-13492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:48:48.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:48:48.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:48:48.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-25T14:48:49.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 48, 15), 30.36, 13.35, 0.0, 20.71, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:48:49.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:48:15
2025-12-25T14:48:49.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:48:49.562 [DEBUG] [Thread-13493] [transport.py] [_log()] starting thread (client mode): 0xb6b214e0
2025-12-25T14:48:49.562 [DEBUG] [Thread-13493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:48:49.581 [DEBUG] [Thread-13493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:48:49.581 [INFO] [Thread-13493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:48:49.584 [DEBUG] [Thread-13493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:48:49.584 [DEBUG] [Thread-13493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:48:49.584 [DEBUG] [Thread-13493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:48:49.584 [DEBUG] [Thread-13493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:49.584 [DEBUG] [Thread-13493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] client lang: <none>
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] server lang: <none>
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] kex follows: False
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] Compression: none
2025-12-25T14:48:49.585 [DEBUG] [Thread-13493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:48:49.600 [DEBUG] [Thread-13493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:48:49.600 [DEBUG] [Thread-13493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:48:49.600 [DEBUG] [Thread-13493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:48:49.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:48:49.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:48:49.601 [DEBUG] [Thread-13493] [transport.py] [_log()] userauth is OK
2025-12-25T14:48:49.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:48:49.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:48:49.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:48:49.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:48:49.616 [INFO] [Thread-13493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:48:49.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:48:50.253 [DEBUG] [Thread-13493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:48:50.253 [DEBUG] [Thread-13493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:48:50.253 [DEBUG] [Thread-13493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:48:50.294 [DEBUG] [Thread-13493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:48:50.294 [DEBUG] [Thread-13493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:48:50.297 [DEBUG] [Thread-13493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:48:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:48:50.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:48:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:48:50.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:48:50.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:48:50.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:48:50.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:48:50.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:48:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:48:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.533395 -999.00  +25.60  25.39     18   +0.20 1 1 1 1 1   888    0 27.51 107.68 ----- 29.2 25.4 309.2 29.1 31.1 -25.9 30.5 -26.6 31.1 -24.7 31.8 -25.2
2025-12-25T14:48:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:48:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:48:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.533395
2025-12-25T14:48:50.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:48:50.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:48:50.322 [DEBUG] [Thread-13493] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:48:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:48:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:48:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:48:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:48:15', tmtdew=30.36, humidity=13.35, cloud=0.0, wind=20.71, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:48:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:48:50.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-25T14:48:50.420 [DEBUG] [Thread-13496] [transport.py] [_log()] starting thread (client mode): 0xb6b62110
2025-12-25T14:48:50.420 [DEBUG] [Thread-13496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:48:50.439 [DEBUG] [Thread-13496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:48:50.439 [INFO] [Thread-13496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:48:50.446 [DEBUG] [Thread-13496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] client lang: <none>
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] server lang: <none>
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] kex follows: False
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:48:50.447 [DEBUG] [Thread-13496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:48:50.448 [DEBUG] [Thread-13496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:48:50.448 [DEBUG] [Thread-13496] [transport.py] [_log()] Compression: none
2025-12-25T14:48:50.448 [DEBUG] [Thread-13496] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:48:50.505 [DEBUG] [Thread-13496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:48:50.506 [DEBUG] [Thread-13496] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:48:50.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:48:50.507 [DEBUG] [Thread-13496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:48:50.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:48:50.561 [DEBUG] [Thread-13496] [transport.py] [_log()] userauth is OK
2025-12-25T14:48:50.561 [DEBUG] [Thread-13496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:48:50.561 [DEBUG] [Thread-13496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:48:50.562 [DEBUG] [Thread-13496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:48:50.562 [DEBUG] [Thread-13496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:48:50.589 [INFO] [Thread-13496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:48:50.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-25T14:48:50.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:48:51.475 [DEBUG] [Thread-13496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:48:51.476 [DEBUG] [Thread-13496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:48:51.523 [DEBUG] [Thread-13496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:48:51.523 [DEBUG] [Thread-13496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:48:51.532 [DEBUG] [Thread-13496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:48:51.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:48: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-25T14:48: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') -> 00000000
2025-12-25T14:48:51.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:48:51.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:48:51.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:48:51.571 [DEBUG] [Thread-13496] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:48:57.845 [DEBUG] [Thread-13498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:08.798 [DEBUG] [Thread-13499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:12.893 [DEBUG] [Thread-13500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:49:21.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:49:21.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-25T14:49:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 48, 47), 30.49, 13.16, 29.3, 32.01, 25.96, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:49:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:48:47
2025-12-25T14:49:22.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:49:22.608 [DEBUG] [Thread-13501] [transport.py] [_log()] starting thread (client mode): 0xb6b23a30
2025-12-25T14:49:22.608 [DEBUG] [Thread-13501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:49:22.628 [DEBUG] [Thread-13501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:49:22.629 [INFO] [Thread-13501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] client lang: <none>
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] server lang: <none>
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] kex follows: False
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] Compression: none
2025-12-25T14:49:22.632 [DEBUG] [Thread-13501] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:49:22.650 [DEBUG] [Thread-13501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:49:22.651 [DEBUG] [Thread-13501] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:49:22.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:49:22.651 [DEBUG] [Thread-13501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:49:22.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:49:22.654 [DEBUG] [Thread-13501] [transport.py] [_log()] userauth is OK
2025-12-25T14:49:22.654 [DEBUG] [Thread-13501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:49:22.654 [DEBUG] [Thread-13501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:49:22.654 [DEBUG] [Thread-13501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:49:22.655 [DEBUG] [Thread-13501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:49:22.679 [INFO] [Thread-13501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:49:22.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:49:23.332 [DEBUG] [Thread-13501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:49:23.332 [DEBUG] [Thread-13501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:49:23.333 [DEBUG] [Thread-13501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:49:23.373 [DEBUG] [Thread-13501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:49:23.373 [DEBUG] [Thread-13501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:49:23.377 [DEBUG] [Thread-13501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:49:23.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:49:23.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:49:23.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:49:23.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:49:23.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:49:23.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:49:23.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:49:23.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:49:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:49:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.533742 -999.00  +25.50  33.89     18   +0.10 1 1 2 1 1   888    0 28.51 120.91 ----- 30.7 33.9 297.0 38.1 30.9 -27.4 30.6 -27.7 30.9 -28.7 31.7 -25.7
2025-12-25T14:49:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:49:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:49:23.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.533742
2025-12-25T14:49:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:49:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:49:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:49:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:49:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:49:23.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:48:47', tmtdew=30.49, humidity=13.16, cloud=29.3, wind=32.01, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:48:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:49:23.404 [DEBUG] [Thread-13501] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:49:23.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-25T14:49:23.491 [DEBUG] [Thread-13504] [transport.py] [_log()] starting thread (client mode): 0xb6b20220
2025-12-25T14:49:23.491 [DEBUG] [Thread-13504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:49:23.506 [DEBUG] [Thread-13504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:49:23.506 [INFO] [Thread-13504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] client lang: <none>
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] server lang: <none>
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] kex follows: False
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:49:23.514 [DEBUG] [Thread-13504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:49:23.515 [DEBUG] [Thread-13504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:49:23.515 [DEBUG] [Thread-13504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:49:23.515 [DEBUG] [Thread-13504] [transport.py] [_log()] Compression: none
2025-12-25T14:49:23.515 [DEBUG] [Thread-13504] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:49:23.578 [DEBUG] [Thread-13504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:49:23.578 [DEBUG] [Thread-13504] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:49:23.579 [DEBUG] [Thread-13504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:49:23.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:49:23.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:49:23.634 [DEBUG] [Thread-13504] [transport.py] [_log()] userauth is OK
2025-12-25T14:49:23.634 [DEBUG] [Thread-13504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:49:23.634 [DEBUG] [Thread-13504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:49:23.634 [DEBUG] [Thread-13504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:49:23.634 [DEBUG] [Thread-13504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:49:23.653 [INFO] [Thread-13504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:49:23.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-25T14:49:23.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:49:24.473 [DEBUG] [Thread-13504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:49:24.473 [DEBUG] [Thread-13504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:49:24.521 [DEBUG] [Thread-13504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:49:24.521 [DEBUG] [Thread-13504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:49:24.530 [DEBUG] [Thread-13504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:49:24.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:49:24.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-25T14:49:24.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:49:24.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:49:24.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:49:24.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:49:24.566 [DEBUG] [Thread-13504] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:49:27.927 [DEBUG] [Thread-13506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:39.784 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:39.785 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:42.977 [DEBUG] [Thread-13507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:49:54.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:49:54.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:49:54.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-25T14:49:55.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 49, 51), 30.64, 12.92, 29.3, 27.38, 26.34, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:49:55.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:49:51
2025-12-25T14:49:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:49:55.555 [DEBUG] [Thread-13508] [transport.py] [_log()] starting thread (client mode): 0xb95d4280
2025-12-25T14:49:55.555 [DEBUG] [Thread-13508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:49:55.576 [DEBUG] [Thread-13508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:49:55.576 [INFO] [Thread-13508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] client lang: <none>
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] server lang: <none>
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] kex follows: False
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:49:55.580 [DEBUG] [Thread-13508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:49:55.581 [DEBUG] [Thread-13508] [transport.py] [_log()] Compression: none
2025-12-25T14:49:55.581 [DEBUG] [Thread-13508] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:49:55.597 [DEBUG] [Thread-13508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:49:55.597 [DEBUG] [Thread-13508] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:49:55.598 [DEBUG] [Thread-13508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:49:55.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:49:55.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:49:55.600 [DEBUG] [Thread-13508] [transport.py] [_log()] userauth is OK
2025-12-25T14:49:55.600 [DEBUG] [Thread-13508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:49:55.600 [DEBUG] [Thread-13508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:49:55.600 [DEBUG] [Thread-13508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:49:55.600 [DEBUG] [Thread-13508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:49:55.614 [INFO] [Thread-13508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:49:55.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:49:56.260 [DEBUG] [Thread-13508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:49:56.260 [DEBUG] [Thread-13508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:49:56.260 [DEBUG] [Thread-13508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:49:56.301 [DEBUG] [Thread-13508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:49:56.301 [DEBUG] [Thread-13508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:49:56.304 [DEBUG] [Thread-13508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:49:56.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:49:56.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:49:56.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:49:56.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:49:56.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:49:56.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:49:56.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:49:56.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:49:56.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:49:56.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.534089 -999.00  +25.50  39.74     19   +0.30 1 1 2 1 1   888    0 28.81 125.14 ----- 40.9 39.7 291.8 47.6 30.9 -28.9 30.6 -26.8 31.1 -24.9 31.6 -26.2
2025-12-25T14:49:56.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:49:56.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:49:56.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.534089
2025-12-25T14:49:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:49:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:49:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:49:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:49:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:49:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:49:51', tmtdew=30.64, humidity=12.92, cloud=29.3, wind=27.38, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:49:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:49:56.330 [DEBUG] [Thread-13508] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:49:56.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-25T14:49:56.424 [DEBUG] [Thread-13511] [transport.py] [_log()] starting thread (client mode): 0xb95d6710
2025-12-25T14:49:56.424 [DEBUG] [Thread-13511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:49:56.438 [DEBUG] [Thread-13511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:49:56.438 [INFO] [Thread-13511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] client lang: <none>
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] server lang: <none>
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] kex follows: False
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:49:56.446 [DEBUG] [Thread-13511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:49:56.447 [DEBUG] [Thread-13511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:49:56.447 [DEBUG] [Thread-13511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:49:56.447 [DEBUG] [Thread-13511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:49:56.447 [DEBUG] [Thread-13511] [transport.py] [_log()] Compression: none
2025-12-25T14:49:56.447 [DEBUG] [Thread-13511] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:49:56.506 [DEBUG] [Thread-13511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:49:56.507 [DEBUG] [Thread-13511] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:49:56.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:49:56.508 [DEBUG] [Thread-13511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:49:56.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:49:56.562 [DEBUG] [Thread-13511] [transport.py] [_log()] userauth is OK
2025-12-25T14:49:56.562 [DEBUG] [Thread-13511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:49:56.562 [DEBUG] [Thread-13511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:49:56.563 [DEBUG] [Thread-13511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:49:56.563 [DEBUG] [Thread-13511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:49:56.586 [INFO] [Thread-13511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:49:56.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-25T14:49:56.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:49:57.458 [DEBUG] [Thread-13511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:49:57.458 [DEBUG] [Thread-13511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:49:57.506 [DEBUG] [Thread-13511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:49:57.506 [DEBUG] [Thread-13511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:49:57.515 [DEBUG] [Thread-13511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:49:57.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:49:57.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-25T14:49:57.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-25T14:49:57.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:49:57.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:49:57.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:49:57.549 [DEBUG] [Thread-13511] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:49:58.012 [DEBUG] [Thread-13513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:08.853 [DEBUG] [Thread-13514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:13.057 [DEBUG] [Thread-13515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:27.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:50:27.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:50:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:50:28.085 [DEBUG] [Thread-13516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:28.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 50, 23), 30.66, 12.91, 29.3, 32.01, 26.35, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:50:28.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:50:23
2025-12-25T14:50:28.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:50:28.552 [DEBUG] [Thread-13517] [transport.py] [_log()] starting thread (client mode): 0xb95d7220
2025-12-25T14:50:28.552 [DEBUG] [Thread-13517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:50:28.573 [DEBUG] [Thread-13517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:50:28.573 [INFO] [Thread-13517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:50:28.576 [DEBUG] [Thread-13517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:50:28.576 [DEBUG] [Thread-13517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] client lang: <none>
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] server lang: <none>
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] kex follows: False
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] Compression: none
2025-12-25T14:50:28.577 [DEBUG] [Thread-13517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:50:28.595 [DEBUG] [Thread-13517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:50:28.595 [DEBUG] [Thread-13517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:50:28.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:50:28.596 [DEBUG] [Thread-13517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:50:28.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:50:28.599 [DEBUG] [Thread-13517] [transport.py] [_log()] userauth is OK
2025-12-25T14:50:28.599 [DEBUG] [Thread-13517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:50:28.599 [DEBUG] [Thread-13517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:50:28.599 [DEBUG] [Thread-13517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:50:28.599 [DEBUG] [Thread-13517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:50:28.624 [INFO] [Thread-13517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:50:28.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:50:29.289 [DEBUG] [Thread-13517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:50:29.289 [DEBUG] [Thread-13517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:50:29.290 [DEBUG] [Thread-13517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:50:29.330 [DEBUG] [Thread-13517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:50:29.330 [DEBUG] [Thread-13517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:50:29.334 [DEBUG] [Thread-13517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:50:29.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:50:29.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:50:29.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:50:29.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:50:29.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:50:29.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:50:29.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:50:29.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:50:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:50:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.534436 -999.00  +25.30  31.02     19   +0.30 1 1 2 1 1   888    0 27.69 111.59 ----- 33.6 31.0 290.8 46.2 30.7 -27.8 30.4 -27.6 30.8 -25.6 31.5 -25.6
2025-12-25T14:50:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:50:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:50:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.534436
2025-12-25T14:50:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:50:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:50:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:50:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:50:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:50:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:50:23', tmtdew=30.66, humidity=12.91, cloud=29.3, wind=32.01, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:49:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:50:29.363 [DEBUG] [Thread-13517] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:50:29.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-25T14:50:29.456 [DEBUG] [Thread-13520] [transport.py] [_log()] starting thread (client mode): 0xb9578130
2025-12-25T14:50:29.456 [DEBUG] [Thread-13520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:50:29.471 [DEBUG] [Thread-13520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:50:29.472 [INFO] [Thread-13520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:50:29.479 [DEBUG] [Thread-13520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] client lang: <none>
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] server lang: <none>
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] kex follows: False
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] Compression: none
2025-12-25T14:50:29.480 [DEBUG] [Thread-13520] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:50:29.542 [DEBUG] [Thread-13520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:50:29.543 [DEBUG] [Thread-13520] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:50:29.543 [DEBUG] [Thread-13520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:50:29.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:50:29.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:50:29.599 [DEBUG] [Thread-13520] [transport.py] [_log()] userauth is OK
2025-12-25T14:50:29.599 [DEBUG] [Thread-13520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:50:29.599 [DEBUG] [Thread-13520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:50:29.600 [DEBUG] [Thread-13520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:50:29.600 [DEBUG] [Thread-13520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:50:29.619 [INFO] [Thread-13520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:50:29.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-25T14:50:29.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:50:30.478 [DEBUG] [Thread-13520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:50:30.478 [DEBUG] [Thread-13520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:50:30.526 [DEBUG] [Thread-13520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:50:30.526 [DEBUG] [Thread-13520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:50:30.535 [DEBUG] [Thread-13520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:50:30.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:50:30.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:50:30.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:50:30.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:50:30.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:50:30.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:50:30.571 [DEBUG] [Thread-13520] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:50:39.934 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:39.935 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:43.121 [DEBUG] [Thread-13522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:50:58.175 [DEBUG] [Thread-13523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:00.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:51:00.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:51:00.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-25T14:51:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 50, 55), 30.79, 12.86, 29.3, 30.93, 26.72, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:51:01.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:50:55
2025-12-25T14:51:01.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:51:01.559 [DEBUG] [Thread-13524] [transport.py] [_log()] starting thread (client mode): 0xb95d7280
2025-12-25T14:51:01.559 [DEBUG] [Thread-13524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:51:01.581 [DEBUG] [Thread-13524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:51:01.581 [INFO] [Thread-13524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:51:01.584 [DEBUG] [Thread-13524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] client lang: <none>
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] server lang: <none>
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] kex follows: False
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] Compression: none
2025-12-25T14:51:01.585 [DEBUG] [Thread-13524] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:51:01.605 [DEBUG] [Thread-13524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:51:01.605 [DEBUG] [Thread-13524] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:51:01.606 [DEBUG] [Thread-13524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:51:01.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:51:01.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:51:01.608 [DEBUG] [Thread-13524] [transport.py] [_log()] userauth is OK
2025-12-25T14:51:01.608 [DEBUG] [Thread-13524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:51:01.608 [DEBUG] [Thread-13524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:51:01.608 [DEBUG] [Thread-13524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:51:01.608 [DEBUG] [Thread-13524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:51:01.631 [INFO] [Thread-13524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:51:01.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:51:02.283 [DEBUG] [Thread-13524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:51:02.283 [DEBUG] [Thread-13524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:51:02.283 [DEBUG] [Thread-13524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:51:02.324 [DEBUG] [Thread-13524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:51:02.324 [DEBUG] [Thread-13524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:51:02.328 [DEBUG] [Thread-13524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:51:02.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:51:02.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:51:02.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:51:02.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:51:02.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:51:02.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:51:02.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:51:02.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:51:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:51:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.534784 -999.00  +25.10  24.03     19   +0.00 1 1 1 1 1   888    0 28.10 104.96 ----- 26.4 24.0 289.8 39.5 30.7 -27.7 30.4 -27.2 30.8 -24.9 31.4 -25.3
2025-12-25T14:51:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:51:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:51:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.534784
2025-12-25T14:51:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:51:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:51:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:51:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:51:02.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:51:02.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:50:55', tmtdew=30.79, humidity=12.86, cloud=29.3, wind=30.93, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:50:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:51:02.357 [DEBUG] [Thread-13524] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:51:02.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-25T14:51:02.444 [DEBUG] [Thread-13527] [transport.py] [_log()] starting thread (client mode): 0xb95d62f0
2025-12-25T14:51:02.444 [DEBUG] [Thread-13527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:51:02.458 [DEBUG] [Thread-13527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:51:02.459 [INFO] [Thread-13527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:51:02.466 [DEBUG] [Thread-13527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:51:02.466 [DEBUG] [Thread-13527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:51:02.466 [DEBUG] [Thread-13527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] client lang: <none>
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] server lang: <none>
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] kex follows: False
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:51:02.467 [DEBUG] [Thread-13527] [transport.py] [_log()] Compression: none
2025-12-25T14:51:02.468 [DEBUG] [Thread-13527] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:51:02.523 [DEBUG] [Thread-13527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:51:02.523 [DEBUG] [Thread-13527] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:51:02.523 [DEBUG] [Thread-13527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:51:02.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:51:02.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:51:02.580 [DEBUG] [Thread-13527] [transport.py] [_log()] userauth is OK
2025-12-25T14:51:02.580 [DEBUG] [Thread-13527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:51:02.580 [DEBUG] [Thread-13527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:51:02.580 [DEBUG] [Thread-13527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:51:02.580 [DEBUG] [Thread-13527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:51:02.599 [INFO] [Thread-13527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:51:02.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-25T14:51:02.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:51:03.484 [DEBUG] [Thread-13527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:51:03.484 [DEBUG] [Thread-13527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:51:03.532 [DEBUG] [Thread-13527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:51:03.532 [DEBUG] [Thread-13527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:51:03.542 [DEBUG] [Thread-13527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:51:03.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:51:03.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-25T14:51:03.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-25T14:51:03.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:51:03.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:51:03.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:51:03.578 [DEBUG] [Thread-13527] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:51:08.898 [DEBUG] [Thread-13529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:13.209 [DEBUG] [Thread-13530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:28.260 [DEBUG] [Thread-13531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:33.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:51:33.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:51:33.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-25T14:51:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 51, 27), 30.42, 13.11, 29.3, 25.78, 26.32, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:51:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:51:27
2025-12-25T14:51:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:51:34.575 [DEBUG] [Thread-13532] [transport.py] [_log()] starting thread (client mode): 0xb9592b60
2025-12-25T14:51:34.575 [DEBUG] [Thread-13532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:51:34.587 [DEBUG] [Thread-13532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:51:34.587 [INFO] [Thread-13532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] client lang: <none>
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] server lang: <none>
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] kex follows: False
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] Compression: none
2025-12-25T14:51:34.591 [DEBUG] [Thread-13532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:51:34.607 [DEBUG] [Thread-13532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:51:34.607 [DEBUG] [Thread-13532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:51:34.607 [DEBUG] [Thread-13532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:51:34.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:51:34.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:51:34.648 [DEBUG] [Thread-13532] [transport.py] [_log()] userauth is OK
2025-12-25T14:51:34.648 [DEBUG] [Thread-13532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:51:34.648 [DEBUG] [Thread-13532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:51:34.648 [DEBUG] [Thread-13532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:51:34.648 [DEBUG] [Thread-13532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:51:34.678 [INFO] [Thread-13532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:51:34.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:51:35.282 [DEBUG] [Thread-13532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:51:35.282 [DEBUG] [Thread-13532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:51:35.282 [DEBUG] [Thread-13532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:51:35.324 [DEBUG] [Thread-13532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:51:35.324 [DEBUG] [Thread-13532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:51:35.326 [DEBUG] [Thread-13532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:51:35.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:51:35.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:51:35.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:51:35.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:51:35.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:51:35.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:51:35.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.535131 -999.00  +25.60  25.06     19   +0.50 1 1 1 1 1   888    0 27.06 84.08 ----- 24.3 25.1 296.2 31.7 30.7 -26.4 30.4 -26.7 30.9 -25.8 31.6 -24.3
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.535131
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:51:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:51:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:51:27', tmtdew=30.42, humidity=13.11, cloud=29.3, wind=25.78, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:50:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:51:35.346 [DEBUG] [Thread-13532] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:51:35.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:51:35.431 [DEBUG] [Thread-13535] [transport.py] [_log()] starting thread (client mode): 0xb955bbb0
2025-12-25T14:51:35.431 [DEBUG] [Thread-13535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:51:35.447 [DEBUG] [Thread-13535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:51:35.447 [INFO] [Thread-13535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] client lang: <none>
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] server lang: <none>
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] kex follows: False
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:51:35.454 [DEBUG] [Thread-13535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:51:35.455 [DEBUG] [Thread-13535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:51:35.455 [DEBUG] [Thread-13535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:51:35.455 [DEBUG] [Thread-13535] [transport.py] [_log()] Compression: none
2025-12-25T14:51:35.455 [DEBUG] [Thread-13535] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:51:35.510 [DEBUG] [Thread-13535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:51:35.510 [DEBUG] [Thread-13535] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:51:35.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:51:35.511 [DEBUG] [Thread-13535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:51:35.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:51:35.567 [DEBUG] [Thread-13535] [transport.py] [_log()] userauth is OK
2025-12-25T14:51:35.568 [DEBUG] [Thread-13535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:51:35.568 [DEBUG] [Thread-13535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:51:35.568 [DEBUG] [Thread-13535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:51:35.568 [DEBUG] [Thread-13535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:51:35.588 [INFO] [Thread-13535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:51:35.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:51:35.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:51:36.440 [DEBUG] [Thread-13535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:51:36.440 [DEBUG] [Thread-13535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:51:36.488 [DEBUG] [Thread-13535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:51:36.488 [DEBUG] [Thread-13535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:51:36.498 [DEBUG] [Thread-13535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:51:36.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:51:36.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-25T14:51:36.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-25T14:51:36.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:51:36.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:51:36.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:51:36.535 [DEBUG] [Thread-13535] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:51:40.082 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:40.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:43.299 [DEBUG] [Thread-13537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:51:58.351 [DEBUG] [Thread-13538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:06.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:52:06.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:52:06.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:52:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 52, 1), 30.18, 13.3, 29.3, 24.21, 26.21, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:52:07.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:52:01
2025-12-25T14:52:07.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:52:07.550 [DEBUG] [Thread-13539] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T14:52:07.550 [DEBUG] [Thread-13539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:52:07.570 [DEBUG] [Thread-13539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:52:07.570 [INFO] [Thread-13539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] client lang: <none>
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] server lang: <none>
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] kex follows: False
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] Compression: none
2025-12-25T14:52:07.574 [DEBUG] [Thread-13539] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:52:07.591 [DEBUG] [Thread-13539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:52:07.591 [DEBUG] [Thread-13539] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:52:07.592 [DEBUG] [Thread-13539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:52:07.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:52:07.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:52:07.593 [DEBUG] [Thread-13539] [transport.py] [_log()] userauth is OK
2025-12-25T14:52:07.593 [DEBUG] [Thread-13539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:52:07.594 [DEBUG] [Thread-13539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:52:07.594 [DEBUG] [Thread-13539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:52:07.594 [DEBUG] [Thread-13539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:52:07.617 [INFO] [Thread-13539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:52:07.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:52:08.243 [DEBUG] [Thread-13539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:52:08.243 [DEBUG] [Thread-13539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:52:08.243 [DEBUG] [Thread-13539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:52:08.284 [DEBUG] [Thread-13539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:52:08.284 [DEBUG] [Thread-13539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:52:08.286 [DEBUG] [Thread-13539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:52:08.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:52:08.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:52:08.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:52:08.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:52:08.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:52:08.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:52:08.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:52:08.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:52:08.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:52:08.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.535478 -999.00  +25.60  26.14     19   +0.30 1 1 1 1 1   888    0 27.41 83.94 ----- 22.1 26.1 295.8 35.3 30.9 -26.9 30.5 -27.2 30.9 -24.0 31.7 -25.2
2025-12-25T14:52:08.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:52:08.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:52:08.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.535478
2025-12-25T14:52:08.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:52:08.309 [DEBUG] [Thread-13539] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:52:08.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:52:08.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:52:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:52:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:52:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:52:01', tmtdew=30.18, humidity=13.3, cloud=29.3, wind=24.21, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:51:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:52:08.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-25T14:52:08.416 [DEBUG] [Thread-13542] [transport.py] [_log()] starting thread (client mode): 0xb6b61510
2025-12-25T14:52:08.416 [DEBUG] [Thread-13542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:52:08.434 [DEBUG] [Thread-13542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:52:08.434 [INFO] [Thread-13542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] client lang: <none>
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] server lang: <none>
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] kex follows: False
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:52:08.445 [DEBUG] [Thread-13542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:52:08.446 [DEBUG] [Thread-13542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:52:08.446 [DEBUG] [Thread-13542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:52:08.446 [DEBUG] [Thread-13542] [transport.py] [_log()] Compression: none
2025-12-25T14:52:08.446 [DEBUG] [Thread-13542] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:52:08.499 [DEBUG] [Thread-13542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:52:08.499 [DEBUG] [Thread-13542] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:52:08.499 [DEBUG] [Thread-13542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:52:08.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:52:08.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:52:08.556 [DEBUG] [Thread-13542] [transport.py] [_log()] userauth is OK
2025-12-25T14:52:08.556 [DEBUG] [Thread-13542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:52:08.556 [DEBUG] [Thread-13542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:52:08.556 [DEBUG] [Thread-13542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:52:08.556 [DEBUG] [Thread-13542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:52:08.570 [INFO] [Thread-13542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:52:08.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:52:08.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:52:08.944 [DEBUG] [Thread-13544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:09.407 [DEBUG] [Thread-13542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:52:09.407 [DEBUG] [Thread-13542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:52:09.454 [DEBUG] [Thread-13542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:52:09.454 [DEBUG] [Thread-13542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:52:09.462 [DEBUG] [Thread-13542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:52:09.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:52:09.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-25T14:52:09.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-25T14:52:09.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:52:09.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:52:09.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:52:09.494 [DEBUG] [Thread-13542] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:52:13.379 [DEBUG] [Thread-13545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:28.422 [DEBUG] [Thread-13546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:39.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:52:39.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:52:39.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:52:40.223 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:40.224 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:40.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 52, 33), 31.24, 12.61, 29.3, 41.74, 27.41, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:52:40.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:52:33
2025-12-25T14:52:40.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:52:40.500 [DEBUG] [Thread-13547] [transport.py] [_log()] starting thread (client mode): 0xb95d5f90
2025-12-25T14:52:40.500 [DEBUG] [Thread-13547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:52:40.520 [DEBUG] [Thread-13547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:52:40.521 [INFO] [Thread-13547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:52:40.524 [DEBUG] [Thread-13547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:52:40.524 [DEBUG] [Thread-13547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:52:40.524 [DEBUG] [Thread-13547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:52:40.524 [DEBUG] [Thread-13547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:40.524 [DEBUG] [Thread-13547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] client lang: <none>
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] server lang: <none>
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] kex follows: False
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:52:40.525 [DEBUG] [Thread-13547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:52:40.526 [DEBUG] [Thread-13547] [transport.py] [_log()] Compression: none
2025-12-25T14:52:40.526 [DEBUG] [Thread-13547] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:52:40.543 [DEBUG] [Thread-13547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:52:40.543 [DEBUG] [Thread-13547] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:52:40.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:52:40.544 [DEBUG] [Thread-13547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:52:40.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:52:40.546 [DEBUG] [Thread-13547] [transport.py] [_log()] userauth is OK
2025-12-25T14:52:40.546 [DEBUG] [Thread-13547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:52:40.546 [DEBUG] [Thread-13547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:52:40.546 [DEBUG] [Thread-13547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:52:40.546 [DEBUG] [Thread-13547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:52:40.564 [INFO] [Thread-13547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:52:40.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:52:41.189 [DEBUG] [Thread-13547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:52:41.190 [DEBUG] [Thread-13547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:52:41.190 [DEBUG] [Thread-13547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:52:41.231 [DEBUG] [Thread-13547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:52:41.231 [DEBUG] [Thread-13547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:52:41.235 [DEBUG] [Thread-13547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:52:41.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:52:41.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:52:41.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:52:41.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:52:41.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:52:41.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:52:41.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:52:41.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:52:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:52:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.536173 -999.00  +26.20  23.32     18   +0.40 1 1 1 1 1   888    0 27.15 84.64 ----- 28.9 23.3 289.2 27.6 31.1 -26.8 30.8 -26.5 31.2 -25.1 31.9 -25.7
2025-12-25T14:52:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:52:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:52:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.536173
2025-12-25T14:52:41.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:52:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:52:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:52:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:52:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:52:41.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:52:33', tmtdew=31.24, humidity=12.61, cloud=29.3, wind=41.74, temperature=27.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:52:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:52:41.262 [DEBUG] [Thread-13547] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:52:41.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-25T14:52:41.355 [DEBUG] [Thread-13550] [transport.py] [_log()] starting thread (client mode): 0xb9590ca0
2025-12-25T14:52:41.355 [DEBUG] [Thread-13550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:52:41.370 [DEBUG] [Thread-13550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:52:41.370 [INFO] [Thread-13550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:52:41.378 [DEBUG] [Thread-13550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:52:41.378 [DEBUG] [Thread-13550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:52:41.378 [DEBUG] [Thread-13550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:52:41.378 [DEBUG] [Thread-13550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:41.378 [DEBUG] [Thread-13550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] client lang: <none>
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] server lang: <none>
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] kex follows: False
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] Compression: none
2025-12-25T14:52:41.379 [DEBUG] [Thread-13550] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:52:41.437 [DEBUG] [Thread-13550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:52:41.438 [DEBUG] [Thread-13550] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:52:41.438 [DEBUG] [Thread-13550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:52:41.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:52:41.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:52:41.493 [DEBUG] [Thread-13550] [transport.py] [_log()] userauth is OK
2025-12-25T14:52:41.494 [DEBUG] [Thread-13550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:52:41.494 [DEBUG] [Thread-13550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:52:41.494 [DEBUG] [Thread-13550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:52:41.494 [DEBUG] [Thread-13550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:52:41.519 [INFO] [Thread-13550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:52:41.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-25T14:52:41.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:52:42.390 [DEBUG] [Thread-13550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:52:42.390 [DEBUG] [Thread-13550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:52:42.438 [DEBUG] [Thread-13550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:52:42.438 [DEBUG] [Thread-13550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:52:42.448 [DEBUG] [Thread-13550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:52:42.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:52:42.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-25T14:52:42.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:52:42.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:52:42.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:52:42.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:52:42.484 [DEBUG] [Thread-13550] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:52:43.462 [DEBUG] [Thread-13552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:52:58.508 [DEBUG] [Thread-13553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:08.995 [DEBUG] [Thread-13554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:53:12.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:53:12.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-25T14:53:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 53, 5), 30.51, 13.26, 29.3, 31.07, 26.69, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:53:13.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:53:05
2025-12-25T14:53:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:53:13.464 [DEBUG] [Thread-13555] [transport.py] [_log()] starting thread (client mode): 0xb9592c20
2025-12-25T14:53:13.465 [DEBUG] [Thread-13555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:53:13.485 [DEBUG] [Thread-13555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:53:13.485 [INFO] [Thread-13555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:53:13.488 [DEBUG] [Thread-13555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] client lang: <none>
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] server lang: <none>
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] kex follows: False
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:53:13.489 [DEBUG] [Thread-13555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:53:13.490 [DEBUG] [Thread-13555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:53:13.490 [DEBUG] [Thread-13555] [transport.py] [_log()] Compression: none
2025-12-25T14:53:13.490 [DEBUG] [Thread-13555] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:53:13.510 [DEBUG] [Thread-13555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:53:13.510 [DEBUG] [Thread-13555] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:53:13.511 [DEBUG] [Thread-13555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:53:13.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:53:13.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:53:13.513 [DEBUG] [Thread-13555] [transport.py] [_log()] userauth is OK
2025-12-25T14:53:13.513 [DEBUG] [Thread-13555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:53:13.513 [DEBUG] [Thread-13555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:53:13.513 [DEBUG] [Thread-13555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:53:13.513 [DEBUG] [Thread-13555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:53:13.536 [INFO] [Thread-13555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:53:13.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:53:13.542 [DEBUG] [Thread-13557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:14.173 [DEBUG] [Thread-13555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:53:14.174 [DEBUG] [Thread-13555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:53:14.174 [DEBUG] [Thread-13555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:53:14.215 [DEBUG] [Thread-13555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:53:14.215 [DEBUG] [Thread-13555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:53:14.219 [DEBUG] [Thread-13555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:53:14.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:53:14.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:53:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:53:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:53:14.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:53:14.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:53:14.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:53:14.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:53:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:53:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.536520 -999.00  +26.20  28.63     18   +0.50 1 1 1 1 1   888    0 27.44 96.63 ----- 34.6 28.6 301.0 40.4 31.1 -28.4 30.8 -27.0 31.2 -25.4 31.8 -26.6
2025-12-25T14:53:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:53:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:53:14.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.536520
2025-12-25T14:53:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:53:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:53:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:53:14.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:53:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:53:14.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:53:05', tmtdew=30.51, humidity=13.26, cloud=29.3, wind=31.07, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:52:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:53:14.249 [DEBUG] [Thread-13555] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:53:14.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-25T14:53:14.341 [DEBUG] [Thread-13559] [transport.py] [_log()] starting thread (client mode): 0xb95b1960
2025-12-25T14:53:14.341 [DEBUG] [Thread-13559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:53:14.356 [DEBUG] [Thread-13559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:53:14.356 [INFO] [Thread-13559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:53:14.363 [DEBUG] [Thread-13559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:53:14.363 [DEBUG] [Thread-13559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:53:14.363 [DEBUG] [Thread-13559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] client lang: <none>
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] server lang: <none>
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] kex follows: False
2025-12-25T14:53:14.364 [DEBUG] [Thread-13559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:53:14.365 [DEBUG] [Thread-13559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:53:14.365 [DEBUG] [Thread-13559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:53:14.365 [DEBUG] [Thread-13559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:53:14.365 [DEBUG] [Thread-13559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:53:14.365 [DEBUG] [Thread-13559] [transport.py] [_log()] Compression: none
2025-12-25T14:53:14.365 [DEBUG] [Thread-13559] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:53:14.421 [DEBUG] [Thread-13559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:53:14.422 [DEBUG] [Thread-13559] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:53:14.422 [DEBUG] [Thread-13559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:53:14.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:53:14.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:53:14.477 [DEBUG] [Thread-13559] [transport.py] [_log()] userauth is OK
2025-12-25T14:53:14.477 [DEBUG] [Thread-13559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:53:14.477 [DEBUG] [Thread-13559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:53:14.477 [DEBUG] [Thread-13559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:53:14.478 [DEBUG] [Thread-13559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:53:14.500 [INFO] [Thread-13559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:53:14.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-25T14:53:14.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:53:15.350 [DEBUG] [Thread-13559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:53:15.351 [DEBUG] [Thread-13559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:53:15.399 [DEBUG] [Thread-13559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:53:15.399 [DEBUG] [Thread-13559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:53:15.408 [DEBUG] [Thread-13559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:53:15.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:53: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')
2025-12-25T14:53:15.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-25T14:53:15.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:53:15.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:53:15.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:53:15.441 [DEBUG] [Thread-13559] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:53:28.576 [DEBUG] [Thread-13561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:40.363 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:40.364 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:43.612 [DEBUG] [Thread-13562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:53:45.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:53:45.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:53:45.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-25T14:53:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 53, 37), 30.4, 13.24, 29.3, 35.68, 26.15, 0, 0, 0, 0, 0, 0),)
2025-12-25T14:53:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:53:37
2025-12-25T14:53:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:53:46.455 [DEBUG] [Thread-13563] [transport.py] [_log()] starting thread (client mode): 0xb95b3be0
2025-12-25T14:53:46.456 [DEBUG] [Thread-13563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:53:46.476 [DEBUG] [Thread-13563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:53:46.476 [INFO] [Thread-13563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] client lang: <none>
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] server lang: <none>
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] kex follows: False
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:53:46.479 [DEBUG] [Thread-13563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:53:46.480 [DEBUG] [Thread-13563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:53:46.480 [DEBUG] [Thread-13563] [transport.py] [_log()] Compression: none
2025-12-25T14:53:46.480 [DEBUG] [Thread-13563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:53:46.487 [DEBUG] [Thread-13563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:53:46.488 [DEBUG] [Thread-13563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:53:46.488 [DEBUG] [Thread-13563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:53:46.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:53:46.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:53:46.533 [DEBUG] [Thread-13563] [transport.py] [_log()] userauth is OK
2025-12-25T14:53:46.533 [DEBUG] [Thread-13563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:53:46.533 [DEBUG] [Thread-13563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:53:46.533 [DEBUG] [Thread-13563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:53:46.533 [DEBUG] [Thread-13563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:53:46.565 [INFO] [Thread-13563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:53:46.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:53:47.190 [DEBUG] [Thread-13563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:53:47.190 [DEBUG] [Thread-13563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:53:47.190 [DEBUG] [Thread-13563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:53:47.231 [DEBUG] [Thread-13563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:53:47.231 [DEBUG] [Thread-13563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:53:47.235 [DEBUG] [Thread-13563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:53:47.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:53:47.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:53:47.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:53:47.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:53:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:53:47.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:53:47.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:53:47.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:53:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:53:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.536867 -999.00  +25.90  25.60     19   +0.70 1 1 1 1 1   888    0 28.01 96.19 ----- 34.8 25.6 312.2 39.8 31.0 -26.4 30.7 -28.0 31.1 -26.5 31.7 -25.4
2025-12-25T14:53:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:53:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:53:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.536867
2025-12-25T14:53:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:53:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:53:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:53:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:53:47.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:53:47.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:53:37', tmtdew=30.4, humidity=13.24, cloud=29.3, wind=35.68, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:53:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:53:47.263 [DEBUG] [Thread-13563] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:53:47.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-25T14:53:47.356 [DEBUG] [Thread-13566] [transport.py] [_log()] starting thread (client mode): 0xb9558dc0
2025-12-25T14:53:47.357 [DEBUG] [Thread-13566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:53:47.374 [DEBUG] [Thread-13566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:53:47.374 [INFO] [Thread-13566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:53:47.381 [DEBUG] [Thread-13566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] client lang: <none>
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] server lang: <none>
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] kex follows: False
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:53:47.382 [DEBUG] [Thread-13566] [transport.py] [_log()] Compression: none
2025-12-25T14:53:47.383 [DEBUG] [Thread-13566] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:53:47.443 [DEBUG] [Thread-13566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:53:47.443 [DEBUG] [Thread-13566] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:53:47.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:53:47.444 [DEBUG] [Thread-13566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:53:47.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:53:47.498 [DEBUG] [Thread-13566] [transport.py] [_log()] userauth is OK
2025-12-25T14:53:47.499 [DEBUG] [Thread-13566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:53:47.499 [DEBUG] [Thread-13566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:53:47.499 [DEBUG] [Thread-13566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:53:47.499 [DEBUG] [Thread-13566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:53:47.518 [INFO] [Thread-13566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:53:47.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:53:47.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:53:48.433 [DEBUG] [Thread-13566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:53:48.433 [DEBUG] [Thread-13566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:53:48.481 [DEBUG] [Thread-13566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:53:48.481 [DEBUG] [Thread-13566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:53:48.490 [DEBUG] [Thread-13566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:53:48.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:53:48.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-25T14:53:48.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-25T14:53:48.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:53:48.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:53:48.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:53:48.523 [DEBUG] [Thread-13566] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:53:58.650 [DEBUG] [Thread-13568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:09.038 [DEBUG] [Thread-13569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:13.707 [DEBUG] [Thread-13570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:18.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:54:18.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:54:18.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-25T14:54:19.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 54, 9), 30.32, 13.3, 0.0, 31.64, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:54:19.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:54:09
2025-12-25T14:54:19.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:54:19.517 [DEBUG] [Thread-13571] [transport.py] [_log()] starting thread (client mode): 0xb95b0310
2025-12-25T14:54:19.517 [DEBUG] [Thread-13571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:54:19.539 [DEBUG] [Thread-13571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:54:19.539 [INFO] [Thread-13571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] client lang: <none>
2025-12-25T14:54:19.542 [DEBUG] [Thread-13571] [transport.py] [_log()] server lang: <none>
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] kex follows: False
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] Compression: none
2025-12-25T14:54:19.543 [DEBUG] [Thread-13571] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:54:19.565 [DEBUG] [Thread-13571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:54:19.566 [DEBUG] [Thread-13571] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:54:19.567 [DEBUG] [Thread-13571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:54:19.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:54:19.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:54:19.569 [DEBUG] [Thread-13571] [transport.py] [_log()] userauth is OK
2025-12-25T14:54:19.569 [DEBUG] [Thread-13571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:54:19.570 [DEBUG] [Thread-13571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:54:19.570 [DEBUG] [Thread-13571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:54:19.570 [DEBUG] [Thread-13571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:54:19.594 [INFO] [Thread-13571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:54:19.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:54:20.254 [DEBUG] [Thread-13571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:54:20.255 [DEBUG] [Thread-13571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:54:20.256 [DEBUG] [Thread-13571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:54:20.296 [DEBUG] [Thread-13571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:54:20.296 [DEBUG] [Thread-13571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:54:20.299 [DEBUG] [Thread-13571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:54:20.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:54:20.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:54:20.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:54:20.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:54:20.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:54:20.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:54:20.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:54:20.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.537214 -999.00  +25.80  21.80     19   +0.50 1 1 1 1 1   888    0 28.28 103.63 ----- 24.5 21.8 314.0 37.5 31.0 -27.2 30.6 -27.7 31.1 -27.6 31.8 -24.7
2025-12-25T14:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.537214
2025-12-25T14:54:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:54:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:54:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:54:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:54:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:54:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:54:09', tmtdew=30.32, humidity=13.3, cloud=0.0, wind=31.64, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:53:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:54:20.328 [DEBUG] [Thread-13571] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:54:20.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-25T14:54:20.422 [DEBUG] [Thread-13574] [transport.py] [_log()] starting thread (client mode): 0xb955a9e0
2025-12-25T14:54:20.422 [DEBUG] [Thread-13574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:54:20.437 [DEBUG] [Thread-13574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:54:20.437 [INFO] [Thread-13574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:54:20.445 [DEBUG] [Thread-13574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] client lang: <none>
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] server lang: <none>
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] kex follows: False
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] Compression: none
2025-12-25T14:54:20.446 [DEBUG] [Thread-13574] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:54:20.509 [DEBUG] [Thread-13574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:54:20.510 [DEBUG] [Thread-13574] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:54:20.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:54:20.511 [DEBUG] [Thread-13574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:54:20.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:54:20.566 [DEBUG] [Thread-13574] [transport.py] [_log()] userauth is OK
2025-12-25T14:54:20.567 [DEBUG] [Thread-13574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:54:20.567 [DEBUG] [Thread-13574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:54:20.567 [DEBUG] [Thread-13574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:54:20.567 [DEBUG] [Thread-13574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:54:20.585 [INFO] [Thread-13574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:54:20.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-25T14:54:20.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:54:21.432 [DEBUG] [Thread-13574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:54:21.433 [DEBUG] [Thread-13574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:54:21.480 [DEBUG] [Thread-13574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:54:21.480 [DEBUG] [Thread-13574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:54:21.489 [DEBUG] [Thread-13574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:54:21.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:54:21.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-25T14:54:21.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-25T14:54:21.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:54:21.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:54:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:54:21.520 [DEBUG] [Thread-13574] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:54:28.742 [DEBUG] [Thread-13576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:40.503 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:40.504 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:43.794 [DEBUG] [Thread-13577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:54:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:54:51.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:54:51.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:54:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 54, 41), 30.79, 12.69, 0.0, 27.03, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:54:52.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:54:41
2025-12-25T14:54:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:54:52.490 [DEBUG] [Thread-13578] [transport.py] [_log()] starting thread (client mode): 0xb6b607c0
2025-12-25T14:54:52.490 [DEBUG] [Thread-13578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:54:52.510 [DEBUG] [Thread-13578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:54:52.510 [INFO] [Thread-13578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] client lang: <none>
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] server lang: <none>
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] kex follows: False
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] Compression: none
2025-12-25T14:54:52.513 [DEBUG] [Thread-13578] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:54:52.530 [DEBUG] [Thread-13578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:54:52.530 [DEBUG] [Thread-13578] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:54:52.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:54:52.531 [DEBUG] [Thread-13578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:54:52.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:54:52.534 [DEBUG] [Thread-13578] [transport.py] [_log()] userauth is OK
2025-12-25T14:54:52.534 [DEBUG] [Thread-13578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:54:52.534 [DEBUG] [Thread-13578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:54:52.534 [DEBUG] [Thread-13578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:54:52.534 [DEBUG] [Thread-13578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:54:52.569 [INFO] [Thread-13578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:54:52.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:54:53.182 [DEBUG] [Thread-13578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:54:53.182 [DEBUG] [Thread-13578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:54:53.183 [DEBUG] [Thread-13578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:54:53.223 [DEBUG] [Thread-13578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:54:53.223 [DEBUG] [Thread-13578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:54:53.227 [DEBUG] [Thread-13578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:54:53.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:54:53.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:54:53.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:54:53.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:54:53.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:54:53.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:54:53.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:54:53.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:54:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:54:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.537561 -999.00  +26.00  37.39     18   +0.10 1 1 2 1 1   888    0 27.73 98.32 ----- 31.5 37.4 295.8 43.1 31.0 -28.2 30.8 -26.7 31.3 -24.8 31.8 -25.4
2025-12-25T14:54:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:54:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:54:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.537561
2025-12-25T14:54:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:54:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:54:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:54:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:54:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:54:53.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:54:41', tmtdew=30.79, humidity=12.69, cloud=0.0, wind=27.03, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:54:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:54:53.253 [DEBUG] [Thread-13578] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:54:53.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-25T14:54:53.347 [DEBUG] [Thread-13581] [transport.py] [_log()] starting thread (client mode): 0xb95929e0
2025-12-25T14:54:53.347 [DEBUG] [Thread-13581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:54:53.362 [DEBUG] [Thread-13581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:54:53.362 [INFO] [Thread-13581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:54:53.369 [DEBUG] [Thread-13581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:54:53.369 [DEBUG] [Thread-13581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:54:53.369 [DEBUG] [Thread-13581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:54:53.369 [DEBUG] [Thread-13581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] client lang: <none>
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] server lang: <none>
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] kex follows: False
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] Compression: none
2025-12-25T14:54:53.370 [DEBUG] [Thread-13581] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:54:53.427 [DEBUG] [Thread-13581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:54:53.428 [DEBUG] [Thread-13581] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:54:53.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:54:53.429 [DEBUG] [Thread-13581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:54:53.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:54:53.484 [DEBUG] [Thread-13581] [transport.py] [_log()] userauth is OK
2025-12-25T14:54:53.484 [DEBUG] [Thread-13581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:54:53.484 [DEBUG] [Thread-13581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:54:53.484 [DEBUG] [Thread-13581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:54:53.484 [DEBUG] [Thread-13581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:54:53.502 [INFO] [Thread-13581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:54:53.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-25T14:54:53.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:54:54.361 [DEBUG] [Thread-13581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:54:54.361 [DEBUG] [Thread-13581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:54:54.409 [DEBUG] [Thread-13581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:54:54.409 [DEBUG] [Thread-13581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:54:54.418 [DEBUG] [Thread-13581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:54:54.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:54:54.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T14:54:54.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-25T14:54:54.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:54:54.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:54:54.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:54:54.455 [DEBUG] [Thread-13581] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:54:58.825 [DEBUG] [Thread-13583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:09.092 [DEBUG] [Thread-13584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:13.879 [DEBUG] [Thread-13585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:55:24.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:55:24.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-25T14:55:25.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 55, 13), 30.72, 12.74, 0.0, 27.23, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:55:25.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:55:13
2025-12-25T14:55:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:55:25.507 [DEBUG] [Thread-13586] [transport.py] [_log()] starting thread (client mode): 0xb95b3460
2025-12-25T14:55:25.507 [DEBUG] [Thread-13586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:55:25.527 [DEBUG] [Thread-13586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:55:25.528 [INFO] [Thread-13586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] client lang: <none>
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] server lang: <none>
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] kex follows: False
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] Compression: none
2025-12-25T14:55:25.531 [DEBUG] [Thread-13586] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:55:25.547 [DEBUG] [Thread-13586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:55:25.547 [DEBUG] [Thread-13586] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:55:25.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:55:25.548 [DEBUG] [Thread-13586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:55:25.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:55:25.592 [DEBUG] [Thread-13586] [transport.py] [_log()] userauth is OK
2025-12-25T14:55:25.592 [DEBUG] [Thread-13586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:55:25.592 [DEBUG] [Thread-13586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:55:25.592 [DEBUG] [Thread-13586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:55:25.592 [DEBUG] [Thread-13586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:55:25.611 [INFO] [Thread-13586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:55:25.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:55:26.296 [DEBUG] [Thread-13586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:55:26.296 [DEBUG] [Thread-13586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:55:26.296 [DEBUG] [Thread-13586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:55:26.338 [DEBUG] [Thread-13586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:55:26.338 [DEBUG] [Thread-13586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:55:26.340 [DEBUG] [Thread-13586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:55:26.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:55:26.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:55:26.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:55:26.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:55:26.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:55:26.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:55:26.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.537908 -999.00  +25.70  29.29     18   -0.20 1 1 1 1 1   888    0 27.43 91.26 ----- 27.3 29.3 275.8 49.4 30.7 -29.3 30.7 -27.5 31.1 -31.7 31.6 -26.4
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.537908
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:55:26.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:55:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:55:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:55:26.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:55:13', tmtdew=30.72, humidity=12.74, cloud=0.0, wind=27.23, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:54:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:55:26.360 [DEBUG] [Thread-13586] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:55:26.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-25T14:55:26.451 [DEBUG] [Thread-13589] [transport.py] [_log()] starting thread (client mode): 0xb6b22620
2025-12-25T14:55:26.451 [DEBUG] [Thread-13589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:55:26.466 [DEBUG] [Thread-13589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:55:26.466 [INFO] [Thread-13589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] client lang: <none>
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] server lang: <none>
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] kex follows: False
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] Compression: none
2025-12-25T14:55:26.473 [DEBUG] [Thread-13589] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:55:26.530 [DEBUG] [Thread-13589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:55:26.530 [DEBUG] [Thread-13589] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:55:26.531 [DEBUG] [Thread-13589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:55:26.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:55:26.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:55:26.587 [DEBUG] [Thread-13589] [transport.py] [_log()] userauth is OK
2025-12-25T14:55:26.587 [DEBUG] [Thread-13589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:55:26.587 [DEBUG] [Thread-13589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:55:26.587 [DEBUG] [Thread-13589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:55:26.587 [DEBUG] [Thread-13589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:55:26.602 [INFO] [Thread-13589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:55:26.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-25T14:55:26.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:55:27.458 [DEBUG] [Thread-13589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:55:27.458 [DEBUG] [Thread-13589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:55:27.505 [DEBUG] [Thread-13589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:55:27.505 [DEBUG] [Thread-13589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:55:27.513 [DEBUG] [Thread-13589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:55:27.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:55:27.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-25T14:55:27.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-25T14:55:27.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:55:27.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:55:27.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:55:27.545 [DEBUG] [Thread-13589] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:55:28.909 [DEBUG] [Thread-13591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:40.644 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:40.645 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:43.957 [DEBUG] [Thread-13592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:57.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:55:57.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:55:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:55:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 55, 45), 30.81, 12.56, 0.0, 25.87, 26.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:55:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:55:45
2025-12-25T14:55:58.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:55:58.535 [DEBUG] [Thread-13593] [transport.py] [_log()] starting thread (client mode): 0xb9593b80
2025-12-25T14:55:58.536 [DEBUG] [Thread-13593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:55:58.556 [DEBUG] [Thread-13593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:55:58.556 [INFO] [Thread-13593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] client lang: <none>
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] server lang: <none>
2025-12-25T14:55:58.557 [DEBUG] [Thread-13593] [transport.py] [_log()] kex follows: False
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] Compression: none
2025-12-25T14:55:58.558 [DEBUG] [Thread-13593] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:55:58.566 [DEBUG] [Thread-13593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:55:58.566 [DEBUG] [Thread-13593] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:55:58.567 [DEBUG] [Thread-13593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:55:58.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:55:58.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:55:58.568 [DEBUG] [Thread-13593] [transport.py] [_log()] userauth is OK
2025-12-25T14:55:58.569 [DEBUG] [Thread-13593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:55:58.569 [DEBUG] [Thread-13593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:55:58.569 [DEBUG] [Thread-13593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:55:58.569 [DEBUG] [Thread-13593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:55:58.592 [INFO] [Thread-13593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:55:58.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:55:58.996 [DEBUG] [Thread-13595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:55:59.296 [DEBUG] [Thread-13593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:55:59.296 [DEBUG] [Thread-13593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:55:59.297 [DEBUG] [Thread-13593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:55:59.337 [DEBUG] [Thread-13593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:55:59.337 [DEBUG] [Thread-13593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:55:59.341 [DEBUG] [Thread-13593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:55:59.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:55:59.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:55:59.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:55:59.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:55:59.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:55:59.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:55:59.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:55:59.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:55:59.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:55:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.538256 -999.00  +25.50  20.23     18   -0.10 1 1 1 1 1   888    0 27.52 86.59 ----- 21.8 20.2 280.4 31.0 30.7 -27.7 30.5 -27.7 30.5 -27.1 31.5 -26.8
2025-12-25T14:55:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:55:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:55:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.538256
2025-12-25T14:55:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:55:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:55:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:55:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:55:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:55:59.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:55:45', tmtdew=30.81, humidity=12.56, cloud=0.0, wind=25.87, temperature=26.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:55:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:55:59.367 [DEBUG] [Thread-13593] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:55:59.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T14:55:59.464 [DEBUG] [Thread-13597] [transport.py] [_log()] starting thread (client mode): 0xb6b03fa0
2025-12-25T14:55:59.464 [DEBUG] [Thread-13597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:55:59.478 [DEBUG] [Thread-13597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:55:59.478 [INFO] [Thread-13597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] client lang: <none>
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] server lang: <none>
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] kex follows: False
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:55:59.486 [DEBUG] [Thread-13597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:55:59.487 [DEBUG] [Thread-13597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:55:59.487 [DEBUG] [Thread-13597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:55:59.487 [DEBUG] [Thread-13597] [transport.py] [_log()] Compression: none
2025-12-25T14:55:59.487 [DEBUG] [Thread-13597] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:55:59.544 [DEBUG] [Thread-13597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:55:59.545 [DEBUG] [Thread-13597] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:55:59.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:55:59.546 [DEBUG] [Thread-13597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:55:59.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:55:59.600 [DEBUG] [Thread-13597] [transport.py] [_log()] userauth is OK
2025-12-25T14:55:59.600 [DEBUG] [Thread-13597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:55:59.600 [DEBUG] [Thread-13597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:55:59.600 [DEBUG] [Thread-13597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:55:59.600 [DEBUG] [Thread-13597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:55:59.613 [INFO] [Thread-13597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:55:59.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T14:55:59.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:56:00.455 [DEBUG] [Thread-13597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:56:00.455 [DEBUG] [Thread-13597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:56:00.503 [DEBUG] [Thread-13597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:56:00.504 [DEBUG] [Thread-13597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:56:00.513 [DEBUG] [Thread-13597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:56:00.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:56:00.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-25T14:56:00.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-25T14:56:00.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:56:00.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:56:00.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:56:00.549 [DEBUG] [Thread-13597] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:56:09.148 [DEBUG] [Thread-13599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:56:14.030 [DEBUG] [Thread-13600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:56:29.076 [DEBUG] [Thread-13601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:56:30.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:56:30.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:56:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:56:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 56, 17), 30.81, 12.54, 0.0, 24.23, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:56:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:56:17
2025-12-25T14:56:31.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:56:31.541 [DEBUG] [Thread-13602] [transport.py] [_log()] starting thread (client mode): 0xb6b01a80
2025-12-25T14:56:31.541 [DEBUG] [Thread-13602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:56:31.561 [DEBUG] [Thread-13602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:56:31.561 [INFO] [Thread-13602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:56:31.564 [DEBUG] [Thread-13602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:56:31.564 [DEBUG] [Thread-13602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:56:31.564 [DEBUG] [Thread-13602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:56:31.564 [DEBUG] [Thread-13602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:56:31.564 [DEBUG] [Thread-13602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] client lang: <none>
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] server lang: <none>
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] kex follows: False
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] Compression: none
2025-12-25T14:56:31.565 [DEBUG] [Thread-13602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:56:31.582 [DEBUG] [Thread-13602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:56:31.583 [DEBUG] [Thread-13602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:56:31.584 [DEBUG] [Thread-13602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:56:31.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:56:31.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:56:31.586 [DEBUG] [Thread-13602] [transport.py] [_log()] userauth is OK
2025-12-25T14:56:31.586 [DEBUG] [Thread-13602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:56:31.586 [DEBUG] [Thread-13602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:56:31.586 [DEBUG] [Thread-13602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:56:31.586 [DEBUG] [Thread-13602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:56:31.611 [INFO] [Thread-13602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:56:31.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:56:32.244 [DEBUG] [Thread-13602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:56:32.244 [DEBUG] [Thread-13602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:56:32.245 [DEBUG] [Thread-13602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:56:32.285 [DEBUG] [Thread-13602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:56:32.285 [DEBUG] [Thread-13602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:56:32.289 [DEBUG] [Thread-13602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:56:32.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:56:32.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:56:32.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:56:32.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:56:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:56:32.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:56:32.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:56:32.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:56:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:56:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.538603 -999.00  +25.60  18.27     18   +0.10 1 1 1 1 1   888    0 27.71 85.58 ----- 30.2 18.3 286.7 29.6 30.9 -26.6 30.5 -27.0 30.5 -25.6 31.6 -26.2
2025-12-25T14:56:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:56:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:56:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.538603
2025-12-25T14:56:32.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:56:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:56:32.315 [DEBUG] [Thread-13602] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:56:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:56:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:56:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:56:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:56:17', tmtdew=30.81, humidity=12.54, cloud=0.0, wind=24.23, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:55:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:56:32.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-25T14:56:32.421 [DEBUG] [Thread-13605] [transport.py] [_log()] starting thread (client mode): 0xb6b03d00
2025-12-25T14:56:32.421 [DEBUG] [Thread-13605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:56:32.436 [DEBUG] [Thread-13605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:56:32.436 [INFO] [Thread-13605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:56:32.443 [DEBUG] [Thread-13605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] client lang: <none>
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] server lang: <none>
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] kex follows: False
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] Compression: none
2025-12-25T14:56:32.444 [DEBUG] [Thread-13605] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:56:32.500 [DEBUG] [Thread-13605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:56:32.501 [DEBUG] [Thread-13605] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:56:32.502 [DEBUG] [Thread-13605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:56:32.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:56:32.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:56:32.557 [DEBUG] [Thread-13605] [transport.py] [_log()] userauth is OK
2025-12-25T14:56:32.557 [DEBUG] [Thread-13605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:56:32.557 [DEBUG] [Thread-13605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:56:32.557 [DEBUG] [Thread-13605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:56:32.557 [DEBUG] [Thread-13605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:56:32.576 [INFO] [Thread-13605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:56:32.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-25T14:56:32.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:56:33.421 [DEBUG] [Thread-13605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:56:33.421 [DEBUG] [Thread-13605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:56:33.469 [DEBUG] [Thread-13605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:56:33.469 [DEBUG] [Thread-13605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:56:33.478 [DEBUG] [Thread-13605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:56:33.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:56:33.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-25T14:56:33.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T14:56:33.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:56:33.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:56:33.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:56:33.518 [DEBUG] [Thread-13605] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:56:40.785 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:56:40.787 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:56:44.106 [DEBUG] [Thread-13607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:56:59.144 [DEBUG] [Thread-13608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:03.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:57:03.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:57:03.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-25T14:57:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 56, 49), 30.55, 13.26, 0.0, 33.68, 26.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:57:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:56:49
2025-12-25T14:57:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:57:04.496 [DEBUG] [Thread-13609] [transport.py] [_log()] starting thread (client mode): 0xb95f24a0
2025-12-25T14:57:04.496 [DEBUG] [Thread-13609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:57:04.517 [DEBUG] [Thread-13609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:57:04.517 [INFO] [Thread-13609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:57:04.520 [DEBUG] [Thread-13609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:57:04.520 [DEBUG] [Thread-13609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:57:04.520 [DEBUG] [Thread-13609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:57:04.520 [DEBUG] [Thread-13609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:57:04.520 [DEBUG] [Thread-13609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] client lang: <none>
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] server lang: <none>
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] kex follows: False
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] Compression: none
2025-12-25T14:57:04.521 [DEBUG] [Thread-13609] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:57:04.538 [DEBUG] [Thread-13609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:57:04.538 [DEBUG] [Thread-13609] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:57:04.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:57:04.539 [DEBUG] [Thread-13609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:57:04.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:57:04.541 [DEBUG] [Thread-13609] [transport.py] [_log()] userauth is OK
2025-12-25T14:57:04.541 [DEBUG] [Thread-13609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:57:04.542 [DEBUG] [Thread-13609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:57:04.542 [DEBUG] [Thread-13609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:57:04.542 [DEBUG] [Thread-13609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:57:04.559 [INFO] [Thread-13609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:57:04.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:57:05.292 [DEBUG] [Thread-13609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:57:05.292 [DEBUG] [Thread-13609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:57:05.293 [DEBUG] [Thread-13609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:57:05.333 [DEBUG] [Thread-13609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:57:05.333 [DEBUG] [Thread-13609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:57:05.337 [DEBUG] [Thread-13609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:57:05.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:57:05.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:57:05.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:57:05.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:57:05.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:57:05.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:57:05.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:57:05.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:57:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:57:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.538950 -999.00  +25.80  34.34     18   +0.30 1 1 2 1 1   888    0 27.43 82.16 ----- 34.1 34.3 271.8 43.0 30.8 -28.6 30.6 -26.5 30.8 -26.6 31.4 -27.0
2025-12-25T14:57:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:57:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:57:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.538950
2025-12-25T14:57:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:57:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:57:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:57:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:57:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:57:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:56:49', tmtdew=30.55, humidity=13.26, cloud=0.0, wind=33.68, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:56:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:57:05.365 [DEBUG] [Thread-13609] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:57:05.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-25T14:57:09.199 [DEBUG] [Thread-13612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:14.182 [DEBUG] [Thread-13613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:29.239 [DEBUG] [Thread-13614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:40.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:40.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:44.280 [DEBUG] [Thread-13615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:57:59.320 [DEBUG] [Thread-13616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:09.254 [DEBUG] [Thread-13617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:14.352 [DEBUG] [Thread-13618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:29.393 [DEBUG] [Thread-13619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:41.066 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:41.067 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:44.424 [DEBUG] [Thread-13620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:58:59.455 [DEBUG] [Thread-13621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:09.303 [DEBUG] [Thread-13622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:14.489 [DEBUG] [Thread-13623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:20.917 [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-25T14:59:29.523 [DEBUG] [Thread-13624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:41.204 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:41.205 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:44.557 [DEBUG] [Thread-13625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T14:59:50.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T14:59:50.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T14:59:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T14:59:51.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 14, 59, 30), 30.54, 13.22, 0.0, 37.55, 26.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T14:59:51.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 14:59:30
2025-12-25T14:59:51.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T14:59:51.946 [DEBUG] [Thread-13626] [transport.py] [_log()] starting thread (client mode): 0xb95b0a30
2025-12-25T14:59:51.946 [DEBUG] [Thread-13626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:59:51.967 [DEBUG] [Thread-13626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T14:59:51.968 [INFO] [Thread-13626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] client lang: <none>
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] server lang: <none>
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] kex follows: False
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:59:51.971 [DEBUG] [Thread-13626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:59:51.972 [DEBUG] [Thread-13626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:59:51.972 [DEBUG] [Thread-13626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:59:51.972 [DEBUG] [Thread-13626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:59:51.972 [DEBUG] [Thread-13626] [transport.py] [_log()] Compression: none
2025-12-25T14:59:51.972 [DEBUG] [Thread-13626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:59:51.990 [DEBUG] [Thread-13626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:59:51.990 [DEBUG] [Thread-13626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:59:51.991 [DEBUG] [Thread-13626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T14:59:51.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T14:59:51.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:59:51.993 [DEBUG] [Thread-13626] [transport.py] [_log()] userauth is OK
2025-12-25T14:59:51.993 [DEBUG] [Thread-13626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:59:51.993 [DEBUG] [Thread-13626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:59:51.994 [DEBUG] [Thread-13626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T14:59:51.994 [DEBUG] [Thread-13626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:59:52.017 [INFO] [Thread-13626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:59:52.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:59:52.654 [DEBUG] [Thread-13626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:59:52.655 [DEBUG] [Thread-13626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:59:52.655 [DEBUG] [Thread-13626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T14:59:52.696 [DEBUG] [Thread-13626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:59:52.696 [DEBUG] [Thread-13626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:59:52.698 [DEBUG] [Thread-13626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:59:52.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:59:52.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T14:59:52.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T14:59:52.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T14:59:52.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:59:52.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T14:59:52.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:59:52.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:59:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T14:59:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.541034 -999.00  +26.00  35.40     19   +0.70 1 1 2 1 1   888    0 27.56 71.36 ----- 34.1 35.4 305.2 50.0 30.6 -27.0 30.3 -27.3 30.7 -26.9 31.3 -24.8
2025-12-25T14:59:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T14:59:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T14:59:52.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.541034
2025-12-25T14:59:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T14:59:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T14:59:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T14:59:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T14:59:52.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T14:59:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T14:59:30', tmtdew=30.54, humidity=13.22, cloud=0.0, wind=37.55, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:59:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T14:59:52.720 [DEBUG] [Thread-13626] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:59:52.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-25T14:59:52.814 [DEBUG] [Thread-13629] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-25T14:59:52.814 [DEBUG] [Thread-13629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T14:59:52.828 [DEBUG] [Thread-13629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T14:59:52.829 [INFO] [Thread-13629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T14:59:52.836 [DEBUG] [Thread-13629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T14:59:52.836 [DEBUG] [Thread-13629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] client lang: <none>
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] server lang: <none>
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] kex follows: False
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T14:59:52.837 [DEBUG] [Thread-13629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T14:59:52.838 [DEBUG] [Thread-13629] [transport.py] [_log()] Compression: none
2025-12-25T14:59:52.838 [DEBUG] [Thread-13629] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T14:59:52.895 [DEBUG] [Thread-13629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T14:59:52.896 [DEBUG] [Thread-13629] [transport.py] [_log()] Switch to new keys ...
2025-12-25T14:59:52.896 [DEBUG] [Thread-13629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T14:59:52.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T14:59:52.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T14:59:52.951 [DEBUG] [Thread-13629] [transport.py] [_log()] userauth is OK
2025-12-25T14:59:52.951 [DEBUG] [Thread-13629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T14:59:52.951 [DEBUG] [Thread-13629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T14:59:52.952 [DEBUG] [Thread-13629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T14:59:52.952 [DEBUG] [Thread-13629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T14:59:52.975 [INFO] [Thread-13629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T14:59:52.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-25T14:59:52.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T14:59:53.816 [DEBUG] [Thread-13629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T14:59:53.816 [DEBUG] [Thread-13629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T14:59:53.864 [DEBUG] [Thread-13629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T14:59:53.864 [DEBUG] [Thread-13629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T14:59:53.873 [DEBUG] [Thread-13629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T14:59:53.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T14:59:53.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-25T14:59:53.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-25T14:59:53.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T14:59:53.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T14:59:53.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T14:59:53.910 [DEBUG] [Thread-13629] [transport.py] [_log()] EOF in transport thread
2025-12-25T14:59:59.589 [DEBUG] [Thread-13631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:09.353 [DEBUG] [Thread-13632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:14.630 [DEBUG] [Thread-13633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:23.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:00:23.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:00:23.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-25T15:00:24.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 0, 2), 30.23, 13.47, 0.0, 38.99, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:00:24.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:00:02
2025-12-25T15:00:24.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:00:24.889 [DEBUG] [Thread-13634] [transport.py] [_log()] starting thread (client mode): 0xb95f3460
2025-12-25T15:00:24.889 [DEBUG] [Thread-13634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:00:24.906 [DEBUG] [Thread-13634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:00:24.906 [INFO] [Thread-13634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] client lang: <none>
2025-12-25T15:00:24.909 [DEBUG] [Thread-13634] [transport.py] [_log()] server lang: <none>
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] kex follows: False
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] Compression: none
2025-12-25T15:00:24.910 [DEBUG] [Thread-13634] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:00:24.930 [DEBUG] [Thread-13634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:00:24.930 [DEBUG] [Thread-13634] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:00:24.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:00:24.931 [DEBUG] [Thread-13634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:00:24.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:00:24.933 [DEBUG] [Thread-13634] [transport.py] [_log()] userauth is OK
2025-12-25T15:00:24.934 [DEBUG] [Thread-13634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:00:24.934 [DEBUG] [Thread-13634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:00:24.934 [DEBUG] [Thread-13634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:00:24.934 [DEBUG] [Thread-13634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:00:24.957 [INFO] [Thread-13634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:00:24.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:00:25.591 [DEBUG] [Thread-13634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:00:25.591 [DEBUG] [Thread-13634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:00:25.592 [DEBUG] [Thread-13634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:00:25.632 [DEBUG] [Thread-13634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:00:25.632 [DEBUG] [Thread-13634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:00:25.635 [DEBUG] [Thread-13634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:00:25.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:00:25.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:00:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:00:25.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:00:25.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:00:25.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:00:25.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:00:25.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:00:25.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:00:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.541381 -999.00  +25.40  27.07     19   +0.50 1 1 1 1 1   888    0 26.63 61.67 ----- 29.1 27.1 322.8 45.4 30.6 -26.7 30.2 -28.1 30.6 -26.5 31.3 -24.4
2025-12-25T15:00:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:00:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:00:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.541381
2025-12-25T15:00:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:00:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:00:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:00:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:00:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:00:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:00:02', tmtdew=30.23, humidity=13.47, cloud=0.0, wind=38.99, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T12:59:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:00:25.660 [DEBUG] [Thread-13634] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:00:25.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-25T15:00:25.751 [DEBUG] [Thread-13637] [transport.py] [_log()] starting thread (client mode): 0xb95b22f0
2025-12-25T15:00:25.751 [DEBUG] [Thread-13637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:00:25.765 [DEBUG] [Thread-13637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:00:25.765 [INFO] [Thread-13637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:25.773 [DEBUG] [Thread-13637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] client lang: <none>
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] server lang: <none>
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] kex follows: False
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] Compression: none
2025-12-25T15:00:25.774 [DEBUG] [Thread-13637] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:00:25.836 [DEBUG] [Thread-13637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:00:25.836 [DEBUG] [Thread-13637] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:00:25.837 [DEBUG] [Thread-13637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:00:25.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:00:25.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:00:25.891 [DEBUG] [Thread-13637] [transport.py] [_log()] userauth is OK
2025-12-25T15:00:25.892 [DEBUG] [Thread-13637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:00:25.892 [DEBUG] [Thread-13637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:00:25.892 [DEBUG] [Thread-13637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:00:25.892 [DEBUG] [Thread-13637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:00:25.911 [INFO] [Thread-13637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:00: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-25T15:00:25.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:00:26.735 [DEBUG] [Thread-13637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:00:26.735 [DEBUG] [Thread-13637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:00:26.783 [DEBUG] [Thread-13637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:00:26.783 [DEBUG] [Thread-13637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:00:26.792 [DEBUG] [Thread-13637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:00:26.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:00:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:00:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:00:26.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:00:26.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:00:26.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:00:26.829 [DEBUG] [Thread-13637] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:00:29.668 [DEBUG] [Thread-13639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:41.345 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:41.346 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:44.728 [DEBUG] [Thread-13640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:56.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:00:56.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:00:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:00:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 0, 34), 30.03, 13.59, 0.0, 39.89, 26.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:00:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:00:34
2025-12-25T15:00:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:00:57.829 [DEBUG] [Thread-13641] [transport.py] [_log()] starting thread (client mode): 0xb6b00be0
2025-12-25T15:00:57.829 [DEBUG] [Thread-13641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:00:57.850 [DEBUG] [Thread-13641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:00:57.850 [INFO] [Thread-13641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] client lang: <none>
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] server lang: <none>
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] kex follows: False
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] Compression: none
2025-12-25T15:00:57.851 [DEBUG] [Thread-13641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:00:57.870 [DEBUG] [Thread-13641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:00:57.871 [DEBUG] [Thread-13641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:00:57.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:00:57.872 [DEBUG] [Thread-13641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:00:57.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:00:57.874 [DEBUG] [Thread-13641] [transport.py] [_log()] userauth is OK
2025-12-25T15:00:57.874 [DEBUG] [Thread-13641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:00:57.874 [DEBUG] [Thread-13641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:00:57.874 [DEBUG] [Thread-13641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:00:57.874 [DEBUG] [Thread-13641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:00:57.910 [INFO] [Thread-13641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:00:57.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:00:58.571 [DEBUG] [Thread-13641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:00:58.572 [DEBUG] [Thread-13641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:00:58.572 [DEBUG] [Thread-13641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:00:58.613 [DEBUG] [Thread-13641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:00:58.613 [DEBUG] [Thread-13641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:00:58.617 [DEBUG] [Thread-13641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:00:58.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:00:58.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:00:58.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:00:58.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:00:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:00:58.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:00:58.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:00:58.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.541728 -999.00  +25.30  32.35     20   +0.70 1 1 2 1 1   888    0 26.51 58.66 ----- 36.1 32.4 308.8 44.8 30.5 -27.4 30.2 -28.1 30.7 -26.4 31.2 -24.3
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.541728
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:00:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:00:34', tmtdew=30.03, humidity=13.59, cloud=0.0, wind=39.89, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:00:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:00:58.638 [DEBUG] [Thread-13641] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:00:58.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-25T15:00:58.722 [DEBUG] [Thread-13644] [transport.py] [_log()] starting thread (client mode): 0xb6b02170
2025-12-25T15:00:58.722 [DEBUG] [Thread-13644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:00:58.741 [DEBUG] [Thread-13644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:00:58.741 [INFO] [Thread-13644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:58.749 [DEBUG] [Thread-13644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] client lang: <none>
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] server lang: <none>
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] kex follows: False
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] Compression: none
2025-12-25T15:00:58.750 [DEBUG] [Thread-13644] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:00:58.808 [DEBUG] [Thread-13644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:00:58.808 [DEBUG] [Thread-13644] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:00:58.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:00:58.809 [DEBUG] [Thread-13644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:00:58.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:00:58.864 [DEBUG] [Thread-13644] [transport.py] [_log()] userauth is OK
2025-12-25T15:00:58.864 [DEBUG] [Thread-13644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:00:58.864 [DEBUG] [Thread-13644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:00:58.864 [DEBUG] [Thread-13644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:00:58.865 [DEBUG] [Thread-13644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:00:58.883 [INFO] [Thread-13644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:00:58.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-25T15:00:58.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:00:59.740 [DEBUG] [Thread-13644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:00:59.740 [DEBUG] [Thread-13644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:00:59.763 [DEBUG] [Thread-13646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:00:59.788 [DEBUG] [Thread-13644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:00:59.788 [DEBUG] [Thread-13644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:00:59.797 [DEBUG] [Thread-13644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:00:59.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:00:59.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-25T15:00:59.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:00:59.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:00:59.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:00:59.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:00:59.831 [DEBUG] [Thread-13644] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:01:09.404 [DEBUG] [Thread-13647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:01:14.813 [DEBUG] [Thread-13648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:01:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:01:29.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:01:29.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-25T15:01:29.850 [DEBUG] [Thread-13649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:01:30.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 1, 6), 29.92, 13.7, 0.0, 42.68, 26.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:01:30.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:01:06
2025-12-25T15:01:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:01:30.812 [DEBUG] [Thread-13650] [transport.py] [_log()] starting thread (client mode): 0xb95b0b80
2025-12-25T15:01:30.812 [DEBUG] [Thread-13650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:01:30.828 [DEBUG] [Thread-13650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:01:30.828 [INFO] [Thread-13650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:01:30.830 [DEBUG] [Thread-13650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] client lang: <none>
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] server lang: <none>
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] kex follows: False
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] Compression: none
2025-12-25T15:01:30.831 [DEBUG] [Thread-13650] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:01:30.841 [DEBUG] [Thread-13650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:01:30.841 [DEBUG] [Thread-13650] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:01:30.842 [DEBUG] [Thread-13650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:01:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:01:30.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:01:30.843 [DEBUG] [Thread-13650] [transport.py] [_log()] userauth is OK
2025-12-25T15:01:30.843 [DEBUG] [Thread-13650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:01:30.843 [DEBUG] [Thread-13650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:01:30.843 [DEBUG] [Thread-13650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:01:30.843 [DEBUG] [Thread-13650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:01:30.865 [INFO] [Thread-13650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:01:30.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:01:31.509 [DEBUG] [Thread-13650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:01:31.509 [DEBUG] [Thread-13650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:01:31.509 [DEBUG] [Thread-13650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:01:31.550 [DEBUG] [Thread-13650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:01:31.551 [DEBUG] [Thread-13650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:01:31.554 [DEBUG] [Thread-13650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:01:31.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:01:31.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:01:31.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:01:31.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:01:31.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:01:31.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:01:31.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:01:31.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:01:31.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:01:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.542075 -999.00  +26.20  26.42     19   +0.90 1 1 1 1 1   888    0 26.62 57.98 ----- 40.9 26.4 306.8 44.6 30.7 -26.1 30.2 -26.2 30.8 -24.5 31.3 -25.2
2025-12-25T15:01:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:01:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:01:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.542075
2025-12-25T15:01:31.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:01:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:01:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:01:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:01:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:01:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:01:06', tmtdew=29.92, humidity=13.7, cloud=0.0, wind=42.68, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:00:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:01:31.584 [DEBUG] [Thread-13650] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:01:31.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-25T15:01:31.676 [DEBUG] [Thread-13653] [transport.py] [_log()] starting thread (client mode): 0xb9579b10
2025-12-25T15:01:31.676 [DEBUG] [Thread-13653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:01:31.691 [DEBUG] [Thread-13653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:01:31.691 [INFO] [Thread-13653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] client lang: <none>
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] server lang: <none>
2025-12-25T15:01:31.699 [DEBUG] [Thread-13653] [transport.py] [_log()] kex follows: False
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] Compression: none
2025-12-25T15:01:31.700 [DEBUG] [Thread-13653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:01:31.756 [DEBUG] [Thread-13653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:01:31.757 [DEBUG] [Thread-13653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:01:31.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:01:31.758 [DEBUG] [Thread-13653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:01:31.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:01:31.814 [DEBUG] [Thread-13653] [transport.py] [_log()] userauth is OK
2025-12-25T15:01:31.814 [DEBUG] [Thread-13653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:01:31.815 [DEBUG] [Thread-13653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:01:31.815 [DEBUG] [Thread-13653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:01:31.815 [DEBUG] [Thread-13653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:01:31.834 [INFO] [Thread-13653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:01:31.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-25T15:01:31.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:01:32.691 [DEBUG] [Thread-13653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:01:32.692 [DEBUG] [Thread-13653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:01:32.739 [DEBUG] [Thread-13653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:01:32.739 [DEBUG] [Thread-13653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:01:32.748 [DEBUG] [Thread-13653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:01:32.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:01:32.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:01: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-25T15:01:32.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:01:32.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:01:32.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:01:32.785 [DEBUG] [Thread-13653] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:01:41.484 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:01:41.485 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:01:44.883 [DEBUG] [Thread-13655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:01:59.928 [DEBUG] [Thread-13656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:02:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:02:02.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:02:02.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-25T15:02:03.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 1, 38), 30.48, 13.34, 0.0, 42.34, 26.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:02:03.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:01:38
2025-12-25T15:02:03.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:02:03.804 [DEBUG] [Thread-13657] [transport.py] [_log()] starting thread (client mode): 0xb6b03010
2025-12-25T15:02:03.804 [DEBUG] [Thread-13657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:02:03.824 [DEBUG] [Thread-13657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:02:03.824 [INFO] [Thread-13657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] client lang: <none>
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] server lang: <none>
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] kex follows: False
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:02:03.827 [DEBUG] [Thread-13657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:02:03.828 [DEBUG] [Thread-13657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:02:03.828 [DEBUG] [Thread-13657] [transport.py] [_log()] Compression: none
2025-12-25T15:02:03.828 [DEBUG] [Thread-13657] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:02:03.842 [DEBUG] [Thread-13657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:02:03.842 [DEBUG] [Thread-13657] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:02:03.842 [DEBUG] [Thread-13657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:02:03.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:02:03.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:02:03.843 [DEBUG] [Thread-13657] [transport.py] [_log()] userauth is OK
2025-12-25T15:02:03.843 [DEBUG] [Thread-13657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:02:03.843 [DEBUG] [Thread-13657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:02:03.843 [DEBUG] [Thread-13657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:02:03.843 [DEBUG] [Thread-13657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:02:03.858 [INFO] [Thread-13657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:02:03.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:02:04.509 [DEBUG] [Thread-13657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:02:04.510 [DEBUG] [Thread-13657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:02:04.510 [DEBUG] [Thread-13657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:02:04.551 [DEBUG] [Thread-13657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:02:04.551 [DEBUG] [Thread-13657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:02:04.555 [DEBUG] [Thread-13657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:02:04.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:02:04.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:02:04.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:02:04.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:02:04.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:02:04.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:02:04.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:02:04.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:02:04.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:02:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.542423 -999.00  +25.60  47.67     19   +0.40 1 1 2 1 1   888    0 26.63 53.03 ----- 36.9 47.7 301.2 53.5 30.4 -27.8 30.1 -28.4 30.5 -26.7 31.1 -25.3
2025-12-25T15:02:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:02:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:02:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.542423
2025-12-25T15:02:04.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:02:04.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:02:04.582 [DEBUG] [Thread-13657] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:02:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:02:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:02:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:02:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:01:38', tmtdew=30.48, humidity=13.34, cloud=0.0, wind=42.34, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:01:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:02:04.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-25T15:02:04.670 [DEBUG] [Thread-13660] [transport.py] [_log()] starting thread (client mode): 0xb95b2bc0
2025-12-25T15:02:04.670 [DEBUG] [Thread-13660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:02:04.683 [DEBUG] [Thread-13660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:02:04.683 [INFO] [Thread-13660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] client lang: <none>
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] server lang: <none>
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] kex follows: False
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] Compression: none
2025-12-25T15:02:04.691 [DEBUG] [Thread-13660] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:02:04.748 [DEBUG] [Thread-13660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:02:04.749 [DEBUG] [Thread-13660] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:02:04.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:02:04.750 [DEBUG] [Thread-13660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:02:04.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:02:04.812 [DEBUG] [Thread-13660] [transport.py] [_log()] userauth is OK
2025-12-25T15:02:04.812 [DEBUG] [Thread-13660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:02:04.812 [DEBUG] [Thread-13660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:02:04.813 [DEBUG] [Thread-13660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:02:04.813 [DEBUG] [Thread-13660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:02:04.831 [INFO] [Thread-13660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:02:04.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-25T15:02:04.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:02:05.730 [DEBUG] [Thread-13660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:02:05.730 [DEBUG] [Thread-13660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:02:05.779 [DEBUG] [Thread-13660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:02:05.780 [DEBUG] [Thread-13660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:02:05.788 [DEBUG] [Thread-13660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:02:05.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:02:05.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-25T15:02:05.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-25T15:02:05.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:02:05.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:02:05.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:02:05.821 [DEBUG] [Thread-13660] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:02:09.455 [DEBUG] [Thread-13662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:02:14.960 [DEBUG] [Thread-13663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:02:30.014 [DEBUG] [Thread-13664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:02:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:02:35.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:02:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:02:36.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 2, 10), 30.44, 13.34, 0.0, 38.99, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:02:36.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:02:10
2025-12-25T15:02:36.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:02:36.875 [DEBUG] [Thread-13665] [transport.py] [_log()] starting thread (client mode): 0xb9558a00
2025-12-25T15:02:36.875 [DEBUG] [Thread-13665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:02:36.888 [DEBUG] [Thread-13665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:02:36.888 [INFO] [Thread-13665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:02:36.891 [DEBUG] [Thread-13665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] client lang: <none>
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] server lang: <none>
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] kex follows: False
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] Compression: none
2025-12-25T15:02:36.892 [DEBUG] [Thread-13665] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:02:36.907 [DEBUG] [Thread-13665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:02:36.907 [DEBUG] [Thread-13665] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:02:36.907 [DEBUG] [Thread-13665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:02:36.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:02:36.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:02:36.908 [DEBUG] [Thread-13665] [transport.py] [_log()] userauth is OK
2025-12-25T15:02:36.908 [DEBUG] [Thread-13665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:02:36.908 [DEBUG] [Thread-13665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:02:36.908 [DEBUG] [Thread-13665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:02:36.908 [DEBUG] [Thread-13665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:02:36.917 [INFO] [Thread-13665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:02:36.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:02:37.542 [DEBUG] [Thread-13665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:02:37.543 [DEBUG] [Thread-13665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:02:37.543 [DEBUG] [Thread-13665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:02:37.583 [DEBUG] [Thread-13665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:02:37.583 [DEBUG] [Thread-13665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:02:37.586 [DEBUG] [Thread-13665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:02:37.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:02:37.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:02:37.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:02:37.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:02:37.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:02:37.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:02:37.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:02:37.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:02:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:02:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.542770 -999.00  +25.80  36.48     19   +0.40 1 1 2 1 1   888    0 26.54 50.97 ----- 39.5 36.5 305.4 41.0 30.4 -27.5 30.1 -27.1 30.5 -24.4 31.2 -25.7
2025-12-25T15:02:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:02:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:02:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.542770
2025-12-25T15:02:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:02:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:02:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:02:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:02:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:02:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:02:10', tmtdew=30.44, humidity=13.34, cloud=0.0, wind=38.99, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:01:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:02:37.603 [DEBUG] [Thread-13665] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:02:37.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:02:37.689 [DEBUG] [Thread-13668] [transport.py] [_log()] starting thread (client mode): 0xb6b28820
2025-12-25T15:02:37.689 [DEBUG] [Thread-13668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:02:37.704 [DEBUG] [Thread-13668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:02:37.704 [INFO] [Thread-13668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:02:37.711 [DEBUG] [Thread-13668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] client lang: <none>
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] server lang: <none>
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] kex follows: False
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] Compression: none
2025-12-25T15:02:37.712 [DEBUG] [Thread-13668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:02:37.766 [DEBUG] [Thread-13668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:02:37.767 [DEBUG] [Thread-13668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:02:37.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:02:37.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:02:37.767 [DEBUG] [Thread-13668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:02:37.824 [DEBUG] [Thread-13668] [transport.py] [_log()] userauth is OK
2025-12-25T15:02:37.824 [DEBUG] [Thread-13668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:02:37.824 [DEBUG] [Thread-13668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:02:37.824 [DEBUG] [Thread-13668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:02:37.824 [DEBUG] [Thread-13668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:02:37.838 [INFO] [Thread-13668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:02:37.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-25T15:02:37.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:02:38.646 [DEBUG] [Thread-13668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:02:38.647 [DEBUG] [Thread-13668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:02:38.694 [DEBUG] [Thread-13668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:02:38.694 [DEBUG] [Thread-13668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:02:38.703 [DEBUG] [Thread-13668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:02:38.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:02:38.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-25T15:02:38.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-25T15:02:38.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:02:38.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:02:38.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:02:38.735 [DEBUG] [Thread-13668] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:02:41.625 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:02:41.626 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:02:45.043 [DEBUG] [Thread-13670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:00.083 [DEBUG] [Thread-13671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:03:08.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:03:08.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-25T15:03:09.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 2, 42), 30.25, 13.45, 0.0, 34.34, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:03:09.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:02:42
2025-12-25T15:03:09.501 [DEBUG] [Thread-13672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:09.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:03:09.755 [DEBUG] [Thread-13673] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-25T15:03:09.755 [DEBUG] [Thread-13673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:03:09.775 [DEBUG] [Thread-13673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:03:09.775 [INFO] [Thread-13673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:03:09.776 [DEBUG] [Thread-13673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] client lang: <none>
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] server lang: <none>
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] kex follows: False
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] Compression: none
2025-12-25T15:03:09.777 [DEBUG] [Thread-13673] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:03:09.796 [DEBUG] [Thread-13673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:03:09.796 [DEBUG] [Thread-13673] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:03:09.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:03:09.797 [DEBUG] [Thread-13673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:03:09.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:03:09.799 [DEBUG] [Thread-13673] [transport.py] [_log()] userauth is OK
2025-12-25T15:03:09.799 [DEBUG] [Thread-13673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:03:09.799 [DEBUG] [Thread-13673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:03:09.799 [DEBUG] [Thread-13673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:03:09.799 [DEBUG] [Thread-13673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:03:09.822 [INFO] [Thread-13673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:03:09.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:03:10.449 [DEBUG] [Thread-13673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:03:10.449 [DEBUG] [Thread-13673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:03:10.450 [DEBUG] [Thread-13673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:03:10.490 [DEBUG] [Thread-13673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:03:10.490 [DEBUG] [Thread-13673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:03:10.493 [DEBUG] [Thread-13673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:03:10.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:03:10.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:03:10.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:03:10.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:03:10.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:03:10.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:03:10.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:03:10.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:03:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:03:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.543464 -999.00  +26.40  34.36     18   +0.70 1 1 2 1 1   888    0 26.66 45.17 ----- 27.7 34.4 310.2 42.0 30.5 -27.1 30.1 -26.6 30.7 -23.3 31.3 -24.7
2025-12-25T15:03:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:03:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:03:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.543464
2025-12-25T15:03:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:03:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:03:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:03:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:03:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:03:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:02:42', tmtdew=30.25, humidity=13.45, cloud=0.0, wind=34.34, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:02:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:03:10.519 [DEBUG] [Thread-13673] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:03:10.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-25T15:03:10.616 [DEBUG] [Thread-13676] [transport.py] [_log()] starting thread (client mode): 0xb9591ab0
2025-12-25T15:03:10.616 [DEBUG] [Thread-13676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:03:10.631 [DEBUG] [Thread-13676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:03:10.631 [INFO] [Thread-13676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:03:10.640 [DEBUG] [Thread-13676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:03:10.640 [DEBUG] [Thread-13676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:03:10.640 [DEBUG] [Thread-13676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] client lang: <none>
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] server lang: <none>
2025-12-25T15:03:10.641 [DEBUG] [Thread-13676] [transport.py] [_log()] kex follows: False
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] Compression: none
2025-12-25T15:03:10.642 [DEBUG] [Thread-13676] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:03:10.698 [DEBUG] [Thread-13676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:03:10.698 [DEBUG] [Thread-13676] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:03:10.699 [DEBUG] [Thread-13676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:03:10.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:03:10.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:03:10.758 [DEBUG] [Thread-13676] [transport.py] [_log()] userauth is OK
2025-12-25T15:03:10.758 [DEBUG] [Thread-13676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:03:10.759 [DEBUG] [Thread-13676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:03:10.759 [DEBUG] [Thread-13676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:03:10.759 [DEBUG] [Thread-13676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:03:10.778 [INFO] [Thread-13676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:03:10.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:03:10.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:03:11.618 [DEBUG] [Thread-13676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:03:11.618 [DEBUG] [Thread-13676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:03:11.667 [DEBUG] [Thread-13676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:03:11.667 [DEBUG] [Thread-13676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:03:11.676 [DEBUG] [Thread-13676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:03:11.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:03:11.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:03:11.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-25T15:03:11.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:03:11.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:03:11.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:03:11.713 [DEBUG] [Thread-13676] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:03:15.116 [DEBUG] [Thread-13678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:30.155 [DEBUG] [Thread-13679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:41.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:03:41.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:03:41.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-25T15:03:41.765 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:41.766 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:03:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 3, 14), 29.76, 13.85, 0.0, 31.88, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:03:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:03:14
2025-12-25T15:03:42.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:03:42.712 [DEBUG] [Thread-13680] [transport.py] [_log()] starting thread (client mode): 0xb9579b70
2025-12-25T15:03:42.712 [DEBUG] [Thread-13680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:03:42.734 [DEBUG] [Thread-13680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:03:42.734 [INFO] [Thread-13680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] client lang: <none>
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] server lang: <none>
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] kex follows: False
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] Compression: none
2025-12-25T15:03:42.737 [DEBUG] [Thread-13680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:03:42.755 [DEBUG] [Thread-13680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:03:42.756 [DEBUG] [Thread-13680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:03:42.757 [DEBUG] [Thread-13680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:03:42.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:03:42.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:03:42.759 [DEBUG] [Thread-13680] [transport.py] [_log()] userauth is OK
2025-12-25T15:03:42.759 [DEBUG] [Thread-13680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:03:42.759 [DEBUG] [Thread-13680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:03:42.759 [DEBUG] [Thread-13680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:03:42.759 [DEBUG] [Thread-13680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:03:42.783 [INFO] [Thread-13680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:03:42.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:03:43.498 [DEBUG] [Thread-13680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:03:43.498 [DEBUG] [Thread-13680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:03:43.499 [DEBUG] [Thread-13680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:03:43.539 [DEBUG] [Thread-13680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:03:43.539 [DEBUG] [Thread-13680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:03:43.542 [DEBUG] [Thread-13680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:03:43.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:03:43.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:03:43.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:03:43.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:03:43.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:03:43.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:03:43.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:03:43.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:03:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:03:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.543811 -999.00  +26.90  27.96     18   +0.80 1 1 1 1 1   888    0 26.94 46.49 ----- 24.5 28.0 307.4 36.1 30.6 -26.7 30.2 -26.2 30.8 -23.8 31.5 -24.4
2025-12-25T15:03:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:03:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:03:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.543811
2025-12-25T15:03:43.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:03:43.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:03:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:03:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:03:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:03:43.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:03:14', tmtdew=29.76, humidity=13.85, cloud=0.0, wind=31.88, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:03:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:03:43.567 [DEBUG] [Thread-13680] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:03:43.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-25T15:03:43.662 [DEBUG] [Thread-13683] [transport.py] [_log()] starting thread (client mode): 0xb6b28070
2025-12-25T15:03:43.662 [DEBUG] [Thread-13683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:03:43.676 [DEBUG] [Thread-13683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:03:43.676 [INFO] [Thread-13683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:03:43.684 [DEBUG] [Thread-13683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] client lang: <none>
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] server lang: <none>
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] kex follows: False
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] Compression: none
2025-12-25T15:03:43.685 [DEBUG] [Thread-13683] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:03:43.744 [DEBUG] [Thread-13683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:03:43.744 [DEBUG] [Thread-13683] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:03:43.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:03:43.746 [DEBUG] [Thread-13683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:03:43.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:03:43.801 [DEBUG] [Thread-13683] [transport.py] [_log()] userauth is OK
2025-12-25T15:03:43.802 [DEBUG] [Thread-13683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:03:43.802 [DEBUG] [Thread-13683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:03:43.802 [DEBUG] [Thread-13683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:03:43.802 [DEBUG] [Thread-13683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:03:43.823 [INFO] [Thread-13683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:03:43.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-25T15:03:43.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:03:44.647 [DEBUG] [Thread-13683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:03:44.647 [DEBUG] [Thread-13683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:03:44.696 [DEBUG] [Thread-13683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:03:44.697 [DEBUG] [Thread-13683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:03:44.706 [DEBUG] [Thread-13683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:03:44.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:03:44.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:03:44.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:03:44.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:03:44.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:03:44.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:03:44.743 [DEBUG] [Thread-13683] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:03:45.192 [DEBUG] [Thread-13685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:00.242 [DEBUG] [Thread-13686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:09.535 [DEBUG] [Thread-13687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:14.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:04:14.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:04:14.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-25T15:04:15.277 [DEBUG] [Thread-13688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 3, 46), 29.7, 13.82, 0.0, 38.85, 25.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:04:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:03:46
2025-12-25T15:04:15.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:04:15.759 [DEBUG] [Thread-13689] [transport.py] [_log()] starting thread (client mode): 0xb6b02920
2025-12-25T15:04:15.759 [DEBUG] [Thread-13689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:04:15.779 [DEBUG] [Thread-13689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:04:15.779 [INFO] [Thread-13689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:04:15.782 [DEBUG] [Thread-13689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] client lang: <none>
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] server lang: <none>
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] kex follows: False
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] Compression: none
2025-12-25T15:04:15.783 [DEBUG] [Thread-13689] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:04:15.801 [DEBUG] [Thread-13689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:04:15.801 [DEBUG] [Thread-13689] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:04:15.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:04:15.803 [DEBUG] [Thread-13689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:04:15.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:04:15.845 [DEBUG] [Thread-13689] [transport.py] [_log()] userauth is OK
2025-12-25T15:04:15.845 [DEBUG] [Thread-13689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:04:15.845 [DEBUG] [Thread-13689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:04:15.846 [DEBUG] [Thread-13689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:04:15.846 [DEBUG] [Thread-13689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:04:15.882 [INFO] [Thread-13689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:04:15.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:04:16.534 [DEBUG] [Thread-13689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:04:16.535 [DEBUG] [Thread-13689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:04:16.535 [DEBUG] [Thread-13689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:04:16.576 [DEBUG] [Thread-13689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:04:16.576 [DEBUG] [Thread-13689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:04:16.579 [DEBUG] [Thread-13689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:04:16.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:04:16.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:04:16.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:04:16.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:04:16.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:04:16.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:04:16.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:04:16.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:04:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:04:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.544159 -999.00  +27.00  41.90     18   +0.80 1 1 2 1 1   888    0 27.29 46.78 ----- 29.5 41.9 314.4 51.1 30.8 -27.4 30.4 -25.8 31.0 -24.7 31.5 -25.2
2025-12-25T15:04:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:04:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:04:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.544159
2025-12-25T15:04:16.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:04:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:04:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:04:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:04:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:04:16.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:03:46', tmtdew=29.7, humidity=13.82, cloud=0.0, wind=38.85, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:03:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:04:16.606 [DEBUG] [Thread-13689] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:04:16.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-25T15:04:16.699 [DEBUG] [Thread-13692] [transport.py] [_log()] starting thread (client mode): 0xb6b60df0
2025-12-25T15:04:16.699 [DEBUG] [Thread-13692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:04:16.714 [DEBUG] [Thread-13692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:04:16.714 [INFO] [Thread-13692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] client lang: <none>
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] server lang: <none>
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] kex follows: False
2025-12-25T15:04:16.722 [DEBUG] [Thread-13692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:04:16.723 [DEBUG] [Thread-13692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:04:16.723 [DEBUG] [Thread-13692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:04:16.723 [DEBUG] [Thread-13692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:04:16.723 [DEBUG] [Thread-13692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:04:16.723 [DEBUG] [Thread-13692] [transport.py] [_log()] Compression: none
2025-12-25T15:04:16.723 [DEBUG] [Thread-13692] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:04:16.783 [DEBUG] [Thread-13692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:04:16.784 [DEBUG] [Thread-13692] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:04:16.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:04:16.785 [DEBUG] [Thread-13692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:04:16.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:04:16.841 [DEBUG] [Thread-13692] [transport.py] [_log()] userauth is OK
2025-12-25T15:04:16.842 [DEBUG] [Thread-13692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:04:16.842 [DEBUG] [Thread-13692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:04:16.842 [DEBUG] [Thread-13692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:04:16.842 [DEBUG] [Thread-13692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:04:16.861 [INFO] [Thread-13692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:04:16.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-25T15:04:16.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:04:17.704 [DEBUG] [Thread-13692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:04:17.705 [DEBUG] [Thread-13692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:04:17.752 [DEBUG] [Thread-13692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:04:17.752 [DEBUG] [Thread-13692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:04:17.761 [DEBUG] [Thread-13692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:04:17.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:04: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')
2025-12-25T15:04:17.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-25T15:04:17.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:04:17.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:04:17.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:04:17.798 [DEBUG] [Thread-13692] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:04:30.310 [DEBUG] [Thread-13694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:41.907 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:41.908 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:45.362 [DEBUG] [Thread-13695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:04:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:04:47.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:04:47.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-25T15:04:48.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 4, 18), 29.54, 13.97, 0.0, 35.82, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:04:48.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:04:18
2025-12-25T15:04:48.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:04:48.820 [DEBUG] [Thread-13696] [transport.py] [_log()] starting thread (client mode): 0xb6b2a680
2025-12-25T15:04:48.820 [DEBUG] [Thread-13696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:04:48.839 [DEBUG] [Thread-13696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:04:48.840 [INFO] [Thread-13696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] client lang: <none>
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] server lang: <none>
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] kex follows: False
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] Compression: none
2025-12-25T15:04:48.843 [DEBUG] [Thread-13696] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:04:48.860 [DEBUG] [Thread-13696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:04:48.860 [DEBUG] [Thread-13696] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:04:48.861 [DEBUG] [Thread-13696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:04:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:04:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:04:48.862 [DEBUG] [Thread-13696] [transport.py] [_log()] userauth is OK
2025-12-25T15:04:48.862 [DEBUG] [Thread-13696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:04:48.863 [DEBUG] [Thread-13696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:04:48.863 [DEBUG] [Thread-13696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:04:48.863 [DEBUG] [Thread-13696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:04:48.898 [INFO] [Thread-13696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:04:48.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:04:49.644 [DEBUG] [Thread-13696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:04:49.644 [DEBUG] [Thread-13696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:04:49.645 [DEBUG] [Thread-13696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:04:49.686 [DEBUG] [Thread-13696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:04:49.686 [DEBUG] [Thread-13696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:04:49.688 [DEBUG] [Thread-13696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:04:49.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:04:49.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:04:49.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:04:49.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:04:49.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:04:49.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:04:49.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:04:49.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.544506 -999.00  +26.20  45.99     18   +0.50 1 1 2 1 1   888    0 26.71 47.73 ----- 37.8 46.0 289.6 48.8 30.6 -28.4 30.4 -27.5 30.9 -24.8 31.4 -25.4
2025-12-25T15:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.544506
2025-12-25T15:04:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:04:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:04:18', tmtdew=29.54, humidity=13.97, cloud=0.0, wind=35.82, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:04:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:04:49.709 [DEBUG] [Thread-13696] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:04:49.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-25T15:04:49.804 [DEBUG] [Thread-13699] [transport.py] [_log()] starting thread (client mode): 0xb6b289a0
2025-12-25T15:04:49.804 [DEBUG] [Thread-13699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:04:49.819 [DEBUG] [Thread-13699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:04:49.819 [INFO] [Thread-13699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] client lang: <none>
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] server lang: <none>
2025-12-25T15:04:49.827 [DEBUG] [Thread-13699] [transport.py] [_log()] kex follows: False
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] Compression: none
2025-12-25T15:04:49.828 [DEBUG] [Thread-13699] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:04:49.885 [DEBUG] [Thread-13699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:04:49.885 [DEBUG] [Thread-13699] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:04:49.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:04:49.886 [DEBUG] [Thread-13699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:04:49.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:04:49.942 [DEBUG] [Thread-13699] [transport.py] [_log()] userauth is OK
2025-12-25T15:04:49.942 [DEBUG] [Thread-13699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:04:49.942 [DEBUG] [Thread-13699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:04:49.942 [DEBUG] [Thread-13699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:04:49.942 [DEBUG] [Thread-13699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:04:49.964 [INFO] [Thread-13699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:04:49.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-25T15:04:49.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:04:50.831 [DEBUG] [Thread-13699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:04:50.831 [DEBUG] [Thread-13699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:04:50.878 [DEBUG] [Thread-13699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:04:50.879 [DEBUG] [Thread-13699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:04:50.888 [DEBUG] [Thread-13699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:04:50.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:04:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:04:50.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:04:50.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:04:50.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:04:50.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:04:50.921 [DEBUG] [Thread-13699] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:05:00.396 [DEBUG] [Thread-13701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:09.591 [DEBUG] [Thread-13702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:15.449 [DEBUG] [Thread-13703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:20.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:05:20.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:05:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:05:21.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 4, 50), 30.09, 13.54, 0.0, 33.12, 26.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:05:21.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:04:50
2025-12-25T15:05:21.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:05:21.922 [DEBUG] [Thread-13704] [transport.py] [_log()] starting thread (client mode): 0xb957ad40
2025-12-25T15:05:21.922 [DEBUG] [Thread-13704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:05:21.942 [DEBUG] [Thread-13704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:05:21.942 [INFO] [Thread-13704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] client lang: <none>
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] server lang: <none>
2025-12-25T15:05:21.944 [DEBUG] [Thread-13704] [transport.py] [_log()] kex follows: False
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] Compression: none
2025-12-25T15:05:21.945 [DEBUG] [Thread-13704] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:05:21.958 [DEBUG] [Thread-13704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:05:21.959 [DEBUG] [Thread-13704] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:05:21.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:05:21.960 [DEBUG] [Thread-13704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:05:21.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:05:21.962 [DEBUG] [Thread-13704] [transport.py] [_log()] userauth is OK
2025-12-25T15:05:21.962 [DEBUG] [Thread-13704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:05:21.962 [DEBUG] [Thread-13704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:05:21.963 [DEBUG] [Thread-13704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:05:21.963 [DEBUG] [Thread-13704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:05:21.988 [INFO] [Thread-13704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:05:21.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:05:22.631 [DEBUG] [Thread-13704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:05:22.632 [DEBUG] [Thread-13704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:05:22.632 [DEBUG] [Thread-13704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:05:22.673 [DEBUG] [Thread-13704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:05:22.673 [DEBUG] [Thread-13704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:05:22.677 [DEBUG] [Thread-13704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:05:22.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:05:22.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:05:22.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:05:22.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:05:22.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:05:22.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:05:22.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:05:22.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:05:22.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:05:22.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.544853 -999.00  +26.10  37.34     19   +0.80 1 1 2 1 1   888    0 26.50 43.36 ----- 34.7 37.3 305.2 44.6 30.6 -27.4 30.3 -27.7 30.8 -25.9 31.4 -25.4
2025-12-25T15:05:22.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:05:22.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:05:22.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.544853
2025-12-25T15:05:22.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:05:22.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:05:22.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:05:22.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:05:22.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:05:22.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:04:50', tmtdew=30.09, humidity=13.54, cloud=0.0, wind=33.12, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:04:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:05:22.704 [DEBUG] [Thread-13704] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:05:22.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-25T15:05:22.801 [DEBUG] [Thread-13707] [transport.py] [_log()] starting thread (client mode): 0xb6b03730
2025-12-25T15:05:22.801 [DEBUG] [Thread-13707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:05:22.816 [DEBUG] [Thread-13707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:05:22.816 [INFO] [Thread-13707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] client lang: <none>
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] server lang: <none>
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] kex follows: False
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:05:22.824 [DEBUG] [Thread-13707] [transport.py] [_log()] Compression: none
2025-12-25T15:05:22.825 [DEBUG] [Thread-13707] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:05:22.882 [DEBUG] [Thread-13707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:05:22.883 [DEBUG] [Thread-13707] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:05:22.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:05:22.884 [DEBUG] [Thread-13707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:05:22.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:05:22.938 [DEBUG] [Thread-13707] [transport.py] [_log()] userauth is OK
2025-12-25T15:05:22.939 [DEBUG] [Thread-13707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:05:22.939 [DEBUG] [Thread-13707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:05:22.939 [DEBUG] [Thread-13707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:05:22.939 [DEBUG] [Thread-13707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:05:22.957 [INFO] [Thread-13707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:05:22.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-25T15:05:22.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:05:23.798 [DEBUG] [Thread-13707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:05:23.798 [DEBUG] [Thread-13707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:05:23.846 [DEBUG] [Thread-13707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:05:23.846 [DEBUG] [Thread-13707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:05:23.854 [DEBUG] [Thread-13707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:05:23.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:05:23.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-25T15:05:23.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-25T15:05:23.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:05:23.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:05:23.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:05:23.888 [DEBUG] [Thread-13707] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:05:30.482 [DEBUG] [Thread-13709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:42.045 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:42.047 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:45.534 [DEBUG] [Thread-13710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:05:53.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:05:53.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:05:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:05:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 5, 22), 30.16, 13.49, 0.0, 33.61, 26.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:05:54.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:05:22
2025-12-25T15:05:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:05:54.905 [DEBUG] [Thread-13711] [transport.py] [_log()] starting thread (client mode): 0xb6b62170
2025-12-25T15:05:54.905 [DEBUG] [Thread-13711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:05:54.928 [DEBUG] [Thread-13711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:05:54.928 [INFO] [Thread-13711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:05:54.932 [DEBUG] [Thread-13711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:05:54.932 [DEBUG] [Thread-13711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:05:54.932 [DEBUG] [Thread-13711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:05:54.932 [DEBUG] [Thread-13711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:54.932 [DEBUG] [Thread-13711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] client lang: <none>
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] server lang: <none>
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] kex follows: False
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:05:54.933 [DEBUG] [Thread-13711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:05:54.934 [DEBUG] [Thread-13711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:05:54.934 [DEBUG] [Thread-13711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:05:54.934 [DEBUG] [Thread-13711] [transport.py] [_log()] Compression: none
2025-12-25T15:05:54.934 [DEBUG] [Thread-13711] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:05:54.953 [DEBUG] [Thread-13711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:05:54.953 [DEBUG] [Thread-13711] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:05:54.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:05:54.954 [DEBUG] [Thread-13711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:05:54.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:05:54.957 [DEBUG] [Thread-13711] [transport.py] [_log()] userauth is OK
2025-12-25T15:05:54.957 [DEBUG] [Thread-13711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:05:54.957 [DEBUG] [Thread-13711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:05:54.957 [DEBUG] [Thread-13711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:05:54.957 [DEBUG] [Thread-13711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:05:54.980 [INFO] [Thread-13711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:05:54.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:05:55.723 [DEBUG] [Thread-13711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:05:55.723 [DEBUG] [Thread-13711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:05:55.723 [DEBUG] [Thread-13711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:05:55.763 [DEBUG] [Thread-13711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:05:55.763 [DEBUG] [Thread-13711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:05:55.766 [DEBUG] [Thread-13711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:05:55.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:05:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:05:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:05:55.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:05:55.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:05:55.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:05:55.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:05:55.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.545200 -999.00  +25.80  27.99     19   +0.60 1 1 1 1 1   888    0 26.92 44.72 ----- 31.4 28.0 306.0 38.5 30.6 -27.7 30.3 -28.1 30.7 -24.4 31.4 -25.7
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.545200
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:05:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:05:22', tmtdew=30.16, humidity=13.49, cloud=0.0, wind=33.61, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:05:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:05:55.786 [DEBUG] [Thread-13711] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:05:55.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-25T15:05:55.870 [DEBUG] [Thread-13714] [transport.py] [_log()] starting thread (client mode): 0xb957a680
2025-12-25T15:05:55.870 [DEBUG] [Thread-13714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:05:55.885 [DEBUG] [Thread-13714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:05:55.885 [INFO] [Thread-13714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] client lang: <none>
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] server lang: <none>
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] kex follows: False
2025-12-25T15:05:55.892 [DEBUG] [Thread-13714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:05:55.893 [DEBUG] [Thread-13714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:05:55.893 [DEBUG] [Thread-13714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:05:55.893 [DEBUG] [Thread-13714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:05:55.893 [DEBUG] [Thread-13714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:05:55.893 [DEBUG] [Thread-13714] [transport.py] [_log()] Compression: none
2025-12-25T15:05:55.893 [DEBUG] [Thread-13714] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:05:55.948 [DEBUG] [Thread-13714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:05:55.949 [DEBUG] [Thread-13714] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:05:55.949 [DEBUG] [Thread-13714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:05:55.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:05:55.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:05:56.006 [DEBUG] [Thread-13714] [transport.py] [_log()] userauth is OK
2025-12-25T15:05:56.006 [DEBUG] [Thread-13714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:05:56.006 [DEBUG] [Thread-13714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:05:56.006 [DEBUG] [Thread-13714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:05:56.006 [DEBUG] [Thread-13714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:05:56.023 [INFO] [Thread-13714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:05:56.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-25T15:05:56.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:05:56.839 [DEBUG] [Thread-13714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:05:56.839 [DEBUG] [Thread-13714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:05:56.886 [DEBUG] [Thread-13714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:05:56.886 [DEBUG] [Thread-13714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:05:56.895 [DEBUG] [Thread-13714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:05:56.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:05:56.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:05:56.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-25T15:05:56.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:05:56.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:05:56.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:05:56.929 [DEBUG] [Thread-13714] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:06:00.565 [DEBUG] [Thread-13716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:06:09.643 [DEBUG] [Thread-13717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:06:15.616 [DEBUG] [Thread-13718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:06:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:06:26.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:06:26.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-25T15:06:27.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 5, 55), 29.82, 13.62, 0.0, 27.08, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:06:27.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:05:55
2025-12-25T15:06:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:06:27.984 [DEBUG] [Thread-13719] [transport.py] [_log()] starting thread (client mode): 0xb6b60cd0
2025-12-25T15:06:27.984 [DEBUG] [Thread-13719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:06:28.004 [DEBUG] [Thread-13719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:06:28.004 [INFO] [Thread-13719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] client lang: <none>
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] server lang: <none>
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] kex follows: False
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:06:28.007 [DEBUG] [Thread-13719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:06:28.008 [DEBUG] [Thread-13719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:06:28.008 [DEBUG] [Thread-13719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:06:28.008 [DEBUG] [Thread-13719] [transport.py] [_log()] Compression: none
2025-12-25T15:06:28.008 [DEBUG] [Thread-13719] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:06:28.024 [DEBUG] [Thread-13719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:06:28.024 [DEBUG] [Thread-13719] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:06:28.024 [DEBUG] [Thread-13719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:06:28.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:06:28.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:06:28.025 [DEBUG] [Thread-13719] [transport.py] [_log()] userauth is OK
2025-12-25T15:06:28.025 [DEBUG] [Thread-13719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:06:28.025 [DEBUG] [Thread-13719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:06:28.025 [DEBUG] [Thread-13719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:06:28.025 [DEBUG] [Thread-13719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:06:28.040 [INFO] [Thread-13719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:06:28.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:06:28.699 [DEBUG] [Thread-13719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:06:28.699 [DEBUG] [Thread-13719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:06:28.700 [DEBUG] [Thread-13719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:06:28.741 [DEBUG] [Thread-13719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:06:28.741 [DEBUG] [Thread-13719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:06:28.743 [DEBUG] [Thread-13719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:06:28.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:06:28.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:06:28.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:06:28.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:06:28.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:06:28.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:06:28.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.545548 -999.00  +25.40  30.71     19   +0.60 1 1 2 1 1   888    0 26.70 39.40 ----- 25.1 30.7 298.8 34.1 30.6 -27.5 30.2 -27.1 30.8 -25.5 31.4 -25.6
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.545548
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:06:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:05:55', tmtdew=29.82, humidity=13.62, cloud=0.0, wind=27.08, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:05:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:06:28.761 [DEBUG] [Thread-13719] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:06:28.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-25T15:06:28.845 [DEBUG] [Thread-13722] [transport.py] [_log()] starting thread (client mode): 0xb6b61a80
2025-12-25T15:06:28.845 [DEBUG] [Thread-13722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:06:28.859 [DEBUG] [Thread-13722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:06:28.859 [INFO] [Thread-13722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] client lang: <none>
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] server lang: <none>
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] kex follows: False
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] Compression: none
2025-12-25T15:06:28.867 [DEBUG] [Thread-13722] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:06:28.926 [DEBUG] [Thread-13722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:06:28.926 [DEBUG] [Thread-13722] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:06:28.927 [DEBUG] [Thread-13722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:06:28.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:06:28.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:06:28.982 [DEBUG] [Thread-13722] [transport.py] [_log()] userauth is OK
2025-12-25T15:06:28.982 [DEBUG] [Thread-13722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:06:28.982 [DEBUG] [Thread-13722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:06:28.982 [DEBUG] [Thread-13722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:06:28.982 [DEBUG] [Thread-13722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:06:28.997 [INFO] [Thread-13722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:06:28.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-25T15:06:28.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:06:29.891 [DEBUG] [Thread-13722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:06:29.891 [DEBUG] [Thread-13722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:06:29.939 [DEBUG] [Thread-13722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:06:29.939 [DEBUG] [Thread-13722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:06:29.948 [DEBUG] [Thread-13722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:06:29.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:06:29.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-25T15:06:29.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-25T15:06:29.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:06:29.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:06:29.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:06:29.986 [DEBUG] [Thread-13722] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:06:30.649 [DEBUG] [Thread-13724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:06:42.185 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:06:42.186 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:06:45.690 [DEBUG] [Thread-13725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:00.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:07:00.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:07:00.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-25T15:07:00.723 [DEBUG] [Thread-13726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 6, 27), 29.93, 13.55, 0.0, 28.3, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:07:00.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:06:27
2025-12-25T15:07:00.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:07:01.052 [DEBUG] [Thread-13727] [transport.py] [_log()] starting thread (client mode): 0xb6b614b0
2025-12-25T15:07:01.052 [DEBUG] [Thread-13727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:07:01.071 [DEBUG] [Thread-13727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:07:01.071 [INFO] [Thread-13727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:07:01.074 [DEBUG] [Thread-13727] [transport.py] [_log()] client lang: <none>
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] server lang: <none>
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] kex follows: False
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] Compression: none
2025-12-25T15:07:01.075 [DEBUG] [Thread-13727] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:07:01.091 [DEBUG] [Thread-13727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:07:01.092 [DEBUG] [Thread-13727] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:07:01.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:07:01.092 [DEBUG] [Thread-13727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:07:01.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:07:01.093 [DEBUG] [Thread-13727] [transport.py] [_log()] userauth is OK
2025-12-25T15:07:01.093 [DEBUG] [Thread-13727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:07:01.093 [DEBUG] [Thread-13727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:07:01.093 [DEBUG] [Thread-13727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:07:01.093 [DEBUG] [Thread-13727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:07:01.105 [INFO] [Thread-13727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:07:01.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:07:01.867 [DEBUG] [Thread-13727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:07:01.867 [DEBUG] [Thread-13727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:07:01.868 [DEBUG] [Thread-13727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:07:01.908 [DEBUG] [Thread-13727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:07:01.908 [DEBUG] [Thread-13727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:07:01.911 [DEBUG] [Thread-13727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:07:01.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:07:01.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:07:01.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:07:01.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:07:01.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:07:01.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:07:01.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:07:01.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:07:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:07:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.545895 -999.00  +25.60  25.30     19   +0.40 1 1 1 1 1   888    0 26.07 31.78 ----- 31.7 25.3 295.1 32.1 30.6 -27.6 30.3 -26.6 30.9 -24.8 31.5 -26.2
2025-12-25T15:07:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:07:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:07:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.545895
2025-12-25T15:07:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:07:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:07:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:07:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:07:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:07:01.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:06:27', tmtdew=29.93, humidity=13.55, cloud=0.0, wind=28.3, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:06:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:07:01.952 [DEBUG] [Thread-13727] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:07:02.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-25T15:07:02.053 [DEBUG] [Thread-13730] [transport.py] [_log()] starting thread (client mode): 0xb6b63c10
2025-12-25T15:07:02.053 [DEBUG] [Thread-13730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:07:02.070 [DEBUG] [Thread-13730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:07:02.070 [INFO] [Thread-13730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:07:02.077 [DEBUG] [Thread-13730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:07:02.078 [DEBUG] [Thread-13730] [transport.py] [_log()] client lang: <none>
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] server lang: <none>
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] kex follows: False
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] Compression: none
2025-12-25T15:07:02.079 [DEBUG] [Thread-13730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:07:02.134 [DEBUG] [Thread-13730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:07:02.135 [DEBUG] [Thread-13730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:07:02.135 [DEBUG] [Thread-13730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:07:02.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:07:02.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:07:02.190 [DEBUG] [Thread-13730] [transport.py] [_log()] userauth is OK
2025-12-25T15:07:02.191 [DEBUG] [Thread-13730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:07:02.191 [DEBUG] [Thread-13730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:07:02.191 [DEBUG] [Thread-13730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:07:02.191 [DEBUG] [Thread-13730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:07:02.210 [INFO] [Thread-13730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:07:02.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-25T15:07:02.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:07:03.051 [DEBUG] [Thread-13730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:07:03.052 [DEBUG] [Thread-13730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:07:03.099 [DEBUG] [Thread-13730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:07:03.099 [DEBUG] [Thread-13730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:07:03.108 [DEBUG] [Thread-13730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:07:03.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:07:03.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:07:03.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:07:03.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:07:03.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:07:03.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:07:03.143 [DEBUG] [Thread-13730] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:07:09.699 [DEBUG] [Thread-13732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:15.752 [DEBUG] [Thread-13733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:30.811 [DEBUG] [Thread-13734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:07:33.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:07:33.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:07:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 6, 59), 30.04, 13.37, 0.0, 32.43, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:07:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:06:59
2025-12-25T15:07:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:07:34.165 [DEBUG] [Thread-13735] [transport.py] [_log()] starting thread (client mode): 0xb6b21930
2025-12-25T15:07:34.165 [DEBUG] [Thread-13735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:07:34.185 [DEBUG] [Thread-13735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:07:34.186 [INFO] [Thread-13735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] client lang: <none>
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] server lang: <none>
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] kex follows: False
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:07:34.189 [DEBUG] [Thread-13735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:07:34.190 [DEBUG] [Thread-13735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:07:34.190 [DEBUG] [Thread-13735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:07:34.190 [DEBUG] [Thread-13735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:07:34.190 [DEBUG] [Thread-13735] [transport.py] [_log()] Compression: none
2025-12-25T15:07:34.190 [DEBUG] [Thread-13735] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:07:34.207 [DEBUG] [Thread-13735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:07:34.208 [DEBUG] [Thread-13735] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:07:34.208 [DEBUG] [Thread-13735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:07:34.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:07:34.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:07:34.210 [DEBUG] [Thread-13735] [transport.py] [_log()] userauth is OK
2025-12-25T15:07:34.211 [DEBUG] [Thread-13735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:07:34.211 [DEBUG] [Thread-13735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:07:34.211 [DEBUG] [Thread-13735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:07:34.211 [DEBUG] [Thread-13735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:07:34.238 [INFO] [Thread-13735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:07:34.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:07:34.820 [DEBUG] [Thread-13735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:07:34.820 [DEBUG] [Thread-13735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:07:34.821 [DEBUG] [Thread-13735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:07:34.861 [DEBUG] [Thread-13735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:07:34.861 [DEBUG] [Thread-13735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:07:34.865 [DEBUG] [Thread-13735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:07:34.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:07:34.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:07:34.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:07:34.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:07:34.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:07:34.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:07:34.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:07:34.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:07:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:07:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.546242 -999.00  +25.60  28.12     19   +0.40 1 1 1 1 1   888    0 26.19 27.85 ----- 28.1 28.1 293.8 37.0 30.6 -26.5 30.2 -28.2 30.6 -25.8 31.4 -24.6
2025-12-25T15:07:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:07:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:07:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.546242
2025-12-25T15:07:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:07:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:07:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:07:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:07:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:07:34.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:06:59', tmtdew=30.04, humidity=13.37, cloud=0.0, wind=32.43, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:06:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:07:34.894 [DEBUG] [Thread-13735] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:07:34.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-25T15:07:34.987 [DEBUG] [Thread-13738] [transport.py] [_log()] starting thread (client mode): 0xb6b007f0
2025-12-25T15:07:34.987 [DEBUG] [Thread-13738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:07:35.002 [DEBUG] [Thread-13738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:07:35.002 [INFO] [Thread-13738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:07:35.009 [DEBUG] [Thread-13738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] client lang: <none>
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] server lang: <none>
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] kex follows: False
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] Compression: none
2025-12-25T15:07:35.010 [DEBUG] [Thread-13738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:07:35.068 [DEBUG] [Thread-13738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:07:35.069 [DEBUG] [Thread-13738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:07:35.069 [DEBUG] [Thread-13738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:07:35.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:07:35.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:07:35.127 [DEBUG] [Thread-13738] [transport.py] [_log()] userauth is OK
2025-12-25T15:07:35.128 [DEBUG] [Thread-13738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:07:35.128 [DEBUG] [Thread-13738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:07:35.128 [DEBUG] [Thread-13738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:07:35.128 [DEBUG] [Thread-13738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:07:35.148 [INFO] [Thread-13738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:07:35.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-25T15:07:35.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:07:35.960 [DEBUG] [Thread-13738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:07:35.961 [DEBUG] [Thread-13738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:07:36.009 [DEBUG] [Thread-13738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:07:36.009 [DEBUG] [Thread-13738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:07:36.019 [DEBUG] [Thread-13738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:07:36.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:07:36.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:07:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:07:36.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:07:36.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:07:36.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:07:36.055 [DEBUG] [Thread-13738] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:07:42.333 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:42.334 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:07:45.848 [DEBUG] [Thread-13740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:00.888 [DEBUG] [Thread-13741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:08:06.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:08:06.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-25T15:08:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 8, 3), 30.46, 13.02, 0.0, 37.44, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:08:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:08:03
2025-12-25T15:08:06.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:08:07.040 [DEBUG] [Thread-13742] [transport.py] [_log()] starting thread (client mode): 0xb9593bb0
2025-12-25T15:08:07.040 [DEBUG] [Thread-13742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:08:07.061 [DEBUG] [Thread-13742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:08:07.061 [INFO] [Thread-13742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] client lang: <none>
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] server lang: <none>
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] kex follows: False
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] Compression: none
2025-12-25T15:08:07.065 [DEBUG] [Thread-13742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:08:07.084 [DEBUG] [Thread-13742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:08:07.085 [DEBUG] [Thread-13742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:08:07.085 [DEBUG] [Thread-13742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:08:07.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:08:07.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:08:07.088 [DEBUG] [Thread-13742] [transport.py] [_log()] userauth is OK
2025-12-25T15:08:07.088 [DEBUG] [Thread-13742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:08:07.088 [DEBUG] [Thread-13742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:08:07.088 [DEBUG] [Thread-13742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:08:07.088 [DEBUG] [Thread-13742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:08:07.107 [INFO] [Thread-13742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:08:07.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:08:07.894 [DEBUG] [Thread-13742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:08:07.895 [DEBUG] [Thread-13742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:08:07.895 [DEBUG] [Thread-13742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:08:07.935 [DEBUG] [Thread-13742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:08:07.935 [DEBUG] [Thread-13742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:08:07.939 [DEBUG] [Thread-13742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:08:07.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:08:07.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:08:07.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:08:07.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:08:07.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:08:07.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:08:07.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:08:07.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:08:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:08:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.546589 -999.00  +25.60  39.97     19   +0.30 1 1 2 1 1   888    0 26.29 20.88 ----- 36.4 40.0 293.8 45.2 30.5 -27.5 30.4 -27.4 30.8 -28.5 31.3 -24.8
2025-12-25T15:08:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:08:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:08:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.546589
2025-12-25T15:08:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:08:07.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:08:07.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:08:07.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:08:07.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:08:07.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:08:03', tmtdew=30.46, humidity=13.02, cloud=0.0, wind=37.44, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:07:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:08:07.968 [DEBUG] [Thread-13742] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:08:08.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-25T15:08:09.750 [DEBUG] [Thread-13745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:15.924 [DEBUG] [Thread-13746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:30.970 [DEBUG] [Thread-13747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:42.473 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:42.474 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:08:46.005 [DEBUG] [Thread-13748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:01.044 [DEBUG] [Thread-13749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:09.799 [DEBUG] [Thread-13750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:16.077 [DEBUG] [Thread-13751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:31.117 [DEBUG] [Thread-13752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:42.615 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:42.616 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:09:46.149 [DEBUG] [Thread-13753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:01.187 [DEBUG] [Thread-13754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:09.852 [DEBUG] [Thread-13755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:16.226 [DEBUG] [Thread-13756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:20.373 [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-25T15:10:31.262 [DEBUG] [Thread-13757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:42.755 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:42.756 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:46.298 [DEBUG] [Thread-13758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:10:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:10:50.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:10:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:10:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 10, 43), 31.33, 12.36, 0.0, 18.56, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:10:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:10:43
2025-12-25T15:10:51.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:10:51.364 [DEBUG] [Thread-13759] [transport.py] [_log()] starting thread (client mode): 0xb95b2320
2025-12-25T15:10:51.364 [DEBUG] [Thread-13759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:10:51.383 [DEBUG] [Thread-13759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:10:51.383 [INFO] [Thread-13759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] client lang: <none>
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] server lang: <none>
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] kex follows: False
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] Compression: none
2025-12-25T15:10:51.387 [DEBUG] [Thread-13759] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:10:51.403 [DEBUG] [Thread-13759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:10:51.404 [DEBUG] [Thread-13759] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:10:51.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:10:51.405 [DEBUG] [Thread-13759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:10:51.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:10:51.407 [DEBUG] [Thread-13759] [transport.py] [_log()] userauth is OK
2025-12-25T15:10:51.407 [DEBUG] [Thread-13759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:10:51.407 [DEBUG] [Thread-13759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:10:51.407 [DEBUG] [Thread-13759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:10:51.408 [DEBUG] [Thread-13759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:10:51.426 [INFO] [Thread-13759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:10:51.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:10:52.012 [DEBUG] [Thread-13759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:10:52.012 [DEBUG] [Thread-13759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:10:52.013 [DEBUG] [Thread-13759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:10:52.053 [DEBUG] [Thread-13759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:10:52.053 [DEBUG] [Thread-13759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:10:52.057 [DEBUG] [Thread-13759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:10:52.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:10:52.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:10:52.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:10:52.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:10:52.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:10:52.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:10:52.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:10:52.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.548672 -999.00  +25.60  21.20     18   -0.00 1 1 1 1 1   888    0 25.63 1.86 ----- 20.5 21.2 295.8 24.9 30.5 -27.5 30.3 -26.9 30.8 -24.3 31.5 -24.6
2025-12-25T15:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.548672
2025-12-25T15:10:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:10:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:10:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:10:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:10:52.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:10:52.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:10:43', tmtdew=31.33, humidity=12.36, cloud=0.0, wind=18.56, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:10:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:10:52.083 [DEBUG] [Thread-13759] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:10:52.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-25T15:10:52.183 [DEBUG] [Thread-13762] [transport.py] [_log()] starting thread (client mode): 0xb6b02a70
2025-12-25T15:10:52.183 [DEBUG] [Thread-13762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:10:52.198 [DEBUG] [Thread-13762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:10:52.198 [INFO] [Thread-13762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:10:52.206 [DEBUG] [Thread-13762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:10:52.206 [DEBUG] [Thread-13762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:10:52.206 [DEBUG] [Thread-13762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] client lang: <none>
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] server lang: <none>
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] kex follows: False
2025-12-25T15:10:52.207 [DEBUG] [Thread-13762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:10:52.208 [DEBUG] [Thread-13762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:10:52.208 [DEBUG] [Thread-13762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:10:52.208 [DEBUG] [Thread-13762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:10:52.208 [DEBUG] [Thread-13762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:10:52.208 [DEBUG] [Thread-13762] [transport.py] [_log()] Compression: none
2025-12-25T15:10:52.208 [DEBUG] [Thread-13762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:10:52.265 [DEBUG] [Thread-13762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:10:52.266 [DEBUG] [Thread-13762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:10:52.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:10:52.267 [DEBUG] [Thread-13762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:10:52.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:10:52.325 [DEBUG] [Thread-13762] [transport.py] [_log()] userauth is OK
2025-12-25T15:10:52.325 [DEBUG] [Thread-13762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:10:52.326 [DEBUG] [Thread-13762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:10:52.326 [DEBUG] [Thread-13762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:10:52.326 [DEBUG] [Thread-13762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:10:52.352 [INFO] [Thread-13762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:10:52.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:10:52.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:10:53.161 [DEBUG] [Thread-13762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:10:53.161 [DEBUG] [Thread-13762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:10:53.209 [DEBUG] [Thread-13762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:10:53.209 [DEBUG] [Thread-13762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:10:53.218 [DEBUG] [Thread-13762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:10:53.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:10:53.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-25T15:10:53.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-25T15:10:53.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:10:53.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:10:53.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:10:53.259 [DEBUG] [Thread-13762] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:11:01.332 [DEBUG] [Thread-13764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:09.905 [DEBUG] [Thread-13765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:16.369 [DEBUG] [Thread-13766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:23.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:11:23.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:11:23.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-25T15:11:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 11, 15), 31.03, 12.64, 0.0, 28.26, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:11:23.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:11:15
2025-12-25T15:11:24.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:11:24.271 [DEBUG] [Thread-13767] [transport.py] [_log()] starting thread (client mode): 0xb9591120
2025-12-25T15:11:24.271 [DEBUG] [Thread-13767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:11:24.291 [DEBUG] [Thread-13767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:11:24.291 [INFO] [Thread-13767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:24.294 [DEBUG] [Thread-13767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] client lang: <none>
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] server lang: <none>
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] kex follows: False
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] Compression: none
2025-12-25T15:11:24.295 [DEBUG] [Thread-13767] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:11:24.313 [DEBUG] [Thread-13767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:11:24.313 [DEBUG] [Thread-13767] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:11:24.314 [DEBUG] [Thread-13767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:11:24.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:11:24.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:11:24.357 [DEBUG] [Thread-13767] [transport.py] [_log()] userauth is OK
2025-12-25T15:11:24.358 [DEBUG] [Thread-13767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:11:24.358 [DEBUG] [Thread-13767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:11:24.358 [DEBUG] [Thread-13767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:11:24.358 [DEBUG] [Thread-13767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:11:24.391 [INFO] [Thread-13767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:11:24.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:11:24.978 [DEBUG] [Thread-13767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:11:24.978 [DEBUG] [Thread-13767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:11:24.978 [DEBUG] [Thread-13767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:11:25.019 [DEBUG] [Thread-13767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:11:25.019 [DEBUG] [Thread-13767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:11:25.022 [DEBUG] [Thread-13767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:11:25.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:11:25.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:11:25.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:11:25.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:11:25.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:11:25.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:11:25.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:11:25.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:11:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:11:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.549020 -999.00  +25.90  20.53     18   +0.00 1 1 1 1 1   888    0 25.28 1.37 ----- 14.9 20.5 311.6 26.3 30.8 -26.5 30.4 -27.4 31.0 -23.6 31.6 -24.7
2025-12-25T15:11:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:11:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:11:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.549020
2025-12-25T15:11:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:11:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:11:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:11:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:11:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:11:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:11:15', tmtdew=31.03, humidity=12.64, cloud=0.0, wind=28.26, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:10:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:11:25.050 [DEBUG] [Thread-13767] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:11:25.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-25T15:11:25.143 [DEBUG] [Thread-13770] [transport.py] [_log()] starting thread (client mode): 0xb95907c0
2025-12-25T15:11:25.143 [DEBUG] [Thread-13770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:11:25.158 [DEBUG] [Thread-13770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:11:25.158 [INFO] [Thread-13770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:11:25.166 [DEBUG] [Thread-13770] [transport.py] [_log()] client lang: <none>
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] server lang: <none>
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] kex follows: False
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] Compression: none
2025-12-25T15:11:25.167 [DEBUG] [Thread-13770] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:11:25.225 [DEBUG] [Thread-13770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:11:25.225 [DEBUG] [Thread-13770] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:11:25.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:11:25.226 [DEBUG] [Thread-13770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:11:25.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:11:25.281 [DEBUG] [Thread-13770] [transport.py] [_log()] userauth is OK
2025-12-25T15:11:25.282 [DEBUG] [Thread-13770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:11:25.282 [DEBUG] [Thread-13770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:11:25.282 [DEBUG] [Thread-13770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:11:25.282 [DEBUG] [Thread-13770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:11:25.301 [INFO] [Thread-13770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:11:25.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-25T15:11:25.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:11:26.138 [DEBUG] [Thread-13770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:11:26.138 [DEBUG] [Thread-13770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:11:26.186 [DEBUG] [Thread-13770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:11:26.186 [DEBUG] [Thread-13770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:11:26.196 [DEBUG] [Thread-13770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:11:26.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:11:26.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-25T15:11:26.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-25T15:11:26.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:11:26.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:11:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:11:26.233 [DEBUG] [Thread-13770] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:11:31.403 [DEBUG] [Thread-13772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:42.896 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:42.897 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:46.449 [DEBUG] [Thread-13773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:11:56.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:11:56.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:11:56.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-25T15:11:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 11, 47), 31.06, 12.77, 0.0, 43.67, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:11:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:11:47
2025-12-25T15:11:57.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:11:57.239 [DEBUG] [Thread-13774] [transport.py] [_log()] starting thread (client mode): 0xb95d7760
2025-12-25T15:11:57.239 [DEBUG] [Thread-13774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:11:57.258 [DEBUG] [Thread-13774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:11:57.258 [INFO] [Thread-13774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:11:57.261 [DEBUG] [Thread-13774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:11:57.261 [DEBUG] [Thread-13774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:11:57.261 [DEBUG] [Thread-13774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] client lang: <none>
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] server lang: <none>
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] kex follows: False
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] Compression: none
2025-12-25T15:11:57.262 [DEBUG] [Thread-13774] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:11:57.279 [DEBUG] [Thread-13774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:11:57.280 [DEBUG] [Thread-13774] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:11:57.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:11:57.281 [DEBUG] [Thread-13774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:11:57.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:11:57.283 [DEBUG] [Thread-13774] [transport.py] [_log()] userauth is OK
2025-12-25T15:11:57.284 [DEBUG] [Thread-13774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:11:57.284 [DEBUG] [Thread-13774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:11:57.284 [DEBUG] [Thread-13774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:11:57.284 [DEBUG] [Thread-13774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:11:57.301 [INFO] [Thread-13774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:11:57.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:11:57.911 [DEBUG] [Thread-13774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:11:57.911 [DEBUG] [Thread-13774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:11:57.911 [DEBUG] [Thread-13774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:11:57.952 [DEBUG] [Thread-13774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:11:57.952 [DEBUG] [Thread-13774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:11:57.956 [DEBUG] [Thread-13774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:11:57.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:11:57.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:11:57.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:11:57.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:11:57.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:11:57.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:11:57.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:11:57.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:11:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:11:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.549367 -999.00  +26.00  32.33     18   +0.20 1 1 2 1 1   888    0 25.34 2.27 ----- 30.4 32.3 333.0 38.4 30.8 -26.9 30.4 -27.1 31.1 -23.6 31.7 -25.3
2025-12-25T15:11:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:11:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:11:57.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.549367
2025-12-25T15:11:57.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:11:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:11:47', tmtdew=31.06, humidity=12.77, cloud=0.0, wind=43.67, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:11:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:11:57.984 [DEBUG] [Thread-13774] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:11:58.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-25T15:11:58.078 [DEBUG] [Thread-13777] [transport.py] [_log()] starting thread (client mode): 0xb95d4ac0
2025-12-25T15:11:58.078 [DEBUG] [Thread-13777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:11:58.093 [DEBUG] [Thread-13777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:11:58.093 [INFO] [Thread-13777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:11:58.101 [DEBUG] [Thread-13777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] client lang: <none>
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] server lang: <none>
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] kex follows: False
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:11:58.102 [DEBUG] [Thread-13777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:11:58.103 [DEBUG] [Thread-13777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:11:58.103 [DEBUG] [Thread-13777] [transport.py] [_log()] Compression: none
2025-12-25T15:11:58.103 [DEBUG] [Thread-13777] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:11:58.158 [DEBUG] [Thread-13777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:11:58.159 [DEBUG] [Thread-13777] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:11:58.159 [DEBUG] [Thread-13777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:11:58.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:11:58.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:11:58.215 [DEBUG] [Thread-13777] [transport.py] [_log()] userauth is OK
2025-12-25T15:11:58.215 [DEBUG] [Thread-13777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:11:58.216 [DEBUG] [Thread-13777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:11:58.216 [DEBUG] [Thread-13777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:11:58.216 [DEBUG] [Thread-13777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:11:58.238 [INFO] [Thread-13777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:11:58.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:11:58.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:11:59.066 [DEBUG] [Thread-13777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:11:59.066 [DEBUG] [Thread-13777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:11:59.114 [DEBUG] [Thread-13777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:11:59.114 [DEBUG] [Thread-13777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:11:59.123 [DEBUG] [Thread-13777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:11:59.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:11:59.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-25T15:11:59.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-25T15:11:59.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:11:59.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:11:59.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:11:59.160 [DEBUG] [Thread-13777] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:12:01.487 [DEBUG] [Thread-13779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:12:09.954 [DEBUG] [Thread-13780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:12:16.531 [DEBUG] [Thread-13781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:12:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:12:29.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:12:29.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-25T15:12:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 12, 19), 30.88, 12.9, 0.0, 41.16, 26.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:12:29.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:12:19
2025-12-25T15:12:29.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:12:30.146 [DEBUG] [Thread-13782] [transport.py] [_log()] starting thread (client mode): 0xb95d4f10
2025-12-25T15:12:30.146 [DEBUG] [Thread-13782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:12:30.166 [DEBUG] [Thread-13782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:12:30.166 [INFO] [Thread-13782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:12:30.168 [DEBUG] [Thread-13782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:12:30.168 [DEBUG] [Thread-13782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:12:30.168 [DEBUG] [Thread-13782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] client lang: <none>
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] server lang: <none>
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] kex follows: False
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] Compression: none
2025-12-25T15:12:30.169 [DEBUG] [Thread-13782] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:12:30.185 [DEBUG] [Thread-13782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:12:30.186 [DEBUG] [Thread-13782] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:12:30.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:12:30.187 [DEBUG] [Thread-13782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:12:30.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:12:30.190 [DEBUG] [Thread-13782] [transport.py] [_log()] userauth is OK
2025-12-25T15:12:30.190 [DEBUG] [Thread-13782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:12:30.190 [DEBUG] [Thread-13782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:12:30.191 [DEBUG] [Thread-13782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:12:30.191 [DEBUG] [Thread-13782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:12:30.225 [INFO] [Thread-13782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:12:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:12:30.848 [DEBUG] [Thread-13782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:12:30.848 [DEBUG] [Thread-13782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:12:30.849 [DEBUG] [Thread-13782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:12:30.889 [DEBUG] [Thread-13782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:12:30.889 [DEBUG] [Thread-13782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:12:30.893 [DEBUG] [Thread-13782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:12:30.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:12:30.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:12:30.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:12:30.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:12:30.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:12:30.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:12:30.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:12:30.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:12:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:12:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.549714 -999.00  +26.70  29.51     18   +0.60 1 1 1 1 1   888    0 25.47 5.33 ----- 32.7 29.5 309.6 41.0 30.9 -28.4 30.6 -26.4 31.3 -24.2 31.7 -25.6
2025-12-25T15:12:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:12:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:12:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.549714
2025-12-25T15:12:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:12:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:12:30.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:12:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:12:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:12:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:12:19', tmtdew=30.88, humidity=12.9, cloud=0.0, wind=41.16, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:11:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:12:30.920 [DEBUG] [Thread-13782] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:12:31.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-25T15:12:31.014 [DEBUG] [Thread-13785] [transport.py] [_log()] starting thread (client mode): 0xb95d7df0
2025-12-25T15:12:31.014 [DEBUG] [Thread-13785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:12:31.031 [DEBUG] [Thread-13785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:12:31.031 [INFO] [Thread-13785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:12:31.038 [DEBUG] [Thread-13785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] client lang: <none>
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] server lang: <none>
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] kex follows: False
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:12:31.039 [DEBUG] [Thread-13785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:12:31.040 [DEBUG] [Thread-13785] [transport.py] [_log()] Compression: none
2025-12-25T15:12:31.040 [DEBUG] [Thread-13785] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:12:31.104 [DEBUG] [Thread-13785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:12:31.105 [DEBUG] [Thread-13785] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:12:31.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:12:31.106 [DEBUG] [Thread-13785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:12:31.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:12:31.160 [DEBUG] [Thread-13785] [transport.py] [_log()] userauth is OK
2025-12-25T15:12:31.161 [DEBUG] [Thread-13785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:12:31.161 [DEBUG] [Thread-13785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:12:31.161 [DEBUG] [Thread-13785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:12:31.161 [DEBUG] [Thread-13785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:12:31.180 [INFO] [Thread-13785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:12:31.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-25T15:12:31.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:12:31.564 [DEBUG] [Thread-13787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:12:32.050 [DEBUG] [Thread-13785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:12:32.051 [DEBUG] [Thread-13785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:12:32.099 [DEBUG] [Thread-13785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:12:32.099 [DEBUG] [Thread-13785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:12:32.108 [DEBUG] [Thread-13785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:12:32.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:12: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-25T15:12: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-25T15:12:32.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:12:32.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:12:32.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:12:32.144 [DEBUG] [Thread-13785] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:12:43.037 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:12:43.038 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:12:46.620 [DEBUG] [Thread-13788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:01.652 [DEBUG] [Thread-13789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:13:02.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:13:02.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-25T15:13:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 12, 51), 30.29, 13.5, 0.0, 39.03, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:13:02.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:12:51
2025-12-25T15:13:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:13:03.163 [DEBUG] [Thread-13790] [transport.py] [_log()] starting thread (client mode): 0xb95d45b0
2025-12-25T15:13:03.163 [DEBUG] [Thread-13790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:13:03.184 [DEBUG] [Thread-13790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:13:03.185 [INFO] [Thread-13790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:13:03.188 [DEBUG] [Thread-13790] [transport.py] [_log()] client lang: <none>
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] server lang: <none>
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] kex follows: False
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] Compression: none
2025-12-25T15:13:03.189 [DEBUG] [Thread-13790] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:13:03.208 [DEBUG] [Thread-13790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:13:03.208 [DEBUG] [Thread-13790] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:13:03.209 [DEBUG] [Thread-13790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:13:03.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:13:03.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:13:03.212 [DEBUG] [Thread-13790] [transport.py] [_log()] userauth is OK
2025-12-25T15:13:03.212 [DEBUG] [Thread-13790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:13:03.212 [DEBUG] [Thread-13790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:13:03.212 [DEBUG] [Thread-13790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:13:03.212 [DEBUG] [Thread-13790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:13:03.230 [INFO] [Thread-13790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:13:03.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:13:03.920 [DEBUG] [Thread-13790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:13:03.920 [DEBUG] [Thread-13790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:13:03.921 [DEBUG] [Thread-13790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:13:03.961 [DEBUG] [Thread-13790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:13:03.961 [DEBUG] [Thread-13790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:13:03.965 [DEBUG] [Thread-13790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:13:03.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:13:03.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:13:03.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:13:03.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:13:03.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:13:03.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:13:03.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:13:03.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:13:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:13:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.550061 -999.00  +26.20  44.98     18   +0.40 1 1 2 1 1   888    0 25.84 8.68 ----- 40.4 45.0 309.8 50.5 30.7 -28.5 30.5 -29.0 31.1 -24.8 31.6 -26.3
2025-12-25T15:13:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:13:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:13:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.550061
2025-12-25T15:13:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:13:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:13:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:13:03.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:13:03.990 [DEBUG] [Thread-13790] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:13:03.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:13:03.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:12:51', tmtdew=30.29, humidity=13.5, cloud=0.0, wind=39.03, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:12:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:13:04.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-25T15:13:04.084 [DEBUG] [Thread-13793] [transport.py] [_log()] starting thread (client mode): 0xb957abf0
2025-12-25T15:13:04.084 [DEBUG] [Thread-13793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:13:04.099 [DEBUG] [Thread-13793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:13:04.100 [INFO] [Thread-13793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:13:04.107 [DEBUG] [Thread-13793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:13:04.107 [DEBUG] [Thread-13793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:13:04.107 [DEBUG] [Thread-13793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] client lang: <none>
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] server lang: <none>
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] kex follows: False
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] Compression: none
2025-12-25T15:13:04.108 [DEBUG] [Thread-13793] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:13:04.166 [DEBUG] [Thread-13793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:13:04.166 [DEBUG] [Thread-13793] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:13:04.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:13:04.167 [DEBUG] [Thread-13793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:13:04.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:13:04.221 [DEBUG] [Thread-13793] [transport.py] [_log()] userauth is OK
2025-12-25T15:13:04.222 [DEBUG] [Thread-13793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:13:04.222 [DEBUG] [Thread-13793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:13:04.222 [DEBUG] [Thread-13793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:13:04.222 [DEBUG] [Thread-13793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:13:04.241 [INFO] [Thread-13793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:13:04.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-25T15:13:04.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:13:05.061 [DEBUG] [Thread-13793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:13:05.061 [DEBUG] [Thread-13793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:13:05.109 [DEBUG] [Thread-13793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:13:05.109 [DEBUG] [Thread-13793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:13:05.118 [DEBUG] [Thread-13793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:13:05.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:13:05.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-25T15:13:05.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-25T15:13:05.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:13:05.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:13:05.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:13:05.155 [DEBUG] [Thread-13793] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:13:10.008 [DEBUG] [Thread-13795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:16.685 [DEBUG] [Thread-13796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:31.737 [DEBUG] [Thread-13797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:35.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:13:35.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:13:35.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-25T15:13:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 13, 23), 30.46, 13.35, 0.0, 43.83, 26.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:13:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:13:23
2025-12-25T15:13:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:13:36.162 [DEBUG] [Thread-13798] [transport.py] [_log()] starting thread (client mode): 0xb95d43d0
2025-12-25T15:13:36.162 [DEBUG] [Thread-13798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:13:36.181 [DEBUG] [Thread-13798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:13:36.182 [INFO] [Thread-13798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] client lang: <none>
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] server lang: <none>
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] kex follows: False
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] Compression: none
2025-12-25T15:13:36.185 [DEBUG] [Thread-13798] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:13:36.201 [DEBUG] [Thread-13798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:13:36.201 [DEBUG] [Thread-13798] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:13:36.201 [DEBUG] [Thread-13798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:13:36.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:13:36.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:13:36.202 [DEBUG] [Thread-13798] [transport.py] [_log()] userauth is OK
2025-12-25T15:13:36.202 [DEBUG] [Thread-13798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:13:36.202 [DEBUG] [Thread-13798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:13:36.202 [DEBUG] [Thread-13798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:13:36.202 [DEBUG] [Thread-13798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:13:36.211 [INFO] [Thread-13798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:13:36.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:13:36.829 [DEBUG] [Thread-13798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:13:36.829 [DEBUG] [Thread-13798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:13:36.829 [DEBUG] [Thread-13798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:13:36.870 [DEBUG] [Thread-13798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:13:36.870 [DEBUG] [Thread-13798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:13:36.872 [DEBUG] [Thread-13798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:13:36.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:13:36.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:13:36.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:13:36.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:13:36.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:13:36.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:13:36.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.550756 -999.00  +26.50  40.18     17   +0.20 1 1 2 1 1   888    0 25.90 12.27 ----- 37.7 40.2 305.8 48.7 30.7 -26.9 30.4 -26.9 31.1 -26.5 31.7 -25.6
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.550756
2025-12-25T15:13:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:13:36.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:13:36.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:13:36.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:13:36.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:13:36.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:13:23', tmtdew=30.46, humidity=13.35, cloud=0.0, wind=43.83, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:13:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:13:36.893 [DEBUG] [Thread-13798] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:13:36.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-25T15:13:36.978 [DEBUG] [Thread-13801] [transport.py] [_log()] starting thread (client mode): 0xb95d6860
2025-12-25T15:13:36.978 [DEBUG] [Thread-13801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:13:36.998 [DEBUG] [Thread-13801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:13:36.998 [INFO] [Thread-13801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] client lang: <none>
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] server lang: <none>
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] kex follows: False
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] Compression: none
2025-12-25T15:13:37.006 [DEBUG] [Thread-13801] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:13:37.062 [DEBUG] [Thread-13801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:13:37.062 [DEBUG] [Thread-13801] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:13:37.062 [DEBUG] [Thread-13801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:13:37.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:13:37.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:13:37.119 [DEBUG] [Thread-13801] [transport.py] [_log()] userauth is OK
2025-12-25T15:13:37.119 [DEBUG] [Thread-13801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:13:37.119 [DEBUG] [Thread-13801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:13:37.119 [DEBUG] [Thread-13801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:13:37.119 [DEBUG] [Thread-13801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:13:37.133 [INFO] [Thread-13801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:13:37.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-25T15:13:37.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:13:37.974 [DEBUG] [Thread-13801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:13:37.974 [DEBUG] [Thread-13801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:13:38.021 [DEBUG] [Thread-13801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:13:38.021 [DEBUG] [Thread-13801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:13:38.030 [DEBUG] [Thread-13801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:13:38.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:13:38.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-25T15:13:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:13:38.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:13:38.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:13:38.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:13:38.061 [DEBUG] [Thread-13801] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:13:43.178 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:43.179 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:13:46.771 [DEBUG] [Thread-13803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:01.822 [DEBUG] [Thread-13804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:08.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:14:08.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:14:08.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-25T15:14:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 13, 55), 30.74, 12.99, 0.0, 33.7, 26.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:14:08.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:13:55
2025-12-25T15:14:08.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:14:09.044 [DEBUG] [Thread-13805] [transport.py] [_log()] starting thread (client mode): 0xb95d63e0
2025-12-25T15:14:09.044 [DEBUG] [Thread-13805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:14:09.063 [DEBUG] [Thread-13805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:14:09.063 [INFO] [Thread-13805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] client lang: <none>
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] server lang: <none>
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] kex follows: False
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:14:09.066 [DEBUG] [Thread-13805] [transport.py] [_log()] Compression: none
2025-12-25T15:14:09.067 [DEBUG] [Thread-13805] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:14:09.083 [DEBUG] [Thread-13805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:14:09.083 [DEBUG] [Thread-13805] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:14:09.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:14:09.084 [DEBUG] [Thread-13805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:14:09.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:14:09.086 [DEBUG] [Thread-13805] [transport.py] [_log()] userauth is OK
2025-12-25T15:14:09.087 [DEBUG] [Thread-13805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:14:09.087 [DEBUG] [Thread-13805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:14:09.087 [DEBUG] [Thread-13805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:14:09.087 [DEBUG] [Thread-13805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:14:09.105 [INFO] [Thread-13805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:14:09.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:14:09.748 [DEBUG] [Thread-13805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:14:09.748 [DEBUG] [Thread-13805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:14:09.748 [DEBUG] [Thread-13805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:14:09.789 [DEBUG] [Thread-13805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:14:09.789 [DEBUG] [Thread-13805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:14:09.793 [DEBUG] [Thread-13805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:14:09.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:14:09.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:14:09.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:14:09.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:14:09.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:14:09.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:14:09.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:14:09.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:14:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:14:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.551103 -999.00  +25.90  43.72     18   +0.00 1 1 2 1 1   888    0 25.73 13.81 ----- 36.2 43.7 308.0 54.0 30.6 -28.3 30.4 -29.5 31.0 -25.8 31.5 -25.2
2025-12-25T15:14:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:14:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:14:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.551103
2025-12-25T15:14:09.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:14:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:14:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:14:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:14:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:14:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:13:55', tmtdew=30.74, humidity=12.99, cloud=0.0, wind=33.7, temperature=26.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:13:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:14:09.818 [DEBUG] [Thread-13805] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:14:09.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:14:09.911 [DEBUG] [Thread-13808] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T15:14:09.911 [DEBUG] [Thread-13808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:14:09.925 [DEBUG] [Thread-13808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:14:09.926 [INFO] [Thread-13808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:14:09.933 [DEBUG] [Thread-13808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:14:09.933 [DEBUG] [Thread-13808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:14:09.933 [DEBUG] [Thread-13808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] client lang: <none>
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] server lang: <none>
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] kex follows: False
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] Compression: none
2025-12-25T15:14:09.934 [DEBUG] [Thread-13808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:14:09.994 [DEBUG] [Thread-13808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:14:09.994 [DEBUG] [Thread-13808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:14:09.995 [DEBUG] [Thread-13808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:14:09.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:14:09.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:14:10.049 [DEBUG] [Thread-13808] [transport.py] [_log()] userauth is OK
2025-12-25T15:14:10.049 [DEBUG] [Thread-13808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:14:10.049 [DEBUG] [Thread-13808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:14:10.049 [DEBUG] [Thread-13808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:14:10.049 [DEBUG] [Thread-13808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:14:10.067 [INFO] [Thread-13808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:14:10.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-25T15:14:10.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:14:10.074 [DEBUG] [Thread-13810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:10.921 [DEBUG] [Thread-13808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:14:10.921 [DEBUG] [Thread-13808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:14:10.970 [DEBUG] [Thread-13808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:14:10.970 [DEBUG] [Thread-13808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:14:10.981 [DEBUG] [Thread-13808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:14:10.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:14:10.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-25T15:14:11.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-25T15:14:11.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:14:11.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:14:11.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:14:11.027 [DEBUG] [Thread-13808] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:14:16.854 [DEBUG] [Thread-13811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:31.890 [DEBUG] [Thread-13812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:41.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:14:41.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:14:41.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-25T15:14:41.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 14, 27), 31.36, 12.52, 0.0, 33.1, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:14:41.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:14:27
2025-12-25T15:14:41.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:14:41.997 [DEBUG] [Thread-13813] [transport.py] [_log()] starting thread (client mode): 0xb6b239a0
2025-12-25T15:14:41.997 [DEBUG] [Thread-13813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:14:42.017 [DEBUG] [Thread-13813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:14:42.017 [INFO] [Thread-13813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:14:42.020 [DEBUG] [Thread-13813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:14:42.020 [DEBUG] [Thread-13813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:14:42.020 [DEBUG] [Thread-13813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:14:42.020 [DEBUG] [Thread-13813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:42.020 [DEBUG] [Thread-13813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] client lang: <none>
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] server lang: <none>
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] kex follows: False
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] Compression: none
2025-12-25T15:14:42.021 [DEBUG] [Thread-13813] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:14:42.040 [DEBUG] [Thread-13813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:14:42.041 [DEBUG] [Thread-13813] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:14:42.042 [DEBUG] [Thread-13813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:14:42.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:14:42.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:14:42.044 [DEBUG] [Thread-13813] [transport.py] [_log()] userauth is OK
2025-12-25T15:14:42.044 [DEBUG] [Thread-13813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:14:42.045 [DEBUG] [Thread-13813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:14:42.045 [DEBUG] [Thread-13813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:14:42.045 [DEBUG] [Thread-13813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:14:42.080 [INFO] [Thread-13813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:14:42.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:14:42.731 [DEBUG] [Thread-13813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:14:42.731 [DEBUG] [Thread-13813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:14:42.732 [DEBUG] [Thread-13813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:14:42.772 [DEBUG] [Thread-13813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:14:42.772 [DEBUG] [Thread-13813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:14:42.774 [DEBUG] [Thread-13813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:14:42.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:14:42.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:14:42.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:14:42.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:14:42.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:14:42.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:14:42.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:14:42.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:14:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:14:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.551450 -999.00  +26.20  36.25     18   +0.10 1 1 2 1 1   888    0 25.82 13.00 ----- 43.6 36.2 311.4 54.2 30.6 -28.0 30.3 -29.4 30.9 -29.5 31.4 -25.3
2025-12-25T15:14:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:14:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:14:42.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.551450
2025-12-25T15:14:42.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:14:42.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:14:42.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:14:42.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:14:42.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:14:42.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:14:27', tmtdew=31.36, humidity=12.52, cloud=0.0, wind=33.1, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:14:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:14:42.802 [DEBUG] [Thread-13813] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:14:42.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:14:42.895 [DEBUG] [Thread-13816] [transport.py] [_log()] starting thread (client mode): 0xb95d5600
2025-12-25T15:14:42.895 [DEBUG] [Thread-13816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:14:42.909 [DEBUG] [Thread-13816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:14:42.910 [INFO] [Thread-13816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:14:42.917 [DEBUG] [Thread-13816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] client lang: <none>
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] server lang: <none>
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] kex follows: False
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:14:42.918 [DEBUG] [Thread-13816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:14:42.919 [DEBUG] [Thread-13816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:14:42.919 [DEBUG] [Thread-13816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:14:42.919 [DEBUG] [Thread-13816] [transport.py] [_log()] Compression: none
2025-12-25T15:14:42.919 [DEBUG] [Thread-13816] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:14:42.979 [DEBUG] [Thread-13816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:14:42.979 [DEBUG] [Thread-13816] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:14:42.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:14:42.980 [DEBUG] [Thread-13816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:14:42.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:14:43.044 [DEBUG] [Thread-13816] [transport.py] [_log()] userauth is OK
2025-12-25T15:14:43.044 [DEBUG] [Thread-13816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:14:43.044 [DEBUG] [Thread-13816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:14:43.044 [DEBUG] [Thread-13816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:14:43.044 [DEBUG] [Thread-13816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:14:43.062 [INFO] [Thread-13816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:14:43.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-25T15:14:43.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:14:43.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:43.321 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:14:43.907 [DEBUG] [Thread-13816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:14:43.907 [DEBUG] [Thread-13816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:14:43.955 [DEBUG] [Thread-13816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:14:43.955 [DEBUG] [Thread-13816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:14:43.967 [DEBUG] [Thread-13816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:14:43.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:14:43.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-25T15:14:43.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-25T15:14:43.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:14:43.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:14:43.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:14:44.003 [DEBUG] [Thread-13816] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:14:46.926 [DEBUG] [Thread-13818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:01.970 [DEBUG] [Thread-13819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:10.132 [DEBUG] [Thread-13820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:14.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:15:14.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:15:14.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-25T15:15:14.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 14, 59), 31.45, 12.34, 0.0, 36.81, 26.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:15:14.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:14:59
2025-12-25T15:15:14.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:15:15.011 [DEBUG] [Thread-13821] [transport.py] [_log()] starting thread (client mode): 0xb9578550
2025-12-25T15:15:15.011 [DEBUG] [Thread-13821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:15:15.032 [DEBUG] [Thread-13821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:15:15.032 [INFO] [Thread-13821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:15:15.035 [DEBUG] [Thread-13821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:15:15.035 [DEBUG] [Thread-13821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] client lang: <none>
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] server lang: <none>
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] kex follows: False
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] Compression: none
2025-12-25T15:15:15.036 [DEBUG] [Thread-13821] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:15:15.054 [DEBUG] [Thread-13821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:15:15.054 [DEBUG] [Thread-13821] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:15:15.055 [DEBUG] [Thread-13821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:15:15.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:15:15.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:15:15.097 [DEBUG] [Thread-13821] [transport.py] [_log()] userauth is OK
2025-12-25T15:15:15.097 [DEBUG] [Thread-13821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:15:15.098 [DEBUG] [Thread-13821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:15:15.098 [DEBUG] [Thread-13821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:15:15.098 [DEBUG] [Thread-13821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:15:15.130 [INFO] [Thread-13821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:15:15.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:15:15.745 [DEBUG] [Thread-13821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:15:15.745 [DEBUG] [Thread-13821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:15:15.745 [DEBUG] [Thread-13821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:15:15.787 [DEBUG] [Thread-13821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:15:15.787 [DEBUG] [Thread-13821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:15:15.790 [DEBUG] [Thread-13821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:15:15.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:15:15.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:15:15.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:15:15.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:15:15.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:15:15.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:15:15.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:15:15.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:15:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:15:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.551797 -999.00  +25.70  35.68     18   -0.20 1 1 2 1 1   888    0 26.26 15.15 ----- 33.9 35.7 293.2 47.4 30.4 -29.2 30.2 -29.5 30.7 -26.7 31.3 -26.4
2025-12-25T15:15:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:15:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:15:15.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.551797
2025-12-25T15:15:15.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:15:15.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:15:15.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:15:15.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:15:15.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:15:15.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:14:59', tmtdew=31.45, humidity=12.34, cloud=0.0, wind=36.81, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:14:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:15:15.812 [DEBUG] [Thread-13821] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:15:15.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-25T15:15:15.906 [DEBUG] [Thread-13824] [transport.py] [_log()] starting thread (client mode): 0xb95d6bc0
2025-12-25T15:15:15.906 [DEBUG] [Thread-13824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:15:15.920 [DEBUG] [Thread-13824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:15:15.920 [INFO] [Thread-13824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:15:15.928 [DEBUG] [Thread-13824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:15:15.928 [DEBUG] [Thread-13824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] client lang: <none>
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] server lang: <none>
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] kex follows: False
2025-12-25T15:15:15.929 [DEBUG] [Thread-13824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:15:15.930 [DEBUG] [Thread-13824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:15:15.930 [DEBUG] [Thread-13824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:15:15.930 [DEBUG] [Thread-13824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:15:15.930 [DEBUG] [Thread-13824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:15:15.930 [DEBUG] [Thread-13824] [transport.py] [_log()] Compression: none
2025-12-25T15:15:15.930 [DEBUG] [Thread-13824] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:15:15.985 [DEBUG] [Thread-13824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:15:15.986 [DEBUG] [Thread-13824] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:15:15.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:15:15.987 [DEBUG] [Thread-13824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:15:15.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:15:16.042 [DEBUG] [Thread-13824] [transport.py] [_log()] userauth is OK
2025-12-25T15:15:16.042 [DEBUG] [Thread-13824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:15:16.042 [DEBUG] [Thread-13824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:15:16.042 [DEBUG] [Thread-13824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:15:16.042 [DEBUG] [Thread-13824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:15:16.066 [INFO] [Thread-13824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:15:16.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-25T15:15:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:15:16.885 [DEBUG] [Thread-13824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:15:16.885 [DEBUG] [Thread-13824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:15:16.933 [DEBUG] [Thread-13824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:15:16.933 [DEBUG] [Thread-13824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:15:16.942 [DEBUG] [Thread-13824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:15:16.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:15:16.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:15:16.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-25T15:15:16.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:15:16.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:15:16.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:15:16.979 [DEBUG] [Thread-13824] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:15:17.001 [DEBUG] [Thread-13826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:32.048 [DEBUG] [Thread-13827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:43.461 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:43.462 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:15:47.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:15:47.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-25T15:15:47.078 [DEBUG] [Thread-13828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:15:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 15, 31), 31.55, 12.29, 0.0, 29.5, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:15:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:15:31
2025-12-25T15:15:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:15:47.977 [DEBUG] [Thread-13829] [transport.py] [_log()] starting thread (client mode): 0xb6b61780
2025-12-25T15:15:47.977 [DEBUG] [Thread-13829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:15:47.996 [DEBUG] [Thread-13829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:15:47.996 [INFO] [Thread-13829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] client lang: <none>
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] server lang: <none>
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] kex follows: False
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] Compression: none
2025-12-25T15:15:47.998 [DEBUG] [Thread-13829] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:15:48.006 [DEBUG] [Thread-13829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:15:48.006 [DEBUG] [Thread-13829] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:15:48.007 [DEBUG] [Thread-13829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:15:48.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:15:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:15:48.008 [DEBUG] [Thread-13829] [transport.py] [_log()] userauth is OK
2025-12-25T15:15:48.008 [DEBUG] [Thread-13829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:15:48.009 [DEBUG] [Thread-13829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:15:48.009 [DEBUG] [Thread-13829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:15:48.009 [DEBUG] [Thread-13829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:15:48.025 [INFO] [Thread-13829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:15:48.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:15:48.627 [DEBUG] [Thread-13829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:15:48.628 [DEBUG] [Thread-13829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:15:48.628 [DEBUG] [Thread-13829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:15:48.669 [DEBUG] [Thread-13829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:15:48.669 [DEBUG] [Thread-13829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:15:48.672 [DEBUG] [Thread-13829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:15:48.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:15:48.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:15:48.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:15:48.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:15:48.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:15:48.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:15:48.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.552145 -999.00  +25.30  26.03     18   -0.20 1 1 1 1 1   888    0 25.44 15.10 ----- 20.6 26.0 295.0 37.1 30.4 -28.1 30.1 -28.2 30.8 -25.0 31.3 -26.3
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.552145
2025-12-25T15:15:48.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:15:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:15:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:15:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:15:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:15:48.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:15:31', tmtdew=31.55, humidity=12.29, cloud=0.0, wind=29.5, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:15:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:15:48.694 [DEBUG] [Thread-13829] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:15:48.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-25T15:15:48.798 [DEBUG] [Thread-13832] [transport.py] [_log()] starting thread (client mode): 0xb6b62800
2025-12-25T15:15:48.798 [DEBUG] [Thread-13832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:15:48.813 [DEBUG] [Thread-13832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:15:48.813 [INFO] [Thread-13832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:15:48.820 [DEBUG] [Thread-13832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:15:48.821 [DEBUG] [Thread-13832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] client lang: <none>
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] server lang: <none>
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] kex follows: False
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] Compression: none
2025-12-25T15:15:48.822 [DEBUG] [Thread-13832] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:15:48.879 [DEBUG] [Thread-13832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:15:48.880 [DEBUG] [Thread-13832] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:15:48.881 [DEBUG] [Thread-13832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:15:48.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:15:48.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:15:48.936 [DEBUG] [Thread-13832] [transport.py] [_log()] userauth is OK
2025-12-25T15:15:48.936 [DEBUG] [Thread-13832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:15:48.936 [DEBUG] [Thread-13832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:15:48.936 [DEBUG] [Thread-13832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:15:48.937 [DEBUG] [Thread-13832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:15:48.956 [INFO] [Thread-13832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:15:48.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-25T15:15:48.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:15:49.815 [DEBUG] [Thread-13832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:15:49.815 [DEBUG] [Thread-13832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:15:49.863 [DEBUG] [Thread-13832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:15:49.863 [DEBUG] [Thread-13832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:15:49.873 [DEBUG] [Thread-13832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:15:49.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:15:49.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-25T15:15:49.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-25T15:15:49.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:15:49.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:15:49.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:15:49.909 [DEBUG] [Thread-13832] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:16:02.110 [DEBUG] [Thread-13834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:10.193 [DEBUG] [Thread-13835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:17.165 [DEBUG] [Thread-13836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:16:19.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:16:19.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:16:20.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 16, 4), 31.5, 12.31, 0.0, 27.37, 26.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:16:20.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:16:04
2025-12-25T15:16:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:16:20.902 [DEBUG] [Thread-13837] [transport.py] [_log()] starting thread (client mode): 0xb957afb0
2025-12-25T15:16:20.902 [DEBUG] [Thread-13837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:16:20.922 [DEBUG] [Thread-13837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:16:20.922 [INFO] [Thread-13837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] client lang: <none>
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] server lang: <none>
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] kex follows: False
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] Compression: none
2025-12-25T15:16:20.926 [DEBUG] [Thread-13837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:16:20.943 [DEBUG] [Thread-13837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:16:20.944 [DEBUG] [Thread-13837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:16:20.944 [DEBUG] [Thread-13837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:16:20.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:16:20.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:16:20.946 [DEBUG] [Thread-13837] [transport.py] [_log()] userauth is OK
2025-12-25T15:16:20.946 [DEBUG] [Thread-13837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:16:20.946 [DEBUG] [Thread-13837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:16:20.946 [DEBUG] [Thread-13837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:16:20.947 [DEBUG] [Thread-13837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:16:20.970 [INFO] [Thread-13837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:16:20.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:16:21.610 [DEBUG] [Thread-13837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:16:21.610 [DEBUG] [Thread-13837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:16:21.611 [DEBUG] [Thread-13837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:16:21.651 [DEBUG] [Thread-13837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:16:21.651 [DEBUG] [Thread-13837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:16:21.654 [DEBUG] [Thread-13837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:16:21.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:16:21.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:16:21.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:16:21.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:16:21.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:16:21.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:16:21.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:16:21.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:16:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:16:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.552492 -999.00  +25.50  15.03     18   -0.10 1 1 1 1 1   888    0 25.43 15.37 ----- 13.5 15.0 295.7 24.0 30.6 -27.1 30.2 -27.0 30.8 -24.1 31.5 -25.4
2025-12-25T15:16:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:16:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:16:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.552492
2025-12-25T15:16:21.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:16:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:16:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:16:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:16:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:16:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:16:04', tmtdew=31.5, humidity=12.31, cloud=0.0, wind=27.37, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:15:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:16:21.679 [DEBUG] [Thread-13837] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:16:21.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-25T15:16:21.773 [DEBUG] [Thread-13840] [transport.py] [_log()] starting thread (client mode): 0xb6b21b70
2025-12-25T15:16:21.773 [DEBUG] [Thread-13840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:16:21.787 [DEBUG] [Thread-13840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:16:21.787 [INFO] [Thread-13840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:16:21.794 [DEBUG] [Thread-13840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] client lang: <none>
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] server lang: <none>
2025-12-25T15:16:21.795 [DEBUG] [Thread-13840] [transport.py] [_log()] kex follows: False
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] Compression: none
2025-12-25T15:16:21.796 [DEBUG] [Thread-13840] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:16:21.853 [DEBUG] [Thread-13840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:16:21.854 [DEBUG] [Thread-13840] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:16:21.854 [DEBUG] [Thread-13840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:16:21.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:16:21.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:16:21.910 [DEBUG] [Thread-13840] [transport.py] [_log()] userauth is OK
2025-12-25T15:16:21.910 [DEBUG] [Thread-13840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:16:21.911 [DEBUG] [Thread-13840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:16:21.911 [DEBUG] [Thread-13840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:16:21.911 [DEBUG] [Thread-13840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:16:21.929 [INFO] [Thread-13840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:16:21.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:16:21.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:16:22.795 [DEBUG] [Thread-13840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:16:22.796 [DEBUG] [Thread-13840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:16:22.843 [DEBUG] [Thread-13840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:16:22.843 [DEBUG] [Thread-13840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:16:22.852 [DEBUG] [Thread-13840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:16:22.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:16:22.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:16:22.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-25T15:16:22.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:16:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:16:22.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:16:22.889 [DEBUG] [Thread-13840] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:16:32.200 [DEBUG] [Thread-13842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:43.602 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:43.603 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:47.249 [DEBUG] [Thread-13843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:16:52.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:16:52.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:16:52.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:16:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 16, 36), 30.68, 13.12, 0.0, 20.15, 26.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:16:53.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:16:36
2025-12-25T15:16:53.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:16:53.926 [DEBUG] [Thread-13844] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-25T15:16:53.926 [DEBUG] [Thread-13844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:16:53.945 [DEBUG] [Thread-13844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:16:53.945 [INFO] [Thread-13844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] client lang: <none>
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] server lang: <none>
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] kex follows: False
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] Compression: none
2025-12-25T15:16:53.949 [DEBUG] [Thread-13844] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:16:53.964 [DEBUG] [Thread-13844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:16:53.964 [DEBUG] [Thread-13844] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:16:53.964 [DEBUG] [Thread-13844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:16:53.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:16:53.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:16:53.965 [DEBUG] [Thread-13844] [transport.py] [_log()] userauth is OK
2025-12-25T15:16:53.965 [DEBUG] [Thread-13844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:16:53.965 [DEBUG] [Thread-13844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:16:53.965 [DEBUG] [Thread-13844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:16:53.965 [DEBUG] [Thread-13844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:16:53.980 [INFO] [Thread-13844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:16:53.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:16:54.649 [DEBUG] [Thread-13844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:16:54.649 [DEBUG] [Thread-13844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:16:54.649 [DEBUG] [Thread-13844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:16:54.690 [DEBUG] [Thread-13844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:16:54.691 [DEBUG] [Thread-13844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:16:54.693 [DEBUG] [Thread-13844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:16:54.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:16:54.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:16:54.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:16:54.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:16:54.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:16:54.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:16:54.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:16:54.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.552839 -999.00  +25.50  15.89     18   -0.10 1 1 1 1 1   888    0 25.88 15.87 ----- 14.7 15.9 310.6 19.3 30.8 -26.9 30.4 -26.9 31.1 -25.0 31.7 -25.2
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.552839
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:16:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:16:36', tmtdew=30.68, humidity=13.12, cloud=0.0, wind=20.15, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:16:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:16:54.711 [DEBUG] [Thread-13844] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:16:54.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-25T15:16:54.795 [DEBUG] [Thread-13847] [transport.py] [_log()] starting thread (client mode): 0xb957a7a0
2025-12-25T15:16:54.795 [DEBUG] [Thread-13847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:16:54.810 [DEBUG] [Thread-13847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:16:54.810 [INFO] [Thread-13847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:54.817 [DEBUG] [Thread-13847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] client lang: <none>
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] server lang: <none>
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] kex follows: False
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] Compression: none
2025-12-25T15:16:54.818 [DEBUG] [Thread-13847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:16:54.875 [DEBUG] [Thread-13847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:16:54.875 [DEBUG] [Thread-13847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:16:54.875 [DEBUG] [Thread-13847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:16:54.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:16:54.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:16:54.932 [DEBUG] [Thread-13847] [transport.py] [_log()] userauth is OK
2025-12-25T15:16:54.932 [DEBUG] [Thread-13847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:16:54.932 [DEBUG] [Thread-13847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:16:54.932 [DEBUG] [Thread-13847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:16:54.932 [DEBUG] [Thread-13847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:16:54.950 [INFO] [Thread-13847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:16:54.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-25T15:16:54.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:16:55.771 [DEBUG] [Thread-13847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:16:55.771 [DEBUG] [Thread-13847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:16:55.818 [DEBUG] [Thread-13847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:16:55.818 [DEBUG] [Thread-13847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:16:55.827 [DEBUG] [Thread-13847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:16:55.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:16:55.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-25T15:16: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-25T15:16:55.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:16:55.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:16:55.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:16:55.858 [DEBUG] [Thread-13847] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:17:02.285 [DEBUG] [Thread-13849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:10.243 [DEBUG] [Thread-13850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:17.344 [DEBUG] [Thread-13851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:17:25.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:17:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:17:26.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 17, 8), 30.93, 12.91, 0.0, 25.32, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:17:26.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:17:08
2025-12-25T15:17:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:17:26.859 [DEBUG] [Thread-13852] [transport.py] [_log()] starting thread (client mode): 0xb6b63af0
2025-12-25T15:17:26.860 [DEBUG] [Thread-13852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:17:26.878 [DEBUG] [Thread-13852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:17:26.878 [INFO] [Thread-13852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] client lang: <none>
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] server lang: <none>
2025-12-25T15:17:26.882 [DEBUG] [Thread-13852] [transport.py] [_log()] kex follows: False
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] Compression: none
2025-12-25T15:17:26.883 [DEBUG] [Thread-13852] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:17:26.900 [DEBUG] [Thread-13852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:17:26.901 [DEBUG] [Thread-13852] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:17:26.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:17:26.902 [DEBUG] [Thread-13852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:17:26.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:17:26.904 [DEBUG] [Thread-13852] [transport.py] [_log()] userauth is OK
2025-12-25T15:17:26.904 [DEBUG] [Thread-13852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:17:26.904 [DEBUG] [Thread-13852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:17:26.904 [DEBUG] [Thread-13852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:17:26.904 [DEBUG] [Thread-13852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:17:26.923 [INFO] [Thread-13852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:17:26.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:17:27.536 [DEBUG] [Thread-13852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:17:27.536 [DEBUG] [Thread-13852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:17:27.537 [DEBUG] [Thread-13852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:17:27.576 [DEBUG] [Thread-13852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:17:27.576 [DEBUG] [Thread-13852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:17:27.579 [DEBUG] [Thread-13852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:17:27.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:17:27.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:17:27.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:17:27.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:17:27.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:17:27.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:17:27.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.553186 -999.00  +25.60  23.18     18   -0.20 1 1 1 1 1   888    0 25.82 17.58 ----- 22.9 23.2 296.2 29.4 30.8 -28.7 30.4 -27.3 31.2 -26.7 31.6 -25.8
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.553186
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:17:27.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:17:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:17:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:17:08', tmtdew=30.93, humidity=12.91, cloud=0.0, wind=25.32, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:16:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:17:27.598 [DEBUG] [Thread-13852] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:17:27.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-25T15:17:27.682 [DEBUG] [Thread-13855] [transport.py] [_log()] starting thread (client mode): 0xb6b60bb0
2025-12-25T15:17:27.682 [DEBUG] [Thread-13855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:17:27.699 [DEBUG] [Thread-13855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:17:27.699 [INFO] [Thread-13855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:17:27.706 [DEBUG] [Thread-13855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] client lang: <none>
2025-12-25T15:17:27.707 [DEBUG] [Thread-13855] [transport.py] [_log()] server lang: <none>
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] kex follows: False
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] Compression: none
2025-12-25T15:17:27.708 [DEBUG] [Thread-13855] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:17:27.768 [DEBUG] [Thread-13855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:17:27.769 [DEBUG] [Thread-13855] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:17:27.769 [DEBUG] [Thread-13855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:17:27.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:17:27.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:17:27.829 [DEBUG] [Thread-13855] [transport.py] [_log()] userauth is OK
2025-12-25T15:17:27.830 [DEBUG] [Thread-13855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:17:27.830 [DEBUG] [Thread-13855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:17:27.830 [DEBUG] [Thread-13855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:17:27.830 [DEBUG] [Thread-13855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:17:27.849 [INFO] [Thread-13855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:17:27.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-25T15:17:27.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:17:28.687 [DEBUG] [Thread-13855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:17:28.687 [DEBUG] [Thread-13855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:17:28.735 [DEBUG] [Thread-13855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:17:28.735 [DEBUG] [Thread-13855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:17:28.744 [DEBUG] [Thread-13855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:17:28.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:17:28.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-25T15:17:28.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-25T15:17:28.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:17:28.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:17:28.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:17:28.782 [DEBUG] [Thread-13855] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:17:32.380 [DEBUG] [Thread-13857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:43.744 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:43.745 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:47.419 [DEBUG] [Thread-13858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:17:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:17:58.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:17:58.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-25T15:17:59.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 17, 40), 31.43, 12.41, 0.0, 22.94, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:17:59.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:17:40
2025-12-25T15:17:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:17:59.787 [DEBUG] [Thread-13859] [transport.py] [_log()] starting thread (client mode): 0xb6b61e40
2025-12-25T15:17:59.788 [DEBUG] [Thread-13859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:17:59.808 [DEBUG] [Thread-13859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:17:59.808 [INFO] [Thread-13859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] client lang: <none>
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] server lang: <none>
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] kex follows: False
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:17:59.811 [DEBUG] [Thread-13859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:17:59.812 [DEBUG] [Thread-13859] [transport.py] [_log()] Compression: none
2025-12-25T15:17:59.812 [DEBUG] [Thread-13859] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:17:59.829 [DEBUG] [Thread-13859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:17:59.830 [DEBUG] [Thread-13859] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:17:59.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:17:59.831 [DEBUG] [Thread-13859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:17:59.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:17:59.833 [DEBUG] [Thread-13859] [transport.py] [_log()] userauth is OK
2025-12-25T15:17:59.833 [DEBUG] [Thread-13859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:17:59.833 [DEBUG] [Thread-13859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:17:59.833 [DEBUG] [Thread-13859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:17:59.833 [DEBUG] [Thread-13859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:17:59.861 [INFO] [Thread-13859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:17:59.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:18:00.503 [DEBUG] [Thread-13859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:18:00.503 [DEBUG] [Thread-13859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:18:00.503 [DEBUG] [Thread-13859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:18:00.544 [DEBUG] [Thread-13859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:18:00.545 [DEBUG] [Thread-13859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:18:00.548 [DEBUG] [Thread-13859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:18:00.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:18:00.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:18:00.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:18:00.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:18:00.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:18:00.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:18:00.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:18:00.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:18:00.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:18:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.553534 -999.00  +25.90  21.31     17   -0.40 1 1 1 1 1   888    0 26.19 22.43 ----- 28.9 21.3 303.6 31.9 30.8 -28.1 30.5 -27.8 31.1 -26.0 31.7 -25.5
2025-12-25T15:18:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:18:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:18:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.553534
2025-12-25T15:18:00.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:18:00.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:17:40', tmtdew=31.43, humidity=12.41, cloud=0.0, wind=22.94, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:17:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:18:00.576 [DEBUG] [Thread-13859] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:18:00.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-25T15:18:00.670 [DEBUG] [Thread-13862] [transport.py] [_log()] starting thread (client mode): 0xb957a890
2025-12-25T15:18:00.671 [DEBUG] [Thread-13862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:18:00.689 [DEBUG] [Thread-13862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:18:00.689 [INFO] [Thread-13862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:18:00.697 [DEBUG] [Thread-13862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:18:00.697 [DEBUG] [Thread-13862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:18:00.697 [DEBUG] [Thread-13862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:18:00.697 [DEBUG] [Thread-13862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] client lang: <none>
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] server lang: <none>
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] kex follows: False
2025-12-25T15:18:00.698 [DEBUG] [Thread-13862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:18:00.699 [DEBUG] [Thread-13862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:18:00.699 [DEBUG] [Thread-13862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:18:00.699 [DEBUG] [Thread-13862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:18:00.699 [DEBUG] [Thread-13862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:18:00.699 [DEBUG] [Thread-13862] [transport.py] [_log()] Compression: none
2025-12-25T15:18:00.699 [DEBUG] [Thread-13862] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:18:00.758 [DEBUG] [Thread-13862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:18:00.758 [DEBUG] [Thread-13862] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:18:00.759 [DEBUG] [Thread-13862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:18:00.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:18:00.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:18:00.814 [DEBUG] [Thread-13862] [transport.py] [_log()] userauth is OK
2025-12-25T15:18:00.814 [DEBUG] [Thread-13862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:18:00.814 [DEBUG] [Thread-13862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:18:00.814 [DEBUG] [Thread-13862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:18:00.814 [DEBUG] [Thread-13862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:18:00.832 [INFO] [Thread-13862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:18:00.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-25T15:18:00.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:18:01.684 [DEBUG] [Thread-13862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:18:01.685 [DEBUG] [Thread-13862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:18:01.733 [DEBUG] [Thread-13862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:18:01.733 [DEBUG] [Thread-13862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:18:01.743 [DEBUG] [Thread-13862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:18:01.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:18:01.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-25T15:18: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-25T15:18:01.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:18:01.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:18:01.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:18:01.782 [DEBUG] [Thread-13862] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:18:02.456 [DEBUG] [Thread-13864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:18:10.294 [DEBUG] [Thread-13865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:18:17.507 [DEBUG] [Thread-13866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:18:31.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:18:31.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:18:31.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-25T15:18:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 18, 12), 31.22, 12.54, 0.0, 28.18, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:18:32.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:18:12
2025-12-25T15:18:32.544 [DEBUG] [Thread-13867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:18:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:18:32.783 [DEBUG] [Thread-13868] [transport.py] [_log()] starting thread (client mode): 0xb957ac50
2025-12-25T15:18:32.783 [DEBUG] [Thread-13868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:18:32.803 [DEBUG] [Thread-13868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:18:32.803 [INFO] [Thread-13868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:18:32.806 [DEBUG] [Thread-13868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:18:32.806 [DEBUG] [Thread-13868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:18:32.806 [DEBUG] [Thread-13868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:18:32.806 [DEBUG] [Thread-13868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:18:32.806 [DEBUG] [Thread-13868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:18:32.806 [DEBUG] [Thread-13868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] client lang: <none>
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] server lang: <none>
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] kex follows: False
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] Compression: none
2025-12-25T15:18:32.807 [DEBUG] [Thread-13868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:18:32.824 [DEBUG] [Thread-13868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:18:32.825 [DEBUG] [Thread-13868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:18:32.825 [DEBUG] [Thread-13868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:18:32.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:18:32.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:18:32.827 [DEBUG] [Thread-13868] [transport.py] [_log()] userauth is OK
2025-12-25T15:18:32.828 [DEBUG] [Thread-13868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:18:32.828 [DEBUG] [Thread-13868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:18:32.828 [DEBUG] [Thread-13868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:18:32.828 [DEBUG] [Thread-13868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:18:32.864 [INFO] [Thread-13868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:18:32.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:18:33.493 [DEBUG] [Thread-13868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:18:33.494 [DEBUG] [Thread-13868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:18:33.494 [DEBUG] [Thread-13868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:18:33.534 [DEBUG] [Thread-13868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:18:33.535 [DEBUG] [Thread-13868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:18:33.538 [DEBUG] [Thread-13868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:18:33.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:18:33.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:18:33.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:18:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:18:33.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:18:33.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:18:33.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:18:33.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:18:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:18:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.553881 -999.00  +26.40  20.36     17   -0.20 1 1 1 1 1   888    0 26.73 28.56 ----- 28.9 20.4 307.2 29.8 30.9 -28.3 30.5 -26.7 31.2 -25.9 31.8 -26.1
2025-12-25T15:18:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:18:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:18:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.553881
2025-12-25T15:18:33.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:18:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:18:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:18:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:18:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:18:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:18:12', tmtdew=31.22, humidity=12.54, cloud=0.0, wind=28.18, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:17:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:18:33.564 [DEBUG] [Thread-13868] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:18:33.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-25T15:18:33.656 [DEBUG] [Thread-13871] [transport.py] [_log()] starting thread (client mode): 0xb957a260
2025-12-25T15:18:33.656 [DEBUG] [Thread-13871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:18:33.675 [DEBUG] [Thread-13871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:18:33.676 [INFO] [Thread-13871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:18:33.683 [DEBUG] [Thread-13871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:18:33.683 [DEBUG] [Thread-13871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:18:33.683 [DEBUG] [Thread-13871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:18:33.683 [DEBUG] [Thread-13871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] client lang: <none>
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] server lang: <none>
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] kex follows: False
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] Compression: none
2025-12-25T15:18:33.684 [DEBUG] [Thread-13871] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:18:33.748 [DEBUG] [Thread-13871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:18:33.748 [DEBUG] [Thread-13871] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:18:33.749 [DEBUG] [Thread-13871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:18:33.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:18:33.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:18:33.804 [DEBUG] [Thread-13871] [transport.py] [_log()] userauth is OK
2025-12-25T15:18:33.805 [DEBUG] [Thread-13871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:18:33.805 [DEBUG] [Thread-13871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:18:33.805 [DEBUG] [Thread-13871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:18:33.805 [DEBUG] [Thread-13871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:18:33.824 [INFO] [Thread-13871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:18:33.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-25T15:18:33.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:18:34.663 [DEBUG] [Thread-13871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:18:34.663 [DEBUG] [Thread-13871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:18:34.711 [DEBUG] [Thread-13871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:18:34.711 [DEBUG] [Thread-13871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:18:34.720 [DEBUG] [Thread-13871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:18:34.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:18:34.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-25T15:18:34.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-25T15:18:34.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:18:34.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:18:34.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:18:34.757 [DEBUG] [Thread-13871] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:18:43.884 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:18:43.885 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:18:47.576 [DEBUG] [Thread-13873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:02.627 [DEBUG] [Thread-13874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:19:04.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:19:04.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-25T15:19:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 18, 44), 31.07, 12.49, 0.0, 28.58, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:19:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:18:44
2025-12-25T15:19:05.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:19:05.759 [DEBUG] [Thread-13875] [transport.py] [_log()] starting thread (client mode): 0xb6b60e80
2025-12-25T15:19:05.759 [DEBUG] [Thread-13875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:19:05.779 [DEBUG] [Thread-13875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:19:05.779 [INFO] [Thread-13875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] client lang: <none>
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] server lang: <none>
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] kex follows: False
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:19:05.783 [DEBUG] [Thread-13875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:19:05.784 [DEBUG] [Thread-13875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:19:05.784 [DEBUG] [Thread-13875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:19:05.784 [DEBUG] [Thread-13875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:19:05.784 [DEBUG] [Thread-13875] [transport.py] [_log()] Compression: none
2025-12-25T15:19:05.784 [DEBUG] [Thread-13875] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:19:05.802 [DEBUG] [Thread-13875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:19:05.802 [DEBUG] [Thread-13875] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:19:05.803 [DEBUG] [Thread-13875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:19:05.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:19:05.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:19:05.845 [DEBUG] [Thread-13875] [transport.py] [_log()] userauth is OK
2025-12-25T15:19:05.845 [DEBUG] [Thread-13875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:19:05.846 [DEBUG] [Thread-13875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:19:05.846 [DEBUG] [Thread-13875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:19:05.846 [DEBUG] [Thread-13875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:19:05.878 [INFO] [Thread-13875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:19:05.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:19:06.501 [DEBUG] [Thread-13875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:19:06.502 [DEBUG] [Thread-13875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:19:06.502 [DEBUG] [Thread-13875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:19:06.542 [DEBUG] [Thread-13875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:19:06.542 [DEBUG] [Thread-13875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:19:06.546 [DEBUG] [Thread-13875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:19:06.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:19:06.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:19:06.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:19:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:19:06.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:19:06.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:19:06.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:19:06.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:19:06.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:19:06.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.554575 -999.00  +26.00  36.61     17   -0.20 1 1 2 1 1   888    0 26.36 35.42 ----- 34.3 36.6 299.0 41.7 30.8 -29.2 30.5 -27.1 31.1 -25.4 31.7 -26.2
2025-12-25T15:19:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:19:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:19:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.554575
2025-12-25T15:19:06.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:19:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:19:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:19:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:19:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:19:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:18:44', tmtdew=31.07, humidity=12.49, cloud=0.0, wind=28.58, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:18:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:19:06.572 [DEBUG] [Thread-13875] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:19:06.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-25T15:19:06.666 [DEBUG] [Thread-13878] [transport.py] [_log()] starting thread (client mode): 0xb6b61930
2025-12-25T15:19:06.666 [DEBUG] [Thread-13878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:19:06.680 [DEBUG] [Thread-13878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:19:06.681 [INFO] [Thread-13878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:19:06.688 [DEBUG] [Thread-13878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:19:06.688 [DEBUG] [Thread-13878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] client lang: <none>
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] server lang: <none>
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] kex follows: False
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] Compression: none
2025-12-25T15:19:06.689 [DEBUG] [Thread-13878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:19:06.749 [DEBUG] [Thread-13878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:19:06.749 [DEBUG] [Thread-13878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:19:06.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:19:06.750 [DEBUG] [Thread-13878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:19:06.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:19:06.808 [DEBUG] [Thread-13878] [transport.py] [_log()] userauth is OK
2025-12-25T15:19:06.808 [DEBUG] [Thread-13878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:19:06.808 [DEBUG] [Thread-13878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:19:06.808 [DEBUG] [Thread-13878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:19:06.808 [DEBUG] [Thread-13878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:19:06.828 [INFO] [Thread-13878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:19:06.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:19:06.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:19:07.637 [DEBUG] [Thread-13878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:19:07.637 [DEBUG] [Thread-13878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:19:07.685 [DEBUG] [Thread-13878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:19:07.685 [DEBUG] [Thread-13878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:19:07.694 [DEBUG] [Thread-13878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:19:07.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:19:07.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:19:07.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-25T15:19:07.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:19:07.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:19:07.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:19:07.730 [DEBUG] [Thread-13878] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:19:10.331 [DEBUG] [Thread-13880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:17.661 [DEBUG] [Thread-13881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:32.700 [DEBUG] [Thread-13882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:37.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:19:37.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:19:37.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-25T15:19:38.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 19, 16), 31.1, 12.51, 0.0, 32.64, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:19:38.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:19:16
2025-12-25T15:19:38.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:19:38.723 [DEBUG] [Thread-13883] [transport.py] [_log()] starting thread (client mode): 0xb95453f0
2025-12-25T15:19:38.723 [DEBUG] [Thread-13883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:19:38.744 [DEBUG] [Thread-13883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:19:38.744 [INFO] [Thread-13883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:19:38.747 [DEBUG] [Thread-13883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:19:38.747 [DEBUG] [Thread-13883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] client lang: <none>
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] server lang: <none>
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] kex follows: False
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] Compression: none
2025-12-25T15:19:38.748 [DEBUG] [Thread-13883] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:19:38.766 [DEBUG] [Thread-13883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:19:38.766 [DEBUG] [Thread-13883] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:19:38.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:19:38.767 [DEBUG] [Thread-13883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:19:38.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:19:38.770 [DEBUG] [Thread-13883] [transport.py] [_log()] userauth is OK
2025-12-25T15:19:38.770 [DEBUG] [Thread-13883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:19:38.770 [DEBUG] [Thread-13883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:19:38.770 [DEBUG] [Thread-13883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:19:38.770 [DEBUG] [Thread-13883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:19:38.794 [INFO] [Thread-13883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:19:38.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:19:39.457 [DEBUG] [Thread-13883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:19:39.457 [DEBUG] [Thread-13883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:19:39.457 [DEBUG] [Thread-13883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:19:39.498 [DEBUG] [Thread-13883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:19:39.498 [DEBUG] [Thread-13883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:19:39.500 [DEBUG] [Thread-13883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:19:39.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:19:39.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:19:39.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:19:39.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:19:39.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:19:39.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:19:39.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:19:39.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:19:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:19:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.554922 -999.00  +25.70  37.40     18   -0.20 1 1 2 1 1   888    0 27.08 36.65 ----- 29.4 37.4 291.0 42.3 30.6 -27.7 30.5 -28.2 31.0 -26.0 31.6 -25.5
2025-12-25T15:19:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:19:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:19:39.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.554922
2025-12-25T15:19:39.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:19:39.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:19:39.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:19:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:19:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:19:39.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:19:16', tmtdew=31.1, humidity=12.51, cloud=0.0, wind=32.64, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:19:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:19:39.527 [DEBUG] [Thread-13883] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:19:39.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:19:39.618 [DEBUG] [Thread-13886] [transport.py] [_log()] starting thread (client mode): 0xb6b2b220
2025-12-25T15:19:39.619 [DEBUG] [Thread-13886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:19:39.633 [DEBUG] [Thread-13886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:19:39.633 [INFO] [Thread-13886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:19:39.640 [DEBUG] [Thread-13886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:19:39.641 [DEBUG] [Thread-13886] [transport.py] [_log()] client lang: <none>
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] server lang: <none>
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] kex follows: False
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:19:39.642 [DEBUG] [Thread-13886] [transport.py] [_log()] Compression: none
2025-12-25T15:19:39.643 [DEBUG] [Thread-13886] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:19:39.697 [DEBUG] [Thread-13886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:19:39.698 [DEBUG] [Thread-13886] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:19:39.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:19:39.699 [DEBUG] [Thread-13886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:19:39.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:19:39.753 [DEBUG] [Thread-13886] [transport.py] [_log()] userauth is OK
2025-12-25T15:19:39.753 [DEBUG] [Thread-13886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:19:39.754 [DEBUG] [Thread-13886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:19:39.754 [DEBUG] [Thread-13886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:19:39.754 [DEBUG] [Thread-13886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:19:39.775 [INFO] [Thread-13886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:19:39.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-25T15:19:39.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:19:40.607 [DEBUG] [Thread-13886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:19:40.607 [DEBUG] [Thread-13886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:19:40.654 [DEBUG] [Thread-13886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:19:40.655 [DEBUG] [Thread-13886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:19:40.663 [DEBUG] [Thread-13886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:19:40.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:19:40.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-25T15:19:40.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:19:40.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:19:40.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:19:40.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:19:40.697 [DEBUG] [Thread-13886] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:19:44.024 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:44.025 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:19:47.730 [DEBUG] [Thread-13888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:02.790 [DEBUG] [Thread-13889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:10.375 [DEBUG] [Thread-13890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:10.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:20:10.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:20:10.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-25T15:20:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 19, 48), 31.96, 12.01, 0.0, 29.92, 27.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:20:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:19:48
2025-12-25T15:20:11.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:20:11.725 [DEBUG] [Thread-13891] [transport.py] [_log()] starting thread (client mode): 0xb6b00af0
2025-12-25T15:20:11.726 [DEBUG] [Thread-13891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:20:11.746 [DEBUG] [Thread-13891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:20:11.746 [INFO] [Thread-13891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:20:11.749 [DEBUG] [Thread-13891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:20:11.749 [DEBUG] [Thread-13891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] client lang: <none>
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] server lang: <none>
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] kex follows: False
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] Compression: none
2025-12-25T15:20:11.750 [DEBUG] [Thread-13891] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:20:11.767 [DEBUG] [Thread-13891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:20:11.767 [DEBUG] [Thread-13891] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:20:11.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:20:11.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:20:11.768 [DEBUG] [Thread-13891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:20:11.768 [DEBUG] [Thread-13891] [transport.py] [_log()] userauth is OK
2025-12-25T15:20:11.768 [DEBUG] [Thread-13891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:20:11.768 [DEBUG] [Thread-13891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:20:11.768 [DEBUG] [Thread-13891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:20:11.768 [DEBUG] [Thread-13891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:20:11.781 [INFO] [Thread-13891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:20:11.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:20:12.767 [DEBUG] [Thread-13891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:20:12.767 [DEBUG] [Thread-13891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:20:12.767 [DEBUG] [Thread-13891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:20:12.809 [DEBUG] [Thread-13891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:20:12.809 [DEBUG] [Thread-13891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:20:12.811 [DEBUG] [Thread-13891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:20:12.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:20:12.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:20:12.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:20:12.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:20:12.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:20:12.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:20:12.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.555270 -999.00  +25.70  33.00     17   -0.40 1 1 2 1 1   888    0 26.90 35.31 ----- 34.6 33.0 288.6 37.5 30.7 -27.7 30.4 -28.0 31.1 -25.3 31.6 -25.2
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.555270
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:20:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:20:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:20:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:20:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:19:48', tmtdew=31.96, humidity=12.01, cloud=0.0, wind=29.92, temperature=27.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:19:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:20:12.831 [DEBUG] [Thread-13891] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:20:12.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-25T15:20:12.914 [DEBUG] [Thread-13894] [transport.py] [_log()] starting thread (client mode): 0xb95929e0
2025-12-25T15:20:12.914 [DEBUG] [Thread-13894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:20:12.929 [DEBUG] [Thread-13894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:20:12.930 [INFO] [Thread-13894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:20:12.937 [DEBUG] [Thread-13894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:20:12.937 [DEBUG] [Thread-13894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:20:12.937 [DEBUG] [Thread-13894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:20:12.937 [DEBUG] [Thread-13894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:12.937 [DEBUG] [Thread-13894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] client lang: <none>
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] server lang: <none>
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] kex follows: False
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] Compression: none
2025-12-25T15:20:12.938 [DEBUG] [Thread-13894] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:20:12.997 [DEBUG] [Thread-13894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:20:12.997 [DEBUG] [Thread-13894] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:20:12.998 [DEBUG] [Thread-13894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:20:12.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:20:12.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:20:13.057 [DEBUG] [Thread-13894] [transport.py] [_log()] userauth is OK
2025-12-25T15:20:13.057 [DEBUG] [Thread-13894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:20:13.057 [DEBUG] [Thread-13894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:20:13.057 [DEBUG] [Thread-13894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:20:13.057 [DEBUG] [Thread-13894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:20:13.076 [INFO] [Thread-13894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:20:13.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-25T15:20:13.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:20:13.989 [DEBUG] [Thread-13894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:20:13.989 [DEBUG] [Thread-13894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:20:14.037 [DEBUG] [Thread-13894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:20:14.037 [DEBUG] [Thread-13894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:20:14.046 [DEBUG] [Thread-13894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:20:14.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:20:14.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:20:14.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-25T15:20:14.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:20:14.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:20:14.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:20:14.082 [DEBUG] [Thread-13894] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:20:17.822 [DEBUG] [Thread-13896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:32.881 [DEBUG] [Thread-13897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:44.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:20:44.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:20:44.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-25T15:20:44.164 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:44.165 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:20:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 20, 20), 32.04, 11.94, 0.0, 31.88, 27.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:20:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:20:20
2025-12-25T15:20:44.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:20:45.067 [DEBUG] [Thread-13898] [transport.py] [_log()] starting thread (client mode): 0xb95907c0
2025-12-25T15:20:45.068 [DEBUG] [Thread-13898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:20:45.087 [DEBUG] [Thread-13898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:20:45.087 [INFO] [Thread-13898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:20:45.089 [DEBUG] [Thread-13898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:20:45.089 [DEBUG] [Thread-13898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:20:45.089 [DEBUG] [Thread-13898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:20:45.089 [DEBUG] [Thread-13898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:45.089 [DEBUG] [Thread-13898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:45.089 [DEBUG] [Thread-13898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] client lang: <none>
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] server lang: <none>
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] kex follows: False
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] Compression: none
2025-12-25T15:20:45.090 [DEBUG] [Thread-13898] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:20:45.112 [DEBUG] [Thread-13898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:20:45.112 [DEBUG] [Thread-13898] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:20:45.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:20:45.113 [DEBUG] [Thread-13898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:20:45.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:20:45.157 [DEBUG] [Thread-13898] [transport.py] [_log()] userauth is OK
2025-12-25T15:20:45.157 [DEBUG] [Thread-13898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:20:45.157 [DEBUG] [Thread-13898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:20:45.157 [DEBUG] [Thread-13898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:20:45.157 [DEBUG] [Thread-13898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:20:45.178 [INFO] [Thread-13898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:20:45.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:20:45.825 [DEBUG] [Thread-13898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:20:45.825 [DEBUG] [Thread-13898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:20:45.825 [DEBUG] [Thread-13898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:20:45.866 [DEBUG] [Thread-13898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:20:45.866 [DEBUG] [Thread-13898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:20:45.869 [DEBUG] [Thread-13898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:20:45.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:20:45.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:20:45.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:20:45.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:20:45.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:20:45.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:20:45.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:20:45.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:20:45.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:20:45.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.555617 -999.00  +26.20  39.63     17   -0.30 1 1 2 1 1   888    0 26.93 35.56 ----- 36.3 39.6 279.7 46.1 30.5 -28.1 30.5 -28.6 30.9 -27.6 31.5 -25.5
2025-12-25T15:20:45.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:20:45.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:20:45.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.555617
2025-12-25T15:20:45.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:20:45.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:20:45.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:20:45.890 [DEBUG] [Thread-13898] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:20:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:20:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:20:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:20:20', tmtdew=32.04, humidity=11.94, cloud=0.0, wind=31.88, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:20:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:20:45.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-25T15:20:45.984 [DEBUG] [Thread-13901] [transport.py] [_log()] starting thread (client mode): 0xb95d7970
2025-12-25T15:20:45.984 [DEBUG] [Thread-13901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:20:45.999 [DEBUG] [Thread-13901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:20:45.999 [INFO] [Thread-13901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:20:46.006 [DEBUG] [Thread-13901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:20:46.006 [DEBUG] [Thread-13901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:20:46.006 [DEBUG] [Thread-13901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:20:46.006 [DEBUG] [Thread-13901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] client lang: <none>
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] server lang: <none>
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] kex follows: False
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] Compression: none
2025-12-25T15:20:46.007 [DEBUG] [Thread-13901] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:20:46.061 [DEBUG] [Thread-13901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:20:46.061 [DEBUG] [Thread-13901] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:20:46.061 [DEBUG] [Thread-13901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:20:46.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:20:46.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:20:46.119 [DEBUG] [Thread-13901] [transport.py] [_log()] userauth is OK
2025-12-25T15:20:46.119 [DEBUG] [Thread-13901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:20:46.119 [DEBUG] [Thread-13901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:20:46.119 [DEBUG] [Thread-13901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:20:46.119 [DEBUG] [Thread-13901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:20:46.133 [INFO] [Thread-13901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:20:46.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-25T15:20:46.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:20:46.991 [DEBUG] [Thread-13901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:20:46.991 [DEBUG] [Thread-13901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:20:47.039 [DEBUG] [Thread-13901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:20:47.039 [DEBUG] [Thread-13901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:20:47.048 [DEBUG] [Thread-13901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:20:47.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:20:47.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:20:47.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-25T15:20:47.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:20:47.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:20:47.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:20:47.079 [DEBUG] [Thread-13901] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:20:47.914 [DEBUG] [Thread-13903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:02.957 [DEBUG] [Thread-13904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:10.442 [DEBUG] [Thread-13905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:17.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:21:17.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:21:17.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:21:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 20, 52), 32.01, 11.97, 0.0, 43.37, 26.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:21:17.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:20:52
2025-12-25T15:21:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:21:17.992 [DEBUG] [Thread-13906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:18.063 [DEBUG] [Thread-13907] [transport.py] [_log()] starting thread (client mode): 0xb6b00a90
2025-12-25T15:21:18.063 [DEBUG] [Thread-13907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:21:18.083 [DEBUG] [Thread-13907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:21:18.083 [INFO] [Thread-13907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:21:18.086 [DEBUG] [Thread-13907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] client lang: <none>
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] server lang: <none>
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] kex follows: False
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:21:18.087 [DEBUG] [Thread-13907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:21:18.088 [DEBUG] [Thread-13907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:21:18.088 [DEBUG] [Thread-13907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:21:18.088 [DEBUG] [Thread-13907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:21:18.088 [DEBUG] [Thread-13907] [transport.py] [_log()] Compression: none
2025-12-25T15:21:18.088 [DEBUG] [Thread-13907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:21:18.107 [DEBUG] [Thread-13907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:21:18.108 [DEBUG] [Thread-13907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:21:18.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:21:18.109 [DEBUG] [Thread-13907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:21:18.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:21:18.111 [DEBUG] [Thread-13907] [transport.py] [_log()] userauth is OK
2025-12-25T15:21:18.111 [DEBUG] [Thread-13907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:21:18.111 [DEBUG] [Thread-13907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:21:18.111 [DEBUG] [Thread-13907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:21:18.111 [DEBUG] [Thread-13907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:21:18.146 [INFO] [Thread-13907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:21:18.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:21:18.795 [DEBUG] [Thread-13907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:21:18.796 [DEBUG] [Thread-13907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:21:18.796 [DEBUG] [Thread-13907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:21:18.837 [DEBUG] [Thread-13907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:21:18.837 [DEBUG] [Thread-13907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:21:18.841 [DEBUG] [Thread-13907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:21:18.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:21:18.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:21:18.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:21:18.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:21:18.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:21:18.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:21:18.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:21:18.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:21:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:21:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.555964 -999.00  +26.40  42.57     17   -0.10 1 1 2 1 1   888    0 26.48 37.24 ----- 43.9 42.6 294.0 52.2 30.5 -30.0 30.5 -28.1 31.0 -26.2 31.4 -26.8
2025-12-25T15:21:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:21:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:21:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.555964
2025-12-25T15:21:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:21:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:21:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:21:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:21:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:21:18.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:20:52', tmtdew=32.01, humidity=11.97, cloud=0.0, wind=43.37, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:20:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:21:18.866 [DEBUG] [Thread-13907] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:21:18.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-25T15:21:18.960 [DEBUG] [Thread-13910] [transport.py] [_log()] starting thread (client mode): 0xb95798a0
2025-12-25T15:21:18.961 [DEBUG] [Thread-13910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:21:18.975 [DEBUG] [Thread-13910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:21:18.976 [INFO] [Thread-13910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:21:18.983 [DEBUG] [Thread-13910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:21:18.983 [DEBUG] [Thread-13910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:21:18.983 [DEBUG] [Thread-13910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:21:18.983 [DEBUG] [Thread-13910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] client lang: <none>
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] server lang: <none>
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] kex follows: False
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] Compression: none
2025-12-25T15:21:18.984 [DEBUG] [Thread-13910] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:21:19.042 [DEBUG] [Thread-13910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:21:19.043 [DEBUG] [Thread-13910] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:21:19.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:21:19.044 [DEBUG] [Thread-13910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:21:19.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:21:19.099 [DEBUG] [Thread-13910] [transport.py] [_log()] userauth is OK
2025-12-25T15:21:19.099 [DEBUG] [Thread-13910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:21:19.100 [DEBUG] [Thread-13910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:21:19.100 [DEBUG] [Thread-13910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:21:19.100 [DEBUG] [Thread-13910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:21:19.119 [INFO] [Thread-13910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:21:19.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-25T15:21:19.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:21:19.977 [DEBUG] [Thread-13910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:21:19.977 [DEBUG] [Thread-13910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:21:20.025 [DEBUG] [Thread-13910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:21:20.025 [DEBUG] [Thread-13910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:21:20.034 [DEBUG] [Thread-13910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:21:20.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:21:20.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-25T15:21:20.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-25T15:21:20.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:21:20.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:21:20.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:21:20.070 [DEBUG] [Thread-13910] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:21:33.022 [DEBUG] [Thread-13912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:44.303 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:44.304 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:48.074 [DEBUG] [Thread-13913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:21:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:21:50.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:21:50.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-25T15:21:50.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 21, 24), 32.01, 11.96, 0.0, 39.29, 26.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:21:50.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:21:24
2025-12-25T15:21:50.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:21:51.089 [DEBUG] [Thread-13914] [transport.py] [_log()] starting thread (client mode): 0xb95b0220
2025-12-25T15:21:51.089 [DEBUG] [Thread-13914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:21:51.109 [DEBUG] [Thread-13914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:21:51.109 [INFO] [Thread-13914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:21:51.112 [DEBUG] [Thread-13914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:21:51.112 [DEBUG] [Thread-13914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:21:51.112 [DEBUG] [Thread-13914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:21:51.112 [DEBUG] [Thread-13914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] client lang: <none>
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] server lang: <none>
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] kex follows: False
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] Compression: none
2025-12-25T15:21:51.113 [DEBUG] [Thread-13914] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:21:51.130 [DEBUG] [Thread-13914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:21:51.130 [DEBUG] [Thread-13914] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:21:51.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:21:51.132 [DEBUG] [Thread-13914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:21:51.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:21:51.133 [DEBUG] [Thread-13914] [transport.py] [_log()] userauth is OK
2025-12-25T15:21:51.133 [DEBUG] [Thread-13914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:21:51.133 [DEBUG] [Thread-13914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:21:51.133 [DEBUG] [Thread-13914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:21:51.133 [DEBUG] [Thread-13914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:21:51.169 [INFO] [Thread-13914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:21:51.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:21:51.809 [DEBUG] [Thread-13914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:21:51.810 [DEBUG] [Thread-13914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:21:51.810 [DEBUG] [Thread-13914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:21:51.851 [DEBUG] [Thread-13914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:21:51.851 [DEBUG] [Thread-13914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:21:51.854 [DEBUG] [Thread-13914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:21:51.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:21:51.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:21:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:21:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:21:51.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:21:51.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:21:51.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:21:51.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:21:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:21:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.556311 -999.00  +25.80  43.61     18   -0.10 1 1 2 1 1   888    0 26.96 38.07 ----- 44.4 43.6 296.6 53.6 30.3 -28.9 30.3 -29.0 30.6 -26.0 31.1 -26.9
2025-12-25T15:21:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:21:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:21:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.556311
2025-12-25T15:21:51.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:21:51.876 [DEBUG] [Thread-13914] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:21:51.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:21:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:21:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:21:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:21:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:21:24', tmtdew=32.01, humidity=11.96, cloud=0.0, wind=39.29, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:21:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:21:51.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-25T15:21:51.970 [DEBUG] [Thread-13917] [transport.py] [_log()] starting thread (client mode): 0xb95b1060
2025-12-25T15:21:51.970 [DEBUG] [Thread-13917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:21:51.985 [DEBUG] [Thread-13917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:21:51.986 [INFO] [Thread-13917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:21:51.993 [DEBUG] [Thread-13917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:21:51.993 [DEBUG] [Thread-13917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:21:51.993 [DEBUG] [Thread-13917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:21:51.993 [DEBUG] [Thread-13917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:51.993 [DEBUG] [Thread-13917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:21:51.993 [DEBUG] [Thread-13917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] client lang: <none>
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] server lang: <none>
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] kex follows: False
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:21:51.994 [DEBUG] [Thread-13917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:21:51.995 [DEBUG] [Thread-13917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:21:51.995 [DEBUG] [Thread-13917] [transport.py] [_log()] Compression: none
2025-12-25T15:21:51.995 [DEBUG] [Thread-13917] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:21:52.053 [DEBUG] [Thread-13917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:21:52.054 [DEBUG] [Thread-13917] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:21:52.054 [DEBUG] [Thread-13917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:21:52.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:21:52.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:21:52.112 [DEBUG] [Thread-13917] [transport.py] [_log()] userauth is OK
2025-12-25T15:21:52.112 [DEBUG] [Thread-13917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:21:52.112 [DEBUG] [Thread-13917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:21:52.112 [DEBUG] [Thread-13917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:21:52.112 [DEBUG] [Thread-13917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:21:52.132 [INFO] [Thread-13917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:21:52.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-25T15:21:52.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:21:52.994 [DEBUG] [Thread-13917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:21:52.995 [DEBUG] [Thread-13917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:21:53.044 [DEBUG] [Thread-13917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:21:53.045 [DEBUG] [Thread-13917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:21:53.053 [DEBUG] [Thread-13917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:21:53.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:21:53.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-25T15:21: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') -> 00000000
2025-12-25T15:21:53.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:21:53.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:21:53.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:21:53.086 [DEBUG] [Thread-13917] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:22:03.110 [DEBUG] [Thread-13919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:10.495 [DEBUG] [Thread-13920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:18.156 [DEBUG] [Thread-13921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:23.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:22:23.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:22:23.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-25T15:22:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 21, 56), 31.69, 12.09, 0.0, 38.04, 26.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:22:23.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:21:56
2025-12-25T15:22:23.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:22:24.081 [DEBUG] [Thread-13922] [transport.py] [_log()] starting thread (client mode): 0xb9558520
2025-12-25T15:22:24.081 [DEBUG] [Thread-13922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:22:24.101 [DEBUG] [Thread-13922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:22:24.101 [INFO] [Thread-13922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:22:24.104 [DEBUG] [Thread-13922] [transport.py] [_log()] client lang: <none>
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] server lang: <none>
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] kex follows: False
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] Compression: none
2025-12-25T15:22:24.105 [DEBUG] [Thread-13922] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:22:24.124 [DEBUG] [Thread-13922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:22:24.125 [DEBUG] [Thread-13922] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:22:24.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:22:24.126 [DEBUG] [Thread-13922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:22:24.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:22:24.128 [DEBUG] [Thread-13922] [transport.py] [_log()] userauth is OK
2025-12-25T15:22:24.128 [DEBUG] [Thread-13922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:22:24.128 [DEBUG] [Thread-13922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:22:24.128 [DEBUG] [Thread-13922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:22:24.128 [DEBUG] [Thread-13922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:22:24.161 [INFO] [Thread-13922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:22:24.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:22:24.781 [DEBUG] [Thread-13922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:22:24.781 [DEBUG] [Thread-13922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:22:24.782 [DEBUG] [Thread-13922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:22:24.822 [DEBUG] [Thread-13922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:22:24.822 [DEBUG] [Thread-13922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:22:24.826 [DEBUG] [Thread-13922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:22:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:22:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:22:24.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:22:24.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:22:24.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:22:24.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:22:24.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:22:24.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:22:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:22:24.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.556659 -999.00  +25.80  27.37     18   +0.00 1 1 1 1 1   888    0 27.29 39.07 ----- 44.3 27.4 301.4 50.1 30.4 -27.8 30.1 -27.4 30.6 -26.1 31.2 -26.2
2025-12-25T15:22:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:22:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:22:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.556659
2025-12-25T15:22:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:22:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:22:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:22:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:22:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:22:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:21:56', tmtdew=31.69, humidity=12.09, cloud=0.0, wind=38.04, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:21:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:22:24.850 [DEBUG] [Thread-13922] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:22:24.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-25T15:22:24.946 [DEBUG] [Thread-13925] [transport.py] [_log()] starting thread (client mode): 0xb6b4f910
2025-12-25T15:22:24.947 [DEBUG] [Thread-13925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:22:24.962 [DEBUG] [Thread-13925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:22:24.962 [INFO] [Thread-13925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:22:24.969 [DEBUG] [Thread-13925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] client lang: <none>
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] server lang: <none>
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] kex follows: False
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:22:24.970 [DEBUG] [Thread-13925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:22:24.971 [DEBUG] [Thread-13925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:22:24.971 [DEBUG] [Thread-13925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:22:24.971 [DEBUG] [Thread-13925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:22:24.971 [DEBUG] [Thread-13925] [transport.py] [_log()] Compression: none
2025-12-25T15:22:24.971 [DEBUG] [Thread-13925] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:22:25.029 [DEBUG] [Thread-13925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:22:25.029 [DEBUG] [Thread-13925] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:22:25.030 [DEBUG] [Thread-13925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:22:25.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:22:25.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:22:25.085 [DEBUG] [Thread-13925] [transport.py] [_log()] userauth is OK
2025-12-25T15:22:25.085 [DEBUG] [Thread-13925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:22:25.086 [DEBUG] [Thread-13925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:22:25.086 [DEBUG] [Thread-13925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:22:25.086 [DEBUG] [Thread-13925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:22:25.104 [INFO] [Thread-13925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:22:25.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:22:25.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:22:25.989 [DEBUG] [Thread-13925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:22:25.989 [DEBUG] [Thread-13925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:22:26.037 [DEBUG] [Thread-13925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:22:26.037 [DEBUG] [Thread-13925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:22:26.047 [DEBUG] [Thread-13925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:22:26.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:22: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-25T15:22:26.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:22:26.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:22:26.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:22:26.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:22:26.083 [DEBUG] [Thread-13925] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:22:33.190 [DEBUG] [Thread-13927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:44.446 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:44.447 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:48.242 [DEBUG] [Thread-13928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:22:56.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:22:56.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:22: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-25T15:22:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 22, 28), 31.64, 12.11, 0.0, 32.24, 26.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:22:56.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:22:28
2025-12-25T15:22:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:22:57.088 [DEBUG] [Thread-13929] [transport.py] [_log()] starting thread (client mode): 0xb6b031f0
2025-12-25T15:22:57.088 [DEBUG] [Thread-13929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:22:57.108 [DEBUG] [Thread-13929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:22:57.108 [INFO] [Thread-13929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] client lang: <none>
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] server lang: <none>
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] kex follows: False
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] Compression: none
2025-12-25T15:22:57.111 [DEBUG] [Thread-13929] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:22:57.128 [DEBUG] [Thread-13929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:22:57.128 [DEBUG] [Thread-13929] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:22:57.129 [DEBUG] [Thread-13929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:22:57.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:22:57.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:22:57.130 [DEBUG] [Thread-13929] [transport.py] [_log()] userauth is OK
2025-12-25T15:22:57.131 [DEBUG] [Thread-13929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:22:57.131 [DEBUG] [Thread-13929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:22:57.131 [DEBUG] [Thread-13929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:22:57.131 [DEBUG] [Thread-13929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:22:57.166 [INFO] [Thread-13929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:22:57.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:22:57.818 [DEBUG] [Thread-13929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:22:57.818 [DEBUG] [Thread-13929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:22:57.819 [DEBUG] [Thread-13929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:22:57.859 [DEBUG] [Thread-13929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:22:57.859 [DEBUG] [Thread-13929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:22:57.862 [DEBUG] [Thread-13929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:22:57.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:22:57.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:22:57.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:22:57.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:22:57.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:22:57.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:22:57.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:22:57.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:22:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:22:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.557006 -999.00  +25.30  33.90     18   -0.40 1 1 2 1 1   888    0 26.58 38.36 ----- 30.8 33.9 313.4 48.1 30.4 -28.0 30.1 -29.0 30.7 -27.4 31.2 -25.6
2025-12-25T15:22:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:22:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:22:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.557006
2025-12-25T15:22:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:22:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:22:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:22:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:22:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:22:57.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:22:28', tmtdew=31.64, humidity=12.11, cloud=0.0, wind=32.24, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:22:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:22:57.889 [DEBUG] [Thread-13929] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:22:57.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:22:57.981 [DEBUG] [Thread-13932] [transport.py] [_log()] starting thread (client mode): 0xb6b00d30
2025-12-25T15:22:57.981 [DEBUG] [Thread-13932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:22:57.996 [DEBUG] [Thread-13932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:22:57.996 [INFO] [Thread-13932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:22:58.005 [DEBUG] [Thread-13932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:22:58.006 [DEBUG] [Thread-13932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] client lang: <none>
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] server lang: <none>
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] kex follows: False
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] Compression: none
2025-12-25T15:22:58.007 [DEBUG] [Thread-13932] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:22:58.063 [DEBUG] [Thread-13932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:22:58.064 [DEBUG] [Thread-13932] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:22:58.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:22:58.065 [DEBUG] [Thread-13932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:22:58.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:22:58.120 [DEBUG] [Thread-13932] [transport.py] [_log()] userauth is OK
2025-12-25T15:22:58.121 [DEBUG] [Thread-13932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:22:58.121 [DEBUG] [Thread-13932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:22:58.121 [DEBUG] [Thread-13932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:22:58.121 [DEBUG] [Thread-13932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:22:58.144 [INFO] [Thread-13932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:22:58.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:22:58.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:22:58.964 [DEBUG] [Thread-13932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:22:58.965 [DEBUG] [Thread-13932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:22:59.013 [DEBUG] [Thread-13932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:22:59.014 [DEBUG] [Thread-13932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:22:59.023 [DEBUG] [Thread-13932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:22:59.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:22: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-25T15:22: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-25T15:22:59.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:22:59.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:22:59.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:22:59.059 [DEBUG] [Thread-13932] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:23:03.282 [DEBUG] [Thread-13934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:23:10.550 [DEBUG] [Thread-13935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:23:18.336 [DEBUG] [Thread-13936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:23:29.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:23:29.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:23:29.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-25T15:23:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 23), 31.71, 12.21, 0.0, 25.55, 26.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:23:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:23:00
2025-12-25T15:23:29.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:23:30.039 [DEBUG] [Thread-13937] [transport.py] [_log()] starting thread (client mode): 0xb6b288b0
2025-12-25T15:23:30.039 [DEBUG] [Thread-13937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:23:30.060 [DEBUG] [Thread-13937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:23:30.060 [INFO] [Thread-13937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] client lang: <none>
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] server lang: <none>
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] kex follows: False
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:23:30.064 [DEBUG] [Thread-13937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:23:30.065 [DEBUG] [Thread-13937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:23:30.065 [DEBUG] [Thread-13937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:23:30.065 [DEBUG] [Thread-13937] [transport.py] [_log()] Compression: none
2025-12-25T15:23:30.065 [DEBUG] [Thread-13937] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:23:30.080 [DEBUG] [Thread-13937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:23:30.081 [DEBUG] [Thread-13937] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:23:30.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:23:30.082 [DEBUG] [Thread-13937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:23:30.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:23:30.084 [DEBUG] [Thread-13937] [transport.py] [_log()] userauth is OK
2025-12-25T15:23:30.084 [DEBUG] [Thread-13937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:23:30.084 [DEBUG] [Thread-13937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:23:30.084 [DEBUG] [Thread-13937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:23:30.084 [DEBUG] [Thread-13937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:23:30.108 [INFO] [Thread-13937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:23:30.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:23:30.715 [DEBUG] [Thread-13937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:23:30.715 [DEBUG] [Thread-13937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:23:30.716 [DEBUG] [Thread-13937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:23:30.756 [DEBUG] [Thread-13937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:23:30.756 [DEBUG] [Thread-13937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:23:30.759 [DEBUG] [Thread-13937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:23:30.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:23:30.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:23:30.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:23:30.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:23:30.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:23:30.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:23:30.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:23:30.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:23:30.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:23:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.557353 -999.00  +25.30  27.78     18   -0.50 1 1 1 1 1   888    0 26.94 38.11 ----- 23.1 27.8 302.0 46.0 30.3 -27.9 30.1 -28.9 30.5 -29.7 31.2 -26.1
2025-12-25T15:23:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:23:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:23:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.557353
2025-12-25T15:23:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:23:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:23:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:23:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:23:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:23:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:23:00', tmtdew=31.71, humidity=12.21, cloud=0.0, wind=25.55, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:22:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:23:30.784 [DEBUG] [Thread-13937] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:23:30.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-25T15:23:30.875 [DEBUG] [Thread-13940] [transport.py] [_log()] starting thread (client mode): 0xb957b460
2025-12-25T15:23:30.875 [DEBUG] [Thread-13940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:23:30.891 [DEBUG] [Thread-13940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:23:30.891 [INFO] [Thread-13940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:23:30.898 [DEBUG] [Thread-13940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] client lang: <none>
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] server lang: <none>
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] kex follows: False
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] Compression: none
2025-12-25T15:23:30.899 [DEBUG] [Thread-13940] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:23:30.959 [DEBUG] [Thread-13940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:23:30.960 [DEBUG] [Thread-13940] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:23:30.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:23:30.961 [DEBUG] [Thread-13940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:23:30.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:23:31.015 [DEBUG] [Thread-13940] [transport.py] [_log()] userauth is OK
2025-12-25T15:23:31.016 [DEBUG] [Thread-13940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:23:31.016 [DEBUG] [Thread-13940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:23:31.016 [DEBUG] [Thread-13940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:23:31.016 [DEBUG] [Thread-13940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:23:31.036 [INFO] [Thread-13940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:23:31.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-25T15:23:31.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:23:31.877 [DEBUG] [Thread-13940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:23:31.878 [DEBUG] [Thread-13940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:23:31.926 [DEBUG] [Thread-13940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:23:31.926 [DEBUG] [Thread-13940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:23:31.935 [DEBUG] [Thread-13940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:23:31.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:23:31.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-25T15:23:31.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-25T15:23:31.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:23:31.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:23:31.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:23:31.978 [DEBUG] [Thread-13940] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:23:33.366 [DEBUG] [Thread-13942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:23:44.602 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:23:44.603 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:23:48.406 [DEBUG] [Thread-13943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:24:01.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:24:01.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:24:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 23, 32), 31.74, 12.19, 0.0, 26.63, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:24:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:23:32
2025-12-25T15:24:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:24:03.027 [DEBUG] [Thread-13944] [transport.py] [_log()] starting thread (client mode): 0xb6b299f0
2025-12-25T15:24:03.028 [DEBUG] [Thread-13944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:24:03.048 [DEBUG] [Thread-13944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:24:03.048 [INFO] [Thread-13944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] client lang: <none>
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] server lang: <none>
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] kex follows: False
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] Compression: none
2025-12-25T15:24:03.052 [DEBUG] [Thread-13944] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:24:03.068 [DEBUG] [Thread-13944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:24:03.068 [DEBUG] [Thread-13944] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:24:03.068 [DEBUG] [Thread-13944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:24:03.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:24:03.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:24:03.069 [DEBUG] [Thread-13944] [transport.py] [_log()] userauth is OK
2025-12-25T15:24:03.069 [DEBUG] [Thread-13944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:24:03.069 [DEBUG] [Thread-13944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:24:03.069 [DEBUG] [Thread-13944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:24:03.069 [DEBUG] [Thread-13944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:24:03.080 [INFO] [Thread-13944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:24:03.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:24:03.436 [DEBUG] [Thread-13946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:03.681 [DEBUG] [Thread-13944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:24:03.681 [DEBUG] [Thread-13944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:24:03.682 [DEBUG] [Thread-13944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:24:03.722 [DEBUG] [Thread-13944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:24:03.723 [DEBUG] [Thread-13944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:24:03.725 [DEBUG] [Thread-13944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:24:03.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:24:03.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:24:03.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:24:03.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:24:03.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:24:03.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:24:03.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.557700 -999.00  +25.50  26.20     17   -0.60 1 1 1 1 1   888    0 26.62 37.86 ----- 26.9 26.2 303.5 31.9 30.4 -27.4 30.0 -27.9 30.6 -28.2 31.3 -26.1
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.557700
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:24:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:23:32', tmtdew=31.74, humidity=12.19, cloud=0.0, wind=26.63, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:23:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:24:03.744 [DEBUG] [Thread-13944] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:24:03.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-25T15:24:03.828 [DEBUG] [Thread-13948] [transport.py] [_log()] starting thread (client mode): 0xb95b0ca0
2025-12-25T15:24:03.828 [DEBUG] [Thread-13948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:24:03.843 [DEBUG] [Thread-13948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:24:03.843 [INFO] [Thread-13948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:24:03.850 [DEBUG] [Thread-13948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] client lang: <none>
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] server lang: <none>
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] kex follows: False
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] Compression: none
2025-12-25T15:24:03.851 [DEBUG] [Thread-13948] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:24:03.913 [DEBUG] [Thread-13948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:24:03.913 [DEBUG] [Thread-13948] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:24:03.913 [DEBUG] [Thread-13948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:24:03.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:24:03.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:24:03.974 [DEBUG] [Thread-13948] [transport.py] [_log()] userauth is OK
2025-12-25T15:24:03.974 [DEBUG] [Thread-13948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:24:03.974 [DEBUG] [Thread-13948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:24:03.974 [DEBUG] [Thread-13948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:24:03.974 [DEBUG] [Thread-13948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:24:03.991 [INFO] [Thread-13948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:24:03.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-25T15:24:03.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:24:04.814 [DEBUG] [Thread-13948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:24:04.814 [DEBUG] [Thread-13948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:24:04.861 [DEBUG] [Thread-13948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:24:04.861 [DEBUG] [Thread-13948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:24:04.869 [DEBUG] [Thread-13948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:24:04.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:24:04.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-25T15:24:04.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-25T15:24:04.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:24:04.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:24:04.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:24:04.901 [DEBUG] [Thread-13948] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:24:10.604 [DEBUG] [Thread-13950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:18.469 [DEBUG] [Thread-13951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:33.514 [DEBUG] [Thread-13952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:24:34.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:24:34.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-25T15:24:35.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 24, 4), 32.48, 11.6, 0.0, 26.64, 26.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:24:35.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:24:04
2025-12-25T15:24:35.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:24:35.887 [DEBUG] [Thread-13953] [transport.py] [_log()] starting thread (client mode): 0xb955bd90
2025-12-25T15:24:35.887 [DEBUG] [Thread-13953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:24:35.908 [DEBUG] [Thread-13953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:24:35.908 [INFO] [Thread-13953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] client lang: <none>
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] server lang: <none>
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] kex follows: False
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:24:35.911 [DEBUG] [Thread-13953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:24:35.912 [DEBUG] [Thread-13953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:24:35.912 [DEBUG] [Thread-13953] [transport.py] [_log()] Compression: none
2025-12-25T15:24:35.912 [DEBUG] [Thread-13953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:24:35.929 [DEBUG] [Thread-13953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:24:35.929 [DEBUG] [Thread-13953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:24:35.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:24:35.930 [DEBUG] [Thread-13953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:24:35.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:24:35.933 [DEBUG] [Thread-13953] [transport.py] [_log()] userauth is OK
2025-12-25T15:24:35.933 [DEBUG] [Thread-13953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:24:35.933 [DEBUG] [Thread-13953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:24:35.933 [DEBUG] [Thread-13953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:24:35.933 [DEBUG] [Thread-13953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:24:35.969 [INFO] [Thread-13953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:24:35.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:24:36.597 [DEBUG] [Thread-13953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:24:36.597 [DEBUG] [Thread-13953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:24:36.598 [DEBUG] [Thread-13953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:24:36.638 [DEBUG] [Thread-13953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:24:36.638 [DEBUG] [Thread-13953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:24:36.642 [DEBUG] [Thread-13953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:24:36.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:24:36.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:24:36.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:24:36.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:24:36.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:24:36.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:24:36.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:24:36.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:24:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:24:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.558395 -999.00  +25.50  22.56     17   -1.10 1 1 1 1 1   888    0 27.40 44.68 ----- 22.2 22.6 304.4 29.0 30.5 -26.9 30.2 -28.1 30.8 -26.1 31.5 -25.4
2025-12-25T15:24:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:24:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:24:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.558395
2025-12-25T15:24:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:24:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:24:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:24:36.667 [DEBUG] [Thread-13953] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:24:36.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:24:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:24:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:24:04', tmtdew=32.48, humidity=11.6, cloud=0.0, wind=26.64, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:24:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:24:36.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-25T15:24:36.753 [DEBUG] [Thread-13956] [transport.py] [_log()] starting thread (client mode): 0xb6b2b1c0
2025-12-25T15:24:36.753 [DEBUG] [Thread-13956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:24:36.769 [DEBUG] [Thread-13956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:24:36.769 [INFO] [Thread-13956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:24:36.776 [DEBUG] [Thread-13956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:24:36.776 [DEBUG] [Thread-13956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] client lang: <none>
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] server lang: <none>
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] kex follows: False
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] Compression: none
2025-12-25T15:24:36.777 [DEBUG] [Thread-13956] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:24:36.834 [DEBUG] [Thread-13956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:24:36.834 [DEBUG] [Thread-13956] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:24:36.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:24:36.835 [DEBUG] [Thread-13956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:24:36.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:24:36.890 [DEBUG] [Thread-13956] [transport.py] [_log()] userauth is OK
2025-12-25T15:24:36.890 [DEBUG] [Thread-13956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:24:36.890 [DEBUG] [Thread-13956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:24:36.890 [DEBUG] [Thread-13956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:24:36.890 [DEBUG] [Thread-13956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:24:36.909 [INFO] [Thread-13956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:24:36.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-25T15:24:36.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:24:37.776 [DEBUG] [Thread-13956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:24:37.776 [DEBUG] [Thread-13956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:24:37.823 [DEBUG] [Thread-13956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:24:37.823 [DEBUG] [Thread-13956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:24:37.832 [DEBUG] [Thread-13956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:24:37.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:24:37.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')
2025-12-25T15:24:37.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-25T15:24:37.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:24:37.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:24:37.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:24:37.866 [DEBUG] [Thread-13956] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:24:44.743 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:44.744 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:24:48.545 [DEBUG] [Thread-13958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:03.608 [DEBUG] [Thread-13959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:07.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:25:07.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:25:07.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-25T15:25:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 24, 36), 32.76, 11.3, 0.0, 18.37, 26.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:25:08.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:24:36
2025-12-25T15:25:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:25:08.852 [DEBUG] [Thread-13960] [transport.py] [_log()] starting thread (client mode): 0xb6b29f30
2025-12-25T15:25:08.852 [DEBUG] [Thread-13960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:25:08.872 [DEBUG] [Thread-13960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:25:08.872 [INFO] [Thread-13960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:25:08.875 [DEBUG] [Thread-13960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:25:08.875 [DEBUG] [Thread-13960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:25:08.875 [DEBUG] [Thread-13960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] client lang: <none>
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] server lang: <none>
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] kex follows: False
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:25:08.876 [DEBUG] [Thread-13960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:25:08.877 [DEBUG] [Thread-13960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:25:08.877 [DEBUG] [Thread-13960] [transport.py] [_log()] Compression: none
2025-12-25T15:25:08.877 [DEBUG] [Thread-13960] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:25:08.894 [DEBUG] [Thread-13960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:25:08.894 [DEBUG] [Thread-13960] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:25:08.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:25:08.895 [DEBUG] [Thread-13960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:25:08.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:25:08.897 [DEBUG] [Thread-13960] [transport.py] [_log()] userauth is OK
2025-12-25T15:25:08.897 [DEBUG] [Thread-13960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:25:08.897 [DEBUG] [Thread-13960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:25:08.897 [DEBUG] [Thread-13960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:25:08.898 [DEBUG] [Thread-13960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:25:08.921 [INFO] [Thread-13960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:25:08.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:25:09.580 [DEBUG] [Thread-13960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:25:09.580 [DEBUG] [Thread-13960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:25:09.580 [DEBUG] [Thread-13960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:25:09.621 [DEBUG] [Thread-13960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:25:09.621 [DEBUG] [Thread-13960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:25:09.624 [DEBUG] [Thread-13960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:25:09.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:25:09.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:25:09.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:25:09.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:25:09.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:25:09.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:25:09.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.558742 -999.00  +25.90  23.58     16   -1.20 1 1 1 1 1   888    0 27.58 48.37 ----- 16.3 23.6 310.0 27.6 30.6 -27.8 30.4 -27.7 31.0 -24.8 31.5 -25.8
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.558742
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:25:09.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:24:36', tmtdew=32.76, humidity=11.3, cloud=0.0, wind=18.37, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:24:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:25:09.637 [DEBUG] [Thread-13960] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:25:09.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-25T15:25:10.649 [DEBUG] [Thread-13963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:18.645 [DEBUG] [Thread-13964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:33.704 [DEBUG] [Thread-13965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:44.885 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:44.886 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:25:48.738 [DEBUG] [Thread-13966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:03.769 [DEBUG] [Thread-13967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:10.707 [DEBUG] [Thread-13968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:18.801 [DEBUG] [Thread-13969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:33.839 [DEBUG] [Thread-13970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:45.026 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:45.027 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:26:48.875 [DEBUG] [Thread-13971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:03.913 [DEBUG] [Thread-13972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:10.759 [DEBUG] [Thread-13973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:18.946 [DEBUG] [Thread-13974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:24.373 [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-25T15:27:33.979 [DEBUG] [Thread-13975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:45.169 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:45.170 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:49.017 [DEBUG] [Thread-13976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:27:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:27:54.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:27:54.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-25T15:27:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 27, 49), 31.53, 11.79, 0.0, 35.94, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:27:55.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:27:49
2025-12-25T15:27:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:27:55.386 [DEBUG] [Thread-13977] [transport.py] [_log()] starting thread (client mode): 0xb9591120
2025-12-25T15:27:55.386 [DEBUG] [Thread-13977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:27:55.405 [DEBUG] [Thread-13977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:27:55.405 [INFO] [Thread-13977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] client lang: <none>
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] server lang: <none>
2025-12-25T15:27:55.407 [DEBUG] [Thread-13977] [transport.py] [_log()] kex follows: False
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] Compression: none
2025-12-25T15:27:55.408 [DEBUG] [Thread-13977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:27:55.417 [DEBUG] [Thread-13977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:27:55.418 [DEBUG] [Thread-13977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:27:55.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:27:55.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:27:55.420 [DEBUG] [Thread-13977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:27:55.421 [DEBUG] [Thread-13977] [transport.py] [_log()] userauth is OK
2025-12-25T15:27:55.421 [DEBUG] [Thread-13977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:27:55.421 [DEBUG] [Thread-13977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:27:55.421 [DEBUG] [Thread-13977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:27:55.421 [DEBUG] [Thread-13977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:27:55.441 [INFO] [Thread-13977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:27:55.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:27:56.083 [DEBUG] [Thread-13977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:27:56.083 [DEBUG] [Thread-13977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:27:56.083 [DEBUG] [Thread-13977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:27:56.123 [DEBUG] [Thread-13977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:27:56.123 [DEBUG] [Thread-13977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:27:56.126 [DEBUG] [Thread-13977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:27:56.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:27:56.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:27:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:27:56.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:27:56.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:27:56.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:27:56.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.560478 -999.00  +26.00  32.78     17   -0.70 1 1 2 1 1   888    0 27.62 69.91 ----- 35.7 32.8 310.4 45.4 30.5 -28.2 30.3 -29.2 31.0 -26.4 31.6 -25.6
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.560478
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:27:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:27:49', tmtdew=31.53, humidity=11.79, cloud=0.0, wind=35.94, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:27:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:27:56.144 [DEBUG] [Thread-13977] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:27:56.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:27:56.225 [DEBUG] [Thread-13980] [transport.py] [_log()] starting thread (client mode): 0xb6b2aad0
2025-12-25T15:27:56.225 [DEBUG] [Thread-13980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:27:56.240 [DEBUG] [Thread-13980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:27:56.240 [INFO] [Thread-13980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] client lang: <none>
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] server lang: <none>
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] kex follows: False
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] Compression: none
2025-12-25T15:27:56.248 [DEBUG] [Thread-13980] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:27:56.304 [DEBUG] [Thread-13980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:27:56.304 [DEBUG] [Thread-13980] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:27:56.304 [DEBUG] [Thread-13980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:27:56.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:27:56.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:27:56.361 [DEBUG] [Thread-13980] [transport.py] [_log()] userauth is OK
2025-12-25T15:27:56.361 [DEBUG] [Thread-13980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:27:56.361 [DEBUG] [Thread-13980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:27:56.361 [DEBUG] [Thread-13980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:27:56.361 [DEBUG] [Thread-13980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:27:56.375 [INFO] [Thread-13980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:27:56.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:27:56.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:27:57.230 [DEBUG] [Thread-13980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:27:57.230 [DEBUG] [Thread-13980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:27:57.278 [DEBUG] [Thread-13980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:27:57.278 [DEBUG] [Thread-13980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:27:57.286 [DEBUG] [Thread-13980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:27:57.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:27:57.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-25T15:27:57.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:27:57.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:27:57.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:27:57.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:27:57.318 [DEBUG] [Thread-13980] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:28:04.047 [DEBUG] [Thread-13982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:28:10.821 [DEBUG] [Thread-13983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:28:19.096 [DEBUG] [Thread-13984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:28:27.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:28:27.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:28:27.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-25T15:28:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 28, 21), 31.34, 11.96, 0.0, 33.52, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:28:28.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:28:21
2025-12-25T15:28:28.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:28:28.310 [DEBUG] [Thread-13985] [transport.py] [_log()] starting thread (client mode): 0xb9591090
2025-12-25T15:28:28.310 [DEBUG] [Thread-13985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:28:28.331 [DEBUG] [Thread-13985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:28:28.331 [INFO] [Thread-13985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] client lang: <none>
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] server lang: <none>
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] kex follows: False
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] Compression: none
2025-12-25T15:28:28.335 [DEBUG] [Thread-13985] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:28:28.353 [DEBUG] [Thread-13985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:28:28.353 [DEBUG] [Thread-13985] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:28:28.354 [DEBUG] [Thread-13985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:28:28.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:28:28.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:28:28.356 [DEBUG] [Thread-13985] [transport.py] [_log()] userauth is OK
2025-12-25T15:28:28.356 [DEBUG] [Thread-13985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:28:28.357 [DEBUG] [Thread-13985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:28:28.357 [DEBUG] [Thread-13985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:28:28.357 [DEBUG] [Thread-13985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:28:28.381 [INFO] [Thread-13985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:28:28.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:28:29.022 [DEBUG] [Thread-13985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:28:29.023 [DEBUG] [Thread-13985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:28:29.023 [DEBUG] [Thread-13985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:28:29.064 [DEBUG] [Thread-13985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:28:29.064 [DEBUG] [Thread-13985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:28:29.068 [DEBUG] [Thread-13985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:28:29.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:28:29.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:28:29.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:28:29.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:28:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:28:29.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:28:29.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:28:29.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:28:29.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:28:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.560825 -999.00  +26.40  26.95     17   -0.40 1 1 1 1 1   888    0 28.19 75.24 ----- 33.8 26.9 305.6 40.0 30.6 -27.8 30.2 -27.7 31.0 -28.0 31.6 -26.5
2025-12-25T15:28:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:28:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:28:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.560825
2025-12-25T15:28:29.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:28:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:28:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:28:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:28:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:28:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:28:21', tmtdew=31.34, humidity=11.96, cloud=0.0, wind=33.52, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:27:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:28:29.094 [DEBUG] [Thread-13985] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:28:29.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-25T15:28:29.187 [DEBUG] [Thread-13988] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T15:28:29.187 [DEBUG] [Thread-13988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:28:29.201 [DEBUG] [Thread-13988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:28:29.201 [INFO] [Thread-13988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:28:29.209 [DEBUG] [Thread-13988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:28:29.209 [DEBUG] [Thread-13988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:28:29.209 [DEBUG] [Thread-13988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:28:29.209 [DEBUG] [Thread-13988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:28:29.209 [DEBUG] [Thread-13988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:28:29.209 [DEBUG] [Thread-13988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] client lang: <none>
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] server lang: <none>
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] kex follows: False
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] Compression: none
2025-12-25T15:28:29.210 [DEBUG] [Thread-13988] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:28:29.269 [DEBUG] [Thread-13988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:28:29.269 [DEBUG] [Thread-13988] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:28:29.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:28:29.271 [DEBUG] [Thread-13988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:28:29.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:28:29.330 [DEBUG] [Thread-13988] [transport.py] [_log()] userauth is OK
2025-12-25T15:28:29.330 [DEBUG] [Thread-13988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:28:29.330 [DEBUG] [Thread-13988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:28:29.330 [DEBUG] [Thread-13988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:28:29.330 [DEBUG] [Thread-13988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:28:29.351 [INFO] [Thread-13988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:28:29.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-25T15:28:29.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:28:30.240 [DEBUG] [Thread-13988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:28:30.240 [DEBUG] [Thread-13988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:28:30.288 [DEBUG] [Thread-13988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:28:30.288 [DEBUG] [Thread-13988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:28:30.297 [DEBUG] [Thread-13988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:28:30.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:28: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-25T15:28:30.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:28:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:28:30.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:28:30.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:28:30.334 [DEBUG] [Thread-13988] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:28:34.130 [DEBUG] [Thread-13990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:28:45.309 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:28:45.311 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:28:49.186 [DEBUG] [Thread-13991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:00.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:29:00.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:29:00.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-25T15:29:01.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 28, 53), 31.1, 12.22, 0.0, 31.74, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:29:01.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:28:53
2025-12-25T15:29:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:29:01.345 [DEBUG] [Thread-13992] [transport.py] [_log()] starting thread (client mode): 0xb95921a0
2025-12-25T15:29:01.345 [DEBUG] [Thread-13992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:29:01.365 [DEBUG] [Thread-13992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:29:01.365 [INFO] [Thread-13992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] client lang: <none>
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] server lang: <none>
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] kex follows: False
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:29:01.367 [DEBUG] [Thread-13992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:29:01.368 [DEBUG] [Thread-13992] [transport.py] [_log()] Compression: none
2025-12-25T15:29:01.368 [DEBUG] [Thread-13992] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:29:01.376 [DEBUG] [Thread-13992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:29:01.376 [DEBUG] [Thread-13992] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:29:01.377 [DEBUG] [Thread-13992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:29:01.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:29:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:29:01.379 [DEBUG] [Thread-13992] [transport.py] [_log()] userauth is OK
2025-12-25T15:29:01.379 [DEBUG] [Thread-13992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:29:01.379 [DEBUG] [Thread-13992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:29:01.379 [DEBUG] [Thread-13992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:29:01.379 [DEBUG] [Thread-13992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:29:01.403 [INFO] [Thread-13992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:29:01.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:29:02.006 [DEBUG] [Thread-13992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:29:02.006 [DEBUG] [Thread-13992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:29:02.007 [DEBUG] [Thread-13992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:29:02.047 [DEBUG] [Thread-13992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:29:02.047 [DEBUG] [Thread-13992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:29:02.051 [DEBUG] [Thread-13992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:29:02.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:29:02.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:29:02.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:29:02.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:29:02.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:29:02.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:29:02.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:29:02.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:29:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:29:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.561172 -999.00  +26.30  38.82     17   -0.50 1 1 2 1 1   888    0 28.10 75.37 ----- 34.3 38.8 289.2 41.3 30.5 -28.6 30.4 -27.8 31.0 -25.3 31.6 -26.5
2025-12-25T15:29:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:29:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:29:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.561172
2025-12-25T15:29:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:29:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:29:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:29:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:29:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:29:02.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:28:53', tmtdew=31.1, humidity=12.22, cloud=0.0, wind=31.74, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:28:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:29:02.078 [DEBUG] [Thread-13992] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:29:02.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-25T15:29:02.173 [DEBUG] [Thread-13995] [transport.py] [_log()] starting thread (client mode): 0xb6b2b400
2025-12-25T15:29:02.173 [DEBUG] [Thread-13995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:29:02.187 [DEBUG] [Thread-13995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:29:02.187 [INFO] [Thread-13995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] client lang: <none>
2025-12-25T15:29:02.194 [DEBUG] [Thread-13995] [transport.py] [_log()] server lang: <none>
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] kex follows: False
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] Compression: none
2025-12-25T15:29:02.195 [DEBUG] [Thread-13995] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:29:02.258 [DEBUG] [Thread-13995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:29:02.258 [DEBUG] [Thread-13995] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:29:02.259 [DEBUG] [Thread-13995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:29:02.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:29:02.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:29:02.313 [DEBUG] [Thread-13995] [transport.py] [_log()] userauth is OK
2025-12-25T15:29:02.313 [DEBUG] [Thread-13995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:29:02.314 [DEBUG] [Thread-13995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:29:02.314 [DEBUG] [Thread-13995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:29:02.314 [DEBUG] [Thread-13995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:29:02.332 [INFO] [Thread-13995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:29:02.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-25T15:29:02.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:29:03.144 [DEBUG] [Thread-13995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:29:03.144 [DEBUG] [Thread-13995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:29:03.195 [DEBUG] [Thread-13995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:29:03.195 [DEBUG] [Thread-13995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:29:03.205 [DEBUG] [Thread-13995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:29:03.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:29:03.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:29:03.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:29:03.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:29:03.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:29:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:29:03.244 [DEBUG] [Thread-13995] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:29:04.221 [DEBUG] [Thread-13997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:10.879 [DEBUG] [Thread-13998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:19.275 [DEBUG] [Thread-13999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:33.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:29:33.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:29:33.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-25T15:29:33.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 29, 25), 31.11, 12.21, 0.0, 27.01, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:29:33.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:29:25
2025-12-25T15:29:34.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:29:34.229 [DEBUG] [Thread-14000] [transport.py] [_log()] starting thread (client mode): 0xb6b4f1c0
2025-12-25T15:29:34.229 [DEBUG] [Thread-14000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:29:34.253 [DEBUG] [Thread-14000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:29:34.253 [INFO] [Thread-14000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:29:34.257 [DEBUG] [Thread-14000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:34.258 [DEBUG] [Thread-14000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] client lang: <none>
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] server lang: <none>
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] kex follows: False
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:29:34.259 [DEBUG] [Thread-14000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:29:34.260 [DEBUG] [Thread-14000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:29:34.260 [DEBUG] [Thread-14000] [transport.py] [_log()] Compression: none
2025-12-25T15:29:34.260 [DEBUG] [Thread-14000] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:29:34.281 [DEBUG] [Thread-14000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:29:34.282 [DEBUG] [Thread-14000] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:29:34.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:29:34.283 [DEBUG] [Thread-14000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:29:34.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:29:34.286 [DEBUG] [Thread-14000] [transport.py] [_log()] userauth is OK
2025-12-25T15:29:34.286 [DEBUG] [Thread-14000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:29:34.286 [DEBUG] [Thread-14000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:29:34.286 [DEBUG] [Thread-14000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:29:34.286 [DEBUG] [Thread-14000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:29:34.312 [DEBUG] [Thread-14002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:34.313 [INFO] [Thread-14000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:29:34.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:29:34.989 [DEBUG] [Thread-14000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:29:34.989 [DEBUG] [Thread-14000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:29:34.990 [DEBUG] [Thread-14000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:29:35.030 [DEBUG] [Thread-14000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:29:35.030 [DEBUG] [Thread-14000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:29:35.034 [DEBUG] [Thread-14000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:29:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:29:35.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:29:35.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:29:35.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:29:35.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:29:35.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:29:35.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:29:35.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:29:35.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:29:35.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.561867 -999.00  +25.70  25.33     17   -0.50 1 1 1 1 1   888    0 28.18 70.46 ----- 28.1 25.3 294.4 42.0 30.5 -29.1 30.2 -29.6 30.9 -25.8 31.5 -26.9
2025-12-25T15:29:35.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:29:35.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:29:35.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.561867
2025-12-25T15:29:35.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:29:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:29:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:29:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:29:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:29:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:29:25', tmtdew=31.11, humidity=12.21, cloud=0.0, wind=27.01, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:29:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:29:35.061 [DEBUG] [Thread-14000] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:29:35.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-25T15:29:35.154 [DEBUG] [Thread-14004] [transport.py] [_log()] starting thread (client mode): 0xb6b2bc40
2025-12-25T15:29:35.154 [DEBUG] [Thread-14004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:29:35.168 [DEBUG] [Thread-14004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:29:35.168 [INFO] [Thread-14004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] client lang: <none>
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] server lang: <none>
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] kex follows: False
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] Compression: none
2025-12-25T15:29:35.176 [DEBUG] [Thread-14004] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:29:35.233 [DEBUG] [Thread-14004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:29:35.233 [DEBUG] [Thread-14004] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:29:35.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:29:35.235 [DEBUG] [Thread-14004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:29:35.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:29:35.289 [DEBUG] [Thread-14004] [transport.py] [_log()] userauth is OK
2025-12-25T15:29:35.289 [DEBUG] [Thread-14004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:29:35.289 [DEBUG] [Thread-14004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:29:35.289 [DEBUG] [Thread-14004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:29:35.290 [DEBUG] [Thread-14004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:29:35.308 [INFO] [Thread-14004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:29:35.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-25T15:29:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:29:36.135 [DEBUG] [Thread-14004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:29:36.135 [DEBUG] [Thread-14004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:29:36.183 [DEBUG] [Thread-14004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:29:36.183 [DEBUG] [Thread-14004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:29:36.192 [DEBUG] [Thread-14004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:29:36.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:29:36.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-25T15:29:36.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-25T15:29:36.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:29:36.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:29:36.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:29:36.228 [DEBUG] [Thread-14004] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:29:45.451 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:45.452 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:29:49.351 [DEBUG] [Thread-14006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:04.396 [DEBUG] [Thread-14007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:06.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:30:06.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:30:06.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-25T15:30:06.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 29, 57), 31.4, 12.28, 0.0, 25.57, 26.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:30:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:29:57
2025-12-25T15:30:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:30:07.218 [DEBUG] [Thread-14008] [transport.py] [_log()] starting thread (client mode): 0xb9591ea0
2025-12-25T15:30:07.218 [DEBUG] [Thread-14008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:30:07.239 [DEBUG] [Thread-14008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:30:07.239 [INFO] [Thread-14008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:30:07.242 [DEBUG] [Thread-14008] [transport.py] [_log()] client lang: <none>
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] server lang: <none>
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] kex follows: False
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] Compression: none
2025-12-25T15:30:07.243 [DEBUG] [Thread-14008] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:30:07.260 [DEBUG] [Thread-14008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:30:07.260 [DEBUG] [Thread-14008] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:30:07.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:30:07.261 [DEBUG] [Thread-14008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:30:07.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:30:07.263 [DEBUG] [Thread-14008] [transport.py] [_log()] userauth is OK
2025-12-25T15:30:07.264 [DEBUG] [Thread-14008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:30:07.264 [DEBUG] [Thread-14008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:30:07.264 [DEBUG] [Thread-14008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:30:07.264 [DEBUG] [Thread-14008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:30:07.288 [INFO] [Thread-14008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:30:07.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:30:08.256 [DEBUG] [Thread-14008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:30:08.256 [DEBUG] [Thread-14008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:30:08.257 [DEBUG] [Thread-14008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:30:08.297 [DEBUG] [Thread-14008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:30:08.297 [DEBUG] [Thread-14008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:30:08.301 [DEBUG] [Thread-14008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:30:08.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:30:08.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:30:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:30:08.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:30:08.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:30:08.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:30:08.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:30:08.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:30:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:30:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.562214 -999.00  +25.10  22.05     18   -0.60 1 1 1 1 1   888    0 27.95 65.93 ----- 21.1 22.1 297.2 32.9 30.4 -28.7 30.2 -28.6 30.9 -27.1 31.4 -26.6
2025-12-25T15:30:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:30:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:30:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.562214
2025-12-25T15:30:08.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:30:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:30:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:30:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:30:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:30:08.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:29:57', tmtdew=31.4, humidity=12.28, cloud=0.0, wind=25.57, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:29:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:30:08.351 [DEBUG] [Thread-14008] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:30:08.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-25T15:30:08.445 [DEBUG] [Thread-14011] [transport.py] [_log()] starting thread (client mode): 0xb955a350
2025-12-25T15:30:08.445 [DEBUG] [Thread-14011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:30:08.459 [DEBUG] [Thread-14011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:30:08.460 [INFO] [Thread-14011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:30:08.467 [DEBUG] [Thread-14011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:30:08.468 [DEBUG] [Thread-14011] [transport.py] [_log()] client lang: <none>
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] server lang: <none>
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] kex follows: False
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] Compression: none
2025-12-25T15:30:08.469 [DEBUG] [Thread-14011] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:30:08.524 [DEBUG] [Thread-14011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:30:08.525 [DEBUG] [Thread-14011] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:30:08.525 [DEBUG] [Thread-14011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:30:08.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:30:08.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:30:08.580 [DEBUG] [Thread-14011] [transport.py] [_log()] userauth is OK
2025-12-25T15:30:08.581 [DEBUG] [Thread-14011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:30:08.581 [DEBUG] [Thread-14011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:30:08.581 [DEBUG] [Thread-14011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:30:08.581 [DEBUG] [Thread-14011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:30:08.599 [INFO] [Thread-14011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:30:08.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-25T15:30:08.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:30:09.393 [DEBUG] [Thread-14011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:30:09.394 [DEBUG] [Thread-14011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:30:09.441 [DEBUG] [Thread-14011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:30:09.441 [DEBUG] [Thread-14011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:30:09.450 [DEBUG] [Thread-14011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:30:09.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:30:09.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-25T15:30:09.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-25T15:30:09.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:30:09.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:30:09.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:30:09.487 [DEBUG] [Thread-14011] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:30:10.930 [DEBUG] [Thread-14013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:19.431 [DEBUG] [Thread-14014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:34.472 [DEBUG] [Thread-14015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:39.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:30:39.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:30:39.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-25T15:30:40.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 30, 29), 30.93, 12.66, 0.0, 29.92, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:30:40.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:30:29
2025-12-25T15:30:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:30:40.459 [DEBUG] [Thread-14016] [transport.py] [_log()] starting thread (client mode): 0xb9593910
2025-12-25T15:30:40.459 [DEBUG] [Thread-14016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:30:40.479 [DEBUG] [Thread-14016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:30:40.479 [INFO] [Thread-14016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:30:40.482 [DEBUG] [Thread-14016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:30:40.482 [DEBUG] [Thread-14016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:30:40.482 [DEBUG] [Thread-14016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] client lang: <none>
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] server lang: <none>
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] kex follows: False
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] Compression: none
2025-12-25T15:30:40.483 [DEBUG] [Thread-14016] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:30:40.492 [DEBUG] [Thread-14016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:30:40.492 [DEBUG] [Thread-14016] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:30:40.492 [DEBUG] [Thread-14016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:30:40.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:30:40.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:30:40.536 [DEBUG] [Thread-14016] [transport.py] [_log()] userauth is OK
2025-12-25T15:30:40.537 [DEBUG] [Thread-14016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:30:40.537 [DEBUG] [Thread-14016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:30:40.537 [DEBUG] [Thread-14016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:30:40.537 [DEBUG] [Thread-14016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:30:40.568 [INFO] [Thread-14016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:30:40.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:30:41.193 [DEBUG] [Thread-14016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:30:41.193 [DEBUG] [Thread-14016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:30:41.194 [DEBUG] [Thread-14016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:30:41.234 [DEBUG] [Thread-14016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:30:41.234 [DEBUG] [Thread-14016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:30:41.238 [DEBUG] [Thread-14016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:30:41.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:30:41.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:30:41.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:30:41.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:30:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:30:41.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:30:41.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:30:41.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:30:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:30:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.562561 -999.00  +25.90  17.99     18   -0.10 1 1 1 1 1   888    0 27.67 58.40 ----- 22.9 18.0 307.3 23.9 30.6 -27.7 30.3 -27.2 31.1 -24.4 31.4 -25.6
2025-12-25T15:30:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:30:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:30:41.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.562561
2025-12-25T15:30:41.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:30:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:30:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:30:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:30:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:30:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:30:29', tmtdew=30.93, humidity=12.66, cloud=0.0, wind=29.92, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:30:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:30:41.267 [DEBUG] [Thread-14016] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:30:41.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-25T15:30:41.361 [DEBUG] [Thread-14019] [transport.py] [_log()] starting thread (client mode): 0xb6b4f730
2025-12-25T15:30:41.361 [DEBUG] [Thread-14019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:30:41.375 [DEBUG] [Thread-14019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:30:41.375 [INFO] [Thread-14019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:30:41.383 [DEBUG] [Thread-14019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:30:41.383 [DEBUG] [Thread-14019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] client lang: <none>
2025-12-25T15:30:41.384 [DEBUG] [Thread-14019] [transport.py] [_log()] server lang: <none>
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] kex follows: False
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] Compression: none
2025-12-25T15:30:41.385 [DEBUG] [Thread-14019] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:30:41.446 [DEBUG] [Thread-14019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:30:41.446 [DEBUG] [Thread-14019] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:30:41.447 [DEBUG] [Thread-14019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:30:41.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:30:41.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:30:41.504 [DEBUG] [Thread-14019] [transport.py] [_log()] userauth is OK
2025-12-25T15:30:41.504 [DEBUG] [Thread-14019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:30:41.504 [DEBUG] [Thread-14019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:30:41.504 [DEBUG] [Thread-14019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:30:41.504 [DEBUG] [Thread-14019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:30:41.522 [INFO] [Thread-14019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:30:41.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-25T15:30:41.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:30:42.333 [DEBUG] [Thread-14019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:30:42.333 [DEBUG] [Thread-14019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:30:42.385 [DEBUG] [Thread-14019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:30:42.385 [DEBUG] [Thread-14019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:30:42.394 [DEBUG] [Thread-14019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:30:42.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:30:42.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:30:42.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-25T15:30:42.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:30:42.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:30:42.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:30:42.431 [DEBUG] [Thread-14019] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:30:45.593 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:45.594 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:30:49.504 [DEBUG] [Thread-14021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:04.559 [DEBUG] [Thread-14022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:10.985 [DEBUG] [Thread-14023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:31:12.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:31:12.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-25T15:31:13.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 31, 1), 30.54, 12.97, 0.0, 22.94, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:31:13.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:31:01
2025-12-25T15:31:13.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:31:13.468 [DEBUG] [Thread-14024] [transport.py] [_log()] starting thread (client mode): 0xb95b0ca0
2025-12-25T15:31:13.468 [DEBUG] [Thread-14024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:31:13.487 [DEBUG] [Thread-14024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:31:13.487 [INFO] [Thread-14024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:31:13.490 [DEBUG] [Thread-14024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:31:13.490 [DEBUG] [Thread-14024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:31:13.490 [DEBUG] [Thread-14024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:31:13.490 [DEBUG] [Thread-14024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] client lang: <none>
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] server lang: <none>
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] kex follows: False
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] Compression: none
2025-12-25T15:31:13.491 [DEBUG] [Thread-14024] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:31:13.505 [DEBUG] [Thread-14024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:31:13.505 [DEBUG] [Thread-14024] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:31:13.506 [DEBUG] [Thread-14024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:31:13.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:31:13.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:31:13.506 [DEBUG] [Thread-14024] [transport.py] [_log()] userauth is OK
2025-12-25T15:31:13.507 [DEBUG] [Thread-14024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:31:13.507 [DEBUG] [Thread-14024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:31:13.507 [DEBUG] [Thread-14024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:31:13.507 [DEBUG] [Thread-14024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:31:13.522 [INFO] [Thread-14024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:31:13.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:31:14.155 [DEBUG] [Thread-14024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:31:14.155 [DEBUG] [Thread-14024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:31:14.155 [DEBUG] [Thread-14024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:31:14.195 [DEBUG] [Thread-14024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:31:14.195 [DEBUG] [Thread-14024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:31:14.198 [DEBUG] [Thread-14024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:31:14.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:31:14.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:31:14.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:31:14.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:31:14.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:31:14.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:31:14.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.562909 -999.00  +26.90  24.54     17   +0.10 1 1 1 1 1   888    0 27.59 53.99 ----- 28.1 24.5 311.4 30.9 30.8 -27.2 30.4 -27.0 31.2 -23.7 31.7 -24.9
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.562909
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:31:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:31:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:31:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:31:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:31:01', tmtdew=30.54, humidity=12.97, cloud=0.0, wind=22.94, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:30:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:31:14.210 [DEBUG] [Thread-14024] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:31:14.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-25T15:31:14.291 [DEBUG] [Thread-14027] [transport.py] [_log()] starting thread (client mode): 0xb95d7280
2025-12-25T15:31:14.292 [DEBUG] [Thread-14027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:31:14.307 [DEBUG] [Thread-14027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:31:14.307 [INFO] [Thread-14027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] client lang: <none>
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] server lang: <none>
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] kex follows: False
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:31:14.314 [DEBUG] [Thread-14027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:31:14.315 [DEBUG] [Thread-14027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:31:14.315 [DEBUG] [Thread-14027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:31:14.315 [DEBUG] [Thread-14027] [transport.py] [_log()] Compression: none
2025-12-25T15:31:14.315 [DEBUG] [Thread-14027] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:31:14.369 [DEBUG] [Thread-14027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:31:14.369 [DEBUG] [Thread-14027] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:31:14.370 [DEBUG] [Thread-14027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:31:14.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:31:14.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:31:14.427 [DEBUG] [Thread-14027] [transport.py] [_log()] userauth is OK
2025-12-25T15:31:14.427 [DEBUG] [Thread-14027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:31:14.427 [DEBUG] [Thread-14027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:31:14.427 [DEBUG] [Thread-14027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:31:14.427 [DEBUG] [Thread-14027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:31:14.445 [INFO] [Thread-14027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:31:14.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:31:14.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:31:15.256 [DEBUG] [Thread-14027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:31:15.256 [DEBUG] [Thread-14027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:31:15.303 [DEBUG] [Thread-14027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:31:15.303 [DEBUG] [Thread-14027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:31:15.311 [DEBUG] [Thread-14027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:31:15.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:31:15.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-25T15:31:15.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-25T15:31:15.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:31:15.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:31:15.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:31:15.343 [DEBUG] [Thread-14027] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:31:19.592 [DEBUG] [Thread-14029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:34.645 [DEBUG] [Thread-14030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:31:45.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:31:45.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:31:45.735 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:45.736 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:31:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 31, 33), 30.64, 13.01, 0.0, 25.79, 26.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:31:46.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:31:33
2025-12-25T15:31:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:31:46.326 [DEBUG] [Thread-14031] [transport.py] [_log()] starting thread (client mode): 0xb9579b70
2025-12-25T15:31:46.326 [DEBUG] [Thread-14031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:31:46.346 [DEBUG] [Thread-14031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:31:46.346 [INFO] [Thread-14031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] client lang: <none>
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] server lang: <none>
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] kex follows: False
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] Compression: none
2025-12-25T15:31:46.349 [DEBUG] [Thread-14031] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:31:46.368 [DEBUG] [Thread-14031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:31:46.369 [DEBUG] [Thread-14031] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:31:46.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:31:46.370 [DEBUG] [Thread-14031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:31:46.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:31:46.373 [DEBUG] [Thread-14031] [transport.py] [_log()] userauth is OK
2025-12-25T15:31:46.374 [DEBUG] [Thread-14031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:31:46.374 [DEBUG] [Thread-14031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:31:46.374 [DEBUG] [Thread-14031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:31:46.374 [DEBUG] [Thread-14031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:31:46.394 [INFO] [Thread-14031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:31:46.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:31:47.054 [DEBUG] [Thread-14031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:31:47.054 [DEBUG] [Thread-14031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:31:47.054 [DEBUG] [Thread-14031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:31:47.095 [DEBUG] [Thread-14031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:31:47.095 [DEBUG] [Thread-14031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:31:47.099 [DEBUG] [Thread-14031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:31:47.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:31:47.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:31:47.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:31:47.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:31:47.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:31:47.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:31:47.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:31:47.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:31:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:31:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.563255 -999.00  +26.90  25.93     17   +0.10 1 1 1 1 1   888    0 27.62 54.19 ----- 24.1 25.9 307.2 31.6 30.9 -27.8 30.6 -27.2 31.3 -25.3 31.9 -25.5
2025-12-25T15:31:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:31:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:31:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.563255
2025-12-25T15:31:47.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:31:47.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:31:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:31:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:31:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:31:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:31:33', tmtdew=30.64, humidity=13.01, cloud=0.0, wind=25.79, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:31:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:31:47.125 [DEBUG] [Thread-14031] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:31:47.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-25T15:31:47.219 [DEBUG] [Thread-14034] [transport.py] [_log()] starting thread (client mode): 0xb95b2b30
2025-12-25T15:31:47.219 [DEBUG] [Thread-14034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:31:47.233 [DEBUG] [Thread-14034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:31:47.233 [INFO] [Thread-14034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:31:47.241 [DEBUG] [Thread-14034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] client lang: <none>
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] server lang: <none>
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] kex follows: False
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] Compression: none
2025-12-25T15:31:47.242 [DEBUG] [Thread-14034] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:31:47.303 [DEBUG] [Thread-14034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:31:47.304 [DEBUG] [Thread-14034] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:31:47.304 [DEBUG] [Thread-14034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:31:47.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:31:47.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:31:47.363 [DEBUG] [Thread-14034] [transport.py] [_log()] userauth is OK
2025-12-25T15:31:47.364 [DEBUG] [Thread-14034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:31:47.364 [DEBUG] [Thread-14034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:31:47.364 [DEBUG] [Thread-14034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:31:47.364 [DEBUG] [Thread-14034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:31:47.384 [INFO] [Thread-14034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:31:47.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:31:47.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:31:48.270 [DEBUG] [Thread-14034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:31:48.270 [DEBUG] [Thread-14034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:31:48.318 [DEBUG] [Thread-14034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:31:48.318 [DEBUG] [Thread-14034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:31:48.327 [DEBUG] [Thread-14034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:31:48.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:31:48.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:31:48.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-25T15:31:48.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:31:48.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:31:48.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:31:48.368 [DEBUG] [Thread-14034] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:31:49.675 [DEBUG] [Thread-14036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:04.714 [DEBUG] [Thread-14037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:11.042 [DEBUG] [Thread-14038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:32:18.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:32:18.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-25T15:32:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 32, 5), 30.67, 12.74, 0.0, 20.68, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:32:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:32:05
2025-12-25T15:32:19.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:32:19.349 [DEBUG] [Thread-14039] [transport.py] [_log()] starting thread (client mode): 0xb6b002e0
2025-12-25T15:32:19.349 [DEBUG] [Thread-14039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:32:19.368 [DEBUG] [Thread-14039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:32:19.369 [INFO] [Thread-14039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:19.370 [DEBUG] [Thread-14039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] client lang: <none>
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] server lang: <none>
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] kex follows: False
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] Compression: none
2025-12-25T15:32:19.371 [DEBUG] [Thread-14039] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:32:19.379 [DEBUG] [Thread-14039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:32:19.380 [DEBUG] [Thread-14039] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:32:19.380 [DEBUG] [Thread-14039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:32:19.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:32:19.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:32:19.382 [DEBUG] [Thread-14039] [transport.py] [_log()] userauth is OK
2025-12-25T15:32:19.382 [DEBUG] [Thread-14039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:32:19.382 [DEBUG] [Thread-14039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:32:19.382 [DEBUG] [Thread-14039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:32:19.382 [DEBUG] [Thread-14039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:32:19.405 [INFO] [Thread-14039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:32:19.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:32:19.750 [DEBUG] [Thread-14041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:20.060 [DEBUG] [Thread-14039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:32:20.060 [DEBUG] [Thread-14039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:32:20.060 [DEBUG] [Thread-14039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:32:20.101 [DEBUG] [Thread-14039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:32:20.101 [DEBUG] [Thread-14039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:32:20.105 [DEBUG] [Thread-14039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:32:20.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:32:20.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:32:20.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:32:20.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:32:20.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:32:20.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:32:20.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:32:20.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:32:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.563603 -999.00  +27.00  27.32     17   +0.20 1 1 1 1 1   888    0 27.93 59.45 ----- 25.8 27.3 330.9 36.9 30.9 -29.1 30.7 -27.6 31.6 -24.3 31.9 -25.8
2025-12-25T15:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.563603
2025-12-25T15:32:20.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:32:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:32:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:32:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:32:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:32:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:32:05', tmtdew=30.67, humidity=12.74, cloud=0.0, wind=20.68, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:31:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:32:20.131 [DEBUG] [Thread-14039] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:32:20.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-25T15:32:20.222 [DEBUG] [Thread-14043] [transport.py] [_log()] starting thread (client mode): 0xb955b160
2025-12-25T15:32:20.222 [DEBUG] [Thread-14043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:32:20.237 [DEBUG] [Thread-14043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:32:20.238 [INFO] [Thread-14043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:32:20.245 [DEBUG] [Thread-14043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:32:20.245 [DEBUG] [Thread-14043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] client lang: <none>
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] server lang: <none>
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] kex follows: False
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] Compression: none
2025-12-25T15:32:20.246 [DEBUG] [Thread-14043] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:32:20.304 [DEBUG] [Thread-14043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:32:20.304 [DEBUG] [Thread-14043] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:32:20.305 [DEBUG] [Thread-14043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:32:20.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:32:20.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:32:20.363 [DEBUG] [Thread-14043] [transport.py] [_log()] userauth is OK
2025-12-25T15:32:20.363 [DEBUG] [Thread-14043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:32:20.363 [DEBUG] [Thread-14043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:32:20.364 [DEBUG] [Thread-14043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:32:20.364 [DEBUG] [Thread-14043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:32:20.382 [INFO] [Thread-14043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:32:20.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-25T15:32:20.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:32:21.212 [DEBUG] [Thread-14043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:32:21.212 [DEBUG] [Thread-14043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:32:21.261 [DEBUG] [Thread-14043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:32:21.262 [DEBUG] [Thread-14043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:32:21.271 [DEBUG] [Thread-14043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:32:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:32:21.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')
2025-12-25T15:32:21.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-25T15:32:21.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:32:21.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:32:21.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:32:21.310 [DEBUG] [Thread-14043] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:32:34.782 [DEBUG] [Thread-14045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:45.874 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:45.875 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:49.842 [DEBUG] [Thread-14046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:32:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:32:51.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:32:51.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-25T15:32:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 32, 37), 30.13, 13.29, 0.0, 18.7, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:32:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:32:37
2025-12-25T15:32:52.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:32:52.297 [DEBUG] [Thread-14047] [transport.py] [_log()] starting thread (client mode): 0xb6b00970
2025-12-25T15:32:52.298 [DEBUG] [Thread-14047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:32:52.318 [DEBUG] [Thread-14047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:32:52.318 [INFO] [Thread-14047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:32:52.321 [DEBUG] [Thread-14047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:32:52.321 [DEBUG] [Thread-14047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:32:52.321 [DEBUG] [Thread-14047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:32:52.321 [DEBUG] [Thread-14047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:52.321 [DEBUG] [Thread-14047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:52.321 [DEBUG] [Thread-14047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] client lang: <none>
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] server lang: <none>
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] kex follows: False
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] Compression: none
2025-12-25T15:32:52.322 [DEBUG] [Thread-14047] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:32:52.339 [DEBUG] [Thread-14047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:32:52.340 [DEBUG] [Thread-14047] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:32:52.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:32:52.341 [DEBUG] [Thread-14047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:32:52.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:32:52.343 [DEBUG] [Thread-14047] [transport.py] [_log()] userauth is OK
2025-12-25T15:32:52.343 [DEBUG] [Thread-14047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:32:52.344 [DEBUG] [Thread-14047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:32:52.344 [DEBUG] [Thread-14047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:32:52.344 [DEBUG] [Thread-14047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:32:52.368 [INFO] [Thread-14047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:32:52.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:32:53.009 [DEBUG] [Thread-14047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:32:53.009 [DEBUG] [Thread-14047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:32:53.009 [DEBUG] [Thread-14047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:32:53.050 [DEBUG] [Thread-14047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:32:53.050 [DEBUG] [Thread-14047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:32:53.054 [DEBUG] [Thread-14047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:32:53.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:32:53.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:32:53.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:32:53.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:32:53.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:32:53.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:32:53.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:32:53.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.563950 -999.00  +26.50  22.79     17   +0.20 1 1 1 1 1   888    0 27.91 59.47 ----- 22.4 22.8 324.4 31.5 30.9 -28.8 30.7 -29.4 31.4 -26.6 32.0 -26.4
2025-12-25T15:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.563950
2025-12-25T15:32:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:32:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:32:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:32:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:32:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:32:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:32:37', tmtdew=30.13, humidity=13.29, cloud=0.0, wind=18.7, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:32:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:32:53.089 [DEBUG] [Thread-14047] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:32:53.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-25T15:32:53.184 [DEBUG] [Thread-14050] [transport.py] [_log()] starting thread (client mode): 0xb9593340
2025-12-25T15:32:53.184 [DEBUG] [Thread-14050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:32:53.201 [DEBUG] [Thread-14050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:32:53.201 [INFO] [Thread-14050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:32:53.209 [DEBUG] [Thread-14050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:32:53.209 [DEBUG] [Thread-14050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:32:53.209 [DEBUG] [Thread-14050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:32:53.209 [DEBUG] [Thread-14050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] client lang: <none>
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] server lang: <none>
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] kex follows: False
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] Compression: none
2025-12-25T15:32:53.210 [DEBUG] [Thread-14050] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:32:53.266 [DEBUG] [Thread-14050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:32:53.267 [DEBUG] [Thread-14050] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:32:53.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:32:53.268 [DEBUG] [Thread-14050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:32:53.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:32:53.322 [DEBUG] [Thread-14050] [transport.py] [_log()] userauth is OK
2025-12-25T15:32:53.322 [DEBUG] [Thread-14050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:32:53.322 [DEBUG] [Thread-14050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:32:53.322 [DEBUG] [Thread-14050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:32:53.322 [DEBUG] [Thread-14050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:32:53.342 [INFO] [Thread-14050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:32:53.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-25T15:32:53.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:32:54.181 [DEBUG] [Thread-14050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:32:54.182 [DEBUG] [Thread-14050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:32:54.230 [DEBUG] [Thread-14050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:32:54.230 [DEBUG] [Thread-14050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:32:54.239 [DEBUG] [Thread-14050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:32:54.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:32:54.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:32:54.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:32:54.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:32:54.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:32:54.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:32:54.276 [DEBUG] [Thread-14050] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:33:04.881 [DEBUG] [Thread-14052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:11.090 [DEBUG] [Thread-14053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:19.930 [DEBUG] [Thread-14054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:24.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:33:24.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:33:24.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-25T15:33:24.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 33, 9), 30.25, 13.21, 0.0, 17.52, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:33:24.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:33:09
2025-12-25T15:33:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:33:25.262 [DEBUG] [Thread-14055] [transport.py] [_log()] starting thread (client mode): 0xb95d4e80
2025-12-25T15:33:25.262 [DEBUG] [Thread-14055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:33:25.283 [DEBUG] [Thread-14055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:33:25.283 [INFO] [Thread-14055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:33:25.286 [DEBUG] [Thread-14055] [transport.py] [_log()] client lang: <none>
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] server lang: <none>
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] kex follows: False
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] Compression: none
2025-12-25T15:33:25.287 [DEBUG] [Thread-14055] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:33:25.303 [DEBUG] [Thread-14055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:33:25.303 [DEBUG] [Thread-14055] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:33:25.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:33:25.304 [DEBUG] [Thread-14055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:33:25.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:33:25.307 [DEBUG] [Thread-14055] [transport.py] [_log()] userauth is OK
2025-12-25T15:33:25.307 [DEBUG] [Thread-14055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:33:25.307 [DEBUG] [Thread-14055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:33:25.307 [DEBUG] [Thread-14055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:33:25.307 [DEBUG] [Thread-14055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:33:25.328 [INFO] [Thread-14055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:33:25.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:33:25.994 [DEBUG] [Thread-14055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:33:25.995 [DEBUG] [Thread-14055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:33:25.995 [DEBUG] [Thread-14055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:33:26.035 [DEBUG] [Thread-14055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:33:26.035 [DEBUG] [Thread-14055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:33:26.039 [DEBUG] [Thread-14055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:33:26.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:33:26.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:33:26.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:33:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:33:26.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:33:26.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:33:26.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:33:26.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:33:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:33:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.564297 -999.00  +25.90  15.69     18   +0.00 1 1 1 1 1   888    0 27.75 59.11 ----- 17.2 15.7 341.0 24.9 30.9 -29.0 30.7 -28.7 31.4 -26.1 31.9 -25.8
2025-12-25T15:33:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:33:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:33:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.564297
2025-12-25T15:33:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:33:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:33:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:33:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:33:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:33:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:33:09', tmtdew=30.25, humidity=13.21, cloud=0.0, wind=17.52, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:32:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:33:26.068 [DEBUG] [Thread-14055] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:33:26.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:33:26.162 [DEBUG] [Thread-14058] [transport.py] [_log()] starting thread (client mode): 0xb95d47f0
2025-12-25T15:33:26.162 [DEBUG] [Thread-14058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:33:26.177 [DEBUG] [Thread-14058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:33:26.177 [INFO] [Thread-14058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] client lang: <none>
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] server lang: <none>
2025-12-25T15:33:26.184 [DEBUG] [Thread-14058] [transport.py] [_log()] kex follows: False
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] Compression: none
2025-12-25T15:33:26.185 [DEBUG] [Thread-14058] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:33:26.242 [DEBUG] [Thread-14058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:33:26.242 [DEBUG] [Thread-14058] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:33:26.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:33:26.244 [DEBUG] [Thread-14058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:33:26.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:33:26.298 [DEBUG] [Thread-14058] [transport.py] [_log()] userauth is OK
2025-12-25T15:33:26.299 [DEBUG] [Thread-14058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:33:26.299 [DEBUG] [Thread-14058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:33:26.299 [DEBUG] [Thread-14058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:33:26.299 [DEBUG] [Thread-14058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:33:26.318 [INFO] [Thread-14058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:33:26.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-25T15:33:26.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:33:27.157 [DEBUG] [Thread-14058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:33:27.158 [DEBUG] [Thread-14058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:33:27.206 [DEBUG] [Thread-14058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:33:27.206 [DEBUG] [Thread-14058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:33:27.216 [DEBUG] [Thread-14058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:33:27.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:33:27.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:33: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-25T15:33:27.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:33:27.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:33:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:33:27.250 [DEBUG] [Thread-14058] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:33:34.967 [DEBUG] [Thread-14060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:46.014 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:46.015 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:50.014 [DEBUG] [Thread-14061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:33:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:33:57.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:33:57.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-25T15:33:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 33, 41), 30.91, 12.67, 0.0, 22.6, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:33:57.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:33:41
2025-12-25T15:33:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:33:58.239 [DEBUG] [Thread-14062] [transport.py] [_log()] starting thread (client mode): 0xb6b639a0
2025-12-25T15:33:58.239 [DEBUG] [Thread-14062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:33:58.260 [DEBUG] [Thread-14062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:33:58.260 [INFO] [Thread-14062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] client lang: <none>
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] server lang: <none>
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] kex follows: False
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:33:58.263 [DEBUG] [Thread-14062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:33:58.264 [DEBUG] [Thread-14062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:33:58.264 [DEBUG] [Thread-14062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:33:58.264 [DEBUG] [Thread-14062] [transport.py] [_log()] Compression: none
2025-12-25T15:33:58.264 [DEBUG] [Thread-14062] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:33:58.280 [DEBUG] [Thread-14062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:33:58.280 [DEBUG] [Thread-14062] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:33:58.281 [DEBUG] [Thread-14062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:33:58.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:33:58.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:33:58.282 [DEBUG] [Thread-14062] [transport.py] [_log()] userauth is OK
2025-12-25T15:33:58.283 [DEBUG] [Thread-14062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:33:58.283 [DEBUG] [Thread-14062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:33:58.283 [DEBUG] [Thread-14062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:33:58.283 [DEBUG] [Thread-14062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:33:58.308 [INFO] [Thread-14062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:33:58.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:33:58.917 [DEBUG] [Thread-14062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:33:58.917 [DEBUG] [Thread-14062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:33:58.918 [DEBUG] [Thread-14062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:33:58.958 [DEBUG] [Thread-14062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:33:58.958 [DEBUG] [Thread-14062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:33:58.962 [DEBUG] [Thread-14062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:33:58.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:33:58.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:33:58.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:33:58.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:33:58.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:33:58.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:33:58.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:33:58.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:33:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:33:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.564645 -999.00  +25.60  19.86     17   -0.80 1 1 1 1 1   888    0 27.96 56.40 ----- 23.0 19.9 325.4 30.6 30.9 -29.2 30.5 -28.3 31.4 -25.8 31.9 -26.3
2025-12-25T15:33:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:33:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:33:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.564645
2025-12-25T15:33:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:33:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:33:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:33:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:33:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:33:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:33:41', tmtdew=30.91, humidity=12.67, cloud=0.0, wind=22.6, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:33:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:33:58.988 [DEBUG] [Thread-14062] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:33: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-25T15:33:59.084 [DEBUG] [Thread-14065] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-25T15:33:59.085 [DEBUG] [Thread-14065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:33:59.100 [DEBUG] [Thread-14065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:33:59.100 [INFO] [Thread-14065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:33:59.108 [DEBUG] [Thread-14065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] client lang: <none>
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] server lang: <none>
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] kex follows: False
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] Compression: none
2025-12-25T15:33:59.109 [DEBUG] [Thread-14065] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:33:59.166 [DEBUG] [Thread-14065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:33:59.166 [DEBUG] [Thread-14065] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:33:59.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:33:59.167 [DEBUG] [Thread-14065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:33:59.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:33:59.222 [DEBUG] [Thread-14065] [transport.py] [_log()] userauth is OK
2025-12-25T15:33:59.222 [DEBUG] [Thread-14065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:33:59.223 [DEBUG] [Thread-14065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:33:59.223 [DEBUG] [Thread-14065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:33:59.223 [DEBUG] [Thread-14065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:33:59.241 [INFO] [Thread-14065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:33:59.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:33:59.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:34:00.126 [DEBUG] [Thread-14065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:34:00.126 [DEBUG] [Thread-14065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:34:00.174 [DEBUG] [Thread-14065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:34:00.174 [DEBUG] [Thread-14065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:34:00.183 [DEBUG] [Thread-14065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:34:00.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:34:00.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-25T15:34:00.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-25T15:34:00.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:34:00.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:34:00.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:34:00.219 [DEBUG] [Thread-14065] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:34:05.046 [DEBUG] [Thread-14067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:34:11.142 [DEBUG] [Thread-14068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:34:20.098 [DEBUG] [Thread-14069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:34:30.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:34:30.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:34:30.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:34:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 34, 13), 30.89, 12.67, 0.0, 21.81, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:34:30.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:34:13
2025-12-25T15:34:31.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:34:31.225 [DEBUG] [Thread-14070] [transport.py] [_log()] starting thread (client mode): 0xb6b62a10
2025-12-25T15:34:31.225 [DEBUG] [Thread-14070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:34:31.245 [DEBUG] [Thread-14070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:34:31.245 [INFO] [Thread-14070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:34:31.248 [DEBUG] [Thread-14070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] client lang: <none>
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] server lang: <none>
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] kex follows: False
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] Compression: none
2025-12-25T15:34:31.249 [DEBUG] [Thread-14070] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:34:31.266 [DEBUG] [Thread-14070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:34:31.266 [DEBUG] [Thread-14070] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:34:31.267 [DEBUG] [Thread-14070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:34:31.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:34:31.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:34:31.269 [DEBUG] [Thread-14070] [transport.py] [_log()] userauth is OK
2025-12-25T15:34:31.269 [DEBUG] [Thread-14070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:34:31.269 [DEBUG] [Thread-14070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:34:31.269 [DEBUG] [Thread-14070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:34:31.270 [DEBUG] [Thread-14070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:34:31.287 [INFO] [Thread-14070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:34:31.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:34:31.918 [DEBUG] [Thread-14070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:34:31.918 [DEBUG] [Thread-14070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:34:31.919 [DEBUG] [Thread-14070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:34:31.959 [DEBUG] [Thread-14070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:34:31.959 [DEBUG] [Thread-14070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:34:31.962 [DEBUG] [Thread-14070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:34:31.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:34:31.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:34:31.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:34:31.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:34:31.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:34:31.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:34:31.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:34:31.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:34:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:34:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.564992 -999.00  +26.20  22.49     17   -0.30 1 1 1 1 1   888    0 27.75 59.24 ----- 30.9 22.5 315.4 31.9 30.8 -28.6 30.5 -27.9 31.4 -26.9 31.9 -27.0
2025-12-25T15:34:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:34:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:34:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.564992
2025-12-25T15:34:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:34:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:34:31.989 [DEBUG] [Thread-14070] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:34:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:34:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:34:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:34:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:34:13', tmtdew=30.89, humidity=12.67, cloud=0.0, wind=21.81, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:33:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:34:32.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-25T15:34:32.086 [DEBUG] [Thread-14073] [transport.py] [_log()] starting thread (client mode): 0xb9592380
2025-12-25T15:34:32.086 [DEBUG] [Thread-14073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:34:32.101 [DEBUG] [Thread-14073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:34:32.101 [INFO] [Thread-14073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:34:32.108 [DEBUG] [Thread-14073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] client lang: <none>
2025-12-25T15:34:32.109 [DEBUG] [Thread-14073] [transport.py] [_log()] server lang: <none>
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] kex follows: False
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] Compression: none
2025-12-25T15:34:32.110 [DEBUG] [Thread-14073] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:34:32.164 [DEBUG] [Thread-14073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:34:32.165 [DEBUG] [Thread-14073] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:34:32.165 [DEBUG] [Thread-14073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:34:32.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:34:32.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:34:32.221 [DEBUG] [Thread-14073] [transport.py] [_log()] userauth is OK
2025-12-25T15:34:32.221 [DEBUG] [Thread-14073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:34:32.221 [DEBUG] [Thread-14073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:34:32.221 [DEBUG] [Thread-14073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:34:32.221 [DEBUG] [Thread-14073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:34:32.244 [INFO] [Thread-14073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:34:32.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-25T15:34:32.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:34:33.059 [DEBUG] [Thread-14073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:34:33.059 [DEBUG] [Thread-14073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:34:33.107 [DEBUG] [Thread-14073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:34:33.107 [DEBUG] [Thread-14073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:34:33.116 [DEBUG] [Thread-14073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:34:33.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:34:33.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:34:33.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-25T15:34:33.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:34:33.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:34:33.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:34:33.150 [DEBUG] [Thread-14073] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:34:35.129 [DEBUG] [Thread-14075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:34:46.152 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:34:46.154 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:34:50.181 [DEBUG] [Thread-14076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:35:03.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:35:03.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:35:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 34, 45), 31.51, 12.19, 0.0, 30.98, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:35:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:34:45
2025-12-25T15:35:04.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:35:04.200 [DEBUG] [Thread-14077] [transport.py] [_log()] starting thread (client mode): 0xb95927a0
2025-12-25T15:35:04.200 [DEBUG] [Thread-14077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:35:04.216 [DEBUG] [Thread-14077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:35:04.216 [INFO] [Thread-14077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] client lang: <none>
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] server lang: <none>
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] kex follows: False
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] Compression: none
2025-12-25T15:35:04.217 [DEBUG] [Thread-14077] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:35:04.225 [DEBUG] [Thread-14077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:35:04.226 [DEBUG] [Thread-14077] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:35:04.226 [DEBUG] [Thread-14077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:35:04.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:35:04.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:35:04.227 [DEBUG] [Thread-14077] [transport.py] [_log()] userauth is OK
2025-12-25T15:35:04.227 [DEBUG] [Thread-14077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:35:04.227 [DEBUG] [Thread-14077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:35:04.227 [DEBUG] [Thread-14077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:35:04.227 [DEBUG] [Thread-14077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:35:04.240 [INFO] [Thread-14077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:35:04.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:35:04.911 [DEBUG] [Thread-14077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:35:04.911 [DEBUG] [Thread-14077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:35:04.911 [DEBUG] [Thread-14077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:35:04.952 [DEBUG] [Thread-14077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:35:04.952 [DEBUG] [Thread-14077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:35:04.954 [DEBUG] [Thread-14077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:35:04.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:35:04.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:35:04.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:35:04.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:35:04.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:35:04.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:35:04.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.565686 -999.00  +24.90  25.80     17   -1.00 1 1 1 1 1   888    0 27.59 56.08 ----- 28.9 25.8 275.9 44.0 30.2 -30.8 30.2 -29.5 30.3 -30.3 31.4 -28.1
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.565686
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:35:04.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:34:45', tmtdew=31.51, humidity=12.19, cloud=0.0, wind=30.98, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:34:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:35:04.975 [DEBUG] [Thread-14077] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:35:05.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-25T15:35:05.059 [DEBUG] [Thread-14080] [transport.py] [_log()] starting thread (client mode): 0xb6b21450
2025-12-25T15:35:05.059 [DEBUG] [Thread-14080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:35:05.073 [DEBUG] [Thread-14080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:35:05.073 [INFO] [Thread-14080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] client lang: <none>
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] server lang: <none>
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] kex follows: False
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] Compression: none
2025-12-25T15:35:05.081 [DEBUG] [Thread-14080] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:35:05.136 [DEBUG] [Thread-14080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:35:05.136 [DEBUG] [Thread-14080] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:35:05.136 [DEBUG] [Thread-14080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:35:05.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:35:05.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:35:05.196 [DEBUG] [Thread-14080] [transport.py] [_log()] userauth is OK
2025-12-25T15:35:05.196 [DEBUG] [Thread-14080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:35:05.196 [DEBUG] [Thread-14080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:35:05.196 [DEBUG] [Thread-14080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:35:05.196 [DEBUG] [Thread-14080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:35:05.210 [INFO] [Thread-14080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:35:05.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-25T15:35:05.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:35:05.215 [DEBUG] [Thread-14082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:06.014 [DEBUG] [Thread-14080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:35:06.014 [DEBUG] [Thread-14080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:35:06.062 [DEBUG] [Thread-14080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:35:06.062 [DEBUG] [Thread-14080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:35:06.070 [DEBUG] [Thread-14080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:35:06.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:35:06.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-25T15:35:06.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-25T15:35:06.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:35:06.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:35:06.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:35:06.102 [DEBUG] [Thread-14080] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:35:11.206 [DEBUG] [Thread-14083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:20.255 [DEBUG] [Thread-14084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:35.296 [DEBUG] [Thread-14085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:36.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:35:36.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:35:36.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-25T15:35:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 35, 17), 31.61, 12.13, 0.0, 32.96, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:35:36.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:35:17
2025-12-25T15:35:36.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:35:37.085 [DEBUG] [Thread-14086] [transport.py] [_log()] starting thread (client mode): 0xb6b03f70
2025-12-25T15:35:37.086 [DEBUG] [Thread-14086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:35:37.106 [DEBUG] [Thread-14086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:35:37.106 [INFO] [Thread-14086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:35:37.109 [DEBUG] [Thread-14086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] client lang: <none>
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] server lang: <none>
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] kex follows: False
2025-12-25T15:35:37.110 [DEBUG] [Thread-14086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:35:37.111 [DEBUG] [Thread-14086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:35:37.111 [DEBUG] [Thread-14086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:35:37.111 [DEBUG] [Thread-14086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:35:37.111 [DEBUG] [Thread-14086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:35:37.111 [DEBUG] [Thread-14086] [transport.py] [_log()] Compression: none
2025-12-25T15:35:37.111 [DEBUG] [Thread-14086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:35:37.129 [DEBUG] [Thread-14086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:35:37.129 [DEBUG] [Thread-14086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:35:37.129 [DEBUG] [Thread-14086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:35:37.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:35:37.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:35:37.130 [DEBUG] [Thread-14086] [transport.py] [_log()] userauth is OK
2025-12-25T15:35:37.130 [DEBUG] [Thread-14086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:35:37.130 [DEBUG] [Thread-14086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:35:37.130 [DEBUG] [Thread-14086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:35:37.130 [DEBUG] [Thread-14086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:35:37.153 [INFO] [Thread-14086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:35:37.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:35:37.797 [DEBUG] [Thread-14086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:35:37.797 [DEBUG] [Thread-14086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:35:37.797 [DEBUG] [Thread-14086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:35:37.838 [DEBUG] [Thread-14086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:35:37.838 [DEBUG] [Thread-14086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:35:37.842 [DEBUG] [Thread-14086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:35:37.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:35:37.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:35:37.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:35:37.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:35:37.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:35:37.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:35:37.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:35:37.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:35:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:35:37.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.566033 -999.00  +25.20  22.56     17   -0.90 1 1 1 1 1   888    0 27.90 56.82 ----- 18.5 22.6 289.0 34.5 30.4 -28.0 30.1 -29.2 30.4 -28.0 31.3 -26.7
2025-12-25T15:35:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:35:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:35:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.566033
2025-12-25T15:35:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:35:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:35:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:35:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:35:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:35:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:35:17', tmtdew=31.61, humidity=12.13, cloud=0.0, wind=32.96, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:35:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:35:37.869 [DEBUG] [Thread-14086] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:35:37.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:35:37.966 [DEBUG] [Thread-14089] [transport.py] [_log()] starting thread (client mode): 0xb6b62110
2025-12-25T15:35:37.966 [DEBUG] [Thread-14089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:35:37.986 [DEBUG] [Thread-14089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:35:37.986 [INFO] [Thread-14089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:35:37.997 [DEBUG] [Thread-14089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:35:37.998 [DEBUG] [Thread-14089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] client lang: <none>
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] server lang: <none>
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] kex follows: False
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:35:37.999 [DEBUG] [Thread-14089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:35:38.000 [DEBUG] [Thread-14089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:35:38.000 [DEBUG] [Thread-14089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:35:38.000 [DEBUG] [Thread-14089] [transport.py] [_log()] Compression: none
2025-12-25T15:35:38.000 [DEBUG] [Thread-14089] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:35:38.053 [DEBUG] [Thread-14089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:35:38.054 [DEBUG] [Thread-14089] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:35:38.054 [DEBUG] [Thread-14089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:35:38.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:35:38.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:35:38.109 [DEBUG] [Thread-14089] [transport.py] [_log()] userauth is OK
2025-12-25T15:35:38.109 [DEBUG] [Thread-14089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:35:38.109 [DEBUG] [Thread-14089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:35:38.109 [DEBUG] [Thread-14089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:35:38.109 [DEBUG] [Thread-14089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:35:38.128 [INFO] [Thread-14089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:35:38.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-25T15:35:38.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:35:38.957 [DEBUG] [Thread-14089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:35:38.957 [DEBUG] [Thread-14089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:35:39.005 [DEBUG] [Thread-14089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:35:39.005 [DEBUG] [Thread-14089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:35:39.014 [DEBUG] [Thread-14089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:35:39.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:35:39.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-25T15:35:39.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:35:39.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:35:39.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:35:39.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:35:39.051 [DEBUG] [Thread-14089] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:35:46.293 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:46.294 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:35:50.327 [DEBUG] [Thread-14091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:05.369 [DEBUG] [Thread-14092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:09.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:36:09.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:36:09.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-25T15:36:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 35, 49), 31.71, 11.98, 0.0, 24.1, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:36:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:35:49
2025-12-25T15:36:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:36:10.039 [DEBUG] [Thread-14093] [transport.py] [_log()] starting thread (client mode): 0xb95d7eb0
2025-12-25T15:36:10.039 [DEBUG] [Thread-14093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:36:10.059 [DEBUG] [Thread-14093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:36:10.059 [INFO] [Thread-14093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] client lang: <none>
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] server lang: <none>
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] kex follows: False
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] Compression: none
2025-12-25T15:36:10.060 [DEBUG] [Thread-14093] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:36:10.077 [DEBUG] [Thread-14093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:36:10.078 [DEBUG] [Thread-14093] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:36:10.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:36:10.079 [DEBUG] [Thread-14093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:36:10.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:36:10.081 [DEBUG] [Thread-14093] [transport.py] [_log()] userauth is OK
2025-12-25T15:36:10.081 [DEBUG] [Thread-14093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:36:10.081 [DEBUG] [Thread-14093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:36:10.081 [DEBUG] [Thread-14093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:36:10.081 [DEBUG] [Thread-14093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:36:10.105 [INFO] [Thread-14093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:36:10.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:36:10.746 [DEBUG] [Thread-14093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:36:10.746 [DEBUG] [Thread-14093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:36:10.747 [DEBUG] [Thread-14093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:36:10.787 [DEBUG] [Thread-14093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:36:10.788 [DEBUG] [Thread-14093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:36:10.791 [DEBUG] [Thread-14093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:36:10.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:36:10.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:36:10.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:36:10.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:36:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:36:10.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:36:10.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:36:10.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:36:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:36:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.566381 -999.00  +25.30  24.93     17   -1.40 1 1 1 1 1   888    0 28.04 56.85 ----- 28.2 24.9 294.6 26.8 30.4 -29.7 30.2 -28.3 30.7 -25.4 31.4 -26.5
2025-12-25T15:36:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:36:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:36:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.566381
2025-12-25T15:36:10.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:36:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:36:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:36:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:36:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:36:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:35:49', tmtdew=31.71, humidity=11.98, cloud=0.0, wind=24.1, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:35:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:36:10.818 [DEBUG] [Thread-14093] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:36:10.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-25T15:36:10.912 [DEBUG] [Thread-14096] [transport.py] [_log()] starting thread (client mode): 0xb95d6320
2025-12-25T15:36:10.912 [DEBUG] [Thread-14096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:36:10.927 [DEBUG] [Thread-14096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:36:10.927 [INFO] [Thread-14096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] client lang: <none>
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] server lang: <none>
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] kex follows: False
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:36:10.935 [DEBUG] [Thread-14096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:36:10.936 [DEBUG] [Thread-14096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:36:10.936 [DEBUG] [Thread-14096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:36:10.936 [DEBUG] [Thread-14096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:36:10.936 [DEBUG] [Thread-14096] [transport.py] [_log()] Compression: none
2025-12-25T15:36:10.936 [DEBUG] [Thread-14096] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:36:10.991 [DEBUG] [Thread-14096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:36:10.991 [DEBUG] [Thread-14096] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:36:10.991 [DEBUG] [Thread-14096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:36:10.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:36:10.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:36:11.048 [DEBUG] [Thread-14096] [transport.py] [_log()] userauth is OK
2025-12-25T15:36:11.049 [DEBUG] [Thread-14096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:36:11.049 [DEBUG] [Thread-14096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:36:11.049 [DEBUG] [Thread-14096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:36:11.049 [DEBUG] [Thread-14096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:36:11.069 [INFO] [Thread-14096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:36:11.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-25T15:36:11.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:36:11.267 [DEBUG] [Thread-14098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:11.933 [DEBUG] [Thread-14096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:36:11.934 [DEBUG] [Thread-14096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:36:11.982 [DEBUG] [Thread-14096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:36:11.982 [DEBUG] [Thread-14096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:36:11.991 [DEBUG] [Thread-14096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:36:12.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:36:12.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-25T15:36:12.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:36:12.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:36:12.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:36:12.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:36:12.028 [DEBUG] [Thread-14096] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:36:20.403 [DEBUG] [Thread-14099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:35.453 [DEBUG] [Thread-14100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:42.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:36:42.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:36:42.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:36:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 36, 21), 31.76, 11.96, 0.0, 26.45, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:36:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:36:21
2025-12-25T15:36:42.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:36:42.997 [DEBUG] [Thread-14101] [transport.py] [_log()] starting thread (client mode): 0xb955b1c0
2025-12-25T15:36:42.998 [DEBUG] [Thread-14101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:36:43.019 [DEBUG] [Thread-14101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:36:43.019 [INFO] [Thread-14101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] client lang: <none>
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] server lang: <none>
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] kex follows: False
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:36:43.023 [DEBUG] [Thread-14101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:36:43.024 [DEBUG] [Thread-14101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:36:43.024 [DEBUG] [Thread-14101] [transport.py] [_log()] Compression: none
2025-12-25T15:36:43.024 [DEBUG] [Thread-14101] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:36:43.040 [DEBUG] [Thread-14101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:36:43.040 [DEBUG] [Thread-14101] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:36:43.041 [DEBUG] [Thread-14101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:36:43.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:36:43.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:36:43.043 [DEBUG] [Thread-14101] [transport.py] [_log()] userauth is OK
2025-12-25T15:36:43.043 [DEBUG] [Thread-14101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:36:43.043 [DEBUG] [Thread-14101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:36:43.043 [DEBUG] [Thread-14101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:36:43.043 [DEBUG] [Thread-14101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:36:43.066 [INFO] [Thread-14101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:36:43.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:36:43.699 [DEBUG] [Thread-14101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:36:43.699 [DEBUG] [Thread-14101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:36:43.700 [DEBUG] [Thread-14101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:36:43.740 [DEBUG] [Thread-14101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:36:43.740 [DEBUG] [Thread-14101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:36:43.743 [DEBUG] [Thread-14101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:36:43.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:36:43.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:36:43.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:36:43.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:36:43.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:36:43.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:36:43.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:36:43.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:36:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:36:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.566728 -999.00  +25.60  24.41     17   -1.10 1 1 1 1 1   888    0 27.84 54.46 ----- 25.0 24.4 282.7 35.5 30.5 -27.7 30.2 -28.2 30.6 -28.7 31.4 -25.6
2025-12-25T15:36:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:36:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:36:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.566728
2025-12-25T15:36:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:36:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:36:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:36:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:36:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:36:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:36:21', tmtdew=31.76, humidity=11.96, cloud=0.0, wind=26.45, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:36:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:36:43.768 [DEBUG] [Thread-14101] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:36:43.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-25T15:36:43.860 [DEBUG] [Thread-14104] [transport.py] [_log()] starting thread (client mode): 0xb9579270
2025-12-25T15:36:43.860 [DEBUG] [Thread-14104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:36:43.879 [DEBUG] [Thread-14104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:36:43.879 [INFO] [Thread-14104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:36:43.886 [DEBUG] [Thread-14104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:36:43.886 [DEBUG] [Thread-14104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:36:43.886 [DEBUG] [Thread-14104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:36:43.886 [DEBUG] [Thread-14104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:43.886 [DEBUG] [Thread-14104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:36:43.886 [DEBUG] [Thread-14104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] client lang: <none>
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] server lang: <none>
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] kex follows: False
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] Compression: none
2025-12-25T15:36:43.887 [DEBUG] [Thread-14104] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:36:43.943 [DEBUG] [Thread-14104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:36:43.944 [DEBUG] [Thread-14104] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:36:43.944 [DEBUG] [Thread-14104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:36:43.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:36:43.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:36:44.000 [DEBUG] [Thread-14104] [transport.py] [_log()] userauth is OK
2025-12-25T15:36:44.000 [DEBUG] [Thread-14104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:36:44.000 [DEBUG] [Thread-14104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:36:44.000 [DEBUG] [Thread-14104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:36:44.000 [DEBUG] [Thread-14104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:36:44.020 [INFO] [Thread-14104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:36:44.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-25T15:36:44.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:36:44.853 [DEBUG] [Thread-14104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:36:44.853 [DEBUG] [Thread-14104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:36:44.901 [DEBUG] [Thread-14104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:36:44.902 [DEBUG] [Thread-14104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:36:44.910 [DEBUG] [Thread-14104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:36:44.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:36:44.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:36:44.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:36:44.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:36:44.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:36:44.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:36:44.944 [DEBUG] [Thread-14104] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:36:46.434 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:46.435 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:36:50.487 [DEBUG] [Thread-14106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:05.530 [DEBUG] [Thread-14107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:11.322 [DEBUG] [Thread-14108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:14.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:37:14.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:37:14.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-25T15:37:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 36, 53), 32.01, 11.84, 0.0, 41.22, 27.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:37:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:36:53
2025-12-25T15:37:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:37:15.942 [DEBUG] [Thread-14109] [transport.py] [_log()] starting thread (client mode): 0xb6b22560
2025-12-25T15:37:15.942 [DEBUG] [Thread-14109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:37:15.963 [DEBUG] [Thread-14109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:37:15.964 [INFO] [Thread-14109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] client lang: <none>
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] server lang: <none>
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] kex follows: False
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] Compression: none
2025-12-25T15:37:15.965 [DEBUG] [Thread-14109] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:37:15.983 [DEBUG] [Thread-14109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:37:15.983 [DEBUG] [Thread-14109] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:37:15.984 [DEBUG] [Thread-14109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:37:15.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:37:15.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:37:15.986 [DEBUG] [Thread-14109] [transport.py] [_log()] userauth is OK
2025-12-25T15:37:15.986 [DEBUG] [Thread-14109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:37:15.986 [DEBUG] [Thread-14109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:37:15.986 [DEBUG] [Thread-14109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:37:15.986 [DEBUG] [Thread-14109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:37:16.005 [INFO] [Thread-14109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:37:16.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:37:16.606 [DEBUG] [Thread-14109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:37:16.606 [DEBUG] [Thread-14109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:37:16.607 [DEBUG] [Thread-14109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:37:16.647 [DEBUG] [Thread-14109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:37:16.647 [DEBUG] [Thread-14109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:37:16.651 [DEBUG] [Thread-14109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:37:16.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:37:16.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:37:16.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:37:16.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:37:16.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:37:16.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:37:16.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:37:16.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:37:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:37:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.567075 -999.00  +26.10  25.78     17   -0.10 1 1 1 1 1   888    0 27.69 51.06 ----- 42.2 25.8 270.3 39.0 30.3 -29.8 30.2 -28.1 30.9 -25.3 31.5 -26.4
2025-12-25T15:37:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:37:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:37:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.567075
2025-12-25T15:37:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:37:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:37:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:37:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:37:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:37:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:36:53', tmtdew=32.01, humidity=11.84, cloud=0.0, wind=41.22, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:36:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:37:16.679 [DEBUG] [Thread-14109] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:37:16.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-25T15:37:16.772 [DEBUG] [Thread-14112] [transport.py] [_log()] starting thread (client mode): 0xb6b228f0
2025-12-25T15:37:16.772 [DEBUG] [Thread-14112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:37:16.786 [DEBUG] [Thread-14112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:37:16.786 [INFO] [Thread-14112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:16.794 [DEBUG] [Thread-14112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] client lang: <none>
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] server lang: <none>
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] kex follows: False
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:37:16.795 [DEBUG] [Thread-14112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:37:16.796 [DEBUG] [Thread-14112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:37:16.796 [DEBUG] [Thread-14112] [transport.py] [_log()] Compression: none
2025-12-25T15:37:16.796 [DEBUG] [Thread-14112] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:37:16.854 [DEBUG] [Thread-14112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:37:16.854 [DEBUG] [Thread-14112] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:37:16.855 [DEBUG] [Thread-14112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:37:16.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:37:16.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:37:16.912 [DEBUG] [Thread-14112] [transport.py] [_log()] userauth is OK
2025-12-25T15:37:16.913 [DEBUG] [Thread-14112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:37:16.913 [DEBUG] [Thread-14112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:37:16.913 [DEBUG] [Thread-14112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:37:16.913 [DEBUG] [Thread-14112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:37:16.938 [INFO] [Thread-14112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:37:16.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-25T15:37:16.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:37:17.809 [DEBUG] [Thread-14112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:37:17.810 [DEBUG] [Thread-14112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:37:17.858 [DEBUG] [Thread-14112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:37:17.858 [DEBUG] [Thread-14112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:37:17.867 [DEBUG] [Thread-14112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:37:17.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:37: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')
2025-12-25T15:37:17.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-25T15:37:17.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:37:17.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:37:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:37:17.905 [DEBUG] [Thread-14112] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:37:20.565 [DEBUG] [Thread-14114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:35.614 [DEBUG] [Thread-14115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:46.576 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:46.577 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:47.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:37:47.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:37:47.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-25T15:37:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 37, 26), 31.77, 12.02, 0.0, 41.02, 26.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:37:48.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:37:26
2025-12-25T15:37:48.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:37:48.884 [DEBUG] [Thread-14116] [transport.py] [_log()] starting thread (client mode): 0xb6b22a40
2025-12-25T15:37:48.885 [DEBUG] [Thread-14116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:37:48.900 [DEBUG] [Thread-14116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:37:48.900 [INFO] [Thread-14116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] client lang: <none>
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] server lang: <none>
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] kex follows: False
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:37:48.903 [DEBUG] [Thread-14116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:37:48.904 [DEBUG] [Thread-14116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:37:48.904 [DEBUG] [Thread-14116] [transport.py] [_log()] Compression: none
2025-12-25T15:37:48.904 [DEBUG] [Thread-14116] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:37:48.920 [DEBUG] [Thread-14116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:37:48.920 [DEBUG] [Thread-14116] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:37:48.921 [DEBUG] [Thread-14116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:37:48.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:37:48.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:37:48.923 [DEBUG] [Thread-14116] [transport.py] [_log()] userauth is OK
2025-12-25T15:37:48.923 [DEBUG] [Thread-14116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:37:48.923 [DEBUG] [Thread-14116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:37:48.923 [DEBUG] [Thread-14116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:37:48.923 [DEBUG] [Thread-14116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:37:48.944 [INFO] [Thread-14116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:37:48.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:37:49.573 [DEBUG] [Thread-14116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:37:49.573 [DEBUG] [Thread-14116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:37:49.573 [DEBUG] [Thread-14116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:37:49.614 [DEBUG] [Thread-14116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:37:49.614 [DEBUG] [Thread-14116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:37:49.618 [DEBUG] [Thread-14116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:37:49.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:37:49.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:37:49.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:37:49.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:37:49.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:37:49.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:37:49.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:37:49.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:37:49.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:37:49.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.567422 -999.00  +26.20  29.61     18   +0.20 1 1 1 1 1   888    0 27.66 48.86 ----- 35.6 29.6 292.4 49.6 30.4 -27.9 30.2 -28.4 30.7 -26.4 31.3 -25.9
2025-12-25T15:37:49.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:37:49.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:37:49.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.567422
2025-12-25T15:37:49.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:37:49.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:37:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:37:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:37:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:37:49.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:37:26', tmtdew=31.77, humidity=12.02, cloud=0.0, wind=41.02, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:37:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:37:49.644 [DEBUG] [Thread-14116] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:37:49.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-25T15:37:49.738 [DEBUG] [Thread-14119] [transport.py] [_log()] starting thread (client mode): 0xb6b217e0
2025-12-25T15:37:49.738 [DEBUG] [Thread-14119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:37:49.752 [DEBUG] [Thread-14119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:37:49.752 [INFO] [Thread-14119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] client lang: <none>
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] server lang: <none>
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] kex follows: False
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:37:49.760 [DEBUG] [Thread-14119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:37:49.761 [DEBUG] [Thread-14119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:37:49.761 [DEBUG] [Thread-14119] [transport.py] [_log()] Compression: none
2025-12-25T15:37:49.761 [DEBUG] [Thread-14119] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:37:49.824 [DEBUG] [Thread-14119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:37:49.825 [DEBUG] [Thread-14119] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:37:49.825 [DEBUG] [Thread-14119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:37:49.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:37:49.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:37:49.880 [DEBUG] [Thread-14119] [transport.py] [_log()] userauth is OK
2025-12-25T15:37:49.881 [DEBUG] [Thread-14119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:37:49.881 [DEBUG] [Thread-14119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:37:49.881 [DEBUG] [Thread-14119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:37:49.881 [DEBUG] [Thread-14119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:37:49.899 [INFO] [Thread-14119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:37:49.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:37:49.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:37:50.646 [DEBUG] [Thread-14121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:37:50.741 [DEBUG] [Thread-14119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:37:50.741 [DEBUG] [Thread-14119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:37:50.789 [DEBUG] [Thread-14119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:37:50.789 [DEBUG] [Thread-14119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:37:50.798 [DEBUG] [Thread-14119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:37:50.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:37:50.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-25T15:37:50.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:37:50.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:37:50.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:37:50.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:37:50.833 [DEBUG] [Thread-14119] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:38:05.698 [DEBUG] [Thread-14122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:11.388 [DEBUG] [Thread-14123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:20.731 [DEBUG] [Thread-14124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:20.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:38:20.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:38:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:38:21.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 37, 58), 30.83, 12.71, 0.0, 31.32, 26.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:38:21.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:37:58
2025-12-25T15:38:21.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:38:21.875 [DEBUG] [Thread-14125] [transport.py] [_log()] starting thread (client mode): 0xb6b21de0
2025-12-25T15:38:21.875 [DEBUG] [Thread-14125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:38:21.895 [DEBUG] [Thread-14125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:38:21.895 [INFO] [Thread-14125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] client lang: <none>
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] server lang: <none>
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] kex follows: False
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:38:21.898 [DEBUG] [Thread-14125] [transport.py] [_log()] Compression: none
2025-12-25T15:38:21.899 [DEBUG] [Thread-14125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:38:21.905 [DEBUG] [Thread-14125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:38:21.906 [DEBUG] [Thread-14125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:38:21.906 [DEBUG] [Thread-14125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:38:21.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:38:21.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:38:21.907 [DEBUG] [Thread-14125] [transport.py] [_log()] userauth is OK
2025-12-25T15:38:21.907 [DEBUG] [Thread-14125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:38:21.907 [DEBUG] [Thread-14125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:38:21.907 [DEBUG] [Thread-14125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:38:21.907 [DEBUG] [Thread-14125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:38:21.934 [INFO] [Thread-14125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:38:21.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:38:22.491 [DEBUG] [Thread-14125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:38:22.491 [DEBUG] [Thread-14125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:38:22.491 [DEBUG] [Thread-14125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:38:22.531 [DEBUG] [Thread-14125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:38:22.531 [DEBUG] [Thread-14125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:38:22.534 [DEBUG] [Thread-14125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:38:22.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:38:22.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:38:22.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:38:22.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:38:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:38:22.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:38:22.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:38:22.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.567770 -999.00  +26.20  25.98     18   +0.60 1 1 1 1 1   888    0 27.42 42.36 ----- 34.6 26.0 292.5 39.4 30.4 -27.6 30.2 -28.1 30.9 -25.4 31.4 -26.3
2025-12-25T15:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.567770
2025-12-25T15:38:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:38:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:38:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:38:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:38:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:38:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:37:58', tmtdew=30.83, humidity=12.71, cloud=0.0, wind=31.32, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:37:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:38:22.555 [DEBUG] [Thread-14125] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:38:22.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:38:22.651 [DEBUG] [Thread-14128] [transport.py] [_log()] starting thread (client mode): 0xb957bd60
2025-12-25T15:38:22.652 [DEBUG] [Thread-14128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:38:22.667 [DEBUG] [Thread-14128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:38:22.667 [INFO] [Thread-14128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] client lang: <none>
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] server lang: <none>
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] kex follows: False
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] Compression: none
2025-12-25T15:38:22.675 [DEBUG] [Thread-14128] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:38:22.734 [DEBUG] [Thread-14128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:38:22.734 [DEBUG] [Thread-14128] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:38:22.734 [DEBUG] [Thread-14128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:38:22.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:38:22.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:38:22.791 [DEBUG] [Thread-14128] [transport.py] [_log()] userauth is OK
2025-12-25T15:38:22.791 [DEBUG] [Thread-14128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:38:22.791 [DEBUG] [Thread-14128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:38:22.791 [DEBUG] [Thread-14128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:38:22.791 [DEBUG] [Thread-14128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:38:22.805 [INFO] [Thread-14128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:38:22.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-25T15:38:22.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:38:23.666 [DEBUG] [Thread-14128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:38:23.666 [DEBUG] [Thread-14128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:38:23.713 [DEBUG] [Thread-14128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:38:23.713 [DEBUG] [Thread-14128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:38:23.721 [DEBUG] [Thread-14128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:38:23.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:38:23.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:38:23.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:38:23.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:38:23.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:38:23.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:38:23.753 [DEBUG] [Thread-14128] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:38:35.764 [DEBUG] [Thread-14130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:46.717 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:46.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:50.822 [DEBUG] [Thread-14131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:38:53.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:38:53.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:38:53.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-25T15:38:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 38, 30), 30.75, 12.79, 0.0, 33.75, 26.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:38:54.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:38:30
2025-12-25T15:38:54.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:38:54.763 [DEBUG] [Thread-14132] [transport.py] [_log()] starting thread (client mode): 0xb957ab00
2025-12-25T15:38:54.763 [DEBUG] [Thread-14132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:38:54.783 [DEBUG] [Thread-14132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:38:54.784 [INFO] [Thread-14132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:54.787 [DEBUG] [Thread-14132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] client lang: <none>
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] server lang: <none>
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] kex follows: False
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] Compression: none
2025-12-25T15:38:54.788 [DEBUG] [Thread-14132] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:38:54.806 [DEBUG] [Thread-14132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:38:54.806 [DEBUG] [Thread-14132] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:38:54.806 [DEBUG] [Thread-14132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:38:54.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:38:54.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:38:54.807 [DEBUG] [Thread-14132] [transport.py] [_log()] userauth is OK
2025-12-25T15:38:54.807 [DEBUG] [Thread-14132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:38:54.807 [DEBUG] [Thread-14132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:38:54.807 [DEBUG] [Thread-14132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:38:54.807 [DEBUG] [Thread-14132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:38:54.822 [INFO] [Thread-14132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:38:54.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:38:55.481 [DEBUG] [Thread-14132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:38:55.481 [DEBUG] [Thread-14132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:38:55.481 [DEBUG] [Thread-14132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:38:55.521 [DEBUG] [Thread-14132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:38:55.522 [DEBUG] [Thread-14132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:38:55.524 [DEBUG] [Thread-14132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:38:55.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:38:55.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:38:55.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:38:55.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:38:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:38:55.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:38:55.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:38:55.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:38:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:38:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.568117 -999.00  +26.10  33.43     19   +0.70 1 1 2 1 1   888    0 27.78 37.64 ----- 26.2 33.4 308.2 45.3 30.4 -27.7 30.2 -28.8 30.8 -26.6 31.4 -26.1
2025-12-25T15:38:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:38:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:38:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.568117
2025-12-25T15:38:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:38:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:38:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:38:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:38:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:38:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:38:30', tmtdew=30.75, humidity=12.79, cloud=0.0, wind=33.75, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:38:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:38:55.546 [DEBUG] [Thread-14132] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:38:55.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:38:55.642 [DEBUG] [Thread-14135] [transport.py] [_log()] starting thread (client mode): 0xb6b22e60
2025-12-25T15:38:55.642 [DEBUG] [Thread-14135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:38:55.657 [DEBUG] [Thread-14135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:38:55.657 [INFO] [Thread-14135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] client lang: <none>
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] server lang: <none>
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] kex follows: False
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:38:55.664 [DEBUG] [Thread-14135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:38:55.665 [DEBUG] [Thread-14135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:38:55.665 [DEBUG] [Thread-14135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:38:55.665 [DEBUG] [Thread-14135] [transport.py] [_log()] Compression: none
2025-12-25T15:38:55.665 [DEBUG] [Thread-14135] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:38:55.723 [DEBUG] [Thread-14135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:38:55.723 [DEBUG] [Thread-14135] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:38:55.723 [DEBUG] [Thread-14135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:38:55.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:38:55.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:38:55.779 [DEBUG] [Thread-14135] [transport.py] [_log()] userauth is OK
2025-12-25T15:38:55.779 [DEBUG] [Thread-14135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:38:55.779 [DEBUG] [Thread-14135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:38:55.779 [DEBUG] [Thread-14135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:38:55.780 [DEBUG] [Thread-14135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:38:55.796 [INFO] [Thread-14135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:38:55.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-25T15:38:55.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:38:56.612 [DEBUG] [Thread-14135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:38:56.613 [DEBUG] [Thread-14135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:38:56.661 [DEBUG] [Thread-14135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:38:56.661 [DEBUG] [Thread-14135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:38:56.670 [DEBUG] [Thread-14135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:38:56.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:38:56.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-25T15:38:56.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-25T15:38:56.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:38:56.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:38:56.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:38:56.706 [DEBUG] [Thread-14135] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:39:05.855 [DEBUG] [Thread-14137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:39:11.437 [DEBUG] [Thread-14138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:39:20.904 [DEBUG] [Thread-14139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:39:26.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:39:26.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:39:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:39:27.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 39, 2), 30.71, 12.84, 0.0, 35.87, 26.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:39:27.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:39:02
2025-12-25T15:39:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:39:27.698 [DEBUG] [Thread-14140] [transport.py] [_log()] starting thread (client mode): 0xb6b639a0
2025-12-25T15:39:27.698 [DEBUG] [Thread-14140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:39:27.717 [DEBUG] [Thread-14140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:39:27.717 [INFO] [Thread-14140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] client lang: <none>
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] server lang: <none>
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] kex follows: False
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] Compression: none
2025-12-25T15:39:27.720 [DEBUG] [Thread-14140] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:39:27.730 [DEBUG] [Thread-14140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:39:27.731 [DEBUG] [Thread-14140] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:39:27.731 [DEBUG] [Thread-14140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:39:27.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:39:27.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:39:27.733 [DEBUG] [Thread-14140] [transport.py] [_log()] userauth is OK
2025-12-25T15:39:27.733 [DEBUG] [Thread-14140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:39:27.733 [DEBUG] [Thread-14140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:39:27.733 [DEBUG] [Thread-14140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:39:27.734 [DEBUG] [Thread-14140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:39:27.770 [INFO] [Thread-14140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:39:27.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:39:28.526 [DEBUG] [Thread-14140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:39:28.527 [DEBUG] [Thread-14140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:39:28.527 [DEBUG] [Thread-14140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:39:28.568 [DEBUG] [Thread-14140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:39:28.568 [DEBUG] [Thread-14140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:39:28.571 [DEBUG] [Thread-14140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:39:28.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:39:28.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:39:28.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:39:28.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:39:28.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:39:28.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:39:28.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:39:28.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:39:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:39:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.568464 -999.00  +26.10  29.97     18   +0.50 1 1 1 1 1   888    0 27.31 28.72 ----- 29.8 30.0 299.2 34.0 30.4 -27.3 30.2 -28.0 30.8 -27.3 31.4 -26.5
2025-12-25T15:39:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:39:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:39:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.568464
2025-12-25T15:39:28.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:39:28.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:39:28.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:39:28.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:39:28.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:39:28.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:39:02', tmtdew=30.71, humidity=12.84, cloud=0.0, wind=35.87, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:38:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:39:28.593 [DEBUG] [Thread-14140] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:39:28.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-25T15:39:35.937 [DEBUG] [Thread-14143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:39:46.858 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:39:46.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:39:50.976 [DEBUG] [Thread-14144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:06.013 [DEBUG] [Thread-14145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:11.489 [DEBUG] [Thread-14146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:21.044 [DEBUG] [Thread-14147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:36.081 [DEBUG] [Thread-14148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:46.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:46.999 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:40:51.120 [DEBUG] [Thread-14149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:06.156 [DEBUG] [Thread-14150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:11.538 [DEBUG] [Thread-14151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:21.193 [DEBUG] [Thread-14152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:36.226 [DEBUG] [Thread-14153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:40.437 [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-25T15:41:47.137 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:47.138 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:41:51.260 [DEBUG] [Thread-14154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:06.300 [DEBUG] [Thread-14155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:10.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:42:10.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:42:10.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-25T15:42:11.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 41, 43), 30.77, 12.94, 0.0, 23.8, 26.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:42:11.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:41:43
2025-12-25T15:42:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:42:11.444 [DEBUG] [Thread-14156] [transport.py] [_log()] starting thread (client mode): 0xb95d4d90
2025-12-25T15:42:11.444 [DEBUG] [Thread-14156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:42:11.464 [DEBUG] [Thread-14156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:42:11.465 [INFO] [Thread-14156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] client lang: <none>
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] server lang: <none>
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] kex follows: False
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] Compression: none
2025-12-25T15:42:11.468 [DEBUG] [Thread-14156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:42:11.488 [DEBUG] [Thread-14156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:42:11.488 [DEBUG] [Thread-14156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:42:11.489 [DEBUG] [Thread-14156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:42:11.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:42:11.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:42:11.491 [DEBUG] [Thread-14156] [transport.py] [_log()] userauth is OK
2025-12-25T15:42:11.491 [DEBUG] [Thread-14156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:42:11.491 [DEBUG] [Thread-14156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:42:11.491 [DEBUG] [Thread-14156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:42:11.491 [DEBUG] [Thread-14156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:42:11.516 [INFO] [Thread-14156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:42:11.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:42:11.585 [DEBUG] [Thread-14158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:12.185 [DEBUG] [Thread-14156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:42:12.185 [DEBUG] [Thread-14156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:42:12.185 [DEBUG] [Thread-14156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:42:12.226 [DEBUG] [Thread-14156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:42:12.226 [DEBUG] [Thread-14156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:42:12.228 [DEBUG] [Thread-14156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:42:12.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:42:12.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:42:12.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:42:12.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:42:12.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:42:12.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.570547 -999.00  +26.20  14.16     18   +0.60 1 1 1 1 1   888    0 26.56 -7.79 ----- 16.3 14.2 314.8 26.5 30.6 -27.4 30.3 -27.5 31.2 -23.6 31.6 -25.5
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:42:12.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.570547
2025-12-25T15:42:12.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:42:12.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:42:12.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:42:12.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:42:12.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:42:12.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:41:43', tmtdew=30.77, humidity=12.94, cloud=0.0, wind=23.8, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:41:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:42:12.247 [DEBUG] [Thread-14156] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:42: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-25T15:42:12.331 [DEBUG] [Thread-14160] [transport.py] [_log()] starting thread (client mode): 0xb9578a00
2025-12-25T15:42:12.331 [DEBUG] [Thread-14160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:42:12.346 [DEBUG] [Thread-14160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:42:12.346 [INFO] [Thread-14160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:42:12.353 [DEBUG] [Thread-14160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] client lang: <none>
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] server lang: <none>
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] kex follows: False
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] Compression: none
2025-12-25T15:42:12.354 [DEBUG] [Thread-14160] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:42:12.408 [DEBUG] [Thread-14160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:42:12.408 [DEBUG] [Thread-14160] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:42:12.408 [DEBUG] [Thread-14160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:42:12.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:42:12.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:42:12.466 [DEBUG] [Thread-14160] [transport.py] [_log()] userauth is OK
2025-12-25T15:42:12.466 [DEBUG] [Thread-14160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:42:12.466 [DEBUG] [Thread-14160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:42:12.466 [DEBUG] [Thread-14160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:42:12.466 [DEBUG] [Thread-14160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:42:12.483 [INFO] [Thread-14160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:42: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-25T15:42:12.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:42:13.311 [DEBUG] [Thread-14160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:42:13.311 [DEBUG] [Thread-14160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:42:13.359 [DEBUG] [Thread-14160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:42:13.359 [DEBUG] [Thread-14160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:42:13.368 [DEBUG] [Thread-14160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:42:13.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:42:13.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-25T15:42:13.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-25T15:42:13.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:42:13.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:42:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:42:13.399 [DEBUG] [Thread-14160] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:42:21.337 [DEBUG] [Thread-14162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:36.389 [DEBUG] [Thread-14163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:43.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:42:43.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:42:43.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:42:44.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 42, 15), 30.8, 12.95, 0.0, 24.44, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:42:44.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:42:15
2025-12-25T15:42:44.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:42:44.366 [DEBUG] [Thread-14164] [transport.py] [_log()] starting thread (client mode): 0xb957b310
2025-12-25T15:42:44.366 [DEBUG] [Thread-14164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:42:44.389 [DEBUG] [Thread-14164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:42:44.389 [INFO] [Thread-14164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] client lang: <none>
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] server lang: <none>
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] kex follows: False
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] Compression: none
2025-12-25T15:42:44.391 [DEBUG] [Thread-14164] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:42:44.414 [DEBUG] [Thread-14164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:42:44.415 [DEBUG] [Thread-14164] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:42:44.415 [DEBUG] [Thread-14164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:42:44.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:42:44.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:42:44.417 [DEBUG] [Thread-14164] [transport.py] [_log()] userauth is OK
2025-12-25T15:42:44.418 [DEBUG] [Thread-14164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:42:44.418 [DEBUG] [Thread-14164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:42:44.418 [DEBUG] [Thread-14164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:42:44.418 [DEBUG] [Thread-14164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:42:44.441 [INFO] [Thread-14164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:42:44.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:42:45.206 [DEBUG] [Thread-14164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:42:45.207 [DEBUG] [Thread-14164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:42:45.207 [DEBUG] [Thread-14164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:42:45.248 [DEBUG] [Thread-14164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:42:45.248 [DEBUG] [Thread-14164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:42:45.251 [DEBUG] [Thread-14164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:42:45.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:42:45.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:42:45.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:42:45.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:42:45.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:42:45.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:42:45.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:42:45.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:42:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:42:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.570895 -999.00  +26.60  23.94     18   +0.40 1 1 1 1 1   888    0 25.81 -8.32 ----- 25.3 23.9 295.3 26.6 30.7 -27.8 30.4 -27.0 31.3 -24.0 31.7 -25.2
2025-12-25T15:42:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:42:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:42:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.570895
2025-12-25T15:42:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:42:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:42:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:42:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:42:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:42:45.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:42:15', tmtdew=30.8, humidity=12.95, cloud=0.0, wind=24.44, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:42:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:42:45.277 [DEBUG] [Thread-14164] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:42:45.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-25T15:42:45.371 [DEBUG] [Thread-14167] [transport.py] [_log()] starting thread (client mode): 0xb6b20310
2025-12-25T15:42:45.371 [DEBUG] [Thread-14167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:42:45.386 [DEBUG] [Thread-14167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:42:45.386 [INFO] [Thread-14167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:42:45.394 [DEBUG] [Thread-14167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:42:45.394 [DEBUG] [Thread-14167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:42:45.394 [DEBUG] [Thread-14167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:42:45.394 [DEBUG] [Thread-14167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:45.394 [DEBUG] [Thread-14167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:42:45.394 [DEBUG] [Thread-14167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] client lang: <none>
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] server lang: <none>
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] kex follows: False
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] Compression: none
2025-12-25T15:42:45.395 [DEBUG] [Thread-14167] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:42:45.453 [DEBUG] [Thread-14167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:42:45.454 [DEBUG] [Thread-14167] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:42:45.454 [DEBUG] [Thread-14167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:42:45.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:42:45.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:42:45.510 [DEBUG] [Thread-14167] [transport.py] [_log()] userauth is OK
2025-12-25T15:42:45.510 [DEBUG] [Thread-14167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:42:45.510 [DEBUG] [Thread-14167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:42:45.510 [DEBUG] [Thread-14167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:42:45.510 [DEBUG] [Thread-14167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:42:45.533 [INFO] [Thread-14167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:42:45.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-25T15:42:45.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:42:46.353 [DEBUG] [Thread-14167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:42:46.354 [DEBUG] [Thread-14167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:42:46.402 [DEBUG] [Thread-14167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:42:46.402 [DEBUG] [Thread-14167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:42:46.411 [DEBUG] [Thread-14167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:42:46.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:42:46.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')
2025-12-25T15:42:46.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:42:46.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:42:46.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:42:46.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:42:46.448 [DEBUG] [Thread-14167] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:42:47.275 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:47.276 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:42:51.425 [DEBUG] [Thread-14169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:06.459 [DEBUG] [Thread-14170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:11.640 [DEBUG] [Thread-14171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:16.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:43:16.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:43:16.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:43:17.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 42, 48), 30.69, 13.05, 0.0, 36.54, 26.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:43:17.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:42:48
2025-12-25T15:43:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:43:17.432 [DEBUG] [Thread-14172] [transport.py] [_log()] starting thread (client mode): 0xb6b211e0
2025-12-25T15:43:17.432 [DEBUG] [Thread-14172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:43:17.452 [DEBUG] [Thread-14172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:43:17.452 [INFO] [Thread-14172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:43:17.455 [DEBUG] [Thread-14172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] client lang: <none>
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] server lang: <none>
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] kex follows: False
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:43:17.456 [DEBUG] [Thread-14172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:43:17.457 [DEBUG] [Thread-14172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:43:17.457 [DEBUG] [Thread-14172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:43:17.457 [DEBUG] [Thread-14172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:43:17.457 [DEBUG] [Thread-14172] [transport.py] [_log()] Compression: none
2025-12-25T15:43:17.457 [DEBUG] [Thread-14172] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:43:17.475 [DEBUG] [Thread-14172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:43:17.476 [DEBUG] [Thread-14172] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:43:17.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:43:17.477 [DEBUG] [Thread-14172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:43:17.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:43:17.479 [DEBUG] [Thread-14172] [transport.py] [_log()] userauth is OK
2025-12-25T15:43:17.480 [DEBUG] [Thread-14172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:43:17.480 [DEBUG] [Thread-14172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:43:17.480 [DEBUG] [Thread-14172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:43:17.480 [DEBUG] [Thread-14172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:43:17.504 [INFO] [Thread-14172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:43:17.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:43:18.168 [DEBUG] [Thread-14172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:43:18.168 [DEBUG] [Thread-14172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:43:18.169 [DEBUG] [Thread-14172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:43:18.210 [DEBUG] [Thread-14172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:43:18.210 [DEBUG] [Thread-14172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:43:18.213 [DEBUG] [Thread-14172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:43:18.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:43:18.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:43:18.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:43:18.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:43:18.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:43:18.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:43:18.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:43:18.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:43:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:43:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.571242 -999.00  +26.90  31.26     18   +0.80 1 1 2 1 1   888    0 26.14 -10.95 ----- 25.5 31.3 294.0 37.8 30.8 -27.6 30.6 -26.7 31.1 -28.7 31.8 -24.7
2025-12-25T15:43:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:43:18.236 [DEBUG] [Thread-14172] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:43:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:43:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.571242
2025-12-25T15:43:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:43:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:43:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:43:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:43:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:43:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:42:48', tmtdew=30.69, humidity=13.05, cloud=0.0, wind=36.54, temperature=26.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:42:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:43:18.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-25T15:43:18.335 [DEBUG] [Thread-14175] [transport.py] [_log()] starting thread (client mode): 0xb95d6440
2025-12-25T15:43:18.335 [DEBUG] [Thread-14175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:43:18.349 [DEBUG] [Thread-14175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:43:18.350 [INFO] [Thread-14175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:43:18.357 [DEBUG] [Thread-14175] [transport.py] [_log()] client lang: <none>
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] server lang: <none>
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] kex follows: False
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] Compression: none
2025-12-25T15:43:18.358 [DEBUG] [Thread-14175] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:43:18.414 [DEBUG] [Thread-14175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:43:18.414 [DEBUG] [Thread-14175] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:43:18.415 [DEBUG] [Thread-14175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:43:18.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:43:18.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:43:18.470 [DEBUG] [Thread-14175] [transport.py] [_log()] userauth is OK
2025-12-25T15:43:18.470 [DEBUG] [Thread-14175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:43:18.471 [DEBUG] [Thread-14175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:43:18.471 [DEBUG] [Thread-14175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:43:18.471 [DEBUG] [Thread-14175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:43:18.495 [INFO] [Thread-14175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:43:18.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-25T15:43:18.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:43:19.322 [DEBUG] [Thread-14175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:43:19.322 [DEBUG] [Thread-14175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:43:19.370 [DEBUG] [Thread-14175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:43:19.370 [DEBUG] [Thread-14175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:43:19.379 [DEBUG] [Thread-14175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:43:19.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:43:19.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-25T15:43:19.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:43:19.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:43:19.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:43:19.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:43:19.416 [DEBUG] [Thread-14175] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:43:21.495 [DEBUG] [Thread-14177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:36.532 [DEBUG] [Thread-14178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:47.414 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:47.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:49.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:43:49.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:43:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:43:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 43, 19), 30.59, 13.17, 0.0, 39.35, 27.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:43:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:43:19
2025-12-25T15:43:50.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:43:50.406 [DEBUG] [Thread-14179] [transport.py] [_log()] starting thread (client mode): 0xb955bc70
2025-12-25T15:43:50.406 [DEBUG] [Thread-14179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:43:50.426 [DEBUG] [Thread-14179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:43:50.426 [INFO] [Thread-14179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:43:50.427 [DEBUG] [Thread-14179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:43:50.427 [DEBUG] [Thread-14179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:43:50.427 [DEBUG] [Thread-14179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:43:50.427 [DEBUG] [Thread-14179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:50.427 [DEBUG] [Thread-14179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:50.427 [DEBUG] [Thread-14179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] client lang: <none>
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] server lang: <none>
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] kex follows: False
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] Compression: none
2025-12-25T15:43:50.428 [DEBUG] [Thread-14179] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:43:50.436 [DEBUG] [Thread-14179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:43:50.437 [DEBUG] [Thread-14179] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:43:50.437 [DEBUG] [Thread-14179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:43:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:43:50.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:43:50.439 [DEBUG] [Thread-14179] [transport.py] [_log()] userauth is OK
2025-12-25T15:43:50.439 [DEBUG] [Thread-14179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:43:50.439 [DEBUG] [Thread-14179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:43:50.439 [DEBUG] [Thread-14179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:43:50.439 [DEBUG] [Thread-14179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:43:50.456 [INFO] [Thread-14179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:43:50.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:43:51.102 [DEBUG] [Thread-14179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:43:51.102 [DEBUG] [Thread-14179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:43:51.103 [DEBUG] [Thread-14179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:43:51.143 [DEBUG] [Thread-14179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:43:51.143 [DEBUG] [Thread-14179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:43:51.146 [DEBUG] [Thread-14179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:43:51.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:43:51.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:43:51.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:43:51.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:43:51.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:43:51.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:43:51.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:43:51.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:43:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:43:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.571589 -999.00  +26.80  32.73     18   +0.90 1 1 2 1 1   888    0 26.16 -12.59 ----- 37.1 32.7 296.8 36.2 30.7 -28.6 30.6 -27.7 31.3 -26.1 31.9 -25.5
2025-12-25T15:43:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:43:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:43:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.571589
2025-12-25T15:43:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:43:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:43:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:43:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:43:51.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:43:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:43:19', tmtdew=30.59, humidity=13.17, cloud=0.0, wind=39.35, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:43:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:43:51.176 [DEBUG] [Thread-14179] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:43:51.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-25T15:43:51.271 [DEBUG] [Thread-14182] [transport.py] [_log()] starting thread (client mode): 0xb955a5c0
2025-12-25T15:43:51.272 [DEBUG] [Thread-14182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:43:51.287 [DEBUG] [Thread-14182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:43:51.287 [INFO] [Thread-14182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] client lang: <none>
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] server lang: <none>
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] kex follows: False
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:43:51.295 [DEBUG] [Thread-14182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:43:51.296 [DEBUG] [Thread-14182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:43:51.296 [DEBUG] [Thread-14182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:43:51.296 [DEBUG] [Thread-14182] [transport.py] [_log()] Compression: none
2025-12-25T15:43:51.296 [DEBUG] [Thread-14182] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:43:51.354 [DEBUG] [Thread-14182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:43:51.354 [DEBUG] [Thread-14182] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:43:51.355 [DEBUG] [Thread-14182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:43:51.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:43:51.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:43:51.410 [DEBUG] [Thread-14182] [transport.py] [_log()] userauth is OK
2025-12-25T15:43:51.410 [DEBUG] [Thread-14182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:43:51.410 [DEBUG] [Thread-14182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:43:51.411 [DEBUG] [Thread-14182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:43:51.411 [DEBUG] [Thread-14182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:43:51.430 [INFO] [Thread-14182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:43:51.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-25T15:43:51.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:43:51.569 [DEBUG] [Thread-14184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:43:52.325 [DEBUG] [Thread-14182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:43:52.325 [DEBUG] [Thread-14182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:43:52.372 [DEBUG] [Thread-14182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:43:52.373 [DEBUG] [Thread-14182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:43:52.381 [DEBUG] [Thread-14182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:43:52.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:43:52.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-25T15:43:52.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:43:52.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:43:52.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:43:52.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:43:52.412 [DEBUG] [Thread-14182] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:44:06.623 [DEBUG] [Thread-14185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:11.685 [DEBUG] [Thread-14186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:21.659 [DEBUG] [Thread-14187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:44:22.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:44:22.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-25T15:44:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 43, 51), 30.19, 13.65, 0.0, 36.96, 26.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:44:23.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:43:51
2025-12-25T15:44:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:44:23.408 [DEBUG] [Thread-14188] [transport.py] [_log()] starting thread (client mode): 0xb6b631c0
2025-12-25T15:44:23.408 [DEBUG] [Thread-14188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:44:23.429 [DEBUG] [Thread-14188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:44:23.429 [INFO] [Thread-14188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:44:23.433 [DEBUG] [Thread-14188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] client lang: <none>
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] server lang: <none>
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] kex follows: False
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] Compression: none
2025-12-25T15:44:23.434 [DEBUG] [Thread-14188] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:44:23.453 [DEBUG] [Thread-14188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:44:23.453 [DEBUG] [Thread-14188] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:44:23.454 [DEBUG] [Thread-14188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:44:23.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:44:23.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:44:23.456 [DEBUG] [Thread-14188] [transport.py] [_log()] userauth is OK
2025-12-25T15:44:23.456 [DEBUG] [Thread-14188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:44:23.456 [DEBUG] [Thread-14188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:44:23.456 [DEBUG] [Thread-14188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:44:23.456 [DEBUG] [Thread-14188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:44:23.480 [INFO] [Thread-14188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:44:23.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:44:24.145 [DEBUG] [Thread-14188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:44:24.145 [DEBUG] [Thread-14188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:44:24.146 [DEBUG] [Thread-14188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:44:24.186 [DEBUG] [Thread-14188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:44:24.186 [DEBUG] [Thread-14188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:44:24.189 [DEBUG] [Thread-14188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:44:24.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:44:24.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:44:24.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:44:24.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:44:24.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:44:24.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:44:24.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:44:24.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:44:24.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:44:24.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.571936 -999.00  +26.20  33.60     19   +0.90 1 1 2 1 1   888    0 25.16 -15.11 ----- 33.0 33.6 306.2 44.1 30.5 -28.4 30.5 -28.7 31.1 -29.9 31.8 -27.1
2025-12-25T15:44:24.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:44:24.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:44:24.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.571936
2025-12-25T15:44:24.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:44:24.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:44:24.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:44:24.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:44:24.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:44:24.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:43:51', tmtdew=30.19, humidity=13.65, cloud=0.0, wind=36.96, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:43:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:44:24.217 [DEBUG] [Thread-14188] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:44:24.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-25T15:44:24.314 [DEBUG] [Thread-14191] [transport.py] [_log()] starting thread (client mode): 0xb9578a00
2025-12-25T15:44:24.314 [DEBUG] [Thread-14191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:44:24.329 [DEBUG] [Thread-14191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:44:24.329 [INFO] [Thread-14191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:44:24.337 [DEBUG] [Thread-14191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:44:24.337 [DEBUG] [Thread-14191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:44:24.337 [DEBUG] [Thread-14191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:44:24.337 [DEBUG] [Thread-14191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] client lang: <none>
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] server lang: <none>
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] kex follows: False
2025-12-25T15:44:24.338 [DEBUG] [Thread-14191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:44:24.339 [DEBUG] [Thread-14191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:44:24.339 [DEBUG] [Thread-14191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:44:24.339 [DEBUG] [Thread-14191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:44:24.339 [DEBUG] [Thread-14191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:44:24.339 [DEBUG] [Thread-14191] [transport.py] [_log()] Compression: none
2025-12-25T15:44:24.339 [DEBUG] [Thread-14191] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:44:24.402 [DEBUG] [Thread-14191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:44:24.402 [DEBUG] [Thread-14191] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:44:24.403 [DEBUG] [Thread-14191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:44:24.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:44:24.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:44:24.458 [DEBUG] [Thread-14191] [transport.py] [_log()] userauth is OK
2025-12-25T15:44:24.458 [DEBUG] [Thread-14191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:44:24.458 [DEBUG] [Thread-14191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:44:24.458 [DEBUG] [Thread-14191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:44:24.458 [DEBUG] [Thread-14191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:44:24.476 [INFO] [Thread-14191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:44:24.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-25T15:44:24.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:44:25.364 [DEBUG] [Thread-14191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:44:25.365 [DEBUG] [Thread-14191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:44:25.413 [DEBUG] [Thread-14191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:44:25.413 [DEBUG] [Thread-14191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:44:25.422 [DEBUG] [Thread-14191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:44:25.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:44:25.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-25T15:44:25.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:44:25.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:44:25.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:44:25.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:44:25.458 [DEBUG] [Thread-14191] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:44:36.697 [DEBUG] [Thread-14193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:47.564 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:47.565 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:51.745 [DEBUG] [Thread-14194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:44:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:44:55.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:44:55.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-25T15:44:56.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 44, 23), 30.28, 13.57, 0.0, 33.0, 26.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:44:56.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:44:23
2025-12-25T15:44:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:44:56.456 [DEBUG] [Thread-14195] [transport.py] [_log()] starting thread (client mode): 0xb6b62170
2025-12-25T15:44:56.457 [DEBUG] [Thread-14195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:44:56.477 [DEBUG] [Thread-14195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:44:56.477 [INFO] [Thread-14195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:44:56.480 [DEBUG] [Thread-14195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:44:56.480 [DEBUG] [Thread-14195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] client lang: <none>
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] server lang: <none>
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] kex follows: False
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:44:56.481 [DEBUG] [Thread-14195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:44:56.482 [DEBUG] [Thread-14195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:44:56.482 [DEBUG] [Thread-14195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:44:56.482 [DEBUG] [Thread-14195] [transport.py] [_log()] Compression: none
2025-12-25T15:44:56.482 [DEBUG] [Thread-14195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:44:56.504 [DEBUG] [Thread-14195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:44:56.505 [DEBUG] [Thread-14195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:44:56.505 [DEBUG] [Thread-14195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:44:56.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:44:56.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:44:56.507 [DEBUG] [Thread-14195] [transport.py] [_log()] userauth is OK
2025-12-25T15:44:56.508 [DEBUG] [Thread-14195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:44:56.508 [DEBUG] [Thread-14195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:44:56.508 [DEBUG] [Thread-14195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:44:56.508 [DEBUG] [Thread-14195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:44:56.532 [INFO] [Thread-14195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:44:56.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:44:57.133 [DEBUG] [Thread-14195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:44:57.133 [DEBUG] [Thread-14195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:44:57.134 [DEBUG] [Thread-14195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:44:57.174 [DEBUG] [Thread-14195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:44:57.174 [DEBUG] [Thread-14195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:44:57.177 [DEBUG] [Thread-14195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:44:57.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:44:57.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:44:57.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:44:57.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:44:57.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:44:57.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:44:57.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:44:57.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:44:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:44:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.572283 -999.00  +25.80  33.32     20   +1.40 1 1 2 1 1   888    0 25.30 -23.90 ----- 33.2 33.3 290.2 39.4 30.5 -27.6 30.3 -28.0 30.9 -26.7 31.6 -26.8
2025-12-25T15:44:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:44:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:44:57.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.572283
2025-12-25T15:44:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:44:57.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:44:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:44:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:44:57.204 [DEBUG] [Thread-14195] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:44:57.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:44:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:44:23', tmtdew=30.28, humidity=13.57, cloud=0.0, wind=33.0, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:44:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:44:57.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-25T15:44:57.299 [DEBUG] [Thread-14198] [transport.py] [_log()] starting thread (client mode): 0xb6b21de0
2025-12-25T15:44:57.299 [DEBUG] [Thread-14198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:44:57.314 [DEBUG] [Thread-14198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:44:57.314 [INFO] [Thread-14198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:44:57.321 [DEBUG] [Thread-14198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] client lang: <none>
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] server lang: <none>
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] kex follows: False
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] Compression: none
2025-12-25T15:44:57.322 [DEBUG] [Thread-14198] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:44:57.386 [DEBUG] [Thread-14198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:44:57.386 [DEBUG] [Thread-14198] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:44:57.386 [DEBUG] [Thread-14198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:44:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:44:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:44:57.441 [DEBUG] [Thread-14198] [transport.py] [_log()] userauth is OK
2025-12-25T15:44:57.441 [DEBUG] [Thread-14198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:44:57.441 [DEBUG] [Thread-14198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:44:57.441 [DEBUG] [Thread-14198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:44:57.442 [DEBUG] [Thread-14198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:44:57.462 [INFO] [Thread-14198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:44:57.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-25T15:44:57.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:44:58.268 [DEBUG] [Thread-14198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:44:58.268 [DEBUG] [Thread-14198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:44:58.316 [DEBUG] [Thread-14198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:44:58.316 [DEBUG] [Thread-14198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:44:58.324 [DEBUG] [Thread-14198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:44:58.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:44:58.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-25T15:44:58.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-25T15:44:58.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:44:58.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:44:58.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:44:58.355 [DEBUG] [Thread-14198] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:45:06.774 [DEBUG] [Thread-14200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:45:11.743 [DEBUG] [Thread-14201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:45:21.823 [DEBUG] [Thread-14202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:45:28.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:45:28.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:45:28.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-25T15:45:29.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 44, 56), 29.6, 14.32, 0.0, 41.0, 26.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:45:29.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:44:56
2025-12-25T15:45:29.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:45:29.402 [DEBUG] [Thread-14203] [transport.py] [_log()] starting thread (client mode): 0xb95583a0
2025-12-25T15:45:29.402 [DEBUG] [Thread-14203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:45:29.422 [DEBUG] [Thread-14203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:45:29.423 [INFO] [Thread-14203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] client lang: <none>
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] server lang: <none>
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] kex follows: False
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:45:29.426 [DEBUG] [Thread-14203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:45:29.427 [DEBUG] [Thread-14203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:45:29.427 [DEBUG] [Thread-14203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:45:29.427 [DEBUG] [Thread-14203] [transport.py] [_log()] Compression: none
2025-12-25T15:45:29.427 [DEBUG] [Thread-14203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:45:29.442 [DEBUG] [Thread-14203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:45:29.442 [DEBUG] [Thread-14203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:45:29.442 [DEBUG] [Thread-14203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:45:29.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:45:29.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:45:29.443 [DEBUG] [Thread-14203] [transport.py] [_log()] userauth is OK
2025-12-25T15:45:29.443 [DEBUG] [Thread-14203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:45:29.443 [DEBUG] [Thread-14203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:45:29.443 [DEBUG] [Thread-14203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:45:29.443 [DEBUG] [Thread-14203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:45:29.451 [INFO] [Thread-14203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:45:29.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:45:30.118 [DEBUG] [Thread-14203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:45:30.118 [DEBUG] [Thread-14203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:45:30.118 [DEBUG] [Thread-14203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:45:30.159 [DEBUG] [Thread-14203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:45:30.159 [DEBUG] [Thread-14203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:45:30.162 [DEBUG] [Thread-14203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:45:30.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:45:30.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:45:30.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:45:30.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:45:30.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:45:30.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:45:30.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:45:30.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.572978 -999.00  +25.90  48.94     19   +1.20 1 1 2 1 1   888    0 24.91 -38.84 ----- 37.0 48.9 296.0 54.7 30.3 -29.6 30.4 -28.6 30.9 -26.9 31.6 -26.3
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.572978
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:45:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:44:56', tmtdew=29.6, humidity=14.32, cloud=0.0, wind=41.0, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:45:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:45:30.178 [DEBUG] [Thread-14203] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:45:30.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-25T15:45:30.262 [DEBUG] [Thread-14206] [transport.py] [_log()] starting thread (client mode): 0xb955aa40
2025-12-25T15:45:30.262 [DEBUG] [Thread-14206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:45:30.277 [DEBUG] [Thread-14206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:45:30.277 [INFO] [Thread-14206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] client lang: <none>
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] server lang: <none>
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] kex follows: False
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] Compression: none
2025-12-25T15:45:30.285 [DEBUG] [Thread-14206] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:45:30.339 [DEBUG] [Thread-14206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:45:30.339 [DEBUG] [Thread-14206] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:45:30.339 [DEBUG] [Thread-14206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:45:30.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:45:30.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:45:30.397 [DEBUG] [Thread-14206] [transport.py] [_log()] userauth is OK
2025-12-25T15:45:30.397 [DEBUG] [Thread-14206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:45:30.397 [DEBUG] [Thread-14206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:45:30.397 [DEBUG] [Thread-14206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:45:30.397 [DEBUG] [Thread-14206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:45:30.411 [INFO] [Thread-14206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:45:30.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-25T15:45:30.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:45:31.274 [DEBUG] [Thread-14206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:45:31.274 [DEBUG] [Thread-14206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:45:31.321 [DEBUG] [Thread-14206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:45:31.321 [DEBUG] [Thread-14206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:45:31.331 [DEBUG] [Thread-14206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:45:31.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:45:31.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:45:31.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:45:31.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:45:31.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:45:31.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:45:31.365 [DEBUG] [Thread-14206] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:45:36.856 [DEBUG] [Thread-14208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:45:47.704 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:45:47.706 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:45:51.908 [DEBUG] [Thread-14209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:46:01.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:46:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:46:02.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 45, 28), 29.88, 14.07, 0.0, 39.63, 26.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:46:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:45:28
2025-12-25T15:46:02.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:46:02.422 [DEBUG] [Thread-14210] [transport.py] [_log()] starting thread (client mode): 0xb6b28460
2025-12-25T15:46:02.422 [DEBUG] [Thread-14210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:46:02.435 [DEBUG] [Thread-14210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:46:02.435 [INFO] [Thread-14210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] client lang: <none>
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] server lang: <none>
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] kex follows: False
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] Compression: none
2025-12-25T15:46:02.438 [DEBUG] [Thread-14210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:46:02.448 [DEBUG] [Thread-14210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:46:02.449 [DEBUG] [Thread-14210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:46:02.449 [DEBUG] [Thread-14210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:46:02.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:46:02.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:46:02.450 [DEBUG] [Thread-14210] [transport.py] [_log()] userauth is OK
2025-12-25T15:46:02.450 [DEBUG] [Thread-14210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:46:02.450 [DEBUG] [Thread-14210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:46:02.450 [DEBUG] [Thread-14210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:46:02.450 [DEBUG] [Thread-14210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:46:02.466 [INFO] [Thread-14210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:46:02.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:46:03.230 [DEBUG] [Thread-14210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:46:03.230 [DEBUG] [Thread-14210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:46:03.230 [DEBUG] [Thread-14210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:46:03.271 [DEBUG] [Thread-14210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:46:03.271 [DEBUG] [Thread-14210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:46:03.273 [DEBUG] [Thread-14210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:46:03.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:46:03.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:46:03.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:46:03.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:46:03.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:46:03.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:46:03.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.573325 -999.00  +25.40  34.73     20   +1.00 1 1 2 1 1   888    0 24.91 -47.67 ----- 35.5 34.7 294.0 42.8 30.3 -29.6 30.2 -28.3 30.8 -27.3 31.4 -26.1
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.573325
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:46:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:45:28', tmtdew=29.88, humidity=14.07, cloud=0.0, wind=39.63, temperature=26.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:45:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:46:03.292 [DEBUG] [Thread-14210] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:46:03.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-25T15:46:03.379 [DEBUG] [Thread-14213] [transport.py] [_log()] starting thread (client mode): 0xb6b63490
2025-12-25T15:46:03.379 [DEBUG] [Thread-14213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:46:03.394 [DEBUG] [Thread-14213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:46:03.394 [INFO] [Thread-14213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] client lang: <none>
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] server lang: <none>
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] kex follows: False
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:46:03.402 [DEBUG] [Thread-14213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:46:03.403 [DEBUG] [Thread-14213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:46:03.403 [DEBUG] [Thread-14213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:46:03.403 [DEBUG] [Thread-14213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:46:03.403 [DEBUG] [Thread-14213] [transport.py] [_log()] Compression: none
2025-12-25T15:46:03.403 [DEBUG] [Thread-14213] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:46:03.460 [DEBUG] [Thread-14213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:46:03.460 [DEBUG] [Thread-14213] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:46:03.461 [DEBUG] [Thread-14213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:46:03.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:46:03.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:46:03.517 [DEBUG] [Thread-14213] [transport.py] [_log()] userauth is OK
2025-12-25T15:46:03.517 [DEBUG] [Thread-14213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:46:03.517 [DEBUG] [Thread-14213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:46:03.517 [DEBUG] [Thread-14213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:46:03.517 [DEBUG] [Thread-14213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:46:03.533 [INFO] [Thread-14213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:46:03.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-25T15:46:03.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:46:04.362 [DEBUG] [Thread-14213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:46:04.362 [DEBUG] [Thread-14213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:46:04.411 [DEBUG] [Thread-14213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:46:04.411 [DEBUG] [Thread-14213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:46:04.420 [DEBUG] [Thread-14213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:46:04.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:46:04.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-25T15:46:04.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-25T15:46:04.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:46:04.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:46:04.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:46:04.455 [DEBUG] [Thread-14213] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:46:06.940 [DEBUG] [Thread-14215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:11.808 [DEBUG] [Thread-14216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:21.979 [DEBUG] [Thread-14217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:34.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:46:34.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:46:34.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-25T15:46:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 46, 1), 29.75, 14.04, 0.0, 34.41, 26.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:46:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:46:01
2025-12-25T15:46:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:46:35.506 [DEBUG] [Thread-14218] [transport.py] [_log()] starting thread (client mode): 0xb6b038b0
2025-12-25T15:46:35.506 [DEBUG] [Thread-14218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:46:35.519 [DEBUG] [Thread-14218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:46:35.519 [INFO] [Thread-14218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] client lang: <none>
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] server lang: <none>
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] kex follows: False
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] Compression: none
2025-12-25T15:46:35.523 [DEBUG] [Thread-14218] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:46:35.537 [DEBUG] [Thread-14218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:46:35.537 [DEBUG] [Thread-14218] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:46:35.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:46:35.538 [DEBUG] [Thread-14218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:46:35.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:46:35.538 [DEBUG] [Thread-14218] [transport.py] [_log()] userauth is OK
2025-12-25T15:46:35.538 [DEBUG] [Thread-14218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:46:35.538 [DEBUG] [Thread-14218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:46:35.538 [DEBUG] [Thread-14218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:46:35.538 [DEBUG] [Thread-14218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:46:35.547 [INFO] [Thread-14218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:46:35.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:46:36.197 [DEBUG] [Thread-14218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:46:36.197 [DEBUG] [Thread-14218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:46:36.197 [DEBUG] [Thread-14218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:46:36.238 [DEBUG] [Thread-14218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:46:36.238 [DEBUG] [Thread-14218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:46:36.242 [DEBUG] [Thread-14218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:46:36.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:46:36.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:46:36.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:46:36.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:46:36.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:46:36.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:46:36.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:46:36.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:46:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:46:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.573672 -999.00  +25.30  34.22     20   +1.30 1 1 2 1 1   888    0 24.29 -62.55 ----- 33.2 34.2 296.0 44.4 30.2 -28.2 30.1 -28.2 30.7 -25.5 31.3 -26.3
2025-12-25T15:46:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:46:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:46:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.573672
2025-12-25T15:46:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:46:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:46:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:46:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:46:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:46:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:46:01', tmtdew=29.75, humidity=14.04, cloud=0.0, wind=34.41, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:46:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:46:36.269 [DEBUG] [Thread-14218] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:46:36.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-25T15:46:36.357 [DEBUG] [Thread-14221] [transport.py] [_log()] starting thread (client mode): 0xb6b03460
2025-12-25T15:46:36.357 [DEBUG] [Thread-14221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:46:36.372 [DEBUG] [Thread-14221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:46:36.372 [INFO] [Thread-14221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:46:36.379 [DEBUG] [Thread-14221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] client lang: <none>
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] server lang: <none>
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] kex follows: False
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] Compression: none
2025-12-25T15:46:36.380 [DEBUG] [Thread-14221] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:46:36.438 [DEBUG] [Thread-14221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:46:36.438 [DEBUG] [Thread-14221] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:46:36.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:46:36.440 [DEBUG] [Thread-14221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:46:36.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:46:36.494 [DEBUG] [Thread-14221] [transport.py] [_log()] userauth is OK
2025-12-25T15:46:36.494 [DEBUG] [Thread-14221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:46:36.495 [DEBUG] [Thread-14221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:46:36.495 [DEBUG] [Thread-14221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:46:36.495 [DEBUG] [Thread-14221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:46:36.513 [INFO] [Thread-14221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:46:36.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-25T15:46:36.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:46:37.017 [DEBUG] [Thread-14223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:37.363 [DEBUG] [Thread-14221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:46:37.364 [DEBUG] [Thread-14221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:46:37.412 [DEBUG] [Thread-14221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:46:37.412 [DEBUG] [Thread-14221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:46:37.421 [DEBUG] [Thread-14221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:46:37.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:46:37.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-25T15:46:37.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:46:37.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:46:37.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:46:37.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:46:37.458 [DEBUG] [Thread-14221] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:46:47.843 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:47.844 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:46:52.065 [DEBUG] [Thread-14224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:07.100 [DEBUG] [Thread-14225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:47:07.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:47:07.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:47:08.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 46, 33), 29.56, 14.23, 0.0, 31.57, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:47:08.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:46:33
2025-12-25T15:47:08.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:47:08.474 [DEBUG] [Thread-14226] [transport.py] [_log()] starting thread (client mode): 0xb6b207f0
2025-12-25T15:47:08.474 [DEBUG] [Thread-14226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:47:08.495 [DEBUG] [Thread-14226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:47:08.495 [INFO] [Thread-14226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] client lang: <none>
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] server lang: <none>
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] kex follows: False
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] Compression: none
2025-12-25T15:47:08.498 [DEBUG] [Thread-14226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:47:08.515 [DEBUG] [Thread-14226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:47:08.516 [DEBUG] [Thread-14226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:47:08.517 [DEBUG] [Thread-14226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:47:08.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:47:08.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:47:08.519 [DEBUG] [Thread-14226] [transport.py] [_log()] userauth is OK
2025-12-25T15:47:08.519 [DEBUG] [Thread-14226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:47:08.519 [DEBUG] [Thread-14226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:47:08.519 [DEBUG] [Thread-14226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:47:08.520 [DEBUG] [Thread-14226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:47:08.543 [INFO] [Thread-14226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:47:08.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:47:09.187 [DEBUG] [Thread-14226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:47:09.187 [DEBUG] [Thread-14226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:47:09.187 [DEBUG] [Thread-14226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:47:09.228 [DEBUG] [Thread-14226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:47:09.228 [DEBUG] [Thread-14226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:47:09.232 [DEBUG] [Thread-14226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:47:09.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:47:09.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:47:09.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:47:09.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:47:09.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:47:09.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:47:09.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:47:09.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:47:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:47:09.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.574020 -999.00  +25.60  42.75     20   +1.50 1 1 2 1 1   888    0 23.94 -71.96 ----- 32.5 42.8 311.4 52.8 30.3 -27.9 30.1 -27.8 30.8 -27.2 31.3 -25.4
2025-12-25T15:47:09.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:47:09.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:47:09.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.574020
2025-12-25T15:47:09.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:47:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:47:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:47:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:47:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:47:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:46:33', tmtdew=29.56, humidity=14.23, cloud=0.0, wind=31.57, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:46:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:47:09.259 [DEBUG] [Thread-14226] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:47:09.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-25T15:47:09.344 [DEBUG] [Thread-14229] [transport.py] [_log()] starting thread (client mode): 0xb6b22ec0
2025-12-25T15:47:09.344 [DEBUG] [Thread-14229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:47:09.359 [DEBUG] [Thread-14229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:47:09.359 [INFO] [Thread-14229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:09.367 [DEBUG] [Thread-14229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] client lang: <none>
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] server lang: <none>
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] kex follows: False
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] Compression: none
2025-12-25T15:47:09.368 [DEBUG] [Thread-14229] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:47:09.427 [DEBUG] [Thread-14229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:47:09.428 [DEBUG] [Thread-14229] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:47:09.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:47:09.429 [DEBUG] [Thread-14229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:47:09.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:47:09.486 [DEBUG] [Thread-14229] [transport.py] [_log()] userauth is OK
2025-12-25T15:47:09.486 [DEBUG] [Thread-14229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:47:09.486 [DEBUG] [Thread-14229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:47:09.487 [DEBUG] [Thread-14229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:47:09.487 [DEBUG] [Thread-14229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:47:09.505 [INFO] [Thread-14229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:47:09.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-25T15:47:09.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:47:10.320 [DEBUG] [Thread-14229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:47:10.320 [DEBUG] [Thread-14229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:47:10.368 [DEBUG] [Thread-14229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:47:10.368 [DEBUG] [Thread-14229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:47:10.377 [DEBUG] [Thread-14229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:47:10.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:47:10.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-25T15:47:10.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-25T15:47:10.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:47:10.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:47:10.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:47:10.415 [DEBUG] [Thread-14229] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:47:11.860 [DEBUG] [Thread-14231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:22.131 [DEBUG] [Thread-14232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:37.180 [DEBUG] [Thread-14233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:40.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:47:40.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:47:40.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-25T15:47:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 47, 37), 29.6, 14.04, 0.0, 37.53, 26.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:47:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:47:37
2025-12-25T15:47:41.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:47:41.401 [DEBUG] [Thread-14234] [transport.py] [_log()] starting thread (client mode): 0xb95d7820
2025-12-25T15:47:41.401 [DEBUG] [Thread-14234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:47:41.422 [DEBUG] [Thread-14234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:47:41.422 [INFO] [Thread-14234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:47:41.426 [DEBUG] [Thread-14234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] client lang: <none>
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] server lang: <none>
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] kex follows: False
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] Compression: none
2025-12-25T15:47:41.427 [DEBUG] [Thread-14234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:47:41.446 [DEBUG] [Thread-14234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:47:41.447 [DEBUG] [Thread-14234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:47:41.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:47:41.448 [DEBUG] [Thread-14234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:47:41.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:47:41.450 [DEBUG] [Thread-14234] [transport.py] [_log()] userauth is OK
2025-12-25T15:47:41.450 [DEBUG] [Thread-14234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:47:41.450 [DEBUG] [Thread-14234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:47:41.451 [DEBUG] [Thread-14234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:47:41.451 [DEBUG] [Thread-14234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:47:41.476 [INFO] [Thread-14234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:47:41.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:47:42.110 [DEBUG] [Thread-14234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:47:42.110 [DEBUG] [Thread-14234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:47:42.110 [DEBUG] [Thread-14234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:47:42.151 [DEBUG] [Thread-14234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:47:42.151 [DEBUG] [Thread-14234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:47:42.154 [DEBUG] [Thread-14234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:47:42.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:47:42.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:47:42.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:47:42.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:47:42.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:47:42.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:47:42.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:47:42.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:47:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:47:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.574367 -999.00  +26.00  32.88     20   +1.30 1 1 2 1 1   888    0 24.07 -81.86 ----- 35.2 32.9 297.4 46.2 30.3 -27.7 30.1 -28.2 30.7 -25.7 31.2 -26.7
2025-12-25T15:47:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:47:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:47:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.574367
2025-12-25T15:47:42.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:47:42.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:47:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:47:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:47:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:47:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:47:37', tmtdew=29.6, humidity=14.04, cloud=0.0, wind=37.53, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:47:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:47:42.180 [DEBUG] [Thread-14234] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:47:42.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:47:42.273 [DEBUG] [Thread-14237] [transport.py] [_log()] starting thread (client mode): 0xb6b28bb0
2025-12-25T15:47:42.273 [DEBUG] [Thread-14237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:47:42.288 [DEBUG] [Thread-14237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:47:42.288 [INFO] [Thread-14237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:47:42.296 [DEBUG] [Thread-14237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] client lang: <none>
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] server lang: <none>
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] kex follows: False
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] Compression: none
2025-12-25T15:47:42.297 [DEBUG] [Thread-14237] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:47:42.354 [DEBUG] [Thread-14237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:47:42.355 [DEBUG] [Thread-14237] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:47:42.355 [DEBUG] [Thread-14237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:47:42.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:47:42.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:47:42.410 [DEBUG] [Thread-14237] [transport.py] [_log()] userauth is OK
2025-12-25T15:47:42.410 [DEBUG] [Thread-14237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:47:42.410 [DEBUG] [Thread-14237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:47:42.410 [DEBUG] [Thread-14237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:47:42.410 [DEBUG] [Thread-14237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:47:42.431 [INFO] [Thread-14237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:47:42.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-25T15:47:42.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:47:43.245 [DEBUG] [Thread-14237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:47:43.246 [DEBUG] [Thread-14237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:47:43.294 [DEBUG] [Thread-14237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:47:43.294 [DEBUG] [Thread-14237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:47:43.303 [DEBUG] [Thread-14237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:47:43.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:47:43.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:47:43.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-25T15:47:43.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:47:43.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:47:43.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:47:43.340 [DEBUG] [Thread-14237] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:47:47.981 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:47.982 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:47:52.216 [DEBUG] [Thread-14239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:07.264 [DEBUG] [Thread-14240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:11.916 [DEBUG] [Thread-14241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:13.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:48:13.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:48:13.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:48:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 48, 9), 29.16, 14.4, 0.0, 32.4, 25.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:48:14.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:48:09
2025-12-25T15:48:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:48:14.328 [DEBUG] [Thread-14242] [transport.py] [_log()] starting thread (client mode): 0xb6b225c0
2025-12-25T15:48:14.328 [DEBUG] [Thread-14242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:48:14.349 [DEBUG] [Thread-14242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:48:14.349 [INFO] [Thread-14242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:48:14.352 [DEBUG] [Thread-14242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:48:14.352 [DEBUG] [Thread-14242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:48:14.352 [DEBUG] [Thread-14242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:48:14.352 [DEBUG] [Thread-14242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] client lang: <none>
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] server lang: <none>
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] kex follows: False
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] Compression: none
2025-12-25T15:48:14.353 [DEBUG] [Thread-14242] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:48:14.370 [DEBUG] [Thread-14242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:48:14.370 [DEBUG] [Thread-14242] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:48:14.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:48:14.371 [DEBUG] [Thread-14242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:48:14.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:48:14.373 [DEBUG] [Thread-14242] [transport.py] [_log()] userauth is OK
2025-12-25T15:48:14.373 [DEBUG] [Thread-14242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:48:14.373 [DEBUG] [Thread-14242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:48:14.373 [DEBUG] [Thread-14242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:48:14.374 [DEBUG] [Thread-14242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:48:14.391 [INFO] [Thread-14242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:48:14.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:48:15.053 [DEBUG] [Thread-14242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:48:15.053 [DEBUG] [Thread-14242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:48:15.054 [DEBUG] [Thread-14242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:48:15.094 [DEBUG] [Thread-14242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:48:15.094 [DEBUG] [Thread-14242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:48:15.098 [DEBUG] [Thread-14242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:48:15.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:48:15.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:48:15.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:48:15.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:48:15.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:48:15.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:48:15.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:48:15.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:48:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:48:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.574714 -999.00  +25.30  32.74     20   +0.80 1 1 2 1 1   888    0 23.38 -84.60 ----- 34.3 32.7 294.6 44.3 30.2 -29.1 30.0 -28.8 30.5 -25.7 31.1 -26.5
2025-12-25T15:48:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:48:15.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:48:15.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.574714
2025-12-25T15:48:15.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:48:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:48:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:48:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:48:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:48:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:48:09', tmtdew=29.16, humidity=14.4, cloud=0.0, wind=32.4, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:47:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:48:15.125 [DEBUG] [Thread-14242] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:48:15.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T15:48:15.216 [DEBUG] [Thread-14245] [transport.py] [_log()] starting thread (client mode): 0xb6b622c0
2025-12-25T15:48:15.216 [DEBUG] [Thread-14245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:48:15.230 [DEBUG] [Thread-14245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:48:15.230 [INFO] [Thread-14245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:48:15.237 [DEBUG] [Thread-14245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:48:15.237 [DEBUG] [Thread-14245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] client lang: <none>
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] server lang: <none>
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] kex follows: False
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] Compression: none
2025-12-25T15:48:15.238 [DEBUG] [Thread-14245] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:48:15.295 [DEBUG] [Thread-14245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:48:15.296 [DEBUG] [Thread-14245] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:48:15.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:48:15.297 [DEBUG] [Thread-14245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:48:15.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:48:15.351 [DEBUG] [Thread-14245] [transport.py] [_log()] userauth is OK
2025-12-25T15:48:15.351 [DEBUG] [Thread-14245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:48:15.351 [DEBUG] [Thread-14245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:48:15.351 [DEBUG] [Thread-14245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:48:15.352 [DEBUG] [Thread-14245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:48:15.370 [INFO] [Thread-14245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:48:15.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-25T15:48:15.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:48:16.213 [DEBUG] [Thread-14245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:48:16.214 [DEBUG] [Thread-14245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:48:16.261 [DEBUG] [Thread-14245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:48:16.261 [DEBUG] [Thread-14245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:48:16.270 [DEBUG] [Thread-14245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:48:16.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:48:16.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')
2025-12-25T15:48:16.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-25T15:48:16.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:48:16.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:48:16.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:48:16.307 [DEBUG] [Thread-14245] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:48:22.296 [DEBUG] [Thread-14247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:37.357 [DEBUG] [Thread-14248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:46.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:48:46.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:48:46.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-25T15:48:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 48, 41), 28.92, 14.9, 0.0, 26.59, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:48:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:48:41
2025-12-25T15:48:47.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:48:47.330 [DEBUG] [Thread-14249] [transport.py] [_log()] starting thread (client mode): 0xb9591b10
2025-12-25T15:48:47.330 [DEBUG] [Thread-14249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:48:47.351 [DEBUG] [Thread-14249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:48:47.351 [INFO] [Thread-14249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:47.354 [DEBUG] [Thread-14249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] client lang: <none>
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] server lang: <none>
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] kex follows: False
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] Compression: none
2025-12-25T15:48:47.355 [DEBUG] [Thread-14249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:48:47.370 [DEBUG] [Thread-14249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:48:47.370 [DEBUG] [Thread-14249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:48:47.370 [DEBUG] [Thread-14249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:48:47.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:48:47.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:48:47.371 [DEBUG] [Thread-14249] [transport.py] [_log()] userauth is OK
2025-12-25T15:48:47.371 [DEBUG] [Thread-14249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:48:47.371 [DEBUG] [Thread-14249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:48:47.371 [DEBUG] [Thread-14249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:48:47.371 [DEBUG] [Thread-14249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:48:47.398 [INFO] [Thread-14249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:48:47.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:48:48.011 [DEBUG] [Thread-14249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:48:48.011 [DEBUG] [Thread-14249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:48:48.011 [DEBUG] [Thread-14249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:48:48.054 [DEBUG] [Thread-14249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:48:48.054 [DEBUG] [Thread-14249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:48:48.057 [DEBUG] [Thread-14249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:48:48.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:48:48.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:48:48.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:48:48.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:48:48.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:48:48.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:48:48.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:48:48.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:48:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:48:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.575061 -999.00  +25.10  32.26     20   +1.10 1 1 2 1 1   888    0 22.93 -94.21 ----- 25.9 32.3 307.0 37.8 30.1 -28.3 29.9 -28.4 30.5 -24.7 31.1 -25.6
2025-12-25T15:48:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:48:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:48:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.575061
2025-12-25T15:48:48.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:48:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:48:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:48:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:48:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:48:48.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:48:41', tmtdew=28.92, humidity=14.9, cloud=0.0, wind=26.59, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:48:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:48:48.082 [DEBUG] [Thread-14249] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:48:48.122 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:48.122 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:48:48.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-25T15:48:48.175 [DEBUG] [Thread-14252] [transport.py] [_log()] starting thread (client mode): 0xb95d49a0
2025-12-25T15:48:48.175 [DEBUG] [Thread-14252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:48:48.189 [DEBUG] [Thread-14252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:48:48.189 [INFO] [Thread-14252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:48:48.197 [DEBUG] [Thread-14252] [transport.py] [_log()] client lang: <none>
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] server lang: <none>
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] kex follows: False
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] Compression: none
2025-12-25T15:48:48.198 [DEBUG] [Thread-14252] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:48:48.255 [DEBUG] [Thread-14252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:48:48.256 [DEBUG] [Thread-14252] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:48:48.256 [DEBUG] [Thread-14252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:48:48.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:48:48.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:48:48.310 [DEBUG] [Thread-14252] [transport.py] [_log()] userauth is OK
2025-12-25T15:48:48.311 [DEBUG] [Thread-14252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:48:48.311 [DEBUG] [Thread-14252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:48:48.311 [DEBUG] [Thread-14252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:48:48.311 [DEBUG] [Thread-14252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:48:48.330 [INFO] [Thread-14252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:48:48.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-25T15:48:48.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:48:49.186 [DEBUG] [Thread-14252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:48:49.187 [DEBUG] [Thread-14252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:48:49.234 [DEBUG] [Thread-14252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:48:49.234 [DEBUG] [Thread-14252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:48:49.243 [DEBUG] [Thread-14252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:48:49.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:48:49.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-25T15:48:49.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-25T15:48:49.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:48:49.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:48:49.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:48:49.280 [DEBUG] [Thread-14252] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:48:52.391 [DEBUG] [Thread-14254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:07.442 [DEBUG] [Thread-14255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:11.975 [DEBUG] [Thread-14256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:19.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:49:19.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:49:19.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-25T15:49:20.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 49, 13), 28.95, 14.87, 0.0, 30.21, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:49:20.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:49:13
2025-12-25T15:49:20.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:49:20.282 [DEBUG] [Thread-14257] [transport.py] [_log()] starting thread (client mode): 0xb95d6020
2025-12-25T15:49:20.282 [DEBUG] [Thread-14257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:49:20.302 [DEBUG] [Thread-14257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:49:20.302 [INFO] [Thread-14257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] client lang: <none>
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] server lang: <none>
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] kex follows: False
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] Compression: none
2025-12-25T15:49:20.306 [DEBUG] [Thread-14257] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:49:20.323 [DEBUG] [Thread-14257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:49:20.324 [DEBUG] [Thread-14257] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:49:20.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:49:20.325 [DEBUG] [Thread-14257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:49:20.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:49:20.327 [DEBUG] [Thread-14257] [transport.py] [_log()] userauth is OK
2025-12-25T15:49:20.327 [DEBUG] [Thread-14257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:49:20.327 [DEBUG] [Thread-14257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:49:20.327 [DEBUG] [Thread-14257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:49:20.328 [DEBUG] [Thread-14257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:49:20.351 [INFO] [Thread-14257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:49:20.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:49:21.005 [DEBUG] [Thread-14257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:49:21.005 [DEBUG] [Thread-14257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:49:21.005 [DEBUG] [Thread-14257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:49:21.047 [DEBUG] [Thread-14257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:49:21.047 [DEBUG] [Thread-14257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:49:21.049 [DEBUG] [Thread-14257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:49:21.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:49:21.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:49:21.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:49:21.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:49:21.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:49:21.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:49:21.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:49:21.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.575408 -999.00  +25.50  30.09     20   +1.00 1 1 2 1 1   888    0 22.50 -104.51 ----- 27.6 30.1 308.2 35.9 30.1 -28.7 29.9 -28.3 30.5 -26.3 31.1 -25.9
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.575408
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:49:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:49:13', tmtdew=28.95, humidity=14.87, cloud=0.0, wind=30.21, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:48:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:49:21.068 [DEBUG] [Thread-14257] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:49:21.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-25T15:49:21.153 [DEBUG] [Thread-14260] [transport.py] [_log()] starting thread (client mode): 0xb6b21360
2025-12-25T15:49:21.154 [DEBUG] [Thread-14260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:49:21.168 [DEBUG] [Thread-14260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:49:21.168 [INFO] [Thread-14260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:49:21.175 [DEBUG] [Thread-14260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:49:21.175 [DEBUG] [Thread-14260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:49:21.175 [DEBUG] [Thread-14260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:49:21.175 [DEBUG] [Thread-14260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] client lang: <none>
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] server lang: <none>
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] kex follows: False
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] Compression: none
2025-12-25T15:49:21.176 [DEBUG] [Thread-14260] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:49:21.233 [DEBUG] [Thread-14260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:49:21.233 [DEBUG] [Thread-14260] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:49:21.234 [DEBUG] [Thread-14260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:49:21.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:49:21.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:49:21.290 [DEBUG] [Thread-14260] [transport.py] [_log()] userauth is OK
2025-12-25T15:49:21.291 [DEBUG] [Thread-14260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:49:21.291 [DEBUG] [Thread-14260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:49:21.291 [DEBUG] [Thread-14260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:49:21.291 [DEBUG] [Thread-14260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:49:21.304 [INFO] [Thread-14260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:49:21.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-25T15:49:21.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:49:22.120 [DEBUG] [Thread-14260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:49:22.120 [DEBUG] [Thread-14260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:49:22.167 [DEBUG] [Thread-14260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:49:22.167 [DEBUG] [Thread-14260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:49:22.175 [DEBUG] [Thread-14260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:49:22.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:49:22.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-25T15:49:22.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-25T15:49:22.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:49:22.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:49:22.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:49:22.206 [DEBUG] [Thread-14260] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:49:22.474 [DEBUG] [Thread-14262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:37.512 [DEBUG] [Thread-14263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:48.262 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:48.263 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:52.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:49:52.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:49:52.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-25T15:49:52.546 [DEBUG] [Thread-14264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:49:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 49, 45), 29.49, 14.18, 0.0, 28.99, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:49:52.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:49:45
2025-12-25T15:49:53.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:49:53.208 [DEBUG] [Thread-14265] [transport.py] [_log()] starting thread (client mode): 0xb6b02920
2025-12-25T15:49:53.208 [DEBUG] [Thread-14265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:49:53.229 [DEBUG] [Thread-14265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:49:53.229 [INFO] [Thread-14265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:49:53.232 [DEBUG] [Thread-14265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] client lang: <none>
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] server lang: <none>
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] kex follows: False
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] Compression: none
2025-12-25T15:49:53.233 [DEBUG] [Thread-14265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:49:53.251 [DEBUG] [Thread-14265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:49:53.252 [DEBUG] [Thread-14265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:49:53.253 [DEBUG] [Thread-14265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:49:53.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:49:53.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:49:53.255 [DEBUG] [Thread-14265] [transport.py] [_log()] userauth is OK
2025-12-25T15:49:53.255 [DEBUG] [Thread-14265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:49:53.255 [DEBUG] [Thread-14265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:49:53.255 [DEBUG] [Thread-14265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:49:53.255 [DEBUG] [Thread-14265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:49:53.279 [INFO] [Thread-14265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:49:53.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:49:53.942 [DEBUG] [Thread-14265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:49:53.942 [DEBUG] [Thread-14265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:49:53.943 [DEBUG] [Thread-14265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:49:53.983 [DEBUG] [Thread-14265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:49:53.983 [DEBUG] [Thread-14265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:49:53.985 [DEBUG] [Thread-14265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:49:53.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:49:53.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:49:54.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:49:54.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:49:54.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:49:54.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:49:54.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:49:54.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:49:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:49:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.575756 -999.00  +25.60  30.90     19   +0.70 1 1 2 1 1   888    0 22.33 -106.57 ----- 31.6 30.9 292.2 37.9 30.1 -27.4 29.9 -28.1 30.6 -26.7 31.1 -25.6
2025-12-25T15:49:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:49:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:49:54.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.575756
2025-12-25T15:49:54.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:49:54.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:49:54.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:49:54.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:49:54.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:49:54.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:49:45', tmtdew=29.49, humidity=14.18, cloud=0.0, wind=28.99, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:49:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:49:54.012 [DEBUG] [Thread-14265] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:49:54.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-25T15:49:54.109 [DEBUG] [Thread-14268] [transport.py] [_log()] starting thread (client mode): 0xb9591f90
2025-12-25T15:49:54.109 [DEBUG] [Thread-14268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:49:54.124 [DEBUG] [Thread-14268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:49:54.124 [INFO] [Thread-14268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:49:54.132 [DEBUG] [Thread-14268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:49:54.132 [DEBUG] [Thread-14268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:49:54.132 [DEBUG] [Thread-14268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:49:54.132 [DEBUG] [Thread-14268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] client lang: <none>
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] server lang: <none>
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] kex follows: False
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] Compression: none
2025-12-25T15:49:54.133 [DEBUG] [Thread-14268] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:49:54.191 [DEBUG] [Thread-14268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:49:54.192 [DEBUG] [Thread-14268] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:49:54.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:49:54.193 [DEBUG] [Thread-14268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:49:54.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:49:54.247 [DEBUG] [Thread-14268] [transport.py] [_log()] userauth is OK
2025-12-25T15:49:54.248 [DEBUG] [Thread-14268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:49:54.248 [DEBUG] [Thread-14268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:49:54.248 [DEBUG] [Thread-14268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:49:54.248 [DEBUG] [Thread-14268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:49:54.267 [INFO] [Thread-14268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:49:54.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-25T15:49:54.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:49:55.129 [DEBUG] [Thread-14268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:49:55.129 [DEBUG] [Thread-14268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:49:55.177 [DEBUG] [Thread-14268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:49:55.178 [DEBUG] [Thread-14268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:49:55.187 [DEBUG] [Thread-14268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:49:55.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:49:55.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:49:55.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-25T15:49:55.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:49:55.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:49:55.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:49:55.223 [DEBUG] [Thread-14268] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:50:07.578 [DEBUG] [Thread-14270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:12.030 [DEBUG] [Thread-14271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:22.636 [DEBUG] [Thread-14272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:25.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:50:25.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:50:25.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-25T15:50:25.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 50, 17), 29.35, 14.32, 0.0, 33.84, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:50:25.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:50:17
2025-12-25T15:50:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:50:26.212 [DEBUG] [Thread-14273] [transport.py] [_log()] starting thread (client mode): 0xb95b01c0
2025-12-25T15:50:26.212 [DEBUG] [Thread-14273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:50:26.233 [DEBUG] [Thread-14273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:50:26.233 [INFO] [Thread-14273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:50:26.236 [DEBUG] [Thread-14273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] client lang: <none>
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] server lang: <none>
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] kex follows: False
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] Compression: none
2025-12-25T15:50:26.237 [DEBUG] [Thread-14273] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:50:26.254 [DEBUG] [Thread-14273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:50:26.255 [DEBUG] [Thread-14273] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:50:26.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:50:26.256 [DEBUG] [Thread-14273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:50:26.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:50:26.258 [DEBUG] [Thread-14273] [transport.py] [_log()] userauth is OK
2025-12-25T15:50:26.258 [DEBUG] [Thread-14273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:50:26.258 [DEBUG] [Thread-14273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:50:26.258 [DEBUG] [Thread-14273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:50:26.258 [DEBUG] [Thread-14273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:50:26.273 [INFO] [Thread-14273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:50:26.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:50:26.909 [DEBUG] [Thread-14273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:50:26.909 [DEBUG] [Thread-14273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:50:26.909 [DEBUG] [Thread-14273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:50:26.950 [DEBUG] [Thread-14273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:50:26.950 [DEBUG] [Thread-14273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:50:26.954 [DEBUG] [Thread-14273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:50:26.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:50:26.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:50:26.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:50:26.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:50:26.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:50:26.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:50:26.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:50:26.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:50:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:50:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.576103 -999.00  +25.40  33.71     19   +0.70 1 1 2 1 1   888    0 21.39 -124.23 ----- 31.3 33.7 299.4 42.6 30.0 -28.7 29.9 -27.6 30.4 -27.0 31.0 -25.9
2025-12-25T15:50:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:50:26.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:50:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.576103
2025-12-25T15:50:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:50:26.979 [DEBUG] [Thread-14273] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:50:26.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:50:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:50:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:50:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:50:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:50:17', tmtdew=29.35, humidity=14.32, cloud=0.0, wind=33.84, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:49:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:50:27.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-25T15:50:27.073 [DEBUG] [Thread-14276] [transport.py] [_log()] starting thread (client mode): 0xb95b24a0
2025-12-25T15:50:27.073 [DEBUG] [Thread-14276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:50:27.087 [DEBUG] [Thread-14276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:50:27.088 [INFO] [Thread-14276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:50:27.095 [DEBUG] [Thread-14276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:50:27.095 [DEBUG] [Thread-14276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:50:27.095 [DEBUG] [Thread-14276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] client lang: <none>
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] server lang: <none>
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] kex follows: False
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] Compression: none
2025-12-25T15:50:27.096 [DEBUG] [Thread-14276] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:50:27.155 [DEBUG] [Thread-14276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:50:27.156 [DEBUG] [Thread-14276] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:50:27.156 [DEBUG] [Thread-14276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:50:27.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:50:27.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:50:27.213 [DEBUG] [Thread-14276] [transport.py] [_log()] userauth is OK
2025-12-25T15:50:27.213 [DEBUG] [Thread-14276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:50:27.213 [DEBUG] [Thread-14276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:50:27.214 [DEBUG] [Thread-14276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:50:27.214 [DEBUG] [Thread-14276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:50:27.237 [INFO] [Thread-14276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:50:27.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:50:27.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:50:28.051 [DEBUG] [Thread-14276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:50:28.051 [DEBUG] [Thread-14276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:50:28.099 [DEBUG] [Thread-14276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:50:28.099 [DEBUG] [Thread-14276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:50:28.109 [DEBUG] [Thread-14276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:50:28.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:50:28.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-25T15:50:28.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-25T15:50:28.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:50:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:50:28.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:50:28.145 [DEBUG] [Thread-14276] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:50:37.671 [DEBUG] [Thread-14278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:48.401 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:48.402 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:52.725 [DEBUG] [Thread-14279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:50:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:50:58.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:50:58.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-25T15:50:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 50, 49), 29.32, 14.14, 0.0, 27.12, 25.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:50:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:50:49
2025-12-25T15:50:58.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:50:59.106 [DEBUG] [Thread-14280] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-25T15:50:59.106 [DEBUG] [Thread-14280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:50:59.126 [DEBUG] [Thread-14280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:50:59.126 [INFO] [Thread-14280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] client lang: <none>
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] server lang: <none>
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] kex follows: False
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] Compression: none
2025-12-25T15:50:59.129 [DEBUG] [Thread-14280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:50:59.148 [DEBUG] [Thread-14280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:50:59.149 [DEBUG] [Thread-14280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:50:59.149 [DEBUG] [Thread-14280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:50:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:50:59.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:50:59.151 [DEBUG] [Thread-14280] [transport.py] [_log()] userauth is OK
2025-12-25T15:50:59.151 [DEBUG] [Thread-14280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:50:59.151 [DEBUG] [Thread-14280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:50:59.151 [DEBUG] [Thread-14280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:50:59.151 [DEBUG] [Thread-14280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:50:59.186 [INFO] [Thread-14280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:50:59.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:50:59.824 [DEBUG] [Thread-14280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:50:59.824 [DEBUG] [Thread-14280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:50:59.825 [DEBUG] [Thread-14280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:50:59.865 [DEBUG] [Thread-14280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:50:59.865 [DEBUG] [Thread-14280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:50:59.869 [DEBUG] [Thread-14280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:50:59.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:50:59.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:50:59.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:50:59.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:50:59.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:50:59.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:50:59.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:50:59.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:50:59.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:50:59.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.576797 -999.00  +25.30  29.48     20   +0.90 1 1 1 1 1   888    0 21.52 -136.10 ----- 24.9 29.5 304.2 32.8 30.0 -27.4 29.9 -27.1 30.6 -27.7 31.0 -25.7
2025-12-25T15:50:59.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:50:59.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:50:59.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.576797
2025-12-25T15:50:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:50:59.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:50:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:50:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:50:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:50:59.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:50:49', tmtdew=29.32, humidity=14.14, cloud=0.0, wind=27.12, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:50:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:50:59.898 [DEBUG] [Thread-14280] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:50:59.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-25T15:50:59.996 [DEBUG] [Thread-14283] [transport.py] [_log()] starting thread (client mode): 0xb95b30d0
2025-12-25T15:50:59.996 [DEBUG] [Thread-14283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:51:00.010 [DEBUG] [Thread-14283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:51:00.010 [INFO] [Thread-14283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] client lang: <none>
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] server lang: <none>
2025-12-25T15:51:00.017 [DEBUG] [Thread-14283] [transport.py] [_log()] kex follows: False
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] Compression: none
2025-12-25T15:51:00.018 [DEBUG] [Thread-14283] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:51:00.075 [DEBUG] [Thread-14283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:51:00.075 [DEBUG] [Thread-14283] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:51:00.076 [DEBUG] [Thread-14283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:51:00.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:51:00.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:51:00.132 [DEBUG] [Thread-14283] [transport.py] [_log()] userauth is OK
2025-12-25T15:51:00.132 [DEBUG] [Thread-14283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:51:00.132 [DEBUG] [Thread-14283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:51:00.133 [DEBUG] [Thread-14283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:51:00.133 [DEBUG] [Thread-14283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:51:00.150 [INFO] [Thread-14283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:51:00.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:51:00.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:51:00.962 [DEBUG] [Thread-14283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:51:00.962 [DEBUG] [Thread-14283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:51:01.011 [DEBUG] [Thread-14283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:51:01.011 [DEBUG] [Thread-14283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:51:01.020 [DEBUG] [Thread-14283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:51:01.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:51:01.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-25T15:51:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:51:01.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:51:01.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:51:01.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:51:01.057 [DEBUG] [Thread-14283] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:51:07.765 [DEBUG] [Thread-14285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:51:12.088 [DEBUG] [Thread-14286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:51:22.813 [DEBUG] [Thread-14287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:51:31.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:51:31.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:51:31.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-25T15:51:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 51, 21), 29.16, 14.32, 0.0, 30.08, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:51:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:51:21
2025-12-25T15:51:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:51:32.037 [DEBUG] [Thread-14288] [transport.py] [_log()] starting thread (client mode): 0xb95b2440
2025-12-25T15:51:32.037 [DEBUG] [Thread-14288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:51:32.057 [DEBUG] [Thread-14288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:51:32.057 [INFO] [Thread-14288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:51:32.058 [DEBUG] [Thread-14288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] client lang: <none>
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] server lang: <none>
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] kex follows: False
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] Compression: none
2025-12-25T15:51:32.059 [DEBUG] [Thread-14288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:51:32.067 [DEBUG] [Thread-14288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:51:32.067 [DEBUG] [Thread-14288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:51:32.067 [DEBUG] [Thread-14288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:51:32.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:51:32.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:51:32.069 [DEBUG] [Thread-14288] [transport.py] [_log()] userauth is OK
2025-12-25T15:51:32.069 [DEBUG] [Thread-14288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:51:32.069 [DEBUG] [Thread-14288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:51:32.069 [DEBUG] [Thread-14288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:51:32.069 [DEBUG] [Thread-14288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:51:32.093 [INFO] [Thread-14288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:51:32.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:51:32.721 [DEBUG] [Thread-14288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:51:32.722 [DEBUG] [Thread-14288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:51:32.722 [DEBUG] [Thread-14288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:51:32.763 [DEBUG] [Thread-14288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:51:32.763 [DEBUG] [Thread-14288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:51:32.765 [DEBUG] [Thread-14288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:51:32.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:51:32.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:51:32.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:51:32.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:51:32.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:51:32.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:51:32.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:51:32.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:51:32.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.577145 -999.00  +25.70  31.89     20   +1.00 1 1 2 1 1   888    0 21.82 -135.95 ----- 32.0 31.9 310.2 39.6 30.1 -26.8 29.9 -27.0 30.6 -25.0 31.1 -24.8
2025-12-25T15:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.577145
2025-12-25T15:51:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:51:32.787 [DEBUG] [Thread-14288] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:51:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:51:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:51:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:51:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:51:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:51:21', tmtdew=29.16, humidity=14.32, cloud=0.0, wind=30.08, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:51:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:51:32.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-25T15:51:37.843 [DEBUG] [Thread-14291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:51:48.541 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:51:48.543 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:51:52.900 [DEBUG] [Thread-14292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:07.931 [DEBUG] [Thread-14293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:12.143 [DEBUG] [Thread-14294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:22.968 [DEBUG] [Thread-14295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:37.998 [DEBUG] [Thread-14296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:48.683 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:48.684 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:52:53.034 [DEBUG] [Thread-14297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:08.069 [DEBUG] [Thread-14298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:12.193 [DEBUG] [Thread-14299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:23.107 [DEBUG] [Thread-14300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:38.145 [DEBUG] [Thread-14301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:45.429 [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-25T15:53:48.823 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:48.824 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:53:53.177 [DEBUG] [Thread-14302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:08.205 [DEBUG] [Thread-14303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:12.227 [DEBUG] [Thread-14304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:15.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:54:15.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:54:15.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:54:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 54, 1), 30.17, 13.71, 0.0, 33.49, 26.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:54:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:54:01
2025-12-25T15:54:16.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:54:16.450 [DEBUG] [Thread-14305] [transport.py] [_log()] starting thread (client mode): 0xb95b3460
2025-12-25T15:54:16.450 [DEBUG] [Thread-14305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:54:16.469 [DEBUG] [Thread-14305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:54:16.469 [INFO] [Thread-14305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:54:16.472 [DEBUG] [Thread-14305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] client lang: <none>
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] server lang: <none>
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] kex follows: False
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:54:16.473 [DEBUG] [Thread-14305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:54:16.474 [DEBUG] [Thread-14305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:54:16.474 [DEBUG] [Thread-14305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:54:16.474 [DEBUG] [Thread-14305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:54:16.474 [DEBUG] [Thread-14305] [transport.py] [_log()] Compression: none
2025-12-25T15:54:16.474 [DEBUG] [Thread-14305] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:54:16.484 [DEBUG] [Thread-14305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:54:16.484 [DEBUG] [Thread-14305] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:54:16.485 [DEBUG] [Thread-14305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:54:16.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:54:16.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:54:16.486 [DEBUG] [Thread-14305] [transport.py] [_log()] userauth is OK
2025-12-25T15:54:16.486 [DEBUG] [Thread-14305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:54:16.486 [DEBUG] [Thread-14305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:54:16.486 [DEBUG] [Thread-14305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:54:16.486 [DEBUG] [Thread-14305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:54:16.510 [INFO] [Thread-14305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:54:16.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:54:17.133 [DEBUG] [Thread-14305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:54:17.134 [DEBUG] [Thread-14305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:54:17.135 [DEBUG] [Thread-14305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:54:17.175 [DEBUG] [Thread-14305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:54:17.175 [DEBUG] [Thread-14305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:54:17.179 [DEBUG] [Thread-14305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:54:17.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:54:17.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:54:17.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:54:17.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:54:17.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:54:17.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:54:17.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:54:17.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:54:17.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:54:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.578881 -999.00  +25.60  26.14     19   +0.90 1 1 1 1 1   888    0 21.21 -151.20 ----- 20.7 26.1 284.2 31.4 29.9 -27.5 29.8 -26.9 30.5 -24.3 30.9 -25.0
2025-12-25T15:54:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:54:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:54:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.578881
2025-12-25T15:54:17.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:54:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:54:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:54:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:54:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:54:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:54:01', tmtdew=30.17, humidity=13.71, cloud=0.0, wind=33.49, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:53:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:54:17.208 [DEBUG] [Thread-14305] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:54:17.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-25T15:54:17.313 [DEBUG] [Thread-14308] [transport.py] [_log()] starting thread (client mode): 0xb6b02920
2025-12-25T15:54:17.313 [DEBUG] [Thread-14308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:54:17.328 [DEBUG] [Thread-14308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:54:17.328 [INFO] [Thread-14308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] client lang: <none>
2025-12-25T15:54:17.336 [DEBUG] [Thread-14308] [transport.py] [_log()] server lang: <none>
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] kex follows: False
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] Compression: none
2025-12-25T15:54:17.337 [DEBUG] [Thread-14308] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:54:17.397 [DEBUG] [Thread-14308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:54:17.397 [DEBUG] [Thread-14308] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:54:17.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:54:17.399 [DEBUG] [Thread-14308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:54:17.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:54:17.453 [DEBUG] [Thread-14308] [transport.py] [_log()] userauth is OK
2025-12-25T15:54:17.453 [DEBUG] [Thread-14308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:54:17.453 [DEBUG] [Thread-14308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:54:17.453 [DEBUG] [Thread-14308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:54:17.454 [DEBUG] [Thread-14308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:54:17.473 [INFO] [Thread-14308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:54:17.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-25T15:54:17.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:54:18.319 [DEBUG] [Thread-14308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:54:18.319 [DEBUG] [Thread-14308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:54:18.367 [DEBUG] [Thread-14308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:54:18.368 [DEBUG] [Thread-14308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:54:18.377 [DEBUG] [Thread-14308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:54:18.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:54:18.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-25T15:54:18.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-25T15:54:18.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:54:18.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:54:18.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:54:18.416 [DEBUG] [Thread-14308] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:54:23.242 [DEBUG] [Thread-14310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:38.291 [DEBUG] [Thread-14311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:48.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:54:48.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:54:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:54:48.963 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:48.964 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:54:49.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 54, 33), 29.57, 14.02, 0.0, 39.47, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:54:49.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:54:33
2025-12-25T15:54:49.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:54:49.419 [DEBUG] [Thread-14312] [transport.py] [_log()] starting thread (client mode): 0xb6b2b1c0
2025-12-25T15:54:49.419 [DEBUG] [Thread-14312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:54:49.439 [DEBUG] [Thread-14312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:54:49.439 [INFO] [Thread-14312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:54:49.442 [DEBUG] [Thread-14312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] client lang: <none>
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] server lang: <none>
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] kex follows: False
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] Compression: none
2025-12-25T15:54:49.443 [DEBUG] [Thread-14312] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:54:49.460 [DEBUG] [Thread-14312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:54:49.461 [DEBUG] [Thread-14312] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:54:49.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:54:49.462 [DEBUG] [Thread-14312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:54:49.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:54:49.505 [DEBUG] [Thread-14312] [transport.py] [_log()] userauth is OK
2025-12-25T15:54:49.505 [DEBUG] [Thread-14312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:54:49.505 [DEBUG] [Thread-14312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:54:49.505 [DEBUG] [Thread-14312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:54:49.506 [DEBUG] [Thread-14312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:54:49.542 [INFO] [Thread-14312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:54:49.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:54:50.181 [DEBUG] [Thread-14312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:54:50.181 [DEBUG] [Thread-14312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:54:50.181 [DEBUG] [Thread-14312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:54:50.222 [DEBUG] [Thread-14312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:54:50.222 [DEBUG] [Thread-14312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:54:50.226 [DEBUG] [Thread-14312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:54:50.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:54:50.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:54:50.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:54:50.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:54:50.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:54:50.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:54:50.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:54:50.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:54:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:54:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.579228 -999.00  +26.30  21.95     19   +1.00 1 1 1 1 1   888    0 21.27 -143.88 ----- 27.5 21.9 300.2 27.8 30.1 -27.4 30.0 -26.8 30.7 -26.6 31.1 -25.0
2025-12-25T15:54:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:54:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:54:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.579228
2025-12-25T15:54:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:54:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:54:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:54:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:54:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:54:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:54:33', tmtdew=29.57, humidity=14.02, cloud=0.0, wind=39.47, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:54:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:54:50.252 [DEBUG] [Thread-14312] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:54:50.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-25T15:54:50.355 [DEBUG] [Thread-14315] [transport.py] [_log()] starting thread (client mode): 0xb9590250
2025-12-25T15:54:50.356 [DEBUG] [Thread-14315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:54:50.370 [DEBUG] [Thread-14315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:54:50.370 [INFO] [Thread-14315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:54:50.378 [DEBUG] [Thread-14315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:54:50.378 [DEBUG] [Thread-14315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] client lang: <none>
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] server lang: <none>
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] kex follows: False
2025-12-25T15:54:50.379 [DEBUG] [Thread-14315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:54:50.380 [DEBUG] [Thread-14315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:54:50.380 [DEBUG] [Thread-14315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:54:50.380 [DEBUG] [Thread-14315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:54:50.380 [DEBUG] [Thread-14315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:54:50.380 [DEBUG] [Thread-14315] [transport.py] [_log()] Compression: none
2025-12-25T15:54:50.380 [DEBUG] [Thread-14315] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:54:50.437 [DEBUG] [Thread-14315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:54:50.438 [DEBUG] [Thread-14315] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:54:50.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:54:50.439 [DEBUG] [Thread-14315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:54:50.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:54:50.497 [DEBUG] [Thread-14315] [transport.py] [_log()] userauth is OK
2025-12-25T15:54:50.497 [DEBUG] [Thread-14315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:54:50.497 [DEBUG] [Thread-14315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:54:50.498 [DEBUG] [Thread-14315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:54:50.498 [DEBUG] [Thread-14315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:54:50.516 [INFO] [Thread-14315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:54:50.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T15:54:50.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:54:51.418 [DEBUG] [Thread-14315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:54:51.419 [DEBUG] [Thread-14315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:54:51.466 [DEBUG] [Thread-14315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:54:51.466 [DEBUG] [Thread-14315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:54:51.475 [DEBUG] [Thread-14315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:54:51.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:54:51.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-25T15:54:51.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-25T15:54:51.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:54:51.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:54:51.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:54:51.512 [DEBUG] [Thread-14315] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:54:53.328 [DEBUG] [Thread-14317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:08.384 [DEBUG] [Thread-14318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:12.281 [DEBUG] [Thread-14319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:55:21.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:55:21.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-25T15:55:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 55, 5), 29.74, 13.89, 0.0, 41.76, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:55:22.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:55:05
2025-12-25T15:55:22.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:55:22.484 [DEBUG] [Thread-14320] [transport.py] [_log()] starting thread (client mode): 0xb955a590
2025-12-25T15:55:22.484 [DEBUG] [Thread-14320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:55:22.504 [DEBUG] [Thread-14320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:55:22.504 [INFO] [Thread-14320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:55:22.507 [DEBUG] [Thread-14320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:55:22.507 [DEBUG] [Thread-14320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] client lang: <none>
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] server lang: <none>
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] kex follows: False
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:55:22.508 [DEBUG] [Thread-14320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:55:22.509 [DEBUG] [Thread-14320] [transport.py] [_log()] Compression: none
2025-12-25T15:55:22.509 [DEBUG] [Thread-14320] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:55:22.528 [DEBUG] [Thread-14320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:55:22.528 [DEBUG] [Thread-14320] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:55:22.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:55:22.530 [DEBUG] [Thread-14320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:55:22.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:55:22.532 [DEBUG] [Thread-14320] [transport.py] [_log()] userauth is OK
2025-12-25T15:55:22.532 [DEBUG] [Thread-14320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:55:22.532 [DEBUG] [Thread-14320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:55:22.532 [DEBUG] [Thread-14320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:55:22.532 [DEBUG] [Thread-14320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:55:22.567 [INFO] [Thread-14320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:55:22.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:55:23.223 [DEBUG] [Thread-14320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:55:23.223 [DEBUG] [Thread-14320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:55:23.223 [DEBUG] [Thread-14320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:55:23.265 [DEBUG] [Thread-14320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:55:23.265 [DEBUG] [Thread-14320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:55:23.268 [DEBUG] [Thread-14320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:55:23.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:55:23.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:55:23.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:55:23.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:55:23.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:55:23.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:55:23.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:55:23.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:55:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:55:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.579575 -999.00  +26.40  31.99     19   +0.90 1 1 2 1 1   888    0 21.86 -128.17 ----- 32.7 32.0 297.4 39.4 30.2 -28.3 30.0 -27.1 30.8 -24.4 31.2 -26.0
2025-12-25T15:55:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:55:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:55:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.579575
2025-12-25T15:55:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:55:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:55:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:55:23.296 [DEBUG] [Thread-14320] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:55:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:55:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:55:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:55:05', tmtdew=29.74, humidity=13.89, cloud=0.0, wind=41.76, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:54:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:55:23.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-25T15:55:23.398 [DEBUG] [Thread-14323] [transport.py] [_log()] starting thread (client mode): 0xb955a200
2025-12-25T15:55:23.398 [DEBUG] [Thread-14323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:55:23.413 [DEBUG] [Thread-14323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:55:23.413 [INFO] [Thread-14323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:55:23.414 [DEBUG] [Thread-14325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:23.420 [DEBUG] [Thread-14323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:55:23.420 [DEBUG] [Thread-14323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:55:23.420 [DEBUG] [Thread-14323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:55:23.420 [DEBUG] [Thread-14323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:23.420 [DEBUG] [Thread-14323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:23.420 [DEBUG] [Thread-14323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] client lang: <none>
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] server lang: <none>
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] kex follows: False
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] Compression: none
2025-12-25T15:55:23.421 [DEBUG] [Thread-14323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:55:23.477 [DEBUG] [Thread-14323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:55:23.477 [DEBUG] [Thread-14323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:55:23.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:55:23.479 [DEBUG] [Thread-14323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:55:23.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:55:23.533 [DEBUG] [Thread-14323] [transport.py] [_log()] userauth is OK
2025-12-25T15:55:23.534 [DEBUG] [Thread-14323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:55:23.534 [DEBUG] [Thread-14323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:55:23.534 [DEBUG] [Thread-14323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:55:23.534 [DEBUG] [Thread-14323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:55:23.558 [INFO] [Thread-14323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:55:23.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-25T15:55:23.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:55:24.437 [DEBUG] [Thread-14323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:55:24.437 [DEBUG] [Thread-14323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:55:24.485 [DEBUG] [Thread-14323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:55:24.485 [DEBUG] [Thread-14323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:55:24.494 [DEBUG] [Thread-14323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:55:24.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:55:24.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:55: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') -> 00000000
2025-12-25T15:55:24.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:55:24.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:55:24.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:55:24.534 [DEBUG] [Thread-14323] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:55:38.462 [DEBUG] [Thread-14326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:49.102 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:49.103 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:53.489 [DEBUG] [Thread-14327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:55:54.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:55:54.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:55:54.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-25T15:55:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 55, 37), 30.11, 13.37, 0.0, 30.68, 26.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:55:55.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:55:37
2025-12-25T15:55:55.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:55:55.592 [DEBUG] [Thread-14328] [transport.py] [_log()] starting thread (client mode): 0xb95b21d0
2025-12-25T15:55:55.593 [DEBUG] [Thread-14328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:55:55.614 [DEBUG] [Thread-14328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:55:55.614 [INFO] [Thread-14328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] client lang: <none>
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] server lang: <none>
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] kex follows: False
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] Compression: none
2025-12-25T15:55:55.617 [DEBUG] [Thread-14328] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:55:55.633 [DEBUG] [Thread-14328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:55:55.633 [DEBUG] [Thread-14328] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:55:55.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:55:55.633 [DEBUG] [Thread-14328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:55:55.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:55:55.634 [DEBUG] [Thread-14328] [transport.py] [_log()] userauth is OK
2025-12-25T15:55:55.634 [DEBUG] [Thread-14328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:55:55.634 [DEBUG] [Thread-14328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:55:55.634 [DEBUG] [Thread-14328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:55:55.634 [DEBUG] [Thread-14328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:55:55.649 [INFO] [Thread-14328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:55:55.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:55:56.261 [DEBUG] [Thread-14328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:55:56.261 [DEBUG] [Thread-14328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:55:56.261 [DEBUG] [Thread-14328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:55:56.302 [DEBUG] [Thread-14328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:55:56.302 [DEBUG] [Thread-14328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:55:56.305 [DEBUG] [Thread-14328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:55:56.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:55:56.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:55:56.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:55:56.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:55:56.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:55:56.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:55:56.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:55:56.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:55:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:55:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.580269 -999.00  +26.30  26.41     18   +0.70 1 1 1 1 1   888    0 21.79 -119.86 ----- 32.7 26.4 293.3 31.2 30.1 -28.4 30.0 -27.4 30.7 -26.8 31.2 -27.1
2025-12-25T15:55:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:55:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:55:56.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.580269
2025-12-25T15:55:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:55:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:55:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:55:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:55:56.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:55:56.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:55:37', tmtdew=30.11, humidity=13.37, cloud=0.0, wind=30.68, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:55:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:55:56.332 [DEBUG] [Thread-14328] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:55:56.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-25T15:55:56.425 [DEBUG] [Thread-14331] [transport.py] [_log()] starting thread (client mode): 0xb9592950
2025-12-25T15:55:56.425 [DEBUG] [Thread-14331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:55:56.440 [DEBUG] [Thread-14331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:55:56.440 [INFO] [Thread-14331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:55:56.447 [DEBUG] [Thread-14331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:55:56.448 [DEBUG] [Thread-14331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] client lang: <none>
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] server lang: <none>
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] kex follows: False
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:55:56.449 [DEBUG] [Thread-14331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:55:56.450 [DEBUG] [Thread-14331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:55:56.450 [DEBUG] [Thread-14331] [transport.py] [_log()] Compression: none
2025-12-25T15:55:56.450 [DEBUG] [Thread-14331] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:55:56.506 [DEBUG] [Thread-14331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:55:56.506 [DEBUG] [Thread-14331] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:55:56.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:55:56.508 [DEBUG] [Thread-14331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:55:56.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:55:56.565 [DEBUG] [Thread-14331] [transport.py] [_log()] userauth is OK
2025-12-25T15:55:56.565 [DEBUG] [Thread-14331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:55:56.565 [DEBUG] [Thread-14331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:55:56.566 [DEBUG] [Thread-14331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:55:56.566 [DEBUG] [Thread-14331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:55:56.586 [INFO] [Thread-14331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:55:56.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-25T15:55:56.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:55:57.418 [DEBUG] [Thread-14331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:55:57.418 [DEBUG] [Thread-14331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:55:57.466 [DEBUG] [Thread-14331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:55:57.466 [DEBUG] [Thread-14331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:55:57.475 [DEBUG] [Thread-14331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:55:57.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:55:57.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-25T15:55:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:55:57.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:55:57.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:55:57.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:55:57.512 [DEBUG] [Thread-14331] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:56:08.520 [DEBUG] [Thread-14333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:56:12.341 [DEBUG] [Thread-14334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:56:23.578 [DEBUG] [Thread-14335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:56:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:56:27.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:56: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-25T15:56:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 56, 10), 30.14, 13.34, 0.0, 28.25, 26.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:56:28.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:56:10
2025-12-25T15:56:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:56:28.532 [DEBUG] [Thread-14336] [transport.py] [_log()] starting thread (client mode): 0xb9593220
2025-12-25T15:56:28.532 [DEBUG] [Thread-14336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:56:28.553 [DEBUG] [Thread-14336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:56:28.553 [INFO] [Thread-14336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:56:28.556 [DEBUG] [Thread-14336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] client lang: <none>
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] server lang: <none>
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] kex follows: False
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] Compression: none
2025-12-25T15:56:28.557 [DEBUG] [Thread-14336] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:56:28.574 [DEBUG] [Thread-14336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:56:28.575 [DEBUG] [Thread-14336] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:56:28.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:56:28.576 [DEBUG] [Thread-14336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:56:28.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:56:28.578 [DEBUG] [Thread-14336] [transport.py] [_log()] userauth is OK
2025-12-25T15:56:28.578 [DEBUG] [Thread-14336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:56:28.578 [DEBUG] [Thread-14336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:56:28.578 [DEBUG] [Thread-14336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:56:28.578 [DEBUG] [Thread-14336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:56:28.614 [INFO] [Thread-14336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:56:28.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:56:29.272 [DEBUG] [Thread-14336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:56:29.272 [DEBUG] [Thread-14336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:56:29.272 [DEBUG] [Thread-14336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:56:29.312 [DEBUG] [Thread-14336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:56:29.313 [DEBUG] [Thread-14336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:56:29.315 [DEBUG] [Thread-14336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:56:29.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:56:29.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:56:29.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:56:29.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:56:29.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:56:29.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:56:29.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.580617 -999.00  +26.00  32.29     18   +0.50 1 1 2 1 1   888    0 22.28 -108.87 ----- 34.8 32.3 303.2 38.6 30.1 -27.9 30.0 -28.3 30.5 -26.4 31.2 -26.6
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.580617
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:56:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:56:10', tmtdew=30.14, humidity=13.34, cloud=0.0, wind=28.25, temperature=26.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:56:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:56:29.333 [DEBUG] [Thread-14336] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:56:29.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-25T15:56:29.420 [DEBUG] [Thread-14339] [transport.py] [_log()] starting thread (client mode): 0xb6b02230
2025-12-25T15:56:29.420 [DEBUG] [Thread-14339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:56:29.437 [DEBUG] [Thread-14339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:56:29.437 [INFO] [Thread-14339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:56:29.448 [DEBUG] [Thread-14339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:56:29.448 [DEBUG] [Thread-14339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:56:29.448 [DEBUG] [Thread-14339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:56:29.448 [DEBUG] [Thread-14339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:56:29.448 [DEBUG] [Thread-14339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:56:29.448 [DEBUG] [Thread-14339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] client lang: <none>
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] server lang: <none>
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] kex follows: False
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] Compression: none
2025-12-25T15:56:29.449 [DEBUG] [Thread-14339] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:56:29.503 [DEBUG] [Thread-14339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:56:29.504 [DEBUG] [Thread-14339] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:56:29.504 [DEBUG] [Thread-14339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:56:29.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:56:29.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:56:29.561 [DEBUG] [Thread-14339] [transport.py] [_log()] userauth is OK
2025-12-25T15:56:29.561 [DEBUG] [Thread-14339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:56:29.561 [DEBUG] [Thread-14339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:56:29.561 [DEBUG] [Thread-14339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:56:29.561 [DEBUG] [Thread-14339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:56:29.575 [INFO] [Thread-14339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:56:29.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-25T15:56:29.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:56:30.461 [DEBUG] [Thread-14339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:56:30.461 [DEBUG] [Thread-14339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:56:30.509 [DEBUG] [Thread-14339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:56:30.509 [DEBUG] [Thread-14339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:56:30.518 [DEBUG] [Thread-14339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:56:30.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:56:30.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:56:30.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:56:30.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:56:30.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:56:30.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:56:30.549 [DEBUG] [Thread-14339] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:56:38.610 [DEBUG] [Thread-14341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:56:49.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:56:49.243 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:56:53.665 [DEBUG] [Thread-14342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:00.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:57:00.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:57:00.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-25T15:57:01.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 56, 42), 30.3, 13.32, 0.0, 32.1, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:57:01.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:56:42
2025-12-25T15:57:01.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:57:01.529 [DEBUG] [Thread-14343] [transport.py] [_log()] starting thread (client mode): 0xb6b03820
2025-12-25T15:57:01.529 [DEBUG] [Thread-14343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:57:01.548 [DEBUG] [Thread-14343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:57:01.548 [INFO] [Thread-14343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:57:01.551 [DEBUG] [Thread-14343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:57:01.551 [DEBUG] [Thread-14343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:57:01.551 [DEBUG] [Thread-14343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:57:01.551 [DEBUG] [Thread-14343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:01.551 [DEBUG] [Thread-14343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] client lang: <none>
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] server lang: <none>
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] kex follows: False
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] Compression: none
2025-12-25T15:57:01.552 [DEBUG] [Thread-14343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:57:01.560 [DEBUG] [Thread-14343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:57:01.560 [DEBUG] [Thread-14343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:57:01.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:57:01.561 [DEBUG] [Thread-14343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:57:01.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:57:01.561 [DEBUG] [Thread-14343] [transport.py] [_log()] userauth is OK
2025-12-25T15:57:01.561 [DEBUG] [Thread-14343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:57:01.561 [DEBUG] [Thread-14343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:57:01.562 [DEBUG] [Thread-14343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:57:01.562 [DEBUG] [Thread-14343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:57:01.580 [INFO] [Thread-14343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:57:01.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:57:02.210 [DEBUG] [Thread-14343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:57:02.210 [DEBUG] [Thread-14343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:57:02.211 [DEBUG] [Thread-14343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:57:02.251 [DEBUG] [Thread-14343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:57:02.251 [DEBUG] [Thread-14343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:57:02.255 [DEBUG] [Thread-14343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:57:02.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:57:02.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:57:02.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:57:02.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:57:02.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:57:02.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:57:02.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:57:02.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:57:02.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:57:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.580964 -999.00  +25.60  32.62     19   +0.40 1 1 2 1 1   888    0 22.07 -99.98 ----- 34.2 32.6 296.6 43.0 30.1 -28.4 29.9 -27.9 30.5 -26.8 31.1 -26.5
2025-12-25T15:57:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:57:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:57:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.580964
2025-12-25T15:57:02.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:57:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:57:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:57:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:57:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:57:02.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:56:42', tmtdew=30.3, humidity=13.32, cloud=0.0, wind=32.1, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:56:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:57:02.283 [DEBUG] [Thread-14343] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:57:02.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-25T15:57:02.386 [DEBUG] [Thread-14346] [transport.py] [_log()] starting thread (client mode): 0xb95d6890
2025-12-25T15:57:02.386 [DEBUG] [Thread-14346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:57:02.400 [DEBUG] [Thread-14346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:57:02.400 [INFO] [Thread-14346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] client lang: <none>
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] server lang: <none>
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] kex follows: False
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] Compression: none
2025-12-25T15:57:02.408 [DEBUG] [Thread-14346] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:57:02.466 [DEBUG] [Thread-14346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:57:02.466 [DEBUG] [Thread-14346] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:57:02.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:57:02.468 [DEBUG] [Thread-14346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:57:02.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:57:02.521 [DEBUG] [Thread-14346] [transport.py] [_log()] userauth is OK
2025-12-25T15:57:02.522 [DEBUG] [Thread-14346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:57:02.522 [DEBUG] [Thread-14346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:57:02.522 [DEBUG] [Thread-14346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:57:02.522 [DEBUG] [Thread-14346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:57:02.541 [INFO] [Thread-14346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:57:02.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-25T15:57:02.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:57:03.402 [DEBUG] [Thread-14346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:57:03.402 [DEBUG] [Thread-14346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:57:03.450 [DEBUG] [Thread-14346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:57:03.450 [DEBUG] [Thread-14346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:57:03.459 [DEBUG] [Thread-14346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:57:03.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:57:03.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-25T15:57:03.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-25T15:57:03.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:57:03.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:57:03.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:57:03.493 [DEBUG] [Thread-14346] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:57:08.701 [DEBUG] [Thread-14348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:12.390 [DEBUG] [Thread-14349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:23.740 [DEBUG] [Thread-14350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:33.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:57:33.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:57:33.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:57:34.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 57, 14), 30.11, 13.47, 0.0, 34.83, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:57:34.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:57:14
2025-12-25T15:57:34.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:57:34.492 [DEBUG] [Thread-14351] [transport.py] [_log()] starting thread (client mode): 0xb95b06a0
2025-12-25T15:57:34.493 [DEBUG] [Thread-14351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:57:34.513 [DEBUG] [Thread-14351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:57:34.513 [INFO] [Thread-14351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:57:34.516 [DEBUG] [Thread-14351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] client lang: <none>
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] server lang: <none>
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] kex follows: False
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:57:34.517 [DEBUG] [Thread-14351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:57:34.518 [DEBUG] [Thread-14351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:57:34.518 [DEBUG] [Thread-14351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:57:34.518 [DEBUG] [Thread-14351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:57:34.518 [DEBUG] [Thread-14351] [transport.py] [_log()] Compression: none
2025-12-25T15:57:34.518 [DEBUG] [Thread-14351] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:57:34.536 [DEBUG] [Thread-14351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:57:34.536 [DEBUG] [Thread-14351] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:57:34.537 [DEBUG] [Thread-14351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:57:34.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:57:34.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:57:34.539 [DEBUG] [Thread-14351] [transport.py] [_log()] userauth is OK
2025-12-25T15:57:34.539 [DEBUG] [Thread-14351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:57:34.539 [DEBUG] [Thread-14351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:57:34.539 [DEBUG] [Thread-14351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:57:34.539 [DEBUG] [Thread-14351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:57:34.557 [INFO] [Thread-14351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:57:34.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:57:35.205 [DEBUG] [Thread-14351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:57:35.205 [DEBUG] [Thread-14351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:57:35.206 [DEBUG] [Thread-14351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:57:35.246 [DEBUG] [Thread-14351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:57:35.246 [DEBUG] [Thread-14351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:57:35.250 [DEBUG] [Thread-14351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:57:35.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:57:35.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:57:35.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:57:35.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:57:35.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:57:35.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:57:35.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:57:35.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:57:35.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:57:35.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.581311 -999.00  +25.60  34.95     19   +0.40 1 1 2 1 1   888    0 22.06 -101.86 ----- 30.7 35.0 290.4 41.8 30.0 -28.9 29.9 -28.3 30.5 -26.9 31.1 -26.8
2025-12-25T15:57:35.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:57:35.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:57:35.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.581311
2025-12-25T15:57:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:57:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:57:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:57:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:57:35.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:57:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:57:14', tmtdew=30.11, humidity=13.47, cloud=0.0, wind=34.83, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:57:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:57:35.278 [DEBUG] [Thread-14351] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:57:35.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-25T15:57:35.389 [DEBUG] [Thread-14354] [transport.py] [_log()] starting thread (client mode): 0xb9593670
2025-12-25T15:57:35.389 [DEBUG] [Thread-14354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:57:35.409 [DEBUG] [Thread-14354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:57:35.409 [INFO] [Thread-14354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:57:35.417 [DEBUG] [Thread-14354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] client lang: <none>
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] server lang: <none>
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] kex follows: False
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:57:35.418 [DEBUG] [Thread-14354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:57:35.419 [DEBUG] [Thread-14354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:57:35.419 [DEBUG] [Thread-14354] [transport.py] [_log()] Compression: none
2025-12-25T15:57:35.419 [DEBUG] [Thread-14354] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:57:35.477 [DEBUG] [Thread-14354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:57:35.478 [DEBUG] [Thread-14354] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:57:35.478 [DEBUG] [Thread-14354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:57:35.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:57:35.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:57:35.533 [DEBUG] [Thread-14354] [transport.py] [_log()] userauth is OK
2025-12-25T15:57:35.533 [DEBUG] [Thread-14354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:57:35.533 [DEBUG] [Thread-14354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:57:35.533 [DEBUG] [Thread-14354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:57:35.533 [DEBUG] [Thread-14354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:57:35.552 [INFO] [Thread-14354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:57:35.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-25T15:57:35.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:57:36.403 [DEBUG] [Thread-14354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:57:36.403 [DEBUG] [Thread-14354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:57:36.451 [DEBUG] [Thread-14354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:57:36.451 [DEBUG] [Thread-14354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:57:36.460 [DEBUG] [Thread-14354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:57:36.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:57:36.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-25T15:57:36.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-25T15:57:36.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:57:36.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:57:36.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:57:36.496 [DEBUG] [Thread-14354] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:57:38.781 [DEBUG] [Thread-14356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:49.382 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:49.382 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:57:53.830 [DEBUG] [Thread-14357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:06.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:58:06.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:58:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:58:07.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 57, 46), 30.11, 13.34, 0.0, 34.74, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:58:07.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:57:46
2025-12-25T15:58:07.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:58:07.488 [DEBUG] [Thread-14358] [transport.py] [_log()] starting thread (client mode): 0xb6b02920
2025-12-25T15:58:07.488 [DEBUG] [Thread-14358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:58:07.509 [DEBUG] [Thread-14358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:58:07.510 [INFO] [Thread-14358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] client lang: <none>
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] server lang: <none>
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] kex follows: False
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:58:07.513 [DEBUG] [Thread-14358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:58:07.514 [DEBUG] [Thread-14358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:58:07.514 [DEBUG] [Thread-14358] [transport.py] [_log()] Compression: none
2025-12-25T15:58:07.514 [DEBUG] [Thread-14358] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:58:07.531 [DEBUG] [Thread-14358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:58:07.532 [DEBUG] [Thread-14358] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:58:07.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:58:07.533 [DEBUG] [Thread-14358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:58:07.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:58:07.535 [DEBUG] [Thread-14358] [transport.py] [_log()] userauth is OK
2025-12-25T15:58:07.535 [DEBUG] [Thread-14358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:58:07.535 [DEBUG] [Thread-14358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:58:07.535 [DEBUG] [Thread-14358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:58:07.535 [DEBUG] [Thread-14358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:58:07.553 [INFO] [Thread-14358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:58:07.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:58:08.220 [DEBUG] [Thread-14358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:58:08.220 [DEBUG] [Thread-14358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:58:08.221 [DEBUG] [Thread-14358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:58:08.262 [DEBUG] [Thread-14358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:58:08.262 [DEBUG] [Thread-14358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:58:08.266 [DEBUG] [Thread-14358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:58:08.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:58:08.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:58:08.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:58:08.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:58:08.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:58:08.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:58:08.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:58:08.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:58:08.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:58:08.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.581658 -999.00  +25.60  33.18     19   +0.40 1 1 2 1 1   888    0 22.71 -95.17 ----- 31.7 33.2 302.0 37.7 29.9 -27.9 29.9 -27.4 30.6 -25.6 31.1 -25.9
2025-12-25T15:58:08.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:58:08.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:58:08.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.581658
2025-12-25T15:58:08.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:58:08.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:58:08.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:58:08.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:58:08.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:58:08.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:57:46', tmtdew=30.11, humidity=13.34, cloud=0.0, wind=34.74, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:57:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:58:08.296 [DEBUG] [Thread-14358] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:58:08.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-25T15:58:08.389 [DEBUG] [Thread-14361] [transport.py] [_log()] starting thread (client mode): 0xb95b28c0
2025-12-25T15:58:08.390 [DEBUG] [Thread-14361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:58:08.404 [DEBUG] [Thread-14361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:58:08.404 [INFO] [Thread-14361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:58:08.412 [DEBUG] [Thread-14361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:58:08.412 [DEBUG] [Thread-14361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:58:08.412 [DEBUG] [Thread-14361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:58:08.412 [DEBUG] [Thread-14361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:08.412 [DEBUG] [Thread-14361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] client lang: <none>
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] server lang: <none>
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] kex follows: False
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:58:08.413 [DEBUG] [Thread-14361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:58:08.414 [DEBUG] [Thread-14361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:58:08.414 [DEBUG] [Thread-14361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:58:08.414 [DEBUG] [Thread-14361] [transport.py] [_log()] Compression: none
2025-12-25T15:58:08.414 [DEBUG] [Thread-14361] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:58:08.470 [DEBUG] [Thread-14361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:58:08.470 [DEBUG] [Thread-14361] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:58:08.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:58:08.472 [DEBUG] [Thread-14361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:58:08.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:58:08.526 [DEBUG] [Thread-14361] [transport.py] [_log()] userauth is OK
2025-12-25T15:58:08.526 [DEBUG] [Thread-14361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:58:08.526 [DEBUG] [Thread-14361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:58:08.527 [DEBUG] [Thread-14361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:58:08.527 [DEBUG] [Thread-14361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:58:08.546 [INFO] [Thread-14361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:58:08.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-25T15:58:08.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:58:08.863 [DEBUG] [Thread-14363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:09.428 [DEBUG] [Thread-14361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:58:09.429 [DEBUG] [Thread-14361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:58:09.477 [DEBUG] [Thread-14361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:58:09.477 [DEBUG] [Thread-14361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:58:09.486 [DEBUG] [Thread-14361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:58:09.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:58:09.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:58:09.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-25T15:58:09.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:58:09.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:58:09.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:58:09.523 [DEBUG] [Thread-14361] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:58:12.445 [DEBUG] [Thread-14364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:23.915 [DEBUG] [Thread-14365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:38.947 [DEBUG] [Thread-14366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:39.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:58:39.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:58:39.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-25T15:58:40.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 58, 18), 30.03, 13.39, 0.0, 34.39, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:58:40.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:58:18
2025-12-25T15:58:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:58:40.530 [DEBUG] [Thread-14367] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T15:58:40.530 [DEBUG] [Thread-14367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:58:40.554 [DEBUG] [Thread-14367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:58:40.555 [INFO] [Thread-14367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:40.559 [DEBUG] [Thread-14367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] client lang: <none>
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] server lang: <none>
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] kex follows: False
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:58:40.560 [DEBUG] [Thread-14367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:58:40.561 [DEBUG] [Thread-14367] [transport.py] [_log()] Compression: none
2025-12-25T15:58:40.561 [DEBUG] [Thread-14367] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:58:40.579 [DEBUG] [Thread-14367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:58:40.579 [DEBUG] [Thread-14367] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15: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-25T15:58:40.580 [DEBUG] [Thread-14367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:58:40.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:58:40.582 [DEBUG] [Thread-14367] [transport.py] [_log()] userauth is OK
2025-12-25T15:58:40.583 [DEBUG] [Thread-14367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:58:40.583 [DEBUG] [Thread-14367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:58:40.583 [DEBUG] [Thread-14367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:58:40.583 [DEBUG] [Thread-14367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:58:40.620 [INFO] [Thread-14367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:58:40.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:58:41.270 [DEBUG] [Thread-14367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:58:41.271 [DEBUG] [Thread-14367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:58:41.271 [DEBUG] [Thread-14367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:58:41.312 [DEBUG] [Thread-14367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:58:41.312 [DEBUG] [Thread-14367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:58:41.316 [DEBUG] [Thread-14367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:58:41.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:58:41.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:58:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:58:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:58:41.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:58:41.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:58:41.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:58:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:58:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:58:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.582006 -999.00  +25.40  32.55     19   +0.40 1 1 2 1 1   888    0 22.37 -99.77 ----- 30.7 32.5 292.8 45.4 30.0 -28.5 29.9 -28.3 30.6 -25.5 31.0 -26.5
2025-12-25T15:58:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:58:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:58:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.582006
2025-12-25T15:58:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:58:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:58:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:58:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:58:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:58:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:58:18', tmtdew=30.03, humidity=13.39, cloud=0.0, wind=34.39, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:58:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:58:41.345 [DEBUG] [Thread-14367] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:58:41.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-25T15:58:41.439 [DEBUG] [Thread-14370] [transport.py] [_log()] starting thread (client mode): 0xb9593670
2025-12-25T15:58:41.439 [DEBUG] [Thread-14370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:58:41.453 [DEBUG] [Thread-14370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:58:41.453 [INFO] [Thread-14370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:58:41.461 [DEBUG] [Thread-14370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:58:41.461 [DEBUG] [Thread-14370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:58:41.461 [DEBUG] [Thread-14370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:58:41.461 [DEBUG] [Thread-14370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:41.461 [DEBUG] [Thread-14370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] client lang: <none>
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] server lang: <none>
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] kex follows: False
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:58:41.462 [DEBUG] [Thread-14370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:58:41.463 [DEBUG] [Thread-14370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:58:41.463 [DEBUG] [Thread-14370] [transport.py] [_log()] Compression: none
2025-12-25T15:58:41.463 [DEBUG] [Thread-14370] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:58:41.521 [DEBUG] [Thread-14370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:58:41.522 [DEBUG] [Thread-14370] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:58:41.523 [DEBUG] [Thread-14370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:58:41.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:58:41.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:58:41.578 [DEBUG] [Thread-14370] [transport.py] [_log()] userauth is OK
2025-12-25T15:58:41.578 [DEBUG] [Thread-14370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:58:41.579 [DEBUG] [Thread-14370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:58:41.579 [DEBUG] [Thread-14370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:58:41.579 [DEBUG] [Thread-14370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:58:41.598 [INFO] [Thread-14370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:58:41.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-25T15:58:41.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:58:42.415 [DEBUG] [Thread-14370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:58:42.415 [DEBUG] [Thread-14370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:58:42.464 [DEBUG] [Thread-14370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:58:42.464 [DEBUG] [Thread-14370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:58:42.473 [DEBUG] [Thread-14370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:58:42.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:58:42.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T15:58:42.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:58:42.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:58:42.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:58:42.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:58:42.510 [DEBUG] [Thread-14370] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:58:49.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:49.524 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:58:53.986 [DEBUG] [Thread-14372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:09.034 [DEBUG] [Thread-14373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:12.505 [DEBUG] [Thread-14374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:59:12.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:59:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T15:59:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 58, 50), 29.95, 13.37, 0.0, 29.94, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:59:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:58:50
2025-12-25T15:59:13.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:59:13.482 [DEBUG] [Thread-14375] [transport.py] [_log()] starting thread (client mode): 0xb95d7820
2025-12-25T15:59:13.482 [DEBUG] [Thread-14375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:59:13.503 [DEBUG] [Thread-14375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:59:13.503 [INFO] [Thread-14375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:59:13.506 [DEBUG] [Thread-14375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:59:13.506 [DEBUG] [Thread-14375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:59:13.506 [DEBUG] [Thread-14375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:59:13.506 [DEBUG] [Thread-14375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:13.506 [DEBUG] [Thread-14375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:13.506 [DEBUG] [Thread-14375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] client lang: <none>
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] server lang: <none>
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] kex follows: False
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] Compression: none
2025-12-25T15:59:13.507 [DEBUG] [Thread-14375] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:59:13.515 [DEBUG] [Thread-14375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:59:13.516 [DEBUG] [Thread-14375] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:59:13.516 [DEBUG] [Thread-14375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:59:13.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:59:13.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:59:13.518 [DEBUG] [Thread-14375] [transport.py] [_log()] userauth is OK
2025-12-25T15:59:13.519 [DEBUG] [Thread-14375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:59:13.519 [DEBUG] [Thread-14375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:59:13.519 [DEBUG] [Thread-14375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:59:13.519 [DEBUG] [Thread-14375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:59:13.544 [INFO] [Thread-14375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:59:13.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:59:14.217 [DEBUG] [Thread-14375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:59:14.217 [DEBUG] [Thread-14375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:59:14.218 [DEBUG] [Thread-14375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:59:14.258 [DEBUG] [Thread-14375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:59:14.258 [DEBUG] [Thread-14375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:59:14.262 [DEBUG] [Thread-14375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:59:14.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:59:14.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:59:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:59:14.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:59:14.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:59:14.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:59:14.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:59:14.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:59:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:59:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.582353 -999.00  +25.50  23.57     19   +0.50 1 1 1 1 1   888    0 22.30 -99.05 ----- 28.1 23.6 293.0 36.7 30.0 -29.3 29.9 -28.6 30.5 -26.0 31.1 -27.0
2025-12-25T15:59:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:59:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:59:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.582353
2025-12-25T15:59:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:59:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:59:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:59:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:59:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:59:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:58:50', tmtdew=29.95, humidity=13.37, cloud=0.0, wind=29.94, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:58:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:59:14.290 [DEBUG] [Thread-14375] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:59:14.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-25T15:59:14.386 [DEBUG] [Thread-14378] [transport.py] [_log()] starting thread (client mode): 0xb95b0dc0
2025-12-25T15:59:14.386 [DEBUG] [Thread-14378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:59:14.401 [DEBUG] [Thread-14378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:59:14.401 [INFO] [Thread-14378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:59:14.408 [DEBUG] [Thread-14378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:59:14.408 [DEBUG] [Thread-14378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] client lang: <none>
2025-12-25T15:59:14.409 [DEBUG] [Thread-14378] [transport.py] [_log()] server lang: <none>
2025-12-25T15:59:14.410 [DEBUG] [Thread-14378] [transport.py] [_log()] kex follows: False
2025-12-25T15:59:14.410 [DEBUG] [Thread-14378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:59:14.410 [DEBUG] [Thread-14378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:59:14.410 [DEBUG] [Thread-14378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:59:14.410 [DEBUG] [Thread-14378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:59:14.410 [DEBUG] [Thread-14378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:59:14.411 [DEBUG] [Thread-14378] [transport.py] [_log()] Compression: none
2025-12-25T15:59:14.411 [DEBUG] [Thread-14378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:59:14.466 [DEBUG] [Thread-14378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:59:14.466 [DEBUG] [Thread-14378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:59:14.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:59:14.468 [DEBUG] [Thread-14378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:59:14.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:59:14.522 [DEBUG] [Thread-14378] [transport.py] [_log()] userauth is OK
2025-12-25T15:59:14.522 [DEBUG] [Thread-14378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:59:14.522 [DEBUG] [Thread-14378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:59:14.522 [DEBUG] [Thread-14378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:59:14.522 [DEBUG] [Thread-14378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:59:14.540 [INFO] [Thread-14378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:59:14.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-25T15:59:14.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:59:15.406 [DEBUG] [Thread-14378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:59:15.407 [DEBUG] [Thread-14378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:59:15.455 [DEBUG] [Thread-14378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:59:15.455 [DEBUG] [Thread-14378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:59:15.464 [DEBUG] [Thread-14378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:59:15.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:59: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-25T15:59:15.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T15:59:15.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:59:15.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:59:15.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:59:15.496 [DEBUG] [Thread-14378] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:59:24.062 [DEBUG] [Thread-14380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:39.110 [DEBUG] [Thread-14381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:45.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T15:59:45.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T15:59:45.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-25T15:59:46.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 59, 22), 30.11, 13.24, 0.0, 31.99, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T15:59:46.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:59:22
2025-12-25T15:59:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T15:59:46.545 [DEBUG] [Thread-14382] [transport.py] [_log()] starting thread (client mode): 0xb6b2b8b0
2025-12-25T15:59:46.545 [DEBUG] [Thread-14382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:59:46.565 [DEBUG] [Thread-14382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T15:59:46.565 [INFO] [Thread-14382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T15:59:46.568 [DEBUG] [Thread-14382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:59:46.568 [DEBUG] [Thread-14382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T15:59:46.568 [DEBUG] [Thread-14382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:59:46.568 [DEBUG] [Thread-14382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] client lang: <none>
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] server lang: <none>
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] kex follows: False
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] Compression: none
2025-12-25T15:59:46.569 [DEBUG] [Thread-14382] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:59:46.585 [DEBUG] [Thread-14382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:59:46.585 [DEBUG] [Thread-14382] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:59:46.585 [DEBUG] [Thread-14382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T15:59:46.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T15:59:46.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:59:46.586 [DEBUG] [Thread-14382] [transport.py] [_log()] userauth is OK
2025-12-25T15:59:46.586 [DEBUG] [Thread-14382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:59:46.586 [DEBUG] [Thread-14382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:59:46.586 [DEBUG] [Thread-14382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T15:59:46.586 [DEBUG] [Thread-14382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:59:46.617 [INFO] [Thread-14382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:59:46.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:59:47.261 [DEBUG] [Thread-14382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:59:47.261 [DEBUG] [Thread-14382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:59:47.261 [DEBUG] [Thread-14382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T15:59:47.303 [DEBUG] [Thread-14382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:59:47.303 [DEBUG] [Thread-14382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:59:47.305 [DEBUG] [Thread-14382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:59:47.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:59:47.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T15:59:47.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T15:59:47.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T15:59:47.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:59:47.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T15:59:47.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:59:47.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:59:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T15:59:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.582700 -999.00  +25.50  28.18     19   +0.40 1 1 1 1 1   888    0 22.24 -94.47 ----- 22.2 28.2 280.2 38.1 29.8 -28.4 29.8 -28.7 30.2 -24.6 30.9 -27.0
2025-12-25T15:59:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T15:59:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T15:59:47.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.582700
2025-12-25T15:59:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T15:59:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T15:59:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T15:59:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T15:59:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T15:59:47.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:59:22', tmtdew=30.11, humidity=13.24, cloud=0.0, wind=31.99, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:59:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T15:59:47.325 [DEBUG] [Thread-14382] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:59:47.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-25T15:59:47.408 [DEBUG] [Thread-14385] [transport.py] [_log()] starting thread (client mode): 0xb6b001c0
2025-12-25T15:59:47.408 [DEBUG] [Thread-14385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T15:59:47.421 [DEBUG] [Thread-14385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T15:59:47.422 [INFO] [Thread-14385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] client lang: <none>
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] server lang: <none>
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] kex follows: False
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T15:59:47.429 [DEBUG] [Thread-14385] [transport.py] [_log()] Compression: none
2025-12-25T15:59:47.430 [DEBUG] [Thread-14385] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T15:59:47.488 [DEBUG] [Thread-14385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T15:59:47.488 [DEBUG] [Thread-14385] [transport.py] [_log()] Switch to new keys ...
2025-12-25T15:59:47.489 [DEBUG] [Thread-14385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T15:59:47.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T15:59:47.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T15:59:47.545 [DEBUG] [Thread-14385] [transport.py] [_log()] userauth is OK
2025-12-25T15:59:47.545 [DEBUG] [Thread-14385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T15:59:47.545 [DEBUG] [Thread-14385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T15:59:47.545 [DEBUG] [Thread-14385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T15:59:47.545 [DEBUG] [Thread-14385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T15:59:47.562 [INFO] [Thread-14385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T15:59:47.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-25T15:59:47.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T15:59:48.426 [DEBUG] [Thread-14385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T15:59:48.434 [DEBUG] [Thread-14385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T15:59:48.474 [DEBUG] [Thread-14385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T15:59:48.474 [DEBUG] [Thread-14385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T15:59:48.483 [DEBUG] [Thread-14385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T15:59:48.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T15:59:48.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-25T15:59:48.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-25T15:59:48.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T15:59:48.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T15:59:48.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T15:59:48.514 [DEBUG] [Thread-14385] [transport.py] [_log()] EOF in transport thread
2025-12-25T15:59:49.662 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:49.663 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T15:59:54.152 [DEBUG] [Thread-14387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:09.198 [DEBUG] [Thread-14388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:12.557 [DEBUG] [Thread-14389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:00:18.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:00:18.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-25T16:00:19.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 15, 59, 54), 29.93, 13.71, 0.0, 29.85, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:00:19.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 15:59:54
2025-12-25T16:00:19.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:00:19.498 [DEBUG] [Thread-14390] [transport.py] [_log()] starting thread (client mode): 0xb95d63e0
2025-12-25T16:00:19.498 [DEBUG] [Thread-14390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:00:19.521 [DEBUG] [Thread-14390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:00:19.521 [INFO] [Thread-14390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:19.525 [DEBUG] [Thread-14390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] client lang: <none>
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] server lang: <none>
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] kex follows: False
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:00:19.526 [DEBUG] [Thread-14390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:00:19.527 [DEBUG] [Thread-14390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:00:19.527 [DEBUG] [Thread-14390] [transport.py] [_log()] Compression: none
2025-12-25T16:00:19.527 [DEBUG] [Thread-14390] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:00:19.545 [DEBUG] [Thread-14390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:00:19.545 [DEBUG] [Thread-14390] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:00:19.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:00:19.546 [DEBUG] [Thread-14390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:00:19.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:00:19.548 [DEBUG] [Thread-14390] [transport.py] [_log()] userauth is OK
2025-12-25T16:00:19.548 [DEBUG] [Thread-14390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:00:19.548 [DEBUG] [Thread-14390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:00:19.548 [DEBUG] [Thread-14390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:00:19.548 [DEBUG] [Thread-14390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:00:19.572 [INFO] [Thread-14390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:00:19.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:00:20.256 [DEBUG] [Thread-14390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:00:20.257 [DEBUG] [Thread-14390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:00:20.257 [DEBUG] [Thread-14390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:00:20.298 [DEBUG] [Thread-14390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:00:20.298 [DEBUG] [Thread-14390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:00:20.302 [DEBUG] [Thread-14390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:00:20.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:00:20.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:00:20.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:00:20.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:00:20.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:00:20.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:00:20.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.583047 -999.00  +25.50  29.02     19   +0.30 1 1 1 1 1   888    0 22.68 -92.34 ----- 23.2 29.0 297.6 33.4 29.9 -28.9 29.9 -28.5 30.4 -25.3 30.9 -26.8
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.583047
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:00:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T15:59:54', tmtdew=29.93, humidity=13.71, cloud=0.0, wind=29.85, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T13:59:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:00:20.321 [DEBUG] [Thread-14390] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:00:20.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-25T16:00:20.401 [DEBUG] [Thread-14393] [transport.py] [_log()] starting thread (client mode): 0xb95d5f90
2025-12-25T16:00:20.401 [DEBUG] [Thread-14393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:00:20.416 [DEBUG] [Thread-14393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:00:20.416 [INFO] [Thread-14393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] client lang: <none>
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] server lang: <none>
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] kex follows: False
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] Compression: none
2025-12-25T16:00:20.424 [DEBUG] [Thread-14393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:00:20.481 [DEBUG] [Thread-14393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:00:20.481 [DEBUG] [Thread-14393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:00:20.482 [DEBUG] [Thread-14393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:00:20.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:00:20.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:00:20.537 [DEBUG] [Thread-14393] [transport.py] [_log()] userauth is OK
2025-12-25T16:00:20.537 [DEBUG] [Thread-14393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:00:20.537 [DEBUG] [Thread-14393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:00:20.537 [DEBUG] [Thread-14393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:00:20.538 [DEBUG] [Thread-14393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:00:20.551 [INFO] [Thread-14393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:00:20.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-25T16:00:20.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:00:21.365 [DEBUG] [Thread-14393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:00:21.366 [DEBUG] [Thread-14393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:00:21.414 [DEBUG] [Thread-14393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:00:21.414 [DEBUG] [Thread-14393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:00:21.424 [DEBUG] [Thread-14393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:00:21.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:00:21.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:00:21.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:00:21.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:00:21.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:00:21.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:00:21.460 [DEBUG] [Thread-14393] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:00:24.230 [DEBUG] [Thread-14395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:39.271 [DEBUG] [Thread-14396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:49.804 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:49.805 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:51.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:00:51.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:00:51.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-25T16:00:52.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 0, 26), 29.95, 13.69, 0.0, 29.99, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:00:52.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:00:26
2025-12-25T16:00:52.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:00:52.464 [DEBUG] [Thread-14397] [transport.py] [_log()] starting thread (client mode): 0xb6b22a10
2025-12-25T16:00:52.464 [DEBUG] [Thread-14397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:00:52.481 [DEBUG] [Thread-14397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:00:52.482 [INFO] [Thread-14397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] client lang: <none>
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] server lang: <none>
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] kex follows: False
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] Compression: none
2025-12-25T16:00:52.485 [DEBUG] [Thread-14397] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:00:52.493 [DEBUG] [Thread-14397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:00:52.494 [DEBUG] [Thread-14397] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:00:52.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:00:52.494 [DEBUG] [Thread-14397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:00:52.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:00:52.496 [DEBUG] [Thread-14397] [transport.py] [_log()] userauth is OK
2025-12-25T16:00:52.496 [DEBUG] [Thread-14397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:00:52.496 [DEBUG] [Thread-14397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:00:52.496 [DEBUG] [Thread-14397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:00:52.496 [DEBUG] [Thread-14397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:00:52.515 [INFO] [Thread-14397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:00:52.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:00:53.074 [DEBUG] [Thread-14397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:00:53.074 [DEBUG] [Thread-14397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:00:53.075 [DEBUG] [Thread-14397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:00:53.116 [DEBUG] [Thread-14397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:00:53.116 [DEBUG] [Thread-14397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:00:53.120 [DEBUG] [Thread-14397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:00:53.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:00:53.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:00:53.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:00:53.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:00:53.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:00:53.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:00:53.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:00:53.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:00:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:00:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.583742 -999.00  +25.90  34.33     18   +0.40 1 1 2 1 1   888    0 23.28 -77.36 ----- 29.8 34.3 285.4 42.0 30.0 -27.4 29.9 -28.0 30.4 -24.8 31.1 -26.6
2025-12-25T16:00:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:00:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:00:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.583742
2025-12-25T16:00:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:00:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:00:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:00:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:00:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:00:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:00:26', tmtdew=29.95, humidity=13.69, cloud=0.0, wind=29.99, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:00:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:00:53.145 [DEBUG] [Thread-14397] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:00:53.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-25T16:00:53.235 [DEBUG] [Thread-14400] [transport.py] [_log()] starting thread (client mode): 0xb6b617b0
2025-12-25T16:00:53.235 [DEBUG] [Thread-14400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:00:53.250 [DEBUG] [Thread-14400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:00:53.250 [INFO] [Thread-14400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:00:53.258 [DEBUG] [Thread-14400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:00:53.258 [DEBUG] [Thread-14400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:00:53.258 [DEBUG] [Thread-14400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:00:53.258 [DEBUG] [Thread-14400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:53.258 [DEBUG] [Thread-14400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] client lang: <none>
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] server lang: <none>
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] kex follows: False
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] Compression: none
2025-12-25T16:00:53.259 [DEBUG] [Thread-14400] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:00:53.318 [DEBUG] [Thread-14400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:00:53.318 [DEBUG] [Thread-14400] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:00:53.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:00:53.319 [DEBUG] [Thread-14400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:00:53.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:00:53.374 [DEBUG] [Thread-14400] [transport.py] [_log()] userauth is OK
2025-12-25T16:00:53.374 [DEBUG] [Thread-14400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:00:53.374 [DEBUG] [Thread-14400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:00:53.374 [DEBUG] [Thread-14400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:00:53.375 [DEBUG] [Thread-14400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:00:53.393 [INFO] [Thread-14400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:00:53.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:00:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:00:54.223 [DEBUG] [Thread-14400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:00:54.223 [DEBUG] [Thread-14400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:00:54.271 [DEBUG] [Thread-14400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:00:54.271 [DEBUG] [Thread-14400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:00:54.281 [DEBUG] [Thread-14400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:00:54.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:00: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-25T16:00:54.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-25T16:00:54.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:00:54.310 [DEBUG] [Thread-14402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:00:54.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:00:54.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:00:54.319 [DEBUG] [Thread-14400] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:01:09.357 [DEBUG] [Thread-14403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:12.613 [DEBUG] [Thread-14404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:01:24.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:01:24.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-25T16:01:24.393 [DEBUG] [Thread-14405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:25.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 0, 58), 30.0, 13.72, 0.0, 30.61, 25.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:01:25.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:00:58
2025-12-25T16:01:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:01:25.314 [DEBUG] [Thread-14406] [transport.py] [_log()] starting thread (client mode): 0xb6b63c10
2025-12-25T16:01:25.314 [DEBUG] [Thread-14406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:01:25.334 [DEBUG] [Thread-14406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:01:25.334 [INFO] [Thread-14406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:01:25.337 [DEBUG] [Thread-14406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:01:25.337 [DEBUG] [Thread-14406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:01:25.337 [DEBUG] [Thread-14406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:01:25.337 [DEBUG] [Thread-14406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] client lang: <none>
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] server lang: <none>
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] kex follows: False
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] Compression: none
2025-12-25T16:01:25.338 [DEBUG] [Thread-14406] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:01:25.356 [DEBUG] [Thread-14406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:01:25.357 [DEBUG] [Thread-14406] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:01:25.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:01:25.358 [DEBUG] [Thread-14406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:01:25.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:01:25.360 [DEBUG] [Thread-14406] [transport.py] [_log()] userauth is OK
2025-12-25T16:01:25.360 [DEBUG] [Thread-14406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:01:25.360 [DEBUG] [Thread-14406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:01:25.360 [DEBUG] [Thread-14406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:01:25.361 [DEBUG] [Thread-14406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:01:25.384 [INFO] [Thread-14406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:01:25.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:01:26.010 [DEBUG] [Thread-14406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:01:26.010 [DEBUG] [Thread-14406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:01:26.011 [DEBUG] [Thread-14406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:01:26.051 [DEBUG] [Thread-14406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:01:26.051 [DEBUG] [Thread-14406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:01:26.055 [DEBUG] [Thread-14406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:01:26.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:01:26.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:01:26.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:01:26.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:01:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:01:26.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:01:26.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:01:26.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:01:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:01:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.584089 -999.00  +25.70  35.29     19   +0.30 1 1 2 1 1   888    0 23.52 -69.01 ----- 26.8 35.3 294.0 45.1 30.1 -27.9 29.9 -28.6 30.6 -27.0 31.1 -26.5
2025-12-25T16:01:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:01:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:01:26.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.584089
2025-12-25T16:01:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:01:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:01:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:01:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:01:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:01:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:00:58', tmtdew=30.0, humidity=13.72, cloud=0.0, wind=30.61, temperature=25.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:01:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:01:26.083 [DEBUG] [Thread-14406] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:01:26.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-25T16:01:26.176 [DEBUG] [Thread-14409] [transport.py] [_log()] starting thread (client mode): 0xb6b628f0
2025-12-25T16:01:26.177 [DEBUG] [Thread-14409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:01:26.191 [DEBUG] [Thread-14409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:01:26.192 [INFO] [Thread-14409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:01:26.199 [DEBUG] [Thread-14409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] client lang: <none>
2025-12-25T16:01:26.200 [DEBUG] [Thread-14409] [transport.py] [_log()] server lang: <none>
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] kex follows: False
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] Compression: none
2025-12-25T16:01:26.201 [DEBUG] [Thread-14409] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:01:26.258 [DEBUG] [Thread-14409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:01:26.259 [DEBUG] [Thread-14409] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:01:26.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:01:26.260 [DEBUG] [Thread-14409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:01:26.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:01:26.313 [DEBUG] [Thread-14409] [transport.py] [_log()] userauth is OK
2025-12-25T16:01:26.314 [DEBUG] [Thread-14409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:01:26.314 [DEBUG] [Thread-14409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:01:26.314 [DEBUG] [Thread-14409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:01:26.314 [DEBUG] [Thread-14409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:01:26.335 [INFO] [Thread-14409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:01:26.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-25T16:01:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:01:27.159 [DEBUG] [Thread-14409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:01:27.159 [DEBUG] [Thread-14409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:01:27.207 [DEBUG] [Thread-14409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:01:27.208 [DEBUG] [Thread-14409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:01:27.217 [DEBUG] [Thread-14409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:01:27.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:01: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-25T16:01: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-25T16:01:27.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:01:27.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:01:27.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:01:27.253 [DEBUG] [Thread-14409] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:01:39.426 [DEBUG] [Thread-14411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:49.943 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:49.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:54.472 [DEBUG] [Thread-14412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:01:57.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:01:57.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:01:57.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-25T16:01:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 1, 30), 30.15, 13.61, 0.0, 30.6, 26.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:01:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:01:30
2025-12-25T16:01:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:01:58.205 [DEBUG] [Thread-14413] [transport.py] [_log()] starting thread (client mode): 0xb6b003a0
2025-12-25T16:01:58.205 [DEBUG] [Thread-14413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:01:58.226 [DEBUG] [Thread-14413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:01:58.226 [INFO] [Thread-14413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:01:58.229 [DEBUG] [Thread-14413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:01:58.229 [DEBUG] [Thread-14413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:01:58.229 [DEBUG] [Thread-14413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:01:58.229 [DEBUG] [Thread-14413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:58.229 [DEBUG] [Thread-14413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] client lang: <none>
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] server lang: <none>
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] kex follows: False
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:01:58.230 [DEBUG] [Thread-14413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:01:58.231 [DEBUG] [Thread-14413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:01:58.231 [DEBUG] [Thread-14413] [transport.py] [_log()] Compression: none
2025-12-25T16:01:58.231 [DEBUG] [Thread-14413] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:01:58.249 [DEBUG] [Thread-14413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:01:58.249 [DEBUG] [Thread-14413] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:01:58.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:01:58.250 [DEBUG] [Thread-14413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:01:58.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:01:58.252 [DEBUG] [Thread-14413] [transport.py] [_log()] userauth is OK
2025-12-25T16:01:58.252 [DEBUG] [Thread-14413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:01:58.252 [DEBUG] [Thread-14413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:01:58.252 [DEBUG] [Thread-14413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:01:58.252 [DEBUG] [Thread-14413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:01:58.268 [INFO] [Thread-14413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:01:58.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:01:58.891 [DEBUG] [Thread-14413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:01:58.892 [DEBUG] [Thread-14413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:01:58.892 [DEBUG] [Thread-14413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:01:58.932 [DEBUG] [Thread-14413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:01:58.932 [DEBUG] [Thread-14413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:01:58.936 [DEBUG] [Thread-14413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:01:58.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:01:58.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:01:58.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:01:58.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:01:58.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:01:58.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:01:58.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:01:58.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:01:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:01:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.584436 -999.00  +25.30  32.89     19   +0.20 1 1 2 1 1   888    0 22.92 -57.77 ----- 31.0 32.9 273.4 40.4 29.9 -29.3 29.8 -29.8 29.9 -33.4 30.9 -29.1
2025-12-25T16:01:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:01:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:01:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.584436
2025-12-25T16:01:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:01:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:01:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:01:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:01:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:01:58.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:01:30', tmtdew=30.15, humidity=13.61, cloud=0.0, wind=30.6, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:01:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:01:58.956 [DEBUG] [Thread-14413] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:01:59.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-25T16:01:59.044 [DEBUG] [Thread-14416] [transport.py] [_log()] starting thread (client mode): 0xb6b2a710
2025-12-25T16:01:59.045 [DEBUG] [Thread-14416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:01:59.060 [DEBUG] [Thread-14416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:01:59.060 [INFO] [Thread-14416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:59.068 [DEBUG] [Thread-14416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] client lang: <none>
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] server lang: <none>
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] kex follows: False
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] Compression: none
2025-12-25T16:01:59.069 [DEBUG] [Thread-14416] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:01:59.125 [DEBUG] [Thread-14416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:01:59.126 [DEBUG] [Thread-14416] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:01:59.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:01:59.127 [DEBUG] [Thread-14416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:01:59.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:01:59.181 [DEBUG] [Thread-14416] [transport.py] [_log()] userauth is OK
2025-12-25T16:01:59.182 [DEBUG] [Thread-14416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:01:59.182 [DEBUG] [Thread-14416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:01:59.182 [DEBUG] [Thread-14416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:01:59.182 [DEBUG] [Thread-14416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:01:59.201 [INFO] [Thread-14416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:01:59.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-25T16:01:59.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:02:00.015 [DEBUG] [Thread-14416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:02:00.015 [DEBUG] [Thread-14416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:02:00.062 [DEBUG] [Thread-14416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:02:00.063 [DEBUG] [Thread-14416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:02:00.072 [DEBUG] [Thread-14416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:02:00.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:02:00.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-25T16:02:00.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-25T16:02:00.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:02:00.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:02:00.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:02:00.107 [DEBUG] [Thread-14416] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:02:09.507 [DEBUG] [Thread-14418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:02:12.645 [DEBUG] [Thread-14419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:02:24.548 [DEBUG] [Thread-14420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:02:30.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:02:30.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:02:30.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-25T16:02:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 2, 2), 30.24, 13.57, 0.0, 37.16, 26.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:02:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:02:02
2025-12-25T16:02:30.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:02:31.101 [DEBUG] [Thread-14421] [transport.py] [_log()] starting thread (client mode): 0xb6b638e0
2025-12-25T16:02:31.101 [DEBUG] [Thread-14421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:02:31.122 [DEBUG] [Thread-14421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:02:31.122 [INFO] [Thread-14421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:02:31.125 [DEBUG] [Thread-14421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:02:31.125 [DEBUG] [Thread-14421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:02:31.125 [DEBUG] [Thread-14421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:02:31.125 [DEBUG] [Thread-14421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:02:31.125 [DEBUG] [Thread-14421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:02:31.125 [DEBUG] [Thread-14421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] client lang: <none>
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] server lang: <none>
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] kex follows: False
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] Compression: none
2025-12-25T16:02:31.126 [DEBUG] [Thread-14421] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:02:31.143 [DEBUG] [Thread-14421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:02:31.143 [DEBUG] [Thread-14421] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:02:31.144 [DEBUG] [Thread-14421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:02:31.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:02:31.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:02:31.146 [DEBUG] [Thread-14421] [transport.py] [_log()] userauth is OK
2025-12-25T16:02:31.146 [DEBUG] [Thread-14421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:02:31.146 [DEBUG] [Thread-14421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:02:31.146 [DEBUG] [Thread-14421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:02:31.146 [DEBUG] [Thread-14421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:02:31.168 [INFO] [Thread-14421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:02:31.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:02:31.803 [DEBUG] [Thread-14421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:02:31.804 [DEBUG] [Thread-14421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:02:31.804 [DEBUG] [Thread-14421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:02:31.845 [DEBUG] [Thread-14421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:02:31.845 [DEBUG] [Thread-14421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:02:31.849 [DEBUG] [Thread-14421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:02:31.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:02:31.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:02:31.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:02:31.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:02:31.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:02:31.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:02:31.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:02:31.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:02:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:02:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.584783 -999.00  +25.50  20.35     19   +0.30 1 1 1 1 1   888    0 23.76 -53.76 ----- 17.3 20.4 287.8 33.0 29.7 -29.3 29.7 -27.9 30.1 -27.9 30.9 -25.7
2025-12-25T16:02:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:02:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:02:31.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.584783
2025-12-25T16:02:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:02:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:02:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:02:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:02:31.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:02:31.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:02:02', tmtdew=30.24, humidity=13.57, cloud=0.0, wind=37.16, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:02:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:02:31.877 [DEBUG] [Thread-14421] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:02:31.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-25T16:02:31.970 [DEBUG] [Thread-14424] [transport.py] [_log()] starting thread (client mode): 0xb95d6440
2025-12-25T16:02:31.970 [DEBUG] [Thread-14424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:02:31.985 [DEBUG] [Thread-14424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:02:31.985 [INFO] [Thread-14424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:02:31.992 [DEBUG] [Thread-14424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] client lang: <none>
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] server lang: <none>
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] kex follows: False
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] Compression: none
2025-12-25T16:02:31.993 [DEBUG] [Thread-14424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:02:32.050 [DEBUG] [Thread-14424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:02:32.050 [DEBUG] [Thread-14424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:02:32.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:02:32.052 [DEBUG] [Thread-14424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:02:32.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:02:32.107 [DEBUG] [Thread-14424] [transport.py] [_log()] userauth is OK
2025-12-25T16:02:32.107 [DEBUG] [Thread-14424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:02:32.108 [DEBUG] [Thread-14424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:02:32.108 [DEBUG] [Thread-14424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:02:32.108 [DEBUG] [Thread-14424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:02:32.133 [INFO] [Thread-14424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:02:32.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-25T16:02:32.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:02:32.960 [DEBUG] [Thread-14424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:02:32.960 [DEBUG] [Thread-14424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:02:33.008 [DEBUG] [Thread-14424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:02:33.009 [DEBUG] [Thread-14424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:02:33.018 [DEBUG] [Thread-14424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:02:33.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:02:33.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-25T16:02:33.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:02:33.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:02:33.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:02:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:02:33.054 [DEBUG] [Thread-14424] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:02:39.582 [DEBUG] [Thread-14426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:02:50.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:02:50.084 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:02:54.632 [DEBUG] [Thread-14427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:03:03.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:03:03.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-25T16:03:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 2, 34), 30.84, 12.99, 0.0, 26.7, 26.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:03:03.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:02:34
2025-12-25T16:03:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:03:04.094 [DEBUG] [Thread-14428] [transport.py] [_log()] starting thread (client mode): 0xb6b2a230
2025-12-25T16:03:04.094 [DEBUG] [Thread-14428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:03:04.114 [DEBUG] [Thread-14428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:03:04.114 [INFO] [Thread-14428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] client lang: <none>
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] server lang: <none>
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] kex follows: False
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] Compression: none
2025-12-25T16:03:04.117 [DEBUG] [Thread-14428] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:03:04.124 [DEBUG] [Thread-14428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:03:04.125 [DEBUG] [Thread-14428] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:03:04.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:03:04.125 [DEBUG] [Thread-14428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:03:04.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:03:04.126 [DEBUG] [Thread-14428] [transport.py] [_log()] userauth is OK
2025-12-25T16:03:04.126 [DEBUG] [Thread-14428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:03:04.126 [DEBUG] [Thread-14428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:03:04.126 [DEBUG] [Thread-14428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:03:04.126 [DEBUG] [Thread-14428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:03:04.139 [INFO] [Thread-14428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:03:04.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:03:04.740 [DEBUG] [Thread-14428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:03:04.740 [DEBUG] [Thread-14428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:03:04.741 [DEBUG] [Thread-14428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:03:04.781 [DEBUG] [Thread-14428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:03:04.781 [DEBUG] [Thread-14428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:03:04.784 [DEBUG] [Thread-14428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:03:04.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:03:04.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:03:04.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:03:04.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:03:04.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:03:04.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:03:04.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:03:04.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:03:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:03:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.585131 -999.00  +26.10  18.89     18   +0.50 1 1 1 1 1   888    0 24.02 -44.84 ----- 24.2 18.9 290.8 25.3 29.9 -26.9 29.9 -27.6 30.3 -26.7 30.9 -26.6
2025-12-25T16:03:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:03:04.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:03:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.585131
2025-12-25T16:03:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:03:04.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:03:04.810 [DEBUG] [Thread-14428] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:03:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:03:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:03:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:03:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:02:34', tmtdew=30.84, humidity=12.99, cloud=0.0, wind=26.7, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:02:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:03:04.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-25T16:03:04.905 [DEBUG] [Thread-14431] [transport.py] [_log()] starting thread (client mode): 0xb6b60b80
2025-12-25T16:03:04.905 [DEBUG] [Thread-14431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:03:04.920 [DEBUG] [Thread-14431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:03:04.920 [INFO] [Thread-14431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:04.931 [DEBUG] [Thread-14431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] client lang: <none>
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] server lang: <none>
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] kex follows: False
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] Compression: none
2025-12-25T16:03:04.932 [DEBUG] [Thread-14431] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:03:04.990 [DEBUG] [Thread-14431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:03:04.991 [DEBUG] [Thread-14431] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:03:04.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:03:04.992 [DEBUG] [Thread-14431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:03:04.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:03:05.052 [DEBUG] [Thread-14431] [transport.py] [_log()] userauth is OK
2025-12-25T16:03:05.052 [DEBUG] [Thread-14431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:03:05.052 [DEBUG] [Thread-14431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:03:05.052 [DEBUG] [Thread-14431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:03:05.052 [DEBUG] [Thread-14431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:03:05.075 [INFO] [Thread-14431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:03:05.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-25T16:03:05.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:03:05.937 [DEBUG] [Thread-14431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:03:05.937 [DEBUG] [Thread-14431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:03:05.985 [DEBUG] [Thread-14431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:03:05.985 [DEBUG] [Thread-14431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:03:05.994 [DEBUG] [Thread-14431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:03:06.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:03:06.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-25T16:03:06.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-25T16:03:06.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:03:06.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:03:06.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:03:06.031 [DEBUG] [Thread-14431] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:03:09.664 [DEBUG] [Thread-14433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:12.699 [DEBUG] [Thread-14434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:24.714 [DEBUG] [Thread-14435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:36.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:03:36.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:03:36.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-25T16:03:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 3, 6), 30.63, 13.21, 0.0, 25.62, 26.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:03:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:03:06
2025-12-25T16:03:36.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:03:37.022 [DEBUG] [Thread-14436] [transport.py] [_log()] starting thread (client mode): 0xb6b62f20
2025-12-25T16:03:37.022 [DEBUG] [Thread-14436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:03:37.040 [DEBUG] [Thread-14436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:03:37.040 [INFO] [Thread-14436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:03:37.043 [DEBUG] [Thread-14436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:03:37.043 [DEBUG] [Thread-14436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:03:37.043 [DEBUG] [Thread-14436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:03:37.043 [DEBUG] [Thread-14436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] client lang: <none>
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] server lang: <none>
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] kex follows: False
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] Compression: none
2025-12-25T16:03:37.044 [DEBUG] [Thread-14436] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:03:37.058 [DEBUG] [Thread-14436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:03:37.058 [DEBUG] [Thread-14436] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:03:37.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:03:37.058 [DEBUG] [Thread-14436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:03:37.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:03:37.059 [DEBUG] [Thread-14436] [transport.py] [_log()] userauth is OK
2025-12-25T16:03:37.059 [DEBUG] [Thread-14436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:03:37.059 [DEBUG] [Thread-14436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:03:37.059 [DEBUG] [Thread-14436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:03:37.059 [DEBUG] [Thread-14436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:03:37.086 [INFO] [Thread-14436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:03:37.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:03:37.719 [DEBUG] [Thread-14436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:03:37.719 [DEBUG] [Thread-14436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:03:37.719 [DEBUG] [Thread-14436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:03:37.759 [DEBUG] [Thread-14436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:03:37.759 [DEBUG] [Thread-14436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:03:37.761 [DEBUG] [Thread-14436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:03:37.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:03:37.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:03:37.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:03:37.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:03:37.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:03:37.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:03:37.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.585478 -999.00  +26.50  27.76     18   +0.70 1 1 1 1 1   888    0 24.04 -41.30 ----- 39.5 27.8 285.4 30.7 30.0 -27.4 29.9 -27.2 30.6 -23.7 31.1 -26.3
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.585478
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:03:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:03:37.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:03:37.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:03:06', tmtdew=30.63, humidity=13.21, cloud=0.0, wind=25.62, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:03:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:03:37.780 [DEBUG] [Thread-14436] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:03:37.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-25T16:03:37.872 [DEBUG] [Thread-14439] [transport.py] [_log()] starting thread (client mode): 0xb6bc3a90
2025-12-25T16:03:37.872 [DEBUG] [Thread-14439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:03:37.888 [DEBUG] [Thread-14439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:03:37.888 [INFO] [Thread-14439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:03:37.895 [DEBUG] [Thread-14439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:03:37.895 [DEBUG] [Thread-14439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:03:37.895 [DEBUG] [Thread-14439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:03:37.895 [DEBUG] [Thread-14439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:37.895 [DEBUG] [Thread-14439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:03:37.895 [DEBUG] [Thread-14439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] client lang: <none>
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] server lang: <none>
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] kex follows: False
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] Compression: none
2025-12-25T16:03:37.896 [DEBUG] [Thread-14439] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:03:37.952 [DEBUG] [Thread-14439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:03:37.952 [DEBUG] [Thread-14439] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:03:37.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:03:37.952 [DEBUG] [Thread-14439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:03:37.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:03:38.009 [DEBUG] [Thread-14439] [transport.py] [_log()] userauth is OK
2025-12-25T16:03:38.009 [DEBUG] [Thread-14439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:03:38.009 [DEBUG] [Thread-14439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:03:38.009 [DEBUG] [Thread-14439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:03:38.009 [DEBUG] [Thread-14439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:03:38.023 [INFO] [Thread-14439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:03:38.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:03:38.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:03:38.900 [DEBUG] [Thread-14439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:03:38.900 [DEBUG] [Thread-14439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:03:38.948 [DEBUG] [Thread-14439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:03:38.948 [DEBUG] [Thread-14439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:03:38.957 [DEBUG] [Thread-14439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:03:38.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:03:38.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-25T16:03:38.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-25T16:03:38.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:03:38.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:03:38.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:03:38.988 [DEBUG] [Thread-14439] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:03:39.748 [DEBUG] [Thread-14441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:50.226 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:50.227 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:03:54.788 [DEBUG] [Thread-14442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:04:09.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:04:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:04:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 3, 38), 30.92, 13.17, 0.0, 36.88, 27.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:04:09.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:03:38
2025-12-25T16:04:09.822 [DEBUG] [Thread-14443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:09.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:04:09.980 [DEBUG] [Thread-14444] [transport.py] [_log()] starting thread (client mode): 0xb6bc09d0
2025-12-25T16:04:09.980 [DEBUG] [Thread-14444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:04:10.000 [DEBUG] [Thread-14444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:04:10.000 [INFO] [Thread-14444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] client lang: <none>
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] server lang: <none>
2025-12-25T16:04:10.002 [DEBUG] [Thread-14444] [transport.py] [_log()] kex follows: False
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] Compression: none
2025-12-25T16:04:10.003 [DEBUG] [Thread-14444] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:04:10.024 [DEBUG] [Thread-14444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:04:10.024 [DEBUG] [Thread-14444] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:04:10.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:04:10.026 [DEBUG] [Thread-14444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:04:10.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:04:10.028 [DEBUG] [Thread-14444] [transport.py] [_log()] userauth is OK
2025-12-25T16:04:10.028 [DEBUG] [Thread-14444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:04:10.029 [DEBUG] [Thread-14444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:04:10.029 [DEBUG] [Thread-14444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:04:10.029 [DEBUG] [Thread-14444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:04:10.050 [INFO] [Thread-14444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:04:10.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:04:10.694 [DEBUG] [Thread-14444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:04:10.694 [DEBUG] [Thread-14444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:04:10.695 [DEBUG] [Thread-14444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:04:10.735 [DEBUG] [Thread-14444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:04:10.735 [DEBUG] [Thread-14444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:04:10.738 [DEBUG] [Thread-14444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:04:10.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:04:10.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:04:10.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:04:10.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:04:10.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:04:10.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:04:10.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:04:10.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:04:10.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:04:10.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.585825 -999.00  +25.70  43.96     19   +0.70 1 1 2 1 1   888    0 23.96 -37.64 ----- 38.1 44.0 296.4 50.0 30.0 -29.1 29.9 -28.9 30.3 -29.2 31.0 -26.8
2025-12-25T16:04:10.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:04:10.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:04:10.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.585825
2025-12-25T16:04:10.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:04:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:04:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:04:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:04:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:04:10.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:03:38', tmtdew=30.92, humidity=13.17, cloud=0.0, wind=36.88, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:03:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:04:10.763 [DEBUG] [Thread-14444] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:04:10.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-25T16:04:10.856 [DEBUG] [Thread-14447] [transport.py] [_log()] starting thread (client mode): 0xb6bc0a00
2025-12-25T16:04:10.856 [DEBUG] [Thread-14447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:04:10.871 [DEBUG] [Thread-14447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:04:10.871 [INFO] [Thread-14447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] client lang: <none>
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] server lang: <none>
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] kex follows: False
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:04:10.878 [DEBUG] [Thread-14447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:04:10.879 [DEBUG] [Thread-14447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:04:10.879 [DEBUG] [Thread-14447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:04:10.879 [DEBUG] [Thread-14447] [transport.py] [_log()] Compression: none
2025-12-25T16:04:10.879 [DEBUG] [Thread-14447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:04:10.941 [DEBUG] [Thread-14447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:04:10.941 [DEBUG] [Thread-14447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:04:10.941 [DEBUG] [Thread-14447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:04:10.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:04:10.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:04:10.998 [DEBUG] [Thread-14447] [transport.py] [_log()] userauth is OK
2025-12-25T16:04:10.998 [DEBUG] [Thread-14447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:04:10.998 [DEBUG] [Thread-14447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:04:10.998 [DEBUG] [Thread-14447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:04:10.998 [DEBUG] [Thread-14447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:04:11.017 [INFO] [Thread-14447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:04:11.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-25T16:04:11.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:04:11.872 [DEBUG] [Thread-14447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:04:11.872 [DEBUG] [Thread-14447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:04:11.921 [DEBUG] [Thread-14447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:04:11.921 [DEBUG] [Thread-14447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:04:11.929 [DEBUG] [Thread-14447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:04:11.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:04: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')
2025-12-25T16:04: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') -> 00000000
2025-12-25T16:04:11.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:04:11.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:04:11.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:04:11.960 [DEBUG] [Thread-14447] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:04:12.746 [DEBUG] [Thread-14449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:24.851 [DEBUG] [Thread-14450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:39.898 [DEBUG] [Thread-14451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:04:41.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:04:41.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-25T16:04:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 4, 10), 30.67, 13.35, 0.0, 35.64, 27.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:04:42.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:04:10
2025-12-25T16:04:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:04:42.954 [DEBUG] [Thread-14452] [transport.py] [_log()] starting thread (client mode): 0xb6b61900
2025-12-25T16:04:42.954 [DEBUG] [Thread-14452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:04:42.974 [DEBUG] [Thread-14452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:04:42.974 [INFO] [Thread-14452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:04:42.977 [DEBUG] [Thread-14452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:04:42.977 [DEBUG] [Thread-14452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:04:42.977 [DEBUG] [Thread-14452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] client lang: <none>
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] server lang: <none>
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] kex follows: False
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] Compression: none
2025-12-25T16:04:42.978 [DEBUG] [Thread-14452] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:04:42.997 [DEBUG] [Thread-14452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:04:42.997 [DEBUG] [Thread-14452] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:04:42.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:04:42.998 [DEBUG] [Thread-14452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:04:42.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:04:43.000 [DEBUG] [Thread-14452] [transport.py] [_log()] userauth is OK
2025-12-25T16:04:43.000 [DEBUG] [Thread-14452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:04:43.001 [DEBUG] [Thread-14452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:04:43.001 [DEBUG] [Thread-14452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:04:43.001 [DEBUG] [Thread-14452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:04:43.022 [INFO] [Thread-14452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:04:43.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:04:43.673 [DEBUG] [Thread-14452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:04:43.673 [DEBUG] [Thread-14452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:04:43.673 [DEBUG] [Thread-14452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:04:43.714 [DEBUG] [Thread-14452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:04:43.714 [DEBUG] [Thread-14452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:04:43.716 [DEBUG] [Thread-14452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:04:43.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:04:43.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:04:43.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:04:43.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:04:43.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:04:43.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:04:43.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:04:43.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:04:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:04:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.586172 -999.00  +25.40  24.72     20   +0.80 1 1 1 1 1   888    0 24.30 -33.65 ----- 23.3 24.7 311.6 42.3 29.8 -28.9 29.7 -27.7 30.4 -24.3 30.8 -25.8
2025-12-25T16:04:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:04:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:04:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.586172
2025-12-25T16:04:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:04:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:04:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:04:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:04:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:04:43.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:04:10', tmtdew=30.67, humidity=13.35, cloud=0.0, wind=35.64, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:04:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:04:43.734 [DEBUG] [Thread-14452] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:04:43.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:04:50.368 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:50.369 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:04:54.932 [DEBUG] [Thread-14455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:09.974 [DEBUG] [Thread-14456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:12.792 [DEBUG] [Thread-14457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:25.010 [DEBUG] [Thread-14458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:40.043 [DEBUG] [Thread-14459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:50.508 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:50.509 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:05:55.081 [DEBUG] [Thread-14460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:10.118 [DEBUG] [Thread-14461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:12.843 [DEBUG] [Thread-14462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:25.149 [DEBUG] [Thread-14463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:40.182 [DEBUG] [Thread-14464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:50.648 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:50.650 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:55.214 [DEBUG] [Thread-14465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:06:55.957 [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-25T16:07:10.245 [DEBUG] [Thread-14466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:12.898 [DEBUG] [Thread-14467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:25.277 [DEBUG] [Thread-14468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:25.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:07:25.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:07:25.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-25T16:07:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 7, 23), 28.99, 14.5, 0.0, 35.46, 26.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:07:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:07:23
2025-12-25T16:07:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:07:26.965 [DEBUG] [Thread-14469] [transport.py] [_log()] starting thread (client mode): 0xb6b63af0
2025-12-25T16:07:26.965 [DEBUG] [Thread-14469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:07:26.980 [DEBUG] [Thread-14469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:07:26.980 [INFO] [Thread-14469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] client lang: <none>
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] server lang: <none>
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] kex follows: False
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] Compression: none
2025-12-25T16:07:26.982 [DEBUG] [Thread-14469] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:07:26.993 [DEBUG] [Thread-14469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:07:26.993 [DEBUG] [Thread-14469] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:07:26.993 [DEBUG] [Thread-14469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:07:26.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:07:26.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:07:26.995 [DEBUG] [Thread-14469] [transport.py] [_log()] userauth is OK
2025-12-25T16:07:26.995 [DEBUG] [Thread-14469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:07:26.995 [DEBUG] [Thread-14469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:07:26.995 [DEBUG] [Thread-14469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:07:26.995 [DEBUG] [Thread-14469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:07:27.018 [INFO] [Thread-14469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:07:27.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:07:27.670 [DEBUG] [Thread-14469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:07:27.671 [DEBUG] [Thread-14469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:07:27.671 [DEBUG] [Thread-14469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:07:27.712 [DEBUG] [Thread-14469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:07:27.712 [DEBUG] [Thread-14469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:07:27.716 [DEBUG] [Thread-14469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:07:27.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:07:27.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:07:27.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:07:27.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:07:27.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:07:27.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:07:27.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:07:27.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:07:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:07:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.588256 -999.00  +26.20  37.38     19   +0.90 1 1 2 1 1   888    0 24.70 -18.49 ----- 40.6 37.4 291.2 43.5 29.8 -27.6 29.7 -27.4 30.2 -26.3 30.9 -26.0
2025-12-25T16:07:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:07:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:07:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.588256
2025-12-25T16:07:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:07:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:07:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:07:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:07:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:07:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:07:23', tmtdew=28.99, humidity=14.5, cloud=0.0, wind=35.46, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:07:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:07:27.744 [DEBUG] [Thread-14469] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:07:27.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-25T16:07:27.834 [DEBUG] [Thread-14472] [transport.py] [_log()] starting thread (client mode): 0xb6bc2770
2025-12-25T16:07:27.834 [DEBUG] [Thread-14472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:07:27.849 [DEBUG] [Thread-14472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:07:27.849 [INFO] [Thread-14472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:07:27.857 [DEBUG] [Thread-14472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] client lang: <none>
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] server lang: <none>
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] kex follows: False
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:07:27.858 [DEBUG] [Thread-14472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:07:27.859 [DEBUG] [Thread-14472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:07:27.859 [DEBUG] [Thread-14472] [transport.py] [_log()] Compression: none
2025-12-25T16:07:27.859 [DEBUG] [Thread-14472] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:07:27.912 [DEBUG] [Thread-14472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:07:27.912 [DEBUG] [Thread-14472] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:07:27.912 [DEBUG] [Thread-14472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:07:27.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:07:27.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:07:27.971 [DEBUG] [Thread-14472] [transport.py] [_log()] userauth is OK
2025-12-25T16:07:27.972 [DEBUG] [Thread-14472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:07:27.972 [DEBUG] [Thread-14472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:07:27.972 [DEBUG] [Thread-14472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:07:27.972 [DEBUG] [Thread-14472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:07:27.991 [INFO] [Thread-14472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:07:27.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-25T16:07:27.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:07:28.828 [DEBUG] [Thread-14472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:07:28.829 [DEBUG] [Thread-14472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:07:28.877 [DEBUG] [Thread-14472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:07:28.877 [DEBUG] [Thread-14472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:07:28.886 [DEBUG] [Thread-14472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:07:28.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:07:28.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')
2025-12-25T16:07:28.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:07:28.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:07:28.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:07:28.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:07:28.922 [DEBUG] [Thread-14472] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:07:40.310 [DEBUG] [Thread-14474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:50.788 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:50.789 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:55.373 [DEBUG] [Thread-14475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:07:58.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:07:58.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:07:58.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-25T16:07:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 7, 55), 29.51, 14.0, 0.0, 34.35, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:07:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:07:55
2025-12-25T16:07:59.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:07:59.946 [DEBUG] [Thread-14476] [transport.py] [_log()] starting thread (client mode): 0xb6bc1120
2025-12-25T16:07:59.946 [DEBUG] [Thread-14476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:07:59.962 [DEBUG] [Thread-14476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:07:59.962 [INFO] [Thread-14476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] client lang: <none>
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] server lang: <none>
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] kex follows: False
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] Compression: none
2025-12-25T16:07:59.964 [DEBUG] [Thread-14476] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:07:59.978 [DEBUG] [Thread-14476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:07:59.978 [DEBUG] [Thread-14476] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:07:59.978 [DEBUG] [Thread-14476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:07:59.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:07:59.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:07:59.980 [DEBUG] [Thread-14476] [transport.py] [_log()] userauth is OK
2025-12-25T16:07:59.980 [DEBUG] [Thread-14476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:07:59.980 [DEBUG] [Thread-14476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:07:59.980 [DEBUG] [Thread-14476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:07:59.980 [DEBUG] [Thread-14476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:07:59.993 [INFO] [Thread-14476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:07:59.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:08:00.645 [DEBUG] [Thread-14476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:08:00.646 [DEBUG] [Thread-14476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:08:00.646 [DEBUG] [Thread-14476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:08:00.693 [DEBUG] [Thread-14476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:08:00.693 [DEBUG] [Thread-14476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:08:00.698 [DEBUG] [Thread-14476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:08:00.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:08:00.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:08:00.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:08:00.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:08:00.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:08:00.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:08:00.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:08:00.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:08:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:08:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.588603 -999.00  +25.50  38.15     19   +0.70 1 1 2 1 1   888    0 24.23 -16.48 ----- 31.7 38.1 296.6 46.0 29.7 -28.6 29.6 -27.3 30.1 -27.4 30.7 -25.6
2025-12-25T16:08:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:08:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:08:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.588603
2025-12-25T16:08:00.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:08:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:08:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:08:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:08:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:08:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:07:55', tmtdew=29.51, humidity=14.0, cloud=0.0, wind=34.35, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:07:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:08:00.726 [DEBUG] [Thread-14476] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:08:00.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-25T16:08:00.831 [DEBUG] [Thread-14479] [transport.py] [_log()] starting thread (client mode): 0xb6b63af0
2025-12-25T16:08:00.831 [DEBUG] [Thread-14479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:08:00.846 [DEBUG] [Thread-14479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:08:00.846 [INFO] [Thread-14479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] client lang: <none>
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] server lang: <none>
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] kex follows: False
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:08:00.854 [DEBUG] [Thread-14479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:08:00.855 [DEBUG] [Thread-14479] [transport.py] [_log()] Compression: none
2025-12-25T16:08:00.855 [DEBUG] [Thread-14479] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:08:00.913 [DEBUG] [Thread-14479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:08:00.914 [DEBUG] [Thread-14479] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:08:00.915 [DEBUG] [Thread-14479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:08:00.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:08:00.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:08:00.970 [DEBUG] [Thread-14479] [transport.py] [_log()] userauth is OK
2025-12-25T16:08:00.970 [DEBUG] [Thread-14479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:08:00.970 [DEBUG] [Thread-14479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:08:00.971 [DEBUG] [Thread-14479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:08:00.971 [DEBUG] [Thread-14479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:08:00.989 [INFO] [Thread-14479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:08:00.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-25T16:08:00.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:08:01.872 [DEBUG] [Thread-14479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:08:01.872 [DEBUG] [Thread-14479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:08:01.920 [DEBUG] [Thread-14479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:08:01.920 [DEBUG] [Thread-14479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:08:01.929 [DEBUG] [Thread-14479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:08:01.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:08:01.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-25T16:08:01.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-25T16:08:01.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:08:01.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:08:01.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:08:01.966 [DEBUG] [Thread-14479] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:08:10.407 [DEBUG] [Thread-14481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:08:12.947 [DEBUG] [Thread-14482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:08:25.443 [DEBUG] [Thread-14483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:08:31.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:08:31.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:08:31.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-25T16:08:32.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 8, 27), 29.78, 13.71, 0.0, 35.09, 26.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:08:32.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:08:27
2025-12-25T16:08:32.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:08:32.972 [DEBUG] [Thread-14484] [transport.py] [_log()] starting thread (client mode): 0xb6bc3400
2025-12-25T16:08:32.972 [DEBUG] [Thread-14484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:08:32.991 [DEBUG] [Thread-14484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:08:32.991 [INFO] [Thread-14484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] client lang: <none>
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] server lang: <none>
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] kex follows: False
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] Compression: none
2025-12-25T16:08:32.992 [DEBUG] [Thread-14484] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:08:33.000 [DEBUG] [Thread-14484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:08:33.000 [DEBUG] [Thread-14484] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:08:33.001 [DEBUG] [Thread-14484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:08:33.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:08:33.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:08:33.002 [DEBUG] [Thread-14484] [transport.py] [_log()] userauth is OK
2025-12-25T16:08:33.002 [DEBUG] [Thread-14484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:08:33.003 [DEBUG] [Thread-14484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:08:33.003 [DEBUG] [Thread-14484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:08:33.003 [DEBUG] [Thread-14484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:08:33.026 [INFO] [Thread-14484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:08:33.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:08:33.687 [DEBUG] [Thread-14484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:08:33.687 [DEBUG] [Thread-14484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:08:33.688 [DEBUG] [Thread-14484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:08:33.728 [DEBUG] [Thread-14484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:08:33.728 [DEBUG] [Thread-14484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:08:33.731 [DEBUG] [Thread-14484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:08:33.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:08:33.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:08:33.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:08:33.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:08:33.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:08:33.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:08:33.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:08:33.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:08:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:08:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.588950 -999.00  +25.30  38.92     20   +0.80 1 1 2 1 1   888    0 24.65 -15.12 ----- 30.5 38.9 300.2 45.8 29.6 -28.7 29.6 -27.9 30.3 -26.5 30.7 -25.6
2025-12-25T16:08:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:08:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:08:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.588950
2025-12-25T16:08:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:08:33.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:08:33.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:08:33.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:08:33.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:08:33.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:08:27', tmtdew=29.78, humidity=13.71, cloud=0.0, wind=35.09, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:08:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:08:33.755 [DEBUG] [Thread-14484] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:08:33.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:08:33.850 [DEBUG] [Thread-14487] [transport.py] [_log()] starting thread (client mode): 0xb6b622c0
2025-12-25T16:08:33.850 [DEBUG] [Thread-14487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:08:33.865 [DEBUG] [Thread-14487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:08:33.865 [INFO] [Thread-14487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:08:33.872 [DEBUG] [Thread-14487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:08:33.872 [DEBUG] [Thread-14487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:08:33.872 [DEBUG] [Thread-14487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:08:33.872 [DEBUG] [Thread-14487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:08:33.872 [DEBUG] [Thread-14487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] client lang: <none>
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] server lang: <none>
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] kex follows: False
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] Compression: none
2025-12-25T16:08:33.873 [DEBUG] [Thread-14487] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:08:33.928 [DEBUG] [Thread-14487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:08:33.929 [DEBUG] [Thread-14487] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:08:33.929 [DEBUG] [Thread-14487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:08:33.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:08:33.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:08:33.985 [DEBUG] [Thread-14487] [transport.py] [_log()] userauth is OK
2025-12-25T16:08:33.985 [DEBUG] [Thread-14487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:08:33.985 [DEBUG] [Thread-14487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:08:33.986 [DEBUG] [Thread-14487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:08:33.986 [DEBUG] [Thread-14487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:08:34.003 [INFO] [Thread-14487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:08:34.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-25T16:08:34.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:08:34.828 [DEBUG] [Thread-14487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:08:34.828 [DEBUG] [Thread-14487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:08:34.876 [DEBUG] [Thread-14487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:08:34.876 [DEBUG] [Thread-14487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:08:34.884 [DEBUG] [Thread-14487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:08:34.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:08:34.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:08:34.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-25T16:08:34.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:08:34.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:08:34.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:08:34.918 [DEBUG] [Thread-14487] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:08:40.478 [DEBUG] [Thread-14489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:08:50.929 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:08:50.930 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:08:55.528 [DEBUG] [Thread-14490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:09:04.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:09:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:09:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 8, 59), 29.93, 13.93, 0.0, 30.95, 26.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:09:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:08:59
2025-12-25T16:09:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:09:05.894 [DEBUG] [Thread-14491] [transport.py] [_log()] starting thread (client mode): 0xb6b226b0
2025-12-25T16:09:05.894 [DEBUG] [Thread-14491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:09:05.914 [DEBUG] [Thread-14491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:09:05.914 [INFO] [Thread-14491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:09:05.917 [DEBUG] [Thread-14491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:09:05.917 [DEBUG] [Thread-14491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:09:05.917 [DEBUG] [Thread-14491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:09:05.917 [DEBUG] [Thread-14491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:05.917 [DEBUG] [Thread-14491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:05.917 [DEBUG] [Thread-14491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] client lang: <none>
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] server lang: <none>
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] kex follows: False
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] Compression: none
2025-12-25T16:09:05.918 [DEBUG] [Thread-14491] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:09:05.926 [DEBUG] [Thread-14491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:09:05.927 [DEBUG] [Thread-14491] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:09:05.927 [DEBUG] [Thread-14491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:09:05.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:09:05.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:09:05.928 [DEBUG] [Thread-14491] [transport.py] [_log()] userauth is OK
2025-12-25T16:09:05.928 [DEBUG] [Thread-14491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:09:05.928 [DEBUG] [Thread-14491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:09:05.928 [DEBUG] [Thread-14491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:09:05.928 [DEBUG] [Thread-14491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:09:05.941 [INFO] [Thread-14491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:09:05.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:09:06.621 [DEBUG] [Thread-14491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:09:06.621 [DEBUG] [Thread-14491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:09:06.622 [DEBUG] [Thread-14491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:09:06.662 [DEBUG] [Thread-14491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:09:06.662 [DEBUG] [Thread-14491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:09:06.665 [DEBUG] [Thread-14491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:09:06.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:09:06.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:09:06.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:09:06.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:09:06.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:09:06.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:09:06.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:09:06.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:09:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:09:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.589297 -999.00  +25.30  31.95     20   +0.80 1 1 2 1 1   888    0 25.07 -16.59 ----- 27.6 31.9 299.0 42.3 29.6 -27.6 29.6 -27.3 30.3 -24.3 30.7 -25.3
2025-12-25T16:09:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:09:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:09:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.589297
2025-12-25T16:09:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:09:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:09:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:09:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:09:06.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:09:06.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:08:59', tmtdew=29.93, humidity=13.93, cloud=0.0, wind=30.95, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:08:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:09:06.692 [DEBUG] [Thread-14491] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:09:06.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-25T16:09:06.785 [DEBUG] [Thread-14494] [transport.py] [_log()] starting thread (client mode): 0xb6b237c0
2025-12-25T16:09:06.785 [DEBUG] [Thread-14494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:09:06.801 [DEBUG] [Thread-14494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:09:06.801 [INFO] [Thread-14494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:09:06.808 [DEBUG] [Thread-14494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:09:06.809 [DEBUG] [Thread-14494] [transport.py] [_log()] client lang: <none>
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] server lang: <none>
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] kex follows: False
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] Compression: none
2025-12-25T16:09:06.810 [DEBUG] [Thread-14494] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:09:06.870 [DEBUG] [Thread-14494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:09:06.871 [DEBUG] [Thread-14494] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:09:06.872 [DEBUG] [Thread-14494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:09:06.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:09:06.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:09:06.930 [DEBUG] [Thread-14494] [transport.py] [_log()] userauth is OK
2025-12-25T16:09:06.930 [DEBUG] [Thread-14494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:09:06.931 [DEBUG] [Thread-14494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:09:06.931 [DEBUG] [Thread-14494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:09:06.931 [DEBUG] [Thread-14494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:09:06.953 [INFO] [Thread-14494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:09:06.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:09:06.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:09:07.794 [DEBUG] [Thread-14494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:09:07.794 [DEBUG] [Thread-14494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:09:07.842 [DEBUG] [Thread-14494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:09:07.842 [DEBUG] [Thread-14494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:09:07.852 [DEBUG] [Thread-14494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:09:07.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:09:07.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-25T16:09:07.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-25T16:09:07.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:09:07.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:09:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:09:07.891 [DEBUG] [Thread-14494] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:09:10.565 [DEBUG] [Thread-14496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:13.001 [DEBUG] [Thread-14497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:25.622 [DEBUG] [Thread-14498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:37.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:09:37.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:09:37.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-25T16:09:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 9, 31), 30.09, 13.78, 0.0, 35.66, 26.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:09:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:09:31
2025-12-25T16:09:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:09:38.847 [DEBUG] [Thread-14499] [transport.py] [_log()] starting thread (client mode): 0xb6b62770
2025-12-25T16:09:38.847 [DEBUG] [Thread-14499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:09:38.864 [DEBUG] [Thread-14499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:09:38.864 [INFO] [Thread-14499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:09:38.867 [DEBUG] [Thread-14499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:09:38.867 [DEBUG] [Thread-14499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:09:38.867 [DEBUG] [Thread-14499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:09:38.867 [DEBUG] [Thread-14499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:38.867 [DEBUG] [Thread-14499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] client lang: <none>
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] server lang: <none>
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] kex follows: False
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] Compression: none
2025-12-25T16:09:38.868 [DEBUG] [Thread-14499] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:09:38.886 [DEBUG] [Thread-14499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:09:38.886 [DEBUG] [Thread-14499] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:09:38.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:09:38.887 [DEBUG] [Thread-14499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:09:38.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:09:38.889 [DEBUG] [Thread-14499] [transport.py] [_log()] userauth is OK
2025-12-25T16:09:38.889 [DEBUG] [Thread-14499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:09:38.889 [DEBUG] [Thread-14499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:09:38.889 [DEBUG] [Thread-14499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:09:38.889 [DEBUG] [Thread-14499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:09:38.907 [INFO] [Thread-14499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:09:38.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:09:39.497 [DEBUG] [Thread-14499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:09:39.497 [DEBUG] [Thread-14499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:09:39.497 [DEBUG] [Thread-14499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:09:39.538 [DEBUG] [Thread-14499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:09:39.538 [DEBUG] [Thread-14499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:09:39.541 [DEBUG] [Thread-14499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:09:39.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:09:39.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:09:39.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:09:39.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:09:39.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:09:39.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:09:39.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:09:39.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:09:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:09:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.589645 -999.00  +25.70  33.95     20   +1.30 1 1 2 1 1   888    0 24.75 -14.90 ----- 28.9 34.0 284.8 42.5 29.8 -26.9 29.6 -28.3 30.0 -28.5 30.7 -26.1
2025-12-25T16:09:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:09:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:09:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.589645
2025-12-25T16:09:39.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:09:39.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:09:39.568 [DEBUG] [Thread-14499] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:09:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:09:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:09:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:09:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:09:31', tmtdew=30.09, humidity=13.78, cloud=0.0, wind=35.66, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:09:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:09:39.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-25T16:09:39.662 [DEBUG] [Thread-14502] [transport.py] [_log()] starting thread (client mode): 0xb957b400
2025-12-25T16:09:39.662 [DEBUG] [Thread-14502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:09:39.677 [DEBUG] [Thread-14502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:09:39.677 [INFO] [Thread-14502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:09:39.685 [DEBUG] [Thread-14502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:09:39.685 [DEBUG] [Thread-14502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] client lang: <none>
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] server lang: <none>
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] kex follows: False
2025-12-25T16:09:39.686 [DEBUG] [Thread-14502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:09:39.687 [DEBUG] [Thread-14502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:09:39.687 [DEBUG] [Thread-14502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:09:39.687 [DEBUG] [Thread-14502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:09:39.687 [DEBUG] [Thread-14502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:09:39.687 [DEBUG] [Thread-14502] [transport.py] [_log()] Compression: none
2025-12-25T16:09:39.687 [DEBUG] [Thread-14502] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:09:39.742 [DEBUG] [Thread-14502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:09:39.742 [DEBUG] [Thread-14502] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:09:39.743 [DEBUG] [Thread-14502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:09:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:09:39.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:09:39.798 [DEBUG] [Thread-14502] [transport.py] [_log()] userauth is OK
2025-12-25T16:09:39.798 [DEBUG] [Thread-14502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:09:39.798 [DEBUG] [Thread-14502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:09:39.798 [DEBUG] [Thread-14502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:09:39.798 [DEBUG] [Thread-14502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:09:39.817 [INFO] [Thread-14502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:09:39.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-25T16:09:39.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:09:40.645 [DEBUG] [Thread-14502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:09:40.646 [DEBUG] [Thread-14502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:09:40.655 [DEBUG] [Thread-14504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:40.694 [DEBUG] [Thread-14502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:09:40.694 [DEBUG] [Thread-14502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:09:40.703 [DEBUG] [Thread-14502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:09:40.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:09:40.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-25T16:09:40.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-25T16:09:40.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:09:40.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:09:40.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:09:40.738 [DEBUG] [Thread-14502] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:09:51.068 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:51.070 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:09:55.705 [DEBUG] [Thread-14505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:10.738 [DEBUG] [Thread-14506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:10:10.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:10:10.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-25T16:10:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 10, 3), 29.9, 14.02, 0.0, 36.13, 26.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:10:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:10:03
2025-12-25T16:10:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:10:11.744 [DEBUG] [Thread-14507] [transport.py] [_log()] starting thread (client mode): 0xb6bc2ad0
2025-12-25T16:10:11.744 [DEBUG] [Thread-14507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:10:11.763 [DEBUG] [Thread-14507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:10:11.763 [INFO] [Thread-14507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:11.766 [DEBUG] [Thread-14507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] client lang: <none>
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] server lang: <none>
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] kex follows: False
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] Compression: none
2025-12-25T16:10:11.767 [DEBUG] [Thread-14507] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:10:11.781 [DEBUG] [Thread-14507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:10:11.781 [DEBUG] [Thread-14507] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:10:11.781 [DEBUG] [Thread-14507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:10:11.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:10:11.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:10:11.782 [DEBUG] [Thread-14507] [transport.py] [_log()] userauth is OK
2025-12-25T16:10:11.782 [DEBUG] [Thread-14507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:10:11.782 [DEBUG] [Thread-14507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:10:11.782 [DEBUG] [Thread-14507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:10:11.782 [DEBUG] [Thread-14507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:10:11.791 [INFO] [Thread-14507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:10:11.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:10:12.407 [DEBUG] [Thread-14507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:10:12.407 [DEBUG] [Thread-14507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:10:12.407 [DEBUG] [Thread-14507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:10:12.447 [DEBUG] [Thread-14507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:10:12.447 [DEBUG] [Thread-14507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:10:12.452 [DEBUG] [Thread-14507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:10:12.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:10:12.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:10:12.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:10:12.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:10:12.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:10:12.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:10:12.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.590339 -999.00  +25.70  34.33     21   +1.80 1 1 2 1 1   888    0 24.67 -17.05 ----- 28.9 34.3 284.0 39.7 29.5 -28.5 29.5 -27.5 29.8 -27.1 30.5 -26.5
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.590339
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:10:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:10:03', tmtdew=29.9, humidity=14.02, cloud=0.0, wind=36.13, temperature=26.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:10:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:10:12.470 [DEBUG] [Thread-14507] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:10:12.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-25T16:10:12.552 [DEBUG] [Thread-14510] [transport.py] [_log()] starting thread (client mode): 0xb6bc2f50
2025-12-25T16:10:12.552 [DEBUG] [Thread-14510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:10:12.567 [DEBUG] [Thread-14510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:10:12.567 [INFO] [Thread-14510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:10:12.574 [DEBUG] [Thread-14510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] client lang: <none>
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] server lang: <none>
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] kex follows: False
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] Compression: none
2025-12-25T16:10:12.575 [DEBUG] [Thread-14510] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:10:12.632 [DEBUG] [Thread-14510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:10:12.632 [DEBUG] [Thread-14510] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:10:12.632 [DEBUG] [Thread-14510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:10:12.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:10:12.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:10:12.689 [DEBUG] [Thread-14510] [transport.py] [_log()] userauth is OK
2025-12-25T16:10:12.689 [DEBUG] [Thread-14510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:10:12.689 [DEBUG] [Thread-14510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:10:12.689 [DEBUG] [Thread-14510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:10:12.689 [DEBUG] [Thread-14510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:10:12.707 [INFO] [Thread-14510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:10:12.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-25T16:10:12.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:10:13.061 [DEBUG] [Thread-14512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:13.547 [DEBUG] [Thread-14510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:10:13.548 [DEBUG] [Thread-14510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:10:13.596 [DEBUG] [Thread-14510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:10:13.596 [DEBUG] [Thread-14510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:10:13.605 [DEBUG] [Thread-14510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:10:13.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:10:13.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-25T16:10:13.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:10:13.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:10:13.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:10:13.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:10:13.642 [DEBUG] [Thread-14510] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:10:25.768 [DEBUG] [Thread-14513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:40.829 [DEBUG] [Thread-14514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:10:43.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:10:43.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-25T16:10:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 10, 35), 28.09, 15.5, 0.0, 38.47, 26.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:10:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:10:35
2025-12-25T16:10:44.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:10:44.656 [DEBUG] [Thread-14515] [transport.py] [_log()] starting thread (client mode): 0xb6bc37c0
2025-12-25T16:10:44.656 [DEBUG] [Thread-14515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:10:44.677 [DEBUG] [Thread-14515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:10:44.677 [INFO] [Thread-14515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] client lang: <none>
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] server lang: <none>
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] kex follows: False
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] Compression: none
2025-12-25T16:10:44.680 [DEBUG] [Thread-14515] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:10:44.695 [DEBUG] [Thread-14515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:10:44.695 [DEBUG] [Thread-14515] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:10:44.695 [DEBUG] [Thread-14515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:10:44.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:10:44.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:10:44.696 [DEBUG] [Thread-14515] [transport.py] [_log()] userauth is OK
2025-12-25T16:10:44.696 [DEBUG] [Thread-14515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:10:44.696 [DEBUG] [Thread-14515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:10:44.696 [DEBUG] [Thread-14515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:10:44.696 [DEBUG] [Thread-14515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:10:44.704 [INFO] [Thread-14515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:10:44.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:10:45.298 [DEBUG] [Thread-14515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:10:45.298 [DEBUG] [Thread-14515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:10:45.299 [DEBUG] [Thread-14515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:10:45.338 [DEBUG] [Thread-14515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:10:45.339 [DEBUG] [Thread-14515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:10:45.341 [DEBUG] [Thread-14515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:10:45.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:10:45.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:10:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:10:45.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:10:45.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:10:45.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:10:45.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:10:45.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:10:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:10:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.590686 -999.00  +25.80  34.73     21   +2.10 1 1 2 1 1   888    0 24.41 -22.12 ----- 33.9 34.7 280.1 44.1 29.5 -27.2 29.5 -27.3 29.7 -28.4 30.6 -26.0
2025-12-25T16:10:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:10:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:10:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.590686
2025-12-25T16:10:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:10:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:10:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:10:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:10:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:10:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:10:35', tmtdew=28.09, humidity=15.5, cloud=0.0, wind=38.47, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:10:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:10:45.361 [DEBUG] [Thread-14515] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:10:45.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-25T16:10:45.464 [DEBUG] [Thread-14518] [transport.py] [_log()] starting thread (client mode): 0xb6bc0ee0
2025-12-25T16:10:45.465 [DEBUG] [Thread-14518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:10:45.478 [DEBUG] [Thread-14518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:10:45.479 [INFO] [Thread-14518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] client lang: <none>
2025-12-25T16:10:45.486 [DEBUG] [Thread-14518] [transport.py] [_log()] server lang: <none>
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] kex follows: False
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] Compression: none
2025-12-25T16:10:45.487 [DEBUG] [Thread-14518] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:10:45.545 [DEBUG] [Thread-14518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:10:45.545 [DEBUG] [Thread-14518] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:10:45.546 [DEBUG] [Thread-14518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:10:45.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:10:45.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:10:45.605 [DEBUG] [Thread-14518] [transport.py] [_log()] userauth is OK
2025-12-25T16:10:45.605 [DEBUG] [Thread-14518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:10:45.605 [DEBUG] [Thread-14518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:10:45.606 [DEBUG] [Thread-14518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:10:45.606 [DEBUG] [Thread-14518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:10:45.627 [INFO] [Thread-14518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:10:45.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-25T16:10:45.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:10:46.445 [DEBUG] [Thread-14518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:10:46.445 [DEBUG] [Thread-14518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:10:46.493 [DEBUG] [Thread-14518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:10:46.493 [DEBUG] [Thread-14518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:10:46.501 [DEBUG] [Thread-14518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:10:46.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:10:46.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-25T16:10:46.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-25T16:10:46.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:10:46.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:10:46.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:10:46.532 [DEBUG] [Thread-14518] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:10:51.208 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:51.209 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:10:55.857 [DEBUG] [Thread-14520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:10.918 [DEBUG] [Thread-14521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:13.115 [DEBUG] [Thread-14522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:16.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:11:16.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:11:16.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-25T16:11:17.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 11, 7), 28.32, 15.3, 0.0, 41.45, 26.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:11:17.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:11:07
2025-12-25T16:11:17.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:11:17.537 [DEBUG] [Thread-14523] [transport.py] [_log()] starting thread (client mode): 0xb9590340
2025-12-25T16:11:17.537 [DEBUG] [Thread-14523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:11:17.552 [DEBUG] [Thread-14523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:11:17.552 [INFO] [Thread-14523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] client lang: <none>
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] server lang: <none>
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] kex follows: False
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] Compression: none
2025-12-25T16:11:17.555 [DEBUG] [Thread-14523] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:11:17.563 [DEBUG] [Thread-14523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:11:17.563 [DEBUG] [Thread-14523] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:11:17.563 [DEBUG] [Thread-14523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:11:17.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:11:17.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:11:17.565 [DEBUG] [Thread-14523] [transport.py] [_log()] userauth is OK
2025-12-25T16:11:17.565 [DEBUG] [Thread-14523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:11:17.565 [DEBUG] [Thread-14523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:11:17.565 [DEBUG] [Thread-14523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:11:17.565 [DEBUG] [Thread-14523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:11:17.588 [INFO] [Thread-14523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:11:17.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:11:18.169 [DEBUG] [Thread-14523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:11:18.169 [DEBUG] [Thread-14523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:11:18.169 [DEBUG] [Thread-14523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:11:18.210 [DEBUG] [Thread-14523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:11:18.210 [DEBUG] [Thread-14523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:11:18.213 [DEBUG] [Thread-14523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:11:18.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:11:18.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:11:18.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:11:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:11:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:11:18.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:11:18.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:11:18.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:11:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:11:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.591033 -999.00  +25.30  33.18     22   +2.00 1 1 2 1 1   888    0 23.60 -26.07 ----- 35.5 33.2 281.6 42.1 29.3 -31.0 29.3 -28.3 29.4 -32.9 30.3 -26.4
2025-12-25T16:11:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:11:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:11:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.591033
2025-12-25T16:11:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:11:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:11:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:11:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:11:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:11:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:11:07', tmtdew=28.32, humidity=15.3, cloud=0.0, wind=41.45, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:11:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:11:18.240 [DEBUG] [Thread-14523] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:11:18.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-25T16:11:18.335 [DEBUG] [Thread-14526] [transport.py] [_log()] starting thread (client mode): 0xb6b630a0
2025-12-25T16:11:18.335 [DEBUG] [Thread-14526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:11:18.349 [DEBUG] [Thread-14526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:11:18.349 [INFO] [Thread-14526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:11:18.356 [DEBUG] [Thread-14526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:11:18.356 [DEBUG] [Thread-14526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] client lang: <none>
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] server lang: <none>
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] kex follows: False
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] Compression: none
2025-12-25T16:11:18.357 [DEBUG] [Thread-14526] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:11:18.413 [DEBUG] [Thread-14526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:11:18.413 [DEBUG] [Thread-14526] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:11:18.413 [DEBUG] [Thread-14526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:11:18.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:11:18.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:11:18.469 [DEBUG] [Thread-14526] [transport.py] [_log()] userauth is OK
2025-12-25T16:11:18.469 [DEBUG] [Thread-14526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:11:18.469 [DEBUG] [Thread-14526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:11:18.469 [DEBUG] [Thread-14526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:11:18.469 [DEBUG] [Thread-14526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:11:18.483 [INFO] [Thread-14526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:11:18.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-25T16:11:18.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:11:19.282 [DEBUG] [Thread-14526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:11:19.282 [DEBUG] [Thread-14526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:11:19.330 [DEBUG] [Thread-14526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:11:19.331 [DEBUG] [Thread-14526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:11:19.340 [DEBUG] [Thread-14526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:11:19.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:11:19.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-25T16:11:19.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-25T16:11:19.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:11:19.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:11:19.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:11:19.376 [DEBUG] [Thread-14526] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:11:25.951 [DEBUG] [Thread-14528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:40.990 [DEBUG] [Thread-14529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:49.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:11:49.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:11:49.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-25T16:11:50.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 11, 39), 27.97, 15.75, 0.0, 32.66, 26.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:11:50.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:11:39
2025-12-25T16:11:50.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:11:50.385 [DEBUG] [Thread-14530] [transport.py] [_log()] starting thread (client mode): 0xb957a7a0
2025-12-25T16:11:50.385 [DEBUG] [Thread-14530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:11:50.404 [DEBUG] [Thread-14530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:11:50.405 [INFO] [Thread-14530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:11:50.406 [DEBUG] [Thread-14530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:11:50.406 [DEBUG] [Thread-14530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:11:50.406 [DEBUG] [Thread-14530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:11:50.406 [DEBUG] [Thread-14530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:50.406 [DEBUG] [Thread-14530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:50.406 [DEBUG] [Thread-14530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] client lang: <none>
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] server lang: <none>
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] kex follows: False
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] Compression: none
2025-12-25T16:11:50.407 [DEBUG] [Thread-14530] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:11:50.417 [DEBUG] [Thread-14530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:11:50.417 [DEBUG] [Thread-14530] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:11:50.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:11:50.419 [DEBUG] [Thread-14530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:11:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:11:50.420 [DEBUG] [Thread-14530] [transport.py] [_log()] userauth is OK
2025-12-25T16:11:50.421 [DEBUG] [Thread-14530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:11:50.421 [DEBUG] [Thread-14530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:11:50.421 [DEBUG] [Thread-14530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:11:50.421 [DEBUG] [Thread-14530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:11:50.446 [INFO] [Thread-14530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:11:50.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:11:51.062 [DEBUG] [Thread-14530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:11:51.063 [DEBUG] [Thread-14530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:11:51.063 [DEBUG] [Thread-14530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:11:51.104 [DEBUG] [Thread-14530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:11:51.104 [DEBUG] [Thread-14530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:11:51.107 [DEBUG] [Thread-14530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:11:51.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:11:51.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:11:51.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:11:51.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:11:51.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:11:51.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:11:51.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:11:51.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:11:51.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:11:51.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.591381 -999.00  +24.60  22.45     22   +1.90 1 1 1 1 1   888    0 23.51 -35.51 ----- 22.3 22.4 280.0 40.8 29.1 -29.1 29.1 -27.6 29.3 -26.7 30.1 -26.9
2025-12-25T16:11:51.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:11:51.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:11:51.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.591381
2025-12-25T16:11:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:11:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:11:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:11:51.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:11:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:11:51.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:11:39', tmtdew=27.97, humidity=15.75, cloud=0.0, wind=32.66, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:11:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:11:51.134 [DEBUG] [Thread-14530] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:11:51.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-25T16:11:51.229 [DEBUG] [Thread-14533] [transport.py] [_log()] starting thread (client mode): 0xb957bac0
2025-12-25T16:11:51.229 [DEBUG] [Thread-14533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:11:51.244 [DEBUG] [Thread-14533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:11:51.244 [INFO] [Thread-14533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:11:51.251 [DEBUG] [Thread-14533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] client lang: <none>
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] server lang: <none>
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] kex follows: False
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] Compression: none
2025-12-25T16:11:51.252 [DEBUG] [Thread-14533] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:11:51.310 [DEBUG] [Thread-14533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:11:51.310 [DEBUG] [Thread-14533] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:11:51.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:11:51.311 [DEBUG] [Thread-14533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:11:51.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:11:51.348 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:51.349 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:11:51.366 [DEBUG] [Thread-14533] [transport.py] [_log()] userauth is OK
2025-12-25T16:11:51.366 [DEBUG] [Thread-14533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:11:51.366 [DEBUG] [Thread-14533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:11:51.367 [DEBUG] [Thread-14533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:11:51.367 [DEBUG] [Thread-14533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:11:51.392 [INFO] [Thread-14533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:11:51.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-25T16:11:51.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:11:52.238 [DEBUG] [Thread-14533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:11:52.238 [DEBUG] [Thread-14533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:11:52.286 [DEBUG] [Thread-14533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:11:52.286 [DEBUG] [Thread-14533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:11:52.295 [DEBUG] [Thread-14533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:11:52.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:11:52.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-25T16:11:52.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-25T16:11:52.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:11:52.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:11:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:11:52.330 [DEBUG] [Thread-14533] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:11:56.026 [DEBUG] [Thread-14535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:11.075 [DEBUG] [Thread-14536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:13.166 [DEBUG] [Thread-14537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:22.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:12:22.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:12:22.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-25T16:12:23.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 12, 11), 27.6, 16.11, 0.0, 30.08, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:12:23.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:12:11
2025-12-25T16:12:23.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:12:23.324 [DEBUG] [Thread-14538] [transport.py] [_log()] starting thread (client mode): 0xb95b02e0
2025-12-25T16:12:23.324 [DEBUG] [Thread-14538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:12:23.343 [DEBUG] [Thread-14538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:12:23.343 [INFO] [Thread-14538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] client lang: <none>
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] server lang: <none>
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] kex follows: False
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:12:23.346 [DEBUG] [Thread-14538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:12:23.347 [DEBUG] [Thread-14538] [transport.py] [_log()] Compression: none
2025-12-25T16:12:23.347 [DEBUG] [Thread-14538] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:12:23.358 [DEBUG] [Thread-14538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:12:23.359 [DEBUG] [Thread-14538] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:12:23.359 [DEBUG] [Thread-14538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:12:23.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:12:23.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:12:23.361 [DEBUG] [Thread-14538] [transport.py] [_log()] userauth is OK
2025-12-25T16:12:23.361 [DEBUG] [Thread-14538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:12:23.361 [DEBUG] [Thread-14538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:12:23.361 [DEBUG] [Thread-14538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:12:23.362 [DEBUG] [Thread-14538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:12:23.380 [INFO] [Thread-14538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:12:23.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:12:23.982 [DEBUG] [Thread-14538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:12:23.983 [DEBUG] [Thread-14538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:12:23.983 [DEBUG] [Thread-14538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:12:24.024 [DEBUG] [Thread-14538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:12:24.024 [DEBUG] [Thread-14538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:12:24.027 [DEBUG] [Thread-14538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:12:24.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:12:24.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:12:24.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:12:24.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:12:24.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:12:24.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:12:24.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:12:24.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:12:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:12:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.591728 -999.00  +25.00  23.90     22   +2.00 1 1 1 1 1   888    0 24.23 -36.32 ----- 19.4 23.9 277.5 33.8 29.1 -30.5 29.1 -28.0 29.6 -24.4 30.1 -25.5
2025-12-25T16:12:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:12:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:12:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.591728
2025-12-25T16:12:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:12:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:12:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:12:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:12:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:12:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:12:11', tmtdew=27.6, humidity=16.11, cloud=0.0, wind=30.08, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:12:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:12:24.053 [DEBUG] [Thread-14538] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:12:24.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-25T16:12:24.147 [DEBUG] [Thread-14541] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-25T16:12:24.147 [DEBUG] [Thread-14541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:12:24.162 [DEBUG] [Thread-14541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:12:24.163 [INFO] [Thread-14541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:12:24.170 [DEBUG] [Thread-14541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:12:24.170 [DEBUG] [Thread-14541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:12:24.170 [DEBUG] [Thread-14541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:12:24.170 [DEBUG] [Thread-14541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] client lang: <none>
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] server lang: <none>
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] kex follows: False
2025-12-25T16:12:24.171 [DEBUG] [Thread-14541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:12:24.172 [DEBUG] [Thread-14541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:12:24.172 [DEBUG] [Thread-14541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:12:24.172 [DEBUG] [Thread-14541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:12:24.172 [DEBUG] [Thread-14541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:12:24.172 [DEBUG] [Thread-14541] [transport.py] [_log()] Compression: none
2025-12-25T16:12:24.172 [DEBUG] [Thread-14541] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:12:24.234 [DEBUG] [Thread-14541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:12:24.234 [DEBUG] [Thread-14541] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:12:24.235 [DEBUG] [Thread-14541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:12:24.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:12:24.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:12:24.290 [DEBUG] [Thread-14541] [transport.py] [_log()] userauth is OK
2025-12-25T16:12:24.290 [DEBUG] [Thread-14541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:12:24.290 [DEBUG] [Thread-14541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:12:24.290 [DEBUG] [Thread-14541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:12:24.290 [DEBUG] [Thread-14541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:12:24.309 [INFO] [Thread-14541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:12:24.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-25T16:12:24.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:12:25.147 [DEBUG] [Thread-14541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:12:25.147 [DEBUG] [Thread-14541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:12:25.195 [DEBUG] [Thread-14541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:12:25.195 [DEBUG] [Thread-14541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:12:25.204 [DEBUG] [Thread-14541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:12:25.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:12:25.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:12:25.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:12:25.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:12:25.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:12:25.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:12:25.241 [DEBUG] [Thread-14541] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:12:26.111 [DEBUG] [Thread-14543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:41.163 [DEBUG] [Thread-14544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:51.487 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:51.488 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:55.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:12:55.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:12:55.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-25T16:12:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 12, 43), 27.51, 16.36, 0.0, 33.05, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:12:55.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:12:43
2025-12-25T16:12:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:12:56.196 [DEBUG] [Thread-14545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:12:56.233 [DEBUG] [Thread-14546] [transport.py] [_log()] starting thread (client mode): 0xb6b60a00
2025-12-25T16:12:56.233 [DEBUG] [Thread-14546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:12:56.244 [DEBUG] [Thread-14546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:12:56.244 [INFO] [Thread-14546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:12:56.245 [DEBUG] [Thread-14546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:12:56.245 [DEBUG] [Thread-14546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:12:56.245 [DEBUG] [Thread-14546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:12:56.245 [DEBUG] [Thread-14546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:56.245 [DEBUG] [Thread-14546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] client lang: <none>
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] server lang: <none>
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] kex follows: False
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] Compression: none
2025-12-25T16:12:56.246 [DEBUG] [Thread-14546] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:12:56.260 [DEBUG] [Thread-14546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:12:56.261 [DEBUG] [Thread-14546] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:12:56.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:12:56.262 [DEBUG] [Thread-14546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:12:56.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:12:56.264 [DEBUG] [Thread-14546] [transport.py] [_log()] userauth is OK
2025-12-25T16:12:56.264 [DEBUG] [Thread-14546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:12:56.264 [DEBUG] [Thread-14546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:12:56.264 [DEBUG] [Thread-14546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:12:56.264 [DEBUG] [Thread-14546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:12:56.291 [INFO] [Thread-14546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:12:56.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:12:56.845 [DEBUG] [Thread-14546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:12:56.846 [DEBUG] [Thread-14546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:12:56.847 [DEBUG] [Thread-14546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:12:56.886 [DEBUG] [Thread-14546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:12:56.886 [DEBUG] [Thread-14546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:12:56.889 [DEBUG] [Thread-14546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:12:56.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:12:56.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:12:56.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:12:56.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:12:56.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:12:56.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:12:56.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:12:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:12:56.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:12:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.592075 -999.00  +25.60  25.08     21   +1.90 1 1 1 1 1   888    0 23.57 -37.77 ----- 27.0 25.1 296.6 28.1 29.4 -26.5 29.4 -26.3 30.0 -23.5 30.4 -24.0
2025-12-25T16:12:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:12:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:12:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.592075
2025-12-25T16:12:56.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:12:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:12:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:12:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:12:56.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:12:56.914 [DEBUG] [Thread-14546] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:12:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:12:43', tmtdew=27.51, humidity=16.36, cloud=0.0, wind=33.05, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:12:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:12:56.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-25T16:12:57.008 [DEBUG] [Thread-14549] [transport.py] [_log()] starting thread (client mode): 0xb95b1f30
2025-12-25T16:12:57.008 [DEBUG] [Thread-14549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:12:57.023 [DEBUG] [Thread-14549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:12:57.023 [INFO] [Thread-14549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] client lang: <none>
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] server lang: <none>
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] kex follows: False
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:12:57.031 [DEBUG] [Thread-14549] [transport.py] [_log()] Compression: none
2025-12-25T16:12:57.032 [DEBUG] [Thread-14549] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:12:57.095 [DEBUG] [Thread-14549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:12:57.096 [DEBUG] [Thread-14549] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:12:57.097 [DEBUG] [Thread-14549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:12:57.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:12:57.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:12:57.156 [DEBUG] [Thread-14549] [transport.py] [_log()] userauth is OK
2025-12-25T16:12:57.156 [DEBUG] [Thread-14549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:12:57.156 [DEBUG] [Thread-14549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:12:57.156 [DEBUG] [Thread-14549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:12:57.157 [DEBUG] [Thread-14549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:12:57.177 [INFO] [Thread-14549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16: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-25T16:12:57.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:12:57.986 [DEBUG] [Thread-14549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:12:57.987 [DEBUG] [Thread-14549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:12:58.035 [DEBUG] [Thread-14549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:12:58.035 [DEBUG] [Thread-14549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:12:58.044 [DEBUG] [Thread-14549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:12:58.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:12:58.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-25T16:12:58.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-25T16:12:58.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:12:58.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:12:58.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:12:58.080 [DEBUG] [Thread-14549] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:13:11.230 [DEBUG] [Thread-14551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:13:13.219 [DEBUG] [Thread-14552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:13:26.285 [DEBUG] [Thread-14553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:13:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:13:28.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:13:28.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-25T16:13:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 13, 15), 27.67, 16.18, 0.0, 31.64, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:13:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:13:15
2025-12-25T16:13:28.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:13:29.054 [DEBUG] [Thread-14554] [transport.py] [_log()] starting thread (client mode): 0xb6b4dfc0
2025-12-25T16:13:29.054 [DEBUG] [Thread-14554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:13:29.074 [DEBUG] [Thread-14554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:13:29.074 [INFO] [Thread-14554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] client lang: <none>
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] server lang: <none>
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] kex follows: False
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:13:29.077 [DEBUG] [Thread-14554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:13:29.078 [DEBUG] [Thread-14554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:13:29.078 [DEBUG] [Thread-14554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:13:29.078 [DEBUG] [Thread-14554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:13:29.078 [DEBUG] [Thread-14554] [transport.py] [_log()] Compression: none
2025-12-25T16:13:29.078 [DEBUG] [Thread-14554] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:13:29.096 [DEBUG] [Thread-14554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:13:29.097 [DEBUG] [Thread-14554] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:13:29.097 [DEBUG] [Thread-14554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:13:29.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:13:29.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:13:29.099 [DEBUG] [Thread-14554] [transport.py] [_log()] userauth is OK
2025-12-25T16:13:29.099 [DEBUG] [Thread-14554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:13:29.099 [DEBUG] [Thread-14554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:13:29.100 [DEBUG] [Thread-14554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:13:29.100 [DEBUG] [Thread-14554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:13:29.118 [INFO] [Thread-14554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:13:29.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:13:29.750 [DEBUG] [Thread-14554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:13:29.750 [DEBUG] [Thread-14554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:13:29.751 [DEBUG] [Thread-14554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:13:29.791 [DEBUG] [Thread-14554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:13:29.791 [DEBUG] [Thread-14554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:13:29.794 [DEBUG] [Thread-14554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:13:29.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:13:29.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:13:29.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:13:29.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:13:29.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:13:29.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:13:29.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:13:29.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:13:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:13:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.592422 -999.00  +25.60  25.75     21   +1.70 1 1 1 1 1   888    0 23.52 -32.80 ----- 25.6 25.8 293.4 32.6 29.5 -26.6 29.5 -27.0 30.1 -23.9 30.5 -25.0
2025-12-25T16:13:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:13:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:13:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.592422
2025-12-25T16:13:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:13:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:13:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:13:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:13:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:13:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:13:15', tmtdew=27.67, humidity=16.18, cloud=0.0, wind=31.64, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:13:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:13:29.814 [DEBUG] [Thread-14554] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:13:29.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-25T16:13:29.907 [DEBUG] [Thread-14557] [transport.py] [_log()] starting thread (client mode): 0xb6b4f6d0
2025-12-25T16:13:29.907 [DEBUG] [Thread-14557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:13:29.922 [DEBUG] [Thread-14557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:13:29.923 [INFO] [Thread-14557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:13:29.930 [DEBUG] [Thread-14557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:13:29.931 [DEBUG] [Thread-14557] [transport.py] [_log()] client lang: <none>
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] server lang: <none>
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] kex follows: False
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] Compression: none
2025-12-25T16:13:29.932 [DEBUG] [Thread-14557] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:13:29.990 [DEBUG] [Thread-14557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:13:29.991 [DEBUG] [Thread-14557] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:13:29.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:13:29.992 [DEBUG] [Thread-14557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:13:29.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:13:30.050 [DEBUG] [Thread-14557] [transport.py] [_log()] userauth is OK
2025-12-25T16:13:30.050 [DEBUG] [Thread-14557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:13:30.050 [DEBUG] [Thread-14557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:13:30.050 [DEBUG] [Thread-14557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:13:30.050 [DEBUG] [Thread-14557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:13:30.070 [INFO] [Thread-14557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:13:30.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-25T16:13:30.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:13:30.910 [DEBUG] [Thread-14557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:13:30.910 [DEBUG] [Thread-14557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:13:30.958 [DEBUG] [Thread-14557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:13:30.958 [DEBUG] [Thread-14557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:13:30.968 [DEBUG] [Thread-14557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:13:30.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:13:30.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-25T16:13:30.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-25T16:13:30.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:13:30.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:13:30.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:13:31.005 [DEBUG] [Thread-14557] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:13:41.320 [DEBUG] [Thread-14559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:13:51.627 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:13:51.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:13:56.373 [DEBUG] [Thread-14560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:14:01.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:14:01.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-25T16:14:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 13, 47), 27.23, 16.54, 0.0, 32.71, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:14:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:13:47
2025-12-25T16:14:01.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:14:02.049 [DEBUG] [Thread-14561] [transport.py] [_log()] starting thread (client mode): 0xb6bc2c20
2025-12-25T16:14:02.049 [DEBUG] [Thread-14561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:14:02.061 [DEBUG] [Thread-14561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:14:02.061 [INFO] [Thread-14561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] client lang: <none>
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] server lang: <none>
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] kex follows: False
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] Compression: none
2025-12-25T16:14:02.063 [DEBUG] [Thread-14561] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:14:02.070 [DEBUG] [Thread-14561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:14:02.070 [DEBUG] [Thread-14561] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:14:02.070 [DEBUG] [Thread-14561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:14:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:14:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:14:02.071 [DEBUG] [Thread-14561] [transport.py] [_log()] userauth is OK
2025-12-25T16:14:02.071 [DEBUG] [Thread-14561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:14:02.071 [DEBUG] [Thread-14561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:14:02.071 [DEBUG] [Thread-14561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:14:02.071 [DEBUG] [Thread-14561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:14:02.080 [INFO] [Thread-14561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:14:02.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:14:02.717 [DEBUG] [Thread-14561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:14:02.717 [DEBUG] [Thread-14561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:14:02.717 [DEBUG] [Thread-14561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:14:02.757 [DEBUG] [Thread-14561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:14:02.758 [DEBUG] [Thread-14561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:14:02.760 [DEBUG] [Thread-14561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:14:02.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:14:02.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:14:02.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:14:02.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:14:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:14:02.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:14:02.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.592769 -999.00  +25.90  18.28     21   +2.40 1 1 1 1 1   888    0 23.44 -32.75 ----- 18.2 18.3 296.2 30.5 29.5 -27.3 29.5 -26.8 30.1 -25.1 30.6 -25.4
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.592769
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:14:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:13:47', tmtdew=27.23, humidity=16.54, cloud=0.0, wind=32.71, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:13:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:14:02.779 [DEBUG] [Thread-14561] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:14:02.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-25T16:14:02.865 [DEBUG] [Thread-14564] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-25T16:14:02.865 [DEBUG] [Thread-14564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:14:02.879 [DEBUG] [Thread-14564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:14:02.879 [INFO] [Thread-14564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:14:02.886 [DEBUG] [Thread-14564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:14:02.886 [DEBUG] [Thread-14564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] client lang: <none>
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] server lang: <none>
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] kex follows: False
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] Compression: none
2025-12-25T16:14:02.887 [DEBUG] [Thread-14564] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:14:02.944 [DEBUG] [Thread-14564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:14:02.944 [DEBUG] [Thread-14564] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:14:02.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:14:02.945 [DEBUG] [Thread-14564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:14:02.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:14:03.001 [DEBUG] [Thread-14564] [transport.py] [_log()] userauth is OK
2025-12-25T16:14:03.001 [DEBUG] [Thread-14564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:14:03.001 [DEBUG] [Thread-14564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:14:03.001 [DEBUG] [Thread-14564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:14:03.001 [DEBUG] [Thread-14564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:14:03.015 [INFO] [Thread-14564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:14:03.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-25T16:14:03.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:14:03.893 [DEBUG] [Thread-14564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:14:03.893 [DEBUG] [Thread-14564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:14:03.941 [DEBUG] [Thread-14564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:14:03.941 [DEBUG] [Thread-14564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:14:03.949 [DEBUG] [Thread-14564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:14:03.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:14:03.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:14:03.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-25T16:14:03.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:14:03.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:14:03.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:14:03.986 [DEBUG] [Thread-14564] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:14:11.405 [DEBUG] [Thread-14566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:13.275 [DEBUG] [Thread-14567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:26.464 [DEBUG] [Thread-14568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:14:34.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:14:34.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-25T16:14:34.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 14, 19), 27.09, 16.69, 0.0, 32.94, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:14:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:14:19
2025-12-25T16:14:34.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:14:34.983 [DEBUG] [Thread-14569] [transport.py] [_log()] starting thread (client mode): 0xb95b0d30
2025-12-25T16:14:34.984 [DEBUG] [Thread-14569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:14:34.996 [DEBUG] [Thread-14569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:14:34.996 [INFO] [Thread-14569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] client lang: <none>
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] server lang: <none>
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] kex follows: False
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] Compression: none
2025-12-25T16:14:35.000 [DEBUG] [Thread-14569] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:14:35.013 [DEBUG] [Thread-14569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:14:35.014 [DEBUG] [Thread-14569] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:14:35.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:14:35.014 [DEBUG] [Thread-14569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:14:35.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:14:35.016 [DEBUG] [Thread-14569] [transport.py] [_log()] userauth is OK
2025-12-25T16:14:35.016 [DEBUG] [Thread-14569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:14:35.016 [DEBUG] [Thread-14569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:14:35.016 [DEBUG] [Thread-14569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:14:35.016 [DEBUG] [Thread-14569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:14:35.033 [INFO] [Thread-14569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:14:35.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:14:35.620 [DEBUG] [Thread-14569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:14:35.620 [DEBUG] [Thread-14569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:14:35.620 [DEBUG] [Thread-14569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:14:35.661 [DEBUG] [Thread-14569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:14:35.661 [DEBUG] [Thread-14569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:14:35.663 [DEBUG] [Thread-14569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:14:35.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:14:35.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:14:35.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:14:35.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:14:35.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:14:35.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:14:35.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:14:35.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:14:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:14:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.593117 -999.00  +26.00  28.90     22   +2.60 1 1 1 1 1   888    0 23.68 -36.75 ----- 21.4 28.9 284.4 32.5 29.7 -26.1 29.6 -26.1 30.4 -23.8 30.9 -24.9
2025-12-25T16:14:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:14:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:14:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.593117
2025-12-25T16:14:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:14:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:14:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:14:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:14:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:14:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:14:19', tmtdew=27.09, humidity=16.69, cloud=0.0, wind=32.94, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:14:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:14:35.682 [DEBUG] [Thread-14569] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:14:35.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-25T16:14:35.778 [DEBUG] [Thread-14572] [transport.py] [_log()] starting thread (client mode): 0xb95d76a0
2025-12-25T16:14:35.779 [DEBUG] [Thread-14572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:14:35.793 [DEBUG] [Thread-14572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:14:35.794 [INFO] [Thread-14572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] client lang: <none>
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] server lang: <none>
2025-12-25T16:14:35.802 [DEBUG] [Thread-14572] [transport.py] [_log()] kex follows: False
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] Compression: none
2025-12-25T16:14:35.803 [DEBUG] [Thread-14572] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:14:35.862 [DEBUG] [Thread-14572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:14:35.863 [DEBUG] [Thread-14572] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:14:35.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:14:35.864 [DEBUG] [Thread-14572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:14:35.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:14:35.922 [DEBUG] [Thread-14572] [transport.py] [_log()] userauth is OK
2025-12-25T16:14:35.923 [DEBUG] [Thread-14572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:14:35.923 [DEBUG] [Thread-14572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:14:35.923 [DEBUG] [Thread-14572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:14:35.923 [DEBUG] [Thread-14572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:14:35.942 [INFO] [Thread-14572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:14:35.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-25T16:14:35.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:14:36.784 [DEBUG] [Thread-14572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:14:36.784 [DEBUG] [Thread-14572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:14:36.832 [DEBUG] [Thread-14572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:14:36.832 [DEBUG] [Thread-14572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:14:36.840 [DEBUG] [Thread-14572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:14:36.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:14:36.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-25T16:14:36.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:14:36.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:14:36.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:14:36.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:14:36.872 [DEBUG] [Thread-14572] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:14:41.499 [DEBUG] [Thread-14574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:51.767 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:51.768 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:14:56.539 [DEBUG] [Thread-14575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:15:06.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:15:06.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-25T16:15:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 14, 51), 27.02, 16.62, 0.0, 27.28, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:15:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:14:51
2025-12-25T16:15:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:15:07.886 [DEBUG] [Thread-14576] [transport.py] [_log()] starting thread (client mode): 0xb95593c0
2025-12-25T16:15:07.886 [DEBUG] [Thread-14576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:15:07.906 [DEBUG] [Thread-14576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:15:07.906 [INFO] [Thread-14576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:15:07.909 [DEBUG] [Thread-14576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] client lang: <none>
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] server lang: <none>
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] kex follows: False
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:15:07.910 [DEBUG] [Thread-14576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:15:07.911 [DEBUG] [Thread-14576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:15:07.911 [DEBUG] [Thread-14576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:15:07.911 [DEBUG] [Thread-14576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:15:07.911 [DEBUG] [Thread-14576] [transport.py] [_log()] Compression: none
2025-12-25T16:15:07.911 [DEBUG] [Thread-14576] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:15:07.928 [DEBUG] [Thread-14576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:15:07.929 [DEBUG] [Thread-14576] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:15:07.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:15:07.930 [DEBUG] [Thread-14576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:15:07.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:15:07.932 [DEBUG] [Thread-14576] [transport.py] [_log()] userauth is OK
2025-12-25T16:15:07.932 [DEBUG] [Thread-14576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:15:07.932 [DEBUG] [Thread-14576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:15:07.932 [DEBUG] [Thread-14576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:15:07.932 [DEBUG] [Thread-14576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:15:07.956 [INFO] [Thread-14576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:15:07.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:15:08.612 [DEBUG] [Thread-14576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:15:08.612 [DEBUG] [Thread-14576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:15:08.612 [DEBUG] [Thread-14576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:15:08.653 [DEBUG] [Thread-14576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:15:08.653 [DEBUG] [Thread-14576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:15:08.656 [DEBUG] [Thread-14576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:15:08.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:15:08.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:15:08.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:15:08.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:15:08.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:15:08.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:15:08.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:15:08.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:15:08.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:15:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.593464 -999.00  +26.10  22.38     22   +2.80 1 1 1 1 1   888    0 23.14 -40.92 ----- 23.7 22.4 284.2 31.3 29.7 -26.8 29.6 -26.2 30.6 -22.3 30.8 -24.0
2025-12-25T16:15:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:15:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:15:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.593464
2025-12-25T16:15:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:15:08.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:15:08.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:15:08.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:15:08.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:15:08.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:14:51', tmtdew=27.02, humidity=16.62, cloud=0.0, wind=27.28, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:14:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:15:08.685 [DEBUG] [Thread-14576] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:15:08.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-25T16:15:08.776 [DEBUG] [Thread-14579] [transport.py] [_log()] starting thread (client mode): 0xb6bc36d0
2025-12-25T16:15:08.776 [DEBUG] [Thread-14579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:15:08.792 [DEBUG] [Thread-14579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:15:08.792 [INFO] [Thread-14579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:15:08.799 [DEBUG] [Thread-14579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:15:08.799 [DEBUG] [Thread-14579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:15:08.799 [DEBUG] [Thread-14579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:15:08.799 [DEBUG] [Thread-14579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:08.799 [DEBUG] [Thread-14579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:08.799 [DEBUG] [Thread-14579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] client lang: <none>
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] server lang: <none>
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] kex follows: False
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] Compression: none
2025-12-25T16:15:08.800 [DEBUG] [Thread-14579] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:15:08.857 [DEBUG] [Thread-14579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:15:08.857 [DEBUG] [Thread-14579] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:15:08.858 [DEBUG] [Thread-14579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:15:08.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:15:08.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:15:08.914 [DEBUG] [Thread-14579] [transport.py] [_log()] userauth is OK
2025-12-25T16:15:08.914 [DEBUG] [Thread-14579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:15:08.914 [DEBUG] [Thread-14579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:15:08.914 [DEBUG] [Thread-14579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:15:08.914 [DEBUG] [Thread-14579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:15:08.933 [INFO] [Thread-14579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:15:08.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-25T16:15:08.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:15:09.744 [DEBUG] [Thread-14579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:15:09.744 [DEBUG] [Thread-14579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:15:09.793 [DEBUG] [Thread-14579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:15:09.793 [DEBUG] [Thread-14579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:15:09.802 [DEBUG] [Thread-14579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:15:09.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:15:09.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-25T16:15:09.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-25T16:15:09.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:15:09.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:15:09.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:15:09.839 [DEBUG] [Thread-14579] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:15:11.574 [DEBUG] [Thread-14581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:13.325 [DEBUG] [Thread-14582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:26.622 [DEBUG] [Thread-14583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:39.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:15:39.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:15:39.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:15:40.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 15, 23), 26.92, 16.72, 0.0, 26.87, 25.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:15:40.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:15:23
2025-12-25T16:15:40.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:15:40.813 [DEBUG] [Thread-14584] [transport.py] [_log()] starting thread (client mode): 0xb95d4550
2025-12-25T16:15:40.813 [DEBUG] [Thread-14584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:15:40.834 [DEBUG] [Thread-14584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:15:40.834 [INFO] [Thread-14584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:15:40.837 [DEBUG] [Thread-14584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:15:40.837 [DEBUG] [Thread-14584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] client lang: <none>
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] server lang: <none>
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] kex follows: False
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:15:40.838 [DEBUG] [Thread-14584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:15:40.839 [DEBUG] [Thread-14584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:15:40.839 [DEBUG] [Thread-14584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:15:40.839 [DEBUG] [Thread-14584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:15:40.839 [DEBUG] [Thread-14584] [transport.py] [_log()] Compression: none
2025-12-25T16:15:40.839 [DEBUG] [Thread-14584] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:15:40.857 [DEBUG] [Thread-14584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:15:40.857 [DEBUG] [Thread-14584] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:15:40.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:15:40.859 [DEBUG] [Thread-14584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:15:40.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:15:40.861 [DEBUG] [Thread-14584] [transport.py] [_log()] userauth is OK
2025-12-25T16:15:40.862 [DEBUG] [Thread-14584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:15:40.862 [DEBUG] [Thread-14584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:15:40.862 [DEBUG] [Thread-14584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:15:40.862 [DEBUG] [Thread-14584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:15:40.895 [INFO] [Thread-14584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:15:40.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:15:41.636 [DEBUG] [Thread-14584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:15:41.637 [DEBUG] [Thread-14584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:15:41.637 [DEBUG] [Thread-14584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:15:41.659 [DEBUG] [Thread-14586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:41.678 [DEBUG] [Thread-14584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:15:41.678 [DEBUG] [Thread-14584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:15:41.680 [DEBUG] [Thread-14584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:15:41.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:15:41.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:15:41.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:15:41.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:15:41.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:15:41.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:15:41.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:15:41.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:15:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:15:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.593464 -999.00  +26.10  22.38     22   +2.80 1 1 1 1 1   888    0 23.14 -40.92 ----- 23.7 22.4 284.2 31.3 29.7 -26.8 29.6 -26.2 30.6 -22.3 30.8 -24.0
2025-12-25T16:15:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:15:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:15:41.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.593464
2025-12-25T16:15:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:15:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:15:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:15:41.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:15:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:15:41.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:15:23', tmtdew=26.92, humidity=16.72, cloud=0.0, wind=26.87, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:14:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:15:41.698 [DEBUG] [Thread-14584] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:15:41.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-25T16:15:41.790 [DEBUG] [Thread-14588] [transport.py] [_log()] starting thread (client mode): 0xb957b400
2025-12-25T16:15:41.790 [DEBUG] [Thread-14588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:15:41.805 [DEBUG] [Thread-14588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:15:41.806 [INFO] [Thread-14588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:15:41.813 [DEBUG] [Thread-14588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] client lang: <none>
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] server lang: <none>
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] kex follows: False
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] Compression: none
2025-12-25T16:15:41.814 [DEBUG] [Thread-14588] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:15:41.877 [DEBUG] [Thread-14588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:15:41.878 [DEBUG] [Thread-14588] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:15:41.879 [DEBUG] [Thread-14588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:15:41.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:15:41.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:15:41.933 [DEBUG] [Thread-14588] [transport.py] [_log()] userauth is OK
2025-12-25T16:15:41.933 [DEBUG] [Thread-14588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:15:41.934 [DEBUG] [Thread-14588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:15:41.934 [DEBUG] [Thread-14588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:15:41.934 [DEBUG] [Thread-14588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:15:41.953 [INFO] [Thread-14588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:15:41.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:15:41.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:15:42.789 [DEBUG] [Thread-14588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:15:42.789 [DEBUG] [Thread-14588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:15:42.837 [DEBUG] [Thread-14588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:15:42.837 [DEBUG] [Thread-14588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:15:42.846 [DEBUG] [Thread-14588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:15:42.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:15:42.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-25T16:15:42.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-25T16:15:42.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:15:42.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:15:42.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:15:42.883 [DEBUG] [Thread-14588] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:15:51.906 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:51.908 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:15:56.695 [DEBUG] [Thread-14590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:11.744 [DEBUG] [Thread-14591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:16:12.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:16:12.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-25T16:16:13.370 [DEBUG] [Thread-14592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:13.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 15, 55), 27.39, 16.37, 0.0, 21.65, 26.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:16:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:15:55
2025-12-25T16:16:13.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:16:13.865 [DEBUG] [Thread-14593] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-25T16:16:13.865 [DEBUG] [Thread-14593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:16:13.885 [DEBUG] [Thread-14593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:16:13.885 [INFO] [Thread-14593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] client lang: <none>
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] server lang: <none>
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] kex follows: False
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] Compression: none
2025-12-25T16:16:13.888 [DEBUG] [Thread-14593] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:16:13.905 [DEBUG] [Thread-14593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:16:13.906 [DEBUG] [Thread-14593] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:16:13.906 [DEBUG] [Thread-14593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:16:13.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:16:13.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:16:13.909 [DEBUG] [Thread-14593] [transport.py] [_log()] userauth is OK
2025-12-25T16:16:13.909 [DEBUG] [Thread-14593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:16:13.909 [DEBUG] [Thread-14593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:16:13.909 [DEBUG] [Thread-14593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:16:13.909 [DEBUG] [Thread-14593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:16:13.928 [INFO] [Thread-14593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:16:13.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:16:14.522 [DEBUG] [Thread-14593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:16:14.522 [DEBUG] [Thread-14593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:16:14.523 [DEBUG] [Thread-14593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:16:14.563 [DEBUG] [Thread-14593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:16:14.563 [DEBUG] [Thread-14593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:16:14.566 [DEBUG] [Thread-14593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:16:14.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:16:14.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:16:14.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:16:14.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:16:14.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:16:14.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:16:14.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:16:14.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:16:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:16:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.594158 -999.00  +26.80  20.08     21   +2.80 1 1 1 1 1   888    0 23.83 -43.83 ----- 23.0 20.1 289.1 27.2 30.1 -26.4 30.0 -26.1 30.9 -22.7 31.3 -24.2
2025-12-25T16:16:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:16:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:16:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.594158
2025-12-25T16:16:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:16:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:16:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:16:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:16:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:16:14.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:15:55', tmtdew=27.39, humidity=16.37, cloud=0.0, wind=21.65, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:15:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:16:14.593 [DEBUG] [Thread-14593] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:16:14.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-25T16:16:14.686 [DEBUG] [Thread-14596] [transport.py] [_log()] starting thread (client mode): 0xb6b013c0
2025-12-25T16:16:14.686 [DEBUG] [Thread-14596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:16:14.703 [DEBUG] [Thread-14596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:16:14.703 [INFO] [Thread-14596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:14.711 [DEBUG] [Thread-14596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] client lang: <none>
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] server lang: <none>
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] kex follows: False
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:16:14.712 [DEBUG] [Thread-14596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:16:14.713 [DEBUG] [Thread-14596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:16:14.713 [DEBUG] [Thread-14596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:16:14.713 [DEBUG] [Thread-14596] [transport.py] [_log()] Compression: none
2025-12-25T16:16:14.713 [DEBUG] [Thread-14596] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:16:14.770 [DEBUG] [Thread-14596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:16:14.771 [DEBUG] [Thread-14596] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:16:14.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:16:14.772 [DEBUG] [Thread-14596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:16:14.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:16:14.829 [DEBUG] [Thread-14596] [transport.py] [_log()] userauth is OK
2025-12-25T16:16:14.830 [DEBUG] [Thread-14596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:16:14.830 [DEBUG] [Thread-14596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:16:14.830 [DEBUG] [Thread-14596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:16:14.830 [DEBUG] [Thread-14596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:16:14.849 [INFO] [Thread-14596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:16:14.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-25T16:16:14.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:16:15.699 [DEBUG] [Thread-14596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:16:15.699 [DEBUG] [Thread-14596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:16:15.748 [DEBUG] [Thread-14596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:16:15.748 [DEBUG] [Thread-14596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:16:15.759 [DEBUG] [Thread-14596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:16:15.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:16:15.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-25T16:16:15.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-25T16:16:15.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:16:15.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:16:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:16:15.799 [DEBUG] [Thread-14596] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:16:26.784 [DEBUG] [Thread-14598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:41.840 [DEBUG] [Thread-14599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:16:45.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:16:45.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-25T16:16:46.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 16, 28), 27.46, 16.34, 0.0, 27.82, 26.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:16:46.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:16:28
2025-12-25T16:16:46.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:16:46.805 [DEBUG] [Thread-14600] [transport.py] [_log()] starting thread (client mode): 0xb6b22c80
2025-12-25T16:16:46.805 [DEBUG] [Thread-14600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:16:46.825 [DEBUG] [Thread-14600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:16:46.825 [INFO] [Thread-14600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:16:46.826 [DEBUG] [Thread-14600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] client lang: <none>
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] server lang: <none>
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] kex follows: False
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] Compression: none
2025-12-25T16:16:46.827 [DEBUG] [Thread-14600] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:16:46.840 [DEBUG] [Thread-14600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:16:46.841 [DEBUG] [Thread-14600] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:16:46.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:16:46.842 [DEBUG] [Thread-14600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:16:46.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:16:46.844 [DEBUG] [Thread-14600] [transport.py] [_log()] userauth is OK
2025-12-25T16:16:46.844 [DEBUG] [Thread-14600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:16:46.844 [DEBUG] [Thread-14600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:16:46.844 [DEBUG] [Thread-14600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:16:46.844 [DEBUG] [Thread-14600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:16:46.862 [INFO] [Thread-14600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:16:46.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:16:47.622 [DEBUG] [Thread-14600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:16:47.622 [DEBUG] [Thread-14600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:16:47.622 [DEBUG] [Thread-14600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:16:47.663 [DEBUG] [Thread-14600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:16:47.663 [DEBUG] [Thread-14600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:16:47.666 [DEBUG] [Thread-14600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:16:47.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:16:47.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:16:47.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:16:47.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:16:47.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:16:47.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:16:47.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:16:47.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:16:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:16:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.594506 -999.00  +26.70  29.14     21   +3.00 1 1 1 1 1   888    0 23.39 -49.66 ----- 27.2 29.1 293.2 37.4 30.1 -26.8 30.1 -26.6 30.9 -25.1 31.4 -25.1
2025-12-25T16:16:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:16:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:16:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.594506
2025-12-25T16:16:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:16:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:16:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:16:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:16:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:16:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:16:28', tmtdew=27.46, humidity=16.34, cloud=0.0, wind=27.82, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:16:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:16:47.685 [DEBUG] [Thread-14600] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:16:47.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-25T16:16:47.779 [DEBUG] [Thread-14603] [transport.py] [_log()] starting thread (client mode): 0xb6b03f10
2025-12-25T16:16:47.779 [DEBUG] [Thread-14603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:16:47.793 [DEBUG] [Thread-14603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:16:47.793 [INFO] [Thread-14603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] client lang: <none>
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] server lang: <none>
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] kex follows: False
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:16:47.801 [DEBUG] [Thread-14603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:16:47.802 [DEBUG] [Thread-14603] [transport.py] [_log()] Compression: none
2025-12-25T16:16:47.802 [DEBUG] [Thread-14603] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:16:47.857 [DEBUG] [Thread-14603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:16:47.857 [DEBUG] [Thread-14603] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:16:47.858 [DEBUG] [Thread-14603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:16:47.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:16:47.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:16:47.912 [DEBUG] [Thread-14603] [transport.py] [_log()] userauth is OK
2025-12-25T16:16:47.913 [DEBUG] [Thread-14603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:16:47.913 [DEBUG] [Thread-14603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:16:47.913 [DEBUG] [Thread-14603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:16:47.913 [DEBUG] [Thread-14603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:16:47.927 [INFO] [Thread-14603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:16:47.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:16:47.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:16:48.747 [DEBUG] [Thread-14603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:16:48.747 [DEBUG] [Thread-14603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:16:48.797 [DEBUG] [Thread-14603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:16:48.797 [DEBUG] [Thread-14603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:16:48.805 [DEBUG] [Thread-14603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:16:48.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:16:48.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-25T16:16:48.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-25T16:16:48.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:16:48.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:16:48.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:16:48.837 [DEBUG] [Thread-14603] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:16:52.049 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:52.051 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:16:56.876 [DEBUG] [Thread-14605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:11.921 [DEBUG] [Thread-14606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:13.415 [DEBUG] [Thread-14607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:18.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:17:18.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:17:18.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-25T16:17:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 16, 28), 27.26, 16.34, 0.0, 35.02, 26.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:17:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:16:28
2025-12-25T16:17:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:17:19.871 [DEBUG] [Thread-14608] [transport.py] [_log()] starting thread (client mode): 0xb6b01cc0
2025-12-25T16:17:19.871 [DEBUG] [Thread-14608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:17:19.892 [DEBUG] [Thread-14608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:17:19.892 [INFO] [Thread-14608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] client lang: <none>
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] server lang: <none>
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] kex follows: False
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] Compression: none
2025-12-25T16:17:19.895 [DEBUG] [Thread-14608] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:17:19.910 [DEBUG] [Thread-14608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:17:19.910 [DEBUG] [Thread-14608] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:17:19.910 [DEBUG] [Thread-14608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:17:19.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:17:19.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:17:19.911 [DEBUG] [Thread-14608] [transport.py] [_log()] userauth is OK
2025-12-25T16:17:19.911 [DEBUG] [Thread-14608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:17:19.911 [DEBUG] [Thread-14608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:17:19.911 [DEBUG] [Thread-14608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:17:19.911 [DEBUG] [Thread-14608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:17:19.921 [INFO] [Thread-14608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:17:19.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:17:20.569 [DEBUG] [Thread-14608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:17:20.569 [DEBUG] [Thread-14608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:17:20.569 [DEBUG] [Thread-14608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:17:20.609 [DEBUG] [Thread-14608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:17:20.609 [DEBUG] [Thread-14608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:17:20.611 [DEBUG] [Thread-14608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:17:20.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:17:20.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:17:20.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:17:20.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:17:20.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:17:20.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:17:20.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:17:20.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:17:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:17:20.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.594853 -999.00  +26.40  28.51     22   +3.00 1 1 1 1 1   888    0 22.64 -57.04 ----- 32.2 28.5 284.4 41.4 30.1 -27.9 30.0 -26.6 30.8 -29.7 31.3 -25.4
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.594853
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:17:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:16:28', tmtdew=27.26, humidity=16.34, cloud=0.0, wind=35.02, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:16:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:17:20.628 [DEBUG] [Thread-14608] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:17:20.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-25T16:17:20.711 [DEBUG] [Thread-14611] [transport.py] [_log()] starting thread (client mode): 0xb6b00190
2025-12-25T16:17:20.712 [DEBUG] [Thread-14611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:17:20.728 [DEBUG] [Thread-14611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:17:20.728 [INFO] [Thread-14611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] client lang: <none>
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] server lang: <none>
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] kex follows: False
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] Compression: none
2025-12-25T16:17:20.736 [DEBUG] [Thread-14611] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:17:20.794 [DEBUG] [Thread-14611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:17:20.794 [DEBUG] [Thread-14611] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:17:20.794 [DEBUG] [Thread-14611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:17:20.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:17:20.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:17:20.850 [DEBUG] [Thread-14611] [transport.py] [_log()] userauth is OK
2025-12-25T16:17:20.850 [DEBUG] [Thread-14611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:17:20.850 [DEBUG] [Thread-14611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:17:20.850 [DEBUG] [Thread-14611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:17:20.850 [DEBUG] [Thread-14611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:17:20.867 [INFO] [Thread-14611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:17:20.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-25T16:17:20.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:17:21.712 [DEBUG] [Thread-14611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:17:21.712 [DEBUG] [Thread-14611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:17:21.760 [DEBUG] [Thread-14611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:17:21.760 [DEBUG] [Thread-14611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:17:21.769 [DEBUG] [Thread-14611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:17:21.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:17:21.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-25T16:17:21.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:17:21.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:17:21.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:17:21.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:17:21.803 [DEBUG] [Thread-14611] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:17:26.954 [DEBUG] [Thread-14613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:42.006 [DEBUG] [Thread-14614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:51.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:17:51.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:17:51.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-25T16:17:52.193 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:52.194 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:17:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 17, 32), 27.63, 16.04, 0.0, 39.58, 26.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:17:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:17:32
2025-12-25T16:17:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:17:52.806 [DEBUG] [Thread-14615] [transport.py] [_log()] starting thread (client mode): 0xb6b01600
2025-12-25T16:17:52.806 [DEBUG] [Thread-14615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:17:52.827 [DEBUG] [Thread-14615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:17:52.828 [INFO] [Thread-14615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] client lang: <none>
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] server lang: <none>
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] kex follows: False
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:17:52.831 [DEBUG] [Thread-14615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:17:52.832 [DEBUG] [Thread-14615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:17:52.832 [DEBUG] [Thread-14615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:17:52.832 [DEBUG] [Thread-14615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:17:52.832 [DEBUG] [Thread-14615] [transport.py] [_log()] Compression: none
2025-12-25T16:17:52.832 [DEBUG] [Thread-14615] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:17:52.848 [DEBUG] [Thread-14615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:17:52.849 [DEBUG] [Thread-14615] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:17:52.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:17:52.850 [DEBUG] [Thread-14615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:17:52.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:17:52.852 [DEBUG] [Thread-14615] [transport.py] [_log()] userauth is OK
2025-12-25T16:17:52.852 [DEBUG] [Thread-14615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:17:52.852 [DEBUG] [Thread-14615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:17:52.852 [DEBUG] [Thread-14615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:17:52.852 [DEBUG] [Thread-14615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:17:52.877 [INFO] [Thread-14615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:17:52.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:17:53.611 [DEBUG] [Thread-14615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:17:53.611 [DEBUG] [Thread-14615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:17:53.611 [DEBUG] [Thread-14615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:17:53.652 [DEBUG] [Thread-14615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:17:53.652 [DEBUG] [Thread-14615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:17:53.655 [DEBUG] [Thread-14615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:17:53.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:17:53.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:17:53.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:17:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:17:53.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:17:53.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:17:53.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:17:53.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:17:53.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:17:53.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.595200 -999.00  +26.00  32.55     22   +2.80 1 1 2 1 1   888    0 22.24 -63.15 ----- 24.9 32.5 301.2 37.3 30.1 -27.3 30.0 -27.2 30.9 -26.6 31.3 -25.3
2025-12-25T16:17:53.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:17:53.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:17:53.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.595200
2025-12-25T16:17:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:17:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:17:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:17:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:17:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:17:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:17:32', tmtdew=27.63, humidity=16.04, cloud=0.0, wind=39.58, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:17:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:17:53.685 [DEBUG] [Thread-14615] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:17:53.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-25T16:17:53.777 [DEBUG] [Thread-14618] [transport.py] [_log()] starting thread (client mode): 0xb9558580
2025-12-25T16:17:53.777 [DEBUG] [Thread-14618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:17:53.794 [DEBUG] [Thread-14618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:17:53.794 [INFO] [Thread-14618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:53.802 [DEBUG] [Thread-14618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] client lang: <none>
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] server lang: <none>
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] kex follows: False
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:17:53.803 [DEBUG] [Thread-14618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:17:53.804 [DEBUG] [Thread-14618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:17:53.804 [DEBUG] [Thread-14618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:17:53.804 [DEBUG] [Thread-14618] [transport.py] [_log()] Compression: none
2025-12-25T16:17:53.804 [DEBUG] [Thread-14618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:17:53.859 [DEBUG] [Thread-14618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:17:53.860 [DEBUG] [Thread-14618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:17:53.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:17:53.860 [DEBUG] [Thread-14618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:17:53.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:17:53.917 [DEBUG] [Thread-14618] [transport.py] [_log()] userauth is OK
2025-12-25T16:17:53.917 [DEBUG] [Thread-14618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:17:53.917 [DEBUG] [Thread-14618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:17:53.917 [DEBUG] [Thread-14618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:17:53.917 [DEBUG] [Thread-14618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:17:53.932 [INFO] [Thread-14618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:17:53.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-25T16:17:53.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:17:54.737 [DEBUG] [Thread-14618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:17:54.737 [DEBUG] [Thread-14618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:17:54.785 [DEBUG] [Thread-14618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:17:54.785 [DEBUG] [Thread-14618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:17:54.793 [DEBUG] [Thread-14618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:17:54.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:17:54.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:17:54.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-25T16:17:54.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:17:54.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:17:54.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:17:54.824 [DEBUG] [Thread-14618] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:17:57.037 [DEBUG] [Thread-14620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:12.076 [DEBUG] [Thread-14621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:13.450 [DEBUG] [Thread-14622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:18:24.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:18:24.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:18:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 18, 4), 27.52, 16.16, 0.0, 37.42, 26.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:18:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:18:04
2025-12-25T16:18:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:18:25.811 [DEBUG] [Thread-14623] [transport.py] [_log()] starting thread (client mode): 0xb6b001c0
2025-12-25T16:18:25.811 [DEBUG] [Thread-14623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:18:25.833 [DEBUG] [Thread-14623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:18:25.833 [INFO] [Thread-14623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:18:25.836 [DEBUG] [Thread-14623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:18:25.836 [DEBUG] [Thread-14623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] client lang: <none>
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] server lang: <none>
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] kex follows: False
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:18:25.837 [DEBUG] [Thread-14623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:18:25.838 [DEBUG] [Thread-14623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:18:25.838 [DEBUG] [Thread-14623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:18:25.838 [DEBUG] [Thread-14623] [transport.py] [_log()] Compression: none
2025-12-25T16:18:25.838 [DEBUG] [Thread-14623] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:18:25.859 [DEBUG] [Thread-14623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:18:25.859 [DEBUG] [Thread-14623] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:18:25.860 [DEBUG] [Thread-14623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:18:25.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:18:25.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:18:25.862 [DEBUG] [Thread-14623] [transport.py] [_log()] userauth is OK
2025-12-25T16:18:25.862 [DEBUG] [Thread-14623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:18:25.862 [DEBUG] [Thread-14623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:18:25.862 [DEBUG] [Thread-14623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:18:25.862 [DEBUG] [Thread-14623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:18:25.901 [INFO] [Thread-14623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:18:25.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:18:26.569 [DEBUG] [Thread-14623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:18:26.569 [DEBUG] [Thread-14623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:18:26.570 [DEBUG] [Thread-14623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:18:26.610 [DEBUG] [Thread-14623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:18:26.610 [DEBUG] [Thread-14623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:18:26.614 [DEBUG] [Thread-14623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:18:26.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:18:26.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:18:26.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:18:26.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:18:26.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:18:26.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:18:26.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:18:26.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.595547 -999.00  +26.20  25.88     22   +3.10 1 1 1 1 1   888    0 22.35 -68.22 ----- 24.6 25.9 302.2 31.5 30.1 -26.6 30.1 -26.3 30.9 -24.3 31.3 -24.6
2025-12-25T16:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.595547
2025-12-25T16:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:18:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:18:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:18:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:18:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:18:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:18:04', tmtdew=27.52, humidity=16.16, cloud=0.0, wind=37.42, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:17:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:18:26.639 [DEBUG] [Thread-14623] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:18:26.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-25T16:18:26.731 [DEBUG] [Thread-14626] [transport.py] [_log()] starting thread (client mode): 0xb6b03c10
2025-12-25T16:18:26.731 [DEBUG] [Thread-14626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:18:26.750 [DEBUG] [Thread-14626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:18:26.750 [INFO] [Thread-14626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:18:26.758 [DEBUG] [Thread-14626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:18:26.758 [DEBUG] [Thread-14626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:18:26.758 [DEBUG] [Thread-14626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:18:26.758 [DEBUG] [Thread-14626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:26.758 [DEBUG] [Thread-14626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:26.758 [DEBUG] [Thread-14626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] client lang: <none>
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] server lang: <none>
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] kex follows: False
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:18:26.759 [DEBUG] [Thread-14626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:18:26.760 [DEBUG] [Thread-14626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:18:26.760 [DEBUG] [Thread-14626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:18:26.760 [DEBUG] [Thread-14626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:18:26.760 [DEBUG] [Thread-14626] [transport.py] [_log()] Compression: none
2025-12-25T16:18:26.760 [DEBUG] [Thread-14626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:18:26.825 [DEBUG] [Thread-14626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:18:26.826 [DEBUG] [Thread-14626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:18:26.826 [DEBUG] [Thread-14626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:18:26.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:18:26.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:18:26.881 [DEBUG] [Thread-14626] [transport.py] [_log()] userauth is OK
2025-12-25T16:18:26.882 [DEBUG] [Thread-14626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:18:26.882 [DEBUG] [Thread-14626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:18:26.882 [DEBUG] [Thread-14626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:18:26.882 [DEBUG] [Thread-14626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:18:26.901 [INFO] [Thread-14626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:18:26.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:18:26.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:18:27.112 [DEBUG] [Thread-14628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:27.793 [DEBUG] [Thread-14626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:18:27.793 [DEBUG] [Thread-14626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:18:27.841 [DEBUG] [Thread-14626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:18:27.841 [DEBUG] [Thread-14626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:18:27.850 [DEBUG] [Thread-14626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:18:27.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:18:27.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-25T16:18:27.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-25T16:18:27.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:18:27.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:18:27.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:18:27.886 [DEBUG] [Thread-14626] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:18:42.163 [DEBUG] [Thread-14629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:52.331 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:52.332 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:57.202 [DEBUG] [Thread-14630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:18:57.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:18:57.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:18:57.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:18:58.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 18, 36), 27.19, 17.03, 0.0, 34.28, 26.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:18:58.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:18:36
2025-12-25T16:18:58.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:18:58.865 [DEBUG] [Thread-14631] [transport.py] [_log()] starting thread (client mode): 0xb957b400
2025-12-25T16:18:58.865 [DEBUG] [Thread-14631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:18:58.886 [DEBUG] [Thread-14631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:18:58.887 [INFO] [Thread-14631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] client lang: <none>
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] server lang: <none>
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] kex follows: False
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] Compression: none
2025-12-25T16:18:58.890 [DEBUG] [Thread-14631] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:18:58.907 [DEBUG] [Thread-14631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:18:58.908 [DEBUG] [Thread-14631] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:18:58.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:18:58.909 [DEBUG] [Thread-14631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:18:58.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:18:58.911 [DEBUG] [Thread-14631] [transport.py] [_log()] userauth is OK
2025-12-25T16:18:58.911 [DEBUG] [Thread-14631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:18:58.911 [DEBUG] [Thread-14631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:18:58.912 [DEBUG] [Thread-14631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:18:58.912 [DEBUG] [Thread-14631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:18:58.929 [INFO] [Thread-14631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:18:58.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:18:59.662 [DEBUG] [Thread-14631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:18:59.662 [DEBUG] [Thread-14631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:18:59.663 [DEBUG] [Thread-14631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:18:59.703 [DEBUG] [Thread-14631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:18:59.703 [DEBUG] [Thread-14631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:18:59.706 [DEBUG] [Thread-14631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:18:59.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:18:59.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:18:59.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:18:59.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:18:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:18:59.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:18:59.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:18:59.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:18:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:18:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.595894 -999.00  +25.90  36.48     22   +2.90 1 1 2 1 1   888    0 21.98 -78.06 ----- 39.8 36.5 303.0 42.3 30.1 -27.6 30.1 -27.6 30.8 -24.4 31.3 -26.0
2025-12-25T16:18:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:18:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:18:59.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.595894
2025-12-25T16:18:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:18:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:18:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:18:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:18:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:18:59.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:18:36', tmtdew=27.19, humidity=17.03, cloud=0.0, wind=34.28, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:18:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:18:59.724 [DEBUG] [Thread-14631] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:18:59.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-25T16:18:59.819 [DEBUG] [Thread-14634] [transport.py] [_log()] starting thread (client mode): 0xb95d42e0
2025-12-25T16:18:59.819 [DEBUG] [Thread-14634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:18:59.834 [DEBUG] [Thread-14634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:18:59.834 [INFO] [Thread-14634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:18:59.842 [DEBUG] [Thread-14634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:18:59.842 [DEBUG] [Thread-14634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:18:59.843 [DEBUG] [Thread-14634] [transport.py] [_log()] client lang: <none>
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] server lang: <none>
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] kex follows: False
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:18:59.844 [DEBUG] [Thread-14634] [transport.py] [_log()] Compression: none
2025-12-25T16:18:59.845 [DEBUG] [Thread-14634] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:18:59.901 [DEBUG] [Thread-14634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:18:59.902 [DEBUG] [Thread-14634] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:18:59.902 [DEBUG] [Thread-14634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:18:59.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:18:59.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:18:59.957 [DEBUG] [Thread-14634] [transport.py] [_log()] userauth is OK
2025-12-25T16:18:59.957 [DEBUG] [Thread-14634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:18:59.958 [DEBUG] [Thread-14634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:18:59.958 [DEBUG] [Thread-14634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:18:59.958 [DEBUG] [Thread-14634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:18:59.976 [INFO] [Thread-14634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:18:59.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-25T16:18:59.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:19:00.861 [DEBUG] [Thread-14634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:19:00.861 [DEBUG] [Thread-14634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:19:00.909 [DEBUG] [Thread-14634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:19:00.909 [DEBUG] [Thread-14634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:19:00.918 [DEBUG] [Thread-14634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:19:00.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:19:00.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-25T16:19:00.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-25T16:19:00.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:19:00.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:19:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:19:00.955 [DEBUG] [Thread-14634] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:19:12.233 [DEBUG] [Thread-14636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:13.479 [DEBUG] [Thread-14637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:27.276 [DEBUG] [Thread-14639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:30.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:19:30.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:19:30.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-25T16:19:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 19, 8), 27.31, 16.88, 0.0, 36.61, 26.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:19:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:19:08
2025-12-25T16:19:31.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:19:31.920 [DEBUG] [Thread-14640] [transport.py] [_log()] starting thread (client mode): 0xb6b03820
2025-12-25T16:19:31.920 [DEBUG] [Thread-14640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:19:31.940 [DEBUG] [Thread-14640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:19:31.940 [INFO] [Thread-14640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:19:31.943 [DEBUG] [Thread-14640] [transport.py] [_log()] client lang: <none>
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] server lang: <none>
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] kex follows: False
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] Compression: none
2025-12-25T16:19:31.944 [DEBUG] [Thread-14640] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:19:31.961 [DEBUG] [Thread-14640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:19:31.961 [DEBUG] [Thread-14640] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:19:31.962 [DEBUG] [Thread-14640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:19:31.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:19:31.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:19:31.964 [DEBUG] [Thread-14640] [transport.py] [_log()] userauth is OK
2025-12-25T16:19:31.964 [DEBUG] [Thread-14640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:19:31.965 [DEBUG] [Thread-14640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:19:31.965 [DEBUG] [Thread-14640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:19:31.965 [DEBUG] [Thread-14640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:19:32.001 [INFO] [Thread-14640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:19:32.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:19:32.652 [DEBUG] [Thread-14640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:19:32.652 [DEBUG] [Thread-14640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:19:32.652 [DEBUG] [Thread-14640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:19:32.694 [DEBUG] [Thread-14640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:19:32.694 [DEBUG] [Thread-14640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:19:32.697 [DEBUG] [Thread-14640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:19:32.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:19:32.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:19:32.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:19:32.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:19:32.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:19:32.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:19:32.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.596242 -999.00  +26.10  29.66     22   +3.10 1 1 1 1 1   888    0 21.39 -83.44 ----- 39.1 29.7 313.8 44.1 30.1 -29.0 30.0 -28.0 30.7 -28.8 31.2 -25.4
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.596242
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:19:32.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:19:08', tmtdew=27.31, humidity=16.88, cloud=0.0, wind=36.61, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:18:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:19:32.721 [DEBUG] [Thread-14640] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:19:32.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-25T16:19:32.810 [DEBUG] [Thread-14643] [transport.py] [_log()] starting thread (client mode): 0xb6b036d0
2025-12-25T16:19:32.810 [DEBUG] [Thread-14643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:19:32.825 [DEBUG] [Thread-14643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:19:32.825 [INFO] [Thread-14643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:19:32.833 [DEBUG] [Thread-14643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:19:32.833 [DEBUG] [Thread-14643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:19:32.833 [DEBUG] [Thread-14643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:19:32.833 [DEBUG] [Thread-14643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] client lang: <none>
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] server lang: <none>
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] kex follows: False
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] Compression: none
2025-12-25T16:19:32.834 [DEBUG] [Thread-14643] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:19:32.893 [DEBUG] [Thread-14643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:19:32.894 [DEBUG] [Thread-14643] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:19:32.894 [DEBUG] [Thread-14643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:19:32.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:19:32.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:19:32.951 [DEBUG] [Thread-14643] [transport.py] [_log()] userauth is OK
2025-12-25T16:19:32.951 [DEBUG] [Thread-14643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:19:32.951 [DEBUG] [Thread-14643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:19:32.951 [DEBUG] [Thread-14643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:19:32.951 [DEBUG] [Thread-14643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:19:32.971 [INFO] [Thread-14643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:19:32.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-25T16:19:32.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:19:33.806 [DEBUG] [Thread-14643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:19:33.807 [DEBUG] [Thread-14643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:19:33.855 [DEBUG] [Thread-14643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:19:33.855 [DEBUG] [Thread-14643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:19:33.865 [DEBUG] [Thread-14643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:19:33.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:19:33.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-25T16:19:33.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-25T16:19:33.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:19:33.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:19:33.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:19:33.902 [DEBUG] [Thread-14643] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:19:38.062 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:42.311 [DEBUG] [Thread-14645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:52.477 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:52.478 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:19:57.356 [DEBUG] [Thread-14646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:03.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:20:03.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:20:03.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-25T16:20:04.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 19, 40), 27.49, 16.54, 0.0, 36.08, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:20:04.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:19:40
2025-12-25T16:20:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:20:04.885 [DEBUG] [Thread-14647] [transport.py] [_log()] starting thread (client mode): 0xb6b01ff0
2025-12-25T16:20:04.885 [DEBUG] [Thread-14647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:20:04.906 [DEBUG] [Thread-14647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:20:04.906 [INFO] [Thread-14647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] client lang: <none>
2025-12-25T16:20:04.909 [DEBUG] [Thread-14647] [transport.py] [_log()] server lang: <none>
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] kex follows: False
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] Compression: none
2025-12-25T16:20:04.910 [DEBUG] [Thread-14647] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:20:04.928 [DEBUG] [Thread-14647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:20:04.928 [DEBUG] [Thread-14647] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:20:04.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:20:04.930 [DEBUG] [Thread-14647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:20:04.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:20:04.931 [DEBUG] [Thread-14647] [transport.py] [_log()] userauth is OK
2025-12-25T16:20:04.932 [DEBUG] [Thread-14647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:20:04.932 [DEBUG] [Thread-14647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:20:04.932 [DEBUG] [Thread-14647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:20:04.932 [DEBUG] [Thread-14647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:20:04.956 [INFO] [Thread-14647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:20:04.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:20:06.197 [DEBUG] [Thread-14647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:20:06.198 [DEBUG] [Thread-14647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:20:06.198 [DEBUG] [Thread-14647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:20:06.239 [DEBUG] [Thread-14647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:20:06.239 [DEBUG] [Thread-14647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:20:06.242 [DEBUG] [Thread-14647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:20:06.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:20:06.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:20:06.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:20:06.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:20:06.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:20:06.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:20:06.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:20:06.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:20:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:20:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.596589 -999.00  +25.50  35.14     22   +2.80 1 1 2 1 1   888    0 21.60 -90.82 ----- 29.9 35.1 313.8 48.2 29.9 -28.1 29.8 -28.5 30.7 -25.0 31.1 -26.2
2025-12-25T16:20:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:20:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:20:06.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.596589
2025-12-25T16:20:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:20:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:20:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:20:06.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:20:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:20:06.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:19:40', tmtdew=27.49, humidity=16.54, cloud=0.0, wind=36.08, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:19:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:20:06.299 [DEBUG] [Thread-14647] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:20:06.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-25T16:20:12.394 [DEBUG] [Thread-14650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:13.509 [DEBUG] [Thread-14651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:18.605 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:27.443 [DEBUG] [Thread-14652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:42.477 [DEBUG] [Thread-14653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:52.618 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:52.619 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:20:57.512 [DEBUG] [Thread-14654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:12.543 [DEBUG] [Thread-14655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:13.537 [DEBUG] [Thread-14656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:21.962 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:27.575 [DEBUG] [Thread-14657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:42.613 [DEBUG] [Thread-14658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:46.464 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:52.759 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:52.760 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:21:57.646 [DEBUG] [Thread-14659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:08.927 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:12.684 [DEBUG] [Thread-14660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:13.576 [DEBUG] [Thread-14661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:21.653 [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-25T16:22:27.716 [DEBUG] [Thread-14662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:31.436 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:42.747 [DEBUG] [Thread-14663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:51.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:22:51.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:22:51.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-25T16:22:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 22, 20), 28.27, 15.38, 0.0, 42.82, 26.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:22:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:22:20
2025-12-25T16:22:52.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:22:52.667 [DEBUG] [Thread-14664] [transport.py] [_log()] starting thread (client mode): 0xb95d6c80
2025-12-25T16:22:52.667 [DEBUG] [Thread-14664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:22:52.692 [DEBUG] [Thread-14664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:22:52.692 [INFO] [Thread-14664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:22:52.695 [DEBUG] [Thread-14664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:22:52.695 [DEBUG] [Thread-14664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] client lang: <none>
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] server lang: <none>
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] kex follows: False
2025-12-25T16:22:52.696 [DEBUG] [Thread-14664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:22:52.697 [DEBUG] [Thread-14664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:22:52.697 [DEBUG] [Thread-14664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:22:52.697 [DEBUG] [Thread-14664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:22:52.697 [DEBUG] [Thread-14664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:22:52.697 [DEBUG] [Thread-14664] [transport.py] [_log()] Compression: none
2025-12-25T16:22:52.697 [DEBUG] [Thread-14664] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:22:52.709 [DEBUG] [Thread-14664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:22:52.709 [DEBUG] [Thread-14664] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:22:52.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:22:52.710 [DEBUG] [Thread-14664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:22:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:22:52.753 [DEBUG] [Thread-14664] [transport.py] [_log()] userauth is OK
2025-12-25T16:22:52.753 [DEBUG] [Thread-14664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:22:52.754 [DEBUG] [Thread-14664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:22:52.754 [DEBUG] [Thread-14664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:22:52.754 [DEBUG] [Thread-14664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:22:52.773 [INFO] [Thread-14664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:22:52.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:22:52.898 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:52.899 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:53.381 [DEBUG] [Thread-14664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:22:53.381 [DEBUG] [Thread-14664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:22:53.381 [DEBUG] [Thread-14664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:22:53.422 [DEBUG] [Thread-14664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:22:53.422 [DEBUG] [Thread-14664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:22:53.425 [DEBUG] [Thread-14664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:22:53.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:22:53.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:22:53.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:22:53.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:22:53.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:22:53.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:22:53.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.599019 -999.00  +25.20  31.58     21   +1.70 1 1 2 1 1   888    0 20.08 -122.02 ----- 35.5 31.6 308.2 44.1 29.4 -28.9 29.5 -28.1 30.1 -26.4 30.6 -26.1
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.599019
2025-12-25T16:22:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:22:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:22:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:22:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:22:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:22:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:22:20', tmtdew=28.27, humidity=15.38, cloud=0.0, wind=42.82, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:22:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:22:53.443 [DEBUG] [Thread-14664] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:22:53.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-25T16:22:53.525 [DEBUG] [Thread-14667] [transport.py] [_log()] starting thread (client mode): 0xb6b02770
2025-12-25T16:22:53.525 [DEBUG] [Thread-14667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:22:53.540 [DEBUG] [Thread-14667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:22:53.540 [INFO] [Thread-14667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:22:53.548 [DEBUG] [Thread-14667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:22:53.548 [DEBUG] [Thread-14667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:22:53.548 [DEBUG] [Thread-14667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:22:53.548 [DEBUG] [Thread-14667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:22:53.548 [DEBUG] [Thread-14667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] client lang: <none>
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] server lang: <none>
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] kex follows: False
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] Compression: none
2025-12-25T16:22:53.549 [DEBUG] [Thread-14667] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:22:53.604 [DEBUG] [Thread-14667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:22:53.604 [DEBUG] [Thread-14667] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:22:53.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:22:53.604 [DEBUG] [Thread-14667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:22:53.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:22:53.661 [DEBUG] [Thread-14667] [transport.py] [_log()] userauth is OK
2025-12-25T16:22:53.661 [DEBUG] [Thread-14667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:22:53.661 [DEBUG] [Thread-14667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:22:53.661 [DEBUG] [Thread-14667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:22:53.661 [DEBUG] [Thread-14667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:22:53.675 [INFO] [Thread-14667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:22:53.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-25T16:22:53.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:22:53.903 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:22:54.500 [DEBUG] [Thread-14667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:22:54.500 [DEBUG] [Thread-14667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:22:54.547 [DEBUG] [Thread-14667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:22:54.547 [DEBUG] [Thread-14667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:22:54.556 [DEBUG] [Thread-14667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:22:54.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:22:54.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-25T16:22: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') -> 00000000
2025-12-25T16:22:54.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:22:54.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:22:54.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:22:54.587 [DEBUG] [Thread-14667] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:22:57.780 [DEBUG] [Thread-14669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:12.837 [DEBUG] [Thread-14670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:13.623 [DEBUG] [Thread-14671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:16.384 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:23:24.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:23: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-25T16:23:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 22, 52), 28.12, 15.36, 0.0, 38.45, 25.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:23:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:22:52
2025-12-25T16:23:25.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:23:25.619 [DEBUG] [Thread-14672] [transport.py] [_log()] starting thread (client mode): 0xb9591600
2025-12-25T16:23:25.619 [DEBUG] [Thread-14672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:23:25.644 [DEBUG] [Thread-14672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:23:25.644 [INFO] [Thread-14672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:25.645 [DEBUG] [Thread-14672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] client lang: <none>
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] server lang: <none>
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] kex follows: False
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] Compression: none
2025-12-25T16:23:25.646 [DEBUG] [Thread-14672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:23:25.653 [DEBUG] [Thread-14672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:23:25.653 [DEBUG] [Thread-14672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:23:25.653 [DEBUG] [Thread-14672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:23:25.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:23:25.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:23:25.654 [DEBUG] [Thread-14672] [transport.py] [_log()] userauth is OK
2025-12-25T16:23:25.654 [DEBUG] [Thread-14672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:23:25.654 [DEBUG] [Thread-14672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:23:25.654 [DEBUG] [Thread-14672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:23:25.654 [DEBUG] [Thread-14672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:23:25.663 [INFO] [Thread-14672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:23:25.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:23:26.249 [DEBUG] [Thread-14672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:23:26.249 [DEBUG] [Thread-14672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:23:26.249 [DEBUG] [Thread-14672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:23:26.290 [DEBUG] [Thread-14672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:23:26.290 [DEBUG] [Thread-14672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:23:26.292 [DEBUG] [Thread-14672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:23:26.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:23:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:23:26.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:23:26.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:23:26.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:23:26.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:23:26.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.599367 -999.00  +24.90  39.50     21   +1.30 1 1 2 1 1   888    0 20.26 -121.78 ----- 33.4 39.5 296.2 45.6 29.4 -29.2 29.4 -28.9 30.0 -27.1 30.5 -26.4
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.599367
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:23:26.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:23:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:23:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:23:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:22:52', tmtdew=28.12, humidity=15.36, cloud=0.0, wind=38.45, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:23:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:23:26.305 [DEBUG] [Thread-14672] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:23:26.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-25T16:23:26.388 [DEBUG] [Thread-14675] [transport.py] [_log()] starting thread (client mode): 0xb9593670
2025-12-25T16:23:26.389 [DEBUG] [Thread-14675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:23:26.407 [DEBUG] [Thread-14675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:23:26.407 [INFO] [Thread-14675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:23:26.414 [DEBUG] [Thread-14675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:23:26.414 [DEBUG] [Thread-14675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:23:26.414 [DEBUG] [Thread-14675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:23:26.414 [DEBUG] [Thread-14675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:26.414 [DEBUG] [Thread-14675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:26.414 [DEBUG] [Thread-14675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] client lang: <none>
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] server lang: <none>
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] kex follows: False
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] Compression: none
2025-12-25T16:23:26.415 [DEBUG] [Thread-14675] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:23:26.477 [DEBUG] [Thread-14675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:23:26.477 [DEBUG] [Thread-14675] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:23:26.477 [DEBUG] [Thread-14675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:23:26.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:23:26.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:23:26.533 [DEBUG] [Thread-14675] [transport.py] [_log()] userauth is OK
2025-12-25T16:23:26.533 [DEBUG] [Thread-14675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:23:26.533 [DEBUG] [Thread-14675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:23:26.533 [DEBUG] [Thread-14675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:23:26.533 [DEBUG] [Thread-14675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:23:26.551 [INFO] [Thread-14675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:23:26.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-25T16:23:26.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:23:27.382 [DEBUG] [Thread-14675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:23:27.382 [DEBUG] [Thread-14675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:23:27.429 [DEBUG] [Thread-14675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:23:27.430 [DEBUG] [Thread-14675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:23:27.438 [DEBUG] [Thread-14675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:23:27.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:23:27.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-25T16:23:27.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:23:27.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:23:27.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:23:27.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:23:27.472 [DEBUG] [Thread-14675] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:23:27.878 [DEBUG] [Thread-14677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:38.910 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:42.935 [DEBUG] [Thread-14678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:53.046 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:53.048 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:57.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:23:57.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:23:57.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-25T16:23:57.968 [DEBUG] [Thread-14679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:23:58.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 23, 24), 28.16, 15.31, 0.0, 34.27, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:23:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:23:24
2025-12-25T16:23:58.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:23:58.532 [DEBUG] [Thread-14680] [transport.py] [_log()] starting thread (client mode): 0xb6b02c80
2025-12-25T16:23:58.532 [DEBUG] [Thread-14680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:23:58.552 [DEBUG] [Thread-14680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:23:58.553 [INFO] [Thread-14680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] client lang: <none>
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] server lang: <none>
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] kex follows: False
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] Compression: none
2025-12-25T16:23:58.556 [DEBUG] [Thread-14680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:23:58.571 [DEBUG] [Thread-14680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:23:58.571 [DEBUG] [Thread-14680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:23:58.571 [DEBUG] [Thread-14680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:23:58.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:23:58.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:23:58.572 [DEBUG] [Thread-14680] [transport.py] [_log()] userauth is OK
2025-12-25T16:23:58.572 [DEBUG] [Thread-14680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:23:58.572 [DEBUG] [Thread-14680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:23:58.572 [DEBUG] [Thread-14680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:23:58.572 [DEBUG] [Thread-14680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:23:58.588 [INFO] [Thread-14680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:23:58.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:23:59.147 [DEBUG] [Thread-14680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:23:59.147 [DEBUG] [Thread-14680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:23:59.147 [DEBUG] [Thread-14680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:23:59.187 [DEBUG] [Thread-14680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:23:59.188 [DEBUG] [Thread-14680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:23:59.190 [DEBUG] [Thread-14680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:23:59.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:23:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:23:59.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:23:59.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:23:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:23:59.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:23:59.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.599714 -999.00  +24.80  31.78     21   +1.30 1 1 2 1 1   888    0 20.43 -119.71 ----- 29.4 31.8 296.2 40.8 29.4 -27.9 29.3 -27.9 30.1 -27.7 30.5 -25.8
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.599714
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:23:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:23:24', tmtdew=28.16, humidity=15.31, cloud=0.0, wind=34.27, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:23:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:23:59.211 [DEBUG] [Thread-14680] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:23:59.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-25T16:23:59.296 [DEBUG] [Thread-14683] [transport.py] [_log()] starting thread (client mode): 0xb9590940
2025-12-25T16:23:59.297 [DEBUG] [Thread-14683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:23:59.311 [DEBUG] [Thread-14683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:23:59.311 [INFO] [Thread-14683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] client lang: <none>
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] server lang: <none>
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] kex follows: False
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] Compression: none
2025-12-25T16:23:59.319 [DEBUG] [Thread-14683] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:23:59.376 [DEBUG] [Thread-14683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:23:59.376 [DEBUG] [Thread-14683] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:23:59.376 [DEBUG] [Thread-14683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:23:59.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:23:59.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:23:59.434 [DEBUG] [Thread-14683] [transport.py] [_log()] userauth is OK
2025-12-25T16:23:59.434 [DEBUG] [Thread-14683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:23:59.434 [DEBUG] [Thread-14683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:23:59.434 [DEBUG] [Thread-14683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:23:59.434 [DEBUG] [Thread-14683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:23:59.450 [INFO] [Thread-14683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:23: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-25T16:23:59.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:24:00.260 [DEBUG] [Thread-14683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:24:00.260 [DEBUG] [Thread-14683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:24:00.308 [DEBUG] [Thread-14683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:24:00.308 [DEBUG] [Thread-14683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:24:00.317 [DEBUG] [Thread-14683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:24:00.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:24:00.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:24:00.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:24:00.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:24:00.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:24:00.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:24:00.354 [DEBUG] [Thread-14683] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:24:01.391 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:13.003 [DEBUG] [Thread-14685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:13.657 [DEBUG] [Thread-14686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:23.949 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:28.051 [DEBUG] [Thread-14687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:24:30.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:24:30.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:24:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 23, 56), 28.44, 15.07, 0.0, 27.12, 25.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:24:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:23:56
2025-12-25T16:24:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:24:31.420 [DEBUG] [Thread-14688] [transport.py] [_log()] starting thread (client mode): 0xb955a2f0
2025-12-25T16:24:31.420 [DEBUG] [Thread-14688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:24:31.442 [DEBUG] [Thread-14688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:24:31.442 [INFO] [Thread-14688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] client lang: <none>
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] server lang: <none>
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] kex follows: False
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] Compression: none
2025-12-25T16:24:31.445 [DEBUG] [Thread-14688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:24:31.460 [DEBUG] [Thread-14688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:24:31.460 [DEBUG] [Thread-14688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:24:31.460 [DEBUG] [Thread-14688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:24:31.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:24:31.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:24:31.461 [DEBUG] [Thread-14688] [transport.py] [_log()] userauth is OK
2025-12-25T16:24:31.461 [DEBUG] [Thread-14688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:24:31.461 [DEBUG] [Thread-14688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:24:31.461 [DEBUG] [Thread-14688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:24:31.461 [DEBUG] [Thread-14688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:24:31.470 [INFO] [Thread-14688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:24:31.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:24:32.075 [DEBUG] [Thread-14688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:24:32.075 [DEBUG] [Thread-14688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:24:32.076 [DEBUG] [Thread-14688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:24:32.116 [DEBUG] [Thread-14688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:24:32.116 [DEBUG] [Thread-14688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:24:32.119 [DEBUG] [Thread-14688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:24:32.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:24:32.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:24:32.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:24:32.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:24:32.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:24:32.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:24:32.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:24:32.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:24:32.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:24:32.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.599714 -999.00  +24.80  31.78     21   +1.30 1 1 2 1 1   888    0 20.43 -119.71 ----- 29.4 31.8 296.2 40.8 29.4 -27.9 29.3 -27.9 30.1 -27.7 30.5 -25.8
2025-12-25T16:24:32.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:24:32.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:24:32.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.599714
2025-12-25T16:24:32.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:24:32.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:24:32.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:24:32.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:24:32.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:24:32.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:23:56', tmtdew=28.44, humidity=15.07, cloud=0.0, wind=27.12, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:23:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:24:32.140 [DEBUG] [Thread-14688] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:24:32.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-25T16:24:32.232 [DEBUG] [Thread-14691] [transport.py] [_log()] starting thread (client mode): 0xb9579270
2025-12-25T16:24:32.233 [DEBUG] [Thread-14691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:24:32.247 [DEBUG] [Thread-14691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:24:32.247 [INFO] [Thread-14691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:24:32.254 [DEBUG] [Thread-14691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] client lang: <none>
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] server lang: <none>
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] kex follows: False
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] Compression: none
2025-12-25T16:24:32.255 [DEBUG] [Thread-14691] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:24:32.314 [DEBUG] [Thread-14691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:24:32.315 [DEBUG] [Thread-14691] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:24:32.315 [DEBUG] [Thread-14691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:24:32.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:24:32.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:24:32.370 [DEBUG] [Thread-14691] [transport.py] [_log()] userauth is OK
2025-12-25T16:24:32.371 [DEBUG] [Thread-14691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:24:32.371 [DEBUG] [Thread-14691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:24:32.371 [DEBUG] [Thread-14691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:24:32.371 [DEBUG] [Thread-14691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:24:32.389 [INFO] [Thread-14691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:24:32.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:24:32.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:24:33.196 [DEBUG] [Thread-14691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:24:33.196 [DEBUG] [Thread-14691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:24:33.244 [DEBUG] [Thread-14691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:24:33.244 [DEBUG] [Thread-14691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:24:33.253 [DEBUG] [Thread-14691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:24:33.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:24:33.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-25T16:24: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') -> 00000000
2025-12-25T16:24:33.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:24:33.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:24:33.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:24:33.289 [DEBUG] [Thread-14691] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:24:43.082 [DEBUG] [Thread-14693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:46.405 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:53.186 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:53.187 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:24:58.141 [DEBUG] [Thread-14694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:03.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:25:03.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:25:03.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-25T16:25:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 24, 28), 28.57, 14.98, 0.0, 32.75, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:25:04.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:24:28
2025-12-25T16:25:04.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:25:04.356 [DEBUG] [Thread-14695] [transport.py] [_log()] starting thread (client mode): 0xb9593010
2025-12-25T16:25:04.356 [DEBUG] [Thread-14695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:25:04.377 [DEBUG] [Thread-14695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:25:04.377 [INFO] [Thread-14695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] client lang: <none>
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] server lang: <none>
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] kex follows: False
2025-12-25T16:25:04.380 [DEBUG] [Thread-14695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:25:04.381 [DEBUG] [Thread-14695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:25:04.381 [DEBUG] [Thread-14695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:25:04.381 [DEBUG] [Thread-14695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:25:04.381 [DEBUG] [Thread-14695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:25:04.381 [DEBUG] [Thread-14695] [transport.py] [_log()] Compression: none
2025-12-25T16:25:04.381 [DEBUG] [Thread-14695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:25:04.388 [DEBUG] [Thread-14695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:25:04.388 [DEBUG] [Thread-14695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:25:04.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:25:04.388 [DEBUG] [Thread-14695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:25:04.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:25:04.389 [DEBUG] [Thread-14695] [transport.py] [_log()] userauth is OK
2025-12-25T16:25:04.389 [DEBUG] [Thread-14695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:25:04.389 [DEBUG] [Thread-14695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:25:04.389 [DEBUG] [Thread-14695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:25:04.389 [DEBUG] [Thread-14695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:25:04.399 [INFO] [Thread-14695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:25:04.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:25:05.200 [DEBUG] [Thread-14695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:25:05.200 [DEBUG] [Thread-14695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:25:05.200 [DEBUG] [Thread-14695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:25:05.241 [DEBUG] [Thread-14695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:25:05.242 [DEBUG] [Thread-14695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:25:05.243 [DEBUG] [Thread-14695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:25:05.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:25:05.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:25:05.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:25:05.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:25:05.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:25:05.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:25:05.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.600408 -999.00  +25.10  31.76     21   +1.40 1 1 2 1 1   888    0 20.22 -118.76 ----- 30.0 31.8 293.8 40.1 29.3 -27.8 29.3 -27.4 29.9 -26.0 30.4 -26.7
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.600408
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:25:05.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:24:28', tmtdew=28.57, humidity=14.98, cloud=0.0, wind=32.75, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:24:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:25:05.265 [DEBUG] [Thread-14695] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:25:05.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-25T16:25:05.348 [DEBUG] [Thread-14698] [transport.py] [_log()] starting thread (client mode): 0xb6b299f0
2025-12-25T16:25:05.348 [DEBUG] [Thread-14698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:25:05.363 [DEBUG] [Thread-14698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:25:05.363 [INFO] [Thread-14698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] client lang: <none>
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] server lang: <none>
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] kex follows: False
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] Compression: none
2025-12-25T16:25:05.371 [DEBUG] [Thread-14698] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:25:05.429 [DEBUG] [Thread-14698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:25:05.429 [DEBUG] [Thread-14698] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:25:05.429 [DEBUG] [Thread-14698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:25:05.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:25:05.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:25:05.486 [DEBUG] [Thread-14698] [transport.py] [_log()] userauth is OK
2025-12-25T16:25:05.486 [DEBUG] [Thread-14698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:25:05.486 [DEBUG] [Thread-14698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:25:05.486 [DEBUG] [Thread-14698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:25:05.486 [DEBUG] [Thread-14698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:25:05.499 [INFO] [Thread-14698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:25:05.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-25T16:25:05.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:25:06.348 [DEBUG] [Thread-14698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:25:06.348 [DEBUG] [Thread-14698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:25:06.397 [DEBUG] [Thread-14698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:25:06.397 [DEBUG] [Thread-14698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:25:06.405 [DEBUG] [Thread-14698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:25:06.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:25: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-25T16:25: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-25T16:25:06.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:25:06.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:25:06.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:25:06.437 [DEBUG] [Thread-14698] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:25:08.890 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:09.788 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:12.202 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:12.604 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:12.983 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:13.178 [DEBUG] [Thread-14700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:13.701 [DEBUG] [Thread-14701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:14.367 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:15.755 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:17.148 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:18.577 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:19.969 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:21.362 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:22.753 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:23.312 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:28.228 [DEBUG] [Thread-14702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:31.731 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:25:36.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:25:36.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-25T16:25:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 25, 33), 28.88, 14.9, 0.0, 30.19, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:25:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:25:33
2025-12-25T16:25:37.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:25:37.473 [DEBUG] [Thread-14703] [transport.py] [_log()] starting thread (client mode): 0xb6b01ff0
2025-12-25T16:25:37.473 [DEBUG] [Thread-14703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:25:37.497 [DEBUG] [Thread-14703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:25:37.497 [INFO] [Thread-14703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:25:37.500 [DEBUG] [Thread-14703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:25:37.501 [DEBUG] [Thread-14703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] client lang: <none>
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] server lang: <none>
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] kex follows: False
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:25:37.502 [DEBUG] [Thread-14703] [transport.py] [_log()] Compression: none
2025-12-25T16:25:37.503 [DEBUG] [Thread-14703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:25:37.520 [DEBUG] [Thread-14703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:25:37.521 [DEBUG] [Thread-14703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:25:37.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:25:37.522 [DEBUG] [Thread-14703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:25:37.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:25:37.524 [DEBUG] [Thread-14703] [transport.py] [_log()] userauth is OK
2025-12-25T16:25:37.524 [DEBUG] [Thread-14703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:25:37.524 [DEBUG] [Thread-14703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:25:37.524 [DEBUG] [Thread-14703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:25:37.524 [DEBUG] [Thread-14703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:25:37.544 [INFO] [Thread-14703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:25:37.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:25:38.143 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:38.222 [DEBUG] [Thread-14703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:25:38.223 [DEBUG] [Thread-14703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:25:38.223 [DEBUG] [Thread-14703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:25:38.264 [DEBUG] [Thread-14703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:25:38.265 [DEBUG] [Thread-14703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:25:38.267 [DEBUG] [Thread-14703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:25:38.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:25:38.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:25:38.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:25:38.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:25:38.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:25:38.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:25:38.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:25:38.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:25:38.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:25:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.600408 -999.00  +25.10  31.76     21   +1.40 1 1 2 1 1   888    0 20.22 -118.76 ----- 30.0 31.8 293.8 40.1 29.3 -27.8 29.3 -27.4 29.9 -26.0 30.4 -26.7
2025-12-25T16:25:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:25:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:25:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.600408
2025-12-25T16:25:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:25:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:25:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:25:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:25:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:25:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:25:33', tmtdew=28.88, humidity=14.9, cloud=0.0, wind=30.19, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:24:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:25:38.288 [DEBUG] [Thread-14703] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:25:38.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-25T16:25:38.381 [DEBUG] [Thread-14706] [transport.py] [_log()] starting thread (client mode): 0xb6b00160
2025-12-25T16:25:38.381 [DEBUG] [Thread-14706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:25:38.396 [DEBUG] [Thread-14706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:25:38.396 [INFO] [Thread-14706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:25:38.403 [DEBUG] [Thread-14706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:25:38.404 [DEBUG] [Thread-14706] [transport.py] [_log()] client lang: <none>
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] server lang: <none>
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] kex follows: False
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] Compression: none
2025-12-25T16:25:38.405 [DEBUG] [Thread-14706] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:25:38.465 [DEBUG] [Thread-14706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:25:38.466 [DEBUG] [Thread-14706] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:25:38.466 [DEBUG] [Thread-14706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:25:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:25:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:25:38.522 [DEBUG] [Thread-14706] [transport.py] [_log()] userauth is OK
2025-12-25T16:25:38.522 [DEBUG] [Thread-14706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:25:38.522 [DEBUG] [Thread-14706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:25:38.522 [DEBUG] [Thread-14706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:25:38.522 [DEBUG] [Thread-14706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:25:38.545 [INFO] [Thread-14706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:25:38.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-25T16:25:38.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:25:39.376 [DEBUG] [Thread-14706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:25:39.376 [DEBUG] [Thread-14706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:25:39.425 [DEBUG] [Thread-14706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:25:39.425 [DEBUG] [Thread-14706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:25:39.433 [DEBUG] [Thread-14706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:25:39.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:25:39.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:25:39.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-25T16:25:39.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:25:39.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:25:39.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:25:39.469 [DEBUG] [Thread-14706] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:25:43.261 [DEBUG] [Thread-14708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:44.535 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:50.968 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:53.328 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:53.330 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:57.428 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:25:58.310 [DEBUG] [Thread-14709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:03.835 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:09.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:26:09.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:26:09.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-25T16:26:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 26, 5), 28.54, 15.2, 0.0, 35.23, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:26:10.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:26:05
2025-12-25T16:26:10.257 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:26:10.488 [DEBUG] [Thread-14710] [transport.py] [_log()] starting thread (client mode): 0xb6b02c80
2025-12-25T16:26:10.489 [DEBUG] [Thread-14710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:26:10.509 [DEBUG] [Thread-14710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:26:10.509 [INFO] [Thread-14710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] client lang: <none>
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] server lang: <none>
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] kex follows: False
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:26:10.512 [DEBUG] [Thread-14710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:26:10.513 [DEBUG] [Thread-14710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:26:10.513 [DEBUG] [Thread-14710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:26:10.513 [DEBUG] [Thread-14710] [transport.py] [_log()] Compression: none
2025-12-25T16:26:10.513 [DEBUG] [Thread-14710] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:26:10.529 [DEBUG] [Thread-14710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:26:10.529 [DEBUG] [Thread-14710] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:26:10.530 [DEBUG] [Thread-14710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:26:10.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:26:10.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:26:10.532 [DEBUG] [Thread-14710] [transport.py] [_log()] userauth is OK
2025-12-25T16:26:10.532 [DEBUG] [Thread-14710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:26:10.532 [DEBUG] [Thread-14710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:26:10.532 [DEBUG] [Thread-14710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:26:10.532 [DEBUG] [Thread-14710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:26:10.555 [INFO] [Thread-14710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:26:10.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:26:11.149 [DEBUG] [Thread-14710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:26:11.149 [DEBUG] [Thread-14710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:26:11.150 [DEBUG] [Thread-14710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:26:11.190 [DEBUG] [Thread-14710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:26:11.190 [DEBUG] [Thread-14710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:26:11.194 [DEBUG] [Thread-14710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:26:11.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:26:11.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:26:11.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:26:11.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:26:11.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:26:11.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:26:11.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:26:11.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:26:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:26:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.600755 -999.00  +25.30  27.50     21   +1.50 1 1 1 1 1   888    0 19.99 -126.05 ----- 23.5 27.5 304.6 40.4 29.3 -28.0 29.3 -27.5 30.0 -26.5 30.5 -25.7
2025-12-25T16:26:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:26:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:26:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.600755
2025-12-25T16:26:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:26:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:26:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:26:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:26:11.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:26:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:26:05', tmtdew=28.54, humidity=15.2, cloud=0.0, wind=35.23, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:25:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:26:11.222 [DEBUG] [Thread-14710] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:26:11.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-25T16:26:11.306 [DEBUG] [Thread-14713] [transport.py] [_log()] starting thread (client mode): 0xb9558c70
2025-12-25T16:26:11.306 [DEBUG] [Thread-14713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:26:11.321 [DEBUG] [Thread-14713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:26:11.321 [INFO] [Thread-14713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] client lang: <none>
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] server lang: <none>
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] kex follows: False
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:26:11.329 [DEBUG] [Thread-14713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:26:11.330 [DEBUG] [Thread-14713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:26:11.330 [DEBUG] [Thread-14713] [transport.py] [_log()] Compression: none
2025-12-25T16:26:11.330 [DEBUG] [Thread-14713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:26:11.386 [DEBUG] [Thread-14713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:26:11.386 [DEBUG] [Thread-14713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:26:11.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:26:11.387 [DEBUG] [Thread-14713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:26:11.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:26:11.446 [DEBUG] [Thread-14713] [transport.py] [_log()] userauth is OK
2025-12-25T16:26:11.446 [DEBUG] [Thread-14713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:26:11.446 [DEBUG] [Thread-14713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:26:11.446 [DEBUG] [Thread-14713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:26:11.447 [DEBUG] [Thread-14713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:26:11.467 [INFO] [Thread-14713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:26:11.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:26:11.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:26:12.245 [DEBUG] [Thread-14713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:26:12.245 [DEBUG] [Thread-14713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:26:12.293 [DEBUG] [Thread-14713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:26:12.293 [DEBUG] [Thread-14713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:26:12.303 [DEBUG] [Thread-14713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:26:12.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:26:12.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:26:12.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:26:12.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:26:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:26:12.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:26:12.340 [DEBUG] [Thread-14713] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:26:13.347 [DEBUG] [Thread-14715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:13.745 [DEBUG] [Thread-14716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:16.690 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:23.118 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:28.392 [DEBUG] [Thread-14717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:29.585 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:29.909 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:31.301 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:31.695 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:32.108 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:32.572 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:32.976 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:33.464 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:33.881 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:34.288 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:34.736 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:35.152 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:26:42.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:26:42.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-25T16:26:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 26, 37), 29.81, 13.6, 0.0, 32.01, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:26:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:26:37
2025-12-25T16:26:43.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:26:43.354 [DEBUG] [Thread-14718] [transport.py] [_log()] starting thread (client mode): 0xb95d58a0
2025-12-25T16:26:43.354 [DEBUG] [Thread-14718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:26:43.375 [DEBUG] [Thread-14718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:26:43.376 [INFO] [Thread-14718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:43.379 [DEBUG] [Thread-14718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] client lang: <none>
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] server lang: <none>
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] kex follows: False
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:26:43.380 [DEBUG] [Thread-14718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:26:43.381 [DEBUG] [Thread-14718] [transport.py] [_log()] Compression: none
2025-12-25T16:26:43.381 [DEBUG] [Thread-14718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:26:43.399 [DEBUG] [Thread-14718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:26:43.399 [DEBUG] [Thread-14718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:26:43.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:26:43.400 [DEBUG] [Thread-14718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:26:43.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:26:43.402 [DEBUG] [Thread-14718] [transport.py] [_log()] userauth is OK
2025-12-25T16:26:43.403 [DEBUG] [Thread-14718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:26:43.403 [DEBUG] [Thread-14718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:26:43.403 [DEBUG] [Thread-14718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:26:43.403 [DEBUG] [Thread-14718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:26:43.427 [INFO] [Thread-14718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:26:43.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:26:43.431 [DEBUG] [Thread-14720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:44.196 [DEBUG] [Thread-14718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:26:44.196 [DEBUG] [Thread-14718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:26:44.197 [DEBUG] [Thread-14718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:26:44.238 [DEBUG] [Thread-14718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:26:44.238 [DEBUG] [Thread-14718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:26:44.241 [DEBUG] [Thread-14718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:26:44.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:26:44.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:26:44.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:26:44.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:26:44.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:26:44.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:26:44.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:26:44.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:26:44.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:26:44.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.601450 -999.00  +25.50  43.57     19   +0.30 1 1 2 1 1   888    0 20.81 -125.65 ----- 38.6 43.6 296.0 47.0 29.3 -28.5 29.4 -28.4 30.0 -29.1 30.4 -26.7
2025-12-25T16:26:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:26:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:26:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.601450
2025-12-25T16:26:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:26:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:26:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:26:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:26:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:26:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:26:37', tmtdew=29.81, humidity=13.6, cloud=0.0, wind=32.01, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:26:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:26:44.263 [DEBUG] [Thread-14718] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:26:44.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-25T16:26:44.360 [DEBUG] [Thread-14722] [transport.py] [_log()] starting thread (client mode): 0xb6b283d0
2025-12-25T16:26:44.361 [DEBUG] [Thread-14722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:26:44.376 [DEBUG] [Thread-14722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:26:44.376 [INFO] [Thread-14722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:26:44.383 [DEBUG] [Thread-14722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:26:44.383 [DEBUG] [Thread-14722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:26:44.383 [DEBUG] [Thread-14722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] client lang: <none>
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] server lang: <none>
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] kex follows: False
2025-12-25T16:26:44.384 [DEBUG] [Thread-14722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:26:44.385 [DEBUG] [Thread-14722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:26:44.385 [DEBUG] [Thread-14722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:26:44.385 [DEBUG] [Thread-14722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:26:44.385 [DEBUG] [Thread-14722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:26:44.385 [DEBUG] [Thread-14722] [transport.py] [_log()] Compression: none
2025-12-25T16:26:44.385 [DEBUG] [Thread-14722] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:26:44.442 [DEBUG] [Thread-14722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:26:44.443 [DEBUG] [Thread-14722] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:26:44.444 [DEBUG] [Thread-14722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:26:44.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:26:44.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:26:44.498 [DEBUG] [Thread-14722] [transport.py] [_log()] userauth is OK
2025-12-25T16:26:44.498 [DEBUG] [Thread-14722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:26:44.499 [DEBUG] [Thread-14722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:26:44.499 [DEBUG] [Thread-14722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:26:44.499 [DEBUG] [Thread-14722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:26:44.522 [INFO] [Thread-14722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:26:44.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-25T16:26:44.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:26:45.332 [DEBUG] [Thread-14722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:26:45.332 [DEBUG] [Thread-14722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:26:45.380 [DEBUG] [Thread-14722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:26:45.380 [DEBUG] [Thread-14722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:26:45.389 [DEBUG] [Thread-14722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:26:45.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:26:45.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:26:45.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:26:45.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:26:45.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:26:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:26:45.425 [DEBUG] [Thread-14722] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:26:53.467 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:53.468 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:26:58.468 [DEBUG] [Thread-14724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:13.516 [DEBUG] [Thread-14725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:13.790 [DEBUG] [Thread-14726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:15.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:27:15.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:27:15.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-25T16:27:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 27, 9), 29.9, 13.54, 0.0, 33.51, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:27:16.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:27:09
2025-12-25T16:27:16.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:27:16.395 [DEBUG] [Thread-14727] [transport.py] [_log()] starting thread (client mode): 0xb95d49a0
2025-12-25T16:27:16.395 [DEBUG] [Thread-14727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:27:16.416 [DEBUG] [Thread-14727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:27:16.416 [INFO] [Thread-14727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] client lang: <none>
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] server lang: <none>
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] kex follows: False
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:27:16.419 [DEBUG] [Thread-14727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:27:16.420 [DEBUG] [Thread-14727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:27:16.420 [DEBUG] [Thread-14727] [transport.py] [_log()] Compression: none
2025-12-25T16:27:16.420 [DEBUG] [Thread-14727] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:27:16.436 [DEBUG] [Thread-14727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:27:16.437 [DEBUG] [Thread-14727] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:27:16.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:27:16.438 [DEBUG] [Thread-14727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:27:16.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:27:16.440 [DEBUG] [Thread-14727] [transport.py] [_log()] userauth is OK
2025-12-25T16:27:16.440 [DEBUG] [Thread-14727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:27:16.440 [DEBUG] [Thread-14727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:27:16.440 [DEBUG] [Thread-14727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:27:16.440 [DEBUG] [Thread-14727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:27:16.459 [INFO] [Thread-14727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:27:16.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:27:17.117 [DEBUG] [Thread-14727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:27:17.117 [DEBUG] [Thread-14727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:27:17.117 [DEBUG] [Thread-14727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:27:17.158 [DEBUG] [Thread-14727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:27:17.158 [DEBUG] [Thread-14727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:27:17.160 [DEBUG] [Thread-14727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:27:17.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:27:17.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:27:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:27:17.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:27:17.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:27:17.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:27:17.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:27:17.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:27:17.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.601797 -999.00  +25.20  31.18     19   +0.10 1 1 2 1 1   888    0 20.01 -127.96 ----- 25.9 31.2 296.4 40.7 29.2 -29.5 29.3 -28.9 29.9 -25.2 30.3 -26.7
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.601797
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:27:17.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:27:09', tmtdew=29.9, humidity=13.54, cloud=0.0, wind=33.51, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:26:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:27:17.183 [DEBUG] [Thread-14727] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:27:17.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-25T16:27:17.266 [DEBUG] [Thread-14730] [transport.py] [_log()] starting thread (client mode): 0xb95b1c30
2025-12-25T16:27:17.266 [DEBUG] [Thread-14730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:27:17.280 [DEBUG] [Thread-14730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:27:17.281 [INFO] [Thread-14730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:27:17.288 [DEBUG] [Thread-14730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:27:17.289 [DEBUG] [Thread-14730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:27:17.289 [DEBUG] [Thread-14730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:27:17.289 [DEBUG] [Thread-14730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:17.289 [DEBUG] [Thread-14730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:17.289 [DEBUG] [Thread-14730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:17.289 [DEBUG] [Thread-14730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] client lang: <none>
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] server lang: <none>
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] kex follows: False
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] Compression: none
2025-12-25T16:27:17.290 [DEBUG] [Thread-14730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:27:17.346 [DEBUG] [Thread-14730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:27:17.347 [DEBUG] [Thread-14730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:27:17.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:27:17.348 [DEBUG] [Thread-14730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:27:17.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:27:17.403 [DEBUG] [Thread-14730] [transport.py] [_log()] userauth is OK
2025-12-25T16:27:17.403 [DEBUG] [Thread-14730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:27:17.403 [DEBUG] [Thread-14730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:27:17.403 [DEBUG] [Thread-14730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:27:17.403 [DEBUG] [Thread-14730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:27:17.422 [INFO] [Thread-14730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:27:17.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:27:17.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:27:18.212 [DEBUG] [Thread-14730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:27:18.213 [DEBUG] [Thread-14730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:27:18.260 [DEBUG] [Thread-14730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:27:18.261 [DEBUG] [Thread-14730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:27:18.270 [DEBUG] [Thread-14730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:27:18.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:27:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:27:18.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-25T16:27:18.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:27:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:27:18.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:27:18.305 [DEBUG] [Thread-14730] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:27:28.549 [DEBUG] [Thread-14732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:43.597 [DEBUG] [Thread-14733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:48.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:27:48.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:27:48.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-25T16:27:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 27, 41), 30.1, 13.5, 0.0, 37.39, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:27:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:27:41
2025-12-25T16:27:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:27:49.326 [DEBUG] [Thread-14734] [transport.py] [_log()] starting thread (client mode): 0xb95d7790
2025-12-25T16:27:49.326 [DEBUG] [Thread-14734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:27:49.345 [DEBUG] [Thread-14734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:27:49.345 [INFO] [Thread-14734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:27:49.348 [DEBUG] [Thread-14734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] client lang: <none>
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] server lang: <none>
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] kex follows: False
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] Compression: none
2025-12-25T16:27:49.349 [DEBUG] [Thread-14734] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:27:49.366 [DEBUG] [Thread-14734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:27:49.367 [DEBUG] [Thread-14734] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:27:49.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:27:49.368 [DEBUG] [Thread-14734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:27:49.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:27:49.369 [DEBUG] [Thread-14734] [transport.py] [_log()] userauth is OK
2025-12-25T16:27:49.370 [DEBUG] [Thread-14734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:27:49.370 [DEBUG] [Thread-14734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:27:49.370 [DEBUG] [Thread-14734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:27:49.370 [DEBUG] [Thread-14734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:27:49.384 [INFO] [Thread-14734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:27:49.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:27:50.156 [DEBUG] [Thread-14734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:27:50.156 [DEBUG] [Thread-14734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:27:50.157 [DEBUG] [Thread-14734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:27:50.197 [DEBUG] [Thread-14734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:27:50.197 [DEBUG] [Thread-14734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:27:50.200 [DEBUG] [Thread-14734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:27:50.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:27:50.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:27:50.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:27:50.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:27:50.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:27:50.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:27:50.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:27:50.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:27:50.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:27:50.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.602144 -999.00  +25.40  26.88     19   +0.40 1 1 1 1 1   888    0 20.66 -113.59 ----- 27.3 26.9 297.4 33.4 29.3 -27.6 29.3 -27.4 30.1 -24.9 30.4 -25.3
2025-12-25T16:27:50.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:27:50.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:27:50.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.602144
2025-12-25T16:27:50.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:27:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:27:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:27:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:27:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:27:50.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:27:41', tmtdew=30.1, humidity=13.5, cloud=0.0, wind=37.39, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:27:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:27:50.230 [DEBUG] [Thread-14734] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:27:50.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-25T16:27:50.323 [DEBUG] [Thread-14737] [transport.py] [_log()] starting thread (client mode): 0xb6b02140
2025-12-25T16:27:50.323 [DEBUG] [Thread-14737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:27:50.338 [DEBUG] [Thread-14737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:27:50.338 [INFO] [Thread-14737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] client lang: <none>
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] server lang: <none>
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] kex follows: False
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] Compression: none
2025-12-25T16:27:50.346 [DEBUG] [Thread-14737] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:27:50.406 [DEBUG] [Thread-14737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:27:50.406 [DEBUG] [Thread-14737] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:27:50.407 [DEBUG] [Thread-14737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:27:50.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:27:50.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:27:50.462 [DEBUG] [Thread-14737] [transport.py] [_log()] userauth is OK
2025-12-25T16:27:50.463 [DEBUG] [Thread-14737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:27:50.463 [DEBUG] [Thread-14737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:27:50.463 [DEBUG] [Thread-14737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:27:50.463 [DEBUG] [Thread-14737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:27:50.482 [INFO] [Thread-14737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:27:50.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-25T16:27:50.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:27:51.297 [DEBUG] [Thread-14737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:27:51.297 [DEBUG] [Thread-14737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:27:51.345 [DEBUG] [Thread-14737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:27:51.345 [DEBUG] [Thread-14737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:27:51.354 [DEBUG] [Thread-14737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:27:51.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:27:51.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-25T16:27: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-25T16:27:51.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:27:51.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:27:51.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:27:51.389 [DEBUG] [Thread-14737] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:27:53.606 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:53.607 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:27:58.629 [DEBUG] [Thread-14739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:13.688 [DEBUG] [Thread-14740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:13.835 [DEBUG] [Thread-14741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:21.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:28:21.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:28:21.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:28:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 28, 13), 30.36, 13.3, 0.0, 38.22, 26.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:28:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:28:13
2025-12-25T16:28:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:28:22.443 [DEBUG] [Thread-14742] [transport.py] [_log()] starting thread (client mode): 0xb9558580
2025-12-25T16:28:22.443 [DEBUG] [Thread-14742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:28:22.464 [DEBUG] [Thread-14742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:28:22.464 [INFO] [Thread-14742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] client lang: <none>
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] server lang: <none>
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] kex follows: False
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:28:22.467 [DEBUG] [Thread-14742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:28:22.468 [DEBUG] [Thread-14742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:28:22.468 [DEBUG] [Thread-14742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:28:22.468 [DEBUG] [Thread-14742] [transport.py] [_log()] Compression: none
2025-12-25T16:28:22.468 [DEBUG] [Thread-14742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:28:22.485 [DEBUG] [Thread-14742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:28:22.485 [DEBUG] [Thread-14742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:28:22.485 [DEBUG] [Thread-14742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:28:22.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:28:22.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:28:22.486 [DEBUG] [Thread-14742] [transport.py] [_log()] userauth is OK
2025-12-25T16:28:22.486 [DEBUG] [Thread-14742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:28:22.486 [DEBUG] [Thread-14742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:28:22.486 [DEBUG] [Thread-14742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:28:22.486 [DEBUG] [Thread-14742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:28:22.496 [INFO] [Thread-14742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:28:22.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:28:23.120 [DEBUG] [Thread-14742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:28:23.120 [DEBUG] [Thread-14742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:28:23.120 [DEBUG] [Thread-14742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:28:23.161 [DEBUG] [Thread-14742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:28:23.161 [DEBUG] [Thread-14742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:28:23.164 [DEBUG] [Thread-14742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:28:23.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:28:23.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:28:23.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:28:23.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:28:23.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:28:23.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:28:23.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:28:23.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:28:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:28:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.602492 -999.00  +25.80  29.26     19   +0.60 1 1 1 1 1   888    0 21.43 -94.34 ----- 33.3 29.3 304.6 38.1 29.4 -28.4 29.4 -27.8 30.2 -25.4 30.6 -25.9
2025-12-25T16:28:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:28:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:28:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.602492
2025-12-25T16:28:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:28:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:28:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:28:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:28:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:28:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:28:13', tmtdew=30.36, humidity=13.3, cloud=0.0, wind=38.22, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:27:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:28:23.183 [DEBUG] [Thread-14742] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:28:23.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-25T16:28:23.269 [DEBUG] [Thread-14745] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T16:28:23.269 [DEBUG] [Thread-14745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:28:23.283 [DEBUG] [Thread-14745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:28:23.283 [INFO] [Thread-14745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] client lang: <none>
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] server lang: <none>
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] kex follows: False
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] Compression: none
2025-12-25T16:28:23.291 [DEBUG] [Thread-14745] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:28:23.349 [DEBUG] [Thread-14745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:28:23.349 [DEBUG] [Thread-14745] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:28:23.349 [DEBUG] [Thread-14745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:28:23.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:28:23.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:28:23.406 [DEBUG] [Thread-14745] [transport.py] [_log()] userauth is OK
2025-12-25T16:28:23.406 [DEBUG] [Thread-14745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:28:23.406 [DEBUG] [Thread-14745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:28:23.406 [DEBUG] [Thread-14745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:28:23.406 [DEBUG] [Thread-14745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:28:23.423 [INFO] [Thread-14745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:28:23.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-25T16:28:23.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:28:24.214 [DEBUG] [Thread-14745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:28:24.214 [DEBUG] [Thread-14745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:28:24.262 [DEBUG] [Thread-14745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:28:24.262 [DEBUG] [Thread-14745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:28:24.271 [DEBUG] [Thread-14745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:28:24.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:28:24.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-25T16:28:24.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-25T16:28:24.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:28:24.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:28:24.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:28:24.308 [DEBUG] [Thread-14745] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:28:28.724 [DEBUG] [Thread-14747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:43.777 [DEBUG] [Thread-14748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:53.746 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:53.747 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:28:54.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:28:54.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:28:54.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-25T16:28:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 28, 45), 30.18, 13.24, 0.0, 37.72, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:28:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:28:45
2025-12-25T16:28:55.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:28:55.297 [DEBUG] [Thread-14749] [transport.py] [_log()] starting thread (client mode): 0xb6b20fd0
2025-12-25T16:28:55.297 [DEBUG] [Thread-14749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:28:55.313 [DEBUG] [Thread-14749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:28:55.313 [INFO] [Thread-14749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] client lang: <none>
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] server lang: <none>
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] kex follows: False
2025-12-25T16:28:55.317 [DEBUG] [Thread-14749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:28:55.318 [DEBUG] [Thread-14749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:28:55.318 [DEBUG] [Thread-14749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:28:55.318 [DEBUG] [Thread-14749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:28:55.318 [DEBUG] [Thread-14749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:28:55.318 [DEBUG] [Thread-14749] [transport.py] [_log()] Compression: none
2025-12-25T16:28:55.318 [DEBUG] [Thread-14749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:28:55.336 [DEBUG] [Thread-14749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:28:55.337 [DEBUG] [Thread-14749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:28:55.338 [DEBUG] [Thread-14749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:28:55.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:28:55.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:28:55.341 [DEBUG] [Thread-14749] [transport.py] [_log()] userauth is OK
2025-12-25T16:28:55.341 [DEBUG] [Thread-14749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:28:55.341 [DEBUG] [Thread-14749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:28:55.341 [DEBUG] [Thread-14749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:28:55.341 [DEBUG] [Thread-14749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:28:55.367 [INFO] [Thread-14749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:28:55.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:28:56.168 [DEBUG] [Thread-14749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:28:56.169 [DEBUG] [Thread-14749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:28:56.169 [DEBUG] [Thread-14749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:28:56.209 [DEBUG] [Thread-14749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:28:56.209 [DEBUG] [Thread-14749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:28:56.214 [DEBUG] [Thread-14749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:28:56.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:28:56.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:28:56.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:28:56.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:28:56.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:28:56.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:28:56.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:28:56.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:28:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:28:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.602839 -999.00  +25.40  33.90     19   +0.20 1 1 2 1 1   888    0 21.28 -92.35 ----- 28.1 33.9 311.2 42.0 29.3 -29.0 29.3 -28.8 30.0 -26.8 30.4 -26.3
2025-12-25T16:28:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:28:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:28:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.602839
2025-12-25T16:28:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:28:56.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:28:56.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:28:56.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:28:56.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:28:56.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:28:45', tmtdew=30.18, humidity=13.24, cloud=0.0, wind=37.72, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:28:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:28:56.236 [DEBUG] [Thread-14749] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:28:56.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-25T16:28:56.328 [DEBUG] [Thread-14752] [transport.py] [_log()] starting thread (client mode): 0xb6b630a0
2025-12-25T16:28:56.328 [DEBUG] [Thread-14752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:28:56.344 [DEBUG] [Thread-14752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:28:56.344 [INFO] [Thread-14752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] client lang: <none>
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] server lang: <none>
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] kex follows: False
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:28:56.352 [DEBUG] [Thread-14752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:28:56.353 [DEBUG] [Thread-14752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:28:56.353 [DEBUG] [Thread-14752] [transport.py] [_log()] Compression: none
2025-12-25T16:28:56.353 [DEBUG] [Thread-14752] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:28:56.411 [DEBUG] [Thread-14752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:28:56.411 [DEBUG] [Thread-14752] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:28:56.412 [DEBUG] [Thread-14752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:28:56.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:28:56.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:28:56.467 [DEBUG] [Thread-14752] [transport.py] [_log()] userauth is OK
2025-12-25T16:28:56.467 [DEBUG] [Thread-14752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:28:56.467 [DEBUG] [Thread-14752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:28:56.467 [DEBUG] [Thread-14752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:28:56.468 [DEBUG] [Thread-14752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:28:56.485 [INFO] [Thread-14752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:28:56.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-25T16:28:56.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:28:57.282 [DEBUG] [Thread-14752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:28:57.282 [DEBUG] [Thread-14752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:28:57.329 [DEBUG] [Thread-14752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:28:57.329 [DEBUG] [Thread-14752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:28:57.338 [DEBUG] [Thread-14752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:28:57.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:28:57.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')
2025-12-25T16:28:57.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-25T16:28:57.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:28:57.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:28:57.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:28:57.369 [DEBUG] [Thread-14752] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:28:58.808 [DEBUG] [Thread-14754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:13.847 [DEBUG] [Thread-14755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:13.875 [DEBUG] [Thread-14756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:27.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:29:27.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:29:27.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-25T16:29:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 29, 17), 29.98, 13.39, 0.0, 34.5, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:29:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:29:17
2025-12-25T16:29:28.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:29:28.336 [DEBUG] [Thread-14757] [transport.py] [_log()] starting thread (client mode): 0xb9592260
2025-12-25T16:29:28.336 [DEBUG] [Thread-14757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:29:28.361 [DEBUG] [Thread-14757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:29:28.361 [INFO] [Thread-14757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] client lang: <none>
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] server lang: <none>
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] kex follows: False
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:29:28.365 [DEBUG] [Thread-14757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:29:28.366 [DEBUG] [Thread-14757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:29:28.366 [DEBUG] [Thread-14757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:29:28.366 [DEBUG] [Thread-14757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:29:28.366 [DEBUG] [Thread-14757] [transport.py] [_log()] Compression: none
2025-12-25T16:29:28.366 [DEBUG] [Thread-14757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:29:28.383 [DEBUG] [Thread-14757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:29:28.384 [DEBUG] [Thread-14757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:29:28.384 [DEBUG] [Thread-14757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:29:28.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:29:28.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:29:28.387 [DEBUG] [Thread-14757] [transport.py] [_log()] userauth is OK
2025-12-25T16:29:28.387 [DEBUG] [Thread-14757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:29:28.387 [DEBUG] [Thread-14757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:29:28.387 [DEBUG] [Thread-14757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:29:28.387 [DEBUG] [Thread-14757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:29:28.423 [INFO] [Thread-14757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:29:28.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:29:28.879 [DEBUG] [Thread-14759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:29.083 [DEBUG] [Thread-14757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:29:29.083 [DEBUG] [Thread-14757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:29:29.084 [DEBUG] [Thread-14757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:29:29.124 [DEBUG] [Thread-14757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:29:29.124 [DEBUG] [Thread-14757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:29:29.128 [DEBUG] [Thread-14757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:29:29.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:29:29.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:29:29.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:29:29.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:29:29.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:29:29.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:29:29.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:29:29.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:29:29.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:29:29.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.603186 -999.00  +25.20  37.73     19   +0.10 1 1 2 1 1   888    0 21.97 -76.71 ----- 26.7 37.7 299.2 47.0 29.3 -29.5 29.3 -28.8 30.1 -24.1 30.4 -26.9
2025-12-25T16:29:29.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:29:29.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:29:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.603186
2025-12-25T16:29:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:29:29.156 [DEBUG] [Thread-14757] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:29:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:29:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:29:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:29:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:29:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:29:17', tmtdew=29.98, humidity=13.39, cloud=0.0, wind=34.5, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:28:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:29:29.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-25T16:29:29.247 [DEBUG] [Thread-14761] [transport.py] [_log()] starting thread (client mode): 0xb955bc70
2025-12-25T16:29:29.247 [DEBUG] [Thread-14761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:29:29.262 [DEBUG] [Thread-14761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:29:29.262 [INFO] [Thread-14761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:29:29.269 [DEBUG] [Thread-14761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:29:29.269 [DEBUG] [Thread-14761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] client lang: <none>
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] server lang: <none>
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] kex follows: False
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] Compression: none
2025-12-25T16:29:29.270 [DEBUG] [Thread-14761] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:29:29.330 [DEBUG] [Thread-14761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:29:29.331 [DEBUG] [Thread-14761] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:29:29.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:29:29.332 [DEBUG] [Thread-14761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:29:29.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:29:29.394 [DEBUG] [Thread-14761] [transport.py] [_log()] userauth is OK
2025-12-25T16:29:29.395 [DEBUG] [Thread-14761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:29:29.395 [DEBUG] [Thread-14761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:29:29.395 [DEBUG] [Thread-14761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:29:29.395 [DEBUG] [Thread-14761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:29:29.414 [INFO] [Thread-14761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:29:29.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-25T16:29:29.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:29:30.244 [DEBUG] [Thread-14761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:29:30.244 [DEBUG] [Thread-14761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:29:30.295 [DEBUG] [Thread-14761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:29:30.295 [DEBUG] [Thread-14761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:29:30.308 [DEBUG] [Thread-14761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:29:30.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:29:30.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-25T16:29:30.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-25T16:29:30.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:29:30.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:29:30.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:29:30.345 [DEBUG] [Thread-14761] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:29:43.914 [DEBUG] [Thread-14763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:53.889 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:53.890 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:29:58.964 [DEBUG] [Thread-14764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:00.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:30:00.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:30:00.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:30:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 29, 49), 30.12, 13.47, 0.0, 29.27, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:30:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:29:49
2025-12-25T16:30:01.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:30:01.324 [DEBUG] [Thread-14765] [transport.py] [_log()] starting thread (client mode): 0xb6b20610
2025-12-25T16:30:01.324 [DEBUG] [Thread-14765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:30:01.346 [DEBUG] [Thread-14765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:30:01.346 [INFO] [Thread-14765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:30:01.349 [DEBUG] [Thread-14765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:30:01.349 [DEBUG] [Thread-14765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:30:01.349 [DEBUG] [Thread-14765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] client lang: <none>
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] server lang: <none>
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] kex follows: False
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:30:01.350 [DEBUG] [Thread-14765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:30:01.351 [DEBUG] [Thread-14765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:30:01.351 [DEBUG] [Thread-14765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:30:01.351 [DEBUG] [Thread-14765] [transport.py] [_log()] Compression: none
2025-12-25T16:30:01.351 [DEBUG] [Thread-14765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:30:01.369 [DEBUG] [Thread-14765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:30:01.370 [DEBUG] [Thread-14765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:30:01.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:30:01.371 [DEBUG] [Thread-14765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:30:01.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:30:01.372 [DEBUG] [Thread-14765] [transport.py] [_log()] userauth is OK
2025-12-25T16:30:01.372 [DEBUG] [Thread-14765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:30:01.372 [DEBUG] [Thread-14765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:30:01.372 [DEBUG] [Thread-14765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:30:01.372 [DEBUG] [Thread-14765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:30:01.395 [INFO] [Thread-14765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:30:01.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:30:02.130 [DEBUG] [Thread-14765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:30:02.130 [DEBUG] [Thread-14765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:30:02.130 [DEBUG] [Thread-14765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:30:02.172 [DEBUG] [Thread-14765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:30:02.172 [DEBUG] [Thread-14765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:30:02.174 [DEBUG] [Thread-14765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:30:02.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:30:02.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:30:02.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:30:02.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:30:02.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:30:02.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:30:02.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.603533 -999.00  +25.80  22.08     18   +0.30 1 1 1 1 1   888    0 22.51 -62.75 ----- 27.2 22.1 287.9 32.1 29.4 -28.4 29.4 -28.1 30.0 -25.5 30.6 -25.9
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.603533
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:30:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:29:49', tmtdew=30.12, humidity=13.47, cloud=0.0, wind=29.27, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:29:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:30:02.189 [DEBUG] [Thread-14765] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:30:02.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:30:02.274 [DEBUG] [Thread-14768] [transport.py] [_log()] starting thread (client mode): 0xb95d63e0
2025-12-25T16:30:02.274 [DEBUG] [Thread-14768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:30:02.288 [DEBUG] [Thread-14768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:30:02.288 [INFO] [Thread-14768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] client lang: <none>
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] server lang: <none>
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] kex follows: False
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] Compression: none
2025-12-25T16:30:02.296 [DEBUG] [Thread-14768] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:30:02.353 [DEBUG] [Thread-14768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:30:02.353 [DEBUG] [Thread-14768] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:30:02.354 [DEBUG] [Thread-14768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:30:02.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:30:02.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:30:02.410 [DEBUG] [Thread-14768] [transport.py] [_log()] userauth is OK
2025-12-25T16:30:02.410 [DEBUG] [Thread-14768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:30:02.410 [DEBUG] [Thread-14768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:30:02.410 [DEBUG] [Thread-14768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:30:02.410 [DEBUG] [Thread-14768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:30:02.424 [INFO] [Thread-14768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:30:02.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-25T16:30:02.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:30:03.238 [DEBUG] [Thread-14768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:30:03.238 [DEBUG] [Thread-14768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:30:03.286 [DEBUG] [Thread-14768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:30:03.286 [DEBUG] [Thread-14768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:30:03.296 [DEBUG] [Thread-14768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:30:03.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:30:03.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:30:03.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:30:03.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:30:03.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:30:03.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:30:03.332 [DEBUG] [Thread-14768] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:30:13.913 [DEBUG] [Thread-14770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:14.000 [DEBUG] [Thread-14771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:29.054 [DEBUG] [Thread-14772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:33.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:30:33.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:30:33.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-25T16:30:34.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 30, 21), 30.02, 13.55, 0.0, 36.65, 25.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:30:34.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:30:21
2025-12-25T16:30:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:30:34.325 [DEBUG] [Thread-14773] [transport.py] [_log()] starting thread (client mode): 0xb95d7700
2025-12-25T16:30:34.325 [DEBUG] [Thread-14773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:30:34.346 [DEBUG] [Thread-14773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:30:34.346 [INFO] [Thread-14773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:34.349 [DEBUG] [Thread-14773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] client lang: <none>
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] server lang: <none>
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] kex follows: False
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] Compression: none
2025-12-25T16:30:34.350 [DEBUG] [Thread-14773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:30:34.369 [DEBUG] [Thread-14773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:30:34.370 [DEBUG] [Thread-14773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:30:34.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:30:34.371 [DEBUG] [Thread-14773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:30:34.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:30:34.373 [DEBUG] [Thread-14773] [transport.py] [_log()] userauth is OK
2025-12-25T16:30:34.373 [DEBUG] [Thread-14773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:30:34.373 [DEBUG] [Thread-14773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:30:34.373 [DEBUG] [Thread-14773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:30:34.373 [DEBUG] [Thread-14773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:30:34.398 [INFO] [Thread-14773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:30:34.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:30:35.046 [DEBUG] [Thread-14773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:30:35.047 [DEBUG] [Thread-14773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:30:35.047 [DEBUG] [Thread-14773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:30:35.088 [DEBUG] [Thread-14773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:30:35.088 [DEBUG] [Thread-14773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:30:35.092 [DEBUG] [Thread-14773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:30:35.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:30:35.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:30:35.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:30:35.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:30:35.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:30:35.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:30:35.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:30:35.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:30:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:30:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.603880 -999.00  +25.40  28.54     18   +0.00 1 1 1 1 1   888    0 22.94 -44.91 ----- 27.8 28.5 298.6 34.1 29.3 -28.3 29.4 -28.0 30.1 -26.7 30.5 -25.8
2025-12-25T16:30:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:30:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:30:35.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.603880
2025-12-25T16:30:35.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:30:35.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:30:35.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:30:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:30:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:30:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:30:21', tmtdew=30.02, humidity=13.55, cloud=0.0, wind=36.65, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:29:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:30:35.118 [DEBUG] [Thread-14773] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:30:35.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-25T16:30:35.212 [DEBUG] [Thread-14776] [transport.py] [_log()] starting thread (client mode): 0xb6bc3d60
2025-12-25T16:30:35.212 [DEBUG] [Thread-14776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:30:35.226 [DEBUG] [Thread-14776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:30:35.226 [INFO] [Thread-14776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] client lang: <none>
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] server lang: <none>
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] kex follows: False
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:30:35.234 [DEBUG] [Thread-14776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:30:35.235 [DEBUG] [Thread-14776] [transport.py] [_log()] Compression: none
2025-12-25T16:30:35.235 [DEBUG] [Thread-14776] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:30:35.290 [DEBUG] [Thread-14776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:30:35.290 [DEBUG] [Thread-14776] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:30:35.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:30:35.291 [DEBUG] [Thread-14776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:30:35.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:30:35.347 [DEBUG] [Thread-14776] [transport.py] [_log()] userauth is OK
2025-12-25T16:30:35.347 [DEBUG] [Thread-14776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:30:35.347 [DEBUG] [Thread-14776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:30:35.347 [DEBUG] [Thread-14776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:30:35.347 [DEBUG] [Thread-14776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:30:35.366 [INFO] [Thread-14776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:30:35.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-25T16:30:35.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:30:36.181 [DEBUG] [Thread-14776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:30:36.181 [DEBUG] [Thread-14776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:30:36.229 [DEBUG] [Thread-14776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:30:36.229 [DEBUG] [Thread-14776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:30:36.239 [DEBUG] [Thread-14776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:30:36.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:30:36.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:30: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') -> 00000000
2025-12-25T16:30:36.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:30:36.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:30:36.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:30:36.276 [DEBUG] [Thread-14776] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:30:44.091 [DEBUG] [Thread-14778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:54.027 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:54.028 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:30:59.135 [DEBUG] [Thread-14779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:06.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:31:06.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:31:06.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-25T16:31:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 30, 53), 29.96, 13.73, 0.0, 33.86, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:31:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:30:53
2025-12-25T16:31:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:31:07.241 [DEBUG] [Thread-14780] [transport.py] [_log()] starting thread (client mode): 0xb6bc2860
2025-12-25T16:31:07.241 [DEBUG] [Thread-14780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:31:07.261 [DEBUG] [Thread-14780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:31:07.262 [INFO] [Thread-14780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] client lang: <none>
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] server lang: <none>
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] kex follows: False
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] Compression: none
2025-12-25T16:31:07.265 [DEBUG] [Thread-14780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:31:07.283 [DEBUG] [Thread-14780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:31:07.284 [DEBUG] [Thread-14780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:31:07.284 [DEBUG] [Thread-14780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:31:07.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:31:07.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:31:07.286 [DEBUG] [Thread-14780] [transport.py] [_log()] userauth is OK
2025-12-25T16:31:07.287 [DEBUG] [Thread-14780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:31:07.287 [DEBUG] [Thread-14780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:31:07.287 [DEBUG] [Thread-14780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:31:07.287 [DEBUG] [Thread-14780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:31:07.311 [INFO] [Thread-14780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:31:07.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:31:08.080 [DEBUG] [Thread-14780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:31:08.080 [DEBUG] [Thread-14780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:31:08.081 [DEBUG] [Thread-14780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:31:08.121 [DEBUG] [Thread-14780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:31:08.121 [DEBUG] [Thread-14780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:31:08.124 [DEBUG] [Thread-14780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:31:08.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:31:08.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:31:08.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:31:08.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:31:08.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:31:08.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:31:08.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:31:08.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:31:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:31:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.604227 -999.00  +25.60  32.01     19   +0.30 1 1 2 1 1   888    0 22.74 -38.35 ----- 24.1 32.0 311.4 43.3 29.4 -26.9 29.4 -26.9 30.3 -23.8 30.6 -25.3
2025-12-25T16:31:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:31:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:31:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.604227
2025-12-25T16:31:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:31:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:31:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:31:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:30:53', tmtdew=29.96, humidity=13.73, cloud=0.0, wind=33.86, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:30:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:31:08.149 [DEBUG] [Thread-14780] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:31:08.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-25T16:31:08.241 [DEBUG] [Thread-14783] [transport.py] [_log()] starting thread (client mode): 0xb6bc0790
2025-12-25T16:31:08.241 [DEBUG] [Thread-14783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:31:08.256 [DEBUG] [Thread-14783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:31:08.256 [INFO] [Thread-14783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:31:08.263 [DEBUG] [Thread-14783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] client lang: <none>
2025-12-25T16:31:08.264 [DEBUG] [Thread-14783] [transport.py] [_log()] server lang: <none>
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] kex follows: False
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] Compression: none
2025-12-25T16:31:08.265 [DEBUG] [Thread-14783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:31:08.323 [DEBUG] [Thread-14783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:31:08.324 [DEBUG] [Thread-14783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:31:08.325 [DEBUG] [Thread-14783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:31:08.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:31:08.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:31:08.379 [DEBUG] [Thread-14783] [transport.py] [_log()] userauth is OK
2025-12-25T16:31:08.380 [DEBUG] [Thread-14783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:31:08.380 [DEBUG] [Thread-14783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:31:08.380 [DEBUG] [Thread-14783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:31:08.380 [DEBUG] [Thread-14783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:31:08.399 [INFO] [Thread-14783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:31:08.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-25T16:31:08.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:31:09.226 [DEBUG] [Thread-14783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:31:09.227 [DEBUG] [Thread-14783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:31:09.274 [DEBUG] [Thread-14783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:31:09.275 [DEBUG] [Thread-14783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:31:09.283 [DEBUG] [Thread-14783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:31:09.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:31:09.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-25T16:31:09.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-25T16:31:09.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:31:09.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:31:09.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:31:09.316 [DEBUG] [Thread-14783] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:31:13.961 [DEBUG] [Thread-14785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:14.170 [DEBUG] [Thread-14786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:29.227 [DEBUG] [Thread-14787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:39.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:31:39.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:31:39.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-25T16:31:40.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 31, 25), 29.97, 13.75, 0.0, 33.38, 26.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:31:40.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:31:25
2025-12-25T16:31:40.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:31:40.337 [DEBUG] [Thread-14788] [transport.py] [_log()] starting thread (client mode): 0xb6b602b0
2025-12-25T16:31:40.337 [DEBUG] [Thread-14788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:31:40.357 [DEBUG] [Thread-14788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:31:40.357 [INFO] [Thread-14788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:31:40.360 [DEBUG] [Thread-14788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] client lang: <none>
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] server lang: <none>
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] kex follows: False
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:31:40.361 [DEBUG] [Thread-14788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:31:40.362 [DEBUG] [Thread-14788] [transport.py] [_log()] Compression: none
2025-12-25T16:31:40.362 [DEBUG] [Thread-14788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:31:40.379 [DEBUG] [Thread-14788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:31:40.380 [DEBUG] [Thread-14788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:31:40.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:31:40.381 [DEBUG] [Thread-14788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:31:40.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:31:40.383 [DEBUG] [Thread-14788] [transport.py] [_log()] userauth is OK
2025-12-25T16:31:40.383 [DEBUG] [Thread-14788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:31:40.383 [DEBUG] [Thread-14788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:31:40.383 [DEBUG] [Thread-14788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:31:40.383 [DEBUG] [Thread-14788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:31:40.407 [INFO] [Thread-14788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:31:40.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:31:41.054 [DEBUG] [Thread-14788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:31:41.054 [DEBUG] [Thread-14788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:31:41.055 [DEBUG] [Thread-14788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:31:41.095 [DEBUG] [Thread-14788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:31:41.095 [DEBUG] [Thread-14788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:31:41.099 [DEBUG] [Thread-14788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:31:41.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:31:41.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:31:41.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:31:41.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:31:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:31:41.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:31:41.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:31:41.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:31:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:31:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.604922 -999.00  +25.70  27.89     19   +1.00 1 1 1 1 1   888    0 23.99 -15.91 ----- 36.4 27.9 296.9 50.4 29.4 -28.1 29.4 -27.6 30.4 -24.3 30.6 -25.5
2025-12-25T16:31:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:31:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:31:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.604922
2025-12-25T16:31:41.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:31:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:31:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:31:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:31:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:31:41.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:31:25', tmtdew=29.97, humidity=13.75, cloud=0.0, wind=33.38, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:31:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:31:41.128 [DEBUG] [Thread-14788] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:31:41.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-25T16:31:41.227 [DEBUG] [Thread-14791] [transport.py] [_log()] starting thread (client mode): 0xb6b610c0
2025-12-25T16:31:41.228 [DEBUG] [Thread-14791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:31:41.246 [DEBUG] [Thread-14791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:31:41.247 [INFO] [Thread-14791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:31:41.254 [DEBUG] [Thread-14791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:31:41.254 [DEBUG] [Thread-14791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:31:41.254 [DEBUG] [Thread-14791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:31:41.254 [DEBUG] [Thread-14791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] client lang: <none>
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] server lang: <none>
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] kex follows: False
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] Compression: none
2025-12-25T16:31:41.255 [DEBUG] [Thread-14791] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:31:41.313 [DEBUG] [Thread-14791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:31:41.313 [DEBUG] [Thread-14791] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:31:41.314 [DEBUG] [Thread-14791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:31:41.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:31:41.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:31:41.371 [DEBUG] [Thread-14791] [transport.py] [_log()] userauth is OK
2025-12-25T16:31:41.371 [DEBUG] [Thread-14791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:31:41.371 [DEBUG] [Thread-14791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:31:41.372 [DEBUG] [Thread-14791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:31:41.372 [DEBUG] [Thread-14791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:31:41.391 [INFO] [Thread-14791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:31:41.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-25T16:31:41.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:31:42.165 [DEBUG] [Thread-14791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:31:42.165 [DEBUG] [Thread-14791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:31:42.213 [DEBUG] [Thread-14791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:31:42.213 [DEBUG] [Thread-14791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:31:42.222 [DEBUG] [Thread-14791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:31:42.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:31:42.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:31:42.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:31:42.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:31:42.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:31:42.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:31:42.259 [DEBUG] [Thread-14791] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:31:44.262 [DEBUG] [Thread-14793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:54.165 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:54.166 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:31:59.311 [DEBUG] [Thread-14794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:32:12.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:32:12.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-25T16:32:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 31, 57), 29.74, 14.1, 0.0, 32.34, 26.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:32:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:31:57
2025-12-25T16:32:13.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:32:13.312 [DEBUG] [Thread-14795] [transport.py] [_log()] starting thread (client mode): 0xb6bc33d0
2025-12-25T16:32:13.312 [DEBUG] [Thread-14795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:32:13.325 [DEBUG] [Thread-14795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:32:13.325 [INFO] [Thread-14795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] client lang: <none>
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] server lang: <none>
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] kex follows: False
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] Compression: none
2025-12-25T16:32:13.329 [DEBUG] [Thread-14795] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:32:13.345 [DEBUG] [Thread-14795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:32:13.346 [DEBUG] [Thread-14795] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:32:13.346 [DEBUG] [Thread-14795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:32:13.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:32:13.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:32:13.347 [DEBUG] [Thread-14795] [transport.py] [_log()] userauth is OK
2025-12-25T16:32:13.347 [DEBUG] [Thread-14795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:32:13.347 [DEBUG] [Thread-14795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:32:13.347 [DEBUG] [Thread-14795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:32:13.347 [DEBUG] [Thread-14795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:32:13.365 [INFO] [Thread-14795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:32:13.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:32:13.989 [DEBUG] [Thread-14797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:14.177 [DEBUG] [Thread-14795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:32:14.177 [DEBUG] [Thread-14795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:32:14.177 [DEBUG] [Thread-14795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:32:14.218 [DEBUG] [Thread-14795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:32:14.219 [DEBUG] [Thread-14795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:32:14.221 [DEBUG] [Thread-14795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:32:14.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:32:14.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:32:14.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:32:14.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:32:14.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:32:14.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:32:14.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.605269 -999.00  +25.70  45.84     19   +0.80 1 1 2 1 1   888    0 23.82 -5.83 ----- 31.8 45.8 291.8 51.4 29.4 -29.0 29.4 -28.5 30.2 -24.4 30.6 -26.7
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.605269
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:32:14.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:31:57', tmtdew=29.74, humidity=14.1, cloud=0.0, wind=32.34, temperature=26.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:31:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:32:14.242 [DEBUG] [Thread-14795] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:32:14.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-25T16:32:14.325 [DEBUG] [Thread-14799] [transport.py] [_log()] starting thread (client mode): 0xb6bc2c80
2025-12-25T16:32:14.325 [DEBUG] [Thread-14799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:32:14.340 [DEBUG] [Thread-14799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:32:14.340 [INFO] [Thread-14799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:32:14.341 [DEBUG] [Thread-14801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] client lang: <none>
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] server lang: <none>
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] kex follows: False
2025-12-25T16:32:14.347 [DEBUG] [Thread-14799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:32:14.348 [DEBUG] [Thread-14799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:32:14.348 [DEBUG] [Thread-14799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:32:14.348 [DEBUG] [Thread-14799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:32:14.348 [DEBUG] [Thread-14799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:32:14.348 [DEBUG] [Thread-14799] [transport.py] [_log()] Compression: none
2025-12-25T16:32:14.348 [DEBUG] [Thread-14799] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:32:14.404 [DEBUG] [Thread-14799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:32:14.404 [DEBUG] [Thread-14799] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:32:14.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:32:14.405 [DEBUG] [Thread-14799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:32:14.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:32:14.462 [DEBUG] [Thread-14799] [transport.py] [_log()] userauth is OK
2025-12-25T16:32:14.462 [DEBUG] [Thread-14799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:32:14.462 [DEBUG] [Thread-14799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:32:14.462 [DEBUG] [Thread-14799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:32:14.462 [DEBUG] [Thread-14799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:32:14.475 [INFO] [Thread-14799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:32:14.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-25T16:32:14.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:32:15.283 [DEBUG] [Thread-14799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:32:15.283 [DEBUG] [Thread-14799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:32:15.331 [DEBUG] [Thread-14799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:32:15.331 [DEBUG] [Thread-14799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:32:15.339 [DEBUG] [Thread-14799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:32:15.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:32:15.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-25T16:32:15.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-25T16:32:15.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:32:15.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:32:15.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:32:15.372 [DEBUG] [Thread-14799] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:32:29.382 [DEBUG] [Thread-14802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:44.423 [DEBUG] [Thread-14803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:45.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:32:45.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:32:45.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-25T16:32:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 32, 29), 29.72, 14.12, 0.0, 34.19, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:32:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:32:29
2025-12-25T16:32:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:32:46.398 [DEBUG] [Thread-14804] [transport.py] [_log()] starting thread (client mode): 0xb6bc09a0
2025-12-25T16:32:46.398 [DEBUG] [Thread-14804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:32:46.418 [DEBUG] [Thread-14804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:32:46.418 [INFO] [Thread-14804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] client lang: <none>
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] server lang: <none>
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] kex follows: False
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:32:46.421 [DEBUG] [Thread-14804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:32:46.422 [DEBUG] [Thread-14804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:32:46.422 [DEBUG] [Thread-14804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:32:46.422 [DEBUG] [Thread-14804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:32:46.422 [DEBUG] [Thread-14804] [transport.py] [_log()] Compression: none
2025-12-25T16:32:46.422 [DEBUG] [Thread-14804] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:32:46.439 [DEBUG] [Thread-14804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:32:46.440 [DEBUG] [Thread-14804] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:32:46.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:32:46.441 [DEBUG] [Thread-14804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:32:46.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:32:46.443 [DEBUG] [Thread-14804] [transport.py] [_log()] userauth is OK
2025-12-25T16:32:46.443 [DEBUG] [Thread-14804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:32:46.443 [DEBUG] [Thread-14804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:32:46.443 [DEBUG] [Thread-14804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:32:46.444 [DEBUG] [Thread-14804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:32:46.467 [INFO] [Thread-14804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:32:46.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:32:47.113 [DEBUG] [Thread-14804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:32:47.113 [DEBUG] [Thread-14804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:32:47.114 [DEBUG] [Thread-14804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:32:47.154 [DEBUG] [Thread-14804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:32:47.154 [DEBUG] [Thread-14804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:32:47.158 [DEBUG] [Thread-14804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:32:47.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:32:47.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:32:47.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:32:47.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:32:47.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:32:47.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:32:47.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:32:47.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:32:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:32:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.605617 -999.00  +26.20  25.69     19   +1.20 1 1 1 1 1   888    0 24.03 2.18 ----- 34.1 25.7 309.9 40.8 29.5 -26.6 29.5 -26.3 30.4 -25.0 30.7 -25.1
2025-12-25T16:32:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:32:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:32:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.605617
2025-12-25T16:32:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:32:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:32:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:32:47.186 [DEBUG] [Thread-14804] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:32:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:32:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:32:47.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:32:29', tmtdew=29.72, humidity=14.12, cloud=0.0, wind=34.19, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:32:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:32:47.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-25T16:32:47.280 [DEBUG] [Thread-14807] [transport.py] [_log()] starting thread (client mode): 0xb6b61a80
2025-12-25T16:32:47.280 [DEBUG] [Thread-14807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:32:47.295 [DEBUG] [Thread-14807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:32:47.295 [INFO] [Thread-14807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] client lang: <none>
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] server lang: <none>
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] kex follows: False
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:32:47.303 [DEBUG] [Thread-14807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:32:47.304 [DEBUG] [Thread-14807] [transport.py] [_log()] Compression: none
2025-12-25T16:32:47.304 [DEBUG] [Thread-14807] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:32:47.363 [DEBUG] [Thread-14807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:32:47.363 [DEBUG] [Thread-14807] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:32:47.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:32:47.364 [DEBUG] [Thread-14807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:32:47.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:32:47.419 [DEBUG] [Thread-14807] [transport.py] [_log()] userauth is OK
2025-12-25T16:32:47.419 [DEBUG] [Thread-14807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:32:47.419 [DEBUG] [Thread-14807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:32:47.419 [DEBUG] [Thread-14807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:32:47.419 [DEBUG] [Thread-14807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:32:47.438 [INFO] [Thread-14807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:32:47.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-25T16:32:47.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:32:48.292 [DEBUG] [Thread-14807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:32:48.292 [DEBUG] [Thread-14807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:32:48.339 [DEBUG] [Thread-14807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:32:48.340 [DEBUG] [Thread-14807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:32:48.349 [DEBUG] [Thread-14807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:32:48.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:32:48.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-25T16:32:48.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:32:48.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:32:48.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:32:48.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:32:48.382 [DEBUG] [Thread-14807] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:32:54.306 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:54.307 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:32:59.458 [DEBUG] [Thread-14809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:14.021 [DEBUG] [Thread-14810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:14.516 [DEBUG] [Thread-14811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:18.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:33:18.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:33:18.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:33:19.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 33, 1), 29.58, 14.22, 0.0, 32.47, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:33:19.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:33:01
2025-12-25T16:33:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:33:19.388 [DEBUG] [Thread-14812] [transport.py] [_log()] starting thread (client mode): 0xb6b632b0
2025-12-25T16:33:19.388 [DEBUG] [Thread-14812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:33:19.409 [DEBUG] [Thread-14812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:33:19.409 [INFO] [Thread-14812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] client lang: <none>
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] server lang: <none>
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] kex follows: False
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] Compression: none
2025-12-25T16:33:19.412 [DEBUG] [Thread-14812] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:33:19.429 [DEBUG] [Thread-14812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:33:19.429 [DEBUG] [Thread-14812] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:33:19.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:33:19.430 [DEBUG] [Thread-14812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:33:19.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:33:19.432 [DEBUG] [Thread-14812] [transport.py] [_log()] userauth is OK
2025-12-25T16:33:19.432 [DEBUG] [Thread-14812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:33:19.433 [DEBUG] [Thread-14812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:33:19.433 [DEBUG] [Thread-14812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:33:19.433 [DEBUG] [Thread-14812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:33:19.451 [INFO] [Thread-14812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:33:19.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:33:20.299 [DEBUG] [Thread-14812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:33:20.299 [DEBUG] [Thread-14812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:33:20.299 [DEBUG] [Thread-14812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:33:20.340 [DEBUG] [Thread-14812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:33:20.340 [DEBUG] [Thread-14812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:33:20.344 [DEBUG] [Thread-14812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:33:20.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:33:20.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:33:20.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:33:20.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:33:20.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:33:20.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:33:20.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:33:20.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:33:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:33:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.605964 -999.00  +26.20  31.01     19   +1.00 1 1 2 1 1   888    0 24.20 12.90 ----- 32.5 31.0 308.2 45.8 29.6 -28.2 29.5 -28.0 30.4 -26.1 30.8 -26.4
2025-12-25T16:33:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:33:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:33:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.605964
2025-12-25T16:33:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:33:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:33:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:33:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:33:20.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:33:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:33:01', tmtdew=29.58, humidity=14.22, cloud=0.0, wind=32.47, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:32:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:33:20.371 [DEBUG] [Thread-14812] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:33:20.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-25T16:33:20.466 [DEBUG] [Thread-14815] [transport.py] [_log()] starting thread (client mode): 0xb9593b20
2025-12-25T16:33:20.466 [DEBUG] [Thread-14815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:33:20.480 [DEBUG] [Thread-14815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:33:20.480 [INFO] [Thread-14815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] client lang: <none>
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] server lang: <none>
2025-12-25T16:33:20.488 [DEBUG] [Thread-14815] [transport.py] [_log()] kex follows: False
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] Compression: none
2025-12-25T16:33:20.489 [DEBUG] [Thread-14815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:33:20.546 [DEBUG] [Thread-14815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:33:20.547 [DEBUG] [Thread-14815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:33:20.547 [DEBUG] [Thread-14815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:33:20.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:33:20.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:33:20.602 [DEBUG] [Thread-14815] [transport.py] [_log()] userauth is OK
2025-12-25T16:33:20.603 [DEBUG] [Thread-14815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:33:20.603 [DEBUG] [Thread-14815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:33:20.603 [DEBUG] [Thread-14815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:33:20.603 [DEBUG] [Thread-14815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:33:20.621 [INFO] [Thread-14815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:33:20.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-25T16:33:20.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:33:21.440 [DEBUG] [Thread-14815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:33:21.441 [DEBUG] [Thread-14815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:33:21.488 [DEBUG] [Thread-14815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:33:21.488 [DEBUG] [Thread-14815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:33:21.498 [DEBUG] [Thread-14815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:33:21.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:33:21.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-25T16:33:21.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-25T16:33:21.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:33:21.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:33:21.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:33:21.532 [DEBUG] [Thread-14815] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:33:29.556 [DEBUG] [Thread-14817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:44.604 [DEBUG] [Thread-14818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:51.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:33:51.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:33:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:33:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 33, 33), 29.18, 14.3, 0.0, 36.66, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:33:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:33:33
2025-12-25T16:33:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:33:52.512 [DEBUG] [Thread-14819] [transport.py] [_log()] starting thread (client mode): 0xb6bc2ce0
2025-12-25T16:33:52.512 [DEBUG] [Thread-14819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:33:52.533 [DEBUG] [Thread-14819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:33:52.534 [INFO] [Thread-14819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] client lang: <none>
2025-12-25T16:33:52.537 [DEBUG] [Thread-14819] [transport.py] [_log()] server lang: <none>
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] kex follows: False
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] Compression: none
2025-12-25T16:33:52.538 [DEBUG] [Thread-14819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:33:52.551 [DEBUG] [Thread-14819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:33:52.552 [DEBUG] [Thread-14819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:33:52.552 [DEBUG] [Thread-14819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:33:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:33:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:33:52.554 [DEBUG] [Thread-14819] [transport.py] [_log()] userauth is OK
2025-12-25T16:33:52.554 [DEBUG] [Thread-14819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:33:52.554 [DEBUG] [Thread-14819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:33:52.555 [DEBUG] [Thread-14819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:33:52.555 [DEBUG] [Thread-14819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:33:52.579 [INFO] [Thread-14819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:33:52.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:33:53.239 [DEBUG] [Thread-14819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:33:53.239 [DEBUG] [Thread-14819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:33:53.239 [DEBUG] [Thread-14819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:33:53.280 [DEBUG] [Thread-14819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:33:53.280 [DEBUG] [Thread-14819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:33:53.283 [DEBUG] [Thread-14819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:33:53.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:33:53.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:33:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:33:53.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:33:53.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:33:53.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:33:53.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:33:53.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:33:53.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:33:53.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.606311 -999.00  +26.20  33.85     19   +1.30 1 1 2 1 1   888    0 24.97 27.54 ----- 32.2 33.9 297.2 45.0 29.6 -28.0 29.6 -27.8 30.4 -27.1 30.7 -26.4
2025-12-25T16:33:53.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:33:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:33:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.606311
2025-12-25T16:33:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:33:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:33:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:33:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:33:53.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:33:53.304 [DEBUG] [Thread-14819] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:33:53.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:33:33', tmtdew=29.18, humidity=14.3, cloud=0.0, wind=36.66, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:33:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:33:53.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:33:53.399 [DEBUG] [Thread-14822] [transport.py] [_log()] starting thread (client mode): 0xb6b23880
2025-12-25T16:33:53.399 [DEBUG] [Thread-14822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:33:53.414 [DEBUG] [Thread-14822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:33:53.414 [INFO] [Thread-14822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:33:53.421 [DEBUG] [Thread-14822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] client lang: <none>
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] server lang: <none>
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] kex follows: False
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] Compression: none
2025-12-25T16:33:53.422 [DEBUG] [Thread-14822] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:33:53.479 [DEBUG] [Thread-14822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:33:53.479 [DEBUG] [Thread-14822] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:33:53.480 [DEBUG] [Thread-14822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:33:53.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:33:53.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:33:53.535 [DEBUG] [Thread-14822] [transport.py] [_log()] userauth is OK
2025-12-25T16:33:53.535 [DEBUG] [Thread-14822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:33:53.535 [DEBUG] [Thread-14822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:33:53.536 [DEBUG] [Thread-14822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:33:53.536 [DEBUG] [Thread-14822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:33:53.554 [INFO] [Thread-14822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:33:53.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-25T16:33:53.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:33:54.365 [DEBUG] [Thread-14822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:33:54.365 [DEBUG] [Thread-14822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:33:54.413 [DEBUG] [Thread-14822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:33:54.413 [DEBUG] [Thread-14822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:33:54.422 [DEBUG] [Thread-14822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:33:54.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:33:54.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-25T16:33: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') -> 00000000
2025-12-25T16:33:54.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:33:54.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:33:54.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:33:54.456 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:54.457 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:33:54.458 [DEBUG] [Thread-14822] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:33:59.639 [DEBUG] [Thread-14824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:14.049 [DEBUG] [Thread-14825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:14.683 [DEBUG] [Thread-14826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:34:24.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:34:24.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-25T16:34:25.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 34, 6), 29.17, 14.33, 0.0, 38.94, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:34:25.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:34:06
2025-12-25T16:34:25.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:34:25.452 [DEBUG] [Thread-14827] [transport.py] [_log()] starting thread (client mode): 0xb6bc2d10
2025-12-25T16:34:25.452 [DEBUG] [Thread-14827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:34:25.466 [DEBUG] [Thread-14827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:34:25.466 [INFO] [Thread-14827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] client lang: <none>
2025-12-25T16:34:25.467 [DEBUG] [Thread-14827] [transport.py] [_log()] server lang: <none>
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] kex follows: False
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] Compression: none
2025-12-25T16:34:25.468 [DEBUG] [Thread-14827] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:34:25.476 [DEBUG] [Thread-14827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:34:25.476 [DEBUG] [Thread-14827] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:34:25.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:34:25.476 [DEBUG] [Thread-14827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:34:25.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:34:25.477 [DEBUG] [Thread-14827] [transport.py] [_log()] userauth is OK
2025-12-25T16:34:25.477 [DEBUG] [Thread-14827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:34:25.477 [DEBUG] [Thread-14827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:34:25.477 [DEBUG] [Thread-14827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:34:25.477 [DEBUG] [Thread-14827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:34:25.496 [INFO] [Thread-14827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:34:25.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:34:26.305 [DEBUG] [Thread-14827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:34:26.306 [DEBUG] [Thread-14827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:34:26.306 [DEBUG] [Thread-14827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:34:26.347 [DEBUG] [Thread-14827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:34:26.347 [DEBUG] [Thread-14827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:34:26.351 [DEBUG] [Thread-14827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:34:26.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:34:26.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:34:26.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:34:26.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:34:26.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:34:26.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:34:26.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:34:26.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:34:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:34:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.606658 -999.00  +25.60  36.16     19   +0.80 1 1 2 1 1   888    0 25.67 37.32 ----- 28.8 36.2 288.8 46.2 29.4 -28.7 29.5 -28.2 30.3 -25.1 30.6 -26.3
2025-12-25T16:34:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:34:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:34:26.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.606658
2025-12-25T16:34:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:34:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:34:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:34:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:34:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:34:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:34:06', tmtdew=29.17, humidity=14.33, cloud=0.0, wind=38.94, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:33:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:34:26.377 [DEBUG] [Thread-14827] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:34:26.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-25T16:34:26.473 [DEBUG] [Thread-14830] [transport.py] [_log()] starting thread (client mode): 0xb6b2b5b0
2025-12-25T16:34:26.473 [DEBUG] [Thread-14830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:34:26.491 [DEBUG] [Thread-14830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:34:26.491 [INFO] [Thread-14830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:34:26.499 [DEBUG] [Thread-14830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] client lang: <none>
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] server lang: <none>
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] kex follows: False
2025-12-25T16:34:26.500 [DEBUG] [Thread-14830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:34:26.501 [DEBUG] [Thread-14830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:34:26.501 [DEBUG] [Thread-14830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:34:26.501 [DEBUG] [Thread-14830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:34:26.501 [DEBUG] [Thread-14830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:34:26.501 [DEBUG] [Thread-14830] [transport.py] [_log()] Compression: none
2025-12-25T16:34:26.501 [DEBUG] [Thread-14830] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:34:26.559 [DEBUG] [Thread-14830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:34:26.560 [DEBUG] [Thread-14830] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:34:26.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:34:26.561 [DEBUG] [Thread-14830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:34:26.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:34:26.615 [DEBUG] [Thread-14830] [transport.py] [_log()] userauth is OK
2025-12-25T16:34:26.615 [DEBUG] [Thread-14830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:34:26.615 [DEBUG] [Thread-14830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:34:26.616 [DEBUG] [Thread-14830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:34:26.616 [DEBUG] [Thread-14830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:34:26.635 [INFO] [Thread-14830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:34:26.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:34:26.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:34:27.459 [DEBUG] [Thread-14830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:34:27.460 [DEBUG] [Thread-14830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:34:27.508 [DEBUG] [Thread-14830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:34:27.508 [DEBUG] [Thread-14830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:34:27.517 [DEBUG] [Thread-14830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:34:27.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:34:27.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-25T16:34:27.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-25T16:34:27.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:34:27.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:34:27.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:34:27.555 [DEBUG] [Thread-14830] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:34:29.721 [DEBUG] [Thread-14832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:44.771 [DEBUG] [Thread-14833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:54.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:54.609 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:34:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:34:57.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:34:57.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-25T16:34:58.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 34, 38), 29.12, 14.32, 0.0, 31.27, 25.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:34:58.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:34:38
2025-12-25T16:34:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:34:58.542 [DEBUG] [Thread-14834] [transport.py] [_log()] starting thread (client mode): 0xb957a680
2025-12-25T16:34:58.542 [DEBUG] [Thread-14834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:34:58.563 [DEBUG] [Thread-14834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:34:58.563 [INFO] [Thread-14834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:34:58.566 [DEBUG] [Thread-14834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] client lang: <none>
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] server lang: <none>
2025-12-25T16:34:58.567 [DEBUG] [Thread-14834] [transport.py] [_log()] kex follows: False
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] Compression: none
2025-12-25T16:34:58.568 [DEBUG] [Thread-14834] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:34:58.587 [DEBUG] [Thread-14834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:34:58.588 [DEBUG] [Thread-14834] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:34:58.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:34:58.590 [DEBUG] [Thread-14834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:34:58.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:34:58.592 [DEBUG] [Thread-14834] [transport.py] [_log()] userauth is OK
2025-12-25T16:34:58.592 [DEBUG] [Thread-14834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:34:58.592 [DEBUG] [Thread-14834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:34:58.592 [DEBUG] [Thread-14834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:34:58.592 [DEBUG] [Thread-14834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:34:58.616 [INFO] [Thread-14834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:34:58.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:34:59.241 [DEBUG] [Thread-14834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:34:59.241 [DEBUG] [Thread-14834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:34:59.241 [DEBUG] [Thread-14834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:34:59.282 [DEBUG] [Thread-14834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:34:59.282 [DEBUG] [Thread-14834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:34:59.285 [DEBUG] [Thread-14834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:34:59.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:34:59.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:34:59.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:34:59.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:34:59.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:34:59.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:34:59.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:34:59.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:34:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:34:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.607006 -999.00  +25.60  21.83     19   +0.80 1 1 1 1 1   888    0 26.14 47.41 ----- 26.4 21.8 288.8 32.6 29.5 -28.9 29.5 -27.4 30.4 -24.7 30.6 -26.6
2025-12-25T16:34:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:34:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:34:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.607006
2025-12-25T16:34:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:34:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:34:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:34:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:34:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:34:59.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:34:38', tmtdew=29.12, humidity=14.32, cloud=0.0, wind=31.27, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:34:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:34:59.311 [DEBUG] [Thread-14834] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:34:59.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-25T16:34:59.404 [DEBUG] [Thread-14837] [transport.py] [_log()] starting thread (client mode): 0xb6b22560
2025-12-25T16:34:59.405 [DEBUG] [Thread-14837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:34:59.420 [DEBUG] [Thread-14837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:34:59.420 [INFO] [Thread-14837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:34:59.427 [DEBUG] [Thread-14837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:34:59.428 [DEBUG] [Thread-14837] [transport.py] [_log()] client lang: <none>
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] server lang: <none>
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] kex follows: False
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] Compression: none
2025-12-25T16:34:59.429 [DEBUG] [Thread-14837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:34:59.486 [DEBUG] [Thread-14837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:34:59.486 [DEBUG] [Thread-14837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:34:59.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:34:59.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:34:59.488 [DEBUG] [Thread-14837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:34:59.542 [DEBUG] [Thread-14837] [transport.py] [_log()] userauth is OK
2025-12-25T16:34:59.542 [DEBUG] [Thread-14837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:34:59.542 [DEBUG] [Thread-14837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:34:59.542 [DEBUG] [Thread-14837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:34:59.543 [DEBUG] [Thread-14837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:34:59.562 [INFO] [Thread-14837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:34:59.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-25T16:34:59.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:34:59.803 [DEBUG] [Thread-14839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:00.386 [DEBUG] [Thread-14837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:35:00.386 [DEBUG] [Thread-14837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:35:00.434 [DEBUG] [Thread-14837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:35:00.434 [DEBUG] [Thread-14837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:35:00.444 [DEBUG] [Thread-14837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:35:00.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:35:00.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-25T16:35:00.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-25T16:35:00.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:35:00.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:35:00.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:35:00.476 [DEBUG] [Thread-14837] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:35:14.082 [DEBUG] [Thread-14840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:14.855 [DEBUG] [Thread-14841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:29.887 [DEBUG] [Thread-14842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:35:30.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:35:30.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-25T16:35:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 35, 10), 29.39, 14.1, 0.0, 35.16, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:35:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:35:10
2025-12-25T16:35:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:35:31.487 [DEBUG] [Thread-14843] [transport.py] [_log()] starting thread (client mode): 0xb957add0
2025-12-25T16:35:31.487 [DEBUG] [Thread-14843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:35:31.509 [DEBUG] [Thread-14843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:35:31.509 [INFO] [Thread-14843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] client lang: <none>
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] server lang: <none>
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] kex follows: False
2025-12-25T16:35:31.512 [DEBUG] [Thread-14843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:35:31.513 [DEBUG] [Thread-14843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:35:31.513 [DEBUG] [Thread-14843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:35:31.513 [DEBUG] [Thread-14843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:35:31.513 [DEBUG] [Thread-14843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:35:31.513 [DEBUG] [Thread-14843] [transport.py] [_log()] Compression: none
2025-12-25T16:35:31.513 [DEBUG] [Thread-14843] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:35:31.528 [DEBUG] [Thread-14843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:35:31.528 [DEBUG] [Thread-14843] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:35:31.528 [DEBUG] [Thread-14843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:35:31.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:35:31.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:35:31.528 [DEBUG] [Thread-14843] [transport.py] [_log()] userauth is OK
2025-12-25T16:35:31.528 [DEBUG] [Thread-14843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:35:31.529 [DEBUG] [Thread-14843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:35:31.529 [DEBUG] [Thread-14843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:35:31.529 [DEBUG] [Thread-14843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:35:31.543 [INFO] [Thread-14843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:35:31.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:35:32.223 [DEBUG] [Thread-14843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:35:32.223 [DEBUG] [Thread-14843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:35:32.223 [DEBUG] [Thread-14843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:35:32.264 [DEBUG] [Thread-14843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:35:32.264 [DEBUG] [Thread-14843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:35:32.266 [DEBUG] [Thread-14843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:35:32.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:35:32.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:35:32.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:35:32.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:35:32.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:35:32.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:35:32.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:35:32.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.607353 -999.00  +26.10  25.39     19   +1.30 1 1 1 1 1   888    0 26.12 52.17 ----- 31.9 25.4 294.8 31.4 29.6 -27.7 29.6 -27.0 30.4 -24.9 30.8 -25.9
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.607353
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:35:32.284 [DEBUG] [Thread-14843] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:35:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:35:10', tmtdew=29.39, humidity=14.1, cloud=0.0, wind=35.16, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:34:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:35:32.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-25T16:35:32.385 [DEBUG] [Thread-14846] [transport.py] [_log()] starting thread (client mode): 0xb6bc3b80
2025-12-25T16:35:32.385 [DEBUG] [Thread-14846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:35:32.399 [DEBUG] [Thread-14846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:35:32.400 [INFO] [Thread-14846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] client lang: <none>
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] server lang: <none>
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] kex follows: False
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:35:32.407 [DEBUG] [Thread-14846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:35:32.408 [DEBUG] [Thread-14846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:35:32.408 [DEBUG] [Thread-14846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:35:32.408 [DEBUG] [Thread-14846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:35:32.408 [DEBUG] [Thread-14846] [transport.py] [_log()] Compression: none
2025-12-25T16:35:32.408 [DEBUG] [Thread-14846] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:35:32.469 [DEBUG] [Thread-14846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:35:32.469 [DEBUG] [Thread-14846] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:35:32.469 [DEBUG] [Thread-14846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:35:32.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:35:32.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:35:32.527 [DEBUG] [Thread-14846] [transport.py] [_log()] userauth is OK
2025-12-25T16:35:32.527 [DEBUG] [Thread-14846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:35:32.527 [DEBUG] [Thread-14846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:35:32.527 [DEBUG] [Thread-14846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:35:32.527 [DEBUG] [Thread-14846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:35:32.549 [INFO] [Thread-14846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:35:32.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-25T16:35:32.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:35:33.343 [DEBUG] [Thread-14846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:35:33.344 [DEBUG] [Thread-14846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:35:33.392 [DEBUG] [Thread-14846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:35:33.393 [DEBUG] [Thread-14846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:35:33.402 [DEBUG] [Thread-14846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:35:33.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:35:33.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-25T16:35:33.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-25T16:35:33.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:35:33.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:35:33.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:35:33.439 [DEBUG] [Thread-14846] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:35:44.921 [DEBUG] [Thread-14848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:54.749 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:54.751 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:35:59.981 [DEBUG] [Thread-14849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:36:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:36:03.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:36:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:36:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 35, 42), 29.43, 14.0, 0.0, 41.6, 26.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:36:04.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:35:42
2025-12-25T16:36:04.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:36:04.422 [DEBUG] [Thread-14850] [transport.py] [_log()] starting thread (client mode): 0xb6b29f30
2025-12-25T16:36:04.422 [DEBUG] [Thread-14850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:36:04.442 [DEBUG] [Thread-14850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:36:04.442 [INFO] [Thread-14850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:36:04.445 [DEBUG] [Thread-14850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:36:04.445 [DEBUG] [Thread-14850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:36:04.445 [DEBUG] [Thread-14850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] client lang: <none>
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] server lang: <none>
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] kex follows: False
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] Compression: none
2025-12-25T16:36:04.446 [DEBUG] [Thread-14850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:36:04.462 [DEBUG] [Thread-14850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:36:04.463 [DEBUG] [Thread-14850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:36:04.463 [DEBUG] [Thread-14850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:36:04.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:36:04.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:36:04.465 [DEBUG] [Thread-14850] [transport.py] [_log()] userauth is OK
2025-12-25T16:36:04.465 [DEBUG] [Thread-14850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:36:04.465 [DEBUG] [Thread-14850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:36:04.465 [DEBUG] [Thread-14850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:36:04.465 [DEBUG] [Thread-14850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:36:04.486 [INFO] [Thread-14850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:36:04.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:36:05.163 [DEBUG] [Thread-14850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:36:05.163 [DEBUG] [Thread-14850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:36:05.164 [DEBUG] [Thread-14850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:36:05.204 [DEBUG] [Thread-14850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:36:05.204 [DEBUG] [Thread-14850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:36:05.208 [DEBUG] [Thread-14850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:36:05.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:36:05.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:36:05.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:36:05.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:36:05.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:36:05.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:36:05.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:36:05.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:36:05.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:36:05.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.607700 -999.00  +26.20  25.86     19   +1.00 1 1 1 1 1   888    0 25.80 58.21 ----- 28.2 25.9 310.2 41.5 29.6 -27.2 29.6 -27.4 30.6 -23.9 30.8 -25.9
2025-12-25T16:36:05.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:36:05.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:36:05.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.607700
2025-12-25T16:36:05.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:36:05.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:36:05.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:36:05.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:36:05.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:36:05.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:35:42', tmtdew=29.43, humidity=14.0, cloud=0.0, wind=41.6, temperature=26.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:35:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:36:05.237 [DEBUG] [Thread-14850] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:36:05.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-25T16:36:05.330 [DEBUG] [Thread-14853] [transport.py] [_log()] starting thread (client mode): 0xb6b61db0
2025-12-25T16:36:05.330 [DEBUG] [Thread-14853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:36:05.344 [DEBUG] [Thread-14853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:36:05.344 [INFO] [Thread-14853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:36:05.351 [DEBUG] [Thread-14853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] client lang: <none>
2025-12-25T16:36:05.352 [DEBUG] [Thread-14853] [transport.py] [_log()] server lang: <none>
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] kex follows: False
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] Compression: none
2025-12-25T16:36:05.353 [DEBUG] [Thread-14853] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:36:05.411 [DEBUG] [Thread-14853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:36:05.411 [DEBUG] [Thread-14853] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:36:05.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:36:05.411 [DEBUG] [Thread-14853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:36:05.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:36:05.470 [DEBUG] [Thread-14853] [transport.py] [_log()] userauth is OK
2025-12-25T16:36:05.470 [DEBUG] [Thread-14853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:36:05.470 [DEBUG] [Thread-14853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:36:05.470 [DEBUG] [Thread-14853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:36:05.470 [DEBUG] [Thread-14853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:36:05.483 [INFO] [Thread-14853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:36:05.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-25T16:36:05.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:36:06.311 [DEBUG] [Thread-14853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:36:06.311 [DEBUG] [Thread-14853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:36:06.360 [DEBUG] [Thread-14853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:36:06.360 [DEBUG] [Thread-14853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:36:06.368 [DEBUG] [Thread-14853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:36:06.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:36:06.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:36:06.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-25T16:36:06.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:36:06.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:36:06.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:36:06.400 [DEBUG] [Thread-14853] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:36:14.115 [DEBUG] [Thread-14855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:36:15.013 [DEBUG] [Thread-14856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:36:30.064 [DEBUG] [Thread-14857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:36:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:36:36.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:36:36.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-25T16:36:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 36, 14), 29.14, 14.28, 0.0, 44.11, 26.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:36:37.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:36:14
2025-12-25T16:36:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:36:37.402 [DEBUG] [Thread-14858] [transport.py] [_log()] starting thread (client mode): 0xb6b21360
2025-12-25T16:36:37.402 [DEBUG] [Thread-14858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:36:37.423 [DEBUG] [Thread-14858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:36:37.424 [INFO] [Thread-14858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] client lang: <none>
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] server lang: <none>
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] kex follows: False
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] Compression: none
2025-12-25T16:36:37.427 [DEBUG] [Thread-14858] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:36:37.445 [DEBUG] [Thread-14858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:36:37.445 [DEBUG] [Thread-14858] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:36:37.446 [DEBUG] [Thread-14858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:36:37.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:36:37.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:36:37.448 [DEBUG] [Thread-14858] [transport.py] [_log()] userauth is OK
2025-12-25T16:36:37.448 [DEBUG] [Thread-14858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:36:37.449 [DEBUG] [Thread-14858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:36:37.449 [DEBUG] [Thread-14858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:36:37.449 [DEBUG] [Thread-14858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:36:37.472 [INFO] [Thread-14858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:36:37.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:36:38.112 [DEBUG] [Thread-14858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:36:38.112 [DEBUG] [Thread-14858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:36:38.112 [DEBUG] [Thread-14858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:36:38.153 [DEBUG] [Thread-14858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:36:38.153 [DEBUG] [Thread-14858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:36:38.156 [DEBUG] [Thread-14858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:36:38.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:36:38.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:36:38.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:36:38.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:36:38.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:36:38.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:36:38.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:36:38.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:36:38.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:36:38.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.608047 -999.00  +26.50  30.14     19   +1.30 1 1 2 1 1   888    0 26.21 65.80 ----- 39.6 30.1 291.0 41.3 29.7 -27.5 29.7 -27.1 30.4 -28.3 30.9 -27.1
2025-12-25T16:36:38.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:36:38.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:36:38.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.608047
2025-12-25T16:36:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:36:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:36:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:36:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:36:38.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:36:38.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:36:14', tmtdew=29.14, humidity=14.28, cloud=0.0, wind=44.11, temperature=26.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:35:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:36:38.180 [DEBUG] [Thread-14858] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:36:38.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-25T16:36:38.275 [DEBUG] [Thread-14861] [transport.py] [_log()] starting thread (client mode): 0xb6b22200
2025-12-25T16:36:38.276 [DEBUG] [Thread-14861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:36:38.290 [DEBUG] [Thread-14861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:36:38.290 [INFO] [Thread-14861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:36:38.297 [DEBUG] [Thread-14861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] client lang: <none>
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] server lang: <none>
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] kex follows: False
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] Compression: none
2025-12-25T16:36:38.298 [DEBUG] [Thread-14861] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:36:38.354 [DEBUG] [Thread-14861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:36:38.355 [DEBUG] [Thread-14861] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:36:38.355 [DEBUG] [Thread-14861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:36:38.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:36:38.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:36:38.411 [DEBUG] [Thread-14861] [transport.py] [_log()] userauth is OK
2025-12-25T16:36:38.411 [DEBUG] [Thread-14861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:36:38.412 [DEBUG] [Thread-14861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:36:38.412 [DEBUG] [Thread-14861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:36:38.412 [DEBUG] [Thread-14861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:36:38.430 [INFO] [Thread-14861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:36:38.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-25T16:36:38.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:36:39.242 [DEBUG] [Thread-14861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:36:39.242 [DEBUG] [Thread-14861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:36:39.289 [DEBUG] [Thread-14861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:36:39.290 [DEBUG] [Thread-14861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:36:39.298 [DEBUG] [Thread-14861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:36:39.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:36:39.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-25T16:36:39.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-25T16:36:39.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:36:39.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:36:39.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:36:39.332 [DEBUG] [Thread-14861] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:36:45.101 [DEBUG] [Thread-14863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:36:54.892 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:36:54.893 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:00.150 [DEBUG] [Thread-14864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:37:09.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:37:09.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-25T16:37:10.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 36, 46), 29.48, 13.85, 0.0, 36.59, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:37:10.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:36:46
2025-12-25T16:37:10.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:37:10.319 [DEBUG] [Thread-14865] [transport.py] [_log()] starting thread (client mode): 0xb6b00b80
2025-12-25T16:37:10.319 [DEBUG] [Thread-14865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:37:10.339 [DEBUG] [Thread-14865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:37:10.339 [INFO] [Thread-14865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] client lang: <none>
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] server lang: <none>
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] kex follows: False
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:37:10.342 [DEBUG] [Thread-14865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:37:10.343 [DEBUG] [Thread-14865] [transport.py] [_log()] Compression: none
2025-12-25T16:37:10.343 [DEBUG] [Thread-14865] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:37:10.361 [DEBUG] [Thread-14865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:37:10.361 [DEBUG] [Thread-14865] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:37:10.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:37:10.363 [DEBUG] [Thread-14865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:37:10.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:37:10.365 [DEBUG] [Thread-14865] [transport.py] [_log()] userauth is OK
2025-12-25T16:37:10.365 [DEBUG] [Thread-14865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:37:10.365 [DEBUG] [Thread-14865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:37:10.365 [DEBUG] [Thread-14865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:37:10.365 [DEBUG] [Thread-14865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:37:10.389 [INFO] [Thread-14865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:37:10.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:37:11.056 [DEBUG] [Thread-14865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:37:11.057 [DEBUG] [Thread-14865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:37:11.057 [DEBUG] [Thread-14865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:37:11.098 [DEBUG] [Thread-14865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:37:11.098 [DEBUG] [Thread-14865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:37:11.102 [DEBUG] [Thread-14865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:37:11.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:37:11.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:37:11.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:37:11.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:37:11.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:37:11.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:37:11.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:37:11.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:37:11.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:37:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.608742 -999.00  +26.00  35.56     19   +1.10 1 1 2 1 1   888    0 26.70 89.48 ----- 41.2 35.6 306.2 46.1 29.5 -29.0 29.6 -29.0 30.0 -30.4 30.7 -27.1
2025-12-25T16:37:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:37:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:37:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.608742
2025-12-25T16:37:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:37:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:37:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:37:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:37:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:37:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:36:46', tmtdew=29.48, humidity=13.85, cloud=0.0, wind=36.59, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:36:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:37:11.128 [DEBUG] [Thread-14865] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:37:11.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-25T16:37:11.221 [DEBUG] [Thread-14868] [transport.py] [_log()] starting thread (client mode): 0xb6b01a80
2025-12-25T16:37:11.221 [DEBUG] [Thread-14868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:37:11.236 [DEBUG] [Thread-14868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:37:11.236 [INFO] [Thread-14868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:11.244 [DEBUG] [Thread-14868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] client lang: <none>
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] server lang: <none>
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] kex follows: False
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] Compression: none
2025-12-25T16:37:11.245 [DEBUG] [Thread-14868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:37:11.303 [DEBUG] [Thread-14868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:37:11.303 [DEBUG] [Thread-14868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:37:11.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:37:11.304 [DEBUG] [Thread-14868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:37:11.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:37:11.359 [DEBUG] [Thread-14868] [transport.py] [_log()] userauth is OK
2025-12-25T16:37:11.359 [DEBUG] [Thread-14868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:37:11.359 [DEBUG] [Thread-14868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:37:11.360 [DEBUG] [Thread-14868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:37:11.360 [DEBUG] [Thread-14868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:37:11.378 [INFO] [Thread-14868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:37:11.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-25T16:37:11.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:37:12.179 [DEBUG] [Thread-14868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:37:12.180 [DEBUG] [Thread-14868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:37:12.230 [DEBUG] [Thread-14868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:37:12.230 [DEBUG] [Thread-14868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:37:12.240 [DEBUG] [Thread-14868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:37:12.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:37:12.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:37:12.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-25T16:37:12.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:37:12.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:37:12.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:37:12.278 [DEBUG] [Thread-14868] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:37:14.153 [DEBUG] [Thread-14870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:15.186 [DEBUG] [Thread-14871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:30.234 [DEBUG] [Thread-14872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:37:42.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:37:42.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-25T16:37:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 37, 18), 29.41, 13.92, 0.0, 38.52, 26.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:37:42.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:37:18
2025-12-25T16:37:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:37:43.248 [DEBUG] [Thread-14873] [transport.py] [_log()] starting thread (client mode): 0xb95798a0
2025-12-25T16:37:43.248 [DEBUG] [Thread-14873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:37:43.269 [DEBUG] [Thread-14873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:37:43.269 [INFO] [Thread-14873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] client lang: <none>
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] server lang: <none>
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] kex follows: False
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] Compression: none
2025-12-25T16:37:43.272 [DEBUG] [Thread-14873] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:37:43.290 [DEBUG] [Thread-14873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:37:43.290 [DEBUG] [Thread-14873] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:37:43.291 [DEBUG] [Thread-14873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:37:43.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:37:43.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:37:43.293 [DEBUG] [Thread-14873] [transport.py] [_log()] userauth is OK
2025-12-25T16:37:43.293 [DEBUG] [Thread-14873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:37:43.293 [DEBUG] [Thread-14873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:37:43.293 [DEBUG] [Thread-14873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:37:43.293 [DEBUG] [Thread-14873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:37:43.311 [INFO] [Thread-14873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:37:43.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:37:43.976 [DEBUG] [Thread-14873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:37:43.977 [DEBUG] [Thread-14873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:37:43.977 [DEBUG] [Thread-14873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:37:44.017 [DEBUG] [Thread-14873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:37:44.017 [DEBUG] [Thread-14873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:37:44.020 [DEBUG] [Thread-14873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:37:44.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:37:44.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:37:44.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:37:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:37:44.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:37:44.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:37:44.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:37:44.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:37:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:37:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.609089 -999.00  +25.80  37.81     19   +1.10 1 1 2 1 1   888    0 26.60 88.05 ----- 37.9 37.8 307.8 45.1 29.5 -28.7 29.5 -28.4 30.2 -25.6 30.7 -26.5
2025-12-25T16:37:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:37:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:37:44.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.609089
2025-12-25T16:37:44.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:37:44.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:37:44.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:37:44.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:37:44.045 [DEBUG] [Thread-14873] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:37:44.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:37:44.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:37:18', tmtdew=29.41, humidity=13.92, cloud=0.0, wind=38.52, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:37:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:37:44.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-25T16:37:44.134 [DEBUG] [Thread-14876] [transport.py] [_log()] starting thread (client mode): 0xb6b20c70
2025-12-25T16:37:44.134 [DEBUG] [Thread-14876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:37:44.148 [DEBUG] [Thread-14876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:37:44.148 [INFO] [Thread-14876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:37:44.156 [DEBUG] [Thread-14876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:37:44.156 [DEBUG] [Thread-14876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] client lang: <none>
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] server lang: <none>
2025-12-25T16:37:44.157 [DEBUG] [Thread-14876] [transport.py] [_log()] kex follows: False
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] Compression: none
2025-12-25T16:37:44.158 [DEBUG] [Thread-14876] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:37:44.213 [DEBUG] [Thread-14876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:37:44.213 [DEBUG] [Thread-14876] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:37:44.213 [DEBUG] [Thread-14876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:37:44.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:37:44.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:37:44.271 [DEBUG] [Thread-14876] [transport.py] [_log()] userauth is OK
2025-12-25T16:37:44.271 [DEBUG] [Thread-14876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:37:44.271 [DEBUG] [Thread-14876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:37:44.272 [DEBUG] [Thread-14876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:37:44.272 [DEBUG] [Thread-14876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:37:44.296 [INFO] [Thread-14876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:37:44.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-25T16:37:44.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:37:45.128 [DEBUG] [Thread-14876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:37:45.129 [DEBUG] [Thread-14876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:37:45.176 [DEBUG] [Thread-14876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:37:45.176 [DEBUG] [Thread-14876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:37:45.185 [DEBUG] [Thread-14876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:37:45.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:37:45.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-25T16:37:45.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-25T16:37:45.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:37:45.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:37:45.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:37:45.222 [DEBUG] [Thread-14876] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:37:45.274 [DEBUG] [Thread-14878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:55.033 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:37:55.034 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:00.321 [DEBUG] [Thread-14879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:14.188 [DEBUG] [Thread-14880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:38:15.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:38:15.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-25T16:38:15.352 [DEBUG] [Thread-14881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 37, 50), 28.97, 14.53, 0.0, 33.59, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:38:15.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:37:50
2025-12-25T16:38:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:38:16.236 [DEBUG] [Thread-14882] [transport.py] [_log()] starting thread (client mode): 0xb6b613c0
2025-12-25T16:38:16.236 [DEBUG] [Thread-14882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:38:16.256 [DEBUG] [Thread-14882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:38:16.256 [INFO] [Thread-14882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:38:16.259 [DEBUG] [Thread-14882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:38:16.259 [DEBUG] [Thread-14882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:38:16.259 [DEBUG] [Thread-14882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] client lang: <none>
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] server lang: <none>
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] kex follows: False
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:38:16.260 [DEBUG] [Thread-14882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:38:16.261 [DEBUG] [Thread-14882] [transport.py] [_log()] Compression: none
2025-12-25T16:38:16.261 [DEBUG] [Thread-14882] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:38:16.278 [DEBUG] [Thread-14882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:38:16.278 [DEBUG] [Thread-14882] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:38:16.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:38:16.280 [DEBUG] [Thread-14882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:38:16.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:38:16.281 [DEBUG] [Thread-14882] [transport.py] [_log()] userauth is OK
2025-12-25T16:38:16.281 [DEBUG] [Thread-14882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:38:16.281 [DEBUG] [Thread-14882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:38:16.282 [DEBUG] [Thread-14882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:38:16.282 [DEBUG] [Thread-14882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:38:16.318 [INFO] [Thread-14882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:38:16.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:38:16.942 [DEBUG] [Thread-14882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:38:16.942 [DEBUG] [Thread-14882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:38:16.943 [DEBUG] [Thread-14882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:38:16.983 [DEBUG] [Thread-14882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:38:16.983 [DEBUG] [Thread-14882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:38:16.986 [DEBUG] [Thread-14882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:38:16.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:38:16.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:38:16.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:38:17.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:38:17.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:38:17.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:38:17.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:38:17.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:38:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:38:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.609436 -999.00  +25.70  29.33     20   +1.30 1 1 1 1 1   888    0 27.23 97.75 ----- 29.5 29.3 316.2 43.3 29.5 -28.1 29.4 -28.2 30.3 -25.2 30.7 -25.7
2025-12-25T16:38:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:38:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:38:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.609436
2025-12-25T16:38:17.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:38:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:38:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:38:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:38:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:38:17.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:37:50', tmtdew=28.97, humidity=14.53, cloud=0.0, wind=33.59, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:37:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:38:17.010 [DEBUG] [Thread-14882] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:38:17.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-25T16:38:17.105 [DEBUG] [Thread-14885] [transport.py] [_log()] starting thread (client mode): 0xb95b0f40
2025-12-25T16:38:17.105 [DEBUG] [Thread-14885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:38:17.120 [DEBUG] [Thread-14885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:38:17.120 [INFO] [Thread-14885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:17.128 [DEBUG] [Thread-14885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] client lang: <none>
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] server lang: <none>
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] kex follows: False
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:38:17.129 [DEBUG] [Thread-14885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:38:17.130 [DEBUG] [Thread-14885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:38:17.130 [DEBUG] [Thread-14885] [transport.py] [_log()] Compression: none
2025-12-25T16:38:17.130 [DEBUG] [Thread-14885] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:38:17.186 [DEBUG] [Thread-14885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:38:17.187 [DEBUG] [Thread-14885] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:38:17.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:38:17.187 [DEBUG] [Thread-14885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:38:17.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:38:17.242 [DEBUG] [Thread-14885] [transport.py] [_log()] userauth is OK
2025-12-25T16:38:17.243 [DEBUG] [Thread-14885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:38:17.243 [DEBUG] [Thread-14885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:38:17.243 [DEBUG] [Thread-14885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:38:17.243 [DEBUG] [Thread-14885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:38:17.265 [INFO] [Thread-14885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:38:17.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-25T16:38:17.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:38:18.071 [DEBUG] [Thread-14885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:38:18.071 [DEBUG] [Thread-14885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:38:18.118 [DEBUG] [Thread-14885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:38:18.119 [DEBUG] [Thread-14885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:38:18.127 [DEBUG] [Thread-14885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:38:18.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:38:18.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-25T16:38:18.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-25T16:38:18.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:38:18.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:38:18.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:38:18.161 [DEBUG] [Thread-14885] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:38:30.381 [DEBUG] [Thread-14887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:45.429 [DEBUG] [Thread-14888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:48.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:38:48.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:38:48.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:38:48.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 38, 22), 29.25, 14.3, 0.0, 31.79, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:38:48.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:38:22
2025-12-25T16:38:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:38:49.229 [DEBUG] [Thread-14889] [transport.py] [_log()] starting thread (client mode): 0xb95b3460
2025-12-25T16:38:49.230 [DEBUG] [Thread-14889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:38:49.250 [DEBUG] [Thread-14889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:38:49.251 [INFO] [Thread-14889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] client lang: <none>
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] server lang: <none>
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] kex follows: False
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] Compression: none
2025-12-25T16:38:49.254 [DEBUG] [Thread-14889] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:38:49.270 [DEBUG] [Thread-14889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:38:49.270 [DEBUG] [Thread-14889] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:38:49.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:38:49.270 [DEBUG] [Thread-14889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:38:49.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:38:49.271 [DEBUG] [Thread-14889] [transport.py] [_log()] userauth is OK
2025-12-25T16:38:49.271 [DEBUG] [Thread-14889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:38:49.271 [DEBUG] [Thread-14889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:38:49.271 [DEBUG] [Thread-14889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:38:49.271 [DEBUG] [Thread-14889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:38:49.284 [INFO] [Thread-14889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:38:49.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:38:49.950 [DEBUG] [Thread-14889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:38:49.951 [DEBUG] [Thread-14889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:38:49.951 [DEBUG] [Thread-14889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:38:49.991 [DEBUG] [Thread-14889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:38:49.991 [DEBUG] [Thread-14889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:38:49.995 [DEBUG] [Thread-14889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:38:50.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:38:50.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:38:50.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:38:50.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:38:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:38:50.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:38:50.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:38:50.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:38:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:38:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.609783 -999.00  +26.00  34.42     19   +1.30 1 1 2 1 1   888    0 28.13 112.44 ----- 27.0 34.4 310.4 41.4 29.5 -28.8 29.5 -28.5 30.2 -26.2 30.7 -26.6
2025-12-25T16:38:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:38:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:38:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.609783
2025-12-25T16:38:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:38:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:38:50.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:38:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:38:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:38:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:38:22', tmtdew=29.25, humidity=14.3, cloud=0.0, wind=31.79, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:38:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:38:50.021 [DEBUG] [Thread-14889] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:38:50.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-25T16:38:50.114 [DEBUG] [Thread-14892] [transport.py] [_log()] starting thread (client mode): 0xb95d4730
2025-12-25T16:38:50.115 [DEBUG] [Thread-14892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:38:50.129 [DEBUG] [Thread-14892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:38:50.130 [INFO] [Thread-14892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] client lang: <none>
2025-12-25T16:38:50.137 [DEBUG] [Thread-14892] [transport.py] [_log()] server lang: <none>
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] kex follows: False
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] Compression: none
2025-12-25T16:38:50.138 [DEBUG] [Thread-14892] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:38:50.195 [DEBUG] [Thread-14892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:38:50.195 [DEBUG] [Thread-14892] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:38:50.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:38:50.196 [DEBUG] [Thread-14892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:38:50.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:38:50.251 [DEBUG] [Thread-14892] [transport.py] [_log()] userauth is OK
2025-12-25T16:38:50.251 [DEBUG] [Thread-14892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:38:50.252 [DEBUG] [Thread-14892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:38:50.252 [DEBUG] [Thread-14892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:38:50.252 [DEBUG] [Thread-14892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:38:50.274 [INFO] [Thread-14892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:38:50.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-25T16:38:50.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:38:51.094 [DEBUG] [Thread-14892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:38:51.095 [DEBUG] [Thread-14892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:38:51.143 [DEBUG] [Thread-14892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:38:51.143 [DEBUG] [Thread-14892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:38:51.153 [DEBUG] [Thread-14892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:38:51.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:38:51.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-25T16:38:51.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:38:51.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:38:51.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:38:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:38:51.189 [DEBUG] [Thread-14892] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:38:55.176 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:38:55.177 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:00.460 [DEBUG] [Thread-14894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:14.217 [DEBUG] [Thread-14895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:15.511 [DEBUG] [Thread-14896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:39:21.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:39: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-25T16:39:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 38, 54), 29.13, 14.42, 0.0, 35.22, 25.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:39:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:38:54
2025-12-25T16:39:22.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:39:22.182 [DEBUG] [Thread-14897] [transport.py] [_log()] starting thread (client mode): 0xb6b60cd0
2025-12-25T16:39:22.182 [DEBUG] [Thread-14897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:39:22.197 [DEBUG] [Thread-14897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:39:22.197 [INFO] [Thread-14897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] client lang: <none>
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] server lang: <none>
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] kex follows: False
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] Compression: none
2025-12-25T16:39:22.201 [DEBUG] [Thread-14897] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:39:22.217 [DEBUG] [Thread-14897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:39:22.217 [DEBUG] [Thread-14897] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:39:22.218 [DEBUG] [Thread-14897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:39:22.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:39:22.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:39:22.220 [DEBUG] [Thread-14897] [transport.py] [_log()] userauth is OK
2025-12-25T16:39:22.220 [DEBUG] [Thread-14897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:39:22.220 [DEBUG] [Thread-14897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:39:22.220 [DEBUG] [Thread-14897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:39:22.220 [DEBUG] [Thread-14897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:39:22.243 [INFO] [Thread-14897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:39:22.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:39:22.871 [DEBUG] [Thread-14897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:39:22.871 [DEBUG] [Thread-14897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:39:22.871 [DEBUG] [Thread-14897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:39:22.912 [DEBUG] [Thread-14897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:39:22.912 [DEBUG] [Thread-14897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:39:22.913 [DEBUG] [Thread-14897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:39:22.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:39:22.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:39:22.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:39:22.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:39:22.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:39:22.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:39:22.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:39:22.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:39:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:39:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.610130 -999.00  +25.60  27.81     20   +1.10 1 1 1 1 1   888    0 27.43 97.35 ----- 23.5 27.8 324.6 43.0 29.3 -28.1 29.3 -28.4 30.3 -25.8 30.6 -25.9
2025-12-25T16:39:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:39:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.610130
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:39:22.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:38:54', tmtdew=29.13, humidity=14.42, cloud=0.0, wind=35.22, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:38:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:39:22.933 [DEBUG] [Thread-14897] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:39:23.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-25T16:39:23.021 [DEBUG] [Thread-14900] [transport.py] [_log()] starting thread (client mode): 0xb95b35e0
2025-12-25T16:39:23.021 [DEBUG] [Thread-14900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:39:23.035 [DEBUG] [Thread-14900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:39:23.035 [INFO] [Thread-14900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] client lang: <none>
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] server lang: <none>
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] kex follows: False
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] Compression: none
2025-12-25T16:39:23.043 [DEBUG] [Thread-14900] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:39:23.101 [DEBUG] [Thread-14900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:39:23.101 [DEBUG] [Thread-14900] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:39:23.101 [DEBUG] [Thread-14900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:39:23.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:39:23.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:39:23.158 [DEBUG] [Thread-14900] [transport.py] [_log()] userauth is OK
2025-12-25T16:39:23.158 [DEBUG] [Thread-14900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:39:23.158 [DEBUG] [Thread-14900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:39:23.158 [DEBUG] [Thread-14900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:39:23.158 [DEBUG] [Thread-14900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:39:23.172 [INFO] [Thread-14900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:39:23.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-25T16:39:23.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:39:23.983 [DEBUG] [Thread-14900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:39:23.984 [DEBUG] [Thread-14900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:39:24.031 [DEBUG] [Thread-14900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:39:24.031 [DEBUG] [Thread-14900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:39:24.039 [DEBUG] [Thread-14900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:39:24.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:39:24.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-25T16:39:24.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:39:24.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:39:24.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:39:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:39:24.071 [DEBUG] [Thread-14900] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:39:30.545 [DEBUG] [Thread-14902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:45.605 [DEBUG] [Thread-14903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:39:54.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:39:54.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-25T16:39:54.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 39, 26), 28.6, 14.93, 0.0, 35.38, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:39:54.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:39:26
2025-12-25T16:39:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:39:55.071 [DEBUG] [Thread-14904] [transport.py] [_log()] starting thread (client mode): 0xb95b3280
2025-12-25T16:39:55.071 [DEBUG] [Thread-14904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:39:55.094 [DEBUG] [Thread-14904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:39:55.094 [INFO] [Thread-14904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:55.099 [DEBUG] [Thread-14904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] client lang: <none>
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] server lang: <none>
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] kex follows: False
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:39:55.100 [DEBUG] [Thread-14904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:39:55.101 [DEBUG] [Thread-14904] [transport.py] [_log()] Compression: none
2025-12-25T16:39:55.101 [DEBUG] [Thread-14904] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:39:55.119 [DEBUG] [Thread-14904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:39:55.120 [DEBUG] [Thread-14904] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:39:55.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:39:55.121 [DEBUG] [Thread-14904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:39:55.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:39:55.165 [DEBUG] [Thread-14904] [transport.py] [_log()] userauth is OK
2025-12-25T16:39:55.165 [DEBUG] [Thread-14904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:39:55.166 [DEBUG] [Thread-14904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:39:55.166 [DEBUG] [Thread-14904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:39:55.166 [DEBUG] [Thread-14904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:39:55.198 [INFO] [Thread-14904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:39:55.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:39:55.317 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:55.318 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:39:55.857 [DEBUG] [Thread-14904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:39:55.857 [DEBUG] [Thread-14904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:39:55.858 [DEBUG] [Thread-14904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:39:55.898 [DEBUG] [Thread-14904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:39:55.898 [DEBUG] [Thread-14904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:39:55.901 [DEBUG] [Thread-14904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:39:55.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:39:55.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:39:55.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:39:55.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:39:55.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:39:55.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:39:55.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:39:55.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:39:55.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:39:55.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.610478 -999.00  +26.10  30.44     20   +1.60 1 1 2 1 1   888    0 27.76 108.49 ----- 37.2 30.4 316.2 37.8 29.4 -28.1 29.4 -27.8 30.2 -25.8 30.6 -25.9
2025-12-25T16:39:55.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:39:55.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:39:55.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.610478
2025-12-25T16:39:55.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:39:55.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:39:55.926 [DEBUG] [Thread-14904] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:39:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:39:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:39:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:39:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:39:26', tmtdew=28.6, humidity=14.93, cloud=0.0, wind=35.38, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:39:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:39:56.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-25T16:39:56.021 [DEBUG] [Thread-14907] [transport.py] [_log()] starting thread (client mode): 0xb9558fa0
2025-12-25T16:39:56.022 [DEBUG] [Thread-14907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:39:56.036 [DEBUG] [Thread-14907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:39:56.036 [INFO] [Thread-14907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:39:56.043 [DEBUG] [Thread-14907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] client lang: <none>
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] server lang: <none>
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] kex follows: False
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:39:56.044 [DEBUG] [Thread-14907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:39:56.045 [DEBUG] [Thread-14907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:39:56.045 [DEBUG] [Thread-14907] [transport.py] [_log()] Compression: none
2025-12-25T16:39:56.045 [DEBUG] [Thread-14907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:39:56.103 [DEBUG] [Thread-14907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:39:56.103 [DEBUG] [Thread-14907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:39:56.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:39:56.105 [DEBUG] [Thread-14907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:39:56.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:39:56.159 [DEBUG] [Thread-14907] [transport.py] [_log()] userauth is OK
2025-12-25T16:39:56.159 [DEBUG] [Thread-14907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:39:56.159 [DEBUG] [Thread-14907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:39:56.159 [DEBUG] [Thread-14907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:39:56.159 [DEBUG] [Thread-14907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:39:56.178 [INFO] [Thread-14907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:39:56.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-25T16:39:56.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:39:56.987 [DEBUG] [Thread-14907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:39:56.987 [DEBUG] [Thread-14907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:39:57.035 [DEBUG] [Thread-14907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:39:57.035 [DEBUG] [Thread-14907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:39:57.044 [DEBUG] [Thread-14907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:39:57.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:39:57.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:39:57.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-25T16:39:57.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:39:57.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:39:57.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:39:57.081 [DEBUG] [Thread-14907] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:40:00.640 [DEBUG] [Thread-14909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:40:14.250 [DEBUG] [Thread-14910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:40:15.675 [DEBUG] [Thread-14911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:40:27.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:40:27.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:40:27.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-25T16:40:27.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 39, 58), 28.39, 15.33, 0.0, 32.52, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:40:27.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:39:58
2025-12-25T16:40:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:40:28.089 [DEBUG] [Thread-14912] [transport.py] [_log()] starting thread (client mode): 0xb6bc1150
2025-12-25T16:40:28.090 [DEBUG] [Thread-14912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:40:28.110 [DEBUG] [Thread-14912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:40:28.110 [INFO] [Thread-14912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:40:28.113 [DEBUG] [Thread-14912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:40:28.113 [DEBUG] [Thread-14912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:40:28.113 [DEBUG] [Thread-14912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] client lang: <none>
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] server lang: <none>
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] kex follows: False
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:40:28.114 [DEBUG] [Thread-14912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:40:28.115 [DEBUG] [Thread-14912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:40:28.115 [DEBUG] [Thread-14912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:40:28.115 [DEBUG] [Thread-14912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:40:28.115 [DEBUG] [Thread-14912] [transport.py] [_log()] Compression: none
2025-12-25T16:40:28.115 [DEBUG] [Thread-14912] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:40:28.132 [DEBUG] [Thread-14912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:40:28.133 [DEBUG] [Thread-14912] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:40:28.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:40:28.134 [DEBUG] [Thread-14912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:40:28.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:40:28.135 [DEBUG] [Thread-14912] [transport.py] [_log()] userauth is OK
2025-12-25T16:40:28.135 [DEBUG] [Thread-14912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:40:28.135 [DEBUG] [Thread-14912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:40:28.135 [DEBUG] [Thread-14912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:40:28.135 [DEBUG] [Thread-14912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:40:28.170 [INFO] [Thread-14912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:40:28.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:40:28.814 [DEBUG] [Thread-14912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:40:28.814 [DEBUG] [Thread-14912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:40:28.815 [DEBUG] [Thread-14912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:40:28.855 [DEBUG] [Thread-14912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:40:28.855 [DEBUG] [Thread-14912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:40:28.858 [DEBUG] [Thread-14912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:40:28.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:40:28.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:40:28.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:40:28.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:40:28.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:40:28.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:40:28.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:40:28.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:40:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:40:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.610825 -999.00  +25.70  35.29     20   +1.70 1 1 2 1 1   888    0 27.57 101.72 ----- 34.5 35.3 304.6 43.7 29.4 -29.2 29.5 -27.2 30.2 -25.8 30.6 -26.6
2025-12-25T16:40:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:40:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:40:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.610825
2025-12-25T16:40:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:40:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:40:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:40:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:40:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:40:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:39:58', tmtdew=28.39, humidity=15.33, cloud=0.0, wind=32.52, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:39:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:40:28.886 [DEBUG] [Thread-14912] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:40:28.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-25T16:40:28.983 [DEBUG] [Thread-14915] [transport.py] [_log()] starting thread (client mode): 0xb6bc1a50
2025-12-25T16:40:28.983 [DEBUG] [Thread-14915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:40:28.997 [DEBUG] [Thread-14915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:40:28.997 [INFO] [Thread-14915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:40:29.005 [DEBUG] [Thread-14915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:40:29.005 [DEBUG] [Thread-14915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:40:29.005 [DEBUG] [Thread-14915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:40:29.005 [DEBUG] [Thread-14915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] client lang: <none>
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] server lang: <none>
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] kex follows: False
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:40:29.006 [DEBUG] [Thread-14915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:40:29.007 [DEBUG] [Thread-14915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:40:29.007 [DEBUG] [Thread-14915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:40:29.007 [DEBUG] [Thread-14915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:40:29.007 [DEBUG] [Thread-14915] [transport.py] [_log()] Compression: none
2025-12-25T16:40:29.007 [DEBUG] [Thread-14915] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:40:29.063 [DEBUG] [Thread-14915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:40:29.064 [DEBUG] [Thread-14915] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:40:29.064 [DEBUG] [Thread-14915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:40:29.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:40:29.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:40:29.118 [DEBUG] [Thread-14915] [transport.py] [_log()] userauth is OK
2025-12-25T16:40:29.118 [DEBUG] [Thread-14915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:40:29.118 [DEBUG] [Thread-14915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:40:29.118 [DEBUG] [Thread-14915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:40:29.118 [DEBUG] [Thread-14915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:40:29.136 [INFO] [Thread-14915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:40:29.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-25T16:40:29.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:40:29.941 [DEBUG] [Thread-14915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:40:29.941 [DEBUG] [Thread-14915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:40:29.989 [DEBUG] [Thread-14915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:40:29.990 [DEBUG] [Thread-14915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:40:29.999 [DEBUG] [Thread-14915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:40:30.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:40:30.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:40:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:40:30.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:40:30.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:40:30.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:40:30.035 [DEBUG] [Thread-14915] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:40:30.707 [DEBUG] [Thread-14917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:40:45.751 [DEBUG] [Thread-14918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:40:55.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:40:55.460 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:41:00.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:41:00.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-25T16:41:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 40, 31), 28.8, 14.93, 0.0, 27.4, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:41:00.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:40:31
2025-12-25T16:41:00.782 [DEBUG] [Thread-14919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:41:01.031 [DEBUG] [Thread-14920] [transport.py] [_log()] starting thread (client mode): 0xb6b4f8e0
2025-12-25T16:41:01.031 [DEBUG] [Thread-14920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:41:01.051 [DEBUG] [Thread-14920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:41:01.051 [INFO] [Thread-14920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:41:01.054 [DEBUG] [Thread-14920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] client lang: <none>
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] server lang: <none>
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] kex follows: False
2025-12-25T16:41:01.055 [DEBUG] [Thread-14920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:41:01.056 [DEBUG] [Thread-14920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:41:01.056 [DEBUG] [Thread-14920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:41:01.056 [DEBUG] [Thread-14920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:41:01.056 [DEBUG] [Thread-14920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:41:01.056 [DEBUG] [Thread-14920] [transport.py] [_log()] Compression: none
2025-12-25T16:41:01.056 [DEBUG] [Thread-14920] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:41:01.076 [DEBUG] [Thread-14920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:41:01.076 [DEBUG] [Thread-14920] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:41:01.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:41:01.077 [DEBUG] [Thread-14920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:41:01.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:41:01.121 [DEBUG] [Thread-14920] [transport.py] [_log()] userauth is OK
2025-12-25T16:41:01.121 [DEBUG] [Thread-14920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:41:01.122 [DEBUG] [Thread-14920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:41:01.122 [DEBUG] [Thread-14920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:41:01.122 [DEBUG] [Thread-14920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:41:01.148 [INFO] [Thread-14920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:41:01.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:41:01.772 [DEBUG] [Thread-14920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:41:01.772 [DEBUG] [Thread-14920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:41:01.772 [DEBUG] [Thread-14920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:41:01.813 [DEBUG] [Thread-14920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:41:01.813 [DEBUG] [Thread-14920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:41:01.816 [DEBUG] [Thread-14920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:41:01.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:41:01.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:41:01.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:41:01.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:41:01.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:41:01.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:41:01.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:41:01.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:41:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:41:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.611172 -999.00  +25.70  32.39     20   +1.30 1 1 2 1 1   888    0 28.09 111.42 ----- 28.6 32.4 306.8 35.9 29.4 -28.6 29.4 -28.1 30.2 -24.7 30.6 -26.7
2025-12-25T16:41:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:41:01.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:41:01.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.611172
2025-12-25T16:41:01.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:41:01.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:41:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:41:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:41:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:41:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:40:31', tmtdew=28.8, humidity=14.93, cloud=0.0, wind=27.4, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:40:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:41:01.844 [DEBUG] [Thread-14920] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:41:01.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:41:01.940 [DEBUG] [Thread-14923] [transport.py] [_log()] starting thread (client mode): 0xb95d5b40
2025-12-25T16:41:01.940 [DEBUG] [Thread-14923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:41:01.955 [DEBUG] [Thread-14923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:41:01.955 [INFO] [Thread-14923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:01.962 [DEBUG] [Thread-14923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] client lang: <none>
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] server lang: <none>
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] kex follows: False
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] Compression: none
2025-12-25T16:41:01.963 [DEBUG] [Thread-14923] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:41:02.023 [DEBUG] [Thread-14923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:41:02.023 [DEBUG] [Thread-14923] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:41:02.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:41:02.025 [DEBUG] [Thread-14923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:41:02.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:41:02.079 [DEBUG] [Thread-14923] [transport.py] [_log()] userauth is OK
2025-12-25T16:41:02.079 [DEBUG] [Thread-14923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:41:02.079 [DEBUG] [Thread-14923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:41:02.079 [DEBUG] [Thread-14923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:41:02.079 [DEBUG] [Thread-14923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:41:02.098 [INFO] [Thread-14923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:41:02.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-25T16:41:02.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:41:02.934 [DEBUG] [Thread-14923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:41:02.934 [DEBUG] [Thread-14923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:41:02.982 [DEBUG] [Thread-14923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:41:02.982 [DEBUG] [Thread-14923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:41:02.992 [DEBUG] [Thread-14923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:41:03.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:41:03.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-25T16:41:03.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-25T16:41:03.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:41:03.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:41:03.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:41:03.028 [DEBUG] [Thread-14923] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:41:14.298 [DEBUG] [Thread-14925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:15.815 [DEBUG] [Thread-14926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:30.863 [DEBUG] [Thread-14927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:33.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:41:33.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:41:33.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-25T16:41:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 41, 3), 28.76, 14.97, 0.0, 24.37, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:41:33.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:41:03
2025-12-25T16:41:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:41:34.019 [DEBUG] [Thread-14928] [transport.py] [_log()] starting thread (client mode): 0xb95d5a50
2025-12-25T16:41:34.020 [DEBUG] [Thread-14928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:41:34.035 [DEBUG] [Thread-14928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:41:34.035 [INFO] [Thread-14928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:41:34.039 [DEBUG] [Thread-14928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:41:34.039 [DEBUG] [Thread-14928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:41:34.039 [DEBUG] [Thread-14928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:41:34.039 [DEBUG] [Thread-14928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:34.039 [DEBUG] [Thread-14928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] client lang: <none>
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] server lang: <none>
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] kex follows: False
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] Compression: none
2025-12-25T16:41:34.040 [DEBUG] [Thread-14928] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:41:34.054 [DEBUG] [Thread-14928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:41:34.055 [DEBUG] [Thread-14928] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:41:34.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:41:34.056 [DEBUG] [Thread-14928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:41:34.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:41:34.097 [DEBUG] [Thread-14928] [transport.py] [_log()] userauth is OK
2025-12-25T16:41:34.097 [DEBUG] [Thread-14928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:41:34.097 [DEBUG] [Thread-14928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:41:34.098 [DEBUG] [Thread-14928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:41:34.098 [DEBUG] [Thread-14928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:41:34.133 [INFO] [Thread-14928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:41:34.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:41:34.767 [DEBUG] [Thread-14928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:41:34.767 [DEBUG] [Thread-14928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:41:34.768 [DEBUG] [Thread-14928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:41:34.808 [DEBUG] [Thread-14928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:41:34.808 [DEBUG] [Thread-14928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:41:34.812 [DEBUG] [Thread-14928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:41:34.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:41:34.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:41:34.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:41:34.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:41:34.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:41:34.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:41:34.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:41:34.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:41:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:41:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.611519 -999.00  +25.60  23.38     20   +1.30 1 1 1 1 1   888    0 27.33 97.27 ----- 20.7 23.4 291.9 29.4 29.4 -27.7 29.4 -27.5 30.2 -26.2 30.6 -26.3
2025-12-25T16:41:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:41:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:41:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.611519
2025-12-25T16:41:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:41:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:41:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:41:34.839 [DEBUG] [Thread-14928] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:41:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:41:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:41:34.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:41:03', tmtdew=28.76, humidity=14.97, cloud=0.0, wind=24.37, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:40:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:41:34.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-25T16:41:34.933 [DEBUG] [Thread-14931] [transport.py] [_log()] starting thread (client mode): 0xb6b29ba0
2025-12-25T16:41:34.933 [DEBUG] [Thread-14931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:41:34.948 [DEBUG] [Thread-14931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:41:34.948 [INFO] [Thread-14931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] client lang: <none>
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] server lang: <none>
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] kex follows: False
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:41:34.956 [DEBUG] [Thread-14931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:41:34.957 [DEBUG] [Thread-14931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:41:34.957 [DEBUG] [Thread-14931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:41:34.957 [DEBUG] [Thread-14931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:41:34.957 [DEBUG] [Thread-14931] [transport.py] [_log()] Compression: none
2025-12-25T16:41:34.957 [DEBUG] [Thread-14931] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:41:35.015 [DEBUG] [Thread-14931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:41:35.015 [DEBUG] [Thread-14931] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:41:35.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:41:35.016 [DEBUG] [Thread-14931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:41:35.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:41:35.071 [DEBUG] [Thread-14931] [transport.py] [_log()] userauth is OK
2025-12-25T16:41:35.071 [DEBUG] [Thread-14931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:41:35.072 [DEBUG] [Thread-14931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:41:35.072 [DEBUG] [Thread-14931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:41:35.072 [DEBUG] [Thread-14931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:41:35.091 [INFO] [Thread-14931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:41: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-25T16:41:35.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:41:35.895 [DEBUG] [Thread-14931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:41:35.895 [DEBUG] [Thread-14931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:41:35.943 [DEBUG] [Thread-14931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:41:35.943 [DEBUG] [Thread-14931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:41:35.952 [DEBUG] [Thread-14931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:41:35.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:41:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:41:35.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-25T16:41:35.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:41:35.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:41:35.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:41:35.983 [DEBUG] [Thread-14931] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:41:45.901 [DEBUG] [Thread-14933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:55.599 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:41:55.600 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:00.947 [DEBUG] [Thread-14934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:05.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:42:05.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:42:05.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-25T16:42:06.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 41, 35), 28.7, 14.93, 0.0, 27.3, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:42:06.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:41:35
2025-12-25T16:42:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:42:06.953 [DEBUG] [Thread-14935] [transport.py] [_log()] starting thread (client mode): 0xb955b430
2025-12-25T16:42:06.953 [DEBUG] [Thread-14935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:42:06.973 [DEBUG] [Thread-14935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:42:06.973 [INFO] [Thread-14935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] client lang: <none>
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] server lang: <none>
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] kex follows: False
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] Compression: none
2025-12-25T16:42:06.977 [DEBUG] [Thread-14935] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:42:06.994 [DEBUG] [Thread-14935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:42:06.994 [DEBUG] [Thread-14935] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:42:06.995 [DEBUG] [Thread-14935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:42:06.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:42:06.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:42:06.997 [DEBUG] [Thread-14935] [transport.py] [_log()] userauth is OK
2025-12-25T16:42:06.998 [DEBUG] [Thread-14935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:42:06.998 [DEBUG] [Thread-14935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:42:06.998 [DEBUG] [Thread-14935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:42:06.998 [DEBUG] [Thread-14935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:42:07.034 [INFO] [Thread-14935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:42:07.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:42:07.692 [DEBUG] [Thread-14935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:42:07.692 [DEBUG] [Thread-14935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:42:07.693 [DEBUG] [Thread-14935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:42:07.734 [DEBUG] [Thread-14935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:42:07.734 [DEBUG] [Thread-14935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:42:07.736 [DEBUG] [Thread-14935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:42:07.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:42:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:42:07.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:42:07.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:42:07.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:42:07.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:42:07.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.612214 -999.00  +25.80  24.57     20   +1.50 1 1 1 1 1   888    0 26.47 79.08 ----- 23.4 24.6 310.8 27.3 29.6 -27.5 29.6 -27.5 30.5 -24.0 30.8 -25.5
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.612214
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:42:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:41:35', tmtdew=28.7, humidity=14.93, cloud=0.0, wind=27.3, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:41:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:42:07.758 [DEBUG] [Thread-14935] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:42:07.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-25T16:42:07.842 [DEBUG] [Thread-14938] [transport.py] [_log()] starting thread (client mode): 0xb6b4ffa0
2025-12-25T16:42:07.842 [DEBUG] [Thread-14938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:42:07.856 [DEBUG] [Thread-14938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:42:07.857 [INFO] [Thread-14938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] client lang: <none>
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] server lang: <none>
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] kex follows: False
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] Compression: none
2025-12-25T16:42:07.864 [DEBUG] [Thread-14938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:42:07.921 [DEBUG] [Thread-14938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:42:07.921 [DEBUG] [Thread-14938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:42:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:42:07.921 [DEBUG] [Thread-14938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:42:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:42:07.978 [DEBUG] [Thread-14938] [transport.py] [_log()] userauth is OK
2025-12-25T16:42:07.978 [DEBUG] [Thread-14938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:42:07.978 [DEBUG] [Thread-14938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:42:07.978 [DEBUG] [Thread-14938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:42:07.978 [DEBUG] [Thread-14938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:42:07.991 [INFO] [Thread-14938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:42:07.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:42:07.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:42:08.815 [DEBUG] [Thread-14938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:42:08.816 [DEBUG] [Thread-14938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:42:08.863 [DEBUG] [Thread-14938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:42:08.863 [DEBUG] [Thread-14938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:42:08.872 [DEBUG] [Thread-14938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:42:08.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:42:08.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:42:08.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-25T16:42:08.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:42:08.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:42:08.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:42:08.904 [DEBUG] [Thread-14938] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:42:14.339 [DEBUG] [Thread-14940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:15.978 [DEBUG] [Thread-14941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:31.028 [DEBUG] [Thread-14942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:38.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:42:38.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:42: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-25T16:42:39.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 42, 7), 28.17, 15.46, 0.0, 31.07, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:42:39.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:42:07
2025-12-25T16:42:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:42:39.956 [DEBUG] [Thread-14943] [transport.py] [_log()] starting thread (client mode): 0xb95d5600
2025-12-25T16:42:39.956 [DEBUG] [Thread-14943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:42:39.975 [DEBUG] [Thread-14943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:42:39.975 [INFO] [Thread-14943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] client lang: <none>
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] server lang: <none>
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] kex follows: False
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:42:39.978 [DEBUG] [Thread-14943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:42:39.979 [DEBUG] [Thread-14943] [transport.py] [_log()] Compression: none
2025-12-25T16:42:39.979 [DEBUG] [Thread-14943] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:42:39.995 [DEBUG] [Thread-14943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:42:39.995 [DEBUG] [Thread-14943] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:42:39.996 [DEBUG] [Thread-14943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:42:39.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:42:39.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:42:39.997 [DEBUG] [Thread-14943] [transport.py] [_log()] userauth is OK
2025-12-25T16:42:39.997 [DEBUG] [Thread-14943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:42:39.997 [DEBUG] [Thread-14943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:42:39.997 [DEBUG] [Thread-14943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:42:39.997 [DEBUG] [Thread-14943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:42:40.007 [INFO] [Thread-14943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:42:40.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:42:40.658 [DEBUG] [Thread-14943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:42:40.658 [DEBUG] [Thread-14943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:42:40.658 [DEBUG] [Thread-14943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:42:40.699 [DEBUG] [Thread-14943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:42:40.699 [DEBUG] [Thread-14943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:42:40.701 [DEBUG] [Thread-14943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:42:40.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:42:40.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:42:40.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:42:40.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:42:40.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:42:40.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:42:40.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.612561 -999.00  +25.90  28.02     20   +1.50 1 1 1 1 1   888    0 26.76 72.57 ----- 25.8 28.0 314.8 31.2 29.6 -28.0 29.6 -27.5 30.6 -24.9 30.9 -25.8
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.612561
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:42:40.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:42:07', tmtdew=28.17, humidity=15.46, cloud=0.0, wind=31.07, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:42:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:42:40.719 [DEBUG] [Thread-14943] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:42:40.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-25T16:42:40.803 [DEBUG] [Thread-14946] [transport.py] [_log()] starting thread (client mode): 0xb95b3820
2025-12-25T16:42:40.803 [DEBUG] [Thread-14946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:42:40.817 [DEBUG] [Thread-14946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:42:40.817 [INFO] [Thread-14946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] client lang: <none>
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] server lang: <none>
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] kex follows: False
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] Compression: none
2025-12-25T16:42:40.825 [DEBUG] [Thread-14946] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:42:40.885 [DEBUG] [Thread-14946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:42:40.885 [DEBUG] [Thread-14946] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:42:40.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:42:40.886 [DEBUG] [Thread-14946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:42:40.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:42:40.942 [DEBUG] [Thread-14946] [transport.py] [_log()] userauth is OK
2025-12-25T16:42:40.942 [DEBUG] [Thread-14946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:42:40.942 [DEBUG] [Thread-14946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:42:40.942 [DEBUG] [Thread-14946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:42:40.942 [DEBUG] [Thread-14946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:42:40.960 [INFO] [Thread-14946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:42:40.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-25T16:42:40.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:42:41.793 [DEBUG] [Thread-14946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:42:41.793 [DEBUG] [Thread-14946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:42:41.841 [DEBUG] [Thread-14946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:42:41.841 [DEBUG] [Thread-14946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:42:41.849 [DEBUG] [Thread-14946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:42:41.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:42:41.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-25T16:42:41.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-25T16:42:41.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:42:41.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:42:41.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:42:41.881 [DEBUG] [Thread-14946] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:42:46.063 [DEBUG] [Thread-14948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:55.739 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:42:55.740 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:01.119 [DEBUG] [Thread-14949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:11.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:43:11.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:43:11.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-25T16:43:12.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 42, 39), 28.04, 15.51, 0.0, 27.79, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:43:12.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:42:39
2025-12-25T16:43:12.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:43:12.926 [DEBUG] [Thread-14950] [transport.py] [_log()] starting thread (client mode): 0xb6b4f9d0
2025-12-25T16:43:12.926 [DEBUG] [Thread-14950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:43:12.947 [DEBUG] [Thread-14950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:43:12.947 [INFO] [Thread-14950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:43:12.950 [DEBUG] [Thread-14950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:43:12.950 [DEBUG] [Thread-14950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] client lang: <none>
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] server lang: <none>
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] kex follows: False
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] Compression: none
2025-12-25T16:43:12.951 [DEBUG] [Thread-14950] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:43:12.970 [DEBUG] [Thread-14950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:43:12.970 [DEBUG] [Thread-14950] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:43:12.971 [DEBUG] [Thread-14950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:43:12.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:43:12.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:43:12.972 [DEBUG] [Thread-14950] [transport.py] [_log()] userauth is OK
2025-12-25T16:43:12.972 [DEBUG] [Thread-14950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:43:12.972 [DEBUG] [Thread-14950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:43:12.972 [DEBUG] [Thread-14950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:43:12.972 [DEBUG] [Thread-14950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:43:12.992 [INFO] [Thread-14950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:43:12.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:43:13.661 [DEBUG] [Thread-14950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:43:13.661 [DEBUG] [Thread-14950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:43:13.661 [DEBUG] [Thread-14950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:43:13.703 [DEBUG] [Thread-14950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:43:13.703 [DEBUG] [Thread-14950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:43:13.705 [DEBUG] [Thread-14950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:43:13.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:43:13.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:43:13.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:43:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:43:13.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:43:13.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:43:13.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.612908 -999.00  +25.60  24.55     21   +1.60 1 1 1 1 1   888    0 26.40 70.21 ----- 26.8 24.6 319.6 34.4 29.6 -28.2 29.6 -27.6 30.6 -24.0 30.9 -25.2
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.612908
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:43:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:42:39', tmtdew=28.04, humidity=15.51, cloud=0.0, wind=27.79, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:42:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:43:13.725 [DEBUG] [Thread-14950] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:43:13.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:43:13.810 [DEBUG] [Thread-14953] [transport.py] [_log()] starting thread (client mode): 0xb955aa40
2025-12-25T16:43:13.811 [DEBUG] [Thread-14953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:43:13.826 [DEBUG] [Thread-14953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:43:13.826 [INFO] [Thread-14953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:43:13.833 [DEBUG] [Thread-14953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:43:13.833 [DEBUG] [Thread-14953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] client lang: <none>
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] server lang: <none>
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] kex follows: False
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] Compression: none
2025-12-25T16:43:13.834 [DEBUG] [Thread-14953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:43:13.891 [DEBUG] [Thread-14953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:43:13.891 [DEBUG] [Thread-14953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:43:13.892 [DEBUG] [Thread-14953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:43:13.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:43:13.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:43:13.947 [DEBUG] [Thread-14953] [transport.py] [_log()] userauth is OK
2025-12-25T16:43:13.947 [DEBUG] [Thread-14953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:43:13.947 [DEBUG] [Thread-14953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:43:13.947 [DEBUG] [Thread-14953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:43:13.947 [DEBUG] [Thread-14953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:43:13.966 [INFO] [Thread-14953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:43:13.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-25T16:43:13.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:43:14.395 [DEBUG] [Thread-14955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:14.775 [DEBUG] [Thread-14953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:43:14.775 [DEBUG] [Thread-14953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:43:14.824 [DEBUG] [Thread-14953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:43:14.824 [DEBUG] [Thread-14953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:43:14.833 [DEBUG] [Thread-14953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:43:14.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:43:14.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-25T16:43:14.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-25T16:43:14.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:43:14.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:43:14.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:43:14.866 [DEBUG] [Thread-14953] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:43:16.153 [DEBUG] [Thread-14956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:31.193 [DEBUG] [Thread-14957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:44.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:43:44.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:43:44.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-25T16:43:45.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 43, 11), 27.78, 15.79, 0.0, 37.72, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:43:45.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:43:11
2025-12-25T16:43:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:43:45.923 [DEBUG] [Thread-14958] [transport.py] [_log()] starting thread (client mode): 0xb95d4730
2025-12-25T16:43:45.923 [DEBUG] [Thread-14958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:43:45.944 [DEBUG] [Thread-14958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:43:45.944 [INFO] [Thread-14958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:43:45.947 [DEBUG] [Thread-14958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:43:45.947 [DEBUG] [Thread-14958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:43:45.947 [DEBUG] [Thread-14958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:43:45.947 [DEBUG] [Thread-14958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] client lang: <none>
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] server lang: <none>
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] kex follows: False
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] Compression: none
2025-12-25T16:43:45.948 [DEBUG] [Thread-14958] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:43:45.966 [DEBUG] [Thread-14958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:43:45.967 [DEBUG] [Thread-14958] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:43:45.967 [DEBUG] [Thread-14958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:43:45.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:43:45.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:43:45.969 [DEBUG] [Thread-14958] [transport.py] [_log()] userauth is OK
2025-12-25T16:43:45.969 [DEBUG] [Thread-14958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:43:45.969 [DEBUG] [Thread-14958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:43:45.969 [DEBUG] [Thread-14958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:43:45.969 [DEBUG] [Thread-14958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:43:45.993 [INFO] [Thread-14958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:43:45.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:43:46.230 [DEBUG] [Thread-14960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:46.644 [DEBUG] [Thread-14958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:43:46.644 [DEBUG] [Thread-14958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:43:46.645 [DEBUG] [Thread-14958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:43:46.685 [DEBUG] [Thread-14958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:43:46.685 [DEBUG] [Thread-14958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:43:46.689 [DEBUG] [Thread-14958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:43:46.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:43:46.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:43:46.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:43:46.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:43:46.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:43:46.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:43:46.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:43:46.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:43:46.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:43:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.613255 -999.00  +26.20  43.70     21   +2.10 1 1 2 1 1   888    0 26.55 71.24 ----- 42.8 43.7 311.8 47.1 29.7 -28.6 29.7 -26.7 30.6 -26.1 30.9 -26.8
2025-12-25T16:43:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:43:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:43:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.613255
2025-12-25T16:43:46.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:43:46.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:43:46.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:43:46.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:43:46.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:43:46.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:43:11', tmtdew=27.78, humidity=15.79, cloud=0.0, wind=37.72, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:43:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:43:46.718 [DEBUG] [Thread-14958] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:43:46.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-25T16:43:46.813 [DEBUG] [Thread-14962] [transport.py] [_log()] starting thread (client mode): 0xb6b280a0
2025-12-25T16:43:46.813 [DEBUG] [Thread-14962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:43:46.835 [DEBUG] [Thread-14962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:43:46.836 [INFO] [Thread-14962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:43:46.846 [DEBUG] [Thread-14962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:43:46.847 [DEBUG] [Thread-14962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] client lang: <none>
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] server lang: <none>
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] kex follows: False
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:43:46.848 [DEBUG] [Thread-14962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:43:46.849 [DEBUG] [Thread-14962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:43:46.849 [DEBUG] [Thread-14962] [transport.py] [_log()] Compression: none
2025-12-25T16:43:46.849 [DEBUG] [Thread-14962] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:43:46.916 [DEBUG] [Thread-14962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:43:46.916 [DEBUG] [Thread-14962] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:43:46.917 [DEBUG] [Thread-14962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:43:46.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:43:46.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:43:46.975 [DEBUG] [Thread-14962] [transport.py] [_log()] userauth is OK
2025-12-25T16:43:46.976 [DEBUG] [Thread-14962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:43:46.976 [DEBUG] [Thread-14962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:43:46.976 [DEBUG] [Thread-14962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:43:46.976 [DEBUG] [Thread-14962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:43:46.996 [INFO] [Thread-14962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:43:46.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-25T16:43:46.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:43:47.910 [DEBUG] [Thread-14962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:43:47.910 [DEBUG] [Thread-14962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:43:47.958 [DEBUG] [Thread-14962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:43:47.958 [DEBUG] [Thread-14962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:43:47.966 [DEBUG] [Thread-14962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:43:47.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:43:47.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:43:47.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:43:47.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:43:47.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:43:47.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:43:47.998 [DEBUG] [Thread-14962] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:43:55.881 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:43:55.882 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:01.264 [DEBUG] [Thread-14964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:14.428 [DEBUG] [Thread-14965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:16.324 [DEBUG] [Thread-14966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:18.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:44:18.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:44:18.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:44:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 44, 15), 27.41, 16.48, 0.0, 40.49, 25.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:44:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:44:15
2025-12-25T16:44:18.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:44:19.001 [DEBUG] [Thread-14967] [transport.py] [_log()] starting thread (client mode): 0xb95d5870
2025-12-25T16:44:19.001 [DEBUG] [Thread-14967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:44:19.022 [DEBUG] [Thread-14967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:44:19.022 [INFO] [Thread-14967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] client lang: <none>
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] server lang: <none>
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] kex follows: False
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:44:19.025 [DEBUG] [Thread-14967] [transport.py] [_log()] Compression: none
2025-12-25T16:44:19.026 [DEBUG] [Thread-14967] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:44:19.045 [DEBUG] [Thread-14967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:44:19.045 [DEBUG] [Thread-14967] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:44:19.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:44:19.046 [DEBUG] [Thread-14967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:44:19.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:44:19.049 [DEBUG] [Thread-14967] [transport.py] [_log()] userauth is OK
2025-12-25T16:44:19.049 [DEBUG] [Thread-14967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:44:19.049 [DEBUG] [Thread-14967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:44:19.049 [DEBUG] [Thread-14967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:44:19.049 [DEBUG] [Thread-14967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:44:19.084 [INFO] [Thread-14967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:44:19.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:44:19.723 [DEBUG] [Thread-14967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:44:19.724 [DEBUG] [Thread-14967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:44:19.724 [DEBUG] [Thread-14967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:44:19.765 [DEBUG] [Thread-14967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:44:19.765 [DEBUG] [Thread-14967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:44:19.769 [DEBUG] [Thread-14967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:44:19.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:44:19.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:44:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:44:19.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:44:19.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:44:19.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:44:19.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:44:19.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.613603 -999.00  +25.50  36.32     22   +2.20 1 1 2 1 1   888    0 25.94 62.43 ----- 34.9 36.3 308.6 51.1 29.5 -27.7 29.5 -27.9 30.5 -25.0 30.8 -26.2
2025-12-25T16:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:44:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.613603
2025-12-25T16:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:44:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:44:15', tmtdew=27.41, humidity=16.48, cloud=0.0, wind=40.49, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:43:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:44:19.796 [DEBUG] [Thread-14967] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:44:19.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-25T16:44:19.888 [DEBUG] [Thread-14970] [transport.py] [_log()] starting thread (client mode): 0xb6b001f0
2025-12-25T16:44:19.888 [DEBUG] [Thread-14970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:44:19.902 [DEBUG] [Thread-14970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:44:19.902 [INFO] [Thread-14970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:44:19.910 [DEBUG] [Thread-14970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:44:19.910 [DEBUG] [Thread-14970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:44:19.910 [DEBUG] [Thread-14970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:44:19.910 [DEBUG] [Thread-14970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:19.910 [DEBUG] [Thread-14970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:19.910 [DEBUG] [Thread-14970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] client lang: <none>
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] server lang: <none>
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] kex follows: False
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] Compression: none
2025-12-25T16:44:19.911 [DEBUG] [Thread-14970] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:44:19.973 [DEBUG] [Thread-14970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:44:19.974 [DEBUG] [Thread-14970] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:44:19.975 [DEBUG] [Thread-14970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:44:19.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:44:19.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:44:20.031 [DEBUG] [Thread-14970] [transport.py] [_log()] userauth is OK
2025-12-25T16:44:20.031 [DEBUG] [Thread-14970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:44:20.032 [DEBUG] [Thread-14970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:44:20.032 [DEBUG] [Thread-14970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:44:20.032 [DEBUG] [Thread-14970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:44:20.055 [INFO] [Thread-14970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:44:20.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-25T16:44:20.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:44:20.895 [DEBUG] [Thread-14970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:44:20.895 [DEBUG] [Thread-14970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:44:20.944 [DEBUG] [Thread-14970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:44:20.944 [DEBUG] [Thread-14970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:44:20.952 [DEBUG] [Thread-14970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:44:20.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:44:20.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-25T16:44:20.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-25T16:44:20.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:44:20.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:44:20.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:44:20.990 [DEBUG] [Thread-14970] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:44:31.356 [DEBUG] [Thread-14972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:46.401 [DEBUG] [Thread-14973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:44:50.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:44:50.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-25T16:44:51.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 44, 47), 27.54, 16.43, 0.0, 35.15, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:44:51.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:44:47
2025-12-25T16:44:51.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:44:51.959 [DEBUG] [Thread-14974] [transport.py] [_log()] starting thread (client mode): 0xb6b2b700
2025-12-25T16:44:51.959 [DEBUG] [Thread-14974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:44:51.980 [DEBUG] [Thread-14974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:44:51.980 [INFO] [Thread-14974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] client lang: <none>
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] server lang: <none>
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] kex follows: False
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] Compression: none
2025-12-25T16:44:51.983 [DEBUG] [Thread-14974] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:44:52.001 [DEBUG] [Thread-14974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:44:52.001 [DEBUG] [Thread-14974] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:44:52.002 [DEBUG] [Thread-14974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:44:52.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:44:52.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:44:52.045 [DEBUG] [Thread-14974] [transport.py] [_log()] userauth is OK
2025-12-25T16:44:52.045 [DEBUG] [Thread-14974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:44:52.046 [DEBUG] [Thread-14974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:44:52.046 [DEBUG] [Thread-14974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:44:52.046 [DEBUG] [Thread-14974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:44:52.073 [INFO] [Thread-14974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:44:52.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:44:52.730 [DEBUG] [Thread-14974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:44:52.730 [DEBUG] [Thread-14974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:44:52.731 [DEBUG] [Thread-14974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:44:52.771 [DEBUG] [Thread-14974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:44:52.771 [DEBUG] [Thread-14974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:44:52.774 [DEBUG] [Thread-14974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:44:52.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:44:52.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:44:52.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:44:52.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:44:52.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:44:52.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:44:52.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:44:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:44:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:44:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.613950 -999.00  +25.90  36.40     21   +2.30 1 1 2 1 1   888    0 25.95 58.88 ----- 35.3 36.4 309.0 44.6 29.5 -28.9 29.6 -28.2 30.4 -24.5 30.8 -26.8
2025-12-25T16:44:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:44:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:44:52.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.613950
2025-12-25T16:44:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:44:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:44:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:44:52.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:44:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:44:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:44:47', tmtdew=27.54, humidity=16.43, cloud=0.0, wind=35.15, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:44:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:44:52.801 [DEBUG] [Thread-14974] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:44:52.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:44:52.895 [DEBUG] [Thread-14977] [transport.py] [_log()] starting thread (client mode): 0xb6b29810
2025-12-25T16:44:52.895 [DEBUG] [Thread-14977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:44:52.910 [DEBUG] [Thread-14977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:44:52.911 [INFO] [Thread-14977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:44:52.918 [DEBUG] [Thread-14977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:44:52.918 [DEBUG] [Thread-14977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:44:52.918 [DEBUG] [Thread-14977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] client lang: <none>
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] server lang: <none>
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] kex follows: False
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] Compression: none
2025-12-25T16:44:52.919 [DEBUG] [Thread-14977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:44:52.983 [DEBUG] [Thread-14977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:44:52.983 [DEBUG] [Thread-14977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:44:52.984 [DEBUG] [Thread-14977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:44:52.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:44:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:44:53.039 [DEBUG] [Thread-14977] [transport.py] [_log()] userauth is OK
2025-12-25T16:44:53.039 [DEBUG] [Thread-14977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:44:53.040 [DEBUG] [Thread-14977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:44:53.040 [DEBUG] [Thread-14977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:44:53.040 [DEBUG] [Thread-14977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:44:53.059 [INFO] [Thread-14977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:44:53.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-25T16:44:53.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:44:53.908 [DEBUG] [Thread-14977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:44:53.909 [DEBUG] [Thread-14977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:44:53.957 [DEBUG] [Thread-14977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:44:53.957 [DEBUG] [Thread-14977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:44:53.966 [DEBUG] [Thread-14977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:44:53.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:44:53.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-25T16:44:53.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-25T16:44:53.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:44:53.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:44:53.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:44:54.002 [DEBUG] [Thread-14977] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:44:56.020 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:44:56.021 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:01.436 [DEBUG] [Thread-14979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:14.456 [DEBUG] [Thread-14980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:16.482 [DEBUG] [Thread-14981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:45:24.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:45:24.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:45:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 45, 19), 27.73, 16.21, 0.0, 38.41, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:45:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:45:19
2025-12-25T16:45:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:45:25.008 [DEBUG] [Thread-14982] [transport.py] [_log()] starting thread (client mode): 0xb95b3b80
2025-12-25T16:45:25.008 [DEBUG] [Thread-14982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:45:25.028 [DEBUG] [Thread-14982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:45:25.028 [INFO] [Thread-14982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:45:25.031 [DEBUG] [Thread-14982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:45:25.031 [DEBUG] [Thread-14982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:45:25.031 [DEBUG] [Thread-14982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] client lang: <none>
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] server lang: <none>
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] kex follows: False
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:45:25.032 [DEBUG] [Thread-14982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:45:25.033 [DEBUG] [Thread-14982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:45:25.033 [DEBUG] [Thread-14982] [transport.py] [_log()] Compression: none
2025-12-25T16:45:25.033 [DEBUG] [Thread-14982] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:45:25.053 [DEBUG] [Thread-14982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:45:25.053 [DEBUG] [Thread-14982] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:45:25.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:45:25.054 [DEBUG] [Thread-14982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:45:25.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:45:25.056 [DEBUG] [Thread-14982] [transport.py] [_log()] userauth is OK
2025-12-25T16:45:25.057 [DEBUG] [Thread-14982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:45:25.057 [DEBUG] [Thread-14982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:45:25.057 [DEBUG] [Thread-14982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:45:25.057 [DEBUG] [Thread-14982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:45:25.081 [INFO] [Thread-14982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:45:25.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:45:25.725 [DEBUG] [Thread-14982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:45:25.725 [DEBUG] [Thread-14982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:45:25.726 [DEBUG] [Thread-14982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:45:25.767 [DEBUG] [Thread-14982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:45:25.767 [DEBUG] [Thread-14982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:45:25.769 [DEBUG] [Thread-14982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:45:25.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:45:25.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:45:25.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:45:25.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:45:25.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:45:25.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:45:25.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:45:25.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:45:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:45:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.614297 -999.00  +25.80  32.26     21   +2.30 1 1 2 1 1   888    0 26.02 54.77 ----- 29.7 32.3 313.2 42.7 29.5 -27.8 29.5 -27.7 30.4 -24.7 30.8 -26.7
2025-12-25T16:45:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:45:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:45:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.614297
2025-12-25T16:45:25.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:45:25.794 [DEBUG] [Thread-14982] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:45:25.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:45:25.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:45:25.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:45:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:45:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:45:19', tmtdew=27.73, humidity=16.21, cloud=0.0, wind=38.41, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:44:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:45:25.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-25T16:45:25.895 [DEBUG] [Thread-14985] [transport.py] [_log()] starting thread (client mode): 0xb957b3d0
2025-12-25T16:45:25.895 [DEBUG] [Thread-14985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:45:25.910 [DEBUG] [Thread-14985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:45:25.910 [INFO] [Thread-14985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:45:25.917 [DEBUG] [Thread-14985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:45:25.917 [DEBUG] [Thread-14985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:45:25.917 [DEBUG] [Thread-14985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] client lang: <none>
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] server lang: <none>
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] kex follows: False
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] Compression: none
2025-12-25T16:45:25.918 [DEBUG] [Thread-14985] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:45:25.974 [DEBUG] [Thread-14985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:45:25.975 [DEBUG] [Thread-14985] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:45:25.976 [DEBUG] [Thread-14985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:45:25.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:45:25.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:45:26.031 [DEBUG] [Thread-14985] [transport.py] [_log()] userauth is OK
2025-12-25T16:45:26.031 [DEBUG] [Thread-14985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:45:26.031 [DEBUG] [Thread-14985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:45:26.031 [DEBUG] [Thread-14985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:45:26.031 [DEBUG] [Thread-14985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:45:26.056 [INFO] [Thread-14985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:45:26.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-25T16:45:26.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:45:26.861 [DEBUG] [Thread-14985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:45:26.862 [DEBUG] [Thread-14985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:45:26.910 [DEBUG] [Thread-14985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:45:26.910 [DEBUG] [Thread-14985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:45:26.920 [DEBUG] [Thread-14985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:45:26.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:45: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')
2025-12-25T16:45:26.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-25T16:45:26.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:45:26.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:45:26.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:45:26.956 [DEBUG] [Thread-14985] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:45:31.513 [DEBUG] [Thread-14987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:46.569 [DEBUG] [Thread-14988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:56.159 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:56.160 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:45:56.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:45:56.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:45:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:45:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 45, 51), 27.4, 16.04, 0.0, 35.64, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:45:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:45:51
2025-12-25T16:45:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:45:57.963 [DEBUG] [Thread-14989] [transport.py] [_log()] starting thread (client mode): 0xb9559120
2025-12-25T16:45:57.963 [DEBUG] [Thread-14989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:45:57.985 [DEBUG] [Thread-14989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:45:57.985 [INFO] [Thread-14989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:57.988 [DEBUG] [Thread-14989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] client lang: <none>
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] server lang: <none>
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] kex follows: False
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] Compression: none
2025-12-25T16:45:57.989 [DEBUG] [Thread-14989] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:45:58.007 [DEBUG] [Thread-14989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:45:58.007 [DEBUG] [Thread-14989] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:45:58.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:45:58.009 [DEBUG] [Thread-14989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:45:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:45:58.010 [DEBUG] [Thread-14989] [transport.py] [_log()] userauth is OK
2025-12-25T16:45:58.010 [DEBUG] [Thread-14989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:45:58.011 [DEBUG] [Thread-14989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:45:58.011 [DEBUG] [Thread-14989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:45:58.011 [DEBUG] [Thread-14989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:45:58.037 [INFO] [Thread-14989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:45:58.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:45:58.660 [DEBUG] [Thread-14989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:45:58.660 [DEBUG] [Thread-14989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:45:58.661 [DEBUG] [Thread-14989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:45:58.701 [DEBUG] [Thread-14989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:45:58.701 [DEBUG] [Thread-14989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:45:58.705 [DEBUG] [Thread-14989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:45:58.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:45:58.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:45:58.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:45:58.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:45:58.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:45:58.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:45:58.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:45:58.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:45:58.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:45:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.614644 -999.00  +25.90  45.68     21   +2.20 1 1 2 1 1   888    0 25.94 49.34 ----- 35.7 45.7 309.6 50.8 29.4 -28.4 29.5 -27.9 30.4 -24.3 30.6 -26.1
2025-12-25T16:45:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:45:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:45:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.614644
2025-12-25T16:45:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:45:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:45:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:45:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:45:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:45:58.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:45:51', tmtdew=27.4, humidity=16.04, cloud=0.0, wind=35.64, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:45:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:45:58.731 [DEBUG] [Thread-14989] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:45:58.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:45:58.826 [DEBUG] [Thread-14992] [transport.py] [_log()] starting thread (client mode): 0xb95b34c0
2025-12-25T16:45:58.827 [DEBUG] [Thread-14992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:45:58.844 [DEBUG] [Thread-14992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:45:58.844 [INFO] [Thread-14992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:45:58.851 [DEBUG] [Thread-14992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] client lang: <none>
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] server lang: <none>
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] kex follows: False
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:45:58.852 [DEBUG] [Thread-14992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:45:58.853 [DEBUG] [Thread-14992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:45:58.853 [DEBUG] [Thread-14992] [transport.py] [_log()] Compression: none
2025-12-25T16:45:58.853 [DEBUG] [Thread-14992] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:45:58.911 [DEBUG] [Thread-14992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:45:58.912 [DEBUG] [Thread-14992] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:45:58.912 [DEBUG] [Thread-14992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:45:58.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:45:58.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:45:58.967 [DEBUG] [Thread-14992] [transport.py] [_log()] userauth is OK
2025-12-25T16:45:58.967 [DEBUG] [Thread-14992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:45:58.967 [DEBUG] [Thread-14992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:45:58.967 [DEBUG] [Thread-14992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:45:58.967 [DEBUG] [Thread-14992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:45:58.986 [INFO] [Thread-14992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:45:58.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:45:58.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:45:59.848 [DEBUG] [Thread-14992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:45:59.849 [DEBUG] [Thread-14992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:45:59.897 [DEBUG] [Thread-14992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:45:59.897 [DEBUG] [Thread-14992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:45:59.906 [DEBUG] [Thread-14992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:45:59.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:45:59.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-25T16:45:59.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-25T16:45:59.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:45:59.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:45:59.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:45:59.943 [DEBUG] [Thread-14992] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:46:01.602 [DEBUG] [Thread-14994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:46:14.504 [DEBUG] [Thread-14995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:46:16.646 [DEBUG] [Thread-14996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:46:29.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:46:29.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:46:29.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:46:30.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 46, 23), 27.55, 15.89, 0.0, 33.33, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:46:30.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:46:23
2025-12-25T16:46:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:46:30.975 [DEBUG] [Thread-14997] [transport.py] [_log()] starting thread (client mode): 0xb95d5db0
2025-12-25T16:46:30.975 [DEBUG] [Thread-14997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:46:30.995 [DEBUG] [Thread-14997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:46:30.995 [INFO] [Thread-14997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:46:30.998 [DEBUG] [Thread-14997] [transport.py] [_log()] client lang: <none>
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] server lang: <none>
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] kex follows: False
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] Compression: none
2025-12-25T16:46:30.999 [DEBUG] [Thread-14997] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:46:31.016 [DEBUG] [Thread-14997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:46:31.016 [DEBUG] [Thread-14997] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:46:31.016 [DEBUG] [Thread-14997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:46:31.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:46:31.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:46:31.017 [DEBUG] [Thread-14997] [transport.py] [_log()] userauth is OK
2025-12-25T16:46:31.017 [DEBUG] [Thread-14997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:46:31.017 [DEBUG] [Thread-14997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:46:31.017 [DEBUG] [Thread-14997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:46:31.017 [DEBUG] [Thread-14997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:46:31.026 [INFO] [Thread-14997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:46:31.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:46:31.681 [DEBUG] [Thread-14999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:46:31.690 [DEBUG] [Thread-14997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:46:31.690 [DEBUG] [Thread-14997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:46:31.690 [DEBUG] [Thread-14997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:46:31.731 [DEBUG] [Thread-14997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:46:31.731 [DEBUG] [Thread-14997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:46:31.734 [DEBUG] [Thread-14997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:46:31.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:46:31.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:46:31.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:46:31.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:46:31.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:46:31.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:46:31.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.614991 -999.00  +26.10  32.33     21   +2.30 1 1 2 1 1   888    0 26.04 45.66 ----- 33.3 32.3 307.2 40.7 29.5 -27.6 29.5 -28.0 30.4 -27.2 30.7 -26.1
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.614991
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:46:31.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:46:23', tmtdew=27.55, humidity=15.89, cloud=0.0, wind=33.33, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:45:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:46:31.755 [DEBUG] [Thread-14997] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:46:31.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-25T16:46:31.838 [DEBUG] [Thread-15001] [transport.py] [_log()] starting thread (client mode): 0xb6b02c50
2025-12-25T16:46:31.838 [DEBUG] [Thread-15001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:46:31.853 [DEBUG] [Thread-15001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:46:31.853 [INFO] [Thread-15001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] client lang: <none>
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] server lang: <none>
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] kex follows: False
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] Compression: none
2025-12-25T16:46:31.861 [DEBUG] [Thread-15001] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:46:31.917 [DEBUG] [Thread-15001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:46:31.917 [DEBUG] [Thread-15001] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:46:31.917 [DEBUG] [Thread-15001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:46:31.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:46:31.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:46:31.974 [DEBUG] [Thread-15001] [transport.py] [_log()] userauth is OK
2025-12-25T16:46:31.974 [DEBUG] [Thread-15001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:46:31.974 [DEBUG] [Thread-15001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:46:31.974 [DEBUG] [Thread-15001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:46:31.974 [DEBUG] [Thread-15001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:46:31.992 [INFO] [Thread-15001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:46:31.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:46:31.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:46:32.815 [DEBUG] [Thread-15001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:46:32.815 [DEBUG] [Thread-15001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:46:32.862 [DEBUG] [Thread-15001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:46:32.862 [DEBUG] [Thread-15001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:46:32.871 [DEBUG] [Thread-15001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:46:32.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:46:32.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-25T16:46:32.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-25T16:46:32.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:46:32.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:46:32.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:46:32.903 [DEBUG] [Thread-15001] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:46:46.711 [DEBUG] [Thread-15003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:46:56.301 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:46:56.302 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:01.758 [DEBUG] [Thread-15004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:47:02.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:47:02.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:47:03.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 46, 55), 27.18, 16.53, 0.0, 30.6, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:47:03.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:46:55
2025-12-25T16:47:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:47:03.900 [DEBUG] [Thread-15005] [transport.py] [_log()] starting thread (client mode): 0xb95912a0
2025-12-25T16:47:03.900 [DEBUG] [Thread-15005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:47:03.910 [DEBUG] [Thread-15005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:47:03.910 [INFO] [Thread-15005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] client lang: <none>
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] server lang: <none>
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] kex follows: False
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] Compression: none
2025-12-25T16:47:03.913 [DEBUG] [Thread-15005] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:47:03.925 [DEBUG] [Thread-15005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:47:03.925 [DEBUG] [Thread-15005] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:47:03.925 [DEBUG] [Thread-15005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:47:03.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:47:03.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:47:03.926 [DEBUG] [Thread-15005] [transport.py] [_log()] userauth is OK
2025-12-25T16:47:03.927 [DEBUG] [Thread-15005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:47:03.927 [DEBUG] [Thread-15005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:47:03.927 [DEBUG] [Thread-15005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:47:03.927 [DEBUG] [Thread-15005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:47:03.948 [INFO] [Thread-15005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:47:03.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:47:04.602 [DEBUG] [Thread-15005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:47:04.602 [DEBUG] [Thread-15005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:47:04.603 [DEBUG] [Thread-15005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:47:04.643 [DEBUG] [Thread-15005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:47:04.643 [DEBUG] [Thread-15005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:47:04.647 [DEBUG] [Thread-15005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:47:04.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:47:04.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:47:04.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:47:04.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:47:04.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:47:04.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:47:04.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:47:04.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:47:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:47:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.615339 -999.00  +25.80  24.61     21   +2.10 1 1 1 1 1   888    0 25.25 41.09 ----- 27.8 24.6 313.6 36.7 29.4 -29.0 29.5 -28.7 30.4 -25.0 30.7 -26.5
2025-12-25T16:47:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:47:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:47:04.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.615339
2025-12-25T16:47:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:47:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:47:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:47:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:47:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:47:04.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:46:55', tmtdew=27.18, humidity=16.53, cloud=0.0, wind=30.6, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:46:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:47:04.679 [DEBUG] [Thread-15005] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:47:04.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-25T16:47:04.772 [DEBUG] [Thread-15008] [transport.py] [_log()] starting thread (client mode): 0xb6bc3d60
2025-12-25T16:47:04.772 [DEBUG] [Thread-15008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:47:04.787 [DEBUG] [Thread-15008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:47:04.787 [INFO] [Thread-15008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:47:04.795 [DEBUG] [Thread-15008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:47:04.795 [DEBUG] [Thread-15008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:47:04.796 [DEBUG] [Thread-15008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] client lang: <none>
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] server lang: <none>
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] kex follows: False
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] Compression: none
2025-12-25T16:47:04.797 [DEBUG] [Thread-15008] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:47:04.855 [DEBUG] [Thread-15008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:47:04.855 [DEBUG] [Thread-15008] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:47:04.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:47:04.856 [DEBUG] [Thread-15008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:47:04.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:47:04.911 [DEBUG] [Thread-15008] [transport.py] [_log()] userauth is OK
2025-12-25T16:47:04.911 [DEBUG] [Thread-15008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:47:04.911 [DEBUG] [Thread-15008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:47:04.911 [DEBUG] [Thread-15008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:47:04.911 [DEBUG] [Thread-15008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:47:04.929 [INFO] [Thread-15008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:47:04.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:47:04.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:47:05.799 [DEBUG] [Thread-15008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:47:05.799 [DEBUG] [Thread-15008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:47:05.847 [DEBUG] [Thread-15008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:47:05.847 [DEBUG] [Thread-15008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:47:05.856 [DEBUG] [Thread-15008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:47:05.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:47:05.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:47:05.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:47:05.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:47:05.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:47:05.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:47:05.895 [DEBUG] [Thread-15008] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:47:14.546 [DEBUG] [Thread-15010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:16.789 [DEBUG] [Thread-15011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:31.840 [DEBUG] [Thread-15012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:47:35.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:47:35.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-25T16:47:36.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 47, 27), 27.14, 16.54, 0.0, 33.26, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:47:36.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:47:27
2025-12-25T16:47:36.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:47:36.891 [DEBUG] [Thread-15013] [transport.py] [_log()] starting thread (client mode): 0xb955a080
2025-12-25T16:47:36.891 [DEBUG] [Thread-15013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:47:36.913 [DEBUG] [Thread-15013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:47:36.913 [INFO] [Thread-15013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] client lang: <none>
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] server lang: <none>
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] kex follows: False
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:47:36.916 [DEBUG] [Thread-15013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:47:36.917 [DEBUG] [Thread-15013] [transport.py] [_log()] Compression: none
2025-12-25T16:47:36.917 [DEBUG] [Thread-15013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:47:36.939 [DEBUG] [Thread-15013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:47:36.939 [DEBUG] [Thread-15013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:47:36.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:47:36.940 [DEBUG] [Thread-15013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:47:36.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:47:36.942 [DEBUG] [Thread-15013] [transport.py] [_log()] userauth is OK
2025-12-25T16:47:36.943 [DEBUG] [Thread-15013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:47:36.943 [DEBUG] [Thread-15013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:47:36.943 [DEBUG] [Thread-15013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:47:36.943 [DEBUG] [Thread-15013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:47:36.966 [INFO] [Thread-15013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:47:36.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:47:37.604 [DEBUG] [Thread-15013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:47:37.605 [DEBUG] [Thread-15013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:47:37.605 [DEBUG] [Thread-15013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:47:37.646 [DEBUG] [Thread-15013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:47:37.646 [DEBUG] [Thread-15013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:47:37.649 [DEBUG] [Thread-15013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:47:37.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:47:37.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:47:37.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:47:37.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:47:37.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:47:37.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:47:37.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:47:37.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:47:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:47:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.616033 -999.00  +25.70  39.37     21   +2.20 1 1 2 1 1   888    0 24.90 30.16 ----- 34.2 39.4 315.6 44.4 29.4 -28.1 29.4 -27.4 30.3 -28.4 30.7 -26.0
2025-12-25T16:47:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:47:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:47:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.616033
2025-12-25T16:47:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:47:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:47:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:47:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:47:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:47:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:47:27', tmtdew=27.14, humidity=16.54, cloud=0.0, wind=33.26, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:47:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:47:37.676 [DEBUG] [Thread-15013] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:47:37.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-25T16:47:37.772 [DEBUG] [Thread-15016] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-25T16:47:37.772 [DEBUG] [Thread-15016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:47:37.787 [DEBUG] [Thread-15016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:47:37.787 [INFO] [Thread-15016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:47:37.794 [DEBUG] [Thread-15016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:47:37.795 [DEBUG] [Thread-15016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] client lang: <none>
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] server lang: <none>
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] kex follows: False
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:47:37.796 [DEBUG] [Thread-15016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:47:37.797 [DEBUG] [Thread-15016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:47:37.797 [DEBUG] [Thread-15016] [transport.py] [_log()] Compression: none
2025-12-25T16:47:37.797 [DEBUG] [Thread-15016] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:47:37.856 [DEBUG] [Thread-15016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:47:37.856 [DEBUG] [Thread-15016] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:47:37.857 [DEBUG] [Thread-15016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:47:37.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:47:37.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:47:37.915 [DEBUG] [Thread-15016] [transport.py] [_log()] userauth is OK
2025-12-25T16:47:37.915 [DEBUG] [Thread-15016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:47:37.915 [DEBUG] [Thread-15016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:47:37.915 [DEBUG] [Thread-15016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:47:37.916 [DEBUG] [Thread-15016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:47:37.940 [INFO] [Thread-15016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:47:37.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-25T16:47:37.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:47:38.745 [DEBUG] [Thread-15016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:47:38.745 [DEBUG] [Thread-15016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:47:38.793 [DEBUG] [Thread-15016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:47:38.793 [DEBUG] [Thread-15016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:47:38.802 [DEBUG] [Thread-15016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:47:38.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:47:38.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:47:38.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-25T16:47:38.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:47:38.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:47:38.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:47:38.839 [DEBUG] [Thread-15016] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:47:46.877 [DEBUG] [Thread-15018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:56.443 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:47:56.444 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:01.924 [DEBUG] [Thread-15019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:08.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:48:08.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:48:08.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:48:09.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 47, 59), 28.13, 15.74, 0.0, 31.73, 25.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:48:09.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:47:59
2025-12-25T16:48:09.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:48:09.826 [DEBUG] [Thread-15020] [transport.py] [_log()] starting thread (client mode): 0xb6b02dd0
2025-12-25T16:48:09.826 [DEBUG] [Thread-15020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:48:09.841 [DEBUG] [Thread-15020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:48:09.841 [INFO] [Thread-15020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] client lang: <none>
2025-12-25T16:48:09.844 [DEBUG] [Thread-15020] [transport.py] [_log()] server lang: <none>
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] kex follows: False
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] Compression: none
2025-12-25T16:48:09.845 [DEBUG] [Thread-15020] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:48:09.860 [DEBUG] [Thread-15020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:48:09.861 [DEBUG] [Thread-15020] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:48:09.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:48:09.861 [DEBUG] [Thread-15020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:48:09.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:48:09.863 [DEBUG] [Thread-15020] [transport.py] [_log()] userauth is OK
2025-12-25T16:48:09.864 [DEBUG] [Thread-15020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:48:09.864 [DEBUG] [Thread-15020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:48:09.864 [DEBUG] [Thread-15020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:48:09.864 [DEBUG] [Thread-15020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:48:09.887 [INFO] [Thread-15020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:48:09.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:48:10.537 [DEBUG] [Thread-15020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:48:10.538 [DEBUG] [Thread-15020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:48:10.538 [DEBUG] [Thread-15020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:48:10.579 [DEBUG] [Thread-15020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:48:10.579 [DEBUG] [Thread-15020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:48:10.582 [DEBUG] [Thread-15020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:48:10.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:48:10.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:48:10.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:48:10.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:48:10.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:48:10.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:48:10.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:48:10.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:48:10.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:48:10.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.616380 -999.00  +25.50  37.85     21   +1.60 1 1 2 1 1   888    0 24.85 23.24 ----- 33.9 37.9 292.0 45.6 29.3 -29.5 29.5 -28.9 30.4 -25.9 30.6 -27.5
2025-12-25T16:48:10.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:48:10.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:48:10.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.616380
2025-12-25T16:48:10.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:48:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:48:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:48:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:48:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:48:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:47:59', tmtdew=28.13, humidity=15.74, cloud=0.0, wind=31.73, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:47:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:48:10.611 [DEBUG] [Thread-15020] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:48:10.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:48:10.705 [DEBUG] [Thread-15023] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T16:48:10.705 [DEBUG] [Thread-15023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:48:10.721 [DEBUG] [Thread-15023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:48:10.721 [INFO] [Thread-15023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:48:10.729 [DEBUG] [Thread-15023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:48:10.729 [DEBUG] [Thread-15023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] client lang: <none>
2025-12-25T16:48:10.730 [DEBUG] [Thread-15023] [transport.py] [_log()] server lang: <none>
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] kex follows: False
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:48:10.731 [DEBUG] [Thread-15023] [transport.py] [_log()] Compression: none
2025-12-25T16:48:10.732 [DEBUG] [Thread-15023] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:48:10.787 [DEBUG] [Thread-15023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:48:10.787 [DEBUG] [Thread-15023] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:48:10.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:48:10.789 [DEBUG] [Thread-15023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:48:10.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:48:10.843 [DEBUG] [Thread-15023] [transport.py] [_log()] userauth is OK
2025-12-25T16:48:10.844 [DEBUG] [Thread-15023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:48:10.844 [DEBUG] [Thread-15023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:48:10.844 [DEBUG] [Thread-15023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:48:10.844 [DEBUG] [Thread-15023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:48:10.863 [INFO] [Thread-15023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16: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-25T16:48:10.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:48:11.690 [DEBUG] [Thread-15023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:48:11.690 [DEBUG] [Thread-15023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:48:11.738 [DEBUG] [Thread-15023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:48:11.738 [DEBUG] [Thread-15023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:48:11.747 [DEBUG] [Thread-15023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:48:11.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:48:11.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-25T16:48:11.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-25T16:48:11.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:48:11.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:48:11.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:48:11.784 [DEBUG] [Thread-15023] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:48:14.585 [DEBUG] [Thread-15025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:16.957 [DEBUG] [Thread-15026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:32.010 [DEBUG] [Thread-15027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:41.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:48:41.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:48:41.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-25T16:48:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 48, 31), 28.28, 15.58, 0.0, 30.51, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:48:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:48:31
2025-12-25T16:48:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:48:42.770 [DEBUG] [Thread-15028] [transport.py] [_log()] starting thread (client mode): 0xb9593760
2025-12-25T16:48:42.770 [DEBUG] [Thread-15028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:48:42.791 [DEBUG] [Thread-15028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:48:42.791 [INFO] [Thread-15028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:48:42.794 [DEBUG] [Thread-15028] [transport.py] [_log()] client lang: <none>
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] server lang: <none>
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] kex follows: False
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] Compression: none
2025-12-25T16:48:42.795 [DEBUG] [Thread-15028] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:48:42.812 [DEBUG] [Thread-15028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:48:42.813 [DEBUG] [Thread-15028] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:48:42.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:48:42.814 [DEBUG] [Thread-15028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:48:42.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:48:42.816 [DEBUG] [Thread-15028] [transport.py] [_log()] userauth is OK
2025-12-25T16:48:42.816 [DEBUG] [Thread-15028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:48:42.817 [DEBUG] [Thread-15028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:48:42.817 [DEBUG] [Thread-15028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:48:42.817 [DEBUG] [Thread-15028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:48:42.836 [INFO] [Thread-15028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:48:42.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:48:43.472 [DEBUG] [Thread-15028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:48:43.472 [DEBUG] [Thread-15028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:48:43.473 [DEBUG] [Thread-15028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:48:43.513 [DEBUG] [Thread-15028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:48:43.513 [DEBUG] [Thread-15028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:48:43.516 [DEBUG] [Thread-15028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:48:43.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:48:43.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:48:43.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:48:43.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:48:43.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:48:43.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:48:43.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:48:43.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:48:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:48:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.616728 -999.00  +25.80  26.14     21   +1.70 1 1 1 1 1   888    0 25.04 18.61 ----- 27.5 26.1 307.2 40.9 29.4 -27.9 29.4 -27.5 30.3 -26.8 30.6 -26.3
2025-12-25T16:48:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:48:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:48:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.616728
2025-12-25T16:48:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:48:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:48:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:48:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:48:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:48:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:48:31', tmtdew=28.28, humidity=15.58, cloud=0.0, wind=30.51, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:48:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:48:43.543 [DEBUG] [Thread-15028] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:48:43.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:48:43.637 [DEBUG] [Thread-15031] [transport.py] [_log()] starting thread (client mode): 0xb6bc3250
2025-12-25T16:48:43.637 [DEBUG] [Thread-15031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:48:43.652 [DEBUG] [Thread-15031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:48:43.652 [INFO] [Thread-15031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:48:43.660 [DEBUG] [Thread-15031] [transport.py] [_log()] client lang: <none>
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] server lang: <none>
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] kex follows: False
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] Compression: none
2025-12-25T16:48:43.661 [DEBUG] [Thread-15031] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:48:43.720 [DEBUG] [Thread-15031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:48:43.721 [DEBUG] [Thread-15031] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:48:43.721 [DEBUG] [Thread-15031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:48:43.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:48:43.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:48:43.778 [DEBUG] [Thread-15031] [transport.py] [_log()] userauth is OK
2025-12-25T16:48:43.779 [DEBUG] [Thread-15031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:48:43.779 [DEBUG] [Thread-15031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:48:43.779 [DEBUG] [Thread-15031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:48:43.779 [DEBUG] [Thread-15031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:48:43.797 [INFO] [Thread-15031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:48:43.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-25T16:48:43.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:48:44.606 [DEBUG] [Thread-15031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:48:44.607 [DEBUG] [Thread-15031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:48:44.655 [DEBUG] [Thread-15031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:48:44.656 [DEBUG] [Thread-15031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:48:44.665 [DEBUG] [Thread-15031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:48:44.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:48:44.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-25T16:48:44.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:48:44.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:48:44.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:48:44.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:48:44.703 [DEBUG] [Thread-15031] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:48:47.045 [DEBUG] [Thread-15033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:56.581 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:48:56.582 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:02.093 [DEBUG] [Thread-15034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:14.630 [DEBUG] [Thread-15035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:14.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:49:14.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:49:14.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-25T16:49:15.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 49, 3), 28.48, 15.41, 0.0, 34.16, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:49:15.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:49:03
2025-12-25T16:49:15.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:49:15.679 [DEBUG] [Thread-15036] [transport.py] [_log()] starting thread (client mode): 0xb6bc3370
2025-12-25T16:49:15.679 [DEBUG] [Thread-15036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:49:15.696 [DEBUG] [Thread-15036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:49:15.696 [INFO] [Thread-15036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] client lang: <none>
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] server lang: <none>
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] kex follows: False
2025-12-25T16:49:15.699 [DEBUG] [Thread-15036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:49:15.700 [DEBUG] [Thread-15036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:49:15.700 [DEBUG] [Thread-15036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:49:15.700 [DEBUG] [Thread-15036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:49:15.700 [DEBUG] [Thread-15036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:49:15.700 [DEBUG] [Thread-15036] [transport.py] [_log()] Compression: none
2025-12-25T16:49:15.700 [DEBUG] [Thread-15036] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:49:15.708 [DEBUG] [Thread-15036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:49:15.709 [DEBUG] [Thread-15036] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:49:15.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:49:15.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:49:15.710 [DEBUG] [Thread-15036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:49:15.710 [DEBUG] [Thread-15036] [transport.py] [_log()] userauth is OK
2025-12-25T16:49:15.710 [DEBUG] [Thread-15036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:49:15.711 [DEBUG] [Thread-15036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:49:15.711 [DEBUG] [Thread-15036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:49:15.711 [DEBUG] [Thread-15036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:49:15.728 [INFO] [Thread-15036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:49:15.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:49:16.301 [DEBUG] [Thread-15036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:49:16.301 [DEBUG] [Thread-15036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:49:16.301 [DEBUG] [Thread-15036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:49:16.342 [DEBUG] [Thread-15036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:49:16.342 [DEBUG] [Thread-15036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:49:16.346 [DEBUG] [Thread-15036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:49:16.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:49:16.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:49:16.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:49:16.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:49:16.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:49:16.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:49:16.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:49:16.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:49:16.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:49:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.617075 -999.00  +26.20  25.78     20   +1.80 1 1 1 1 1   888    0 24.64 12.40 ----- 30.0 25.8 296.4 28.0 29.6 -28.1 29.6 -26.9 30.4 -24.1 30.8 -25.8
2025-12-25T16:49:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:49:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:49:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.617075
2025-12-25T16:49:16.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:49:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:49:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:49:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:49:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:49:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:49:03', tmtdew=28.48, humidity=15.41, cloud=0.0, wind=34.16, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:48:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:49:16.373 [DEBUG] [Thread-15036] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:49: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-25T16:49:16.466 [DEBUG] [Thread-15039] [transport.py] [_log()] starting thread (client mode): 0xb6bc3310
2025-12-25T16:49:16.466 [DEBUG] [Thread-15039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:49:16.481 [DEBUG] [Thread-15039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:49:16.481 [INFO] [Thread-15039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] client lang: <none>
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] server lang: <none>
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] kex follows: False
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:49:16.489 [DEBUG] [Thread-15039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:49:16.490 [DEBUG] [Thread-15039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:49:16.490 [DEBUG] [Thread-15039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:49:16.490 [DEBUG] [Thread-15039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:49:16.490 [DEBUG] [Thread-15039] [transport.py] [_log()] Compression: none
2025-12-25T16:49:16.490 [DEBUG] [Thread-15039] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:49:16.546 [DEBUG] [Thread-15039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:49:16.547 [DEBUG] [Thread-15039] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:49:16.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:49:16.548 [DEBUG] [Thread-15039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:49:16.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:49:16.603 [DEBUG] [Thread-15039] [transport.py] [_log()] userauth is OK
2025-12-25T16:49:16.603 [DEBUG] [Thread-15039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:49:16.603 [DEBUG] [Thread-15039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:49:16.603 [DEBUG] [Thread-15039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:49:16.603 [DEBUG] [Thread-15039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:49:16.622 [INFO] [Thread-15039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:49:16.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-25T16:49:16.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:49:17.131 [DEBUG] [Thread-15041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:17.447 [DEBUG] [Thread-15039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:49:17.448 [DEBUG] [Thread-15039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:49:17.496 [DEBUG] [Thread-15039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:49:17.497 [DEBUG] [Thread-15039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:49:17.506 [DEBUG] [Thread-15039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:49:17.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:49:17.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-25T16:49:17.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:49:17.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:49:17.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:49:17.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:49:17.542 [DEBUG] [Thread-15039] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:49:32.190 [DEBUG] [Thread-15042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:47.221 [DEBUG] [Thread-15043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:47.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:49:47.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:49:47.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-25T16:49:48.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 49, 35), 28.55, 15.35, 0.0, 33.51, 26.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:49:48.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:49:35
2025-12-25T16:49:48.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:49:48.583 [DEBUG] [Thread-15044] [transport.py] [_log()] starting thread (client mode): 0xb6b630d0
2025-12-25T16:49:48.583 [DEBUG] [Thread-15044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:49:48.606 [DEBUG] [Thread-15044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:49:48.606 [INFO] [Thread-15044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] client lang: <none>
2025-12-25T16:49:48.609 [DEBUG] [Thread-15044] [transport.py] [_log()] server lang: <none>
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] kex follows: False
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] Compression: none
2025-12-25T16:49:48.610 [DEBUG] [Thread-15044] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:49:48.625 [DEBUG] [Thread-15044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:49:48.625 [DEBUG] [Thread-15044] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:49:48.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:49:48.626 [DEBUG] [Thread-15044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:49:48.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:49:48.626 [DEBUG] [Thread-15044] [transport.py] [_log()] userauth is OK
2025-12-25T16:49:48.626 [DEBUG] [Thread-15044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:49:48.626 [DEBUG] [Thread-15044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:49:48.626 [DEBUG] [Thread-15044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:49:48.626 [DEBUG] [Thread-15044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:49:48.645 [INFO] [Thread-15044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:49:48.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:49:49.261 [DEBUG] [Thread-15044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:49:49.261 [DEBUG] [Thread-15044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:49:49.261 [DEBUG] [Thread-15044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:49:49.302 [DEBUG] [Thread-15044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:49:49.302 [DEBUG] [Thread-15044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:49:49.304 [DEBUG] [Thread-15044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:49:49.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:49:49.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:49:49.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:49:49.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:49:49.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:49:49.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:49:49.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.617423 -999.00  +26.20  34.39     20   +1.80 1 1 2 1 1   888    0 23.98 5.27 ----- 32.8 34.4 310.6 40.4 29.6 -27.9 29.6 -27.7 30.4 -24.4 30.8 -27.0
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.617423
2025-12-25T16:49:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:49:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:49:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:49:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:49:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:49:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:49:35', tmtdew=28.55, humidity=15.35, cloud=0.0, wind=33.51, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:49:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:49:49.322 [DEBUG] [Thread-15044] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:49:49.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:49:49.405 [DEBUG] [Thread-15047] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-25T16:49:49.405 [DEBUG] [Thread-15047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:49:49.420 [DEBUG] [Thread-15047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:49:49.420 [INFO] [Thread-15047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] client lang: <none>
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] server lang: <none>
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] kex follows: False
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] Compression: none
2025-12-25T16:49:49.428 [DEBUG] [Thread-15047] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:49:49.485 [DEBUG] [Thread-15047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:49:49.485 [DEBUG] [Thread-15047] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:49:49.485 [DEBUG] [Thread-15047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:49:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:49:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:49:49.542 [DEBUG] [Thread-15047] [transport.py] [_log()] userauth is OK
2025-12-25T16:49:49.542 [DEBUG] [Thread-15047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:49:49.542 [DEBUG] [Thread-15047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:49:49.542 [DEBUG] [Thread-15047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:49:49.542 [DEBUG] [Thread-15047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:49:49.557 [INFO] [Thread-15047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:49:49.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-25T16:49:49.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:49:50.456 [DEBUG] [Thread-15047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:49:50.456 [DEBUG] [Thread-15047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:49:50.504 [DEBUG] [Thread-15047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:49:50.504 [DEBUG] [Thread-15047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:49:50.513 [DEBUG] [Thread-15047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:49:50.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:49:50.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:49:50.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-25T16:49:50.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:49:50.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:49:50.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:49:50.548 [DEBUG] [Thread-15047] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:49:56.723 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:49:56.724 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:02.253 [DEBUG] [Thread-15049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:14.662 [DEBUG] [Thread-15050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:17.306 [DEBUG] [Thread-15051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:20.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:50:20.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:50:20.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-25T16:50:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 50, 8), 28.54, 15.38, 0.0, 27.24, 26.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:50:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:50:08
2025-12-25T16:50:21.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:50:21.553 [DEBUG] [Thread-15052] [transport.py] [_log()] starting thread (client mode): 0xb6b63b20
2025-12-25T16:50:21.553 [DEBUG] [Thread-15052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:50:21.572 [DEBUG] [Thread-15052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:50:21.572 [INFO] [Thread-15052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:50:21.575 [DEBUG] [Thread-15052] [transport.py] [_log()] client lang: <none>
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] server lang: <none>
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] kex follows: False
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] Compression: none
2025-12-25T16:50:21.576 [DEBUG] [Thread-15052] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:50:21.583 [DEBUG] [Thread-15052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:50:21.583 [DEBUG] [Thread-15052] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:50:21.583 [DEBUG] [Thread-15052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:50:21.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:50:21.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:50:21.585 [DEBUG] [Thread-15052] [transport.py] [_log()] userauth is OK
2025-12-25T16:50:21.585 [DEBUG] [Thread-15052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:50:21.585 [DEBUG] [Thread-15052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:50:21.585 [DEBUG] [Thread-15052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:50:21.585 [DEBUG] [Thread-15052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:50:21.597 [INFO] [Thread-15052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:50:21.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:50:22.422 [DEBUG] [Thread-15052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:50:22.422 [DEBUG] [Thread-15052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:50:22.423 [DEBUG] [Thread-15052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:50:22.463 [DEBUG] [Thread-15052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:50:22.463 [DEBUG] [Thread-15052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:50:22.466 [DEBUG] [Thread-15052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:50:22.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:50:22.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:50:22.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:50:22.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:50:22.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:50:22.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:50:22.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:50:22.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:50:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:50:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.617769 -999.00  +26.00  35.89     21   +1.90 1 1 2 1 1   888    0 23.82 -1.08 ----- 41.0 35.9 307.2 44.8 29.6 -27.8 29.6 -27.5 30.2 -30.1 30.7 -27.1
2025-12-25T16:50:22.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:50:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:50:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.617769
2025-12-25T16:50:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:50:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:50:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:50:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:50:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:50:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:50:08', tmtdew=28.54, humidity=15.38, cloud=0.0, wind=27.24, temperature=26.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:49:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:50:22.494 [DEBUG] [Thread-15052] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:50:22.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:50:22.587 [DEBUG] [Thread-15055] [transport.py] [_log()] starting thread (client mode): 0xb6b29ba0
2025-12-25T16:50:22.587 [DEBUG] [Thread-15055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:50:22.603 [DEBUG] [Thread-15055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:50:22.603 [INFO] [Thread-15055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] client lang: <none>
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] server lang: <none>
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] kex follows: False
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:50:22.611 [DEBUG] [Thread-15055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:50:22.612 [DEBUG] [Thread-15055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:50:22.612 [DEBUG] [Thread-15055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:50:22.612 [DEBUG] [Thread-15055] [transport.py] [_log()] Compression: none
2025-12-25T16:50:22.612 [DEBUG] [Thread-15055] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:50:22.671 [DEBUG] [Thread-15055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:50:22.671 [DEBUG] [Thread-15055] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:50:22.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:50:22.672 [DEBUG] [Thread-15055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:50:22.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:50:22.727 [DEBUG] [Thread-15055] [transport.py] [_log()] userauth is OK
2025-12-25T16:50:22.727 [DEBUG] [Thread-15055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:50:22.727 [DEBUG] [Thread-15055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:50:22.727 [DEBUG] [Thread-15055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:50:22.727 [DEBUG] [Thread-15055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:50:22.746 [INFO] [Thread-15055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:50:22.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-25T16:50:22.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:50:23.581 [DEBUG] [Thread-15055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:50:23.581 [DEBUG] [Thread-15055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:50:23.632 [DEBUG] [Thread-15055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:50:23.632 [DEBUG] [Thread-15055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:50:23.640 [DEBUG] [Thread-15055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:50:23.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:50:23.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:50:23.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:50:23.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:50:23.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:50:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:50:23.671 [DEBUG] [Thread-15055] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:50:32.343 [DEBUG] [Thread-15057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:47.393 [DEBUG] [Thread-15058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:53.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:50:53.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:50:53.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:50:54.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 50, 40), 28.31, 15.45, 0.0, 37.02, 26.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:50:54.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:50:40
2025-12-25T16:50:54.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:50:54.666 [DEBUG] [Thread-15059] [transport.py] [_log()] starting thread (client mode): 0xb6b29f90
2025-12-25T16:50:54.666 [DEBUG] [Thread-15059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:50:54.686 [DEBUG] [Thread-15059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:50:54.686 [INFO] [Thread-15059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] client lang: <none>
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] server lang: <none>
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] kex follows: False
2025-12-25T16:50:54.690 [DEBUG] [Thread-15059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:50:54.691 [DEBUG] [Thread-15059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:50:54.691 [DEBUG] [Thread-15059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:50:54.691 [DEBUG] [Thread-15059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:50:54.691 [DEBUG] [Thread-15059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:50:54.691 [DEBUG] [Thread-15059] [transport.py] [_log()] Compression: none
2025-12-25T16:50:54.691 [DEBUG] [Thread-15059] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:50:54.709 [DEBUG] [Thread-15059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:50:54.709 [DEBUG] [Thread-15059] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:50:54.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:50:54.710 [DEBUG] [Thread-15059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:50:54.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:50:54.713 [DEBUG] [Thread-15059] [transport.py] [_log()] userauth is OK
2025-12-25T16:50:54.713 [DEBUG] [Thread-15059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:50:54.713 [DEBUG] [Thread-15059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:50:54.713 [DEBUG] [Thread-15059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:50:54.713 [DEBUG] [Thread-15059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:50:54.748 [INFO] [Thread-15059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:50:54.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:50:55.403 [DEBUG] [Thread-15059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:50:55.403 [DEBUG] [Thread-15059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:50:55.404 [DEBUG] [Thread-15059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:50:55.445 [DEBUG] [Thread-15059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:50:55.445 [DEBUG] [Thread-15059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:50:55.447 [DEBUG] [Thread-15059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:50:55.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:50:55.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:50:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:50:55.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:50:55.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:50:55.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:50:55.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:50:55.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.618116 -999.00  +25.40  34.42     21   +2.00 1 1 2 1 1   888    0 23.86 -13.18 ----- 37.0 34.4 311.4 44.1 29.4 -28.3 29.4 -28.8 30.3 -28.5 30.6 -26.6
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.618116
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:50:55.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:50:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:50:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:50:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:50:55.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:50:40', tmtdew=28.31, humidity=15.45, cloud=0.0, wind=37.02, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:50:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:50:55.470 [DEBUG] [Thread-15059] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:50:55.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-25T16:50:55.563 [DEBUG] [Thread-15062] [transport.py] [_log()] starting thread (client mode): 0xb6b23a60
2025-12-25T16:50:55.563 [DEBUG] [Thread-15062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:50:55.578 [DEBUG] [Thread-15062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:50:55.578 [INFO] [Thread-15062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:50:55.585 [DEBUG] [Thread-15062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:50:55.585 [DEBUG] [Thread-15062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:50:55.585 [DEBUG] [Thread-15062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:50:55.585 [DEBUG] [Thread-15062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] client lang: <none>
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] server lang: <none>
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] kex follows: False
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:50:55.586 [DEBUG] [Thread-15062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:50:55.587 [DEBUG] [Thread-15062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:50:55.587 [DEBUG] [Thread-15062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:50:55.587 [DEBUG] [Thread-15062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:50:55.587 [DEBUG] [Thread-15062] [transport.py] [_log()] Compression: none
2025-12-25T16:50:55.587 [DEBUG] [Thread-15062] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:50:55.642 [DEBUG] [Thread-15062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:50:55.642 [DEBUG] [Thread-15062] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:50:55.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:50:55.643 [DEBUG] [Thread-15062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:50:55.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:50:55.698 [DEBUG] [Thread-15062] [transport.py] [_log()] userauth is OK
2025-12-25T16:50:55.699 [DEBUG] [Thread-15062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:50:55.699 [DEBUG] [Thread-15062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:50:55.699 [DEBUG] [Thread-15062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:50:55.699 [DEBUG] [Thread-15062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:50:55.718 [INFO] [Thread-15062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:50:55.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-25T16:50:55.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:50:56.535 [DEBUG] [Thread-15062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:50:56.535 [DEBUG] [Thread-15062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:50:56.583 [DEBUG] [Thread-15062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:50:56.583 [DEBUG] [Thread-15062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:50:56.594 [DEBUG] [Thread-15062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:50:56.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:50:56.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-25T16:50:56.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-25T16:50:56.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:50:56.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:50:56.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:50:56.629 [DEBUG] [Thread-15062] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:50:56.863 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:50:56.864 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:02.427 [DEBUG] [Thread-15064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:14.708 [DEBUG] [Thread-15065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:17.464 [DEBUG] [Thread-15066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:51:26.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:51:26.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:51:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 51, 12), 28.31, 15.45, 0.0, 34.2, 26.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:51:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:51:12
2025-12-25T16:51:27.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:51:27.613 [DEBUG] [Thread-15067] [transport.py] [_log()] starting thread (client mode): 0xb95b32e0
2025-12-25T16:51:27.613 [DEBUG] [Thread-15067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:51:27.628 [DEBUG] [Thread-15067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:51:27.628 [INFO] [Thread-15067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] client lang: <none>
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] server lang: <none>
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] kex follows: False
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:51:27.632 [DEBUG] [Thread-15067] [transport.py] [_log()] Compression: none
2025-12-25T16:51:27.633 [DEBUG] [Thread-15067] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:51:27.650 [DEBUG] [Thread-15067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:51:27.650 [DEBUG] [Thread-15067] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:51:27.651 [DEBUG] [Thread-15067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:51:27.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:51:27.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:51:27.652 [DEBUG] [Thread-15067] [transport.py] [_log()] userauth is OK
2025-12-25T16:51:27.653 [DEBUG] [Thread-15067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:51:27.653 [DEBUG] [Thread-15067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:51:27.653 [DEBUG] [Thread-15067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:51:27.653 [DEBUG] [Thread-15067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:51:27.671 [INFO] [Thread-15067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:51:27.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:51:28.397 [DEBUG] [Thread-15067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:51:28.398 [DEBUG] [Thread-15067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:51:28.398 [DEBUG] [Thread-15067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:51:28.439 [DEBUG] [Thread-15067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:51:28.439 [DEBUG] [Thread-15067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:51:28.442 [DEBUG] [Thread-15067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:51:28.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:51:28.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:51:28.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:51:28.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:51:28.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:51:28.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:51:28.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:51:28.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:51:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:51:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.618463 -999.00  +25.30  33.49     21   +2.00 1 1 2 1 1   888    0 23.95 -22.71 ----- 33.8 33.5 317.0 46.7 29.3 -28.9 29.4 -29.0 30.3 -26.6 30.5 -26.7
2025-12-25T16:51:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:51:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:51:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.618463
2025-12-25T16:51:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:51:28.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:51:28.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:51:28.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:51:28.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:51:28.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:51:12', tmtdew=28.31, humidity=15.45, cloud=0.0, wind=34.2, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:50:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:51:28.465 [DEBUG] [Thread-15067] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:51:28.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-25T16:51:32.503 [DEBUG] [Thread-15070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:47.558 [DEBUG] [Thread-15071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:57.005 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:51:57.006 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:02.597 [DEBUG] [Thread-15072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:14.764 [DEBUG] [Thread-15073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:17.632 [DEBUG] [Thread-15074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:32.664 [DEBUG] [Thread-15075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:47.703 [DEBUG] [Thread-15076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:57.145 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:52:57.147 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:02.733 [DEBUG] [Thread-15077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:14.805 [DEBUG] [Thread-15078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:17.764 [DEBUG] [Thread-15079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:32.802 [DEBUG] [Thread-15080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:41.717 [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-25T16:53:47.834 [DEBUG] [Thread-15081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:57.294 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:53:57.295 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:02.870 [DEBUG] [Thread-15082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:11.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:54:11.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:54:11.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-25T16:54:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 53, 52), 27.91, 15.61, 0.0, 34.02, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:54:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:53:52
2025-12-25T16:54:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:54:12.730 [DEBUG] [Thread-15083] [transport.py] [_log()] starting thread (client mode): 0xb6b03970
2025-12-25T16:54:12.731 [DEBUG] [Thread-15083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:54:12.751 [DEBUG] [Thread-15083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:54:12.751 [INFO] [Thread-15083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:54:12.753 [DEBUG] [Thread-15083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:54:12.753 [DEBUG] [Thread-15083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:54:12.753 [DEBUG] [Thread-15083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] client lang: <none>
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] server lang: <none>
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] kex follows: False
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:54:12.754 [DEBUG] [Thread-15083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:54:12.755 [DEBUG] [Thread-15083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:54:12.755 [DEBUG] [Thread-15083] [transport.py] [_log()] Compression: none
2025-12-25T16:54:12.755 [DEBUG] [Thread-15083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:54:12.773 [DEBUG] [Thread-15083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:54:12.773 [DEBUG] [Thread-15083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:54:12.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:54:12.774 [DEBUG] [Thread-15083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:54:12.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:54:12.776 [DEBUG] [Thread-15083] [transport.py] [_log()] userauth is OK
2025-12-25T16:54:12.777 [DEBUG] [Thread-15083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:54:12.777 [DEBUG] [Thread-15083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:54:12.777 [DEBUG] [Thread-15083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:54:12.777 [DEBUG] [Thread-15083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:54:12.796 [INFO] [Thread-15083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:54:12.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:54:13.440 [DEBUG] [Thread-15083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:54:13.440 [DEBUG] [Thread-15083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:54:13.441 [DEBUG] [Thread-15083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:54:13.481 [DEBUG] [Thread-15083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:54:13.481 [DEBUG] [Thread-15083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:54:13.485 [DEBUG] [Thread-15083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:54:13.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:54:13.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:54:13.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:54:13.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:54:13.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:54:13.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:54:13.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:54:13.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:54:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:54:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.620547 -999.00  +25.60  34.74     21   +1.90 1 1 2 1 1   888    0 21.20 -85.02 ----- 27.5 34.7 296.4 43.9 29.2 -29.0 29.3 -28.1 30.1 -25.4 30.4 -26.7
2025-12-25T16:54:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:54:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:54:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.620547
2025-12-25T16:54:13.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:54:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:54:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:54:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:54:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:54:13.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:53:52', tmtdew=27.91, humidity=15.61, cloud=0.0, wind=34.02, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:53:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:54:13.511 [DEBUG] [Thread-15083] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:54:13.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-25T16:54:13.604 [DEBUG] [Thread-15086] [transport.py] [_log()] starting thread (client mode): 0xb6b4fb80
2025-12-25T16:54:13.604 [DEBUG] [Thread-15086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:54:13.618 [DEBUG] [Thread-15086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:54:13.618 [INFO] [Thread-15086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:54:13.626 [DEBUG] [Thread-15086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:54:13.626 [DEBUG] [Thread-15086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:54:13.626 [DEBUG] [Thread-15086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:54:13.626 [DEBUG] [Thread-15086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:13.626 [DEBUG] [Thread-15086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] client lang: <none>
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] server lang: <none>
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] kex follows: False
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:54:13.627 [DEBUG] [Thread-15086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:54:13.628 [DEBUG] [Thread-15086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:54:13.628 [DEBUG] [Thread-15086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:54:13.628 [DEBUG] [Thread-15086] [transport.py] [_log()] Compression: none
2025-12-25T16:54:13.628 [DEBUG] [Thread-15086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:54:13.687 [DEBUG] [Thread-15086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:54:13.687 [DEBUG] [Thread-15086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:54:13.688 [DEBUG] [Thread-15086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:54:13.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:54:13.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:54:13.742 [DEBUG] [Thread-15086] [transport.py] [_log()] userauth is OK
2025-12-25T16:54:13.743 [DEBUG] [Thread-15086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:54:13.743 [DEBUG] [Thread-15086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:54:13.743 [DEBUG] [Thread-15086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:54:13.743 [DEBUG] [Thread-15086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:54:13.762 [INFO] [Thread-15086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:54:13.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-25T16:54:13.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:54:14.562 [DEBUG] [Thread-15086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:54:14.562 [DEBUG] [Thread-15086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:54:14.610 [DEBUG] [Thread-15086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:54:14.610 [DEBUG] [Thread-15086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:54:14.621 [DEBUG] [Thread-15086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:54:14.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:54:14.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-25T16:54:14.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-25T16:54:14.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:54:14.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:54:14.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:54:14.658 [DEBUG] [Thread-15086] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:54:14.839 [DEBUG] [Thread-15088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:17.904 [DEBUG] [Thread-15089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:32.954 [DEBUG] [Thread-15090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:44.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:54:44.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:54:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:54:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 54, 24), 27.92, 15.61, 0.0, 34.42, 25.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:54:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:54:24
2025-12-25T16:54:45.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:54:45.679 [DEBUG] [Thread-15091] [transport.py] [_log()] starting thread (client mode): 0xb6b00b80
2025-12-25T16:54:45.679 [DEBUG] [Thread-15091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:54:45.701 [DEBUG] [Thread-15091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:54:45.701 [INFO] [Thread-15091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:54:45.704 [DEBUG] [Thread-15091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] client lang: <none>
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] server lang: <none>
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] kex follows: False
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] Compression: none
2025-12-25T16:54:45.705 [DEBUG] [Thread-15091] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:54:45.724 [DEBUG] [Thread-15091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:54:45.724 [DEBUG] [Thread-15091] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:54:45.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:54:45.725 [DEBUG] [Thread-15091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:54:45.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:54:45.727 [DEBUG] [Thread-15091] [transport.py] [_log()] userauth is OK
2025-12-25T16:54:45.727 [DEBUG] [Thread-15091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:54:45.728 [DEBUG] [Thread-15091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:54:45.728 [DEBUG] [Thread-15091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:54:45.728 [DEBUG] [Thread-15091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:54:45.752 [INFO] [Thread-15091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:54:45.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:54:46.562 [DEBUG] [Thread-15091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:54:46.562 [DEBUG] [Thread-15091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:54:46.563 [DEBUG] [Thread-15091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:54:46.603 [DEBUG] [Thread-15091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:54:46.603 [DEBUG] [Thread-15091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:54:46.607 [DEBUG] [Thread-15091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:54:46.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:54:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:54:46.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:54:46.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:54:46.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:54:46.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:54:46.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:54:46.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:54:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:54:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.620894 -999.00  +25.50  28.70     21   +1.90 1 1 1 1 1   888    0 21.62 -92.93 ----- 29.3 28.7 290.2 32.4 29.2 -29.5 29.3 -27.8 -999.0 -999.0 30.4 -27.1
2025-12-25T16:54:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:54:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:54:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.620894
2025-12-25T16:54:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:54:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:54:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:54:46.632 [DEBUG] [Thread-15091] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:54:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:54:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:54:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:54:24', tmtdew=27.92, humidity=15.61, cloud=0.0, wind=34.42, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:54:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:54:46.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:54:46.726 [DEBUG] [Thread-15094] [transport.py] [_log()] starting thread (client mode): 0xb6b63400
2025-12-25T16:54:46.726 [DEBUG] [Thread-15094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:54:46.741 [DEBUG] [Thread-15094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:54:46.741 [INFO] [Thread-15094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:54:46.748 [DEBUG] [Thread-15094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:54:46.748 [DEBUG] [Thread-15094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] client lang: <none>
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] server lang: <none>
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] kex follows: False
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] Compression: none
2025-12-25T16:54:46.749 [DEBUG] [Thread-15094] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:54:46.806 [DEBUG] [Thread-15094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:54:46.807 [DEBUG] [Thread-15094] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:54:46.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:54:46.808 [DEBUG] [Thread-15094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:54:46.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:54:46.863 [DEBUG] [Thread-15094] [transport.py] [_log()] userauth is OK
2025-12-25T16:54:46.863 [DEBUG] [Thread-15094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:54:46.863 [DEBUG] [Thread-15094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:54:46.863 [DEBUG] [Thread-15094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:54:46.863 [DEBUG] [Thread-15094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:54:46.883 [INFO] [Thread-15094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:54:46.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-25T16:54:46.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:54:47.734 [DEBUG] [Thread-15094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:54:47.734 [DEBUG] [Thread-15094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:54:47.782 [DEBUG] [Thread-15094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:54:47.782 [DEBUG] [Thread-15094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:54:47.791 [DEBUG] [Thread-15094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:54:47.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:54:47.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:54:47.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:54:47.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:54:47.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:54:47.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:54:47.828 [DEBUG] [Thread-15094] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:54:47.989 [DEBUG] [Thread-15096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:57.436 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:54:57.437 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:03.029 [DEBUG] [Thread-15097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:14.884 [DEBUG] [Thread-15098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:17.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:55:17.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:55:17.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-25T16:55:18.062 [DEBUG] [Thread-15099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 54, 56), 27.62, 15.76, 0.0, 28.12, 25.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:55:18.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:54:56
2025-12-25T16:55:18.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:55:18.839 [DEBUG] [Thread-15100] [transport.py] [_log()] starting thread (client mode): 0xb6bc3550
2025-12-25T16:55:18.840 [DEBUG] [Thread-15100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:55:18.859 [DEBUG] [Thread-15100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:55:18.859 [INFO] [Thread-15100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] client lang: <none>
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] server lang: <none>
2025-12-25T16:55:18.863 [DEBUG] [Thread-15100] [transport.py] [_log()] kex follows: False
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] Compression: none
2025-12-25T16:55:18.864 [DEBUG] [Thread-15100] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:55:18.881 [DEBUG] [Thread-15100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:55:18.881 [DEBUG] [Thread-15100] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:55:18.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:55:18.882 [DEBUG] [Thread-15100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:55:18.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:55:18.925 [DEBUG] [Thread-15100] [transport.py] [_log()] userauth is OK
2025-12-25T16:55:18.925 [DEBUG] [Thread-15100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:55:18.925 [DEBUG] [Thread-15100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:55:18.925 [DEBUG] [Thread-15100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:55:18.925 [DEBUG] [Thread-15100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:55:18.944 [INFO] [Thread-15100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:55:18.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:55:19.589 [DEBUG] [Thread-15100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:55:19.589 [DEBUG] [Thread-15100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:55:19.590 [DEBUG] [Thread-15100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:55:19.631 [DEBUG] [Thread-15100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:55:19.631 [DEBUG] [Thread-15100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:55:19.633 [DEBUG] [Thread-15100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:55:19.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:55:19.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:55:19.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:55:19.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:55:19.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:55:19.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:55:19.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:55:19.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:55:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:55:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.621241 -999.00  +25.10  26.74     21   +1.80 1 1 1 1 1   888    0 21.56 -92.86 ----- 27.7 26.7 292.8 31.0 29.1 -29.0 29.3 -28.5 30.1 -25.4 30.4 -26.8
2025-12-25T16:55:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:55:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:55:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.621241
2025-12-25T16:55:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:55:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:55:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:55:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:55:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:55:19.659 [DEBUG] [Thread-15100] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:55:19.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:54:56', tmtdew=27.62, humidity=15.76, cloud=0.0, wind=28.12, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:54:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:55:19.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-25T16:55:19.756 [DEBUG] [Thread-15103] [transport.py] [_log()] starting thread (client mode): 0xb6b2a230
2025-12-25T16:55:19.756 [DEBUG] [Thread-15103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:55:19.770 [DEBUG] [Thread-15103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:55:19.770 [INFO] [Thread-15103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:55:19.777 [DEBUG] [Thread-15103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:55:19.777 [DEBUG] [Thread-15103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] client lang: <none>
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] server lang: <none>
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] kex follows: False
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:55:19.778 [DEBUG] [Thread-15103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:55:19.779 [DEBUG] [Thread-15103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:55:19.779 [DEBUG] [Thread-15103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:55:19.779 [DEBUG] [Thread-15103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:55:19.779 [DEBUG] [Thread-15103] [transport.py] [_log()] Compression: none
2025-12-25T16:55:19.779 [DEBUG] [Thread-15103] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:55:19.834 [DEBUG] [Thread-15103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:55:19.834 [DEBUG] [Thread-15103] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:55:19.834 [DEBUG] [Thread-15103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:55:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:55:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:55:19.890 [DEBUG] [Thread-15103] [transport.py] [_log()] userauth is OK
2025-12-25T16:55:19.890 [DEBUG] [Thread-15103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:55:19.890 [DEBUG] [Thread-15103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:55:19.890 [DEBUG] [Thread-15103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:55:19.890 [DEBUG] [Thread-15103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:55:19.912 [INFO] [Thread-15103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:55:19.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:55:19.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:55:20.724 [DEBUG] [Thread-15103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:55:20.724 [DEBUG] [Thread-15103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:55:20.771 [DEBUG] [Thread-15103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:55:20.772 [DEBUG] [Thread-15103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:55:20.780 [DEBUG] [Thread-15103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:55:20.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:55:20.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:55:20.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:55:20.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:55:20.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:55:20.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:55:20.813 [DEBUG] [Thread-15103] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:55:33.094 [DEBUG] [Thread-15105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:48.140 [DEBUG] [Thread-15106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:55:50.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:55:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:55:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 55, 28), 27.62, 15.78, 0.0, 24.51, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:55:51.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:55:28
2025-12-25T16:55:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:55:51.801 [DEBUG] [Thread-15107] [transport.py] [_log()] starting thread (client mode): 0xb6bb6470
2025-12-25T16:55:51.801 [DEBUG] [Thread-15107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:55:51.821 [DEBUG] [Thread-15107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:55:51.821 [INFO] [Thread-15107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] client lang: <none>
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] server lang: <none>
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] kex follows: False
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:55:51.825 [DEBUG] [Thread-15107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:55:51.826 [DEBUG] [Thread-15107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:55:51.826 [DEBUG] [Thread-15107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:55:51.826 [DEBUG] [Thread-15107] [transport.py] [_log()] Compression: none
2025-12-25T16:55:51.826 [DEBUG] [Thread-15107] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:55:51.844 [DEBUG] [Thread-15107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:55:51.844 [DEBUG] [Thread-15107] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:55:51.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:55:51.846 [DEBUG] [Thread-15107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:55:51.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:55:51.848 [DEBUG] [Thread-15107] [transport.py] [_log()] userauth is OK
2025-12-25T16:55:51.848 [DEBUG] [Thread-15107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:55:51.848 [DEBUG] [Thread-15107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:55:51.848 [DEBUG] [Thread-15107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:55:51.848 [DEBUG] [Thread-15107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:55:51.866 [INFO] [Thread-15107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:55:51.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:55:52.687 [DEBUG] [Thread-15107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:55:52.687 [DEBUG] [Thread-15107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:55:52.687 [DEBUG] [Thread-15107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:55:52.728 [DEBUG] [Thread-15107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:55:52.728 [DEBUG] [Thread-15107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:55:52.731 [DEBUG] [Thread-15107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:55:52.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:55:52.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:55:52.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:55:52.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:55:52.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:55:52.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:55:52.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:55:52.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:55:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:55:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.621589 -999.00  +24.90  29.24     22   +1.90 1 1 1 1 1   888    0 20.79 -96.80 ----- 25.7 29.2 290.9 33.6 29.1 -28.5 29.2 -28.1 30.0 -28.9 30.3 -26.2
2025-12-25T16:55:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:55:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:55:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.621589
2025-12-25T16:55:52.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:55:52.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:55:52.757 [DEBUG] [Thread-15107] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:55:52.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:55:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:55:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:55:52.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:55:28', tmtdew=27.62, humidity=15.78, cloud=0.0, wind=24.51, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:55:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:55:52.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-25T16:55:52.850 [DEBUG] [Thread-15110] [transport.py] [_log()] starting thread (client mode): 0xb6bb6440
2025-12-25T16:55:52.850 [DEBUG] [Thread-15110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:55:52.864 [DEBUG] [Thread-15110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:55:52.865 [INFO] [Thread-15110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:55:52.872 [DEBUG] [Thread-15110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:55:52.872 [DEBUG] [Thread-15110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] client lang: <none>
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] server lang: <none>
2025-12-25T16:55:52.873 [DEBUG] [Thread-15110] [transport.py] [_log()] kex follows: False
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] Compression: none
2025-12-25T16:55:52.874 [DEBUG] [Thread-15110] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:55:52.931 [DEBUG] [Thread-15110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:55:52.931 [DEBUG] [Thread-15110] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:55:52.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:55:52.933 [DEBUG] [Thread-15110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:55:52.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:55:52.987 [DEBUG] [Thread-15110] [transport.py] [_log()] userauth is OK
2025-12-25T16:55:52.987 [DEBUG] [Thread-15110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:55:52.987 [DEBUG] [Thread-15110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:55:52.987 [DEBUG] [Thread-15110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:55:52.987 [DEBUG] [Thread-15110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:55:53.003 [INFO] [Thread-15110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:55:53.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:55:53.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:55:53.814 [DEBUG] [Thread-15110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:55:53.814 [DEBUG] [Thread-15110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:55:53.862 [DEBUG] [Thread-15110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:55:53.862 [DEBUG] [Thread-15110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:55:53.871 [DEBUG] [Thread-15110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:55:53.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:55: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')
2025-12-25T16:55:53.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:55:53.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:55:53.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:55:53.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:55:53.908 [DEBUG] [Thread-15110] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:55:57.577 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:55:57.579 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:03.171 [DEBUG] [Thread-15112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:14.919 [DEBUG] [Thread-15113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:18.218 [DEBUG] [Thread-15114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:23.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:56:23.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:56:23.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:56:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 55, 28), 27.72, 15.78, 0.0, 31.71, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:56:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:55:28
2025-12-25T16:56:24.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:56:24.892 [DEBUG] [Thread-15115] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f10
2025-12-25T16:56:24.892 [DEBUG] [Thread-15115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:56:24.912 [DEBUG] [Thread-15115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:56:24.913 [INFO] [Thread-15115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:56:24.915 [DEBUG] [Thread-15115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] client lang: <none>
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] server lang: <none>
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] kex follows: False
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] Compression: none
2025-12-25T16:56:24.916 [DEBUG] [Thread-15115] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:56:24.933 [DEBUG] [Thread-15115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:56:24.934 [DEBUG] [Thread-15115] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:56:24.935 [DEBUG] [Thread-15115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:56:24.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:56:24.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:56:24.937 [DEBUG] [Thread-15115] [transport.py] [_log()] userauth is OK
2025-12-25T16:56:24.937 [DEBUG] [Thread-15115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:56:24.937 [DEBUG] [Thread-15115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:56:24.937 [DEBUG] [Thread-15115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:56:24.937 [DEBUG] [Thread-15115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:56:24.961 [INFO] [Thread-15115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:56:24.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:56:25.589 [DEBUG] [Thread-15115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:56:25.589 [DEBUG] [Thread-15115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:56:25.590 [DEBUG] [Thread-15115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:56:25.631 [DEBUG] [Thread-15115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:56:25.631 [DEBUG] [Thread-15115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:56:25.634 [DEBUG] [Thread-15115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:56:25.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:56:25.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:56:25.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:56:25.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:56:25.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:56:25.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:56:25.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:56:25.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:56:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:56:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.621936 -999.00  +25.10  31.44     21   +1.70 1 1 2 1 1   888    0 20.77 -101.92 ----- 33.8 31.4 299.0 42.2 29.0 -27.6 29.2 -28.0 29.8 -25.9 30.2 -26.5
2025-12-25T16:56:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:56:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:56:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.621936
2025-12-25T16:56:25.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:56:25.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:56:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:56:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:56:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:56:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:55:28', tmtdew=27.72, humidity=15.78, cloud=0.0, wind=31.71, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:55:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:56:25.655 [DEBUG] [Thread-15115] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:56:25.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:56:25.753 [DEBUG] [Thread-15118] [transport.py] [_log()] starting thread (client mode): 0xb6bb7df0
2025-12-25T16:56:25.753 [DEBUG] [Thread-15118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:56:25.768 [DEBUG] [Thread-15118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:56:25.768 [INFO] [Thread-15118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] client lang: <none>
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] server lang: <none>
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] kex follows: False
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:56:25.776 [DEBUG] [Thread-15118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:56:25.777 [DEBUG] [Thread-15118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:56:25.777 [DEBUG] [Thread-15118] [transport.py] [_log()] Compression: none
2025-12-25T16:56:25.777 [DEBUG] [Thread-15118] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:56:25.838 [DEBUG] [Thread-15118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:56:25.838 [DEBUG] [Thread-15118] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:56:25.839 [DEBUG] [Thread-15118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:56:25.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:56:25.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:56:25.895 [DEBUG] [Thread-15118] [transport.py] [_log()] userauth is OK
2025-12-25T16:56:25.895 [DEBUG] [Thread-15118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:56:25.895 [DEBUG] [Thread-15118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:56:25.895 [DEBUG] [Thread-15118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:56:25.895 [DEBUG] [Thread-15118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:56:25.914 [INFO] [Thread-15118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:56:25.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-25T16:56:25.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:56:26.734 [DEBUG] [Thread-15118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:56:26.734 [DEBUG] [Thread-15118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:56:26.782 [DEBUG] [Thread-15118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:56:26.783 [DEBUG] [Thread-15118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:56:26.792 [DEBUG] [Thread-15118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:56:26.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:56:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:56:26.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:56:26.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:56:26.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:56:26.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:56:26.829 [DEBUG] [Thread-15118] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:56:33.248 [DEBUG] [Thread-15120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:48.288 [DEBUG] [Thread-15121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:56.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:56:56.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:56:56.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-25T16:56:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 56, 32), 28.17, 15.35, 0.0, 38.8, 25.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:56:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:56:32
2025-12-25T16:56:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:56:57.718 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:57.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:56:57.852 [DEBUG] [Thread-15122] [transport.py] [_log()] starting thread (client mode): 0xb6bb5c90
2025-12-25T16:56:57.852 [DEBUG] [Thread-15122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:56:57.873 [DEBUG] [Thread-15122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:56:57.873 [INFO] [Thread-15122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] client lang: <none>
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] server lang: <none>
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] kex follows: False
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:56:57.876 [DEBUG] [Thread-15122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:56:57.877 [DEBUG] [Thread-15122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:56:57.877 [DEBUG] [Thread-15122] [transport.py] [_log()] Compression: none
2025-12-25T16:56:57.877 [DEBUG] [Thread-15122] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:56:57.895 [DEBUG] [Thread-15122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:56:57.895 [DEBUG] [Thread-15122] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:56:57.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:56:57.896 [DEBUG] [Thread-15122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:56:57.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:56:57.898 [DEBUG] [Thread-15122] [transport.py] [_log()] userauth is OK
2025-12-25T16:56:57.898 [DEBUG] [Thread-15122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:56:57.899 [DEBUG] [Thread-15122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:56:57.899 [DEBUG] [Thread-15122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:56:57.899 [DEBUG] [Thread-15122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:56:57.917 [INFO] [Thread-15122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:56:57.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:56:58.720 [DEBUG] [Thread-15122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:56:58.721 [DEBUG] [Thread-15122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:56:58.721 [DEBUG] [Thread-15122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:56:58.762 [DEBUG] [Thread-15122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:56:58.762 [DEBUG] [Thread-15122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:56:58.764 [DEBUG] [Thread-15122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:56:58.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:56:58.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:56:58.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:56:58.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:56:58.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:56:58.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:56:58.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:56:58.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:56:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:56:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.622283 -999.00  +25.40  32.03     21   +1.80 1 1 2 1 1   888    0 20.69 -106.95 ----- 33.2 32.0 289.3 47.4 29.0 -28.3 29.1 -27.5 29.6 -28.1 30.1 -27.2
2025-12-25T16:56:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:56:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:56:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.622283
2025-12-25T16:56:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:56:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:56:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:56:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:56:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:56:58.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:56:32', tmtdew=28.17, humidity=15.35, cloud=0.0, wind=38.8, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:56:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:56:58.788 [DEBUG] [Thread-15122] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:56:58.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-25T16:56:58.892 [DEBUG] [Thread-15125] [transport.py] [_log()] starting thread (client mode): 0xb6bb65c0
2025-12-25T16:56:58.892 [DEBUG] [Thread-15125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:56:58.907 [DEBUG] [Thread-15125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:56:58.907 [INFO] [Thread-15125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:56:58.914 [DEBUG] [Thread-15125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] client lang: <none>
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] server lang: <none>
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] kex follows: False
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] Compression: none
2025-12-25T16:56:58.915 [DEBUG] [Thread-15125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:56:58.974 [DEBUG] [Thread-15125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:56:58.974 [DEBUG] [Thread-15125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:56:58.974 [DEBUG] [Thread-15125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:56:58.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:56:58.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:56:59.030 [DEBUG] [Thread-15125] [transport.py] [_log()] userauth is OK
2025-12-25T16:56:59.030 [DEBUG] [Thread-15125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:56:59.030 [DEBUG] [Thread-15125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:56:59.031 [DEBUG] [Thread-15125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:56:59.031 [DEBUG] [Thread-15125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:56:59.049 [INFO] [Thread-15125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:56:59.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:56:59.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:56:59.870 [DEBUG] [Thread-15125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:56:59.870 [DEBUG] [Thread-15125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:56:59.918 [DEBUG] [Thread-15125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:56:59.918 [DEBUG] [Thread-15125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:56:59.927 [DEBUG] [Thread-15125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:56:59.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:56:59.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:56:59.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T16:56:59.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:56:59.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:56:59.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:56:59.964 [DEBUG] [Thread-15125] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:57:03.323 [DEBUG] [Thread-15127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:57:14.958 [DEBUG] [Thread-15128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:57:18.385 [DEBUG] [Thread-15129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:57:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:57:29.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:57:29.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-25T16:57:30.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 57, 4), 28.2, 15.3, 0.0, 39.22, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:57:30.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:57:04
2025-12-25T16:57:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:57:31.021 [DEBUG] [Thread-15130] [transport.py] [_log()] starting thread (client mode): 0xb6bb5ea0
2025-12-25T16:57:31.021 [DEBUG] [Thread-15130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:57:31.040 [DEBUG] [Thread-15130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:57:31.040 [INFO] [Thread-15130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] client lang: <none>
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] server lang: <none>
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] kex follows: False
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] Compression: none
2025-12-25T16:57:31.044 [DEBUG] [Thread-15130] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:57:31.059 [DEBUG] [Thread-15130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:57:31.059 [DEBUG] [Thread-15130] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:57:31.059 [DEBUG] [Thread-15130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:57:31.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:57:31.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:57:31.060 [DEBUG] [Thread-15130] [transport.py] [_log()] userauth is OK
2025-12-25T16:57:31.060 [DEBUG] [Thread-15130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:57:31.060 [DEBUG] [Thread-15130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:57:31.060 [DEBUG] [Thread-15130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:57:31.060 [DEBUG] [Thread-15130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:57:31.077 [INFO] [Thread-15130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:57:31.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:57:31.751 [DEBUG] [Thread-15130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:57:31.751 [DEBUG] [Thread-15130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:57:31.751 [DEBUG] [Thread-15130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:57:31.792 [DEBUG] [Thread-15130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:57:31.792 [DEBUG] [Thread-15130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:57:31.794 [DEBUG] [Thread-15130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:57:31.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:57:31.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:57:31.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:57:31.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:57:31.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:57:31.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:57:31.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.622630 -999.00  +26.00  23.57     21   +2.00 1 1 1 1 1   888    0 21.02 -100.91 ----- 28.7 23.6 304.8 36.7 29.1 -27.5 29.1 -27.4 29.8 -24.5 30.3 -25.6
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.622630
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:57:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:57:04', tmtdew=28.2, humidity=15.3, cloud=0.0, wind=39.22, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:56:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:57:31.814 [DEBUG] [Thread-15130] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:57:31.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-25T16:57:31.897 [DEBUG] [Thread-15133] [transport.py] [_log()] starting thread (client mode): 0xb6bb5d20
2025-12-25T16:57:31.897 [DEBUG] [Thread-15133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:57:31.913 [DEBUG] [Thread-15133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:57:31.913 [INFO] [Thread-15133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:57:31.920 [DEBUG] [Thread-15133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:57:31.920 [DEBUG] [Thread-15133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:57:31.920 [DEBUG] [Thread-15133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:57:31.920 [DEBUG] [Thread-15133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:57:31.920 [DEBUG] [Thread-15133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:57:31.920 [DEBUG] [Thread-15133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] client lang: <none>
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] server lang: <none>
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] kex follows: False
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] Compression: none
2025-12-25T16:57:31.921 [DEBUG] [Thread-15133] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:57:31.977 [DEBUG] [Thread-15133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:57:31.977 [DEBUG] [Thread-15133] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:57:31.978 [DEBUG] [Thread-15133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:57:31.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:57:31.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:57:32.035 [DEBUG] [Thread-15133] [transport.py] [_log()] userauth is OK
2025-12-25T16:57:32.035 [DEBUG] [Thread-15133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:57:32.035 [DEBUG] [Thread-15133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:57:32.035 [DEBUG] [Thread-15133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:57:32.035 [DEBUG] [Thread-15133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:57:32.053 [INFO] [Thread-15133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:57:32.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-25T16:57:32.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:57:32.865 [DEBUG] [Thread-15133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:57:32.865 [DEBUG] [Thread-15133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:57:32.913 [DEBUG] [Thread-15133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:57:32.913 [DEBUG] [Thread-15133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:57:32.922 [DEBUG] [Thread-15133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:57:32.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:57:32.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-25T16:57:32.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-25T16:57:32.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:57:32.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:57:32.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:57:32.954 [DEBUG] [Thread-15133] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:57:33.414 [DEBUG] [Thread-15135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:57:48.460 [DEBUG] [Thread-15136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:57:57.856 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:57:57.857 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:02.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:58:02.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:58:02.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-25T16:58:03.497 [DEBUG] [Thread-15137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 57, 36), 28.16, 15.35, 0.0, 32.11, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:58:03.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:57:36
2025-12-25T16:58:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:58:03.943 [DEBUG] [Thread-15138] [transport.py] [_log()] starting thread (client mode): 0xb6bb4220
2025-12-25T16:58:03.944 [DEBUG] [Thread-15138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:58:03.963 [DEBUG] [Thread-15138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:58:03.963 [INFO] [Thread-15138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] client lang: <none>
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] server lang: <none>
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] kex follows: False
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:58:03.966 [DEBUG] [Thread-15138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:58:03.967 [DEBUG] [Thread-15138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:58:03.967 [DEBUG] [Thread-15138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:58:03.967 [DEBUG] [Thread-15138] [transport.py] [_log()] Compression: none
2025-12-25T16:58:03.967 [DEBUG] [Thread-15138] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:58:03.985 [DEBUG] [Thread-15138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:58:03.985 [DEBUG] [Thread-15138] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:58:03.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:58:03.987 [DEBUG] [Thread-15138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:58:03.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:58:04.028 [DEBUG] [Thread-15138] [transport.py] [_log()] userauth is OK
2025-12-25T16:58:04.029 [DEBUG] [Thread-15138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:58:04.029 [DEBUG] [Thread-15138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:58:04.029 [DEBUG] [Thread-15138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:58:04.029 [DEBUG] [Thread-15138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:58:04.060 [INFO] [Thread-15138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:58:04.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:58:04.848 [DEBUG] [Thread-15138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:58:04.848 [DEBUG] [Thread-15138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:58:04.848 [DEBUG] [Thread-15138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:58:04.889 [DEBUG] [Thread-15138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:58:04.889 [DEBUG] [Thread-15138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:58:04.893 [DEBUG] [Thread-15138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:58:04.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:58:04.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:58:04.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:58:04.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:58:04.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:58:04.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:58:04.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:58:04.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:58:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:58:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.623325 -999.00  +25.40  34.17     21   +1.70 1 1 2 1 1   888    0 21.57 -94.00 ----- 35.6 34.2 307.6 40.9 29.1 -28.2 29.1 -28.0 30.0 -25.6 30.2 -26.1
2025-12-25T16:58:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:58:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:58:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.623325
2025-12-25T16:58:04.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:58:04.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:58:04.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:58:04.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:58:04.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:58:04.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:57:36', tmtdew=28.16, humidity=15.35, cloud=0.0, wind=32.11, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:57:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:58:04.919 [DEBUG] [Thread-15138] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:58:05.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T16:58:05.014 [DEBUG] [Thread-15141] [transport.py] [_log()] starting thread (client mode): 0xb6b289a0
2025-12-25T16:58:05.014 [DEBUG] [Thread-15141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:58:05.028 [DEBUG] [Thread-15141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:58:05.029 [INFO] [Thread-15141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:58:05.036 [DEBUG] [Thread-15141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:58:05.037 [DEBUG] [Thread-15141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:58:05.037 [DEBUG] [Thread-15141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:58:05.037 [DEBUG] [Thread-15141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:05.037 [DEBUG] [Thread-15141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:05.037 [DEBUG] [Thread-15141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:05.037 [DEBUG] [Thread-15141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] client lang: <none>
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] server lang: <none>
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] kex follows: False
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:58:05.038 [DEBUG] [Thread-15141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:58:05.039 [DEBUG] [Thread-15141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:58:05.039 [DEBUG] [Thread-15141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:58:05.039 [DEBUG] [Thread-15141] [transport.py] [_log()] Compression: none
2025-12-25T16:58:05.039 [DEBUG] [Thread-15141] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:58:05.096 [DEBUG] [Thread-15141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:58:05.097 [DEBUG] [Thread-15141] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:58:05.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:58:05.098 [DEBUG] [Thread-15141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:58:05.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:58:05.155 [DEBUG] [Thread-15141] [transport.py] [_log()] userauth is OK
2025-12-25T16:58:05.155 [DEBUG] [Thread-15141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:58:05.155 [DEBUG] [Thread-15141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:58:05.156 [DEBUG] [Thread-15141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:58:05.156 [DEBUG] [Thread-15141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:58:05.175 [INFO] [Thread-15141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:58:05.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-25T16:58:05.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:58:05.980 [DEBUG] [Thread-15141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:58:05.981 [DEBUG] [Thread-15141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:58:06.029 [DEBUG] [Thread-15141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:58:06.029 [DEBUG] [Thread-15141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:58:06.041 [DEBUG] [Thread-15141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:58:06.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:58:06.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-25T16:58:06.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-25T16:58:06.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:58:06.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:58:06.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:58:06.084 [DEBUG] [Thread-15141] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:58:14.998 [DEBUG] [Thread-15143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:18.526 [DEBUG] [Thread-15144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:33.576 [DEBUG] [Thread-15145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:36.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:58:36.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:58:36.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-25T16:58:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 58, 8), 27.82, 15.68, 0.0, 35.04, 25.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:58:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:58:08
2025-12-25T16:58:36.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:58:37.076 [DEBUG] [Thread-15146] [transport.py] [_log()] starting thread (client mode): 0xb6b222f0
2025-12-25T16:58:37.076 [DEBUG] [Thread-15146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:58:37.097 [DEBUG] [Thread-15146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:58:37.097 [INFO] [Thread-15146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] client lang: <none>
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] server lang: <none>
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] kex follows: False
2025-12-25T16:58:37.101 [DEBUG] [Thread-15146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:58:37.102 [DEBUG] [Thread-15146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:58:37.102 [DEBUG] [Thread-15146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:58:37.102 [DEBUG] [Thread-15146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:58:37.102 [DEBUG] [Thread-15146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:58:37.102 [DEBUG] [Thread-15146] [transport.py] [_log()] Compression: none
2025-12-25T16:58:37.102 [DEBUG] [Thread-15146] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:58:37.120 [DEBUG] [Thread-15146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:58:37.120 [DEBUG] [Thread-15146] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:58:37.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:58:37.121 [DEBUG] [Thread-15146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:58:37.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:58:37.123 [DEBUG] [Thread-15146] [transport.py] [_log()] userauth is OK
2025-12-25T16:58:37.124 [DEBUG] [Thread-15146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:58:37.124 [DEBUG] [Thread-15146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:58:37.124 [DEBUG] [Thread-15146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:58:37.124 [DEBUG] [Thread-15146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:58:37.142 [INFO] [Thread-15146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:58:37.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:58:37.788 [DEBUG] [Thread-15146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:58:37.788 [DEBUG] [Thread-15146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:58:37.789 [DEBUG] [Thread-15146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:58:37.829 [DEBUG] [Thread-15146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:58:37.829 [DEBUG] [Thread-15146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:58:37.833 [DEBUG] [Thread-15146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:58:37.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:58:37.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:58:37.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:58:37.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:58:37.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:58:37.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:58:37.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:58:37.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:58:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:58:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.623672 -999.00  +25.40  40.61     21   +1.50 1 1 2 1 1   888    0 21.52 -90.59 ----- 42.1 40.6 298.6 48.8 29.0 -29.4 29.1 -28.0 29.8 -27.0 30.1 -27.2
2025-12-25T16:58:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:58:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:58:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.623672
2025-12-25T16:58:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:58:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:58:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:58:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:58:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:58:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:58:08', tmtdew=27.82, humidity=15.68, cloud=0.0, wind=35.04, temperature=25.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:58:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:58:37.860 [DEBUG] [Thread-15146] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:58:37.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-25T16:58:37.955 [DEBUG] [Thread-15149] [transport.py] [_log()] starting thread (client mode): 0xb6bb5c30
2025-12-25T16:58:37.956 [DEBUG] [Thread-15149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:58:37.970 [DEBUG] [Thread-15149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:58:37.970 [INFO] [Thread-15149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:58:37.978 [DEBUG] [Thread-15149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] client lang: <none>
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] server lang: <none>
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] kex follows: False
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] Compression: none
2025-12-25T16:58:37.979 [DEBUG] [Thread-15149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:58:38.035 [DEBUG] [Thread-15149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:58:38.035 [DEBUG] [Thread-15149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:58:38.036 [DEBUG] [Thread-15149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:58:38.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:58:38.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:58:38.090 [DEBUG] [Thread-15149] [transport.py] [_log()] userauth is OK
2025-12-25T16:58:38.091 [DEBUG] [Thread-15149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:58:38.091 [DEBUG] [Thread-15149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:58:38.091 [DEBUG] [Thread-15149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:58:38.091 [DEBUG] [Thread-15149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:58:38.109 [INFO] [Thread-15149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:58:38.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-25T16:58:38.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:58:38.984 [DEBUG] [Thread-15149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:58:38.984 [DEBUG] [Thread-15149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:58:39.032 [DEBUG] [Thread-15149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:58:39.032 [DEBUG] [Thread-15149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:58:39.041 [DEBUG] [Thread-15149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:58:39.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:58:39.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T16:58:39.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-25T16:58:39.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:58:39.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:58:39.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:58:39.076 [DEBUG] [Thread-15149] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:58:48.606 [DEBUG] [Thread-15151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:57.996 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:58:57.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:03.646 [DEBUG] [Thread-15152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:09.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:59:09.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:59: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-25T16:59:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 58, 40), 28.06, 15.58, 0.0, 35.36, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:59:09.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:58:40
2025-12-25T16:59:09.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:59:10.068 [DEBUG] [Thread-15153] [transport.py] [_log()] starting thread (client mode): 0xb6b60bb0
2025-12-25T16:59:10.068 [DEBUG] [Thread-15153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:59:10.089 [DEBUG] [Thread-15153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:59:10.089 [INFO] [Thread-15153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:59:10.092 [DEBUG] [Thread-15153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] client lang: <none>
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] server lang: <none>
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] kex follows: False
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] Compression: none
2025-12-25T16:59:10.093 [DEBUG] [Thread-15153] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:59:10.109 [DEBUG] [Thread-15153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:59:10.110 [DEBUG] [Thread-15153] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:59:10.110 [DEBUG] [Thread-15153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:59:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:59:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:59:10.112 [DEBUG] [Thread-15153] [transport.py] [_log()] userauth is OK
2025-12-25T16:59:10.112 [DEBUG] [Thread-15153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:59:10.112 [DEBUG] [Thread-15153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:59:10.113 [DEBUG] [Thread-15153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:59:10.113 [DEBUG] [Thread-15153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:59:10.128 [INFO] [Thread-15153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:59:10.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:59:10.932 [DEBUG] [Thread-15153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:59:10.932 [DEBUG] [Thread-15153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:59:10.932 [DEBUG] [Thread-15153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:59:10.973 [DEBUG] [Thread-15153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:59:10.973 [DEBUG] [Thread-15153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:59:10.976 [DEBUG] [Thread-15153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:59:10.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:59:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:59:10.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:59:10.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:59:10.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:59:11.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:59:11.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:59:11.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:59:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:59:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.624019 -999.00  +24.80  42.40     21   +1.30 1 1 2 1 1   888    0 21.86 -91.86 ----- 36.9 42.4 295.0 49.8 28.8 -29.6 29.0 -28.9 29.8 -26.4 29.9 -27.2
2025-12-25T16:59:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:59:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:59:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.624019
2025-12-25T16:59:11.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:59:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:59:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:59:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:59:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:59:11.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:58:40', tmtdew=28.06, humidity=15.58, cloud=0.0, wind=35.36, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:58:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:59:11.004 [DEBUG] [Thread-15153] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:59:11.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-25T16:59:11.101 [DEBUG] [Thread-15156] [transport.py] [_log()] starting thread (client mode): 0xb6bb7d90
2025-12-25T16:59:11.101 [DEBUG] [Thread-15156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:59:11.118 [DEBUG] [Thread-15156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:59:11.118 [INFO] [Thread-15156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:59:11.126 [DEBUG] [Thread-15156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:59:11.127 [DEBUG] [Thread-15156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:59:11.127 [DEBUG] [Thread-15156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:59:11.127 [DEBUG] [Thread-15156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:11.127 [DEBUG] [Thread-15156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:11.127 [DEBUG] [Thread-15156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] client lang: <none>
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] server lang: <none>
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] kex follows: False
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] Compression: none
2025-12-25T16:59:11.128 [DEBUG] [Thread-15156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:59:11.183 [DEBUG] [Thread-15156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:59:11.183 [DEBUG] [Thread-15156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:59:11.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:59:11.184 [DEBUG] [Thread-15156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:59:11.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:59:11.239 [DEBUG] [Thread-15156] [transport.py] [_log()] userauth is OK
2025-12-25T16:59:11.239 [DEBUG] [Thread-15156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:59:11.240 [DEBUG] [Thread-15156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:59:11.240 [DEBUG] [Thread-15156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:59:11.240 [DEBUG] [Thread-15156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:59:11.258 [INFO] [Thread-15156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:59:11.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-25T16:59:11.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:59:12.074 [DEBUG] [Thread-15156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:59:12.074 [DEBUG] [Thread-15156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:59:12.122 [DEBUG] [Thread-15156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:59:12.122 [DEBUG] [Thread-15156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:59:12.131 [DEBUG] [Thread-15156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:59:12.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:59:12.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-25T16:59: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-25T16:59:12.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:59:12.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:59:12.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:59:12.169 [DEBUG] [Thread-15156] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:59:15.025 [DEBUG] [Thread-15158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:18.682 [DEBUG] [Thread-15159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:33.727 [DEBUG] [Thread-15160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T16:59:42.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T16:59:42.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T16:59:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 59, 12), 28.05, 15.58, 0.0, 33.26, 25.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T16:59:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:59:12
2025-12-25T16:59:43.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T16:59:43.160 [DEBUG] [Thread-15161] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e80
2025-12-25T16:59:43.160 [DEBUG] [Thread-15161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:59:43.180 [DEBUG] [Thread-15161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T16:59:43.180 [INFO] [Thread-15161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T16:59:43.183 [DEBUG] [Thread-15161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] client lang: <none>
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] server lang: <none>
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] kex follows: False
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:59:43.184 [DEBUG] [Thread-15161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:59:43.185 [DEBUG] [Thread-15161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:59:43.185 [DEBUG] [Thread-15161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:59:43.185 [DEBUG] [Thread-15161] [transport.py] [_log()] Compression: none
2025-12-25T16:59:43.185 [DEBUG] [Thread-15161] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:59:43.194 [DEBUG] [Thread-15161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:59:43.195 [DEBUG] [Thread-15161] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:59:43.195 [DEBUG] [Thread-15161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T16:59:43.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T16:59:43.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:59:43.197 [DEBUG] [Thread-15161] [transport.py] [_log()] userauth is OK
2025-12-25T16:59:43.197 [DEBUG] [Thread-15161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:59:43.197 [DEBUG] [Thread-15161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:59:43.198 [DEBUG] [Thread-15161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T16:59:43.198 [DEBUG] [Thread-15161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:59:43.234 [INFO] [Thread-15161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:59:43.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:59:43.888 [DEBUG] [Thread-15161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:59:43.888 [DEBUG] [Thread-15161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:59:43.889 [DEBUG] [Thread-15161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T16:59:43.929 [DEBUG] [Thread-15161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:59:43.929 [DEBUG] [Thread-15161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:59:43.933 [DEBUG] [Thread-15161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:59:43.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:59:43.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T16:59:43.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T16:59:43.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T16:59:43.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:59:43.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T16:59:43.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:59:43.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:59:43.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T16:59:43.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.624366 -999.00  +24.70  32.59     21   +1.40 1 1 2 1 1   888    0 21.31 -89.85 ----- 27.7 32.6 293.6 44.9 28.7 -28.3 28.9 -28.6 29.6 -29.3 29.9 -26.3
2025-12-25T16:59:43.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T16:59:43.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T16:59:43.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.624366
2025-12-25T16:59:43.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T16:59:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T16:59:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T16:59:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T16:59:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T16:59:43.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:59:12', tmtdew=28.05, humidity=15.58, cloud=0.0, wind=33.26, temperature=25.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:59:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T16:59:43.960 [DEBUG] [Thread-15161] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:59:44.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-25T16:59:44.054 [DEBUG] [Thread-15164] [transport.py] [_log()] starting thread (client mode): 0xb95b28c0
2025-12-25T16:59:44.054 [DEBUG] [Thread-15164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T16:59:44.069 [DEBUG] [Thread-15164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T16:59:44.069 [INFO] [Thread-15164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:44.077 [DEBUG] [Thread-15164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] client lang: <none>
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] server lang: <none>
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] kex follows: False
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T16:59:44.078 [DEBUG] [Thread-15164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T16:59:44.079 [DEBUG] [Thread-15164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T16:59:44.079 [DEBUG] [Thread-15164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T16:59:44.079 [DEBUG] [Thread-15164] [transport.py] [_log()] Compression: none
2025-12-25T16:59:44.079 [DEBUG] [Thread-15164] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T16:59:44.136 [DEBUG] [Thread-15164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T16:59:44.136 [DEBUG] [Thread-15164] [transport.py] [_log()] Switch to new keys ...
2025-12-25T16:59:44.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T16:59:44.138 [DEBUG] [Thread-15164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T16:59:44.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T16:59:44.195 [DEBUG] [Thread-15164] [transport.py] [_log()] userauth is OK
2025-12-25T16:59:44.195 [DEBUG] [Thread-15164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T16:59:44.196 [DEBUG] [Thread-15164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T16:59:44.196 [DEBUG] [Thread-15164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T16:59:44.196 [DEBUG] [Thread-15164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T16:59:44.215 [INFO] [Thread-15164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T16:59:44.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T16:59:44.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T16:59:45.022 [DEBUG] [Thread-15164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T16:59:45.023 [DEBUG] [Thread-15164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T16:59:45.071 [DEBUG] [Thread-15164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T16:59:45.071 [DEBUG] [Thread-15164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T16:59:45.080 [DEBUG] [Thread-15164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T16:59:45.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T16:59:45.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-25T16:59:45.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-25T16:59:45.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T16:59:45.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T16:59:45.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T16:59:45.119 [DEBUG] [Thread-15164] [transport.py] [_log()] EOF in transport thread
2025-12-25T16:59:48.759 [DEBUG] [Thread-15166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:58.138 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T16:59:58.140 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:03.812 [DEBUG] [Thread-15167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:15.066 [DEBUG] [Thread-15168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:00:15.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:00:15.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-25T17:00:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 16, 59, 44), 27.92, 15.58, 0.0, 35.87, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:00:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 16:59:44
2025-12-25T17:00:15.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:00:16.122 [DEBUG] [Thread-15169] [transport.py] [_log()] starting thread (client mode): 0xb9579270
2025-12-25T17:00:16.122 [DEBUG] [Thread-15169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:00:16.143 [DEBUG] [Thread-15169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:00:16.143 [INFO] [Thread-15169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:00:16.146 [DEBUG] [Thread-15169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] client lang: <none>
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] server lang: <none>
2025-12-25T17:00:16.147 [DEBUG] [Thread-15169] [transport.py] [_log()] kex follows: False
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] Compression: none
2025-12-25T17:00:16.148 [DEBUG] [Thread-15169] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:00:16.165 [DEBUG] [Thread-15169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:00:16.166 [DEBUG] [Thread-15169] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:00:16.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:00:16.167 [DEBUG] [Thread-15169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:00:16.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:00:16.169 [DEBUG] [Thread-15169] [transport.py] [_log()] userauth is OK
2025-12-25T17:00:16.170 [DEBUG] [Thread-15169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:00:16.170 [DEBUG] [Thread-15169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:00:16.170 [DEBUG] [Thread-15169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:00:16.170 [DEBUG] [Thread-15169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:00:16.190 [INFO] [Thread-15169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:00:16.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:00:17.217 [DEBUG] [Thread-15169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:00:17.217 [DEBUG] [Thread-15169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:00:17.217 [DEBUG] [Thread-15169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:00:17.258 [DEBUG] [Thread-15169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:00:17.258 [DEBUG] [Thread-15169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:00:17.261 [DEBUG] [Thread-15169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:00:17.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:00:17.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:00:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:00:17.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:00:17.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:00:17.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:00:17.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:00:17.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:00:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:00:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.624714 -999.00  +24.90  45.06     21   +1.40 1 1 2 1 1   888    0 21.88 -86.38 ----- 26.3 45.1 297.0 48.1 28.7 -28.3 28.9 -28.0 29.6 -25.9 29.9 -26.7
2025-12-25T17:00:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:00:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:00:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.624714
2025-12-25T17:00:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:00:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:00:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:00:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:00:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:00:17.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T16:59:44', tmtdew=27.92, humidity=15.58, cloud=0.0, wind=35.87, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T14:59:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:00:17.285 [DEBUG] [Thread-15169] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:00:17.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-25T17:00:17.383 [DEBUG] [Thread-15172] [transport.py] [_log()] starting thread (client mode): 0xb6bb7eb0
2025-12-25T17:00:17.383 [DEBUG] [Thread-15172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:00:17.398 [DEBUG] [Thread-15172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:00:17.398 [INFO] [Thread-15172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] client lang: <none>
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] server lang: <none>
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] kex follows: False
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] Compression: none
2025-12-25T17:00:17.406 [DEBUG] [Thread-15172] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:00:17.461 [DEBUG] [Thread-15172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:00:17.461 [DEBUG] [Thread-15172] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:00:17.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:00:17.461 [DEBUG] [Thread-15172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:00:17.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:00:17.518 [DEBUG] [Thread-15172] [transport.py] [_log()] userauth is OK
2025-12-25T17:00:17.518 [DEBUG] [Thread-15172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:00:17.518 [DEBUG] [Thread-15172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:00:17.518 [DEBUG] [Thread-15172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:00:17.518 [DEBUG] [Thread-15172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:00:17.532 [INFO] [Thread-15172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:00:17.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-25T17:00:17.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:00:18.365 [DEBUG] [Thread-15172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:00:18.365 [DEBUG] [Thread-15172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:00:18.413 [DEBUG] [Thread-15172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:00:18.414 [DEBUG] [Thread-15172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:00:18.422 [DEBUG] [Thread-15172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:00:18.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:00:18.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:00: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-25T17:00:18.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:00:18.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:00:18.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:00:18.453 [DEBUG] [Thread-15172] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:00:18.845 [DEBUG] [Thread-15174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:33.887 [DEBUG] [Thread-15175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:48.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:00:48.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:00:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:00:48.918 [DEBUG] [Thread-15176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:49.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 0, 16), 28.34, 15.2, 0.0, 37.6, 26.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:00:49.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:00:16
2025-12-25T17:00:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:00:49.523 [DEBUG] [Thread-15177] [transport.py] [_log()] starting thread (client mode): 0xb6bc2b00
2025-12-25T17:00:49.523 [DEBUG] [Thread-15177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:00:49.543 [DEBUG] [Thread-15177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:00:49.543 [INFO] [Thread-15177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] client lang: <none>
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] server lang: <none>
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] kex follows: False
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] Compression: none
2025-12-25T17:00:49.546 [DEBUG] [Thread-15177] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:00:49.561 [DEBUG] [Thread-15177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:00:49.562 [DEBUG] [Thread-15177] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:00:49.562 [DEBUG] [Thread-15177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:00:49.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:00:49.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:00:49.563 [DEBUG] [Thread-15177] [transport.py] [_log()] userauth is OK
2025-12-25T17:00:49.563 [DEBUG] [Thread-15177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:00:49.563 [DEBUG] [Thread-15177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:00:49.563 [DEBUG] [Thread-15177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:00:49.563 [DEBUG] [Thread-15177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:00:49.574 [INFO] [Thread-15177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:00:49.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:00:50.190 [DEBUG] [Thread-15177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:00:50.191 [DEBUG] [Thread-15177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:00:50.191 [DEBUG] [Thread-15177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:00:50.231 [DEBUG] [Thread-15177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:00:50.231 [DEBUG] [Thread-15177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:00:50.233 [DEBUG] [Thread-15177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:00:50.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:00:50.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:00:50.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:00:50.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:00:50.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:00:50.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:00:50.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.625061 -999.00  +25.30  27.60     21   +1.70 1 1 1 1 1   888    0 21.82 -78.00 ----- 28.4 27.6 286.4 42.5 28.7 -27.8 28.8 -28.2 29.4 -31.1 29.9 -25.8
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.625061
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:00:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:00:16', tmtdew=28.34, humidity=15.2, cloud=0.0, wind=37.6, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:00:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:00:50.255 [DEBUG] [Thread-15177] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:00:50.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-25T17:00:50.339 [DEBUG] [Thread-15180] [transport.py] [_log()] starting thread (client mode): 0xb9591240
2025-12-25T17:00:50.339 [DEBUG] [Thread-15180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:00:50.353 [DEBUG] [Thread-15180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:00:50.353 [INFO] [Thread-15180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] client lang: <none>
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] server lang: <none>
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] kex follows: False
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] Compression: none
2025-12-25T17:00:50.361 [DEBUG] [Thread-15180] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:00:50.419 [DEBUG] [Thread-15180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:00:50.419 [DEBUG] [Thread-15180] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:00:50.419 [DEBUG] [Thread-15180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:00:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:00:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:00:50.475 [DEBUG] [Thread-15180] [transport.py] [_log()] userauth is OK
2025-12-25T17:00:50.475 [DEBUG] [Thread-15180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:00:50.475 [DEBUG] [Thread-15180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:00:50.475 [DEBUG] [Thread-15180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:00:50.475 [DEBUG] [Thread-15180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:00:50.489 [INFO] [Thread-15180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:00:50.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-25T17:00:50.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:00:51.313 [DEBUG] [Thread-15180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:00:51.313 [DEBUG] [Thread-15180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:00:51.361 [DEBUG] [Thread-15180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:00:51.361 [DEBUG] [Thread-15180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:00:51.371 [DEBUG] [Thread-15180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:00:51.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:00:51.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-25T17:00:51.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:00:51.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:00:51.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:00:51.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:00:51.407 [DEBUG] [Thread-15180] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:00:58.282 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:00:58.284 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:03.951 [DEBUG] [Thread-15182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:15.099 [DEBUG] [Thread-15183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:19.003 [DEBUG] [Thread-15184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:21.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:01:21.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:01:21.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-25T17:01:22.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 0, 48), 28.91, 14.98, 0.0, 35.52, 26.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:01:22.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:00:48
2025-12-25T17:01:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:01:22.483 [DEBUG] [Thread-15185] [transport.py] [_log()] starting thread (client mode): 0xb6b20700
2025-12-25T17:01:22.483 [DEBUG] [Thread-15185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:01:22.503 [DEBUG] [Thread-15185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:01:22.503 [INFO] [Thread-15185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] client lang: <none>
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] server lang: <none>
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] kex follows: False
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] Compression: none
2025-12-25T17:01:22.505 [DEBUG] [Thread-15185] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:01:22.517 [DEBUG] [Thread-15185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:01:22.517 [DEBUG] [Thread-15185] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:01:22.517 [DEBUG] [Thread-15185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:01:22.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:01:22.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:01:22.518 [DEBUG] [Thread-15185] [transport.py] [_log()] userauth is OK
2025-12-25T17:01:22.518 [DEBUG] [Thread-15185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:01:22.518 [DEBUG] [Thread-15185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:01:22.518 [DEBUG] [Thread-15185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:01:22.518 [DEBUG] [Thread-15185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:01:22.528 [INFO] [Thread-15185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:01:22.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:01:23.353 [DEBUG] [Thread-15185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:01:23.353 [DEBUG] [Thread-15185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:01:23.353 [DEBUG] [Thread-15185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:01:23.394 [DEBUG] [Thread-15185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:01:23.394 [DEBUG] [Thread-15185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:01:23.396 [DEBUG] [Thread-15185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:01:23.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:01:23.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:01:23.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:01:23.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:01:23.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:01:23.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:01:23.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.625408 -999.00  +25.40  33.45     21   +1.50 1 1 2 1 1   888    0 21.56 -78.28 ----- 33.5 33.5 291.4 43.6 28.7 -28.0 28.8 -28.4 29.5 -26.9 29.9 -26.6
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.625408
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:01:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:00:48', tmtdew=28.91, humidity=14.98, cloud=0.0, wind=35.52, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:00:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:01:23.411 [DEBUG] [Thread-15185] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:01:23.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-25T17:01:23.497 [DEBUG] [Thread-15188] [transport.py] [_log()] starting thread (client mode): 0xb6b23fd0
2025-12-25T17:01:23.497 [DEBUG] [Thread-15188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:01:23.511 [DEBUG] [Thread-15188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:01:23.511 [INFO] [Thread-15188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] client lang: <none>
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] server lang: <none>
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] kex follows: False
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] Compression: none
2025-12-25T17:01:23.519 [DEBUG] [Thread-15188] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:01:23.577 [DEBUG] [Thread-15188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:01:23.577 [DEBUG] [Thread-15188] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:01:23.577 [DEBUG] [Thread-15188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:01:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:01:23.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:01:23.635 [DEBUG] [Thread-15188] [transport.py] [_log()] userauth is OK
2025-12-25T17:01:23.635 [DEBUG] [Thread-15188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:01:23.635 [DEBUG] [Thread-15188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:01:23.635 [DEBUG] [Thread-15188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:01:23.635 [DEBUG] [Thread-15188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:01:23.649 [INFO] [Thread-15188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:01:23.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-25T17:01:23.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:01:24.497 [DEBUG] [Thread-15188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:01:24.497 [DEBUG] [Thread-15188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:01:24.544 [DEBUG] [Thread-15188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:01:24.544 [DEBUG] [Thread-15188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:01:24.553 [DEBUG] [Thread-15188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:01:24.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:01:24.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:01:24.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:01:24.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:01:24.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:01:24.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:01:24.584 [DEBUG] [Thread-15188] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:01:34.035 [DEBUG] [Thread-15190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:49.083 [DEBUG] [Thread-15191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:54.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:01:54.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:01:54.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-25T17:01:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 1, 20), 28.84, 15.03, 0.0, 36.24, 26.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:01:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:01:20
2025-12-25T17:01:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:01:55.638 [DEBUG] [Thread-15192] [transport.py] [_log()] starting thread (client mode): 0xb6bc3e50
2025-12-25T17:01:55.639 [DEBUG] [Thread-15192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:01:55.659 [DEBUG] [Thread-15192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:01:55.659 [INFO] [Thread-15192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:01:55.662 [DEBUG] [Thread-15192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] client lang: <none>
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] server lang: <none>
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] kex follows: False
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] Compression: none
2025-12-25T17:01:55.663 [DEBUG] [Thread-15192] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:01:55.679 [DEBUG] [Thread-15192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:01:55.680 [DEBUG] [Thread-15192] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:01:55.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:01:55.681 [DEBUG] [Thread-15192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:01:55.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:01:55.682 [DEBUG] [Thread-15192] [transport.py] [_log()] userauth is OK
2025-12-25T17:01:55.682 [DEBUG] [Thread-15192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:01:55.682 [DEBUG] [Thread-15192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:01:55.683 [DEBUG] [Thread-15192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:01:55.683 [DEBUG] [Thread-15192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:01:55.700 [INFO] [Thread-15192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:01:55.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:01:56.332 [DEBUG] [Thread-15192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:01:56.332 [DEBUG] [Thread-15192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:01:56.332 [DEBUG] [Thread-15192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:01:56.373 [DEBUG] [Thread-15192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:01:56.373 [DEBUG] [Thread-15192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:01:56.377 [DEBUG] [Thread-15192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:01:56.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:01:56.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:01:56.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:01:56.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:01:56.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:01:56.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:01:56.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:01:56.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:01:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:01:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.625755 -999.00  +25.40  25.65     21   +1.60 1 1 1 1 1   888    0 22.07 -81.52 ----- 20.6 25.6 285.4 28.9 28.6 -28.3 28.8 -28.4 29.4 -25.9 29.8 -25.5
2025-12-25T17:01:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:01:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:01:56.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.625755
2025-12-25T17:01:56.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:01:56.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:01:56.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:01:56.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:01:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:01:56.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:01:20', tmtdew=28.84, humidity=15.03, cloud=0.0, wind=36.24, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:01:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:01:56.404 [DEBUG] [Thread-15192] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:01:56.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-25T17:01:56.497 [DEBUG] [Thread-15195] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e20
2025-12-25T17:01:56.497 [DEBUG] [Thread-15195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:01:56.512 [DEBUG] [Thread-15195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:01:56.512 [INFO] [Thread-15195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] client lang: <none>
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] server lang: <none>
2025-12-25T17:01:56.520 [DEBUG] [Thread-15195] [transport.py] [_log()] kex follows: False
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] Compression: none
2025-12-25T17:01:56.521 [DEBUG] [Thread-15195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:01:56.579 [DEBUG] [Thread-15195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:01:56.580 [DEBUG] [Thread-15195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:01:56.580 [DEBUG] [Thread-15195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:01:56.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:01:56.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:01:56.635 [DEBUG] [Thread-15195] [transport.py] [_log()] userauth is OK
2025-12-25T17:01:56.635 [DEBUG] [Thread-15195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:01:56.635 [DEBUG] [Thread-15195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:01:56.635 [DEBUG] [Thread-15195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:01:56.636 [DEBUG] [Thread-15195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:01:56.659 [INFO] [Thread-15195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:01:56.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-25T17:01:56.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:01:57.495 [DEBUG] [Thread-15195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:01:57.496 [DEBUG] [Thread-15195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:01:57.544 [DEBUG] [Thread-15195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:01:57.544 [DEBUG] [Thread-15195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:01:57.554 [DEBUG] [Thread-15195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:01:57.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:01:57.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:01:57.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-25T17:01:57.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:01:57.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:01:57.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:01:57.591 [DEBUG] [Thread-15195] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:01:58.422 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:01:58.423 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:04.116 [DEBUG] [Thread-15197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:15.148 [DEBUG] [Thread-15198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:19.153 [DEBUG] [Thread-15199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:27.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:02:27.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:02:27.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-25T17:02:28.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 2, 25), 28.85, 14.68, 0.0, 37.49, 26.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:02:28.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:02:25
2025-12-25T17:02:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:02:28.596 [DEBUG] [Thread-15200] [transport.py] [_log()] starting thread (client mode): 0xb6b4fd30
2025-12-25T17:02:28.596 [DEBUG] [Thread-15200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:02:28.616 [DEBUG] [Thread-15200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:02:28.616 [INFO] [Thread-15200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] client lang: <none>
2025-12-25T17:02:28.619 [DEBUG] [Thread-15200] [transport.py] [_log()] server lang: <none>
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] kex follows: False
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] Compression: none
2025-12-25T17:02:28.620 [DEBUG] [Thread-15200] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:02:28.638 [DEBUG] [Thread-15200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:02:28.638 [DEBUG] [Thread-15200] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:02:28.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:02:28.639 [DEBUG] [Thread-15200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:02:28.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:02:28.641 [DEBUG] [Thread-15200] [transport.py] [_log()] userauth is OK
2025-12-25T17:02:28.642 [DEBUG] [Thread-15200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:02:28.642 [DEBUG] [Thread-15200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:02:28.642 [DEBUG] [Thread-15200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:02:28.642 [DEBUG] [Thread-15200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:02:28.667 [INFO] [Thread-15200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:02:28.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:02:29.460 [DEBUG] [Thread-15200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:02:29.461 [DEBUG] [Thread-15200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:02:29.461 [DEBUG] [Thread-15200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:02:29.502 [DEBUG] [Thread-15200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:02:29.502 [DEBUG] [Thread-15200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:02:29.505 [DEBUG] [Thread-15200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:02:29.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:02:29.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:02:29.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:02:29.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:02:29.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:02:29.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:02:29.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:02:29.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:02:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:02:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.626103 -999.00  +25.10  35.76     21   +1.60 1 1 2 1 1   887    0 21.97 -76.59 ----- 34.0 35.8 290.0 47.6 28.6 -29.1 28.8 -28.0 29.4 -25.5 29.8 -26.9
2025-12-25T17:02:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:02:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:02:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.626103
2025-12-25T17:02:29.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:02:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:02:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:02:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:02:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:02:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:02:25', tmtdew=28.85, humidity=14.68, cloud=0.0, wind=37.49, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:01:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:02:29.524 [DEBUG] [Thread-15200] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:02:29.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-25T17:02:29.619 [DEBUG] [Thread-15203] [transport.py] [_log()] starting thread (client mode): 0xb95598a0
2025-12-25T17:02:29.619 [DEBUG] [Thread-15203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:02:29.634 [DEBUG] [Thread-15203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:02:29.634 [INFO] [Thread-15203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] client lang: <none>
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] server lang: <none>
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] kex follows: False
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] Compression: none
2025-12-25T17:02:29.642 [DEBUG] [Thread-15203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:02:29.699 [DEBUG] [Thread-15203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:02:29.700 [DEBUG] [Thread-15203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:02:29.700 [DEBUG] [Thread-15203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:02:29.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:02:29.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:02:29.759 [DEBUG] [Thread-15203] [transport.py] [_log()] userauth is OK
2025-12-25T17:02:29.759 [DEBUG] [Thread-15203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:02:29.759 [DEBUG] [Thread-15203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:02:29.759 [DEBUG] [Thread-15203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:02:29.760 [DEBUG] [Thread-15203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:02:29.778 [INFO] [Thread-15203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:02:29.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:02:29.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:02:30.635 [DEBUG] [Thread-15203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:02:30.636 [DEBUG] [Thread-15203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:02:30.684 [DEBUG] [Thread-15203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:02:30.684 [DEBUG] [Thread-15203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:02:30.693 [DEBUG] [Thread-15203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:02:30.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:02:30.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')
2025-12-25T17:02:30.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-25T17:02:30.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:02:30.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:02:30.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:02:30.729 [DEBUG] [Thread-15203] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:02:34.186 [DEBUG] [Thread-15205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:49.237 [DEBUG] [Thread-15206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:58.563 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:02:58.564 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:00.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:03:00.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:03:00.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-25T17:03:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 2, 57), 28.97, 14.68, 0.0, 41.46, 25.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:03:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:02:57
2025-12-25T17:03:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:03:01.723 [DEBUG] [Thread-15207] [transport.py] [_log()] starting thread (client mode): 0xb955aa40
2025-12-25T17:03:01.723 [DEBUG] [Thread-15207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:03:01.744 [DEBUG] [Thread-15207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:03:01.744 [INFO] [Thread-15207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] client lang: <none>
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] server lang: <none>
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] kex follows: False
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] Compression: none
2025-12-25T17:03:01.747 [DEBUG] [Thread-15207] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:03:01.764 [DEBUG] [Thread-15207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:03:01.764 [DEBUG] [Thread-15207] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:03:01.764 [DEBUG] [Thread-15207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:03:01.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:03:01.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:03:01.765 [DEBUG] [Thread-15207] [transport.py] [_log()] userauth is OK
2025-12-25T17:03:01.765 [DEBUG] [Thread-15207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:03:01.765 [DEBUG] [Thread-15207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:03:01.765 [DEBUG] [Thread-15207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:03:01.765 [DEBUG] [Thread-15207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:03:01.775 [INFO] [Thread-15207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:03:01.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:03:02.416 [DEBUG] [Thread-15207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:03:02.417 [DEBUG] [Thread-15207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:03:02.417 [DEBUG] [Thread-15207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:03:02.458 [DEBUG] [Thread-15207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:03:02.458 [DEBUG] [Thread-15207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:03:02.462 [DEBUG] [Thread-15207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:03:02.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:03:02.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:03:02.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:03:02.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:03:02.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:03:02.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:03:02.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:03:02.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:03:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:03:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.626450 -999.00  +25.20  35.05     21   +1.70 1 1 2 1 1   887    0 21.37 -82.27 ----- 35.1 35.0 285.6 39.5 28.7 -28.6 28.8 -27.8 29.5 -26.9 29.8 -27.1
2025-12-25T17:03:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:03:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:03:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.626450
2025-12-25T17:03:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:03:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:03:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:03:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:03:02.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:03:02.491 [DEBUG] [Thread-15207] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:03:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:02:57', tmtdew=28.97, humidity=14.68, cloud=0.0, wind=41.46, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:02:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:03:02.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-25T17:03:02.584 [DEBUG] [Thread-15210] [transport.py] [_log()] starting thread (client mode): 0xb6bc36a0
2025-12-25T17:03:02.584 [DEBUG] [Thread-15210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:03:02.598 [DEBUG] [Thread-15210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:03:02.598 [INFO] [Thread-15210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:03:02.605 [DEBUG] [Thread-15210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] client lang: <none>
2025-12-25T17:03:02.606 [DEBUG] [Thread-15210] [transport.py] [_log()] server lang: <none>
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] kex follows: False
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] Compression: none
2025-12-25T17:03:02.607 [DEBUG] [Thread-15210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:03:02.664 [DEBUG] [Thread-15210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:03:02.665 [DEBUG] [Thread-15210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:03:02.666 [DEBUG] [Thread-15210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:03:02.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:03:02.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:03:02.729 [DEBUG] [Thread-15210] [transport.py] [_log()] userauth is OK
2025-12-25T17:03:02.729 [DEBUG] [Thread-15210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:03:02.730 [DEBUG] [Thread-15210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:03:02.730 [DEBUG] [Thread-15210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:03:02.730 [DEBUG] [Thread-15210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:03:02.749 [INFO] [Thread-15210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:03:02.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:03:02.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:03:03.580 [DEBUG] [Thread-15210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:03:03.581 [DEBUG] [Thread-15210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:03:03.629 [DEBUG] [Thread-15210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:03:03.629 [DEBUG] [Thread-15210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:03:03.638 [DEBUG] [Thread-15210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:03:03.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:03:03.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:03:03.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:03:03.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:03:03.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:03:03.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:03:03.675 [DEBUG] [Thread-15210] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:03:04.271 [DEBUG] [Thread-15212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:15.186 [DEBUG] [Thread-15213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:19.331 [DEBUG] [Thread-15214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:33.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:03:33.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:03:33.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:03:34.356 [DEBUG] [Thread-15215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 3, 29), 28.65, 14.95, 0.0, 36.97, 25.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:03:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:03:29
2025-12-25T17:03:34.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:03:34.669 [DEBUG] [Thread-15216] [transport.py] [_log()] starting thread (client mode): 0xb6b2a860
2025-12-25T17:03:34.670 [DEBUG] [Thread-15216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:03:34.691 [DEBUG] [Thread-15216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:03:34.691 [INFO] [Thread-15216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:03:34.695 [DEBUG] [Thread-15216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] client lang: <none>
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] server lang: <none>
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] kex follows: False
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] Compression: none
2025-12-25T17:03:34.696 [DEBUG] [Thread-15216] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:03:34.715 [DEBUG] [Thread-15216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:03:34.716 [DEBUG] [Thread-15216] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:03:34.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:03:34.717 [DEBUG] [Thread-15216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:03:34.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:03:34.719 [DEBUG] [Thread-15216] [transport.py] [_log()] userauth is OK
2025-12-25T17:03:34.719 [DEBUG] [Thread-15216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:03:34.720 [DEBUG] [Thread-15216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:03:34.720 [DEBUG] [Thread-15216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:03:34.720 [DEBUG] [Thread-15216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:03:34.742 [INFO] [Thread-15216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:03:34.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:03:35.562 [DEBUG] [Thread-15216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:03:35.563 [DEBUG] [Thread-15216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:03:35.563 [DEBUG] [Thread-15216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:03:35.603 [DEBUG] [Thread-15216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:03:35.603 [DEBUG] [Thread-15216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:03:35.606 [DEBUG] [Thread-15216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:03:35.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:03:35.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:03:35.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:03:35.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:03:35.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:03:35.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:03:35.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.627144 -999.00  +25.40  30.43     21   +1.60 1 1 2 1 1   887    0 21.72 -73.24 ----- 38.0 30.4 290.8 45.0 28.6 -29.0 28.8 -28.1 29.5 -27.3 29.8 -26.5
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.627144
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:03:35.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:03:35.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:03:35.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:03:29', tmtdew=28.65, humidity=14.95, cloud=0.0, wind=36.97, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:03:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:03:35.623 [DEBUG] [Thread-15216] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:03:35.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-25T17:03:35.718 [DEBUG] [Thread-15219] [transport.py] [_log()] starting thread (client mode): 0xb6b2a800
2025-12-25T17:03:35.718 [DEBUG] [Thread-15219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:03:35.733 [DEBUG] [Thread-15219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:03:35.733 [INFO] [Thread-15219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:03:35.740 [DEBUG] [Thread-15219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:03:35.740 [DEBUG] [Thread-15219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:03:35.740 [DEBUG] [Thread-15219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] client lang: <none>
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] server lang: <none>
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] kex follows: False
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] Compression: none
2025-12-25T17:03:35.741 [DEBUG] [Thread-15219] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:03:35.799 [DEBUG] [Thread-15219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:03:35.799 [DEBUG] [Thread-15219] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:03:35.800 [DEBUG] [Thread-15219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:03:35.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:03:35.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:03:35.855 [DEBUG] [Thread-15219] [transport.py] [_log()] userauth is OK
2025-12-25T17:03:35.855 [DEBUG] [Thread-15219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:03:35.855 [DEBUG] [Thread-15219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:03:35.855 [DEBUG] [Thread-15219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:03:35.855 [DEBUG] [Thread-15219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:03:35.876 [INFO] [Thread-15219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:03:35.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-25T17:03:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:03:36.696 [DEBUG] [Thread-15219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:03:36.696 [DEBUG] [Thread-15219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:03:36.744 [DEBUG] [Thread-15219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:03:36.744 [DEBUG] [Thread-15219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:03:36.753 [DEBUG] [Thread-15219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:03:36.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:03:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:03:36.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-25T17:03:36.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:03:36.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:03:36.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:03:36.790 [DEBUG] [Thread-15219] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:03:49.386 [DEBUG] [Thread-15221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:58.704 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:03:58.705 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:04.432 [DEBUG] [Thread-15222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:06.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:04:06.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:04:06.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:04:07.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 4, 1), 28.49, 15.0, 0.0, 35.66, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:04:07.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:04:01
2025-12-25T17:04:07.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:04:07.751 [DEBUG] [Thread-15223] [transport.py] [_log()] starting thread (client mode): 0xb9593ac0
2025-12-25T17:04:07.751 [DEBUG] [Thread-15223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:04:07.772 [DEBUG] [Thread-15223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:04:07.772 [INFO] [Thread-15223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:04:07.775 [DEBUG] [Thread-15223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:04:07.775 [DEBUG] [Thread-15223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:04:07.775 [DEBUG] [Thread-15223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:04:07.775 [DEBUG] [Thread-15223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] client lang: <none>
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] server lang: <none>
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] kex follows: False
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] Compression: none
2025-12-25T17:04:07.776 [DEBUG] [Thread-15223] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:04:07.794 [DEBUG] [Thread-15223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:04:07.794 [DEBUG] [Thread-15223] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:04:07.795 [DEBUG] [Thread-15223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:04:07.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:04:07.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:04:07.797 [DEBUG] [Thread-15223] [transport.py] [_log()] userauth is OK
2025-12-25T17:04:07.797 [DEBUG] [Thread-15223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:04:07.797 [DEBUG] [Thread-15223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:04:07.797 [DEBUG] [Thread-15223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:04:07.798 [DEBUG] [Thread-15223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:04:07.812 [INFO] [Thread-15223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:04:07.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:04:08.427 [DEBUG] [Thread-15223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:04:08.427 [DEBUG] [Thread-15223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:04:08.428 [DEBUG] [Thread-15223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:04:08.468 [DEBUG] [Thread-15223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:04:08.468 [DEBUG] [Thread-15223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:04:08.471 [DEBUG] [Thread-15223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:04:08.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:04:08.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:04:08.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:04:08.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:04:08.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:04:08.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:04:08.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:04:08.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:04:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:04:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.627491 -999.00  +25.60  35.58     20   +1.60 1 1 2 1 1   887    0 21.81 -61.62 ----- 36.6 35.6 299.2 43.9 28.7 -28.7 28.8 -27.6 29.5 -25.4 29.8 -27.0
2025-12-25T17:04:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:04:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:04:08.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.627491
2025-12-25T17:04:08.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:04:08.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:04:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:04:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:04:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:04:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:04:01', tmtdew=28.49, humidity=15.0, cloud=0.0, wind=35.66, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:03:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:04:08.499 [DEBUG] [Thread-15223] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:04:08.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-25T17:04:08.595 [DEBUG] [Thread-15226] [transport.py] [_log()] starting thread (client mode): 0xb6b4fa30
2025-12-25T17:04:08.595 [DEBUG] [Thread-15226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:04:08.613 [DEBUG] [Thread-15226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:04:08.613 [INFO] [Thread-15226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:04:08.624 [DEBUG] [Thread-15226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] client lang: <none>
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] server lang: <none>
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] kex follows: False
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:04:08.625 [DEBUG] [Thread-15226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:04:08.626 [DEBUG] [Thread-15226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:04:08.626 [DEBUG] [Thread-15226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:04:08.626 [DEBUG] [Thread-15226] [transport.py] [_log()] Compression: none
2025-12-25T17:04:08.626 [DEBUG] [Thread-15226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:04:08.683 [DEBUG] [Thread-15226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:04:08.683 [DEBUG] [Thread-15226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:04:08.684 [DEBUG] [Thread-15226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:04:08.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:04:08.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:04:08.743 [DEBUG] [Thread-15226] [transport.py] [_log()] userauth is OK
2025-12-25T17:04:08.744 [DEBUG] [Thread-15226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:04:08.744 [DEBUG] [Thread-15226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:04:08.744 [DEBUG] [Thread-15226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:04:08.744 [DEBUG] [Thread-15226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:04:08.766 [INFO] [Thread-15226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:04:08.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-25T17:04:08.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:04:09.577 [DEBUG] [Thread-15226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:04:09.578 [DEBUG] [Thread-15226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:04:09.628 [DEBUG] [Thread-15226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:04:09.628 [DEBUG] [Thread-15226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:04:09.641 [DEBUG] [Thread-15226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:04:09.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:04:09.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-25T17:04:09.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:04:09.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:04:09.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:04:09.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:04:09.688 [DEBUG] [Thread-15226] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:04:15.231 [DEBUG] [Thread-15228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:19.469 [DEBUG] [Thread-15229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:34.518 [DEBUG] [Thread-15230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:39.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:04:39.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:04:39.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-25T17:04:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 4, 33), 29.12, 14.49, 0.0, 51.09, 26.21, 0, 0, 0, 2, 1, 0),)
2025-12-25T17:04:40.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:04:33
2025-12-25T17:04:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:04:40.685 [DEBUG] [Thread-15231] [transport.py] [_log()] starting thread (client mode): 0xb9592b60
2025-12-25T17:04:40.685 [DEBUG] [Thread-15231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:04:40.708 [DEBUG] [Thread-15231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:04:40.708 [INFO] [Thread-15231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] client lang: <none>
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] server lang: <none>
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] kex follows: False
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:04:40.710 [DEBUG] [Thread-15231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:04:40.711 [DEBUG] [Thread-15231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:04:40.711 [DEBUG] [Thread-15231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:04:40.711 [DEBUG] [Thread-15231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:04:40.711 [DEBUG] [Thread-15231] [transport.py] [_log()] Compression: none
2025-12-25T17:04:40.711 [DEBUG] [Thread-15231] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:04:40.729 [DEBUG] [Thread-15231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:04:40.729 [DEBUG] [Thread-15231] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:04:40.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:04:40.729 [DEBUG] [Thread-15231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:04:40.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:04:40.730 [DEBUG] [Thread-15231] [transport.py] [_log()] userauth is OK
2025-12-25T17:04:40.730 [DEBUG] [Thread-15231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:04:40.730 [DEBUG] [Thread-15231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:04:40.730 [DEBUG] [Thread-15231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:04:40.730 [DEBUG] [Thread-15231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:04:40.745 [INFO] [Thread-15231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:04:40.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:04:41.551 [DEBUG] [Thread-15231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:04:41.551 [DEBUG] [Thread-15231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:04:41.551 [DEBUG] [Thread-15231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:04:41.592 [DEBUG] [Thread-15231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:04:41.592 [DEBUG] [Thread-15231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:04:41.594 [DEBUG] [Thread-15231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:04:41.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:04:41.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:04:41.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:04:41.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:04:41.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:04:41.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.627839 -999.00  +25.80  23.62     20   +1.50 1 1 1 1 1   887    0 22.05 -56.43 ----- 26.1 23.6 301.0 41.4 28.7 -27.5 28.8 -27.8 29.5 -24.6 29.9 -26.3
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:04:41.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.627839
2025-12-25T17:04:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:04:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:04:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:04:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:04:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:04:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:04:33', tmtdew=29.12, humidity=14.49, cloud=0.0, wind=51.09, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:04:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:04:41.604 [DEBUG] [Thread-15231] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:04:41.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-25T17:04:41.689 [DEBUG] [Thread-15234] [transport.py] [_log()] starting thread (client mode): 0xb955b790
2025-12-25T17:04:41.689 [DEBUG] [Thread-15234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:04:41.704 [DEBUG] [Thread-15234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:04:41.704 [INFO] [Thread-15234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] client lang: <none>
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] server lang: <none>
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] kex follows: False
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:04:41.712 [DEBUG] [Thread-15234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:04:41.713 [DEBUG] [Thread-15234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:04:41.713 [DEBUG] [Thread-15234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:04:41.713 [DEBUG] [Thread-15234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:04:41.713 [DEBUG] [Thread-15234] [transport.py] [_log()] Compression: none
2025-12-25T17:04:41.713 [DEBUG] [Thread-15234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:04:41.773 [DEBUG] [Thread-15234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:04:41.773 [DEBUG] [Thread-15234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:04:41.773 [DEBUG] [Thread-15234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:04:41.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:04:41.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:04:41.830 [DEBUG] [Thread-15234] [transport.py] [_log()] userauth is OK
2025-12-25T17:04:41.830 [DEBUG] [Thread-15234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:04:41.830 [DEBUG] [Thread-15234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:04:41.830 [DEBUG] [Thread-15234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:04:41.830 [DEBUG] [Thread-15234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:04:41.844 [INFO] [Thread-15234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:04:41.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-25T17:04:41.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:04:42.675 [DEBUG] [Thread-15234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:04:42.676 [DEBUG] [Thread-15234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:04:42.724 [DEBUG] [Thread-15234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:04:42.724 [DEBUG] [Thread-15234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:04:42.733 [DEBUG] [Thread-15234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:04:42.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:04:42.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-25T17:04:42.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-25T17:04:42.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:04:42.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:04:42.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:04:42.770 [DEBUG] [Thread-15234] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:04:49.549 [DEBUG] [Thread-15236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:58.845 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:04:58.846 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:04.608 [DEBUG] [Thread-15237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:05:12.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:05:12.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-25T17:05:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 5, 5), 28.3, 15.21, 0.0, 34.67, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:05:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:05:05
2025-12-25T17:05:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:05:13.756 [DEBUG] [Thread-15238] [transport.py] [_log()] starting thread (client mode): 0xb6b23280
2025-12-25T17:05:13.757 [DEBUG] [Thread-15238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:05:13.777 [DEBUG] [Thread-15238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:05:13.777 [INFO] [Thread-15238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:05:13.780 [DEBUG] [Thread-15238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:05:13.780 [DEBUG] [Thread-15238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:05:13.780 [DEBUG] [Thread-15238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] client lang: <none>
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] server lang: <none>
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] kex follows: False
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] Compression: none
2025-12-25T17:05:13.781 [DEBUG] [Thread-15238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:05:13.799 [DEBUG] [Thread-15238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:05:13.800 [DEBUG] [Thread-15238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:05:13.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:05:13.801 [DEBUG] [Thread-15238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:05:13.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:05:13.803 [DEBUG] [Thread-15238] [transport.py] [_log()] userauth is OK
2025-12-25T17:05:13.803 [DEBUG] [Thread-15238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:05:13.803 [DEBUG] [Thread-15238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:05:13.804 [DEBUG] [Thread-15238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:05:13.804 [DEBUG] [Thread-15238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:05:13.840 [INFO] [Thread-15238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:05:13.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:05:14.494 [DEBUG] [Thread-15238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:05:14.494 [DEBUG] [Thread-15238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:05:14.495 [DEBUG] [Thread-15238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:05:14.535 [DEBUG] [Thread-15238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:05:14.535 [DEBUG] [Thread-15238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:05:14.538 [DEBUG] [Thread-15238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:05:14.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:05:14.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:05:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:05:14.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:05:14.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:05:14.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:05:14.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:05:14.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:05:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:05:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.628186 -999.00  +25.60  32.02     20   +1.40 1 1 2 1 1   887    0 22.52 -49.91 ----- 25.0 32.0 295.6 42.3 28.7 -27.8 28.8 -27.8 29.5 -28.0 29.9 -26.6
2025-12-25T17:05:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:05:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:05:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.628186
2025-12-25T17:05:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:05:14.565 [DEBUG] [Thread-15238] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:05:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:05:05', tmtdew=28.3, humidity=15.21, cloud=0.0, wind=34.67, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:04:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:05:14.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-25T17:05:14.662 [DEBUG] [Thread-15241] [transport.py] [_log()] starting thread (client mode): 0xb9593c10
2025-12-25T17:05:14.662 [DEBUG] [Thread-15241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:05:14.681 [DEBUG] [Thread-15241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:05:14.681 [INFO] [Thread-15241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:05:14.692 [DEBUG] [Thread-15241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:05:14.692 [DEBUG] [Thread-15241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:05:14.693 [DEBUG] [Thread-15241] [transport.py] [_log()] client lang: <none>
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] server lang: <none>
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] kex follows: False
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:05:14.694 [DEBUG] [Thread-15241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:05:14.695 [DEBUG] [Thread-15241] [transport.py] [_log()] Compression: none
2025-12-25T17:05:14.695 [DEBUG] [Thread-15241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:05:14.754 [DEBUG] [Thread-15241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:05:14.755 [DEBUG] [Thread-15241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:05:14.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:05:14.756 [DEBUG] [Thread-15241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:05:14.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:05:14.811 [DEBUG] [Thread-15241] [transport.py] [_log()] userauth is OK
2025-12-25T17:05:14.811 [DEBUG] [Thread-15241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:05:14.811 [DEBUG] [Thread-15241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:05:14.811 [DEBUG] [Thread-15241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:05:14.811 [DEBUG] [Thread-15241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:05:14.834 [INFO] [Thread-15241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:05:14.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-25T17:05:14.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:05:15.259 [DEBUG] [Thread-15243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:15.669 [DEBUG] [Thread-15241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:05:15.669 [DEBUG] [Thread-15241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:05:15.717 [DEBUG] [Thread-15241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:05:15.717 [DEBUG] [Thread-15241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:05:15.726 [DEBUG] [Thread-15241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:05:15.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:05:15.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:05:15.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:05:15.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:05:15.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:05:15.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:05:15.757 [DEBUG] [Thread-15241] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:05:19.639 [DEBUG] [Thread-15244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:34.681 [DEBUG] [Thread-15245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:05:45.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:05:45.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-25T17:05:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 5, 37), 28.79, 15.08, 0.0, 31.05, 25.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:05:46.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:05:37
2025-12-25T17:05:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:05:46.739 [DEBUG] [Thread-15246] [transport.py] [_log()] starting thread (client mode): 0xb6b4fee0
2025-12-25T17:05:46.740 [DEBUG] [Thread-15246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:05:46.759 [DEBUG] [Thread-15246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:05:46.759 [INFO] [Thread-15246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:05:46.762 [DEBUG] [Thread-15246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:05:46.762 [DEBUG] [Thread-15246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:05:46.762 [DEBUG] [Thread-15246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:05:46.762 [DEBUG] [Thread-15246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:46.762 [DEBUG] [Thread-15246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] client lang: <none>
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] server lang: <none>
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] kex follows: False
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:05:46.763 [DEBUG] [Thread-15246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:05:46.764 [DEBUG] [Thread-15246] [transport.py] [_log()] Compression: none
2025-12-25T17:05:46.764 [DEBUG] [Thread-15246] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:05:46.783 [DEBUG] [Thread-15246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:05:46.783 [DEBUG] [Thread-15246] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:05:46.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:05:46.784 [DEBUG] [Thread-15246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:05:46.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:05:46.786 [DEBUG] [Thread-15246] [transport.py] [_log()] userauth is OK
2025-12-25T17:05:46.787 [DEBUG] [Thread-15246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:05:46.787 [DEBUG] [Thread-15246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:05:46.787 [DEBUG] [Thread-15246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:05:46.787 [DEBUG] [Thread-15246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:05:46.805 [INFO] [Thread-15246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:05:46.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:05:47.572 [DEBUG] [Thread-15246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:05:47.574 [DEBUG] [Thread-15246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:05:47.575 [DEBUG] [Thread-15246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:05:47.613 [DEBUG] [Thread-15246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:05:47.613 [DEBUG] [Thread-15246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:05:47.616 [DEBUG] [Thread-15246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:05:47.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:05:47.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:05:47.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:05:47.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:05:47.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:05:47.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:05:47.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:05:47.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:05:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:05:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.628533 -999.00  +26.20  25.69     20   +1.60 1 1 1 1 1   887    0 22.49 -42.79 ----- 30.7 25.7 317.2 35.8 28.9 -28.1 28.9 -27.2 29.6 -24.6 30.0 -26.1
2025-12-25T17:05:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:05:47.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:05:47.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.628533
2025-12-25T17:05:47.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:05:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:05:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:05:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:05:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:05:47.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:05:37', tmtdew=28.79, humidity=15.08, cloud=0.0, wind=31.05, temperature=25.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:05:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:05:47.641 [DEBUG] [Thread-15246] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:05:47.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-25T17:05:47.734 [DEBUG] [Thread-15249] [transport.py] [_log()] starting thread (client mode): 0xb9592b60
2025-12-25T17:05:47.734 [DEBUG] [Thread-15249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:05:47.749 [DEBUG] [Thread-15249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:05:47.749 [INFO] [Thread-15249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:47.757 [DEBUG] [Thread-15249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] client lang: <none>
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] server lang: <none>
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] kex follows: False
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] Compression: none
2025-12-25T17:05:47.758 [DEBUG] [Thread-15249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:05:47.815 [DEBUG] [Thread-15249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:05:47.815 [DEBUG] [Thread-15249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:05:47.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:05:47.816 [DEBUG] [Thread-15249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:05:47.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:05:47.871 [DEBUG] [Thread-15249] [transport.py] [_log()] userauth is OK
2025-12-25T17:05:47.872 [DEBUG] [Thread-15249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:05:47.872 [DEBUG] [Thread-15249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:05:47.872 [DEBUG] [Thread-15249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:05:47.872 [DEBUG] [Thread-15249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:05:47.890 [INFO] [Thread-15249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:05:47.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-25T17:05:47.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:05:48.778 [DEBUG] [Thread-15249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:05:48.778 [DEBUG] [Thread-15249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:05:48.826 [DEBUG] [Thread-15249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:05:48.826 [DEBUG] [Thread-15249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:05:48.834 [DEBUG] [Thread-15249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:05:48.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:05:48.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-25T17:05:48.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-25T17:05:48.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:05:48.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:05:48.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:05:48.865 [DEBUG] [Thread-15249] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:05:49.715 [DEBUG] [Thread-15251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:58.986 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:05:58.987 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:04.765 [DEBUG] [Thread-15252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:15.294 [DEBUG] [Thread-15253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:18.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:06:18.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:06:18.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-25T17:06:19.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 6, 9), 28.4, 15.41, 0.0, 29.48, 25.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:06:19.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:06:09
2025-12-25T17:06:19.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:06:19.798 [DEBUG] [Thread-15254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:19.861 [DEBUG] [Thread-15255] [transport.py] [_log()] starting thread (client mode): 0xb6b29420
2025-12-25T17:06:19.862 [DEBUG] [Thread-15255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:06:19.881 [DEBUG] [Thread-15255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:06:19.881 [INFO] [Thread-15255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:06:19.884 [DEBUG] [Thread-15255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] client lang: <none>
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] server lang: <none>
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] kex follows: False
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:06:19.885 [DEBUG] [Thread-15255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:06:19.886 [DEBUG] [Thread-15255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:06:19.886 [DEBUG] [Thread-15255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:06:19.886 [DEBUG] [Thread-15255] [transport.py] [_log()] Compression: none
2025-12-25T17:06:19.886 [DEBUG] [Thread-15255] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:06:19.903 [DEBUG] [Thread-15255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:06:19.903 [DEBUG] [Thread-15255] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:06:19.904 [DEBUG] [Thread-15255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:06:19.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:06:19.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:06:19.906 [DEBUG] [Thread-15255] [transport.py] [_log()] userauth is OK
2025-12-25T17:06:19.906 [DEBUG] [Thread-15255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:06:19.906 [DEBUG] [Thread-15255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:06:19.906 [DEBUG] [Thread-15255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:06:19.906 [DEBUG] [Thread-15255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:06:19.931 [INFO] [Thread-15255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:06:19.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:06:20.588 [DEBUG] [Thread-15255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:06:20.588 [DEBUG] [Thread-15255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:06:20.589 [DEBUG] [Thread-15255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:06:20.630 [DEBUG] [Thread-15255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:06:20.630 [DEBUG] [Thread-15255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:06:20.633 [DEBUG] [Thread-15255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:06:20.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:06:20.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:06:20.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:06:20.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:06:20.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:06:20.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:06:20.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:06:20.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:06:20.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:06:20.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.628880 -999.00  +26.10  36.15     19   +1.30 1 1 2 1 1   887    0 22.71 -31.87 ----- 38.0 36.1 310.4 41.3 28.8 -29.8 29.0 -28.1 29.8 -25.4 29.9 -27.2
2025-12-25T17:06:20.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:06:20.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:06:20.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.628880
2025-12-25T17:06:20.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:06:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:06:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:06:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:06:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:06:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:06:09', tmtdew=28.4, humidity=15.41, cloud=0.0, wind=29.48, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:05:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:06:20.657 [DEBUG] [Thread-15255] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:06:20.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:06:20.741 [DEBUG] [Thread-15258] [transport.py] [_log()] starting thread (client mode): 0xb6b02470
2025-12-25T17:06:20.741 [DEBUG] [Thread-15258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:06:20.755 [DEBUG] [Thread-15258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:06:20.756 [INFO] [Thread-15258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:06:20.763 [DEBUG] [Thread-15258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:06:20.763 [DEBUG] [Thread-15258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:06:20.763 [DEBUG] [Thread-15258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:06:20.763 [DEBUG] [Thread-15258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:20.763 [DEBUG] [Thread-15258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] client lang: <none>
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] server lang: <none>
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] kex follows: False
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:06:20.764 [DEBUG] [Thread-15258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:06:20.765 [DEBUG] [Thread-15258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:06:20.765 [DEBUG] [Thread-15258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:06:20.765 [DEBUG] [Thread-15258] [transport.py] [_log()] Compression: none
2025-12-25T17:06:20.765 [DEBUG] [Thread-15258] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:06:20.822 [DEBUG] [Thread-15258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:06:20.823 [DEBUG] [Thread-15258] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:06:20.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:06:20.824 [DEBUG] [Thread-15258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:06:20.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:06:20.879 [DEBUG] [Thread-15258] [transport.py] [_log()] userauth is OK
2025-12-25T17:06:20.879 [DEBUG] [Thread-15258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:06:20.879 [DEBUG] [Thread-15258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:06:20.879 [DEBUG] [Thread-15258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:06:20.879 [DEBUG] [Thread-15258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:06:20.897 [INFO] [Thread-15258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:06:20.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-25T17:06:20.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:06:21.739 [DEBUG] [Thread-15258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:06:21.739 [DEBUG] [Thread-15258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:06:21.787 [DEBUG] [Thread-15258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:06:21.788 [DEBUG] [Thread-15258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:06:21.796 [DEBUG] [Thread-15258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:06:21.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:06:21.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-25T17:06:21.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-25T17:06:21.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:06:21.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:06:21.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:06:21.830 [DEBUG] [Thread-15258] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:06:34.827 [DEBUG] [Thread-15260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:49.868 [DEBUG] [Thread-15261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:51.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:06:51.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:06:51.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-25T17:06:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 6, 41), 28.54, 14.98, 0.0, 36.15, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:06:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:06:41
2025-12-25T17:06:52.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:06:52.811 [DEBUG] [Thread-15262] [transport.py] [_log()] starting thread (client mode): 0xb6b00640
2025-12-25T17:06:52.811 [DEBUG] [Thread-15262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:06:52.833 [DEBUG] [Thread-15262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:06:52.833 [INFO] [Thread-15262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:06:52.836 [DEBUG] [Thread-15262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] client lang: <none>
2025-12-25T17:06:52.837 [DEBUG] [Thread-15262] [transport.py] [_log()] server lang: <none>
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] kex follows: False
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] Compression: none
2025-12-25T17:06:52.838 [DEBUG] [Thread-15262] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:06:52.858 [DEBUG] [Thread-15262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:06:52.858 [DEBUG] [Thread-15262] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:06:52.859 [DEBUG] [Thread-15262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:06:52.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:06:52.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:06:52.861 [DEBUG] [Thread-15262] [transport.py] [_log()] userauth is OK
2025-12-25T17:06:52.861 [DEBUG] [Thread-15262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:06:52.861 [DEBUG] [Thread-15262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:06:52.861 [DEBUG] [Thread-15262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:06:52.861 [DEBUG] [Thread-15262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:06:52.878 [INFO] [Thread-15262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:06:52.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:06:53.717 [DEBUG] [Thread-15262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:06:53.717 [DEBUG] [Thread-15262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:06:53.718 [DEBUG] [Thread-15262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:06:53.758 [DEBUG] [Thread-15262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:06:53.758 [DEBUG] [Thread-15262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:06:53.762 [DEBUG] [Thread-15262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:06:53.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:06:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:06:53.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:06:53.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:06:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:06:53.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:06:53.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:06:53.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:06:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:06:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.629228 -999.00  +25.60  32.92     20   +1.30 1 1 2 1 1   887    0 22.90 -23.59 ----- 29.1 32.9 307.4 42.8 28.8 -28.5 28.9 -28.0 29.6 -26.6 30.0 -26.3
2025-12-25T17:06:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:06:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:06:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.629228
2025-12-25T17:06:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:06:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:06:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:06:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:06:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:06:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:06:41', tmtdew=28.54, humidity=14.98, cloud=0.0, wind=36.15, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:06:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:06:53.789 [DEBUG] [Thread-15262] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:06:53.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-25T17:06:53.882 [DEBUG] [Thread-15265] [transport.py] [_log()] starting thread (client mode): 0xb95d7760
2025-12-25T17:06:53.882 [DEBUG] [Thread-15265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:06:53.901 [DEBUG] [Thread-15265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:06:53.902 [INFO] [Thread-15265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:06:53.913 [DEBUG] [Thread-15265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] client lang: <none>
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] server lang: <none>
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] kex follows: False
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:06:53.914 [DEBUG] [Thread-15265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:06:53.915 [DEBUG] [Thread-15265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:06:53.915 [DEBUG] [Thread-15265] [transport.py] [_log()] Compression: none
2025-12-25T17:06:53.915 [DEBUG] [Thread-15265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:06:53.971 [DEBUG] [Thread-15265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:06:53.971 [DEBUG] [Thread-15265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:06:53.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:06:53.973 [DEBUG] [Thread-15265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:06:53.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:06:54.027 [DEBUG] [Thread-15265] [transport.py] [_log()] userauth is OK
2025-12-25T17:06:54.027 [DEBUG] [Thread-15265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:06:54.027 [DEBUG] [Thread-15265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:06:54.027 [DEBUG] [Thread-15265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:06:54.027 [DEBUG] [Thread-15265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:06:54.044 [INFO] [Thread-15265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:06:54.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-25T17:06:54.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:06:54.910 [DEBUG] [Thread-15265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:06:54.910 [DEBUG] [Thread-15265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:06:54.959 [DEBUG] [Thread-15265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:06:54.959 [DEBUG] [Thread-15265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:06:54.968 [DEBUG] [Thread-15265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:06:54.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:06:54.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-25T17:06:54.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-25T17:06:54.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:06:54.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:06:54.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:06:55.005 [DEBUG] [Thread-15265] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:06:59.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:06:59.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:04.909 [DEBUG] [Thread-15267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:15.322 [DEBUG] [Thread-15268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:19.965 [DEBUG] [Thread-15269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:07:25.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:07:25.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-25T17:07:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 7, 13), 28.69, 14.83, 0.0, 38.69, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:07:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:07:13
2025-12-25T17:07:25.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:07:25.984 [DEBUG] [Thread-15270] [transport.py] [_log()] starting thread (client mode): 0xb9558dc0
2025-12-25T17:07:25.984 [DEBUG] [Thread-15270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:07:26.004 [DEBUG] [Thread-15270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:07:26.004 [INFO] [Thread-15270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:07:26.007 [DEBUG] [Thread-15270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] client lang: <none>
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] server lang: <none>
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] kex follows: False
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:07:26.008 [DEBUG] [Thread-15270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:07:26.009 [DEBUG] [Thread-15270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:07:26.009 [DEBUG] [Thread-15270] [transport.py] [_log()] Compression: none
2025-12-25T17:07:26.009 [DEBUG] [Thread-15270] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:07:26.029 [DEBUG] [Thread-15270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:07:26.029 [DEBUG] [Thread-15270] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:07:26.030 [DEBUG] [Thread-15270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:07:26.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:07:26.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:07:26.032 [DEBUG] [Thread-15270] [transport.py] [_log()] userauth is OK
2025-12-25T17:07:26.032 [DEBUG] [Thread-15270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:07:26.033 [DEBUG] [Thread-15270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:07:26.033 [DEBUG] [Thread-15270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:07:26.033 [DEBUG] [Thread-15270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:07:26.058 [INFO] [Thread-15270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:07:26.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:07:26.674 [DEBUG] [Thread-15270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:07:26.674 [DEBUG] [Thread-15270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:07:26.674 [DEBUG] [Thread-15270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:07:26.715 [DEBUG] [Thread-15270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:07:26.715 [DEBUG] [Thread-15270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:07:26.719 [DEBUG] [Thread-15270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:07:26.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:07:26.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:07:26.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:07:26.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:07:26.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:07:26.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:07:26.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:07:26.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:07:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:07:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.629575 -999.00  +25.60  37.99     20   +1.00 1 1 2 1 1   887    0 23.24 -16.07 ----- 37.1 38.0 312.0 44.6 28.8 -29.1 29.0 -28.5 29.8 -25.0 29.9 -27.7
2025-12-25T17:07:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:07:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:07:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.629575
2025-12-25T17:07:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:07:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:07:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:07:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:07:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:07:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:07:13', tmtdew=28.69, humidity=14.83, cloud=0.0, wind=38.69, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:06:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:07:26.745 [DEBUG] [Thread-15270] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:07:26.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-25T17:07:26.839 [DEBUG] [Thread-15273] [transport.py] [_log()] starting thread (client mode): 0xb955b160
2025-12-25T17:07:26.839 [DEBUG] [Thread-15273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:07:26.854 [DEBUG] [Thread-15273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:07:26.854 [INFO] [Thread-15273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:07:26.864 [DEBUG] [Thread-15273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] client lang: <none>
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] server lang: <none>
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] kex follows: False
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] Compression: none
2025-12-25T17:07:26.865 [DEBUG] [Thread-15273] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:07:26.923 [DEBUG] [Thread-15273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:07:26.924 [DEBUG] [Thread-15273] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:07:26.924 [DEBUG] [Thread-15273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:07:26.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:07:26.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:07:26.979 [DEBUG] [Thread-15273] [transport.py] [_log()] userauth is OK
2025-12-25T17:07:26.979 [DEBUG] [Thread-15273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:07:26.980 [DEBUG] [Thread-15273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:07:26.980 [DEBUG] [Thread-15273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:07:26.980 [DEBUG] [Thread-15273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:07:26.998 [INFO] [Thread-15273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:07:26.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-25T17:07:26.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:07:27.817 [DEBUG] [Thread-15273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:07:27.818 [DEBUG] [Thread-15273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:07:27.866 [DEBUG] [Thread-15273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:07:27.866 [DEBUG] [Thread-15273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:07:27.875 [DEBUG] [Thread-15273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:07:27.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:07:27.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-25T17:07:27.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-25T17:07:27.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:07:27.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:07:27.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:07:27.912 [DEBUG] [Thread-15273] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:07:35.001 [DEBUG] [Thread-15275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:50.050 [DEBUG] [Thread-15276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:57.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:07:57.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:07:57.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-25T17:07:58.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 7, 45), 28.78, 14.83, 0.0, 38.99, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:07:58.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:07:45
2025-12-25T17:07:58.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:07:58.914 [DEBUG] [Thread-15277] [transport.py] [_log()] starting thread (client mode): 0xb9558c70
2025-12-25T17:07:58.914 [DEBUG] [Thread-15277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:07:58.935 [DEBUG] [Thread-15277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:07:58.935 [INFO] [Thread-15277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:07:58.938 [DEBUG] [Thread-15277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] client lang: <none>
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] server lang: <none>
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] kex follows: False
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] Compression: none
2025-12-25T17:07:58.939 [DEBUG] [Thread-15277] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:07:58.953 [DEBUG] [Thread-15277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:07:58.953 [DEBUG] [Thread-15277] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:07:58.954 [DEBUG] [Thread-15277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:07:58.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:07:58.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:07:58.956 [DEBUG] [Thread-15277] [transport.py] [_log()] userauth is OK
2025-12-25T17:07:58.956 [DEBUG] [Thread-15277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:07:58.956 [DEBUG] [Thread-15277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:07:58.956 [DEBUG] [Thread-15277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:07:58.956 [DEBUG] [Thread-15277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:07:58.980 [INFO] [Thread-15277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:07:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:07:59.264 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:59.266 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:07:59.792 [DEBUG] [Thread-15277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:07:59.793 [DEBUG] [Thread-15277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:07:59.793 [DEBUG] [Thread-15277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:07:59.833 [DEBUG] [Thread-15277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:07:59.833 [DEBUG] [Thread-15277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:07:59.836 [DEBUG] [Thread-15277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:07:59.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:07:59.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:07:59.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:07:59.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:07:59.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:07:59.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:07:59.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:07:59.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:07:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:07:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.629922 -999.00  +25.50  40.10     20   +1.00 1 1 2 1 1   887    0 23.79 -9.61 ----- 33.9 40.1 307.6 45.9 28.8 -28.2 28.9 -28.5 29.7 -26.4 30.0 -26.2
2025-12-25T17:07:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:07:59.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:07:59.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.629922
2025-12-25T17:07:59.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:07:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:07:59.860 [DEBUG] [Thread-15277] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:07:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:07:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:07:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:07:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:07:45', tmtdew=28.78, humidity=14.83, cloud=0.0, wind=38.99, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:07:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:07:59.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-25T17:07:59.955 [DEBUG] [Thread-15280] [transport.py] [_log()] starting thread (client mode): 0xb6b4f970
2025-12-25T17:07:59.955 [DEBUG] [Thread-15280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:07:59.970 [DEBUG] [Thread-15280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:07:59.970 [INFO] [Thread-15280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:07:59.977 [DEBUG] [Thread-15280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] client lang: <none>
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] server lang: <none>
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] kex follows: False
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] Compression: none
2025-12-25T17:07:59.978 [DEBUG] [Thread-15280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:08:00.034 [DEBUG] [Thread-15280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:08:00.034 [DEBUG] [Thread-15280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:08:00.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:08:00.035 [DEBUG] [Thread-15280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:08:00.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:08:00.090 [DEBUG] [Thread-15280] [transport.py] [_log()] userauth is OK
2025-12-25T17:08:00.091 [DEBUG] [Thread-15280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:08:00.091 [DEBUG] [Thread-15280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:08:00.091 [DEBUG] [Thread-15280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:08:00.091 [DEBUG] [Thread-15280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:08:00.113 [INFO] [Thread-15280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:08:00.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-25T17:08:00.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:08:00.961 [DEBUG] [Thread-15280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:08:00.961 [DEBUG] [Thread-15280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:08:01.008 [DEBUG] [Thread-15280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:08:01.008 [DEBUG] [Thread-15280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:08:01.017 [DEBUG] [Thread-15280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:08:01.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:08:01.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-25T17:08:01.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:08:01.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:08:01.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:08:01.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:08:01.049 [DEBUG] [Thread-15280] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:08:05.079 [DEBUG] [Thread-15282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:08:15.362 [DEBUG] [Thread-15283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:08:20.125 [DEBUG] [Thread-15284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:08:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:08:31.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:08: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-25T17:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 8, 17), 29.19, 14.48, 0.0, 46.51, 25.94, 0, 0, 0, 2, 1, 0),)
2025-12-25T17:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:08:17
2025-12-25T17:08:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:08:32.095 [DEBUG] [Thread-15285] [transport.py] [_log()] starting thread (client mode): 0xb6b2b3d0
2025-12-25T17:08:32.095 [DEBUG] [Thread-15285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:08:32.116 [DEBUG] [Thread-15285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:08:32.116 [INFO] [Thread-15285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:08:32.119 [DEBUG] [Thread-15285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] client lang: <none>
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] server lang: <none>
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] kex follows: False
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] Compression: none
2025-12-25T17:08:32.120 [DEBUG] [Thread-15285] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:08:32.135 [DEBUG] [Thread-15285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:08:32.135 [DEBUG] [Thread-15285] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:08:32.135 [DEBUG] [Thread-15285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:08:32.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:08:32.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:08:32.136 [DEBUG] [Thread-15285] [transport.py] [_log()] userauth is OK
2025-12-25T17:08:32.136 [DEBUG] [Thread-15285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:08:32.136 [DEBUG] [Thread-15285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:08:32.136 [DEBUG] [Thread-15285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:08:32.136 [DEBUG] [Thread-15285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:08:32.145 [INFO] [Thread-15285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:08:32.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:08:32.816 [DEBUG] [Thread-15285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:08:32.816 [DEBUG] [Thread-15285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:08:32.816 [DEBUG] [Thread-15285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:08:32.856 [DEBUG] [Thread-15285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:08:32.857 [DEBUG] [Thread-15285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:08:32.859 [DEBUG] [Thread-15285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:08:32.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:08:32.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:08:32.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:08:32.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:08:32.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:08:32.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:08:32.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:08:32.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:08:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.630616 -999.00  +25.20  42.57     20   +0.70 1 1 2 1 1   887    0 24.40 5.98 ----- 37.4 42.6 297.4 48.0 28.6 -29.6 28.9 -29.5 29.5 -27.7 29.8 -27.4
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.630616
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:08:32.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:08:17', tmtdew=29.19, humidity=14.48, cloud=0.0, wind=46.51, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:08:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:08:32.878 [DEBUG] [Thread-15285] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:08:32.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-25T17:08:32.962 [DEBUG] [Thread-15288] [transport.py] [_log()] starting thread (client mode): 0xb6b2a710
2025-12-25T17:08:32.963 [DEBUG] [Thread-15288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:08:32.977 [DEBUG] [Thread-15288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:08:32.977 [INFO] [Thread-15288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] client lang: <none>
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] server lang: <none>
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] kex follows: False
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] Compression: none
2025-12-25T17:08:32.985 [DEBUG] [Thread-15288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:08:33.042 [DEBUG] [Thread-15288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:08:33.042 [DEBUG] [Thread-15288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:08:33.042 [DEBUG] [Thread-15288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:08:33.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:08:33.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:08:33.098 [DEBUG] [Thread-15288] [transport.py] [_log()] userauth is OK
2025-12-25T17:08:33.099 [DEBUG] [Thread-15288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:08:33.099 [DEBUG] [Thread-15288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:08:33.099 [DEBUG] [Thread-15288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:08:33.099 [DEBUG] [Thread-15288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:08:33.113 [INFO] [Thread-15288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:08:33.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-25T17:08:33.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:08:33.937 [DEBUG] [Thread-15288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:08:33.937 [DEBUG] [Thread-15288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:08:33.984 [DEBUG] [Thread-15288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:08:33.984 [DEBUG] [Thread-15288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:08:33.992 [DEBUG] [Thread-15288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:08:34.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:08:34.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-25T17:08:34.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-25T17:08:34.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:08:34.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:08:34.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:08:34.024 [DEBUG] [Thread-15288] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:08:35.156 [DEBUG] [Thread-15290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:08:50.205 [DEBUG] [Thread-15291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:08:59.405 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:08:59.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:04.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:09:04.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:09:04.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-25T17:09:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 8, 49), 29.36, 13.92, 0.0, 35.48, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:09:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:08:49
2025-12-25T17:09:04.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:09:05.031 [DEBUG] [Thread-15292] [transport.py] [_log()] starting thread (client mode): 0xb95d4d60
2025-12-25T17:09:05.031 [DEBUG] [Thread-15292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:09:05.052 [DEBUG] [Thread-15292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:09:05.052 [INFO] [Thread-15292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:05.054 [DEBUG] [Thread-15292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] client lang: <none>
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] server lang: <none>
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] kex follows: False
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] Compression: none
2025-12-25T17:09:05.055 [DEBUG] [Thread-15292] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:09:05.069 [DEBUG] [Thread-15292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:09:05.070 [DEBUG] [Thread-15292] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:09:05.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:09:05.071 [DEBUG] [Thread-15292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:09:05.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:09:05.073 [DEBUG] [Thread-15292] [transport.py] [_log()] userauth is OK
2025-12-25T17:09:05.074 [DEBUG] [Thread-15292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:09:05.074 [DEBUG] [Thread-15292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:09:05.074 [DEBUG] [Thread-15292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:09:05.074 [DEBUG] [Thread-15292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:09:05.098 [INFO] [Thread-15292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:09:05.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:09:05.242 [DEBUG] [Thread-15294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:05.914 [DEBUG] [Thread-15292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:09:05.915 [DEBUG] [Thread-15292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:09:05.915 [DEBUG] [Thread-15292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:09:05.956 [DEBUG] [Thread-15292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:09:05.956 [DEBUG] [Thread-15292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:09:05.958 [DEBUG] [Thread-15292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:09:05.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:09:05.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:09:05.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:09:05.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:09:05.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:09:05.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:09:05.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.630964 -999.00  +24.90  35.46     20   +0.80 1 1 2 1 1   887    0 23.91 12.22 ----- 34.2 35.5 290.6 43.7 28.6 -29.2 28.7 -29.1 29.5 -26.8 29.7 -26.7
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.630964
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:09:05.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:08:49', tmtdew=29.36, humidity=13.92, cloud=0.0, wind=35.48, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:08:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:09:05.978 [DEBUG] [Thread-15292] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:09:06.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-25T17:09:06.059 [DEBUG] [Thread-15296] [transport.py] [_log()] starting thread (client mode): 0xb9593130
2025-12-25T17:09:06.059 [DEBUG] [Thread-15296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:09:06.074 [DEBUG] [Thread-15296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:09:06.074 [INFO] [Thread-15296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:09:06.081 [DEBUG] [Thread-15296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] client lang: <none>
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] server lang: <none>
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] kex follows: False
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] Compression: none
2025-12-25T17:09:06.082 [DEBUG] [Thread-15296] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:09:06.143 [DEBUG] [Thread-15296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:09:06.143 [DEBUG] [Thread-15296] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:09:06.144 [DEBUG] [Thread-15296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:09:06.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:09:06.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:09:06.203 [DEBUG] [Thread-15296] [transport.py] [_log()] userauth is OK
2025-12-25T17:09:06.203 [DEBUG] [Thread-15296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:09:06.203 [DEBUG] [Thread-15296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:09:06.203 [DEBUG] [Thread-15296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:09:06.203 [DEBUG] [Thread-15296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:09:06.227 [INFO] [Thread-15296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:09:06.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-25T17:09:06.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:09:07.074 [DEBUG] [Thread-15296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:09:07.074 [DEBUG] [Thread-15296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:09:07.121 [DEBUG] [Thread-15296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:09:07.121 [DEBUG] [Thread-15296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:09:07.132 [DEBUG] [Thread-15296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:09:07.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:09:07.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:09:07.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-25T17:09:07.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:09:07.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:09:07.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:09:07.163 [DEBUG] [Thread-15296] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:09:15.407 [DEBUG] [Thread-15298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:20.275 [DEBUG] [Thread-15299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:35.333 [DEBUG] [Thread-15300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:09:37.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:09:37.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-25T17:09:37.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 9, 21), 29.33, 13.95, 0.0, 32.91, 25.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:09:37.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:09:21
2025-12-25T17:09:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:09:38.162 [DEBUG] [Thread-15301] [transport.py] [_log()] starting thread (client mode): 0xb6b02e30
2025-12-25T17:09:38.162 [DEBUG] [Thread-15301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:09:38.183 [DEBUG] [Thread-15301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:09:38.183 [INFO] [Thread-15301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] client lang: <none>
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] server lang: <none>
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] kex follows: False
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:09:38.186 [DEBUG] [Thread-15301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:09:38.187 [DEBUG] [Thread-15301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:09:38.187 [DEBUG] [Thread-15301] [transport.py] [_log()] Compression: none
2025-12-25T17:09:38.187 [DEBUG] [Thread-15301] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:09:38.204 [DEBUG] [Thread-15301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:09:38.205 [DEBUG] [Thread-15301] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:09:38.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:09:38.206 [DEBUG] [Thread-15301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:09:38.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:09:38.207 [DEBUG] [Thread-15301] [transport.py] [_log()] userauth is OK
2025-12-25T17:09:38.207 [DEBUG] [Thread-15301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:09:38.208 [DEBUG] [Thread-15301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:09:38.208 [DEBUG] [Thread-15301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:09:38.208 [DEBUG] [Thread-15301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:09:38.231 [INFO] [Thread-15301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:09:38.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:09:38.860 [DEBUG] [Thread-15301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:09:38.861 [DEBUG] [Thread-15301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:09:38.861 [DEBUG] [Thread-15301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:09:38.902 [DEBUG] [Thread-15301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:09:38.902 [DEBUG] [Thread-15301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:09:38.905 [DEBUG] [Thread-15301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:09:38.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:09:38.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:09:38.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:09:38.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:09:38.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:09:38.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:09:38.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:09:38.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:09:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:09:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.631311 -999.00  +25.00  37.92     20   +0.70 1 1 2 1 1   887    0 24.49 16.78 ----- 36.2 37.9 292.6 45.3 28.5 -29.4 28.7 -28.7 29.5 -26.9 29.7 -26.8
2025-12-25T17:09:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:09:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:09:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.631311
2025-12-25T17:09:38.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:09:38.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:09:38.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:09:38.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:09:38.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:09:38.930 [DEBUG] [Thread-15301] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:09:38.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:09:21', tmtdew=29.33, humidity=13.95, cloud=0.0, wind=32.91, temperature=25.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:09:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:09:39.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-25T17:09:39.024 [DEBUG] [Thread-15304] [transport.py] [_log()] starting thread (client mode): 0xb6b035b0
2025-12-25T17:09:39.024 [DEBUG] [Thread-15304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:09:39.041 [DEBUG] [Thread-15304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:09:39.041 [INFO] [Thread-15304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:09:39.048 [DEBUG] [Thread-15304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:09:39.049 [DEBUG] [Thread-15304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] client lang: <none>
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] server lang: <none>
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] kex follows: False
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] Compression: none
2025-12-25T17:09:39.050 [DEBUG] [Thread-15304] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:09:39.110 [DEBUG] [Thread-15304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:09:39.110 [DEBUG] [Thread-15304] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:09:39.110 [DEBUG] [Thread-15304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:09:39.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:09:39.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:09:39.167 [DEBUG] [Thread-15304] [transport.py] [_log()] userauth is OK
2025-12-25T17:09:39.167 [DEBUG] [Thread-15304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:09:39.168 [DEBUG] [Thread-15304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:09:39.168 [DEBUG] [Thread-15304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:09:39.168 [DEBUG] [Thread-15304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:09:39.191 [INFO] [Thread-15304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:09:39.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-25T17:09:39.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:09:40.048 [DEBUG] [Thread-15304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:09:40.049 [DEBUG] [Thread-15304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:09:40.097 [DEBUG] [Thread-15304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:09:40.097 [DEBUG] [Thread-15304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:09:40.109 [DEBUG] [Thread-15304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:09:40.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:09:40.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:09:40.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:09:40.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:09:40.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:09:40.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:09:40.146 [DEBUG] [Thread-15304] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:09:50.369 [DEBUG] [Thread-15306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:59.547 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:09:59.548 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:05.419 [DEBUG] [Thread-15307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:10.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:10:10.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:10:10.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:10:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 9, 53), 29.0, 14.53, 0.0, 39.17, 25.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:10:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:09:53
2025-12-25T17:10:11.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:10:11.159 [DEBUG] [Thread-15308] [transport.py] [_log()] starting thread (client mode): 0xb6b2a230
2025-12-25T17:10:11.159 [DEBUG] [Thread-15308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:10:11.180 [DEBUG] [Thread-15308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:10:11.180 [INFO] [Thread-15308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:10:11.181 [DEBUG] [Thread-15308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] client lang: <none>
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] server lang: <none>
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] kex follows: False
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] Compression: none
2025-12-25T17:10:11.182 [DEBUG] [Thread-15308] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:10:11.194 [DEBUG] [Thread-15308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:10:11.195 [DEBUG] [Thread-15308] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:10:11.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:10:11.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:10:11.196 [DEBUG] [Thread-15308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:10:11.196 [DEBUG] [Thread-15308] [transport.py] [_log()] userauth is OK
2025-12-25T17:10:11.196 [DEBUG] [Thread-15308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:10:11.197 [DEBUG] [Thread-15308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:10:11.197 [DEBUG] [Thread-15308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:10:11.197 [DEBUG] [Thread-15308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:10:11.226 [INFO] [Thread-15308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:10:11.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:10:12.403 [DEBUG] [Thread-15308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:10:12.404 [DEBUG] [Thread-15308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:10:12.404 [DEBUG] [Thread-15308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:10:12.444 [DEBUG] [Thread-15308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:10:12.445 [DEBUG] [Thread-15308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:10:12.447 [DEBUG] [Thread-15308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:10:12.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:10:12.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:10:12.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:10:12.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:10:12.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:10:12.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:10:12.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:10:12.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:10:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:10:12.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.631658 -999.00  +24.80  44.85     20   +0.70 1 1 2 1 1   887    0 24.79 21.14 ----- 48.6 44.9 296.0 53.8 28.4 -29.8 28.6 -25.6 29.3 -29.2 29.5 -27.6
2025-12-25T17:10:12.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:10:12.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:10:12.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.631658
2025-12-25T17:10:12.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:10:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:10:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:10:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:10:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:10:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:09:53', tmtdew=29.0, humidity=14.53, cloud=0.0, wind=39.17, temperature=25.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:09:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:10:12.473 [DEBUG] [Thread-15308] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:10:12.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:10:12.581 [DEBUG] [Thread-15311] [transport.py] [_log()] starting thread (client mode): 0xb9559540
2025-12-25T17:10:12.581 [DEBUG] [Thread-15311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:10:12.595 [DEBUG] [Thread-15311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:10:12.595 [INFO] [Thread-15311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:10:12.602 [DEBUG] [Thread-15311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] client lang: <none>
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] server lang: <none>
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] kex follows: False
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:10:12.603 [DEBUG] [Thread-15311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:10:12.604 [DEBUG] [Thread-15311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:10:12.604 [DEBUG] [Thread-15311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:10:12.604 [DEBUG] [Thread-15311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:10:12.604 [DEBUG] [Thread-15311] [transport.py] [_log()] Compression: none
2025-12-25T17:10:12.604 [DEBUG] [Thread-15311] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:10:12.662 [DEBUG] [Thread-15311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:10:12.662 [DEBUG] [Thread-15311] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:10:12.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:10:12.663 [DEBUG] [Thread-15311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:10:12.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:10:12.719 [DEBUG] [Thread-15311] [transport.py] [_log()] userauth is OK
2025-12-25T17:10:12.719 [DEBUG] [Thread-15311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:10:12.719 [DEBUG] [Thread-15311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:10:12.719 [DEBUG] [Thread-15311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:10:12.719 [DEBUG] [Thread-15311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:10:12.737 [INFO] [Thread-15311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:10:12.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-25T17:10:12.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:10:13.560 [DEBUG] [Thread-15311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:10:13.560 [DEBUG] [Thread-15311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:10:13.607 [DEBUG] [Thread-15311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:10:13.608 [DEBUG] [Thread-15311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:10:13.616 [DEBUG] [Thread-15311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:10:13.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:10:13.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-25T17:10:13.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-25T17:10:13.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:10:13.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:10:13.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:10:13.651 [DEBUG] [Thread-15311] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:10:15.447 [DEBUG] [Thread-15313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:20.453 [DEBUG] [Thread-15314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:35.495 [DEBUG] [Thread-15315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:43.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:10:43.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:10:43.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-25T17:10:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 10, 25), 29.06, 14.47, 0.0, 41.59, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:10:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:10:25
2025-12-25T17:10:44.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:10:44.648 [DEBUG] [Thread-15316] [transport.py] [_log()] starting thread (client mode): 0xb6b00160
2025-12-25T17:10:44.648 [DEBUG] [Thread-15316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:10:44.672 [DEBUG] [Thread-15316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:10:44.672 [INFO] [Thread-15316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:10:44.675 [DEBUG] [Thread-15316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] client lang: <none>
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] server lang: <none>
2025-12-25T17:10:44.676 [DEBUG] [Thread-15316] [transport.py] [_log()] kex follows: False
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] Compression: none
2025-12-25T17:10:44.677 [DEBUG] [Thread-15316] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:10:44.699 [DEBUG] [Thread-15316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:10:44.699 [DEBUG] [Thread-15316] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:10:44.700 [DEBUG] [Thread-15316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:10:44.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:10:44.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:10:44.702 [DEBUG] [Thread-15316] [transport.py] [_log()] userauth is OK
2025-12-25T17:10:44.702 [DEBUG] [Thread-15316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:10:44.703 [DEBUG] [Thread-15316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:10:44.703 [DEBUG] [Thread-15316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:10:44.703 [DEBUG] [Thread-15316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:10:44.737 [INFO] [Thread-15316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:10:44.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:10:45.348 [DEBUG] [Thread-15316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:10:45.348 [DEBUG] [Thread-15316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:10:45.349 [DEBUG] [Thread-15316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:10:45.389 [DEBUG] [Thread-15316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:10:45.389 [DEBUG] [Thread-15316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:10:45.392 [DEBUG] [Thread-15316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:10:45.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:10:45.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:10:45.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:10:45.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:10:45.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:10:45.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:10:45.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:10:45.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:10:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:10:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.632005 -999.00  +24.90  33.77     20   +0.80 1 1 2 1 1   887    0 24.66 23.42 ----- 36.8 33.8 293.2 46.7 28.4 -28.7 28.5 -28.5 29.2 -27.2 29.5 -27.1
2025-12-25T17:10:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:10:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:10:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.632005
2025-12-25T17:10:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:10:45.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:10:45.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:10:45.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:10:45.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:10:45.418 [DEBUG] [Thread-15316] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:10:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:10:25', tmtdew=29.06, humidity=14.47, cloud=0.0, wind=41.59, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:10:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:10:45.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-25T17:10:45.514 [DEBUG] [Thread-15319] [transport.py] [_log()] starting thread (client mode): 0xb6b4f4c0
2025-12-25T17:10:45.514 [DEBUG] [Thread-15319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:10:45.528 [DEBUG] [Thread-15319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:10:45.528 [INFO] [Thread-15319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:10:45.535 [DEBUG] [Thread-15319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:10:45.535 [DEBUG] [Thread-15319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] client lang: <none>
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] server lang: <none>
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] kex follows: False
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] Compression: none
2025-12-25T17:10:45.536 [DEBUG] [Thread-15319] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:10:45.594 [DEBUG] [Thread-15319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:10:45.595 [DEBUG] [Thread-15319] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:10:45.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:10:45.595 [DEBUG] [Thread-15319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:10:45.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:10:45.650 [DEBUG] [Thread-15319] [transport.py] [_log()] userauth is OK
2025-12-25T17:10:45.651 [DEBUG] [Thread-15319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:10:45.651 [DEBUG] [Thread-15319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:10:45.651 [DEBUG] [Thread-15319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:10:45.651 [DEBUG] [Thread-15319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:10:45.669 [INFO] [Thread-15319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:10:45.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-25T17:10:45.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:10:46.492 [DEBUG] [Thread-15319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:10:46.492 [DEBUG] [Thread-15319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:10:46.540 [DEBUG] [Thread-15319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:10:46.540 [DEBUG] [Thread-15319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:10:46.549 [DEBUG] [Thread-15319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:10:46.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:10:46.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-25T17:10:46.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-25T17:10:46.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:10:46.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:10:46.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:10:46.589 [DEBUG] [Thread-15319] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:10:50.532 [DEBUG] [Thread-15321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:59.688 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:10:59.689 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:05.578 [DEBUG] [Thread-15322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:15.494 [DEBUG] [Thread-15323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:11:16.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:11:16.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-25T17:11:17.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 10, 57), 29.32, 14.18, 0.0, 44.6, 25.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:11:17.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:10:57
2025-12-25T17:11:17.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:11:17.589 [DEBUG] [Thread-15324] [transport.py] [_log()] starting thread (client mode): 0xb95b2050
2025-12-25T17:11:17.589 [DEBUG] [Thread-15324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:11:17.609 [DEBUG] [Thread-15324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:11:17.609 [INFO] [Thread-15324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:11:17.612 [DEBUG] [Thread-15324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:11:17.612 [DEBUG] [Thread-15324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] client lang: <none>
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] server lang: <none>
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] kex follows: False
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:11:17.613 [DEBUG] [Thread-15324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:11:17.614 [DEBUG] [Thread-15324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:11:17.614 [DEBUG] [Thread-15324] [transport.py] [_log()] Compression: none
2025-12-25T17:11:17.614 [DEBUG] [Thread-15324] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:11:17.632 [DEBUG] [Thread-15324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:11:17.633 [DEBUG] [Thread-15324] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:11:17.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:11:17.634 [DEBUG] [Thread-15324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:11:17.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:11:17.636 [DEBUG] [Thread-15324] [transport.py] [_log()] userauth is OK
2025-12-25T17:11:17.636 [DEBUG] [Thread-15324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:11:17.636 [DEBUG] [Thread-15324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:11:17.636 [DEBUG] [Thread-15324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:11:17.636 [DEBUG] [Thread-15324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:11:17.650 [INFO] [Thread-15324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:11:17.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:11:18.465 [DEBUG] [Thread-15324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:11:18.466 [DEBUG] [Thread-15324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:11:18.466 [DEBUG] [Thread-15324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:11:18.507 [DEBUG] [Thread-15324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:11:18.508 [DEBUG] [Thread-15324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:11:18.511 [DEBUG] [Thread-15324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:11:18.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:11:18.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:11:18.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:11:18.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:11:18.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:11:18.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:11:18.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:11:18.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:11:18.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:11:18.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.632353 -999.00  +25.00  41.27     20   +0.50 1 1 2 1 1   887    0 25.29 27.96 ----- 43.8 41.3 291.8 50.8 28.3 -29.9 28.5 -28.8 29.2 -27.7 29.4 -27.9
2025-12-25T17:11:18.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:11:18.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:11:18.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.632353
2025-12-25T17:11:18.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:11:18.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:11:18.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:11:18.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:11:18.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:11:18.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:10:57', tmtdew=29.32, humidity=14.18, cloud=0.0, wind=44.6, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:10:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:11:18.539 [DEBUG] [Thread-15324] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:11:18.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-25T17:11:18.633 [DEBUG] [Thread-15327] [transport.py] [_log()] starting thread (client mode): 0xb955b3d0
2025-12-25T17:11:18.633 [DEBUG] [Thread-15327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:11:18.648 [DEBUG] [Thread-15327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:11:18.648 [INFO] [Thread-15327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] client lang: <none>
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] server lang: <none>
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] kex follows: False
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:11:18.656 [DEBUG] [Thread-15327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:11:18.657 [DEBUG] [Thread-15327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:11:18.657 [DEBUG] [Thread-15327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:11:18.657 [DEBUG] [Thread-15327] [transport.py] [_log()] Compression: none
2025-12-25T17:11:18.657 [DEBUG] [Thread-15327] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:11:18.718 [DEBUG] [Thread-15327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:11:18.718 [DEBUG] [Thread-15327] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:11:18.719 [DEBUG] [Thread-15327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:11:18.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:11:18.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:11:18.775 [DEBUG] [Thread-15327] [transport.py] [_log()] userauth is OK
2025-12-25T17:11:18.776 [DEBUG] [Thread-15327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:11:18.776 [DEBUG] [Thread-15327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:11:18.776 [DEBUG] [Thread-15327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:11:18.776 [DEBUG] [Thread-15327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:11:18.794 [INFO] [Thread-15327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:11:18.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-25T17:11:18.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:11:19.663 [DEBUG] [Thread-15327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:11:19.664 [DEBUG] [Thread-15327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:11:19.712 [DEBUG] [Thread-15327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:11:19.712 [DEBUG] [Thread-15327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:11:19.722 [DEBUG] [Thread-15327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:11:19.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:11:19.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-25T17:11:19.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:11:19.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:11:19.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:11:19.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:11:19.760 [DEBUG] [Thread-15327] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:11:20.609 [DEBUG] [Thread-15329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:35.659 [DEBUG] [Thread-15330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:11:49.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:11:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:11:50.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 11, 30), 29.21, 14.28, 0.0, 44.53, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:11:50.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:11:30
2025-12-25T17:11:50.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:11:50.692 [DEBUG] [Thread-15331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:50.757 [DEBUG] [Thread-15332] [transport.py] [_log()] starting thread (client mode): 0xb95d61a0
2025-12-25T17:11:50.757 [DEBUG] [Thread-15332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:11:50.776 [DEBUG] [Thread-15332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:11:50.776 [INFO] [Thread-15332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:50.779 [DEBUG] [Thread-15332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] client lang: <none>
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] server lang: <none>
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] kex follows: False
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] Compression: none
2025-12-25T17:11:50.780 [DEBUG] [Thread-15332] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:11:50.799 [DEBUG] [Thread-15332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:11:50.800 [DEBUG] [Thread-15332] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:11:50.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:11:50.802 [DEBUG] [Thread-15332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:11:50.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:11:50.804 [DEBUG] [Thread-15332] [transport.py] [_log()] userauth is OK
2025-12-25T17:11:50.804 [DEBUG] [Thread-15332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:11:50.804 [DEBUG] [Thread-15332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:11:50.804 [DEBUG] [Thread-15332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:11:50.804 [DEBUG] [Thread-15332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:11:50.831 [INFO] [Thread-15332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:11:50.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:11:51.476 [DEBUG] [Thread-15332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:11:51.476 [DEBUG] [Thread-15332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:11:51.477 [DEBUG] [Thread-15332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:11:51.517 [DEBUG] [Thread-15332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:11:51.517 [DEBUG] [Thread-15332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:11:51.521 [DEBUG] [Thread-15332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:11:51.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:11:51.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:11:51.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:11:51.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:11:51.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:11:51.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:11:51.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:11:51.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:11:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:11:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.632700 -999.00  +24.60  40.49     20   +0.50 1 1 2 1 1   887    0 25.10 32.25 ----- 43.2 40.5 297.6 55.7 28.2 -28.8 28.4 -29.1 29.0 -27.0 29.3 -26.3
2025-12-25T17:11:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:11:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:11:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.632700
2025-12-25T17:11:51.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:11:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:11:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:11:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:11:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:11:51.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:11:30', tmtdew=29.21, humidity=14.28, cloud=0.0, wind=44.53, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:11:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:11:51.547 [DEBUG] [Thread-15332] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:11:51.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-25T17:11:51.641 [DEBUG] [Thread-15335] [transport.py] [_log()] starting thread (client mode): 0xb955b430
2025-12-25T17:11:51.641 [DEBUG] [Thread-15335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:11:51.655 [DEBUG] [Thread-15335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:11:51.656 [INFO] [Thread-15335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] client lang: <none>
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] server lang: <none>
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] kex follows: False
2025-12-25T17:11:51.663 [DEBUG] [Thread-15335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:11:51.664 [DEBUG] [Thread-15335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:11:51.664 [DEBUG] [Thread-15335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:11:51.664 [DEBUG] [Thread-15335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:11:51.664 [DEBUG] [Thread-15335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:11:51.664 [DEBUG] [Thread-15335] [transport.py] [_log()] Compression: none
2025-12-25T17:11:51.664 [DEBUG] [Thread-15335] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:11:51.728 [DEBUG] [Thread-15335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:11:51.728 [DEBUG] [Thread-15335] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:11:51.729 [DEBUG] [Thread-15335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:11:51.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:11:51.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:11:51.788 [DEBUG] [Thread-15335] [transport.py] [_log()] userauth is OK
2025-12-25T17:11:51.788 [DEBUG] [Thread-15335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:11:51.788 [DEBUG] [Thread-15335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:11:51.788 [DEBUG] [Thread-15335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:11:51.788 [DEBUG] [Thread-15335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:11:51.808 [INFO] [Thread-15335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:11:51.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:11:51.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:11:52.645 [DEBUG] [Thread-15335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:11:52.645 [DEBUG] [Thread-15335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:11:52.693 [DEBUG] [Thread-15335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:11:52.693 [DEBUG] [Thread-15335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:11:52.702 [DEBUG] [Thread-15335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:11:52.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:11:52.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-25T17:11:52.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:11:52.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:11:52.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:11:52.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:11:52.739 [DEBUG] [Thread-15335] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:11:59.830 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:11:59.832 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:05.723 [DEBUG] [Thread-15337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:15.539 [DEBUG] [Thread-15338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:20.769 [DEBUG] [Thread-15339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:22.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:12:22.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:12:22.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-25T17:12:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 12, 2), 29.25, 14.23, 0.0, 43.19, 25.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:12:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:12:02
2025-12-25T17:12:23.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:12:23.751 [DEBUG] [Thread-15340] [transport.py] [_log()] starting thread (client mode): 0xb955b160
2025-12-25T17:12:23.751 [DEBUG] [Thread-15340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:12:23.771 [DEBUG] [Thread-15340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:12:23.771 [INFO] [Thread-15340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:12:23.773 [DEBUG] [Thread-15340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:12:23.773 [DEBUG] [Thread-15340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:12:23.773 [DEBUG] [Thread-15340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:12:23.773 [DEBUG] [Thread-15340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:23.773 [DEBUG] [Thread-15340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] client lang: <none>
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] server lang: <none>
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] kex follows: False
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] Compression: none
2025-12-25T17:12:23.774 [DEBUG] [Thread-15340] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:12:23.785 [DEBUG] [Thread-15340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:12:23.785 [DEBUG] [Thread-15340] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:12:23.785 [DEBUG] [Thread-15340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:12:23.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:12:23.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:12:23.786 [DEBUG] [Thread-15340] [transport.py] [_log()] userauth is OK
2025-12-25T17:12:23.786 [DEBUG] [Thread-15340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:12:23.786 [DEBUG] [Thread-15340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:12:23.786 [DEBUG] [Thread-15340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:12:23.786 [DEBUG] [Thread-15340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:12:23.796 [INFO] [Thread-15340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:12:23.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:12:24.536 [DEBUG] [Thread-15340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:12:24.537 [DEBUG] [Thread-15340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:12:24.537 [DEBUG] [Thread-15340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:12:24.577 [DEBUG] [Thread-15340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:12:24.577 [DEBUG] [Thread-15340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:12:24.579 [DEBUG] [Thread-15340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:12:24.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:12:24.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:12:24.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:12:24.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:12:24.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:12:24.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:12:24.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.633047 -999.00  +25.20  32.64     20   +0.80 1 1 2 1 1   887    0 25.37 36.13 ----- 35.0 32.6 301.6 44.7 28.3 -29.0 28.4 -28.2 29.1 -26.8 29.4 -27.4
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.633047
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:12:24.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:12:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:12:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:12:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:12:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:12:02', tmtdew=29.25, humidity=14.23, cloud=0.0, wind=43.19, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:11:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:12:24.599 [DEBUG] [Thread-15340] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:12:24.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-25T17:12:24.685 [DEBUG] [Thread-15343] [transport.py] [_log()] starting thread (client mode): 0xb6bc3f40
2025-12-25T17:12:24.685 [DEBUG] [Thread-15343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:12:24.699 [DEBUG] [Thread-15343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:12:24.699 [INFO] [Thread-15343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:12:24.706 [DEBUG] [Thread-15343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] client lang: <none>
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] server lang: <none>
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] kex follows: False
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] Compression: none
2025-12-25T17:12:24.707 [DEBUG] [Thread-15343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:12:24.761 [DEBUG] [Thread-15343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:12:24.761 [DEBUG] [Thread-15343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:12:24.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:12:24.761 [DEBUG] [Thread-15343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:12:24.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:12:24.818 [DEBUG] [Thread-15343] [transport.py] [_log()] userauth is OK
2025-12-25T17:12:24.818 [DEBUG] [Thread-15343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:12:24.818 [DEBUG] [Thread-15343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:12:24.818 [DEBUG] [Thread-15343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:12:24.818 [DEBUG] [Thread-15343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:12:24.832 [INFO] [Thread-15343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:12:24.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-25T17:12:24.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:12:25.673 [DEBUG] [Thread-15343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:12:25.673 [DEBUG] [Thread-15343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:12:25.720 [DEBUG] [Thread-15343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:12:25.720 [DEBUG] [Thread-15343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:12:25.728 [DEBUG] [Thread-15343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:12:25.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:12:25.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-25T17:12:25.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-25T17:12:25.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:12:25.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:12:25.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:12:25.759 [DEBUG] [Thread-15343] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:12:35.797 [DEBUG] [Thread-15345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:50.838 [DEBUG] [Thread-15346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:12:55.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:12:55.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-25T17:12:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 12, 34), 29.12, 14.53, 0.0, 38.3, 25.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:12:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:12:34
2025-12-25T17:12:56.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:12:56.766 [DEBUG] [Thread-15347] [transport.py] [_log()] starting thread (client mode): 0xb95d6d70
2025-12-25T17:12:56.766 [DEBUG] [Thread-15347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:12:56.787 [DEBUG] [Thread-15347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:12:56.787 [INFO] [Thread-15347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:12:56.790 [DEBUG] [Thread-15347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] client lang: <none>
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] server lang: <none>
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] kex follows: False
2025-12-25T17:12:56.791 [DEBUG] [Thread-15347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:12:56.792 [DEBUG] [Thread-15347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:12:56.792 [DEBUG] [Thread-15347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:12:56.792 [DEBUG] [Thread-15347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:12:56.792 [DEBUG] [Thread-15347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:12:56.792 [DEBUG] [Thread-15347] [transport.py] [_log()] Compression: none
2025-12-25T17:12:56.792 [DEBUG] [Thread-15347] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:12:56.810 [DEBUG] [Thread-15347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:12:56.811 [DEBUG] [Thread-15347] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:12:56.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:12:56.812 [DEBUG] [Thread-15347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:12:56.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:12:56.814 [DEBUG] [Thread-15347] [transport.py] [_log()] userauth is OK
2025-12-25T17:12:56.815 [DEBUG] [Thread-15347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:12:56.815 [DEBUG] [Thread-15347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:12:56.815 [DEBUG] [Thread-15347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:12:56.815 [DEBUG] [Thread-15347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:12:56.824 [INFO] [Thread-15347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:12:56.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:12:57.467 [DEBUG] [Thread-15347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:12:57.468 [DEBUG] [Thread-15347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:12:57.469 [DEBUG] [Thread-15347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:12:57.509 [DEBUG] [Thread-15347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:12:57.509 [DEBUG] [Thread-15347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:12:57.513 [DEBUG] [Thread-15347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:12:57.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:12:57.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:12:57.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:12:57.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:12:57.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:12:57.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:12:57.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:12:57.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:12:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:12:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.633395 -999.00  +25.20  32.85     20   +0.90 1 1 2 1 1   887    0 24.91 39.78 ----- 33.0 32.9 298.4 44.3 28.2 -29.5 28.4 -28.7 29.1 -27.3 29.3 -27.5
2025-12-25T17:12:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:12:57.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:12:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.633395
2025-12-25T17:12:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:12:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:12:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:12:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:12:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:12:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:12:34', tmtdew=29.12, humidity=14.53, cloud=0.0, wind=38.3, temperature=25.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:12:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:12:57.543 [DEBUG] [Thread-15347] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:12:57.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-25T17:12:57.640 [DEBUG] [Thread-15350] [transport.py] [_log()] starting thread (client mode): 0xb6b4f6d0
2025-12-25T17:12:57.641 [DEBUG] [Thread-15350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:12:57.655 [DEBUG] [Thread-15350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:12:57.655 [INFO] [Thread-15350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:12:57.663 [DEBUG] [Thread-15350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:12:57.663 [DEBUG] [Thread-15350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] client lang: <none>
2025-12-25T17:12:57.664 [DEBUG] [Thread-15350] [transport.py] [_log()] server lang: <none>
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] kex follows: False
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] Compression: none
2025-12-25T17:12:57.665 [DEBUG] [Thread-15350] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:12:57.723 [DEBUG] [Thread-15350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:12:57.723 [DEBUG] [Thread-15350] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:12:57.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:12:57.725 [DEBUG] [Thread-15350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:12:57.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:12:57.779 [DEBUG] [Thread-15350] [transport.py] [_log()] userauth is OK
2025-12-25T17:12:57.779 [DEBUG] [Thread-15350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:12:57.780 [DEBUG] [Thread-15350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:12:57.780 [DEBUG] [Thread-15350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:12:57.780 [DEBUG] [Thread-15350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:12:57.799 [INFO] [Thread-15350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:12:57.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-25T17:12:57.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:12:58.632 [DEBUG] [Thread-15350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:12:58.632 [DEBUG] [Thread-15350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:12:58.680 [DEBUG] [Thread-15350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:12:58.680 [DEBUG] [Thread-15350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:12:58.689 [DEBUG] [Thread-15350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:12:58.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:12:58.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-25T17:12:58.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-25T17:12:58.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:12:58.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:12:58.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:12:58.723 [DEBUG] [Thread-15350] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:12:59.971 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:12:59.972 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:13:05.868 [DEBUG] [Thread-15352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:13:15.588 [DEBUG] [Thread-15353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:13:20.916 [DEBUG] [Thread-15354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:13:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:13:28.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:13:28.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-25T17:13:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 13, 6), 29.02, 14.63, 0.0, 34.19, 25.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:13:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:13:06
2025-12-25T17:13:29.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:13:29.697 [DEBUG] [Thread-15355] [transport.py] [_log()] starting thread (client mode): 0xb6b028f0
2025-12-25T17:13:29.698 [DEBUG] [Thread-15355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:13:29.718 [DEBUG] [Thread-15355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:13:29.718 [INFO] [Thread-15355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] client lang: <none>
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] server lang: <none>
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] kex follows: False
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] Compression: none
2025-12-25T17:13:29.722 [DEBUG] [Thread-15355] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:13:29.739 [DEBUG] [Thread-15355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:13:29.740 [DEBUG] [Thread-15355] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:13:29.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:13:29.741 [DEBUG] [Thread-15355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:13:29.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:13:29.743 [DEBUG] [Thread-15355] [transport.py] [_log()] userauth is OK
2025-12-25T17:13:29.743 [DEBUG] [Thread-15355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:13:29.743 [DEBUG] [Thread-15355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:13:29.743 [DEBUG] [Thread-15355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:13:29.743 [DEBUG] [Thread-15355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:13:29.768 [INFO] [Thread-15355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:13:29.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:13:30.587 [DEBUG] [Thread-15355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:13:30.587 [DEBUG] [Thread-15355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:13:30.587 [DEBUG] [Thread-15355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:13:30.628 [DEBUG] [Thread-15355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:13:30.628 [DEBUG] [Thread-15355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:13:30.632 [DEBUG] [Thread-15355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:13:30.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:13:30.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:13:30.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:13:30.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:13:30.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:13:30.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:13:30.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:13:30.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:13:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:13:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.633741 -999.00  +25.10  37.32     20   +0.70 1 1 2 1 1   887    0 25.07 39.17 ----- 33.4 37.3 296.8 44.0 28.1 -29.3 28.4 -28.9 29.0 -28.1 29.2 -27.4
2025-12-25T17:13:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:13:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:13:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.633741
2025-12-25T17:13:30.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:13:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:13:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:13:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:13:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:13:30.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:13:06', tmtdew=29.02, humidity=14.63, cloud=0.0, wind=34.19, temperature=25.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:12:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:13:30.660 [DEBUG] [Thread-15355] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:13:30.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-25T17:13:30.753 [DEBUG] [Thread-15358] [transport.py] [_log()] starting thread (client mode): 0xb6b620b0
2025-12-25T17:13:30.753 [DEBUG] [Thread-15358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:13:30.767 [DEBUG] [Thread-15358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:13:30.767 [INFO] [Thread-15358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:13:30.776 [DEBUG] [Thread-15358] [transport.py] [_log()] client lang: <none>
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] server lang: <none>
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] kex follows: False
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] Compression: none
2025-12-25T17:13:30.777 [DEBUG] [Thread-15358] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:13:30.835 [DEBUG] [Thread-15358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:13:30.835 [DEBUG] [Thread-15358] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:13:30.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:13:30.836 [DEBUG] [Thread-15358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:13:30.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:13:30.892 [DEBUG] [Thread-15358] [transport.py] [_log()] userauth is OK
2025-12-25T17:13:30.892 [DEBUG] [Thread-15358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:13:30.893 [DEBUG] [Thread-15358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:13:30.893 [DEBUG] [Thread-15358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:13:30.893 [DEBUG] [Thread-15358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:13:30.912 [INFO] [Thread-15358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:13:30.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-25T17:13:30.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:13:31.756 [DEBUG] [Thread-15358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:13:31.756 [DEBUG] [Thread-15358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:13:31.804 [DEBUG] [Thread-15358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:13:31.804 [DEBUG] [Thread-15358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:13:31.813 [DEBUG] [Thread-15358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:13:31.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:13:31.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:13:31.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-25T17:13:31.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:13:31.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:13:31.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:13:31.850 [DEBUG] [Thread-15358] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:13:35.951 [DEBUG] [Thread-15360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:13:50.998 [DEBUG] [Thread-15361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:00.111 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:00.112 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:14:01.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:14:01.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-25T17:14:02.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 13, 38), 29.14, 14.07, 0.0, 36.08, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:14:02.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:13:38
2025-12-25T17:14:02.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:14:02.842 [DEBUG] [Thread-15362] [transport.py] [_log()] starting thread (client mode): 0xb6b606d0
2025-12-25T17:14:02.842 [DEBUG] [Thread-15362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:14:02.863 [DEBUG] [Thread-15362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:14:02.863 [INFO] [Thread-15362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:14:02.866 [DEBUG] [Thread-15362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] client lang: <none>
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] server lang: <none>
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] kex follows: False
2025-12-25T17:14:02.867 [DEBUG] [Thread-15362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:14:02.868 [DEBUG] [Thread-15362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:14:02.868 [DEBUG] [Thread-15362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:14:02.868 [DEBUG] [Thread-15362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:14:02.868 [DEBUG] [Thread-15362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:14:02.868 [DEBUG] [Thread-15362] [transport.py] [_log()] Compression: none
2025-12-25T17:14:02.868 [DEBUG] [Thread-15362] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:14:02.887 [DEBUG] [Thread-15362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:14:02.887 [DEBUG] [Thread-15362] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:14:02.888 [DEBUG] [Thread-15362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:14:02.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:14:02.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:14:02.890 [DEBUG] [Thread-15362] [transport.py] [_log()] userauth is OK
2025-12-25T17:14:02.890 [DEBUG] [Thread-15362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:14:02.890 [DEBUG] [Thread-15362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:14:02.890 [DEBUG] [Thread-15362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:14:02.891 [DEBUG] [Thread-15362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:14:02.914 [INFO] [Thread-15362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:14:02.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:14:03.579 [DEBUG] [Thread-15362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:14:03.580 [DEBUG] [Thread-15362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:14:03.580 [DEBUG] [Thread-15362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:14:03.621 [DEBUG] [Thread-15362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:14:03.621 [DEBUG] [Thread-15362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:14:03.624 [DEBUG] [Thread-15362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:14:03.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:14:03.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:14:03.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:14:03.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:14:03.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:14:03.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:14:03.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:14:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:14:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:14:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.634436 -999.00  +24.90  39.31     20   +0.50 1 1 2 1 1   887    0 25.57 45.27 ----- 35.2 39.3 295.4 51.7 28.1 -28.9 28.4 -29.2 29.1 -27.0 29.3 -27.5
2025-12-25T17:14:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:14:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:14:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.634436
2025-12-25T17:14:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:13:38', tmtdew=29.14, humidity=14.07, cloud=0.0, wind=36.08, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:13:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:14:03.651 [DEBUG] [Thread-15362] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:14:03.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:14:03.745 [DEBUG] [Thread-15365] [transport.py] [_log()] starting thread (client mode): 0xb95912a0
2025-12-25T17:14:03.745 [DEBUG] [Thread-15365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:14:03.760 [DEBUG] [Thread-15365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:14:03.760 [INFO] [Thread-15365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:03.768 [DEBUG] [Thread-15365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] client lang: <none>
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] server lang: <none>
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] kex follows: False
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:14:03.769 [DEBUG] [Thread-15365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:14:03.770 [DEBUG] [Thread-15365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:14:03.770 [DEBUG] [Thread-15365] [transport.py] [_log()] Compression: none
2025-12-25T17:14:03.770 [DEBUG] [Thread-15365] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:14:03.829 [DEBUG] [Thread-15365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:14:03.829 [DEBUG] [Thread-15365] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:14:03.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:14:03.830 [DEBUG] [Thread-15365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:14:03.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:14:03.887 [DEBUG] [Thread-15365] [transport.py] [_log()] userauth is OK
2025-12-25T17:14:03.887 [DEBUG] [Thread-15365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:14:03.888 [DEBUG] [Thread-15365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:14:03.888 [DEBUG] [Thread-15365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:14:03.888 [DEBUG] [Thread-15365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:14:03.905 [INFO] [Thread-15365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:14:03.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-25T17:14:03.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:14:04.770 [DEBUG] [Thread-15365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:14:04.770 [DEBUG] [Thread-15365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:14:04.818 [DEBUG] [Thread-15365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:14:04.818 [DEBUG] [Thread-15365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:14:04.827 [DEBUG] [Thread-15365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:14:04.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:14:04.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:14:04.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-25T17:14:04.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:14:04.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:14:04.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:14:04.864 [DEBUG] [Thread-15365] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:14:06.033 [DEBUG] [Thread-15367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:15.638 [DEBUG] [Thread-15368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:21.080 [DEBUG] [Thread-15369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:34.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:14:34.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:14:34.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-25T17:14:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 14, 10), 29.37, 13.87, 0.0, 32.98, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:14:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:14:10
2025-12-25T17:14:35.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:14:35.830 [DEBUG] [Thread-15370] [transport.py] [_log()] starting thread (client mode): 0xb95b0220
2025-12-25T17:14:35.831 [DEBUG] [Thread-15370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:14:35.850 [DEBUG] [Thread-15370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:14:35.851 [INFO] [Thread-15370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:14:35.852 [DEBUG] [Thread-15370] [transport.py] [_log()] client lang: <none>
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] server lang: <none>
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] kex follows: False
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] Compression: none
2025-12-25T17:14:35.853 [DEBUG] [Thread-15370] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:14:35.863 [DEBUG] [Thread-15370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:14:35.864 [DEBUG] [Thread-15370] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:14:35.864 [DEBUG] [Thread-15370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:14:35.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:14:35.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:14:35.867 [DEBUG] [Thread-15370] [transport.py] [_log()] userauth is OK
2025-12-25T17:14:35.867 [DEBUG] [Thread-15370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:14:35.867 [DEBUG] [Thread-15370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:14:35.868 [DEBUG] [Thread-15370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:14:35.868 [DEBUG] [Thread-15370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:14:35.893 [INFO] [Thread-15370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:14:35.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:14:36.113 [DEBUG] [Thread-15372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:14:36.724 [DEBUG] [Thread-15370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:14:36.724 [DEBUG] [Thread-15370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:14:36.724 [DEBUG] [Thread-15370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:14:36.765 [DEBUG] [Thread-15370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:14:36.765 [DEBUG] [Thread-15370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:14:36.769 [DEBUG] [Thread-15370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:14:36.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:14:36.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:14:36.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:14:36.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:14:36.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:14:36.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:14:36.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:14:36.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:14:36.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:14:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.634783 -999.00  +24.80  26.14     20   +0.40 1 1 1 1 1   887    0 25.32 43.31 ----- 27.3 26.1 285.0 43.3 28.1 -28.6 28.3 -29.1 29.0 -27.8 29.3 -26.3
2025-12-25T17:14:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:14:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:14:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.634783
2025-12-25T17:14:36.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:14:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:14:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:14:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:14:36.793 [DEBUG] [Thread-15370] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:14:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:14:36.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:14:10', tmtdew=29.37, humidity=13.87, cloud=0.0, wind=32.98, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:14:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:14: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-25T17:14:36.888 [DEBUG] [Thread-15374] [transport.py] [_log()] starting thread (client mode): 0xb9590310
2025-12-25T17:14:36.889 [DEBUG] [Thread-15374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:14:36.903 [DEBUG] [Thread-15374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:14:36.904 [INFO] [Thread-15374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:14:36.911 [DEBUG] [Thread-15374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:14:36.912 [DEBUG] [Thread-15374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:14:36.912 [DEBUG] [Thread-15374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:14:36.912 [DEBUG] [Thread-15374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:36.912 [DEBUG] [Thread-15374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:14:36.912 [DEBUG] [Thread-15374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:36.912 [DEBUG] [Thread-15374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] client lang: <none>
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] server lang: <none>
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] kex follows: False
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] Compression: none
2025-12-25T17:14:36.913 [DEBUG] [Thread-15374] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:14:36.971 [DEBUG] [Thread-15374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:14:36.972 [DEBUG] [Thread-15374] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:14:36.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:14:36.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:14:36.974 [DEBUG] [Thread-15374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:14:37.027 [DEBUG] [Thread-15374] [transport.py] [_log()] userauth is OK
2025-12-25T17:14:37.027 [DEBUG] [Thread-15374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:14:37.028 [DEBUG] [Thread-15374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:14:37.028 [DEBUG] [Thread-15374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:14:37.028 [DEBUG] [Thread-15374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:14:37.046 [INFO] [Thread-15374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:14:37.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-25T17:14:37.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:14:37.885 [DEBUG] [Thread-15374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:14:37.885 [DEBUG] [Thread-15374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:14:37.933 [DEBUG] [Thread-15374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:14:37.933 [DEBUG] [Thread-15374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:14:37.942 [DEBUG] [Thread-15374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:14:37.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:14:37.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-25T17:14:37.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-25T17:14:37.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:14:37.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:14:37.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:14:37.979 [DEBUG] [Thread-15374] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:14:51.148 [DEBUG] [Thread-15376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:00.251 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:00.252 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:06.202 [DEBUG] [Thread-15377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:07.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:15:07.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:15:07.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-25T17:15:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 14, 42), 29.78, 13.6, 0.0, 33.97, 25.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:15:08.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:14:42
2025-12-25T17:15:08.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:15:08.968 [DEBUG] [Thread-15378] [transport.py] [_log()] starting thread (client mode): 0xb95b3760
2025-12-25T17:15:08.968 [DEBUG] [Thread-15378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:15:08.988 [DEBUG] [Thread-15378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:15:08.988 [INFO] [Thread-15378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] client lang: <none>
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] server lang: <none>
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] kex follows: False
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:15:08.991 [DEBUG] [Thread-15378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:15:08.992 [DEBUG] [Thread-15378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:15:08.992 [DEBUG] [Thread-15378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:15:08.992 [DEBUG] [Thread-15378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:15:08.992 [DEBUG] [Thread-15378] [transport.py] [_log()] Compression: none
2025-12-25T17:15:08.992 [DEBUG] [Thread-15378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:15:09.009 [DEBUG] [Thread-15378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:15:09.009 [DEBUG] [Thread-15378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:15:09.010 [DEBUG] [Thread-15378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:15:09.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:15:09.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:15:09.012 [DEBUG] [Thread-15378] [transport.py] [_log()] userauth is OK
2025-12-25T17:15:09.012 [DEBUG] [Thread-15378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:15:09.012 [DEBUG] [Thread-15378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:15:09.012 [DEBUG] [Thread-15378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:15:09.012 [DEBUG] [Thread-15378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:15:09.035 [INFO] [Thread-15378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:15:09.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:15:09.821 [DEBUG] [Thread-15378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:15:09.821 [DEBUG] [Thread-15378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:15:09.822 [DEBUG] [Thread-15378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:15:09.862 [DEBUG] [Thread-15378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:15:09.862 [DEBUG] [Thread-15378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:15:09.865 [DEBUG] [Thread-15378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:15:09.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:15:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:15:09.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:15:09.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:15:09.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:15:09.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:15:09.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:15:09.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:15:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:15:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.635130 -999.00  +25.30  26.27     19   +0.50 1 1 1 1 1   887    0 25.42 43.46 ----- 34.8 26.3 289.4 35.0 28.2 -28.3 28.4 -27.9 29.1 -29.3 29.4 -26.8
2025-12-25T17:15:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:15:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:15:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.635130
2025-12-25T17:15:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:15:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:15:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:15:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:15:09.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:15:09.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:14:42', tmtdew=29.78, humidity=13.6, cloud=0.0, wind=33.97, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:14:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:15:09.893 [DEBUG] [Thread-15378] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:15:09.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:15:09.985 [DEBUG] [Thread-15381] [transport.py] [_log()] starting thread (client mode): 0xb6b4f490
2025-12-25T17:15:09.986 [DEBUG] [Thread-15381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:15:10.001 [DEBUG] [Thread-15381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:15:10.002 [INFO] [Thread-15381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:15:10.009 [DEBUG] [Thread-15381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:15:10.009 [DEBUG] [Thread-15381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:15:10.009 [DEBUG] [Thread-15381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:15:10.009 [DEBUG] [Thread-15381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:10.009 [DEBUG] [Thread-15381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:10.009 [DEBUG] [Thread-15381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] client lang: <none>
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] server lang: <none>
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] kex follows: False
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] Compression: none
2025-12-25T17:15:10.010 [DEBUG] [Thread-15381] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:15:10.067 [DEBUG] [Thread-15381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:15:10.067 [DEBUG] [Thread-15381] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:15:10.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:15:10.068 [DEBUG] [Thread-15381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:15:10.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:15:10.123 [DEBUG] [Thread-15381] [transport.py] [_log()] userauth is OK
2025-12-25T17:15:10.124 [DEBUG] [Thread-15381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:15:10.124 [DEBUG] [Thread-15381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:15:10.124 [DEBUG] [Thread-15381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:15:10.124 [DEBUG] [Thread-15381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:15:10.147 [INFO] [Thread-15381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:15:10.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-25T17:15:10.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:15:10.995 [DEBUG] [Thread-15381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:15:10.995 [DEBUG] [Thread-15381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:15:11.043 [DEBUG] [Thread-15381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:15:11.044 [DEBUG] [Thread-15381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:15:11.053 [DEBUG] [Thread-15381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:15:11.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:15:11.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:15:11.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-25T17:15:11.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:15:11.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:15:11.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:15:11.090 [DEBUG] [Thread-15381] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:15:15.669 [DEBUG] [Thread-15383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:21.236 [DEBUG] [Thread-15384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:36.281 [DEBUG] [Thread-15385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:15:41.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:15:41.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:15:41.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-25T17:15:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 15, 14), 29.8, 13.6, 0.0, 37.28, 25.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:15:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:15:14
2025-12-25T17:15:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:15:42.083 [DEBUG] [Thread-15386] [transport.py] [_log()] starting thread (client mode): 0xb6b62830
2025-12-25T17:15:42.083 [DEBUG] [Thread-15386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:15:42.105 [DEBUG] [Thread-15386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:15:42.105 [INFO] [Thread-15386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:15:42.108 [DEBUG] [Thread-15386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:15:42.108 [DEBUG] [Thread-15386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] client lang: <none>
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] server lang: <none>
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] kex follows: False
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] Compression: none
2025-12-25T17:15:42.109 [DEBUG] [Thread-15386] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:15:42.127 [DEBUG] [Thread-15386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:15:42.128 [DEBUG] [Thread-15386] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:15:42.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:15:42.129 [DEBUG] [Thread-15386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:15:42.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:15:42.131 [DEBUG] [Thread-15386] [transport.py] [_log()] userauth is OK
2025-12-25T17:15:42.132 [DEBUG] [Thread-15386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:15:42.132 [DEBUG] [Thread-15386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:15:42.132 [DEBUG] [Thread-15386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:15:42.132 [DEBUG] [Thread-15386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:15:42.157 [INFO] [Thread-15386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:15:42.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:15:42.942 [DEBUG] [Thread-15386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:15:42.942 [DEBUG] [Thread-15386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:15:42.942 [DEBUG] [Thread-15386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:15:42.983 [DEBUG] [Thread-15386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:15:42.983 [DEBUG] [Thread-15386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:15:42.987 [DEBUG] [Thread-15386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:15:42.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:15:42.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:15:43.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:15:43.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:15:43.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:15:43.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:15:43.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:15:43.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:15:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:15:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.635477 -999.00  +25.40  36.03     19   +0.60 1 1 2 1 1   887    0 25.81 50.21 ----- 36.8 36.0 305.0 48.7 28.2 -28.1 28.4 -28.7 29.1 -26.7 29.4 -26.8
2025-12-25T17:15:43.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:15:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:15:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.635477
2025-12-25T17:15:43.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:15:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:15:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:15:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:15:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:15:43.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:15:14', tmtdew=29.8, humidity=13.6, cloud=0.0, wind=37.28, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:15:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:15:43.012 [DEBUG] [Thread-15386] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:15:43.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-25T17:15:43.107 [DEBUG] [Thread-15389] [transport.py] [_log()] starting thread (client mode): 0xb6b03ac0
2025-12-25T17:15:43.107 [DEBUG] [Thread-15389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:15:43.122 [DEBUG] [Thread-15389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:15:43.122 [INFO] [Thread-15389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:15:43.129 [DEBUG] [Thread-15389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:15:43.129 [DEBUG] [Thread-15389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] client lang: <none>
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] server lang: <none>
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] kex follows: False
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] Compression: none
2025-12-25T17:15:43.130 [DEBUG] [Thread-15389] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:15:43.187 [DEBUG] [Thread-15389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:15:43.187 [DEBUG] [Thread-15389] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:15:43.188 [DEBUG] [Thread-15389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:15:43.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:15:43.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:15:43.243 [DEBUG] [Thread-15389] [transport.py] [_log()] userauth is OK
2025-12-25T17:15:43.243 [DEBUG] [Thread-15389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:15:43.243 [DEBUG] [Thread-15389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:15:43.243 [DEBUG] [Thread-15389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:15:43.244 [DEBUG] [Thread-15389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:15:43.262 [INFO] [Thread-15389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:15:43.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-25T17:15:43.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:15:44.091 [DEBUG] [Thread-15389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:15:44.091 [DEBUG] [Thread-15389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:15:44.139 [DEBUG] [Thread-15389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:15:44.139 [DEBUG] [Thread-15389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:15:44.148 [DEBUG] [Thread-15389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:15:44.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:15:44.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-25T17:15:44.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:15:44.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:15:44.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:15:44.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:15:44.185 [DEBUG] [Thread-15389] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:15:51.311 [DEBUG] [Thread-15391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:00.390 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:00.391 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:06.368 [DEBUG] [Thread-15392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:16:14.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:16:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:16:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 15, 46), 29.44, 13.82, 0.0, 40.9, 25.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:16:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:15:46
2025-12-25T17:16:15.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:16:15.236 [DEBUG] [Thread-15393] [transport.py] [_log()] starting thread (client mode): 0xb6b00940
2025-12-25T17:16:15.236 [DEBUG] [Thread-15393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:16:15.256 [DEBUG] [Thread-15393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:16:15.256 [INFO] [Thread-15393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] client lang: <none>
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] server lang: <none>
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] kex follows: False
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] Compression: none
2025-12-25T17:16:15.260 [DEBUG] [Thread-15393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:16:15.277 [DEBUG] [Thread-15393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:16:15.277 [DEBUG] [Thread-15393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:16:15.277 [DEBUG] [Thread-15393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:16:15.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:16:15.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:16:15.278 [DEBUG] [Thread-15393] [transport.py] [_log()] userauth is OK
2025-12-25T17:16:15.278 [DEBUG] [Thread-15393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:16:15.278 [DEBUG] [Thread-15393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:16:15.278 [DEBUG] [Thread-15393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:16:15.278 [DEBUG] [Thread-15393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:16:15.308 [INFO] [Thread-15393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:16:15.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:16:15.697 [DEBUG] [Thread-15395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:15.966 [DEBUG] [Thread-15393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:16:15.966 [DEBUG] [Thread-15393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:16:15.966 [DEBUG] [Thread-15393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:16:16.008 [DEBUG] [Thread-15393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:16:16.008 [DEBUG] [Thread-15393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:16:16.010 [DEBUG] [Thread-15393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:16:16.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:16:16.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:16:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:16:16.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:16:16.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:16:16.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:16:16.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.635825 -999.00  +25.40  32.21     19   +0.80 1 1 2 1 1   887    0 26.07 54.17 ----- 25.6 32.2 293.0 41.1 28.2 -28.5 28.4 -29.1 29.2 -29.9 29.5 -26.6
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.635825
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:16:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:15:46', tmtdew=29.44, humidity=13.82, cloud=0.0, wind=40.9, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:15:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:16:16.028 [DEBUG] [Thread-15393] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:16:16.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-25T17:16:16.110 [DEBUG] [Thread-15397] [transport.py] [_log()] starting thread (client mode): 0xb9593010
2025-12-25T17:16:16.110 [DEBUG] [Thread-15397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:16:16.125 [DEBUG] [Thread-15397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:16:16.125 [INFO] [Thread-15397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:16:16.132 [DEBUG] [Thread-15397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:16:16.132 [DEBUG] [Thread-15397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:16:16.132 [DEBUG] [Thread-15397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:16:16.132 [DEBUG] [Thread-15397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] client lang: <none>
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] server lang: <none>
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] kex follows: False
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] Compression: none
2025-12-25T17:16:16.133 [DEBUG] [Thread-15397] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:16:16.189 [DEBUG] [Thread-15397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:16:16.189 [DEBUG] [Thread-15397] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:16:16.189 [DEBUG] [Thread-15397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:16:16.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:16:16.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:16:16.247 [DEBUG] [Thread-15397] [transport.py] [_log()] userauth is OK
2025-12-25T17:16:16.247 [DEBUG] [Thread-15397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:16:16.247 [DEBUG] [Thread-15397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:16:16.247 [DEBUG] [Thread-15397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:16:16.247 [DEBUG] [Thread-15397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:16:16.260 [INFO] [Thread-15397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:16:16.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-25T17:16:16.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:16:17.105 [DEBUG] [Thread-15397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:16:17.105 [DEBUG] [Thread-15397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:16:17.153 [DEBUG] [Thread-15397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:16:17.153 [DEBUG] [Thread-15397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:16:17.161 [DEBUG] [Thread-15397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:16:17.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:16:17.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-25T17:16:17.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-25T17:16:17.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:16:17.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:16:17.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:16:17.193 [DEBUG] [Thread-15397] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:16:21.401 [DEBUG] [Thread-15399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:36.459 [DEBUG] [Thread-15400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:16:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:16:47.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:16:47.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-25T17:16:47.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 16, 18), 29.47, 13.8, 0.0, 41.32, 25.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:16:47.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:16:18
2025-12-25T17:16:48.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:16:48.219 [DEBUG] [Thread-15401] [transport.py] [_log()] starting thread (client mode): 0xb6b21b40
2025-12-25T17:16:48.219 [DEBUG] [Thread-15401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:16:48.235 [DEBUG] [Thread-15401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:16:48.235 [INFO] [Thread-15401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:16:48.238 [DEBUG] [Thread-15401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:16:48.238 [DEBUG] [Thread-15401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:16:48.238 [DEBUG] [Thread-15401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:16:48.238 [DEBUG] [Thread-15401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:48.238 [DEBUG] [Thread-15401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:48.238 [DEBUG] [Thread-15401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] client lang: <none>
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] server lang: <none>
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] kex follows: False
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:16:48.239 [DEBUG] [Thread-15401] [transport.py] [_log()] Compression: none
2025-12-25T17:16:48.240 [DEBUG] [Thread-15401] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:16:48.256 [DEBUG] [Thread-15401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:16:48.257 [DEBUG] [Thread-15401] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:16:48.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:16:48.258 [DEBUG] [Thread-15401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:16:48.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:16:48.300 [DEBUG] [Thread-15401] [transport.py] [_log()] userauth is OK
2025-12-25T17:16:48.301 [DEBUG] [Thread-15401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:16:48.301 [DEBUG] [Thread-15401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:16:48.301 [DEBUG] [Thread-15401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:16:48.301 [DEBUG] [Thread-15401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:16:48.336 [INFO] [Thread-15401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:16:48.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:16:49.115 [DEBUG] [Thread-15401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:16:49.116 [DEBUG] [Thread-15401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:16:49.116 [DEBUG] [Thread-15401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:16:49.157 [DEBUG] [Thread-15401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:16:49.157 [DEBUG] [Thread-15401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:16:49.159 [DEBUG] [Thread-15401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:16:49.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:16:49.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:16:49.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:16:49.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:16:49.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:16:49.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:16:49.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.636172 -999.00  +25.40  41.66     19   +0.60 1 1 2 1 1   887    0 25.98 55.52 ----- 38.5 41.7 302.2 50.3 28.2 -29.6 28.4 -28.8 29.2 -27.4 29.4 -27.1
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.636172
2025-12-25T17:16:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:16:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:16:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:16:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:16:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:16:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:16:18', tmtdew=29.47, humidity=13.8, cloud=0.0, wind=41.32, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:16:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:16:49.179 [DEBUG] [Thread-15401] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:16:49.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-25T17:16:49.271 [DEBUG] [Thread-15404] [transport.py] [_log()] starting thread (client mode): 0xb9558d90
2025-12-25T17:16:49.271 [DEBUG] [Thread-15404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:16:49.285 [DEBUG] [Thread-15404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:16:49.285 [INFO] [Thread-15404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] client lang: <none>
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] server lang: <none>
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] kex follows: False
2025-12-25T17:16:49.293 [DEBUG] [Thread-15404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:16:49.294 [DEBUG] [Thread-15404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:16:49.294 [DEBUG] [Thread-15404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:16:49.294 [DEBUG] [Thread-15404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:16:49.294 [DEBUG] [Thread-15404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:16:49.294 [DEBUG] [Thread-15404] [transport.py] [_log()] Compression: none
2025-12-25T17:16:49.294 [DEBUG] [Thread-15404] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:16:49.351 [DEBUG] [Thread-15404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:16:49.351 [DEBUG] [Thread-15404] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:16:49.352 [DEBUG] [Thread-15404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:16:49.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:16:49.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:16:49.411 [DEBUG] [Thread-15404] [transport.py] [_log()] userauth is OK
2025-12-25T17:16:49.411 [DEBUG] [Thread-15404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:16:49.411 [DEBUG] [Thread-15404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:16:49.411 [DEBUG] [Thread-15404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:16:49.412 [DEBUG] [Thread-15404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:16:49.432 [INFO] [Thread-15404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17: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-25T17:16:49.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:16:50.291 [DEBUG] [Thread-15404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:16:50.291 [DEBUG] [Thread-15404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:16:50.339 [DEBUG] [Thread-15404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:16:50.339 [DEBUG] [Thread-15404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:16:50.348 [DEBUG] [Thread-15404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:16:50.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:16:50.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-25T17:16:50.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:16:50.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:16:50.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:16:50.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:16:50.384 [DEBUG] [Thread-15404] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:16:51.496 [DEBUG] [Thread-15406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:00.532 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:00.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:06.533 [DEBUG] [Thread-15407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:15.741 [DEBUG] [Thread-15408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:20.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:17:20.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:17:20.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-25T17:17:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 16, 50), 29.7, 13.65, 0.0, 36.79, 25.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:17:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:16:50
2025-12-25T17:17:21.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:17:21.374 [DEBUG] [Thread-15409] [transport.py] [_log()] starting thread (client mode): 0xb6bb5120
2025-12-25T17:17:21.374 [DEBUG] [Thread-15409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:17:21.395 [DEBUG] [Thread-15409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:17:21.396 [INFO] [Thread-15409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:17:21.399 [DEBUG] [Thread-15409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:17:21.399 [DEBUG] [Thread-15409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] client lang: <none>
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] server lang: <none>
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] kex follows: False
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] Compression: none
2025-12-25T17:17:21.400 [DEBUG] [Thread-15409] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:17:21.409 [DEBUG] [Thread-15409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:17:21.409 [DEBUG] [Thread-15409] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:17:21.410 [DEBUG] [Thread-15409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:17:21.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:17:21.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:17:21.412 [DEBUG] [Thread-15409] [transport.py] [_log()] userauth is OK
2025-12-25T17:17:21.412 [DEBUG] [Thread-15409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:17:21.412 [DEBUG] [Thread-15409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:17:21.412 [DEBUG] [Thread-15409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:17:21.412 [DEBUG] [Thread-15409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:17:21.436 [INFO] [Thread-15409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:17:21.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:17:21.571 [DEBUG] [Thread-15411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:22.079 [DEBUG] [Thread-15409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:17:22.079 [DEBUG] [Thread-15409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:17:22.080 [DEBUG] [Thread-15409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:17:22.120 [DEBUG] [Thread-15409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:17:22.120 [DEBUG] [Thread-15409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:17:22.124 [DEBUG] [Thread-15409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:17:22.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:17:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:17:22.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:17:22.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:17:22.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:17:22.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:17:22.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:17:22.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:17:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:17:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.636519 -999.00  +25.30  32.21     19   +0.40 1 1 2 1 1   887    0 25.38 59.20 ----- 33.9 32.2 310.6 45.5 28.2 -28.6 28.4 -28.6 29.1 -27.4 29.4 -26.9
2025-12-25T17:17:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:17:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:17:22.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.636519
2025-12-25T17:17:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:17:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:17:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:17:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:17:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:17:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:16:50', tmtdew=29.7, humidity=13.65, cloud=0.0, wind=36.79, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:16:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:17:22.152 [DEBUG] [Thread-15409] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:17:22.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:17:22.247 [DEBUG] [Thread-15413] [transport.py] [_log()] starting thread (client mode): 0xb6bb5150
2025-12-25T17:17:22.247 [DEBUG] [Thread-15413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:17:22.262 [DEBUG] [Thread-15413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:17:22.262 [INFO] [Thread-15413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] client lang: <none>
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] server lang: <none>
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] kex follows: False
2025-12-25T17:17:22.270 [DEBUG] [Thread-15413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:17:22.271 [DEBUG] [Thread-15413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:17:22.271 [DEBUG] [Thread-15413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:17:22.271 [DEBUG] [Thread-15413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:17:22.271 [DEBUG] [Thread-15413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:17:22.271 [DEBUG] [Thread-15413] [transport.py] [_log()] Compression: none
2025-12-25T17:17:22.271 [DEBUG] [Thread-15413] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:17:22.335 [DEBUG] [Thread-15413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:17:22.336 [DEBUG] [Thread-15413] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:17:22.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:17:22.337 [DEBUG] [Thread-15413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:17:22.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:17:22.390 [DEBUG] [Thread-15413] [transport.py] [_log()] userauth is OK
2025-12-25T17:17:22.390 [DEBUG] [Thread-15413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:17:22.391 [DEBUG] [Thread-15413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:17:22.391 [DEBUG] [Thread-15413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:17:22.391 [DEBUG] [Thread-15413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:17:22.404 [INFO] [Thread-15413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:17:22.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-25T17:17:22.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:17:23.238 [DEBUG] [Thread-15413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:17:23.239 [DEBUG] [Thread-15413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:17:23.287 [DEBUG] [Thread-15413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:17:23.287 [DEBUG] [Thread-15413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:17:23.296 [DEBUG] [Thread-15413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:17:23.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:17:23.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-25T17:17:23.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-25T17:17:23.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:17:23.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:17:23.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:17:23.330 [DEBUG] [Thread-15413] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:17:36.598 [DEBUG] [Thread-15415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:51.649 [DEBUG] [Thread-15416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:17:53.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:17:53.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:17:53.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-25T17:17:54.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 17, 22), 29.56, 13.75, 0.0, 37.18, 25.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:17:54.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:17:22
2025-12-25T17:17:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:17:54.320 [DEBUG] [Thread-15417] [transport.py] [_log()] starting thread (client mode): 0xb6bb4040
2025-12-25T17:17:54.320 [DEBUG] [Thread-15417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:17:54.342 [DEBUG] [Thread-15417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:17:54.342 [INFO] [Thread-15417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:17:54.345 [DEBUG] [Thread-15417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:17:54.345 [DEBUG] [Thread-15417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:17:54.345 [DEBUG] [Thread-15417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:17:54.345 [DEBUG] [Thread-15417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:54.345 [DEBUG] [Thread-15417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:54.345 [DEBUG] [Thread-15417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] client lang: <none>
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] server lang: <none>
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] kex follows: False
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] Compression: none
2025-12-25T17:17:54.346 [DEBUG] [Thread-15417] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:17:54.363 [DEBUG] [Thread-15417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:17:54.364 [DEBUG] [Thread-15417] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:17:54.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:17:54.365 [DEBUG] [Thread-15417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:17:54.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:17:54.367 [DEBUG] [Thread-15417] [transport.py] [_log()] userauth is OK
2025-12-25T17:17:54.367 [DEBUG] [Thread-15417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:17:54.367 [DEBUG] [Thread-15417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:17:54.367 [DEBUG] [Thread-15417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:17:54.367 [DEBUG] [Thread-15417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:17:54.391 [INFO] [Thread-15417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:17:54.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:17:55.189 [DEBUG] [Thread-15417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:17:55.189 [DEBUG] [Thread-15417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:17:55.190 [DEBUG] [Thread-15417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:17:55.230 [DEBUG] [Thread-15417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:17:55.230 [DEBUG] [Thread-15417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:17:55.234 [DEBUG] [Thread-15417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:17:55.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:17:55.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:17:55.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:17:55.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:17:55.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:17:55.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:17:55.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:17:55.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:17:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:17:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.636866 -999.00  +25.40  33.39     19   +0.50 1 1 2 1 1   887    0 26.36 61.18 ----- 31.2 33.4 300.6 42.2 28.3 -28.7 28.4 -28.8 29.2 -25.9 29.5 -26.7
2025-12-25T17:17:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:17:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:17:55.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.636866
2025-12-25T17:17:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:17:55.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:17:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:17:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:17:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:17:55.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:17:22', tmtdew=29.56, humidity=13.75, cloud=0.0, wind=37.18, temperature=25.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:17:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:17:55.260 [DEBUG] [Thread-15417] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:17:55.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-25T17:17:55.357 [DEBUG] [Thread-15420] [transport.py] [_log()] starting thread (client mode): 0xb6bb5360
2025-12-25T17:17:55.357 [DEBUG] [Thread-15420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:17:55.372 [DEBUG] [Thread-15420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:17:55.372 [INFO] [Thread-15420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:17:55.380 [DEBUG] [Thread-15420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] client lang: <none>
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] server lang: <none>
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] kex follows: False
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:17:55.381 [DEBUG] [Thread-15420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:17:55.382 [DEBUG] [Thread-15420] [transport.py] [_log()] Compression: none
2025-12-25T17:17:55.382 [DEBUG] [Thread-15420] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:17:55.437 [DEBUG] [Thread-15420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:17:55.437 [DEBUG] [Thread-15420] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:17:55.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:17:55.438 [DEBUG] [Thread-15420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:17:55.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:17:55.494 [DEBUG] [Thread-15420] [transport.py] [_log()] userauth is OK
2025-12-25T17:17:55.494 [DEBUG] [Thread-15420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:17:55.494 [DEBUG] [Thread-15420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:17:55.494 [DEBUG] [Thread-15420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:17:55.494 [DEBUG] [Thread-15420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:17:55.512 [INFO] [Thread-15420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:17:55.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-25T17:17:55.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:17:56.360 [DEBUG] [Thread-15420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:17:56.360 [DEBUG] [Thread-15420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:17:56.407 [DEBUG] [Thread-15420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:17:56.407 [DEBUG] [Thread-15420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:17:56.415 [DEBUG] [Thread-15420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:17:56.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:17:56.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-25T17:17:56.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-25T17:17:56.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:17:56.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:17:56.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:17:56.447 [DEBUG] [Thread-15420] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:18:00.687 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:00.688 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:06.683 [DEBUG] [Thread-15422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:15.782 [DEBUG] [Thread-15423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:21.732 [DEBUG] [Thread-15424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:26.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:18:26.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:18:26.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-25T17:18:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 17, 54), 28.95, 14.52, 0.0, 32.98, 25.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:18:27.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:17:54
2025-12-25T17:18:27.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:18:27.459 [DEBUG] [Thread-15425] [transport.py] [_log()] starting thread (client mode): 0xb6b20b20
2025-12-25T17:18:27.459 [DEBUG] [Thread-15425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:18:27.479 [DEBUG] [Thread-15425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:18:27.479 [INFO] [Thread-15425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] client lang: <none>
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] server lang: <none>
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] kex follows: False
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] Compression: none
2025-12-25T17:18:27.482 [DEBUG] [Thread-15425] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:18:27.497 [DEBUG] [Thread-15425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:18:27.497 [DEBUG] [Thread-15425] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:18:27.497 [DEBUG] [Thread-15425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:18:27.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:18:27.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:18:27.498 [DEBUG] [Thread-15425] [transport.py] [_log()] userauth is OK
2025-12-25T17:18:27.498 [DEBUG] [Thread-15425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:18:27.498 [DEBUG] [Thread-15425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:18:27.498 [DEBUG] [Thread-15425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:18:27.498 [DEBUG] [Thread-15425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:18:27.528 [INFO] [Thread-15425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:18:27.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:18:28.172 [DEBUG] [Thread-15425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:18:28.172 [DEBUG] [Thread-15425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:18:28.173 [DEBUG] [Thread-15425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:18:28.213 [DEBUG] [Thread-15425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:18:28.213 [DEBUG] [Thread-15425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:18:28.216 [DEBUG] [Thread-15425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:18:28.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:18:28.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:18:28.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:18:28.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:18:28.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:18:28.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:18:28.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.637214 -999.00  +25.20  33.11     20   +1.00 1 1 2 1 1   887    0 26.24 65.65 ----- 35.4 33.1 315.6 42.4 28.2 -28.4 28.4 -28.3 29.1 -27.2 29.4 -27.6
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.637214
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:18:28.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:17:54', tmtdew=28.95, humidity=14.52, cloud=0.0, wind=32.98, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:17:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:18:28.233 [DEBUG] [Thread-15425] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:18:28.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-25T17:18:28.317 [DEBUG] [Thread-15428] [transport.py] [_log()] starting thread (client mode): 0xb6b22890
2025-12-25T17:18:28.317 [DEBUG] [Thread-15428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:18:28.331 [DEBUG] [Thread-15428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:18:28.331 [INFO] [Thread-15428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] client lang: <none>
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] server lang: <none>
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] kex follows: False
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] Compression: none
2025-12-25T17:18:28.339 [DEBUG] [Thread-15428] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:18:28.398 [DEBUG] [Thread-15428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:18:28.398 [DEBUG] [Thread-15428] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:18:28.398 [DEBUG] [Thread-15428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:18:28.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:18:28.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:18:28.454 [DEBUG] [Thread-15428] [transport.py] [_log()] userauth is OK
2025-12-25T17:18:28.454 [DEBUG] [Thread-15428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:18:28.454 [DEBUG] [Thread-15428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:18:28.454 [DEBUG] [Thread-15428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:18:28.454 [DEBUG] [Thread-15428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:18:28.468 [INFO] [Thread-15428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:18:28.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:18:28.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:18:29.303 [DEBUG] [Thread-15428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:18:29.303 [DEBUG] [Thread-15428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:18:29.351 [DEBUG] [Thread-15428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:18:29.351 [DEBUG] [Thread-15428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:18:29.360 [DEBUG] [Thread-15428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:18:29.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:18:29.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-25T17:18:29.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-25T17:18:29.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:18:29.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:18:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:18:29.393 [DEBUG] [Thread-15428] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:18:36.770 [DEBUG] [Thread-15430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:51.815 [DEBUG] [Thread-15431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:18:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:18:59.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:18: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-25T17:19:00.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 18, 26), 28.97, 14.52, 0.0, 32.92, 25.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:19:00.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:18:26
2025-12-25T17:19:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:19:00.445 [DEBUG] [Thread-15432] [transport.py] [_log()] starting thread (client mode): 0xb6bb66b0
2025-12-25T17:19:00.445 [DEBUG] [Thread-15432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:19:00.466 [DEBUG] [Thread-15432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:19:00.467 [INFO] [Thread-15432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] client lang: <none>
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] server lang: <none>
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] kex follows: False
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] Compression: none
2025-12-25T17:19:00.470 [DEBUG] [Thread-15432] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:19:00.486 [DEBUG] [Thread-15432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:19:00.486 [DEBUG] [Thread-15432] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:19:00.486 [DEBUG] [Thread-15432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:19:00.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:19:00.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:19:00.487 [DEBUG] [Thread-15432] [transport.py] [_log()] userauth is OK
2025-12-25T17:19:00.487 [DEBUG] [Thread-15432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:19:00.487 [DEBUG] [Thread-15432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:19:00.487 [DEBUG] [Thread-15432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:19:00.487 [DEBUG] [Thread-15432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:19:00.503 [INFO] [Thread-15432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:19:00.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:19:00.826 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:19:00.827 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:19:01.260 [DEBUG] [Thread-15432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:19:01.261 [DEBUG] [Thread-15432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:19:01.261 [DEBUG] [Thread-15432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:19:01.302 [DEBUG] [Thread-15432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:19:01.302 [DEBUG] [Thread-15432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:19:01.303 [DEBUG] [Thread-15432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:19:01.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:19:01.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:19:01.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:19:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:19:01.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:19:01.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:19:01.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:19:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:19:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.637908 -999.00  +25.20  29.83     21   +1.40 1 1 1 1 1   887    0 26.16 70.16 ----- 31.7 29.8 309.4 36.5 28.2 -29.2 28.4 -27.9 29.2 -27.4 29.4 -27.6
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.637908
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:19:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:18:26', tmtdew=28.97, humidity=14.52, cloud=0.0, wind=32.92, temperature=25.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:18:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:19:01.321 [DEBUG] [Thread-15432] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:19:01.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:19:01.406 [DEBUG] [Thread-15435] [transport.py] [_log()] starting thread (client mode): 0xb6b60370
2025-12-25T17:19:01.406 [DEBUG] [Thread-15435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:19:01.422 [DEBUG] [Thread-15435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:19:01.422 [INFO] [Thread-15435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:01.429 [DEBUG] [Thread-15435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] client lang: <none>
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] server lang: <none>
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] kex follows: False
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] Compression: none
2025-12-25T17:19:01.430 [DEBUG] [Thread-15435] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:19:01.488 [DEBUG] [Thread-15435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:19:01.488 [DEBUG] [Thread-15435] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:19:01.489 [DEBUG] [Thread-15435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:19:01.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:19:01.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:19:01.547 [DEBUG] [Thread-15435] [transport.py] [_log()] userauth is OK
2025-12-25T17:19:01.547 [DEBUG] [Thread-15435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:19:01.547 [DEBUG] [Thread-15435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:19:01.547 [DEBUG] [Thread-15435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:19:01.547 [DEBUG] [Thread-15435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:19:01.566 [INFO] [Thread-15435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:19:01.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:19:01.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:19:02.417 [DEBUG] [Thread-15435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:19:02.417 [DEBUG] [Thread-15435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:19:02.465 [DEBUG] [Thread-15435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:19:02.465 [DEBUG] [Thread-15435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:19:02.475 [DEBUG] [Thread-15435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:19:02.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:19:02.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-25T17:19:02.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-25T17:19:02.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:19:02.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:19:02.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:19:02.511 [DEBUG] [Thread-15435] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:19:06.849 [DEBUG] [Thread-15437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:19:15.824 [DEBUG] [Thread-15438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:19:21.901 [DEBUG] [Thread-15439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:19:32.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:19:32.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:19:32.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:19:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 18, 58), 28.28, 15.13, 0.0, 29.8, 25.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:19:33.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:18:58
2025-12-25T17:19:33.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:19:33.561 [DEBUG] [Thread-15440] [transport.py] [_log()] starting thread (client mode): 0xb6bb6200
2025-12-25T17:19:33.561 [DEBUG] [Thread-15440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:19:33.581 [DEBUG] [Thread-15440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:19:33.581 [INFO] [Thread-15440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:19:33.584 [DEBUG] [Thread-15440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:19:33.584 [DEBUG] [Thread-15440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] client lang: <none>
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] server lang: <none>
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] kex follows: False
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] Compression: none
2025-12-25T17:19:33.585 [DEBUG] [Thread-15440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:19:33.600 [DEBUG] [Thread-15440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:19:33.601 [DEBUG] [Thread-15440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:19:33.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:19:33.601 [DEBUG] [Thread-15440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:19:33.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:19:33.603 [DEBUG] [Thread-15440] [transport.py] [_log()] userauth is OK
2025-12-25T17:19:33.603 [DEBUG] [Thread-15440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:19:33.603 [DEBUG] [Thread-15440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:19:33.604 [DEBUG] [Thread-15440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:19:33.604 [DEBUG] [Thread-15440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:19:33.621 [INFO] [Thread-15440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:19:33.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:19:34.277 [DEBUG] [Thread-15440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:19:34.277 [DEBUG] [Thread-15440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:19:34.278 [DEBUG] [Thread-15440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:19:34.318 [DEBUG] [Thread-15440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:19:34.318 [DEBUG] [Thread-15440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:19:34.321 [DEBUG] [Thread-15440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:19:34.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:19:34.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:19:34.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:19:34.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:19:34.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:19:34.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:19:34.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:19:34.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:19:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:19:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.638255 -999.00  +25.20  25.88     21   +1.50 1 1 1 1 1   887    0 26.29 66.41 ----- 37.5 25.9 307.4 40.0 28.4 -27.8 28.4 -27.5 29.3 -25.0 29.5 -27.2
2025-12-25T17:19:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:19:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:19:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.638255
2025-12-25T17:19:34.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:19:34.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:18:58', tmtdew=28.28, humidity=15.13, cloud=0.0, wind=29.8, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:19:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:19:34.349 [DEBUG] [Thread-15440] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:19:34.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:19:34.441 [DEBUG] [Thread-15443] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e20
2025-12-25T17:19:34.441 [DEBUG] [Thread-15443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:19:34.456 [DEBUG] [Thread-15443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:19:34.457 [INFO] [Thread-15443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:34.464 [DEBUG] [Thread-15443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] client lang: <none>
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] server lang: <none>
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] kex follows: False
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] Compression: none
2025-12-25T17:19:34.465 [DEBUG] [Thread-15443] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:19:34.523 [DEBUG] [Thread-15443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:19:34.524 [DEBUG] [Thread-15443] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:19:34.524 [DEBUG] [Thread-15443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:19:34.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:19:34.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:19:34.579 [DEBUG] [Thread-15443] [transport.py] [_log()] userauth is OK
2025-12-25T17:19:34.579 [DEBUG] [Thread-15443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:19:34.579 [DEBUG] [Thread-15443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:19:34.580 [DEBUG] [Thread-15443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:19:34.580 [DEBUG] [Thread-15443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:19:34.599 [INFO] [Thread-15443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:19:34.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-25T17:19:34.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:19:35.511 [DEBUG] [Thread-15443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:19:35.511 [DEBUG] [Thread-15443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:19:35.560 [DEBUG] [Thread-15443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:19:35.560 [DEBUG] [Thread-15443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:19:35.569 [DEBUG] [Thread-15443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:19:35.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:19: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')
2025-12-25T17:19:35.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:19:35.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:19:35.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:19:35.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:19:35.602 [DEBUG] [Thread-15443] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:19:36.934 [DEBUG] [Thread-15445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:19:51.993 [DEBUG] [Thread-15446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:01.025 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:01.027 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:05.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:20:05.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:20: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-25T17:20:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 19, 30), 28.29, 15.1, 0.0, 35.85, 25.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:20:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:19:30
2025-12-25T17:20:06.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:20:06.627 [DEBUG] [Thread-15447] [transport.py] [_log()] starting thread (client mode): 0xb6bc3040
2025-12-25T17:20:06.627 [DEBUG] [Thread-15447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:20:06.647 [DEBUG] [Thread-15447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:20:06.647 [INFO] [Thread-15447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] client lang: <none>
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] server lang: <none>
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] kex follows: False
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] Compression: none
2025-12-25T17:20:06.650 [DEBUG] [Thread-15447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:20:06.658 [DEBUG] [Thread-15447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:20:06.658 [DEBUG] [Thread-15447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:20:06.658 [DEBUG] [Thread-15447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:20:06.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:20:06.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:20:06.659 [DEBUG] [Thread-15447] [transport.py] [_log()] userauth is OK
2025-12-25T17:20:06.659 [DEBUG] [Thread-15447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:20:06.659 [DEBUG] [Thread-15447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:20:06.659 [DEBUG] [Thread-15447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:20:06.659 [DEBUG] [Thread-15447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:20:06.685 [INFO] [Thread-15447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:20:06.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:20:07.026 [DEBUG] [Thread-15449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:07.683 [DEBUG] [Thread-15447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:20:07.683 [DEBUG] [Thread-15447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:20:07.683 [DEBUG] [Thread-15447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:20:07.724 [DEBUG] [Thread-15447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:20:07.724 [DEBUG] [Thread-15447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:20:07.727 [DEBUG] [Thread-15447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:20:07.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:20:07.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:20:07.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:20:07.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:20:07.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:20:07.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:20:07.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.638602 -999.00  +25.40  39.05     21   +1.50 1 1 2 1 1   887    0 26.73 70.29 ----- 33.7 39.0 310.6 48.3 28.3 -28.8 28.5 -29.1 29.4 -26.0 29.6 -26.7
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.638602
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:20:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:19:30', tmtdew=28.29, humidity=15.1, cloud=0.0, wind=35.85, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:19:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:20:07.757 [DEBUG] [Thread-15447] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:20:07.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:20:07.839 [DEBUG] [Thread-15451] [transport.py] [_log()] starting thread (client mode): 0xb6bc29e0
2025-12-25T17:20:07.839 [DEBUG] [Thread-15451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:20:07.854 [DEBUG] [Thread-15451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:20:07.854 [INFO] [Thread-15451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:20:07.861 [DEBUG] [Thread-15451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] client lang: <none>
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] server lang: <none>
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] kex follows: False
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] Compression: none
2025-12-25T17:20:07.862 [DEBUG] [Thread-15451] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:20:07.917 [DEBUG] [Thread-15451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:20:07.917 [DEBUG] [Thread-15451] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:20:07.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:20:07.917 [DEBUG] [Thread-15451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:20:07.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:20:07.974 [DEBUG] [Thread-15451] [transport.py] [_log()] userauth is OK
2025-12-25T17:20:07.974 [DEBUG] [Thread-15451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:20:07.974 [DEBUG] [Thread-15451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:20:07.974 [DEBUG] [Thread-15451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:20:07.974 [DEBUG] [Thread-15451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:20:07.992 [INFO] [Thread-15451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:20:07.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:20:07.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:20:08.823 [DEBUG] [Thread-15451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:20:08.824 [DEBUG] [Thread-15451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:20:08.871 [DEBUG] [Thread-15451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:20:08.871 [DEBUG] [Thread-15451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:20:08.880 [DEBUG] [Thread-15451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:20:08.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:20:08.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-25T17:20:08.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-25T17:20:08.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:20:08.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:20:08.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:20:08.911 [DEBUG] [Thread-15451] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:20:15.867 [DEBUG] [Thread-15453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:22.059 [DEBUG] [Thread-15454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:37.109 [DEBUG] [Thread-15455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:20:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:20:38.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:20:38.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-25T17:20:39.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 20, 35), 28.07, 15.61, 0.0, 38.16, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:20:39.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:20:35
2025-12-25T17:20:39.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:20:39.910 [DEBUG] [Thread-15456] [transport.py] [_log()] starting thread (client mode): 0xb6b23a90
2025-12-25T17:20:39.911 [DEBUG] [Thread-15456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:20:39.931 [DEBUG] [Thread-15456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:20:39.932 [INFO] [Thread-15456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] client lang: <none>
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] server lang: <none>
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] kex follows: False
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] Compression: none
2025-12-25T17:20:39.935 [DEBUG] [Thread-15456] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:20:39.954 [DEBUG] [Thread-15456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:20:39.955 [DEBUG] [Thread-15456] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:20:39.955 [DEBUG] [Thread-15456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:20:39.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:20:39.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:20:39.957 [DEBUG] [Thread-15456] [transport.py] [_log()] userauth is OK
2025-12-25T17:20:39.958 [DEBUG] [Thread-15456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:20:39.958 [DEBUG] [Thread-15456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:20:39.958 [DEBUG] [Thread-15456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:20:39.958 [DEBUG] [Thread-15456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:20:39.983 [INFO] [Thread-15456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:20:39.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:20:40.626 [DEBUG] [Thread-15456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:20:40.626 [DEBUG] [Thread-15456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:20:40.627 [DEBUG] [Thread-15456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:20:40.667 [DEBUG] [Thread-15456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:20:40.667 [DEBUG] [Thread-15456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:20:40.670 [DEBUG] [Thread-15456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:20:40.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:20:40.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:20:40.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:20:40.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:20:40.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:20:40.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:20:40.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:20:40.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:20:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:20:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.638949 -999.00  +25.20  36.28     21   +1.50 1 1 2 1 1   887    0 26.65 72.47 ----- 30.4 36.3 306.2 46.9 28.3 -28.7 28.4 -28.7 29.2 -28.5 29.5 -27.1
2025-12-25T17:20:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:20:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:20:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.638949
2025-12-25T17:20:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:20:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:20:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:20:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:20:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:20:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:20:35', tmtdew=28.07, humidity=15.61, cloud=0.0, wind=38.16, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:20:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:20:40.697 [DEBUG] [Thread-15456] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:20:40.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-25T17:20:40.790 [DEBUG] [Thread-15459] [transport.py] [_log()] starting thread (client mode): 0xb6bb6050
2025-12-25T17:20:40.790 [DEBUG] [Thread-15459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:20:40.805 [DEBUG] [Thread-15459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:20:40.805 [INFO] [Thread-15459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:20:40.813 [DEBUG] [Thread-15459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] client lang: <none>
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] server lang: <none>
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] kex follows: False
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] Compression: none
2025-12-25T17:20:40.814 [DEBUG] [Thread-15459] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:20:40.871 [DEBUG] [Thread-15459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:20:40.872 [DEBUG] [Thread-15459] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:20:40.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:20:40.873 [DEBUG] [Thread-15459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:20:40.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:20:40.926 [DEBUG] [Thread-15459] [transport.py] [_log()] userauth is OK
2025-12-25T17:20:40.927 [DEBUG] [Thread-15459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:20:40.927 [DEBUG] [Thread-15459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:20:40.927 [DEBUG] [Thread-15459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:20:40.927 [DEBUG] [Thread-15459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:20:40.946 [INFO] [Thread-15459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:20:40.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-25T17:20:40.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:20:41.775 [DEBUG] [Thread-15459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:20:41.775 [DEBUG] [Thread-15459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:20:41.822 [DEBUG] [Thread-15459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:20:41.822 [DEBUG] [Thread-15459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:20:41.831 [DEBUG] [Thread-15459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:20:41.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:20:41.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')
2025-12-25T17:20:41.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-25T17:20:41.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:20:41.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:20:41.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:20:41.864 [DEBUG] [Thread-15459] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:20:52.134 [DEBUG] [Thread-15461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:01.174 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:01.175 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:07.187 [DEBUG] [Thread-15462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:21:11.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:21:11.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-25T17:21:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 21, 7), 27.89, 15.83, 0.0, 36.65, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:21:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:21:07
2025-12-25T17:21:12.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:21:12.878 [DEBUG] [Thread-15463] [transport.py] [_log()] starting thread (client mode): 0xb6b62c50
2025-12-25T17:21:12.878 [DEBUG] [Thread-15463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:21:12.890 [DEBUG] [Thread-15463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:21:12.890 [INFO] [Thread-15463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:21:12.893 [DEBUG] [Thread-15463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:21:12.893 [DEBUG] [Thread-15463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] client lang: <none>
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] server lang: <none>
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] kex follows: False
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] Compression: none
2025-12-25T17:21:12.894 [DEBUG] [Thread-15463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:21:12.911 [DEBUG] [Thread-15463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:21:12.911 [DEBUG] [Thread-15463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:21:12.912 [DEBUG] [Thread-15463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:21:12.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:21:12.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:21:12.913 [DEBUG] [Thread-15463] [transport.py] [_log()] userauth is OK
2025-12-25T17:21:12.914 [DEBUG] [Thread-15463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:21:12.914 [DEBUG] [Thread-15463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:21:12.914 [DEBUG] [Thread-15463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:21:12.914 [DEBUG] [Thread-15463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:21:12.951 [INFO] [Thread-15463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:21:12.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:21:13.746 [DEBUG] [Thread-15463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:21:13.746 [DEBUG] [Thread-15463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:21:13.746 [DEBUG] [Thread-15463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:21:13.787 [DEBUG] [Thread-15463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:21:13.787 [DEBUG] [Thread-15463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:21:13.791 [DEBUG] [Thread-15463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:21:13.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:21:13.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:21:13.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:21:13.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:21:13.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:21:13.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:21:13.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:21:13.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:21:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:21:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.639297 -999.00  +25.20  30.82     21   +1.50 1 1 2 1 1   887    0 26.20 66.27 ----- 29.9 30.8 311.8 44.7 28.2 -28.7 28.4 -28.7 29.2 -28.0 29.5 -26.9
2025-12-25T17:21:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:21:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:21:13.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.639297
2025-12-25T17:21:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:21:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:21:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:21:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:21:13.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:21:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:21:07', tmtdew=27.89, humidity=15.83, cloud=0.0, wind=36.65, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:20:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:21:13.817 [DEBUG] [Thread-15463] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:21:13.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-25T17:21:13.915 [DEBUG] [Thread-15466] [transport.py] [_log()] starting thread (client mode): 0xb6bb7c10
2025-12-25T17:21:13.915 [DEBUG] [Thread-15466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:21:13.933 [DEBUG] [Thread-15466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:21:13.934 [INFO] [Thread-15466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:21:13.945 [DEBUG] [Thread-15466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:21:13.945 [DEBUG] [Thread-15466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:21:13.945 [DEBUG] [Thread-15466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:21:13.945 [DEBUG] [Thread-15466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:13.945 [DEBUG] [Thread-15466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] client lang: <none>
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] server lang: <none>
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] kex follows: False
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] Compression: none
2025-12-25T17:21:13.946 [DEBUG] [Thread-15466] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:21:13.998 [DEBUG] [Thread-15466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:21:13.999 [DEBUG] [Thread-15466] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:21:13.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:21:14.000 [DEBUG] [Thread-15466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:21:14.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:21:14.055 [DEBUG] [Thread-15466] [transport.py] [_log()] userauth is OK
2025-12-25T17:21:14.055 [DEBUG] [Thread-15466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:21:14.055 [DEBUG] [Thread-15466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:21:14.056 [DEBUG] [Thread-15466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:21:14.056 [DEBUG] [Thread-15466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:21:14.074 [INFO] [Thread-15466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:21:14.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-25T17:21:14.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:21:14.952 [DEBUG] [Thread-15466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:21:14.952 [DEBUG] [Thread-15466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:21:15.000 [DEBUG] [Thread-15466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:21:15.000 [DEBUG] [Thread-15466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:21:15.009 [DEBUG] [Thread-15466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:21:15.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:21:15.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-25T17:21:15.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:21:15.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:21:15.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:21:15.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:21:15.046 [DEBUG] [Thread-15466] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:21:15.924 [DEBUG] [Thread-15468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:22.221 [DEBUG] [Thread-15469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:37.267 [DEBUG] [Thread-15470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:21:45.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:21:45.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:21:45.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-25T17:21:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 21, 39), 27.48, 15.84, 0.0, 33.05, 25.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:21:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:21:39
2025-12-25T17:21:45.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:21:46.073 [DEBUG] [Thread-15471] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-25T17:21:46.073 [DEBUG] [Thread-15471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:21:46.095 [DEBUG] [Thread-15471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:21:46.095 [INFO] [Thread-15471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:46.098 [DEBUG] [Thread-15471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] client lang: <none>
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] server lang: <none>
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] kex follows: False
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] Compression: none
2025-12-25T17:21:46.099 [DEBUG] [Thread-15471] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:21:46.117 [DEBUG] [Thread-15471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:21:46.118 [DEBUG] [Thread-15471] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:21:46.118 [DEBUG] [Thread-15471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:21:46.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:21:46.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:21:46.120 [DEBUG] [Thread-15471] [transport.py] [_log()] userauth is OK
2025-12-25T17:21:46.120 [DEBUG] [Thread-15471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:21:46.121 [DEBUG] [Thread-15471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:21:46.121 [DEBUG] [Thread-15471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:21:46.121 [DEBUG] [Thread-15471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:21:46.143 [INFO] [Thread-15471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:21:46.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:21:46.786 [DEBUG] [Thread-15471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:21:46.786 [DEBUG] [Thread-15471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:21:46.786 [DEBUG] [Thread-15471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:21:46.827 [DEBUG] [Thread-15471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:21:46.827 [DEBUG] [Thread-15471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:21:46.831 [DEBUG] [Thread-15471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:21:46.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:21:46.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:21:46.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:21:46.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:21:46.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:21:46.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:21:46.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:21:46.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:21:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:21:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.639644 -999.00  +25.20  37.66     21   +1.50 1 1 2 1 1   887    0 25.93 54.26 ----- 39.5 37.7 297.0 40.7 28.1 -29.9 28.4 -28.0 29.3 -27.6 29.4 -27.3
2025-12-25T17:21:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:21:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:21:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.639644
2025-12-25T17:21:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:21:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:21:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:21:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:21:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:21:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:21:39', tmtdew=27.48, humidity=15.84, cloud=0.0, wind=33.05, temperature=25.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:21:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:21:46.860 [DEBUG] [Thread-15471] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:21:46.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-25T17:21:46.953 [DEBUG] [Thread-15474] [transport.py] [_log()] starting thread (client mode): 0xb95b1c90
2025-12-25T17:21:46.953 [DEBUG] [Thread-15474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:21:46.968 [DEBUG] [Thread-15474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:21:46.968 [INFO] [Thread-15474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:21:46.975 [DEBUG] [Thread-15474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] client lang: <none>
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] server lang: <none>
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] kex follows: False
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:21:46.976 [DEBUG] [Thread-15474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:21:46.977 [DEBUG] [Thread-15474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:21:46.977 [DEBUG] [Thread-15474] [transport.py] [_log()] Compression: none
2025-12-25T17:21:46.977 [DEBUG] [Thread-15474] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:21:47.035 [DEBUG] [Thread-15474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:21:47.036 [DEBUG] [Thread-15474] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:21:47.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:21:47.037 [DEBUG] [Thread-15474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:21:47.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:21:47.091 [DEBUG] [Thread-15474] [transport.py] [_log()] userauth is OK
2025-12-25T17:21:47.091 [DEBUG] [Thread-15474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:21:47.091 [DEBUG] [Thread-15474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:21:47.091 [DEBUG] [Thread-15474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:21:47.092 [DEBUG] [Thread-15474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:21:47.110 [INFO] [Thread-15474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:21:47.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:21:47.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:21:47.941 [DEBUG] [Thread-15474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:21:47.941 [DEBUG] [Thread-15474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:21:47.988 [DEBUG] [Thread-15474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:21:47.988 [DEBUG] [Thread-15474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:21:47.997 [DEBUG] [Thread-15474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:21:48.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:21:48.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-25T17:21:48.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-25T17:21:48.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:21:48.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:21:48.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:21:48.028 [DEBUG] [Thread-15474] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:21:52.303 [DEBUG] [Thread-15476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:01.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:01.353 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:07.350 [DEBUG] [Thread-15477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:15.962 [DEBUG] [Thread-15478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:18.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:22:18.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:22:18.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-25T17:22:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 22, 11), 27.63, 15.71, 0.0, 34.79, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:22:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:22:11
2025-12-25T17:22:18.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:22:19.028 [DEBUG] [Thread-15479] [transport.py] [_log()] starting thread (client mode): 0xb6b62a40
2025-12-25T17:22:19.028 [DEBUG] [Thread-15479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:22:19.048 [DEBUG] [Thread-15479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:22:19.049 [INFO] [Thread-15479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:22:19.052 [DEBUG] [Thread-15479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:22:19.052 [DEBUG] [Thread-15479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:22:19.052 [DEBUG] [Thread-15479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:22:19.052 [DEBUG] [Thread-15479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:19.052 [DEBUG] [Thread-15479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:19.052 [DEBUG] [Thread-15479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] client lang: <none>
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] server lang: <none>
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] kex follows: False
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:22:19.053 [DEBUG] [Thread-15479] [transport.py] [_log()] Compression: none
2025-12-25T17:22:19.054 [DEBUG] [Thread-15479] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:22:19.072 [DEBUG] [Thread-15479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:22:19.073 [DEBUG] [Thread-15479] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:22:19.074 [DEBUG] [Thread-15479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:22:19.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:22:19.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:22:19.076 [DEBUG] [Thread-15479] [transport.py] [_log()] userauth is OK
2025-12-25T17:22:19.077 [DEBUG] [Thread-15479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:22:19.077 [DEBUG] [Thread-15479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:22:19.077 [DEBUG] [Thread-15479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:22:19.077 [DEBUG] [Thread-15479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:22:19.097 [INFO] [Thread-15479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:22:19.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:22:19.880 [DEBUG] [Thread-15479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:22:19.880 [DEBUG] [Thread-15479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:22:19.881 [DEBUG] [Thread-15479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:22:19.921 [DEBUG] [Thread-15479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:22:19.921 [DEBUG] [Thread-15479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:22:19.924 [DEBUG] [Thread-15479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:22:19.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:22:19.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:22:19.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:22:19.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:22:19.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:22:19.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:22:19.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:22:19.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:22:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:22:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.639991 -999.00  +24.60  30.65     21   +1.30 1 1 2 1 1   887    0 26.60 52.19 ----- 33.0 30.6 294.8 46.7 28.1 -29.1 28.3 -28.6 29.1 -27.6 29.4 -27.8
2025-12-25T17:22:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:22:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:22:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.639991
2025-12-25T17:22:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:22:19.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:22:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:22:19.954 [DEBUG] [Thread-15479] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:22:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:22:19.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:22:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:22:11', tmtdew=27.63, humidity=15.71, cloud=0.0, wind=34.79, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:21:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:22:20.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-25T17:22:20.047 [DEBUG] [Thread-15482] [transport.py] [_log()] starting thread (client mode): 0xb6bb41c0
2025-12-25T17:22:20.048 [DEBUG] [Thread-15482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:22:20.062 [DEBUG] [Thread-15482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:22:20.062 [INFO] [Thread-15482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] client lang: <none>
2025-12-25T17:22:20.070 [DEBUG] [Thread-15482] [transport.py] [_log()] server lang: <none>
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] kex follows: False
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] Compression: none
2025-12-25T17:22:20.071 [DEBUG] [Thread-15482] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:22:20.127 [DEBUG] [Thread-15482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:22:20.127 [DEBUG] [Thread-15482] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:22:20.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:22:20.128 [DEBUG] [Thread-15482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:22:20.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:22:20.191 [DEBUG] [Thread-15482] [transport.py] [_log()] userauth is OK
2025-12-25T17:22:20.191 [DEBUG] [Thread-15482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:22:20.191 [DEBUG] [Thread-15482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:22:20.191 [DEBUG] [Thread-15482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:22:20.192 [DEBUG] [Thread-15482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:22:20.213 [INFO] [Thread-15482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:22:20.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-25T17:22:20.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:22:21.032 [DEBUG] [Thread-15482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:22:21.032 [DEBUG] [Thread-15482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:22:21.083 [DEBUG] [Thread-15482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:22:21.083 [DEBUG] [Thread-15482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:22:21.092 [DEBUG] [Thread-15482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:22:21.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:22:21.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-25T17:22:21.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:22:21.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:22:21.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:22:21.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:22:21.126 [DEBUG] [Thread-15482] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:22:22.381 [DEBUG] [Thread-15484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:37.435 [DEBUG] [Thread-15485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:51.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:22:51.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:22:51.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:22:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 22, 43), 28.05, 15.5, 0.0, 39.28, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:22:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:22:43
2025-12-25T17:22:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:22:52.128 [DEBUG] [Thread-15486] [transport.py] [_log()] starting thread (client mode): 0xb6b4f460
2025-12-25T17:22:52.128 [DEBUG] [Thread-15486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:22:52.147 [DEBUG] [Thread-15486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:22:52.147 [INFO] [Thread-15486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:22:52.150 [DEBUG] [Thread-15486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:22:52.150 [DEBUG] [Thread-15486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] client lang: <none>
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] server lang: <none>
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] kex follows: False
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] Compression: none
2025-12-25T17:22:52.151 [DEBUG] [Thread-15486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:22:52.159 [DEBUG] [Thread-15486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:22:52.160 [DEBUG] [Thread-15486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:22:52.160 [DEBUG] [Thread-15486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:22:52.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:22:52.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:22:52.161 [DEBUG] [Thread-15486] [transport.py] [_log()] userauth is OK
2025-12-25T17:22:52.162 [DEBUG] [Thread-15486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:22:52.162 [DEBUG] [Thread-15486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:22:52.162 [DEBUG] [Thread-15486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:22:52.162 [DEBUG] [Thread-15486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:22:52.185 [INFO] [Thread-15486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:22:52.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:22:52.467 [DEBUG] [Thread-15488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:22:52.829 [DEBUG] [Thread-15486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:22:52.829 [DEBUG] [Thread-15486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:22:52.830 [DEBUG] [Thread-15486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:22:52.871 [DEBUG] [Thread-15486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:22:52.871 [DEBUG] [Thread-15486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:22:52.874 [DEBUG] [Thread-15486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:22:52.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:22:52.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:22:52.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:22:52.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:22:52.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:22:52.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:22:52.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:22:52.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:22:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:22:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.640339 -999.00  +24.70  34.55     21   +1.50 1 1 2 1 1   887    0 25.45 42.19 ----- 38.2 34.5 297.0 38.7 28.1 -28.4 28.3 -27.9 29.1 -26.9 29.3 -26.9
2025-12-25T17:22:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:22:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:22:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.640339
2025-12-25T17:22:52.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:22:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:22:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:22:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:22:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:22:52.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:22:43', tmtdew=28.05, humidity=15.5, cloud=0.0, wind=39.28, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:22:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:22:52.896 [DEBUG] [Thread-15486] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:22:52.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:22:52.991 [DEBUG] [Thread-15490] [transport.py] [_log()] starting thread (client mode): 0xb6b4fbe0
2025-12-25T17:22:52.991 [DEBUG] [Thread-15490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:22:53.005 [DEBUG] [Thread-15490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:22:53.005 [INFO] [Thread-15490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] client lang: <none>
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] server lang: <none>
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] kex follows: False
2025-12-25T17:22:53.013 [DEBUG] [Thread-15490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:22:53.014 [DEBUG] [Thread-15490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:22:53.014 [DEBUG] [Thread-15490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:22:53.014 [DEBUG] [Thread-15490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:22:53.014 [DEBUG] [Thread-15490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:22:53.014 [DEBUG] [Thread-15490] [transport.py] [_log()] Compression: none
2025-12-25T17:22:53.014 [DEBUG] [Thread-15490] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:22:53.070 [DEBUG] [Thread-15490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:22:53.071 [DEBUG] [Thread-15490] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:22:53.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:22:53.072 [DEBUG] [Thread-15490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:22:53.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:22:53.126 [DEBUG] [Thread-15490] [transport.py] [_log()] userauth is OK
2025-12-25T17:22:53.126 [DEBUG] [Thread-15490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:22:53.126 [DEBUG] [Thread-15490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:22:53.127 [DEBUG] [Thread-15490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:22:53.127 [DEBUG] [Thread-15490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:22:53.147 [INFO] [Thread-15490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:22:53.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-25T17:22:53.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:22:53.955 [DEBUG] [Thread-15490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:22:53.956 [DEBUG] [Thread-15490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:22:54.003 [DEBUG] [Thread-15490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:22:54.004 [DEBUG] [Thread-15490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:22:54.012 [DEBUG] [Thread-15490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:22:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:22:54.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-25T17:22:54.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-25T17:22:54.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:22:54.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:22:54.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:22:54.046 [DEBUG] [Thread-15490] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:23:01.493 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:01.494 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:07.502 [DEBUG] [Thread-15492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:16.011 [DEBUG] [Thread-15493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:22.549 [DEBUG] [Thread-15494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:23:24.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:23: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-25T17:23:24.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 23, 15), 28.85, 14.7, 0.0, 46.44, 25.69, 0, 0, 0, 2, 1, 0),)
2025-12-25T17:23:24.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:23:15
2025-12-25T17:23:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:23:25.082 [DEBUG] [Thread-15495] [transport.py] [_log()] starting thread (client mode): 0xb6bc2c50
2025-12-25T17:23:25.082 [DEBUG] [Thread-15495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:23:25.102 [DEBUG] [Thread-15495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:23:25.102 [INFO] [Thread-15495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] client lang: <none>
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] server lang: <none>
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] kex follows: False
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] Compression: none
2025-12-25T17:23:25.103 [DEBUG] [Thread-15495] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:23:25.113 [DEBUG] [Thread-15495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:23:25.113 [DEBUG] [Thread-15495] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:23:25.114 [DEBUG] [Thread-15495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:23:25.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:23:25.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:23:25.115 [DEBUG] [Thread-15495] [transport.py] [_log()] userauth is OK
2025-12-25T17:23:25.115 [DEBUG] [Thread-15495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:23:25.115 [DEBUG] [Thread-15495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:23:25.115 [DEBUG] [Thread-15495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:23:25.115 [DEBUG] [Thread-15495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:23:25.128 [INFO] [Thread-15495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:23:25.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:23:25.961 [DEBUG] [Thread-15495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:23:25.962 [DEBUG] [Thread-15495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:23:25.962 [DEBUG] [Thread-15495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:23:26.003 [DEBUG] [Thread-15495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:23:26.004 [DEBUG] [Thread-15495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:23:26.007 [DEBUG] [Thread-15495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:23:26.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:23:26.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:23:26.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:23:26.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:23:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:23:26.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:23:26.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:23:26.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:23:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:23:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.640686 -999.00  +24.70  45.06     21   +1.00 1 1 2 1 1   887    0 25.03 31.27 ----- 42.3 45.1 294.4 50.7 28.0 -28.7 28.2 -28.6 28.9 -29.0 29.3 -26.7
2025-12-25T17:23:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:23:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:23:26.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.640686
2025-12-25T17:23:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:23:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:23:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:23:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:23:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:23:15', tmtdew=28.85, humidity=14.7, cloud=0.0, wind=46.44, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:22:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:23:26.033 [DEBUG] [Thread-15495] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:23:26.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-25T17:23:26.129 [DEBUG] [Thread-15498] [transport.py] [_log()] starting thread (client mode): 0xb6b21480
2025-12-25T17:23:26.129 [DEBUG] [Thread-15498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:23:26.143 [DEBUG] [Thread-15498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:23:26.143 [INFO] [Thread-15498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:23:26.151 [DEBUG] [Thread-15498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:23:26.151 [DEBUG] [Thread-15498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:23:26.151 [DEBUG] [Thread-15498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:23:26.151 [DEBUG] [Thread-15498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:26.151 [DEBUG] [Thread-15498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] client lang: <none>
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] server lang: <none>
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] kex follows: False
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:23:26.152 [DEBUG] [Thread-15498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:23:26.153 [DEBUG] [Thread-15498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:23:26.153 [DEBUG] [Thread-15498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:23:26.153 [DEBUG] [Thread-15498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:23:26.153 [DEBUG] [Thread-15498] [transport.py] [_log()] Compression: none
2025-12-25T17:23:26.153 [DEBUG] [Thread-15498] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:23:26.211 [DEBUG] [Thread-15498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:23:26.212 [DEBUG] [Thread-15498] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:23:26.213 [DEBUG] [Thread-15498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:23:26.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:23:26.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:23:26.271 [DEBUG] [Thread-15498] [transport.py] [_log()] userauth is OK
2025-12-25T17:23:26.272 [DEBUG] [Thread-15498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:23:26.272 [DEBUG] [Thread-15498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:23:26.272 [DEBUG] [Thread-15498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:23:26.272 [DEBUG] [Thread-15498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:23:26.294 [INFO] [Thread-15498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:23:26.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-25T17:23:26.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:23:27.114 [DEBUG] [Thread-15498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:23:27.115 [DEBUG] [Thread-15498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:23:27.162 [DEBUG] [Thread-15498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:23:27.162 [DEBUG] [Thread-15498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:23:27.171 [DEBUG] [Thread-15498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:23:27.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:23:27.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:23:27.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-25T17:23:27.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:23:27.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:23:27.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:23:27.207 [DEBUG] [Thread-15498] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:23:37.587 [DEBUG] [Thread-15500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:52.637 [DEBUG] [Thread-15501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:23:57.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:23:57.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:23:57.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-25T17:23:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 23, 47), 30.23, 13.0, 0.0, 42.89, 25.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:23:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:23:47
2025-12-25T17:23:58.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:23:58.236 [DEBUG] [Thread-15502] [transport.py] [_log()] starting thread (client mode): 0xb6b23580
2025-12-25T17:23:58.236 [DEBUG] [Thread-15502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:23:58.256 [DEBUG] [Thread-15502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:23:58.256 [INFO] [Thread-15502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:23:58.259 [DEBUG] [Thread-15502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:23:58.259 [DEBUG] [Thread-15502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:23:58.259 [DEBUG] [Thread-15502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] client lang: <none>
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] server lang: <none>
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] kex follows: False
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] Compression: none
2025-12-25T17:23:58.260 [DEBUG] [Thread-15502] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:23:58.275 [DEBUG] [Thread-15502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:23:58.275 [DEBUG] [Thread-15502] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:23:58.275 [DEBUG] [Thread-15502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:23:58.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:23:58.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:23:58.276 [DEBUG] [Thread-15502] [transport.py] [_log()] userauth is OK
2025-12-25T17:23:58.276 [DEBUG] [Thread-15502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:23:58.276 [DEBUG] [Thread-15502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:23:58.276 [DEBUG] [Thread-15502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:23:58.276 [DEBUG] [Thread-15502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:23:58.285 [INFO] [Thread-15502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:23:58.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:23:58.926 [DEBUG] [Thread-15502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:23:58.926 [DEBUG] [Thread-15502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:23:58.926 [DEBUG] [Thread-15502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:23:58.967 [DEBUG] [Thread-15502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:23:58.967 [DEBUG] [Thread-15502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:23:58.969 [DEBUG] [Thread-15502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:23:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:23:58.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:23:58.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:23:58.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:23:58.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:23:58.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:23:58.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.641033 -999.00  +25.20  36.36     18   -0.00 1 1 2 1 1   887    0 25.36 32.58 ----- 37.1 36.4 308.6 58.2 28.1 -28.5 28.2 -28.1 28.9 -25.2 29.1 -26.9
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.641033
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:23:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:23:47', tmtdew=30.23, humidity=13.0, cloud=0.0, wind=42.89, temperature=25.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:23:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:23:58.988 [DEBUG] [Thread-15502] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:23:59.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-25T17:23:59.073 [DEBUG] [Thread-15505] [transport.py] [_log()] starting thread (client mode): 0xb6bb6800
2025-12-25T17:23:59.073 [DEBUG] [Thread-15505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:23:59.088 [DEBUG] [Thread-15505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:23:59.088 [INFO] [Thread-15505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] client lang: <none>
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] server lang: <none>
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] kex follows: False
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] Compression: none
2025-12-25T17:23:59.095 [DEBUG] [Thread-15505] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:23:59.153 [DEBUG] [Thread-15505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:23:59.153 [DEBUG] [Thread-15505] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:23:59.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:23:59.153 [DEBUG] [Thread-15505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:23:59.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:23:59.210 [DEBUG] [Thread-15505] [transport.py] [_log()] userauth is OK
2025-12-25T17:23:59.210 [DEBUG] [Thread-15505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:23:59.210 [DEBUG] [Thread-15505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:23:59.210 [DEBUG] [Thread-15505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:23:59.210 [DEBUG] [Thread-15505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:23:59.224 [INFO] [Thread-15505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:23:59.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-25T17:23:59.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:24:00.054 [DEBUG] [Thread-15505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:24:00.054 [DEBUG] [Thread-15505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:24:00.102 [DEBUG] [Thread-15505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:24:00.102 [DEBUG] [Thread-15505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:24:00.110 [DEBUG] [Thread-15505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:24:00.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:24:00.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-25T17:24:00.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-25T17:24:00.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:24:00.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:24:00.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:24:00.142 [DEBUG] [Thread-15505] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:24:01.666 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:24:01.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:24:07.671 [DEBUG] [Thread-15507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:24:16.049 [DEBUG] [Thread-15508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:24:22.725 [DEBUG] [Thread-15509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:24:30.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:24:30.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:24:30.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-25T17:24:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 24, 19), 30.11, 13.12, 0.0, 42.84, 25.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:24:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:24:19
2025-12-25T17:24:31.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:24:31.148 [DEBUG] [Thread-15510] [transport.py] [_log()] starting thread (client mode): 0xb6b23190
2025-12-25T17:24:31.148 [DEBUG] [Thread-15510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:24:31.168 [DEBUG] [Thread-15510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:24:31.168 [INFO] [Thread-15510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] client lang: <none>
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] server lang: <none>
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] kex follows: False
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] Compression: none
2025-12-25T17:24:31.170 [DEBUG] [Thread-15510] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:24:31.183 [DEBUG] [Thread-15510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:24:31.183 [DEBUG] [Thread-15510] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:24:31.184 [DEBUG] [Thread-15510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:24:31.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:24:31.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:24:31.186 [DEBUG] [Thread-15510] [transport.py] [_log()] userauth is OK
2025-12-25T17:24:31.186 [DEBUG] [Thread-15510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:24:31.186 [DEBUG] [Thread-15510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:24:31.186 [DEBUG] [Thread-15510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:24:31.186 [DEBUG] [Thread-15510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:24:31.203 [INFO] [Thread-15510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:24:31.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:24:32.018 [DEBUG] [Thread-15510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:24:32.018 [DEBUG] [Thread-15510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:24:32.019 [DEBUG] [Thread-15510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:24:32.059 [DEBUG] [Thread-15510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:24:32.059 [DEBUG] [Thread-15510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:24:32.063 [DEBUG] [Thread-15510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:24:32.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:24:32.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:24:32.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:24:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:24:32.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:24:32.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:24:32.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:24:32.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:24:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:24:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.641727 -999.00  +25.70  29.33     19   +0.70 1 1 1 1 1   887    0 25.46 42.69 ----- 35.4 29.3 309.2 39.4 28.1 -28.3 28.3 -27.6 29.0 -25.9 29.2 -27.4
2025-12-25T17:24:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:24:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:24:32.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.641727
2025-12-25T17:24:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:24:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:24:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:24:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:24:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:24:32.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:24:19', tmtdew=30.11, humidity=13.12, cloud=0.0, wind=42.84, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:24:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:24:32.094 [DEBUG] [Thread-15510] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:24:32.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-25T17:24:32.191 [DEBUG] [Thread-15513] [transport.py] [_log()] starting thread (client mode): 0xb6b019c0
2025-12-25T17:24:32.191 [DEBUG] [Thread-15513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:24:32.206 [DEBUG] [Thread-15513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:24:32.206 [INFO] [Thread-15513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:24:32.214 [DEBUG] [Thread-15513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:24:32.214 [DEBUG] [Thread-15513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:24:32.215 [DEBUG] [Thread-15513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:24:32.215 [DEBUG] [Thread-15513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:24:32.215 [DEBUG] [Thread-15513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:24:32.215 [DEBUG] [Thread-15513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:24:32.215 [DEBUG] [Thread-15513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:24:32.215 [DEBUG] [Thread-15513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] client lang: <none>
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] server lang: <none>
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] kex follows: False
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] Compression: none
2025-12-25T17:24:32.216 [DEBUG] [Thread-15513] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:24:32.275 [DEBUG] [Thread-15513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:24:32.275 [DEBUG] [Thread-15513] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:24:32.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:24:32.277 [DEBUG] [Thread-15513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:24:32.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:24:32.331 [DEBUG] [Thread-15513] [transport.py] [_log()] userauth is OK
2025-12-25T17:24:32.331 [DEBUG] [Thread-15513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:24:32.332 [DEBUG] [Thread-15513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:24:32.332 [DEBUG] [Thread-15513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:24:32.332 [DEBUG] [Thread-15513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:24:32.351 [INFO] [Thread-15513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:24:32.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-25T17:24:32.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:24:33.235 [DEBUG] [Thread-15513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:24:33.236 [DEBUG] [Thread-15513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:24:33.284 [DEBUG] [Thread-15513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:24:33.284 [DEBUG] [Thread-15513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:24:33.293 [DEBUG] [Thread-15513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:24:33.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:24:33.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:24:33.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-25T17:24:33.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:24:33.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:24:33.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:24:33.331 [DEBUG] [Thread-15513] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:24:37.765 [DEBUG] [Thread-15515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:24:52.803 [DEBUG] [Thread-15516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:01.807 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:01.808 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:03.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:25:03.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:25:03.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-25T17:25:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 24, 51), 29.22, 14.25, 0.0, 40.53, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:25:04.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:24:51
2025-12-25T17:25:04.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:25:04.318 [DEBUG] [Thread-15517] [transport.py] [_log()] starting thread (client mode): 0xb6b22590
2025-12-25T17:25:04.318 [DEBUG] [Thread-15517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:25:04.338 [DEBUG] [Thread-15517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:25:04.338 [INFO] [Thread-15517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:25:04.341 [DEBUG] [Thread-15517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] client lang: <none>
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] server lang: <none>
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] kex follows: False
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:25:04.342 [DEBUG] [Thread-15517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:25:04.343 [DEBUG] [Thread-15517] [transport.py] [_log()] Compression: none
2025-12-25T17:25:04.343 [DEBUG] [Thread-15517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:25:04.357 [DEBUG] [Thread-15517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:25:04.358 [DEBUG] [Thread-15517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:25:04.358 [DEBUG] [Thread-15517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:25:04.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:25:04.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:25:04.360 [DEBUG] [Thread-15517] [transport.py] [_log()] userauth is OK
2025-12-25T17:25:04.360 [DEBUG] [Thread-15517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:25:04.360 [DEBUG] [Thread-15517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:25:04.361 [DEBUG] [Thread-15517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:25:04.361 [DEBUG] [Thread-15517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:25:04.385 [INFO] [Thread-15517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:25:04.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:25:05.139 [DEBUG] [Thread-15517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:25:05.139 [DEBUG] [Thread-15517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:25:05.139 [DEBUG] [Thread-15517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:25:05.181 [DEBUG] [Thread-15517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:25:05.181 [DEBUG] [Thread-15517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:25:05.184 [DEBUG] [Thread-15517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:25:05.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:25:05.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:25:05.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:25:05.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:25:05.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:25:05.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:25:05.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:25:05.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:25:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:25:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.642074 -999.00  +25.10  42.36     20   +0.60 1 1 2 1 1   887    0 25.26 39.71 ----- 33.3 42.4 310.6 56.1 28.0 -28.5 28.2 -28.8 29.0 -26.6 29.2 -27.3
2025-12-25T17:25:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:25:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:25:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.642074
2025-12-25T17:25:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:25:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:25:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:25:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:25:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:25:05.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:24:51', tmtdew=29.22, humidity=14.25, cloud=0.0, wind=40.53, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:24:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:25:05.210 [DEBUG] [Thread-15517] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:25:05.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-25T17:25:05.304 [DEBUG] [Thread-15520] [transport.py] [_log()] starting thread (client mode): 0xb6bc3d30
2025-12-25T17:25:05.304 [DEBUG] [Thread-15520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:25:05.319 [DEBUG] [Thread-15520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:25:05.319 [INFO] [Thread-15520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:05.327 [DEBUG] [Thread-15520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] client lang: <none>
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] server lang: <none>
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] kex follows: False
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:25:05.328 [DEBUG] [Thread-15520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:25:05.329 [DEBUG] [Thread-15520] [transport.py] [_log()] Compression: none
2025-12-25T17:25:05.329 [DEBUG] [Thread-15520] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:25:05.386 [DEBUG] [Thread-15520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:25:05.387 [DEBUG] [Thread-15520] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:25:05.387 [DEBUG] [Thread-15520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:25:05.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:25:05.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:25:05.442 [DEBUG] [Thread-15520] [transport.py] [_log()] userauth is OK
2025-12-25T17:25:05.442 [DEBUG] [Thread-15520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:25:05.442 [DEBUG] [Thread-15520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:25:05.442 [DEBUG] [Thread-15520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:25:05.442 [DEBUG] [Thread-15520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:25:05.462 [INFO] [Thread-15520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:25:05.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-25T17:25:05.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:25:06.304 [DEBUG] [Thread-15520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:25:06.304 [DEBUG] [Thread-15520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:25:06.351 [DEBUG] [Thread-15520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:25:06.352 [DEBUG] [Thread-15520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:25:06.360 [DEBUG] [Thread-15520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:25:06.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:25:06.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:25:06.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-25T17:25:06.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:25:06.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:25:06.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:25:06.394 [DEBUG] [Thread-15520] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:25:07.835 [DEBUG] [Thread-15522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:16.096 [DEBUG] [Thread-15523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:22.893 [DEBUG] [Thread-15524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:25:36.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:25:36.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-25T17:25:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 25, 23), 29.39, 14.09, 0.0, 38.99, 25.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:25:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:25:23
2025-12-25T17:25:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:25:37.384 [DEBUG] [Thread-15525] [transport.py] [_log()] starting thread (client mode): 0xb6bc2950
2025-12-25T17:25:37.384 [DEBUG] [Thread-15525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:25:37.408 [DEBUG] [Thread-15525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:25:37.408 [INFO] [Thread-15525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:25:37.412 [DEBUG] [Thread-15525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:25:37.412 [DEBUG] [Thread-15525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:25:37.412 [DEBUG] [Thread-15525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] client lang: <none>
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] server lang: <none>
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] kex follows: False
2025-12-25T17:25:37.413 [DEBUG] [Thread-15525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:25:37.414 [DEBUG] [Thread-15525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:25:37.414 [DEBUG] [Thread-15525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:25:37.414 [DEBUG] [Thread-15525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:25:37.414 [DEBUG] [Thread-15525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:25:37.414 [DEBUG] [Thread-15525] [transport.py] [_log()] Compression: none
2025-12-25T17:25:37.414 [DEBUG] [Thread-15525] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:25:37.432 [DEBUG] [Thread-15525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:25:37.432 [DEBUG] [Thread-15525] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:25:37.433 [DEBUG] [Thread-15525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:25:37.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:25:37.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:25:37.435 [DEBUG] [Thread-15525] [transport.py] [_log()] userauth is OK
2025-12-25T17:25:37.435 [DEBUG] [Thread-15525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:25:37.435 [DEBUG] [Thread-15525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:25:37.435 [DEBUG] [Thread-15525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:25:37.435 [DEBUG] [Thread-15525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:25:37.459 [INFO] [Thread-15525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:25:37.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:25:37.928 [DEBUG] [Thread-15527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:25:38.292 [DEBUG] [Thread-15525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:25:38.293 [DEBUG] [Thread-15525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:25:38.293 [DEBUG] [Thread-15525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:25:38.334 [DEBUG] [Thread-15525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:25:38.334 [DEBUG] [Thread-15525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:25:38.338 [DEBUG] [Thread-15525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:25:38.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:25:38.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:25:38.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:25:38.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:25:38.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:25:38.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:25:38.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:25:38.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:25:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:25:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.642422 -999.00  +24.90  42.44     20   +0.80 1 1 2 1 1   887    0 25.35 38.24 ----- 40.9 42.4 308.8 48.8 27.9 -28.8 28.1 -28.5 28.9 -27.8 29.2 -27.5
2025-12-25T17:25:38.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:25:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:25:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.642422
2025-12-25T17:25:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:25:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:25:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:25:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:25:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:25:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:25:23', tmtdew=29.39, humidity=14.09, cloud=0.0, wind=38.99, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:25:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:25:38.364 [DEBUG] [Thread-15525] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:25:38.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-25T17:25:38.470 [DEBUG] [Thread-15529] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-25T17:25:38.470 [DEBUG] [Thread-15529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:25:38.486 [DEBUG] [Thread-15529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:25:38.486 [INFO] [Thread-15529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:25:38.493 [DEBUG] [Thread-15529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] client lang: <none>
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] server lang: <none>
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] kex follows: False
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:25:38.494 [DEBUG] [Thread-15529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:25:38.495 [DEBUG] [Thread-15529] [transport.py] [_log()] Compression: none
2025-12-25T17:25:38.495 [DEBUG] [Thread-15529] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:25:38.550 [DEBUG] [Thread-15529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:25:38.551 [DEBUG] [Thread-15529] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:25:38.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:25:38.552 [DEBUG] [Thread-15529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:25:38.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:25:38.607 [DEBUG] [Thread-15529] [transport.py] [_log()] userauth is OK
2025-12-25T17:25:38.607 [DEBUG] [Thread-15529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:25:38.608 [DEBUG] [Thread-15529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:25:38.608 [DEBUG] [Thread-15529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:25:38.608 [DEBUG] [Thread-15529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:25:38.627 [INFO] [Thread-15529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:25:38.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-25T17:25:38.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:25:39.441 [DEBUG] [Thread-15529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:25:39.441 [DEBUG] [Thread-15529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:25:39.489 [DEBUG] [Thread-15529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:25:39.489 [DEBUG] [Thread-15529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:25:39.498 [DEBUG] [Thread-15529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:25:39.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:25:39.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-25T17:25:39.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-25T17:25:39.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:25:39.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:25:39.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:25:39.535 [DEBUG] [Thread-15529] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:25:52.964 [DEBUG] [Thread-15531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:01.954 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:01.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:08.005 [DEBUG] [Thread-15532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:26:09.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:26:09.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-25T17:26:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 25, 55), 29.42, 14.07, 0.0, 37.55, 25.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:26:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:25:55
2025-12-25T17:26:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:26:10.531 [DEBUG] [Thread-15533] [transport.py] [_log()] starting thread (client mode): 0xb95b3d30
2025-12-25T17:26:10.531 [DEBUG] [Thread-15533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:26:10.552 [DEBUG] [Thread-15533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:26:10.552 [INFO] [Thread-15533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:26:10.555 [DEBUG] [Thread-15533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] client lang: <none>
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] server lang: <none>
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] kex follows: False
2025-12-25T17:26:10.556 [DEBUG] [Thread-15533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:26:10.557 [DEBUG] [Thread-15533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:26:10.557 [DEBUG] [Thread-15533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:26:10.557 [DEBUG] [Thread-15533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:26:10.557 [DEBUG] [Thread-15533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:26:10.557 [DEBUG] [Thread-15533] [transport.py] [_log()] Compression: none
2025-12-25T17:26:10.557 [DEBUG] [Thread-15533] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:26:10.573 [DEBUG] [Thread-15533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:26:10.574 [DEBUG] [Thread-15533] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:26:10.574 [DEBUG] [Thread-15533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:26:10.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:26:10.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:26:10.576 [DEBUG] [Thread-15533] [transport.py] [_log()] userauth is OK
2025-12-25T17:26:10.577 [DEBUG] [Thread-15533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:26:10.577 [DEBUG] [Thread-15533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:26:10.577 [DEBUG] [Thread-15533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:26:10.577 [DEBUG] [Thread-15533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:26:10.612 [INFO] [Thread-15533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:26:10.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:26:11.206 [DEBUG] [Thread-15533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:26:11.206 [DEBUG] [Thread-15533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:26:11.206 [DEBUG] [Thread-15533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:26:11.247 [DEBUG] [Thread-15533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:26:11.247 [DEBUG] [Thread-15533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:26:11.250 [DEBUG] [Thread-15533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:26:11.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:26:11.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:26:11.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:26:11.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:26:11.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:26:11.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:26:11.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:26:11.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:26:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:26:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.642769 -999.00  +25.00  29.10     21   +1.10 1 1 1 1 1   887    0 25.49 30.72 ----- 32.5 29.1 297.0 47.9 27.9 -28.3 28.1 -28.4 28.8 -26.1 29.1 -26.7
2025-12-25T17:26:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:26:11.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:26:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.642769
2025-12-25T17:26:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:26:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:26:11.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:26:11.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:26:11.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:26:11.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:25:55', tmtdew=29.42, humidity=14.07, cloud=0.0, wind=37.55, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:25:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:26:11.276 [DEBUG] [Thread-15533] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:26:11.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-25T17:26:11.371 [DEBUG] [Thread-15536] [transport.py] [_log()] starting thread (client mode): 0xb6bb5e10
2025-12-25T17:26:11.371 [DEBUG] [Thread-15536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:26:11.386 [DEBUG] [Thread-15536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:26:11.386 [INFO] [Thread-15536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] client lang: <none>
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] server lang: <none>
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] kex follows: False
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:26:11.394 [DEBUG] [Thread-15536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:26:11.395 [DEBUG] [Thread-15536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:26:11.395 [DEBUG] [Thread-15536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:26:11.395 [DEBUG] [Thread-15536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:26:11.395 [DEBUG] [Thread-15536] [transport.py] [_log()] Compression: none
2025-12-25T17:26:11.395 [DEBUG] [Thread-15536] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:26:11.450 [DEBUG] [Thread-15536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:26:11.450 [DEBUG] [Thread-15536] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:26:11.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:26:11.452 [DEBUG] [Thread-15536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:26:11.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:26:11.507 [DEBUG] [Thread-15536] [transport.py] [_log()] userauth is OK
2025-12-25T17:26:11.507 [DEBUG] [Thread-15536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:26:11.507 [DEBUG] [Thread-15536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:26:11.507 [DEBUG] [Thread-15536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:26:11.507 [DEBUG] [Thread-15536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:26:11.528 [INFO] [Thread-15536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:26:11.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-25T17:26:11.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:26:12.407 [DEBUG] [Thread-15536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:26:12.407 [DEBUG] [Thread-15536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:26:12.455 [DEBUG] [Thread-15536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:26:12.456 [DEBUG] [Thread-15536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:26:12.465 [DEBUG] [Thread-15536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:26:12.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:26:12.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-25T17:26:12.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-25T17:26:12.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:26:12.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:26:12.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:26:12.502 [DEBUG] [Thread-15536] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:26:16.145 [DEBUG] [Thread-15538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:23.040 [DEBUG] [Thread-15539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:38.086 [DEBUG] [Thread-15540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:26:42.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:26:42.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:26:42.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-25T17:26:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 26, 27), 28.98, 14.48, 0.0, 35.69, 25.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:26:43.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:26:27
2025-12-25T17:26:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:26:43.500 [DEBUG] [Thread-15541] [transport.py] [_log()] starting thread (client mode): 0xb6b223b0
2025-12-25T17:26:43.501 [DEBUG] [Thread-15541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:26:43.522 [DEBUG] [Thread-15541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:26:43.523 [INFO] [Thread-15541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:26:43.526 [DEBUG] [Thread-15541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:26:43.526 [DEBUG] [Thread-15541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:26:43.526 [DEBUG] [Thread-15541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:26:43.526 [DEBUG] [Thread-15541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:43.526 [DEBUG] [Thread-15541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:43.526 [DEBUG] [Thread-15541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] client lang: <none>
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] server lang: <none>
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] kex follows: False
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:26:43.527 [DEBUG] [Thread-15541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:26:43.528 [DEBUG] [Thread-15541] [transport.py] [_log()] Compression: none
2025-12-25T17:26:43.528 [DEBUG] [Thread-15541] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:26:43.547 [DEBUG] [Thread-15541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:26:43.547 [DEBUG] [Thread-15541] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:26:43.548 [DEBUG] [Thread-15541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:26:43.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:26:43.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:26:43.550 [DEBUG] [Thread-15541] [transport.py] [_log()] userauth is OK
2025-12-25T17:26:43.550 [DEBUG] [Thread-15541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:26:43.550 [DEBUG] [Thread-15541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:26:43.550 [DEBUG] [Thread-15541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:26:43.550 [DEBUG] [Thread-15541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:26:43.575 [INFO] [Thread-15541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:26:43.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:26:44.390 [DEBUG] [Thread-15541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:26:44.391 [DEBUG] [Thread-15541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:26:44.391 [DEBUG] [Thread-15541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:26:44.432 [DEBUG] [Thread-15541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:26:44.432 [DEBUG] [Thread-15541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:26:44.435 [DEBUG] [Thread-15541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:26:44.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:26:44.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:26:44.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:26:44.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:26:44.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:26:44.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:26:44.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:26:44.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:26:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:26:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.643116 -999.00  +25.00  38.43     21   +1.20 1 1 2 1 1   887    0 24.76 26.78 ----- 30.0 38.4 294.6 44.2 27.9 -28.4 28.1 -28.7 28.9 -28.3 29.0 -27.1
2025-12-25T17:26:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:26:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:26:44.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.643116
2025-12-25T17:26:44.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:26:44.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:26:44.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:26:44.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:26:44.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:26:44.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:26:27', tmtdew=28.98, humidity=14.48, cloud=0.0, wind=35.69, temperature=25.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:26:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:26:44.455 [DEBUG] [Thread-15541] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:26:44.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-25T17:26:44.548 [DEBUG] [Thread-15544] [transport.py] [_log()] starting thread (client mode): 0xb6bc3430
2025-12-25T17:26:44.548 [DEBUG] [Thread-15544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:26:44.563 [DEBUG] [Thread-15544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:26:44.563 [INFO] [Thread-15544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:26:44.571 [DEBUG] [Thread-15544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:26:44.571 [DEBUG] [Thread-15544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:26:44.571 [DEBUG] [Thread-15544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:26:44.571 [DEBUG] [Thread-15544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:44.571 [DEBUG] [Thread-15544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] client lang: <none>
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] server lang: <none>
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] kex follows: False
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] Compression: none
2025-12-25T17:26:44.572 [DEBUG] [Thread-15544] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:26:44.630 [DEBUG] [Thread-15544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:26:44.630 [DEBUG] [Thread-15544] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:26:44.631 [DEBUG] [Thread-15544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:26:44.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:26:44.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:26:44.686 [DEBUG] [Thread-15544] [transport.py] [_log()] userauth is OK
2025-12-25T17:26:44.686 [DEBUG] [Thread-15544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:26:44.686 [DEBUG] [Thread-15544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:26:44.686 [DEBUG] [Thread-15544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:26:44.686 [DEBUG] [Thread-15544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:26:44.708 [INFO] [Thread-15544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:26:44.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-25T17:26:44.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:26:45.556 [DEBUG] [Thread-15544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:26:45.556 [DEBUG] [Thread-15544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:26:45.606 [DEBUG] [Thread-15544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:26:45.607 [DEBUG] [Thread-15544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:26:45.618 [DEBUG] [Thread-15544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:26:45.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:26:45.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-25T17:26:45.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:26:45.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:26:45.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:26:45.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:26:45.659 [DEBUG] [Thread-15544] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:26:53.119 [DEBUG] [Thread-15546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:02.093 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:02.094 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:08.166 [DEBUG] [Thread-15547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:15.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:27:15.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:27:15.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:27:16.175 [DEBUG] [Thread-15548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:16.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 26, 59), 28.58, 14.9, 0.0, 39.31, 25.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:27:16.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:26:59
2025-12-25T17:27:16.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:27:16.694 [DEBUG] [Thread-15549] [transport.py] [_log()] starting thread (client mode): 0xb6bc1420
2025-12-25T17:27:16.694 [DEBUG] [Thread-15549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:27:16.710 [DEBUG] [Thread-15549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:27:16.710 [INFO] [Thread-15549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] client lang: <none>
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] server lang: <none>
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] kex follows: False
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] Compression: none
2025-12-25T17:27:16.714 [DEBUG] [Thread-15549] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:27:16.728 [DEBUG] [Thread-15549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:27:16.728 [DEBUG] [Thread-15549] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:27:16.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:27:16.729 [DEBUG] [Thread-15549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:27:16.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:27:16.729 [DEBUG] [Thread-15549] [transport.py] [_log()] userauth is OK
2025-12-25T17:27:16.729 [DEBUG] [Thread-15549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:27:16.729 [DEBUG] [Thread-15549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:27:16.729 [DEBUG] [Thread-15549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:27:16.729 [DEBUG] [Thread-15549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:27:16.740 [INFO] [Thread-15549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:27:16.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:27:17.379 [DEBUG] [Thread-15549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:27:17.379 [DEBUG] [Thread-15549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:27:17.380 [DEBUG] [Thread-15549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:27:17.420 [DEBUG] [Thread-15549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:27:17.420 [DEBUG] [Thread-15549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:27:17.423 [DEBUG] [Thread-15549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:27:17.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:27:17.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:27:17.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:27:17.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:27:17.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:27:17.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:27:17.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:27:17.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:27:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:27:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.643464 -999.00  +25.30  35.49     20   +1.20 1 1 2 1 1   887    0 24.91 22.80 ----- 36.4 35.5 315.2 44.8 28.0 -28.7 28.1 -27.6 28.9 -24.8 29.1 -26.5
2025-12-25T17:27:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:27:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:27:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.643464
2025-12-25T17:27:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:27:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:27:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:27:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:27:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:27:17.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:26:59', tmtdew=28.58, humidity=14.9, cloud=0.0, wind=39.31, temperature=25.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:26:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:27:17.451 [DEBUG] [Thread-15549] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:27:17.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-25T17:27:17.545 [DEBUG] [Thread-15552] [transport.py] [_log()] starting thread (client mode): 0xb6bb7ca0
2025-12-25T17:27:17.545 [DEBUG] [Thread-15552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:27:17.560 [DEBUG] [Thread-15552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:27:17.560 [INFO] [Thread-15552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:27:17.568 [DEBUG] [Thread-15552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:27:17.568 [DEBUG] [Thread-15552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:27:17.568 [DEBUG] [Thread-15552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:27:17.568 [DEBUG] [Thread-15552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] client lang: <none>
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] server lang: <none>
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] kex follows: False
2025-12-25T17:27:17.569 [DEBUG] [Thread-15552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:27:17.570 [DEBUG] [Thread-15552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:27:17.570 [DEBUG] [Thread-15552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:27:17.570 [DEBUG] [Thread-15552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:27:17.570 [DEBUG] [Thread-15552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:27:17.570 [DEBUG] [Thread-15552] [transport.py] [_log()] Compression: none
2025-12-25T17:27:17.570 [DEBUG] [Thread-15552] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:27:17.627 [DEBUG] [Thread-15552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:27:17.628 [DEBUG] [Thread-15552] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:27:17.628 [DEBUG] [Thread-15552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:27:17.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:27:17.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:27:17.683 [DEBUG] [Thread-15552] [transport.py] [_log()] userauth is OK
2025-12-25T17:27:17.683 [DEBUG] [Thread-15552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:27:17.683 [DEBUG] [Thread-15552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:27:17.683 [DEBUG] [Thread-15552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:27:17.683 [DEBUG] [Thread-15552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:27:17.701 [INFO] [Thread-15552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:27:17.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-25T17:27:17.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:27:18.524 [DEBUG] [Thread-15552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:27:18.525 [DEBUG] [Thread-15552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:27:18.573 [DEBUG] [Thread-15552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:27:18.573 [DEBUG] [Thread-15552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:27:18.582 [DEBUG] [Thread-15552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:27:18.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:27:18.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-25T17:27: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') -> 00000000
2025-12-25T17:27:18.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:27:18.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:27:18.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:27:18.624 [DEBUG] [Thread-15552] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:27:23.199 [DEBUG] [Thread-15554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:38.252 [DEBUG] [Thread-15555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:27:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:27:48.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:27:48.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:27:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 27, 31), 28.78, 14.7, 0.0, 37.07, 25.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:27:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:27:31
2025-12-25T17:27:49.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:27:49.663 [DEBUG] [Thread-15556] [transport.py] [_log()] starting thread (client mode): 0xb95b38e0
2025-12-25T17:27:49.664 [DEBUG] [Thread-15556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:27:49.684 [DEBUG] [Thread-15556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:27:49.684 [INFO] [Thread-15556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:49.687 [DEBUG] [Thread-15556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] client lang: <none>
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] server lang: <none>
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] kex follows: False
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] Compression: none
2025-12-25T17:27:49.688 [DEBUG] [Thread-15556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:27:49.708 [DEBUG] [Thread-15556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:27:49.708 [DEBUG] [Thread-15556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:27:49.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:27:49.709 [DEBUG] [Thread-15556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:27:49.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:27:49.711 [DEBUG] [Thread-15556] [transport.py] [_log()] userauth is OK
2025-12-25T17:27:49.712 [DEBUG] [Thread-15556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:27:49.712 [DEBUG] [Thread-15556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:27:49.712 [DEBUG] [Thread-15556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:27:49.712 [DEBUG] [Thread-15556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:27:49.728 [INFO] [Thread-15556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:27:49.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:27:50.515 [DEBUG] [Thread-15556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:27:50.515 [DEBUG] [Thread-15556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:27:50.515 [DEBUG] [Thread-15556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:27:50.555 [DEBUG] [Thread-15556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:27:50.556 [DEBUG] [Thread-15556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:27:50.558 [DEBUG] [Thread-15556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:27:50.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:27:50.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:27:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:27:50.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:27:50.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:27:50.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:27:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.643811 -999.00  +25.20  38.02     21   +1.30 1 1 2 1 1   887    0 24.74 21.65 ----- 44.5 38.0 295.6 56.1 27.9 -28.7 28.1 -28.6 28.8 -28.7 29.1 -27.3
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.643811
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:27:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:27:31', tmtdew=28.78, humidity=14.7, cloud=0.0, wind=37.07, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:27:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:27:50.577 [DEBUG] [Thread-15556] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:27:50.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-25T17:27:50.661 [DEBUG] [Thread-15559] [transport.py] [_log()] starting thread (client mode): 0xb9558760
2025-12-25T17:27:50.661 [DEBUG] [Thread-15559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:27:50.677 [DEBUG] [Thread-15559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:27:50.677 [INFO] [Thread-15559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] client lang: <none>
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] server lang: <none>
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] kex follows: False
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] Compression: none
2025-12-25T17:27:50.685 [DEBUG] [Thread-15559] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:27:50.740 [DEBUG] [Thread-15559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:27:50.741 [DEBUG] [Thread-15559] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:27:50.741 [DEBUG] [Thread-15559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:27:50.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:27:50.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:27:50.798 [DEBUG] [Thread-15559] [transport.py] [_log()] userauth is OK
2025-12-25T17:27:50.798 [DEBUG] [Thread-15559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:27:50.798 [DEBUG] [Thread-15559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:27:50.798 [DEBUG] [Thread-15559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:27:50.798 [DEBUG] [Thread-15559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:27:50.812 [INFO] [Thread-15559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:27:50.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-25T17:27:50.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:27:51.651 [DEBUG] [Thread-15559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:27:51.651 [DEBUG] [Thread-15559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:27:51.699 [DEBUG] [Thread-15559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:27:51.699 [DEBUG] [Thread-15559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:27:51.708 [DEBUG] [Thread-15559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:27:51.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:27:51.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:27:51.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-25T17:27:51.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:27:51.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:27:51.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:27:51.739 [DEBUG] [Thread-15559] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:27:53.285 [DEBUG] [Thread-15561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:02.238 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:02.239 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:08.324 [DEBUG] [Thread-15562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:16.215 [DEBUG] [Thread-15563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:28:21.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:28:21.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-25T17:28:22.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 28, 3), 28.49, 14.95, 0.0, 33.47, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:28:22.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:28:03
2025-12-25T17:28:22.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:28:22.750 [DEBUG] [Thread-15564] [transport.py] [_log()] starting thread (client mode): 0xb95b0520
2025-12-25T17:28:22.750 [DEBUG] [Thread-15564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:28:22.769 [DEBUG] [Thread-15564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:28:22.770 [INFO] [Thread-15564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:28:22.773 [DEBUG] [Thread-15564] [transport.py] [_log()] client lang: <none>
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] server lang: <none>
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] kex follows: False
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] Compression: none
2025-12-25T17:28:22.774 [DEBUG] [Thread-15564] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:28:22.794 [DEBUG] [Thread-15564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:28:22.794 [DEBUG] [Thread-15564] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:28:22.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:28:22.795 [DEBUG] [Thread-15564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:28:22.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:28:22.797 [DEBUG] [Thread-15564] [transport.py] [_log()] userauth is OK
2025-12-25T17:28:22.797 [DEBUG] [Thread-15564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:28:22.797 [DEBUG] [Thread-15564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:28:22.798 [DEBUG] [Thread-15564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:28:22.798 [DEBUG] [Thread-15564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:28:22.834 [INFO] [Thread-15564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:28:22.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:28:23.361 [DEBUG] [Thread-15566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:23.481 [DEBUG] [Thread-15564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:28:23.481 [DEBUG] [Thread-15564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:28:23.482 [DEBUG] [Thread-15564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:28:23.522 [DEBUG] [Thread-15564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:28:23.522 [DEBUG] [Thread-15564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:28:23.526 [DEBUG] [Thread-15564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:28:23.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:28:23.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:28:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:28:23.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:28:23.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:28:23.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:28:23.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:28:23.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:28:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:28:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.644158 -999.00  +25.10  29.36     21   +1.70 1 1 1 1 1   887    0 24.33 14.39 ----- 41.1 29.4 297.4 48.1 27.9 -28.7 28.1 -27.5 28.8 -25.5 29.0 -26.8
2025-12-25T17:28:23.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:28:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:28:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.644158
2025-12-25T17:28:23.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:28:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:28:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:28:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:28:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:28:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:28:03', tmtdew=28.49, humidity=14.95, cloud=0.0, wind=33.47, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:27:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:28:23.551 [DEBUG] [Thread-15564] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:28:23.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-25T17:28:23.647 [DEBUG] [Thread-15568] [transport.py] [_log()] starting thread (client mode): 0xb95d77c0
2025-12-25T17:28:23.647 [DEBUG] [Thread-15568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:28:23.662 [DEBUG] [Thread-15568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:28:23.662 [INFO] [Thread-15568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:28:23.670 [DEBUG] [Thread-15568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:28:23.670 [DEBUG] [Thread-15568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:28:23.671 [DEBUG] [Thread-15568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:28:23.671 [DEBUG] [Thread-15568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:23.671 [DEBUG] [Thread-15568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:23.671 [DEBUG] [Thread-15568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:23.671 [DEBUG] [Thread-15568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:23.671 [DEBUG] [Thread-15568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] client lang: <none>
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] server lang: <none>
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] kex follows: False
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] Compression: none
2025-12-25T17:28:23.672 [DEBUG] [Thread-15568] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:28:23.731 [DEBUG] [Thread-15568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:28:23.731 [DEBUG] [Thread-15568] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:28:23.732 [DEBUG] [Thread-15568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:28:23.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:28:23.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:28:23.789 [DEBUG] [Thread-15568] [transport.py] [_log()] userauth is OK
2025-12-25T17:28:23.789 [DEBUG] [Thread-15568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:28:23.789 [DEBUG] [Thread-15568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:28:23.790 [DEBUG] [Thread-15568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:28:23.790 [DEBUG] [Thread-15568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:28:23.809 [INFO] [Thread-15568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:28:23.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-25T17:28:23.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:28:24.633 [DEBUG] [Thread-15568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:28:24.634 [DEBUG] [Thread-15568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:28:24.682 [DEBUG] [Thread-15568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:28:24.682 [DEBUG] [Thread-15568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:28:24.692 [DEBUG] [Thread-15568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:28:24.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:28:24.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-25T17:28:24.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:28:24.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:28:24.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:28:24.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:28:24.728 [DEBUG] [Thread-15568] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:28:38.393 [DEBUG] [Thread-15570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:53.435 [DEBUG] [Thread-15571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:28:54.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:28:54.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:28:54.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-25T17:28:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 28, 35), 27.47, 16.01, 0.0, 36.95, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:28:55.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:28:35
2025-12-25T17:28:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:28:55.729 [DEBUG] [Thread-15572] [transport.py] [_log()] starting thread (client mode): 0xb95d4670
2025-12-25T17:28:55.729 [DEBUG] [Thread-15572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:28:55.750 [DEBUG] [Thread-15572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:28:55.750 [INFO] [Thread-15572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:28:55.753 [DEBUG] [Thread-15572] [transport.py] [_log()] client lang: <none>
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] server lang: <none>
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] kex follows: False
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] Compression: none
2025-12-25T17:28:55.754 [DEBUG] [Thread-15572] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:28:55.774 [DEBUG] [Thread-15572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:28:55.775 [DEBUG] [Thread-15572] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:28:55.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:28:55.776 [DEBUG] [Thread-15572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:28:55.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:28:55.777 [DEBUG] [Thread-15572] [transport.py] [_log()] userauth is OK
2025-12-25T17:28:55.778 [DEBUG] [Thread-15572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:28:55.778 [DEBUG] [Thread-15572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:28:55.778 [DEBUG] [Thread-15572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:28:55.778 [DEBUG] [Thread-15572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:28:55.801 [INFO] [Thread-15572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:28:55.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:28:56.616 [DEBUG] [Thread-15572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:28:56.616 [DEBUG] [Thread-15572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:28:56.616 [DEBUG] [Thread-15572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:28:56.657 [DEBUG] [Thread-15572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:28:56.657 [DEBUG] [Thread-15572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:28:56.661 [DEBUG] [Thread-15572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:28:56.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:28:56.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:28:56.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:28:56.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:28:56.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:28:56.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:28:56.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:28:56.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:28:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:28:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.644505 -999.00  +24.80  42.29     22   +1.60 1 1 2 1 1   887    0 24.34 10.72 ----- 46.3 42.3 293.6 46.5 27.9 -29.4 28.1 -28.5 28.8 -25.8 29.0 -27.0
2025-12-25T17:28:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:28:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:28:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.644505
2025-12-25T17:28:56.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:28:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:28:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:28:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:28:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:28:56.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:28:35', tmtdew=27.47, humidity=16.01, cloud=0.0, wind=36.95, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:28:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:28:56.689 [DEBUG] [Thread-15572] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:28: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-25T17:28:56.782 [DEBUG] [Thread-15575] [transport.py] [_log()] starting thread (client mode): 0xb95d7550
2025-12-25T17:28:56.782 [DEBUG] [Thread-15575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:28:56.797 [DEBUG] [Thread-15575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:28:56.797 [INFO] [Thread-15575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:28:56.805 [DEBUG] [Thread-15575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] client lang: <none>
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] server lang: <none>
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] kex follows: False
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] Compression: none
2025-12-25T17:28:56.806 [DEBUG] [Thread-15575] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:28:56.862 [DEBUG] [Thread-15575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:28:56.863 [DEBUG] [Thread-15575] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:28:56.864 [DEBUG] [Thread-15575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:28:56.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:28:56.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:28:56.918 [DEBUG] [Thread-15575] [transport.py] [_log()] userauth is OK
2025-12-25T17:28:56.919 [DEBUG] [Thread-15575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:28:56.919 [DEBUG] [Thread-15575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:28:56.919 [DEBUG] [Thread-15575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:28:56.919 [DEBUG] [Thread-15575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:28:56.937 [INFO] [Thread-15575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:28:56.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-25T17:28:56.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:28:57.777 [DEBUG] [Thread-15575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:28:57.778 [DEBUG] [Thread-15575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:28:57.826 [DEBUG] [Thread-15575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:28:57.826 [DEBUG] [Thread-15575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:28:57.835 [DEBUG] [Thread-15575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:28:57.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:28:57.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-25T17:28: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-25T17:28:57.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:28:57.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:28:57.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:28:57.874 [DEBUG] [Thread-15575] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:29:02.380 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:29:02.382 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:29:08.469 [DEBUG] [Thread-15577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:29:16.258 [DEBUG] [Thread-15578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:29:23.502 [DEBUG] [Thread-15579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:29:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:29:27.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:29:27.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-25T17:29:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 29, 7), 27.42, 16.08, 0.0, 38.69, 25.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:29:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:29:07
2025-12-25T17:29:28.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:29:28.860 [DEBUG] [Thread-15580] [transport.py] [_log()] starting thread (client mode): 0xb6b02d10
2025-12-25T17:29:28.860 [DEBUG] [Thread-15580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:29:28.880 [DEBUG] [Thread-15580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:29:28.880 [INFO] [Thread-15580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] client lang: <none>
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] server lang: <none>
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] kex follows: False
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:29:28.883 [DEBUG] [Thread-15580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:29:28.884 [DEBUG] [Thread-15580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:29:28.884 [DEBUG] [Thread-15580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:29:28.884 [DEBUG] [Thread-15580] [transport.py] [_log()] Compression: none
2025-12-25T17:29:28.884 [DEBUG] [Thread-15580] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:29:28.903 [DEBUG] [Thread-15580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:29:28.904 [DEBUG] [Thread-15580] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:29:28.904 [DEBUG] [Thread-15580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:29:28.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:29:28.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:29:28.906 [DEBUG] [Thread-15580] [transport.py] [_log()] userauth is OK
2025-12-25T17:29:28.907 [DEBUG] [Thread-15580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:29:28.907 [DEBUG] [Thread-15580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:29:28.907 [DEBUG] [Thread-15580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:29:28.907 [DEBUG] [Thread-15580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:29:28.932 [INFO] [Thread-15580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:29:28.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:29:29.553 [DEBUG] [Thread-15580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:29:29.553 [DEBUG] [Thread-15580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:29:29.554 [DEBUG] [Thread-15580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:29:29.594 [DEBUG] [Thread-15580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:29:29.594 [DEBUG] [Thread-15580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:29:29.597 [DEBUG] [Thread-15580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:29:29.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:29:29.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:29:29.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:29:29.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:29:29.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:29:29.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:29:29.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:29:29.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:29:29.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:29:29.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.644852 -999.00  +24.70  48.55     22   +1.60 1 1 2 1 1   887    0 24.24 3.11 ----- 46.8 48.5 292.6 52.2 27.8 -29.0 28.0 -28.3 28.7 -26.1 28.9 -26.8
2025-12-25T17:29:29.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:29:29.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:29:29.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.644852
2025-12-25T17:29:29.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:29:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:29:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:29:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:29:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:29:29.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:29:07', tmtdew=27.42, humidity=16.08, cloud=0.0, wind=38.69, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:28:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:29:29.623 [DEBUG] [Thread-15580] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:29:29.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-25T17:29:29.707 [DEBUG] [Thread-15583] [transport.py] [_log()] starting thread (client mode): 0xb6b03b80
2025-12-25T17:29:29.707 [DEBUG] [Thread-15583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:29:29.722 [DEBUG] [Thread-15583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:29:29.722 [INFO] [Thread-15583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:29:29.729 [DEBUG] [Thread-15583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:29:29.729 [DEBUG] [Thread-15583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] client lang: <none>
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] server lang: <none>
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] kex follows: False
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] Compression: none
2025-12-25T17:29:29.730 [DEBUG] [Thread-15583] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:29:29.790 [DEBUG] [Thread-15583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:29:29.791 [DEBUG] [Thread-15583] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:29:29.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:29:29.792 [DEBUG] [Thread-15583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:29:29.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:29:29.846 [DEBUG] [Thread-15583] [transport.py] [_log()] userauth is OK
2025-12-25T17:29:29.847 [DEBUG] [Thread-15583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:29:29.847 [DEBUG] [Thread-15583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:29:29.847 [DEBUG] [Thread-15583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:29:29.847 [DEBUG] [Thread-15583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:29:29.865 [INFO] [Thread-15583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:29:29.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-25T17:29:29.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:29:30.702 [DEBUG] [Thread-15583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:29:30.703 [DEBUG] [Thread-15583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:29:30.751 [DEBUG] [Thread-15583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:29:30.751 [DEBUG] [Thread-15583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:29:30.761 [DEBUG] [Thread-15583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:29:30.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:29:30.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:29:30.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:29:30.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:29:30.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:29:30.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:29:30.797 [DEBUG] [Thread-15583] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:29:38.542 [DEBUG] [Thread-15585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:29:53.600 [DEBUG] [Thread-15586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:00.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:30:00.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:30:00.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-25T17:30:01.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 29, 40), 27.99, 15.36, 0.0, 38.73, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:30:01.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:29:40
2025-12-25T17:30:01.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:30:01.811 [DEBUG] [Thread-15587] [transport.py] [_log()] starting thread (client mode): 0xb6b02500
2025-12-25T17:30:01.811 [DEBUG] [Thread-15587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:30:01.832 [DEBUG] [Thread-15587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:30:01.832 [INFO] [Thread-15587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] client lang: <none>
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] server lang: <none>
2025-12-25T17:30:01.835 [DEBUG] [Thread-15587] [transport.py] [_log()] kex follows: False
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] Compression: none
2025-12-25T17:30:01.836 [DEBUG] [Thread-15587] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:30:01.851 [DEBUG] [Thread-15587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:30:01.852 [DEBUG] [Thread-15587] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:30:01.852 [DEBUG] [Thread-15587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:30:01.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:30:01.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:30:01.853 [DEBUG] [Thread-15587] [transport.py] [_log()] userauth is OK
2025-12-25T17:30:01.853 [DEBUG] [Thread-15587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:30:01.853 [DEBUG] [Thread-15587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:30:01.853 [DEBUG] [Thread-15587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:30:01.853 [DEBUG] [Thread-15587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:30:01.867 [INFO] [Thread-15587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:30:01.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:30:02.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:02.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:02.659 [DEBUG] [Thread-15587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:30:02.659 [DEBUG] [Thread-15587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:30:02.659 [DEBUG] [Thread-15587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:30:02.701 [DEBUG] [Thread-15587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:30:02.701 [DEBUG] [Thread-15587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:30:02.702 [DEBUG] [Thread-15587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:30:02.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:30:02.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:30:02.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:30:02.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:30:02.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:30:02.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:30:02.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:30:02.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:30:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.645547 -999.00  +24.70  37.41     22   +1.70 1 1 2 1 1   887    0 23.82 -13.90 ----- 41.1 37.4 299.7 46.3 27.6 -28.4 27.9 -27.7 28.5 -27.2 28.8 -27.2
2025-12-25T17:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.645547
2025-12-25T17:30:02.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:30:02.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:29:40', tmtdew=27.99, humidity=15.36, cloud=0.0, wind=38.73, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:29:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:30:02.726 [DEBUG] [Thread-15587] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:30:02.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-25T17:30:02.819 [DEBUG] [Thread-15590] [transport.py] [_log()] starting thread (client mode): 0xb9592b60
2025-12-25T17:30:02.820 [DEBUG] [Thread-15590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:30:02.834 [DEBUG] [Thread-15590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:30:02.834 [INFO] [Thread-15590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:30:02.841 [DEBUG] [Thread-15590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:30:02.841 [DEBUG] [Thread-15590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] client lang: <none>
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] server lang: <none>
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] kex follows: False
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] Compression: none
2025-12-25T17:30:02.842 [DEBUG] [Thread-15590] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:30:02.901 [DEBUG] [Thread-15590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:30:02.902 [DEBUG] [Thread-15590] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:30:02.902 [DEBUG] [Thread-15590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:30:02.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:30:02.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:30:02.963 [DEBUG] [Thread-15590] [transport.py] [_log()] userauth is OK
2025-12-25T17:30:02.963 [DEBUG] [Thread-15590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:30:02.963 [DEBUG] [Thread-15590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:30:02.963 [DEBUG] [Thread-15590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:30:02.963 [DEBUG] [Thread-15590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:30:02.983 [INFO] [Thread-15590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:30:02.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-25T17:30:02.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:30:03.870 [DEBUG] [Thread-15590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:30:03.871 [DEBUG] [Thread-15590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:30:03.918 [DEBUG] [Thread-15590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:30:03.919 [DEBUG] [Thread-15590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:30:03.927 [DEBUG] [Thread-15590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:30:03.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:30:03.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-25T17:30:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:30:03.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:30:03.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:30:03.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:30:03.960 [DEBUG] [Thread-15590] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:30:08.640 [DEBUG] [Thread-15592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:16.292 [DEBUG] [Thread-15593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:23.692 [DEBUG] [Thread-15594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:30:33.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:30:33.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:30:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 30, 12), 28.39, 14.97, 0.0, 42.96, 25.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:30:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:30:12
2025-12-25T17:30:34.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:30:34.965 [DEBUG] [Thread-15595] [transport.py] [_log()] starting thread (client mode): 0xb95d7580
2025-12-25T17:30:34.965 [DEBUG] [Thread-15595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:30:34.986 [DEBUG] [Thread-15595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:30:34.986 [INFO] [Thread-15595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] client lang: <none>
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] server lang: <none>
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] kex follows: False
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:30:34.989 [DEBUG] [Thread-15595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:30:34.990 [DEBUG] [Thread-15595] [transport.py] [_log()] Compression: none
2025-12-25T17:30:34.990 [DEBUG] [Thread-15595] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:30:35.010 [DEBUG] [Thread-15595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:30:35.010 [DEBUG] [Thread-15595] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:30:35.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:30:35.011 [DEBUG] [Thread-15595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:30:35.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:30:35.013 [DEBUG] [Thread-15595] [transport.py] [_log()] userauth is OK
2025-12-25T17:30:35.013 [DEBUG] [Thread-15595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:30:35.013 [DEBUG] [Thread-15595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:30:35.014 [DEBUG] [Thread-15595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:30:35.014 [DEBUG] [Thread-15595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:30:35.038 [INFO] [Thread-15595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:30:35.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:30:35.706 [DEBUG] [Thread-15595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:30:35.706 [DEBUG] [Thread-15595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:30:35.706 [DEBUG] [Thread-15595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:30:35.747 [DEBUG] [Thread-15595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:30:35.747 [DEBUG] [Thread-15595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:30:35.750 [DEBUG] [Thread-15595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:30:35.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:30:35.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:30:35.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:30:35.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:30:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:30:35.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:30:35.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:30:35.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:30:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:30:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.645894 -999.00  +24.60  41.80     22   +1.70 1 1 2 1 1   887    0 23.35 -21.71 ----- 38.6 41.8 295.8 54.0 27.7 -28.0 27.8 -28.6 28.6 -27.0 28.7 -26.6
2025-12-25T17:30:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:30:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:30:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.645894
2025-12-25T17:30:35.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:30:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:30:35.773 [DEBUG] [Thread-15595] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:30:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:30:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:30:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:30:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:30:12', tmtdew=28.39, humidity=14.97, cloud=0.0, wind=42.96, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:30:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:30:35.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-25T17:30:35.875 [DEBUG] [Thread-15598] [transport.py] [_log()] starting thread (client mode): 0xb9558040
2025-12-25T17:30:35.875 [DEBUG] [Thread-15598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:30:35.890 [DEBUG] [Thread-15598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:30:35.890 [INFO] [Thread-15598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:35.898 [DEBUG] [Thread-15598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] client lang: <none>
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] server lang: <none>
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] kex follows: False
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] Compression: none
2025-12-25T17:30:35.899 [DEBUG] [Thread-15598] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:30:35.955 [DEBUG] [Thread-15598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:30:35.955 [DEBUG] [Thread-15598] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:30:35.956 [DEBUG] [Thread-15598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:30:35.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:30:35.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:30:36.011 [DEBUG] [Thread-15598] [transport.py] [_log()] userauth is OK
2025-12-25T17:30:36.011 [DEBUG] [Thread-15598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:30:36.011 [DEBUG] [Thread-15598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:30:36.011 [DEBUG] [Thread-15598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:30:36.011 [DEBUG] [Thread-15598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:30:36.030 [INFO] [Thread-15598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:30:36.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:30:36.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:30:36.892 [DEBUG] [Thread-15598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:30:36.893 [DEBUG] [Thread-15598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:30:36.941 [DEBUG] [Thread-15598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:30:36.941 [DEBUG] [Thread-15598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:30:36.952 [DEBUG] [Thread-15598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:30:36.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:30:36.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:30:36.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-25T17:30:36.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:30:36.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:30:36.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:30:36.991 [DEBUG] [Thread-15598] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:30:38.726 [DEBUG] [Thread-15600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:30:53.784 [DEBUG] [Thread-15601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:02.660 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:02.662 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:07.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:31:07.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:31:07.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-25T17:31:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 30, 44), 28.22, 15.47, 0.0, 32.96, 25.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:31:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:30:44
2025-12-25T17:31:07.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:31:08.028 [DEBUG] [Thread-15602] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e20
2025-12-25T17:31:08.029 [DEBUG] [Thread-15602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:31:08.050 [DEBUG] [Thread-15602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:31:08.050 [INFO] [Thread-15602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] client lang: <none>
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] server lang: <none>
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] kex follows: False
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] Compression: none
2025-12-25T17:31:08.054 [DEBUG] [Thread-15602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:31:08.070 [DEBUG] [Thread-15602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:31:08.071 [DEBUG] [Thread-15602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:31:08.071 [DEBUG] [Thread-15602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:31:08.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:31:08.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:31:08.072 [DEBUG] [Thread-15602] [transport.py] [_log()] userauth is OK
2025-12-25T17:31:08.072 [DEBUG] [Thread-15602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:31:08.072 [DEBUG] [Thread-15602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:31:08.072 [DEBUG] [Thread-15602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:31:08.072 [DEBUG] [Thread-15602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:31:08.081 [INFO] [Thread-15602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:31:08.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:31:08.814 [DEBUG] [Thread-15604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:08.898 [DEBUG] [Thread-15602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:31:08.898 [DEBUG] [Thread-15602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:31:08.898 [DEBUG] [Thread-15602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:31:08.940 [DEBUG] [Thread-15602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:31:08.940 [DEBUG] [Thread-15602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:31:08.943 [DEBUG] [Thread-15602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:31:08.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:31:08.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:31:08.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:31:08.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:31:08.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:31:08.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:31:08.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:31:08.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:31:08.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:31:08.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.646241 -999.00  +24.60  29.13     22   +1.80 1 1 1 1 1   887    0 22.89 -27.59 ----- 31.1 29.1 286.8 44.9 27.6 -28.3 27.8 -27.6 28.6 -25.0 28.6 -26.1
2025-12-25T17:31:08.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:31:08.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:31:08.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.646241
2025-12-25T17:31:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:31:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:31:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:31:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:31:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:31:08.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:30:44', tmtdew=28.22, humidity=15.47, cloud=0.0, wind=32.96, temperature=25.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:30:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:31:08.960 [DEBUG] [Thread-15602] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:31:09.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-25T17:31:09.046 [DEBUG] [Thread-15606] [transport.py] [_log()] starting thread (client mode): 0xb6bb5360
2025-12-25T17:31:09.047 [DEBUG] [Thread-15606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:31:09.061 [DEBUG] [Thread-15606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:31:09.061 [INFO] [Thread-15606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:31:09.068 [DEBUG] [Thread-15606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:31:09.068 [DEBUG] [Thread-15606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:31:09.068 [DEBUG] [Thread-15606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] client lang: <none>
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] server lang: <none>
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] kex follows: False
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] Compression: none
2025-12-25T17:31:09.069 [DEBUG] [Thread-15606] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:31:09.124 [DEBUG] [Thread-15606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:31:09.125 [DEBUG] [Thread-15606] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:31:09.125 [DEBUG] [Thread-15606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:31:09.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:31:09.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:31:09.182 [DEBUG] [Thread-15606] [transport.py] [_log()] userauth is OK
2025-12-25T17:31:09.182 [DEBUG] [Thread-15606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:31:09.182 [DEBUG] [Thread-15606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:31:09.182 [DEBUG] [Thread-15606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:31:09.182 [DEBUG] [Thread-15606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:31:09.196 [INFO] [Thread-15606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:31:09.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-25T17:31:09.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:31:09.989 [DEBUG] [Thread-15606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:31:09.989 [DEBUG] [Thread-15606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:31:10.037 [DEBUG] [Thread-15606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:31:10.037 [DEBUG] [Thread-15606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:31:10.047 [DEBUG] [Thread-15606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:31:10.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:31:10.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-25T17:31:10.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-25T17:31:10.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:31:10.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:31:10.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:31:10.083 [DEBUG] [Thread-15606] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:31:16.336 [DEBUG] [Thread-15608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:23.846 [DEBUG] [Thread-15609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:38.907 [DEBUG] [Thread-15610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:31:40.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:31:40.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:31:40.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-25T17:31:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 31, 16), 28.01, 15.65, 0.0, 36.15, 25.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:31:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:31:16
2025-12-25T17:31:40.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:31:41.087 [DEBUG] [Thread-15611] [transport.py] [_log()] starting thread (client mode): 0xb6b4f6d0
2025-12-25T17:31:41.087 [DEBUG] [Thread-15611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:31:41.107 [DEBUG] [Thread-15611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:31:41.107 [INFO] [Thread-15611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:31:41.110 [DEBUG] [Thread-15611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] client lang: <none>
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] server lang: <none>
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] kex follows: False
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:31:41.111 [DEBUG] [Thread-15611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:31:41.112 [DEBUG] [Thread-15611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:31:41.112 [DEBUG] [Thread-15611] [transport.py] [_log()] Compression: none
2025-12-25T17:31:41.112 [DEBUG] [Thread-15611] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:31:41.129 [DEBUG] [Thread-15611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:31:41.129 [DEBUG] [Thread-15611] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:31:41.130 [DEBUG] [Thread-15611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:31:41.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:31:41.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:31:41.173 [DEBUG] [Thread-15611] [transport.py] [_log()] userauth is OK
2025-12-25T17:31:41.173 [DEBUG] [Thread-15611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:31:41.173 [DEBUG] [Thread-15611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:31:41.173 [DEBUG] [Thread-15611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:31:41.173 [DEBUG] [Thread-15611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:31:41.194 [INFO] [Thread-15611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:31:41.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:31:41.832 [DEBUG] [Thread-15611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:31:41.832 [DEBUG] [Thread-15611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:31:41.833 [DEBUG] [Thread-15611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:31:41.873 [DEBUG] [Thread-15611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:31:41.873 [DEBUG] [Thread-15611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:31:41.877 [DEBUG] [Thread-15611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:31:41.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:31:41.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:31:41.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:31:41.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:31:41.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:31:41.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:31:41.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:31:41.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:31:41.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:31:41.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.646589 -999.00  +25.00  31.14     22   +1.90 1 1 2 1 1   887    0 22.53 -34.21 ----- 34.2 31.1 292.8 36.1 27.6 -27.1 27.9 -27.9 28.6 -24.9 28.8 -25.7
2025-12-25T17:31:41.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:31:41.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:31:41.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.646589
2025-12-25T17:31:41.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:31:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:31:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:31:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:31:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:31:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:31:16', tmtdew=28.01, humidity=15.65, cloud=0.0, wind=36.15, temperature=25.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:31:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:31:41.903 [DEBUG] [Thread-15611] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:31:41.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-25T17:31:41.997 [DEBUG] [Thread-15614] [transport.py] [_log()] starting thread (client mode): 0xb6b4fc40
2025-12-25T17:31:41.997 [DEBUG] [Thread-15614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:31:42.012 [DEBUG] [Thread-15614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:31:42.012 [INFO] [Thread-15614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:31:42.019 [DEBUG] [Thread-15614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] client lang: <none>
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] server lang: <none>
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] kex follows: False
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:31:42.020 [DEBUG] [Thread-15614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:31:42.021 [DEBUG] [Thread-15614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:31:42.021 [DEBUG] [Thread-15614] [transport.py] [_log()] Compression: none
2025-12-25T17:31:42.021 [DEBUG] [Thread-15614] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:31:42.079 [DEBUG] [Thread-15614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:31:42.080 [DEBUG] [Thread-15614] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:31:42.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:31:42.081 [DEBUG] [Thread-15614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:31:42.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:31:42.135 [DEBUG] [Thread-15614] [transport.py] [_log()] userauth is OK
2025-12-25T17:31:42.135 [DEBUG] [Thread-15614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:31:42.135 [DEBUG] [Thread-15614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:31:42.135 [DEBUG] [Thread-15614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:31:42.136 [DEBUG] [Thread-15614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:31:42.154 [INFO] [Thread-15614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:31:42.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-25T17:31:42.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:31:42.988 [DEBUG] [Thread-15614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:31:42.988 [DEBUG] [Thread-15614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:31:43.036 [DEBUG] [Thread-15614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:31:43.036 [DEBUG] [Thread-15614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:31:43.044 [DEBUG] [Thread-15614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:31:43.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:31:43.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-25T17:31:43.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:31:43.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:31:43.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:31:43.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:31:43.076 [DEBUG] [Thread-15614] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:31:53.939 [DEBUG] [Thread-15616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:02.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:02.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:08.999 [DEBUG] [Thread-15617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:13.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:32:13.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:32:13.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-25T17:32:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 31, 48), 27.62, 16.0, 0.0, 33.19, 25.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:32:13.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:31:48
2025-12-25T17:32:13.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:32:14.043 [DEBUG] [Thread-15618] [transport.py] [_log()] starting thread (client mode): 0xb9591f00
2025-12-25T17:32:14.043 [DEBUG] [Thread-15618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:32:14.054 [DEBUG] [Thread-15618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:32:14.054 [INFO] [Thread-15618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] client lang: <none>
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] server lang: <none>
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] kex follows: False
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:32:14.056 [DEBUG] [Thread-15618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:32:14.057 [DEBUG] [Thread-15618] [transport.py] [_log()] Compression: none
2025-12-25T17:32:14.057 [DEBUG] [Thread-15618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:32:14.069 [DEBUG] [Thread-15618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:32:14.069 [DEBUG] [Thread-15618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:32:14.069 [DEBUG] [Thread-15618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:32:14.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:32:14.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:32:14.070 [DEBUG] [Thread-15618] [transport.py] [_log()] userauth is OK
2025-12-25T17:32:14.070 [DEBUG] [Thread-15618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:32:14.070 [DEBUG] [Thread-15618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:32:14.071 [DEBUG] [Thread-15618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:32:14.071 [DEBUG] [Thread-15618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:32:14.081 [INFO] [Thread-15618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:32:14.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:32:14.918 [DEBUG] [Thread-15618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:32:14.919 [DEBUG] [Thread-15618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:32:14.919 [DEBUG] [Thread-15618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:32:14.959 [DEBUG] [Thread-15618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:32:14.959 [DEBUG] [Thread-15618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:32:14.963 [DEBUG] [Thread-15618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:32:14.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:32:14.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:32:14.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:32:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:32:14.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:32:14.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:32:14.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:32:14.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:32:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:32:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.646935 -999.00  +25.20  32.21     21   +1.90 1 1 2 1 1   887    0 23.36 -41.01 ----- 32.2 32.2 291.0 37.0 27.6 -27.5 28.0 -27.3 28.6 -25.3 28.7 -25.7
2025-12-25T17:32:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:32:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:32:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.646935
2025-12-25T17:32:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:32:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:32:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:32:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:32:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:32:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:31:48', tmtdew=27.62, humidity=16.0, cloud=0.0, wind=33.19, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:31:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:32:14.989 [DEBUG] [Thread-15618] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:32:15.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-25T17:32:15.081 [DEBUG] [Thread-15621] [transport.py] [_log()] starting thread (client mode): 0xb6b4f8b0
2025-12-25T17:32:15.082 [DEBUG] [Thread-15621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:32:15.099 [DEBUG] [Thread-15621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:32:15.100 [INFO] [Thread-15621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:32:15.107 [DEBUG] [Thread-15621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:32:15.107 [DEBUG] [Thread-15621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:32:15.107 [DEBUG] [Thread-15621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:32:15.107 [DEBUG] [Thread-15621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] client lang: <none>
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] server lang: <none>
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] kex follows: False
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] Compression: none
2025-12-25T17:32:15.108 [DEBUG] [Thread-15621] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:32:15.167 [DEBUG] [Thread-15621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:32:15.167 [DEBUG] [Thread-15621] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:32:15.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:32:15.169 [DEBUG] [Thread-15621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:32:15.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:32:15.223 [DEBUG] [Thread-15621] [transport.py] [_log()] userauth is OK
2025-12-25T17:32:15.223 [DEBUG] [Thread-15621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:32:15.223 [DEBUG] [Thread-15621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:32:15.223 [DEBUG] [Thread-15621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:32:15.223 [DEBUG] [Thread-15621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:32:15.242 [INFO] [Thread-15621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:32:15.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:32:15.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:32:16.068 [DEBUG] [Thread-15621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:32:16.068 [DEBUG] [Thread-15621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:32:16.116 [DEBUG] [Thread-15621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:32:16.117 [DEBUG] [Thread-15621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:32:16.127 [DEBUG] [Thread-15621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:32:16.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:32:16.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-25T17:32:16.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-25T17:32:16.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:32:16.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:32:16.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:32:16.163 [DEBUG] [Thread-15621] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:32:16.368 [DEBUG] [Thread-15623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:24.031 [DEBUG] [Thread-15624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:39.083 [DEBUG] [Thread-15625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:32:46.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:32:46.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:32:46.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-25T17:32:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 32, 20), 27.49, 16.16, 0.0, 36.01, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:32:46.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:32:20
2025-12-25T17:32:47.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:32:47.171 [DEBUG] [Thread-15626] [transport.py] [_log()] starting thread (client mode): 0xb95b2e90
2025-12-25T17:32:47.171 [DEBUG] [Thread-15626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:32:47.193 [DEBUG] [Thread-15626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:32:47.194 [INFO] [Thread-15626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:32:47.197 [DEBUG] [Thread-15626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:32:47.197 [DEBUG] [Thread-15626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] client lang: <none>
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] server lang: <none>
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] kex follows: False
2025-12-25T17:32:47.198 [DEBUG] [Thread-15626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:32:47.199 [DEBUG] [Thread-15626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:32:47.199 [DEBUG] [Thread-15626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:32:47.199 [DEBUG] [Thread-15626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:32:47.199 [DEBUG] [Thread-15626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:32:47.199 [DEBUG] [Thread-15626] [transport.py] [_log()] Compression: none
2025-12-25T17:32:47.199 [DEBUG] [Thread-15626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:32:47.220 [DEBUG] [Thread-15626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:32:47.221 [DEBUG] [Thread-15626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:32:47.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:32:47.222 [DEBUG] [Thread-15626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:32:47.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:32:47.225 [DEBUG] [Thread-15626] [transport.py] [_log()] userauth is OK
2025-12-25T17:32:47.225 [DEBUG] [Thread-15626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:32:47.225 [DEBUG] [Thread-15626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:32:47.225 [DEBUG] [Thread-15626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:32:47.225 [DEBUG] [Thread-15626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:32:47.254 [INFO] [Thread-15626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:32:47.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:32:47.920 [DEBUG] [Thread-15626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:32:47.920 [DEBUG] [Thread-15626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:32:47.921 [DEBUG] [Thread-15626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:32:47.961 [DEBUG] [Thread-15626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:32:47.961 [DEBUG] [Thread-15626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:32:47.963 [DEBUG] [Thread-15626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:32:47.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:32:47.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:32:47.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:32:47.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:32:47.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:32:47.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:32:47.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.647283 -999.00  +25.40  25.73     21   +1.70 1 1 1 1 1   887    0 22.17 -44.31 ----- 35.1 25.7 316.8 41.0 27.7 -27.7 28.0 -26.7 28.7 -24.2 28.8 -26.1
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.647283
2025-12-25T17:32:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:32:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:32:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:32:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:32:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:32:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:32:20', tmtdew=27.49, humidity=16.16, cloud=0.0, wind=36.01, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:32:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:32:47.982 [DEBUG] [Thread-15626] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:32:48.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-25T17:32:48.063 [DEBUG] [Thread-15629] [transport.py] [_log()] starting thread (client mode): 0xb6bc2c20
2025-12-25T17:32:48.063 [DEBUG] [Thread-15629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:32:48.079 [DEBUG] [Thread-15629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:32:48.079 [INFO] [Thread-15629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] client lang: <none>
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] server lang: <none>
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] kex follows: False
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] Compression: none
2025-12-25T17:32:48.086 [DEBUG] [Thread-15629] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:32:48.145 [DEBUG] [Thread-15629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:32:48.145 [DEBUG] [Thread-15629] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:32:48.146 [DEBUG] [Thread-15629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:32:48.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:32:48.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:32:48.203 [DEBUG] [Thread-15629] [transport.py] [_log()] userauth is OK
2025-12-25T17:32:48.203 [DEBUG] [Thread-15629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:32:48.204 [DEBUG] [Thread-15629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:32:48.204 [DEBUG] [Thread-15629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:32:48.204 [DEBUG] [Thread-15629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:32:48.223 [INFO] [Thread-15629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:32:48.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-25T17:32:48.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:32:49.083 [DEBUG] [Thread-15629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:32:49.083 [DEBUG] [Thread-15629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:32:49.133 [DEBUG] [Thread-15629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:32:49.133 [DEBUG] [Thread-15629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:32:49.142 [DEBUG] [Thread-15629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:32:49.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:32:49.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-25T17:32:49.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:32:49.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:32:49.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:32:49.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:32:49.177 [DEBUG] [Thread-15629] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:32:54.115 [DEBUG] [Thread-15631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:02.954 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:02.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:09.152 [DEBUG] [Thread-15632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:16.402 [DEBUG] [Thread-15633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:19.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:33:19.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:33:19.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-25T17:33:19.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 32, 52), 27.95, 15.63, 0.0, 42.68, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:33:19.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:32:52
2025-12-25T17:33:20.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:33:20.157 [DEBUG] [Thread-15634] [transport.py] [_log()] starting thread (client mode): 0xb9591240
2025-12-25T17:33:20.157 [DEBUG] [Thread-15634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:33:20.177 [DEBUG] [Thread-15634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:33:20.177 [INFO] [Thread-15634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:33:20.180 [DEBUG] [Thread-15634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] client lang: <none>
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] server lang: <none>
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] kex follows: False
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] Compression: none
2025-12-25T17:33:20.181 [DEBUG] [Thread-15634] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:33:20.198 [DEBUG] [Thread-15634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:33:20.198 [DEBUG] [Thread-15634] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:33:20.199 [DEBUG] [Thread-15634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:33:20.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:33:20.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:33:20.201 [DEBUG] [Thread-15634] [transport.py] [_log()] userauth is OK
2025-12-25T17:33:20.201 [DEBUG] [Thread-15634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:33:20.201 [DEBUG] [Thread-15634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:33:20.201 [DEBUG] [Thread-15634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:33:20.202 [DEBUG] [Thread-15634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:33:20.220 [INFO] [Thread-15634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:33:20.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:33:21.032 [DEBUG] [Thread-15634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:33:21.032 [DEBUG] [Thread-15634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:33:21.032 [DEBUG] [Thread-15634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:33:21.072 [DEBUG] [Thread-15634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:33:21.073 [DEBUG] [Thread-15634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:33:21.075 [DEBUG] [Thread-15634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:33:21.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:33:21.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:33:21.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:33:21.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:33:21.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:33:21.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:33:21.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:33:21.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:33:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:33:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.647630 -999.00  +25.60  39.72     21   +1.80 1 1 2 1 1   887    0 22.36 -49.74 ----- 38.5 39.7 309.8 49.7 27.9 -27.1 28.1 -28.0 28.9 -24.9 29.0 -25.6
2025-12-25T17:33:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:33:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:33:21.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.647630
2025-12-25T17:33:21.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:33:21.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:33:21.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:33:21.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:33:21.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:33:21.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:32:52', tmtdew=27.95, humidity=15.63, cloud=0.0, wind=42.68, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:32:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:33:21.102 [DEBUG] [Thread-15634] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:33:21.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-25T17:33:21.191 [DEBUG] [Thread-15637] [transport.py] [_log()] starting thread (client mode): 0xb95b1060
2025-12-25T17:33:21.191 [DEBUG] [Thread-15637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:33:21.206 [DEBUG] [Thread-15637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:33:21.206 [INFO] [Thread-15637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:33:21.213 [DEBUG] [Thread-15637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] client lang: <none>
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] server lang: <none>
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] kex follows: False
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] Compression: none
2025-12-25T17:33:21.214 [DEBUG] [Thread-15637] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:33:21.274 [DEBUG] [Thread-15637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:33:21.275 [DEBUG] [Thread-15637] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:33:21.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:33:21.276 [DEBUG] [Thread-15637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:33:21.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:33:21.330 [DEBUG] [Thread-15637] [transport.py] [_log()] userauth is OK
2025-12-25T17:33:21.330 [DEBUG] [Thread-15637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:33:21.330 [DEBUG] [Thread-15637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:33:21.331 [DEBUG] [Thread-15637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:33:21.331 [DEBUG] [Thread-15637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:33:21.349 [INFO] [Thread-15637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:33:21.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-25T17:33:21.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:33:22.234 [DEBUG] [Thread-15637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:33:22.234 [DEBUG] [Thread-15637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:33:22.282 [DEBUG] [Thread-15637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:33:22.282 [DEBUG] [Thread-15637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:33:22.291 [DEBUG] [Thread-15637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:33:22.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:33:22.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-25T17:33:22.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-25T17:33:22.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:33:22.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:33:22.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:33:22.329 [DEBUG] [Thread-15637] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:33:24.189 [DEBUG] [Thread-15639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:39.234 [DEBUG] [Thread-15640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:33:52.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:33:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:33:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 33, 24), 27.93, 15.66, 0.0, 42.13, 25.58, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:33:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:33:24
2025-12-25T17:33:53.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:33:53.335 [DEBUG] [Thread-15641] [transport.py] [_log()] starting thread (client mode): 0xb95b3250
2025-12-25T17:33:53.335 [DEBUG] [Thread-15641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:33:53.355 [DEBUG] [Thread-15641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:33:53.355 [INFO] [Thread-15641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:33:53.358 [DEBUG] [Thread-15641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:33:53.358 [DEBUG] [Thread-15641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:33:53.358 [DEBUG] [Thread-15641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:33:53.358 [DEBUG] [Thread-15641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:53.358 [DEBUG] [Thread-15641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:53.358 [DEBUG] [Thread-15641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] client lang: <none>
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] server lang: <none>
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] kex follows: False
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] Compression: none
2025-12-25T17:33:53.359 [DEBUG] [Thread-15641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:33:53.376 [DEBUG] [Thread-15641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:33:53.377 [DEBUG] [Thread-15641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:33:53.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:33:53.378 [DEBUG] [Thread-15641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:33:53.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:33:53.380 [DEBUG] [Thread-15641] [transport.py] [_log()] userauth is OK
2025-12-25T17:33:53.380 [DEBUG] [Thread-15641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:33:53.380 [DEBUG] [Thread-15641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:33:53.380 [DEBUG] [Thread-15641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:33:53.380 [DEBUG] [Thread-15641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:33:53.399 [INFO] [Thread-15641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:33:53.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:33:54.070 [DEBUG] [Thread-15641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:33:54.070 [DEBUG] [Thread-15641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:33:54.071 [DEBUG] [Thread-15641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:33:54.111 [DEBUG] [Thread-15641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:33:54.111 [DEBUG] [Thread-15641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:33:54.114 [DEBUG] [Thread-15641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:33:54.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:33:54.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:33:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:33:54.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:33:54.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:33:54.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:33:54.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:33:54.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:33:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:33:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.647977 -999.00  +25.10  44.93     21   +1.60 1 1 2 1 1   887    0 22.12 -52.05 ----- 41.9 44.9 294.0 54.5 27.8 -28.4 28.0 -28.5 28.7 -25.8 29.0 -27.6
2025-12-25T17:33:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:33:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:33:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.647977
2025-12-25T17:33:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:33:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:33:54.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:33:54.139 [DEBUG] [Thread-15641] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:33:54.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:33:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:33:54.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:33:24', tmtdew=27.93, humidity=15.66, cloud=0.0, wind=42.13, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:33:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:33:54.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-25T17:33:54.232 [DEBUG] [Thread-15644] [transport.py] [_log()] starting thread (client mode): 0xb95b2110
2025-12-25T17:33:54.233 [DEBUG] [Thread-15644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:33:54.248 [DEBUG] [Thread-15644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:33:54.248 [INFO] [Thread-15644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:33:54.256 [DEBUG] [Thread-15644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] client lang: <none>
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] server lang: <none>
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] kex follows: False
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] Compression: none
2025-12-25T17:33:54.257 [DEBUG] [Thread-15644] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:33:54.266 [DEBUG] [Thread-15646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:33:54.315 [DEBUG] [Thread-15644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:33:54.315 [DEBUG] [Thread-15644] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:33:54.316 [DEBUG] [Thread-15644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:33:54.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:33:54.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:33:54.371 [DEBUG] [Thread-15644] [transport.py] [_log()] userauth is OK
2025-12-25T17:33:54.372 [DEBUG] [Thread-15644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:33:54.372 [DEBUG] [Thread-15644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:33:54.372 [DEBUG] [Thread-15644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:33:54.372 [DEBUG] [Thread-15644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:33:54.394 [INFO] [Thread-15644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:33:54.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-25T17:33:54.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:33:55.237 [DEBUG] [Thread-15644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:33:55.238 [DEBUG] [Thread-15644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:33:55.286 [DEBUG] [Thread-15644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:33:55.286 [DEBUG] [Thread-15644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:33:55.295 [DEBUG] [Thread-15644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:33:55.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:33:55.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:33:55.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:33:55.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:33:55.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:33:55.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:33:55.332 [DEBUG] [Thread-15644] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:34:03.106 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:03.107 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:09.318 [DEBUG] [Thread-15647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:16.454 [DEBUG] [Thread-15648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:24.357 [DEBUG] [Thread-15649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:25.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:34:25.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:34:25.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-25T17:34:26.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 33, 56), 27.98, 15.53, 0.0, 42.66, 25.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:34:26.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:33:56
2025-12-25T17:34:26.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:34:26.324 [DEBUG] [Thread-15650] [transport.py] [_log()] starting thread (client mode): 0xb9559450
2025-12-25T17:34:26.324 [DEBUG] [Thread-15650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:34:26.345 [DEBUG] [Thread-15650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:34:26.345 [INFO] [Thread-15650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] client lang: <none>
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] server lang: <none>
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] kex follows: False
2025-12-25T17:34:26.349 [DEBUG] [Thread-15650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:34:26.350 [DEBUG] [Thread-15650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:34:26.350 [DEBUG] [Thread-15650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:34:26.350 [DEBUG] [Thread-15650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:34:26.350 [DEBUG] [Thread-15650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:34:26.350 [DEBUG] [Thread-15650] [transport.py] [_log()] Compression: none
2025-12-25T17:34:26.350 [DEBUG] [Thread-15650] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:34:26.367 [DEBUG] [Thread-15650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:34:26.368 [DEBUG] [Thread-15650] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:34:26.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:34:26.369 [DEBUG] [Thread-15650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:34:26.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:34:26.371 [DEBUG] [Thread-15650] [transport.py] [_log()] userauth is OK
2025-12-25T17:34:26.371 [DEBUG] [Thread-15650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:34:26.371 [DEBUG] [Thread-15650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:34:26.371 [DEBUG] [Thread-15650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:34:26.371 [DEBUG] [Thread-15650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:34:26.396 [INFO] [Thread-15650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:34:26.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:34:27.207 [DEBUG] [Thread-15650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:34:27.207 [DEBUG] [Thread-15650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:34:27.208 [DEBUG] [Thread-15650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:34:27.248 [DEBUG] [Thread-15650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:34:27.248 [DEBUG] [Thread-15650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:34:27.256 [DEBUG] [Thread-15650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:34:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:34:27.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:34:27.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:34:27.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:34:27.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:34:27.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:34:27.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:34:27.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.648325 -999.00  +25.00  48.59     21   +1.50 1 1 2 1 1   887    0 22.04 -59.38 ----- 40.8 48.6 300.8 54.3 27.7 -28.2 27.9 -28.3 28.7 -27.1 28.9 -26.7
2025-12-25T17:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.648325
2025-12-25T17:34:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:34:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:34:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:34:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:34:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:34:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:33:56', tmtdew=27.98, humidity=15.53, cloud=0.0, wind=42.66, temperature=25.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:33:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:34:27.276 [DEBUG] [Thread-15650] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:34:27.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-25T17:34:27.368 [DEBUG] [Thread-15653] [transport.py] [_log()] starting thread (client mode): 0xb955b0d0
2025-12-25T17:34:27.369 [DEBUG] [Thread-15653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:34:27.383 [DEBUG] [Thread-15653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:34:27.384 [INFO] [Thread-15653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:34:27.391 [DEBUG] [Thread-15653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:34:27.391 [DEBUG] [Thread-15653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:34:27.392 [DEBUG] [Thread-15653] [transport.py] [_log()] client lang: <none>
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] server lang: <none>
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] kex follows: False
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] Compression: none
2025-12-25T17:34:27.393 [DEBUG] [Thread-15653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:34:27.452 [DEBUG] [Thread-15653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:34:27.452 [DEBUG] [Thread-15653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:34:27.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:34:27.453 [DEBUG] [Thread-15653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:34:27.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:34:27.514 [DEBUG] [Thread-15653] [transport.py] [_log()] userauth is OK
2025-12-25T17:34:27.515 [DEBUG] [Thread-15653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:34:27.515 [DEBUG] [Thread-15653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:34:27.515 [DEBUG] [Thread-15653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:34:27.515 [DEBUG] [Thread-15653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:34:27.533 [INFO] [Thread-15653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:34:27.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-25T17:34:27.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:34:28.339 [DEBUG] [Thread-15653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:34:28.339 [DEBUG] [Thread-15653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:34:28.387 [DEBUG] [Thread-15653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:34:28.387 [DEBUG] [Thread-15653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:34:28.396 [DEBUG] [Thread-15653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:34:28.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:34: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')
2025-12-25T17:34:28.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-25T17:34:28.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:34:28.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:34:28.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:34:28.433 [DEBUG] [Thread-15653] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:34:39.396 [DEBUG] [Thread-15655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:54.447 [DEBUG] [Thread-15656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:34:58.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:34:58.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:34:58.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-25T17:34:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 34, 28), 27.99, 15.5, 0.0, 36.74, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:34:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:34:28
2025-12-25T17:34:59.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:34:59.447 [DEBUG] [Thread-15657] [transport.py] [_log()] starting thread (client mode): 0xb6b613c0
2025-12-25T17:34:59.448 [DEBUG] [Thread-15657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:34:59.468 [DEBUG] [Thread-15657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:34:59.468 [INFO] [Thread-15657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:34:59.471 [DEBUG] [Thread-15657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:34:59.471 [DEBUG] [Thread-15657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:34:59.471 [DEBUG] [Thread-15657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:34:59.471 [DEBUG] [Thread-15657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:34:59.471 [DEBUG] [Thread-15657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:34:59.471 [DEBUG] [Thread-15657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] client lang: <none>
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] server lang: <none>
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] kex follows: False
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] Compression: none
2025-12-25T17:34:59.472 [DEBUG] [Thread-15657] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:34:59.487 [DEBUG] [Thread-15657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:34:59.487 [DEBUG] [Thread-15657] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:34:59.488 [DEBUG] [Thread-15657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:34:59.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:34:59.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:34:59.489 [DEBUG] [Thread-15657] [transport.py] [_log()] userauth is OK
2025-12-25T17:34:59.489 [DEBUG] [Thread-15657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:34:59.489 [DEBUG] [Thread-15657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:34:59.489 [DEBUG] [Thread-15657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:34:59.489 [DEBUG] [Thread-15657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:34:59.508 [INFO] [Thread-15657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:34:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:35:00.162 [DEBUG] [Thread-15657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:35:00.162 [DEBUG] [Thread-15657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:35:00.162 [DEBUG] [Thread-15657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:35:00.204 [DEBUG] [Thread-15657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:35:00.204 [DEBUG] [Thread-15657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:35:00.206 [DEBUG] [Thread-15657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:35:00.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:35:00.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:35:00.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:35:00.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:35:00.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:35:00.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:35:00.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.649019 -999.00  +24.60  32.36     21   +1.30 1 1 2 1 1   887    0 21.94 -68.79 ----- 33.1 32.4 297.2 40.1 27.6 -28.2 27.9 -28.2 28.4 -27.5 28.8 -26.9
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.649019
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:35:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:34:28', tmtdew=27.99, humidity=15.5, cloud=0.0, wind=36.74, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:34:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:35:00.225 [DEBUG] [Thread-15657] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:35:00.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-25T17:35:03.245 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:35:03.246 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:35:09.477 [DEBUG] [Thread-15660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:35:16.487 [DEBUG] [Thread-15661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:35:24.522 [DEBUG] [Thread-15662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:35:39.556 [DEBUG] [Thread-15663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:35:54.588 [DEBUG] [Thread-15664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:03.385 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:03.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:09.624 [DEBUG] [Thread-15665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:16.515 [DEBUG] [Thread-15666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:24.661 [DEBUG] [Thread-15667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:39.698 [DEBUG] [Thread-15668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:36:54.730 [DEBUG] [Thread-15669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:03.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:03.535 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:09.760 [DEBUG] [Thread-15670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:14.965 [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-25T17:37:16.576 [DEBUG] [Thread-15671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:24.794 [DEBUG] [Thread-15672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:39.829 [DEBUG] [Thread-15673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:37:44.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:37:44.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:37:44.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-25T17:37:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 37, 41), 29.04, 14.3, 0.0, 46.51, 25.47, 0, 0, 0, 2, 1, 0),)
2025-12-25T17:37:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:37:41
2025-12-25T17:37:45.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:37:45.989 [DEBUG] [Thread-15674] [transport.py] [_log()] starting thread (client mode): 0xb955a650
2025-12-25T17:37:45.989 [DEBUG] [Thread-15674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:37:46.012 [DEBUG] [Thread-15674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:37:46.013 [INFO] [Thread-15674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] client lang: <none>
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] server lang: <none>
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] kex follows: False
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:37:46.017 [DEBUG] [Thread-15674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:37:46.018 [DEBUG] [Thread-15674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:37:46.018 [DEBUG] [Thread-15674] [transport.py] [_log()] Compression: none
2025-12-25T17:37:46.018 [DEBUG] [Thread-15674] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:37:46.034 [DEBUG] [Thread-15674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:37:46.034 [DEBUG] [Thread-15674] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:37:46.035 [DEBUG] [Thread-15674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:37:46.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:37:46.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:37:46.037 [DEBUG] [Thread-15674] [transport.py] [_log()] userauth is OK
2025-12-25T17:37:46.037 [DEBUG] [Thread-15674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:37:46.037 [DEBUG] [Thread-15674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:37:46.037 [DEBUG] [Thread-15674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:37:46.037 [DEBUG] [Thread-15674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:37:46.061 [INFO] [Thread-15674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:37:46.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:37:46.795 [DEBUG] [Thread-15674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:37:46.795 [DEBUG] [Thread-15674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:37:46.795 [DEBUG] [Thread-15674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:37:46.835 [DEBUG] [Thread-15674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:37:46.835 [DEBUG] [Thread-15674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:37:46.838 [DEBUG] [Thread-15674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:37:46.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:37:46.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:37:46.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:37:46.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:37:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:37:46.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:37:46.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:37:46.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:37:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:37:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.650755 -999.00  +24.70  37.53     20   +0.70 1 1 2 1 1   887    0 22.45 -55.50 ----- 47.8 37.5 295.8 55.8 27.4 -29.2 27.6 -28.3 28.2 -28.7 28.4 -27.2
2025-12-25T17:37:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:37:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:37:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.650755
2025-12-25T17:37:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:37:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:37:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:37:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:37:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:37:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:37:41', tmtdew=29.04, humidity=14.3, cloud=0.0, wind=46.51, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:37:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:37:46.856 [DEBUG] [Thread-15674] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:37:46.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-25T17:37:46.951 [DEBUG] [Thread-15677] [transport.py] [_log()] starting thread (client mode): 0xb9592b60
2025-12-25T17:37:46.951 [DEBUG] [Thread-15677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:37:46.965 [DEBUG] [Thread-15677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:37:46.966 [INFO] [Thread-15677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:37:46.973 [DEBUG] [Thread-15677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:37:46.973 [DEBUG] [Thread-15677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:37:46.973 [DEBUG] [Thread-15677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:37:46.973 [DEBUG] [Thread-15677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:37:46.973 [DEBUG] [Thread-15677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] client lang: <none>
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] server lang: <none>
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] kex follows: False
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:37:46.974 [DEBUG] [Thread-15677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:37:46.975 [DEBUG] [Thread-15677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:37:46.975 [DEBUG] [Thread-15677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:37:46.975 [DEBUG] [Thread-15677] [transport.py] [_log()] Compression: none
2025-12-25T17:37:46.975 [DEBUG] [Thread-15677] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:37:47.031 [DEBUG] [Thread-15677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:37:47.031 [DEBUG] [Thread-15677] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:37:47.032 [DEBUG] [Thread-15677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:37:47.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:37:47.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:37:47.087 [DEBUG] [Thread-15677] [transport.py] [_log()] userauth is OK
2025-12-25T17:37:47.087 [DEBUG] [Thread-15677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:37:47.087 [DEBUG] [Thread-15677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:37:47.087 [DEBUG] [Thread-15677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:37:47.087 [DEBUG] [Thread-15677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:37:47.110 [INFO] [Thread-15677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:37:47.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:37:47.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:37:47.931 [DEBUG] [Thread-15677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:37:47.931 [DEBUG] [Thread-15677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:37:47.979 [DEBUG] [Thread-15677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:37:47.979 [DEBUG] [Thread-15677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:37:47.988 [DEBUG] [Thread-15677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:37:47.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:37: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')
2025-12-25T17:37:48.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:37:48.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:37:48.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:37:48.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:37:48.019 [DEBUG] [Thread-15677] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:37:54.862 [DEBUG] [Thread-15679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:03.677 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:03.678 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:09.914 [DEBUG] [Thread-15680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:16.605 [DEBUG] [Thread-15681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:38:18.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:38:18.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-25T17:38:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 38, 13), 28.95, 14.37, 0.0, 45.96, 25.32, 0, 0, 0, 2, 1, 0),)
2025-12-25T17:38:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:38:13
2025-12-25T17:38:18.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:38:19.023 [DEBUG] [Thread-15682] [transport.py] [_log()] starting thread (client mode): 0xb6bc0f70
2025-12-25T17:38:19.023 [DEBUG] [Thread-15682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:38:19.043 [DEBUG] [Thread-15682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:38:19.043 [INFO] [Thread-15682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:38:19.046 [DEBUG] [Thread-15682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:38:19.046 [DEBUG] [Thread-15682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:38:19.046 [DEBUG] [Thread-15682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:38:19.046 [DEBUG] [Thread-15682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:19.046 [DEBUG] [Thread-15682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:19.046 [DEBUG] [Thread-15682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] client lang: <none>
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] server lang: <none>
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] kex follows: False
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] Compression: none
2025-12-25T17:38:19.047 [DEBUG] [Thread-15682] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:38:19.063 [DEBUG] [Thread-15682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:38:19.064 [DEBUG] [Thread-15682] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:38:19.065 [DEBUG] [Thread-15682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:38:19.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:38:19.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:38:19.068 [DEBUG] [Thread-15682] [transport.py] [_log()] userauth is OK
2025-12-25T17:38:19.068 [DEBUG] [Thread-15682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:38:19.068 [DEBUG] [Thread-15682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:38:19.068 [DEBUG] [Thread-15682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:38:19.069 [DEBUG] [Thread-15682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:38:19.103 [INFO] [Thread-15682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:38:19.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:38:19.725 [DEBUG] [Thread-15682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:38:19.725 [DEBUG] [Thread-15682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:38:19.726 [DEBUG] [Thread-15682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:38:19.766 [DEBUG] [Thread-15682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:38:19.766 [DEBUG] [Thread-15682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:38:19.770 [DEBUG] [Thread-15682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:38:19.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:38:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:38:19.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:38:19.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:38:19.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:38:19.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:38:19.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:38:19.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:38:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:38:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.651102 -999.00  +24.50  45.24     20   +0.40 1 1 2 1 1   887    0 22.30 -50.46 ----- 45.3 45.2 297.2 56.8 27.3 -28.9 27.6 -28.4 28.2 -27.5 28.4 -26.6
2025-12-25T17:38:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:38:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:38:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.651102
2025-12-25T17:38:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:38:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:38:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:38:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:38:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:38:19.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:38:13', tmtdew=28.95, humidity=14.37, cloud=0.0, wind=45.96, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:37:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:38:19.797 [DEBUG] [Thread-15682] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:38:19.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:38:19.890 [DEBUG] [Thread-15685] [transport.py] [_log()] starting thread (client mode): 0xb6bb5f90
2025-12-25T17:38:19.891 [DEBUG] [Thread-15685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:38:19.905 [DEBUG] [Thread-15685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:38:19.905 [INFO] [Thread-15685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:38:19.913 [DEBUG] [Thread-15685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:38:19.913 [DEBUG] [Thread-15685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:38:19.913 [DEBUG] [Thread-15685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] client lang: <none>
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] server lang: <none>
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] kex follows: False
2025-12-25T17:38:19.914 [DEBUG] [Thread-15685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:38:19.915 [DEBUG] [Thread-15685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:38:19.915 [DEBUG] [Thread-15685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:38:19.915 [DEBUG] [Thread-15685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:38:19.915 [DEBUG] [Thread-15685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:38:19.915 [DEBUG] [Thread-15685] [transport.py] [_log()] Compression: none
2025-12-25T17:38:19.915 [DEBUG] [Thread-15685] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:38:19.972 [DEBUG] [Thread-15685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:38:19.972 [DEBUG] [Thread-15685] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:38:19.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:38:19.974 [DEBUG] [Thread-15685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:38:19.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:38:20.031 [DEBUG] [Thread-15685] [transport.py] [_log()] userauth is OK
2025-12-25T17:38:20.032 [DEBUG] [Thread-15685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:38:20.032 [DEBUG] [Thread-15685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:38:20.032 [DEBUG] [Thread-15685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:38:20.032 [DEBUG] [Thread-15685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:38:20.051 [INFO] [Thread-15685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:38:20.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-25T17:38:20.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:38:20.885 [DEBUG] [Thread-15685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:38:20.885 [DEBUG] [Thread-15685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:38:20.933 [DEBUG] [Thread-15685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:38:20.933 [DEBUG] [Thread-15685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:38:20.942 [DEBUG] [Thread-15685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:38:20.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:38:20.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:38:20.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:38:20.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:38:20.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:38:20.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:38:20.976 [DEBUG] [Thread-15685] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:38:24.949 [DEBUG] [Thread-15687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:40.001 [DEBUG] [Thread-15688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:38:50.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:38:50.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:38: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-25T17:38:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 38, 45), 29.28, 14.28, 0.0, 43.21, 25.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:38:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:38:45
2025-12-25T17:38:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:38:51.995 [DEBUG] [Thread-15689] [transport.py] [_log()] starting thread (client mode): 0xb6bc29e0
2025-12-25T17:38:51.995 [DEBUG] [Thread-15689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:38:52.019 [DEBUG] [Thread-15689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:38:52.019 [INFO] [Thread-15689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] client lang: <none>
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] server lang: <none>
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] kex follows: False
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] Compression: none
2025-12-25T17:38:52.022 [DEBUG] [Thread-15689] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:38:52.030 [DEBUG] [Thread-15689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:38:52.030 [DEBUG] [Thread-15689] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:38:52.030 [DEBUG] [Thread-15689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:38:52.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:38:52.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:38:52.031 [DEBUG] [Thread-15689] [transport.py] [_log()] userauth is OK
2025-12-25T17:38:52.031 [DEBUG] [Thread-15689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:38:52.031 [DEBUG] [Thread-15689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:38:52.031 [DEBUG] [Thread-15689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:38:52.031 [DEBUG] [Thread-15689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:38:52.040 [INFO] [Thread-15689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:38:52.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:38:52.735 [DEBUG] [Thread-15689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:38:52.735 [DEBUG] [Thread-15689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:38:52.735 [DEBUG] [Thread-15689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:38:52.777 [DEBUG] [Thread-15689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:38:52.777 [DEBUG] [Thread-15689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:38:52.779 [DEBUG] [Thread-15689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:38:52.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:38:52.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:38:52.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:38:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:38:52.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:38:52.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:38:52.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.651450 -999.00  +24.80  34.50     19   +0.20 1 1 2 1 1   887    0 22.28 -44.94 ----- 33.8 34.5 299.4 48.1 27.3 -28.4 27.6 -28.0 28.3 -25.9 28.4 -26.8
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.651450
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:38:52.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:38:45', tmtdew=29.28, humidity=14.28, cloud=0.0, wind=43.21, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:38:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:38:52.799 [DEBUG] [Thread-15689] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:38: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-25T17:38:52.882 [DEBUG] [Thread-15692] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f10
2025-12-25T17:38:52.882 [DEBUG] [Thread-15692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:38:52.897 [DEBUG] [Thread-15692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:38:52.897 [INFO] [Thread-15692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] client lang: <none>
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] server lang: <none>
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] kex follows: False
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] Compression: none
2025-12-25T17:38:52.905 [DEBUG] [Thread-15692] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:38:52.961 [DEBUG] [Thread-15692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:38:52.962 [DEBUG] [Thread-15692] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:38:52.962 [DEBUG] [Thread-15692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:38:52.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:38:52.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:38:53.019 [DEBUG] [Thread-15692] [transport.py] [_log()] userauth is OK
2025-12-25T17:38:53.019 [DEBUG] [Thread-15692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:38:53.019 [DEBUG] [Thread-15692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:38:53.019 [DEBUG] [Thread-15692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:38:53.019 [DEBUG] [Thread-15692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:38:53.038 [INFO] [Thread-15692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:38:53.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:38:53.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:38:53.893 [DEBUG] [Thread-15692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:38:53.894 [DEBUG] [Thread-15692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:38:53.941 [DEBUG] [Thread-15692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:38:53.941 [DEBUG] [Thread-15692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:38:53.950 [DEBUG] [Thread-15692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:38:53.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:38:53.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:38:53.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:38:53.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:38:53.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:38:53.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:38:53.982 [DEBUG] [Thread-15692] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:38:55.032 [DEBUG] [Thread-15694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:03.818 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:03.819 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:10.074 [DEBUG] [Thread-15695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:16.641 [DEBUG] [Thread-15696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:39:24.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:39:24.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:39:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 39, 17), 29.16, 14.38, 0.0, 39.81, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:39:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:39:17
2025-12-25T17:39:24.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:39:24.987 [DEBUG] [Thread-15697] [transport.py] [_log()] starting thread (client mode): 0xb6bc3640
2025-12-25T17:39:24.987 [DEBUG] [Thread-15697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:39:25.008 [DEBUG] [Thread-15697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:39:25.008 [INFO] [Thread-15697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] client lang: <none>
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] server lang: <none>
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] kex follows: False
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] Compression: none
2025-12-25T17:39:25.011 [DEBUG] [Thread-15697] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:39:25.028 [DEBUG] [Thread-15697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:39:25.028 [DEBUG] [Thread-15697] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:39:25.029 [DEBUG] [Thread-15697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:39:25.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:39:25.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:39:25.073 [DEBUG] [Thread-15697] [transport.py] [_log()] userauth is OK
2025-12-25T17:39:25.073 [DEBUG] [Thread-15697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:39:25.074 [DEBUG] [Thread-15697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:39:25.074 [DEBUG] [Thread-15697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:39:25.074 [DEBUG] [Thread-15697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:39:25.106 [INFO] [Thread-15697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:39:25.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:39:25.111 [DEBUG] [Thread-15699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:25.746 [DEBUG] [Thread-15697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:39:25.746 [DEBUG] [Thread-15697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:39:25.746 [DEBUG] [Thread-15697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:39:25.787 [DEBUG] [Thread-15697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:39:25.788 [DEBUG] [Thread-15697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:39:25.791 [DEBUG] [Thread-15697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:39:25.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:39:25.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:39:25.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:39:25.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:39:25.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:39:25.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:39:25.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:39:25.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:39:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:39:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.651797 -999.00  +24.90  48.26     19   +0.30 1 1 2 1 1   887    0 22.62 -42.94 ----- 48.1 48.3 298.4 56.7 27.4 -28.5 27.6 -28.7 28.3 -27.6 28.4 -27.0
2025-12-25T17:39:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:39:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:39:25.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.651797
2025-12-25T17:39:25.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:39:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:39:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:39:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:39:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:39:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:39:17', tmtdew=29.16, humidity=14.38, cloud=0.0, wind=39.81, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:38:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:39:25.820 [DEBUG] [Thread-15697] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:39: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-25T17:39:25.910 [DEBUG] [Thread-15701] [transport.py] [_log()] starting thread (client mode): 0xb6b02fb0
2025-12-25T17:39:25.911 [DEBUG] [Thread-15701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:39:25.928 [DEBUG] [Thread-15701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:39:25.928 [INFO] [Thread-15701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] client lang: <none>
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] server lang: <none>
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] kex follows: False
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] Compression: none
2025-12-25T17:39:25.936 [DEBUG] [Thread-15701] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:39:25.995 [DEBUG] [Thread-15701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:39:25.996 [DEBUG] [Thread-15701] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:39:25.996 [DEBUG] [Thread-15701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:39:25.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:39:25.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:39:26.051 [DEBUG] [Thread-15701] [transport.py] [_log()] userauth is OK
2025-12-25T17:39:26.052 [DEBUG] [Thread-15701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:39:26.052 [DEBUG] [Thread-15701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:39:26.052 [DEBUG] [Thread-15701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:39:26.052 [DEBUG] [Thread-15701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:39:26.071 [INFO] [Thread-15701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:39:26.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-25T17:39:26.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:39:26.867 [DEBUG] [Thread-15701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:39:26.867 [DEBUG] [Thread-15701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:39:26.915 [DEBUG] [Thread-15701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:39:26.915 [DEBUG] [Thread-15701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:39:26.925 [DEBUG] [Thread-15701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:39:26.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:39:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:39:26.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:39:26.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:39:26.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:39:26.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:39:26.962 [DEBUG] [Thread-15701] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:39:40.145 [DEBUG] [Thread-15703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:55.197 [DEBUG] [Thread-15704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:39:56.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:39:56.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:39:56.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-25T17:39:57.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 39, 49), 29.33, 13.82, 0.0, 42.89, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:39:57.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:39:49
2025-12-25T17:39:57.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:39:57.978 [DEBUG] [Thread-15705] [transport.py] [_log()] starting thread (client mode): 0xb6b20280
2025-12-25T17:39:57.979 [DEBUG] [Thread-15705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:39:57.993 [DEBUG] [Thread-15705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:39:57.994 [INFO] [Thread-15705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:39:57.995 [DEBUG] [Thread-15705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:39:57.995 [DEBUG] [Thread-15705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:39:57.995 [DEBUG] [Thread-15705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] client lang: <none>
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] server lang: <none>
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] kex follows: False
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] Compression: none
2025-12-25T17:39:57.996 [DEBUG] [Thread-15705] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:39:58.006 [DEBUG] [Thread-15705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:39:58.006 [DEBUG] [Thread-15705] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:39:58.006 [DEBUG] [Thread-15705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:39:58.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:39:58.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:39:58.009 [DEBUG] [Thread-15705] [transport.py] [_log()] userauth is OK
2025-12-25T17:39:58.009 [DEBUG] [Thread-15705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:39:58.009 [DEBUG] [Thread-15705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:39:58.009 [DEBUG] [Thread-15705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:39:58.010 [DEBUG] [Thread-15705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:39:58.027 [INFO] [Thread-15705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:39:58.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:39:58.724 [DEBUG] [Thread-15705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:39:58.725 [DEBUG] [Thread-15705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:39:58.725 [DEBUG] [Thread-15705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:39:58.766 [DEBUG] [Thread-15705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:39:58.766 [DEBUG] [Thread-15705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:39:58.769 [DEBUG] [Thread-15705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:39:58.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:39:58.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:39:58.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:39:58.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:39:58.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:39:58.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:39:58.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:39:58.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:39:58.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:39:58.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.652491 -999.00  +24.20  41.04     20   +0.00 1 1 2 1 1   887    0 23.08 -30.39 ----- 40.0 41.0 300.0 53.5 27.2 -30.1 27.5 -29.5 28.0 -27.2 28.2 -27.7
2025-12-25T17:39:58.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:39:58.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:39:58.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.652491
2025-12-25T17:39:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:39:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:39:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:39:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:39:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:39:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:39:49', tmtdew=29.33, humidity=13.82, cloud=0.0, wind=42.89, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:39:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:39:58.787 [DEBUG] [Thread-15705] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:39:58.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-25T17:39:58.885 [DEBUG] [Thread-15708] [transport.py] [_log()] starting thread (client mode): 0xb6bb5f00
2025-12-25T17:39:58.885 [DEBUG] [Thread-15708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:39:58.900 [DEBUG] [Thread-15708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:39:58.900 [INFO] [Thread-15708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:39:58.907 [DEBUG] [Thread-15708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:39:58.908 [DEBUG] [Thread-15708] [transport.py] [_log()] client lang: <none>
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] server lang: <none>
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] kex follows: False
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] Compression: none
2025-12-25T17:39:58.909 [DEBUG] [Thread-15708] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:39:58.966 [DEBUG] [Thread-15708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:39:58.967 [DEBUG] [Thread-15708] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:39:58.967 [DEBUG] [Thread-15708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:39:58.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:39:58.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:39:59.023 [DEBUG] [Thread-15708] [transport.py] [_log()] userauth is OK
2025-12-25T17:39:59.023 [DEBUG] [Thread-15708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:39:59.023 [DEBUG] [Thread-15708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:39:59.023 [DEBUG] [Thread-15708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:39:59.023 [DEBUG] [Thread-15708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:39:59.045 [INFO] [Thread-15708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:39:59.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-25T17:39:59.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:39:59.872 [DEBUG] [Thread-15708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:39:59.872 [DEBUG] [Thread-15708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:39:59.919 [DEBUG] [Thread-15708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:39:59.920 [DEBUG] [Thread-15708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:39:59.929 [DEBUG] [Thread-15708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:39:59.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:39:59.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:39:59.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:39:59.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:39:59.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:39:59.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:39:59.962 [DEBUG] [Thread-15708] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:40:03.958 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:40:03.959 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:40:10.225 [DEBUG] [Thread-15710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:40:16.686 [DEBUG] [Thread-15711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:40:25.272 [DEBUG] [Thread-15712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:40:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:40:29.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:40:29.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:40:30.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 40, 21), 29.41, 13.73, 0.0, 40.79, 25.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:40:30.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:40:21
2025-12-25T17:40:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:40:30.964 [DEBUG] [Thread-15713] [transport.py] [_log()] starting thread (client mode): 0xb6b21750
2025-12-25T17:40:30.964 [DEBUG] [Thread-15713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:40:30.984 [DEBUG] [Thread-15713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:40:30.984 [INFO] [Thread-15713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:40:30.987 [DEBUG] [Thread-15713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] client lang: <none>
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] server lang: <none>
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] kex follows: False
2025-12-25T17:40:30.988 [DEBUG] [Thread-15713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:40:30.989 [DEBUG] [Thread-15713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:40:30.989 [DEBUG] [Thread-15713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:40:30.989 [DEBUG] [Thread-15713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:40:30.989 [DEBUG] [Thread-15713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:40:30.989 [DEBUG] [Thread-15713] [transport.py] [_log()] Compression: none
2025-12-25T17:40:30.989 [DEBUG] [Thread-15713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:40:31.007 [DEBUG] [Thread-15713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:40:31.008 [DEBUG] [Thread-15713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:40:31.009 [DEBUG] [Thread-15713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:40:31.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:40:31.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:40:31.011 [DEBUG] [Thread-15713] [transport.py] [_log()] userauth is OK
2025-12-25T17:40:31.011 [DEBUG] [Thread-15713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:40:31.011 [DEBUG] [Thread-15713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:40:31.011 [DEBUG] [Thread-15713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:40:31.011 [DEBUG] [Thread-15713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:40:31.031 [INFO] [Thread-15713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:40:31.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:40:31.677 [DEBUG] [Thread-15713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:40:31.677 [DEBUG] [Thread-15713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:40:31.678 [DEBUG] [Thread-15713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:40:31.718 [DEBUG] [Thread-15713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:40:31.719 [DEBUG] [Thread-15713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:40:31.722 [DEBUG] [Thread-15713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:40:31.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:40:31.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:40:31.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:40:31.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:40:31.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:40:31.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:40:31.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:40:31.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:40:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:40:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.652839 -999.00  +24.10  39.97     20   +0.10 1 1 2 1 1   887    0 23.09 -30.22 ----- 38.7 40.0 297.2 51.3 27.1 -29.3 27.4 -29.0 27.9 -27.9 28.1 -27.7
2025-12-25T17:40:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:40:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:40:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.652839
2025-12-25T17:40:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:40:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:40:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:40:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:40:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:40:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:40:21', tmtdew=29.41, humidity=13.73, cloud=0.0, wind=40.79, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:40:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:40:31.748 [DEBUG] [Thread-15713] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:40:31.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:40:31.836 [DEBUG] [Thread-15716] [transport.py] [_log()] starting thread (client mode): 0xb6b21ae0
2025-12-25T17:40:31.836 [DEBUG] [Thread-15716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:40:31.850 [DEBUG] [Thread-15716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:40:31.850 [INFO] [Thread-15716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:40:31.858 [DEBUG] [Thread-15716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:40:31.858 [DEBUG] [Thread-15716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:40:31.858 [DEBUG] [Thread-15716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] client lang: <none>
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] server lang: <none>
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] kex follows: False
2025-12-25T17:40:31.859 [DEBUG] [Thread-15716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:40:31.860 [DEBUG] [Thread-15716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:40:31.860 [DEBUG] [Thread-15716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:40:31.860 [DEBUG] [Thread-15716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:40:31.860 [DEBUG] [Thread-15716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:40:31.860 [DEBUG] [Thread-15716] [transport.py] [_log()] Compression: none
2025-12-25T17:40:31.860 [DEBUG] [Thread-15716] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:40:31.915 [DEBUG] [Thread-15716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:40:31.915 [DEBUG] [Thread-15716] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:40:31.916 [DEBUG] [Thread-15716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:40:31.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:40:31.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:40:31.971 [DEBUG] [Thread-15716] [transport.py] [_log()] userauth is OK
2025-12-25T17:40:31.972 [DEBUG] [Thread-15716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:40:31.972 [DEBUG] [Thread-15716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:40:31.972 [DEBUG] [Thread-15716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:40:31.972 [DEBUG] [Thread-15716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:40:31.991 [INFO] [Thread-15716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:40:31.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:40:31.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:40:32.837 [DEBUG] [Thread-15716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:40:32.837 [DEBUG] [Thread-15716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:40:32.885 [DEBUG] [Thread-15716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:40:32.885 [DEBUG] [Thread-15716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:40:32.894 [DEBUG] [Thread-15716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:40:32.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:40:32.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-25T17:40:32.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:40:32.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:40:32.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:40:32.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:40:32.927 [DEBUG] [Thread-15716] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:40:40.326 [DEBUG] [Thread-15718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:40:55.383 [DEBUG] [Thread-15719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:41:02.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:41:02.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-25T17:41:03.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 40, 53), 29.34, 14.22, 0.0, 40.69, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:41:03.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:40:53
2025-12-25T17:41:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:41:03.930 [DEBUG] [Thread-15720] [transport.py] [_log()] starting thread (client mode): 0xb6b21e40
2025-12-25T17:41:03.930 [DEBUG] [Thread-15720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:41:03.949 [DEBUG] [Thread-15720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:41:03.950 [INFO] [Thread-15720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] client lang: <none>
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] server lang: <none>
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] kex follows: False
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:41:03.953 [DEBUG] [Thread-15720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:41:03.954 [DEBUG] [Thread-15720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:41:03.954 [DEBUG] [Thread-15720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:41:03.954 [DEBUG] [Thread-15720] [transport.py] [_log()] Compression: none
2025-12-25T17:41:03.954 [DEBUG] [Thread-15720] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:41:03.971 [DEBUG] [Thread-15720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:41:03.972 [DEBUG] [Thread-15720] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:41:03.973 [DEBUG] [Thread-15720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:41:03.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:41:03.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:41:03.975 [DEBUG] [Thread-15720] [transport.py] [_log()] userauth is OK
2025-12-25T17:41:03.975 [DEBUG] [Thread-15720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:41:03.975 [DEBUG] [Thread-15720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:41:03.975 [DEBUG] [Thread-15720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:41:03.975 [DEBUG] [Thread-15720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:41:04.001 [INFO] [Thread-15720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:41:04.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:41:04.100 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:04.101 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:04.734 [DEBUG] [Thread-15720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:41:04.735 [DEBUG] [Thread-15720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:41:04.736 [DEBUG] [Thread-15720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:41:04.776 [DEBUG] [Thread-15720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:41:04.776 [DEBUG] [Thread-15720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:41:04.779 [DEBUG] [Thread-15720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:41:04.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:41:04.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:41:04.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:41:04.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:41:04.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:41:04.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:41:04.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:41:04.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:41:04.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:41:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.653186 -999.00  +24.30  38.83     20   +0.10 1 1 2 1 1   887    0 23.53 -29.52 ----- 34.6 38.8 293.2 42.1 27.1 -28.5 27.3 -28.8 27.9 -28.7 28.1 -27.0
2025-12-25T17:41:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:41:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:41:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.653186
2025-12-25T17:41:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:41:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:41:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:41:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:41:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:41:04.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:40:53', tmtdew=29.34, humidity=14.22, cloud=0.0, wind=40.69, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:40:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:41:04.808 [DEBUG] [Thread-15720] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:41:04.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-25T17:41:04.902 [DEBUG] [Thread-15723] [transport.py] [_log()] starting thread (client mode): 0xb6b201c0
2025-12-25T17:41:04.903 [DEBUG] [Thread-15723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:41:04.917 [DEBUG] [Thread-15723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:41:04.917 [INFO] [Thread-15723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:41:04.924 [DEBUG] [Thread-15723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] client lang: <none>
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] server lang: <none>
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] kex follows: False
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] Compression: none
2025-12-25T17:41:04.925 [DEBUG] [Thread-15723] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:41:04.987 [DEBUG] [Thread-15723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:41:04.988 [DEBUG] [Thread-15723] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:41:04.988 [DEBUG] [Thread-15723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:41:04.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:41:04.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:41:05.043 [DEBUG] [Thread-15723] [transport.py] [_log()] userauth is OK
2025-12-25T17:41:05.044 [DEBUG] [Thread-15723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:41:05.044 [DEBUG] [Thread-15723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:41:05.044 [DEBUG] [Thread-15723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:41:05.044 [DEBUG] [Thread-15723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:41:05.063 [INFO] [Thread-15723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:41:05.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:41:05.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:41:05.868 [DEBUG] [Thread-15723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:41:05.869 [DEBUG] [Thread-15723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:41:05.917 [DEBUG] [Thread-15723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:41:05.917 [DEBUG] [Thread-15723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:41:05.926 [DEBUG] [Thread-15723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:41:05.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:41:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:41:05.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:41:05.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:41:05.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:41:05.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:41:05.959 [DEBUG] [Thread-15723] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:41:10.415 [DEBUG] [Thread-15725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:16.720 [DEBUG] [Thread-15726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:25.466 [DEBUG] [Thread-15727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:35.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:41:35.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:41:35.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-25T17:41:36.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 41, 25), 29.24, 14.3, 0.0, 39.59, 25.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:41:36.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:41:25
2025-12-25T17:41:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:41:36.963 [DEBUG] [Thread-15728] [transport.py] [_log()] starting thread (client mode): 0xb6b03b80
2025-12-25T17:41:36.963 [DEBUG] [Thread-15728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:41:36.983 [DEBUG] [Thread-15728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:41:36.984 [INFO] [Thread-15728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:41:36.987 [DEBUG] [Thread-15728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] client lang: <none>
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] server lang: <none>
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] kex follows: False
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] Compression: none
2025-12-25T17:41:36.988 [DEBUG] [Thread-15728] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:41:37.006 [DEBUG] [Thread-15728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:41:37.007 [DEBUG] [Thread-15728] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:41:37.008 [DEBUG] [Thread-15728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:41:37.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:41:37.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:41:37.049 [DEBUG] [Thread-15728] [transport.py] [_log()] userauth is OK
2025-12-25T17:41:37.049 [DEBUG] [Thread-15728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:41:37.049 [DEBUG] [Thread-15728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:41:37.050 [DEBUG] [Thread-15728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:41:37.050 [DEBUG] [Thread-15728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:41:37.075 [INFO] [Thread-15728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:41:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:41:37.691 [DEBUG] [Thread-15728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:41:37.691 [DEBUG] [Thread-15728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:41:37.692 [DEBUG] [Thread-15728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:41:37.732 [DEBUG] [Thread-15728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:41:37.732 [DEBUG] [Thread-15728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:41:37.734 [DEBUG] [Thread-15728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:41:37.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:41:37.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:41:37.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:41:37.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:41:37.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:41:37.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:41:37.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:41:37.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:41:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:41:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.653533 -999.00  +24.60  30.61     20   +0.20 1 1 2 1 1   887    0 23.47 -27.62 ----- 29.5 30.6 289.2 41.0 27.1 -28.9 27.4 -28.6 27.9 -25.9 28.2 -27.3
2025-12-25T17:41:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:41:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:41:37.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.653533
2025-12-25T17:41:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:41:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:41:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:41:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:41:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:41:37.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:41:25', tmtdew=29.24, humidity=14.3, cloud=0.0, wind=39.59, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:41:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:41:37.757 [DEBUG] [Thread-15728] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:41:37.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-25T17:41:37.852 [DEBUG] [Thread-15731] [transport.py] [_log()] starting thread (client mode): 0xb6b027d0
2025-12-25T17:41:37.852 [DEBUG] [Thread-15731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:41:37.867 [DEBUG] [Thread-15731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:41:37.867 [INFO] [Thread-15731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:41:37.874 [DEBUG] [Thread-15731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:41:37.874 [DEBUG] [Thread-15731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] client lang: <none>
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] server lang: <none>
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] kex follows: False
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:41:37.875 [DEBUG] [Thread-15731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:41:37.876 [DEBUG] [Thread-15731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:41:37.876 [DEBUG] [Thread-15731] [transport.py] [_log()] Compression: none
2025-12-25T17:41:37.876 [DEBUG] [Thread-15731] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:41:37.935 [DEBUG] [Thread-15731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:41:37.936 [DEBUG] [Thread-15731] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:41:37.937 [DEBUG] [Thread-15731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:41:37.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:41:37.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:41:37.991 [DEBUG] [Thread-15731] [transport.py] [_log()] userauth is OK
2025-12-25T17:41:37.992 [DEBUG] [Thread-15731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:41:37.992 [DEBUG] [Thread-15731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:41:37.992 [DEBUG] [Thread-15731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:41:37.992 [DEBUG] [Thread-15731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:41:38.013 [INFO] [Thread-15731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:41:38.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-25T17:41:38.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:41:38.842 [DEBUG] [Thread-15731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:41:38.843 [DEBUG] [Thread-15731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:41:38.890 [DEBUG] [Thread-15731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:41:38.890 [DEBUG] [Thread-15731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:41:38.899 [DEBUG] [Thread-15731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:41:38.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:41:38.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:41:38.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-25T17:41:38.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:41:38.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:41:38.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:41:38.937 [DEBUG] [Thread-15731] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:41:40.500 [DEBUG] [Thread-15733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:41:55.551 [DEBUG] [Thread-15734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:04.245 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:04.246 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:08.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:42:08.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:42:08.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-25T17:42:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 41, 57), 29.07, 14.28, 0.0, 34.37, 25.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:42:09.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:41:57
2025-12-25T17:42:09.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:42:09.944 [DEBUG] [Thread-15735] [transport.py] [_log()] starting thread (client mode): 0xb95d77c0
2025-12-25T17:42:09.944 [DEBUG] [Thread-15735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:42:09.961 [DEBUG] [Thread-15735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:42:09.961 [INFO] [Thread-15735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] client lang: <none>
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] server lang: <none>
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] kex follows: False
2025-12-25T17:42:09.965 [DEBUG] [Thread-15735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:42:09.966 [DEBUG] [Thread-15735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:42:09.966 [DEBUG] [Thread-15735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:42:09.966 [DEBUG] [Thread-15735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:42:09.966 [DEBUG] [Thread-15735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:42:09.966 [DEBUG] [Thread-15735] [transport.py] [_log()] Compression: none
2025-12-25T17:42:09.966 [DEBUG] [Thread-15735] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:42:09.983 [DEBUG] [Thread-15735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:42:09.983 [DEBUG] [Thread-15735] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:42:09.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:42:09.984 [DEBUG] [Thread-15735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:42:09.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:42:09.986 [DEBUG] [Thread-15735] [transport.py] [_log()] userauth is OK
2025-12-25T17:42:09.986 [DEBUG] [Thread-15735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:42:09.986 [DEBUG] [Thread-15735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:42:09.987 [DEBUG] [Thread-15735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:42:09.987 [DEBUG] [Thread-15735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:42:10.011 [INFO] [Thread-15735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:42:10.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:42:10.581 [DEBUG] [Thread-15737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:10.786 [DEBUG] [Thread-15735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:42:10.786 [DEBUG] [Thread-15735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:42:10.786 [DEBUG] [Thread-15735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:42:10.827 [DEBUG] [Thread-15735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:42:10.827 [DEBUG] [Thread-15735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:42:10.831 [DEBUG] [Thread-15735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:42:10.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:42:10.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:42:10.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:42:10.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:42:10.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:42:10.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:42:10.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:42:10.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:42:10.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:42:10.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.653880 -999.00  +24.40  40.05     21   +0.60 1 1 2 1 1   887    0 23.19 -24.69 ----- 39.5 40.0 299.8 46.3 27.1 -29.2 27.3 -28.6 27.9 -28.0 28.1 -27.3
2025-12-25T17:42:10.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:42:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:42:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.653880
2025-12-25T17:42:10.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:42:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:42:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:42:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:42:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:42:10.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:41:57', tmtdew=29.07, humidity=14.28, cloud=0.0, wind=34.37, temperature=25.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:41:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:42:10.859 [DEBUG] [Thread-15735] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:42:10.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-25T17:42:10.953 [DEBUG] [Thread-15739] [transport.py] [_log()] starting thread (client mode): 0xb6b211b0
2025-12-25T17:42:10.953 [DEBUG] [Thread-15739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:42:10.968 [DEBUG] [Thread-15739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:42:10.968 [INFO] [Thread-15739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:42:10.976 [DEBUG] [Thread-15739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:42:10.976 [DEBUG] [Thread-15739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:42:10.976 [DEBUG] [Thread-15739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:42:10.977 [DEBUG] [Thread-15739] [transport.py] [_log()] client lang: <none>
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] server lang: <none>
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] kex follows: False
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] Compression: none
2025-12-25T17:42:10.978 [DEBUG] [Thread-15739] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:42:11.035 [DEBUG] [Thread-15739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:42:11.036 [DEBUG] [Thread-15739] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:42:11.036 [DEBUG] [Thread-15739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:42:11.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:42:11.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:42:11.091 [DEBUG] [Thread-15739] [transport.py] [_log()] userauth is OK
2025-12-25T17:42:11.092 [DEBUG] [Thread-15739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:42:11.092 [DEBUG] [Thread-15739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:42:11.092 [DEBUG] [Thread-15739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:42:11.092 [DEBUG] [Thread-15739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:42:11.111 [INFO] [Thread-15739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:42:11.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-25T17:42:11.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:42:11.930 [DEBUG] [Thread-15739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:42:11.930 [DEBUG] [Thread-15739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:42:11.980 [DEBUG] [Thread-15739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:42:11.980 [DEBUG] [Thread-15739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:42:11.990 [DEBUG] [Thread-15739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:42:11.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:42:12.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:42:12.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-25T17:42:12.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:42:12.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:42:12.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:42:12.027 [DEBUG] [Thread-15739] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:42:16.754 [DEBUG] [Thread-15741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:25.616 [DEBUG] [Thread-15742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:40.666 [DEBUG] [Thread-15743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:42:42.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:42:42.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:42:42.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-25T17:42:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 42, 30), 28.9, 14.45, 0.0, 36.01, 25.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:42:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:42:30
2025-12-25T17:42:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:42:43.053 [DEBUG] [Thread-15744] [transport.py] [_log()] starting thread (client mode): 0xb6b236a0
2025-12-25T17:42:43.053 [DEBUG] [Thread-15744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:42:43.074 [DEBUG] [Thread-15744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:42:43.074 [INFO] [Thread-15744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] client lang: <none>
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] server lang: <none>
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] kex follows: False
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] Compression: none
2025-12-25T17:42:43.077 [DEBUG] [Thread-15744] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:42:43.091 [DEBUG] [Thread-15744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:42:43.091 [DEBUG] [Thread-15744] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:42:43.091 [DEBUG] [Thread-15744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:42:43.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:42:43.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:42:43.092 [DEBUG] [Thread-15744] [transport.py] [_log()] userauth is OK
2025-12-25T17:42:43.092 [DEBUG] [Thread-15744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:42:43.092 [DEBUG] [Thread-15744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:42:43.092 [DEBUG] [Thread-15744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:42:43.092 [DEBUG] [Thread-15744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:42:43.101 [INFO] [Thread-15744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:42:43.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:42:43.724 [DEBUG] [Thread-15744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:42:43.725 [DEBUG] [Thread-15744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:42:43.725 [DEBUG] [Thread-15744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:42:43.766 [DEBUG] [Thread-15744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:42:43.766 [DEBUG] [Thread-15744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:42:43.767 [DEBUG] [Thread-15744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:42:43.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:42:43.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:42:43.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:42:43.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:42:43.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:42:43.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:42:43.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.654227 -999.00  +24.10  33.93     21   +0.70 1 1 2 1 1   887    0 22.83 -26.43 ----- 28.0 33.9 287.6 45.3 26.9 -30.5 27.2 -28.4 27.8 -26.9 28.0 -27.3
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.654227
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:42:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:42:30', tmtdew=28.9, humidity=14.45, cloud=0.0, wind=36.01, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:42:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:42:43.788 [DEBUG] [Thread-15744] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:42:43.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-25T17:42:43.870 [DEBUG] [Thread-15747] [transport.py] [_log()] starting thread (client mode): 0xb6b63fd0
2025-12-25T17:42:43.871 [DEBUG] [Thread-15747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:42:43.885 [DEBUG] [Thread-15747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:42:43.885 [INFO] [Thread-15747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:42:43.893 [DEBUG] [Thread-15747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:42:43.893 [DEBUG] [Thread-15747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:42:43.893 [DEBUG] [Thread-15747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:42:43.893 [DEBUG] [Thread-15747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:43.893 [DEBUG] [Thread-15747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:42:43.893 [DEBUG] [Thread-15747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] client lang: <none>
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] server lang: <none>
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] kex follows: False
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] Compression: none
2025-12-25T17:42:43.894 [DEBUG] [Thread-15747] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:42:43.950 [DEBUG] [Thread-15747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:42:43.950 [DEBUG] [Thread-15747] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:42:43.950 [DEBUG] [Thread-15747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:42:43.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:42:43.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:42:44.006 [DEBUG] [Thread-15747] [transport.py] [_log()] userauth is OK
2025-12-25T17:42:44.007 [DEBUG] [Thread-15747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:42:44.007 [DEBUG] [Thread-15747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:42:44.007 [DEBUG] [Thread-15747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:42:44.007 [DEBUG] [Thread-15747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:42:44.022 [INFO] [Thread-15747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:42:44.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-25T17:42:44.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:42:44.838 [DEBUG] [Thread-15747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:42:44.838 [DEBUG] [Thread-15747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:42:44.886 [DEBUG] [Thread-15747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:42:44.886 [DEBUG] [Thread-15747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:42:44.895 [DEBUG] [Thread-15747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:42:44.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:42:44.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:42:44.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:42:44.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:42:44.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:42:44.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:42:44.926 [DEBUG] [Thread-15747] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:42:55.696 [DEBUG] [Thread-15749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:04.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:04.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:10.758 [DEBUG] [Thread-15750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:43:14.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:43:14.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-25T17:43:15.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 43, 2), 28.67, 14.67, 0.0, 36.26, 25.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:43:15.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:43:02
2025-12-25T17:43:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:43:15.938 [DEBUG] [Thread-15751] [transport.py] [_log()] starting thread (client mode): 0xb6b606d0
2025-12-25T17:43:15.938 [DEBUG] [Thread-15751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:43:15.958 [DEBUG] [Thread-15751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:43:15.958 [INFO] [Thread-15751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] client lang: <none>
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] server lang: <none>
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] kex follows: False
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] Compression: none
2025-12-25T17:43:15.962 [DEBUG] [Thread-15751] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:43:15.979 [DEBUG] [Thread-15751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:43:15.980 [DEBUG] [Thread-15751] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:43:15.980 [DEBUG] [Thread-15751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:43:15.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:43:15.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:43:15.982 [DEBUG] [Thread-15751] [transport.py] [_log()] userauth is OK
2025-12-25T17:43:15.982 [DEBUG] [Thread-15751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:43:15.983 [DEBUG] [Thread-15751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:43:15.983 [DEBUG] [Thread-15751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:43:15.983 [DEBUG] [Thread-15751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:43:15.998 [INFO] [Thread-15751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:43:15.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:43:16.757 [DEBUG] [Thread-15751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:43:16.763 [DEBUG] [Thread-15751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:43:16.764 [DEBUG] [Thread-15751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:43:16.797 [DEBUG] [Thread-15751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:43:16.797 [DEBUG] [Thread-15751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:43:16.797 [DEBUG] [Thread-15753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:16.800 [DEBUG] [Thread-15751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:43:16.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:43:16.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:43:16.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:43:16.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:43:16.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:43:16.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:43:16.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:43:16.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:43:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:43:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.654575 -999.00  +24.20  31.89     21   +0.70 1 1 2 1 1   887    0 23.40 -26.86 ----- 34.6 31.9 291.8 39.5 27.1 -28.6 27.2 -28.1 27.9 -26.0 28.1 -27.3
2025-12-25T17:43:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:43:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:43:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.654575
2025-12-25T17:43:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:43:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:43:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:43:16.822 [DEBUG] [Thread-15751] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:43:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:43:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:43:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:43:02', tmtdew=28.67, humidity=14.67, cloud=0.0, wind=36.26, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:42:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:43:16.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-25T17:43:16.915 [DEBUG] [Thread-15755] [transport.py] [_log()] starting thread (client mode): 0xb95d4250
2025-12-25T17:43:16.915 [DEBUG] [Thread-15755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:43:16.929 [DEBUG] [Thread-15755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:43:16.929 [INFO] [Thread-15755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] client lang: <none>
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] server lang: <none>
2025-12-25T17:43:16.937 [DEBUG] [Thread-15755] [transport.py] [_log()] kex follows: False
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] Compression: none
2025-12-25T17:43:16.938 [DEBUG] [Thread-15755] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:43:16.994 [DEBUG] [Thread-15755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:43:16.995 [DEBUG] [Thread-15755] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:43:16.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:43:16.995 [DEBUG] [Thread-15755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:43:16.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:43:17.052 [DEBUG] [Thread-15755] [transport.py] [_log()] userauth is OK
2025-12-25T17:43:17.052 [DEBUG] [Thread-15755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:43:17.052 [DEBUG] [Thread-15755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:43:17.052 [DEBUG] [Thread-15755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:43:17.052 [DEBUG] [Thread-15755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:43:17.070 [INFO] [Thread-15755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:43:17.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-25T17:43:17.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:43:17.909 [DEBUG] [Thread-15755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:43:17.909 [DEBUG] [Thread-15755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:43:17.958 [DEBUG] [Thread-15755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:43:17.958 [DEBUG] [Thread-15755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:43:17.968 [DEBUG] [Thread-15755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:43:17.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:43:17.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-25T17:43:17.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-25T17:43:17.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:43:17.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:43:17.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:43:18.004 [DEBUG] [Thread-15755] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:43:25.789 [DEBUG] [Thread-15757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:40.830 [DEBUG] [Thread-15758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:43:48.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:43:48.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:43:48.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-25T17:43:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 43, 34), 28.38, 15.21, 0.0, 35.62, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:43:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:43:34
2025-12-25T17:43:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:43:49.022 [DEBUG] [Thread-15759] [transport.py] [_log()] starting thread (client mode): 0xb6b612a0
2025-12-25T17:43:49.022 [DEBUG] [Thread-15759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:43:49.042 [DEBUG] [Thread-15759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:43:49.042 [INFO] [Thread-15759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:43:49.045 [DEBUG] [Thread-15759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:43:49.045 [DEBUG] [Thread-15759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:43:49.045 [DEBUG] [Thread-15759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] client lang: <none>
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] server lang: <none>
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] kex follows: False
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] Compression: none
2025-12-25T17:43:49.046 [DEBUG] [Thread-15759] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:43:49.062 [DEBUG] [Thread-15759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:43:49.062 [DEBUG] [Thread-15759] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:43:49.063 [DEBUG] [Thread-15759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:43:49.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:43:49.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:43:49.065 [DEBUG] [Thread-15759] [transport.py] [_log()] userauth is OK
2025-12-25T17:43:49.065 [DEBUG] [Thread-15759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:43:49.065 [DEBUG] [Thread-15759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:43:49.065 [DEBUG] [Thread-15759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:43:49.065 [DEBUG] [Thread-15759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:43:49.086 [INFO] [Thread-15759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:43:49.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:43:49.753 [DEBUG] [Thread-15759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:43:49.753 [DEBUG] [Thread-15759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:43:49.754 [DEBUG] [Thread-15759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:43:49.794 [DEBUG] [Thread-15759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:43:49.794 [DEBUG] [Thread-15759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:43:49.798 [DEBUG] [Thread-15759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:43:49.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:43:49.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:43:49.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:43:49.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:43:49.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:43:49.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:43:49.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:43:49.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:43:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:43:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.654922 -999.00  +24.30  38.56     21   +0.80 1 1 2 1 1   887    0 23.14 -26.24 ----- 37.8 38.6 290.8 43.2 27.0 -28.9 27.2 -28.4 27.8 -25.6 28.1 -27.4
2025-12-25T17:43:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:43:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:43:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.654922
2025-12-25T17:43:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:43:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:43:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:43:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:43:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:43:49.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:43:34', tmtdew=28.38, humidity=15.21, cloud=0.0, wind=35.62, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:43:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:43:49.826 [DEBUG] [Thread-15759] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:43:49.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-25T17:43:49.910 [DEBUG] [Thread-15762] [transport.py] [_log()] starting thread (client mode): 0xb6bc38e0
2025-12-25T17:43:49.911 [DEBUG] [Thread-15762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:43:49.926 [DEBUG] [Thread-15762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:43:49.926 [INFO] [Thread-15762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:43:49.934 [DEBUG] [Thread-15762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:43:49.934 [DEBUG] [Thread-15762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:43:49.934 [DEBUG] [Thread-15762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] client lang: <none>
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] server lang: <none>
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] kex follows: False
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] Compression: none
2025-12-25T17:43:49.935 [DEBUG] [Thread-15762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:43:49.992 [DEBUG] [Thread-15762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:43:49.992 [DEBUG] [Thread-15762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:43:49.993 [DEBUG] [Thread-15762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:43:49.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:43:49.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:43:50.047 [DEBUG] [Thread-15762] [transport.py] [_log()] userauth is OK
2025-12-25T17:43:50.048 [DEBUG] [Thread-15762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:43:50.048 [DEBUG] [Thread-15762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:43:50.048 [DEBUG] [Thread-15762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:43:50.048 [DEBUG] [Thread-15762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:43:50.067 [INFO] [Thread-15762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:43:50.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:43:50.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:43:51.009 [DEBUG] [Thread-15762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:43:51.009 [DEBUG] [Thread-15762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:43:51.057 [DEBUG] [Thread-15762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:43:51.057 [DEBUG] [Thread-15762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:43:51.066 [DEBUG] [Thread-15762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:43:51.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:43: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-25T17:43:51.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-25T17:43:51.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:43:51.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:43:51.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:43:51.102 [DEBUG] [Thread-15762] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:43:55.866 [DEBUG] [Thread-15764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:04.547 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:04.548 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:10.909 [DEBUG] [Thread-15765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:16.860 [DEBUG] [Thread-15766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:21.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:44:21.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:44:21.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-25T17:44:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 44, 6), 28.31, 15.28, 0.0, 36.01, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:44:21.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:44:06
2025-12-25T17:44:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:44:22.116 [DEBUG] [Thread-15767] [transport.py] [_log()] starting thread (client mode): 0xb6bc3310
2025-12-25T17:44:22.116 [DEBUG] [Thread-15767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:44:22.137 [DEBUG] [Thread-15767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:44:22.138 [INFO] [Thread-15767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] client lang: <none>
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] server lang: <none>
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] kex follows: False
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] Compression: none
2025-12-25T17:44:22.141 [DEBUG] [Thread-15767] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:44:22.158 [DEBUG] [Thread-15767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:44:22.159 [DEBUG] [Thread-15767] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:44:22.159 [DEBUG] [Thread-15767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:44:22.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:44:22.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:44:22.161 [DEBUG] [Thread-15767] [transport.py] [_log()] userauth is OK
2025-12-25T17:44:22.161 [DEBUG] [Thread-15767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:44:22.161 [DEBUG] [Thread-15767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:44:22.161 [DEBUG] [Thread-15767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:44:22.162 [DEBUG] [Thread-15767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:44:22.179 [INFO] [Thread-15767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:44:22.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:44:22.962 [DEBUG] [Thread-15767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:44:22.963 [DEBUG] [Thread-15767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:44:22.963 [DEBUG] [Thread-15767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:44:23.004 [DEBUG] [Thread-15767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:44:23.004 [DEBUG] [Thread-15767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:44:23.009 [DEBUG] [Thread-15767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:44:23.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:44:23.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:44:23.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:44:23.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:44:23.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:44:23.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:44:23.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:44:23.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:44:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:44:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.655269 -999.00  +24.40  34.49     21   +1.10 1 1 2 1 1   887    0 22.83 -28.51 ----- 32.5 34.5 297.4 42.0 26.9 -28.2 27.3 -27.7 27.9 -25.8 28.0 -26.6
2025-12-25T17:44:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:44:23.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:44:23.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.655269
2025-12-25T17:44:23.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:44:23.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:44:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:44:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:44:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:44:23.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:44:06', tmtdew=28.31, humidity=15.28, cloud=0.0, wind=36.01, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:43:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:44:23.033 [DEBUG] [Thread-15767] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:44:23.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-25T17:44:23.130 [DEBUG] [Thread-15770] [transport.py] [_log()] starting thread (client mode): 0xb6b23fd0
2025-12-25T17:44:23.130 [DEBUG] [Thread-15770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:44:23.144 [DEBUG] [Thread-15770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:44:23.145 [INFO] [Thread-15770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:44:23.152 [DEBUG] [Thread-15770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] client lang: <none>
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] server lang: <none>
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] kex follows: False
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:44:23.153 [DEBUG] [Thread-15770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:44:23.154 [DEBUG] [Thread-15770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:44:23.154 [DEBUG] [Thread-15770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:44:23.154 [DEBUG] [Thread-15770] [transport.py] [_log()] Compression: none
2025-12-25T17:44:23.154 [DEBUG] [Thread-15770] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:44:23.211 [DEBUG] [Thread-15770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:44:23.212 [DEBUG] [Thread-15770] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:44:23.213 [DEBUG] [Thread-15770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:44:23.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:44:23.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:44:23.268 [DEBUG] [Thread-15770] [transport.py] [_log()] userauth is OK
2025-12-25T17:44:23.269 [DEBUG] [Thread-15770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:44:23.269 [DEBUG] [Thread-15770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:44:23.269 [DEBUG] [Thread-15770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:44:23.269 [DEBUG] [Thread-15770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:44:23.287 [INFO] [Thread-15770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:44:23.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-25T17:44:23.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:44:24.165 [DEBUG] [Thread-15770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:44:24.166 [DEBUG] [Thread-15770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:44:24.214 [DEBUG] [Thread-15770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:44:24.214 [DEBUG] [Thread-15770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:44:24.226 [DEBUG] [Thread-15770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:44:24.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:44:24.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:44:24.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:44:24.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:44:24.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:44:24.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:44:24.263 [DEBUG] [Thread-15770] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:44:25.943 [DEBUG] [Thread-15772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:40.989 [DEBUG] [Thread-15773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:44:54.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:44:54.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-25T17:44:54.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 44, 38), 28.07, 15.33, 0.0, 42.98, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:44:54.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:44:38
2025-12-25T17:44:55.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:44:55.241 [DEBUG] [Thread-15774] [transport.py] [_log()] starting thread (client mode): 0xb6b627d0
2025-12-25T17:44:55.241 [DEBUG] [Thread-15774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:44:55.262 [DEBUG] [Thread-15774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:44:55.262 [INFO] [Thread-15774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:44:55.265 [DEBUG] [Thread-15774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:44:55.265 [DEBUG] [Thread-15774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:44:55.265 [DEBUG] [Thread-15774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] client lang: <none>
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] server lang: <none>
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] kex follows: False
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] Compression: none
2025-12-25T17:44:55.266 [DEBUG] [Thread-15774] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:44:55.284 [DEBUG] [Thread-15774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:44:55.284 [DEBUG] [Thread-15774] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:44:55.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:44:55.285 [DEBUG] [Thread-15774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:44:55.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:44:55.287 [DEBUG] [Thread-15774] [transport.py] [_log()] userauth is OK
2025-12-25T17:44:55.287 [DEBUG] [Thread-15774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:44:55.288 [DEBUG] [Thread-15774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:44:55.288 [DEBUG] [Thread-15774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:44:55.288 [DEBUG] [Thread-15774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:44:55.311 [INFO] [Thread-15774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:44:55.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:44:55.962 [DEBUG] [Thread-15774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:44:55.962 [DEBUG] [Thread-15774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:44:55.962 [DEBUG] [Thread-15774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:44:56.003 [DEBUG] [Thread-15774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:44:56.003 [DEBUG] [Thread-15774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:44:56.007 [DEBUG] [Thread-15774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:44:56.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:44:56.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:44:56.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:44:56.023 [DEBUG] [Thread-15776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:44:56.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:44:56.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:44:56.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:44:56.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:44:56.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:44:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:44:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.655616 -999.00  +24.60  33.62     21   +1.30 1 1 2 1 1   887    0 23.30 -27.53 ----- 33.5 33.6 294.6 38.3 26.9 -28.0 27.3 -27.6 27.9 -25.3 28.1 -26.5
2025-12-25T17:44:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:44:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:44:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.655616
2025-12-25T17:44:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:44:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:44:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:44:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:44:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:44:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:44:38', tmtdew=28.07, humidity=15.33, cloud=0.0, wind=42.98, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:44:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:44:56.035 [DEBUG] [Thread-15774] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:44:56.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-25T17:44:56.137 [DEBUG] [Thread-15778] [transport.py] [_log()] starting thread (client mode): 0xb6b22200
2025-12-25T17:44:56.138 [DEBUG] [Thread-15778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:44:56.152 [DEBUG] [Thread-15778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:44:56.152 [INFO] [Thread-15778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] client lang: <none>
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] server lang: <none>
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] kex follows: False
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:44:56.160 [DEBUG] [Thread-15778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:44:56.161 [DEBUG] [Thread-15778] [transport.py] [_log()] Compression: none
2025-12-25T17:44:56.161 [DEBUG] [Thread-15778] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:44:56.220 [DEBUG] [Thread-15778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:44:56.220 [DEBUG] [Thread-15778] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:44:56.221 [DEBUG] [Thread-15778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:44:56.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:44:56.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:44:56.276 [DEBUG] [Thread-15778] [transport.py] [_log()] userauth is OK
2025-12-25T17:44:56.276 [DEBUG] [Thread-15778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:44:56.276 [DEBUG] [Thread-15778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:44:56.276 [DEBUG] [Thread-15778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:44:56.276 [DEBUG] [Thread-15778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:44:56.301 [INFO] [Thread-15778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:44: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-25T17:44:56.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:44:57.124 [DEBUG] [Thread-15778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:44:57.124 [DEBUG] [Thread-15778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:44:57.172 [DEBUG] [Thread-15778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:44:57.172 [DEBUG] [Thread-15778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:44:57.181 [DEBUG] [Thread-15778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:44:57.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:44:57.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-25T17:44:57.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-25T17:44:57.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:44:57.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:44:57.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:44:57.215 [DEBUG] [Thread-15778] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:45:04.688 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:45:04.689 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:45:11.057 [DEBUG] [Thread-15780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:45:16.888 [DEBUG] [Thread-15781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:45:26.093 [DEBUG] [Thread-15782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:45:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:45:27.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:45: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-25T17:45:27.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 45, 10), 27.96, 15.43, 0.0, 39.08, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:45:27.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:45:10
2025-12-25T17:45:28.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:45:28.184 [DEBUG] [Thread-15783] [transport.py] [_log()] starting thread (client mode): 0xb6bc3370
2025-12-25T17:45:28.184 [DEBUG] [Thread-15783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:45:28.205 [DEBUG] [Thread-15783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:45:28.205 [INFO] [Thread-15783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:45:28.207 [DEBUG] [Thread-15783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] client lang: <none>
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] server lang: <none>
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] kex follows: False
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] Compression: none
2025-12-25T17:45:28.208 [DEBUG] [Thread-15783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:45:28.226 [DEBUG] [Thread-15783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:45:28.227 [DEBUG] [Thread-15783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:45:28.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:45:28.228 [DEBUG] [Thread-15783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:45:28.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:45:28.230 [DEBUG] [Thread-15783] [transport.py] [_log()] userauth is OK
2025-12-25T17:45:28.230 [DEBUG] [Thread-15783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:45:28.230 [DEBUG] [Thread-15783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:45:28.230 [DEBUG] [Thread-15783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:45:28.231 [DEBUG] [Thread-15783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:45:28.254 [INFO] [Thread-15783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:45:28.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:45:29.045 [DEBUG] [Thread-15783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:45:29.045 [DEBUG] [Thread-15783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:45:29.046 [DEBUG] [Thread-15783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:45:29.085 [DEBUG] [Thread-15783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:45:29.086 [DEBUG] [Thread-15783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:45:29.088 [DEBUG] [Thread-15783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:45:29.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:45:29.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:45:29.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:45:29.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:45:29.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:45:29.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:45:29.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:45:29.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:45:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:45:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.656311 -999.00  +24.90  39.44     21   +1.20 1 1 2 1 1   887    0 23.19 -25.84 ----- 36.6 39.4 286.6 42.0 27.1 -27.7 27.4 -27.8 28.1 -25.2 28.2 -26.0
2025-12-25T17:45:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:45:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:45:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.656311
2025-12-25T17:45:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:45:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:45:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:45:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:45:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:45:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:45:10', tmtdew=27.96, humidity=15.43, cloud=0.0, wind=39.08, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:45:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:45:29.112 [DEBUG] [Thread-15783] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:45:29.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:45:29.215 [DEBUG] [Thread-15786] [transport.py] [_log()] starting thread (client mode): 0xb955b3d0
2025-12-25T17:45:29.215 [DEBUG] [Thread-15786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:45:29.231 [DEBUG] [Thread-15786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:45:29.231 [INFO] [Thread-15786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:45:29.238 [DEBUG] [Thread-15786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:45:29.238 [DEBUG] [Thread-15786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:45:29.238 [DEBUG] [Thread-15786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] client lang: <none>
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] server lang: <none>
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] kex follows: False
2025-12-25T17:45:29.239 [DEBUG] [Thread-15786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:45:29.240 [DEBUG] [Thread-15786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:45:29.240 [DEBUG] [Thread-15786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:45:29.240 [DEBUG] [Thread-15786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:45:29.240 [DEBUG] [Thread-15786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:45:29.240 [DEBUG] [Thread-15786] [transport.py] [_log()] Compression: none
2025-12-25T17:45:29.240 [DEBUG] [Thread-15786] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:45:29.299 [DEBUG] [Thread-15786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:45:29.300 [DEBUG] [Thread-15786] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:45:29.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:45:29.300 [DEBUG] [Thread-15786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:45:29.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:45:29.355 [DEBUG] [Thread-15786] [transport.py] [_log()] userauth is OK
2025-12-25T17:45:29.356 [DEBUG] [Thread-15786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:45:29.356 [DEBUG] [Thread-15786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:45:29.356 [DEBUG] [Thread-15786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:45:29.356 [DEBUG] [Thread-15786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:45:29.376 [INFO] [Thread-15786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:45:29.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-25T17:45:29.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:45:30.218 [DEBUG] [Thread-15786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:45:30.218 [DEBUG] [Thread-15786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:45:30.266 [DEBUG] [Thread-15786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:45:30.266 [DEBUG] [Thread-15786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:45:30.277 [DEBUG] [Thread-15786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:45:30.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:45:30.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-25T17:45:30.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:45:30.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:45:30.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:45:30.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:45:30.316 [DEBUG] [Thread-15786] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:45:41.131 [DEBUG] [Thread-15788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:45:56.179 [DEBUG] [Thread-15789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:46:00.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:46:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:46:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 45, 42), 28.36, 15.3, 0.0, 42.61, 25.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:46:01.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:45:42
2025-12-25T17:46:01.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:46:01.319 [DEBUG] [Thread-15790] [transport.py] [_log()] starting thread (client mode): 0xb9558a90
2025-12-25T17:46:01.319 [DEBUG] [Thread-15790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:46:01.339 [DEBUG] [Thread-15790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:46:01.340 [INFO] [Thread-15790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] client lang: <none>
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] server lang: <none>
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] kex follows: False
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:46:01.343 [DEBUG] [Thread-15790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:46:01.344 [DEBUG] [Thread-15790] [transport.py] [_log()] Compression: none
2025-12-25T17:46:01.344 [DEBUG] [Thread-15790] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:46:01.360 [DEBUG] [Thread-15790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:46:01.361 [DEBUG] [Thread-15790] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:46:01.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:46:01.362 [DEBUG] [Thread-15790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:46:01.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:46:01.364 [DEBUG] [Thread-15790] [transport.py] [_log()] userauth is OK
2025-12-25T17:46:01.364 [DEBUG] [Thread-15790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:46:01.364 [DEBUG] [Thread-15790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:46:01.364 [DEBUG] [Thread-15790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:46:01.364 [DEBUG] [Thread-15790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:46:01.389 [INFO] [Thread-15790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:46:01.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:46:02.029 [DEBUG] [Thread-15790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:46:02.029 [DEBUG] [Thread-15790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:46:02.030 [DEBUG] [Thread-15790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:46:02.070 [DEBUG] [Thread-15790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:46:02.070 [DEBUG] [Thread-15790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:46:02.074 [DEBUG] [Thread-15790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:46:02.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:46:02.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:46:02.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:46:02.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:46:02.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:46:02.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:46:02.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:46:02.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:46:02.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:46:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.656658 -999.00  +25.00  40.72     21   +1.20 1 1 2 1 1   887    0 23.44 -22.76 ----- 46.0 40.7 306.8 53.5 27.1 -27.6 27.4 -27.5 28.1 -25.2 28.3 -26.5
2025-12-25T17:46:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:46:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:46:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.656658
2025-12-25T17:46:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:46:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:46:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:46:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:46:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:46:02.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:45:42', tmtdew=28.36, humidity=15.3, cloud=0.0, wind=42.61, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:45:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:46:02.102 [DEBUG] [Thread-15790] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:46:02.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:46:02.197 [DEBUG] [Thread-15793] [transport.py] [_log()] starting thread (client mode): 0xb6bc3400
2025-12-25T17:46:02.197 [DEBUG] [Thread-15793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:46:02.212 [DEBUG] [Thread-15793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:46:02.212 [INFO] [Thread-15793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:46:02.220 [DEBUG] [Thread-15793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] client lang: <none>
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] server lang: <none>
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] kex follows: False
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] Compression: none
2025-12-25T17:46:02.221 [DEBUG] [Thread-15793] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:46:02.279 [DEBUG] [Thread-15793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:46:02.280 [DEBUG] [Thread-15793] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:46:02.281 [DEBUG] [Thread-15793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:46:02.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:46:02.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:46:02.336 [DEBUG] [Thread-15793] [transport.py] [_log()] userauth is OK
2025-12-25T17:46:02.336 [DEBUG] [Thread-15793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:46:02.336 [DEBUG] [Thread-15793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:46:02.336 [DEBUG] [Thread-15793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:46:02.336 [DEBUG] [Thread-15793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:46:02.354 [INFO] [Thread-15793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:46:02.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:46:02.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:46:03.188 [DEBUG] [Thread-15793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:46:03.188 [DEBUG] [Thread-15793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:46:03.236 [DEBUG] [Thread-15793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:46:03.236 [DEBUG] [Thread-15793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:46:03.245 [DEBUG] [Thread-15793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:46:03.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:46:03.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:46:03.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:46:03.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:46:03.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:46:03.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:46:03.282 [DEBUG] [Thread-15793] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:46:04.830 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:04.831 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:11.212 [DEBUG] [Thread-15795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:16.916 [DEBUG] [Thread-15796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:26.267 [DEBUG] [Thread-15797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:46:33.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:46:33.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-25T17:46:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 46, 14), 28.36, 15.3, 0.0, 44.62, 25.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:46:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:46:14
2025-12-25T17:46:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:46:34.350 [DEBUG] [Thread-15798] [transport.py] [_log()] starting thread (client mode): 0xb95b0310
2025-12-25T17:46:34.350 [DEBUG] [Thread-15798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:46:34.369 [DEBUG] [Thread-15798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:46:34.369 [INFO] [Thread-15798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:46:34.372 [DEBUG] [Thread-15798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] client lang: <none>
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] server lang: <none>
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] kex follows: False
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] Compression: none
2025-12-25T17:46:34.373 [DEBUG] [Thread-15798] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:46:34.387 [DEBUG] [Thread-15798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:46:34.387 [DEBUG] [Thread-15798] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:46:34.387 [DEBUG] [Thread-15798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:46:34.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:46:34.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:46:34.388 [DEBUG] [Thread-15798] [transport.py] [_log()] userauth is OK
2025-12-25T17:46:34.388 [DEBUG] [Thread-15798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:46:34.388 [DEBUG] [Thread-15798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:46:34.388 [DEBUG] [Thread-15798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:46:34.388 [DEBUG] [Thread-15798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:46:34.403 [INFO] [Thread-15798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:46:34.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:46:35.138 [DEBUG] [Thread-15798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:46:35.138 [DEBUG] [Thread-15798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:46:35.138 [DEBUG] [Thread-15798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:46:35.179 [DEBUG] [Thread-15798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:46:35.179 [DEBUG] [Thread-15798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:46:35.184 [DEBUG] [Thread-15798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:46:35.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:46:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:46:35.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:46:35.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:46:35.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:46:35.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:46:35.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:46:35.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:46:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.657005 -999.00  +25.10  33.47     21   +1.20 1 1 2 1 1   887    0 23.14 -17.25 ----- 34.7 33.5 291.8 46.8 27.2 -27.9 27.5 -27.7 28.1 -26.0 28.3 -26.7
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.657005
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:46:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:46:14', tmtdew=28.36, humidity=15.3, cloud=0.0, wind=44.62, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:46:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:46:35.200 [DEBUG] [Thread-15798] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:46:35.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:46:35.284 [DEBUG] [Thread-15801] [transport.py] [_log()] starting thread (client mode): 0xb95b02e0
2025-12-25T17:46:35.284 [DEBUG] [Thread-15801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:46:35.299 [DEBUG] [Thread-15801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:46:35.299 [INFO] [Thread-15801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] client lang: <none>
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] server lang: <none>
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] kex follows: False
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:46:35.306 [DEBUG] [Thread-15801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:46:35.307 [DEBUG] [Thread-15801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:46:35.307 [DEBUG] [Thread-15801] [transport.py] [_log()] Compression: none
2025-12-25T17:46:35.307 [DEBUG] [Thread-15801] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:46:35.361 [DEBUG] [Thread-15801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:46:35.362 [DEBUG] [Thread-15801] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:46:35.362 [DEBUG] [Thread-15801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:46:35.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:46:35.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:46:35.423 [DEBUG] [Thread-15801] [transport.py] [_log()] userauth is OK
2025-12-25T17:46:35.423 [DEBUG] [Thread-15801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:46:35.423 [DEBUG] [Thread-15801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:46:35.423 [DEBUG] [Thread-15801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:46:35.423 [DEBUG] [Thread-15801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:46:35.437 [INFO] [Thread-15801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:46:35.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-25T17:46:35.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:46:36.311 [DEBUG] [Thread-15801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:46:36.311 [DEBUG] [Thread-15801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:46:36.359 [DEBUG] [Thread-15801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:46:36.359 [DEBUG] [Thread-15801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:46:36.368 [DEBUG] [Thread-15801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:46:36.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:46:36.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-25T17:46:36.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-25T17:46:36.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:46:36.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:46:36.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:46:36.399 [DEBUG] [Thread-15801] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:46:41.303 [DEBUG] [Thread-15803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:46:56.353 [DEBUG] [Thread-15804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:04.970 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:04.971 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:06.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:47:06.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:47:06.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-25T17:47:07.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 46, 46), 28.17, 15.45, 0.0, 43.6, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:47:07.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:46:46
2025-12-25T17:47:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:47:07.405 [DEBUG] [Thread-15805] [transport.py] [_log()] starting thread (client mode): 0xb6bc2950
2025-12-25T17:47:07.405 [DEBUG] [Thread-15805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:47:07.425 [DEBUG] [Thread-15805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:47:07.425 [INFO] [Thread-15805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] client lang: <none>
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] server lang: <none>
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] kex follows: False
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:47:07.428 [DEBUG] [Thread-15805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:47:07.429 [DEBUG] [Thread-15805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:47:07.429 [DEBUG] [Thread-15805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:47:07.429 [DEBUG] [Thread-15805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:47:07.429 [DEBUG] [Thread-15805] [transport.py] [_log()] Compression: none
2025-12-25T17:47:07.429 [DEBUG] [Thread-15805] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:47:07.449 [DEBUG] [Thread-15805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:47:07.450 [DEBUG] [Thread-15805] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:47:07.450 [DEBUG] [Thread-15805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:47:07.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:47:07.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:47:07.452 [DEBUG] [Thread-15805] [transport.py] [_log()] userauth is OK
2025-12-25T17:47:07.452 [DEBUG] [Thread-15805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:47:07.453 [DEBUG] [Thread-15805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:47:07.453 [DEBUG] [Thread-15805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:47:07.453 [DEBUG] [Thread-15805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:47:07.489 [INFO] [Thread-15805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:47:07.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:47:08.144 [DEBUG] [Thread-15805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:47:08.145 [DEBUG] [Thread-15805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:47:08.145 [DEBUG] [Thread-15805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:47:08.185 [DEBUG] [Thread-15805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:47:08.186 [DEBUG] [Thread-15805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:47:08.188 [DEBUG] [Thread-15805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:47:08.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:47:08.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:47:08.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:47:08.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:47:08.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:47:08.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:47:08.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:47:08.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:47:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:47:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.657352 -999.00  +25.10  34.75     20   +1.00 1 1 2 1 1   887    0 23.76 -10.67 ----- 41.9 34.8 299.8 47.2 27.2 -28.1 27.5 -28.0 28.1 -28.0 28.4 -27.0
2025-12-25T17:47:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:47:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:47:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.657352
2025-12-25T17:47:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:47:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:47:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:47:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:47:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:47:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:46:46', tmtdew=28.17, humidity=15.45, cloud=0.0, wind=43.6, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:46:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:47:08.213 [DEBUG] [Thread-15805] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:47:08.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:47:08.306 [DEBUG] [Thread-15808] [transport.py] [_log()] starting thread (client mode): 0xb95d4bb0
2025-12-25T17:47:08.306 [DEBUG] [Thread-15808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:47:08.321 [DEBUG] [Thread-15808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:47:08.321 [INFO] [Thread-15808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:47:08.329 [DEBUG] [Thread-15808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:47:08.329 [DEBUG] [Thread-15808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:47:08.329 [DEBUG] [Thread-15808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:47:08.329 [DEBUG] [Thread-15808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] client lang: <none>
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] server lang: <none>
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] kex follows: False
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:47:08.330 [DEBUG] [Thread-15808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:47:08.331 [DEBUG] [Thread-15808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:47:08.331 [DEBUG] [Thread-15808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:47:08.331 [DEBUG] [Thread-15808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:47:08.331 [DEBUG] [Thread-15808] [transport.py] [_log()] Compression: none
2025-12-25T17:47:08.331 [DEBUG] [Thread-15808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:47:08.388 [DEBUG] [Thread-15808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:47:08.389 [DEBUG] [Thread-15808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:47:08.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:47:08.391 [DEBUG] [Thread-15808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:47:08.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:47:08.448 [DEBUG] [Thread-15808] [transport.py] [_log()] userauth is OK
2025-12-25T17:47:08.448 [DEBUG] [Thread-15808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:47:08.449 [DEBUG] [Thread-15808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:47:08.449 [DEBUG] [Thread-15808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:47:08.449 [DEBUG] [Thread-15808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:47:08.473 [INFO] [Thread-15808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:47:08.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-25T17:47:08.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:47:09.285 [DEBUG] [Thread-15808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:47:09.285 [DEBUG] [Thread-15808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:47:09.333 [DEBUG] [Thread-15808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:47:09.333 [DEBUG] [Thread-15808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:47:09.341 [DEBUG] [Thread-15808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:47:09.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:47:09.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-25T17:47:09.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-25T17:47:09.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:47:09.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:47:09.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:47:09.373 [DEBUG] [Thread-15808] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:47:11.394 [DEBUG] [Thread-15810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:16.965 [DEBUG] [Thread-15811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:26.440 [DEBUG] [Thread-15812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:39.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:47:39.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:47:39.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-25T17:47:40.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 47, 18), 28.05, 15.6, 0.0, 43.69, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:47:40.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:47:18
2025-12-25T17:47:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:47:40.365 [DEBUG] [Thread-15813] [transport.py] [_log()] starting thread (client mode): 0xb6b222f0
2025-12-25T17:47:40.365 [DEBUG] [Thread-15813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:47:40.381 [DEBUG] [Thread-15813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:47:40.381 [INFO] [Thread-15813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] client lang: <none>
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] server lang: <none>
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] kex follows: False
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] Compression: none
2025-12-25T17:47:40.384 [DEBUG] [Thread-15813] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:47:40.397 [DEBUG] [Thread-15813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:47:40.397 [DEBUG] [Thread-15813] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:47:40.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:47:40.398 [DEBUG] [Thread-15813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:47:40.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:47:40.400 [DEBUG] [Thread-15813] [transport.py] [_log()] userauth is OK
2025-12-25T17:47:40.400 [DEBUG] [Thread-15813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:47:40.400 [DEBUG] [Thread-15813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:47:40.400 [DEBUG] [Thread-15813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:47:40.400 [DEBUG] [Thread-15813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:47:40.424 [INFO] [Thread-15813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:47:40.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:47:41.275 [DEBUG] [Thread-15813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:47:41.275 [DEBUG] [Thread-15813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:47:41.275 [DEBUG] [Thread-15813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:47:41.316 [DEBUG] [Thread-15813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:47:41.316 [DEBUG] [Thread-15813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:47:41.318 [DEBUG] [Thread-15813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:47:41.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:47:41.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:47:41.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:47:41.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:47:41.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:47:41.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:47:41.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:47:41.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:47:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:47:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.657700 -999.00  +25.00  33.72     20   +1.10 1 1 2 1 1   887    0 23.23 -5.45 ----- 41.2 33.7 297.6 43.3 27.2 -28.2 27.5 -27.9 28.1 -26.6 28.3 -26.7
2025-12-25T17:47:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:47:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:47:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.657700
2025-12-25T17:47:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:47:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:47:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:47:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:47:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:47:41.338 [DEBUG] [Thread-15813] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:47:41.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:47:18', tmtdew=28.05, humidity=15.6, cloud=0.0, wind=43.69, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:47:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:47:41.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-25T17:47:41.429 [DEBUG] [Thread-15816] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T17:47:41.429 [DEBUG] [Thread-15816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:47:41.443 [DEBUG] [Thread-15816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:47:41.443 [INFO] [Thread-15816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:47:41.451 [DEBUG] [Thread-15816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:47:41.451 [DEBUG] [Thread-15816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:47:41.451 [DEBUG] [Thread-15816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:47:41.451 [DEBUG] [Thread-15816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:41.451 [DEBUG] [Thread-15816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:47:41.451 [DEBUG] [Thread-15816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] client lang: <none>
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] server lang: <none>
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] kex follows: False
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:47:41.452 [DEBUG] [Thread-15816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:47:41.453 [DEBUG] [Thread-15816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:47:41.453 [DEBUG] [Thread-15816] [transport.py] [_log()] Compression: none
2025-12-25T17:47:41.453 [DEBUG] [Thread-15816] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:47:41.479 [DEBUG] [Thread-15818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:47:41.506 [DEBUG] [Thread-15816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:47:41.506 [DEBUG] [Thread-15816] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:47:41.506 [DEBUG] [Thread-15816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:47:41.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:47:41.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:47:41.564 [DEBUG] [Thread-15816] [transport.py] [_log()] userauth is OK
2025-12-25T17:47:41.564 [DEBUG] [Thread-15816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:47:41.564 [DEBUG] [Thread-15816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:47:41.565 [DEBUG] [Thread-15816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:47:41.565 [DEBUG] [Thread-15816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:47:41.589 [INFO] [Thread-15816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:47:41.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-25T17:47:41.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:47:42.449 [DEBUG] [Thread-15816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:47:42.449 [DEBUG] [Thread-15816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:47:42.497 [DEBUG] [Thread-15816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:47:42.497 [DEBUG] [Thread-15816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:47:42.506 [DEBUG] [Thread-15816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:47:42.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:47:42.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:47:42.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-25T17:47:42.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:47:42.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:47:42.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:47:42.543 [DEBUG] [Thread-15816] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:47:56.522 [DEBUG] [Thread-15819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:05.110 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:05.111 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:11.557 [DEBUG] [Thread-15820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:12.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:48:12.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:48:12.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-25T17:48:13.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 47, 50), 28.17, 15.48, 0.0, 43.12, 25.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:48:13.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:47:50
2025-12-25T17:48:13.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:48:13.515 [DEBUG] [Thread-15821] [transport.py] [_log()] starting thread (client mode): 0xb6bb7fa0
2025-12-25T17:48:13.515 [DEBUG] [Thread-15821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:48:13.539 [DEBUG] [Thread-15821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:48:13.539 [INFO] [Thread-15821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] client lang: <none>
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] server lang: <none>
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] kex follows: False
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] Compression: none
2025-12-25T17:48:13.543 [DEBUG] [Thread-15821] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:48:13.560 [DEBUG] [Thread-15821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:48:13.561 [DEBUG] [Thread-15821] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:48:13.561 [DEBUG] [Thread-15821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:48:13.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:48:13.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:48:13.605 [DEBUG] [Thread-15821] [transport.py] [_log()] userauth is OK
2025-12-25T17:48:13.605 [DEBUG] [Thread-15821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:48:13.605 [DEBUG] [Thread-15821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:48:13.605 [DEBUG] [Thread-15821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:48:13.605 [DEBUG] [Thread-15821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:48:13.638 [INFO] [Thread-15821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:48:13.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:48:14.287 [DEBUG] [Thread-15821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:48:14.287 [DEBUG] [Thread-15821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:48:14.288 [DEBUG] [Thread-15821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:48:14.328 [DEBUG] [Thread-15821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:48:14.328 [DEBUG] [Thread-15821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:48:14.332 [DEBUG] [Thread-15821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:48:14.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:48:14.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:48:14.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:48:14.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:48:14.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:48:14.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:48:14.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:48:14.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:48:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:48:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.658047 -999.00  +24.50  48.85     21   +1.00 1 1 2 1 1   887    0 23.41 -2.44 ----- 46.1 48.9 297.6 56.3 27.2 -29.2 27.4 -29.0 28.1 -26.7 28.2 -27.3
2025-12-25T17:48:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:48:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:48:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.658047
2025-12-25T17:48:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:48:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:48:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:48:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:48:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:48:14.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:47:50', tmtdew=28.17, humidity=15.48, cloud=0.0, wind=43.12, temperature=25.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:47:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:48:14.358 [DEBUG] [Thread-15821] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:48:14.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-25T17:48:14.458 [DEBUG] [Thread-15824] [transport.py] [_log()] starting thread (client mode): 0xb9590940
2025-12-25T17:48:14.458 [DEBUG] [Thread-15824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:48:14.472 [DEBUG] [Thread-15824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:48:14.473 [INFO] [Thread-15824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] client lang: <none>
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] server lang: <none>
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] kex follows: False
2025-12-25T17:48:14.480 [DEBUG] [Thread-15824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:48:14.481 [DEBUG] [Thread-15824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:48:14.481 [DEBUG] [Thread-15824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:48:14.481 [DEBUG] [Thread-15824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:48:14.481 [DEBUG] [Thread-15824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:48:14.481 [DEBUG] [Thread-15824] [transport.py] [_log()] Compression: none
2025-12-25T17:48:14.481 [DEBUG] [Thread-15824] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:48:14.539 [DEBUG] [Thread-15824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:48:14.540 [DEBUG] [Thread-15824] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:48:14.540 [DEBUG] [Thread-15824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:48:14.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:48:14.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:48:14.595 [DEBUG] [Thread-15824] [transport.py] [_log()] userauth is OK
2025-12-25T17:48:14.596 [DEBUG] [Thread-15824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:48:14.596 [DEBUG] [Thread-15824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:48:14.596 [DEBUG] [Thread-15824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:48:14.596 [DEBUG] [Thread-15824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:48:14.615 [INFO] [Thread-15824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:48:14.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-25T17:48:14.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:48:15.457 [DEBUG] [Thread-15824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:48:15.458 [DEBUG] [Thread-15824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:48:15.505 [DEBUG] [Thread-15824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:48:15.506 [DEBUG] [Thread-15824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:48:15.514 [DEBUG] [Thread-15824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:48:15.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:48:15.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-25T17:48:15.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-25T17:48:15.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:48:15.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:48:15.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:48:15.548 [DEBUG] [Thread-15824] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:48:16.998 [DEBUG] [Thread-15826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:26.588 [DEBUG] [Thread-15827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:41.635 [DEBUG] [Thread-15828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:48:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:48:45.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:48:45.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-25T17:48:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 48, 22), 28.22, 15.43, 0.0, 41.53, 25.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:48:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:48:22
2025-12-25T17:48:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:48:46.538 [DEBUG] [Thread-15829] [transport.py] [_log()] starting thread (client mode): 0xb6b23220
2025-12-25T17:48:46.538 [DEBUG] [Thread-15829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:48:46.559 [DEBUG] [Thread-15829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:48:46.559 [INFO] [Thread-15829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:46.562 [DEBUG] [Thread-15829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] client lang: <none>
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] server lang: <none>
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] kex follows: False
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] Compression: none
2025-12-25T17:48:46.563 [DEBUG] [Thread-15829] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:48:46.582 [DEBUG] [Thread-15829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:48:46.583 [DEBUG] [Thread-15829] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:48:46.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:48:46.584 [DEBUG] [Thread-15829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:48:46.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:48:46.586 [DEBUG] [Thread-15829] [transport.py] [_log()] userauth is OK
2025-12-25T17:48:46.587 [DEBUG] [Thread-15829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:48:46.587 [DEBUG] [Thread-15829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:48:46.587 [DEBUG] [Thread-15829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:48:46.587 [DEBUG] [Thread-15829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:48:46.605 [INFO] [Thread-15829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:48:46.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:48:47.386 [DEBUG] [Thread-15829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:48:47.386 [DEBUG] [Thread-15829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:48:47.386 [DEBUG] [Thread-15829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:48:47.427 [DEBUG] [Thread-15829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:48:47.427 [DEBUG] [Thread-15829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:48:47.430 [DEBUG] [Thread-15829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:48:47.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:48:47.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:48:47.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:48:47.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:48:47.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:48:47.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:48:47.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:48:47.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:48:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:48:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.658394 -999.00  +24.90  35.80     21   +1.20 1 1 2 1 1   887    0 23.88 -3.19 ----- 40.3 35.8 309.0 48.4 27.1 -27.8 27.4 -27.9 28.1 -26.7 28.2 -26.5
2025-12-25T17:48:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:48:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:48:47.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.658394
2025-12-25T17:48:47.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:48:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:48:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:48:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:48:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:48:47.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:48:22', tmtdew=28.22, humidity=15.43, cloud=0.0, wind=41.53, temperature=25.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:48:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:48:47.450 [DEBUG] [Thread-15829] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:48:47.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-25T17:48:47.545 [DEBUG] [Thread-15832] [transport.py] [_log()] starting thread (client mode): 0xb6b23b20
2025-12-25T17:48:47.545 [DEBUG] [Thread-15832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:48:47.566 [DEBUG] [Thread-15832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:48:47.567 [INFO] [Thread-15832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:48:47.574 [DEBUG] [Thread-15832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:48:47.574 [DEBUG] [Thread-15832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:48:47.574 [DEBUG] [Thread-15832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:48:47.574 [DEBUG] [Thread-15832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:47.574 [DEBUG] [Thread-15832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] client lang: <none>
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] server lang: <none>
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] kex follows: False
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] Compression: none
2025-12-25T17:48:47.575 [DEBUG] [Thread-15832] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:48:47.632 [DEBUG] [Thread-15832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:48:47.633 [DEBUG] [Thread-15832] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:48:47.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:48:47.634 [DEBUG] [Thread-15832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:48:47.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:48:47.692 [DEBUG] [Thread-15832] [transport.py] [_log()] userauth is OK
2025-12-25T17:48:47.692 [DEBUG] [Thread-15832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:48:47.692 [DEBUG] [Thread-15832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:48:47.692 [DEBUG] [Thread-15832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:48:47.692 [DEBUG] [Thread-15832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:48:47.712 [INFO] [Thread-15832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:48:47.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-25T17:48:47.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:48:48.546 [DEBUG] [Thread-15832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:48:48.546 [DEBUG] [Thread-15832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:48:48.594 [DEBUG] [Thread-15832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:48:48.594 [DEBUG] [Thread-15832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:48:48.603 [DEBUG] [Thread-15832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:48:48.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:48:48.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-25T17:48:48.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:48:48.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:48:48.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:48:48.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:48:48.640 [DEBUG] [Thread-15832] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:48:56.674 [DEBUG] [Thread-15834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:05.251 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:05.253 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:11.721 [DEBUG] [Thread-15835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:17.032 [DEBUG] [Thread-15836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:18.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:49:18.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:49:18.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-25T17:49:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 48, 54), 28.18, 15.4, 0.0, 38.43, 24.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:49:19.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:48:54
2025-12-25T17:49:19.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:49:19.643 [DEBUG] [Thread-15837] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2025-12-25T17:49:19.644 [DEBUG] [Thread-15837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:49:19.664 [DEBUG] [Thread-15837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:49:19.664 [INFO] [Thread-15837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:49:19.667 [DEBUG] [Thread-15837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] client lang: <none>
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] server lang: <none>
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] kex follows: False
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] Compression: none
2025-12-25T17:49:19.668 [DEBUG] [Thread-15837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:49:19.677 [DEBUG] [Thread-15837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:49:19.677 [DEBUG] [Thread-15837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:49:19.678 [DEBUG] [Thread-15837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:49:19.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:49:19.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:49:19.679 [DEBUG] [Thread-15837] [transport.py] [_log()] userauth is OK
2025-12-25T17:49:19.680 [DEBUG] [Thread-15837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:49:19.680 [DEBUG] [Thread-15837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:49:19.680 [DEBUG] [Thread-15837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:49:19.680 [DEBUG] [Thread-15837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:49:19.704 [INFO] [Thread-15837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:49:19.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:49:20.344 [DEBUG] [Thread-15837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:49:20.344 [DEBUG] [Thread-15837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:49:20.344 [DEBUG] [Thread-15837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:49:20.385 [DEBUG] [Thread-15837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:49:20.385 [DEBUG] [Thread-15837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:49:20.388 [DEBUG] [Thread-15837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:49:20.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:49:20.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:49:20.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:49:20.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:49:20.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:49:20.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:49:20.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:49:20.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:49:20.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:49:20.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.658741 -999.00  +24.50  32.84     21   +1.00 1 1 2 1 1   887    0 23.33 -4.32 ----- 29.2 32.8 307.8 44.6 27.2 -28.5 27.4 -28.6 28.1 -25.3 28.2 -27.1
2025-12-25T17:49:20.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:49:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:49:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.658741
2025-12-25T17:49:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:49:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:49:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:49:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:49:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:49:20.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:48:54', tmtdew=28.18, humidity=15.4, cloud=0.0, wind=38.43, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:48:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:49:20.417 [DEBUG] [Thread-15837] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:49:20.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-25T17:49:20.511 [DEBUG] [Thread-15840] [transport.py] [_log()] starting thread (client mode): 0xb6b01d80
2025-12-25T17:49:20.511 [DEBUG] [Thread-15840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:49:20.527 [DEBUG] [Thread-15840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:49:20.527 [INFO] [Thread-15840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:49:20.534 [DEBUG] [Thread-15840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:49:20.534 [DEBUG] [Thread-15840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:49:20.534 [DEBUG] [Thread-15840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] client lang: <none>
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] server lang: <none>
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] kex follows: False
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] Compression: none
2025-12-25T17:49:20.535 [DEBUG] [Thread-15840] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:49:20.595 [DEBUG] [Thread-15840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:49:20.595 [DEBUG] [Thread-15840] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:49:20.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:49:20.596 [DEBUG] [Thread-15840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:49:20.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:49:20.655 [DEBUG] [Thread-15840] [transport.py] [_log()] userauth is OK
2025-12-25T17:49:20.655 [DEBUG] [Thread-15840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:49:20.655 [DEBUG] [Thread-15840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:49:20.655 [DEBUG] [Thread-15840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:49:20.655 [DEBUG] [Thread-15840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:49:20.675 [INFO] [Thread-15840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:49:20.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-25T17:49:20.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:49:21.503 [DEBUG] [Thread-15840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:49:21.503 [DEBUG] [Thread-15840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:49:21.552 [DEBUG] [Thread-15840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:49:21.552 [DEBUG] [Thread-15840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:49:21.561 [DEBUG] [Thread-15840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:49:21.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:49:21.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-25T17:49:21.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-25T17:49:21.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:49:21.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:49:21.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:49:21.594 [DEBUG] [Thread-15840] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:49:26.753 [DEBUG] [Thread-15842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:41.818 [DEBUG] [Thread-15843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:49:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:49:51.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:49:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:49:52.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 49, 26), 28.24, 15.35, 0.0, 38.64, 25.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:49:52.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:49:26
2025-12-25T17:49:52.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:49:52.626 [DEBUG] [Thread-15844] [transport.py] [_log()] starting thread (client mode): 0xb6b00d00
2025-12-25T17:49:52.626 [DEBUG] [Thread-15844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:49:52.647 [DEBUG] [Thread-15844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:49:52.647 [INFO] [Thread-15844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:52.650 [DEBUG] [Thread-15844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] client lang: <none>
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] server lang: <none>
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] kex follows: False
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] Compression: none
2025-12-25T17:49:52.651 [DEBUG] [Thread-15844] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:49:52.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:49:52.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] userauth is OK
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:49:52.667 [DEBUG] [Thread-15844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:49:52.684 [INFO] [Thread-15844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:49:52.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:49:53.478 [DEBUG] [Thread-15844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:49:53.479 [DEBUG] [Thread-15844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:49:53.479 [DEBUG] [Thread-15844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:49:53.520 [DEBUG] [Thread-15844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:49:53.520 [DEBUG] [Thread-15844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:49:53.524 [DEBUG] [Thread-15844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:49:53.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:49:53.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:49:53.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:49:53.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:49:53.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:49:53.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:49:53.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:49:53.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:49:53.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:49:53.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.659088 -999.00  +24.60  33.52     21   +1.00 1 1 2 1 1   887    0 23.86 -5.58 ----- 29.4 33.5 296.6 43.0 27.2 -28.5 27.4 -28.5 28.1 -26.2 28.3 -27.1
2025-12-25T17:49:53.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:49:53.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:49:53.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.659088
2025-12-25T17:49:53.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:49:53.553 [DEBUG] [Thread-15844] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:49:53.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:49:53.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:49:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:49:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:49:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:49:26', tmtdew=28.24, humidity=15.35, cloud=0.0, wind=38.64, temperature=25.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:49:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:49:53.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-25T17:49:53.649 [DEBUG] [Thread-15847] [transport.py] [_log()] starting thread (client mode): 0xb95b3c40
2025-12-25T17:49:53.649 [DEBUG] [Thread-15847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:49:53.664 [DEBUG] [Thread-15847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:49:53.665 [INFO] [Thread-15847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:49:53.672 [DEBUG] [Thread-15847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:49:53.673 [DEBUG] [Thread-15847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:49:53.673 [DEBUG] [Thread-15847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:49:53.673 [DEBUG] [Thread-15847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:53.673 [DEBUG] [Thread-15847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:49:53.673 [DEBUG] [Thread-15847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] client lang: <none>
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] server lang: <none>
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] kex follows: False
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] Compression: none
2025-12-25T17:49:53.674 [DEBUG] [Thread-15847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:49:53.732 [DEBUG] [Thread-15847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:49:53.732 [DEBUG] [Thread-15847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:49:53.733 [DEBUG] [Thread-15847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:49:53.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:49:53.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:49:53.788 [DEBUG] [Thread-15847] [transport.py] [_log()] userauth is OK
2025-12-25T17:49:53.788 [DEBUG] [Thread-15847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:49:53.788 [DEBUG] [Thread-15847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:49:53.788 [DEBUG] [Thread-15847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:49:53.788 [DEBUG] [Thread-15847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:49:53.807 [INFO] [Thread-15847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:49:53.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:49:53.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:49:54.657 [DEBUG] [Thread-15847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:49:54.657 [DEBUG] [Thread-15847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:49:54.705 [DEBUG] [Thread-15847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:49:54.705 [DEBUG] [Thread-15847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:49:54.714 [DEBUG] [Thread-15847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:49:54.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:49:54.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:49:54.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-25T17:49:54.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:49:54.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:49:54.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:49:54.747 [DEBUG] [Thread-15847] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:49:56.850 [DEBUG] [Thread-15849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:05.394 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:05.395 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:11.905 [DEBUG] [Thread-15850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:17.066 [DEBUG] [Thread-15851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:50:24.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:50:24.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-25T17:50:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 49, 58), 28.07, 15.23, 0.0, 34.79, 25.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:50:25.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:49:58
2025-12-25T17:50:25.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:50:25.759 [DEBUG] [Thread-15852] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-25T17:50:25.759 [DEBUG] [Thread-15852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:50:25.780 [DEBUG] [Thread-15852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:50:25.780 [INFO] [Thread-15852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] client lang: <none>
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] server lang: <none>
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] kex follows: False
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] Compression: none
2025-12-25T17:50:25.782 [DEBUG] [Thread-15852] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:50:25.793 [DEBUG] [Thread-15852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:50:25.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:50:25.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] userauth is OK
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:50:25.794 [DEBUG] [Thread-15852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:50:25.804 [INFO] [Thread-15852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:50:25.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:50:26.450 [DEBUG] [Thread-15852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:50:26.450 [DEBUG] [Thread-15852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:50:26.450 [DEBUG] [Thread-15852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:50:26.491 [DEBUG] [Thread-15852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:50:26.491 [DEBUG] [Thread-15852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:50:26.493 [DEBUG] [Thread-15852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:50:26.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:50:26.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:50:26.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:50:26.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:50:26.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:50:26.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:50:26.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.659783 -999.00  +24.50  33.50     21   +1.00 1 1 2 1 1   887    0 23.63 -7.13 ----- 28.7 33.5 310.4 45.9 27.1 -28.6 27.4 -27.8 28.2 -24.9 28.2 -26.5
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.659783
2025-12-25T17:50:26.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:50:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:50:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:50:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:50:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:50:26.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:49:58', tmtdew=28.07, humidity=15.23, cloud=0.0, wind=34.79, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:50:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:50:26.515 [DEBUG] [Thread-15852] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:50: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-25T17:50:26.604 [DEBUG] [Thread-15855] [transport.py] [_log()] starting thread (client mode): 0xb9592800
2025-12-25T17:50:26.604 [DEBUG] [Thread-15855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:50:26.619 [DEBUG] [Thread-15855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:50:26.619 [INFO] [Thread-15855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] client lang: <none>
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] server lang: <none>
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] kex follows: False
2025-12-25T17:50:26.626 [DEBUG] [Thread-15855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:50:26.627 [DEBUG] [Thread-15855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:50:26.627 [DEBUG] [Thread-15855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:50:26.627 [DEBUG] [Thread-15855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:50:26.627 [DEBUG] [Thread-15855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:50:26.627 [DEBUG] [Thread-15855] [transport.py] [_log()] Compression: none
2025-12-25T17:50:26.627 [DEBUG] [Thread-15855] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:50:26.682 [DEBUG] [Thread-15855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:50:26.682 [DEBUG] [Thread-15855] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:50:26.682 [DEBUG] [Thread-15855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:50:26.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:50:26.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:50:26.740 [DEBUG] [Thread-15855] [transport.py] [_log()] userauth is OK
2025-12-25T17:50:26.740 [DEBUG] [Thread-15855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:50:26.740 [DEBUG] [Thread-15855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:50:26.740 [DEBUG] [Thread-15855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:50:26.740 [DEBUG] [Thread-15855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:50:26.755 [INFO] [Thread-15855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:50:26.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-25T17:50:26.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:50:26.936 [DEBUG] [Thread-15857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:27.575 [DEBUG] [Thread-15855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:50:27.575 [DEBUG] [Thread-15855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:50:27.623 [DEBUG] [Thread-15855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:50:27.624 [DEBUG] [Thread-15855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:50:27.632 [DEBUG] [Thread-15855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:50:27.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:50:27.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-25T17:50:27.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-25T17:50:27.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:50:27.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:50:27.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:50:27.664 [DEBUG] [Thread-15855] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:50:41.975 [DEBUG] [Thread-15858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:57.015 [DEBUG] [Thread-15859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:50:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:50:57.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:50:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:50:58.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 50, 30), 27.99, 15.31, 0.0, 27.97, 25.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:50:58.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:50:30
2025-12-25T17:50:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:50:58.655 [DEBUG] [Thread-15860] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T17:50:58.655 [DEBUG] [Thread-15860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:50:58.676 [DEBUG] [Thread-15860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:50:58.676 [INFO] [Thread-15860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] client lang: <none>
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] server lang: <none>
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] kex follows: False
2025-12-25T17:50:58.679 [DEBUG] [Thread-15860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:50:58.680 [DEBUG] [Thread-15860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:50:58.680 [DEBUG] [Thread-15860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:50:58.680 [DEBUG] [Thread-15860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:50:58.680 [DEBUG] [Thread-15860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:50:58.680 [DEBUG] [Thread-15860] [transport.py] [_log()] Compression: none
2025-12-25T17:50:58.680 [DEBUG] [Thread-15860] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:50:58.697 [DEBUG] [Thread-15860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:50:58.698 [DEBUG] [Thread-15860] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:50:58.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:50:58.699 [DEBUG] [Thread-15860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:50:58.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:50:58.701 [DEBUG] [Thread-15860] [transport.py] [_log()] userauth is OK
2025-12-25T17:50:58.701 [DEBUG] [Thread-15860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:50:58.701 [DEBUG] [Thread-15860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:50:58.701 [DEBUG] [Thread-15860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:50:58.701 [DEBUG] [Thread-15860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:50:58.712 [INFO] [Thread-15860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:50:58.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:50:59.478 [DEBUG] [Thread-15860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:50:59.478 [DEBUG] [Thread-15860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:50:59.478 [DEBUG] [Thread-15860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:50:59.519 [DEBUG] [Thread-15860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:50:59.519 [DEBUG] [Thread-15860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:50:59.523 [DEBUG] [Thread-15860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:50:59.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:50:59.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:50:59.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:50:59.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:50:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:50:59.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:50:59.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:50:59.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:50:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:50:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.660130 -999.00  +24.60  27.22     21   +1.20 1 1 1 1 1   887    0 23.63 -9.01 ----- 31.1 27.2 302.0 41.8 27.1 -28.2 27.4 -28.4 28.1 -26.4 28.2 -27.0
2025-12-25T17:50:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:50:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:50:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.660130
2025-12-25T17:50:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:50:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:50:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:50:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:50:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:50:59.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:50:30', tmtdew=27.99, humidity=15.31, cloud=0.0, wind=27.97, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:50:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:50:59.550 [DEBUG] [Thread-15860] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:50:59.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:50:59.646 [DEBUG] [Thread-15863] [transport.py] [_log()] starting thread (client mode): 0xb955a590
2025-12-25T17:50:59.646 [DEBUG] [Thread-15863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:50:59.660 [DEBUG] [Thread-15863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:50:59.660 [INFO] [Thread-15863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] client lang: <none>
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] server lang: <none>
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] kex follows: False
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:50:59.668 [DEBUG] [Thread-15863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:50:59.669 [DEBUG] [Thread-15863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:50:59.669 [DEBUG] [Thread-15863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:50:59.669 [DEBUG] [Thread-15863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:50:59.669 [DEBUG] [Thread-15863] [transport.py] [_log()] Compression: none
2025-12-25T17:50:59.669 [DEBUG] [Thread-15863] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:50:59.729 [DEBUG] [Thread-15863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:50:59.729 [DEBUG] [Thread-15863] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:50:59.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:50:59.730 [DEBUG] [Thread-15863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:50:59.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:50:59.792 [DEBUG] [Thread-15863] [transport.py] [_log()] userauth is OK
2025-12-25T17:50:59.792 [DEBUG] [Thread-15863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:50:59.792 [DEBUG] [Thread-15863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:50:59.792 [DEBUG] [Thread-15863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:50:59.793 [DEBUG] [Thread-15863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:50:59.811 [INFO] [Thread-15863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:50:59.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-25T17:50:59.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:51:00.641 [DEBUG] [Thread-15863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:51:00.642 [DEBUG] [Thread-15863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:51:00.689 [DEBUG] [Thread-15863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:51:00.689 [DEBUG] [Thread-15863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:51:00.699 [DEBUG] [Thread-15863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:51:00.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:51: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')
2025-12-25T17:51:00.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-25T17:51:00.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:51:00.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:51:00.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:51:00.739 [DEBUG] [Thread-15863] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:51:05.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:51:05.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:51:12.047 [DEBUG] [Thread-15865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:51:17.100 [DEBUG] [Thread-15866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:51:27.099 [DEBUG] [Thread-15867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:51:30.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:51:30.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:51:30.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:51:31.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 51, 2), 27.9, 15.41, 0.0, 27.12, 25.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:51:31.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:51:02
2025-12-25T17:51:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:51:31.701 [DEBUG] [Thread-15868] [transport.py] [_log()] starting thread (client mode): 0xb6b00b20
2025-12-25T17:51:31.701 [DEBUG] [Thread-15868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:51:31.721 [DEBUG] [Thread-15868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:51:31.721 [INFO] [Thread-15868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:51:31.724 [DEBUG] [Thread-15868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:51:31.724 [DEBUG] [Thread-15868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] client lang: <none>
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] server lang: <none>
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] kex follows: False
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] Compression: none
2025-12-25T17:51:31.725 [DEBUG] [Thread-15868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:51:31.741 [DEBUG] [Thread-15868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:51:31.741 [DEBUG] [Thread-15868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:51:31.742 [DEBUG] [Thread-15868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:51:31.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:51:31.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:51:31.744 [DEBUG] [Thread-15868] [transport.py] [_log()] userauth is OK
2025-12-25T17:51:31.744 [DEBUG] [Thread-15868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:51:31.744 [DEBUG] [Thread-15868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:51:31.744 [DEBUG] [Thread-15868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:51:31.744 [DEBUG] [Thread-15868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:51:31.769 [INFO] [Thread-15868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:51:31.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:51:32.389 [DEBUG] [Thread-15868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:51:32.389 [DEBUG] [Thread-15868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:51:32.390 [DEBUG] [Thread-15868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:51:32.430 [DEBUG] [Thread-15868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:51:32.430 [DEBUG] [Thread-15868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:51:32.433 [DEBUG] [Thread-15868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:51:32.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:51:32.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:51:32.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:51:32.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:51:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:51:32.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:51:32.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:51:32.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:51:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:51:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.660477 -999.00  +24.60  38.57     21   +1.20 1 1 2 1 1   887    0 23.08 -12.13 ----- 41.7 38.6 314.0 51.4 27.1 -28.6 27.4 -27.9 28.1 -24.9 28.2 -26.7
2025-12-25T17:51:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:51:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:51:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.660477
2025-12-25T17:51:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:51:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:51:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:51:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:51:32.458 [DEBUG] [Thread-15868] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:51:32.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:51:32.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:51:02', tmtdew=27.9, humidity=15.41, cloud=0.0, wind=27.12, temperature=25.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:51:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:51:32.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-25T17:51:32.551 [DEBUG] [Thread-15871] [transport.py] [_log()] starting thread (client mode): 0xb6b02e00
2025-12-25T17:51:32.551 [DEBUG] [Thread-15871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:51:32.566 [DEBUG] [Thread-15871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:51:32.566 [INFO] [Thread-15871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:51:32.573 [DEBUG] [Thread-15871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:51:32.574 [DEBUG] [Thread-15871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] client lang: <none>
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] server lang: <none>
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] kex follows: False
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:51:32.575 [DEBUG] [Thread-15871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:51:32.576 [DEBUG] [Thread-15871] [transport.py] [_log()] Compression: none
2025-12-25T17:51:32.576 [DEBUG] [Thread-15871] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:51:32.632 [DEBUG] [Thread-15871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:51:32.633 [DEBUG] [Thread-15871] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:51:32.634 [DEBUG] [Thread-15871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:51:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:51:32.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:51:32.688 [DEBUG] [Thread-15871] [transport.py] [_log()] userauth is OK
2025-12-25T17:51:32.689 [DEBUG] [Thread-15871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:51:32.689 [DEBUG] [Thread-15871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:51:32.689 [DEBUG] [Thread-15871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:51:32.689 [DEBUG] [Thread-15871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:51:32.709 [INFO] [Thread-15871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:51:32.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-25T17:51:32.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:51:33.527 [DEBUG] [Thread-15871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:51:33.527 [DEBUG] [Thread-15871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:51:33.575 [DEBUG] [Thread-15871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:51:33.575 [DEBUG] [Thread-15871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:51:33.585 [DEBUG] [Thread-15871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:51:33.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:51:33.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:51:33.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-25T17:51:33.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:51:33.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:51:33.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:51:33.621 [DEBUG] [Thread-15871] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:51:42.133 [DEBUG] [Thread-15873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:51:57.179 [DEBUG] [Thread-15874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:03.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:52:03.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:52:03.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-25T17:52:04.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 51, 35), 28.05, 15.45, 0.0, 40.51, 25.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:52:04.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:51:35
2025-12-25T17:52:04.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:52:04.630 [DEBUG] [Thread-15875] [transport.py] [_log()] starting thread (client mode): 0xb6b00c40
2025-12-25T17:52:04.630 [DEBUG] [Thread-15875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:52:04.650 [DEBUG] [Thread-15875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:52:04.650 [INFO] [Thread-15875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:52:04.653 [DEBUG] [Thread-15875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:52:04.653 [DEBUG] [Thread-15875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:52:04.653 [DEBUG] [Thread-15875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:52:04.653 [DEBUG] [Thread-15875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:04.653 [DEBUG] [Thread-15875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] client lang: <none>
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] server lang: <none>
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] kex follows: False
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:52:04.654 [DEBUG] [Thread-15875] [transport.py] [_log()] Compression: none
2025-12-25T17:52:04.655 [DEBUG] [Thread-15875] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:52:04.674 [DEBUG] [Thread-15875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:52:04.675 [DEBUG] [Thread-15875] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:52:04.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:52:04.676 [DEBUG] [Thread-15875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:52:04.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:52:04.678 [DEBUG] [Thread-15875] [transport.py] [_log()] userauth is OK
2025-12-25T17:52:04.678 [DEBUG] [Thread-15875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:52:04.678 [DEBUG] [Thread-15875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:52:04.678 [DEBUG] [Thread-15875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:52:04.678 [DEBUG] [Thread-15875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:52:04.702 [INFO] [Thread-15875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:52:04.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:52:05.501 [DEBUG] [Thread-15875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:52:05.502 [DEBUG] [Thread-15875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:52:05.502 [DEBUG] [Thread-15875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:52:05.543 [DEBUG] [Thread-15875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:52:05.544 [DEBUG] [Thread-15875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:52:05.546 [DEBUG] [Thread-15875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:52:05.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:52:05.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:52:05.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:52:05.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:52:05.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:52:05.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:52:05.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:52:05.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.660825 -999.00  +24.80  29.06     21   +1.20 1 1 1 1 1   887    0 23.44 -13.96 ----- 35.1 29.1 325.0 50.8 27.1 -28.5 27.4 -27.6 28.1 -26.9 28.2 -26.8
2025-12-25T17:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.660825
2025-12-25T17:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:52:05.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:52:05.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:52:05.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:52:05.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:52:05.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:51:35', tmtdew=28.05, humidity=15.45, cloud=0.0, wind=40.51, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:51:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:52:05.568 [DEBUG] [Thread-15875] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:52:05.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-25T17:52:05.664 [DEBUG] [Thread-15878] [transport.py] [_log()] starting thread (client mode): 0xb6b00640
2025-12-25T17:52:05.664 [DEBUG] [Thread-15878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:52:05.673 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:05.673 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:05.679 [DEBUG] [Thread-15878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:52:05.679 [INFO] [Thread-15878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:52:05.686 [DEBUG] [Thread-15878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] client lang: <none>
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] server lang: <none>
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] kex follows: False
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:52:05.687 [DEBUG] [Thread-15878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:52:05.688 [DEBUG] [Thread-15878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:52:05.688 [DEBUG] [Thread-15878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:52:05.688 [DEBUG] [Thread-15878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:52:05.688 [DEBUG] [Thread-15878] [transport.py] [_log()] Compression: none
2025-12-25T17:52:05.688 [DEBUG] [Thread-15878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:52:05.744 [DEBUG] [Thread-15878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:52:05.744 [DEBUG] [Thread-15878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:52:05.745 [DEBUG] [Thread-15878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:52:05.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:52:05.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:52:05.799 [DEBUG] [Thread-15878] [transport.py] [_log()] userauth is OK
2025-12-25T17:52:05.800 [DEBUG] [Thread-15878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:52:05.800 [DEBUG] [Thread-15878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:52:05.800 [DEBUG] [Thread-15878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:52:05.800 [DEBUG] [Thread-15878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:52:05.824 [INFO] [Thread-15878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:52:05.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-25T17:52:05.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:52:06.653 [DEBUG] [Thread-15878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:52:06.653 [DEBUG] [Thread-15878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:52:06.701 [DEBUG] [Thread-15878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:52:06.701 [DEBUG] [Thread-15878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:52:06.711 [DEBUG] [Thread-15878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:52:06.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:52:06.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-25T17:52:06.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-25T17:52:06.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:52:06.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:52:06.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:52:06.747 [DEBUG] [Thread-15878] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:52:12.214 [DEBUG] [Thread-15880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:17.132 [DEBUG] [Thread-15881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:27.266 [DEBUG] [Thread-15882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:52:36.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:52:36.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-25T17:52:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 52, 7), 27.97, 15.53, 0.0, 39.08, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:52:37.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:52:07
2025-12-25T17:52:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:52:37.755 [DEBUG] [Thread-15883] [transport.py] [_log()] starting thread (client mode): 0xb6b7ce20
2025-12-25T17:52:37.755 [DEBUG] [Thread-15883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:52:37.775 [DEBUG] [Thread-15883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:52:37.775 [INFO] [Thread-15883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:52:37.778 [DEBUG] [Thread-15883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:52:37.778 [DEBUG] [Thread-15883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] client lang: <none>
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] server lang: <none>
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] kex follows: False
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:52:37.779 [DEBUG] [Thread-15883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:52:37.780 [DEBUG] [Thread-15883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:52:37.780 [DEBUG] [Thread-15883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:52:37.780 [DEBUG] [Thread-15883] [transport.py] [_log()] Compression: none
2025-12-25T17:52:37.780 [DEBUG] [Thread-15883] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:52:37.796 [DEBUG] [Thread-15883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:52:37.797 [DEBUG] [Thread-15883] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:52:37.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:52:37.797 [DEBUG] [Thread-15883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:52:37.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:52:37.799 [DEBUG] [Thread-15883] [transport.py] [_log()] userauth is OK
2025-12-25T17:52:37.800 [DEBUG] [Thread-15883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:52:37.800 [DEBUG] [Thread-15883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:52:37.800 [DEBUG] [Thread-15883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:52:37.800 [DEBUG] [Thread-15883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:52:37.835 [INFO] [Thread-15883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:52:37.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:52:38.488 [DEBUG] [Thread-15883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:52:38.488 [DEBUG] [Thread-15883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:52:38.489 [DEBUG] [Thread-15883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:52:38.530 [DEBUG] [Thread-15883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:52:38.530 [DEBUG] [Thread-15883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:52:38.533 [DEBUG] [Thread-15883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:52:38.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:52:38.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:52:38.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:52:38.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:52:38.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:52:38.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:52:38.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:52:38.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:52:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:52:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.661172 -999.00  +24.60  38.84     21   +1.20 1 1 2 1 1   887    0 23.10 -17.50 ----- 33.9 38.8 322.2 51.6 27.1 -28.4 27.3 -27.5 28.0 -25.0 28.1 -27.1
2025-12-25T17:52:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:52:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:52:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.661172
2025-12-25T17:52:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:52:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:52:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:52:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:52:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:52:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:52:07', tmtdew=27.97, humidity=15.53, cloud=0.0, wind=39.08, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:52:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:52:38.557 [DEBUG] [Thread-15883] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:52:38.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-25T17:52:38.650 [DEBUG] [Thread-15886] [transport.py] [_log()] starting thread (client mode): 0xb6bb6080
2025-12-25T17:52:38.650 [DEBUG] [Thread-15886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:52:38.665 [DEBUG] [Thread-15886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:52:38.665 [INFO] [Thread-15886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] client lang: <none>
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] server lang: <none>
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] kex follows: False
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:52:38.672 [DEBUG] [Thread-15886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:52:38.673 [DEBUG] [Thread-15886] [transport.py] [_log()] Compression: none
2025-12-25T17:52:38.673 [DEBUG] [Thread-15886] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:52:38.730 [DEBUG] [Thread-15886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:52:38.731 [DEBUG] [Thread-15886] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:52:38.731 [DEBUG] [Thread-15886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:52:38.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:52:38.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:52:38.787 [DEBUG] [Thread-15886] [transport.py] [_log()] userauth is OK
2025-12-25T17:52:38.787 [DEBUG] [Thread-15886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:52:38.787 [DEBUG] [Thread-15886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:52:38.788 [DEBUG] [Thread-15886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:52:38.788 [DEBUG] [Thread-15886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:52:38.810 [INFO] [Thread-15886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:52:38.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-25T17:52:38.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:52:39.601 [DEBUG] [Thread-15886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:52:39.601 [DEBUG] [Thread-15886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:52:39.649 [DEBUG] [Thread-15886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:52:39.650 [DEBUG] [Thread-15886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:52:39.658 [DEBUG] [Thread-15886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:52:39.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:52:39.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-25T17:52:39.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-25T17:52:39.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:52:39.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:52:39.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:52:39.691 [DEBUG] [Thread-15886] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:52:42.298 [DEBUG] [Thread-15888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:52:57.347 [DEBUG] [Thread-15889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:05.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:05.814 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:53:09.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:53:09.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-25T17:53:10.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 52, 39), 28.01, 15.6, 0.0, 36.05, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:53:10.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:52:39
2025-12-25T17:53:10.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:53:10.686 [DEBUG] [Thread-15890] [transport.py] [_log()] starting thread (client mode): 0xb95d7670
2025-12-25T17:53:10.687 [DEBUG] [Thread-15890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:53:10.706 [DEBUG] [Thread-15890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:53:10.706 [INFO] [Thread-15890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] client lang: <none>
2025-12-25T17:53:10.709 [DEBUG] [Thread-15890] [transport.py] [_log()] server lang: <none>
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] kex follows: False
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] Compression: none
2025-12-25T17:53:10.710 [DEBUG] [Thread-15890] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:53:10.726 [DEBUG] [Thread-15890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:53:10.727 [DEBUG] [Thread-15890] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:53:10.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:53:10.728 [DEBUG] [Thread-15890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:53:10.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:53:10.730 [DEBUG] [Thread-15890] [transport.py] [_log()] userauth is OK
2025-12-25T17:53:10.730 [DEBUG] [Thread-15890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:53:10.730 [DEBUG] [Thread-15890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:53:10.730 [DEBUG] [Thread-15890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:53:10.731 [DEBUG] [Thread-15890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:53:10.756 [INFO] [Thread-15890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:53:10.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:53:11.542 [DEBUG] [Thread-15890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:53:11.543 [DEBUG] [Thread-15890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:53:11.543 [DEBUG] [Thread-15890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:53:11.584 [DEBUG] [Thread-15890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:53:11.584 [DEBUG] [Thread-15890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:53:11.588 [DEBUG] [Thread-15890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:53:11.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:53:11.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:53:11.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:53:11.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:53:11.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:53:11.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:53:11.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:53:11.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:53:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:53:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.661519 -999.00  +24.60  28.94     21   +1.20 1 1 1 1 1   887    0 23.00 -21.12 ----- 29.0 28.9 327.0 46.4 27.0 -28.0 27.2 -27.5 28.0 -25.8 28.1 -26.6
2025-12-25T17:53:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:53:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:53:11.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.661519
2025-12-25T17:53:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:53:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:53:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:53:11.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:53:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:53:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:52:39', tmtdew=28.01, humidity=15.6, cloud=0.0, wind=36.05, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:52:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:53:11.615 [DEBUG] [Thread-15890] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:53:11.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-25T17:53:11.708 [DEBUG] [Thread-15893] [transport.py] [_log()] starting thread (client mode): 0xb6b7d2a0
2025-12-25T17:53:11.708 [DEBUG] [Thread-15893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:53:11.722 [DEBUG] [Thread-15893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:53:11.722 [INFO] [Thread-15893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:11.730 [DEBUG] [Thread-15893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] client lang: <none>
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] server lang: <none>
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] kex follows: False
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] Compression: none
2025-12-25T17:53:11.731 [DEBUG] [Thread-15893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:53:11.786 [DEBUG] [Thread-15893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:53:11.786 [DEBUG] [Thread-15893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:53:11.786 [DEBUG] [Thread-15893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:53:11.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:53:11.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:53:11.843 [DEBUG] [Thread-15893] [transport.py] [_log()] userauth is OK
2025-12-25T17:53:11.843 [DEBUG] [Thread-15893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:53:11.843 [DEBUG] [Thread-15893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:53:11.843 [DEBUG] [Thread-15893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:53:11.843 [DEBUG] [Thread-15893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:53:11.857 [INFO] [Thread-15893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:53:11.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-25T17:53:11.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:53:12.382 [DEBUG] [Thread-15895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:12.712 [DEBUG] [Thread-15893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:53:12.712 [DEBUG] [Thread-15893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:53:12.760 [DEBUG] [Thread-15893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:53:12.760 [DEBUG] [Thread-15893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:53:12.768 [DEBUG] [Thread-15893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:53:12.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:53:12.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-25T17:53:12.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-25T17:53:12.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:53:12.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:53:12.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:53:12.800 [DEBUG] [Thread-15893] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:53:17.178 [DEBUG] [Thread-15896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:27.422 [DEBUG] [Thread-15897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:42.456 [DEBUG] [Thread-15898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:53:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:53:42.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:53:42.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-25T17:53:43.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 53, 11), 28.14, 15.46, 0.0, 30.49, 25.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:53:43.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:53:11
2025-12-25T17:53:43.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:53:43.850 [DEBUG] [Thread-15899] [transport.py] [_log()] starting thread (client mode): 0xb6b7c9d0
2025-12-25T17:53:43.850 [DEBUG] [Thread-15899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:53:43.871 [DEBUG] [Thread-15899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:53:43.871 [INFO] [Thread-15899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:53:43.874 [DEBUG] [Thread-15899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] client lang: <none>
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] server lang: <none>
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] kex follows: False
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] Compression: none
2025-12-25T17:53:43.875 [DEBUG] [Thread-15899] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:53:43.892 [DEBUG] [Thread-15899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:53:43.892 [DEBUG] [Thread-15899] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:53:43.892 [DEBUG] [Thread-15899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:53:43.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:53:43.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:53:43.893 [DEBUG] [Thread-15899] [transport.py] [_log()] userauth is OK
2025-12-25T17:53:43.893 [DEBUG] [Thread-15899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:53:43.893 [DEBUG] [Thread-15899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:53:43.893 [DEBUG] [Thread-15899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:53:43.893 [DEBUG] [Thread-15899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:53:43.902 [INFO] [Thread-15899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:53:43.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:53:44.570 [DEBUG] [Thread-15899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:53:44.570 [DEBUG] [Thread-15899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:53:44.570 [DEBUG] [Thread-15899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:53:44.612 [DEBUG] [Thread-15899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:53:44.613 [DEBUG] [Thread-15899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:53:44.615 [DEBUG] [Thread-15899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:53:44.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:53:44.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:53:44.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:53:44.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:53:44.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:53:44.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:53:44.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.661866 -999.00  +24.70  39.95     21   +1.20 1 1 2 1 1   887    0 23.18 -21.16 ----- 35.8 40.0 298.8 46.4 27.0 -28.0 27.3 -28.4 28.1 -27.9 28.2 -26.3
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.661866
2025-12-25T17:53:44.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:53:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:53:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:53:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:53:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:53:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:53:11', tmtdew=28.14, humidity=15.46, cloud=0.0, wind=30.49, temperature=25.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:53:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:53:44.635 [DEBUG] [Thread-15899] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:53:44.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-25T17:53:44.719 [DEBUG] [Thread-15902] [transport.py] [_log()] starting thread (client mode): 0xb6b7f0a0
2025-12-25T17:53:44.719 [DEBUG] [Thread-15902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:53:44.733 [DEBUG] [Thread-15902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:53:44.733 [INFO] [Thread-15902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] client lang: <none>
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] server lang: <none>
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] kex follows: False
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] Compression: none
2025-12-25T17:53:44.741 [DEBUG] [Thread-15902] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:53:44.798 [DEBUG] [Thread-15902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:53:44.798 [DEBUG] [Thread-15902] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:53:44.798 [DEBUG] [Thread-15902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:53:44.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:53:44.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:53:44.855 [DEBUG] [Thread-15902] [transport.py] [_log()] userauth is OK
2025-12-25T17:53:44.855 [DEBUG] [Thread-15902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:53:44.855 [DEBUG] [Thread-15902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:53:44.855 [DEBUG] [Thread-15902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:53:44.855 [DEBUG] [Thread-15902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:53:44.869 [INFO] [Thread-15902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:53:44.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:53:44.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:53:45.665 [DEBUG] [Thread-15902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:53:45.665 [DEBUG] [Thread-15902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:53:45.712 [DEBUG] [Thread-15902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:53:45.712 [DEBUG] [Thread-15902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:53:45.720 [DEBUG] [Thread-15902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:53:45.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:53:45.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:53:45.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-25T17:53:45.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:53:45.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:53:45.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:53:45.752 [DEBUG] [Thread-15902] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:53:57.488 [DEBUG] [Thread-15904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:05.954 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:05.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:12.537 [DEBUG] [Thread-15905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:15.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:54:15.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:54:15.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-25T17:54:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 53, 43), 27.97, 15.48, 0.0, 39.58, 25.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:54:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:53:43
2025-12-25T17:54:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:54:16.813 [DEBUG] [Thread-15906] [transport.py] [_log()] starting thread (client mode): 0xb6b7c640
2025-12-25T17:54:16.813 [DEBUG] [Thread-15906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:54:16.834 [DEBUG] [Thread-15906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:54:16.835 [INFO] [Thread-15906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:54:16.837 [DEBUG] [Thread-15906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:54:16.837 [DEBUG] [Thread-15906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] client lang: <none>
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] server lang: <none>
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] kex follows: False
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] Compression: none
2025-12-25T17:54:16.838 [DEBUG] [Thread-15906] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:54:16.854 [DEBUG] [Thread-15906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:54:16.854 [DEBUG] [Thread-15906] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:54:16.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:54:16.854 [DEBUG] [Thread-15906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:54:16.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:54:16.855 [DEBUG] [Thread-15906] [transport.py] [_log()] userauth is OK
2025-12-25T17:54:16.855 [DEBUG] [Thread-15906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:54:16.855 [DEBUG] [Thread-15906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:54:16.855 [DEBUG] [Thread-15906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:54:16.855 [DEBUG] [Thread-15906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:54:16.864 [INFO] [Thread-15906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:54:16.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:54:17.207 [DEBUG] [Thread-15908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:17.626 [DEBUG] [Thread-15906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:54:17.626 [DEBUG] [Thread-15906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:54:17.626 [DEBUG] [Thread-15906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:54:17.667 [DEBUG] [Thread-15906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:54:17.667 [DEBUG] [Thread-15906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:54:17.670 [DEBUG] [Thread-15906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:54:17.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:54:17.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:54:17.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:54:17.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:54:17.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:54:17.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:54:17.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:54:17.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.662213 -999.00  +24.60  33.90     21   +1.10 1 1 2 1 1   887    0 23.69 -14.92 ----- 28.9 33.9 290.0 48.3 26.9 -28.3 27.2 -28.0 27.8 -27.8 28.0 -27.0
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.662213
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:54:17.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:53:43', tmtdew=27.97, humidity=15.48, cloud=0.0, wind=39.58, temperature=25.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:53:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:54:17.691 [DEBUG] [Thread-15906] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:54:17.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-25T17:54:17.774 [DEBUG] [Thread-15910] [transport.py] [_log()] starting thread (client mode): 0xb6b7ffd0
2025-12-25T17:54:17.774 [DEBUG] [Thread-15910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:54:17.788 [DEBUG] [Thread-15910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:54:17.788 [INFO] [Thread-15910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] client lang: <none>
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] server lang: <none>
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] kex follows: False
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] Compression: none
2025-12-25T17:54:17.796 [DEBUG] [Thread-15910] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:54:17.854 [DEBUG] [Thread-15910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:54:17.854 [DEBUG] [Thread-15910] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:54:17.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:54:17.855 [DEBUG] [Thread-15910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:54:17.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:54:17.911 [DEBUG] [Thread-15910] [transport.py] [_log()] userauth is OK
2025-12-25T17:54:17.911 [DEBUG] [Thread-15910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:54:17.911 [DEBUG] [Thread-15910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:54:17.911 [DEBUG] [Thread-15910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:54:17.911 [DEBUG] [Thread-15910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:54:17.925 [INFO] [Thread-15910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:54:17.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T17:54:17.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:54:18.757 [DEBUG] [Thread-15910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:54:18.757 [DEBUG] [Thread-15910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:54:18.805 [DEBUG] [Thread-15910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:54:18.805 [DEBUG] [Thread-15910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:54:18.814 [DEBUG] [Thread-15910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:54:18.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:54:18.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')
2025-12-25T17:54:18.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:54:18.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:54:18.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:54:18.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:54:18.845 [DEBUG] [Thread-15910] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:54:27.570 [DEBUG] [Thread-15912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:42.625 [DEBUG] [Thread-15913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:54:48.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:54:48.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:54:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:54:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 54, 15), 28.14, 15.31, 0.0, 40.65, 25.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:54:49.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:54:15
2025-12-25T17:54:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:54:49.891 [DEBUG] [Thread-15914] [transport.py] [_log()] starting thread (client mode): 0xb6b7c700
2025-12-25T17:54:49.891 [DEBUG] [Thread-15914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:54:49.912 [DEBUG] [Thread-15914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:54:49.912 [INFO] [Thread-15914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] client lang: <none>
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] server lang: <none>
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] kex follows: False
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] Compression: none
2025-12-25T17:54:49.915 [DEBUG] [Thread-15914] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:54:49.932 [DEBUG] [Thread-15914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:54:49.933 [DEBUG] [Thread-15914] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:54:49.933 [DEBUG] [Thread-15914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:54:49.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:54:49.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:54:49.935 [DEBUG] [Thread-15914] [transport.py] [_log()] userauth is OK
2025-12-25T17:54:49.935 [DEBUG] [Thread-15914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:54:49.935 [DEBUG] [Thread-15914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:54:49.935 [DEBUG] [Thread-15914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:54:49.935 [DEBUG] [Thread-15914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:54:49.958 [INFO] [Thread-15914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:54:49.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:54:50.596 [DEBUG] [Thread-15914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:54:50.596 [DEBUG] [Thread-15914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:54:50.596 [DEBUG] [Thread-15914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:54:50.638 [DEBUG] [Thread-15914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:54:50.638 [DEBUG] [Thread-15914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:54:50.640 [DEBUG] [Thread-15914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:54:50.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:54:50.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:54:50.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:54:50.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:54:50.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:54:50.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:54:50.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:54:50.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:54:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:54:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.662561 -999.00  +24.40  38.35     21   +1.00 1 1 2 1 1   887    0 23.87 -8.96 ----- 34.0 38.4 295.2 46.6 26.9 -28.6 27.2 -28.6 27.8 -29.3 28.0 -27.1
2025-12-25T17:54:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:54:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:54:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.662561
2025-12-25T17:54:50.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:54:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:54:50.663 [DEBUG] [Thread-15914] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:54:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:54:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:54:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:54:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:54:15', tmtdew=28.14, humidity=15.31, cloud=0.0, wind=40.65, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:54:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:54:50.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:54:50.768 [DEBUG] [Thread-15917] [transport.py] [_log()] starting thread (client mode): 0xb9591f00
2025-12-25T17:54:50.769 [DEBUG] [Thread-15917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:54:50.783 [DEBUG] [Thread-15917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:54:50.784 [INFO] [Thread-15917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:54:50.791 [DEBUG] [Thread-15917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:54:50.791 [DEBUG] [Thread-15917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:54:50.791 [DEBUG] [Thread-15917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:54:50.791 [DEBUG] [Thread-15917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:50.791 [DEBUG] [Thread-15917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] client lang: <none>
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] server lang: <none>
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] kex follows: False
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:54:50.792 [DEBUG] [Thread-15917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:54:50.793 [DEBUG] [Thread-15917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:54:50.793 [DEBUG] [Thread-15917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:54:50.793 [DEBUG] [Thread-15917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:54:50.793 [DEBUG] [Thread-15917] [transport.py] [_log()] Compression: none
2025-12-25T17:54:50.793 [DEBUG] [Thread-15917] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:54:50.847 [DEBUG] [Thread-15917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:54:50.848 [DEBUG] [Thread-15917] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:54:50.848 [DEBUG] [Thread-15917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:54:50.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:54:50.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:54:50.903 [DEBUG] [Thread-15917] [transport.py] [_log()] userauth is OK
2025-12-25T17:54:50.904 [DEBUG] [Thread-15917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:54:50.904 [DEBUG] [Thread-15917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:54:50.904 [DEBUG] [Thread-15917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:54:50.904 [DEBUG] [Thread-15917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:54:50.923 [INFO] [Thread-15917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:54:50.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-25T17:54:50.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:54:51.714 [DEBUG] [Thread-15917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:54:51.714 [DEBUG] [Thread-15917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:54:51.762 [DEBUG] [Thread-15917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:54:51.762 [DEBUG] [Thread-15917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:54:51.771 [DEBUG] [Thread-15917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:54:51.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:54:51.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-25T17:54:51.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-25T17:54:51.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:54:51.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:54:51.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:54:51.806 [DEBUG] [Thread-15917] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:54:57.655 [DEBUG] [Thread-15919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:06.097 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:06.098 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:12.694 [DEBUG] [Thread-15920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:17.240 [DEBUG] [Thread-15921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:55:21.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:55:21.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:55:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 54, 47), 28.02, 15.43, 0.0, 40.86, 25.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:55:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:54:47
2025-12-25T17:55:22.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:55:22.809 [DEBUG] [Thread-15922] [transport.py] [_log()] starting thread (client mode): 0xb9591a20
2025-12-25T17:55:22.809 [DEBUG] [Thread-15922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:55:22.830 [DEBUG] [Thread-15922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:55:22.830 [INFO] [Thread-15922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:55:22.834 [DEBUG] [Thread-15922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:55:22.834 [DEBUG] [Thread-15922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:55:22.834 [DEBUG] [Thread-15922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:55:22.834 [DEBUG] [Thread-15922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:22.834 [DEBUG] [Thread-15922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] client lang: <none>
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] server lang: <none>
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] kex follows: False
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:55:22.835 [DEBUG] [Thread-15922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:55:22.836 [DEBUG] [Thread-15922] [transport.py] [_log()] Compression: none
2025-12-25T17:55:22.836 [DEBUG] [Thread-15922] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:55:22.854 [DEBUG] [Thread-15922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:55:22.855 [DEBUG] [Thread-15922] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:55:22.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:55:22.856 [DEBUG] [Thread-15922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:55:22.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:55:22.858 [DEBUG] [Thread-15922] [transport.py] [_log()] userauth is OK
2025-12-25T17:55:22.858 [DEBUG] [Thread-15922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:55:22.859 [DEBUG] [Thread-15922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:55:22.859 [DEBUG] [Thread-15922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:55:22.859 [DEBUG] [Thread-15922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:55:22.875 [INFO] [Thread-15922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:55:22.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:55:23.656 [DEBUG] [Thread-15922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:55:23.656 [DEBUG] [Thread-15922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:55:23.657 [DEBUG] [Thread-15922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:55:23.697 [DEBUG] [Thread-15922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:55:23.697 [DEBUG] [Thread-15922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:55:23.701 [DEBUG] [Thread-15922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:55:23.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:55:23.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:55:23.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:55:23.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:55:23.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:55:23.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:55:23.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:55:23.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:55:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:55:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.662908 -999.00  +24.30  31.53     21   +1.00 1 1 2 1 1   887    0 23.89 -5.11 ----- 31.0 31.5 294.6 40.5 26.9 -28.0 27.2 -28.4 27.9 -26.9 28.0 -26.5
2025-12-25T17:55:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:55:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:55:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.662908
2025-12-25T17:55:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:55:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:55:23.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:55:23.727 [DEBUG] [Thread-15922] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:55:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:55:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:55:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:54:47', tmtdew=28.02, humidity=15.43, cloud=0.0, wind=40.86, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:54:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:55:23.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-25T17:55:23.823 [DEBUG] [Thread-15925] [transport.py] [_log()] starting thread (client mode): 0xb6b01e40
2025-12-25T17:55:23.823 [DEBUG] [Thread-15925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:55:23.838 [DEBUG] [Thread-15925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:55:23.838 [INFO] [Thread-15925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:55:23.846 [DEBUG] [Thread-15925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:55:23.846 [DEBUG] [Thread-15925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:55:23.846 [DEBUG] [Thread-15925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:55:23.846 [DEBUG] [Thread-15925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:23.846 [DEBUG] [Thread-15925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] client lang: <none>
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] server lang: <none>
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] kex follows: False
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] Compression: none
2025-12-25T17:55:23.847 [DEBUG] [Thread-15925] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:55:23.903 [DEBUG] [Thread-15925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:55:23.904 [DEBUG] [Thread-15925] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:55:23.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:55:23.905 [DEBUG] [Thread-15925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:55:23.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:55:23.963 [DEBUG] [Thread-15925] [transport.py] [_log()] userauth is OK
2025-12-25T17:55:23.963 [DEBUG] [Thread-15925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:55:23.963 [DEBUG] [Thread-15925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:55:23.964 [DEBUG] [Thread-15925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:55:23.964 [DEBUG] [Thread-15925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:55:23.982 [INFO] [Thread-15925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:55:23.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-25T17:55:23.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:55:24.798 [DEBUG] [Thread-15925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:55:24.799 [DEBUG] [Thread-15925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:55:24.846 [DEBUG] [Thread-15925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:55:24.846 [DEBUG] [Thread-15925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:55:24.855 [DEBUG] [Thread-15925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:55:24.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:55:24.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-25T17:55:24.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-25T17:55:24.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:55:24.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:55:24.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:55:24.892 [DEBUG] [Thread-15925] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:55:27.729 [DEBUG] [Thread-15927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:42.783 [DEBUG] [Thread-15928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:55:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:55:54.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:55:54.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-25T17:55:55.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 55, 51), 27.88, 15.45, 0.0, 40.39, 24.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:55:55.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:55:51
2025-12-25T17:55:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:55:55.894 [DEBUG] [Thread-15929] [transport.py] [_log()] starting thread (client mode): 0xb6b017e0
2025-12-25T17:55:55.895 [DEBUG] [Thread-15929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:55:55.915 [DEBUG] [Thread-15929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:55:55.916 [INFO] [Thread-15929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] client lang: <none>
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] server lang: <none>
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] kex follows: False
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] Compression: none
2025-12-25T17:55:55.919 [DEBUG] [Thread-15929] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:55:55.936 [DEBUG] [Thread-15929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:55:55.936 [DEBUG] [Thread-15929] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:55:55.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:55:55.937 [DEBUG] [Thread-15929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:55:55.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:55:55.939 [DEBUG] [Thread-15929] [transport.py] [_log()] userauth is OK
2025-12-25T17:55:55.939 [DEBUG] [Thread-15929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:55:55.939 [DEBUG] [Thread-15929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:55:55.939 [DEBUG] [Thread-15929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:55:55.939 [DEBUG] [Thread-15929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:55:55.961 [INFO] [Thread-15929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:55:55.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:55:56.572 [DEBUG] [Thread-15929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:55:56.572 [DEBUG] [Thread-15929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:55:56.573 [DEBUG] [Thread-15929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:55:56.613 [DEBUG] [Thread-15929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:55:56.614 [DEBUG] [Thread-15929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:55:56.616 [DEBUG] [Thread-15929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:55:56.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:55:56.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:55:56.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:55:56.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:55:56.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:55:56.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:55:56.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:55:56.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:55:56.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:55:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.663602 -999.00  +24.60  25.09     21   +1.10 1 1 1 1 1   887    0 23.45 -3.00 ----- 30.4 25.1 296.4 42.3 26.9 -28.7 27.2 -27.7 27.9 -25.3 28.0 -26.5
2025-12-25T17:55:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:55:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:55:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.663602
2025-12-25T17:55:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:55:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:55:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:55:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:55:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:55:56.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:55:51', tmtdew=27.88, humidity=15.45, cloud=0.0, wind=40.39, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:55:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:55:56.643 [DEBUG] [Thread-15929] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:55:56.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-25T17:55:56.733 [DEBUG] [Thread-15932] [transport.py] [_log()] starting thread (client mode): 0xb6b00df0
2025-12-25T17:55:56.734 [DEBUG] [Thread-15932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:55:56.748 [DEBUG] [Thread-15932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:55:56.748 [INFO] [Thread-15932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:55:56.756 [DEBUG] [Thread-15932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:55:56.756 [DEBUG] [Thread-15932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:55:56.756 [DEBUG] [Thread-15932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:55:56.756 [DEBUG] [Thread-15932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:56.756 [DEBUG] [Thread-15932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:55:56.756 [DEBUG] [Thread-15932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] client lang: <none>
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] server lang: <none>
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] kex follows: False
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] Compression: none
2025-12-25T17:55:56.757 [DEBUG] [Thread-15932] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:55:56.816 [DEBUG] [Thread-15932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:55:56.816 [DEBUG] [Thread-15932] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:55:56.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:55:56.818 [DEBUG] [Thread-15932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:55:56.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:55:56.872 [DEBUG] [Thread-15932] [transport.py] [_log()] userauth is OK
2025-12-25T17:55:56.872 [DEBUG] [Thread-15932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:55:56.872 [DEBUG] [Thread-15932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:55:56.872 [DEBUG] [Thread-15932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:55:56.873 [DEBUG] [Thread-15932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:55:56.891 [INFO] [Thread-15932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:55:56.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-25T17:55:56.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:55:57.710 [DEBUG] [Thread-15932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:55:57.711 [DEBUG] [Thread-15932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:55:57.759 [DEBUG] [Thread-15932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:55:57.759 [DEBUG] [Thread-15932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:55:57.769 [DEBUG] [Thread-15932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:55:57.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:55:57.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:55:57.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:55:57.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:55:57.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:55:57.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:55:57.806 [DEBUG] [Thread-15932] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:55:57.822 [DEBUG] [Thread-15934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:06.239 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:06.240 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:12.874 [DEBUG] [Thread-15935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:17.267 [DEBUG] [Thread-15936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:27.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:56:27.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:56:27.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-25T17:56:27.904 [DEBUG] [Thread-15937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 56, 23), 27.83, 15.5, 0.0, 39.15, 24.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:56:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:56:23
2025-12-25T17:56:28.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:56:28.808 [DEBUG] [Thread-15938] [transport.py] [_log()] starting thread (client mode): 0xb6b02f50
2025-12-25T17:56:28.808 [DEBUG] [Thread-15938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:56:28.827 [DEBUG] [Thread-15938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:56:28.827 [INFO] [Thread-15938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:56:28.830 [DEBUG] [Thread-15938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] client lang: <none>
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] server lang: <none>
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] kex follows: False
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:56:28.831 [DEBUG] [Thread-15938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:56:28.832 [DEBUG] [Thread-15938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:56:28.832 [DEBUG] [Thread-15938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:56:28.832 [DEBUG] [Thread-15938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:56:28.832 [DEBUG] [Thread-15938] [transport.py] [_log()] Compression: none
2025-12-25T17:56:28.832 [DEBUG] [Thread-15938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:56:28.851 [DEBUG] [Thread-15938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:56:28.852 [DEBUG] [Thread-15938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:56:28.853 [DEBUG] [Thread-15938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:56:28.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:56:28.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:56:28.855 [DEBUG] [Thread-15938] [transport.py] [_log()] userauth is OK
2025-12-25T17:56:28.855 [DEBUG] [Thread-15938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:56:28.855 [DEBUG] [Thread-15938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:56:28.855 [DEBUG] [Thread-15938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:56:28.856 [DEBUG] [Thread-15938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:56:28.873 [INFO] [Thread-15938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:56:28.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:56:29.691 [DEBUG] [Thread-15938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:56:29.691 [DEBUG] [Thread-15938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:56:29.691 [DEBUG] [Thread-15938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:56:29.732 [DEBUG] [Thread-15938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:56:29.732 [DEBUG] [Thread-15938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:56:29.736 [DEBUG] [Thread-15938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:56:29.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:56:29.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:56:29.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:56:29.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:56:29.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:56:29.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:56:29.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:56:29.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:56:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:56:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.663950 -999.00  +24.60  39.53     21   +1.00 1 1 2 1 1   887    0 23.79 -2.08 ----- 39.5 39.5 287.8 45.9 26.9 -28.3 27.3 -28.2 27.9 -25.7 27.9 -26.9
2025-12-25T17:56:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:56:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:56:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.663950
2025-12-25T17:56:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:56:29.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:56:29.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:56:29.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:56:29.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:56:29.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:56:23', tmtdew=27.83, humidity=15.5, cloud=0.0, wind=39.15, temperature=24.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:56:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:56:29.762 [DEBUG] [Thread-15938] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:56:29.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-25T17:56:29.864 [DEBUG] [Thread-15941] [transport.py] [_log()] starting thread (client mode): 0xb6bb7ca0
2025-12-25T17:56:29.864 [DEBUG] [Thread-15941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:56:29.879 [DEBUG] [Thread-15941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:56:29.879 [INFO] [Thread-15941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:56:29.887 [DEBUG] [Thread-15941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:56:29.887 [DEBUG] [Thread-15941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:56:29.888 [DEBUG] [Thread-15941] [transport.py] [_log()] client lang: <none>
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] server lang: <none>
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] kex follows: False
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] Compression: none
2025-12-25T17:56:29.889 [DEBUG] [Thread-15941] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:56:29.948 [DEBUG] [Thread-15941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:56:29.949 [DEBUG] [Thread-15941] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:56:29.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:56:29.950 [DEBUG] [Thread-15941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:56:29.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:56:30.004 [DEBUG] [Thread-15941] [transport.py] [_log()] userauth is OK
2025-12-25T17:56:30.004 [DEBUG] [Thread-15941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:56:30.004 [DEBUG] [Thread-15941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:56:30.004 [DEBUG] [Thread-15941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:56:30.004 [DEBUG] [Thread-15941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:56:30.023 [INFO] [Thread-15941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:56:30.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-25T17:56:30.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:56:30.838 [DEBUG] [Thread-15941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:56:30.838 [DEBUG] [Thread-15941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:56:30.886 [DEBUG] [Thread-15941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:56:30.886 [DEBUG] [Thread-15941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:56:30.895 [DEBUG] [Thread-15941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:56:30.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:56: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-25T17:56:30.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:56:30.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:56:30.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:56:30.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:56:30.932 [DEBUG] [Thread-15941] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:56:42.937 [DEBUG] [Thread-15943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:56:57.980 [DEBUG] [Thread-15944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:57:00.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:57:00.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-25T17:57:01.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 56, 55), 27.97, 15.6, 0.0, 41.52, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:57:01.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:56:55
2025-12-25T17:57:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:57:01.928 [DEBUG] [Thread-15945] [transport.py] [_log()] starting thread (client mode): 0xb95906d0
2025-12-25T17:57:01.928 [DEBUG] [Thread-15945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:57:01.947 [DEBUG] [Thread-15945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:57:01.947 [INFO] [Thread-15945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] client lang: <none>
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] server lang: <none>
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] kex follows: False
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] Compression: none
2025-12-25T17:57:01.951 [DEBUG] [Thread-15945] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:57:01.968 [DEBUG] [Thread-15945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:57:01.969 [DEBUG] [Thread-15945] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:57:01.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:57:01.969 [DEBUG] [Thread-15945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:57:01.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:57:01.972 [DEBUG] [Thread-15945] [transport.py] [_log()] userauth is OK
2025-12-25T17:57:01.972 [DEBUG] [Thread-15945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:57:01.972 [DEBUG] [Thread-15945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:57:01.972 [DEBUG] [Thread-15945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:57:01.972 [DEBUG] [Thread-15945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:57:01.993 [INFO] [Thread-15945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:57:01.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:57:02.609 [DEBUG] [Thread-15945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:57:02.609 [DEBUG] [Thread-15945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:57:02.610 [DEBUG] [Thread-15945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:57:02.650 [DEBUG] [Thread-15945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:57:02.650 [DEBUG] [Thread-15945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:57:02.653 [DEBUG] [Thread-15945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:57:02.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:57:02.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:57:02.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:57:02.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:57:02.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:57:02.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:57:02.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:57:02.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:57:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:57:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.664297 -999.00  +24.50  34.12     21   +1.00 1 1 2 1 1   887    0 23.39 -1.00 ----- 31.8 34.1 292.8 41.1 26.9 -28.3 27.2 -27.8 27.8 -26.2 28.0 -26.6
2025-12-25T17:57:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:57:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:57:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.664297
2025-12-25T17:57:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:57:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:57:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:57:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:57:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:57:02.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:56:55', tmtdew=27.97, humidity=15.6, cloud=0.0, wind=41.52, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:56:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:57:02.679 [DEBUG] [Thread-15945] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:57:02.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-25T17:57:02.774 [DEBUG] [Thread-15948] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-25T17:57:02.774 [DEBUG] [Thread-15948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:57:02.788 [DEBUG] [Thread-15948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:57:02.789 [INFO] [Thread-15948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:57:02.796 [DEBUG] [Thread-15948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] client lang: <none>
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] server lang: <none>
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] kex follows: False
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] Compression: none
2025-12-25T17:57:02.797 [DEBUG] [Thread-15948] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:57:02.856 [DEBUG] [Thread-15948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:57:02.856 [DEBUG] [Thread-15948] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:57:02.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:57:02.857 [DEBUG] [Thread-15948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:57:02.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:57:02.915 [DEBUG] [Thread-15948] [transport.py] [_log()] userauth is OK
2025-12-25T17:57:02.916 [DEBUG] [Thread-15948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:57:02.916 [DEBUG] [Thread-15948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:57:02.916 [DEBUG] [Thread-15948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:57:02.916 [DEBUG] [Thread-15948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:57:02.935 [INFO] [Thread-15948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:57:02.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-25T17:57:02.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:57:03.773 [DEBUG] [Thread-15948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:57:03.774 [DEBUG] [Thread-15948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:57:03.821 [DEBUG] [Thread-15948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:57:03.821 [DEBUG] [Thread-15948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:57:03.830 [DEBUG] [Thread-15948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:57:03.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:57:03.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')
2025-12-25T17:57:03.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:57:03.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:57:03.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:57:03.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:57:03.866 [DEBUG] [Thread-15948] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:57:06.379 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:06.381 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:13.014 [DEBUG] [Thread-15950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:17.303 [DEBUG] [Thread-15951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:28.062 [DEBUG] [Thread-15952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:33.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:57:33.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:57:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T17:57:34.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 57, 27), 28.11, 15.45, 0.0, 43.92, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:57:34.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:57:27
2025-12-25T17:57:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:57:34.917 [DEBUG] [Thread-15953] [transport.py] [_log()] starting thread (client mode): 0xb6b7c4f0
2025-12-25T17:57:34.917 [DEBUG] [Thread-15953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:57:34.935 [DEBUG] [Thread-15953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:57:34.935 [INFO] [Thread-15953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:57:34.938 [DEBUG] [Thread-15953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:57:34.938 [DEBUG] [Thread-15953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:57:34.938 [DEBUG] [Thread-15953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:57:34.938 [DEBUG] [Thread-15953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:34.938 [DEBUG] [Thread-15953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] client lang: <none>
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] server lang: <none>
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] kex follows: False
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] Compression: none
2025-12-25T17:57:34.939 [DEBUG] [Thread-15953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:57:34.946 [DEBUG] [Thread-15953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:57:34.946 [DEBUG] [Thread-15953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:57:34.946 [DEBUG] [Thread-15953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:57:34.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:57:34.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:57:34.947 [DEBUG] [Thread-15953] [transport.py] [_log()] userauth is OK
2025-12-25T17:57:34.947 [DEBUG] [Thread-15953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:57:34.947 [DEBUG] [Thread-15953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:57:34.947 [DEBUG] [Thread-15953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:57:34.947 [DEBUG] [Thread-15953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:57:34.961 [INFO] [Thread-15953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:57:34.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:57:35.702 [DEBUG] [Thread-15953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:57:35.702 [DEBUG] [Thread-15953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:57:35.702 [DEBUG] [Thread-15953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:57:35.742 [DEBUG] [Thread-15953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:57:35.742 [DEBUG] [Thread-15953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:57:35.744 [DEBUG] [Thread-15953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:57:35.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:57:35.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:57:35.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:57:35.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:57:35.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:57:35.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:57:35.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.664644 -999.00  +24.40  40.31     21   +0.80 1 1 2 1 1   887    0 23.68 0.99 ----- 34.8 40.3 294.2 54.5 26.9 -28.8 27.2 -28.3 27.8 -25.9 27.9 -27.4
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.664644
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:57:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:57:27', tmtdew=28.11, humidity=15.45, cloud=0.0, wind=43.92, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:57:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:57:35.762 [DEBUG] [Thread-15953] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T17:57:35.846 [DEBUG] [Thread-15956] [transport.py] [_log()] starting thread (client mode): 0xb9591a20
2025-12-25T17:57:35.846 [DEBUG] [Thread-15956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:57:35.861 [DEBUG] [Thread-15956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:57:35.861 [INFO] [Thread-15956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] client lang: <none>
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] server lang: <none>
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] kex follows: False
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] Compression: none
2025-12-25T17:57:35.868 [DEBUG] [Thread-15956] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:57:35.926 [DEBUG] [Thread-15956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:57:35.926 [DEBUG] [Thread-15956] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:57:35.926 [DEBUG] [Thread-15956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:57:35.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:57:35.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:57:35.983 [DEBUG] [Thread-15956] [transport.py] [_log()] userauth is OK
2025-12-25T17:57:35.983 [DEBUG] [Thread-15956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:57:35.983 [DEBUG] [Thread-15956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:57:35.983 [DEBUG] [Thread-15956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:57:35.983 [DEBUG] [Thread-15956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:57:35.997 [INFO] [Thread-15956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:57:35.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-25T17:57:35.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:57:36.831 [DEBUG] [Thread-15956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:57:36.831 [DEBUG] [Thread-15956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:57:36.879 [DEBUG] [Thread-15956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:57:36.879 [DEBUG] [Thread-15956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:57:36.887 [DEBUG] [Thread-15956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:57:36.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:57:36.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')
2025-12-25T17:57:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:57:36.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:57:36.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:57:36.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:57:36.919 [DEBUG] [Thread-15956] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:57:43.101 [DEBUG] [Thread-15958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:57:58.155 [DEBUG] [Thread-15959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:06.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:06.524 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:06.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:58:06.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:58:06.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-25T17:58:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 57, 59), 28.16, 15.36, 0.0, 38.57, 24.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:58:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:57:59
2025-12-25T17:58:07.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:58:07.919 [DEBUG] [Thread-15960] [transport.py] [_log()] starting thread (client mode): 0xb6b7c940
2025-12-25T17:58:07.919 [DEBUG] [Thread-15960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:58:07.939 [DEBUG] [Thread-15960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:58:07.939 [INFO] [Thread-15960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] client lang: <none>
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] server lang: <none>
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] kex follows: False
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] Compression: none
2025-12-25T17:58:07.943 [DEBUG] [Thread-15960] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:58:07.962 [DEBUG] [Thread-15960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:58:07.962 [DEBUG] [Thread-15960] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:58:07.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:58:07.963 [DEBUG] [Thread-15960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:58:07.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:58:07.965 [DEBUG] [Thread-15960] [transport.py] [_log()] userauth is OK
2025-12-25T17:58:07.965 [DEBUG] [Thread-15960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:58:07.965 [DEBUG] [Thread-15960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:58:07.965 [DEBUG] [Thread-15960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:58:07.965 [DEBUG] [Thread-15960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:58:07.982 [INFO] [Thread-15960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:58:07.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:58:08.605 [DEBUG] [Thread-15960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:58:08.605 [DEBUG] [Thread-15960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:58:08.606 [DEBUG] [Thread-15960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:58:08.646 [DEBUG] [Thread-15960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:58:08.646 [DEBUG] [Thread-15960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:58:08.650 [DEBUG] [Thread-15960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:58:08.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:58:08.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:58:08.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:58:08.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:58:08.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:58:08.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:58:08.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:58:08.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:58:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:58:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.664992 -999.00  +24.30  37.77     21   +0.80 1 1 2 1 1   887    0 23.60 0.44 ----- 34.0 37.8 290.4 46.2 26.9 -28.6 27.2 -28.4 27.8 -26.2 27.9 -27.2
2025-12-25T17:58:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:58:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:58:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.664992
2025-12-25T17:58:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:58:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:58:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:58:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:58:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:58:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:57:59', tmtdew=28.16, humidity=15.36, cloud=0.0, wind=38.57, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:57:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:58:08.676 [DEBUG] [Thread-15960] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:58:08.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-25T17:58:08.768 [DEBUG] [Thread-15963] [transport.py] [_log()] starting thread (client mode): 0xb6b03af0
2025-12-25T17:58:08.768 [DEBUG] [Thread-15963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:58:08.783 [DEBUG] [Thread-15963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:58:08.783 [INFO] [Thread-15963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:58:08.790 [DEBUG] [Thread-15963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] client lang: <none>
2025-12-25T17:58:08.791 [DEBUG] [Thread-15963] [transport.py] [_log()] server lang: <none>
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] kex follows: False
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] Compression: none
2025-12-25T17:58:08.792 [DEBUG] [Thread-15963] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:58:08.852 [DEBUG] [Thread-15963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:58:08.853 [DEBUG] [Thread-15963] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:58:08.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:58:08.854 [DEBUG] [Thread-15963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:58:08.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:58:08.908 [DEBUG] [Thread-15963] [transport.py] [_log()] userauth is OK
2025-12-25T17:58:08.908 [DEBUG] [Thread-15963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:58:08.908 [DEBUG] [Thread-15963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:58:08.908 [DEBUG] [Thread-15963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:58:08.908 [DEBUG] [Thread-15963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:58:08.922 [INFO] [Thread-15963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:58:08.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-25T17:58:08.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:58:09.744 [DEBUG] [Thread-15963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:58:09.745 [DEBUG] [Thread-15963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:58:09.792 [DEBUG] [Thread-15963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:58:09.792 [DEBUG] [Thread-15963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:58:09.801 [DEBUG] [Thread-15963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:58:09.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:58:09.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-25T17:58:09.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:58:09.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:58:09.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:58:09.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:58:09.832 [DEBUG] [Thread-15963] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:58:13.184 [DEBUG] [Thread-15965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:17.337 [DEBUG] [Thread-15966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:28.224 [DEBUG] [Thread-15967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:58:39.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:58:39.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-25T17:58:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 58, 31), 28.12, 15.41, 0.0, 35.54, 24.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:58:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:58:31
2025-12-25T17:58:40.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:58:40.842 [DEBUG] [Thread-15968] [transport.py] [_log()] starting thread (client mode): 0xb6bb72b0
2025-12-25T17:58:40.842 [DEBUG] [Thread-15968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:58:40.862 [DEBUG] [Thread-15968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:58:40.863 [INFO] [Thread-15968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:58:40.866 [DEBUG] [Thread-15968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] client lang: <none>
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] server lang: <none>
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] kex follows: False
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] Compression: none
2025-12-25T17:58:40.867 [DEBUG] [Thread-15968] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:58:40.883 [DEBUG] [Thread-15968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:58:40.884 [DEBUG] [Thread-15968] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:58:40.885 [DEBUG] [Thread-15968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:58:40.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:58:40.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:58:40.887 [DEBUG] [Thread-15968] [transport.py] [_log()] userauth is OK
2025-12-25T17:58:40.887 [DEBUG] [Thread-15968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:58:40.888 [DEBUG] [Thread-15968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:58:40.888 [DEBUG] [Thread-15968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:58:40.888 [DEBUG] [Thread-15968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:58:40.910 [INFO] [Thread-15968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:58:40.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:58:41.745 [DEBUG] [Thread-15968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:58:41.745 [DEBUG] [Thread-15968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:58:41.745 [DEBUG] [Thread-15968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:58:41.786 [DEBUG] [Thread-15968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:58:41.786 [DEBUG] [Thread-15968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:58:41.790 [DEBUG] [Thread-15968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:58:41.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:58:41.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:58:41.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:58:41.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:58:41.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:58:41.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:58:41.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:58:41.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:58:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:58:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.665338 -999.00  +24.10  37.48     21   +0.80 1 1 2 1 1   887    0 23.79 -1.83 ----- 31.8 37.5 294.2 47.3 26.8 -28.8 27.1 -28.5 27.7 -28.5 27.8 -27.0
2025-12-25T17:58:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:58:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:58:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.665338
2025-12-25T17:58:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:58:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:58:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:58:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:58:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:58:41.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:58:31', tmtdew=28.12, humidity=15.41, cloud=0.0, wind=35.54, temperature=24.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:58:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:58:41.816 [DEBUG] [Thread-15968] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:58:41.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-25T17:58:41.913 [DEBUG] [Thread-15971] [transport.py] [_log()] starting thread (client mode): 0xb6b7fcd0
2025-12-25T17:58:41.913 [DEBUG] [Thread-15971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:58:41.928 [DEBUG] [Thread-15971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:58:41.928 [INFO] [Thread-15971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] client lang: <none>
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] server lang: <none>
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] kex follows: False
2025-12-25T17:58:41.936 [DEBUG] [Thread-15971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:58:41.937 [DEBUG] [Thread-15971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:58:41.937 [DEBUG] [Thread-15971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:58:41.937 [DEBUG] [Thread-15971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:58:41.937 [DEBUG] [Thread-15971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:58:41.937 [DEBUG] [Thread-15971] [transport.py] [_log()] Compression: none
2025-12-25T17:58:41.937 [DEBUG] [Thread-15971] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:58:41.996 [DEBUG] [Thread-15971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:58:41.996 [DEBUG] [Thread-15971] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:58:41.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:58:41.997 [DEBUG] [Thread-15971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:58:41.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:58:42.052 [DEBUG] [Thread-15971] [transport.py] [_log()] userauth is OK
2025-12-25T17:58:42.052 [DEBUG] [Thread-15971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:58:42.052 [DEBUG] [Thread-15971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:58:42.053 [DEBUG] [Thread-15971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:58:42.053 [DEBUG] [Thread-15971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:58:42.071 [INFO] [Thread-15971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:58:42.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-25T17:58:42.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:58:42.861 [DEBUG] [Thread-15971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:58:42.861 [DEBUG] [Thread-15971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:58:42.909 [DEBUG] [Thread-15971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:58:42.909 [DEBUG] [Thread-15971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:58:42.919 [DEBUG] [Thread-15971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:58:42.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:58:42.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T17:58:42.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T17:58:42.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:58:42.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:58:42.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:58:42.955 [DEBUG] [Thread-15971] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:58:43.264 [DEBUG] [Thread-15973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:58:58.320 [DEBUG] [Thread-15974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:06.666 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:06.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:12.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:59:12.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:59:12.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-25T17:59:13.351 [DEBUG] [Thread-15975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 59, 3), 28.16, 15.38, 0.0, 37.12, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:59:13.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:59:03
2025-12-25T17:59:13.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:59:13.965 [DEBUG] [Thread-15976] [transport.py] [_log()] starting thread (client mode): 0xb6b7ca00
2025-12-25T17:59:13.965 [DEBUG] [Thread-15976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:59:13.986 [DEBUG] [Thread-15976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:59:13.986 [INFO] [Thread-15976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:59:13.989 [DEBUG] [Thread-15976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:59:13.989 [DEBUG] [Thread-15976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] client lang: <none>
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] server lang: <none>
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] kex follows: False
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] Compression: none
2025-12-25T17:59:13.990 [DEBUG] [Thread-15976] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:59:14.007 [DEBUG] [Thread-15976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:59:14.007 [DEBUG] [Thread-15976] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:59:14.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:59:14.008 [DEBUG] [Thread-15976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:59:14.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:59:14.010 [DEBUG] [Thread-15976] [transport.py] [_log()] userauth is OK
2025-12-25T17:59:14.011 [DEBUG] [Thread-15976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:59:14.011 [DEBUG] [Thread-15976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:59:14.011 [DEBUG] [Thread-15976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:59:14.011 [DEBUG] [Thread-15976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:59:14.035 [INFO] [Thread-15976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:59:14.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:59:14.687 [DEBUG] [Thread-15976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:59:14.688 [DEBUG] [Thread-15976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:59:14.688 [DEBUG] [Thread-15976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:59:14.729 [DEBUG] [Thread-15976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:59:14.729 [DEBUG] [Thread-15976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:59:14.733 [DEBUG] [Thread-15976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:59:14.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:59:14.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:59:14.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:59:14.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:59:14.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:59:14.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:59:14.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:59:14.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:59:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:59:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.665686 -999.00  +24.10  38.43     21   +0.80 1 1 2 1 1   887    0 23.32 -5.88 ----- 36.0 38.4 293.4 46.7 26.8 -28.2 27.1 -28.1 27.6 -26.0 27.8 -27.1
2025-12-25T17:59:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:59:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:59:14.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.665686
2025-12-25T17:59:14.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:59:14.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:59:14.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:59:14.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:59:14.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:59:14.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:59:03', tmtdew=28.16, humidity=15.38, cloud=0.0, wind=37.12, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:58:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:59:14.761 [DEBUG] [Thread-15976] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:59:14.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-25T17:59:14.855 [DEBUG] [Thread-15979] [transport.py] [_log()] starting thread (client mode): 0xb6b030d0
2025-12-25T17:59:14.856 [DEBUG] [Thread-15979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:59:14.871 [DEBUG] [Thread-15979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:59:14.871 [INFO] [Thread-15979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:59:14.878 [DEBUG] [Thread-15979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] client lang: <none>
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] server lang: <none>
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] kex follows: False
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] Compression: none
2025-12-25T17:59:14.879 [DEBUG] [Thread-15979] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:59:14.935 [DEBUG] [Thread-15979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:59:14.936 [DEBUG] [Thread-15979] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:59:14.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:59:14.937 [DEBUG] [Thread-15979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:59:14.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:59:14.992 [DEBUG] [Thread-15979] [transport.py] [_log()] userauth is OK
2025-12-25T17:59:14.992 [DEBUG] [Thread-15979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:59:14.992 [DEBUG] [Thread-15979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:59:14.993 [DEBUG] [Thread-15979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:59:14.993 [DEBUG] [Thread-15979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:59:15.011 [INFO] [Thread-15979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:59:15.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-25T17:59:15.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:59:15.849 [DEBUG] [Thread-15979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:59:15.849 [DEBUG] [Thread-15979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:59:15.897 [DEBUG] [Thread-15979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:59:15.897 [DEBUG] [Thread-15979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:59:15.906 [DEBUG] [Thread-15979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:59:15.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:59:15.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-25T17:59:15.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-25T17:59:15.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:59:15.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:59:15.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:59:15.939 [DEBUG] [Thread-15979] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:59:17.382 [DEBUG] [Thread-15981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:28.382 [DEBUG] [Thread-15982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:43.430 [DEBUG] [Thread-15983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T17:59:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T17:59:45.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T17:59:45.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-25T17:59:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 17, 59, 35), 28.68, 14.71, 0.0, 35.52, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T17:59:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 17:59:35
2025-12-25T17:59:46.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T17:59:46.926 [DEBUG] [Thread-15984] [transport.py] [_log()] starting thread (client mode): 0xb6b21b10
2025-12-25T17:59:46.926 [DEBUG] [Thread-15984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:59:46.947 [DEBUG] [Thread-15984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T17:59:46.947 [INFO] [Thread-15984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:59:46.951 [DEBUG] [Thread-15984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] client lang: <none>
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] server lang: <none>
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] kex follows: False
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] Compression: none
2025-12-25T17:59:46.952 [DEBUG] [Thread-15984] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:59:46.969 [DEBUG] [Thread-15984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:59:46.970 [DEBUG] [Thread-15984] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:59:46.970 [DEBUG] [Thread-15984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T17:59:46.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T17:59:46.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:59:46.972 [DEBUG] [Thread-15984] [transport.py] [_log()] userauth is OK
2025-12-25T17:59:46.972 [DEBUG] [Thread-15984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:59:46.972 [DEBUG] [Thread-15984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:59:46.972 [DEBUG] [Thread-15984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T17:59:46.973 [DEBUG] [Thread-15984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:59:46.996 [INFO] [Thread-15984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:59:46.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:59:47.841 [DEBUG] [Thread-15984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:59:47.841 [DEBUG] [Thread-15984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:59:47.841 [DEBUG] [Thread-15984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T17:59:47.882 [DEBUG] [Thread-15984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:59:47.883 [DEBUG] [Thread-15984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:59:47.886 [DEBUG] [Thread-15984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:59:47.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:59:47.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T17:59:47.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T17:59:47.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T17:59:47.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:59:47.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T17:59:47.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:59:47.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:59:47.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T17:59:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.666033 -999.00  +24.20  36.60     21   +0.70 1 1 2 1 1   887    0 23.07 -9.19 ----- 42.7 36.6 300.0 47.0 26.8 -28.7 27.1 -28.4 27.6 -27.2 27.8 -27.2
2025-12-25T17:59:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T17:59:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T17:59:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.666033
2025-12-25T17:59:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T17:59:47.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T17:59:47.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T17:59:47.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T17:59:47.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T17:59:47.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T17:59:35', tmtdew=28.68, humidity=14.71, cloud=0.0, wind=35.52, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:59:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T17:59:47.911 [DEBUG] [Thread-15984] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:59:47.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-25T17:59:48.004 [DEBUG] [Thread-15987] [transport.py] [_log()] starting thread (client mode): 0xb6b22d10
2025-12-25T17:59:48.004 [DEBUG] [Thread-15987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T17:59:48.019 [DEBUG] [Thread-15987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T17:59:48.019 [INFO] [Thread-15987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] client lang: <none>
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] server lang: <none>
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] kex follows: False
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] Compression: none
2025-12-25T17:59:48.026 [DEBUG] [Thread-15987] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T17:59:48.082 [DEBUG] [Thread-15987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T17:59:48.082 [DEBUG] [Thread-15987] [transport.py] [_log()] Switch to new keys ...
2025-12-25T17:59:48.082 [DEBUG] [Thread-15987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T17:59:48.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T17:59:48.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T17:59:48.139 [DEBUG] [Thread-15987] [transport.py] [_log()] userauth is OK
2025-12-25T17:59:48.140 [DEBUG] [Thread-15987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T17:59:48.140 [DEBUG] [Thread-15987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T17:59:48.140 [DEBUG] [Thread-15987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T17:59:48.140 [DEBUG] [Thread-15987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T17:59:48.161 [INFO] [Thread-15987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T17:59:48.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-25T17:59:48.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T17:59:48.994 [DEBUG] [Thread-15987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T17:59:48.994 [DEBUG] [Thread-15987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T17:59:49.042 [DEBUG] [Thread-15987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T17:59:49.042 [DEBUG] [Thread-15987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T17:59:49.051 [DEBUG] [Thread-15987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T17:59:49.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T17:59:49.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-25T17:59:49.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-25T17:59:49.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T17:59:49.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T17:59:49.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T17:59:49.086 [DEBUG] [Thread-15987] [transport.py] [_log()] EOF in transport thread
2025-12-25T17:59:58.467 [DEBUG] [Thread-15989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:06.805 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:06.806 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:13.523 [DEBUG] [Thread-15990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:17.417 [DEBUG] [Thread-15991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:19.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:00:19.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:00:19.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-25T18:00:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 0, 7), 28.69, 14.7, 0.0, 37.32, 25.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:00:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:00:07
2025-12-25T18:00:19.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:00:20.073 [DEBUG] [Thread-15992] [transport.py] [_log()] starting thread (client mode): 0xb955b700
2025-12-25T18:00:20.073 [DEBUG] [Thread-15992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:00:20.093 [DEBUG] [Thread-15992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:00:20.093 [INFO] [Thread-15992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:00:20.096 [DEBUG] [Thread-15992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] client lang: <none>
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] server lang: <none>
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] kex follows: False
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] Compression: none
2025-12-25T18:00:20.097 [DEBUG] [Thread-15992] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:00:20.114 [DEBUG] [Thread-15992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:00:20.114 [DEBUG] [Thread-15992] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:00:20.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:00:20.115 [DEBUG] [Thread-15992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:00:20.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:00:20.117 [DEBUG] [Thread-15992] [transport.py] [_log()] userauth is OK
2025-12-25T18:00:20.117 [DEBUG] [Thread-15992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:00:20.117 [DEBUG] [Thread-15992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:00:20.117 [DEBUG] [Thread-15992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:00:20.117 [DEBUG] [Thread-15992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:00:20.135 [INFO] [Thread-15992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:00:20.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:00:20.770 [DEBUG] [Thread-15992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:00:20.770 [DEBUG] [Thread-15992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:00:20.771 [DEBUG] [Thread-15992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:00:20.812 [DEBUG] [Thread-15992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:00:20.812 [DEBUG] [Thread-15992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:00:20.815 [DEBUG] [Thread-15992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:00:20.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:00:20.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:00:20.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:00:20.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:00:20.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:00:20.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:00:20.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:00:20.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:00:20.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:00:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.666380 -999.00  +24.50  30.69     21   +1.00 1 1 2 1 1   887    0 22.96 -12.53 ----- 43.3 30.7 297.8 44.9 26.7 -27.9 27.1 -27.7 27.7 -25.4 27.8 -26.3
2025-12-25T18:00:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:00:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:00:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.666380
2025-12-25T18:00:20.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:00:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:00:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:00:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:00:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:00:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:00:07', tmtdew=28.69, humidity=14.7, cloud=0.0, wind=37.32, temperature=25.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T15:59:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:00:20.839 [DEBUG] [Thread-15992] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:00:20.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-25T18:00:20.934 [DEBUG] [Thread-15995] [transport.py] [_log()] starting thread (client mode): 0xb9593640
2025-12-25T18:00:20.934 [DEBUG] [Thread-15995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:00:20.950 [DEBUG] [Thread-15995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:00:20.951 [INFO] [Thread-15995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:00:20.958 [DEBUG] [Thread-15995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:00:20.958 [DEBUG] [Thread-15995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] client lang: <none>
2025-12-25T18:00:20.959 [DEBUG] [Thread-15995] [transport.py] [_log()] server lang: <none>
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] kex follows: False
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] Compression: none
2025-12-25T18:00:20.960 [DEBUG] [Thread-15995] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:00:21.015 [DEBUG] [Thread-15995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:00:21.016 [DEBUG] [Thread-15995] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:00:21.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:00:21.017 [DEBUG] [Thread-15995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:00:21.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:00:21.072 [DEBUG] [Thread-15995] [transport.py] [_log()] userauth is OK
2025-12-25T18:00:21.072 [DEBUG] [Thread-15995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:00:21.072 [DEBUG] [Thread-15995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:00:21.072 [DEBUG] [Thread-15995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:00:21.072 [DEBUG] [Thread-15995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:00:21.091 [INFO] [Thread-15995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:00:21.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:00:21.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:00:21.922 [DEBUG] [Thread-15995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:00:21.922 [DEBUG] [Thread-15995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:00:21.970 [DEBUG] [Thread-15995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:00:21.970 [DEBUG] [Thread-15995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:00:21.995 [DEBUG] [Thread-15995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:00:22.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:00:22.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-25T18:00:22.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-25T18:00:22.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:00:22.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:00:22.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:00:22.032 [DEBUG] [Thread-15995] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:00:28.559 [DEBUG] [Thread-15997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:43.613 [DEBUG] [Thread-15998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:00:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:00:52.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:00:52.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-25T18:00:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 0, 40), 28.79, 14.7, 0.0, 39.27, 25.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:00:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:00:40
2025-12-25T18:00:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:00:53.033 [DEBUG] [Thread-15999] [transport.py] [_log()] starting thread (client mode): 0xb6b7ce20
2025-12-25T18:00:53.033 [DEBUG] [Thread-15999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:00:53.052 [DEBUG] [Thread-15999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:00:53.053 [INFO] [Thread-15999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] client lang: <none>
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] server lang: <none>
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] kex follows: False
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] Compression: none
2025-12-25T18:00:53.056 [DEBUG] [Thread-15999] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:00:53.072 [DEBUG] [Thread-15999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:00:53.072 [DEBUG] [Thread-15999] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:00:53.072 [DEBUG] [Thread-15999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:00:53.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:00:53.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:00:53.073 [DEBUG] [Thread-15999] [transport.py] [_log()] userauth is OK
2025-12-25T18:00:53.073 [DEBUG] [Thread-15999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:00:53.073 [DEBUG] [Thread-15999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:00:53.073 [DEBUG] [Thread-15999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:00:53.073 [DEBUG] [Thread-15999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:00:53.084 [INFO] [Thread-15999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:00:53.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:00:53.912 [DEBUG] [Thread-15999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:00:53.913 [DEBUG] [Thread-15999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:00:53.914 [DEBUG] [Thread-15999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:00:53.954 [DEBUG] [Thread-15999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:00:53.954 [DEBUG] [Thread-15999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:00:53.958 [DEBUG] [Thread-15999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:00:53.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:00:53.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:00:53.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:00:53.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:00:53.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:00:53.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:00:53.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:00:53.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:00:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:00:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.666727 -999.00  +24.50  37.10     21   +0.80 1 1 2 1 1   887    0 23.28 -15.93 ----- 33.4 37.1 299.2 50.9 26.7 -28.4 27.0 -28.1 27.6 -25.8 27.8 -27.0
2025-12-25T18:00:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:00:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:00:53.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.666727
2025-12-25T18:00:53.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:00:53.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:00:53.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:00:53.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:00:53.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:00:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:00:40', tmtdew=28.79, humidity=14.7, cloud=0.0, wind=39.27, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:00:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:00:53.977 [DEBUG] [Thread-15999] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:00:54.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-25T18:00:54.070 [DEBUG] [Thread-16002] [transport.py] [_log()] starting thread (client mode): 0xb9558130
2025-12-25T18:00:54.070 [DEBUG] [Thread-16002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:00:54.085 [DEBUG] [Thread-16002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:00:54.085 [INFO] [Thread-16002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:00:54.092 [DEBUG] [Thread-16002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] client lang: <none>
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] server lang: <none>
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] kex follows: False
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] Compression: none
2025-12-25T18:00:54.093 [DEBUG] [Thread-16002] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:00:54.156 [DEBUG] [Thread-16002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:00:54.157 [DEBUG] [Thread-16002] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:00:54.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:00:54.158 [DEBUG] [Thread-16002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:00:54.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:00:54.216 [DEBUG] [Thread-16002] [transport.py] [_log()] userauth is OK
2025-12-25T18:00:54.216 [DEBUG] [Thread-16002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:00:54.216 [DEBUG] [Thread-16002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:00:54.216 [DEBUG] [Thread-16002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:00:54.216 [DEBUG] [Thread-16002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:00:54.234 [INFO] [Thread-16002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:00:54.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-25T18:00:54.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:00:55.088 [DEBUG] [Thread-16002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:00:55.089 [DEBUG] [Thread-16002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:00:55.136 [DEBUG] [Thread-16002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:00:55.136 [DEBUG] [Thread-16002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:00:55.146 [DEBUG] [Thread-16002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:00:55.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:00:55.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-25T18:00:55.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-25T18:00:55.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:00:55.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:00:55.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:00:55.182 [DEBUG] [Thread-16002] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:00:58.645 [DEBUG] [Thread-16004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:06.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:06.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:13.699 [DEBUG] [Thread-16005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:17.462 [DEBUG] [Thread-16006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:25.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:01:25.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:01:25.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-25T18:01:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 1, 12), 28.72, 14.73, 0.0, 41.3, 25.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:01:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:01:12
2025-12-25T18:01:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:01:26.222 [DEBUG] [Thread-16007] [transport.py] [_log()] starting thread (client mode): 0xb6bb6050
2025-12-25T18:01:26.222 [DEBUG] [Thread-16007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:01:26.243 [DEBUG] [Thread-16007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:01:26.243 [INFO] [Thread-16007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:01:26.246 [DEBUG] [Thread-16007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] client lang: <none>
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] server lang: <none>
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] kex follows: False
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] Compression: none
2025-12-25T18:01:26.247 [DEBUG] [Thread-16007] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:01:26.262 [DEBUG] [Thread-16007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:01:26.262 [DEBUG] [Thread-16007] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:01:26.262 [DEBUG] [Thread-16007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:01:26.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:01:26.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:01:26.263 [DEBUG] [Thread-16007] [transport.py] [_log()] userauth is OK
2025-12-25T18:01:26.263 [DEBUG] [Thread-16007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:01:26.263 [DEBUG] [Thread-16007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:01:26.263 [DEBUG] [Thread-16007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:01:26.263 [DEBUG] [Thread-16007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:01:26.289 [INFO] [Thread-16007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:01:26.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:01:26.936 [DEBUG] [Thread-16007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:01:26.937 [DEBUG] [Thread-16007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:01:26.937 [DEBUG] [Thread-16007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:01:26.978 [DEBUG] [Thread-16007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:01:26.978 [DEBUG] [Thread-16007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:01:26.980 [DEBUG] [Thread-16007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:01:26.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:01:26.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:01:26.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:01:26.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:01:26.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:01:27.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:01:27.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.667422 -999.00  +24.60  34.47     20   +0.60 1 1 2 1 1   887    0 23.03 -23.55 ----- 42.4 34.5 285.9 49.7 26.8 -28.5 27.1 -28.3 27.6 -26.2 27.7 -26.8
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.667422
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:01:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:01:12', tmtdew=28.72, humidity=14.73, cloud=0.0, wind=41.3, temperature=25.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:01:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:01:27.001 [DEBUG] [Thread-16007] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:01:27.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:01:27.085 [DEBUG] [Thread-16010] [transport.py] [_log()] starting thread (client mode): 0xb6b23280
2025-12-25T18:01:27.085 [DEBUG] [Thread-16010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:01:27.100 [DEBUG] [Thread-16010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:01:27.100 [INFO] [Thread-16010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:01:27.107 [DEBUG] [Thread-16010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] client lang: <none>
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] server lang: <none>
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] kex follows: False
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] Compression: none
2025-12-25T18:01:27.108 [DEBUG] [Thread-16010] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:01:27.169 [DEBUG] [Thread-16010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:01:27.169 [DEBUG] [Thread-16010] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:01:27.169 [DEBUG] [Thread-16010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:01:27.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:01:27.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:01:27.228 [DEBUG] [Thread-16010] [transport.py] [_log()] userauth is OK
2025-12-25T18:01:27.228 [DEBUG] [Thread-16010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:01:27.228 [DEBUG] [Thread-16010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:01:27.228 [DEBUG] [Thread-16010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:01:27.228 [DEBUG] [Thread-16010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:01:27.243 [INFO] [Thread-16010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:01:27.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-25T18:01:27.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:01:28.111 [DEBUG] [Thread-16010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:01:28.111 [DEBUG] [Thread-16010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:01:28.161 [DEBUG] [Thread-16010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:01:28.161 [DEBUG] [Thread-16010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:01:28.173 [DEBUG] [Thread-16010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:01:28.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:01:28.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:01:28.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-25T18:01:28.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:01:28.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:01:28.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:01:28.211 [DEBUG] [Thread-16010] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:01:28.730 [DEBUG] [Thread-16012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:43.773 [DEBUG] [Thread-16013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:01:58.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:01:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:01:58.805 [DEBUG] [Thread-16014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:01:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 1, 44), 28.43, 14.76, 0.0, 44.75, 24.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:01:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:01:44
2025-12-25T18:01:59.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:01:59.233 [DEBUG] [Thread-16015] [transport.py] [_log()] starting thread (client mode): 0xb6b239a0
2025-12-25T18:01:59.233 [DEBUG] [Thread-16015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:01:59.252 [DEBUG] [Thread-16015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:01:59.252 [INFO] [Thread-16015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] client lang: <none>
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] server lang: <none>
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] kex follows: False
2025-12-25T18:01:59.255 [DEBUG] [Thread-16015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:01:59.256 [DEBUG] [Thread-16015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:01:59.256 [DEBUG] [Thread-16015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:01:59.256 [DEBUG] [Thread-16015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:01:59.256 [DEBUG] [Thread-16015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:01:59.256 [DEBUG] [Thread-16015] [transport.py] [_log()] Compression: none
2025-12-25T18:01:59.256 [DEBUG] [Thread-16015] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:01:59.272 [DEBUG] [Thread-16015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:01:59.272 [DEBUG] [Thread-16015] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:01:59.273 [DEBUG] [Thread-16015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:01:59.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:01:59.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:01:59.274 [DEBUG] [Thread-16015] [transport.py] [_log()] userauth is OK
2025-12-25T18:01:59.275 [DEBUG] [Thread-16015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:01:59.275 [DEBUG] [Thread-16015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:01:59.275 [DEBUG] [Thread-16015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:01:59.275 [DEBUG] [Thread-16015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:01:59.297 [INFO] [Thread-16015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:01:59.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:02:00.104 [DEBUG] [Thread-16015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:02:00.105 [DEBUG] [Thread-16015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:02:00.105 [DEBUG] [Thread-16015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:02:00.146 [DEBUG] [Thread-16015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:02:00.146 [DEBUG] [Thread-16015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:02:00.149 [DEBUG] [Thread-16015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:02:00.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:02:00.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:02:00.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:02:00.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:02:00.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:02:00.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:02:00.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:02:00.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:02:00.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.667769 -999.00  +24.40  39.81     20   +0.40 1 1 2 1 1   887    0 22.76 -22.07 ----- 32.9 39.8 290.0 52.9 26.7 -29.1 26.9 -28.7 27.5 -26.1 27.7 -27.5
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.667769
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:02:00.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:01:44', tmtdew=28.43, humidity=14.76, cloud=0.0, wind=44.75, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:01:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:02:00.173 [DEBUG] [Thread-16015] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:02:00.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-25T18:02:00.274 [DEBUG] [Thread-16018] [transport.py] [_log()] starting thread (client mode): 0xb955baf0
2025-12-25T18:02:00.274 [DEBUG] [Thread-16018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:02:00.289 [DEBUG] [Thread-16018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:02:00.289 [INFO] [Thread-16018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:02:00.296 [DEBUG] [Thread-16018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:02:00.296 [DEBUG] [Thread-16018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:02:00.296 [DEBUG] [Thread-16018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] client lang: <none>
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] server lang: <none>
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] kex follows: False
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:02:00.297 [DEBUG] [Thread-16018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:02:00.298 [DEBUG] [Thread-16018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:02:00.298 [DEBUG] [Thread-16018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:02:00.298 [DEBUG] [Thread-16018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:02:00.298 [DEBUG] [Thread-16018] [transport.py] [_log()] Compression: none
2025-12-25T18:02:00.298 [DEBUG] [Thread-16018] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:02:00.355 [DEBUG] [Thread-16018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:02:00.356 [DEBUG] [Thread-16018] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:02:00.356 [DEBUG] [Thread-16018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:02:00.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:02:00.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:02:00.411 [DEBUG] [Thread-16018] [transport.py] [_log()] userauth is OK
2025-12-25T18:02:00.412 [DEBUG] [Thread-16018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:02:00.412 [DEBUG] [Thread-16018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:02:00.412 [DEBUG] [Thread-16018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:02:00.412 [DEBUG] [Thread-16018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:02:00.431 [INFO] [Thread-16018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:02:00.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-25T18:02:00.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:02:01.280 [DEBUG] [Thread-16018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:02:01.281 [DEBUG] [Thread-16018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:02:01.329 [DEBUG] [Thread-16018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:02:01.329 [DEBUG] [Thread-16018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:02:01.337 [DEBUG] [Thread-16018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:02:01.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:02:01.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')
2025-12-25T18:02:01.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:02:01.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:02:01.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:02:01.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:02:01.371 [DEBUG] [Thread-16018] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:02:07.085 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:02:07.086 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:02:13.835 [DEBUG] [Thread-16020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:02:17.490 [DEBUG] [Thread-16021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:02:28.894 [DEBUG] [Thread-16022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:02:31.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:02:31.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:02:31.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-25T18:02:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 2, 16), 28.52, 14.65, 0.0, 44.45, 24.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:02:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:02:16
2025-12-25T18:02:32.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:02:32.363 [DEBUG] [Thread-16023] [transport.py] [_log()] starting thread (client mode): 0xb6bb7940
2025-12-25T18:02:32.363 [DEBUG] [Thread-16023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:02:32.383 [DEBUG] [Thread-16023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:02:32.383 [INFO] [Thread-16023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] client lang: <none>
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] server lang: <none>
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] kex follows: False
2025-12-25T18:02:32.386 [DEBUG] [Thread-16023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:02:32.387 [DEBUG] [Thread-16023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:02:32.387 [DEBUG] [Thread-16023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:02:32.387 [DEBUG] [Thread-16023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:02:32.387 [DEBUG] [Thread-16023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:02:32.387 [DEBUG] [Thread-16023] [transport.py] [_log()] Compression: none
2025-12-25T18:02:32.387 [DEBUG] [Thread-16023] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:02:32.404 [DEBUG] [Thread-16023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:02:32.405 [DEBUG] [Thread-16023] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:02:32.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:02:32.406 [DEBUG] [Thread-16023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:02:32.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:02:32.408 [DEBUG] [Thread-16023] [transport.py] [_log()] userauth is OK
2025-12-25T18:02:32.408 [DEBUG] [Thread-16023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:02:32.409 [DEBUG] [Thread-16023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:02:32.409 [DEBUG] [Thread-16023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:02:32.409 [DEBUG] [Thread-16023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:02:32.422 [INFO] [Thread-16023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:02:32.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:02:33.068 [DEBUG] [Thread-16023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:02:33.069 [DEBUG] [Thread-16023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:02:33.069 [DEBUG] [Thread-16023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:02:33.110 [DEBUG] [Thread-16023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:02:33.110 [DEBUG] [Thread-16023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:02:33.113 [DEBUG] [Thread-16023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:02:33.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:02:33.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:02:33.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:02:33.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:02:33.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:02:33.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:02:33.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.668116 -999.00  +24.40  42.84     20   +0.20 1 1 2 1 1   887    0 23.32 -21.59 ----- 42.8 42.8 299.2 45.3 26.6 -28.7 26.9 -28.2 27.5 -27.6 27.6 -27.2
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.668116
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:02:33.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:02:16', tmtdew=28.52, humidity=14.65, cloud=0.0, wind=44.45, temperature=24.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:02:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:02:33.136 [DEBUG] [Thread-16023] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:02:33.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-25T18:02:33.224 [DEBUG] [Thread-16026] [transport.py] [_log()] starting thread (client mode): 0xb6bc0af0
2025-12-25T18:02:33.224 [DEBUG] [Thread-16026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:02:33.239 [DEBUG] [Thread-16026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:02:33.239 [INFO] [Thread-16026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:02:33.246 [DEBUG] [Thread-16026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] client lang: <none>
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] server lang: <none>
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] kex follows: False
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] Compression: none
2025-12-25T18:02:33.247 [DEBUG] [Thread-16026] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:02:33.304 [DEBUG] [Thread-16026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:02:33.304 [DEBUG] [Thread-16026] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:02:33.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:02:33.305 [DEBUG] [Thread-16026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:02:33.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:02:33.367 [DEBUG] [Thread-16026] [transport.py] [_log()] userauth is OK
2025-12-25T18:02:33.367 [DEBUG] [Thread-16026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:02:33.367 [DEBUG] [Thread-16026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:02:33.367 [DEBUG] [Thread-16026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:02:33.367 [DEBUG] [Thread-16026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:02:33.388 [INFO] [Thread-16026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:02:33.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:02:33.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:02:34.226 [DEBUG] [Thread-16026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:02:34.226 [DEBUG] [Thread-16026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:02:34.274 [DEBUG] [Thread-16026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:02:34.274 [DEBUG] [Thread-16026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:02:34.284 [DEBUG] [Thread-16026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:02:34.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:02:34.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:02:34.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-25T18:02:34.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:02:34.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:02:34.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:02:34.320 [DEBUG] [Thread-16026] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:02:43.926 [DEBUG] [Thread-16028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:02:58.973 [DEBUG] [Thread-16029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:04.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:03:04.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:03:04.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-25T18:03:05.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 2, 48), 28.55, 14.63, 0.0, 44.78, 24.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:03:05.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:02:48
2025-12-25T18:03:05.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:03:05.310 [DEBUG] [Thread-16030] [transport.py] [_log()] starting thread (client mode): 0xb9590f40
2025-12-25T18:03:05.310 [DEBUG] [Thread-16030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:03:05.332 [DEBUG] [Thread-16030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:03:05.332 [INFO] [Thread-16030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:03:05.335 [DEBUG] [Thread-16030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:03:05.335 [DEBUG] [Thread-16030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:03:05.335 [DEBUG] [Thread-16030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:03:05.335 [DEBUG] [Thread-16030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:05.335 [DEBUG] [Thread-16030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] client lang: <none>
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] server lang: <none>
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] kex follows: False
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] Compression: none
2025-12-25T18:03:05.336 [DEBUG] [Thread-16030] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:03:05.354 [DEBUG] [Thread-16030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:03:05.354 [DEBUG] [Thread-16030] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:03:05.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:03:05.356 [DEBUG] [Thread-16030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:03:05.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:03:05.358 [DEBUG] [Thread-16030] [transport.py] [_log()] userauth is OK
2025-12-25T18:03:05.358 [DEBUG] [Thread-16030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:03:05.358 [DEBUG] [Thread-16030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:03:05.358 [DEBUG] [Thread-16030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:03:05.358 [DEBUG] [Thread-16030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:03:05.385 [INFO] [Thread-16030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:03:05.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:03:06.176 [DEBUG] [Thread-16030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:03:06.176 [DEBUG] [Thread-16030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:03:06.176 [DEBUG] [Thread-16030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:03:06.217 [DEBUG] [Thread-16030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:03:06.217 [DEBUG] [Thread-16030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:03:06.221 [DEBUG] [Thread-16030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:03:06.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:03:06.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:03:06.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:03:06.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:03:06.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:03:06.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:03:06.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:03:06.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:03:06.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:03:06.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.668463 -999.00  +24.60  34.50     20   +0.30 1 1 2 1 1   887    0 22.63 -18.87 ----- 40.1 34.5 292.6 44.0 26.6 -28.8 26.9 -28.0 27.5 -26.1 27.6 -27.1
2025-12-25T18:03:06.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:03:06.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:03:06.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.668463
2025-12-25T18:03:06.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:03:06.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:03:06.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:03:06.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:03:06.246 [DEBUG] [Thread-16030] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:03:06.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:03:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:02:48', tmtdew=28.55, humidity=14.63, cloud=0.0, wind=44.78, temperature=24.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:02:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:03:06.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-25T18:03:06.340 [DEBUG] [Thread-16033] [transport.py] [_log()] starting thread (client mode): 0xb6bb5f30
2025-12-25T18:03:06.340 [DEBUG] [Thread-16033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:03:06.354 [DEBUG] [Thread-16033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:03:06.354 [INFO] [Thread-16033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:03:06.361 [DEBUG] [Thread-16033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] client lang: <none>
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] server lang: <none>
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] kex follows: False
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] Compression: none
2025-12-25T18:03:06.362 [DEBUG] [Thread-16033] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:03:06.420 [DEBUG] [Thread-16033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:03:06.421 [DEBUG] [Thread-16033] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:03:06.421 [DEBUG] [Thread-16033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:03:06.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:03:06.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:03:06.480 [DEBUG] [Thread-16033] [transport.py] [_log()] userauth is OK
2025-12-25T18:03:06.480 [DEBUG] [Thread-16033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:03:06.480 [DEBUG] [Thread-16033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:03:06.480 [DEBUG] [Thread-16033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:03:06.480 [DEBUG] [Thread-16033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:03:06.497 [INFO] [Thread-16033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:03:06.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-25T18:03:06.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:03:07.224 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:07.225 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:07.315 [DEBUG] [Thread-16033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:03:07.316 [DEBUG] [Thread-16033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:03:07.364 [DEBUG] [Thread-16033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:03:07.365 [DEBUG] [Thread-16033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:03:07.374 [DEBUG] [Thread-16033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:03:07.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:03:07.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-25T18:03:07.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-25T18:03:07.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:03:07.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:03:07.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:03:07.414 [DEBUG] [Thread-16033] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:03:14.010 [DEBUG] [Thread-16035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:17.523 [DEBUG] [Thread-16036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:29.058 [DEBUG] [Thread-16037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:03:37.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:03:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:03:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 3, 20), 28.62, 14.55, 0.0, 43.51, 24.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:03:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:03:20
2025-12-25T18:03:38.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:03:38.397 [DEBUG] [Thread-16038] [transport.py] [_log()] starting thread (client mode): 0xb6b7c8e0
2025-12-25T18:03:38.397 [DEBUG] [Thread-16038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:03:38.417 [DEBUG] [Thread-16038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:03:38.417 [INFO] [Thread-16038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:03:38.418 [DEBUG] [Thread-16038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:03:38.418 [DEBUG] [Thread-16038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:03:38.418 [DEBUG] [Thread-16038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] client lang: <none>
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] server lang: <none>
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] kex follows: False
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] Compression: none
2025-12-25T18:03:38.419 [DEBUG] [Thread-16038] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:03:38.427 [DEBUG] [Thread-16038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:03:38.428 [DEBUG] [Thread-16038] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:03:38.428 [DEBUG] [Thread-16038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:03:38.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:03:38.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:03:38.430 [DEBUG] [Thread-16038] [transport.py] [_log()] userauth is OK
2025-12-25T18:03:38.430 [DEBUG] [Thread-16038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:03:38.430 [DEBUG] [Thread-16038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:03:38.430 [DEBUG] [Thread-16038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:03:38.430 [DEBUG] [Thread-16038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:03:38.454 [INFO] [Thread-16038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:03:38.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:03:39.090 [DEBUG] [Thread-16038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:03:39.090 [DEBUG] [Thread-16038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:03:39.091 [DEBUG] [Thread-16038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:03:39.131 [DEBUG] [Thread-16038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:03:39.132 [DEBUG] [Thread-16038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:03:39.134 [DEBUG] [Thread-16038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:03:39.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:03:39.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:03:39.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:03:39.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:03:39.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:03:39.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:03:39.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:03:39.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:03:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:03:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.668811 -999.00  +24.50  33.90     20   +0.20 1 1 2 1 1   887    0 23.05 -16.57 ----- 41.4 33.9 302.2 41.8 26.6 -28.5 26.9 -28.5 27.5 -27.2 27.7 -27.3
2025-12-25T18:03:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:03:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:03:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.668811
2025-12-25T18:03:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:03:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:03:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:03:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:03:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:03:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:03:20', tmtdew=28.62, humidity=14.55, cloud=0.0, wind=43.51, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:03:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:03:39.159 [DEBUG] [Thread-16038] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:03:39.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-25T18:03:39.251 [DEBUG] [Thread-16041] [transport.py] [_log()] starting thread (client mode): 0xb6bc3760
2025-12-25T18:03:39.251 [DEBUG] [Thread-16041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:03:39.266 [DEBUG] [Thread-16041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:03:39.266 [INFO] [Thread-16041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] client lang: <none>
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] server lang: <none>
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] kex follows: False
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:03:39.273 [DEBUG] [Thread-16041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:03:39.274 [DEBUG] [Thread-16041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:03:39.274 [DEBUG] [Thread-16041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:03:39.274 [DEBUG] [Thread-16041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:03:39.274 [DEBUG] [Thread-16041] [transport.py] [_log()] Compression: none
2025-12-25T18:03:39.274 [DEBUG] [Thread-16041] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:03:39.330 [DEBUG] [Thread-16041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:03:39.331 [DEBUG] [Thread-16041] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:03:39.331 [DEBUG] [Thread-16041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:03:39.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:03:39.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:03:39.387 [DEBUG] [Thread-16041] [transport.py] [_log()] userauth is OK
2025-12-25T18:03:39.388 [DEBUG] [Thread-16041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:03:39.388 [DEBUG] [Thread-16041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:03:39.388 [DEBUG] [Thread-16041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:03:39.388 [DEBUG] [Thread-16041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:03:39.407 [INFO] [Thread-16041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:03:39.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-25T18:03:39.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:03:40.213 [DEBUG] [Thread-16041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:03:40.214 [DEBUG] [Thread-16041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:03:40.261 [DEBUG] [Thread-16041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:03:40.261 [DEBUG] [Thread-16041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:03:40.270 [DEBUG] [Thread-16041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:03:40.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:03:40.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')
2025-12-25T18:03:40.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:03:40.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:03:40.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:03:40.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:03:40.308 [DEBUG] [Thread-16041] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:03:44.095 [DEBUG] [Thread-16043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:03:59.143 [DEBUG] [Thread-16044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:07.368 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:07.369 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:10.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:04:10.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:04:10.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-25T18:04:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 3, 52), 28.9, 14.48, 0.0, 44.59, 24.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:04:11.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:03:52
2025-12-25T18:04:11.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:04:11.312 [DEBUG] [Thread-16045] [transport.py] [_log()] starting thread (client mode): 0xb6b60be0
2025-12-25T18:04:11.313 [DEBUG] [Thread-16045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:04:11.331 [DEBUG] [Thread-16045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:04:11.331 [INFO] [Thread-16045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:04:11.334 [DEBUG] [Thread-16045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:04:11.334 [DEBUG] [Thread-16045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:04:11.334 [DEBUG] [Thread-16045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:04:11.334 [DEBUG] [Thread-16045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:11.334 [DEBUG] [Thread-16045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] client lang: <none>
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] server lang: <none>
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] kex follows: False
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] Compression: none
2025-12-25T18:04:11.335 [DEBUG] [Thread-16045] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:04:11.351 [DEBUG] [Thread-16045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:04:11.352 [DEBUG] [Thread-16045] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:04:11.353 [DEBUG] [Thread-16045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:04:11.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:04:11.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:04:11.354 [DEBUG] [Thread-16045] [transport.py] [_log()] userauth is OK
2025-12-25T18:04:11.355 [DEBUG] [Thread-16045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:04:11.355 [DEBUG] [Thread-16045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:04:11.355 [DEBUG] [Thread-16045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:04:11.355 [DEBUG] [Thread-16045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:04:11.379 [INFO] [Thread-16045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:04:11.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:04:12.188 [DEBUG] [Thread-16045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:04:12.188 [DEBUG] [Thread-16045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:04:12.198 [DEBUG] [Thread-16045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:04:12.229 [DEBUG] [Thread-16045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:04:12.229 [DEBUG] [Thread-16045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:04:12.232 [DEBUG] [Thread-16045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:04:12.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:04:12.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:04:12.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:04:12.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:04:12.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:04:12.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:04:12.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:04:12.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:04:12.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:04:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.669158 -999.00  +24.30  37.99     20   +0.00 1 1 2 1 1   887    0 23.47 -16.09 ----- 37.8 38.0 292.6 50.6 26.6 -28.8 26.8 -28.9 27.4 -27.6 27.6 -27.5
2025-12-25T18:04:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:04:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:04:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.669158
2025-12-25T18:04:12.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:04:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:04:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:04:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:04:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:04:12.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:03:52', tmtdew=28.9, humidity=14.48, cloud=0.0, wind=44.59, temperature=24.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:03:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:04:12.256 [DEBUG] [Thread-16045] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:04:12.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-25T18:04:12.349 [DEBUG] [Thread-16048] [transport.py] [_log()] starting thread (client mode): 0xb6b613c0
2025-12-25T18:04:12.349 [DEBUG] [Thread-16048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:04:12.365 [DEBUG] [Thread-16048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:04:12.365 [INFO] [Thread-16048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:04:12.372 [DEBUG] [Thread-16048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] client lang: <none>
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] server lang: <none>
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] kex follows: False
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] Compression: none
2025-12-25T18:04:12.373 [DEBUG] [Thread-16048] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:04:12.433 [DEBUG] [Thread-16048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:04:12.433 [DEBUG] [Thread-16048] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:04:12.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:04:12.434 [DEBUG] [Thread-16048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:04:12.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:04:12.492 [DEBUG] [Thread-16048] [transport.py] [_log()] userauth is OK
2025-12-25T18:04:12.492 [DEBUG] [Thread-16048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:04:12.492 [DEBUG] [Thread-16048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:04:12.492 [DEBUG] [Thread-16048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:04:12.492 [DEBUG] [Thread-16048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:04:12.511 [INFO] [Thread-16048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:04:12.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-25T18:04:12.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:04:13.358 [DEBUG] [Thread-16048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:04:13.359 [DEBUG] [Thread-16048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:04:13.406 [DEBUG] [Thread-16048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:04:13.407 [DEBUG] [Thread-16048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:04:13.415 [DEBUG] [Thread-16048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:04:13.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:04:13.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:04:13.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:04:13.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:04:13.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:04:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:04:13.449 [DEBUG] [Thread-16048] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:04:14.176 [DEBUG] [Thread-16050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:17.568 [DEBUG] [Thread-16051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:29.225 [DEBUG] [Thread-16052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:43.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:04:43.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:04:43.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:04:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 4, 24), 29.02, 14.37, 0.0, 45.75, 24.86, 0, 0, 0, 2, 1, 0),)
2025-12-25T18:04:44.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:04:24
2025-12-25T18:04:44.258 [DEBUG] [Thread-16053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:04:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:04:44.432 [DEBUG] [Thread-16054] [transport.py] [_log()] starting thread (client mode): 0xb95d4f70
2025-12-25T18:04:44.432 [DEBUG] [Thread-16054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:04:44.453 [DEBUG] [Thread-16054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:04:44.453 [INFO] [Thread-16054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] client lang: <none>
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] server lang: <none>
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] kex follows: False
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:04:44.456 [DEBUG] [Thread-16054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:04:44.457 [DEBUG] [Thread-16054] [transport.py] [_log()] Compression: none
2025-12-25T18:04:44.457 [DEBUG] [Thread-16054] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:04:44.472 [DEBUG] [Thread-16054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:04:44.473 [DEBUG] [Thread-16054] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:04:44.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:04:44.474 [DEBUG] [Thread-16054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:04:44.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:04:44.476 [DEBUG] [Thread-16054] [transport.py] [_log()] userauth is OK
2025-12-25T18:04:44.476 [DEBUG] [Thread-16054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:04:44.476 [DEBUG] [Thread-16054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:04:44.476 [DEBUG] [Thread-16054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:04:44.476 [DEBUG] [Thread-16054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:04:44.497 [INFO] [Thread-16054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:04:44.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:04:45.117 [DEBUG] [Thread-16054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:04:45.118 [DEBUG] [Thread-16054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:04:45.118 [DEBUG] [Thread-16054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:04:45.158 [DEBUG] [Thread-16054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:04:45.158 [DEBUG] [Thread-16054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:04:45.161 [DEBUG] [Thread-16054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:04:45.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:04:45.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:04:45.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:04:45.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:04:45.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:04:45.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:04:45.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:04:45.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:04:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:04:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.669505 -999.00  +24.30  36.43     19   -0.10 1 1 2 1 1   887    0 23.40 -15.98 ----- 33.4 36.4 296.2 42.3 26.6 -28.7 26.9 -28.3 27.6 -25.5 27.6 -27.0
2025-12-25T18:04:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:04:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:04:45.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.669505
2025-12-25T18:04:45.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:04:45.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:04:45.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:04:45.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:04:45.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:04:45.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:04:24', tmtdew=29.02, humidity=14.37, cloud=0.0, wind=45.75, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:04:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:04:45.189 [DEBUG] [Thread-16054] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:04:45.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-25T18:04:45.292 [DEBUG] [Thread-16057] [transport.py] [_log()] starting thread (client mode): 0xb9593e50
2025-12-25T18:04:45.292 [DEBUG] [Thread-16057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:04:45.306 [DEBUG] [Thread-16057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:04:45.306 [INFO] [Thread-16057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] client lang: <none>
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] server lang: <none>
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] kex follows: False
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] Compression: none
2025-12-25T18:04:45.314 [DEBUG] [Thread-16057] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:04:45.372 [DEBUG] [Thread-16057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:04:45.373 [DEBUG] [Thread-16057] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:04:45.373 [DEBUG] [Thread-16057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:04:45.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:04:45.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:04:45.428 [DEBUG] [Thread-16057] [transport.py] [_log()] userauth is OK
2025-12-25T18:04:45.428 [DEBUG] [Thread-16057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:04:45.428 [DEBUG] [Thread-16057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:04:45.428 [DEBUG] [Thread-16057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:04:45.429 [DEBUG] [Thread-16057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:04:45.451 [INFO] [Thread-16057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:04:45.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-25T18:04:45.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:04:46.274 [DEBUG] [Thread-16057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:04:46.274 [DEBUG] [Thread-16057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:04:46.322 [DEBUG] [Thread-16057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:04:46.322 [DEBUG] [Thread-16057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:04:46.331 [DEBUG] [Thread-16057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:04:46.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:04:46.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-25T18:04: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-25T18:04:46.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:04:46.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:04:46.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:04:46.368 [DEBUG] [Thread-16057] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:04:59.290 [DEBUG] [Thread-16059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:07.511 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:07.512 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:14.344 [DEBUG] [Thread-16060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:16.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:05:16.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:05:16.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-25T18:05:17.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 4, 56), 28.99, 14.48, 0.0, 38.2, 24.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:05:17.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:04:56
2025-12-25T18:05:17.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:05:17.423 [DEBUG] [Thread-16061] [transport.py] [_log()] starting thread (client mode): 0xb6bc2dd0
2025-12-25T18:05:17.423 [DEBUG] [Thread-16061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:05:17.443 [DEBUG] [Thread-16061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:05:17.443 [INFO] [Thread-16061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] client lang: <none>
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] server lang: <none>
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] kex follows: False
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] Compression: none
2025-12-25T18:05:17.447 [DEBUG] [Thread-16061] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:05:17.463 [DEBUG] [Thread-16061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:05:17.463 [DEBUG] [Thread-16061] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:05:17.463 [DEBUG] [Thread-16061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:05:17.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:05:17.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:05:17.464 [DEBUG] [Thread-16061] [transport.py] [_log()] userauth is OK
2025-12-25T18:05:17.464 [DEBUG] [Thread-16061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:05:17.464 [DEBUG] [Thread-16061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:05:17.464 [DEBUG] [Thread-16061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:05:17.464 [DEBUG] [Thread-16061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:05:17.473 [INFO] [Thread-16061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:05:17.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:05:17.597 [DEBUG] [Thread-16063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:18.659 [DEBUG] [Thread-16061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:05:18.659 [DEBUG] [Thread-16061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:05:18.659 [DEBUG] [Thread-16061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:05:18.699 [DEBUG] [Thread-16061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:05:18.699 [DEBUG] [Thread-16061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:05:18.702 [DEBUG] [Thread-16061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:05:18.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:05:18.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:05:18.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:05:18.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:05:18.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:05:18.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:05:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.669852 -999.00  +24.40  35.70     20   +0.00 1 1 2 1 1   887    0 23.12 -16.70 ----- 35.7 35.7 293.2 41.2 26.6 -28.8 26.9 -28.7 27.4 -26.5 27.6 -27.2
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.669852
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:05:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:04:56', tmtdew=28.99, humidity=14.48, cloud=0.0, wind=38.2, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:04:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:05:18.713 [DEBUG] [Thread-16061] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:05:18.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-25T18:05:18.797 [DEBUG] [Thread-16065] [transport.py] [_log()] starting thread (client mode): 0xb6b62d70
2025-12-25T18:05:18.797 [DEBUG] [Thread-16065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:05:18.812 [DEBUG] [Thread-16065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:05:18.812 [INFO] [Thread-16065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] client lang: <none>
2025-12-25T18:05:18.819 [DEBUG] [Thread-16065] [transport.py] [_log()] server lang: <none>
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] kex follows: False
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] Compression: none
2025-12-25T18:05:18.820 [DEBUG] [Thread-16065] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:05:18.874 [DEBUG] [Thread-16065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:05:18.874 [DEBUG] [Thread-16065] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:05:18.874 [DEBUG] [Thread-16065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:05:18.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:05:18.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:05:18.931 [DEBUG] [Thread-16065] [transport.py] [_log()] userauth is OK
2025-12-25T18:05:18.931 [DEBUG] [Thread-16065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:05:18.931 [DEBUG] [Thread-16065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:05:18.931 [DEBUG] [Thread-16065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:05:18.931 [DEBUG] [Thread-16065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:05:18.945 [INFO] [Thread-16065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:05:18.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-25T18:05:18.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:05:19.755 [DEBUG] [Thread-16065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:05:19.755 [DEBUG] [Thread-16065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:05:19.804 [DEBUG] [Thread-16065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:05:19.804 [DEBUG] [Thread-16065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:05:19.817 [DEBUG] [Thread-16065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:05:19.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:05:19.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:05:19.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:05:19.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:05:19.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:05:19.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:05:19.848 [DEBUG] [Thread-16065] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:05:29.372 [DEBUG] [Thread-16067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:44.416 [DEBUG] [Thread-16068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:05:49.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:05:49.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:05:49.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-25T18:05:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 5, 28), 29.05, 14.45, 0.0, 38.09, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:05:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:05:28
2025-12-25T18:05:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:05:50.865 [DEBUG] [Thread-16069] [transport.py] [_log()] starting thread (client mode): 0xb9593670
2025-12-25T18:05:50.866 [DEBUG] [Thread-16069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:05:50.886 [DEBUG] [Thread-16069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:05:50.886 [INFO] [Thread-16069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] client lang: <none>
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] server lang: <none>
2025-12-25T18:05:50.889 [DEBUG] [Thread-16069] [transport.py] [_log()] kex follows: False
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] Compression: none
2025-12-25T18:05:50.890 [DEBUG] [Thread-16069] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:05:50.907 [DEBUG] [Thread-16069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:05:50.908 [DEBUG] [Thread-16069] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:05:50.909 [DEBUG] [Thread-16069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:05:50.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:05:50.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:05:50.911 [DEBUG] [Thread-16069] [transport.py] [_log()] userauth is OK
2025-12-25T18:05:50.911 [DEBUG] [Thread-16069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:05:50.911 [DEBUG] [Thread-16069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:05:50.911 [DEBUG] [Thread-16069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:05:50.911 [DEBUG] [Thread-16069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:05:50.930 [INFO] [Thread-16069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:05:50.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:05:51.553 [DEBUG] [Thread-16069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:05:51.553 [DEBUG] [Thread-16069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:05:51.553 [DEBUG] [Thread-16069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:05:51.594 [DEBUG] [Thread-16069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:05:51.594 [DEBUG] [Thread-16069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:05:51.597 [DEBUG] [Thread-16069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:05:51.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:05:51.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:05:51.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:05:51.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:05:51.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:05:51.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:05:51.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:05:51.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:05:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:05:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.670199 -999.00  +24.50  26.41     20   +0.20 1 1 1 1 1   887    0 23.36 -13.87 ----- 28.8 26.4 313.6 39.2 26.6 -28.6 26.9 -28.4 27.5 -26.4 27.5 -27.4
2025-12-25T18:05:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:05:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:05:51.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.670199
2025-12-25T18:05:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:05:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:05:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:05:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:05:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:05:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:05:28', tmtdew=29.05, humidity=14.45, cloud=0.0, wind=38.09, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:05:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:05:51.625 [DEBUG] [Thread-16069] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:05:51.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-25T18:05:51.717 [DEBUG] [Thread-16072] [transport.py] [_log()] starting thread (client mode): 0xb6bc3cd0
2025-12-25T18:05:51.717 [DEBUG] [Thread-16072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:05:51.732 [DEBUG] [Thread-16072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:05:51.732 [INFO] [Thread-16072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:05:51.739 [DEBUG] [Thread-16072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] client lang: <none>
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] server lang: <none>
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] kex follows: False
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] Compression: none
2025-12-25T18:05:51.740 [DEBUG] [Thread-16072] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:05:51.798 [DEBUG] [Thread-16072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:05:51.799 [DEBUG] [Thread-16072] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:05:51.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:05:51.800 [DEBUG] [Thread-16072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:05:51.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:05:51.855 [DEBUG] [Thread-16072] [transport.py] [_log()] userauth is OK
2025-12-25T18:05:51.855 [DEBUG] [Thread-16072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:05:51.855 [DEBUG] [Thread-16072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:05:51.855 [DEBUG] [Thread-16072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:05:51.855 [DEBUG] [Thread-16072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:05:51.869 [INFO] [Thread-16072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:05:51.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:05:51.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:05:52.721 [DEBUG] [Thread-16072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:05:52.721 [DEBUG] [Thread-16072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:05:52.769 [DEBUG] [Thread-16072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:05:52.769 [DEBUG] [Thread-16072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:05:52.778 [DEBUG] [Thread-16072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:05:52.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:05:52.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-25T18:05:52.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-25T18:05:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:05:52.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:05:52.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:05:52.815 [DEBUG] [Thread-16072] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:05:59.449 [DEBUG] [Thread-16074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:07.654 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:07.656 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:14.495 [DEBUG] [Thread-16075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:17.632 [DEBUG] [Thread-16076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:06:22.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:06:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:06:23.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 6), 28.98, 14.47, 0.0, 36.66, 25.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:06:23.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:06:00
2025-12-25T18:06:23.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:06:23.804 [DEBUG] [Thread-16077] [transport.py] [_log()] starting thread (client mode): 0xb6b61f60
2025-12-25T18:06:23.804 [DEBUG] [Thread-16077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:06:23.824 [DEBUG] [Thread-16077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:06:23.825 [INFO] [Thread-16077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:06:23.827 [DEBUG] [Thread-16077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] client lang: <none>
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] server lang: <none>
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] kex follows: False
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] Compression: none
2025-12-25T18:06:23.828 [DEBUG] [Thread-16077] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:06:23.846 [DEBUG] [Thread-16077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:06:23.846 [DEBUG] [Thread-16077] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:06:23.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:06:23.847 [DEBUG] [Thread-16077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:06:23.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:06:23.849 [DEBUG] [Thread-16077] [transport.py] [_log()] userauth is OK
2025-12-25T18:06:23.850 [DEBUG] [Thread-16077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:06:23.850 [DEBUG] [Thread-16077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:06:23.850 [DEBUG] [Thread-16077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:06:23.850 [DEBUG] [Thread-16077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:06:23.875 [INFO] [Thread-16077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:06:23.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:06:24.698 [DEBUG] [Thread-16077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:06:24.698 [DEBUG] [Thread-16077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:06:24.699 [DEBUG] [Thread-16077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:06:24.739 [DEBUG] [Thread-16077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:06:24.739 [DEBUG] [Thread-16077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:06:24.743 [DEBUG] [Thread-16077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:06:24.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:06:24.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:06:24.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:06:24.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:06:24.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:06:24.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:06:24.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:06:24.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:06:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:06:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.670894 -999.00  +24.40  43.20     20   +0.50 1 1 2 1 1   887    0 23.70 -6.07 ----- 39.1 43.2 300.2 55.5 26.6 -29.1 26.8 -29.2 27.3 -27.0 27.5 -27.7
2025-12-25T18:06:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:06:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:06:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.670894
2025-12-25T18:06:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:06:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:06:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:06:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:06:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:06:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:06:00', tmtdew=28.98, humidity=14.47, cloud=0.0, wind=36.66, temperature=25.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:06:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:06:24.769 [DEBUG] [Thread-16077] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:06:24.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-25T18:06:24.862 [DEBUG] [Thread-16080] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T18:06:24.863 [DEBUG] [Thread-16080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:06:24.878 [DEBUG] [Thread-16080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:06:24.878 [INFO] [Thread-16080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:06:24.886 [DEBUG] [Thread-16080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:06:24.886 [DEBUG] [Thread-16080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:06:24.886 [DEBUG] [Thread-16080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:06:24.886 [DEBUG] [Thread-16080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:24.886 [DEBUG] [Thread-16080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:24.886 [DEBUG] [Thread-16080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] client lang: <none>
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] server lang: <none>
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] kex follows: False
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:06:24.887 [DEBUG] [Thread-16080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:06:24.888 [DEBUG] [Thread-16080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:06:24.888 [DEBUG] [Thread-16080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:06:24.888 [DEBUG] [Thread-16080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:06:24.888 [DEBUG] [Thread-16080] [transport.py] [_log()] Compression: none
2025-12-25T18:06:24.888 [DEBUG] [Thread-16080] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:06:24.945 [DEBUG] [Thread-16080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:06:24.945 [DEBUG] [Thread-16080] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:06:24.946 [DEBUG] [Thread-16080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:06:24.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:06:24.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:06:25.004 [DEBUG] [Thread-16080] [transport.py] [_log()] userauth is OK
2025-12-25T18:06:25.005 [DEBUG] [Thread-16080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:06:25.005 [DEBUG] [Thread-16080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:06:25.005 [DEBUG] [Thread-16080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:06:25.005 [DEBUG] [Thread-16080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:06:25.023 [INFO] [Thread-16080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:06:25.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-25T18:06:25.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:06:25.852 [DEBUG] [Thread-16080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:06:25.852 [DEBUG] [Thread-16080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:06:25.900 [DEBUG] [Thread-16080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:06:25.901 [DEBUG] [Thread-16080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:06:25.909 [DEBUG] [Thread-16080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:06:25.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:06:25.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-25T18:06:25.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-25T18:06:25.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:06:25.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:06:25.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:06:25.943 [DEBUG] [Thread-16080] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:06:29.530 [DEBUG] [Thread-16082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:44.589 [DEBUG] [Thread-16083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:06:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:06:55.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:06:55.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-25T18:06:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 6, 32), 28.96, 14.48, 0.0, 42.87, 25.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:06:56.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:06:32
2025-12-25T18:06:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:06:56.928 [DEBUG] [Thread-16084] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-25T18:06:56.928 [DEBUG] [Thread-16084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:06:56.949 [DEBUG] [Thread-16084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:06:56.949 [INFO] [Thread-16084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] client lang: <none>
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] server lang: <none>
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] kex follows: False
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] Compression: none
2025-12-25T18:06:56.953 [DEBUG] [Thread-16084] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:06:56.970 [DEBUG] [Thread-16084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:06:56.971 [DEBUG] [Thread-16084] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:06:56.971 [DEBUG] [Thread-16084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:06:56.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:06:56.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:06:56.973 [DEBUG] [Thread-16084] [transport.py] [_log()] userauth is OK
2025-12-25T18:06:56.973 [DEBUG] [Thread-16084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:06:56.974 [DEBUG] [Thread-16084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:06:56.974 [DEBUG] [Thread-16084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:06:56.974 [DEBUG] [Thread-16084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:06:57.009 [INFO] [Thread-16084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:06:57.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:06:57.671 [DEBUG] [Thread-16084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:06:57.671 [DEBUG] [Thread-16084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:06:57.671 [DEBUG] [Thread-16084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:06:57.712 [DEBUG] [Thread-16084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:06:57.713 [DEBUG] [Thread-16084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:06:57.716 [DEBUG] [Thread-16084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:06:57.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:06:57.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:06:57.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:06:57.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:06:57.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:06:57.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:06:57.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:06:57.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:06:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:06:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.671241 -999.00  +24.40  37.06     20   +0.40 1 1 2 1 1   887    0 23.93 -3.06 ----- 39.8 37.1 293.0 44.6 26.4 -28.9 26.8 -28.3 27.4 -25.9 27.4 -27.4
2025-12-25T18:06:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:06:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:06:57.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.671241
2025-12-25T18:06:57.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:06:57.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:06:57.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:06:57.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:06:57.744 [DEBUG] [Thread-16084] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:06:57.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:06:57.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:06:32', tmtdew=28.96, humidity=14.48, cloud=0.0, wind=42.87, temperature=25.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:06:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:06:57.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-25T18:06:57.842 [DEBUG] [Thread-16087] [transport.py] [_log()] starting thread (client mode): 0xb6b62980
2025-12-25T18:06:57.842 [DEBUG] [Thread-16087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:06:57.858 [DEBUG] [Thread-16087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:06:57.859 [INFO] [Thread-16087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:06:57.869 [DEBUG] [Thread-16087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:06:57.870 [DEBUG] [Thread-16087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] client lang: <none>
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] server lang: <none>
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] kex follows: False
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] Compression: none
2025-12-25T18:06:57.871 [DEBUG] [Thread-16087] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:06:57.931 [DEBUG] [Thread-16087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:06:57.932 [DEBUG] [Thread-16087] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:06:57.932 [DEBUG] [Thread-16087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:06:57.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:06:57.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:06:57.988 [DEBUG] [Thread-16087] [transport.py] [_log()] userauth is OK
2025-12-25T18:06:57.988 [DEBUG] [Thread-16087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:06:57.988 [DEBUG] [Thread-16087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:06:57.989 [DEBUG] [Thread-16087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:06:57.989 [DEBUG] [Thread-16087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:06:58.007 [INFO] [Thread-16087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:06:58.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:06:58.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:06:58.826 [DEBUG] [Thread-16087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:06:58.826 [DEBUG] [Thread-16087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:06:58.880 [DEBUG] [Thread-16087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:06:58.880 [DEBUG] [Thread-16087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:06:58.889 [DEBUG] [Thread-16087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:06:58.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:06:58.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-25T18:06:58.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-25T18:06:58.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:06:58.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:06:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:06:58.923 [DEBUG] [Thread-16087] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:06:59.627 [DEBUG] [Thread-16089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:07.796 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:07.798 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:14.671 [DEBUG] [Thread-16090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:17.660 [DEBUG] [Thread-16091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:07:28.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:07:28.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-25T18:07:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 7, 4), 29.11, 14.32, 0.0, 40.07, 24.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:07:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:07:04
2025-12-25T18:07:29.701 [DEBUG] [Thread-16092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:07:29.937 [DEBUG] [Thread-16093] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-25T18:07:29.937 [DEBUG] [Thread-16093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:07:29.957 [DEBUG] [Thread-16093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:07:29.957 [INFO] [Thread-16093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] client lang: <none>
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] server lang: <none>
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] kex follows: False
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] Compression: none
2025-12-25T18:07:29.960 [DEBUG] [Thread-16093] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:07:29.976 [DEBUG] [Thread-16093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:07:29.976 [DEBUG] [Thread-16093] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:07:29.977 [DEBUG] [Thread-16093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:07:29.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:07:29.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:07:29.978 [DEBUG] [Thread-16093] [transport.py] [_log()] userauth is OK
2025-12-25T18:07:29.978 [DEBUG] [Thread-16093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:07:29.978 [DEBUG] [Thread-16093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:07:29.979 [DEBUG] [Thread-16093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:07:29.979 [DEBUG] [Thread-16093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:07:29.996 [INFO] [Thread-16093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:07:29.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:07:30.810 [DEBUG] [Thread-16093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:07:30.810 [DEBUG] [Thread-16093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:07:30.810 [DEBUG] [Thread-16093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:07:30.851 [DEBUG] [Thread-16093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:07:30.851 [DEBUG] [Thread-16093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:07:30.854 [DEBUG] [Thread-16093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:07:30.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:07:30.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:07:30.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:07:30.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:07:30.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:07:30.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:07:30.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:07:30.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:07:30.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:07:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.671588 -999.00  +24.60  25.19     19   +0.00 1 1 1 1 1   887    0 23.65 0.49 ----- 34.5 25.2 309.6 40.1 26.4 -29.4 26.8 -28.1 27.3 -25.7 27.4 -27.6
2025-12-25T18:07:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:07:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:07:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.671588
2025-12-25T18:07:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:07:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:07:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:07:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:07:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:07:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:07:04', tmtdew=29.11, humidity=14.32, cloud=0.0, wind=40.07, temperature=24.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:07:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:07:30.880 [DEBUG] [Thread-16093] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:07:30.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-25T18:07:30.986 [DEBUG] [Thread-16096] [transport.py] [_log()] starting thread (client mode): 0xb6b4f4c0
2025-12-25T18:07:30.986 [DEBUG] [Thread-16096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:07:31.001 [DEBUG] [Thread-16096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:07:31.001 [INFO] [Thread-16096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:07:31.008 [DEBUG] [Thread-16096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] client lang: <none>
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] server lang: <none>
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] kex follows: False
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:07:31.009 [DEBUG] [Thread-16096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:07:31.010 [DEBUG] [Thread-16096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:07:31.010 [DEBUG] [Thread-16096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:07:31.010 [DEBUG] [Thread-16096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:07:31.010 [DEBUG] [Thread-16096] [transport.py] [_log()] Compression: none
2025-12-25T18:07:31.010 [DEBUG] [Thread-16096] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:07:31.071 [DEBUG] [Thread-16096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:07:31.071 [DEBUG] [Thread-16096] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:07:31.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:07:31.072 [DEBUG] [Thread-16096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:07:31.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:07:31.127 [DEBUG] [Thread-16096] [transport.py] [_log()] userauth is OK
2025-12-25T18:07:31.127 [DEBUG] [Thread-16096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:07:31.127 [DEBUG] [Thread-16096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:07:31.128 [DEBUG] [Thread-16096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:07:31.128 [DEBUG] [Thread-16096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:07:31.146 [INFO] [Thread-16096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:07:31.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:07:31.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:07:31.970 [DEBUG] [Thread-16096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:07:31.970 [DEBUG] [Thread-16096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:07:32.017 [DEBUG] [Thread-16096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:07:32.018 [DEBUG] [Thread-16096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:07:32.026 [DEBUG] [Thread-16096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:07:32.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:07:32.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-25T18:07:32.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-25T18:07:32.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:07:32.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:07:32.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:07:32.065 [DEBUG] [Thread-16096] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:07:44.734 [DEBUG] [Thread-16098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:07:59.791 [DEBUG] [Thread-16099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:02.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:08:02.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:08:02.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-25T18:08:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 7, 36), 29.76, 13.54, 0.0, 40.78, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:08:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:07:36
2025-12-25T18:08:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:08:03.044 [DEBUG] [Thread-16100] [transport.py] [_log()] starting thread (client mode): 0xb9558490
2025-12-25T18:08:03.045 [DEBUG] [Thread-16100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:08:03.065 [DEBUG] [Thread-16100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:08:03.065 [INFO] [Thread-16100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] client lang: <none>
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] server lang: <none>
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] kex follows: False
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:08:03.068 [DEBUG] [Thread-16100] [transport.py] [_log()] Compression: none
2025-12-25T18:08:03.069 [DEBUG] [Thread-16100] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:08:03.084 [DEBUG] [Thread-16100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:08:03.084 [DEBUG] [Thread-16100] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:08:03.085 [DEBUG] [Thread-16100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:08:03.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:08:03.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:08:03.087 [DEBUG] [Thread-16100] [transport.py] [_log()] userauth is OK
2025-12-25T18:08:03.087 [DEBUG] [Thread-16100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:08:03.087 [DEBUG] [Thread-16100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:08:03.088 [DEBUG] [Thread-16100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:08:03.088 [DEBUG] [Thread-16100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:08:03.124 [INFO] [Thread-16100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:08:03.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:08:03.760 [DEBUG] [Thread-16100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:08:03.760 [DEBUG] [Thread-16100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:08:03.761 [DEBUG] [Thread-16100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:08:03.801 [DEBUG] [Thread-16100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:08:03.801 [DEBUG] [Thread-16100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:08:03.804 [DEBUG] [Thread-16100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:08:03.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:08:03.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:08:03.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:08:03.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:08:03.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:08:03.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:08:03.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:08:03.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:08:03.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:08:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.671936 -999.00  +24.50  41.44     19   -0.40 1 1 2 1 1   887    0 24.12 6.11 ----- 36.4 41.4 297.8 48.2 26.5 -29.5 26.7 -29.3 27.1 -28.4 27.4 -28.2
2025-12-25T18:08:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:08:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:08:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.671936
2025-12-25T18:08:03.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:08:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:08:03.832 [DEBUG] [Thread-16100] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:08:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:08:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:08:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:08:03.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:07:36', tmtdew=29.76, humidity=13.54, cloud=0.0, wind=40.78, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:07:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:08:03.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-25T18:08:03.925 [DEBUG] [Thread-16103] [transport.py] [_log()] starting thread (client mode): 0xb6b20610
2025-12-25T18:08:03.925 [DEBUG] [Thread-16103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:08:03.940 [DEBUG] [Thread-16103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:08:03.940 [INFO] [Thread-16103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:03.948 [DEBUG] [Thread-16103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] client lang: <none>
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] server lang: <none>
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] kex follows: False
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] Compression: none
2025-12-25T18:08:03.949 [DEBUG] [Thread-16103] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:08:04.010 [DEBUG] [Thread-16103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:08:04.010 [DEBUG] [Thread-16103] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:08:04.011 [DEBUG] [Thread-16103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:08:04.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:08:04.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:08:04.068 [DEBUG] [Thread-16103] [transport.py] [_log()] userauth is OK
2025-12-25T18:08:04.068 [DEBUG] [Thread-16103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:08:04.068 [DEBUG] [Thread-16103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:08:04.069 [DEBUG] [Thread-16103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:08:04.069 [DEBUG] [Thread-16103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:08:04.087 [INFO] [Thread-16103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:08:04.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-25T18:08:04.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:08:04.911 [DEBUG] [Thread-16103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:08:04.911 [DEBUG] [Thread-16103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:08:04.959 [DEBUG] [Thread-16103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:08:04.959 [DEBUG] [Thread-16103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:08:04.968 [DEBUG] [Thread-16103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:08:04.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:08:04.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-25T18:08:04.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:08:04.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:08:04.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:08:04.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:08:05.005 [DEBUG] [Thread-16103] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:08:07.938 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:07.939 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:14.828 [DEBUG] [Thread-16105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:17.697 [DEBUG] [Thread-16106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:29.880 [DEBUG] [Thread-16107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:35.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:08:35.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:08:35.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-25T18:08:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 8, 8), 29.58, 13.7, 0.0, 36.82, 24.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:08:35.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:08:08
2025-12-25T18:08:35.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:08:36.008 [DEBUG] [Thread-16108] [transport.py] [_log()] starting thread (client mode): 0xb95b1ba0
2025-12-25T18:08:36.008 [DEBUG] [Thread-16108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:08:36.027 [DEBUG] [Thread-16108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:08:36.027 [INFO] [Thread-16108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:08:36.030 [DEBUG] [Thread-16108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] client lang: <none>
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] server lang: <none>
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] kex follows: False
2025-12-25T18:08:36.031 [DEBUG] [Thread-16108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:08:36.032 [DEBUG] [Thread-16108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:08:36.032 [DEBUG] [Thread-16108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:08:36.032 [DEBUG] [Thread-16108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:08:36.032 [DEBUG] [Thread-16108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:08:36.032 [DEBUG] [Thread-16108] [transport.py] [_log()] Compression: none
2025-12-25T18:08:36.032 [DEBUG] [Thread-16108] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:08:36.051 [DEBUG] [Thread-16108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:08:36.052 [DEBUG] [Thread-16108] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:08:36.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:08:36.054 [DEBUG] [Thread-16108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:08:36.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:08:36.055 [DEBUG] [Thread-16108] [transport.py] [_log()] userauth is OK
2025-12-25T18:08:36.056 [DEBUG] [Thread-16108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:08:36.056 [DEBUG] [Thread-16108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:08:36.056 [DEBUG] [Thread-16108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:08:36.056 [DEBUG] [Thread-16108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:08:36.081 [INFO] [Thread-16108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:08:36.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:08:36.890 [DEBUG] [Thread-16108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:08:36.890 [DEBUG] [Thread-16108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:08:36.890 [DEBUG] [Thread-16108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:08:36.931 [DEBUG] [Thread-16108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:08:36.931 [DEBUG] [Thread-16108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:08:36.935 [DEBUG] [Thread-16108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:08:36.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:08:36.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:08:36.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:08:36.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:08:36.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:08:36.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:08:36.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.672283 -999.00  +24.30  36.05     19   -0.30 1 1 2 1 1   887    0 24.28 13.96 ----- 31.5 36.0 298.2 41.9 26.4 -29.3 26.7 -28.9 27.2 -26.7 27.4 -27.6
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.672283
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:08:36.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:08:08', tmtdew=29.58, humidity=13.7, cloud=0.0, wind=36.82, temperature=24.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:08:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:08:36.955 [DEBUG] [Thread-16108] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:08:37.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-25T18:08:37.041 [DEBUG] [Thread-16111] [transport.py] [_log()] starting thread (client mode): 0xb95b0280
2025-12-25T18:08:37.041 [DEBUG] [Thread-16111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:08:37.056 [DEBUG] [Thread-16111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:08:37.056 [INFO] [Thread-16111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] client lang: <none>
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] server lang: <none>
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] kex follows: False
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:08:37.064 [DEBUG] [Thread-16111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:08:37.065 [DEBUG] [Thread-16111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:08:37.065 [DEBUG] [Thread-16111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:08:37.065 [DEBUG] [Thread-16111] [transport.py] [_log()] Compression: none
2025-12-25T18:08:37.065 [DEBUG] [Thread-16111] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:08:37.124 [DEBUG] [Thread-16111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:08:37.124 [DEBUG] [Thread-16111] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:08:37.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:08:37.125 [DEBUG] [Thread-16111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:08:37.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:08:37.180 [DEBUG] [Thread-16111] [transport.py] [_log()] userauth is OK
2025-12-25T18:08:37.180 [DEBUG] [Thread-16111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:08:37.180 [DEBUG] [Thread-16111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:08:37.181 [DEBUG] [Thread-16111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:08:37.181 [DEBUG] [Thread-16111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:08:37.205 [INFO] [Thread-16111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:08:37.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-25T18:08:37.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:08:38.029 [DEBUG] [Thread-16111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:08:38.029 [DEBUG] [Thread-16111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:08:38.078 [DEBUG] [Thread-16111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:08:38.078 [DEBUG] [Thread-16111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:08:38.087 [DEBUG] [Thread-16111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:08:38.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:08:38.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-25T18:08:38.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:08:38.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:08:38.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:08:38.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:08:38.121 [DEBUG] [Thread-16111] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:08:44.907 [DEBUG] [Thread-16113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:08:59.968 [DEBUG] [Thread-16114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:09:08.078 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:09:08.079 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:09:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:09:08.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:09:08.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-25T18:09:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 8, 40), 29.42, 13.82, 0.0, 38.23, 24.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:09:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:08:40
2025-12-25T18:09:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:09:09.172 [DEBUG] [Thread-16115] [transport.py] [_log()] starting thread (client mode): 0xb6b615a0
2025-12-25T18:09:09.172 [DEBUG] [Thread-16115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:09:09.192 [DEBUG] [Thread-16115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:09:09.192 [INFO] [Thread-16115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] client lang: <none>
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] server lang: <none>
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] kex follows: False
2025-12-25T18:09:09.195 [DEBUG] [Thread-16115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:09:09.196 [DEBUG] [Thread-16115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:09:09.196 [DEBUG] [Thread-16115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:09:09.196 [DEBUG] [Thread-16115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:09:09.196 [DEBUG] [Thread-16115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:09:09.196 [DEBUG] [Thread-16115] [transport.py] [_log()] Compression: none
2025-12-25T18:09:09.196 [DEBUG] [Thread-16115] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:09:09.210 [DEBUG] [Thread-16115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:09:09.210 [DEBUG] [Thread-16115] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:09:09.210 [DEBUG] [Thread-16115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:09:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:09:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:09:09.211 [DEBUG] [Thread-16115] [transport.py] [_log()] userauth is OK
2025-12-25T18:09:09.211 [DEBUG] [Thread-16115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:09:09.211 [DEBUG] [Thread-16115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:09:09.211 [DEBUG] [Thread-16115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:09:09.211 [DEBUG] [Thread-16115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:09:09.220 [INFO] [Thread-16115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:09:09.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:09:09.846 [DEBUG] [Thread-16115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:09:09.846 [DEBUG] [Thread-16115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:09:09.846 [DEBUG] [Thread-16115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:09:09.888 [DEBUG] [Thread-16115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:09:09.888 [DEBUG] [Thread-16115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:09:09.890 [DEBUG] [Thread-16115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:09:09.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:09:09.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:09:09.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:09:09.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:09:09.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:09:09.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:09:09.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:09:09.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.672630 -999.00  +24.30  38.27     19   -0.30 1 1 2 1 1   887    0 24.53 20.48 ----- 40.1 38.3 290.0 44.2 26.4 -29.3 26.6 -29.3 27.1 -26.8 27.2 -28.3
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.672630
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:09:09.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:08:40', tmtdew=29.42, humidity=13.82, cloud=0.0, wind=38.23, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:08:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:09:09.909 [DEBUG] [Thread-16115] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:09:09.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:09:09.992 [DEBUG] [Thread-16118] [transport.py] [_log()] starting thread (client mode): 0xb6b4f910
2025-12-25T18:09:09.992 [DEBUG] [Thread-16118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:09:10.007 [DEBUG] [Thread-16118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:09:10.007 [INFO] [Thread-16118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] client lang: <none>
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] server lang: <none>
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] kex follows: False
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:09:10.014 [DEBUG] [Thread-16118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:09:10.015 [DEBUG] [Thread-16118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:09:10.015 [DEBUG] [Thread-16118] [transport.py] [_log()] Compression: none
2025-12-25T18:09:10.015 [DEBUG] [Thread-16118] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:09:10.071 [DEBUG] [Thread-16118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:09:10.071 [DEBUG] [Thread-16118] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:09:10.072 [DEBUG] [Thread-16118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:09:10.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:09:10.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:09:10.127 [DEBUG] [Thread-16118] [transport.py] [_log()] userauth is OK
2025-12-25T18:09:10.127 [DEBUG] [Thread-16118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:09:10.127 [DEBUG] [Thread-16118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:09:10.127 [DEBUG] [Thread-16118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:09:10.127 [DEBUG] [Thread-16118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:09:10.142 [INFO] [Thread-16118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:09:10.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-25T18:09:10.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:09:10.978 [DEBUG] [Thread-16118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:09:10.978 [DEBUG] [Thread-16118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:09:11.025 [DEBUG] [Thread-16118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:09:11.025 [DEBUG] [Thread-16118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:09:11.034 [DEBUG] [Thread-16118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:09:11.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:09:11.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-25T18:09:11.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-25T18:09:11.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:09:11.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:09:11.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:09:11.066 [DEBUG] [Thread-16118] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:09:15.001 [DEBUG] [Thread-16120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:09:17.743 [DEBUG] [Thread-16121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:09:30.041 [DEBUG] [Thread-16122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:09:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:09:41.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:09:41.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-25T18:09:41.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 9, 12), 29.42, 13.83, 0.0, 35.39, 24.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:09:41.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:09:12
2025-12-25T18:09:41.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:09:42.092 [DEBUG] [Thread-16123] [transport.py] [_log()] starting thread (client mode): 0xb6b22980
2025-12-25T18:09:42.093 [DEBUG] [Thread-16123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:09:42.114 [DEBUG] [Thread-16123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:09:42.114 [INFO] [Thread-16123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:09:42.117 [DEBUG] [Thread-16123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:09:42.117 [DEBUG] [Thread-16123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:09:42.117 [DEBUG] [Thread-16123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:09:42.117 [DEBUG] [Thread-16123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:42.117 [DEBUG] [Thread-16123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] client lang: <none>
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] server lang: <none>
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] kex follows: False
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] Compression: none
2025-12-25T18:09:42.118 [DEBUG] [Thread-16123] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:09:42.135 [DEBUG] [Thread-16123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:09:42.135 [DEBUG] [Thread-16123] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:09:42.136 [DEBUG] [Thread-16123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:09:42.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:09:42.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:09:42.138 [DEBUG] [Thread-16123] [transport.py] [_log()] userauth is OK
2025-12-25T18:09:42.138 [DEBUG] [Thread-16123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:09:42.138 [DEBUG] [Thread-16123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:09:42.138 [DEBUG] [Thread-16123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:09:42.138 [DEBUG] [Thread-16123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:09:42.161 [INFO] [Thread-16123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:09:42.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:09:42.968 [DEBUG] [Thread-16123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:09:42.968 [DEBUG] [Thread-16123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:09:42.969 [DEBUG] [Thread-16123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:09:43.008 [DEBUG] [Thread-16123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:09:43.008 [DEBUG] [Thread-16123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:09:43.011 [DEBUG] [Thread-16123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:09:43.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:09:43.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:09:43.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:09:43.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:09:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:09:43.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:09:43.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.672977 -999.00  +24.00  34.12     19   -0.50 1 1 2 1 1   887    0 24.21 27.59 ----- 34.0 34.1 294.0 41.8 26.3 -29.2 26.6 -28.7 27.1 -27.4 27.2 -27.2
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.672977
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:09:43.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:09:12', tmtdew=29.42, humidity=13.83, cloud=0.0, wind=35.39, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:09:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:09:43.025 [DEBUG] [Thread-16123] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:09:43.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-25T18:09:43.106 [DEBUG] [Thread-16126] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T18:09:43.107 [DEBUG] [Thread-16126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:09:43.121 [DEBUG] [Thread-16126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:09:43.121 [INFO] [Thread-16126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] client lang: <none>
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] server lang: <none>
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] kex follows: False
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:09:43.129 [DEBUG] [Thread-16126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:09:43.130 [DEBUG] [Thread-16126] [transport.py] [_log()] Compression: none
2025-12-25T18:09:43.130 [DEBUG] [Thread-16126] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:09:43.188 [DEBUG] [Thread-16126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:09:43.189 [DEBUG] [Thread-16126] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:09:43.189 [DEBUG] [Thread-16126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:09:43.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:09:43.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:09:43.244 [DEBUG] [Thread-16126] [transport.py] [_log()] userauth is OK
2025-12-25T18:09:43.244 [DEBUG] [Thread-16126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:09:43.244 [DEBUG] [Thread-16126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:09:43.244 [DEBUG] [Thread-16126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:09:43.244 [DEBUG] [Thread-16126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:09:43.263 [INFO] [Thread-16126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:09:43.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-25T18:09:43.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:09:44.084 [DEBUG] [Thread-16126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:09:44.084 [DEBUG] [Thread-16126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:09:44.131 [DEBUG] [Thread-16126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:09:44.132 [DEBUG] [Thread-16126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:09:44.140 [DEBUG] [Thread-16126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:09:44.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:09:44.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-25T18:09:44.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:09:44.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:09:44.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:09:44.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:09:44.173 [DEBUG] [Thread-16126] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:09:45.078 [DEBUG] [Thread-16128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:00.133 [DEBUG] [Thread-16129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:08.220 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:08.221 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:10:14.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:10:14.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-25T18:10:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 9, 44), 29.05, 14.43, 0.0, 34.02, 24.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:10:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:09:44
2025-12-25T18:10:15.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:10:15.166 [DEBUG] [Thread-16130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:15.170 [DEBUG] [Thread-16131] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T18:10:15.170 [DEBUG] [Thread-16131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:10:15.191 [DEBUG] [Thread-16131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:10:15.191 [INFO] [Thread-16131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:10:15.194 [DEBUG] [Thread-16131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] client lang: <none>
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] server lang: <none>
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] kex follows: False
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:10:15.195 [DEBUG] [Thread-16131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:10:15.196 [DEBUG] [Thread-16131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:10:15.196 [DEBUG] [Thread-16131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:10:15.196 [DEBUG] [Thread-16131] [transport.py] [_log()] Compression: none
2025-12-25T18:10:15.196 [DEBUG] [Thread-16131] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:10:15.215 [DEBUG] [Thread-16131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:10:15.215 [DEBUG] [Thread-16131] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:10:15.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:10:15.216 [DEBUG] [Thread-16131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:10:15.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:10:15.219 [DEBUG] [Thread-16131] [transport.py] [_log()] userauth is OK
2025-12-25T18:10:15.219 [DEBUG] [Thread-16131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:10:15.219 [DEBUG] [Thread-16131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:10:15.219 [DEBUG] [Thread-16131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:10:15.219 [DEBUG] [Thread-16131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:10:15.244 [INFO] [Thread-16131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:10:15.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:10:15.896 [DEBUG] [Thread-16131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:10:15.896 [DEBUG] [Thread-16131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:10:15.897 [DEBUG] [Thread-16131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:10:15.939 [DEBUG] [Thread-16131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:10:15.939 [DEBUG] [Thread-16131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:10:15.942 [DEBUG] [Thread-16131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:10:15.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:10:15.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:10:15.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:10:15.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:10:15.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:10:15.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:10:15.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:10:15.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:10:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:10:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.673324 -999.00  +24.10  34.70     20   +0.10 1 1 2 1 1   887    0 24.66 33.43 ----- 38.5 34.7 296.2 46.4 26.2 -29.2 26.6 -28.5 27.0 -26.4 27.2 -27.7
2025-12-25T18:10:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:10:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:10:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.673324
2025-12-25T18:10:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:10:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:10:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:10:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:10:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:10:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:09:44', tmtdew=29.05, humidity=14.43, cloud=0.0, wind=34.02, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:09:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:10:15.968 [DEBUG] [Thread-16131] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:10:16.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-25T18:10:16.061 [DEBUG] [Thread-16134] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-25T18:10:16.061 [DEBUG] [Thread-16134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:10:16.076 [DEBUG] [Thread-16134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:10:16.076 [INFO] [Thread-16134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:16.084 [DEBUG] [Thread-16134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] client lang: <none>
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] server lang: <none>
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] kex follows: False
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:10:16.085 [DEBUG] [Thread-16134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:10:16.086 [DEBUG] [Thread-16134] [transport.py] [_log()] Compression: none
2025-12-25T18:10:16.086 [DEBUG] [Thread-16134] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:10:16.145 [DEBUG] [Thread-16134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:10:16.146 [DEBUG] [Thread-16134] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:10:16.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:10:16.147 [DEBUG] [Thread-16134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:10:16.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:10:16.204 [DEBUG] [Thread-16134] [transport.py] [_log()] userauth is OK
2025-12-25T18:10:16.204 [DEBUG] [Thread-16134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:10:16.205 [DEBUG] [Thread-16134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:10:16.205 [DEBUG] [Thread-16134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:10:16.205 [DEBUG] [Thread-16134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:10:16.226 [INFO] [Thread-16134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:10:16.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-25T18:10:16.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:10:17.059 [DEBUG] [Thread-16134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:10:17.059 [DEBUG] [Thread-16134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:10:17.108 [DEBUG] [Thread-16134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:10:17.108 [DEBUG] [Thread-16134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:10:17.117 [DEBUG] [Thread-16134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:10:17.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:10:17.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-25T18:10:17.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:10:17.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:10:17.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:10:17.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:10:17.154 [DEBUG] [Thread-16134] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:10:17.785 [DEBUG] [Thread-16136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:30.191 [DEBUG] [Thread-16137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:45.236 [DEBUG] [Thread-16138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:10:47.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:10:47.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:10:47.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-25T18:10:47.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 10, 16), 28.64, 14.86, 0.0, 40.49, 24.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:10:47.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:10:16
2025-12-25T18:10:48.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:10:48.181 [DEBUG] [Thread-16139] [transport.py] [_log()] starting thread (client mode): 0xb6b7d690
2025-12-25T18:10:48.181 [DEBUG] [Thread-16139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:10:48.196 [DEBUG] [Thread-16139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:10:48.196 [INFO] [Thread-16139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:10:48.198 [DEBUG] [Thread-16139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] client lang: <none>
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] server lang: <none>
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] kex follows: False
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] Compression: none
2025-12-25T18:10:48.199 [DEBUG] [Thread-16139] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:10:48.216 [DEBUG] [Thread-16139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:10:48.216 [DEBUG] [Thread-16139] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:10:48.216 [DEBUG] [Thread-16139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:10:48.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:10:48.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:10:48.217 [DEBUG] [Thread-16139] [transport.py] [_log()] userauth is OK
2025-12-25T18:10:48.217 [DEBUG] [Thread-16139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:10:48.217 [DEBUG] [Thread-16139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:10:48.217 [DEBUG] [Thread-16139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:10:48.217 [DEBUG] [Thread-16139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:10:48.226 [INFO] [Thread-16139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:10:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:10:49.063 [DEBUG] [Thread-16139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:10:49.065 [DEBUG] [Thread-16139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:10:49.065 [DEBUG] [Thread-16139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:10:49.103 [DEBUG] [Thread-16139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:10:49.104 [DEBUG] [Thread-16139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:10:49.106 [DEBUG] [Thread-16139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:10:49.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:10:49.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:10:49.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:10:49.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:10:49.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:10:49.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:10:49.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:10:49.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:10:49.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:10:49.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.673671 -999.00  +24.00  46.85     21   +0.40 1 1 2 1 1   887    0 24.81 33.14 ----- 39.3 46.9 292.8 51.8 26.2 -29.2 26.5 -28.8 26.9 -26.4 27.1 -27.4
2025-12-25T18:10:49.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:10:49.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:10:49.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.673671
2025-12-25T18:10:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:10:49.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:10:49.129 [DEBUG] [Thread-16139] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:10:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:10:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:10:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:10:49.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:10:16', tmtdew=28.64, humidity=14.86, cloud=0.0, wind=40.49, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:10:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:10:49.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-25T18:10:49.223 [DEBUG] [Thread-16142] [transport.py] [_log()] starting thread (client mode): 0xb6b20340
2025-12-25T18:10:49.223 [DEBUG] [Thread-16142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:10:49.238 [DEBUG] [Thread-16142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:10:49.238 [INFO] [Thread-16142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:10:49.245 [DEBUG] [Thread-16142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:10:49.245 [DEBUG] [Thread-16142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:10:49.245 [DEBUG] [Thread-16142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] client lang: <none>
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] server lang: <none>
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] kex follows: False
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:10:49.246 [DEBUG] [Thread-16142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:10:49.247 [DEBUG] [Thread-16142] [transport.py] [_log()] Compression: none
2025-12-25T18:10:49.247 [DEBUG] [Thread-16142] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:10:49.307 [DEBUG] [Thread-16142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:10:49.308 [DEBUG] [Thread-16142] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:10:49.308 [DEBUG] [Thread-16142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:10:49.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:10:49.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:10:49.364 [DEBUG] [Thread-16142] [transport.py] [_log()] userauth is OK
2025-12-25T18:10:49.364 [DEBUG] [Thread-16142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:10:49.364 [DEBUG] [Thread-16142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:10:49.364 [DEBUG] [Thread-16142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:10:49.364 [DEBUG] [Thread-16142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:10:49.384 [INFO] [Thread-16142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:10:49.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-25T18:10:49.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:10:50.202 [DEBUG] [Thread-16142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:10:50.202 [DEBUG] [Thread-16142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:10:50.251 [DEBUG] [Thread-16142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:10:50.251 [DEBUG] [Thread-16142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:10:50.259 [DEBUG] [Thread-16142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:10:50.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:10:50.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:10:50.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-25T18:10:50.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:10:50.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:10:50.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:10:50.291 [DEBUG] [Thread-16142] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:11:00.272 [DEBUG] [Thread-16144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:08.363 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:08.364 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:15.331 [DEBUG] [Thread-16145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:17.819 [DEBUG] [Thread-16146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:20.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:11:20.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:11:20.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-25T18:11:21.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 10, 48), 28.0, 15.53, 0.0, 31.95, 24.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:11:21.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:10:48
2025-12-25T18:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:11:21.303 [DEBUG] [Thread-16147] [transport.py] [_log()] starting thread (client mode): 0xb6b20d30
2025-12-25T18:11:21.303 [DEBUG] [Thread-16147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:11:21.323 [DEBUG] [Thread-16147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:11:21.323 [INFO] [Thread-16147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] client lang: <none>
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] server lang: <none>
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] kex follows: False
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] Compression: none
2025-12-25T18:11:21.326 [DEBUG] [Thread-16147] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:11:21.343 [DEBUG] [Thread-16147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:11:21.344 [DEBUG] [Thread-16147] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:11:21.345 [DEBUG] [Thread-16147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:11:21.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:11:21.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:11:21.347 [DEBUG] [Thread-16147] [transport.py] [_log()] userauth is OK
2025-12-25T18:11:21.347 [DEBUG] [Thread-16147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:11:21.347 [DEBUG] [Thread-16147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:11:21.347 [DEBUG] [Thread-16147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:11:21.347 [DEBUG] [Thread-16147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:11:21.372 [INFO] [Thread-16147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:11:21.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:11:22.036 [DEBUG] [Thread-16147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:11:22.036 [DEBUG] [Thread-16147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:11:22.036 [DEBUG] [Thread-16147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:11:22.077 [DEBUG] [Thread-16147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:11:22.077 [DEBUG] [Thread-16147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:11:22.079 [DEBUG] [Thread-16147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:11:22.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:11:22.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:11:22.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:11:22.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:11:22.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:11:22.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:11:22.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.674019 -999.00  +24.00  32.59     21   +0.60 1 1 2 1 1   887    0 24.66 32.77 ----- 33.9 32.6 308.4 38.9 26.2 -28.6 26.6 -28.3 27.1 -26.4 27.1 -26.8
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.674019
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:11:22.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:10:48', tmtdew=28.0, humidity=15.53, cloud=0.0, wind=31.95, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:10:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:11:22.097 [DEBUG] [Thread-16147] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:11:22.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-25T18:11:22.182 [DEBUG] [Thread-16150] [transport.py] [_log()] starting thread (client mode): 0xb6bb66e0
2025-12-25T18:11:22.183 [DEBUG] [Thread-16150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:11:22.197 [DEBUG] [Thread-16150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:11:22.197 [INFO] [Thread-16150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:11:22.204 [DEBUG] [Thread-16150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:11:22.204 [DEBUG] [Thread-16150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:11:22.204 [DEBUG] [Thread-16150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:11:22.204 [DEBUG] [Thread-16150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:22.204 [DEBUG] [Thread-16150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] client lang: <none>
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] server lang: <none>
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] kex follows: False
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] Compression: none
2025-12-25T18:11:22.205 [DEBUG] [Thread-16150] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:11:22.262 [DEBUG] [Thread-16150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:11:22.262 [DEBUG] [Thread-16150] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:11:22.262 [DEBUG] [Thread-16150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:11:22.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:11:22.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:11:22.319 [DEBUG] [Thread-16150] [transport.py] [_log()] userauth is OK
2025-12-25T18:11:22.319 [DEBUG] [Thread-16150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:11:22.319 [DEBUG] [Thread-16150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:11:22.319 [DEBUG] [Thread-16150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:11:22.319 [DEBUG] [Thread-16150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:11:22.333 [INFO] [Thread-16150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:11:22.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-25T18:11:22.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:11:23.160 [DEBUG] [Thread-16150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:11:23.160 [DEBUG] [Thread-16150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:11:23.207 [DEBUG] [Thread-16150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:11:23.207 [DEBUG] [Thread-16150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:11:23.216 [DEBUG] [Thread-16150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:11:23.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:11: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-25T18:11:23.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-25T18:11:23.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:11:23.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:11:23.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:11:23.255 [DEBUG] [Thread-16150] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:11:30.368 [DEBUG] [Thread-16152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:45.411 [DEBUG] [Thread-16153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:11:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:11:53.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:11:53.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-25T18:11:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 11, 20), 27.91, 15.63, 0.0, 29.1, 24.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:11:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:11:20
2025-12-25T18:11:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:11:54.287 [DEBUG] [Thread-16154] [transport.py] [_log()] starting thread (client mode): 0xb6b23df0
2025-12-25T18:11:54.287 [DEBUG] [Thread-16154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:11:54.306 [DEBUG] [Thread-16154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:11:54.306 [INFO] [Thread-16154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:54.309 [DEBUG] [Thread-16154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] client lang: <none>
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] server lang: <none>
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] kex follows: False
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] Compression: none
2025-12-25T18:11:54.310 [DEBUG] [Thread-16154] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:11:54.325 [DEBUG] [Thread-16154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:11:54.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:11:54.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] userauth is OK
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:11:54.326 [DEBUG] [Thread-16154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:11:54.336 [INFO] [Thread-16154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:11:54.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:11:55.142 [DEBUG] [Thread-16154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:11:55.142 [DEBUG] [Thread-16154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:11:55.142 [DEBUG] [Thread-16154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:11:55.183 [DEBUG] [Thread-16154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:11:55.183 [DEBUG] [Thread-16154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:11:55.186 [DEBUG] [Thread-16154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:11:55.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:11:55.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:11:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:11:55.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:11:55.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:11:55.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:11:55.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.674713 -999.00  +24.20  25.40     21   +1.00 1 1 1 1 1   887    0 25.36 34.14 ----- 28.6 25.4 288.4 36.3 26.2 -28.4 26.5 -27.9 26.9 -27.1 27.1 -26.9
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.674713
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:11:55.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:11:20', tmtdew=27.91, humidity=15.63, cloud=0.0, wind=29.1, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:11:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:11:55.203 [DEBUG] [Thread-16154] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:11:55.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-25T18:11:55.286 [DEBUG] [Thread-16157] [transport.py] [_log()] starting thread (client mode): 0xb9559720
2025-12-25T18:11:55.286 [DEBUG] [Thread-16157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:11:55.301 [DEBUG] [Thread-16157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:11:55.301 [INFO] [Thread-16157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] client lang: <none>
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] server lang: <none>
2025-12-25T18:11:55.308 [DEBUG] [Thread-16157] [transport.py] [_log()] kex follows: False
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] Compression: none
2025-12-25T18:11:55.309 [DEBUG] [Thread-16157] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:11:55.366 [DEBUG] [Thread-16157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:11:55.366 [DEBUG] [Thread-16157] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:11:55.366 [DEBUG] [Thread-16157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:11:55.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:11:55.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:11:55.423 [DEBUG] [Thread-16157] [transport.py] [_log()] userauth is OK
2025-12-25T18:11:55.423 [DEBUG] [Thread-16157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:11:55.423 [DEBUG] [Thread-16157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:11:55.423 [DEBUG] [Thread-16157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:11:55.423 [DEBUG] [Thread-16157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:11:55.438 [INFO] [Thread-16157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:11:55.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-25T18:11:55.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:11:56.276 [DEBUG] [Thread-16157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:11:56.277 [DEBUG] [Thread-16157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:11:56.325 [DEBUG] [Thread-16157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:11:56.325 [DEBUG] [Thread-16157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:11:56.334 [DEBUG] [Thread-16157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:11:56.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:11:56.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-25T18:11:56.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-25T18:11:56.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:11:56.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:11:56.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:11:56.371 [DEBUG] [Thread-16157] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:12:00.444 [DEBUG] [Thread-16159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:08.504 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:08.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:15.505 [DEBUG] [Thread-16160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:17.863 [DEBUG] [Thread-16161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:12:26.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:12:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:12:27.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 11, 52), 27.41, 16.29, 0.0, 33.24, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:12:27.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:11:52
2025-12-25T18:12:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:12:27.467 [DEBUG] [Thread-16162] [transport.py] [_log()] starting thread (client mode): 0xb6b630a0
2025-12-25T18:12:27.467 [DEBUG] [Thread-16162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:12:27.487 [DEBUG] [Thread-16162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:12:27.487 [INFO] [Thread-16162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] client lang: <none>
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] server lang: <none>
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] kex follows: False
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:12:27.490 [DEBUG] [Thread-16162] [transport.py] [_log()] Compression: none
2025-12-25T18:12:27.491 [DEBUG] [Thread-16162] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:12:27.505 [DEBUG] [Thread-16162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:12:27.505 [DEBUG] [Thread-16162] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:12:27.505 [DEBUG] [Thread-16162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:12:27.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:12:27.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:12:27.506 [DEBUG] [Thread-16162] [transport.py] [_log()] userauth is OK
2025-12-25T18:12:27.506 [DEBUG] [Thread-16162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:12:27.506 [DEBUG] [Thread-16162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:12:27.506 [DEBUG] [Thread-16162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:12:27.506 [DEBUG] [Thread-16162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:12:27.521 [INFO] [Thread-16162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:12:27.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:12:28.150 [DEBUG] [Thread-16162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:12:28.150 [DEBUG] [Thread-16162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:12:28.150 [DEBUG] [Thread-16162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:12:28.191 [DEBUG] [Thread-16162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:12:28.191 [DEBUG] [Thread-16162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:12:28.195 [DEBUG] [Thread-16162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:12:28.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:12:28.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:12:28.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:12:28.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:12:28.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:12:28.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:12:28.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:12:28.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:12:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:12:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.675061 -999.00  +24.40  31.23     21   +1.10 1 1 2 1 1   887    0 24.94 32.26 ----- 35.0 31.2 291.0 34.0 26.2 -27.9 26.6 -27.5 27.1 -25.4 27.2 -26.3
2025-12-25T18:12:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:12:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:12:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.675061
2025-12-25T18:12:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:12:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:12:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:12:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:12:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:12:28.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:11:52', tmtdew=27.41, humidity=16.29, cloud=0.0, wind=33.24, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:12:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:12:28.223 [DEBUG] [Thread-16162] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:12: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-25T18:12:28.318 [DEBUG] [Thread-16165] [transport.py] [_log()] starting thread (client mode): 0xb6b7ffd0
2025-12-25T18:12:28.318 [DEBUG] [Thread-16165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:12:28.334 [DEBUG] [Thread-16165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:12:28.335 [INFO] [Thread-16165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:12:28.342 [DEBUG] [Thread-16165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:12:28.342 [DEBUG] [Thread-16165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] client lang: <none>
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] server lang: <none>
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] kex follows: False
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] Compression: none
2025-12-25T18:12:28.343 [DEBUG] [Thread-16165] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:12:28.400 [DEBUG] [Thread-16165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:12:28.400 [DEBUG] [Thread-16165] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:12:28.401 [DEBUG] [Thread-16165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:12:28.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:12:28.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:12:28.456 [DEBUG] [Thread-16165] [transport.py] [_log()] userauth is OK
2025-12-25T18:12:28.456 [DEBUG] [Thread-16165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:12:28.456 [DEBUG] [Thread-16165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:12:28.456 [DEBUG] [Thread-16165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:12:28.457 [DEBUG] [Thread-16165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:12:28.476 [INFO] [Thread-16165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:12:28.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-25T18:12:28.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:12:29.335 [DEBUG] [Thread-16165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:12:29.336 [DEBUG] [Thread-16165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:12:29.383 [DEBUG] [Thread-16165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:12:29.383 [DEBUG] [Thread-16165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:12:29.392 [DEBUG] [Thread-16165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:12:29.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:12:29.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-25T18:12:29.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-25T18:12:29.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:12:29.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:12:29.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:12:29.429 [DEBUG] [Thread-16165] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:12:30.538 [DEBUG] [Thread-16167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:45.597 [DEBUG] [Thread-16168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:12:59.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:12:59.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:12:59.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-25T18:13:00.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 12, 24), 27.35, 16.36, 0.0, 30.63, 24.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:13:00.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:12:24
2025-12-25T18:13:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:13:00.444 [DEBUG] [Thread-16169] [transport.py] [_log()] starting thread (client mode): 0xb6b7da50
2025-12-25T18:13:00.444 [DEBUG] [Thread-16169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:13:00.466 [DEBUG] [Thread-16169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:13:00.466 [INFO] [Thread-16169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:13:00.469 [DEBUG] [Thread-16169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] client lang: <none>
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] server lang: <none>
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] kex follows: False
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] Compression: none
2025-12-25T18:13:00.470 [DEBUG] [Thread-16169] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:13:00.486 [DEBUG] [Thread-16169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:13:00.486 [DEBUG] [Thread-16169] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:13:00.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:13:00.487 [DEBUG] [Thread-16169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:13:00.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:13:00.488 [DEBUG] [Thread-16169] [transport.py] [_log()] userauth is OK
2025-12-25T18:13:00.488 [DEBUG] [Thread-16169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:13:00.488 [DEBUG] [Thread-16169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:13:00.488 [DEBUG] [Thread-16169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:13:00.488 [DEBUG] [Thread-16169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:13:00.501 [INFO] [Thread-16169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:13:00.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:13:00.630 [DEBUG] [Thread-16171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:13:01.293 [DEBUG] [Thread-16169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:13:01.293 [DEBUG] [Thread-16169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:13:01.293 [DEBUG] [Thread-16169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:13:01.334 [DEBUG] [Thread-16169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:13:01.334 [DEBUG] [Thread-16169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:13:01.336 [DEBUG] [Thread-16169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:13:01.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:13:01.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:13:01.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:13:01.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:13:01.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:13:01.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:13:01.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.675408 -999.00  +24.40  28.20     21   +1.20 1 1 1 1 1   887    0 24.80 28.07 ----- 27.0 28.2 309.7 43.2 26.2 -28.0 26.6 -27.4 27.1 -25.5 27.1 -26.3
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.675408
2025-12-25T18:13:01.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:13:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:13:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:13:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:13:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:13:01.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:12:24', tmtdew=27.35, humidity=16.36, cloud=0.0, wind=30.63, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:12:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:13:01.352 [DEBUG] [Thread-16169] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:13:01.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-25T18:13:01.438 [DEBUG] [Thread-16173] [transport.py] [_log()] starting thread (client mode): 0xb9593d60
2025-12-25T18:13:01.438 [DEBUG] [Thread-16173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:13:01.452 [DEBUG] [Thread-16173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:13:01.452 [INFO] [Thread-16173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:13:01.459 [DEBUG] [Thread-16173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:13:01.459 [DEBUG] [Thread-16173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:13:01.459 [DEBUG] [Thread-16173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] client lang: <none>
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] server lang: <none>
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] kex follows: False
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] Compression: none
2025-12-25T18:13:01.460 [DEBUG] [Thread-16173] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:13:01.518 [DEBUG] [Thread-16173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:13:01.518 [DEBUG] [Thread-16173] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:13:01.518 [DEBUG] [Thread-16173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:13:01.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:13:01.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:13:01.576 [DEBUG] [Thread-16173] [transport.py] [_log()] userauth is OK
2025-12-25T18:13:01.576 [DEBUG] [Thread-16173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:13:01.576 [DEBUG] [Thread-16173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:13:01.576 [DEBUG] [Thread-16173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:13:01.576 [DEBUG] [Thread-16173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:13:01.591 [INFO] [Thread-16173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:13:01.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-25T18:13:01.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:13:02.442 [DEBUG] [Thread-16173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:13:02.442 [DEBUG] [Thread-16173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:13:02.490 [DEBUG] [Thread-16173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:13:02.490 [DEBUG] [Thread-16173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:13:02.499 [DEBUG] [Thread-16173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:13:02.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:13:02.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-25T18:13:02.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:13:02.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:13:02.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:13:02.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:13:02.530 [DEBUG] [Thread-16173] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:13:08.648 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:13:08.649 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:13:15.660 [DEBUG] [Thread-16175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:13:17.914 [DEBUG] [Thread-16176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:13:30.716 [DEBUG] [Thread-16177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:13:32.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:13:32.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:13:32.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-25T18:13:33.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 13, 29), 27.32, 16.28, 0.0, 33.17, 24.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:13:33.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:13:29
2025-12-25T18:13:33.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:13:33.533 [DEBUG] [Thread-16178] [transport.py] [_log()] starting thread (client mode): 0xb6b606d0
2025-12-25T18:13:33.533 [DEBUG] [Thread-16178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:13:33.553 [DEBUG] [Thread-16178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:13:33.553 [INFO] [Thread-16178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:13:33.554 [DEBUG] [Thread-16178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:13:33.554 [DEBUG] [Thread-16178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:13:33.554 [DEBUG] [Thread-16178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] client lang: <none>
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] server lang: <none>
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] kex follows: False
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] Compression: none
2025-12-25T18:13:33.555 [DEBUG] [Thread-16178] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:13:33.564 [DEBUG] [Thread-16178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:13:33.564 [DEBUG] [Thread-16178] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:13:33.564 [DEBUG] [Thread-16178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:13:33.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:13:33.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:13:33.566 [DEBUG] [Thread-16178] [transport.py] [_log()] userauth is OK
2025-12-25T18:13:33.566 [DEBUG] [Thread-16178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:13:33.566 [DEBUG] [Thread-16178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:13:33.566 [DEBUG] [Thread-16178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:13:33.566 [DEBUG] [Thread-16178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:13:33.590 [INFO] [Thread-16178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:13:33.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:13:34.242 [DEBUG] [Thread-16178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:13:34.242 [DEBUG] [Thread-16178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:13:34.242 [DEBUG] [Thread-16178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:13:34.283 [DEBUG] [Thread-16178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:13:34.283 [DEBUG] [Thread-16178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:13:34.287 [DEBUG] [Thread-16178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:13:34.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:13:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:13:34.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:13:34.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:13:34.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:13:34.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:13:34.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:13:34.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:13:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:13:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.675755 -999.00  +24.20  34.52     22   +1.10 1 1 2 1 1   887    0 24.77 23.52 ----- 31.2 34.5 305.4 44.5 26.2 -28.7 26.5 -27.9 27.0 -25.6 27.1 -26.7
2025-12-25T18:13:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:13:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:13:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.675755
2025-12-25T18:13:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:13:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:13:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:13:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:13:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:13:34.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:13:29', tmtdew=27.32, humidity=16.28, cloud=0.0, wind=33.17, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:13:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:13:34.313 [DEBUG] [Thread-16178] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:13:34.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-25T18:13:34.404 [DEBUG] [Thread-16181] [transport.py] [_log()] starting thread (client mode): 0xb6bb5ff0
2025-12-25T18:13:34.404 [DEBUG] [Thread-16181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:13:34.419 [DEBUG] [Thread-16181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:13:34.419 [INFO] [Thread-16181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] client lang: <none>
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] server lang: <none>
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] kex follows: False
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:13:34.427 [DEBUG] [Thread-16181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:13:34.428 [DEBUG] [Thread-16181] [transport.py] [_log()] Compression: none
2025-12-25T18:13:34.428 [DEBUG] [Thread-16181] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:13:34.483 [DEBUG] [Thread-16181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:13:34.484 [DEBUG] [Thread-16181] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:13:34.484 [DEBUG] [Thread-16181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:13:34.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:13:34.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:13:34.540 [DEBUG] [Thread-16181] [transport.py] [_log()] userauth is OK
2025-12-25T18:13:34.540 [DEBUG] [Thread-16181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:13:34.540 [DEBUG] [Thread-16181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:13:34.540 [DEBUG] [Thread-16181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:13:34.541 [DEBUG] [Thread-16181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:13:34.559 [INFO] [Thread-16181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:13:34.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:13:34.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:13:35.405 [DEBUG] [Thread-16181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:13:35.406 [DEBUG] [Thread-16181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:13:35.455 [DEBUG] [Thread-16181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:13:35.455 [DEBUG] [Thread-16181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:13:35.463 [DEBUG] [Thread-16181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:13:35.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:13:35.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-25T18:13:35.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:13:35.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:13:35.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:13:35.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:13:35.497 [DEBUG] [Thread-16181] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:13:45.745 [DEBUG] [Thread-16183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:00.797 [DEBUG] [Thread-16184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:14:05.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:14:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:14:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 14, 1), 27.34, 16.26, 0.0, 29.52, 24.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:14:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:14:01
2025-12-25T18:14:06.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:14:06.516 [DEBUG] [Thread-16185] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T18:14:06.516 [DEBUG] [Thread-16185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:14:06.535 [DEBUG] [Thread-16185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:14:06.535 [INFO] [Thread-16185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] client lang: <none>
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] server lang: <none>
2025-12-25T18:14:06.539 [DEBUG] [Thread-16185] [transport.py] [_log()] kex follows: False
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] Compression: none
2025-12-25T18:14:06.540 [DEBUG] [Thread-16185] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:14:06.557 [DEBUG] [Thread-16185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:14:06.558 [DEBUG] [Thread-16185] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:14:06.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:14:06.559 [DEBUG] [Thread-16185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:14:06.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:14:06.561 [DEBUG] [Thread-16185] [transport.py] [_log()] userauth is OK
2025-12-25T18:14:06.561 [DEBUG] [Thread-16185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:14:06.561 [DEBUG] [Thread-16185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:14:06.561 [DEBUG] [Thread-16185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:14:06.561 [DEBUG] [Thread-16185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:14:06.586 [INFO] [Thread-16185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:14:06.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:14:07.234 [DEBUG] [Thread-16185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:14:07.234 [DEBUG] [Thread-16185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:14:07.235 [DEBUG] [Thread-16185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:14:07.275 [DEBUG] [Thread-16185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:14:07.275 [DEBUG] [Thread-16185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:14:07.279 [DEBUG] [Thread-16185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:14:07.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:14:07.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:14:07.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:14:07.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:14:07.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:14:07.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:14:07.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:14:07.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:14:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:14:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.676102 -999.00  +23.90  28.96     22   +1.10 1 1 1 1 1   887    0 24.17 17.35 ----- 28.4 29.0 300.1 37.9 26.2 -28.0 26.5 -27.9 26.9 -26.1 27.1 -26.6
2025-12-25T18:14:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:14:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:14:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.676102
2025-12-25T18:14:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:14:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:14:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:14:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:14:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:14:07.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:14:01', tmtdew=27.34, humidity=16.26, cloud=0.0, wind=29.52, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:13:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:14:07.305 [DEBUG] [Thread-16185] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:14:07.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-25T18:14:07.405 [DEBUG] [Thread-16188] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e50
2025-12-25T18:14:07.405 [DEBUG] [Thread-16188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:14:07.420 [DEBUG] [Thread-16188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:14:07.420 [INFO] [Thread-16188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:14:07.427 [DEBUG] [Thread-16188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:14:07.427 [DEBUG] [Thread-16188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:14:07.427 [DEBUG] [Thread-16188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:14:07.427 [DEBUG] [Thread-16188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:07.427 [DEBUG] [Thread-16188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:07.427 [DEBUG] [Thread-16188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] client lang: <none>
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] server lang: <none>
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] kex follows: False
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] Compression: none
2025-12-25T18:14:07.428 [DEBUG] [Thread-16188] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:14:07.488 [DEBUG] [Thread-16188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:14:07.488 [DEBUG] [Thread-16188] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:14:07.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:14:07.489 [DEBUG] [Thread-16188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:14:07.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:14:07.544 [DEBUG] [Thread-16188] [transport.py] [_log()] userauth is OK
2025-12-25T18:14:07.544 [DEBUG] [Thread-16188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:14:07.545 [DEBUG] [Thread-16188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:14:07.545 [DEBUG] [Thread-16188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:14:07.545 [DEBUG] [Thread-16188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:14:07.564 [INFO] [Thread-16188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:14: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-25T18:14:07.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:14:08.370 [DEBUG] [Thread-16188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:14:08.371 [DEBUG] [Thread-16188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:14:08.418 [DEBUG] [Thread-16188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:14:08.418 [DEBUG] [Thread-16188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:14:08.427 [DEBUG] [Thread-16188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:14:08.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:14:08.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-25T18:14:08.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:14:08.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:14:08.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:14:08.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:14:08.464 [DEBUG] [Thread-16188] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:14:08.788 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:08.789 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:15.832 [DEBUG] [Thread-16190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:17.951 [DEBUG] [Thread-16191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:30.880 [DEBUG] [Thread-16192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:14:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:14:38.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:14:38.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-25T18:14:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 14, 33), 28.39, 15.13, 0.0, 41.85, 25.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:14:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:14:33
2025-12-25T18:14:39.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:14:39.481 [DEBUG] [Thread-16193] [transport.py] [_log()] starting thread (client mode): 0xb6bc3310
2025-12-25T18:14:39.482 [DEBUG] [Thread-16193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:14:39.507 [DEBUG] [Thread-16193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:14:39.507 [INFO] [Thread-16193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:39.512 [DEBUG] [Thread-16193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] client lang: <none>
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] server lang: <none>
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] kex follows: False
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:14:39.513 [DEBUG] [Thread-16193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:14:39.514 [DEBUG] [Thread-16193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:14:39.514 [DEBUG] [Thread-16193] [transport.py] [_log()] Compression: none
2025-12-25T18:14:39.514 [DEBUG] [Thread-16193] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:14:39.532 [DEBUG] [Thread-16193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:14:39.532 [DEBUG] [Thread-16193] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:14:39.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:14:39.533 [DEBUG] [Thread-16193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:14:39.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:14:39.536 [DEBUG] [Thread-16193] [transport.py] [_log()] userauth is OK
2025-12-25T18:14:39.536 [DEBUG] [Thread-16193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:14:39.536 [DEBUG] [Thread-16193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:14:39.536 [DEBUG] [Thread-16193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:14:39.536 [DEBUG] [Thread-16193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:14:39.572 [INFO] [Thread-16193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:14:39.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:14:40.231 [DEBUG] [Thread-16193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:14:40.231 [DEBUG] [Thread-16193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:14:40.232 [DEBUG] [Thread-16193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:14:40.272 [DEBUG] [Thread-16193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:14:40.272 [DEBUG] [Thread-16193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:14:40.276 [DEBUG] [Thread-16193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:14:40.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:14:40.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:14:40.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:14:40.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:14:40.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:14:40.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:14:40.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:14:40.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:14:40.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:14:40.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.676449 -999.00  +24.00  24.00     22   +1.20 1 1 1 1 1   887    0 23.98 11.16 ----- 29.3 24.0 290.4 34.5 26.2 -28.0 26.5 -27.6 26.9 -25.9 27.1 -26.6
2025-12-25T18:14:40.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:14:40.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:14:40.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.676449
2025-12-25T18:14:40.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:14:40.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:14:40.303 [DEBUG] [Thread-16193] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:14:40.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:14:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:14:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:14:40.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:14:33', tmtdew=28.39, humidity=15.13, cloud=0.0, wind=41.85, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:14:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:14: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-25T18:14:40.400 [DEBUG] [Thread-16196] [transport.py] [_log()] starting thread (client mode): 0xb6b001f0
2025-12-25T18:14:40.401 [DEBUG] [Thread-16196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:14:40.415 [DEBUG] [Thread-16196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:14:40.415 [INFO] [Thread-16196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:14:40.424 [DEBUG] [Thread-16196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:14:40.424 [DEBUG] [Thread-16196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:14:40.424 [DEBUG] [Thread-16196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:14:40.424 [DEBUG] [Thread-16196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:40.424 [DEBUG] [Thread-16196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:14:40.424 [DEBUG] [Thread-16196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] client lang: <none>
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] server lang: <none>
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] kex follows: False
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:14:40.425 [DEBUG] [Thread-16196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:14:40.426 [DEBUG] [Thread-16196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:14:40.426 [DEBUG] [Thread-16196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:14:40.426 [DEBUG] [Thread-16196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:14:40.426 [DEBUG] [Thread-16196] [transport.py] [_log()] Compression: none
2025-12-25T18:14:40.426 [DEBUG] [Thread-16196] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:14:40.485 [DEBUG] [Thread-16196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:14:40.486 [DEBUG] [Thread-16196] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:14:40.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:14:40.488 [DEBUG] [Thread-16196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:14:40.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:14:40.544 [DEBUG] [Thread-16196] [transport.py] [_log()] userauth is OK
2025-12-25T18:14:40.544 [DEBUG] [Thread-16196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:14:40.544 [DEBUG] [Thread-16196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:14:40.545 [DEBUG] [Thread-16196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:14:40.545 [DEBUG] [Thread-16196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:14:40.565 [INFO] [Thread-16196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:14:40.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-25T18:14:40.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:14:41.409 [DEBUG] [Thread-16196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:14:41.410 [DEBUG] [Thread-16196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:14:41.457 [DEBUG] [Thread-16196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:14:41.457 [DEBUG] [Thread-16196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:14:41.467 [DEBUG] [Thread-16196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:14:41.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:14:41.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-25T18:14:41.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-25T18:14:41.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:14:41.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:14:41.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:14:41.504 [DEBUG] [Thread-16196] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:14:45.914 [DEBUG] [Thread-16198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:00.962 [DEBUG] [Thread-16199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:08.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:08.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:11.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:15:11.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:15:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:15:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 15, 5), 27.65, 15.56, 0.0, 38.91, 24.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:15:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:15:05
2025-12-25T18:15:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:15:12.508 [DEBUG] [Thread-16200] [transport.py] [_log()] starting thread (client mode): 0xb6b01c90
2025-12-25T18:15:12.508 [DEBUG] [Thread-16200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:15:12.529 [DEBUG] [Thread-16200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:15:12.529 [INFO] [Thread-16200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] client lang: <none>
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] server lang: <none>
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] kex follows: False
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] Compression: none
2025-12-25T18:15:12.531 [DEBUG] [Thread-16200] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:15:12.540 [DEBUG] [Thread-16200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:15:12.540 [DEBUG] [Thread-16200] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:15:12.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:15:12.541 [DEBUG] [Thread-16200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:15:12.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:15:12.543 [DEBUG] [Thread-16200] [transport.py] [_log()] userauth is OK
2025-12-25T18:15:12.543 [DEBUG] [Thread-16200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:15:12.543 [DEBUG] [Thread-16200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:15:12.543 [DEBUG] [Thread-16200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:15:12.543 [DEBUG] [Thread-16200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:15:12.561 [INFO] [Thread-16200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:15:12.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:15:13.451 [DEBUG] [Thread-16200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:15:13.451 [DEBUG] [Thread-16200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:15:13.452 [DEBUG] [Thread-16200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:15:13.492 [DEBUG] [Thread-16200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:15:13.492 [DEBUG] [Thread-16200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:15:13.495 [DEBUG] [Thread-16200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:15:13.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:15:13.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:15:13.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:15:13.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:15:13.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:15:13.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:15:13.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:15:13.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:15:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:15:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.676797 -999.00  +24.10  32.90     21   +1.00 1 1 2 1 1   887    0 23.88 6.92 ----- 33.3 32.9 295.6 41.3 26.2 -27.7 26.5 -27.8 27.0 -25.8 27.1 -26.8
2025-12-25T18:15:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:15:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:15:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.676797
2025-12-25T18:15:13.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:15:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:15:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:15:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:15:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:15:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:15:05', tmtdew=27.65, humidity=15.56, cloud=0.0, wind=38.91, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:14:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:15:13.555 [DEBUG] [Thread-16200] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:15:13.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-25T18:15:13.651 [DEBUG] [Thread-16203] [transport.py] [_log()] starting thread (client mode): 0xb6b02d70
2025-12-25T18:15:13.651 [DEBUG] [Thread-16203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:15:13.666 [DEBUG] [Thread-16203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:15:13.667 [INFO] [Thread-16203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:15:13.677 [DEBUG] [Thread-16203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] client lang: <none>
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] server lang: <none>
2025-12-25T18:15:13.678 [DEBUG] [Thread-16203] [transport.py] [_log()] kex follows: False
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] Compression: none
2025-12-25T18:15:13.679 [DEBUG] [Thread-16203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:15:13.732 [DEBUG] [Thread-16203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:15:13.733 [DEBUG] [Thread-16203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:15:13.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:15:13.734 [DEBUG] [Thread-16203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:15:13.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:15:13.788 [DEBUG] [Thread-16203] [transport.py] [_log()] userauth is OK
2025-12-25T18:15:13.788 [DEBUG] [Thread-16203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:15:13.788 [DEBUG] [Thread-16203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:15:13.788 [DEBUG] [Thread-16203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:15:13.788 [DEBUG] [Thread-16203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:15:13.813 [INFO] [Thread-16203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:15:13.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-25T18:15:13.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:15:14.671 [DEBUG] [Thread-16203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:15:14.671 [DEBUG] [Thread-16203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:15:14.725 [DEBUG] [Thread-16203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:15:14.725 [DEBUG] [Thread-16203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:15:14.734 [DEBUG] [Thread-16203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:15:14.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:15:14.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-25T18:15:14.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-25T18:15:14.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:15:14.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:15:14.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:15:14.771 [DEBUG] [Thread-16203] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:15:15.994 [DEBUG] [Thread-16205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:17.984 [DEBUG] [Thread-16206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:31.048 [DEBUG] [Thread-16207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:44.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:15:44.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:15:44.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-25T18:15:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 15, 37), 27.46, 16.15, 0.0, 34.39, 24.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:15:45.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:15:37
2025-12-25T18:15:45.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:15:45.787 [DEBUG] [Thread-16208] [transport.py] [_log()] starting thread (client mode): 0xb6b01660
2025-12-25T18:15:45.787 [DEBUG] [Thread-16208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:15:45.807 [DEBUG] [Thread-16208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:15:45.807 [INFO] [Thread-16208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:15:45.810 [DEBUG] [Thread-16208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] client lang: <none>
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] server lang: <none>
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] kex follows: False
2025-12-25T18:15:45.811 [DEBUG] [Thread-16208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:15:45.812 [DEBUG] [Thread-16208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:15:45.812 [DEBUG] [Thread-16208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:15:45.812 [DEBUG] [Thread-16208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:15:45.812 [DEBUG] [Thread-16208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:15:45.812 [DEBUG] [Thread-16208] [transport.py] [_log()] Compression: none
2025-12-25T18:15:45.812 [DEBUG] [Thread-16208] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:15:45.830 [DEBUG] [Thread-16208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:15:45.831 [DEBUG] [Thread-16208] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:15:45.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:15:45.832 [DEBUG] [Thread-16208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:15:45.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:15:45.873 [DEBUG] [Thread-16208] [transport.py] [_log()] userauth is OK
2025-12-25T18:15:45.873 [DEBUG] [Thread-16208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:15:45.873 [DEBUG] [Thread-16208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:15:45.874 [DEBUG] [Thread-16208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:15:45.874 [DEBUG] [Thread-16208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:15:45.893 [INFO] [Thread-16208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:15:45.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:15:46.081 [DEBUG] [Thread-16210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:15:46.536 [DEBUG] [Thread-16208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:15:46.536 [DEBUG] [Thread-16208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:15:46.537 [DEBUG] [Thread-16208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:15:46.577 [DEBUG] [Thread-16208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:15:46.577 [DEBUG] [Thread-16208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:15:46.580 [DEBUG] [Thread-16208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:15:46.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:15:46.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:15:46.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:15:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:15:46.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:15:46.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:15:46.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:15:46.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:15:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:15:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.677144 -999.00  +24.00  29.31     22   +1.00 1 1 1 1 1   887    0 24.15 3.38 ----- 21.1 29.3 272.2 38.7 26.1 -28.9 26.4 -27.8 26.7 -27.3 27.0 -27.1
2025-12-25T18:15:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:15:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:15:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.677144
2025-12-25T18:15:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:15:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:15:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:15:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:15:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:15:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:15:37', tmtdew=27.46, humidity=16.15, cloud=0.0, wind=34.39, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:15:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:15:46.606 [DEBUG] [Thread-16208] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:15:46.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-25T18:15:46.699 [DEBUG] [Thread-16212] [transport.py] [_log()] starting thread (client mode): 0xb6b01030
2025-12-25T18:15:46.699 [DEBUG] [Thread-16212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:15:46.713 [DEBUG] [Thread-16212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:15:46.713 [INFO] [Thread-16212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] client lang: <none>
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] server lang: <none>
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] kex follows: False
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:15:46.721 [DEBUG] [Thread-16212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:15:46.722 [DEBUG] [Thread-16212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:15:46.722 [DEBUG] [Thread-16212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:15:46.722 [DEBUG] [Thread-16212] [transport.py] [_log()] Compression: none
2025-12-25T18:15:46.722 [DEBUG] [Thread-16212] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:15:46.780 [DEBUG] [Thread-16212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:15:46.780 [DEBUG] [Thread-16212] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:15:46.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:15:46.781 [DEBUG] [Thread-16212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:15:46.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:15:46.836 [DEBUG] [Thread-16212] [transport.py] [_log()] userauth is OK
2025-12-25T18:15:46.836 [DEBUG] [Thread-16212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:15:46.836 [DEBUG] [Thread-16212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:15:46.836 [DEBUG] [Thread-16212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:15:46.837 [DEBUG] [Thread-16212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:15:46.855 [INFO] [Thread-16212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:15:46.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-25T18:15:46.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:15:47.705 [DEBUG] [Thread-16212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:15:47.705 [DEBUG] [Thread-16212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:15:47.753 [DEBUG] [Thread-16212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:15:47.753 [DEBUG] [Thread-16212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:15:47.762 [DEBUG] [Thread-16212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:15:47.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:15:47.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-25T18:15: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-25T18:15:47.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:15:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:15:47.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:15:47.799 [DEBUG] [Thread-16212] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:16:01.114 [DEBUG] [Thread-16214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:09.077 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:09.078 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:16.158 [DEBUG] [Thread-16215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:17.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:16:17.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:16:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:16:18.011 [DEBUG] [Thread-16216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:18.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 16, 9), 27.54, 16.05, 0.0, 35.06, 24.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:16:18.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:16:09
2025-12-25T18:16:18.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:16:18.863 [DEBUG] [Thread-16217] [transport.py] [_log()] starting thread (client mode): 0xb6b007c0
2025-12-25T18:16:18.864 [DEBUG] [Thread-16217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:16:18.886 [DEBUG] [Thread-16217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:16:18.886 [INFO] [Thread-16217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] client lang: <none>
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] server lang: <none>
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] kex follows: False
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] Compression: none
2025-12-25T18:16:18.890 [DEBUG] [Thread-16217] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:16:18.909 [DEBUG] [Thread-16217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:16:18.909 [DEBUG] [Thread-16217] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:16:18.909 [DEBUG] [Thread-16217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:16:18.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:16:18.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:16:18.910 [DEBUG] [Thread-16217] [transport.py] [_log()] userauth is OK
2025-12-25T18:16:18.910 [DEBUG] [Thread-16217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:16:18.910 [DEBUG] [Thread-16217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:16:18.910 [DEBUG] [Thread-16217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:16:18.910 [DEBUG] [Thread-16217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:16:18.925 [INFO] [Thread-16217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:16:18.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:16:19.595 [DEBUG] [Thread-16217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:16:19.596 [DEBUG] [Thread-16217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:16:19.596 [DEBUG] [Thread-16217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:16:19.636 [DEBUG] [Thread-16217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:16:19.637 [DEBUG] [Thread-16217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:16:19.639 [DEBUG] [Thread-16217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:16:19.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:16:19.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:16:19.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:16:19.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:16:19.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:16:19.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:16:19.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:16:19.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.677491 -999.00  +24.30  23.65     21   +1.10 1 1 1 1 1   887    0 23.46 0.89 ----- 22.6 23.6 288.6 30.9 26.1 -27.9 26.5 -27.2 26.9 -25.9 27.1 -26.7
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.677491
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:16:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:16:09', tmtdew=27.54, humidity=16.05, cloud=0.0, wind=35.06, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:15:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:16:19.659 [DEBUG] [Thread-16217] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:16: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-25T18:16:19.742 [DEBUG] [Thread-16220] [transport.py] [_log()] starting thread (client mode): 0xb6b7c520
2025-12-25T18:16:19.742 [DEBUG] [Thread-16220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:16:19.757 [DEBUG] [Thread-16220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:16:19.757 [INFO] [Thread-16220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] client lang: <none>
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] server lang: <none>
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] kex follows: False
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] Compression: none
2025-12-25T18:16:19.765 [DEBUG] [Thread-16220] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:16:19.822 [DEBUG] [Thread-16220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:16:19.822 [DEBUG] [Thread-16220] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:16:19.823 [DEBUG] [Thread-16220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:16:19.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:16:19.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:16:19.880 [DEBUG] [Thread-16220] [transport.py] [_log()] userauth is OK
2025-12-25T18:16:19.880 [DEBUG] [Thread-16220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:16:19.880 [DEBUG] [Thread-16220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:16:19.880 [DEBUG] [Thread-16220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:16:19.880 [DEBUG] [Thread-16220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:16:19.897 [INFO] [Thread-16220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:16: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-25T18:16:19.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:16:20.755 [DEBUG] [Thread-16220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:16:20.756 [DEBUG] [Thread-16220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:16:20.803 [DEBUG] [Thread-16220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:16:20.804 [DEBUG] [Thread-16220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:16:20.812 [DEBUG] [Thread-16220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:16:20.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:16:20.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')
2025-12-25T18:16:20.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-25T18:16:20.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:16:20.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:16:20.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:16:20.845 [DEBUG] [Thread-16220] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:16:31.190 [DEBUG] [Thread-16222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:46.249 [DEBUG] [Thread-16223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:16:50.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:16:50.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:16:50.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:16:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 16, 41), 27.69, 15.55, 0.0, 34.21, 24.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:16:51.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:16:41
2025-12-25T18:16:51.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:16:51.851 [DEBUG] [Thread-16224] [transport.py] [_log()] starting thread (client mode): 0xb6b7fc40
2025-12-25T18:16:51.851 [DEBUG] [Thread-16224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:16:51.882 [DEBUG] [Thread-16224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:16:51.882 [INFO] [Thread-16224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] client lang: <none>
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] server lang: <none>
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] kex follows: False
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:16:51.885 [DEBUG] [Thread-16224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:16:51.886 [DEBUG] [Thread-16224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:16:51.886 [DEBUG] [Thread-16224] [transport.py] [_log()] Compression: none
2025-12-25T18:16:51.886 [DEBUG] [Thread-16224] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:16:51.903 [DEBUG] [Thread-16224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:16:51.903 [DEBUG] [Thread-16224] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:16:51.904 [DEBUG] [Thread-16224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:16:51.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:16:51.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:16:51.906 [DEBUG] [Thread-16224] [transport.py] [_log()] userauth is OK
2025-12-25T18:16:51.906 [DEBUG] [Thread-16224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:16:51.906 [DEBUG] [Thread-16224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:16:51.906 [DEBUG] [Thread-16224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:16:51.906 [DEBUG] [Thread-16224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:16:51.924 [INFO] [Thread-16224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:16:51.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:16:52.512 [DEBUG] [Thread-16224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:16:52.512 [DEBUG] [Thread-16224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:16:52.512 [DEBUG] [Thread-16224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:16:52.553 [DEBUG] [Thread-16224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:16:52.553 [DEBUG] [Thread-16224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:16:52.557 [DEBUG] [Thread-16224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:16:52.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:16:52.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:16:52.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:16:52.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:16:52.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:16:52.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:16:52.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:16:52.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:16:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:16:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.678186 -999.00  +24.40  38.20     21   +0.80 1 1 2 1 1   887    0 23.61 0.97 ----- 37.4 38.2 292.9 43.2 26.2 -28.0 26.5 -27.9 26.9 -25.6 27.1 -26.7
2025-12-25T18:16:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:16:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:16:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.678186
2025-12-25T18:16:52.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:16:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:16:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:16:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:16:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:16:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:16:41', tmtdew=27.69, humidity=15.55, cloud=0.0, wind=34.21, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:16:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:16:52.582 [DEBUG] [Thread-16224] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:16:52.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-25T18:16:52.676 [DEBUG] [Thread-16227] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T18:16:52.676 [DEBUG] [Thread-16227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:16:52.690 [DEBUG] [Thread-16227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:16:52.690 [INFO] [Thread-16227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:16:52.698 [DEBUG] [Thread-16227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:16:52.698 [DEBUG] [Thread-16227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:16:52.698 [DEBUG] [Thread-16227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:16:52.698 [DEBUG] [Thread-16227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:52.698 [DEBUG] [Thread-16227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:16:52.698 [DEBUG] [Thread-16227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] client lang: <none>
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] server lang: <none>
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] kex follows: False
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] Compression: none
2025-12-25T18:16:52.699 [DEBUG] [Thread-16227] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:16:52.761 [DEBUG] [Thread-16227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:16:52.762 [DEBUG] [Thread-16227] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:16:52.762 [DEBUG] [Thread-16227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:16:52.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:16:52.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:16:52.824 [DEBUG] [Thread-16227] [transport.py] [_log()] userauth is OK
2025-12-25T18:16:52.824 [DEBUG] [Thread-16227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:16:52.824 [DEBUG] [Thread-16227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:16:52.824 [DEBUG] [Thread-16227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:16:52.825 [DEBUG] [Thread-16227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:16:52.843 [INFO] [Thread-16227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:16:52.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-25T18:16:52.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:16:53.711 [DEBUG] [Thread-16227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:16:53.711 [DEBUG] [Thread-16227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:16:53.758 [DEBUG] [Thread-16227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:16:53.759 [DEBUG] [Thread-16227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:16:53.767 [DEBUG] [Thread-16227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:16:53.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:16: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')
2025-12-25T18:16:53.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:16:53.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:16:53.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:16:53.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:16:53.799 [DEBUG] [Thread-16227] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:17:01.284 [DEBUG] [Thread-16229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:09.217 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:09.218 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:16.327 [DEBUG] [Thread-16230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:18.059 [DEBUG] [Thread-16231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:23.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:17:23.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:17:23.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-25T18:17:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 17, 13), 27.63, 15.6, 0.0, 33.59, 24.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:17:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:17:13
2025-12-25T18:17:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:17:24.790 [DEBUG] [Thread-16232] [transport.py] [_log()] starting thread (client mode): 0xb6b7fd00
2025-12-25T18:17:24.790 [DEBUG] [Thread-16232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:17:24.809 [DEBUG] [Thread-16232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:17:24.809 [INFO] [Thread-16232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] client lang: <none>
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] server lang: <none>
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] kex follows: False
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:17:24.813 [DEBUG] [Thread-16232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:17:24.814 [DEBUG] [Thread-16232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:17:24.814 [DEBUG] [Thread-16232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:17:24.814 [DEBUG] [Thread-16232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:17:24.814 [DEBUG] [Thread-16232] [transport.py] [_log()] Compression: none
2025-12-25T18:17:24.814 [DEBUG] [Thread-16232] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:17:24.831 [DEBUG] [Thread-16232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:17:24.832 [DEBUG] [Thread-16232] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:17:24.833 [DEBUG] [Thread-16232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:17:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:17:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:17:24.835 [DEBUG] [Thread-16232] [transport.py] [_log()] userauth is OK
2025-12-25T18:17:24.835 [DEBUG] [Thread-16232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:17:24.835 [DEBUG] [Thread-16232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:17:24.835 [DEBUG] [Thread-16232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:17:24.835 [DEBUG] [Thread-16232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:17:24.860 [INFO] [Thread-16232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:17:24.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:17:25.529 [DEBUG] [Thread-16232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:17:25.530 [DEBUG] [Thread-16232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:17:25.530 [DEBUG] [Thread-16232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:17:25.572 [DEBUG] [Thread-16232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:17:25.572 [DEBUG] [Thread-16232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:17:25.575 [DEBUG] [Thread-16232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:17:25.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:17:25.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:17:25.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:17:25.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:17:25.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:17:25.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:17:25.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:17:25.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:17:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:17:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.678533 -999.00  +24.40  30.61     21   +0.80 1 1 2 1 1   887    0 23.41 2.24 ----- 30.8 30.6 295.0 40.4 26.2 -27.7 26.5 -27.2 27.0 -24.9 27.1 -26.8
2025-12-25T18:17:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:17:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:17:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.678533
2025-12-25T18:17:25.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:17:25.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:17:25.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:17:25.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:17:25.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:17:25.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:17:13', tmtdew=27.63, humidity=15.6, cloud=0.0, wind=33.59, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:17:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:17:25.596 [DEBUG] [Thread-16232] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:17:25.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-25T18:17:25.693 [DEBUG] [Thread-16235] [transport.py] [_log()] starting thread (client mode): 0xb6b7e7d0
2025-12-25T18:17:25.694 [DEBUG] [Thread-16235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:17:25.708 [DEBUG] [Thread-16235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:17:25.709 [INFO] [Thread-16235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] client lang: <none>
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] server lang: <none>
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] kex follows: False
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:17:25.716 [DEBUG] [Thread-16235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:17:25.717 [DEBUG] [Thread-16235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:17:25.717 [DEBUG] [Thread-16235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:17:25.717 [DEBUG] [Thread-16235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:17:25.717 [DEBUG] [Thread-16235] [transport.py] [_log()] Compression: none
2025-12-25T18:17:25.717 [DEBUG] [Thread-16235] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:17:25.775 [DEBUG] [Thread-16235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:17:25.776 [DEBUG] [Thread-16235] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:17:25.776 [DEBUG] [Thread-16235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:17:25.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:17:25.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:17:25.836 [DEBUG] [Thread-16235] [transport.py] [_log()] userauth is OK
2025-12-25T18:17:25.836 [DEBUG] [Thread-16235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:17:25.836 [DEBUG] [Thread-16235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:17:25.837 [DEBUG] [Thread-16235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:17:25.837 [DEBUG] [Thread-16235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:17:25.857 [INFO] [Thread-16235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:17: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-25T18:17:25.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:17:26.726 [DEBUG] [Thread-16235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:17:26.726 [DEBUG] [Thread-16235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:17:26.774 [DEBUG] [Thread-16235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:17:26.774 [DEBUG] [Thread-16235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:17:26.783 [DEBUG] [Thread-16235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:17:26.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:17:26.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:17:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:17:26.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:17:26.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:17:26.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:17:26.820 [DEBUG] [Thread-16235] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:17:31.363 [DEBUG] [Thread-16237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:46.407 [DEBUG] [Thread-16238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:17:56.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:17:56.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:17:56.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-25T18:17:57.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 17, 45), 28.14, 15.53, 0.0, 35.09, 24.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:17:57.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:17:45
2025-12-25T18:17:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:17:57.832 [DEBUG] [Thread-16239] [transport.py] [_log()] starting thread (client mode): 0xb6bb5a80
2025-12-25T18:17:57.832 [DEBUG] [Thread-16239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:17:57.852 [DEBUG] [Thread-16239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:17:57.852 [INFO] [Thread-16239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:17:57.855 [DEBUG] [Thread-16239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] client lang: <none>
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] server lang: <none>
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] kex follows: False
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] Compression: none
2025-12-25T18:17:57.856 [DEBUG] [Thread-16239] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:17:57.872 [DEBUG] [Thread-16239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:17:57.873 [DEBUG] [Thread-16239] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:17:57.873 [DEBUG] [Thread-16239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:17:57.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:17:57.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:17:57.874 [DEBUG] [Thread-16239] [transport.py] [_log()] userauth is OK
2025-12-25T18:17:57.874 [DEBUG] [Thread-16239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:17:57.874 [DEBUG] [Thread-16239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:17:57.874 [DEBUG] [Thread-16239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:17:57.874 [DEBUG] [Thread-16239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:17:57.891 [INFO] [Thread-16239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:17:57.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:17:58.527 [DEBUG] [Thread-16239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:17:58.527 [DEBUG] [Thread-16239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:17:58.528 [DEBUG] [Thread-16239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:17:58.568 [DEBUG] [Thread-16239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:17:58.568 [DEBUG] [Thread-16239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:17:58.572 [DEBUG] [Thread-16239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:17:58.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:17:58.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:17:58.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:17:58.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:17:58.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:17:58.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:17:58.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:17:58.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:17:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:17:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.678880 -999.00  +24.40  30.43     21   +0.70 1 1 2 1 1   887    0 24.06 2.70 ----- 32.0 30.4 289.6 39.5 26.2 -27.9 26.5 -27.9 26.9 -25.2 27.0 -26.7
2025-12-25T18:17:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:17:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:17:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.678880
2025-12-25T18:17:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:17:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:17:58.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:17:58.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:17:58.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:17:58.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:17:45', tmtdew=28.14, humidity=15.53, cloud=0.0, wind=35.09, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:17:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:17:58.601 [DEBUG] [Thread-16239] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:17:58.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-25T18:17:58.703 [DEBUG] [Thread-16242] [transport.py] [_log()] starting thread (client mode): 0xb6b002b0
2025-12-25T18:17:58.703 [DEBUG] [Thread-16242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:17:58.718 [DEBUG] [Thread-16242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:17:58.718 [INFO] [Thread-16242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:17:58.726 [DEBUG] [Thread-16242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:17:58.726 [DEBUG] [Thread-16242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] client lang: <none>
2025-12-25T18:17:58.727 [DEBUG] [Thread-16242] [transport.py] [_log()] server lang: <none>
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] kex follows: False
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:17:58.728 [DEBUG] [Thread-16242] [transport.py] [_log()] Compression: none
2025-12-25T18:17:58.729 [DEBUG] [Thread-16242] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:17:58.785 [DEBUG] [Thread-16242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:17:58.785 [DEBUG] [Thread-16242] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:17:58.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:17:58.786 [DEBUG] [Thread-16242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:17:58.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:17:58.844 [DEBUG] [Thread-16242] [transport.py] [_log()] userauth is OK
2025-12-25T18:17:58.844 [DEBUG] [Thread-16242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:17:58.844 [DEBUG] [Thread-16242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:17:58.845 [DEBUG] [Thread-16242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:17:58.845 [DEBUG] [Thread-16242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:17:58.863 [INFO] [Thread-16242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:17:58.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-25T18:17:58.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:17:59.685 [DEBUG] [Thread-16242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:17:59.685 [DEBUG] [Thread-16242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:17:59.733 [DEBUG] [Thread-16242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:17:59.733 [DEBUG] [Thread-16242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:17:59.742 [DEBUG] [Thread-16242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:17:59.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:17:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:17:59.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-25T18:17:59.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:17:59.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:17:59.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:17:59.779 [DEBUG] [Thread-16242] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:18:01.436 [DEBUG] [Thread-16244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:18:09.355 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:18:09.356 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:18:16.470 [DEBUG] [Thread-16245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:18:18.093 [DEBUG] [Thread-16246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:18:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:18:29.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:18:29.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-25T18:18:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 18, 17), 28.16, 15.53, 0.0, 32.13, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:18:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:18:17
2025-12-25T18:18:30.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:18:30.758 [DEBUG] [Thread-16247] [transport.py] [_log()] starting thread (client mode): 0xb95b35e0
2025-12-25T18:18:30.758 [DEBUG] [Thread-16247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:18:30.778 [DEBUG] [Thread-16247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:18:30.778 [INFO] [Thread-16247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] client lang: <none>
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] server lang: <none>
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] kex follows: False
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] Compression: none
2025-12-25T18:18:30.782 [DEBUG] [Thread-16247] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:18:30.801 [DEBUG] [Thread-16247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:18:30.802 [DEBUG] [Thread-16247] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:18:30.802 [DEBUG] [Thread-16247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:18:30.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:18:30.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:18:30.805 [DEBUG] [Thread-16247] [transport.py] [_log()] userauth is OK
2025-12-25T18:18:30.805 [DEBUG] [Thread-16247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:18:30.805 [DEBUG] [Thread-16247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:18:30.805 [DEBUG] [Thread-16247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:18:30.805 [DEBUG] [Thread-16247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:18:30.829 [INFO] [Thread-16247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:18:30.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:18:31.423 [DEBUG] [Thread-16247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:18:31.424 [DEBUG] [Thread-16247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:18:31.424 [DEBUG] [Thread-16247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:18:31.465 [DEBUG] [Thread-16247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:18:31.465 [DEBUG] [Thread-16247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:18:31.469 [DEBUG] [Thread-16247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:18:31.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:18:31.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:18:31.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:18:31.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:18:31.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:18:31.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:18:31.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:18:31.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:18:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:18:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.679227 -999.00  +24.20  30.38     21   +0.70 1 1 2 1 1   887    0 23.40 1.52 ----- 32.5 30.4 296.6 40.1 26.1 -28.2 26.4 -27.5 26.9 -26.5 27.0 -26.7
2025-12-25T18:18:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:18:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:18:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.679227
2025-12-25T18:18:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:18:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:18:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:18:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:18:31.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:18:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:18:17', tmtdew=28.16, humidity=15.53, cloud=0.0, wind=32.13, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:18:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:18:31.496 [DEBUG] [Thread-16247] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:18:31.504 [DEBUG] [Thread-16250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:18:31.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-25T18:18:31.589 [DEBUG] [Thread-16251] [transport.py] [_log()] starting thread (client mode): 0xb6b4fe80
2025-12-25T18:18:31.589 [DEBUG] [Thread-16251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:18:31.604 [DEBUG] [Thread-16251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:18:31.605 [INFO] [Thread-16251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:18:31.612 [DEBUG] [Thread-16251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:18:31.612 [DEBUG] [Thread-16251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:18:31.612 [DEBUG] [Thread-16251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:18:31.612 [DEBUG] [Thread-16251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:18:31.612 [DEBUG] [Thread-16251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] client lang: <none>
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] server lang: <none>
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] kex follows: False
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] Compression: none
2025-12-25T18:18:31.613 [DEBUG] [Thread-16251] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:18:31.672 [DEBUG] [Thread-16251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:18:31.672 [DEBUG] [Thread-16251] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:18:31.673 [DEBUG] [Thread-16251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:18:31.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:18:31.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:18:31.728 [DEBUG] [Thread-16251] [transport.py] [_log()] userauth is OK
2025-12-25T18:18:31.728 [DEBUG] [Thread-16251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:18:31.729 [DEBUG] [Thread-16251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:18:31.729 [DEBUG] [Thread-16251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:18:31.729 [DEBUG] [Thread-16251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:18:31.748 [INFO] [Thread-16251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:18:31.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:18:31.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:18:32.592 [DEBUG] [Thread-16251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:18:32.592 [DEBUG] [Thread-16251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:18:32.640 [DEBUG] [Thread-16251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:18:32.640 [DEBUG] [Thread-16251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:18:32.650 [DEBUG] [Thread-16251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:18:32.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:18:32.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-25T18:18:32.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-25T18:18:32.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:18:32.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:18:32.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:18:32.688 [DEBUG] [Thread-16251] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:18:46.551 [DEBUG] [Thread-16253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:01.583 [DEBUG] [Thread-16254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:19:02.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:19:02.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-25T18:19:03.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 18, 49), 28.33, 14.91, 0.0, 38.62, 24.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:19:03.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:18:49
2025-12-25T18:19:03.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:19:03.660 [DEBUG] [Thread-16255] [transport.py] [_log()] starting thread (client mode): 0xb6b4f970
2025-12-25T18:19:03.660 [DEBUG] [Thread-16255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:19:03.680 [DEBUG] [Thread-16255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:19:03.680 [INFO] [Thread-16255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] client lang: <none>
2025-12-25T18:19:03.683 [DEBUG] [Thread-16255] [transport.py] [_log()] server lang: <none>
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] kex follows: False
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] Compression: none
2025-12-25T18:19:03.684 [DEBUG] [Thread-16255] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:19:03.701 [DEBUG] [Thread-16255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:19:03.701 [DEBUG] [Thread-16255] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:19:03.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:19:03.702 [DEBUG] [Thread-16255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:19:03.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:19:03.704 [DEBUG] [Thread-16255] [transport.py] [_log()] userauth is OK
2025-12-25T18:19:03.704 [DEBUG] [Thread-16255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:19:03.705 [DEBUG] [Thread-16255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:19:03.705 [DEBUG] [Thread-16255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:19:03.705 [DEBUG] [Thread-16255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:19:03.730 [INFO] [Thread-16255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:19:03.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:19:04.420 [DEBUG] [Thread-16255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:19:04.420 [DEBUG] [Thread-16255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:19:04.420 [DEBUG] [Thread-16255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:19:04.461 [DEBUG] [Thread-16255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:19:04.461 [DEBUG] [Thread-16255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:19:04.464 [DEBUG] [Thread-16255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:19:04.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:19:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:19:04.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:19:04.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:19:04.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:19:04.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:19:04.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:19:04.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:19:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:19:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.679574 -999.00  +24.30  39.91     21   +0.70 1 1 2 1 1   887    0 23.63 0.74 ----- 37.4 39.9 308.6 43.3 26.1 -27.8 26.4 -27.7 26.9 -26.2 27.0 -26.3
2025-12-25T18:19:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:19:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:19:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.679574
2025-12-25T18:19:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:19:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:19:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:19:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:19:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:19:04.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:18:49', tmtdew=28.33, humidity=14.91, cloud=0.0, wind=38.62, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:18:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:19:04.493 [DEBUG] [Thread-16255] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:19:04.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-25T18:19:04.591 [DEBUG] [Thread-16258] [transport.py] [_log()] starting thread (client mode): 0xb6b01cc0
2025-12-25T18:19:04.592 [DEBUG] [Thread-16258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:19:04.609 [DEBUG] [Thread-16258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:19:04.609 [INFO] [Thread-16258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:19:04.616 [DEBUG] [Thread-16258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] client lang: <none>
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] server lang: <none>
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] kex follows: False
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:19:04.617 [DEBUG] [Thread-16258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:19:04.618 [DEBUG] [Thread-16258] [transport.py] [_log()] Compression: none
2025-12-25T18:19:04.618 [DEBUG] [Thread-16258] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:19:04.677 [DEBUG] [Thread-16258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:19:04.677 [DEBUG] [Thread-16258] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:19:04.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:19:04.679 [DEBUG] [Thread-16258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:19:04.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:19:04.736 [DEBUG] [Thread-16258] [transport.py] [_log()] userauth is OK
2025-12-25T18:19:04.737 [DEBUG] [Thread-16258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:19:04.737 [DEBUG] [Thread-16258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:19:04.737 [DEBUG] [Thread-16258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:19:04.737 [DEBUG] [Thread-16258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:19:04.755 [INFO] [Thread-16258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:19:04.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-25T18:19:04.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:19:05.670 [DEBUG] [Thread-16258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:19:05.671 [DEBUG] [Thread-16258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:19:05.719 [DEBUG] [Thread-16258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:19:05.720 [DEBUG] [Thread-16258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:19:05.728 [DEBUG] [Thread-16258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:19:05.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:19:05.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-25T18:19:05.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-25T18:19:05.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:19:05.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:19:05.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:19:05.762 [DEBUG] [Thread-16258] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:19:09.497 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:09.498 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:16.619 [DEBUG] [Thread-16260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:18.134 [DEBUG] [Thread-16261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:31.668 [DEBUG] [Thread-16262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:19:35.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:19:35.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:19:35.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-25T18:19:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 19, 21), 28.37, 14.88, 0.0, 38.02, 24.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:19:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:19:21
2025-12-25T18:19:36.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:19:36.759 [DEBUG] [Thread-16263] [transport.py] [_log()] starting thread (client mode): 0xb6b02830
2025-12-25T18:19:36.759 [DEBUG] [Thread-16263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:19:36.779 [DEBUG] [Thread-16263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:19:36.779 [INFO] [Thread-16263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] client lang: <none>
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] server lang: <none>
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] kex follows: False
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] Compression: none
2025-12-25T18:19:36.783 [DEBUG] [Thread-16263] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:19:36.802 [DEBUG] [Thread-16263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:19:36.802 [DEBUG] [Thread-16263] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:19:36.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:19:36.803 [DEBUG] [Thread-16263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:19:36.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:19:36.844 [DEBUG] [Thread-16263] [transport.py] [_log()] userauth is OK
2025-12-25T18:19:36.845 [DEBUG] [Thread-16263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:19:36.845 [DEBUG] [Thread-16263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:19:36.845 [DEBUG] [Thread-16263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:19:36.845 [DEBUG] [Thread-16263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:19:36.877 [INFO] [Thread-16263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:19:36.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:19:37.455 [DEBUG] [Thread-16263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:19:37.455 [DEBUG] [Thread-16263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:19:37.456 [DEBUG] [Thread-16263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:19:37.496 [DEBUG] [Thread-16263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:19:37.496 [DEBUG] [Thread-16263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:19:37.499 [DEBUG] [Thread-16263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:19:37.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:19:37.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:19:37.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:19:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:19:37.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:19:37.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:19:37.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:19:37.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:19:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:19:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.679922 -999.00  +24.30  53.39     21   +0.60 1 1 2 1 1   887    0 23.49 0.36 ----- 52.3 53.4 318.0 63.5 26.1 -28.3 26.4 -28.0 26.9 -26.3 26.9 -27.1
2025-12-25T18:19:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:19:37.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:19:37.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.679922
2025-12-25T18:19:37.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:19:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:19:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:19:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:19:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:19:37.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:19:21', tmtdew=28.37, humidity=14.88, cloud=0.0, wind=38.02, temperature=24.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:19:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:19:37.526 [DEBUG] [Thread-16263] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:19:37.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-25T18:19:37.622 [DEBUG] [Thread-16266] [transport.py] [_log()] starting thread (client mode): 0xb95591b0
2025-12-25T18:19:37.622 [DEBUG] [Thread-16266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:19:37.637 [DEBUG] [Thread-16266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:19:37.637 [INFO] [Thread-16266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:19:37.645 [DEBUG] [Thread-16266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:19:37.646 [DEBUG] [Thread-16266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:19:37.646 [DEBUG] [Thread-16266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:19:37.646 [DEBUG] [Thread-16266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:37.646 [DEBUG] [Thread-16266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] client lang: <none>
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] server lang: <none>
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] kex follows: False
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] Compression: none
2025-12-25T18:19:37.647 [DEBUG] [Thread-16266] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:19:37.704 [DEBUG] [Thread-16266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:19:37.704 [DEBUG] [Thread-16266] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:19:37.705 [DEBUG] [Thread-16266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:19:37.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:19:37.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:19:37.760 [DEBUG] [Thread-16266] [transport.py] [_log()] userauth is OK
2025-12-25T18:19:37.760 [DEBUG] [Thread-16266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:19:37.761 [DEBUG] [Thread-16266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:19:37.761 [DEBUG] [Thread-16266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:19:37.761 [DEBUG] [Thread-16266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:19:37.779 [INFO] [Thread-16266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:19:37.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:19:37.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:19:38.630 [DEBUG] [Thread-16266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:19:38.630 [DEBUG] [Thread-16266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:19:38.678 [DEBUG] [Thread-16266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:19:38.679 [DEBUG] [Thread-16266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:19:38.688 [DEBUG] [Thread-16266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:19:38.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:19:38.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:19:38.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:19:38.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:19:38.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:19:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:19:38.724 [DEBUG] [Thread-16266] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:19:46.701 [DEBUG] [Thread-16268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:01.750 [DEBUG] [Thread-16269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:08.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:20:08.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:20:08.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-25T18:20:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 19, 53), 28.38, 14.88, 0.0, 37.92, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:20:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:19:53
2025-12-25T18:20:09.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:20:09.635 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:09.636 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:09.770 [DEBUG] [Thread-16270] [transport.py] [_log()] starting thread (client mode): 0xb6b61360
2025-12-25T18:20:09.770 [DEBUG] [Thread-16270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:20:09.791 [DEBUG] [Thread-16270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:20:09.791 [INFO] [Thread-16270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] client lang: <none>
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] server lang: <none>
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] kex follows: False
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] Compression: none
2025-12-25T18:20:09.795 [DEBUG] [Thread-16270] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:20:09.811 [DEBUG] [Thread-16270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:20:09.811 [DEBUG] [Thread-16270] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:20:09.811 [DEBUG] [Thread-16270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:20:09.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:20:09.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:20:09.812 [DEBUG] [Thread-16270] [transport.py] [_log()] userauth is OK
2025-12-25T18:20:09.812 [DEBUG] [Thread-16270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:20:09.812 [DEBUG] [Thread-16270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:20:09.812 [DEBUG] [Thread-16270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:20:09.812 [DEBUG] [Thread-16270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:20:09.825 [INFO] [Thread-16270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:20:09.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:20:10.655 [DEBUG] [Thread-16270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:20:10.656 [DEBUG] [Thread-16270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:20:10.656 [DEBUG] [Thread-16270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:20:10.696 [DEBUG] [Thread-16270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:20:10.696 [DEBUG] [Thread-16270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:20:10.699 [DEBUG] [Thread-16270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:20:10.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:20:10.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:20:10.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:20:10.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:20:10.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:20:10.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:20:10.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.680269 -999.00  +24.40  33.99     21   +0.70 1 1 2 1 1   887    0 23.36 -0.47 ----- 36.4 34.0 296.2 50.2 26.1 -27.5 26.4 -27.6 26.9 -27.6 26.9 -26.7
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.680269
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:19:53', tmtdew=28.38, humidity=14.88, cloud=0.0, wind=37.92, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:19:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:20:10.716 [DEBUG] [Thread-16270] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:20:10.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-25T18:20:10.798 [DEBUG] [Thread-16273] [transport.py] [_log()] starting thread (client mode): 0xb6b63370
2025-12-25T18:20:10.798 [DEBUG] [Thread-16273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:20:10.815 [DEBUG] [Thread-16273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:20:10.815 [INFO] [Thread-16273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:20:10.822 [DEBUG] [Thread-16273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:20:10.822 [DEBUG] [Thread-16273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:20:10.822 [DEBUG] [Thread-16273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] client lang: <none>
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] server lang: <none>
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] kex follows: False
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] Compression: none
2025-12-25T18:20:10.823 [DEBUG] [Thread-16273] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:20:10.882 [DEBUG] [Thread-16273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:20:10.882 [DEBUG] [Thread-16273] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:20:10.882 [DEBUG] [Thread-16273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:20:10.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:20:10.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:20:10.939 [DEBUG] [Thread-16273] [transport.py] [_log()] userauth is OK
2025-12-25T18:20:10.939 [DEBUG] [Thread-16273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:20:10.939 [DEBUG] [Thread-16273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:20:10.939 [DEBUG] [Thread-16273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:20:10.939 [DEBUG] [Thread-16273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:20:10.953 [INFO] [Thread-16273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:20:10.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:20:10.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:20:11.819 [DEBUG] [Thread-16273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:20:11.819 [DEBUG] [Thread-16273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:20:11.867 [DEBUG] [Thread-16273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:20:11.867 [DEBUG] [Thread-16273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:20:11.875 [DEBUG] [Thread-16273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:20:11.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:20:11.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-25T18:20: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') -> 00000000
2025-12-25T18:20:11.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:20:11.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:20:11.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:20:11.906 [DEBUG] [Thread-16273] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:20:16.777 [DEBUG] [Thread-16275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:18.172 [DEBUG] [Thread-16276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:31.825 [DEBUG] [Thread-16277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:20:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:20:41.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:20:41.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:20:42.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 20, 25), 28.29, 14.98, 0.0, 37.12, 24.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:20:42.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:20:25
2025-12-25T18:20:42.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:20:42.904 [DEBUG] [Thread-16278] [transport.py] [_log()] starting thread (client mode): 0xb6b7d600
2025-12-25T18:20:42.905 [DEBUG] [Thread-16278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:20:42.925 [DEBUG] [Thread-16278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:20:42.925 [INFO] [Thread-16278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] client lang: <none>
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] server lang: <none>
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] kex follows: False
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] Compression: none
2025-12-25T18:20:42.928 [DEBUG] [Thread-16278] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:20:42.945 [DEBUG] [Thread-16278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:20:42.945 [DEBUG] [Thread-16278] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:20:42.946 [DEBUG] [Thread-16278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:20:42.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:20:42.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:20:42.948 [DEBUG] [Thread-16278] [transport.py] [_log()] userauth is OK
2025-12-25T18:20:42.948 [DEBUG] [Thread-16278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:20:42.948 [DEBUG] [Thread-16278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:20:42.948 [DEBUG] [Thread-16278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:20:42.948 [DEBUG] [Thread-16278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:20:42.970 [INFO] [Thread-16278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:20:42.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:20:43.621 [DEBUG] [Thread-16278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:20:43.622 [DEBUG] [Thread-16278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:20:43.622 [DEBUG] [Thread-16278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:20:43.663 [DEBUG] [Thread-16278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:20:43.663 [DEBUG] [Thread-16278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:20:43.666 [DEBUG] [Thread-16278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:20:43.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:20:43.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:20:43.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:20:43.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:20:43.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:20:43.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:20:43.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:20:43.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:20:43.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:20:43.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.680616 -999.00  +24.30  35.76     21   +0.60 1 1 2 1 1   887    0 23.26 -1.87 ----- 39.6 35.8 293.8 45.6 26.1 -28.1 26.4 -27.8 26.8 -27.0 26.9 -26.8
2025-12-25T18:20:43.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:20:43.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:20:43.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.680616
2025-12-25T18:20:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:20:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:20:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:20:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:20:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:20:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:20:25', tmtdew=28.29, humidity=14.98, cloud=0.0, wind=37.12, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:20:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:20:43.690 [DEBUG] [Thread-16278] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:20:43.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-25T18:20:43.781 [DEBUG] [Thread-16281] [transport.py] [_log()] starting thread (client mode): 0xb6b4f460
2025-12-25T18:20:43.781 [DEBUG] [Thread-16281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:20:43.797 [DEBUG] [Thread-16281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:20:43.797 [INFO] [Thread-16281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:20:43.804 [DEBUG] [Thread-16281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] client lang: <none>
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] server lang: <none>
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] kex follows: False
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] Compression: none
2025-12-25T18:20:43.805 [DEBUG] [Thread-16281] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:20:43.865 [DEBUG] [Thread-16281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:20:43.866 [DEBUG] [Thread-16281] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:20:43.866 [DEBUG] [Thread-16281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:20:43.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:20:43.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:20:43.924 [DEBUG] [Thread-16281] [transport.py] [_log()] userauth is OK
2025-12-25T18:20:43.924 [DEBUG] [Thread-16281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:20:43.924 [DEBUG] [Thread-16281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:20:43.924 [DEBUG] [Thread-16281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:20:43.925 [DEBUG] [Thread-16281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:20:43.944 [INFO] [Thread-16281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:20:43.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-25T18:20:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:20:44.793 [DEBUG] [Thread-16281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:20:44.794 [DEBUG] [Thread-16281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:20:44.841 [DEBUG] [Thread-16281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:20:44.841 [DEBUG] [Thread-16281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:20:44.850 [DEBUG] [Thread-16281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:20:44.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:20:44.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-25T18:20:44.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:20:44.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:20:44.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:20:44.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:20:44.881 [DEBUG] [Thread-16281] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:20:46.863 [DEBUG] [Thread-16283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:01.902 [DEBUG] [Thread-16284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:09.775 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:09.776 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:21:14.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:21:14.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-25T18:21:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 20, 58), 28.34, 14.83, 0.0, 41.39, 24.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:21:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:20:58
2025-12-25T18:21:15.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:21:15.890 [DEBUG] [Thread-16285] [transport.py] [_log()] starting thread (client mode): 0xb6bc0790
2025-12-25T18:21:15.890 [DEBUG] [Thread-16285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:21:15.910 [DEBUG] [Thread-16285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:21:15.910 [INFO] [Thread-16285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:21:15.913 [DEBUG] [Thread-16285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:21:15.913 [DEBUG] [Thread-16285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] client lang: <none>
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] server lang: <none>
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] kex follows: False
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:21:15.914 [DEBUG] [Thread-16285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:21:15.915 [DEBUG] [Thread-16285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:21:15.915 [DEBUG] [Thread-16285] [transport.py] [_log()] Compression: none
2025-12-25T18:21:15.915 [DEBUG] [Thread-16285] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:21:15.934 [DEBUG] [Thread-16285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:21:15.935 [DEBUG] [Thread-16285] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:21:15.936 [DEBUG] [Thread-16285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:21:15.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:21:15.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:21:15.939 [DEBUG] [Thread-16285] [transport.py] [_log()] userauth is OK
2025-12-25T18:21:15.939 [DEBUG] [Thread-16285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:21:15.939 [DEBUG] [Thread-16285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:21:15.939 [DEBUG] [Thread-16285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:21:15.939 [DEBUG] [Thread-16285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:21:15.975 [INFO] [Thread-16285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:21:15.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:21:16.632 [DEBUG] [Thread-16285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:21:16.632 [DEBUG] [Thread-16285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:21:16.633 [DEBUG] [Thread-16285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:21:16.673 [DEBUG] [Thread-16285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:21:16.673 [DEBUG] [Thread-16285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:21:16.677 [DEBUG] [Thread-16285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:21:16.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:21:16.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:21:16.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:21:16.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:21:16.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:21:16.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:21:16.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:21:16.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:21:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:21:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.680963 -999.00  +24.40  29.02     21   +0.70 1 1 1 1 1   887    0 23.51 -3.17 ----- 34.3 29.0 297.0 42.3 26.1 -27.7 26.4 -27.4 26.9 -26.4 26.9 -26.8
2025-12-25T18:21:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:21:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:21:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.680963
2025-12-25T18:21:16.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:21:16.702 [DEBUG] [Thread-16285] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:21:16.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:21:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:21:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:21:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:21:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:20:58', tmtdew=28.34, humidity=14.83, cloud=0.0, wind=41.39, temperature=24.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:20:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:21:16.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-25T18:21:16.802 [DEBUG] [Thread-16288] [transport.py] [_log()] starting thread (client mode): 0xb6b632b0
2025-12-25T18:21:16.802 [DEBUG] [Thread-16288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:21:16.821 [DEBUG] [Thread-16288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:21:16.821 [INFO] [Thread-16288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:21:16.829 [DEBUG] [Thread-16288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:21:16.829 [DEBUG] [Thread-16288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:21:16.829 [DEBUG] [Thread-16288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:21:16.829 [DEBUG] [Thread-16288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] client lang: <none>
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] server lang: <none>
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] kex follows: False
2025-12-25T18:21:16.830 [DEBUG] [Thread-16288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:21:16.831 [DEBUG] [Thread-16288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:21:16.831 [DEBUG] [Thread-16288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:21:16.831 [DEBUG] [Thread-16288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:21:16.831 [DEBUG] [Thread-16288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:21:16.831 [DEBUG] [Thread-16288] [transport.py] [_log()] Compression: none
2025-12-25T18:21:16.831 [DEBUG] [Thread-16288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:21:16.892 [DEBUG] [Thread-16288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:21:16.892 [DEBUG] [Thread-16288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:21:16.893 [DEBUG] [Thread-16288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:21:16.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:21:16.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:21:16.940 [DEBUG] [Thread-16290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:16.948 [DEBUG] [Thread-16288] [transport.py] [_log()] userauth is OK
2025-12-25T18:21:16.948 [DEBUG] [Thread-16288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:21:16.948 [DEBUG] [Thread-16288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:21:16.949 [DEBUG] [Thread-16288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:21:16.949 [DEBUG] [Thread-16288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:21:16.967 [INFO] [Thread-16288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:21:16.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-25T18:21:16.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:21:17.780 [DEBUG] [Thread-16288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:21:17.780 [DEBUG] [Thread-16288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:21:17.828 [DEBUG] [Thread-16288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:21:17.828 [DEBUG] [Thread-16288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:21:17.837 [DEBUG] [Thread-16288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:21:17.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:21:17.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-25T18:21:17.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-25T18:21:17.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:21:17.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:21:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:21:17.874 [DEBUG] [Thread-16288] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:21:18.210 [DEBUG] [Thread-16291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:31.988 [DEBUG] [Thread-16292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:47.022 [DEBUG] [Thread-16293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:21:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:21:47.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:21:47.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:21:48.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 21, 30), 28.27, 14.91, 0.0, 38.48, 24.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:21:48.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:21:30
2025-12-25T18:21:48.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:21:48.891 [DEBUG] [Thread-16294] [transport.py] [_log()] starting thread (client mode): 0xb95d7670
2025-12-25T18:21:48.891 [DEBUG] [Thread-16294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:21:48.915 [DEBUG] [Thread-16294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:21:48.915 [INFO] [Thread-16294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:48.918 [DEBUG] [Thread-16294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] client lang: <none>
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] server lang: <none>
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] kex follows: False
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] Compression: none
2025-12-25T18:21:48.919 [DEBUG] [Thread-16294] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:21:48.937 [DEBUG] [Thread-16294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:21:48.938 [DEBUG] [Thread-16294] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:21:48.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:21:48.939 [DEBUG] [Thread-16294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:21:48.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:21:48.981 [DEBUG] [Thread-16294] [transport.py] [_log()] userauth is OK
2025-12-25T18:21:48.981 [DEBUG] [Thread-16294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:21:48.981 [DEBUG] [Thread-16294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:21:48.982 [DEBUG] [Thread-16294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:21:48.982 [DEBUG] [Thread-16294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:21:49.013 [INFO] [Thread-16294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:21:49.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:21:49.667 [DEBUG] [Thread-16294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:21:49.668 [DEBUG] [Thread-16294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:21:49.668 [DEBUG] [Thread-16294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:21:49.709 [DEBUG] [Thread-16294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:21:49.709 [DEBUG] [Thread-16294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:21:49.712 [DEBUG] [Thread-16294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:21:49.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:21:49.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:21:49.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:21:49.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:21:49.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:21:49.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:21:49.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:21:49.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:21:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:21:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.681310 -999.00  +24.30  42.52     21   +0.60 1 1 2 1 1   887    0 22.92 -5.07 ----- 35.4 42.5 287.8 51.4 26.1 -28.1 26.4 -28.1 26.7 -25.7 26.8 -27.2
2025-12-25T18:21:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:21:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:21:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.681310
2025-12-25T18:21:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:21:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:21:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:21:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:21:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:21:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:21:30', tmtdew=28.27, humidity=14.91, cloud=0.0, wind=38.48, temperature=24.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:21:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:21:49.739 [DEBUG] [Thread-16294] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:21:49.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:21:49.833 [DEBUG] [Thread-16297] [transport.py] [_log()] starting thread (client mode): 0xb95b3e50
2025-12-25T18:21:49.833 [DEBUG] [Thread-16297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:21:49.848 [DEBUG] [Thread-16297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:21:49.849 [INFO] [Thread-16297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:21:49.856 [DEBUG] [Thread-16297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:21:49.856 [DEBUG] [Thread-16297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:21:49.856 [DEBUG] [Thread-16297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] client lang: <none>
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] server lang: <none>
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] kex follows: False
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] Compression: none
2025-12-25T18:21:49.857 [DEBUG] [Thread-16297] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:21:49.916 [DEBUG] [Thread-16297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:21:49.917 [DEBUG] [Thread-16297] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:21:49.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:21:49.918 [DEBUG] [Thread-16297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:21:49.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:21:49.972 [DEBUG] [Thread-16297] [transport.py] [_log()] userauth is OK
2025-12-25T18:21:49.972 [DEBUG] [Thread-16297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:21:49.972 [DEBUG] [Thread-16297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:21:49.972 [DEBUG] [Thread-16297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:21:49.972 [DEBUG] [Thread-16297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:21:49.994 [INFO] [Thread-16297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:21:49.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-25T18:21:49.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:21:50.793 [DEBUG] [Thread-16297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:21:50.794 [DEBUG] [Thread-16297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:21:50.842 [DEBUG] [Thread-16297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:21:50.842 [DEBUG] [Thread-16297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:21:50.851 [DEBUG] [Thread-16297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:21:50.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:21:50.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:21: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') -> 00000000
2025-12-25T18:21:50.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:21:50.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:21:50.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:21:50.888 [DEBUG] [Thread-16297] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:22:02.059 [DEBUG] [Thread-16299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:09.923 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:09.925 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:17.111 [DEBUG] [Thread-16300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:18.252 [DEBUG] [Thread-16301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:20.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:22:20.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:22:20.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:22:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 22, 2), 28.24, 14.93, 0.0, 41.27, 24.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:22:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:22:02
2025-12-25T18:22:21.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:22:21.883 [DEBUG] [Thread-16302] [transport.py] [_log()] starting thread (client mode): 0xb6bc3370
2025-12-25T18:22:21.883 [DEBUG] [Thread-16302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:22:21.902 [DEBUG] [Thread-16302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:22:21.902 [INFO] [Thread-16302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:22:21.906 [DEBUG] [Thread-16302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] client lang: <none>
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] server lang: <none>
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] kex follows: False
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] Compression: none
2025-12-25T18:22:21.907 [DEBUG] [Thread-16302] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:22:21.925 [DEBUG] [Thread-16302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:22:21.926 [DEBUG] [Thread-16302] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:22:21.927 [DEBUG] [Thread-16302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:22:21.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:22:21.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:22:21.929 [DEBUG] [Thread-16302] [transport.py] [_log()] userauth is OK
2025-12-25T18:22:21.929 [DEBUG] [Thread-16302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:22:21.930 [DEBUG] [Thread-16302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:22:21.930 [DEBUG] [Thread-16302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:22:21.930 [DEBUG] [Thread-16302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:22:21.953 [INFO] [Thread-16302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:22:21.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:22:22.610 [DEBUG] [Thread-16302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:22:22.610 [DEBUG] [Thread-16302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:22:22.611 [DEBUG] [Thread-16302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:22:22.651 [DEBUG] [Thread-16302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:22:22.651 [DEBUG] [Thread-16302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:22:22.654 [DEBUG] [Thread-16302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:22:22.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:22:22.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:22:22.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:22:22.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:22:22.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:22:22.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:22:22.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:22:22.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:22:22.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:22:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.682005 -999.00  +24.50  40.75     21   +1.00 1 1 2 1 1   887    0 23.53 -7.85 ----- 40.9 40.8 300.4 62.4 26.1 -28.0 26.4 -27.9 26.8 -27.5 26.9 -27.0
2025-12-25T18:22:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:22:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:22:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.682005
2025-12-25T18:22:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:22:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:22:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:22:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:22:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:22:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:22:02', tmtdew=28.24, humidity=14.93, cloud=0.0, wind=41.27, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:22:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:22:22.677 [DEBUG] [Thread-16302] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:22:22.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-25T18:22:22.779 [DEBUG] [Thread-16305] [transport.py] [_log()] starting thread (client mode): 0xb6bb6a10
2025-12-25T18:22:22.779 [DEBUG] [Thread-16305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:22:22.799 [DEBUG] [Thread-16305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:22:22.799 [INFO] [Thread-16305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:22:22.806 [DEBUG] [Thread-16305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:22:22.806 [DEBUG] [Thread-16305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:22:22.806 [DEBUG] [Thread-16305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] client lang: <none>
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] server lang: <none>
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] kex follows: False
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] Compression: none
2025-12-25T18:22:22.807 [DEBUG] [Thread-16305] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:22:22.863 [DEBUG] [Thread-16305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:22:22.863 [DEBUG] [Thread-16305] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:22:22.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:22:22.864 [DEBUG] [Thread-16305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:22:22.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:22:22.920 [DEBUG] [Thread-16305] [transport.py] [_log()] userauth is OK
2025-12-25T18:22:22.920 [DEBUG] [Thread-16305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:22:22.920 [DEBUG] [Thread-16305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:22:22.920 [DEBUG] [Thread-16305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:22:22.920 [DEBUG] [Thread-16305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:22:22.940 [INFO] [Thread-16305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:22:22.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-25T18:22:22.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:22:23.775 [DEBUG] [Thread-16305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:22:23.775 [DEBUG] [Thread-16305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:22:23.823 [DEBUG] [Thread-16305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:22:23.823 [DEBUG] [Thread-16305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:22:23.831 [DEBUG] [Thread-16305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:22:23.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:22:23.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-25T18:22:23.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-25T18:22:23.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:22:23.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:22:23.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:22:23.865 [DEBUG] [Thread-16305] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:22:32.144 [DEBUG] [Thread-16307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:47.193 [DEBUG] [Thread-16308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:22:53.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:22:53.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:22:53.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-25T18:22:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 22, 34), 27.79, 15.65, 0.0, 49.19, 24.58, 0, 0, 0, 2, 1, 0),)
2025-12-25T18:22:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:22:34
2025-12-25T18:22:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:22:54.832 [DEBUG] [Thread-16309] [transport.py] [_log()] starting thread (client mode): 0xb6b23880
2025-12-25T18:22:54.832 [DEBUG] [Thread-16309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:22:54.852 [DEBUG] [Thread-16309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:22:54.852 [INFO] [Thread-16309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:22:54.855 [DEBUG] [Thread-16309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] client lang: <none>
2025-12-25T18:22:54.856 [DEBUG] [Thread-16309] [transport.py] [_log()] server lang: <none>
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] kex follows: False
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] Compression: none
2025-12-25T18:22:54.857 [DEBUG] [Thread-16309] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:22:54.867 [DEBUG] [Thread-16309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:22:54.868 [DEBUG] [Thread-16309] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:22:54.869 [DEBUG] [Thread-16309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:22:54.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:22:54.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:22:54.872 [DEBUG] [Thread-16309] [transport.py] [_log()] userauth is OK
2025-12-25T18:22:54.872 [DEBUG] [Thread-16309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:22:54.872 [DEBUG] [Thread-16309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:22:54.872 [DEBUG] [Thread-16309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:22:54.872 [DEBUG] [Thread-16309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:22:54.892 [INFO] [Thread-16309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:22:54.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:22:55.559 [DEBUG] [Thread-16309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:22:55.560 [DEBUG] [Thread-16309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:22:55.560 [DEBUG] [Thread-16309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:22:55.600 [DEBUG] [Thread-16309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:22:55.601 [DEBUG] [Thread-16309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:22:55.603 [DEBUG] [Thread-16309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:22:55.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:22:55.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:22:55.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:22:55.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:22:55.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:22:55.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:22:55.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:22:55.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:22:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:22:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.682352 -999.00  +24.10  44.61     21   +0.90 1 1 2 1 1   887    0 23.01 -11.86 ----- 31.9 44.6 299.6 56.0 26.0 -28.6 26.2 -28.2 26.6 -27.2 26.7 -27.6
2025-12-25T18:22:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:22:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:22:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.682352
2025-12-25T18:22:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:22:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:22:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:22:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:22:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:22:55.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:22:34', tmtdew=27.79, humidity=15.65, cloud=0.0, wind=49.19, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:22:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:22:55.628 [DEBUG] [Thread-16309] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:22:55.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-25T18:22:55.737 [DEBUG] [Thread-16312] [transport.py] [_log()] starting thread (client mode): 0xb6b007c0
2025-12-25T18:22:55.737 [DEBUG] [Thread-16312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:22:55.751 [DEBUG] [Thread-16312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:22:55.751 [INFO] [Thread-16312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:22:55.759 [DEBUG] [Thread-16312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:22:55.759 [DEBUG] [Thread-16312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:22:55.759 [DEBUG] [Thread-16312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:22:55.759 [DEBUG] [Thread-16312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:55.759 [DEBUG] [Thread-16312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] client lang: <none>
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] server lang: <none>
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] kex follows: False
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:22:55.760 [DEBUG] [Thread-16312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:22:55.761 [DEBUG] [Thread-16312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:22:55.761 [DEBUG] [Thread-16312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:22:55.761 [DEBUG] [Thread-16312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:22:55.761 [DEBUG] [Thread-16312] [transport.py] [_log()] Compression: none
2025-12-25T18:22:55.761 [DEBUG] [Thread-16312] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:22:55.816 [DEBUG] [Thread-16312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:22:55.816 [DEBUG] [Thread-16312] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:22:55.817 [DEBUG] [Thread-16312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:22:55.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:22:55.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:22:55.872 [DEBUG] [Thread-16312] [transport.py] [_log()] userauth is OK
2025-12-25T18:22:55.873 [DEBUG] [Thread-16312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:22:55.873 [DEBUG] [Thread-16312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:22:55.873 [DEBUG] [Thread-16312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:22:55.873 [DEBUG] [Thread-16312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:22:55.891 [INFO] [Thread-16312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:22:55.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-25T18:22:55.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:22:56.744 [DEBUG] [Thread-16312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:22:56.745 [DEBUG] [Thread-16312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:22:56.793 [DEBUG] [Thread-16312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:22:56.793 [DEBUG] [Thread-16312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:22:56.805 [DEBUG] [Thread-16312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:22:56.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:22:56.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:22:56.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:22:56.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:22:56.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:22:56.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:22:56.841 [DEBUG] [Thread-16312] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:23:02.228 [DEBUG] [Thread-16314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:10.066 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:10.067 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:17.278 [DEBUG] [Thread-16315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:18.286 [DEBUG] [Thread-16316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:26.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:23:26.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:23:26.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-25T18:23:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 23, 6), 27.64, 15.78, 0.0, 46.72, 24.4, 0, 0, 0, 2, 1, 0),)
2025-12-25T18:23:27.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:23:06
2025-12-25T18:23:27.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:23:27.822 [DEBUG] [Thread-16317] [transport.py] [_log()] starting thread (client mode): 0xb6bc38e0
2025-12-25T18:23:27.822 [DEBUG] [Thread-16317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:23:27.842 [DEBUG] [Thread-16317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:23:27.843 [INFO] [Thread-16317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:23:27.846 [DEBUG] [Thread-16317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:23:27.846 [DEBUG] [Thread-16317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:23:27.846 [DEBUG] [Thread-16317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:23:27.846 [DEBUG] [Thread-16317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:23:27.846 [DEBUG] [Thread-16317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] client lang: <none>
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] server lang: <none>
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] kex follows: False
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] Compression: none
2025-12-25T18:23:27.847 [DEBUG] [Thread-16317] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:23:27.865 [DEBUG] [Thread-16317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:23:27.866 [DEBUG] [Thread-16317] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:23:27.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:23:27.868 [DEBUG] [Thread-16317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:23:27.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:23:27.870 [DEBUG] [Thread-16317] [transport.py] [_log()] userauth is OK
2025-12-25T18:23:27.870 [DEBUG] [Thread-16317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:23:27.870 [DEBUG] [Thread-16317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:23:27.870 [DEBUG] [Thread-16317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:23:27.870 [DEBUG] [Thread-16317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:23:27.884 [INFO] [Thread-16317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:23:27.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:23:28.519 [DEBUG] [Thread-16317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:23:28.519 [DEBUG] [Thread-16317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:23:28.520 [DEBUG] [Thread-16317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:23:28.560 [DEBUG] [Thread-16317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:23:28.560 [DEBUG] [Thread-16317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:23:28.564 [DEBUG] [Thread-16317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:23:28.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:23:28.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:23:28.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:23:28.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:23:28.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:23:28.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:23:28.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:23:28.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:23:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:23:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.682699 -999.00  +24.30  28.99     21   +0.90 1 1 1 1 1   887    0 23.76 -16.12 ----- 32.7 29.0 307.2 41.4 25.9 -27.9 26.2 -27.7 26.6 -25.9 26.7 -26.7
2025-12-25T18:23:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:23:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:23:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.682699
2025-12-25T18:23:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:23:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:23:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:23:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:23:28.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:23:28.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:23:06', tmtdew=27.64, humidity=15.78, cloud=0.0, wind=46.72, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:23:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:23:28.588 [DEBUG] [Thread-16317] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:23: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-25T18:23:28.681 [DEBUG] [Thread-16320] [transport.py] [_log()] starting thread (client mode): 0xb6b02710
2025-12-25T18:23:28.681 [DEBUG] [Thread-16320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:23:28.695 [DEBUG] [Thread-16320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:23:28.695 [INFO] [Thread-16320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] client lang: <none>
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] server lang: <none>
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] kex follows: False
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] Compression: none
2025-12-25T18:23:28.703 [DEBUG] [Thread-16320] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:23:28.760 [DEBUG] [Thread-16320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:23:28.760 [DEBUG] [Thread-16320] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:23:28.761 [DEBUG] [Thread-16320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:23:28.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:23:28.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:23:28.816 [DEBUG] [Thread-16320] [transport.py] [_log()] userauth is OK
2025-12-25T18:23:28.816 [DEBUG] [Thread-16320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:23:28.817 [DEBUG] [Thread-16320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:23:28.817 [DEBUG] [Thread-16320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:23:28.817 [DEBUG] [Thread-16320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:23:28.835 [INFO] [Thread-16320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:23:28.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-25T18:23:28.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:23:29.715 [DEBUG] [Thread-16320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:23:29.715 [DEBUG] [Thread-16320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:23:29.763 [DEBUG] [Thread-16320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:23:29.763 [DEBUG] [Thread-16320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:23:29.773 [DEBUG] [Thread-16320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:23:29.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:23: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')
2025-12-25T18:23:29.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-25T18:23:29.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:23:29.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:23:29.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:23:29.809 [DEBUG] [Thread-16320] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:23:32.310 [DEBUG] [Thread-16322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:47.363 [DEBUG] [Thread-16323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:23:59.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:23:59.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:23:59.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-25T18:24:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 23, 38), 27.34, 15.89, 0.0, 43.37, 24.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:24:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:23:38
2025-12-25T18:24:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:24:00.859 [DEBUG] [Thread-16324] [transport.py] [_log()] starting thread (client mode): 0xb6b033d0
2025-12-25T18:24:00.859 [DEBUG] [Thread-16324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:24:00.879 [DEBUG] [Thread-16324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:24:00.880 [INFO] [Thread-16324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] client lang: <none>
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] server lang: <none>
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] kex follows: False
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] Compression: none
2025-12-25T18:24:00.883 [DEBUG] [Thread-16324] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:24:00.899 [DEBUG] [Thread-16324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:24:00.899 [DEBUG] [Thread-16324] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:24:00.900 [DEBUG] [Thread-16324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:24:00.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:24:00.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:24:00.901 [DEBUG] [Thread-16324] [transport.py] [_log()] userauth is OK
2025-12-25T18:24:00.901 [DEBUG] [Thread-16324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:24:00.901 [DEBUG] [Thread-16324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:24:00.901 [DEBUG] [Thread-16324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:24:00.901 [DEBUG] [Thread-16324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:24:00.919 [INFO] [Thread-16324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:24:00.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:24:01.549 [DEBUG] [Thread-16324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:24:01.549 [DEBUG] [Thread-16324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:24:01.549 [DEBUG] [Thread-16324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:24:01.590 [DEBUG] [Thread-16324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:24:01.590 [DEBUG] [Thread-16324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:24:01.592 [DEBUG] [Thread-16324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:24:01.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:24:01.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:24:01.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:24:01.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:24:01.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:24:01.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:24:01.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.683047 -999.00  +24.40  22.80     21   +0.90 1 1 1 1 1   887    0 23.27 -18.74 ----- 40.0 22.8 306.4 46.3 26.0 -28.4 26.2 -28.1 26.6 -26.1 -999.0 -999.0
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.683047
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:24:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:24:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:24:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:24:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:23:38', tmtdew=27.34, humidity=15.89, cloud=0.0, wind=43.37, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:23:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:24:01.610 [DEBUG] [Thread-16324] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:24:01.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-25T18:24:01.697 [DEBUG] [Thread-16327] [transport.py] [_log()] starting thread (client mode): 0xb9590100
2025-12-25T18:24:01.697 [DEBUG] [Thread-16327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:24:01.714 [DEBUG] [Thread-16327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:24:01.714 [INFO] [Thread-16327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] client lang: <none>
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] server lang: <none>
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] kex follows: False
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] Compression: none
2025-12-25T18:24:01.724 [DEBUG] [Thread-16327] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:24:01.779 [DEBUG] [Thread-16327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:24:01.779 [DEBUG] [Thread-16327] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:24:01.779 [DEBUG] [Thread-16327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:24:01.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:24:01.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:24:01.839 [DEBUG] [Thread-16327] [transport.py] [_log()] userauth is OK
2025-12-25T18:24:01.839 [DEBUG] [Thread-16327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:24:01.839 [DEBUG] [Thread-16327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:24:01.839 [DEBUG] [Thread-16327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:24:01.839 [DEBUG] [Thread-16327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:24:01.853 [INFO] [Thread-16327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:24:01.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:24:01.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:24:02.396 [DEBUG] [Thread-16329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:24:02.686 [DEBUG] [Thread-16327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:24:02.686 [DEBUG] [Thread-16327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:24:02.734 [DEBUG] [Thread-16327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:24:02.734 [DEBUG] [Thread-16327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:24:02.743 [DEBUG] [Thread-16327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:24:02.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:24:02.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-25T18:24:02.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:24:02.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:24:02.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:24:02.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:24:02.774 [DEBUG] [Thread-16327] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:24:10.208 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:24:10.210 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:24:17.434 [DEBUG] [Thread-16330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:24:18.319 [DEBUG] [Thread-16331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:24:32.469 [DEBUG] [Thread-16332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:24:32.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:24:32.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:24:32.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-25T18:24:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 24, 10), 27.37, 15.84, 0.0, 41.98, 24.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:24:33.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:24:10
2025-12-25T18:24:33.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:24:33.783 [DEBUG] [Thread-16333] [transport.py] [_log()] starting thread (client mode): 0xb6bc1a50
2025-12-25T18:24:33.783 [DEBUG] [Thread-16333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:24:33.803 [DEBUG] [Thread-16333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:24:33.803 [INFO] [Thread-16333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:24:33.806 [DEBUG] [Thread-16333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:24:33.806 [DEBUG] [Thread-16333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] client lang: <none>
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] server lang: <none>
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] kex follows: False
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] Compression: none
2025-12-25T18:24:33.807 [DEBUG] [Thread-16333] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:24:33.823 [DEBUG] [Thread-16333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:24:33.824 [DEBUG] [Thread-16333] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:24:33.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:24:33.825 [DEBUG] [Thread-16333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:24:33.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:24:33.827 [DEBUG] [Thread-16333] [transport.py] [_log()] userauth is OK
2025-12-25T18:24:33.827 [DEBUG] [Thread-16333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:24:33.827 [DEBUG] [Thread-16333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:24:33.827 [DEBUG] [Thread-16333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:24:33.828 [DEBUG] [Thread-16333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:24:33.853 [INFO] [Thread-16333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:24:33.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:24:34.484 [DEBUG] [Thread-16333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:24:34.484 [DEBUG] [Thread-16333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:24:34.484 [DEBUG] [Thread-16333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:24:34.525 [DEBUG] [Thread-16333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:24:34.525 [DEBUG] [Thread-16333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:24:34.527 [DEBUG] [Thread-16333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:24:34.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:24:34.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:24:34.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:24:34.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:24:34.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:24:34.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:24:34.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:24:34.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:24:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:24:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.683394 -999.00  +24.20  42.27     21   +0.90 1 1 2 1 1   887    0 23.17 -21.39 ----- 35.1 42.3 290.2 47.0 25.9 -28.9 26.2 -28.6 26.5 -27.3 26.7 -27.7
2025-12-25T18:24:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:24:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:24:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.683394
2025-12-25T18:24:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:24:34.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:24:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:24:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:24:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:24:34.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:24:10', tmtdew=27.37, humidity=15.84, cloud=0.0, wind=41.98, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:24:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:24:34.552 [DEBUG] [Thread-16333] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:24:34.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-25T18:24:34.637 [DEBUG] [Thread-16336] [transport.py] [_log()] starting thread (client mode): 0xb6b61930
2025-12-25T18:24:34.637 [DEBUG] [Thread-16336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:24:34.652 [DEBUG] [Thread-16336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:24:34.652 [INFO] [Thread-16336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:24:34.659 [DEBUG] [Thread-16336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] client lang: <none>
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] server lang: <none>
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] kex follows: False
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] Compression: none
2025-12-25T18:24:34.660 [DEBUG] [Thread-16336] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:24:34.719 [DEBUG] [Thread-16336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:24:34.720 [DEBUG] [Thread-16336] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:24:34.720 [DEBUG] [Thread-16336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:24:34.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:24:34.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:24:34.775 [DEBUG] [Thread-16336] [transport.py] [_log()] userauth is OK
2025-12-25T18:24:34.776 [DEBUG] [Thread-16336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:24:34.776 [DEBUG] [Thread-16336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:24:34.776 [DEBUG] [Thread-16336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:24:34.776 [DEBUG] [Thread-16336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:24:34.794 [INFO] [Thread-16336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:24:34.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-25T18:24:34.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:24:35.618 [DEBUG] [Thread-16336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:24:35.618 [DEBUG] [Thread-16336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:24:35.666 [DEBUG] [Thread-16336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:24:35.666 [DEBUG] [Thread-16336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:24:35.674 [DEBUG] [Thread-16336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:24:35.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:24:35.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-25T18:24:35.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-25T18:24:35.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:24:35.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:24:35.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:24:35.707 [DEBUG] [Thread-16336] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:24:47.499 [DEBUG] [Thread-16338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:02.551 [DEBUG] [Thread-16339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:05.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:25:05.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:25:05.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-25T18:25:06.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 24, 42), 27.27, 15.91, 0.0, 40.32, 24.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:25:06.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:24:42
2025-12-25T18:25:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:25:06.711 [DEBUG] [Thread-16340] [transport.py] [_log()] starting thread (client mode): 0xb6b238b0
2025-12-25T18:25:06.711 [DEBUG] [Thread-16340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:25:06.733 [DEBUG] [Thread-16340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:25:06.733 [INFO] [Thread-16340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] client lang: <none>
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] server lang: <none>
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] kex follows: False
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] Compression: none
2025-12-25T18:25:06.735 [DEBUG] [Thread-16340] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:25:06.748 [DEBUG] [Thread-16340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:25:06.748 [DEBUG] [Thread-16340] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:25:06.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:25:06.750 [DEBUG] [Thread-16340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:25:06.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:25:06.752 [DEBUG] [Thread-16340] [transport.py] [_log()] userauth is OK
2025-12-25T18:25:06.752 [DEBUG] [Thread-16340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:25:06.752 [DEBUG] [Thread-16340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:25:06.752 [DEBUG] [Thread-16340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:25:06.752 [DEBUG] [Thread-16340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:25:06.777 [INFO] [Thread-16340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:25:06.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:25:07.734 [DEBUG] [Thread-16340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:25:07.735 [DEBUG] [Thread-16340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:25:07.735 [DEBUG] [Thread-16340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:25:07.775 [DEBUG] [Thread-16340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:25:07.775 [DEBUG] [Thread-16340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:25:07.778 [DEBUG] [Thread-16340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:25:07.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:25:07.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:25:07.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:25:07.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:25:07.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:25:07.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:25:07.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:25:07.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:25:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:25:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.683741 -999.00  +24.20  31.18     21   +1.00 1 1 2 1 1   887    0 22.76 -25.99 ----- 27.4 31.2 293.6 46.0 25.9 -28.4 26.2 -28.0 26.5 -25.9 26.6 -27.1
2025-12-25T18:25:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:25:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:25:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.683741
2025-12-25T18:25:07.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:25:07.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:25:07.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:25:07.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:25:07.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:25:07.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:24:42', tmtdew=27.27, humidity=15.91, cloud=0.0, wind=40.32, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:24:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:25:07.808 [DEBUG] [Thread-16340] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:25:07.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-25T18:25:07.902 [DEBUG] [Thread-16343] [transport.py] [_log()] starting thread (client mode): 0xb6b4ec50
2025-12-25T18:25:07.902 [DEBUG] [Thread-16343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:25:07.916 [DEBUG] [Thread-16343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:25:07.917 [INFO] [Thread-16343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:07.924 [DEBUG] [Thread-16343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] client lang: <none>
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] server lang: <none>
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] kex follows: False
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] Compression: none
2025-12-25T18:25:07.925 [DEBUG] [Thread-16343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:25:07.984 [DEBUG] [Thread-16343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:25:07.985 [DEBUG] [Thread-16343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:25:07.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:25:07.986 [DEBUG] [Thread-16343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:25:07.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:25:08.040 [DEBUG] [Thread-16343] [transport.py] [_log()] userauth is OK
2025-12-25T18:25:08.040 [DEBUG] [Thread-16343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:25:08.040 [DEBUG] [Thread-16343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:25:08.041 [DEBUG] [Thread-16343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:25:08.041 [DEBUG] [Thread-16343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:25:08.059 [INFO] [Thread-16343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:25:08.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-25T18:25:08.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:25:08.937 [DEBUG] [Thread-16343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:25:08.938 [DEBUG] [Thread-16343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:25:08.986 [DEBUG] [Thread-16343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:25:08.986 [DEBUG] [Thread-16343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:25:08.995 [DEBUG] [Thread-16343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:25:09.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:25:09.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-25T18:25:09.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-25T18:25:09.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:25:09.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:25:09.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:25:09.032 [DEBUG] [Thread-16343] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:25:10.348 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:10.349 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:17.584 [DEBUG] [Thread-16345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:18.355 [DEBUG] [Thread-16346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:32.624 [DEBUG] [Thread-16347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:25:39.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:25:39.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:25:39.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-25T18:25:39.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 25, 14), 27.22, 15.98, 0.0, 37.16, 24.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:25:39.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:25:14
2025-12-25T18:25:39.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:25:40.008 [DEBUG] [Thread-16348] [transport.py] [_log()] starting thread (client mode): 0xb6bc1960
2025-12-25T18:25:40.008 [DEBUG] [Thread-16348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:25:40.028 [DEBUG] [Thread-16348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:25:40.028 [INFO] [Thread-16348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] client lang: <none>
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] server lang: <none>
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] kex follows: False
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:25:40.032 [DEBUG] [Thread-16348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:25:40.033 [DEBUG] [Thread-16348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:25:40.033 [DEBUG] [Thread-16348] [transport.py] [_log()] Compression: none
2025-12-25T18:25:40.033 [DEBUG] [Thread-16348] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:25:40.050 [DEBUG] [Thread-16348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:25:40.050 [DEBUG] [Thread-16348] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:25:40.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:25:40.051 [DEBUG] [Thread-16348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:25:40.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:25:40.054 [DEBUG] [Thread-16348] [transport.py] [_log()] userauth is OK
2025-12-25T18:25:40.054 [DEBUG] [Thread-16348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:25:40.054 [DEBUG] [Thread-16348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:25:40.054 [DEBUG] [Thread-16348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:25:40.054 [DEBUG] [Thread-16348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:25:40.079 [INFO] [Thread-16348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:25:40.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:25:40.704 [DEBUG] [Thread-16348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:25:40.705 [DEBUG] [Thread-16348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:25:40.705 [DEBUG] [Thread-16348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:25:40.746 [DEBUG] [Thread-16348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:25:40.746 [DEBUG] [Thread-16348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:25:40.749 [DEBUG] [Thread-16348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:25:40.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:25:40.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:25:40.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:25:40.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:25:40.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:25:40.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:25:40.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:25:40.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:25:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:25:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.684088 -999.00  +24.00  42.76     22   +1.00 1 1 2 1 1   887    0 22.03 -32.42 ----- 34.7 42.8 296.6 49.6 25.8 -29.0 26.1 -28.5 26.4 -26.1 26.5 -27.5
2025-12-25T18:25:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:25:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:25:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.684088
2025-12-25T18:25:40.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:25:40.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:25:40.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:25:40.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:25:40.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:25:40.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:25:14', tmtdew=27.22, humidity=15.98, cloud=0.0, wind=37.16, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:25:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:25:40.773 [DEBUG] [Thread-16348] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:25:40.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-25T18:25:40.867 [DEBUG] [Thread-16351] [transport.py] [_log()] starting thread (client mode): 0xb9593010
2025-12-25T18:25:40.867 [DEBUG] [Thread-16351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:25:40.881 [DEBUG] [Thread-16351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:25:40.881 [INFO] [Thread-16351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] client lang: <none>
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] server lang: <none>
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] kex follows: False
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] Compression: none
2025-12-25T18:25:40.889 [DEBUG] [Thread-16351] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:25:40.948 [DEBUG] [Thread-16351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:25:40.949 [DEBUG] [Thread-16351] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:25:40.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:25:40.950 [DEBUG] [Thread-16351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:25:40.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:25:41.003 [DEBUG] [Thread-16351] [transport.py] [_log()] userauth is OK
2025-12-25T18:25:41.004 [DEBUG] [Thread-16351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:25:41.004 [DEBUG] [Thread-16351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:25:41.004 [DEBUG] [Thread-16351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:25:41.004 [DEBUG] [Thread-16351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:25:41.024 [INFO] [Thread-16351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:25:41.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-25T18:25:41.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:25:41.882 [DEBUG] [Thread-16351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:25:41.882 [DEBUG] [Thread-16351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:25:41.930 [DEBUG] [Thread-16351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:25:41.930 [DEBUG] [Thread-16351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:25:41.939 [DEBUG] [Thread-16351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:25:41.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:25:41.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:25:41.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-25T18:25:41.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:25:41.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:25:41.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:25:41.976 [DEBUG] [Thread-16351] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:25:47.660 [DEBUG] [Thread-16353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:02.697 [DEBUG] [Thread-16354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:10.489 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:10.490 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:26:11.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:26:11.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-25T18:26:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 25, 46), 27.19, 16.46, 0.0, 33.26, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:26:12.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:25:46
2025-12-25T18:26:12.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:26:12.989 [DEBUG] [Thread-16355] [transport.py] [_log()] starting thread (client mode): 0xb95b0460
2025-12-25T18:26:12.989 [DEBUG] [Thread-16355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:26:13.010 [DEBUG] [Thread-16355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:26:13.010 [INFO] [Thread-16355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:26:13.013 [DEBUG] [Thread-16355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] client lang: <none>
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] server lang: <none>
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] kex follows: False
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] Compression: none
2025-12-25T18:26:13.014 [DEBUG] [Thread-16355] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:26:13.029 [DEBUG] [Thread-16355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:26:13.030 [DEBUG] [Thread-16355] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:26:13.031 [DEBUG] [Thread-16355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:26:13.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:26:13.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:26:13.033 [DEBUG] [Thread-16355] [transport.py] [_log()] userauth is OK
2025-12-25T18:26:13.033 [DEBUG] [Thread-16355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:26:13.033 [DEBUG] [Thread-16355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:26:13.033 [DEBUG] [Thread-16355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:26:13.033 [DEBUG] [Thread-16355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:26:13.057 [INFO] [Thread-16355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:26:13.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:26:13.699 [DEBUG] [Thread-16355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:26:13.699 [DEBUG] [Thread-16355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:26:13.700 [DEBUG] [Thread-16355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:26:13.740 [DEBUG] [Thread-16355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:26:13.740 [DEBUG] [Thread-16355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:26:13.744 [DEBUG] [Thread-16355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:26:13.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:26:13.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:26:13.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:26:13.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:26:13.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:26:13.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:26:13.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:26:13.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:26:13.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:26:13.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.684435 -999.00  +23.90  35.62     22   +1.20 1 1 2 1 1   887    0 22.29 -36.34 ----- 39.0 35.6 297.0 43.3 25.8 -28.4 26.0 -27.8 26.4 -26.4 26.5 -26.7
2025-12-25T18:26:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:26:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:26:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.684435
2025-12-25T18:26:13.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:26:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:26:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:26:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:26:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:26:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:25:46', tmtdew=27.19, humidity=16.46, cloud=0.0, wind=33.26, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:25:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:26:13.769 [DEBUG] [Thread-16355] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:26:13.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-25T18:26:13.863 [DEBUG] [Thread-16358] [transport.py] [_log()] starting thread (client mode): 0xb9590910
2025-12-25T18:26:13.863 [DEBUG] [Thread-16358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:26:13.878 [DEBUG] [Thread-16358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:26:13.878 [INFO] [Thread-16358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:26:13.885 [DEBUG] [Thread-16358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:26:13.885 [DEBUG] [Thread-16358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:26:13.885 [DEBUG] [Thread-16358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:26:13.885 [DEBUG] [Thread-16358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] client lang: <none>
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] server lang: <none>
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] kex follows: False
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:26:13.886 [DEBUG] [Thread-16358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:26:13.887 [DEBUG] [Thread-16358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:26:13.887 [DEBUG] [Thread-16358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:26:13.887 [DEBUG] [Thread-16358] [transport.py] [_log()] Compression: none
2025-12-25T18:26:13.887 [DEBUG] [Thread-16358] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:26:13.944 [DEBUG] [Thread-16358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:26:13.945 [DEBUG] [Thread-16358] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:26:13.946 [DEBUG] [Thread-16358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:26:13.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:26:13.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:26:14.000 [DEBUG] [Thread-16358] [transport.py] [_log()] userauth is OK
2025-12-25T18:26:14.000 [DEBUG] [Thread-16358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:26:14.000 [DEBUG] [Thread-16358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:26:14.000 [DEBUG] [Thread-16358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:26:14.001 [DEBUG] [Thread-16358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:26:14.019 [INFO] [Thread-16358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:26:14.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-25T18:26:14.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:26:14.900 [DEBUG] [Thread-16358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:26:14.900 [DEBUG] [Thread-16358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:26:14.948 [DEBUG] [Thread-16358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:26:14.948 [DEBUG] [Thread-16358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:26:14.957 [DEBUG] [Thread-16358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:26:14.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:26:14.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:26:14.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-25T18:26:14.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:26:14.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:26:14.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:26:14.994 [DEBUG] [Thread-16358] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:26:17.733 [DEBUG] [Thread-16360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:18.388 [DEBUG] [Thread-16361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:32.784 [DEBUG] [Thread-16362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:45.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:26:45.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:26:45.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:26:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 26, 18), 27.18, 16.48, 0.0, 32.04, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:26:45.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:26:18
2025-12-25T18:26:45.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:26:46.003 [DEBUG] [Thread-16363] [transport.py] [_log()] starting thread (client mode): 0xb9590f40
2025-12-25T18:26:46.003 [DEBUG] [Thread-16363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:26:46.023 [DEBUG] [Thread-16363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:26:46.023 [INFO] [Thread-16363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] client lang: <none>
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] server lang: <none>
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] kex follows: False
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:26:46.026 [DEBUG] [Thread-16363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:26:46.027 [DEBUG] [Thread-16363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:26:46.027 [DEBUG] [Thread-16363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:26:46.027 [DEBUG] [Thread-16363] [transport.py] [_log()] Compression: none
2025-12-25T18:26:46.027 [DEBUG] [Thread-16363] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:26:46.035 [DEBUG] [Thread-16363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:26:46.036 [DEBUG] [Thread-16363] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:26:46.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:26:46.036 [DEBUG] [Thread-16363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:26:46.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:26:46.081 [DEBUG] [Thread-16363] [transport.py] [_log()] userauth is OK
2025-12-25T18:26:46.081 [DEBUG] [Thread-16363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:26:46.081 [DEBUG] [Thread-16363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:26:46.081 [DEBUG] [Thread-16363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:26:46.081 [DEBUG] [Thread-16363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:26:46.102 [INFO] [Thread-16363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:26:46.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:26:46.718 [DEBUG] [Thread-16363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:26:46.718 [DEBUG] [Thread-16363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:26:46.718 [DEBUG] [Thread-16363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:26:46.759 [DEBUG] [Thread-16363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:26:46.759 [DEBUG] [Thread-16363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:26:46.762 [DEBUG] [Thread-16363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:26:46.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:26:46.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:26:46.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:26:46.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:26:46.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:26:46.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:26:46.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:26:46.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:26:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:26:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.684783 -999.00  +24.00  33.25     22   +1.30 1 1 2 1 1   887    0 22.37 -42.86 ----- 35.5 33.2 298.0 37.4 25.8 -27.8 26.0 -27.2 26.4 -25.9 26.5 -26.3
2025-12-25T18:26:46.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:26:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:26:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.684783
2025-12-25T18:26:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:26:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:26:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:26:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:26:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:26:46.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:26:18', tmtdew=27.18, humidity=16.48, cloud=0.0, wind=32.04, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:26:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:26:46.786 [DEBUG] [Thread-16363] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:26:46.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-25T18:26:46.880 [DEBUG] [Thread-16366] [transport.py] [_log()] starting thread (client mode): 0xb95b1780
2025-12-25T18:26:46.880 [DEBUG] [Thread-16366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:26:46.895 [DEBUG] [Thread-16366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:26:46.895 [INFO] [Thread-16366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:26:46.902 [DEBUG] [Thread-16366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:26:46.902 [DEBUG] [Thread-16366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] client lang: <none>
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] server lang: <none>
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] kex follows: False
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:26:46.903 [DEBUG] [Thread-16366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:26:46.904 [DEBUG] [Thread-16366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:26:46.904 [DEBUG] [Thread-16366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:26:46.904 [DEBUG] [Thread-16366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:26:46.904 [DEBUG] [Thread-16366] [transport.py] [_log()] Compression: none
2025-12-25T18:26:46.904 [DEBUG] [Thread-16366] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:26:46.962 [DEBUG] [Thread-16366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:26:46.962 [DEBUG] [Thread-16366] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:26:46.962 [DEBUG] [Thread-16366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:26:46.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:26:46.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:26:47.023 [DEBUG] [Thread-16366] [transport.py] [_log()] userauth is OK
2025-12-25T18:26:47.023 [DEBUG] [Thread-16366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:26:47.023 [DEBUG] [Thread-16366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:26:47.023 [DEBUG] [Thread-16366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:26:47.023 [DEBUG] [Thread-16366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:26:47.038 [INFO] [Thread-16366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:26:47.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:26:47.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:26:47.815 [DEBUG] [Thread-16368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:26:47.858 [DEBUG] [Thread-16366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:26:47.858 [DEBUG] [Thread-16366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:26:47.906 [DEBUG] [Thread-16366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:26:47.906 [DEBUG] [Thread-16366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:26:47.915 [DEBUG] [Thread-16366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:26:47.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:26:47.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:26:47.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-25T18:26:47.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:26:47.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:26:47.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:26:47.951 [DEBUG] [Thread-16366] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:27:02.868 [DEBUG] [Thread-16369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:10.630 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:10.631 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:17.899 [DEBUG] [Thread-16370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:27:17.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:27:17.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-25T18:27:18.416 [DEBUG] [Thread-16371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 26, 50), 27.2, 16.39, 0.0, 33.35, 24.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:27:18.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:26:50
2025-12-25T18:27:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:27:19.007 [DEBUG] [Thread-16372] [transport.py] [_log()] starting thread (client mode): 0xb95b1f30
2025-12-25T18:27:19.007 [DEBUG] [Thread-16372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:27:19.028 [DEBUG] [Thread-16372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:27:19.029 [INFO] [Thread-16372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] client lang: <none>
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] server lang: <none>
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] kex follows: False
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] Compression: none
2025-12-25T18:27:19.032 [DEBUG] [Thread-16372] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:27:19.046 [DEBUG] [Thread-16372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:27:19.046 [DEBUG] [Thread-16372] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:27:19.046 [DEBUG] [Thread-16372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:27:19.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:27:19.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:27:19.047 [DEBUG] [Thread-16372] [transport.py] [_log()] userauth is OK
2025-12-25T18:27:19.047 [DEBUG] [Thread-16372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:27:19.047 [DEBUG] [Thread-16372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:27:19.047 [DEBUG] [Thread-16372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:27:19.047 [DEBUG] [Thread-16372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:27:19.062 [INFO] [Thread-16372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:27:19.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:27:19.713 [DEBUG] [Thread-16372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:27:19.714 [DEBUG] [Thread-16372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:27:19.714 [DEBUG] [Thread-16372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:27:19.755 [DEBUG] [Thread-16372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:27:19.755 [DEBUG] [Thread-16372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:27:19.759 [DEBUG] [Thread-16372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:27:19.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:27:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:27:19.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:27:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:27:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:27:19.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:27:19.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:27:19.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:27:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:27:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.685477 -999.00  +23.90  24.60     22   +1.30 1 1 1 1 1   887    0 21.38 -47.90 ----- 24.8 24.6 296.2 38.0 25.7 -27.7 26.0 -27.2 26.2 -24.6 26.3 -26.4
2025-12-25T18:27:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:27:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:27:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.685477
2025-12-25T18:27:19.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:27:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:27:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:27:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:27:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:27:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:26:50', tmtdew=27.2, humidity=16.39, cloud=0.0, wind=33.35, temperature=24.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:27:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:27:19.785 [DEBUG] [Thread-16372] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:27:19.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-25T18:27:19.880 [DEBUG] [Thread-16375] [transport.py] [_log()] starting thread (client mode): 0xb95b0f10
2025-12-25T18:27:19.880 [DEBUG] [Thread-16375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:27:19.895 [DEBUG] [Thread-16375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:27:19.895 [INFO] [Thread-16375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] client lang: <none>
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] server lang: <none>
2025-12-25T18:27:19.903 [DEBUG] [Thread-16375] [transport.py] [_log()] kex follows: False
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] Compression: none
2025-12-25T18:27:19.904 [DEBUG] [Thread-16375] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:27:19.960 [DEBUG] [Thread-16375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:27:19.961 [DEBUG] [Thread-16375] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:27:19.962 [DEBUG] [Thread-16375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:27:19.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:27:19.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:27:20.016 [DEBUG] [Thread-16375] [transport.py] [_log()] userauth is OK
2025-12-25T18:27:20.017 [DEBUG] [Thread-16375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:27:20.017 [DEBUG] [Thread-16375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:27:20.017 [DEBUG] [Thread-16375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:27:20.017 [DEBUG] [Thread-16375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:27:20.035 [INFO] [Thread-16375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:27:20.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-25T18:27:20.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:27:20.892 [DEBUG] [Thread-16375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:27:20.892 [DEBUG] [Thread-16375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:27:20.939 [DEBUG] [Thread-16375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:27:20.940 [DEBUG] [Thread-16375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:27:20.948 [DEBUG] [Thread-16375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:27:20.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:27:20.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:27:20.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-25T18:27:20.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:27:20.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:27:20.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:27:20.982 [DEBUG] [Thread-16375] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:27:32.931 [DEBUG] [Thread-16377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:47.982 [DEBUG] [Thread-16378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:27:50.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:27:50.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:27:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:27:51.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 27, 22), 27.16, 16.46, 0.0, 32.94, 24.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:27:51.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:27:22
2025-12-25T18:27:51.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:27:51.970 [DEBUG] [Thread-16379] [transport.py] [_log()] starting thread (client mode): 0xb6b21bd0
2025-12-25T18:27:51.971 [DEBUG] [Thread-16379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:27:51.991 [DEBUG] [Thread-16379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:27:51.991 [INFO] [Thread-16379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:27:51.994 [DEBUG] [Thread-16379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:27:51.994 [DEBUG] [Thread-16379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:27:51.994 [DEBUG] [Thread-16379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:27:51.994 [DEBUG] [Thread-16379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] client lang: <none>
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] server lang: <none>
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] kex follows: False
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:27:51.995 [DEBUG] [Thread-16379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:27:51.996 [DEBUG] [Thread-16379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:27:51.996 [DEBUG] [Thread-16379] [transport.py] [_log()] Compression: none
2025-12-25T18:27:51.996 [DEBUG] [Thread-16379] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:27:52.014 [DEBUG] [Thread-16379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:27:52.014 [DEBUG] [Thread-16379] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:27:52.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:27:52.015 [DEBUG] [Thread-16379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:27:52.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:27:52.017 [DEBUG] [Thread-16379] [transport.py] [_log()] userauth is OK
2025-12-25T18:27:52.017 [DEBUG] [Thread-16379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:27:52.017 [DEBUG] [Thread-16379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:27:52.017 [DEBUG] [Thread-16379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:27:52.017 [DEBUG] [Thread-16379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:27:52.042 [INFO] [Thread-16379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:27:52.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:27:52.713 [DEBUG] [Thread-16379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:27:52.713 [DEBUG] [Thread-16379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:27:52.713 [DEBUG] [Thread-16379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:27:52.754 [DEBUG] [Thread-16379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:27:52.754 [DEBUG] [Thread-16379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:27:52.756 [DEBUG] [Thread-16379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:27:52.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:27:52.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:27:52.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:27:52.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:27:52.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:27:52.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:27:52.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:27:52.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:27:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:27:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.685824 -999.00  +24.10  25.32     22   +1.50 1 1 1 1 1   887    0 21.88 -54.67 ----- 25.3 25.3 301.2 35.6 25.7 -27.7 26.0 -26.9 26.3 -24.4 26.4 -26.1
2025-12-25T18:27:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:27:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:27:52.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.685824
2025-12-25T18:27:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:27:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:27:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:27:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:27:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:27:52.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:27:22', tmtdew=27.16, humidity=16.46, cloud=0.0, wind=32.94, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:27:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:27:52.776 [DEBUG] [Thread-16379] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:27:52.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-25T18:27:52.860 [DEBUG] [Thread-16382] [transport.py] [_log()] starting thread (client mode): 0xb6bc0790
2025-12-25T18:27:52.860 [DEBUG] [Thread-16382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:27:52.875 [DEBUG] [Thread-16382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:27:52.875 [INFO] [Thread-16382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] client lang: <none>
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] server lang: <none>
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] kex follows: False
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] Compression: none
2025-12-25T18:27:52.882 [DEBUG] [Thread-16382] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:27:52.942 [DEBUG] [Thread-16382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:27:52.942 [DEBUG] [Thread-16382] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:27:52.942 [DEBUG] [Thread-16382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:27:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:27:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:27:52.999 [DEBUG] [Thread-16382] [transport.py] [_log()] userauth is OK
2025-12-25T18:27:52.999 [DEBUG] [Thread-16382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:27:52.999 [DEBUG] [Thread-16382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:27:52.999 [DEBUG] [Thread-16382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:27:52.999 [DEBUG] [Thread-16382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:27:53.013 [INFO] [Thread-16382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:27:53.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-25T18:27:53.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:27:53.850 [DEBUG] [Thread-16382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:27:53.850 [DEBUG] [Thread-16382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:27:53.897 [DEBUG] [Thread-16382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:27:53.898 [DEBUG] [Thread-16382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:27:53.906 [DEBUG] [Thread-16382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:27:53.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:27: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')
2025-12-25T18:27:53.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:27:53.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:27:53.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:27:53.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:27:53.938 [DEBUG] [Thread-16382] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:28:03.009 [DEBUG] [Thread-16384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:10.778 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:10.779 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:18.065 [DEBUG] [Thread-16385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:18.450 [DEBUG] [Thread-16386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:23.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:28:23.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:28:23.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-25T18:28:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 27, 54), 26.78, 16.59, 0.0, 33.17, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:28:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:27:54
2025-12-25T18:28:24.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:28:24.953 [DEBUG] [Thread-16387] [transport.py] [_log()] starting thread (client mode): 0xb6b23790
2025-12-25T18:28:24.953 [DEBUG] [Thread-16387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:28:24.974 [DEBUG] [Thread-16387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:28:24.974 [INFO] [Thread-16387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] client lang: <none>
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] server lang: <none>
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] kex follows: False
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] Compression: none
2025-12-25T18:28:24.978 [DEBUG] [Thread-16387] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:28:24.999 [DEBUG] [Thread-16387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:28:24.999 [DEBUG] [Thread-16387] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:28:25.000 [DEBUG] [Thread-16387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:28:25.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:28:25.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:28:25.002 [DEBUG] [Thread-16387] [transport.py] [_log()] userauth is OK
2025-12-25T18:28:25.002 [DEBUG] [Thread-16387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:28:25.002 [DEBUG] [Thread-16387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:28:25.002 [DEBUG] [Thread-16387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:28:25.002 [DEBUG] [Thread-16387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:28:25.037 [INFO] [Thread-16387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:28:25.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:28:25.686 [DEBUG] [Thread-16387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:28:25.694 [DEBUG] [Thread-16387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:28:25.695 [DEBUG] [Thread-16387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:28:25.728 [DEBUG] [Thread-16387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:28:25.728 [DEBUG] [Thread-16387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:28:25.730 [DEBUG] [Thread-16387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:28:25.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:28:25.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:28:25.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:28:25.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:28:25.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:28:25.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:28:25.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:28:25.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:28:25.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:28:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.686172 -999.00  +24.10  26.51     23   +1.70 1 1 1 1 1   887    0 22.28 -55.70 ----- 34.2 26.5 292.8 38.7 25.8 -27.5 26.0 -26.8 26.3 -24.9 26.4 -26.0
2025-12-25T18:28:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:28:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:28:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.686172
2025-12-25T18:28:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:28:25.755 [DEBUG] [Thread-16387] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:28:25.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:28:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:28:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:28:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:28:25.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:27:54', tmtdew=26.78, humidity=16.59, cloud=0.0, wind=33.17, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:28:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:28:25.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-25T18:28:25.858 [DEBUG] [Thread-16390] [transport.py] [_log()] starting thread (client mode): 0xb6b239a0
2025-12-25T18:28:25.858 [DEBUG] [Thread-16390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:28:25.873 [DEBUG] [Thread-16390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:28:25.873 [INFO] [Thread-16390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:28:25.880 [DEBUG] [Thread-16390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] client lang: <none>
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] server lang: <none>
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] kex follows: False
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] Compression: none
2025-12-25T18:28:25.881 [DEBUG] [Thread-16390] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:28:25.940 [DEBUG] [Thread-16390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:28:25.941 [DEBUG] [Thread-16390] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:28:25.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:28:25.942 [DEBUG] [Thread-16390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:28:25.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:28:25.997 [DEBUG] [Thread-16390] [transport.py] [_log()] userauth is OK
2025-12-25T18:28:25.997 [DEBUG] [Thread-16390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:28:25.997 [DEBUG] [Thread-16390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:28:25.998 [DEBUG] [Thread-16390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:28:25.998 [DEBUG] [Thread-16390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:28:26.017 [INFO] [Thread-16390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:28:26.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-25T18:28:26.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:28:26.840 [DEBUG] [Thread-16390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:28:26.840 [DEBUG] [Thread-16390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:28:26.888 [DEBUG] [Thread-16390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:28:26.888 [DEBUG] [Thread-16390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:28:26.898 [DEBUG] [Thread-16390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:28:26.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:28:26.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-25T18:28:26.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:28:26.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:28:26.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:28:26.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:28:26.934 [DEBUG] [Thread-16390] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:28:33.099 [DEBUG] [Thread-16392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:48.135 [DEBUG] [Thread-16393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:28:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:28:56.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:28: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-25T18:28:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 28, 26), 26.75, 16.63, 0.0, 32.08, 24.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:28:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:28:26
2025-12-25T18:28:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:28:57.929 [DEBUG] [Thread-16394] [transport.py] [_log()] starting thread (client mode): 0xb95b38e0
2025-12-25T18:28:57.929 [DEBUG] [Thread-16394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:28:57.949 [DEBUG] [Thread-16394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:28:57.949 [INFO] [Thread-16394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:28:57.952 [DEBUG] [Thread-16394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:28:57.952 [DEBUG] [Thread-16394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:28:57.952 [DEBUG] [Thread-16394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:28:57.952 [DEBUG] [Thread-16394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:57.952 [DEBUG] [Thread-16394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] client lang: <none>
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] server lang: <none>
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] kex follows: False
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] Compression: none
2025-12-25T18:28:57.953 [DEBUG] [Thread-16394] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:28:57.971 [DEBUG] [Thread-16394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:28:57.972 [DEBUG] [Thread-16394] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:28:57.972 [DEBUG] [Thread-16394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:28:57.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:28:57.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:28:57.974 [DEBUG] [Thread-16394] [transport.py] [_log()] userauth is OK
2025-12-25T18:28:57.975 [DEBUG] [Thread-16394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:28:57.975 [DEBUG] [Thread-16394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:28:57.975 [DEBUG] [Thread-16394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:28:57.975 [DEBUG] [Thread-16394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:28:57.998 [INFO] [Thread-16394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:28:57.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:28:58.612 [DEBUG] [Thread-16394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:28:58.613 [DEBUG] [Thread-16394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:28:58.613 [DEBUG] [Thread-16394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:28:58.654 [DEBUG] [Thread-16394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:28:58.654 [DEBUG] [Thread-16394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:28:58.658 [DEBUG] [Thread-16394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:28:58.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:28:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:28:58.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:28:58.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:28:58.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:28:58.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:28:58.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:28:58.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:28:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:28:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.686519 -999.00  +24.10  31.93     23   +1.80 1 1 2 1 1   887    0 21.30 -68.03 ----- 31.3 31.9 296.8 37.9 25.7 -27.2 26.0 -26.8 26.3 -25.0 26.4 -26.0
2025-12-25T18:28:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:28:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:28:58.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.686519
2025-12-25T18:28:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:28:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:28:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:28:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:28:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:28:58.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:28:26', tmtdew=26.75, humidity=16.63, cloud=0.0, wind=32.08, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:28:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:28:58.687 [DEBUG] [Thread-16394] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:28:58.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-25T18:28:58.786 [DEBUG] [Thread-16397] [transport.py] [_log()] starting thread (client mode): 0xb95b2050
2025-12-25T18:28:58.786 [DEBUG] [Thread-16397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:28:58.800 [DEBUG] [Thread-16397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:28:58.801 [INFO] [Thread-16397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:28:58.808 [DEBUG] [Thread-16397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:28:58.808 [DEBUG] [Thread-16397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] client lang: <none>
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] server lang: <none>
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] kex follows: False
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] Compression: none
2025-12-25T18:28:58.809 [DEBUG] [Thread-16397] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:28:58.872 [DEBUG] [Thread-16397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:28:58.873 [DEBUG] [Thread-16397] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:28:58.873 [DEBUG] [Thread-16397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:28:58.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:28:58.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:28:58.932 [DEBUG] [Thread-16397] [transport.py] [_log()] userauth is OK
2025-12-25T18:28:58.932 [DEBUG] [Thread-16397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:28:58.932 [DEBUG] [Thread-16397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:28:58.932 [DEBUG] [Thread-16397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:28:58.932 [DEBUG] [Thread-16397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:28:58.955 [INFO] [Thread-16397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:28:58.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-25T18:28:58.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:28:59.834 [DEBUG] [Thread-16397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:28:59.834 [DEBUG] [Thread-16397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:28:59.882 [DEBUG] [Thread-16397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:28:59.883 [DEBUG] [Thread-16397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:28:59.891 [DEBUG] [Thread-16397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:28:59.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:28:59.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-25T18:28:59.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-25T18:28:59.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:28:59.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:28:59.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:28:59.923 [DEBUG] [Thread-16397] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:29:03.169 [DEBUG] [Thread-16399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:29:10.919 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:29:10.920 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:29:18.218 [DEBUG] [Thread-16400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:29:18.498 [DEBUG] [Thread-16401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:29:29.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:29:29.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:29:29.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-25T18:29:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 28, 58), 26.44, 17.21, 0.0, 33.84, 24.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:29:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:28:58
2025-12-25T18:29:30.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:29:30.929 [DEBUG] [Thread-16402] [transport.py] [_log()] starting thread (client mode): 0xb95b0dc0
2025-12-25T18:29:30.929 [DEBUG] [Thread-16402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:29:30.949 [DEBUG] [Thread-16402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:29:30.949 [INFO] [Thread-16402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:29:30.952 [DEBUG] [Thread-16402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] client lang: <none>
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] server lang: <none>
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] kex follows: False
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:29:30.953 [DEBUG] [Thread-16402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:29:30.954 [DEBUG] [Thread-16402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:29:30.954 [DEBUG] [Thread-16402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:29:30.954 [DEBUG] [Thread-16402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:29:30.954 [DEBUG] [Thread-16402] [transport.py] [_log()] Compression: none
2025-12-25T18:29:30.954 [DEBUG] [Thread-16402] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:29:30.972 [DEBUG] [Thread-16402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:29:30.973 [DEBUG] [Thread-16402] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:29:30.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:29:30.975 [DEBUG] [Thread-16402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:29:30.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:29:30.976 [DEBUG] [Thread-16402] [transport.py] [_log()] userauth is OK
2025-12-25T18:29:30.977 [DEBUG] [Thread-16402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:29:30.977 [DEBUG] [Thread-16402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:29:30.977 [DEBUG] [Thread-16402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:29:30.977 [DEBUG] [Thread-16402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:29:31.002 [INFO] [Thread-16402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:29:31.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:29:31.624 [DEBUG] [Thread-16402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:29:31.624 [DEBUG] [Thread-16402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:29:31.624 [DEBUG] [Thread-16402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:29:31.665 [DEBUG] [Thread-16402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:29:31.665 [DEBUG] [Thread-16402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:29:31.668 [DEBUG] [Thread-16402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:29:31.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:29:31.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:29:31.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:29:31.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:29:31.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:29:31.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:29:31.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:29:31.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.686866 -999.00  +23.90  40.76     23   +1.80 1 1 2 1 1   887    0 20.67 -77.08 ----- 39.5 40.8 298.4 49.4 25.7 -27.9 25.9 -27.4 26.2 -27.0 26.3 -26.3
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.686866
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:29:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:28:58', tmtdew=26.44, humidity=17.21, cloud=0.0, wind=33.84, temperature=24.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:29:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:29:31.686 [DEBUG] [Thread-16402] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:29:31.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-25T18:29:31.769 [DEBUG] [Thread-16405] [transport.py] [_log()] starting thread (client mode): 0xb6b62fb0
2025-12-25T18:29:31.769 [DEBUG] [Thread-16405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:29:31.784 [DEBUG] [Thread-16405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:29:31.784 [INFO] [Thread-16405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] client lang: <none>
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] server lang: <none>
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] kex follows: False
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:29:31.791 [DEBUG] [Thread-16405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:29:31.792 [DEBUG] [Thread-16405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:29:31.792 [DEBUG] [Thread-16405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:29:31.792 [DEBUG] [Thread-16405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:29:31.792 [DEBUG] [Thread-16405] [transport.py] [_log()] Compression: none
2025-12-25T18:29:31.792 [DEBUG] [Thread-16405] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:29:31.851 [DEBUG] [Thread-16405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:29:31.851 [DEBUG] [Thread-16405] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:29:31.851 [DEBUG] [Thread-16405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:29:31.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:29:31.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:29:31.908 [DEBUG] [Thread-16405] [transport.py] [_log()] userauth is OK
2025-12-25T18:29:31.908 [DEBUG] [Thread-16405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:29:31.908 [DEBUG] [Thread-16405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:29:31.908 [DEBUG] [Thread-16405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:29:31.908 [DEBUG] [Thread-16405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:29:31.924 [INFO] [Thread-16405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:29:31.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-25T18:29:31.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:29:32.788 [DEBUG] [Thread-16405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:29:32.788 [DEBUG] [Thread-16405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:29:32.836 [DEBUG] [Thread-16405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:29:32.836 [DEBUG] [Thread-16405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:29:32.844 [DEBUG] [Thread-16405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:29:32.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:29:32.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:29:32.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-25T18:29:32.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:29:32.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:29:32.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:29:32.876 [DEBUG] [Thread-16405] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:29:33.252 [DEBUG] [Thread-16407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:29:48.292 [DEBUG] [Thread-16408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:30:02.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:30:02.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-25T18:30:03.322 [DEBUG] [Thread-16409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:03.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 29, 30), 26.3, 17.36, 0.0, 38.3, 24.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:30:03.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:29:30
2025-12-25T18:30:03.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:30:03.939 [DEBUG] [Thread-16410] [transport.py] [_log()] starting thread (client mode): 0xb9590af0
2025-12-25T18:30:03.939 [DEBUG] [Thread-16410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:30:03.961 [DEBUG] [Thread-16410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:30:03.961 [INFO] [Thread-16410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] client lang: <none>
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] server lang: <none>
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] kex follows: False
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:30:03.965 [DEBUG] [Thread-16410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:30:03.966 [DEBUG] [Thread-16410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:30:03.966 [DEBUG] [Thread-16410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:30:03.966 [DEBUG] [Thread-16410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:30:03.966 [DEBUG] [Thread-16410] [transport.py] [_log()] Compression: none
2025-12-25T18:30:03.966 [DEBUG] [Thread-16410] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:30:03.979 [DEBUG] [Thread-16410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:30:03.980 [DEBUG] [Thread-16410] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:30:03.980 [DEBUG] [Thread-16410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:30:03.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:30:03.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:30:03.981 [DEBUG] [Thread-16410] [transport.py] [_log()] userauth is OK
2025-12-25T18:30:03.981 [DEBUG] [Thread-16410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:30:03.981 [DEBUG] [Thread-16410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:30:03.981 [DEBUG] [Thread-16410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:30:03.981 [DEBUG] [Thread-16410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:30:03.998 [INFO] [Thread-16410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:30:03.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:30:04.796 [DEBUG] [Thread-16410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:30:04.796 [DEBUG] [Thread-16410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:30:04.797 [DEBUG] [Thread-16410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:30:04.837 [DEBUG] [Thread-16410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:30:04.837 [DEBUG] [Thread-16410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:30:04.839 [DEBUG] [Thread-16410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:30:04.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:30:04.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:30:04.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:30:04.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:30:04.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:30:04.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:30:04.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:30:04.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.687213 -999.00  +23.90  28.04     23   +1.90 1 1 1 1 1   887    0 21.28 -82.96 ----- 29.6 28.0 296.9 48.7 25.6 -27.1 25.9 -26.7 26.2 -25.0 26.3 -25.8
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.687213
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:30:04.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:29:30', tmtdew=26.3, humidity=17.36, cloud=0.0, wind=38.3, temperature=24.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:29:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:30:04.861 [DEBUG] [Thread-16410] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:30:04.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-25T18:30:04.944 [DEBUG] [Thread-16413] [transport.py] [_log()] starting thread (client mode): 0xb95b05b0
2025-12-25T18:30:04.944 [DEBUG] [Thread-16413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:30:04.959 [DEBUG] [Thread-16413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:30:04.959 [INFO] [Thread-16413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:30:04.966 [DEBUG] [Thread-16413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:30:04.966 [DEBUG] [Thread-16413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:30:04.966 [DEBUG] [Thread-16413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:30:04.966 [DEBUG] [Thread-16413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:04.966 [DEBUG] [Thread-16413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:04.966 [DEBUG] [Thread-16413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] client lang: <none>
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] server lang: <none>
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] kex follows: False
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] Compression: none
2025-12-25T18:30:04.967 [DEBUG] [Thread-16413] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:30:05.026 [DEBUG] [Thread-16413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:30:05.026 [DEBUG] [Thread-16413] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:30:05.026 [DEBUG] [Thread-16413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:30:05.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:30:05.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:30:05.083 [DEBUG] [Thread-16413] [transport.py] [_log()] userauth is OK
2025-12-25T18:30:05.083 [DEBUG] [Thread-16413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:30:05.083 [DEBUG] [Thread-16413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:30:05.083 [DEBUG] [Thread-16413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:30:05.083 [DEBUG] [Thread-16413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:30:05.098 [INFO] [Thread-16413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:30:05.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:30:05.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:30:05.978 [DEBUG] [Thread-16413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:30:05.978 [DEBUG] [Thread-16413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:30:06.026 [DEBUG] [Thread-16413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:30:06.026 [DEBUG] [Thread-16413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:30:06.035 [DEBUG] [Thread-16413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:30:06.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:30:06.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:30:06.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-25T18:30:06.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:30:06.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:30:06.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:30:06.071 [DEBUG] [Thread-16413] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:30:11.058 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:11.059 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:18.352 [DEBUG] [Thread-16415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:18.534 [DEBUG] [Thread-16416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:33.400 [DEBUG] [Thread-16417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:30:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:30:36.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:30:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:30:36.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 30, 2), 26.28, 17.37, 0.0, 37.41, 24.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:30:36.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:30:02
2025-12-25T18:30:36.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:30:37.152 [DEBUG] [Thread-16418] [transport.py] [_log()] starting thread (client mode): 0xb95b1780
2025-12-25T18:30:37.152 [DEBUG] [Thread-16418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:30:37.172 [DEBUG] [Thread-16418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:30:37.172 [INFO] [Thread-16418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:30:37.175 [DEBUG] [Thread-16418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] client lang: <none>
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] server lang: <none>
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] kex follows: False
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] Compression: none
2025-12-25T18:30:37.176 [DEBUG] [Thread-16418] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:30:37.190 [DEBUG] [Thread-16418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:30:37.190 [DEBUG] [Thread-16418] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:30:37.190 [DEBUG] [Thread-16418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:30:37.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:30:37.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:30:37.191 [DEBUG] [Thread-16418] [transport.py] [_log()] userauth is OK
2025-12-25T18:30:37.191 [DEBUG] [Thread-16418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:30:37.191 [DEBUG] [Thread-16418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:30:37.191 [DEBUG] [Thread-16418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:30:37.192 [DEBUG] [Thread-16418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:30:37.211 [INFO] [Thread-16418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:30:37.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:30:37.850 [DEBUG] [Thread-16418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:30:37.850 [DEBUG] [Thread-16418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:30:37.850 [DEBUG] [Thread-16418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:30:37.892 [DEBUG] [Thread-16418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:30:37.892 [DEBUG] [Thread-16418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:30:37.894 [DEBUG] [Thread-16418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:30:37.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:30:37.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:30:37.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:30:37.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:30:37.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:30:37.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:30:37.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.687560 -999.00  +24.00  44.73     23   +1.90 1 1 2 1 1   887    0 20.67 -88.27 ----- 41.5 44.7 299.2 46.5 25.6 -27.8 25.9 -27.5 26.1 -25.4 26.2 -26.5
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.687560
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:30:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:30:02', tmtdew=26.28, humidity=17.37, cloud=0.0, wind=37.41, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:30:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:30:37.915 [DEBUG] [Thread-16418] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:30:37.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-25T18:30:38.000 [DEBUG] [Thread-16421] [transport.py] [_log()] starting thread (client mode): 0xb6bb7d00
2025-12-25T18:30:38.001 [DEBUG] [Thread-16421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:30:38.015 [DEBUG] [Thread-16421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:30:38.015 [INFO] [Thread-16421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] client lang: <none>
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] server lang: <none>
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] kex follows: False
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] Compression: none
2025-12-25T18:30:38.023 [DEBUG] [Thread-16421] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:30:38.079 [DEBUG] [Thread-16421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:30:38.079 [DEBUG] [Thread-16421] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:30:38.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:30:38.079 [DEBUG] [Thread-16421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:30:38.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:30:38.135 [DEBUG] [Thread-16421] [transport.py] [_log()] userauth is OK
2025-12-25T18:30:38.136 [DEBUG] [Thread-16421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:30:38.136 [DEBUG] [Thread-16421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:30:38.136 [DEBUG] [Thread-16421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:30:38.136 [DEBUG] [Thread-16421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:30:38.150 [INFO] [Thread-16421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:30:38.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-25T18:30:38.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:30:38.965 [DEBUG] [Thread-16421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:30:38.965 [DEBUG] [Thread-16421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:30:39.013 [DEBUG] [Thread-16421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:30:39.013 [DEBUG] [Thread-16421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:30:39.022 [DEBUG] [Thread-16421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:30:39.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:30:39.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:30:39.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-25T18:30:39.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:30:39.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:30:39.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:30:39.059 [DEBUG] [Thread-16421] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:30:48.433 [DEBUG] [Thread-16423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:03.491 [DEBUG] [Thread-16424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:09.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:31:09.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:31:09.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-25T18:31:09.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 30, 34), 26.17, 17.46, 0.0, 39.43, 24.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:31:09.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:30:34
2025-12-25T18:31:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:31:10.058 [DEBUG] [Thread-16425] [transport.py] [_log()] starting thread (client mode): 0xb6b20c40
2025-12-25T18:31:10.058 [DEBUG] [Thread-16425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:31:10.078 [DEBUG] [Thread-16425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:31:10.078 [INFO] [Thread-16425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] client lang: <none>
2025-12-25T18:31:10.082 [DEBUG] [Thread-16425] [transport.py] [_log()] server lang: <none>
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] kex follows: False
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] Compression: none
2025-12-25T18:31:10.083 [DEBUG] [Thread-16425] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:31:10.100 [DEBUG] [Thread-16425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:31:10.101 [DEBUG] [Thread-16425] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:31:10.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:31:10.103 [DEBUG] [Thread-16425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:31:10.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:31:10.105 [DEBUG] [Thread-16425] [transport.py] [_log()] userauth is OK
2025-12-25T18:31:10.105 [DEBUG] [Thread-16425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:31:10.105 [DEBUG] [Thread-16425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:31:10.105 [DEBUG] [Thread-16425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:31:10.105 [DEBUG] [Thread-16425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:31:10.127 [INFO] [Thread-16425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:31:10.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:31:10.765 [DEBUG] [Thread-16425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:31:10.765 [DEBUG] [Thread-16425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:31:10.766 [DEBUG] [Thread-16425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:31:10.806 [DEBUG] [Thread-16425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:31:10.806 [DEBUG] [Thread-16425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:31:10.810 [DEBUG] [Thread-16425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:31:10.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:31:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:31:10.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:31:10.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:31:10.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:31:10.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:31:10.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:31:10.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:31:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:31:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.687908 -999.00  +23.70  37.65     23   +1.70 1 1 2 1 1   887    0 20.64 -99.38 ----- 38.9 37.6 299.0 51.7 25.5 -28.2 25.8 -27.7 26.0 -26.1 26.1 -26.8
2025-12-25T18:31:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:31:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:31:10.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.687908
2025-12-25T18:31:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:31:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:31:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:31:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:31:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:31:10.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:30:34', tmtdew=26.17, humidity=17.46, cloud=0.0, wind=39.43, temperature=24.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:30:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:31:10.838 [DEBUG] [Thread-16425] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:31:10.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-25T18:31:10.942 [DEBUG] [Thread-16428] [transport.py] [_log()] starting thread (client mode): 0xb6b21030
2025-12-25T18:31:10.942 [DEBUG] [Thread-16428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:31:10.957 [DEBUG] [Thread-16428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:31:10.957 [INFO] [Thread-16428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] client lang: <none>
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] server lang: <none>
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] kex follows: False
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:31:10.965 [DEBUG] [Thread-16428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:31:10.966 [DEBUG] [Thread-16428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:31:10.966 [DEBUG] [Thread-16428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:31:10.966 [DEBUG] [Thread-16428] [transport.py] [_log()] Compression: none
2025-12-25T18:31:10.966 [DEBUG] [Thread-16428] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:31:11.025 [DEBUG] [Thread-16428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:31:11.025 [DEBUG] [Thread-16428] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:31:11.026 [DEBUG] [Thread-16428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:31:11.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:31:11.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:31:11.085 [DEBUG] [Thread-16428] [transport.py] [_log()] userauth is OK
2025-12-25T18:31:11.086 [DEBUG] [Thread-16428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:31:11.086 [DEBUG] [Thread-16428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:31:11.086 [DEBUG] [Thread-16428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:31:11.086 [DEBUG] [Thread-16428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:31:11.107 [INFO] [Thread-16428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:31:11.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-25T18:31:11.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:31:11.198 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:11.199 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:11.944 [DEBUG] [Thread-16428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:31:11.944 [DEBUG] [Thread-16428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:31:11.991 [DEBUG] [Thread-16428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:31:11.991 [DEBUG] [Thread-16428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:31:12.000 [DEBUG] [Thread-16428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:31:12.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:31:12.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:31:12.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:31:12.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:31:12.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:31:12.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:31:12.031 [DEBUG] [Thread-16428] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:31:18.521 [DEBUG] [Thread-16430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:18.577 [DEBUG] [Thread-16431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:33.574 [DEBUG] [Thread-16432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:31:42.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:31:42.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:31:42.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-25T18:31:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 31, 39), 26.01, 17.67, 0.0, 47.02, 24.18, 0, 0, 0, 2, 1, 0),)
2025-12-25T18:31:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:31:39
2025-12-25T18:31:42.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:31:43.049 [DEBUG] [Thread-16433] [transport.py] [_log()] starting thread (client mode): 0xb6b60be0
2025-12-25T18:31:43.049 [DEBUG] [Thread-16433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:31:43.074 [DEBUG] [Thread-16433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:31:43.075 [INFO] [Thread-16433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:31:43.078 [DEBUG] [Thread-16433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] client lang: <none>
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] server lang: <none>
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] kex follows: False
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] Compression: none
2025-12-25T18:31:43.079 [DEBUG] [Thread-16433] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:31:43.092 [DEBUG] [Thread-16433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:31:43.093 [DEBUG] [Thread-16433] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:31:43.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:31:43.093 [DEBUG] [Thread-16433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:31:43.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:31:43.095 [DEBUG] [Thread-16433] [transport.py] [_log()] userauth is OK
2025-12-25T18:31:43.096 [DEBUG] [Thread-16433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:31:43.096 [DEBUG] [Thread-16433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:31:43.096 [DEBUG] [Thread-16433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:31:43.096 [DEBUG] [Thread-16433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:31:43.129 [INFO] [Thread-16433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:31:43.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:31:43.785 [DEBUG] [Thread-16433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:31:43.786 [DEBUG] [Thread-16433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:31:43.786 [DEBUG] [Thread-16433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:31:43.827 [DEBUG] [Thread-16433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:31:43.827 [DEBUG] [Thread-16433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:31:43.831 [DEBUG] [Thread-16433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:31:43.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:31:43.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:31:43.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:31:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:31:43.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:31:43.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:31:43.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:31:43.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.688255 -999.00  +23.70  40.57     23   +1.80 1 1 2 1 1   887    0 20.11 -99.91 ----- 37.5 40.6 289.4 49.5 25.5 -27.4 25.8 -27.2 26.0 -25.3 26.1 -26.5
2025-12-25T18:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.688255
2025-12-25T18:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:31:39', tmtdew=26.01, humidity=17.67, cloud=0.0, wind=47.02, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:31:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:31:43.857 [DEBUG] [Thread-16433] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:31:43.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-25T18:31:43.960 [DEBUG] [Thread-16436] [transport.py] [_log()] starting thread (client mode): 0xb6bc0fd0
2025-12-25T18:31:43.960 [DEBUG] [Thread-16436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:31:43.975 [DEBUG] [Thread-16436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:31:43.975 [INFO] [Thread-16436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] client lang: <none>
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] server lang: <none>
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] kex follows: False
2025-12-25T18:31:43.982 [DEBUG] [Thread-16436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:31:43.983 [DEBUG] [Thread-16436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:31:43.983 [DEBUG] [Thread-16436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:31:43.983 [DEBUG] [Thread-16436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:31:43.983 [DEBUG] [Thread-16436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:31:43.983 [DEBUG] [Thread-16436] [transport.py] [_log()] Compression: none
2025-12-25T18:31:43.983 [DEBUG] [Thread-16436] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:31:44.039 [DEBUG] [Thread-16436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:31:44.040 [DEBUG] [Thread-16436] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:31:44.040 [DEBUG] [Thread-16436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:31:44.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:31:44.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:31:44.100 [DEBUG] [Thread-16436] [transport.py] [_log()] userauth is OK
2025-12-25T18:31:44.100 [DEBUG] [Thread-16436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:31:44.100 [DEBUG] [Thread-16436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:31:44.100 [DEBUG] [Thread-16436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:31:44.101 [DEBUG] [Thread-16436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:31:44.119 [INFO] [Thread-16436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:31:44.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-25T18:31:44.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:31:45.001 [DEBUG] [Thread-16436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:31:45.002 [DEBUG] [Thread-16436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:31:45.050 [DEBUG] [Thread-16436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:31:45.050 [DEBUG] [Thread-16436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:31:45.059 [DEBUG] [Thread-16436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:31:45.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:31:45.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-25T18:31:45.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-25T18:31:45.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:31:45.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:31:45.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:31:45.097 [DEBUG] [Thread-16436] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:31:48.606 [DEBUG] [Thread-16438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:03.658 [DEBUG] [Thread-16439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:11.338 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:11.339 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:15.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:32:15.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:32:15.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-25T18:32:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 32, 11), 25.9, 17.8, 0.0, 47.92, 24.14, 0, 0, 0, 2, 1, 0),)
2025-12-25T18:32:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:32:11
2025-12-25T18:32:15.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:32:16.102 [DEBUG] [Thread-16440] [transport.py] [_log()] starting thread (client mode): 0xb6bc2dd0
2025-12-25T18:32:16.102 [DEBUG] [Thread-16440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:32:16.122 [DEBUG] [Thread-16440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:32:16.122 [INFO] [Thread-16440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] client lang: <none>
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] server lang: <none>
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] kex follows: False
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] Compression: none
2025-12-25T18:32:16.124 [DEBUG] [Thread-16440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:32:16.133 [DEBUG] [Thread-16440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:32:16.134 [DEBUG] [Thread-16440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:32:16.134 [DEBUG] [Thread-16440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:32:16.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:32:16.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:32:16.136 [DEBUG] [Thread-16440] [transport.py] [_log()] userauth is OK
2025-12-25T18:32:16.136 [DEBUG] [Thread-16440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:32:16.136 [DEBUG] [Thread-16440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:32:16.136 [DEBUG] [Thread-16440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:32:16.136 [DEBUG] [Thread-16440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:32:16.162 [INFO] [Thread-16440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:32:16.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:32:16.795 [DEBUG] [Thread-16440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:32:16.795 [DEBUG] [Thread-16440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:32:16.795 [DEBUG] [Thread-16440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:32:16.836 [DEBUG] [Thread-16440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:32:16.836 [DEBUG] [Thread-16440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:32:16.840 [DEBUG] [Thread-16440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:32:16.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:32:16.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:32:16.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:32:16.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:32:16.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:32:16.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:32:16.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:32:16.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:32:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:32:16.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.688602 -999.00  +23.70  52.42     24   +1.90 1 1 2 1 1   887    0 20.23 -104.28 ----- 51.7 52.4 295.6 61.0 25.4 -27.8 25.7 -27.8 25.9 -25.5 26.0 -26.7
2025-12-25T18:32:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:32:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:32:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.688602
2025-12-25T18:32:16.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:32:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:32:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:32:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:32:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:32:16.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:32:11', tmtdew=25.9, humidity=17.8, cloud=0.0, wind=47.92, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:31:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:32:16.870 [DEBUG] [Thread-16440] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:32:16.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-25T18:32:16.964 [DEBUG] [Thread-16443] [transport.py] [_log()] starting thread (client mode): 0xb6b4fa30
2025-12-25T18:32:16.964 [DEBUG] [Thread-16443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:32:16.979 [DEBUG] [Thread-16443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:32:16.979 [INFO] [Thread-16443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:32:16.986 [DEBUG] [Thread-16443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:32:16.986 [DEBUG] [Thread-16443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] client lang: <none>
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] server lang: <none>
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] kex follows: False
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] Compression: none
2025-12-25T18:32:16.987 [DEBUG] [Thread-16443] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:32:17.044 [DEBUG] [Thread-16443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:32:17.045 [DEBUG] [Thread-16443] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:32:17.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:32:17.046 [DEBUG] [Thread-16443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:32:17.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:32:17.100 [DEBUG] [Thread-16443] [transport.py] [_log()] userauth is OK
2025-12-25T18:32:17.100 [DEBUG] [Thread-16443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:32:17.100 [DEBUG] [Thread-16443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:32:17.101 [DEBUG] [Thread-16443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:32:17.101 [DEBUG] [Thread-16443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:32:17.119 [INFO] [Thread-16443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:32:17.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-25T18:32:17.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:32:17.937 [DEBUG] [Thread-16443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:32:17.937 [DEBUG] [Thread-16443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:32:17.985 [DEBUG] [Thread-16443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:32:17.985 [DEBUG] [Thread-16443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:32:17.994 [DEBUG] [Thread-16443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:32:18.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:32:18.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-25T18:32:18.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-25T18:32:18.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:32:18.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:32:18.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:32:18.030 [DEBUG] [Thread-16443] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:32:18.609 [DEBUG] [Thread-16445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:18.693 [DEBUG] [Thread-16446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:33.739 [DEBUG] [Thread-16447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:32:48.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:32:48.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-25T18:32:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 32, 43), 25.66, 18.29, 0.0, 42.63, 24.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:32:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:32:43
2025-12-25T18:32:48.769 [DEBUG] [Thread-16448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:32:48.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:32:49.049 [DEBUG] [Thread-16449] [transport.py] [_log()] starting thread (client mode): 0xb6b61c30
2025-12-25T18:32:49.049 [DEBUG] [Thread-16449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:32:49.069 [DEBUG] [Thread-16449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:32:49.069 [INFO] [Thread-16449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:32:49.072 [DEBUG] [Thread-16449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:32:49.072 [DEBUG] [Thread-16449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:32:49.072 [DEBUG] [Thread-16449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] client lang: <none>
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] server lang: <none>
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] kex follows: False
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] Compression: none
2025-12-25T18:32:49.073 [DEBUG] [Thread-16449] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:32:49.091 [DEBUG] [Thread-16449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:32:49.092 [DEBUG] [Thread-16449] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:32:49.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:32:49.093 [DEBUG] [Thread-16449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:32:49.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:32:49.095 [DEBUG] [Thread-16449] [transport.py] [_log()] userauth is OK
2025-12-25T18:32:49.095 [DEBUG] [Thread-16449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:32:49.095 [DEBUG] [Thread-16449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:32:49.095 [DEBUG] [Thread-16449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:32:49.095 [DEBUG] [Thread-16449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:32:49.115 [INFO] [Thread-16449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:32:49.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:32:49.788 [DEBUG] [Thread-16449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:32:49.789 [DEBUG] [Thread-16449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:32:49.789 [DEBUG] [Thread-16449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:32:49.830 [DEBUG] [Thread-16449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:32:49.830 [DEBUG] [Thread-16449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:32:49.833 [DEBUG] [Thread-16449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:32:49.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:32:49.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:32:49.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:32:49.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:32:49.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:32:49.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:32:49.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:32:49.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:32:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:32:49.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.689296 -999.00  +23.60  40.74     24   +2.00 1 1 2 1 1   887    0 19.98 -117.58 ----- 42.1 40.7 290.2 47.5 25.3 -28.1 25.6 -27.7 25.8 -26.5 25.9 -26.4
2025-12-25T18:32:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:32:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:32:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.689296
2025-12-25T18:32:49.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:32:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:32:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:32:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:32:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:32:49.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:32:43', tmtdew=25.66, humidity=18.29, cloud=0.0, wind=42.63, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:32:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:32:49.860 [DEBUG] [Thread-16449] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:32:49.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-25T18:32:49.954 [DEBUG] [Thread-16452] [transport.py] [_log()] starting thread (client mode): 0xb6bc3610
2025-12-25T18:32:49.954 [DEBUG] [Thread-16452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:32:49.968 [DEBUG] [Thread-16452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:32:49.969 [INFO] [Thread-16452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:32:49.976 [DEBUG] [Thread-16452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:32:49.976 [DEBUG] [Thread-16452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] client lang: <none>
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] server lang: <none>
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] kex follows: False
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] Compression: none
2025-12-25T18:32:49.977 [DEBUG] [Thread-16452] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:32:50.036 [DEBUG] [Thread-16452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:32:50.037 [DEBUG] [Thread-16452] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:32:50.038 [DEBUG] [Thread-16452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:32:50.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:32:50.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:32:50.092 [DEBUG] [Thread-16452] [transport.py] [_log()] userauth is OK
2025-12-25T18:32:50.092 [DEBUG] [Thread-16452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:32:50.092 [DEBUG] [Thread-16452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:32:50.092 [DEBUG] [Thread-16452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:32:50.092 [DEBUG] [Thread-16452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:32:50.111 [INFO] [Thread-16452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:32:50.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-25T18:32:50.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:32:50.942 [DEBUG] [Thread-16452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:32:50.943 [DEBUG] [Thread-16452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:32:50.990 [DEBUG] [Thread-16452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:32:50.990 [DEBUG] [Thread-16452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:32:50.999 [DEBUG] [Thread-16452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:32:51.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:32:51.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-25T18:32:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:32:51.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:32:51.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:32:51.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:32:51.039 [DEBUG] [Thread-16452] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:33:03.801 [DEBUG] [Thread-16454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:11.478 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:11.479 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:18.642 [DEBUG] [Thread-16455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:18.844 [DEBUG] [Thread-16456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:21.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:33:21.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:33:21.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-25T18:33:21.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 33, 15), 25.63, 18.34, 0.0, 41.38, 24.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:33:21.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:33:15
2025-12-25T18:33:21.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:33:22.035 [DEBUG] [Thread-16457] [transport.py] [_log()] starting thread (client mode): 0xb6bb72b0
2025-12-25T18:33:22.035 [DEBUG] [Thread-16457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:33:22.056 [DEBUG] [Thread-16457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:33:22.056 [INFO] [Thread-16457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] client lang: <none>
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] server lang: <none>
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] kex follows: False
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] Compression: none
2025-12-25T18:33:22.059 [DEBUG] [Thread-16457] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:33:22.076 [DEBUG] [Thread-16457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:33:22.076 [DEBUG] [Thread-16457] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:33:22.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:33:22.077 [DEBUG] [Thread-16457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:33:22.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:33:22.079 [DEBUG] [Thread-16457] [transport.py] [_log()] userauth is OK
2025-12-25T18:33:22.079 [DEBUG] [Thread-16457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:33:22.080 [DEBUG] [Thread-16457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:33:22.080 [DEBUG] [Thread-16457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:33:22.080 [DEBUG] [Thread-16457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:33:22.103 [INFO] [Thread-16457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:33:22.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:33:22.698 [DEBUG] [Thread-16457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:33:22.698 [DEBUG] [Thread-16457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:33:22.698 [DEBUG] [Thread-16457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:33:22.739 [DEBUG] [Thread-16457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:33:22.739 [DEBUG] [Thread-16457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:33:22.743 [DEBUG] [Thread-16457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:33:22.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:33:22.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:33:22.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:33:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:33:22.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:33:22.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:33:22.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:33:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.689644 -999.00  +23.60  36.20     24   +2.10 1 1 2 1 1   887    0 19.66 -116.23 ----- 34.2 36.2 295.4 47.7 25.3 -27.5 25.6 -27.2 25.8 -25.5 25.9 -26.1
2025-12-25T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:33:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.689644
2025-12-25T18:33:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:33:22.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:33:22.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:33:22.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:33:22.769 [DEBUG] [Thread-16457] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:33:22.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:33:22.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:33:15', tmtdew=25.63, humidity=18.34, cloud=0.0, wind=41.38, temperature=24.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:33:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:33:22.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-25T18:33:22.858 [DEBUG] [Thread-16460] [transport.py] [_log()] starting thread (client mode): 0xb6b21e40
2025-12-25T18:33:22.858 [DEBUG] [Thread-16460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:33:22.873 [DEBUG] [Thread-16460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:33:22.873 [INFO] [Thread-16460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:33:22.880 [DEBUG] [Thread-16460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] client lang: <none>
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] server lang: <none>
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] kex follows: False
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] Compression: none
2025-12-25T18:33:22.881 [DEBUG] [Thread-16460] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:33:22.940 [DEBUG] [Thread-16460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:33:22.940 [DEBUG] [Thread-16460] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:33:22.941 [DEBUG] [Thread-16460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:33:22.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:33:22.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:33:22.996 [DEBUG] [Thread-16460] [transport.py] [_log()] userauth is OK
2025-12-25T18:33:22.996 [DEBUG] [Thread-16460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:33:22.996 [DEBUG] [Thread-16460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:33:22.997 [DEBUG] [Thread-16460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:33:22.997 [DEBUG] [Thread-16460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:33:23.015 [INFO] [Thread-16460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:33:23.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:33:23.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:33:23.873 [DEBUG] [Thread-16460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:33:23.873 [DEBUG] [Thread-16460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:33:23.921 [DEBUG] [Thread-16460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:33:23.921 [DEBUG] [Thread-16460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:33:23.930 [DEBUG] [Thread-16460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:33:23.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:33:23.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-25T18:33:23.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:33:23.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:33:23.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:33:23.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:33:23.967 [DEBUG] [Thread-16460] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:33:33.880 [DEBUG] [Thread-16462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:48.928 [DEBUG] [Thread-16463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:33:53.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:33:53.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:33:53.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-25T18:33:54.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 33, 47), 25.31, 18.8, 0.0, 37.3, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:33:54.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:33:47
2025-12-25T18:33:54.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:33:54.948 [DEBUG] [Thread-16464] [transport.py] [_log()] starting thread (client mode): 0xb6b7f310
2025-12-25T18:33:54.948 [DEBUG] [Thread-16464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:33:54.968 [DEBUG] [Thread-16464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:33:54.969 [INFO] [Thread-16464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] client lang: <none>
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] server lang: <none>
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] kex follows: False
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:33:54.972 [DEBUG] [Thread-16464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:33:54.973 [DEBUG] [Thread-16464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:33:54.973 [DEBUG] [Thread-16464] [transport.py] [_log()] Compression: none
2025-12-25T18:33:54.973 [DEBUG] [Thread-16464] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:33:54.992 [DEBUG] [Thread-16464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:33:54.993 [DEBUG] [Thread-16464] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:33:54.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:33:54.994 [DEBUG] [Thread-16464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:33:54.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:33:54.996 [DEBUG] [Thread-16464] [transport.py] [_log()] userauth is OK
2025-12-25T18:33:54.997 [DEBUG] [Thread-16464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:33:54.997 [DEBUG] [Thread-16464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:33:54.997 [DEBUG] [Thread-16464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:33:54.997 [DEBUG] [Thread-16464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:33:55.011 [INFO] [Thread-16464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:33:55.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:33:55.640 [DEBUG] [Thread-16464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:33:55.640 [DEBUG] [Thread-16464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:33:55.640 [DEBUG] [Thread-16464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:33:55.680 [DEBUG] [Thread-16464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:33:55.681 [DEBUG] [Thread-16464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:33:55.683 [DEBUG] [Thread-16464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:33:55.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:33:55.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:33:55.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:33:55.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:33:55.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:33:55.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:33:55.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:33:55.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:33:55.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:33:55.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.689991 -999.00  +23.80  26.21     24   +2.20 1 1 1 1 1   887    0 19.28 -130.89 ----- 33.2 26.2 293.2 34.9 25.3 -27.6 25.6 -26.9 25.8 -25.7 25.9 -26.2
2025-12-25T18:33:55.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:33:55.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:33:55.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.689991
2025-12-25T18:33:55.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:33:55.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:33:55.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:33:55.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:33:55.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:33:55.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:33:47', tmtdew=25.31, humidity=18.8, cloud=0.0, wind=37.3, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:33:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:33:55.705 [DEBUG] [Thread-16464] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:33:55.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-25T18:33:55.801 [DEBUG] [Thread-16467] [transport.py] [_log()] starting thread (client mode): 0xb6bb7df0
2025-12-25T18:33:55.801 [DEBUG] [Thread-16467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:33:55.816 [DEBUG] [Thread-16467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:33:55.816 [INFO] [Thread-16467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] client lang: <none>
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] server lang: <none>
2025-12-25T18:33:55.824 [DEBUG] [Thread-16467] [transport.py] [_log()] kex follows: False
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] Compression: none
2025-12-25T18:33:55.825 [DEBUG] [Thread-16467] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:33:55.884 [DEBUG] [Thread-16467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:33:55.885 [DEBUG] [Thread-16467] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:33:55.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:33:55.886 [DEBUG] [Thread-16467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:33:55.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:33:55.940 [DEBUG] [Thread-16467] [transport.py] [_log()] userauth is OK
2025-12-25T18:33:55.940 [DEBUG] [Thread-16467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:33:55.941 [DEBUG] [Thread-16467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:33:55.941 [DEBUG] [Thread-16467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:33:55.941 [DEBUG] [Thread-16467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:33:55.959 [INFO] [Thread-16467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:33:55.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-25T18:33:55.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:33:56.793 [DEBUG] [Thread-16467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:33:56.793 [DEBUG] [Thread-16467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:33:56.841 [DEBUG] [Thread-16467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:33:56.841 [DEBUG] [Thread-16467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:33:56.850 [DEBUG] [Thread-16467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:33:56.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:33:56.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-25T18:33:56.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-25T18:33:56.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:33:56.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:33:56.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:33:56.887 [DEBUG] [Thread-16467] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:34:03.958 [DEBUG] [Thread-16469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:11.620 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:11.621 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:18.677 [DEBUG] [Thread-16470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:19.010 [DEBUG] [Thread-16471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:26.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:34:26.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:34:26.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-25T18:34:27.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 34, 19), 25.34, 18.77, 0.0, 39.77, 23.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:34:27.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:34:19
2025-12-25T18:34:27.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:34:27.892 [DEBUG] [Thread-16472] [transport.py] [_log()] starting thread (client mode): 0xb6bc26e0
2025-12-25T18:34:27.892 [DEBUG] [Thread-16472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:34:27.913 [DEBUG] [Thread-16472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:34:27.913 [INFO] [Thread-16472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] client lang: <none>
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] server lang: <none>
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] kex follows: False
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] Compression: none
2025-12-25T18:34:27.916 [DEBUG] [Thread-16472] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:34:27.933 [DEBUG] [Thread-16472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:34:27.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:34:27.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] userauth is OK
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:34:27.934 [DEBUG] [Thread-16472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:34:27.943 [INFO] [Thread-16472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:34:27.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:34:28.583 [DEBUG] [Thread-16472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:34:28.583 [DEBUG] [Thread-16472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:34:28.583 [DEBUG] [Thread-16472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:34:28.623 [DEBUG] [Thread-16472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:34:28.623 [DEBUG] [Thread-16472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:34:28.626 [DEBUG] [Thread-16472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:34:28.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:34:28.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:34:28.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:34:28.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:34:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:34:28.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:34:28.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.690338 -999.00  +23.80  29.64     24   +2.10 1 1 1 1 1   887    0 19.51 -129.70 ----- 24.4 29.6 291.8 50.6 25.3 -27.6 25.6 -26.9 25.8 -24.7 25.9 -25.9
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.690338
2025-12-25T18:34:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:34:19', tmtdew=25.34, humidity=18.77, cloud=0.0, wind=39.77, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:34:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:34:28.645 [DEBUG] [Thread-16472] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:34:28.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-25T18:34:28.728 [DEBUG] [Thread-16475] [transport.py] [_log()] starting thread (client mode): 0xb6b4fd60
2025-12-25T18:34:28.728 [DEBUG] [Thread-16475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:34:28.743 [DEBUG] [Thread-16475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:34:28.743 [INFO] [Thread-16475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:34:28.750 [DEBUG] [Thread-16475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:34:28.750 [DEBUG] [Thread-16475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] client lang: <none>
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] server lang: <none>
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] kex follows: False
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] Compression: none
2025-12-25T18:34:28.751 [DEBUG] [Thread-16475] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:34:28.808 [DEBUG] [Thread-16475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:34:28.808 [DEBUG] [Thread-16475] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:34:28.808 [DEBUG] [Thread-16475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:34:28.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:34:28.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:34:28.863 [DEBUG] [Thread-16475] [transport.py] [_log()] userauth is OK
2025-12-25T18:34:28.863 [DEBUG] [Thread-16475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:34:28.863 [DEBUG] [Thread-16475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:34:28.864 [DEBUG] [Thread-16475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:34:28.864 [DEBUG] [Thread-16475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:34:28.879 [INFO] [Thread-16475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:34:28.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-25T18:34:28.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:34:29.681 [DEBUG] [Thread-16475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:34:29.681 [DEBUG] [Thread-16475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:34:29.729 [DEBUG] [Thread-16475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:34:29.729 [DEBUG] [Thread-16475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:34:29.738 [DEBUG] [Thread-16475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:34:29.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:34:29.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-25T18:34:29.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-25T18:34:29.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:34:29.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:34:29.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:34:29.769 [DEBUG] [Thread-16475] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:34:34.039 [DEBUG] [Thread-16477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:49.088 [DEBUG] [Thread-16478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:34:59.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:34:59.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:34:59.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-25T18:35:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 34, 51), 25.52, 18.34, 0.0, 35.22, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:35:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:34:51
2025-12-25T18:35:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:35:00.735 [DEBUG] [Thread-16479] [transport.py] [_log()] starting thread (client mode): 0xb6b7e6b0
2025-12-25T18:35:00.735 [DEBUG] [Thread-16479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:35:00.758 [DEBUG] [Thread-16479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:35:00.758 [INFO] [Thread-16479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:35:00.762 [DEBUG] [Thread-16479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:35:00.762 [DEBUG] [Thread-16479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] client lang: <none>
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] server lang: <none>
2025-12-25T18:35:00.763 [DEBUG] [Thread-16479] [transport.py] [_log()] kex follows: False
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] Compression: none
2025-12-25T18:35:00.764 [DEBUG] [Thread-16479] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:35:00.785 [DEBUG] [Thread-16479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:35:00.785 [DEBUG] [Thread-16479] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:35:00.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:35:00.786 [DEBUG] [Thread-16479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:35:00.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:35:00.829 [DEBUG] [Thread-16479] [transport.py] [_log()] userauth is OK
2025-12-25T18:35:00.829 [DEBUG] [Thread-16479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:35:00.829 [DEBUG] [Thread-16479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:35:00.829 [DEBUG] [Thread-16479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:35:00.830 [DEBUG] [Thread-16479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:35:00.855 [INFO] [Thread-16479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:35:00.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:35:01.485 [DEBUG] [Thread-16479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:35:01.486 [DEBUG] [Thread-16479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:35:01.486 [DEBUG] [Thread-16479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:35:01.526 [DEBUG] [Thread-16479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:35:01.526 [DEBUG] [Thread-16479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:35:01.528 [DEBUG] [Thread-16479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:35:01.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:35:01.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:35:01.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:35:01.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:35:01.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:35:01.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:35:01.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:35:01.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:35:01.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:35:01.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.690685 -999.00  +23.60  40.17     24   +1.90 1 1 2 1 1   887    0 19.27 -125.83 ----- 39.2 40.2 295.8 49.5 25.2 -27.7 25.6 -27.0 25.8 -25.2 25.8 -26.0
2025-12-25T18:35:01.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.690685
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:35:01.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:34:51', tmtdew=25.52, humidity=18.34, cloud=0.0, wind=35.22, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:34:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:35:01.549 [DEBUG] [Thread-16479] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:35:01.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-25T18:35:01.634 [DEBUG] [Thread-16482] [transport.py] [_log()] starting thread (client mode): 0xb6bc11e0
2025-12-25T18:35:01.634 [DEBUG] [Thread-16482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:35:01.653 [DEBUG] [Thread-16482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:35:01.653 [INFO] [Thread-16482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:35:01.661 [DEBUG] [Thread-16482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:35:01.661 [DEBUG] [Thread-16482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:35:01.661 [DEBUG] [Thread-16482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:35:01.661 [DEBUG] [Thread-16482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] client lang: <none>
2025-12-25T18:35:01.662 [DEBUG] [Thread-16482] [transport.py] [_log()] server lang: <none>
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] kex follows: False
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:35:01.663 [DEBUG] [Thread-16482] [transport.py] [_log()] Compression: none
2025-12-25T18:35:01.664 [DEBUG] [Thread-16482] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:35:01.721 [DEBUG] [Thread-16482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:35:01.721 [DEBUG] [Thread-16482] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:35:01.722 [DEBUG] [Thread-16482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:35:01.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:35:01.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:35:01.780 [DEBUG] [Thread-16482] [transport.py] [_log()] userauth is OK
2025-12-25T18:35:01.780 [DEBUG] [Thread-16482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:35:01.781 [DEBUG] [Thread-16482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:35:01.781 [DEBUG] [Thread-16482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:35:01.781 [DEBUG] [Thread-16482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:35:01.800 [INFO] [Thread-16482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:35:01.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-25T18:35:01.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:35:02.623 [DEBUG] [Thread-16482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:35:02.623 [DEBUG] [Thread-16482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:35:02.672 [DEBUG] [Thread-16482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:35:02.672 [DEBUG] [Thread-16482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:35:02.681 [DEBUG] [Thread-16482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:35:02.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:35:02.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-25T18:35:02.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-25T18:35:02.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:35:02.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:35:02.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:35:02.719 [DEBUG] [Thread-16482] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:35:04.119 [DEBUG] [Thread-16484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:35:11.762 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:35:11.763 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:35:18.728 [DEBUG] [Thread-16485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:35:19.157 [DEBUG] [Thread-16486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:35:32.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:35:32.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:35:32.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-25T18:35:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 35, 23), 25.49, 18.37, 0.0, 35.66, 24.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:35:33.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:35:23
2025-12-25T18:35:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:35:33.710 [DEBUG] [Thread-16487] [transport.py] [_log()] starting thread (client mode): 0xb6b7eb00
2025-12-25T18:35:33.710 [DEBUG] [Thread-16487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:35:33.731 [DEBUG] [Thread-16487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:35:33.731 [INFO] [Thread-16487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:35:33.734 [DEBUG] [Thread-16487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:35:33.734 [DEBUG] [Thread-16487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:35:33.734 [DEBUG] [Thread-16487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:35:33.734 [DEBUG] [Thread-16487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:33.734 [DEBUG] [Thread-16487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] client lang: <none>
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] server lang: <none>
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] kex follows: False
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] Compression: none
2025-12-25T18:35:33.735 [DEBUG] [Thread-16487] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:35:33.752 [DEBUG] [Thread-16487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:35:33.752 [DEBUG] [Thread-16487] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:35:33.753 [DEBUG] [Thread-16487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:35:33.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:35:33.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:35:33.755 [DEBUG] [Thread-16487] [transport.py] [_log()] userauth is OK
2025-12-25T18:35:33.755 [DEBUG] [Thread-16487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:35:33.755 [DEBUG] [Thread-16487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:35:33.755 [DEBUG] [Thread-16487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:35:33.756 [DEBUG] [Thread-16487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:35:33.781 [INFO] [Thread-16487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:35:33.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:35:34.192 [DEBUG] [Thread-16489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:35:34.440 [DEBUG] [Thread-16487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:35:34.440 [DEBUG] [Thread-16487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:35:34.440 [DEBUG] [Thread-16487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:35:34.481 [DEBUG] [Thread-16487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:35:34.481 [DEBUG] [Thread-16487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:35:34.485 [DEBUG] [Thread-16487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:35:34.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:35:34.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:35:34.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:35:34.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:35:34.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:35:34.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:35:34.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:35:34.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:35:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:35:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.691033 -999.00  +23.50  38.86     24   +1.90 1 1 2 1 1   887    0 19.39 -131.09 ----- 35.4 38.9 292.2 49.4 25.2 -27.8 25.5 -27.1 25.6 -26.5 25.8 -26.3
2025-12-25T18:35:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:35:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:35:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.691033
2025-12-25T18:35:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:35:34.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:35:34.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:35:34.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:35:34.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:35:34.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:35:23', tmtdew=25.49, humidity=18.37, cloud=0.0, wind=35.66, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:35:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:35:34.510 [DEBUG] [Thread-16487] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:35:34.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-25T18:35:34.604 [DEBUG] [Thread-16491] [transport.py] [_log()] starting thread (client mode): 0xb6bb6770
2025-12-25T18:35:34.604 [DEBUG] [Thread-16491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:35:34.619 [DEBUG] [Thread-16491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:35:34.619 [INFO] [Thread-16491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:35:34.626 [DEBUG] [Thread-16491] [transport.py] [_log()] client lang: <none>
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] server lang: <none>
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] kex follows: False
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] Compression: none
2025-12-25T18:35:34.627 [DEBUG] [Thread-16491] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:35:34.684 [DEBUG] [Thread-16491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:35:34.684 [DEBUG] [Thread-16491] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:35:34.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:35:34.686 [DEBUG] [Thread-16491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:35:34.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:35:34.740 [DEBUG] [Thread-16491] [transport.py] [_log()] userauth is OK
2025-12-25T18:35:34.741 [DEBUG] [Thread-16491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:35:34.741 [DEBUG] [Thread-16491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:35:34.741 [DEBUG] [Thread-16491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:35:34.741 [DEBUG] [Thread-16491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:35:34.760 [INFO] [Thread-16491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:35:34.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-25T18:35:34.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:35:35.622 [DEBUG] [Thread-16491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:35:35.622 [DEBUG] [Thread-16491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:35:35.671 [DEBUG] [Thread-16491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:35:35.672 [DEBUG] [Thread-16491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:35:35.680 [DEBUG] [Thread-16491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:35:35.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:35:35.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:35:35.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-25T18:35:35.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:35:35.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:35:35.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:35:35.713 [DEBUG] [Thread-16491] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:35:49.227 [DEBUG] [Thread-16493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:04.279 [DEBUG] [Thread-16494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:36:05.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:36:05.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:36:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 35, 55), 25.43, 18.55, 0.0, 33.21, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:36:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:35:55
2025-12-25T18:36:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:36:06.724 [DEBUG] [Thread-16495] [transport.py] [_log()] starting thread (client mode): 0xb6bf4a60
2025-12-25T18:36:06.725 [DEBUG] [Thread-16495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:36:06.745 [DEBUG] [Thread-16495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:36:06.745 [INFO] [Thread-16495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:36:06.746 [DEBUG] [Thread-16495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] client lang: <none>
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] server lang: <none>
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] kex follows: False
2025-12-25T18:36:06.747 [DEBUG] [Thread-16495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:36:06.748 [DEBUG] [Thread-16495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:36:06.748 [DEBUG] [Thread-16495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:36:06.748 [DEBUG] [Thread-16495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:36:06.748 [DEBUG] [Thread-16495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:36:06.748 [DEBUG] [Thread-16495] [transport.py] [_log()] Compression: none
2025-12-25T18:36:06.748 [DEBUG] [Thread-16495] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:36:06.759 [DEBUG] [Thread-16495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:36:06.760 [DEBUG] [Thread-16495] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:36:06.760 [DEBUG] [Thread-16495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:36:06.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:36:06.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:36:06.763 [DEBUG] [Thread-16495] [transport.py] [_log()] userauth is OK
2025-12-25T18:36:06.763 [DEBUG] [Thread-16495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:36:06.763 [DEBUG] [Thread-16495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:36:06.763 [DEBUG] [Thread-16495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:36:06.764 [DEBUG] [Thread-16495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:36:06.789 [INFO] [Thread-16495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:36:06.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:36:07.433 [DEBUG] [Thread-16495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:36:07.433 [DEBUG] [Thread-16495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:36:07.434 [DEBUG] [Thread-16495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:36:07.474 [DEBUG] [Thread-16495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:36:07.474 [DEBUG] [Thread-16495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:36:07.478 [DEBUG] [Thread-16495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:36:07.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:36:07.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:36:07.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:36:07.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:36:07.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:36:07.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:36:07.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:36:07.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.691380 -999.00  +23.50  36.58     24   +1.80 1 1 2 1 1   887    0 19.28 -120.15 ----- 38.2 36.6 294.6 45.4 25.2 -27.6 25.4 -27.3 25.6 -25.7 25.8 -26.3
2025-12-25T18:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.691380
2025-12-25T18:36:07.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:36:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:36:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:36:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:36:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:36:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:35:55', tmtdew=25.43, humidity=18.55, cloud=0.0, wind=33.21, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:35:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:36:07.505 [DEBUG] [Thread-16495] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:36:07.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-25T18:36:07.598 [DEBUG] [Thread-16498] [transport.py] [_log()] starting thread (client mode): 0xb6bf7670
2025-12-25T18:36:07.598 [DEBUG] [Thread-16498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:36:07.613 [DEBUG] [Thread-16498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:36:07.614 [INFO] [Thread-16498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:36:07.621 [DEBUG] [Thread-16498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:36:07.621 [DEBUG] [Thread-16498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:36:07.621 [DEBUG] [Thread-16498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:36:07.621 [DEBUG] [Thread-16498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] client lang: <none>
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] server lang: <none>
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] kex follows: False
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] Compression: none
2025-12-25T18:36:07.622 [DEBUG] [Thread-16498] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:36:07.680 [DEBUG] [Thread-16498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:36:07.680 [DEBUG] [Thread-16498] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:36:07.681 [DEBUG] [Thread-16498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:36:07.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:36:07.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:36:07.736 [DEBUG] [Thread-16498] [transport.py] [_log()] userauth is OK
2025-12-25T18:36:07.737 [DEBUG] [Thread-16498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:36:07.737 [DEBUG] [Thread-16498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:36:07.737 [DEBUG] [Thread-16498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:36:07.737 [DEBUG] [Thread-16498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:36:07.761 [INFO] [Thread-16498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:36:07.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-25T18:36:07.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:36:08.667 [DEBUG] [Thread-16498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:36:08.667 [DEBUG] [Thread-16498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:36:08.719 [DEBUG] [Thread-16498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:36:08.719 [DEBUG] [Thread-16498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:36:08.728 [DEBUG] [Thread-16498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:36:08.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:36:08.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-25T18:36:08.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-25T18:36:08.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:36:08.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:36:08.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:36:08.765 [DEBUG] [Thread-16498] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:36:11.901 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:11.902 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:18.761 [DEBUG] [Thread-16500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:19.315 [DEBUG] [Thread-16501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:34.367 [DEBUG] [Thread-16502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:36:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:36:38.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:36:38.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-25T18:36:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 36, 27), 25.56, 18.39, 0.0, 33.44, 23.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:36:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:36:27
2025-12-25T18:36:39.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:36:39.770 [DEBUG] [Thread-16503] [transport.py] [_log()] starting thread (client mode): 0xb6bf6a70
2025-12-25T18:36:39.770 [DEBUG] [Thread-16503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:36:39.789 [DEBUG] [Thread-16503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:36:39.789 [INFO] [Thread-16503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:36:39.790 [DEBUG] [Thread-16503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:36:39.790 [DEBUG] [Thread-16503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:36:39.790 [DEBUG] [Thread-16503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:36:39.790 [DEBUG] [Thread-16503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:39.790 [DEBUG] [Thread-16503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] client lang: <none>
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] server lang: <none>
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] kex follows: False
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] Compression: none
2025-12-25T18:36:39.791 [DEBUG] [Thread-16503] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:36:39.800 [DEBUG] [Thread-16503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:36:39.800 [DEBUG] [Thread-16503] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:36:39.800 [DEBUG] [Thread-16503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:36:39.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:36:39.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:36:39.802 [DEBUG] [Thread-16503] [transport.py] [_log()] userauth is OK
2025-12-25T18:36:39.802 [DEBUG] [Thread-16503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:36:39.802 [DEBUG] [Thread-16503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:36:39.802 [DEBUG] [Thread-16503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:36:39.802 [DEBUG] [Thread-16503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:36:39.821 [INFO] [Thread-16503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:36:39.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:36:40.414 [DEBUG] [Thread-16503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:36:40.415 [DEBUG] [Thread-16503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:36:40.415 [DEBUG] [Thread-16503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:36:40.456 [DEBUG] [Thread-16503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:36:40.456 [DEBUG] [Thread-16503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:36:40.459 [DEBUG] [Thread-16503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:36:40.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:36:40.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:36:40.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:36:40.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:36:40.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:36:40.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:36:40.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:36:40.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:36:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:36:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.691727 -999.00  +23.50  26.88     24   +1.90 1 1 1 1 1   887    0 18.83 -124.69 ----- 30.6 26.9 293.8 44.4 25.1 -27.1 25.5 -26.8 25.7 -25.1 25.8 -26.0
2025-12-25T18:36:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:36:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:36:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.691727
2025-12-25T18:36:40.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:36:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:36:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:36:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:36:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:36:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:36:27', tmtdew=25.56, humidity=18.39, cloud=0.0, wind=33.44, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:36:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:36:40.489 [DEBUG] [Thread-16503] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:36:40.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-25T18:36:40.582 [DEBUG] [Thread-16506] [transport.py] [_log()] starting thread (client mode): 0xb6b62fb0
2025-12-25T18:36:40.583 [DEBUG] [Thread-16506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:36:40.597 [DEBUG] [Thread-16506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:36:40.597 [INFO] [Thread-16506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] client lang: <none>
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] server lang: <none>
2025-12-25T18:36:40.605 [DEBUG] [Thread-16506] [transport.py] [_log()] kex follows: False
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] Compression: none
2025-12-25T18:36:40.606 [DEBUG] [Thread-16506] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:36:40.665 [DEBUG] [Thread-16506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:36:40.666 [DEBUG] [Thread-16506] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:36:40.667 [DEBUG] [Thread-16506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:36:40.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:36:40.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:36:40.722 [DEBUG] [Thread-16506] [transport.py] [_log()] userauth is OK
2025-12-25T18:36:40.722 [DEBUG] [Thread-16506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:36:40.722 [DEBUG] [Thread-16506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:36:40.722 [DEBUG] [Thread-16506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:36:40.723 [DEBUG] [Thread-16506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:36:40.742 [INFO] [Thread-16506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:36:40.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:36:40.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:36:41.600 [DEBUG] [Thread-16506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:36:41.600 [DEBUG] [Thread-16506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:36:41.648 [DEBUG] [Thread-16506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:36:41.648 [DEBUG] [Thread-16506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:36:41.657 [DEBUG] [Thread-16506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:36:41.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:36:41.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-25T18:36:41.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-25T18:36:41.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:36:41.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:36:41.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:36:41.694 [DEBUG] [Thread-16506] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:36:49.405 [DEBUG] [Thread-16508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:04.452 [DEBUG] [Thread-16509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:37:11.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:37:11.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-25T18:37:12.040 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:12.041 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 36, 59), 25.77, 17.79, 0.0, 35.24, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:37:12.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:36:59
2025-12-25T18:37:12.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:37:12.673 [DEBUG] [Thread-16510] [transport.py] [_log()] starting thread (client mode): 0xb9593ac0
2025-12-25T18:37:12.673 [DEBUG] [Thread-16510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:37:12.694 [DEBUG] [Thread-16510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:37:12.694 [INFO] [Thread-16510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:37:12.697 [DEBUG] [Thread-16510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:37:12.697 [DEBUG] [Thread-16510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] client lang: <none>
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] server lang: <none>
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] kex follows: False
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:37:12.698 [DEBUG] [Thread-16510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:37:12.699 [DEBUG] [Thread-16510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:37:12.699 [DEBUG] [Thread-16510] [transport.py] [_log()] Compression: none
2025-12-25T18:37:12.699 [DEBUG] [Thread-16510] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:37:12.716 [DEBUG] [Thread-16510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:37:12.717 [DEBUG] [Thread-16510] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:37:12.717 [DEBUG] [Thread-16510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:37:12.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:37:12.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:37:12.719 [DEBUG] [Thread-16510] [transport.py] [_log()] userauth is OK
2025-12-25T18:37:12.719 [DEBUG] [Thread-16510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:37:12.719 [DEBUG] [Thread-16510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:37:12.719 [DEBUG] [Thread-16510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:37:12.719 [DEBUG] [Thread-16510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:37:12.742 [INFO] [Thread-16510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:37:12.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:37:13.388 [DEBUG] [Thread-16510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:37:13.388 [DEBUG] [Thread-16510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:37:13.389 [DEBUG] [Thread-16510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:37:13.430 [DEBUG] [Thread-16510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:37:13.430 [DEBUG] [Thread-16510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:37:13.432 [DEBUG] [Thread-16510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:37:13.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:37:13.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:37:13.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:37:13.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:37:13.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:37:13.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:37:13.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:37:13.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:37:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:37:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.692074 -999.00  +23.60  28.72     24   +1.80 1 1 1 1 1   887    0 18.01 -137.40 ----- 28.5 28.7 282.7 33.9 25.2 -27.6 25.4 -26.9 25.6 -25.3 25.7 -26.0
2025-12-25T18:37:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:37:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:37:13.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.692074
2025-12-25T18:37:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:37:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:37:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:37:13.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:37:13.456 [DEBUG] [Thread-16510] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:37:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:37:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:36:59', tmtdew=25.77, humidity=17.79, cloud=0.0, wind=35.24, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:36:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:37:13.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:37:13.550 [DEBUG] [Thread-16513] [transport.py] [_log()] starting thread (client mode): 0xb9593640
2025-12-25T18:37:13.550 [DEBUG] [Thread-16513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:37:13.565 [DEBUG] [Thread-16513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:37:13.565 [INFO] [Thread-16513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:37:13.572 [DEBUG] [Thread-16513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] client lang: <none>
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] server lang: <none>
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] kex follows: False
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:37:13.573 [DEBUG] [Thread-16513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:37:13.574 [DEBUG] [Thread-16513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:37:13.574 [DEBUG] [Thread-16513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:37:13.574 [DEBUG] [Thread-16513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:37:13.574 [DEBUG] [Thread-16513] [transport.py] [_log()] Compression: none
2025-12-25T18:37:13.574 [DEBUG] [Thread-16513] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:37:13.630 [DEBUG] [Thread-16513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:37:13.631 [DEBUG] [Thread-16513] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:37:13.632 [DEBUG] [Thread-16513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:37:13.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:37:13.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:37:13.687 [DEBUG] [Thread-16513] [transport.py] [_log()] userauth is OK
2025-12-25T18:37:13.687 [DEBUG] [Thread-16513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:37:13.687 [DEBUG] [Thread-16513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:37:13.687 [DEBUG] [Thread-16513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:37:13.687 [DEBUG] [Thread-16513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:37:13.706 [INFO] [Thread-16513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:37:13.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-25T18:37:13.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:37:14.546 [DEBUG] [Thread-16513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:37:14.546 [DEBUG] [Thread-16513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:37:14.594 [DEBUG] [Thread-16513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:37:14.594 [DEBUG] [Thread-16513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:37:14.603 [DEBUG] [Thread-16513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:37:14.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:37:14.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-25T18:37:14.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:37:14.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:37:14.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:37:14.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:37:14.636 [DEBUG] [Thread-16513] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:37:18.802 [DEBUG] [Thread-16515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:19.479 [DEBUG] [Thread-16516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:34.532 [DEBUG] [Thread-16517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:37:44.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:37:44.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:37:44.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-25T18:37:45.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 37, 31), 25.84, 17.69, 0.0, 32.75, 24.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:37:45.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:37:31
2025-12-25T18:37:45.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:37:45.628 [DEBUG] [Thread-16518] [transport.py] [_log()] starting thread (client mode): 0xb9593760
2025-12-25T18:37:45.628 [DEBUG] [Thread-16518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:37:45.643 [DEBUG] [Thread-16518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:37:45.643 [INFO] [Thread-16518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:37:45.645 [DEBUG] [Thread-16518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] client lang: <none>
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] server lang: <none>
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] kex follows: False
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] Compression: none
2025-12-25T18:37:45.646 [DEBUG] [Thread-16518] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:37:45.655 [DEBUG] [Thread-16518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:37:45.656 [DEBUG] [Thread-16518] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:37:45.656 [DEBUG] [Thread-16518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:37:45.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:37:45.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:37:45.658 [DEBUG] [Thread-16518] [transport.py] [_log()] userauth is OK
2025-12-25T18:37:45.658 [DEBUG] [Thread-16518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:37:45.658 [DEBUG] [Thread-16518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:37:45.658 [DEBUG] [Thread-16518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:37:45.658 [DEBUG] [Thread-16518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:37:45.681 [INFO] [Thread-16518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:37:45.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:37:46.314 [DEBUG] [Thread-16518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:37:46.315 [DEBUG] [Thread-16518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:37:46.315 [DEBUG] [Thread-16518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:37:46.355 [DEBUG] [Thread-16518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:37:46.355 [DEBUG] [Thread-16518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:37:46.359 [DEBUG] [Thread-16518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:37:46.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:37:46.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:37:46.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:37:46.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:37:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:37:46.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:37:46.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:37:46.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:37:46.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:37:46.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.692421 -999.00  +23.50  30.65     24   +1.80 1 1 2 1 1   887    0 18.39 -129.61 ----- 21.7 30.6 290.0 35.5 25.1 -27.1 25.5 -26.5 25.7 -25.2 25.8 -25.6
2025-12-25T18:37:46.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:37:46.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:37:46.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.692421
2025-12-25T18:37:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:37:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:37:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:37:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:37:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:37:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:37:31', tmtdew=25.84, humidity=17.69, cloud=0.0, wind=32.75, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:37:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:37:46.388 [DEBUG] [Thread-16518] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:37:46.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-25T18:37:46.481 [DEBUG] [Thread-16521] [transport.py] [_log()] starting thread (client mode): 0xb9591390
2025-12-25T18:37:46.482 [DEBUG] [Thread-16521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:37:46.496 [DEBUG] [Thread-16521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:37:46.496 [INFO] [Thread-16521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] client lang: <none>
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] server lang: <none>
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] kex follows: False
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:37:46.504 [DEBUG] [Thread-16521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:37:46.505 [DEBUG] [Thread-16521] [transport.py] [_log()] Compression: none
2025-12-25T18:37:46.505 [DEBUG] [Thread-16521] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:37:46.561 [DEBUG] [Thread-16521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:37:46.561 [DEBUG] [Thread-16521] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:37:46.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:37:46.562 [DEBUG] [Thread-16521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:37:46.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:37:46.617 [DEBUG] [Thread-16521] [transport.py] [_log()] userauth is OK
2025-12-25T18:37:46.617 [DEBUG] [Thread-16521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:37:46.617 [DEBUG] [Thread-16521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:37:46.617 [DEBUG] [Thread-16521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:37:46.617 [DEBUG] [Thread-16521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:37:46.632 [INFO] [Thread-16521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:37:46.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-25T18:37:46.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:37:47.534 [DEBUG] [Thread-16521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:37:47.535 [DEBUG] [Thread-16521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:37:47.583 [DEBUG] [Thread-16521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:37:47.583 [DEBUG] [Thread-16521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:37:47.593 [DEBUG] [Thread-16521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:37:47.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:37:47.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-25T18:37:47.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:37:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:37:47.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:37:47.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:37:47.631 [DEBUG] [Thread-16521] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:37:49.567 [DEBUG] [Thread-16523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:04.620 [DEBUG] [Thread-16524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:12.181 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:12.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:17.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:38:17.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:38:17.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-25T18:38:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 38, 3), 25.87, 17.66, 0.0, 34.2, 24.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:38:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:38:03
2025-12-25T18:38:18.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:38:18.688 [DEBUG] [Thread-16525] [transport.py] [_log()] starting thread (client mode): 0xb6bf7910
2025-12-25T18:38:18.689 [DEBUG] [Thread-16525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:38:18.709 [DEBUG] [Thread-16525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:38:18.709 [INFO] [Thread-16525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:38:18.712 [DEBUG] [Thread-16525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:38:18.712 [DEBUG] [Thread-16525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:38:18.712 [DEBUG] [Thread-16525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:38:18.712 [DEBUG] [Thread-16525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:18.712 [DEBUG] [Thread-16525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:18.712 [DEBUG] [Thread-16525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] client lang: <none>
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] server lang: <none>
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] kex follows: False
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] Compression: none
2025-12-25T18:38:18.713 [DEBUG] [Thread-16525] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:38:18.728 [DEBUG] [Thread-16525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:38:18.728 [DEBUG] [Thread-16525] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:38:18.728 [DEBUG] [Thread-16525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:38:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:38:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:38:18.729 [DEBUG] [Thread-16525] [transport.py] [_log()] userauth is OK
2025-12-25T18:38:18.729 [DEBUG] [Thread-16525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:38:18.729 [DEBUG] [Thread-16525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:38:18.729 [DEBUG] [Thread-16525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:38:18.729 [DEBUG] [Thread-16525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:38:18.745 [INFO] [Thread-16525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:38:18.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:38:18.837 [DEBUG] [Thread-16527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:19.377 [DEBUG] [Thread-16525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:38:19.377 [DEBUG] [Thread-16525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:38:19.377 [DEBUG] [Thread-16525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:38:19.417 [DEBUG] [Thread-16525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:38:19.417 [DEBUG] [Thread-16525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:38:19.420 [DEBUG] [Thread-16525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:38:19.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:38:19.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:38:19.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:38:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:38:19.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:38:19.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:38:19.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.693116 -999.00  +23.50  30.67     24   +2.00 1 1 2 1 1   887    0 18.69 -124.68 ----- 37.4 30.7 281.4 44.8 25.1 -27.6 25.4 -27.0 25.3 -26.7 25.7 -26.6
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.693116
2025-12-25T18:38:19.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:38:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:38:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:38:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:38:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:38:19.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:38:03', tmtdew=25.87, humidity=17.66, cloud=0.0, wind=34.2, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:38:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:38:19.439 [DEBUG] [Thread-16525] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:38:19.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:38:19.523 [DEBUG] [Thread-16529] [transport.py] [_log()] starting thread (client mode): 0xb6bf7cd0
2025-12-25T18:38:19.523 [DEBUG] [Thread-16529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:38:19.538 [DEBUG] [Thread-16529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:38:19.538 [INFO] [Thread-16529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] client lang: <none>
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] server lang: <none>
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] kex follows: False
2025-12-25T18:38:19.545 [DEBUG] [Thread-16529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:38:19.546 [DEBUG] [Thread-16529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:38:19.546 [DEBUG] [Thread-16529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:38:19.546 [DEBUG] [Thread-16529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:38:19.546 [DEBUG] [Thread-16529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:38:19.546 [DEBUG] [Thread-16529] [transport.py] [_log()] Compression: none
2025-12-25T18:38:19.546 [DEBUG] [Thread-16529] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:38:19.601 [DEBUG] [Thread-16529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:38:19.601 [DEBUG] [Thread-16529] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:38:19.601 [DEBUG] [Thread-16529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:38:19.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:38:19.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:38:19.647 [DEBUG] [Thread-16531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:19.658 [DEBUG] [Thread-16529] [transport.py] [_log()] userauth is OK
2025-12-25T18:38:19.658 [DEBUG] [Thread-16529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:38:19.658 [DEBUG] [Thread-16529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:38:19.659 [DEBUG] [Thread-16529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:38:19.659 [DEBUG] [Thread-16529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:38:19.676 [INFO] [Thread-16529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:38:19.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-25T18:38:19.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:38:20.503 [DEBUG] [Thread-16529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:38:20.504 [DEBUG] [Thread-16529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:38:20.552 [DEBUG] [Thread-16529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:38:20.552 [DEBUG] [Thread-16529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:38:20.560 [DEBUG] [Thread-16529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:38:20.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:38:20.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:38:20.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:38:20.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:38:20.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:38:20.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:38:20.591 [DEBUG] [Thread-16529] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:38:34.688 [DEBUG] [Thread-16532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:49.721 [DEBUG] [Thread-16533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:38:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:38:50.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:38:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:38:51.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 38, 35), 25.56, 18.21, 0.0, 34.76, 23.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:38:51.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:38:35
2025-12-25T18:38:51.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:38:51.582 [DEBUG] [Thread-16534] [transport.py] [_log()] starting thread (client mode): 0xb6bf6440
2025-12-25T18:38:51.582 [DEBUG] [Thread-16534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:38:51.601 [DEBUG] [Thread-16534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:38:51.601 [INFO] [Thread-16534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:38:51.604 [DEBUG] [Thread-16534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] client lang: <none>
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] server lang: <none>
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] kex follows: False
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:38:51.605 [DEBUG] [Thread-16534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:38:51.606 [DEBUG] [Thread-16534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:38:51.606 [DEBUG] [Thread-16534] [transport.py] [_log()] Compression: none
2025-12-25T18:38:51.606 [DEBUG] [Thread-16534] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:38:51.623 [DEBUG] [Thread-16534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:38:51.624 [DEBUG] [Thread-16534] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:38:51.624 [DEBUG] [Thread-16534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:38:51.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:38:51.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:38:51.626 [DEBUG] [Thread-16534] [transport.py] [_log()] userauth is OK
2025-12-25T18:38:51.626 [DEBUG] [Thread-16534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:38:51.627 [DEBUG] [Thread-16534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:38:51.627 [DEBUG] [Thread-16534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:38:51.627 [DEBUG] [Thread-16534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:38:51.645 [INFO] [Thread-16534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:38:51.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:38:52.274 [DEBUG] [Thread-16534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:38:52.274 [DEBUG] [Thread-16534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:38:52.274 [DEBUG] [Thread-16534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:38:52.315 [DEBUG] [Thread-16534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:38:52.315 [DEBUG] [Thread-16534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:38:52.318 [DEBUG] [Thread-16534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:38:52.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:38:52.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:38:52.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:38:52.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:38:52.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:38:52.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:38:52.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:38:52.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:38:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:38:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.693463 -999.00  +23.60  32.85     24   +2.00 1 1 2 1 1   887    0 19.22 -118.88 ----- 34.0 32.9 300.8 47.1 25.1 -27.1 25.4 -26.6 25.5 -24.3 25.6 -25.6
2025-12-25T18:38:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:38:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:38:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.693463
2025-12-25T18:38:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:38:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:38:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:38:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:38:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:38:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:38:35', tmtdew=25.56, humidity=18.21, cloud=0.0, wind=34.76, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:38:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:38:52.345 [DEBUG] [Thread-16534] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:38:52.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:38:52.449 [DEBUG] [Thread-16537] [transport.py] [_log()] starting thread (client mode): 0xb6b7fa00
2025-12-25T18:38:52.449 [DEBUG] [Thread-16537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:38:52.464 [DEBUG] [Thread-16537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:38:52.464 [INFO] [Thread-16537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:38:52.472 [DEBUG] [Thread-16537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] client lang: <none>
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] server lang: <none>
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] kex follows: False
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:38:52.473 [DEBUG] [Thread-16537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:38:52.474 [DEBUG] [Thread-16537] [transport.py] [_log()] Compression: none
2025-12-25T18:38:52.474 [DEBUG] [Thread-16537] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:38:52.530 [DEBUG] [Thread-16537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:38:52.531 [DEBUG] [Thread-16537] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:38:52.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:38:52.532 [DEBUG] [Thread-16537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:38:52.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:38:52.589 [DEBUG] [Thread-16537] [transport.py] [_log()] userauth is OK
2025-12-25T18:38:52.589 [DEBUG] [Thread-16537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:38:52.590 [DEBUG] [Thread-16537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:38:52.590 [DEBUG] [Thread-16537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:38:52.590 [DEBUG] [Thread-16537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:38:52.608 [INFO] [Thread-16537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:38:52.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:38:52.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:38:53.436 [DEBUG] [Thread-16537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:38:53.437 [DEBUG] [Thread-16537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:38:53.485 [DEBUG] [Thread-16537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:38:53.485 [DEBUG] [Thread-16537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:38:53.494 [DEBUG] [Thread-16537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:38:53.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:38:53.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-25T18:38: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-25T18:38:53.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:38:53.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:38:53.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:38:53.527 [DEBUG] [Thread-16537] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:39:04.760 [DEBUG] [Thread-16539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:12.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:12.322 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:18.871 [DEBUG] [Thread-16540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:19.820 [DEBUG] [Thread-16541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:23.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:39:23.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:39:23.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:39:24.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 39, 7), 25.48, 18.34, 0.0, 36.38, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:39:24.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:39:07
2025-12-25T18:39:24.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:39:24.548 [DEBUG] [Thread-16542] [transport.py] [_log()] starting thread (client mode): 0xb6bf51b0
2025-12-25T18:39:24.548 [DEBUG] [Thread-16542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:39:24.568 [DEBUG] [Thread-16542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:39:24.569 [INFO] [Thread-16542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:39:24.572 [DEBUG] [Thread-16542] [transport.py] [_log()] client lang: <none>
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] server lang: <none>
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] kex follows: False
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] Compression: none
2025-12-25T18:39:24.573 [DEBUG] [Thread-16542] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:39:24.590 [DEBUG] [Thread-16542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:39:24.591 [DEBUG] [Thread-16542] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:39:24.591 [DEBUG] [Thread-16542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:39:24.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:39:24.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:39:24.593 [DEBUG] [Thread-16542] [transport.py] [_log()] userauth is OK
2025-12-25T18:39:24.593 [DEBUG] [Thread-16542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:39:24.593 [DEBUG] [Thread-16542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:39:24.594 [DEBUG] [Thread-16542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:39:24.594 [DEBUG] [Thread-16542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:39:24.617 [INFO] [Thread-16542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:39:24.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:39:25.258 [DEBUG] [Thread-16542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:39:25.258 [DEBUG] [Thread-16542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:39:25.259 [DEBUG] [Thread-16542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:39:25.299 [DEBUG] [Thread-16542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:39:25.299 [DEBUG] [Thread-16542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:39:25.302 [DEBUG] [Thread-16542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:39:25.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:39:25.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:39:25.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:39:25.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:39:25.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:39:25.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:39:25.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:39:25.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:39:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:39:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.693810 -999.00  +23.70  34.24     24   +2.10 1 1 2 1 1   887    0 19.53 -111.71 ----- 36.2 34.2 293.2 42.7 25.1 -26.9 25.4 -26.6 25.5 -24.9 25.6 -25.7
2025-12-25T18:39:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:39:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:39:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.693810
2025-12-25T18:39:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:39:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:39:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:39:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:39:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:39:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:39:07', tmtdew=25.48, humidity=18.34, cloud=0.0, wind=36.38, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:39:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:39:25.327 [DEBUG] [Thread-16542] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:39:25.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-25T18:39:25.427 [DEBUG] [Thread-16545] [transport.py] [_log()] starting thread (client mode): 0xb6bf6770
2025-12-25T18:39:25.427 [DEBUG] [Thread-16545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:39:25.441 [DEBUG] [Thread-16545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:39:25.441 [INFO] [Thread-16545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:39:25.449 [DEBUG] [Thread-16545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:39:25.449 [DEBUG] [Thread-16545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:39:25.449 [DEBUG] [Thread-16545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:39:25.449 [DEBUG] [Thread-16545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:25.449 [DEBUG] [Thread-16545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:25.449 [DEBUG] [Thread-16545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] client lang: <none>
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] server lang: <none>
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] kex follows: False
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:39:25.450 [DEBUG] [Thread-16545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:39:25.451 [DEBUG] [Thread-16545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:39:25.451 [DEBUG] [Thread-16545] [transport.py] [_log()] Compression: none
2025-12-25T18:39:25.451 [DEBUG] [Thread-16545] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:39:25.505 [DEBUG] [Thread-16545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:39:25.505 [DEBUG] [Thread-16545] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:39:25.506 [DEBUG] [Thread-16545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:39:25.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:39:25.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:39:25.562 [DEBUG] [Thread-16545] [transport.py] [_log()] userauth is OK
2025-12-25T18:39:25.562 [DEBUG] [Thread-16545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:39:25.562 [DEBUG] [Thread-16545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:39:25.562 [DEBUG] [Thread-16545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:39:25.562 [DEBUG] [Thread-16545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:39:25.592 [INFO] [Thread-16545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:39:25.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-25T18:39:25.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:39:26.469 [DEBUG] [Thread-16545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:39:26.469 [DEBUG] [Thread-16545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:39:26.517 [DEBUG] [Thread-16545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:39:26.517 [DEBUG] [Thread-16545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:39:26.526 [DEBUG] [Thread-16545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:39:26.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:39: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')
2025-12-25T18:39:26.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-25T18:39:26.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:39:26.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:39:26.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:39:26.560 [DEBUG] [Thread-16545] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:39:34.853 [DEBUG] [Thread-16547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:49.893 [DEBUG] [Thread-16548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:39:56.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:39:56.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:39:56.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-25T18:39:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 39, 39), 25.56, 18.29, 0.0, 36.66, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:39:57.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:39:39
2025-12-25T18:39:57.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:39:57.561 [DEBUG] [Thread-16549] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-25T18:39:57.561 [DEBUG] [Thread-16549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:39:57.580 [DEBUG] [Thread-16549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:39:57.580 [INFO] [Thread-16549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:57.582 [DEBUG] [Thread-16549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] client lang: <none>
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] server lang: <none>
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] kex follows: False
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] Compression: none
2025-12-25T18:39:57.583 [DEBUG] [Thread-16549] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:39:57.596 [DEBUG] [Thread-16549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:39:57.596 [DEBUG] [Thread-16549] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:39:57.597 [DEBUG] [Thread-16549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:39:57.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:39:57.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:39:57.598 [DEBUG] [Thread-16549] [transport.py] [_log()] userauth is OK
2025-12-25T18:39:57.598 [DEBUG] [Thread-16549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:39:57.598 [DEBUG] [Thread-16549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:39:57.598 [DEBUG] [Thread-16549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:39:57.598 [DEBUG] [Thread-16549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:39:57.618 [INFO] [Thread-16549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:39:57.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:39:58.239 [DEBUG] [Thread-16549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:39:58.240 [DEBUG] [Thread-16549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:39:58.240 [DEBUG] [Thread-16549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:39:58.281 [DEBUG] [Thread-16549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:39:58.281 [DEBUG] [Thread-16549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:39:58.285 [DEBUG] [Thread-16549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:39:58.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:39:58.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:39:58.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:39:58.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:39:58.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:39:58.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:39:58.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:39:58.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:39:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:39:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.694158 -999.00  +23.70  32.67     24   +2.10 1 1 2 1 1   887    0 19.55 -109.47 ----- 30.0 32.7 300.6 40.9 25.1 -26.8 25.3 -26.4 25.5 -25.3 25.7 -25.6
2025-12-25T18:39:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:39:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:39:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.694158
2025-12-25T18:39:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:39:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:39:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:39:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:39:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:39:58.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:39:39', tmtdew=25.56, humidity=18.29, cloud=0.0, wind=36.66, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:39:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:39:58.313 [DEBUG] [Thread-16549] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:39:58.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:39:58.406 [DEBUG] [Thread-16552] [transport.py] [_log()] starting thread (client mode): 0xb9593580
2025-12-25T18:39:58.406 [DEBUG] [Thread-16552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:39:58.421 [DEBUG] [Thread-16552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:39:58.422 [INFO] [Thread-16552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:39:58.429 [DEBUG] [Thread-16552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:39:58.429 [DEBUG] [Thread-16552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] client lang: <none>
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] server lang: <none>
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] kex follows: False
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] Compression: none
2025-12-25T18:39:58.430 [DEBUG] [Thread-16552] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:39:58.487 [DEBUG] [Thread-16552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:39:58.488 [DEBUG] [Thread-16552] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:39:58.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:39:58.489 [DEBUG] [Thread-16552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:39:58.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:39:58.544 [DEBUG] [Thread-16552] [transport.py] [_log()] userauth is OK
2025-12-25T18:39:58.544 [DEBUG] [Thread-16552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:39:58.544 [DEBUG] [Thread-16552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:39:58.545 [DEBUG] [Thread-16552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:39:58.545 [DEBUG] [Thread-16552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:39:58.563 [INFO] [Thread-16552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:39:58.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-25T18:39:58.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:39:59.401 [DEBUG] [Thread-16552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:39:59.401 [DEBUG] [Thread-16552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:39:59.448 [DEBUG] [Thread-16552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:39:59.449 [DEBUG] [Thread-16552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:39:59.458 [DEBUG] [Thread-16552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:39:59.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:39:59.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-25T18:39:59.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:39:59.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:39:59.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:39:59.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:39:59.492 [DEBUG] [Thread-16552] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:40:04.928 [DEBUG] [Thread-16554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:40:12.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:40:12.459 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:40:18.898 [DEBUG] [Thread-16555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:40:19.975 [DEBUG] [Thread-16556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:40:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:40:29.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:40:29.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-25T18:40:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 40, 11), 25.46, 18.42, 0.0, 40.19, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:40:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:40:11
2025-12-25T18:40:30.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:40:30.493 [DEBUG] [Thread-16557] [transport.py] [_log()] starting thread (client mode): 0xb6b7d870
2025-12-25T18:40:30.494 [DEBUG] [Thread-16557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:40:30.514 [DEBUG] [Thread-16557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:40:30.515 [INFO] [Thread-16557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:40:30.518 [DEBUG] [Thread-16557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:40:30.518 [DEBUG] [Thread-16557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:40:30.518 [DEBUG] [Thread-16557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:40:30.518 [DEBUG] [Thread-16557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] client lang: <none>
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] server lang: <none>
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] kex follows: False
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:40:30.519 [DEBUG] [Thread-16557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:40:30.520 [DEBUG] [Thread-16557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:40:30.520 [DEBUG] [Thread-16557] [transport.py] [_log()] Compression: none
2025-12-25T18:40:30.520 [DEBUG] [Thread-16557] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:40:30.539 [DEBUG] [Thread-16557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:40:30.540 [DEBUG] [Thread-16557] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:40:30.541 [DEBUG] [Thread-16557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:40:30.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:40:30.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:40:30.543 [DEBUG] [Thread-16557] [transport.py] [_log()] userauth is OK
2025-12-25T18:40:30.543 [DEBUG] [Thread-16557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:40:30.543 [DEBUG] [Thread-16557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:40:30.543 [DEBUG] [Thread-16557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:40:30.544 [DEBUG] [Thread-16557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:40:30.564 [INFO] [Thread-16557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:40:30.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:40:31.223 [DEBUG] [Thread-16557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:40:31.223 [DEBUG] [Thread-16557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:40:31.223 [DEBUG] [Thread-16557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:40:31.264 [DEBUG] [Thread-16557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:40:31.264 [DEBUG] [Thread-16557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:40:31.268 [DEBUG] [Thread-16557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:40:31.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:40:31.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:40:31.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:40:31.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:40:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:40:31.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:40:31.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:40:31.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:40:31.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:40:31.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.694505 -999.00  +23.80  29.43     24   +2.20 1 1 1 1 1   887    0 19.13 -106.59 ----- 27.6 29.4 303.2 38.2 25.1 -26.9 25.4 -26.4 25.6 -24.0 25.6 -25.6
2025-12-25T18:40:31.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:40:31.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:40:31.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.694505
2025-12-25T18:40:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:40:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:40:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:40:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:40:31.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:40:31.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:40:11', tmtdew=25.46, humidity=18.42, cloud=0.0, wind=40.19, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:40:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:40:31.295 [DEBUG] [Thread-16557] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:40:31.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-25T18:40:31.388 [DEBUG] [Thread-16560] [transport.py] [_log()] starting thread (client mode): 0xb6bc3280
2025-12-25T18:40:31.388 [DEBUG] [Thread-16560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:40:31.402 [DEBUG] [Thread-16560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:40:31.402 [INFO] [Thread-16560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:40:31.409 [DEBUG] [Thread-16560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] client lang: <none>
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] server lang: <none>
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] kex follows: False
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] Compression: none
2025-12-25T18:40:31.410 [DEBUG] [Thread-16560] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:40:31.469 [DEBUG] [Thread-16560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:40:31.470 [DEBUG] [Thread-16560] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:40:31.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:40:31.471 [DEBUG] [Thread-16560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:40:31.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:40:31.525 [DEBUG] [Thread-16560] [transport.py] [_log()] userauth is OK
2025-12-25T18:40:31.525 [DEBUG] [Thread-16560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:40:31.526 [DEBUG] [Thread-16560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:40:31.526 [DEBUG] [Thread-16560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:40:31.526 [DEBUG] [Thread-16560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:40:31.544 [INFO] [Thread-16560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:40:31.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-25T18:40:31.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:40:32.385 [DEBUG] [Thread-16560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:40:32.385 [DEBUG] [Thread-16560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:40:32.433 [DEBUG] [Thread-16560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:40:32.433 [DEBUG] [Thread-16560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:40:32.442 [DEBUG] [Thread-16560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:40:32.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:40:32.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:40:32.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:40:32.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:40:32.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:40:32.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:40:32.479 [DEBUG] [Thread-16560] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:40:35.013 [DEBUG] [Thread-16562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:40:50.073 [DEBUG] [Thread-16563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:02.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:41:02.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:41:02.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-25T18:41:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 40, 43), 25.44, 18.55, 0.0, 34.51, 24.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:41:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:40:43
2025-12-25T18:41:03.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:41:03.493 [DEBUG] [Thread-16564] [transport.py] [_log()] starting thread (client mode): 0xb6b7e710
2025-12-25T18:41:03.493 [DEBUG] [Thread-16564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:41:03.514 [DEBUG] [Thread-16564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:41:03.514 [INFO] [Thread-16564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:41:03.517 [DEBUG] [Thread-16564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:41:03.517 [DEBUG] [Thread-16564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:41:03.517 [DEBUG] [Thread-16564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:41:03.517 [DEBUG] [Thread-16564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:03.517 [DEBUG] [Thread-16564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:03.517 [DEBUG] [Thread-16564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] client lang: <none>
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] server lang: <none>
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] kex follows: False
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:41:03.518 [DEBUG] [Thread-16564] [transport.py] [_log()] Compression: none
2025-12-25T18:41:03.519 [DEBUG] [Thread-16564] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:41:03.538 [DEBUG] [Thread-16564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:41:03.539 [DEBUG] [Thread-16564] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:41:03.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:41:03.540 [DEBUG] [Thread-16564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:41:03.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:41:03.542 [DEBUG] [Thread-16564] [transport.py] [_log()] userauth is OK
2025-12-25T18:41:03.542 [DEBUG] [Thread-16564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:41:03.542 [DEBUG] [Thread-16564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:41:03.542 [DEBUG] [Thread-16564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:41:03.542 [DEBUG] [Thread-16564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:41:03.579 [INFO] [Thread-16564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:41:03.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:41:04.190 [DEBUG] [Thread-16564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:41:04.191 [DEBUG] [Thread-16564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:41:04.191 [DEBUG] [Thread-16564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:41:04.232 [DEBUG] [Thread-16564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:41:04.232 [DEBUG] [Thread-16564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:41:04.235 [DEBUG] [Thread-16564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:41:04.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:41:04.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:41:04.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:41:04.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:41:04.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:41:04.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:41:04.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:41:04.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:41:04.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:41:04.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.694852 -999.00  +23.80  38.66     24   +2.20 1 1 2 1 1   887    0 19.59 -97.20 ----- 34.3 38.7 298.6 44.6 25.0 -27.3 25.4 -26.6 25.5 -25.1 25.6 -25.8
2025-12-25T18:41:04.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:41:04.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:41:04.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.694852
2025-12-25T18:41:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:41:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:41:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:41:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:41:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:41:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:40:43', tmtdew=25.44, humidity=18.55, cloud=0.0, wind=34.51, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:40:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:41:04.257 [DEBUG] [Thread-16564] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:41:04.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:41:04.349 [DEBUG] [Thread-16567] [transport.py] [_log()] starting thread (client mode): 0xb6b7c940
2025-12-25T18:41:04.349 [DEBUG] [Thread-16567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:41:04.365 [DEBUG] [Thread-16567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:41:04.365 [INFO] [Thread-16567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] client lang: <none>
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] server lang: <none>
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] kex follows: False
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:41:04.373 [DEBUG] [Thread-16567] [transport.py] [_log()] Compression: none
2025-12-25T18:41:04.374 [DEBUG] [Thread-16567] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:41:04.430 [DEBUG] [Thread-16567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:41:04.430 [DEBUG] [Thread-16567] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:41:04.431 [DEBUG] [Thread-16567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:41:04.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:41:04.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:41:04.490 [DEBUG] [Thread-16567] [transport.py] [_log()] userauth is OK
2025-12-25T18:41:04.491 [DEBUG] [Thread-16567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:41:04.491 [DEBUG] [Thread-16567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:41:04.491 [DEBUG] [Thread-16567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:41:04.491 [DEBUG] [Thread-16567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:41:04.516 [INFO] [Thread-16567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:41:04.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:41:04.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:41:05.109 [DEBUG] [Thread-16569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:05.329 [DEBUG] [Thread-16567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:41:05.329 [DEBUG] [Thread-16567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:41:05.377 [DEBUG] [Thread-16567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:41:05.377 [DEBUG] [Thread-16567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:41:05.387 [DEBUG] [Thread-16567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:41:05.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:41:05.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-25T18:41:05.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-25T18:41:05.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:41:05.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:41:05.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:41:05.422 [DEBUG] [Thread-16567] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:41:12.598 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:12.599 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:18.940 [DEBUG] [Thread-16570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:20.160 [DEBUG] [Thread-16571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:35.193 [DEBUG] [Thread-16572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:41:35.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:41:35.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:41:35.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-25T18:41:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 41, 15), 25.4, 18.6, 0.0, 35.73, 24.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:41:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:41:15
2025-12-25T18:41:36.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:41:36.455 [DEBUG] [Thread-16573] [transport.py] [_log()] starting thread (client mode): 0xb9591a20
2025-12-25T18:41:36.455 [DEBUG] [Thread-16573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:41:36.475 [DEBUG] [Thread-16573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:41:36.475 [INFO] [Thread-16573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:41:36.478 [DEBUG] [Thread-16573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:41:36.478 [DEBUG] [Thread-16573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:41:36.478 [DEBUG] [Thread-16573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:41:36.478 [DEBUG] [Thread-16573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:36.478 [DEBUG] [Thread-16573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] client lang: <none>
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] server lang: <none>
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] kex follows: False
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] Compression: none
2025-12-25T18:41:36.479 [DEBUG] [Thread-16573] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:41:36.495 [DEBUG] [Thread-16573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:41:36.496 [DEBUG] [Thread-16573] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:41:36.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:41:36.497 [DEBUG] [Thread-16573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:41:36.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:41:36.499 [DEBUG] [Thread-16573] [transport.py] [_log()] userauth is OK
2025-12-25T18:41:36.499 [DEBUG] [Thread-16573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:41:36.499 [DEBUG] [Thread-16573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:41:36.499 [DEBUG] [Thread-16573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:41:36.499 [DEBUG] [Thread-16573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:41:36.523 [INFO] [Thread-16573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:41:36.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:41:37.186 [DEBUG] [Thread-16573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:41:37.187 [DEBUG] [Thread-16573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:41:37.187 [DEBUG] [Thread-16573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:41:37.228 [DEBUG] [Thread-16573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:41:37.228 [DEBUG] [Thread-16573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:41:37.232 [DEBUG] [Thread-16573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:41:37.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:41:37.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:41:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:41:37.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:41:37.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:41:37.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:41:37.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:41:37.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:41:37.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:41:37.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.695199 -999.00  +23.70  28.02     24   +2.20 1 1 1 1 1   887    0 18.99 -104.86 ----- 32.2 28.0 304.6 44.6 25.0 -26.8 25.3 -26.3 25.6 -24.1 25.6 -25.5
2025-12-25T18:41:37.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:41:37.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:41:37.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.695199
2025-12-25T18:41:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:41:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:41:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:41:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:41:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:41:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:41:15', tmtdew=25.4, humidity=18.6, cloud=0.0, wind=35.73, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:41:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:41:37.260 [DEBUG] [Thread-16573] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:41:37.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-25T18:41:37.355 [DEBUG] [Thread-16576] [transport.py] [_log()] starting thread (client mode): 0xb6b4f790
2025-12-25T18:41:37.355 [DEBUG] [Thread-16576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:41:37.370 [DEBUG] [Thread-16576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:41:37.370 [INFO] [Thread-16576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:41:37.377 [DEBUG] [Thread-16576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:41:37.378 [DEBUG] [Thread-16576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] client lang: <none>
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] server lang: <none>
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] kex follows: False
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:41:37.379 [DEBUG] [Thread-16576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:41:37.380 [DEBUG] [Thread-16576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:41:37.380 [DEBUG] [Thread-16576] [transport.py] [_log()] Compression: none
2025-12-25T18:41:37.380 [DEBUG] [Thread-16576] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:41:37.436 [DEBUG] [Thread-16576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:41:37.436 [DEBUG] [Thread-16576] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:41:37.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:41:37.438 [DEBUG] [Thread-16576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:41:37.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:41:37.491 [DEBUG] [Thread-16576] [transport.py] [_log()] userauth is OK
2025-12-25T18:41:37.492 [DEBUG] [Thread-16576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:41:37.492 [DEBUG] [Thread-16576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:41:37.492 [DEBUG] [Thread-16576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:41:37.492 [DEBUG] [Thread-16576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:41:37.511 [INFO] [Thread-16576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:41:37.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-25T18:41:37.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:41:38.341 [DEBUG] [Thread-16576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:41:38.341 [DEBUG] [Thread-16576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:41:38.389 [DEBUG] [Thread-16576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:41:38.389 [DEBUG] [Thread-16576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:41:38.398 [DEBUG] [Thread-16576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:41:38.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:41:38.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-25T18:41:38.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-25T18:41:38.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:41:38.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:41:38.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:41:38.440 [DEBUG] [Thread-16576] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:41:50.226 [DEBUG] [Thread-16578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:05.270 [DEBUG] [Thread-16579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:08.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:42:08.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:42:08.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-25T18:42:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 41, 47), 25.32, 18.55, 0.0, 37.39, 23.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:42:09.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:41:47
2025-12-25T18:42:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:42:09.465 [DEBUG] [Thread-16580] [transport.py] [_log()] starting thread (client mode): 0xb6bf7040
2025-12-25T18:42:09.465 [DEBUG] [Thread-16580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:42:09.486 [DEBUG] [Thread-16580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:42:09.486 [INFO] [Thread-16580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] client lang: <none>
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] server lang: <none>
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] kex follows: False
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:42:09.489 [DEBUG] [Thread-16580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:42:09.490 [DEBUG] [Thread-16580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:42:09.490 [DEBUG] [Thread-16580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:42:09.490 [DEBUG] [Thread-16580] [transport.py] [_log()] Compression: none
2025-12-25T18:42:09.490 [DEBUG] [Thread-16580] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:42:09.505 [DEBUG] [Thread-16580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:42:09.506 [DEBUG] [Thread-16580] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:42:09.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:42:09.506 [DEBUG] [Thread-16580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:42:09.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:42:09.506 [DEBUG] [Thread-16580] [transport.py] [_log()] userauth is OK
2025-12-25T18:42:09.506 [DEBUG] [Thread-16580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:42:09.506 [DEBUG] [Thread-16580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:42:09.507 [DEBUG] [Thread-16580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:42:09.507 [DEBUG] [Thread-16580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:42:09.533 [INFO] [Thread-16580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:42:09.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:42:10.129 [DEBUG] [Thread-16580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:42:10.129 [DEBUG] [Thread-16580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:42:10.129 [DEBUG] [Thread-16580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:42:10.170 [DEBUG] [Thread-16580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:42:10.170 [DEBUG] [Thread-16580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:42:10.173 [DEBUG] [Thread-16580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:42:10.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:42:10.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:42:10.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:42:10.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:42:10.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:42:10.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:42:10.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:42:10.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:42:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:42:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.695546 -999.00  +23.70  38.35     24   +2.10 1 1 2 1 1   887    0 19.29 -101.78 ----- 37.1 38.4 312.6 44.1 25.0 -27.3 25.4 -26.6 25.6 -24.4 25.7 -25.5
2025-12-25T18:42:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:42:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:42:10.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.695546
2025-12-25T18:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:42:10.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:41:47', tmtdew=25.32, humidity=18.55, cloud=0.0, wind=37.39, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:41:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:42:10.191 [DEBUG] [Thread-16580] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:42:10.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-25T18:42:10.275 [DEBUG] [Thread-16583] [transport.py] [_log()] starting thread (client mode): 0xb6bf7e20
2025-12-25T18:42:10.275 [DEBUG] [Thread-16583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:42:10.290 [DEBUG] [Thread-16583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:42:10.290 [INFO] [Thread-16583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:42:10.297 [DEBUG] [Thread-16583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] client lang: <none>
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] server lang: <none>
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] kex follows: False
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] Compression: none
2025-12-25T18:42:10.298 [DEBUG] [Thread-16583] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:42:10.355 [DEBUG] [Thread-16583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:42:10.355 [DEBUG] [Thread-16583] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:42:10.355 [DEBUG] [Thread-16583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:42:10.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:42:10.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:42:10.412 [DEBUG] [Thread-16583] [transport.py] [_log()] userauth is OK
2025-12-25T18:42:10.412 [DEBUG] [Thread-16583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:42:10.412 [DEBUG] [Thread-16583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:42:10.412 [DEBUG] [Thread-16583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:42:10.412 [DEBUG] [Thread-16583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:42:10.426 [INFO] [Thread-16583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:42:10.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:42:10.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:42:11.322 [DEBUG] [Thread-16583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:42:11.322 [DEBUG] [Thread-16583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:42:11.371 [DEBUG] [Thread-16583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:42:11.371 [DEBUG] [Thread-16583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:42:11.379 [DEBUG] [Thread-16583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:42:11.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:42:11.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-25T18:42:11.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-25T18:42:11.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:42:11.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:42:11.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:42:11.412 [DEBUG] [Thread-16583] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:42:12.737 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:12.738 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:18.971 [DEBUG] [Thread-16585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:20.303 [DEBUG] [Thread-16586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:35.353 [DEBUG] [Thread-16587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:42:41.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:42:41.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:42:41.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-25T18:42:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 42, 21), 25.29, 18.62, 0.0, 38.61, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:42:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:42:21
2025-12-25T18:42:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:42:42.407 [DEBUG] [Thread-16588] [transport.py] [_log()] starting thread (client mode): 0xb6bc0a60
2025-12-25T18:42:42.407 [DEBUG] [Thread-16588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:42:42.430 [DEBUG] [Thread-16588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:42:42.430 [INFO] [Thread-16588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:42:42.433 [DEBUG] [Thread-16588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] client lang: <none>
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] server lang: <none>
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] kex follows: False
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] Compression: none
2025-12-25T18:42:42.434 [DEBUG] [Thread-16588] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:42:42.454 [DEBUG] [Thread-16588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:42:42.454 [DEBUG] [Thread-16588] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:42:42.455 [DEBUG] [Thread-16588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:42:42.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:42:42.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:42:42.457 [DEBUG] [Thread-16588] [transport.py] [_log()] userauth is OK
2025-12-25T18:42:42.457 [DEBUG] [Thread-16588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:42:42.458 [DEBUG] [Thread-16588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:42:42.458 [DEBUG] [Thread-16588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:42:42.458 [DEBUG] [Thread-16588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:42:42.481 [INFO] [Thread-16588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:42:42.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:42:43.125 [DEBUG] [Thread-16588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:42:43.126 [DEBUG] [Thread-16588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:42:43.126 [DEBUG] [Thread-16588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:42:43.167 [DEBUG] [Thread-16588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:42:43.167 [DEBUG] [Thread-16588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:42:43.171 [DEBUG] [Thread-16588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:42:43.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:42:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:42:43.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:42:43.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:42:43.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:42:43.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:42:43.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:42:43.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:42:43.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:42:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.695893 -999.00  +23.60  41.15     24   +2.00 1 1 2 1 1   887    0 19.30 -104.16 ----- 34.6 41.1 309.2 45.5 25.0 -26.9 25.3 -26.5 25.5 -24.3 25.6 -25.6
2025-12-25T18:42:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:42:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:42:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.695893
2025-12-25T18:42:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:42:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:42:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:42:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:42:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:42:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:42:21', tmtdew=25.29, humidity=18.62, cloud=0.0, wind=38.61, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:42:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:42:43.197 [DEBUG] [Thread-16588] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:42:43.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-25T18:42:43.290 [DEBUG] [Thread-16591] [transport.py] [_log()] starting thread (client mode): 0xb6b7ebc0
2025-12-25T18:42:43.290 [DEBUG] [Thread-16591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:42:43.305 [DEBUG] [Thread-16591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:42:43.305 [INFO] [Thread-16591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] client lang: <none>
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] server lang: <none>
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] kex follows: False
2025-12-25T18:42:43.313 [DEBUG] [Thread-16591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:42:43.314 [DEBUG] [Thread-16591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:42:43.314 [DEBUG] [Thread-16591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:42:43.314 [DEBUG] [Thread-16591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:42:43.314 [DEBUG] [Thread-16591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:42:43.314 [DEBUG] [Thread-16591] [transport.py] [_log()] Compression: none
2025-12-25T18:42:43.314 [DEBUG] [Thread-16591] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:42:43.372 [DEBUG] [Thread-16591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:42:43.373 [DEBUG] [Thread-16591] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:42:43.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:42:43.374 [DEBUG] [Thread-16591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:42:43.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:42:43.430 [DEBUG] [Thread-16591] [transport.py] [_log()] userauth is OK
2025-12-25T18:42:43.430 [DEBUG] [Thread-16591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:42:43.431 [DEBUG] [Thread-16591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:42:43.431 [DEBUG] [Thread-16591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:42:43.431 [DEBUG] [Thread-16591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:42:43.449 [INFO] [Thread-16591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:42:43.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-25T18:42:43.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:42:44.267 [DEBUG] [Thread-16591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:42:44.267 [DEBUG] [Thread-16591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:42:44.315 [DEBUG] [Thread-16591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:42:44.315 [DEBUG] [Thread-16591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:42:44.325 [DEBUG] [Thread-16591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:42:44.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:42:44.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-25T18:42:44.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-25T18:42:44.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:42:44.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:42:44.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:42:44.367 [DEBUG] [Thread-16591] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:42:50.388 [DEBUG] [Thread-16593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:05.428 [DEBUG] [Thread-16594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:12.877 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:12.879 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:14.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:43:14.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:43:14.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-25T18:43:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 42, 53), 25.48, 18.49, 0.0, 32.48, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:43:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:42:53
2025-12-25T18:43:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:43:15.368 [DEBUG] [Thread-16595] [transport.py] [_log()] starting thread (client mode): 0xb6bc3ee0
2025-12-25T18:43:15.368 [DEBUG] [Thread-16595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:43:15.388 [DEBUG] [Thread-16595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:43:15.388 [INFO] [Thread-16595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] client lang: <none>
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] server lang: <none>
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] kex follows: False
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:43:15.391 [DEBUG] [Thread-16595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:43:15.392 [DEBUG] [Thread-16595] [transport.py] [_log()] Compression: none
2025-12-25T18:43:15.392 [DEBUG] [Thread-16595] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:43:15.410 [DEBUG] [Thread-16595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:43:15.411 [DEBUG] [Thread-16595] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:43:15.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:43:15.412 [DEBUG] [Thread-16595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:43:15.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:43:15.414 [DEBUG] [Thread-16595] [transport.py] [_log()] userauth is OK
2025-12-25T18:43:15.415 [DEBUG] [Thread-16595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:43:15.415 [DEBUG] [Thread-16595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:43:15.415 [DEBUG] [Thread-16595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:43:15.415 [DEBUG] [Thread-16595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:43:15.442 [INFO] [Thread-16595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:43:15.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:43:16.089 [DEBUG] [Thread-16595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:43:16.089 [DEBUG] [Thread-16595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:43:16.089 [DEBUG] [Thread-16595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:43:16.130 [DEBUG] [Thread-16595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:43:16.130 [DEBUG] [Thread-16595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:43:16.133 [DEBUG] [Thread-16595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:43:16.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:43:16.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:43:16.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:43:16.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:43:16.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:43:16.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:43:16.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:43:16.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:43:16.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:43:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.696588 -999.00  +23.70  35.33     24   +2.00 1 1 2 1 1   887    0 18.27 -117.21 ----- 32.6 35.3 309.0 44.6 25.0 -27.3 25.3 -26.5 25.4 -24.4 25.6 -25.6
2025-12-25T18:43:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:43:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:43:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.696588
2025-12-25T18:43:16.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:43:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:43:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:43:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:43:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:43:16.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:42:53', tmtdew=25.48, humidity=18.49, cloud=0.0, wind=32.48, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:43:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:43:16.160 [DEBUG] [Thread-16595] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:43:16.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-25T18:43:16.252 [DEBUG] [Thread-16598] [transport.py] [_log()] starting thread (client mode): 0xb6b61780
2025-12-25T18:43:16.253 [DEBUG] [Thread-16598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:43:16.267 [DEBUG] [Thread-16598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:43:16.267 [INFO] [Thread-16598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] client lang: <none>
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] server lang: <none>
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] kex follows: False
2025-12-25T18:43:16.275 [DEBUG] [Thread-16598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:43:16.276 [DEBUG] [Thread-16598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:43:16.276 [DEBUG] [Thread-16598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:43:16.276 [DEBUG] [Thread-16598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:43:16.276 [DEBUG] [Thread-16598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:43:16.276 [DEBUG] [Thread-16598] [transport.py] [_log()] Compression: none
2025-12-25T18:43:16.276 [DEBUG] [Thread-16598] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:43:16.335 [DEBUG] [Thread-16598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:43:16.335 [DEBUG] [Thread-16598] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:43:16.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:43:16.336 [DEBUG] [Thread-16598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:43:16.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:43:16.391 [DEBUG] [Thread-16598] [transport.py] [_log()] userauth is OK
2025-12-25T18:43:16.391 [DEBUG] [Thread-16598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:43:16.391 [DEBUG] [Thread-16598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:43:16.391 [DEBUG] [Thread-16598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:43:16.391 [DEBUG] [Thread-16598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:43:16.410 [INFO] [Thread-16598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:43:16.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:43:16.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:43:17.254 [DEBUG] [Thread-16598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:43:17.254 [DEBUG] [Thread-16598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:43:17.302 [DEBUG] [Thread-16598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:43:17.302 [DEBUG] [Thread-16598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:43:17.311 [DEBUG] [Thread-16598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:43:17.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:43:17.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-25T18:43:17.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:43:17.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:43:17.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:43:17.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:43:17.348 [DEBUG] [Thread-16598] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:43:19.040 [DEBUG] [Thread-16600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:20.464 [DEBUG] [Thread-16601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:35.521 [DEBUG] [Thread-16602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:43:47.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:43:47.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:43:47.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-25T18:43:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 43, 25), 25.46, 18.52, 0.0, 33.33, 23.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:43:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:43:25
2025-12-25T18:43:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:43:48.356 [DEBUG] [Thread-16603] [transport.py] [_log()] starting thread (client mode): 0xb6bb7c40
2025-12-25T18:43:48.356 [DEBUG] [Thread-16603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:43:48.377 [DEBUG] [Thread-16603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:43:48.377 [INFO] [Thread-16603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] client lang: <none>
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] server lang: <none>
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] kex follows: False
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:43:48.380 [DEBUG] [Thread-16603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:43:48.381 [DEBUG] [Thread-16603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:43:48.381 [DEBUG] [Thread-16603] [transport.py] [_log()] Compression: none
2025-12-25T18:43:48.381 [DEBUG] [Thread-16603] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:43:48.389 [DEBUG] [Thread-16603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:43:48.389 [DEBUG] [Thread-16603] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:43:48.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:43:48.390 [DEBUG] [Thread-16603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:43:48.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:43:48.392 [DEBUG] [Thread-16603] [transport.py] [_log()] userauth is OK
2025-12-25T18:43:48.392 [DEBUG] [Thread-16603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:43:48.392 [DEBUG] [Thread-16603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:43:48.392 [DEBUG] [Thread-16603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:43:48.392 [DEBUG] [Thread-16603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:43:48.416 [INFO] [Thread-16603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:43:48.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:43:49.065 [DEBUG] [Thread-16603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:43:49.066 [DEBUG] [Thread-16603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:43:49.066 [DEBUG] [Thread-16603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:43:49.107 [DEBUG] [Thread-16603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:43:49.107 [DEBUG] [Thread-16603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:43:49.110 [DEBUG] [Thread-16603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:43:49.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:43:49.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:43:49.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:43:49.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:43:49.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:43:49.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:43:49.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:43:49.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:43:49.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:43:49.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.696935 -999.00  +23.80  26.96     24   +2.00 1 1 1 1 1   887    0 18.78 -120.10 ----- 33.3 27.0 306.8 38.2 25.0 -27.0 25.3 -26.4 25.5 -24.1 25.6 -25.7
2025-12-25T18:43:49.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:43:49.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:43:49.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.696935
2025-12-25T18:43:49.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:43:49.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:43:49.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:43:49.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:43:49.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:43:49.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:43:25', tmtdew=25.46, humidity=18.52, cloud=0.0, wind=33.33, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:43:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:43:49.135 [DEBUG] [Thread-16603] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:43:49.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-25T18:43:49.228 [DEBUG] [Thread-16606] [transport.py] [_log()] starting thread (client mode): 0xb6b4feb0
2025-12-25T18:43:49.228 [DEBUG] [Thread-16606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:43:49.243 [DEBUG] [Thread-16606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:43:49.243 [INFO] [Thread-16606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:43:49.250 [DEBUG] [Thread-16606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:43:49.250 [DEBUG] [Thread-16606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:43:49.250 [DEBUG] [Thread-16606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] client lang: <none>
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] server lang: <none>
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] kex follows: False
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:43:49.251 [DEBUG] [Thread-16606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:43:49.252 [DEBUG] [Thread-16606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:43:49.252 [DEBUG] [Thread-16606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:43:49.252 [DEBUG] [Thread-16606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:43:49.252 [DEBUG] [Thread-16606] [transport.py] [_log()] Compression: none
2025-12-25T18:43:49.252 [DEBUG] [Thread-16606] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:43:49.307 [DEBUG] [Thread-16606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:43:49.307 [DEBUG] [Thread-16606] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:43:49.308 [DEBUG] [Thread-16606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:43:49.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:43:49.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:43:49.364 [DEBUG] [Thread-16606] [transport.py] [_log()] userauth is OK
2025-12-25T18:43:49.364 [DEBUG] [Thread-16606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:43:49.364 [DEBUG] [Thread-16606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:43:49.365 [DEBUG] [Thread-16606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:43:49.365 [DEBUG] [Thread-16606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:43:49.384 [INFO] [Thread-16606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:43:49.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-25T18:43:49.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:43:50.186 [DEBUG] [Thread-16606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:43:50.186 [DEBUG] [Thread-16606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:43:50.234 [DEBUG] [Thread-16606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:43:50.234 [DEBUG] [Thread-16606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:43:50.244 [DEBUG] [Thread-16606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:43:50.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:43:50.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-25T18:43:50.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-25T18:43:50.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:43:50.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:43:50.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:43:50.280 [DEBUG] [Thread-16606] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:43:50.556 [DEBUG] [Thread-16608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:05.604 [DEBUG] [Thread-16609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:13.023 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:13.025 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:19.074 [DEBUG] [Thread-16610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:20.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:44:20.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:44:20.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-25T18:44:20.633 [DEBUG] [Thread-16611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 43, 58), 25.39, 18.5, 0.0, 33.63, 23.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:44:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:43:58
2025-12-25T18:44:21.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:44:21.274 [DEBUG] [Thread-16612] [transport.py] [_log()] starting thread (client mode): 0xb6b02c80
2025-12-25T18:44:21.274 [DEBUG] [Thread-16612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:44:21.294 [DEBUG] [Thread-16612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:44:21.294 [INFO] [Thread-16612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] client lang: <none>
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] server lang: <none>
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] kex follows: False
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] Compression: none
2025-12-25T18:44:21.297 [DEBUG] [Thread-16612] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:44:21.316 [DEBUG] [Thread-16612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:44:21.316 [DEBUG] [Thread-16612] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:44:21.317 [DEBUG] [Thread-16612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:44:21.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:44:21.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:44:21.318 [DEBUG] [Thread-16612] [transport.py] [_log()] userauth is OK
2025-12-25T18:44:21.319 [DEBUG] [Thread-16612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:44:21.319 [DEBUG] [Thread-16612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:44:21.319 [DEBUG] [Thread-16612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:44:21.319 [DEBUG] [Thread-16612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:44:21.354 [INFO] [Thread-16612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:44:21.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:44:22.012 [DEBUG] [Thread-16612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:44:22.013 [DEBUG] [Thread-16612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:44:22.013 [DEBUG] [Thread-16612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:44:22.053 [DEBUG] [Thread-16612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:44:22.054 [DEBUG] [Thread-16612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:44:22.056 [DEBUG] [Thread-16612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:44:22.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:44:22.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:44:22.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:44:22.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:44:22.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:44:22.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:44:22.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:44:22.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:44:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:44:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.697283 -999.00  +23.90  29.69     24   +2.10 1 1 1 1 1   887    0 18.41 -121.70 ----- 36.9 29.7 295.6 35.2 25.0 -26.8 25.3 -26.3 25.5 -24.6 25.6 -26.0
2025-12-25T18:44:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:44:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:44:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.697283
2025-12-25T18:44:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:44:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:44:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:44:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:44:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:44:22.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:43:58', tmtdew=25.39, humidity=18.5, cloud=0.0, wind=33.63, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:44:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:44:22.083 [DEBUG] [Thread-16612] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:44:22.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-25T18:44:22.177 [DEBUG] [Thread-16615] [transport.py] [_log()] starting thread (client mode): 0xb955b730
2025-12-25T18:44:22.177 [DEBUG] [Thread-16615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:44:22.192 [DEBUG] [Thread-16615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:44:22.192 [INFO] [Thread-16615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:22.200 [DEBUG] [Thread-16615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] client lang: <none>
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] server lang: <none>
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] kex follows: False
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] Compression: none
2025-12-25T18:44:22.201 [DEBUG] [Thread-16615] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:44:22.263 [DEBUG] [Thread-16615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:44:22.263 [DEBUG] [Thread-16615] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:44:22.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:44:22.265 [DEBUG] [Thread-16615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:44:22.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:44:22.323 [DEBUG] [Thread-16615] [transport.py] [_log()] userauth is OK
2025-12-25T18:44:22.323 [DEBUG] [Thread-16615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:44:22.323 [DEBUG] [Thread-16615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:44:22.323 [DEBUG] [Thread-16615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:44:22.323 [DEBUG] [Thread-16615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:44:22.342 [INFO] [Thread-16615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:44:22.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-25T18:44:22.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:44:23.208 [DEBUG] [Thread-16615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:44:23.209 [DEBUG] [Thread-16615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:44:23.257 [DEBUG] [Thread-16615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:44:23.257 [DEBUG] [Thread-16615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:44:23.267 [DEBUG] [Thread-16615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:44:23.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:44:23.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-25T18:44:23.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-25T18:44:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:44:23.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:44:23.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:44:23.306 [DEBUG] [Thread-16615] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:44:35.667 [DEBUG] [Thread-16617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:50.716 [DEBUG] [Thread-16618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:44:53.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:44:53.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:44:53.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-25T18:44:54.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 44, 30), 25.4, 18.47, 0.0, 37.85, 23.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:44:54.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:44:30
2025-12-25T18:44:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:44:54.308 [DEBUG] [Thread-16619] [transport.py] [_log()] starting thread (client mode): 0xb955b3d0
2025-12-25T18:44:54.308 [DEBUG] [Thread-16619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:44:54.329 [DEBUG] [Thread-16619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:44:54.329 [INFO] [Thread-16619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] client lang: <none>
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] server lang: <none>
2025-12-25T18:44:54.332 [DEBUG] [Thread-16619] [transport.py] [_log()] kex follows: False
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] Compression: none
2025-12-25T18:44:54.333 [DEBUG] [Thread-16619] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:44:54.349 [DEBUG] [Thread-16619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:44:54.350 [DEBUG] [Thread-16619] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:44:54.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:44:54.351 [DEBUG] [Thread-16619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:44:54.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:44:54.353 [DEBUG] [Thread-16619] [transport.py] [_log()] userauth is OK
2025-12-25T18:44:54.353 [DEBUG] [Thread-16619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:44:54.354 [DEBUG] [Thread-16619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:44:54.354 [DEBUG] [Thread-16619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:44:54.354 [DEBUG] [Thread-16619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:44:54.378 [INFO] [Thread-16619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:44:54.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:44:55.019 [DEBUG] [Thread-16619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:44:55.019 [DEBUG] [Thread-16619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:44:55.019 [DEBUG] [Thread-16619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:44:55.060 [DEBUG] [Thread-16619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:44:55.060 [DEBUG] [Thread-16619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:44:55.063 [DEBUG] [Thread-16619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:44:55.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:44:55.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:44:55.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:44:55.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:44:55.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:44:55.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:44:55.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:44:55.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:44:55.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:44:55.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.697630 -999.00  +23.70  35.60     24   +2.30 1 1 2 1 1   887    0 18.49 -128.52 ----- 31.4 35.6 290.8 48.4 25.0 -27.4 25.3 -26.5 25.4 -25.3 25.6 -25.8
2025-12-25T18:44:55.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:44:55.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:44:55.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.697630
2025-12-25T18:44:55.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:44:55.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:44:55.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:44:55.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:44:55.091 [DEBUG] [Thread-16619] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:44:55.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:44:55.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:44:30', tmtdew=25.4, humidity=18.47, cloud=0.0, wind=37.85, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:44:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:44:55.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-25T18:44:55.185 [DEBUG] [Thread-16622] [transport.py] [_log()] starting thread (client mode): 0xb6bf6110
2025-12-25T18:44:55.185 [DEBUG] [Thread-16622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:44:55.200 [DEBUG] [Thread-16622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:44:55.200 [INFO] [Thread-16622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] client lang: <none>
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] server lang: <none>
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] kex follows: False
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:44:55.208 [DEBUG] [Thread-16622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:44:55.209 [DEBUG] [Thread-16622] [transport.py] [_log()] Compression: none
2025-12-25T18:44:55.209 [DEBUG] [Thread-16622] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:44:55.271 [DEBUG] [Thread-16622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:44:55.272 [DEBUG] [Thread-16622] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:44:55.272 [DEBUG] [Thread-16622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:44:55.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:44:55.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:44:55.331 [DEBUG] [Thread-16622] [transport.py] [_log()] userauth is OK
2025-12-25T18:44:55.331 [DEBUG] [Thread-16622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:44:55.331 [DEBUG] [Thread-16622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:44:55.331 [DEBUG] [Thread-16622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:44:55.331 [DEBUG] [Thread-16622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:44:55.351 [INFO] [Thread-16622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:44:55.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-25T18:44:55.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:44:56.216 [DEBUG] [Thread-16622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:44:56.216 [DEBUG] [Thread-16622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:44:56.264 [DEBUG] [Thread-16622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:44:56.264 [DEBUG] [Thread-16622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:44:56.273 [DEBUG] [Thread-16622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:44:56.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:44:56.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-25T18:44:56.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-25T18:44:56.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:44:56.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:44:56.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:44:56.309 [DEBUG] [Thread-16622] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:45:05.753 [DEBUG] [Thread-16624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:13.164 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:13.165 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:19.108 [DEBUG] [Thread-16625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:20.804 [DEBUG] [Thread-16626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:26.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:45:26.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:45:26.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-25T18:45:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 45, 2), 25.35, 18.52, 0.0, 38.9, 23.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:45:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:45:02
2025-12-25T18:45:27.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:45:27.332 [DEBUG] [Thread-16627] [transport.py] [_log()] starting thread (client mode): 0xb6bb7ca0
2025-12-25T18:45:27.332 [DEBUG] [Thread-16627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:45:27.352 [DEBUG] [Thread-16627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:45:27.352 [INFO] [Thread-16627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:45:27.353 [DEBUG] [Thread-16627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:45:27.353 [DEBUG] [Thread-16627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] client lang: <none>
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] server lang: <none>
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] kex follows: False
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] Compression: none
2025-12-25T18:45:27.354 [DEBUG] [Thread-16627] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:45:27.366 [DEBUG] [Thread-16627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:45:27.366 [DEBUG] [Thread-16627] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:45:27.366 [DEBUG] [Thread-16627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:45:27.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:45:27.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:45:27.367 [DEBUG] [Thread-16627] [transport.py] [_log()] userauth is OK
2025-12-25T18:45:27.367 [DEBUG] [Thread-16627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:45:27.367 [DEBUG] [Thread-16627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:45:27.367 [DEBUG] [Thread-16627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:45:27.367 [DEBUG] [Thread-16627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:45:27.376 [INFO] [Thread-16627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:45:27.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:45:28.054 [DEBUG] [Thread-16627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:45:28.054 [DEBUG] [Thread-16627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:45:28.054 [DEBUG] [Thread-16627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:45:28.095 [DEBUG] [Thread-16627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:45:28.095 [DEBUG] [Thread-16627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:45:28.098 [DEBUG] [Thread-16627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:45:28.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:45:28.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:45:28.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:45:28.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:45:28.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:45:28.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:45:28.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.697977 -999.00  +23.50  32.19     25   +2.60 1 1 2 1 1   887    0 18.65 -128.05 ----- 31.4 32.2 292.4 44.1 25.0 -26.9 25.2 -26.7 25.3 -26.6 25.5 -25.9
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.697977
2025-12-25T18:45:28.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:45:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:45:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:45:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:45:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:45:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:45:02', tmtdew=25.35, humidity=18.52, cloud=0.0, wind=38.9, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:45:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:45:28.116 [DEBUG] [Thread-16627] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:45:28.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-25T18:45:28.209 [DEBUG] [Thread-16630] [transport.py] [_log()] starting thread (client mode): 0xb6bf4970
2025-12-25T18:45:28.209 [DEBUG] [Thread-16630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:45:28.223 [DEBUG] [Thread-16630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:45:28.223 [INFO] [Thread-16630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] client lang: <none>
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] server lang: <none>
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] kex follows: False
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] Compression: none
2025-12-25T18:45:28.231 [DEBUG] [Thread-16630] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:45:28.289 [DEBUG] [Thread-16630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:45:28.289 [DEBUG] [Thread-16630] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:45:28.290 [DEBUG] [Thread-16630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:45:28.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:45:28.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:45:28.346 [DEBUG] [Thread-16630] [transport.py] [_log()] userauth is OK
2025-12-25T18:45:28.346 [DEBUG] [Thread-16630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:45:28.346 [DEBUG] [Thread-16630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:45:28.346 [DEBUG] [Thread-16630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:45:28.346 [DEBUG] [Thread-16630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:45:28.360 [INFO] [Thread-16630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:45:28.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:45:28.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:45:29.194 [DEBUG] [Thread-16630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:45:29.194 [DEBUG] [Thread-16630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:45:29.242 [DEBUG] [Thread-16630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:45:29.242 [DEBUG] [Thread-16630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:45:29.251 [DEBUG] [Thread-16630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:45:29.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:45:29.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:45:29.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-25T18:45:29.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:45:29.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:45:29.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:45:29.285 [DEBUG] [Thread-16630] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:45:35.833 [DEBUG] [Thread-16632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:50.875 [DEBUG] [Thread-16633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:45:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:45:59.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:45:59.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-25T18:46:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 45, 34), 24.83, 19.24, 0.0, 39.13, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:46:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:45:34
2025-12-25T18:46:00.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:46:00.304 [DEBUG] [Thread-16634] [transport.py] [_log()] starting thread (client mode): 0xb6bb6740
2025-12-25T18:46:00.304 [DEBUG] [Thread-16634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:46:00.325 [DEBUG] [Thread-16634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:46:00.325 [INFO] [Thread-16634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] client lang: <none>
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] server lang: <none>
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] kex follows: False
2025-12-25T18:46:00.328 [DEBUG] [Thread-16634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:46:00.329 [DEBUG] [Thread-16634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:46:00.329 [DEBUG] [Thread-16634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:46:00.329 [DEBUG] [Thread-16634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:46:00.329 [DEBUG] [Thread-16634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:46:00.329 [DEBUG] [Thread-16634] [transport.py] [_log()] Compression: none
2025-12-25T18:46:00.329 [DEBUG] [Thread-16634] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:46:00.344 [DEBUG] [Thread-16634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:46:00.345 [DEBUG] [Thread-16634] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:46:00.345 [DEBUG] [Thread-16634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:46:00.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:46:00.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:46:00.346 [DEBUG] [Thread-16634] [transport.py] [_log()] userauth is OK
2025-12-25T18:46:00.347 [DEBUG] [Thread-16634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:46:00.347 [DEBUG] [Thread-16634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:46:00.347 [DEBUG] [Thread-16634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:46:00.347 [DEBUG] [Thread-16634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:46:00.380 [INFO] [Thread-16634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:46:00.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:46:01.006 [DEBUG] [Thread-16634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:46:01.007 [DEBUG] [Thread-16634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:46:01.007 [DEBUG] [Thread-16634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:46:01.048 [DEBUG] [Thread-16634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:46:01.048 [DEBUG] [Thread-16634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:46:01.051 [DEBUG] [Thread-16634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:46:01.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:46:01.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:46:01.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:46:01.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:46:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:46:01.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:46:01.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:46:01.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:46:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:46:01.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.698324 -999.00  +23.50  32.83     25   +2.70 1 1 2 1 1   887    0 18.06 -132.13 ----- 34.2 32.8 291.8 49.4 24.9 -26.9 25.2 -26.4 25.3 -26.6 25.4 -25.7
2025-12-25T18:46:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:46:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:46:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.698324
2025-12-25T18:46:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:46:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:46:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:46:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:46:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:46:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:45:34', tmtdew=24.83, humidity=19.24, cloud=0.0, wind=39.13, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:45:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:46:01.079 [DEBUG] [Thread-16634] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:46:01.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-25T18:46:01.174 [DEBUG] [Thread-16637] [transport.py] [_log()] starting thread (client mode): 0xb6b63d60
2025-12-25T18:46:01.174 [DEBUG] [Thread-16637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:46:01.188 [DEBUG] [Thread-16637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:46:01.189 [INFO] [Thread-16637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] client lang: <none>
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] server lang: <none>
2025-12-25T18:46:01.196 [DEBUG] [Thread-16637] [transport.py] [_log()] kex follows: False
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] Compression: none
2025-12-25T18:46:01.197 [DEBUG] [Thread-16637] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:46:01.253 [DEBUG] [Thread-16637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:46:01.254 [DEBUG] [Thread-16637] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:46:01.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:46:01.254 [DEBUG] [Thread-16637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:46:01.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:46:01.311 [DEBUG] [Thread-16637] [transport.py] [_log()] userauth is OK
2025-12-25T18:46:01.311 [DEBUG] [Thread-16637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:46:01.311 [DEBUG] [Thread-16637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:46:01.311 [DEBUG] [Thread-16637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:46:01.311 [DEBUG] [Thread-16637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:46:01.327 [INFO] [Thread-16637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:46:01.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-25T18:46:01.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:46:02.172 [DEBUG] [Thread-16637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:46:02.172 [DEBUG] [Thread-16637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:46:02.221 [DEBUG] [Thread-16637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:46:02.221 [DEBUG] [Thread-16637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:46:02.229 [DEBUG] [Thread-16637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:46:02.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:46:02.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-25T18:46:02.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-25T18:46:02.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:46:02.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:46:02.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:46:02.261 [DEBUG] [Thread-16637] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:46:05.909 [DEBUG] [Thread-16639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:46:13.304 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:46:13.305 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:46:19.149 [DEBUG] [Thread-16640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:46:20.950 [DEBUG] [Thread-16641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:46:32.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:46:32.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:46:32.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-25T18:46:32.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 46, 6), 24.55, 19.62, 0.0, 37.62, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:46:32.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:46:06
2025-12-25T18:46:33.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:46:33.241 [DEBUG] [Thread-16642] [transport.py] [_log()] starting thread (client mode): 0xb95b2d10
2025-12-25T18:46:33.241 [DEBUG] [Thread-16642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:46:33.261 [DEBUG] [Thread-16642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:46:33.261 [INFO] [Thread-16642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:46:33.264 [DEBUG] [Thread-16642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:46:33.264 [DEBUG] [Thread-16642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] client lang: <none>
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] server lang: <none>
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] kex follows: False
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] Compression: none
2025-12-25T18:46:33.265 [DEBUG] [Thread-16642] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:46:33.283 [DEBUG] [Thread-16642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:46:33.283 [DEBUG] [Thread-16642] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:46:33.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:46:33.284 [DEBUG] [Thread-16642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:46:33.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:46:33.286 [DEBUG] [Thread-16642] [transport.py] [_log()] userauth is OK
2025-12-25T18:46:33.286 [DEBUG] [Thread-16642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:46:33.286 [DEBUG] [Thread-16642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:46:33.286 [DEBUG] [Thread-16642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:46:33.286 [DEBUG] [Thread-16642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:46:33.304 [INFO] [Thread-16642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:46:33.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:46:33.987 [DEBUG] [Thread-16642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:46:33.987 [DEBUG] [Thread-16642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:46:33.988 [DEBUG] [Thread-16642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:46:34.028 [DEBUG] [Thread-16642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:46:34.028 [DEBUG] [Thread-16642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:46:34.030 [DEBUG] [Thread-16642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:46:34.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:46:34.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:46:34.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:46:34.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:46:34.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:46:34.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:46:34.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:46:34.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:46:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:46:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.698671 -999.00  +23.50  24.38     25   +2.70 1 1 1 1 1   887    0 17.73 -140.69 ----- 25.2 24.4 279.2 34.6 24.9 -27.2 25.2 -26.4 25.3 -25.9 25.4 -25.7
2025-12-25T18:46:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:46:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:46:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.698671
2025-12-25T18:46:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:46:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:46:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:46:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:46:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:46:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:46:06', tmtdew=24.55, humidity=19.62, cloud=0.0, wind=37.62, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:46:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:46:34.055 [DEBUG] [Thread-16642] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:46:34.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-25T18:46:34.147 [DEBUG] [Thread-16645] [transport.py] [_log()] starting thread (client mode): 0xb6b21c90
2025-12-25T18:46:34.147 [DEBUG] [Thread-16645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:46:34.162 [DEBUG] [Thread-16645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:46:34.163 [INFO] [Thread-16645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:46:34.170 [DEBUG] [Thread-16645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:46:34.171 [DEBUG] [Thread-16645] [transport.py] [_log()] client lang: <none>
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] server lang: <none>
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] kex follows: False
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:46:34.172 [DEBUG] [Thread-16645] [transport.py] [_log()] Compression: none
2025-12-25T18:46:34.173 [DEBUG] [Thread-16645] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:46:34.228 [DEBUG] [Thread-16645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:46:34.229 [DEBUG] [Thread-16645] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:46:34.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:46:34.230 [DEBUG] [Thread-16645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:46:34.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:46:34.284 [DEBUG] [Thread-16645] [transport.py] [_log()] userauth is OK
2025-12-25T18:46:34.284 [DEBUG] [Thread-16645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:46:34.284 [DEBUG] [Thread-16645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:46:34.284 [DEBUG] [Thread-16645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:46:34.284 [DEBUG] [Thread-16645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:46:34.303 [INFO] [Thread-16645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:46:34.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-25T18:46:34.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:46:35.126 [DEBUG] [Thread-16645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:46:35.126 [DEBUG] [Thread-16645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:46:35.174 [DEBUG] [Thread-16645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:46:35.174 [DEBUG] [Thread-16645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:46:35.185 [DEBUG] [Thread-16645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:46:35.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:46:35.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:46:35.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-25T18:46:35.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:46:35.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:46:35.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:46:35.229 [DEBUG] [Thread-16645] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:46:35.986 [DEBUG] [Thread-16647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:46:51.031 [DEBUG] [Thread-16648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:05.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:47:05.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:47:05.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-25T18:47:05.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 46, 38), 24.34, 19.7, 0.0, 38.83, 23.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:47:05.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:46:38
2025-12-25T18:47:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:47:06.067 [DEBUG] [Thread-16649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:06.194 [DEBUG] [Thread-16650] [transport.py] [_log()] starting thread (client mode): 0xb95b1060
2025-12-25T18:47:06.194 [DEBUG] [Thread-16650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:47:06.215 [DEBUG] [Thread-16650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:47:06.215 [INFO] [Thread-16650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] client lang: <none>
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] server lang: <none>
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] kex follows: False
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] Compression: none
2025-12-25T18:47:06.218 [DEBUG] [Thread-16650] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:47:06.237 [DEBUG] [Thread-16650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:47:06.237 [DEBUG] [Thread-16650] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:47:06.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:47:06.238 [DEBUG] [Thread-16650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:47:06.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:47:06.241 [DEBUG] [Thread-16650] [transport.py] [_log()] userauth is OK
2025-12-25T18:47:06.241 [DEBUG] [Thread-16650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:47:06.241 [DEBUG] [Thread-16650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:47:06.241 [DEBUG] [Thread-16650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:47:06.241 [DEBUG] [Thread-16650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:47:06.285 [INFO] [Thread-16650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:47:06.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:47:06.917 [DEBUG] [Thread-16650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:47:06.917 [DEBUG] [Thread-16650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:47:06.917 [DEBUG] [Thread-16650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:47:06.958 [DEBUG] [Thread-16650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:47:06.958 [DEBUG] [Thread-16650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:47:06.962 [DEBUG] [Thread-16650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:47:06.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:47:06.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:47:06.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:47:06.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:47:06.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:47:06.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:47:06.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:47:06.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:47:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:47:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.699019 -999.00  +23.60  29.52     25   +2.70 1 1 1 1 1   887    0 17.57 -154.34 ----- 30.3 29.5 278.9 40.1 24.9 -27.8 25.1 -26.7 25.3 -25.8 25.4 -25.8
2025-12-25T18:47:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:47:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:47:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.699019
2025-12-25T18:47:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:47:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:47:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:47:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:47:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:47:06.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:46:38', tmtdew=24.34, humidity=19.7, cloud=0.0, wind=38.83, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:46:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:47:06.987 [DEBUG] [Thread-16650] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:47:07.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-25T18:47:07.081 [DEBUG] [Thread-16653] [transport.py] [_log()] starting thread (client mode): 0xb6b00e20
2025-12-25T18:47:07.081 [DEBUG] [Thread-16653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:47:07.096 [DEBUG] [Thread-16653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:47:07.096 [INFO] [Thread-16653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:47:07.103 [DEBUG] [Thread-16653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:47:07.103 [DEBUG] [Thread-16653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] client lang: <none>
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] server lang: <none>
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] kex follows: False
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] Compression: none
2025-12-25T18:47:07.104 [DEBUG] [Thread-16653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:47:07.165 [DEBUG] [Thread-16653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:47:07.165 [DEBUG] [Thread-16653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:47:07.166 [DEBUG] [Thread-16653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:47:07.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:47:07.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:47:07.221 [DEBUG] [Thread-16653] [transport.py] [_log()] userauth is OK
2025-12-25T18:47:07.221 [DEBUG] [Thread-16653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:47:07.222 [DEBUG] [Thread-16653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:47:07.222 [DEBUG] [Thread-16653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:47:07.222 [DEBUG] [Thread-16653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:47:07.243 [INFO] [Thread-16653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:47:07.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-25T18:47:07.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:47:08.111 [DEBUG] [Thread-16653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:47:08.112 [DEBUG] [Thread-16653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:47:08.160 [DEBUG] [Thread-16653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:47:08.160 [DEBUG] [Thread-16653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:47:08.169 [DEBUG] [Thread-16653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:47:08.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:47:08.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-25T18:47:08.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:47:08.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:47:08.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:47:08.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:47:08.202 [DEBUG] [Thread-16653] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:47:13.444 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:13.446 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:19.177 [DEBUG] [Thread-16655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:21.094 [DEBUG] [Thread-16656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:36.135 [DEBUG] [Thread-16657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:47:38.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:47:38.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:47:38.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-25T18:47:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 47, 10), 24.3, 19.76, 0.0, 36.98, 23.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:47:38.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:47:10
2025-12-25T18:47:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:47:39.178 [DEBUG] [Thread-16658] [transport.py] [_log()] starting thread (client mode): 0xb6b22f20
2025-12-25T18:47:39.178 [DEBUG] [Thread-16658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:47:39.199 [DEBUG] [Thread-16658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:47:39.199 [INFO] [Thread-16658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:47:39.200 [DEBUG] [Thread-16658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:47:39.200 [DEBUG] [Thread-16658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:47:39.200 [DEBUG] [Thread-16658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] client lang: <none>
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] server lang: <none>
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] kex follows: False
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] Compression: none
2025-12-25T18:47:39.201 [DEBUG] [Thread-16658] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:47:39.220 [DEBUG] [Thread-16658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:47:39.221 [DEBUG] [Thread-16658] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:47:39.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:47:39.222 [DEBUG] [Thread-16658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:47:39.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:47:39.224 [DEBUG] [Thread-16658] [transport.py] [_log()] userauth is OK
2025-12-25T18:47:39.224 [DEBUG] [Thread-16658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:47:39.224 [DEBUG] [Thread-16658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:47:39.225 [DEBUG] [Thread-16658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:47:39.225 [DEBUG] [Thread-16658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:47:39.249 [INFO] [Thread-16658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:47:39.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:47:39.898 [DEBUG] [Thread-16658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:47:39.899 [DEBUG] [Thread-16658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:47:39.899 [DEBUG] [Thread-16658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:47:39.940 [DEBUG] [Thread-16658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:47:39.941 [DEBUG] [Thread-16658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:47:39.943 [DEBUG] [Thread-16658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:47:39.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:47:39.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:47:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:47:39.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:47:39.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:47:39.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:47:39.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:47:39.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:47:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:47:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.699366 -999.00  +23.40  34.75     25   +2.70 1 1 2 1 1   887    0 17.21 -165.01 ----- 32.3 34.8 291.8 50.8 24.8 -26.9 25.1 -26.6 25.1 -25.9 25.4 -25.8
2025-12-25T18:47:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:47:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:47:39.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.699366
2025-12-25T18:47:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:47:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:47:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:47:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:47:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:47:39.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:47:10', tmtdew=24.3, humidity=19.76, cloud=0.0, wind=36.98, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:47:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:47:39.968 [DEBUG] [Thread-16658] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:47:40.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-25T18:47:40.068 [DEBUG] [Thread-16661] [transport.py] [_log()] starting thread (client mode): 0xb6b63430
2025-12-25T18:47:40.068 [DEBUG] [Thread-16661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:47:40.082 [DEBUG] [Thread-16661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:47:40.082 [INFO] [Thread-16661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:47:40.090 [DEBUG] [Thread-16661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:47:40.090 [DEBUG] [Thread-16661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] client lang: <none>
2025-12-25T18:47:40.091 [DEBUG] [Thread-16661] [transport.py] [_log()] server lang: <none>
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] kex follows: False
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] Compression: none
2025-12-25T18:47:40.092 [DEBUG] [Thread-16661] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:47:40.150 [DEBUG] [Thread-16661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:47:40.150 [DEBUG] [Thread-16661] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:47:40.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:47:40.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:47:40.152 [DEBUG] [Thread-16661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:47:40.205 [DEBUG] [Thread-16661] [transport.py] [_log()] userauth is OK
2025-12-25T18:47:40.206 [DEBUG] [Thread-16661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:47:40.206 [DEBUG] [Thread-16661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:47:40.206 [DEBUG] [Thread-16661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:47:40.206 [DEBUG] [Thread-16661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:47:40.225 [INFO] [Thread-16661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:47:40.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-25T18:47:40.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:47:41.052 [DEBUG] [Thread-16661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:47:41.053 [DEBUG] [Thread-16661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:47:41.101 [DEBUG] [Thread-16661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:47:41.101 [DEBUG] [Thread-16661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:47:41.110 [DEBUG] [Thread-16661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:47:41.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:47:41.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-25T18:47:41.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:47:41.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:47:41.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:47:41.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:47:41.147 [DEBUG] [Thread-16661] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:47:51.173 [DEBUG] [Thread-16663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:06.216 [DEBUG] [Thread-16664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:48:11.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:48:11.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:48:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 47, 42), 24.16, 20.25, 0.0, 41.94, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:48:11.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:47:42
2025-12-25T18:48:11.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:48:12.141 [DEBUG] [Thread-16665] [transport.py] [_log()] starting thread (client mode): 0xb6b4fb50
2025-12-25T18:48:12.141 [DEBUG] [Thread-16665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:48:12.162 [DEBUG] [Thread-16665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:48:12.162 [INFO] [Thread-16665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] client lang: <none>
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] server lang: <none>
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] kex follows: False
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:48:12.166 [DEBUG] [Thread-16665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:48:12.167 [DEBUG] [Thread-16665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:48:12.167 [DEBUG] [Thread-16665] [transport.py] [_log()] Compression: none
2025-12-25T18:48:12.167 [DEBUG] [Thread-16665] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:48:12.175 [DEBUG] [Thread-16665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:48:12.175 [DEBUG] [Thread-16665] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:48:12.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:48:12.176 [DEBUG] [Thread-16665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:48:12.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:48:12.178 [DEBUG] [Thread-16665] [transport.py] [_log()] userauth is OK
2025-12-25T18:48:12.179 [DEBUG] [Thread-16665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:48:12.179 [DEBUG] [Thread-16665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:48:12.179 [DEBUG] [Thread-16665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:48:12.179 [DEBUG] [Thread-16665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:48:12.198 [INFO] [Thread-16665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:48:12.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:48:12.852 [DEBUG] [Thread-16665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:48:12.852 [DEBUG] [Thread-16665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:48:12.853 [DEBUG] [Thread-16665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:48:12.893 [DEBUG] [Thread-16665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:48:12.893 [DEBUG] [Thread-16665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:48:12.897 [DEBUG] [Thread-16665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:48:12.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:48:12.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:48:12.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:48:12.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:48:12.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:48:12.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:48:12.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:48:12.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:48:12.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:48:12.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.699713 -999.00  +23.40  34.68     25   +2.70 1 1 2 1 1   887    0 16.35 -171.13 ----- 30.6 34.7 288.4 43.6 24.8 -26.9 25.1 -26.4 25.2 -24.9 25.3 -25.6
2025-12-25T18:48:12.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:48:12.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:48:12.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.699713
2025-12-25T18:48:12.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:48:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:48:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:48:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:48:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:48:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:47:42', tmtdew=24.16, humidity=20.25, cloud=0.0, wind=41.94, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:47:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:48:12.925 [DEBUG] [Thread-16665] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:48:13.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-25T18:48:13.020 [DEBUG] [Thread-16668] [transport.py] [_log()] starting thread (client mode): 0xb6b4fb20
2025-12-25T18:48:13.020 [DEBUG] [Thread-16668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:48:13.034 [DEBUG] [Thread-16668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:48:13.035 [INFO] [Thread-16668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:48:13.042 [DEBUG] [Thread-16668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:48:13.042 [DEBUG] [Thread-16668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] client lang: <none>
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] server lang: <none>
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] kex follows: False
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] Compression: none
2025-12-25T18:48:13.043 [DEBUG] [Thread-16668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:48:13.103 [DEBUG] [Thread-16668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:48:13.103 [DEBUG] [Thread-16668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:48:13.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:48:13.104 [DEBUG] [Thread-16668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:48:13.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:48:13.158 [DEBUG] [Thread-16668] [transport.py] [_log()] userauth is OK
2025-12-25T18:48:13.159 [DEBUG] [Thread-16668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:48:13.159 [DEBUG] [Thread-16668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:48:13.159 [DEBUG] [Thread-16668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:48:13.159 [DEBUG] [Thread-16668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:48:13.178 [INFO] [Thread-16668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:48:13.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-25T18:48:13.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:48:13.586 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:13.587 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:14.016 [DEBUG] [Thread-16668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:48:14.016 [DEBUG] [Thread-16668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:48:14.065 [DEBUG] [Thread-16668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:48:14.066 [DEBUG] [Thread-16668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:48:14.075 [DEBUG] [Thread-16668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:48:14.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:48:14.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-25T18:48:14.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-25T18:48:14.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:48:14.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:48:14.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:48:14.111 [DEBUG] [Thread-16668] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:48:19.223 [DEBUG] [Thread-16670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:21.254 [DEBUG] [Thread-16671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:36.305 [DEBUG] [Thread-16672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:48:44.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:48:44.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:48:44.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-25T18:48:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 48, 14), 24.1, 20.33, 0.0, 36.86, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:48:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:48:14
2025-12-25T18:48:44.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:48:45.101 [DEBUG] [Thread-16673] [transport.py] [_log()] starting thread (client mode): 0xb6b4f1c0
2025-12-25T18:48:45.102 [DEBUG] [Thread-16673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:48:45.121 [DEBUG] [Thread-16673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:48:45.121 [INFO] [Thread-16673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:48:45.124 [DEBUG] [Thread-16673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:48:45.124 [DEBUG] [Thread-16673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] client lang: <none>
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] server lang: <none>
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] kex follows: False
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:48:45.125 [DEBUG] [Thread-16673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:48:45.126 [DEBUG] [Thread-16673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:48:45.126 [DEBUG] [Thread-16673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:48:45.126 [DEBUG] [Thread-16673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:48:45.126 [DEBUG] [Thread-16673] [transport.py] [_log()] Compression: none
2025-12-25T18:48:45.126 [DEBUG] [Thread-16673] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:48:45.145 [DEBUG] [Thread-16673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:48:45.146 [DEBUG] [Thread-16673] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:48:45.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:48:45.148 [DEBUG] [Thread-16673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:48:45.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:48:45.150 [DEBUG] [Thread-16673] [transport.py] [_log()] userauth is OK
2025-12-25T18:48:45.150 [DEBUG] [Thread-16673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:48:45.151 [DEBUG] [Thread-16673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:48:45.151 [DEBUG] [Thread-16673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:48:45.151 [DEBUG] [Thread-16673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:48:45.172 [INFO] [Thread-16673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:48:45.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:48:45.829 [DEBUG] [Thread-16673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:48:45.829 [DEBUG] [Thread-16673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:48:45.830 [DEBUG] [Thread-16673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:48:45.870 [DEBUG] [Thread-16673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:48:45.870 [DEBUG] [Thread-16673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:48:45.873 [DEBUG] [Thread-16673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:48:45.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:48:45.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:48:45.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:48:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:48:45.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:48:45.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:48:45.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:48:45.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:48:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:48:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.700407 -999.00  +23.30  28.15     25   +2.60 1 1 1 1 1   887    0 16.94 -164.25 ----- 26.3 28.1 290.9 44.4 24.7 -27.0 25.0 -26.6 25.2 -25.4 25.2 -25.7
2025-12-25T18:48:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:48:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:48:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.700407
2025-12-25T18:48:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:48:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:48:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:48:45.896 [DEBUG] [Thread-16673] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:48:45.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:48:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:48:45.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:48:14', tmtdew=24.1, humidity=20.33, cloud=0.0, wind=36.86, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:48:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:48:45.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:48:45.991 [DEBUG] [Thread-16676] [transport.py] [_log()] starting thread (client mode): 0xb6b00b20
2025-12-25T18:48:45.991 [DEBUG] [Thread-16676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:48:46.006 [DEBUG] [Thread-16676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:48:46.006 [INFO] [Thread-16676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] client lang: <none>
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] server lang: <none>
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] kex follows: False
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:48:46.014 [DEBUG] [Thread-16676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:48:46.015 [DEBUG] [Thread-16676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:48:46.015 [DEBUG] [Thread-16676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:48:46.015 [DEBUG] [Thread-16676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:48:46.015 [DEBUG] [Thread-16676] [transport.py] [_log()] Compression: none
2025-12-25T18:48:46.015 [DEBUG] [Thread-16676] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:48:46.076 [DEBUG] [Thread-16676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:48:46.076 [DEBUG] [Thread-16676] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:48:46.077 [DEBUG] [Thread-16676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:48:46.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:48:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:48:46.135 [DEBUG] [Thread-16676] [transport.py] [_log()] userauth is OK
2025-12-25T18:48:46.135 [DEBUG] [Thread-16676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:48:46.135 [DEBUG] [Thread-16676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:48:46.136 [DEBUG] [Thread-16676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:48:46.136 [DEBUG] [Thread-16676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:48:46.155 [INFO] [Thread-16676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:48:46.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-25T18:48:46.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:48:47.038 [DEBUG] [Thread-16676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:48:47.038 [DEBUG] [Thread-16676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:48:47.086 [DEBUG] [Thread-16676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:48:47.086 [DEBUG] [Thread-16676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:48:47.094 [DEBUG] [Thread-16676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:48:47.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:48:47.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-25T18:48: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-25T18:48:47.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:48:47.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:48:47.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:48:47.126 [DEBUG] [Thread-16676] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:48:51.333 [DEBUG] [Thread-16678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:06.397 [DEBUG] [Thread-16679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:13.727 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:13.729 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:49:17.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:49:17.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-25T18:49:17.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 48, 46), 24.37, 19.6, 0.0, 35.77, 23.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:49:17.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:48:46
2025-12-25T18:49:18.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:49:18.170 [DEBUG] [Thread-16680] [transport.py] [_log()] starting thread (client mode): 0xb6b4f940
2025-12-25T18:49:18.170 [DEBUG] [Thread-16680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:49:18.190 [DEBUG] [Thread-16680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:49:18.190 [INFO] [Thread-16680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] client lang: <none>
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] server lang: <none>
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] kex follows: False
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] Compression: none
2025-12-25T18:49:18.193 [DEBUG] [Thread-16680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:49:18.209 [DEBUG] [Thread-16680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:49:18.209 [DEBUG] [Thread-16680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:49:18.210 [DEBUG] [Thread-16680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:49:18.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:49:18.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:49:18.210 [DEBUG] [Thread-16680] [transport.py] [_log()] userauth is OK
2025-12-25T18:49:18.210 [DEBUG] [Thread-16680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:49:18.210 [DEBUG] [Thread-16680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:49:18.210 [DEBUG] [Thread-16680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:49:18.210 [DEBUG] [Thread-16680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:49:18.220 [INFO] [Thread-16680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:49:18.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:49:18.843 [DEBUG] [Thread-16680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:49:18.844 [DEBUG] [Thread-16680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:49:18.844 [DEBUG] [Thread-16680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:49:18.884 [DEBUG] [Thread-16680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:49:18.884 [DEBUG] [Thread-16680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:49:18.887 [DEBUG] [Thread-16680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:49:18.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:49:18.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:49:18.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:49:18.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:49:18.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:49:18.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:49:18.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.700755 -999.00  +23.40  25.72     25   +2.60 1 1 1 1 1   887    0 17.07 -159.61 ----- 31.2 25.7 291.6 39.7 24.7 -27.3 25.0 -26.4 25.1 -24.1 25.2 -25.9
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.700755
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:49:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:49:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:49:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:49:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:48:46', tmtdew=24.37, humidity=19.6, cloud=0.0, wind=35.77, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:49:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:49:18.905 [DEBUG] [Thread-16680] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:49:18.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-25T18:49:18.994 [DEBUG] [Thread-16683] [transport.py] [_log()] starting thread (client mode): 0xb6b02aa0
2025-12-25T18:49:18.994 [DEBUG] [Thread-16683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:49:19.009 [DEBUG] [Thread-16683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:49:19.009 [INFO] [Thread-16683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:49:19.016 [DEBUG] [Thread-16683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] client lang: <none>
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] server lang: <none>
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] kex follows: False
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] Compression: none
2025-12-25T18:49:19.017 [DEBUG] [Thread-16683] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:49:19.073 [DEBUG] [Thread-16683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:49:19.073 [DEBUG] [Thread-16683] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:49:19.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:49:19.074 [DEBUG] [Thread-16683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:49:19.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:49:19.131 [DEBUG] [Thread-16683] [transport.py] [_log()] userauth is OK
2025-12-25T18:49:19.131 [DEBUG] [Thread-16683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:49:19.131 [DEBUG] [Thread-16683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:49:19.131 [DEBUG] [Thread-16683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:49:19.131 [DEBUG] [Thread-16683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:49:19.145 [INFO] [Thread-16683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:49:19.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:49:19.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:49:19.253 [DEBUG] [Thread-16685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:19.979 [DEBUG] [Thread-16683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:49:19.979 [DEBUG] [Thread-16683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:49:20.027 [DEBUG] [Thread-16683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:49:20.027 [DEBUG] [Thread-16683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:49:20.036 [DEBUG] [Thread-16683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:49:20.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:49:20.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-25T18:49:20.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-25T18:49:20.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:49:20.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:49:20.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:49:20.067 [DEBUG] [Thread-16683] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:49:21.434 [DEBUG] [Thread-16686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:36.485 [DEBUG] [Thread-16687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:50.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:49:50.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:49:50.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-25T18:49:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 49, 18), 24.38, 19.58, 0.0, 37.39, 23.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:49:50.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:49:18
2025-12-25T18:49:50.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:49:51.061 [DEBUG] [Thread-16688] [transport.py] [_log()] starting thread (client mode): 0xb6b01000
2025-12-25T18:49:51.061 [DEBUG] [Thread-16688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:49:51.081 [DEBUG] [Thread-16688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:49:51.081 [INFO] [Thread-16688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] client lang: <none>
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] server lang: <none>
2025-12-25T18:49:51.085 [DEBUG] [Thread-16688] [transport.py] [_log()] kex follows: False
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] Compression: none
2025-12-25T18:49:51.086 [DEBUG] [Thread-16688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:49:51.101 [DEBUG] [Thread-16688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:49:51.102 [DEBUG] [Thread-16688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:49:51.102 [DEBUG] [Thread-16688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:49:51.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:49:51.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:49:51.104 [DEBUG] [Thread-16688] [transport.py] [_log()] userauth is OK
2025-12-25T18:49:51.104 [DEBUG] [Thread-16688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:49:51.104 [DEBUG] [Thread-16688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:49:51.104 [DEBUG] [Thread-16688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:49:51.104 [DEBUG] [Thread-16688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:49:51.128 [INFO] [Thread-16688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:49:51.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:49:51.521 [DEBUG] [Thread-16690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:49:51.786 [DEBUG] [Thread-16688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:49:51.786 [DEBUG] [Thread-16688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:49:51.786 [DEBUG] [Thread-16688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:49:51.827 [DEBUG] [Thread-16688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:49:51.827 [DEBUG] [Thread-16688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:49:51.829 [DEBUG] [Thread-16688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:49:51.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:49:51.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:49:51.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:49:51.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:49:51.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:49:51.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:49:51.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.701102 -999.00  +23.30  33.18     25   +2.60 1 1 2 1 1   887    0 17.51 -157.55 ----- 31.1 33.2 292.8 39.0 24.7 -27.1 25.0 -26.5 25.0 -25.7 25.2 -25.8
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.701102
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:49:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:49:18', tmtdew=24.38, humidity=19.58, cloud=0.0, wind=37.39, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:49:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:49:51.848 [DEBUG] [Thread-16688] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:49:51.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-25T18:50:06.546 [DEBUG] [Thread-16692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:50:13.866 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:50:13.867 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:50:19.286 [DEBUG] [Thread-16693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:50:21.603 [DEBUG] [Thread-16694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:50:36.633 [DEBUG] [Thread-16695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:50:51.666 [DEBUG] [Thread-16696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:06.702 [DEBUG] [Thread-16697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:14.007 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:14.008 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:19.337 [DEBUG] [Thread-16698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:21.733 [DEBUG] [Thread-16699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:36.767 [DEBUG] [Thread-16700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:51:51.804 [DEBUG] [Thread-16701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:04.181 [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-25T18:52:06.833 [DEBUG] [Thread-16702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:14.147 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:14.149 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:19.380 [DEBUG] [Thread-16703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:21.869 [DEBUG] [Thread-16704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:34.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:52:34.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:52:34.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:52:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 52, 30), 24.26, 20.28, 0.0, 36.05, 23.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:52:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:52:30
2025-12-25T18:52:35.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:52:35.198 [DEBUG] [Thread-16705] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f70
2025-12-25T18:52:35.198 [DEBUG] [Thread-16705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:52:35.217 [DEBUG] [Thread-16705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:52:35.218 [INFO] [Thread-16705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:52:35.224 [DEBUG] [Thread-16705] [transport.py] [_log()] client lang: <none>
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] server lang: <none>
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] kex follows: False
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] Compression: none
2025-12-25T18:52:35.225 [DEBUG] [Thread-16705] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:52:35.236 [DEBUG] [Thread-16705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:52:35.237 [DEBUG] [Thread-16705] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:52:35.237 [DEBUG] [Thread-16705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:52:35.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:52:35.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:52:35.240 [DEBUG] [Thread-16705] [transport.py] [_log()] userauth is OK
2025-12-25T18:52:35.240 [DEBUG] [Thread-16705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:52:35.240 [DEBUG] [Thread-16705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:52:35.240 [DEBUG] [Thread-16705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:52:35.240 [DEBUG] [Thread-16705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:52:35.259 [INFO] [Thread-16705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:52:35.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:52:35.893 [DEBUG] [Thread-16705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:52:35.893 [DEBUG] [Thread-16705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:52:35.894 [DEBUG] [Thread-16705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:52:35.934 [DEBUG] [Thread-16705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:52:35.934 [DEBUG] [Thread-16705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:52:35.937 [DEBUG] [Thread-16705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:52:35.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:52:35.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:52:35.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:52:35.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:52:35.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:52:35.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:52:35.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:52:35.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:52:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:52:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.702838 -999.00  +23.40  32.41     26   +2.80 1 1 2 1 1   887    0 18.20 -144.24 ----- 34.4 32.4 298.5 38.9 24.6 -26.8 24.9 -26.0 25.0 -23.7 25.1 -25.6
2025-12-25T18:52:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:52:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:52:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.702838
2025-12-25T18:52:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:52:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:52:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:52:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:52:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:52:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:52:30', tmtdew=24.26, humidity=20.28, cloud=0.0, wind=36.05, temperature=23.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:52:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:52:35.960 [DEBUG] [Thread-16705] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:52:36.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-25T18:52:36.053 [DEBUG] [Thread-16708] [transport.py] [_log()] starting thread (client mode): 0xb6b62770
2025-12-25T18:52:36.054 [DEBUG] [Thread-16708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:52:36.068 [DEBUG] [Thread-16708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:52:36.069 [INFO] [Thread-16708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:52:36.076 [DEBUG] [Thread-16708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:52:36.076 [DEBUG] [Thread-16708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:52:36.076 [DEBUG] [Thread-16708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:52:36.076 [DEBUG] [Thread-16708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:52:36.076 [DEBUG] [Thread-16708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] client lang: <none>
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] server lang: <none>
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] kex follows: False
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] Compression: none
2025-12-25T18:52:36.077 [DEBUG] [Thread-16708] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:52:36.135 [DEBUG] [Thread-16708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:52:36.136 [DEBUG] [Thread-16708] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:52:36.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:52:36.137 [DEBUG] [Thread-16708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:52:36.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:52:36.191 [DEBUG] [Thread-16708] [transport.py] [_log()] userauth is OK
2025-12-25T18:52:36.191 [DEBUG] [Thread-16708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:52:36.192 [DEBUG] [Thread-16708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:52:36.192 [DEBUG] [Thread-16708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:52:36.192 [DEBUG] [Thread-16708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:52:36.217 [INFO] [Thread-16708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:52:36.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-25T18:52:36.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:52:36.899 [DEBUG] [Thread-16710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:52:37.058 [DEBUG] [Thread-16708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:52:37.058 [DEBUG] [Thread-16708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:52:37.106 [DEBUG] [Thread-16708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:52:37.106 [DEBUG] [Thread-16708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:52:37.116 [DEBUG] [Thread-16708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:52:37.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:52:37.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-25T18:52:37.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-25T18:52:37.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:52:37.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:52:37.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:52:37.152 [DEBUG] [Thread-16708] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:52:51.953 [DEBUG] [Thread-16711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:06.989 [DEBUG] [Thread-16712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:07.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:53:07.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:53:07.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-25T18:53:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 53, 2), 24.19, 20.35, 0.0, 31.72, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:53:07.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:53:02
2025-12-25T18:53:08.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:53:08.208 [DEBUG] [Thread-16713] [transport.py] [_log()] starting thread (client mode): 0xb95593c0
2025-12-25T18:53:08.208 [DEBUG] [Thread-16713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:53:08.227 [DEBUG] [Thread-16713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:53:08.227 [INFO] [Thread-16713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:53:08.230 [DEBUG] [Thread-16713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] client lang: <none>
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] server lang: <none>
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] kex follows: False
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] Compression: none
2025-12-25T18:53:08.231 [DEBUG] [Thread-16713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:53:08.243 [DEBUG] [Thread-16713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:53:08.243 [DEBUG] [Thread-16713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:53:08.243 [DEBUG] [Thread-16713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:53:08.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:53:08.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:53:08.244 [DEBUG] [Thread-16713] [transport.py] [_log()] userauth is OK
2025-12-25T18:53:08.244 [DEBUG] [Thread-16713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:53:08.244 [DEBUG] [Thread-16713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:53:08.244 [DEBUG] [Thread-16713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:53:08.244 [DEBUG] [Thread-16713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:53:08.253 [INFO] [Thread-16713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:53:08.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:53:08.879 [DEBUG] [Thread-16713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:53:08.879 [DEBUG] [Thread-16713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:53:08.879 [DEBUG] [Thread-16713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:53:08.919 [DEBUG] [Thread-16713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:53:08.919 [DEBUG] [Thread-16713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:53:08.925 [DEBUG] [Thread-16713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:53:08.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:53:08.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:53:08.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:53:08.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:53:08.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:53:08.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:53:08.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:53:08.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.703475 -999.00  +23.30  37.35     26   +2.90 1 1 2 1 1   887    0 17.19 -134.44 ----- 37.4 37.4 290.2 48.6 24.5 -26.6 24.9 -26.4 24.9 -24.6 25.0 -25.3
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.703475
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:53:08.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:53:02', tmtdew=24.19, humidity=20.35, cloud=0.0, wind=31.72, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:53:00.240', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:53:08.941 [DEBUG] [Thread-16713] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:53:09.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-25T18:53:09.025 [DEBUG] [Thread-16716] [transport.py] [_log()] starting thread (client mode): 0xb6b032b0
2025-12-25T18:53:09.025 [DEBUG] [Thread-16716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:53:09.040 [DEBUG] [Thread-16716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:53:09.040 [INFO] [Thread-16716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] client lang: <none>
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] server lang: <none>
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] kex follows: False
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] Compression: none
2025-12-25T18:53:09.048 [DEBUG] [Thread-16716] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:53:09.105 [DEBUG] [Thread-16716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:53:09.105 [DEBUG] [Thread-16716] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:53:09.105 [DEBUG] [Thread-16716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:53:09.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:53:09.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:53:09.163 [DEBUG] [Thread-16716] [transport.py] [_log()] userauth is OK
2025-12-25T18:53:09.163 [DEBUG] [Thread-16716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:53:09.163 [DEBUG] [Thread-16716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:53:09.163 [DEBUG] [Thread-16716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:53:09.163 [DEBUG] [Thread-16716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:53:09.176 [INFO] [Thread-16716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:53:09.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-25T18:53:09.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:53:10.029 [DEBUG] [Thread-16716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:53:10.029 [DEBUG] [Thread-16716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:53:10.077 [DEBUG] [Thread-16716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:53:10.077 [DEBUG] [Thread-16716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:53:10.085 [DEBUG] [Thread-16716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:53:10.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:53:10.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:53:10.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:53:10.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:53:10.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:53:10.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:53:10.117 [DEBUG] [Thread-16716] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:53:14.289 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:14.291 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:19.413 [DEBUG] [Thread-16718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:22.022 [DEBUG] [Thread-16719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:37.082 [DEBUG] [Thread-16720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:53:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:53:40.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:53:40.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-25T18:53:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 53, 34), 24.11, 20.45, 0.0, 38.31, 23.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:53:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:53:34
2025-12-25T18:53:40.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:53:41.134 [DEBUG] [Thread-16721] [transport.py] [_log()] starting thread (client mode): 0xb6bb6a10
2025-12-25T18:53:41.134 [DEBUG] [Thread-16721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:53:41.148 [DEBUG] [Thread-16721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:53:41.148 [INFO] [Thread-16721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] client lang: <none>
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] server lang: <none>
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] kex follows: False
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] Compression: none
2025-12-25T18:53:41.149 [DEBUG] [Thread-16721] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:53:41.159 [DEBUG] [Thread-16721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:53:41.160 [DEBUG] [Thread-16721] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:53:41.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:53:41.160 [DEBUG] [Thread-16721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:53:41.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:53:41.161 [DEBUG] [Thread-16721] [transport.py] [_log()] userauth is OK
2025-12-25T18:53:41.161 [DEBUG] [Thread-16721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:53:41.161 [DEBUG] [Thread-16721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:53:41.161 [DEBUG] [Thread-16721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:53:41.161 [DEBUG] [Thread-16721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:53:41.173 [INFO] [Thread-16721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:53:41.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:53:41.765 [DEBUG] [Thread-16721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:53:41.765 [DEBUG] [Thread-16721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:53:41.766 [DEBUG] [Thread-16721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:53:41.806 [DEBUG] [Thread-16721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:53:41.806 [DEBUG] [Thread-16721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:53:41.809 [DEBUG] [Thread-16721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:53:41.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:53:41.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:53:41.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:53:41.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:53:41.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:53:41.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:53:41.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:53:41.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:53:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:53:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.703880 -999.00  +23.20  43.77     26   +2.80 1 1 2 1 1   887    0 18.40 -119.59 ----- 42.9 43.8 296.4 48.3 24.5 -27.0 24.8 -26.6 24.9 -25.6 25.0 -25.7
2025-12-25T18:53:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:53:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:53:41.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.703880
2025-12-25T18:53:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:53:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:53:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:53:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:53:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:53:41.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:53:34', tmtdew=24.11, humidity=20.45, cloud=0.0, wind=38.31, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:53:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:53:41.834 [DEBUG] [Thread-16721] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:53:41.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-25T18:53:41.924 [DEBUG] [Thread-16724] [transport.py] [_log()] starting thread (client mode): 0xb6b4fb20
2025-12-25T18:53:41.924 [DEBUG] [Thread-16724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:53:41.938 [DEBUG] [Thread-16724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:53:41.938 [INFO] [Thread-16724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] client lang: <none>
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] server lang: <none>
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] kex follows: False
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] Compression: none
2025-12-25T18:53:41.946 [DEBUG] [Thread-16724] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:53:42.004 [DEBUG] [Thread-16724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:53:42.004 [DEBUG] [Thread-16724] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:53:42.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:53:42.006 [DEBUG] [Thread-16724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:53:42.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:53:42.060 [DEBUG] [Thread-16724] [transport.py] [_log()] userauth is OK
2025-12-25T18:53:42.060 [DEBUG] [Thread-16724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:53:42.060 [DEBUG] [Thread-16724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:53:42.060 [DEBUG] [Thread-16724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:53:42.061 [DEBUG] [Thread-16724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:53:42.084 [INFO] [Thread-16724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:53:42.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-25T18:53:42.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:53:42.912 [DEBUG] [Thread-16724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:53:42.912 [DEBUG] [Thread-16724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:53:42.960 [DEBUG] [Thread-16724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:53:42.961 [DEBUG] [Thread-16724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:53:42.969 [DEBUG] [Thread-16724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:53:42.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:53:42.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:53:42.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-25T18:53:42.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:53:42.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:53:42.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:53:43.004 [DEBUG] [Thread-16724] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:53:52.114 [DEBUG] [Thread-16726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:07.174 [DEBUG] [Thread-16727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:54:13.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:54:13.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-25T18:54:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 54, 7), 24.15, 20.38, 0.0, 40.97, 23.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:54:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:54:07
2025-12-25T18:54:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:54:14.024 [DEBUG] [Thread-16728] [transport.py] [_log()] starting thread (client mode): 0xb6b4ec50
2025-12-25T18:54:14.024 [DEBUG] [Thread-16728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:54:14.049 [DEBUG] [Thread-16728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:54:14.049 [INFO] [Thread-16728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:54:14.051 [DEBUG] [Thread-16728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] client lang: <none>
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] server lang: <none>
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] kex follows: False
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:54:14.052 [DEBUG] [Thread-16728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:54:14.053 [DEBUG] [Thread-16728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:54:14.053 [DEBUG] [Thread-16728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:54:14.053 [DEBUG] [Thread-16728] [transport.py] [_log()] Compression: none
2025-12-25T18:54:14.053 [DEBUG] [Thread-16728] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:54:14.065 [DEBUG] [Thread-16728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:54:14.066 [DEBUG] [Thread-16728] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:54:14.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:54:14.067 [DEBUG] [Thread-16728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:54:14.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:54:14.068 [DEBUG] [Thread-16728] [transport.py] [_log()] userauth is OK
2025-12-25T18:54:14.068 [DEBUG] [Thread-16728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:54:14.068 [DEBUG] [Thread-16728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:54:14.068 [DEBUG] [Thread-16728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:54:14.069 [DEBUG] [Thread-16728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:54:14.092 [INFO] [Thread-16728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:54:14.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:54:14.436 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:14.438 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:14.649 [DEBUG] [Thread-16728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:54:14.649 [DEBUG] [Thread-16728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:54:14.649 [DEBUG] [Thread-16728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:54:14.689 [DEBUG] [Thread-16728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:54:14.689 [DEBUG] [Thread-16728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:54:14.692 [DEBUG] [Thread-16728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:54:14.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:54:14.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:54:14.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:54:14.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:54:14.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:54:14.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:54:14.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:54:14.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:54:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:54:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.704227 -999.00  +23.10  37.74     26   +2.80 1 1 2 1 1   887    0 18.12 -113.82 ----- 39.5 37.7 298.0 47.5 24.4 -26.8 24.8 -26.3 24.8 -24.4 24.9 -25.4
2025-12-25T18:54:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:54:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:54:14.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.704227
2025-12-25T18:54:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:54:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:54:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:54:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:54:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:54:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:54:07', tmtdew=24.15, humidity=20.38, cloud=0.0, wind=40.97, temperature=23.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:54:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:54:14.721 [DEBUG] [Thread-16728] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:54:14.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-25T18:54:14.815 [DEBUG] [Thread-16731] [transport.py] [_log()] starting thread (client mode): 0xb6b4fca0
2025-12-25T18:54:14.815 [DEBUG] [Thread-16731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:54:14.829 [DEBUG] [Thread-16731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:54:14.829 [INFO] [Thread-16731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:54:14.836 [DEBUG] [Thread-16731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] client lang: <none>
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] server lang: <none>
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] kex follows: False
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:54:14.837 [DEBUG] [Thread-16731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:54:14.838 [DEBUG] [Thread-16731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:54:14.838 [DEBUG] [Thread-16731] [transport.py] [_log()] Compression: none
2025-12-25T18:54:14.838 [DEBUG] [Thread-16731] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:54:14.895 [DEBUG] [Thread-16731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:54:14.896 [DEBUG] [Thread-16731] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:54:14.896 [DEBUG] [Thread-16731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:54:14.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:54:14.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:54:14.952 [DEBUG] [Thread-16731] [transport.py] [_log()] userauth is OK
2025-12-25T18:54:14.952 [DEBUG] [Thread-16731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:54:14.953 [DEBUG] [Thread-16731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:54:14.953 [DEBUG] [Thread-16731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:54:14.953 [DEBUG] [Thread-16731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:54:14.973 [INFO] [Thread-16731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:54:14.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-25T18:54:14.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:54:15.807 [DEBUG] [Thread-16731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:54:15.808 [DEBUG] [Thread-16731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:54:15.855 [DEBUG] [Thread-16731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:54:15.856 [DEBUG] [Thread-16731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:54:15.864 [DEBUG] [Thread-16731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:54:15.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:54:15.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-25T18:54:15.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-25T18:54:15.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:54:15.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:54:15.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:54:15.898 [DEBUG] [Thread-16731] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:54:19.457 [DEBUG] [Thread-16733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:22.204 [DEBUG] [Thread-16734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:37.251 [DEBUG] [Thread-16735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:54:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:54:45.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:54:45.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-25T18:54:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 54, 39), 24.08, 20.41, 0.0, 39.66, 23.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:54:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:54:39
2025-12-25T18:54:46.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:54:46.899 [DEBUG] [Thread-16736] [transport.py] [_log()] starting thread (client mode): 0xb6b02590
2025-12-25T18:54:46.899 [DEBUG] [Thread-16736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:54:46.919 [DEBUG] [Thread-16736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:54:46.919 [INFO] [Thread-16736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:54:46.920 [DEBUG] [Thread-16736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] client lang: <none>
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] server lang: <none>
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] kex follows: False
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] Compression: none
2025-12-25T18:54:46.921 [DEBUG] [Thread-16736] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:54:46.929 [DEBUG] [Thread-16736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:54:46.929 [DEBUG] [Thread-16736] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:54:46.930 [DEBUG] [Thread-16736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:54:46.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:54:46.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:54:46.931 [DEBUG] [Thread-16736] [transport.py] [_log()] userauth is OK
2025-12-25T18:54:46.931 [DEBUG] [Thread-16736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:54:46.932 [DEBUG] [Thread-16736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:54:46.932 [DEBUG] [Thread-16736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:54:46.932 [DEBUG] [Thread-16736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:54:46.955 [INFO] [Thread-16736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:54:46.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:54:47.538 [DEBUG] [Thread-16736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:54:47.538 [DEBUG] [Thread-16736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:54:47.539 [DEBUG] [Thread-16736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:54:47.579 [DEBUG] [Thread-16736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:54:47.579 [DEBUG] [Thread-16736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:54:47.582 [DEBUG] [Thread-16736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:54:47.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:54:47.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:54:47.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:54:47.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:54:47.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:54:47.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:54:47.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:54:47.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:54:47.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:54:47.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.704574 -999.00  +23.20  31.52     26   +2.90 1 1 2 1 1   887    0 18.20 -114.42 ----- 34.3 31.5 295.2 47.0 24.4 -26.9 24.8 -26.3 24.8 -25.0 24.9 -25.5
2025-12-25T18:54:47.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:54:47.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:54:47.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.704574
2025-12-25T18:54:47.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:54:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:54:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:54:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:54:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:54:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:54:39', tmtdew=24.08, humidity=20.41, cloud=0.0, wind=39.66, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:54:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:54:47.609 [DEBUG] [Thread-16736] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:54:47.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T18:54:47.702 [DEBUG] [Thread-16739] [transport.py] [_log()] starting thread (client mode): 0xb6b01540
2025-12-25T18:54:47.703 [DEBUG] [Thread-16739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:54:47.717 [DEBUG] [Thread-16739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:54:47.717 [INFO] [Thread-16739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] client lang: <none>
2025-12-25T18:54:47.725 [DEBUG] [Thread-16739] [transport.py] [_log()] server lang: <none>
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] kex follows: False
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] Compression: none
2025-12-25T18:54:47.726 [DEBUG] [Thread-16739] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:54:47.789 [DEBUG] [Thread-16739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:54:47.789 [DEBUG] [Thread-16739] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:54:47.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:54:47.791 [DEBUG] [Thread-16739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:54:47.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:54:47.845 [DEBUG] [Thread-16739] [transport.py] [_log()] userauth is OK
2025-12-25T18:54:47.845 [DEBUG] [Thread-16739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:54:47.846 [DEBUG] [Thread-16739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:54:47.846 [DEBUG] [Thread-16739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:54:47.846 [DEBUG] [Thread-16739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:54:47.865 [INFO] [Thread-16739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:54:47.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:54:47.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:54:48.722 [DEBUG] [Thread-16739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:54:48.723 [DEBUG] [Thread-16739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:54:48.771 [DEBUG] [Thread-16739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:54:48.772 [DEBUG] [Thread-16739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:54:48.780 [DEBUG] [Thread-16739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:54:48.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:54:48.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-25T18:54:48.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:54:48.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:54:48.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:54:48.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:54:48.812 [DEBUG] [Thread-16739] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:54:52.287 [DEBUG] [Thread-16741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:07.345 [DEBUG] [Thread-16742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:14.587 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:14.588 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:18.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:55:18.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:55:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:55:19.486 [DEBUG] [Thread-16743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 55, 11), 24.12, 20.36, 0.0, 37.81, 23.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:55:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:55:11
2025-12-25T18:55:19.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:55:19.800 [DEBUG] [Thread-16744] [transport.py] [_log()] starting thread (client mode): 0xb6bb5f30
2025-12-25T18:55:19.800 [DEBUG] [Thread-16744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:55:19.820 [DEBUG] [Thread-16744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:55:19.820 [INFO] [Thread-16744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:55:19.821 [DEBUG] [Thread-16744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:55:19.821 [DEBUG] [Thread-16744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] client lang: <none>
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] server lang: <none>
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] kex follows: False
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] Compression: none
2025-12-25T18:55:19.822 [DEBUG] [Thread-16744] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:55:19.831 [DEBUG] [Thread-16744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:55:19.831 [DEBUG] [Thread-16744] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:55:19.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:55:19.832 [DEBUG] [Thread-16744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:55:19.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:55:19.834 [DEBUG] [Thread-16744] [transport.py] [_log()] userauth is OK
2025-12-25T18:55:19.834 [DEBUG] [Thread-16744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:55:19.834 [DEBUG] [Thread-16744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:55:19.834 [DEBUG] [Thread-16744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:55:19.834 [DEBUG] [Thread-16744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:55:19.852 [INFO] [Thread-16744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:55:19.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:55:20.461 [DEBUG] [Thread-16744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:55:20.461 [DEBUG] [Thread-16744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:55:20.462 [DEBUG] [Thread-16744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:55:20.502 [DEBUG] [Thread-16744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:55:20.502 [DEBUG] [Thread-16744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:55:20.506 [DEBUG] [Thread-16744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:55:20.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:55:20.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:55:20.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:55:20.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:55:20.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:55:20.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:55:20.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:55:20.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:55:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:55:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.704921 -999.00  +23.20  32.54     26   +2.90 1 1 2 1 1   887    0 17.75 -116.72 ----- 30.7 32.5 296.4 41.8 24.4 -26.5 24.7 -26.2 24.8 -25.6 24.9 -25.1
2025-12-25T18:55:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:55:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:55:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.704921
2025-12-25T18:55:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:55:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:55:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:55:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:55:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:55:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:55:11', tmtdew=24.12, humidity=20.36, cloud=0.0, wind=37.81, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:55:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:55:20.526 [DEBUG] [Thread-16744] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:55:20.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-25T18:55:20.620 [DEBUG] [Thread-16747] [transport.py] [_log()] starting thread (client mode): 0xb6b00070
2025-12-25T18:55:20.620 [DEBUG] [Thread-16747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:55:20.634 [DEBUG] [Thread-16747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:55:20.635 [INFO] [Thread-16747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:55:20.642 [DEBUG] [Thread-16747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:55:20.642 [DEBUG] [Thread-16747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:55:20.642 [DEBUG] [Thread-16747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:55:20.642 [DEBUG] [Thread-16747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] client lang: <none>
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] server lang: <none>
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] kex follows: False
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:55:20.643 [DEBUG] [Thread-16747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:55:20.644 [DEBUG] [Thread-16747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:55:20.644 [DEBUG] [Thread-16747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:55:20.644 [DEBUG] [Thread-16747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:55:20.644 [DEBUG] [Thread-16747] [transport.py] [_log()] Compression: none
2025-12-25T18:55:20.644 [DEBUG] [Thread-16747] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:55:20.701 [DEBUG] [Thread-16747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:55:20.702 [DEBUG] [Thread-16747] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:55:20.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:55:20.702 [DEBUG] [Thread-16747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:55:20.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:55:20.757 [DEBUG] [Thread-16747] [transport.py] [_log()] userauth is OK
2025-12-25T18:55:20.757 [DEBUG] [Thread-16747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:55:20.757 [DEBUG] [Thread-16747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:55:20.758 [DEBUG] [Thread-16747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:55:20.758 [DEBUG] [Thread-16747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:55:20.776 [INFO] [Thread-16747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:55:20.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-25T18:55:20.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:55:21.626 [DEBUG] [Thread-16747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:55:21.626 [DEBUG] [Thread-16747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:55:21.673 [DEBUG] [Thread-16747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:55:21.674 [DEBUG] [Thread-16747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:55:21.682 [DEBUG] [Thread-16747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:55:21.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:55:21.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-25T18:55:21.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-25T18:55:21.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:55:21.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:55:21.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:55:21.714 [DEBUG] [Thread-16747] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:55:22.377 [DEBUG] [Thread-16749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:37.442 [DEBUG] [Thread-16750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:51.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:55:51.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:55:51.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:55:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 55, 43), 23.88, 20.5, 0.0, 38.11, 23.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:55:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:55:43
2025-12-25T18:55:52.474 [DEBUG] [Thread-16751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:55:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:55:52.718 [DEBUG] [Thread-16752] [transport.py] [_log()] starting thread (client mode): 0xb6bb72e0
2025-12-25T18:55:52.718 [DEBUG] [Thread-16752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:55:52.734 [DEBUG] [Thread-16752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:55:52.734 [INFO] [Thread-16752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] client lang: <none>
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] server lang: <none>
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] kex follows: False
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:55:52.735 [DEBUG] [Thread-16752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:55:52.736 [DEBUG] [Thread-16752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:55:52.736 [DEBUG] [Thread-16752] [transport.py] [_log()] Compression: none
2025-12-25T18:55:52.736 [DEBUG] [Thread-16752] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:55:52.751 [DEBUG] [Thread-16752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:55:52.751 [DEBUG] [Thread-16752] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:55:52.751 [DEBUG] [Thread-16752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:55:52.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:55:52.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:55:52.753 [DEBUG] [Thread-16752] [transport.py] [_log()] userauth is OK
2025-12-25T18:55:52.753 [DEBUG] [Thread-16752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:55:52.753 [DEBUG] [Thread-16752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:55:52.753 [DEBUG] [Thread-16752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:55:52.753 [DEBUG] [Thread-16752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:55:52.777 [INFO] [Thread-16752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:55:52.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:55:53.417 [DEBUG] [Thread-16752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:55:53.417 [DEBUG] [Thread-16752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:55:53.417 [DEBUG] [Thread-16752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:55:53.458 [DEBUG] [Thread-16752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:55:53.458 [DEBUG] [Thread-16752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:55:53.461 [DEBUG] [Thread-16752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:55:53.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:55:53.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:55:53.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:55:53.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:55:53.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:55:53.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:55:53.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:55:53.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:55:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:55:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.705269 -999.00  +23.30  34.71     26   +3.00 1 1 2 1 1   887    0 17.17 -116.70 ----- 34.8 34.7 293.5 41.8 24.4 -26.9 24.7 -26.4 24.8 -24.4 24.9 -25.6
2025-12-25T18:55:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:55:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:55:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.705269
2025-12-25T18:55:53.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:55:53.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:55:53.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:55:53.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:55:53.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:55:53.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:55:43', tmtdew=23.88, humidity=20.5, cloud=0.0, wind=38.11, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:55:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:55:53.480 [DEBUG] [Thread-16752] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:55:53.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-25T18:55:53.572 [DEBUG] [Thread-16755] [transport.py] [_log()] starting thread (client mode): 0xb6bc3250
2025-12-25T18:55:53.573 [DEBUG] [Thread-16755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:55:53.588 [DEBUG] [Thread-16755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:55:53.588 [INFO] [Thread-16755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:55:53.596 [DEBUG] [Thread-16755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] client lang: <none>
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] server lang: <none>
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] kex follows: False
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] Compression: none
2025-12-25T18:55:53.597 [DEBUG] [Thread-16755] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:55:53.653 [DEBUG] [Thread-16755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:55:53.654 [DEBUG] [Thread-16755] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:55:53.655 [DEBUG] [Thread-16755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:55:53.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:55:53.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:55:53.715 [DEBUG] [Thread-16755] [transport.py] [_log()] userauth is OK
2025-12-25T18:55:53.715 [DEBUG] [Thread-16755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:55:53.715 [DEBUG] [Thread-16755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:55:53.716 [DEBUG] [Thread-16755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:55:53.716 [DEBUG] [Thread-16755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:55:53.735 [INFO] [Thread-16755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:55:53.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-25T18:55:53.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:55:54.578 [DEBUG] [Thread-16755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:55:54.578 [DEBUG] [Thread-16755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:55:54.627 [DEBUG] [Thread-16755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:55:54.627 [DEBUG] [Thread-16755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:55:54.639 [DEBUG] [Thread-16755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:55:54.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:55:54.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:55:54.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-25T18:55:54.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:55:54.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:55:54.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:55:54.684 [DEBUG] [Thread-16755] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:56:07.515 [DEBUG] [Thread-16757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:14.728 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:14.729 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:19.525 [DEBUG] [Thread-16758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:22.563 [DEBUG] [Thread-16759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:24.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:56:24.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:56:24.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-25T18:56:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 56, 15), 23.77, 20.63, 0.0, 37.44, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:56:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:56:15
2025-12-25T18:56:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:56:25.733 [DEBUG] [Thread-16760] [transport.py] [_log()] starting thread (client mode): 0xb6bf6920
2025-12-25T18:56:25.733 [DEBUG] [Thread-16760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:56:25.752 [DEBUG] [Thread-16760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:56:25.752 [INFO] [Thread-16760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:25.755 [DEBUG] [Thread-16760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] client lang: <none>
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] server lang: <none>
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] kex follows: False
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] Compression: none
2025-12-25T18:56:25.756 [DEBUG] [Thread-16760] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:56:25.763 [DEBUG] [Thread-16760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:56:25.763 [DEBUG] [Thread-16760] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:56:25.763 [DEBUG] [Thread-16760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:56:25.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:56:25.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:56:25.764 [DEBUG] [Thread-16760] [transport.py] [_log()] userauth is OK
2025-12-25T18:56:25.764 [DEBUG] [Thread-16760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:56:25.764 [DEBUG] [Thread-16760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:56:25.764 [DEBUG] [Thread-16760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:56:25.764 [DEBUG] [Thread-16760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:56:25.779 [INFO] [Thread-16760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:56:25.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:56:26.370 [DEBUG] [Thread-16760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:56:26.370 [DEBUG] [Thread-16760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:56:26.370 [DEBUG] [Thread-16760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:56:26.411 [DEBUG] [Thread-16760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:56:26.411 [DEBUG] [Thread-16760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:56:26.413 [DEBUG] [Thread-16760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:56:26.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:56:26.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:56:26.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:56:26.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:56:26.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:56:26.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:56:26.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:56:26.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:56:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.705616 -999.00  +23.20  35.04     26   +2.80 1 1 2 1 1   887    0 18.05 -108.79 ----- 34.7 35.0 293.0 43.1 24.4 -26.9 24.7 -26.6 24.8 -24.2 24.9 -25.8
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.705616
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:56:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:56:15', tmtdew=23.77, humidity=20.63, cloud=0.0, wind=37.44, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:56:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:56:26.429 [DEBUG] [Thread-16760] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:56:26.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-25T18:56:26.513 [DEBUG] [Thread-16763] [transport.py] [_log()] starting thread (client mode): 0xb6bf6f20
2025-12-25T18:56:26.513 [DEBUG] [Thread-16763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:56:26.527 [DEBUG] [Thread-16763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:56:26.527 [INFO] [Thread-16763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] client lang: <none>
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] server lang: <none>
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] kex follows: False
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] Compression: none
2025-12-25T18:56:26.534 [DEBUG] [Thread-16763] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:56:26.593 [DEBUG] [Thread-16763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:56:26.594 [DEBUG] [Thread-16763] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:56:26.594 [DEBUG] [Thread-16763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:56:26.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:56:26.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:56:26.649 [DEBUG] [Thread-16763] [transport.py] [_log()] userauth is OK
2025-12-25T18:56:26.649 [DEBUG] [Thread-16763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:56:26.649 [DEBUG] [Thread-16763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:56:26.649 [DEBUG] [Thread-16763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:56:26.649 [DEBUG] [Thread-16763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:56:26.663 [INFO] [Thread-16763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:56:26.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-25T18:56:26.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:56:27.491 [DEBUG] [Thread-16763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:56:27.492 [DEBUG] [Thread-16763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:56:27.540 [DEBUG] [Thread-16763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:56:27.540 [DEBUG] [Thread-16763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:56:27.549 [DEBUG] [Thread-16763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:56:27.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:56:27.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:56:27.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:56:27.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:56:27.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:56:27.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:56:27.587 [DEBUG] [Thread-16763] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:56:37.596 [DEBUG] [Thread-16765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:52.649 [DEBUG] [Thread-16766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:56:57.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:56:57.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:56:57.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-25T18:56:58.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 56, 47), 23.92, 20.58, 0.0, 28.28, 23.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:56:58.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:56:47
2025-12-25T18:56:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:56:58.564 [DEBUG] [Thread-16767] [transport.py] [_log()] starting thread (client mode): 0xb6bf4d90
2025-12-25T18:56:58.564 [DEBUG] [Thread-16767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:56:58.584 [DEBUG] [Thread-16767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:56:58.584 [INFO] [Thread-16767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:56:58.587 [DEBUG] [Thread-16767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] client lang: <none>
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] server lang: <none>
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] kex follows: False
2025-12-25T18:56:58.588 [DEBUG] [Thread-16767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:56:58.589 [DEBUG] [Thread-16767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:56:58.589 [DEBUG] [Thread-16767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:56:58.589 [DEBUG] [Thread-16767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:56:58.589 [DEBUG] [Thread-16767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:56:58.589 [DEBUG] [Thread-16767] [transport.py] [_log()] Compression: none
2025-12-25T18:56:58.589 [DEBUG] [Thread-16767] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:56:58.607 [DEBUG] [Thread-16767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:56:58.607 [DEBUG] [Thread-16767] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:56:58.607 [DEBUG] [Thread-16767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:56:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:56:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:56:58.609 [DEBUG] [Thread-16767] [transport.py] [_log()] userauth is OK
2025-12-25T18:56:58.609 [DEBUG] [Thread-16767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:56:58.609 [DEBUG] [Thread-16767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:56:58.609 [DEBUG] [Thread-16767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:56:58.609 [DEBUG] [Thread-16767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:56:58.631 [INFO] [Thread-16767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:56:58.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:56:59.248 [DEBUG] [Thread-16767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:56:59.248 [DEBUG] [Thread-16767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:56:59.249 [DEBUG] [Thread-16767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:56:59.290 [DEBUG] [Thread-16767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:56:59.290 [DEBUG] [Thread-16767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:56:59.292 [DEBUG] [Thread-16767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:56:59.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:56:59.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:56:59.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:56:59.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:56:59.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:56:59.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:56:59.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:56:59.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:56:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:56:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.705963 -999.00  +23.10  27.06     26   +2.70 1 1 1 1 1   887    0 18.33 -106.31 ----- 32.4 27.1 296.2 36.9 24.4 -26.6 24.6 -26.4 24.8 -24.4 24.8 -25.2
2025-12-25T18:56:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:56:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:56:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.705963
2025-12-25T18:56:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:56:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:56:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:56:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:56:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:56:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:56:47', tmtdew=23.92, humidity=20.58, cloud=0.0, wind=28.28, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:56:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:56:59.317 [DEBUG] [Thread-16767] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:56:59.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-25T18:56:59.412 [DEBUG] [Thread-16770] [transport.py] [_log()] starting thread (client mode): 0xb6b60d00
2025-12-25T18:56:59.412 [DEBUG] [Thread-16770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:56:59.427 [DEBUG] [Thread-16770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:56:59.427 [INFO] [Thread-16770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] client lang: <none>
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] server lang: <none>
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] kex follows: False
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:56:59.435 [DEBUG] [Thread-16770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:56:59.436 [DEBUG] [Thread-16770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:56:59.436 [DEBUG] [Thread-16770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:56:59.436 [DEBUG] [Thread-16770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:56:59.436 [DEBUG] [Thread-16770] [transport.py] [_log()] Compression: none
2025-12-25T18:56:59.436 [DEBUG] [Thread-16770] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:56:59.494 [DEBUG] [Thread-16770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:56:59.494 [DEBUG] [Thread-16770] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:56:59.495 [DEBUG] [Thread-16770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:56:59.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:56:59.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:56:59.550 [DEBUG] [Thread-16770] [transport.py] [_log()] userauth is OK
2025-12-25T18:56:59.550 [DEBUG] [Thread-16770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:56:59.551 [DEBUG] [Thread-16770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:56:59.551 [DEBUG] [Thread-16770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:56:59.551 [DEBUG] [Thread-16770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:56:59.573 [INFO] [Thread-16770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:56:59.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-25T18:56:59.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:57:00.422 [DEBUG] [Thread-16770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:57:00.422 [DEBUG] [Thread-16770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:57:00.470 [DEBUG] [Thread-16770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:57:00.470 [DEBUG] [Thread-16770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:57:00.478 [DEBUG] [Thread-16770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:57:00.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:57:00.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-25T18:57:00.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-25T18:57:00.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:57:00.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:57:00.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:57:00.510 [DEBUG] [Thread-16770] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:57:07.686 [DEBUG] [Thread-16772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:57:14.869 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:57:14.870 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:57:19.557 [DEBUG] [Thread-16773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:57:22.738 [DEBUG] [Thread-16774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:57:30.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:57:30.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:57:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T18:57:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 57, 19), 23.99, 20.48, 0.0, 31.92, 23.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:57:31.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:57:19
2025-12-25T18:57:31.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:57:31.501 [DEBUG] [Thread-16775] [transport.py] [_log()] starting thread (client mode): 0xb6bf4b50
2025-12-25T18:57:31.501 [DEBUG] [Thread-16775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:57:31.520 [DEBUG] [Thread-16775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:57:31.521 [INFO] [Thread-16775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] client lang: <none>
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] server lang: <none>
2025-12-25T18:57:31.524 [DEBUG] [Thread-16775] [transport.py] [_log()] kex follows: False
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] Compression: none
2025-12-25T18:57:31.525 [DEBUG] [Thread-16775] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:57:31.543 [DEBUG] [Thread-16775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:57:31.543 [DEBUG] [Thread-16775] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:57:31.544 [DEBUG] [Thread-16775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:57:31.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:57:31.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:57:31.546 [DEBUG] [Thread-16775] [transport.py] [_log()] userauth is OK
2025-12-25T18:57:31.546 [DEBUG] [Thread-16775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:57:31.547 [DEBUG] [Thread-16775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:57:31.547 [DEBUG] [Thread-16775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:57:31.547 [DEBUG] [Thread-16775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:57:31.564 [INFO] [Thread-16775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:57:31.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:57:32.142 [DEBUG] [Thread-16775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:57:32.142 [DEBUG] [Thread-16775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:57:32.142 [DEBUG] [Thread-16775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:57:32.183 [DEBUG] [Thread-16775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:57:32.183 [DEBUG] [Thread-16775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:57:32.186 [DEBUG] [Thread-16775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:57:32.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:57:32.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:57:32.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:57:32.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:57:32.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:57:32.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:57:32.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:57:32.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:57:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:57:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.706310 -999.00  +23.00  32.07     26   +2.80 1 1 2 1 1   887    0 18.12 -98.11 ----- 27.8 32.1 294.0 38.8 24.4 -26.6 24.6 -26.0 24.7 -25.0 24.8 -25.2
2025-12-25T18:57:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:57:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:57:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.706310
2025-12-25T18:57:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:57:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:57:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:57:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:57:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:57:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:57:19', tmtdew=23.99, humidity=20.48, cloud=0.0, wind=31.92, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:57:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:57:32.213 [DEBUG] [Thread-16775] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:57:32.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-25T18:57:32.307 [DEBUG] [Thread-16778] [transport.py] [_log()] starting thread (client mode): 0xb6b01cc0
2025-12-25T18:57:32.307 [DEBUG] [Thread-16778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:57:32.321 [DEBUG] [Thread-16778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:57:32.321 [INFO] [Thread-16778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] client lang: <none>
2025-12-25T18:57:32.329 [DEBUG] [Thread-16778] [transport.py] [_log()] server lang: <none>
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] kex follows: False
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] Compression: none
2025-12-25T18:57:32.330 [DEBUG] [Thread-16778] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:57:32.387 [DEBUG] [Thread-16778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:57:32.387 [DEBUG] [Thread-16778] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:57:32.388 [DEBUG] [Thread-16778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:57:32.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:57:32.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:57:32.443 [DEBUG] [Thread-16778] [transport.py] [_log()] userauth is OK
2025-12-25T18:57:32.443 [DEBUG] [Thread-16778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:57:32.443 [DEBUG] [Thread-16778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:57:32.443 [DEBUG] [Thread-16778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:57:32.443 [DEBUG] [Thread-16778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:57:32.460 [INFO] [Thread-16778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:57:32.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:57:32.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:57:33.309 [DEBUG] [Thread-16778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:57:33.310 [DEBUG] [Thread-16778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:57:33.358 [DEBUG] [Thread-16778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:57:33.358 [DEBUG] [Thread-16778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:57:33.367 [DEBUG] [Thread-16778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:57:33.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:57:33.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T18:57:33.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-25T18:57:33.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:57:33.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:57:33.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:57:33.404 [DEBUG] [Thread-16778] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:57:37.780 [DEBUG] [Thread-16780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:57:52.823 [DEBUG] [Thread-16781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:03.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:58:03.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:58:03.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-25T18:58:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 57, 51), 23.83, 20.61, 0.0, 33.63, 23.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:58:04.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:57:51
2025-12-25T18:58:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:58:04.382 [DEBUG] [Thread-16782] [transport.py] [_log()] starting thread (client mode): 0xb6bc36d0
2025-12-25T18:58:04.382 [DEBUG] [Thread-16782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:58:04.400 [DEBUG] [Thread-16782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:58:04.401 [INFO] [Thread-16782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:58:04.402 [DEBUG] [Thread-16782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] client lang: <none>
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] server lang: <none>
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] kex follows: False
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] Compression: none
2025-12-25T18:58:04.403 [DEBUG] [Thread-16782] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:58:04.413 [DEBUG] [Thread-16782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:58:04.413 [DEBUG] [Thread-16782] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:58:04.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:58:04.414 [DEBUG] [Thread-16782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:58:04.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:58:04.416 [DEBUG] [Thread-16782] [transport.py] [_log()] userauth is OK
2025-12-25T18:58:04.416 [DEBUG] [Thread-16782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:58:04.416 [DEBUG] [Thread-16782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:58:04.416 [DEBUG] [Thread-16782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:58:04.416 [DEBUG] [Thread-16782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:58:04.437 [INFO] [Thread-16782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:58:04.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:58:05.114 [DEBUG] [Thread-16782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:58:05.115 [DEBUG] [Thread-16782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:58:05.115 [DEBUG] [Thread-16782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:58:05.156 [DEBUG] [Thread-16782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:58:05.156 [DEBUG] [Thread-16782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:58:05.160 [DEBUG] [Thread-16782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:58:05.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:58:05.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:58:05.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:58:05.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:58:05.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:58:05.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:58:05.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:58:05.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:58:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:58:05.186 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-25T18:58:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:57:51', tmtdew=23.83, humidity=20.61, cloud=0.0, wind=33.63, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:58:05.189 [DEBUG] [Thread-16782] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:58:05.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-25T18:58:05.292 [DEBUG] [Thread-16785] [transport.py] [_log()] starting thread (client mode): 0xb6b7f550
2025-12-25T18:58:05.293 [DEBUG] [Thread-16785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:58:05.307 [DEBUG] [Thread-16785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:58:05.307 [INFO] [Thread-16785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:58:05.314 [DEBUG] [Thread-16785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] client lang: <none>
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] server lang: <none>
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] kex follows: False
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] Compression: none
2025-12-25T18:58:05.315 [DEBUG] [Thread-16785] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:58:05.371 [DEBUG] [Thread-16785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:58:05.372 [DEBUG] [Thread-16785] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:58:05.373 [DEBUG] [Thread-16785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:58:05.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:58:05.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:58:05.429 [DEBUG] [Thread-16785] [transport.py] [_log()] userauth is OK
2025-12-25T18:58:05.429 [DEBUG] [Thread-16785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:58:05.429 [DEBUG] [Thread-16785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:58:05.429 [DEBUG] [Thread-16785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:58:05.429 [DEBUG] [Thread-16785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:58:05.452 [INFO] [Thread-16785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:58:05.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T18:58:05.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:58:06.347 [DEBUG] [Thread-16785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:58:06.347 [DEBUG] [Thread-16785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:58:06.395 [DEBUG] [Thread-16785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:58:06.395 [DEBUG] [Thread-16785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:58:06.405 [DEBUG] [Thread-16785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:58:06.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:58:06.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-25T18:58:06.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-25T18:58:06.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:58:06.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:58:06.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:58:06.445 [DEBUG] [Thread-16785] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:58:07.857 [DEBUG] [Thread-16787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:15.010 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:15.011 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:19.591 [DEBUG] [Thread-16788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:22.966 [DEBUG] [Thread-16789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:36.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:58:36.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:58:36.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-25T18:58:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 58, 23), 23.8, 20.65, 0.0, 32.62, 23.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:58:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:58:23
2025-12-25T18:58:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:58:37.410 [DEBUG] [Thread-16790] [transport.py] [_log()] starting thread (client mode): 0xb6b21660
2025-12-25T18:58:37.410 [DEBUG] [Thread-16790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:58:37.431 [DEBUG] [Thread-16790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:58:37.431 [INFO] [Thread-16790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] client lang: <none>
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] server lang: <none>
2025-12-25T18:58:37.434 [DEBUG] [Thread-16790] [transport.py] [_log()] kex follows: False
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] Compression: none
2025-12-25T18:58:37.435 [DEBUG] [Thread-16790] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:58:37.452 [DEBUG] [Thread-16790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:58:37.452 [DEBUG] [Thread-16790] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:58:37.453 [DEBUG] [Thread-16790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:58:37.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:58:37.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:58:37.455 [DEBUG] [Thread-16790] [transport.py] [_log()] userauth is OK
2025-12-25T18:58:37.455 [DEBUG] [Thread-16790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:58:37.455 [DEBUG] [Thread-16790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:58:37.455 [DEBUG] [Thread-16790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:58:37.455 [DEBUG] [Thread-16790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:58:37.480 [INFO] [Thread-16790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:58:37.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:58:37.998 [DEBUG] [Thread-16792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:58:38.076 [DEBUG] [Thread-16790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:58:38.077 [DEBUG] [Thread-16790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:58:38.077 [DEBUG] [Thread-16790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:58:38.118 [DEBUG] [Thread-16790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:58:38.118 [DEBUG] [Thread-16790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:58:38.121 [DEBUG] [Thread-16790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:58:38.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:58:38.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:58:38.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:58:38.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:58:38.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:58:38.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:58:38.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:58:38.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:58:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:58:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.706657 -999.00  +23.10  30.32     26   +2.80 1 1 2 1 1   887    0 18.57 -87.55 ----- 31.1 30.3 279.4 39.3 24.3 -27.1 24.6 -26.2 24.7 -25.0 24.8 -25.3
2025-12-25T18:58:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:58:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:58:38.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.706657
2025-12-25T18:58:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:58:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:58:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:58:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:58:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:58:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:58:23', tmtdew=23.8, humidity=20.65, cloud=0.0, wind=32.62, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:57:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:58:38.147 [DEBUG] [Thread-16790] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:58:38.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-25T18:58:38.252 [DEBUG] [Thread-16794] [transport.py] [_log()] starting thread (client mode): 0xb6bc2e60
2025-12-25T18:58:38.252 [DEBUG] [Thread-16794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:58:38.267 [DEBUG] [Thread-16794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:58:38.267 [INFO] [Thread-16794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] client lang: <none>
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] server lang: <none>
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] kex follows: False
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] Compression: none
2025-12-25T18:58:38.275 [DEBUG] [Thread-16794] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:58:38.336 [DEBUG] [Thread-16794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:58:38.337 [DEBUG] [Thread-16794] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:58:38.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:58:38.338 [DEBUG] [Thread-16794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:58:38.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:58:38.392 [DEBUG] [Thread-16794] [transport.py] [_log()] userauth is OK
2025-12-25T18:58:38.392 [DEBUG] [Thread-16794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:58:38.393 [DEBUG] [Thread-16794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:58:38.393 [DEBUG] [Thread-16794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:58:38.393 [DEBUG] [Thread-16794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:58:38.412 [INFO] [Thread-16794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:58:38.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-25T18:58:38.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:58:39.243 [DEBUG] [Thread-16794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:58:39.243 [DEBUG] [Thread-16794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:58:39.291 [DEBUG] [Thread-16794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:58:39.292 [DEBUG] [Thread-16794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:58:39.301 [DEBUG] [Thread-16794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:58:39.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:58:39.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-25T18:58:39.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-25T18:58:39.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:58:39.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:58:39.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:58:39.334 [DEBUG] [Thread-16794] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:58:53.033 [DEBUG] [Thread-16796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:08.090 [DEBUG] [Thread-16797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:09.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:59:09.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:59:09.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-25T18:59:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 58, 56), 23.67, 20.7, 0.0, 35.89, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:59:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:58:56
2025-12-25T18:59:10.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:59:10.323 [DEBUG] [Thread-16798] [transport.py] [_log()] starting thread (client mode): 0xb6b20d30
2025-12-25T18:59:10.323 [DEBUG] [Thread-16798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:59:10.343 [DEBUG] [Thread-16798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:59:10.343 [INFO] [Thread-16798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] client lang: <none>
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] server lang: <none>
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] kex follows: False
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] Compression: none
2025-12-25T18:59:10.346 [DEBUG] [Thread-16798] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:59:10.363 [DEBUG] [Thread-16798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:59:10.364 [DEBUG] [Thread-16798] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:59:10.364 [DEBUG] [Thread-16798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:59:10.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:59:10.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:59:10.366 [DEBUG] [Thread-16798] [transport.py] [_log()] userauth is OK
2025-12-25T18:59:10.366 [DEBUG] [Thread-16798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:59:10.366 [DEBUG] [Thread-16798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:59:10.367 [DEBUG] [Thread-16798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:59:10.367 [DEBUG] [Thread-16798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:59:10.385 [INFO] [Thread-16798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:59:10.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:59:11.112 [DEBUG] [Thread-16798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:59:11.112 [DEBUG] [Thread-16798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:59:11.113 [DEBUG] [Thread-16798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:59:11.153 [DEBUG] [Thread-16798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:59:11.153 [DEBUG] [Thread-16798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:59:11.157 [DEBUG] [Thread-16798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:59:11.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:59:11.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:59:11.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:59:11.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:59:11.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:59:11.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:59:11.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:59:11.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:59:11.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:59:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.707699 -999.00  +23.10  28.81     26   +3.00 1 1 1 1 1   887    0 18.48 -82.04 ----- 23.6 28.8 287.0 38.1 24.3 -26.3 24.6 -26.0 24.4 -25.3 24.7 -24.9
2025-12-25T18:59:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:59:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:59:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.707699
2025-12-25T18:59:11.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:59:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:59:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:59:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:59:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:59:11.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:58:56', tmtdew=23.67, humidity=20.7, cloud=0.0, wind=35.89, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:59:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:59:11.184 [DEBUG] [Thread-16798] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:59:11.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-25T18:59:11.276 [DEBUG] [Thread-16801] [transport.py] [_log()] starting thread (client mode): 0xb6b7c3d0
2025-12-25T18:59:11.277 [DEBUG] [Thread-16801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:59:11.291 [DEBUG] [Thread-16801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:59:11.291 [INFO] [Thread-16801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] client lang: <none>
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] server lang: <none>
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] kex follows: False
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:59:11.299 [DEBUG] [Thread-16801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:59:11.300 [DEBUG] [Thread-16801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:59:11.300 [DEBUG] [Thread-16801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:59:11.300 [DEBUG] [Thread-16801] [transport.py] [_log()] Compression: none
2025-12-25T18:59:11.300 [DEBUG] [Thread-16801] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:59:11.358 [DEBUG] [Thread-16801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:59:11.359 [DEBUG] [Thread-16801] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:59:11.360 [DEBUG] [Thread-16801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:59:11.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:59:11.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:59:11.416 [DEBUG] [Thread-16801] [transport.py] [_log()] userauth is OK
2025-12-25T18:59:11.416 [DEBUG] [Thread-16801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:59:11.416 [DEBUG] [Thread-16801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:59:11.417 [DEBUG] [Thread-16801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:59:11.417 [DEBUG] [Thread-16801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:59:11.436 [INFO] [Thread-16801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:59:11.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-25T18:59:11.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:59:12.271 [DEBUG] [Thread-16801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:59:12.271 [DEBUG] [Thread-16801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:59:12.319 [DEBUG] [Thread-16801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:59:12.319 [DEBUG] [Thread-16801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:59:12.328 [DEBUG] [Thread-16801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:59:12.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:59:12.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-25T18:59:12.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T18:59:12.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:59:12.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:59:12.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:59:12.364 [DEBUG] [Thread-16801] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:59:15.151 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:15.153 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:19.638 [DEBUG] [Thread-16803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:23.129 [DEBUG] [Thread-16804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:38.176 [DEBUG] [Thread-16805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T18:59:42.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T18:59:42.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T18:59:42.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-25T18:59:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 59, 28), 23.6, 20.78, 0.0, 36.82, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T18:59:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:59:28
2025-12-25T18:59:43.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T18:59:43.337 [DEBUG] [Thread-16806] [transport.py] [_log()] starting thread (client mode): 0xb95b3430
2025-12-25T18:59:43.337 [DEBUG] [Thread-16806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:59:43.359 [DEBUG] [Thread-16806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T18:59:43.359 [INFO] [Thread-16806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T18:59:43.360 [DEBUG] [Thread-16806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] client lang: <none>
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] server lang: <none>
2025-12-25T18:59:43.361 [DEBUG] [Thread-16806] [transport.py] [_log()] kex follows: False
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] Compression: none
2025-12-25T18:59:43.362 [DEBUG] [Thread-16806] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:59:43.376 [DEBUG] [Thread-16806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:59:43.377 [DEBUG] [Thread-16806] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:59:43.378 [DEBUG] [Thread-16806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T18:59:43.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T18:59:43.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:59:43.380 [DEBUG] [Thread-16806] [transport.py] [_log()] userauth is OK
2025-12-25T18:59:43.381 [DEBUG] [Thread-16806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:59:43.381 [DEBUG] [Thread-16806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:59:43.381 [DEBUG] [Thread-16806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T18:59:43.381 [DEBUG] [Thread-16806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:59:43.416 [INFO] [Thread-16806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:59:43.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:59:44.038 [DEBUG] [Thread-16806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:59:44.038 [DEBUG] [Thread-16806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:59:44.039 [DEBUG] [Thread-16806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T18:59:44.079 [DEBUG] [Thread-16806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:59:44.079 [DEBUG] [Thread-16806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:59:44.082 [DEBUG] [Thread-16806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:59:44.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:59:44.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T18:59:44.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T18:59:44.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T18:59:44.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:59:44.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T18:59:44.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:59:44.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:59:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T18:59:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.707699 -999.00  +23.10  28.81     26   +3.00 1 1 1 1 1   887    0 18.48 -82.04 ----- 23.6 28.8 287.0 38.1 24.3 -26.3 24.6 -26.0 24.4 -25.3 24.7 -24.9
2025-12-25T18:59:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T18:59:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T18:59:44.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.707699
2025-12-25T18:59:44.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T18:59:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T18:59:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T18:59:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T18:59:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T18:59:44.102 [DEBUG] [Thread-16806] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:59:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:59:28', tmtdew=23.6, humidity=20.78, cloud=0.0, wind=36.82, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T16:59:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T18:59:44.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-25T18:59:44.195 [DEBUG] [Thread-16809] [transport.py] [_log()] starting thread (client mode): 0xb6bf6c20
2025-12-25T18:59:44.195 [DEBUG] [Thread-16809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T18:59:44.211 [DEBUG] [Thread-16809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T18:59:44.211 [INFO] [Thread-16809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] client lang: <none>
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] server lang: <none>
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] kex follows: False
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T18:59:44.219 [DEBUG] [Thread-16809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T18:59:44.220 [DEBUG] [Thread-16809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T18:59:44.220 [DEBUG] [Thread-16809] [transport.py] [_log()] Compression: none
2025-12-25T18:59:44.220 [DEBUG] [Thread-16809] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T18:59:44.280 [DEBUG] [Thread-16809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T18:59:44.281 [DEBUG] [Thread-16809] [transport.py] [_log()] Switch to new keys ...
2025-12-25T18:59:44.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T18:59:44.282 [DEBUG] [Thread-16809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T18:59:44.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T18:59:44.336 [DEBUG] [Thread-16809] [transport.py] [_log()] userauth is OK
2025-12-25T18:59:44.337 [DEBUG] [Thread-16809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T18:59:44.337 [DEBUG] [Thread-16809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T18:59:44.337 [DEBUG] [Thread-16809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T18:59:44.337 [DEBUG] [Thread-16809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T18:59:44.355 [INFO] [Thread-16809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T18:59:44.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-25T18:59:44.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T18:59:45.247 [DEBUG] [Thread-16809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T18:59:45.248 [DEBUG] [Thread-16809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T18:59:45.296 [DEBUG] [Thread-16809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T18:59:45.296 [DEBUG] [Thread-16809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T18:59:45.305 [DEBUG] [Thread-16809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T18:59:45.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T18:59: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')
2025-12-25T18:59:45.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-25T18:59:45.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T18:59:45.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T18:59:45.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T18:59:45.344 [DEBUG] [Thread-16809] [transport.py] [_log()] EOF in transport thread
2025-12-25T18:59:53.207 [DEBUG] [Thread-16811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:08.258 [DEBUG] [Thread-16812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:15.292 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:15.293 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:00:15.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:00:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:00:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 18, 59, 28), 23.6, 20.78, 0.0, 36.82, 23.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:00:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 18:59:28
2025-12-25T19:00:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:00:16.393 [DEBUG] [Thread-16813] [transport.py] [_log()] starting thread (client mode): 0xb6b7ebc0
2025-12-25T19:00:16.393 [DEBUG] [Thread-16813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:00:16.414 [DEBUG] [Thread-16813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:00:16.414 [INFO] [Thread-16813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] client lang: <none>
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] server lang: <none>
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] kex follows: False
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] Compression: none
2025-12-25T19:00:16.418 [DEBUG] [Thread-16813] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:00:16.433 [DEBUG] [Thread-16813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:00:16.433 [DEBUG] [Thread-16813] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:00:16.433 [DEBUG] [Thread-16813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:00:16.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:00:16.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:00:16.434 [DEBUG] [Thread-16813] [transport.py] [_log()] userauth is OK
2025-12-25T19:00:16.434 [DEBUG] [Thread-16813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:00:16.434 [DEBUG] [Thread-16813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:00:16.434 [DEBUG] [Thread-16813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:00:16.434 [DEBUG] [Thread-16813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:00:16.449 [INFO] [Thread-16813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:00:16.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:00:17.204 [DEBUG] [Thread-16813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:00:17.204 [DEBUG] [Thread-16813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:00:17.204 [DEBUG] [Thread-16813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:00:17.244 [DEBUG] [Thread-16813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:00:17.244 [DEBUG] [Thread-16813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:00:17.247 [DEBUG] [Thread-16813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:00:17.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:00:17.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:00:17.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:00:17.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:00:17.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:00:17.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:00:17.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:00:17.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:00:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:00:17.262 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-25T19:00:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T18:59:28', tmtdew=23.6, humidity=20.78, cloud=0.0, wind=36.82, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:00:17.263 [DEBUG] [Thread-16813] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:00:17.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-25T19:00:17.346 [DEBUG] [Thread-16816] [transport.py] [_log()] starting thread (client mode): 0xb6b758a0
2025-12-25T19:00:17.346 [DEBUG] [Thread-16816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:00:17.361 [DEBUG] [Thread-16816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:00:17.361 [INFO] [Thread-16816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] client lang: <none>
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] server lang: <none>
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] kex follows: False
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] Compression: none
2025-12-25T19:00:17.369 [DEBUG] [Thread-16816] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:00:17.427 [DEBUG] [Thread-16816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:00:17.428 [DEBUG] [Thread-16816] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:00:17.428 [DEBUG] [Thread-16816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:00:17.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:00:17.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:00:17.484 [DEBUG] [Thread-16816] [transport.py] [_log()] userauth is OK
2025-12-25T19:00:17.484 [DEBUG] [Thread-16816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:00:17.484 [DEBUG] [Thread-16816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:00:17.484 [DEBUG] [Thread-16816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:00:17.484 [DEBUG] [Thread-16816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:00:17.499 [INFO] [Thread-16816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:00:17.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-25T19:00:17.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:00:18.347 [DEBUG] [Thread-16816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:00:18.347 [DEBUG] [Thread-16816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:00:18.394 [DEBUG] [Thread-16816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:00:18.394 [DEBUG] [Thread-16816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:00:18.403 [DEBUG] [Thread-16816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:00:18.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:00:18.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-25T19:00:18.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-25T19:00:18.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:00:18.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:00:18.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:00:18.435 [DEBUG] [Thread-16816] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:00:19.671 [DEBUG] [Thread-16818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:23.291 [DEBUG] [Thread-16819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:38.344 [DEBUG] [Thread-16820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:00:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:00:48.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:00:48.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-25T19:00:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 0, 32), 23.34, 21.44, 0.0, 40.53, 23.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:00:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:00:32
2025-12-25T19:00:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:00:49.454 [DEBUG] [Thread-16821] [transport.py] [_log()] starting thread (client mode): 0xb6b23910
2025-12-25T19:00:49.454 [DEBUG] [Thread-16821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:00:49.474 [DEBUG] [Thread-16821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:00:49.474 [INFO] [Thread-16821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] client lang: <none>
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] server lang: <none>
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] kex follows: False
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] Compression: none
2025-12-25T19:00:49.478 [DEBUG] [Thread-16821] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:00:49.493 [DEBUG] [Thread-16821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:00:49.494 [DEBUG] [Thread-16821] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:00:49.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:00:49.495 [DEBUG] [Thread-16821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:00:49.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:00:49.497 [DEBUG] [Thread-16821] [transport.py] [_log()] userauth is OK
2025-12-25T19:00:49.497 [DEBUG] [Thread-16821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:00:49.497 [DEBUG] [Thread-16821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:00:49.497 [DEBUG] [Thread-16821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:00:49.497 [DEBUG] [Thread-16821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:00:49.521 [INFO] [Thread-16821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:00:49.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:00:50.113 [DEBUG] [Thread-16821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:00:50.113 [DEBUG] [Thread-16821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:00:50.113 [DEBUG] [Thread-16821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:00:50.154 [DEBUG] [Thread-16821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:00:50.154 [DEBUG] [Thread-16821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:00:50.157 [DEBUG] [Thread-16821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:00:50.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:00:50.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:00:50.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:00:50.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:00:50.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:00:50.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:00:50.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:00:50.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:00:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:00:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.708393 -999.00  +23.00  31.36     27   +3.10 1 1 2 1 1   887    0 18.47 -84.03 ----- 27.2 31.4 279.8 40.5 24.3 -26.7 24.5 -25.8 24.6 -23.7 24.6 -25.3
2025-12-25T19:00:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:00:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:00:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.708393
2025-12-25T19:00:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:00:50.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:00:50.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:00:50.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:00:50.183 [DEBUG] [Thread-16821] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:00:50.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:00:50.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:00:32', tmtdew=23.34, humidity=21.44, cloud=0.0, wind=40.53, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:00:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:00:50.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-25T19:00:50.277 [DEBUG] [Thread-16824] [transport.py] [_log()] starting thread (client mode): 0xb6b7f2e0
2025-12-25T19:00:50.278 [DEBUG] [Thread-16824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:00:50.292 [DEBUG] [Thread-16824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:00:50.292 [INFO] [Thread-16824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:00:50.300 [DEBUG] [Thread-16824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:00:50.300 [DEBUG] [Thread-16824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:00:50.300 [DEBUG] [Thread-16824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] client lang: <none>
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] server lang: <none>
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] kex follows: False
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:00:50.301 [DEBUG] [Thread-16824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:00:50.302 [DEBUG] [Thread-16824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:00:50.302 [DEBUG] [Thread-16824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:00:50.302 [DEBUG] [Thread-16824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:00:50.302 [DEBUG] [Thread-16824] [transport.py] [_log()] Compression: none
2025-12-25T19:00:50.302 [DEBUG] [Thread-16824] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:00:50.358 [DEBUG] [Thread-16824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:00:50.358 [DEBUG] [Thread-16824] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:00:50.359 [DEBUG] [Thread-16824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:00:50.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:00:50.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:00:50.417 [DEBUG] [Thread-16824] [transport.py] [_log()] userauth is OK
2025-12-25T19:00:50.417 [DEBUG] [Thread-16824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:00:50.418 [DEBUG] [Thread-16824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:00:50.418 [DEBUG] [Thread-16824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:00:50.418 [DEBUG] [Thread-16824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:00:50.437 [INFO] [Thread-16824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:00:50.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-25T19:00:50.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:00:51.252 [DEBUG] [Thread-16824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:00:51.252 [DEBUG] [Thread-16824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:00:51.300 [DEBUG] [Thread-16824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:00:51.300 [DEBUG] [Thread-16824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:00:51.309 [DEBUG] [Thread-16824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:00:51.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:00:51.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-25T19:00:51.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:00:51.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:00:51.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:00:51.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:00:51.346 [DEBUG] [Thread-16824] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:00:53.376 [DEBUG] [Thread-16826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:08.416 [DEBUG] [Thread-16827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:15.442 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:15.442 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:19.716 [DEBUG] [Thread-16828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:01:21.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:01: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-25T19:01:22.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 1, 4), 23.3, 21.51, 0.0, 41.48, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:01:22.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:01:04
2025-12-25T19:01:22.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:01:22.319 [DEBUG] [Thread-16829] [transport.py] [_log()] starting thread (client mode): 0xb6b20070
2025-12-25T19:01:22.319 [DEBUG] [Thread-16829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:01:22.339 [DEBUG] [Thread-16829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:01:22.340 [INFO] [Thread-16829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:01:22.343 [DEBUG] [Thread-16829] [transport.py] [_log()] client lang: <none>
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] server lang: <none>
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] kex follows: False
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] Compression: none
2025-12-25T19:01:22.344 [DEBUG] [Thread-16829] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:01:22.363 [DEBUG] [Thread-16829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:01:22.364 [DEBUG] [Thread-16829] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:01:22.365 [DEBUG] [Thread-16829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:01:22.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:01:22.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:01:22.409 [DEBUG] [Thread-16829] [transport.py] [_log()] userauth is OK
2025-12-25T19:01:22.409 [DEBUG] [Thread-16829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:01:22.409 [DEBUG] [Thread-16829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:01:22.409 [DEBUG] [Thread-16829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:01:22.409 [DEBUG] [Thread-16829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:01:22.430 [INFO] [Thread-16829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:01:22.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:01:23.074 [DEBUG] [Thread-16829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:01:23.074 [DEBUG] [Thread-16829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:01:23.075 [DEBUG] [Thread-16829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:01:23.115 [DEBUG] [Thread-16829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:01:23.115 [DEBUG] [Thread-16829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:01:23.117 [DEBUG] [Thread-16829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:01:23.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:01:23.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:01:23.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:01:23.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:01:23.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:01:23.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:01:23.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:01:23.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:01:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:01:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.708741 -999.00  +23.10  22.78     27   +3.20 1 1 1 1 1   887    0 18.40 -87.37 ----- 21.0 22.8 289.3 41.7 24.3 -25.9 24.5 -25.5 24.4 -23.7 24.6 -24.8
2025-12-25T19:01:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:01:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:01:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.708741
2025-12-25T19:01:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:01:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:01:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:01:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:01:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:01:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:01:04', tmtdew=23.3, humidity=21.51, cloud=0.0, wind=41.48, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:00:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:01:23.136 [DEBUG] [Thread-16829] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:01:23.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-25T19:01:23.231 [DEBUG] [Thread-16832] [transport.py] [_log()] starting thread (client mode): 0xb6b23730
2025-12-25T19:01:23.231 [DEBUG] [Thread-16832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:01:23.250 [DEBUG] [Thread-16832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:01:23.250 [INFO] [Thread-16832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:01:23.260 [DEBUG] [Thread-16832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] client lang: <none>
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] server lang: <none>
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] kex follows: False
2025-12-25T19:01:23.261 [DEBUG] [Thread-16832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:01:23.262 [DEBUG] [Thread-16832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:01:23.262 [DEBUG] [Thread-16832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:01:23.262 [DEBUG] [Thread-16832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:01:23.262 [DEBUG] [Thread-16832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:01:23.262 [DEBUG] [Thread-16832] [transport.py] [_log()] Compression: none
2025-12-25T19:01:23.262 [DEBUG] [Thread-16832] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:01:23.322 [DEBUG] [Thread-16832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:01:23.322 [DEBUG] [Thread-16832] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:01:23.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:01:23.323 [DEBUG] [Thread-16832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:01:23.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:01:23.377 [DEBUG] [Thread-16832] [transport.py] [_log()] userauth is OK
2025-12-25T19:01:23.378 [DEBUG] [Thread-16832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:01:23.378 [DEBUG] [Thread-16832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:01:23.378 [DEBUG] [Thread-16832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:01:23.378 [DEBUG] [Thread-16832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:01:23.396 [INFO] [Thread-16832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:01:23.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-25T19:01:23.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:01:23.453 [DEBUG] [Thread-16834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:24.258 [DEBUG] [Thread-16832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:01:24.258 [DEBUG] [Thread-16832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:01:24.306 [DEBUG] [Thread-16832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:01:24.306 [DEBUG] [Thread-16832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:01:24.316 [DEBUG] [Thread-16832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:01:24.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:01:24.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:01:24.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:01:24.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:01:24.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:01:24.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:01:24.353 [DEBUG] [Thread-16832] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:01:38.509 [DEBUG] [Thread-16835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:53.543 [DEBUG] [Thread-16836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:01:54.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:01:54.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:01:54.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-25T19:01:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 1, 36), 23.24, 21.59, 0.0, 32.87, 23.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:01:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:01:36
2025-12-25T19:01:55.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:01:55.337 [DEBUG] [Thread-16837] [transport.py] [_log()] starting thread (client mode): 0xb6b238e0
2025-12-25T19:01:55.337 [DEBUG] [Thread-16837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:01:55.357 [DEBUG] [Thread-16837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:01:55.357 [INFO] [Thread-16837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] client lang: <none>
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] server lang: <none>
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] kex follows: False
2025-12-25T19:01:55.360 [DEBUG] [Thread-16837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:01:55.361 [DEBUG] [Thread-16837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:01:55.361 [DEBUG] [Thread-16837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:01:55.361 [DEBUG] [Thread-16837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:01:55.361 [DEBUG] [Thread-16837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:01:55.361 [DEBUG] [Thread-16837] [transport.py] [_log()] Compression: none
2025-12-25T19:01:55.361 [DEBUG] [Thread-16837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:01:55.378 [DEBUG] [Thread-16837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:01:55.378 [DEBUG] [Thread-16837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:01:55.379 [DEBUG] [Thread-16837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:01:55.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:01:55.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:01:55.381 [DEBUG] [Thread-16837] [transport.py] [_log()] userauth is OK
2025-12-25T19:01:55.381 [DEBUG] [Thread-16837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:01:55.381 [DEBUG] [Thread-16837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:01:55.381 [DEBUG] [Thread-16837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:01:55.381 [DEBUG] [Thread-16837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:01:55.406 [INFO] [Thread-16837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:01:55.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:01:56.060 [DEBUG] [Thread-16837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:01:56.060 [DEBUG] [Thread-16837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:01:56.061 [DEBUG] [Thread-16837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:01:56.101 [DEBUG] [Thread-16837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:01:56.101 [DEBUG] [Thread-16837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:01:56.106 [DEBUG] [Thread-16837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:01:56.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:01:56.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:01:56.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:01:56.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:01:56.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:01:56.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:01:56.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:01:56.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:01:56.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:01:56.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.709088 -999.00  +23.30  26.45     27   +3.20 1 1 1 1 1   887    0 18.86 -77.88 ----- 23.1 26.4 285.9 30.2 24.3 -26.3 24.5 -25.7 24.5 -23.6 24.7 -24.9
2025-12-25T19:01:56.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:01:56.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:01:56.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.709088
2025-12-25T19:01:56.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:01:56.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:01:56.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:01:56.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:01:56.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:01:56.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:01:36', tmtdew=23.24, humidity=21.59, cloud=0.0, wind=32.87, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:01:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:01:56.136 [DEBUG] [Thread-16837] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:01:56.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-25T19:01:56.239 [DEBUG] [Thread-16840] [transport.py] [_log()] starting thread (client mode): 0xb6b20190
2025-12-25T19:01:56.239 [DEBUG] [Thread-16840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:01:56.260 [DEBUG] [Thread-16840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:01:56.261 [INFO] [Thread-16840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] client lang: <none>
2025-12-25T19:01:56.268 [DEBUG] [Thread-16840] [transport.py] [_log()] server lang: <none>
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] kex follows: False
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] Compression: none
2025-12-25T19:01:56.269 [DEBUG] [Thread-16840] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:01:56.324 [DEBUG] [Thread-16840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:01:56.324 [DEBUG] [Thread-16840] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:01:56.325 [DEBUG] [Thread-16840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:01:56.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:01:56.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:01:56.382 [DEBUG] [Thread-16840] [transport.py] [_log()] userauth is OK
2025-12-25T19:01:56.382 [DEBUG] [Thread-16840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:01:56.382 [DEBUG] [Thread-16840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:01:56.382 [DEBUG] [Thread-16840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:01:56.382 [DEBUG] [Thread-16840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:01:56.406 [INFO] [Thread-16840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:01:56.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:01:56.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:01:57.251 [DEBUG] [Thread-16840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:01:57.252 [DEBUG] [Thread-16840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:01:57.300 [DEBUG] [Thread-16840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:01:57.300 [DEBUG] [Thread-16840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:01:57.309 [DEBUG] [Thread-16840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:01:57.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:01: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')
2025-12-25T19:01:57.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-25T19:01:57.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:01:57.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:01:57.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:01:57.346 [DEBUG] [Thread-16840] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:02:08.579 [DEBUG] [Thread-16842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:02:15.581 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:02:15.583 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:02:19.750 [DEBUG] [Thread-16843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:02:23.624 [DEBUG] [Thread-16844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:02:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:02:27.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:02:27.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:02:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 2, 8), 23.3, 21.53, 0.0, 33.72, 23.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:02:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:02:08
2025-12-25T19:02:28.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:02:28.325 [DEBUG] [Thread-16845] [transport.py] [_log()] starting thread (client mode): 0xb957a140
2025-12-25T19:02:28.325 [DEBUG] [Thread-16845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:02:28.346 [DEBUG] [Thread-16845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:02:28.346 [INFO] [Thread-16845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:02:28.349 [DEBUG] [Thread-16845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:02:28.349 [DEBUG] [Thread-16845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] client lang: <none>
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] server lang: <none>
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] kex follows: False
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] Compression: none
2025-12-25T19:02:28.350 [DEBUG] [Thread-16845] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:02:28.366 [DEBUG] [Thread-16845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:02:28.366 [DEBUG] [Thread-16845] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:02:28.367 [DEBUG] [Thread-16845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:02:28.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:02:28.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:02:28.368 [DEBUG] [Thread-16845] [transport.py] [_log()] userauth is OK
2025-12-25T19:02:28.369 [DEBUG] [Thread-16845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:02:28.369 [DEBUG] [Thread-16845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:02:28.369 [DEBUG] [Thread-16845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:02:28.369 [DEBUG] [Thread-16845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:02:28.385 [INFO] [Thread-16845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:02:28.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:02:29.053 [DEBUG] [Thread-16845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:02:29.053 [DEBUG] [Thread-16845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:02:29.054 [DEBUG] [Thread-16845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:02:29.093 [DEBUG] [Thread-16845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:02:29.094 [DEBUG] [Thread-16845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:02:29.096 [DEBUG] [Thread-16845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:02:29.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:02:29.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:02:29.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:02:29.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:02:29.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:02:29.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:02:29.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:02:29.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:02:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:02:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.709435 -999.00  +23.30  22.95     26   +3.20 1 1 1 1 1   887    0 18.49 -81.93 ----- 25.5 22.9 286.6 28.3 24.2 -26.7 24.5 -25.8 24.6 -24.0 24.7 -25.1
2025-12-25T19:02:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:02:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:02:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.709435
2025-12-25T19:02:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:02:29.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:02:29.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:02:29.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:02:29.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:02:29.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:02:08', tmtdew=23.3, humidity=21.53, cloud=0.0, wind=33.72, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:01:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:02:29.122 [DEBUG] [Thread-16845] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:02: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-25T19:02:29.212 [DEBUG] [Thread-16848] [transport.py] [_log()] starting thread (client mode): 0xb6bc3f70
2025-12-25T19:02:29.212 [DEBUG] [Thread-16848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:02:29.227 [DEBUG] [Thread-16848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:02:29.227 [INFO] [Thread-16848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:02:29.234 [DEBUG] [Thread-16848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] client lang: <none>
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] server lang: <none>
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] kex follows: False
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] Compression: none
2025-12-25T19:02:29.235 [DEBUG] [Thread-16848] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:02:29.293 [DEBUG] [Thread-16848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:02:29.294 [DEBUG] [Thread-16848] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:02:29.294 [DEBUG] [Thread-16848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:02:29.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:02:29.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:02:29.350 [DEBUG] [Thread-16848] [transport.py] [_log()] userauth is OK
2025-12-25T19:02:29.350 [DEBUG] [Thread-16848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:02:29.350 [DEBUG] [Thread-16848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:02:29.350 [DEBUG] [Thread-16848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:02:29.350 [DEBUG] [Thread-16848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:02:29.369 [INFO] [Thread-16848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:02:29.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-25T19:02:29.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:02:30.188 [DEBUG] [Thread-16848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:02:30.189 [DEBUG] [Thread-16848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:02:30.237 [DEBUG] [Thread-16848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:02:30.237 [DEBUG] [Thread-16848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:02:30.246 [DEBUG] [Thread-16848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:02:30.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:02:30.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-25T19:02:30.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-25T19:02:30.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:02:30.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:02:30.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:02:30.284 [DEBUG] [Thread-16848] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:02:38.661 [DEBUG] [Thread-16850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:02:53.709 [DEBUG] [Thread-16851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:00.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:03:00.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:03:00.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-25T19:03:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 2, 40), 23.29, 21.44, 0.0, 33.7, 23.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:03:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:02:40
2025-12-25T19:03:01.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:03:01.265 [DEBUG] [Thread-16852] [transport.py] [_log()] starting thread (client mode): 0xb6b7fac0
2025-12-25T19:03:01.265 [DEBUG] [Thread-16852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:03:01.285 [DEBUG] [Thread-16852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:03:01.285 [INFO] [Thread-16852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:03:01.288 [DEBUG] [Thread-16852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] client lang: <none>
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] server lang: <none>
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] kex follows: False
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] Compression: none
2025-12-25T19:03:01.289 [DEBUG] [Thread-16852] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:03:01.307 [DEBUG] [Thread-16852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:03:01.308 [DEBUG] [Thread-16852] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:03:01.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:03:01.308 [DEBUG] [Thread-16852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:03:01.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:03:01.311 [DEBUG] [Thread-16852] [transport.py] [_log()] userauth is OK
2025-12-25T19:03:01.311 [DEBUG] [Thread-16852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:03:01.311 [DEBUG] [Thread-16852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:03:01.311 [DEBUG] [Thread-16852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:03:01.311 [DEBUG] [Thread-16852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:03:01.335 [INFO] [Thread-16852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:03:01.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:03:01.982 [DEBUG] [Thread-16852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:03:01.983 [DEBUG] [Thread-16852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:03:01.983 [DEBUG] [Thread-16852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:03:02.024 [DEBUG] [Thread-16852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:03:02.024 [DEBUG] [Thread-16852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:03:02.028 [DEBUG] [Thread-16852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:03:02.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:03:02.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:03:02.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:03:02.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:03:02.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:03:02.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:03:02.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:03:02.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:03:02.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:03:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.709782 -999.00  +23.20  24.29     27   +3.20 1 1 1 1 1   887    0 18.03 -84.60 ----- 20.1 24.3 295.8 36.5 24.2 -26.1 24.4 -25.7 24.4 -24.5 24.6 -25.1
2025-12-25T19:03:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:03:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:03:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.709782
2025-12-25T19:03:02.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:03:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:03:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:03:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:03:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:03:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:02:40', tmtdew=23.29, humidity=21.44, cloud=0.0, wind=33.7, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:02:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:03:02.055 [DEBUG] [Thread-16852] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:03:02.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-25T19:03:02.148 [DEBUG] [Thread-16855] [transport.py] [_log()] starting thread (client mode): 0xb6b7c820
2025-12-25T19:03:02.149 [DEBUG] [Thread-16855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:03:02.163 [DEBUG] [Thread-16855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:03:02.163 [INFO] [Thread-16855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:02.171 [DEBUG] [Thread-16855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] client lang: <none>
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] server lang: <none>
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] kex follows: False
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] Compression: none
2025-12-25T19:03:02.172 [DEBUG] [Thread-16855] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:03:02.231 [DEBUG] [Thread-16855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:03:02.231 [DEBUG] [Thread-16855] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:03:02.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:03:02.232 [DEBUG] [Thread-16855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:03:02.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:03:02.287 [DEBUG] [Thread-16855] [transport.py] [_log()] userauth is OK
2025-12-25T19:03:02.287 [DEBUG] [Thread-16855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:03:02.287 [DEBUG] [Thread-16855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:03:02.287 [DEBUG] [Thread-16855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:03:02.287 [DEBUG] [Thread-16855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:03:02.305 [INFO] [Thread-16855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:03:02.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-25T19:03:02.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:03:03.150 [DEBUG] [Thread-16855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:03:03.151 [DEBUG] [Thread-16855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:03:03.199 [DEBUG] [Thread-16855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:03:03.199 [DEBUG] [Thread-16855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:03:03.208 [DEBUG] [Thread-16855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:03:03.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:03:03.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:03:03.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:03:03.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:03:03.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:03:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:03:03.243 [DEBUG] [Thread-16855] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:03:08.743 [DEBUG] [Thread-16857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:15.720 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:15.721 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:19.795 [DEBUG] [Thread-16858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:23.795 [DEBUG] [Thread-16859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:33.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:03:33.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:03:33.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:03:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 3, 12), 23.21, 21.58, 0.0, 36.1, 23.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:03:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:03:12
2025-12-25T19:03:34.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:03:34.238 [DEBUG] [Thread-16860] [transport.py] [_log()] starting thread (client mode): 0xb6b20790
2025-12-25T19:03:34.238 [DEBUG] [Thread-16860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:03:34.258 [DEBUG] [Thread-16860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:03:34.258 [INFO] [Thread-16860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:03:34.261 [DEBUG] [Thread-16860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:03:34.261 [DEBUG] [Thread-16860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] client lang: <none>
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] server lang: <none>
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] kex follows: False
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] Compression: none
2025-12-25T19:03:34.262 [DEBUG] [Thread-16860] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:03:34.280 [DEBUG] [Thread-16860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:03:34.280 [DEBUG] [Thread-16860] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:03:34.281 [DEBUG] [Thread-16860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:03:34.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:03:34.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:03:34.283 [DEBUG] [Thread-16860] [transport.py] [_log()] userauth is OK
2025-12-25T19:03:34.283 [DEBUG] [Thread-16860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:03:34.283 [DEBUG] [Thread-16860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:03:34.283 [DEBUG] [Thread-16860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:03:34.283 [DEBUG] [Thread-16860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:03:34.305 [INFO] [Thread-16860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:03:34.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:03:34.954 [DEBUG] [Thread-16860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:03:34.955 [DEBUG] [Thread-16860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:03:34.955 [DEBUG] [Thread-16860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:03:34.995 [DEBUG] [Thread-16860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:03:34.995 [DEBUG] [Thread-16860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:03:34.999 [DEBUG] [Thread-16860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:03:35.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:03:35.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:03:35.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:03:35.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:03:35.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:03:35.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:03:35.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:03:35.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:03:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:03:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.710130 -999.00  +23.20  29.43     27   +3.20 1 1 1 1 1   887    0 18.67 -81.01 ----- 35.1 29.4 295.4 30.9 24.2 -26.3 24.5 -26.0 24.4 -23.7 24.6 -24.9
2025-12-25T19:03:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:03:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:03:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.710130
2025-12-25T19:03:35.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:03:35.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:03:35.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:03:35.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:03:35.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:03:35.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:03:12', tmtdew=23.21, humidity=21.58, cloud=0.0, wind=36.1, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:02:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:03:35.027 [DEBUG] [Thread-16860] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:03:35.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-25T19:03:35.121 [DEBUG] [Thread-16863] [transport.py] [_log()] starting thread (client mode): 0xb6bc2c50
2025-12-25T19:03:35.121 [DEBUG] [Thread-16863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:03:35.136 [DEBUG] [Thread-16863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:03:35.137 [INFO] [Thread-16863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] client lang: <none>
2025-12-25T19:03:35.144 [DEBUG] [Thread-16863] [transport.py] [_log()] server lang: <none>
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] kex follows: False
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] Compression: none
2025-12-25T19:03:35.145 [DEBUG] [Thread-16863] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:03:35.203 [DEBUG] [Thread-16863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:03:35.203 [DEBUG] [Thread-16863] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:03:35.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:03:35.204 [DEBUG] [Thread-16863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:03:35.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:03:35.258 [DEBUG] [Thread-16863] [transport.py] [_log()] userauth is OK
2025-12-25T19:03:35.259 [DEBUG] [Thread-16863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:03:35.259 [DEBUG] [Thread-16863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:03:35.259 [DEBUG] [Thread-16863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:03:35.259 [DEBUG] [Thread-16863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:03:35.279 [INFO] [Thread-16863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:03:35.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-25T19:03:35.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:03:36.112 [DEBUG] [Thread-16863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:03:36.113 [DEBUG] [Thread-16863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:03:36.160 [DEBUG] [Thread-16863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:03:36.160 [DEBUG] [Thread-16863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:03:36.170 [DEBUG] [Thread-16863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:03:36.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:03:36.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:03:36.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:03:36.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:03:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:03:36.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:03:36.206 [DEBUG] [Thread-16863] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:03:38.831 [DEBUG] [Thread-16865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:03:53.879 [DEBUG] [Thread-16866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:06.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:04:06.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:04:06.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-25T19:04:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 3, 44), 23.34, 21.59, 0.0, 30.91, 23.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:04:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:03:44
2025-12-25T19:04:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:04:07.269 [DEBUG] [Thread-16867] [transport.py] [_log()] starting thread (client mode): 0xb6b23190
2025-12-25T19:04:07.269 [DEBUG] [Thread-16867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:04:07.290 [DEBUG] [Thread-16867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:04:07.290 [INFO] [Thread-16867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] client lang: <none>
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] server lang: <none>
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] kex follows: False
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:04:07.293 [DEBUG] [Thread-16867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:04:07.294 [DEBUG] [Thread-16867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:04:07.294 [DEBUG] [Thread-16867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:04:07.294 [DEBUG] [Thread-16867] [transport.py] [_log()] Compression: none
2025-12-25T19:04:07.294 [DEBUG] [Thread-16867] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:04:07.310 [DEBUG] [Thread-16867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:04:07.310 [DEBUG] [Thread-16867] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:04:07.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:04:07.310 [DEBUG] [Thread-16867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:04:07.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:04:07.311 [DEBUG] [Thread-16867] [transport.py] [_log()] userauth is OK
2025-12-25T19:04:07.311 [DEBUG] [Thread-16867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:04:07.311 [DEBUG] [Thread-16867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:04:07.311 [DEBUG] [Thread-16867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:04:07.311 [DEBUG] [Thread-16867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:04:07.320 [INFO] [Thread-16867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:04:07.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:04:07.971 [DEBUG] [Thread-16867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:04:07.971 [DEBUG] [Thread-16867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:04:07.971 [DEBUG] [Thread-16867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:04:08.012 [DEBUG] [Thread-16867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:04:08.012 [DEBUG] [Thread-16867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:04:08.014 [DEBUG] [Thread-16867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:04:08.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:04:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:04:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:04:08.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:04:08.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:04:08.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:04:08.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.710477 -999.00  +23.10  35.27     27   +3.30 1 1 2 1 1   887    0 18.29 -83.12 ----- 33.0 35.3 298.6 40.1 24.2 -26.1 24.4 -25.8 24.5 -24.0 24.6 -25.0
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.710477
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:04:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:03:44', tmtdew=23.34, humidity=21.59, cloud=0.0, wind=30.91, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:03:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:04:08.032 [DEBUG] [Thread-16867] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:04:08.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:04:08.117 [DEBUG] [Thread-16870] [transport.py] [_log()] starting thread (client mode): 0xb6b63520
2025-12-25T19:04:08.117 [DEBUG] [Thread-16870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:04:08.131 [DEBUG] [Thread-16870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:04:08.131 [INFO] [Thread-16870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:04:08.138 [DEBUG] [Thread-16870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] client lang: <none>
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] server lang: <none>
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] kex follows: False
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] Compression: none
2025-12-25T19:04:08.139 [DEBUG] [Thread-16870] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:04:08.197 [DEBUG] [Thread-16870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:04:08.197 [DEBUG] [Thread-16870] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:04:08.197 [DEBUG] [Thread-16870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:04:08.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:04:08.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:04:08.254 [DEBUG] [Thread-16870] [transport.py] [_log()] userauth is OK
2025-12-25T19:04:08.254 [DEBUG] [Thread-16870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:04:08.254 [DEBUG] [Thread-16870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:04:08.254 [DEBUG] [Thread-16870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:04:08.254 [DEBUG] [Thread-16870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:04:08.269 [INFO] [Thread-16870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:04:08.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-25T19:04:08.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:04:08.912 [DEBUG] [Thread-16872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:09.103 [DEBUG] [Thread-16870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:04:09.103 [DEBUG] [Thread-16870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:04:09.151 [DEBUG] [Thread-16870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:04:09.151 [DEBUG] [Thread-16870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:04:09.160 [DEBUG] [Thread-16870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:04:09.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:04:09.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')
2025-12-25T19:04:09.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-25T19:04:09.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:04:09.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:04:09.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:04:09.191 [DEBUG] [Thread-16870] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:04:15.864 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:15.865 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:19.844 [DEBUG] [Thread-16873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:23.951 [DEBUG] [Thread-16874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:38.988 [DEBUG] [Thread-16875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:04:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:04:39.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:04:39.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-25T19:04:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 4, 16), 23.35, 21.58, 0.0, 32.98, 23.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:04:39.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:04:16
2025-12-25T19:04:40.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:04:40.209 [DEBUG] [Thread-16876] [transport.py] [_log()] starting thread (client mode): 0xb6b22920
2025-12-25T19:04:40.210 [DEBUG] [Thread-16876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:04:40.230 [DEBUG] [Thread-16876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:04:40.230 [INFO] [Thread-16876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] client lang: <none>
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] server lang: <none>
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] kex follows: False
2025-12-25T19:04:40.233 [DEBUG] [Thread-16876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:04:40.234 [DEBUG] [Thread-16876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:04:40.234 [DEBUG] [Thread-16876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:04:40.234 [DEBUG] [Thread-16876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:04:40.234 [DEBUG] [Thread-16876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:04:40.234 [DEBUG] [Thread-16876] [transport.py] [_log()] Compression: none
2025-12-25T19:04:40.234 [DEBUG] [Thread-16876] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:04:40.252 [DEBUG] [Thread-16876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:04:40.253 [DEBUG] [Thread-16876] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:04:40.253 [DEBUG] [Thread-16876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:04:40.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:04:40.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:04:40.256 [DEBUG] [Thread-16876] [transport.py] [_log()] userauth is OK
2025-12-25T19:04:40.256 [DEBUG] [Thread-16876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:04:40.256 [DEBUG] [Thread-16876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:04:40.256 [DEBUG] [Thread-16876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:04:40.256 [DEBUG] [Thread-16876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:04:40.282 [INFO] [Thread-16876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:04:40.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:04:40.925 [DEBUG] [Thread-16876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:04:40.925 [DEBUG] [Thread-16876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:04:40.926 [DEBUG] [Thread-16876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:04:40.965 [DEBUG] [Thread-16876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:04:40.966 [DEBUG] [Thread-16876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:04:40.968 [DEBUG] [Thread-16876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:04:40.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:04:40.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:04:40.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:04:40.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:04:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:04:40.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:04:40.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:04:40.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:04:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:04:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.710824 -999.00  +23.10  29.78     27   +3.20 1 1 1 1 1   887    0 18.46 -79.33 ----- 25.9 29.8 300.6 38.7 24.2 -26.2 24.4 -25.8 24.5 -23.7 24.6 -24.9
2025-12-25T19:04:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:04:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:04:40.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.710824
2025-12-25T19:04:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:04:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:04:40.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:04:40.994 [DEBUG] [Thread-16876] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:04:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:04:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:04:40.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:04:16', tmtdew=23.35, humidity=21.58, cloud=0.0, wind=32.98, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:03:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:04:41.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-25T19:04:41.087 [DEBUG] [Thread-16879] [transport.py] [_log()] starting thread (client mode): 0xb9592260
2025-12-25T19:04:41.087 [DEBUG] [Thread-16879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:04:41.102 [DEBUG] [Thread-16879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:04:41.103 [INFO] [Thread-16879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:04:41.110 [DEBUG] [Thread-16879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:04:41.110 [DEBUG] [Thread-16879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:04:41.110 [DEBUG] [Thread-16879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:04:41.110 [DEBUG] [Thread-16879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] client lang: <none>
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] server lang: <none>
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] kex follows: False
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:04:41.111 [DEBUG] [Thread-16879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:04:41.112 [DEBUG] [Thread-16879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:04:41.112 [DEBUG] [Thread-16879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:04:41.112 [DEBUG] [Thread-16879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:04:41.112 [DEBUG] [Thread-16879] [transport.py] [_log()] Compression: none
2025-12-25T19:04:41.112 [DEBUG] [Thread-16879] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:04:41.168 [DEBUG] [Thread-16879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:04:41.168 [DEBUG] [Thread-16879] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:04:41.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:04:41.170 [DEBUG] [Thread-16879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:04:41.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:04:41.227 [DEBUG] [Thread-16879] [transport.py] [_log()] userauth is OK
2025-12-25T19:04:41.228 [DEBUG] [Thread-16879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:04:41.228 [DEBUG] [Thread-16879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:04:41.228 [DEBUG] [Thread-16879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:04:41.228 [DEBUG] [Thread-16879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:04:41.246 [INFO] [Thread-16879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:04:41.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-25T19:04:41.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:04:42.085 [DEBUG] [Thread-16879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:04:42.086 [DEBUG] [Thread-16879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:04:42.134 [DEBUG] [Thread-16879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:04:42.134 [DEBUG] [Thread-16879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:04:42.143 [DEBUG] [Thread-16879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:04:42.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:04:42.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-25T19:04:42.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-25T19:04:42.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:04:42.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:04:42.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:04:42.179 [DEBUG] [Thread-16879] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:04:54.023 [DEBUG] [Thread-16881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:09.079 [DEBUG] [Thread-16882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:12.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:05:12.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:05:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:05:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 4, 48), 23.17, 21.69, 0.0, 38.36, 23.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:05:12.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:04:48
2025-12-25T19:05:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:05:13.148 [DEBUG] [Thread-16883] [transport.py] [_log()] starting thread (client mode): 0xb6b23550
2025-12-25T19:05:13.149 [DEBUG] [Thread-16883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:05:13.169 [DEBUG] [Thread-16883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:05:13.169 [INFO] [Thread-16883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:05:13.171 [DEBUG] [Thread-16883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] client lang: <none>
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] server lang: <none>
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] kex follows: False
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] Compression: none
2025-12-25T19:05:13.172 [DEBUG] [Thread-16883] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:05:13.188 [DEBUG] [Thread-16883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:05:13.189 [DEBUG] [Thread-16883] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:05:13.189 [DEBUG] [Thread-16883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:05:13.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:05:13.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:05:13.192 [DEBUG] [Thread-16883] [transport.py] [_log()] userauth is OK
2025-12-25T19:05:13.192 [DEBUG] [Thread-16883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:05:13.192 [DEBUG] [Thread-16883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:05:13.192 [DEBUG] [Thread-16883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:05:13.192 [DEBUG] [Thread-16883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:05:13.217 [INFO] [Thread-16883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:05:13.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:05:13.870 [DEBUG] [Thread-16883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:05:13.870 [DEBUG] [Thread-16883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:05:13.871 [DEBUG] [Thread-16883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:05:13.911 [DEBUG] [Thread-16883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:05:13.911 [DEBUG] [Thread-16883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:05:13.915 [DEBUG] [Thread-16883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:05:13.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:05:13.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:05:13.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:05:13.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:05:13.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:05:13.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:05:13.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:05:13.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:05:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:05:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.711518 -999.00  +23.10  38.95     27   +3.30 1 1 2 1 1   887    0 17.96 -88.83 ----- 43.3 39.0 294.8 45.1 24.1 -26.5 24.4 -26.3 24.4 -24.4 24.6 -25.1
2025-12-25T19:05:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:05:13.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:05:13.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.711518
2025-12-25T19:05:13.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:05:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:05:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:05:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:05:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:05:13.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:04:48', tmtdew=23.17, humidity=21.69, cloud=0.0, wind=38.36, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:04:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:05:13.942 [DEBUG] [Thread-16883] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:05:14.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-25T19:05:14.036 [DEBUG] [Thread-16886] [transport.py] [_log()] starting thread (client mode): 0xb6bb6ef0
2025-12-25T19:05:14.036 [DEBUG] [Thread-16886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:05:14.050 [DEBUG] [Thread-16886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:05:14.050 [INFO] [Thread-16886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] client lang: <none>
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] server lang: <none>
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] kex follows: False
2025-12-25T19:05:14.058 [DEBUG] [Thread-16886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:05:14.059 [DEBUG] [Thread-16886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:05:14.059 [DEBUG] [Thread-16886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:05:14.059 [DEBUG] [Thread-16886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:05:14.059 [DEBUG] [Thread-16886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:05:14.059 [DEBUG] [Thread-16886] [transport.py] [_log()] Compression: none
2025-12-25T19:05:14.059 [DEBUG] [Thread-16886] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:05:14.114 [DEBUG] [Thread-16886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:05:14.115 [DEBUG] [Thread-16886] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:05:14.115 [DEBUG] [Thread-16886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:05:14.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:05:14.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:05:14.172 [DEBUG] [Thread-16886] [transport.py] [_log()] userauth is OK
2025-12-25T19:05:14.172 [DEBUG] [Thread-16886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:05:14.172 [DEBUG] [Thread-16886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:05:14.173 [DEBUG] [Thread-16886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:05:14.173 [DEBUG] [Thread-16886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:05:14.192 [INFO] [Thread-16886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:05:14.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-25T19:05:14.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:05:15.041 [DEBUG] [Thread-16886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:05:15.041 [DEBUG] [Thread-16886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:05:15.089 [DEBUG] [Thread-16886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:05:15.089 [DEBUG] [Thread-16886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:05:15.098 [DEBUG] [Thread-16886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:05:15.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:05:15.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:05:15.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-25T19:05:15.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:05:15.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:05:15.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:05:15.133 [DEBUG] [Thread-16886] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:05:16.006 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:16.007 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:19.890 [DEBUG] [Thread-16888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:24.110 [DEBUG] [Thread-16889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:39.162 [DEBUG] [Thread-16890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:05:45.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:05:45.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:05:45.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-25T19:05:45.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 5, 20), 23.12, 21.76, 0.0, 38.13, 23.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:05:45.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:05:20
2025-12-25T19:05:45.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:05:46.139 [DEBUG] [Thread-16891] [transport.py] [_log()] starting thread (client mode): 0xb6b4fc70
2025-12-25T19:05:46.139 [DEBUG] [Thread-16891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:05:46.160 [DEBUG] [Thread-16891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:05:46.160 [INFO] [Thread-16891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:46.163 [DEBUG] [Thread-16891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] client lang: <none>
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] server lang: <none>
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] kex follows: False
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] Compression: none
2025-12-25T19:05:46.164 [DEBUG] [Thread-16891] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:05:46.183 [DEBUG] [Thread-16891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:05:46.183 [DEBUG] [Thread-16891] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:05:46.184 [DEBUG] [Thread-16891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:05:46.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:05:46.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:05:46.186 [DEBUG] [Thread-16891] [transport.py] [_log()] userauth is OK
2025-12-25T19:05:46.186 [DEBUG] [Thread-16891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:05:46.186 [DEBUG] [Thread-16891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:05:46.186 [DEBUG] [Thread-16891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:05:46.186 [DEBUG] [Thread-16891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:05:46.222 [INFO] [Thread-16891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:05:46.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:05:46.864 [DEBUG] [Thread-16891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:05:46.864 [DEBUG] [Thread-16891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:05:46.865 [DEBUG] [Thread-16891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:05:46.905 [DEBUG] [Thread-16891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:05:46.905 [DEBUG] [Thread-16891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:05:46.909 [DEBUG] [Thread-16891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:05:46.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:05:46.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:05:46.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:05:46.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:05:46.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:05:46.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:05:46.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:05:46.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:05:46.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:05:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.711865 -999.00  +22.90  32.68     27   +3.40 1 1 2 1 1   887    0 17.73 -90.20 ----- 41.9 32.7 294.8 46.1 24.1 -26.5 24.3 -26.3 24.4 -24.1 24.5 -25.4
2025-12-25T19:05:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:05:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:05:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.711865
2025-12-25T19:05:46.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:05:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:05:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:05:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:05:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:05:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:05:20', tmtdew=23.12, humidity=21.76, cloud=0.0, wind=38.13, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:05:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:05:46.935 [DEBUG] [Thread-16891] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:05:47.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-25T19:05:47.028 [DEBUG] [Thread-16894] [transport.py] [_log()] starting thread (client mode): 0xb6b7ff70
2025-12-25T19:05:47.028 [DEBUG] [Thread-16894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:05:47.042 [DEBUG] [Thread-16894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:05:47.042 [INFO] [Thread-16894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:05:47.050 [DEBUG] [Thread-16894] [transport.py] [_log()] client lang: <none>
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] server lang: <none>
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] kex follows: False
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] Compression: none
2025-12-25T19:05:47.051 [DEBUG] [Thread-16894] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:05:47.112 [DEBUG] [Thread-16894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:05:47.113 [DEBUG] [Thread-16894] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:05:47.113 [DEBUG] [Thread-16894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:05:47.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:05:47.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:05:47.168 [DEBUG] [Thread-16894] [transport.py] [_log()] userauth is OK
2025-12-25T19:05:47.168 [DEBUG] [Thread-16894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:05:47.168 [DEBUG] [Thread-16894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:05:47.169 [DEBUG] [Thread-16894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:05:47.169 [DEBUG] [Thread-16894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:05:47.188 [INFO] [Thread-16894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:05:47.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-25T19:05:47.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:05:48.028 [DEBUG] [Thread-16894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:05:48.028 [DEBUG] [Thread-16894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:05:48.076 [DEBUG] [Thread-16894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:05:48.076 [DEBUG] [Thread-16894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:05:48.084 [DEBUG] [Thread-16894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:05:48.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:05:48.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:05:48.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:05:48.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:05:48.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:05:48.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:05:48.114 [DEBUG] [Thread-16894] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:05:54.197 [DEBUG] [Thread-16896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:09.233 [DEBUG] [Thread-16897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:16.146 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:16.147 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:06:18.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:06:18.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:06:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 5, 52), 23.05, 21.79, 0.0, 42.63, 23.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:06:18.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:05:52
2025-12-25T19:06:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:06:19.109 [DEBUG] [Thread-16898] [transport.py] [_log()] starting thread (client mode): 0xb6b623e0
2025-12-25T19:06:19.110 [DEBUG] [Thread-16898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:06:19.131 [DEBUG] [Thread-16898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:06:19.131 [INFO] [Thread-16898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:06:19.134 [DEBUG] [Thread-16898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:06:19.134 [DEBUG] [Thread-16898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:06:19.134 [DEBUG] [Thread-16898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] client lang: <none>
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] server lang: <none>
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] kex follows: False
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:06:19.135 [DEBUG] [Thread-16898] [transport.py] [_log()] Compression: none
2025-12-25T19:06:19.136 [DEBUG] [Thread-16898] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:06:19.155 [DEBUG] [Thread-16898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:06:19.156 [DEBUG] [Thread-16898] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:06:19.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:06:19.157 [DEBUG] [Thread-16898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:06:19.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:06:19.159 [DEBUG] [Thread-16898] [transport.py] [_log()] userauth is OK
2025-12-25T19:06:19.159 [DEBUG] [Thread-16898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:06:19.159 [DEBUG] [Thread-16898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:06:19.159 [DEBUG] [Thread-16898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:06:19.159 [DEBUG] [Thread-16898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:06:19.177 [INFO] [Thread-16898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:06:19.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:06:19.792 [DEBUG] [Thread-16898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:06:19.792 [DEBUG] [Thread-16898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:06:19.792 [DEBUG] [Thread-16898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:06:19.833 [DEBUG] [Thread-16898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:06:19.833 [DEBUG] [Thread-16898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:06:19.837 [DEBUG] [Thread-16898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:06:19.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:06:19.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:06:19.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:06:19.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:06:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:06:19.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:06:19.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:06:19.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:06:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:06:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.712213 -999.00  +22.90  30.11     27   +3.40 1 1 2 1 1   887    0 17.79 -92.72 ----- 26.8 30.1 298.6 41.9 24.1 -26.4 24.3 -25.8 24.4 -24.0 24.5 -25.2
2025-12-25T19:06:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:06:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:06:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.712213
2025-12-25T19:06:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:06:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:06:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:06:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:06:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:06:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:05:52', tmtdew=23.05, humidity=21.79, cloud=0.0, wind=42.63, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:05:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:06:19.866 [DEBUG] [Thread-16898] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:06:19.918 [DEBUG] [Thread-16901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:19.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-25T19:06:19.962 [DEBUG] [Thread-16902] [transport.py] [_log()] starting thread (client mode): 0xb6b4fc70
2025-12-25T19:06:19.962 [DEBUG] [Thread-16902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:06:19.976 [DEBUG] [Thread-16902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:06:19.977 [INFO] [Thread-16902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:06:19.984 [DEBUG] [Thread-16902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:06:19.984 [DEBUG] [Thread-16902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] client lang: <none>
2025-12-25T19:06:19.985 [DEBUG] [Thread-16902] [transport.py] [_log()] server lang: <none>
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] kex follows: False
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] Compression: none
2025-12-25T19:06:19.986 [DEBUG] [Thread-16902] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:06:20.047 [DEBUG] [Thread-16902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:06:20.047 [DEBUG] [Thread-16902] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:06:20.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:06:20.049 [DEBUG] [Thread-16902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:06:20.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:06:20.105 [DEBUG] [Thread-16902] [transport.py] [_log()] userauth is OK
2025-12-25T19:06:20.106 [DEBUG] [Thread-16902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:06:20.106 [DEBUG] [Thread-16902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:06:20.106 [DEBUG] [Thread-16902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:06:20.106 [DEBUG] [Thread-16902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:06:20.121 [INFO] [Thread-16902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:06:20.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-25T19:06:20.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:06:20.916 [DEBUG] [Thread-16902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:06:20.917 [DEBUG] [Thread-16902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:06:20.964 [DEBUG] [Thread-16902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:06:20.965 [DEBUG] [Thread-16902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:06:20.973 [DEBUG] [Thread-16902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:06:20.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:06:20.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:06:20.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:06:20.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:06:21.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:06:21.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:06:21.008 [DEBUG] [Thread-16902] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:06:24.272 [DEBUG] [Thread-16904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:39.322 [DEBUG] [Thread-16905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:06:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:06:51.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:06:51.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-25T19:06:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 6, 24), 23.06, 21.78, 0.0, 41.16, 23.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:06:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:06:24
2025-12-25T19:06:51.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:06:52.025 [DEBUG] [Thread-16906] [transport.py] [_log()] starting thread (client mode): 0xb6b20340
2025-12-25T19:06:52.025 [DEBUG] [Thread-16906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:06:52.049 [DEBUG] [Thread-16906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:06:52.049 [INFO] [Thread-16906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] client lang: <none>
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] server lang: <none>
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] kex follows: False
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:06:52.053 [DEBUG] [Thread-16906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:06:52.054 [DEBUG] [Thread-16906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:06:52.054 [DEBUG] [Thread-16906] [transport.py] [_log()] Compression: none
2025-12-25T19:06:52.054 [DEBUG] [Thread-16906] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:06:52.073 [DEBUG] [Thread-16906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:06:52.074 [DEBUG] [Thread-16906] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:06:52.074 [DEBUG] [Thread-16906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:06:52.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:06:52.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:06:52.076 [DEBUG] [Thread-16906] [transport.py] [_log()] userauth is OK
2025-12-25T19:06:52.077 [DEBUG] [Thread-16906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:06:52.077 [DEBUG] [Thread-16906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:06:52.077 [DEBUG] [Thread-16906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:06:52.077 [DEBUG] [Thread-16906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:06:52.093 [INFO] [Thread-16906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:06:52.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:06:52.744 [DEBUG] [Thread-16906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:06:52.744 [DEBUG] [Thread-16906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:06:52.745 [DEBUG] [Thread-16906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:06:52.785 [DEBUG] [Thread-16906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:06:52.785 [DEBUG] [Thread-16906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:06:52.789 [DEBUG] [Thread-16906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:06:52.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:06:52.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:06:52.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:06:52.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:06:52.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:06:52.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:06:52.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:06:52.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:06:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:06:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.712560 -999.00  +23.00  27.55     27   +3.40 1 1 1 1 1   887    0 17.76 -97.92 ----- 29.4 27.6 310.6 41.0 24.1 -26.2 24.3 -25.8 24.3 -24.4 24.5 -25.2
2025-12-25T19:06:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:06:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:06:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.712560
2025-12-25T19:06:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:06:52.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:06:52.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:06:52.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:06:52.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:06:52.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:06:24', tmtdew=23.06, humidity=21.78, cloud=0.0, wind=41.16, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:06:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:06:52.816 [DEBUG] [Thread-16906] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:06:52.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-25T19:06:52.909 [DEBUG] [Thread-16909] [transport.py] [_log()] starting thread (client mode): 0xb955a5c0
2025-12-25T19:06:52.909 [DEBUG] [Thread-16909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:06:52.923 [DEBUG] [Thread-16909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:06:52.923 [INFO] [Thread-16909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] client lang: <none>
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] server lang: <none>
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] kex follows: False
2025-12-25T19:06:52.931 [DEBUG] [Thread-16909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:06:52.932 [DEBUG] [Thread-16909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:06:52.932 [DEBUG] [Thread-16909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:06:52.932 [DEBUG] [Thread-16909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:06:52.932 [DEBUG] [Thread-16909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:06:52.932 [DEBUG] [Thread-16909] [transport.py] [_log()] Compression: none
2025-12-25T19:06:52.932 [DEBUG] [Thread-16909] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:06:52.988 [DEBUG] [Thread-16909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:06:52.989 [DEBUG] [Thread-16909] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:06:52.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:06:52.990 [DEBUG] [Thread-16909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:06:52.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:06:53.045 [DEBUG] [Thread-16909] [transport.py] [_log()] userauth is OK
2025-12-25T19:06:53.045 [DEBUG] [Thread-16909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:06:53.045 [DEBUG] [Thread-16909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:06:53.045 [DEBUG] [Thread-16909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:06:53.045 [DEBUG] [Thread-16909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:06:53.064 [INFO] [Thread-16909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:06:53.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:06:53.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:06:53.935 [DEBUG] [Thread-16909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:06:53.935 [DEBUG] [Thread-16909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:06:53.983 [DEBUG] [Thread-16909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:06:53.983 [DEBUG] [Thread-16909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:06:53.992 [DEBUG] [Thread-16909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:06:54.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:06:54.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-25T19:06:54.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-25T19:06:54.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:06:54.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:06:54.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:06:54.027 [DEBUG] [Thread-16909] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:06:54.354 [DEBUG] [Thread-16911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:09.403 [DEBUG] [Thread-16912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:16.288 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:16.289 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:19.947 [DEBUG] [Thread-16913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:07:24.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:07:24.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-25T19:07:24.435 [DEBUG] [Thread-16914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:24.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 6, 56), 22.88, 21.83, 0.0, 37.83, 23.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:07:24.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:06:56
2025-12-25T19:07:24.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:07:25.045 [DEBUG] [Thread-16915] [transport.py] [_log()] starting thread (client mode): 0xb6b23850
2025-12-25T19:07:25.045 [DEBUG] [Thread-16915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:07:25.059 [DEBUG] [Thread-16915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:07:25.060 [INFO] [Thread-16915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] client lang: <none>
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] server lang: <none>
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] kex follows: False
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:07:25.063 [DEBUG] [Thread-16915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:07:25.064 [DEBUG] [Thread-16915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:07:25.064 [DEBUG] [Thread-16915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:07:25.064 [DEBUG] [Thread-16915] [transport.py] [_log()] Compression: none
2025-12-25T19:07:25.064 [DEBUG] [Thread-16915] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:07:25.073 [DEBUG] [Thread-16915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:07:25.074 [DEBUG] [Thread-16915] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:07:25.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:07:25.075 [DEBUG] [Thread-16915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:07:25.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:07:25.077 [DEBUG] [Thread-16915] [transport.py] [_log()] userauth is OK
2025-12-25T19:07:25.077 [DEBUG] [Thread-16915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:07:25.077 [DEBUG] [Thread-16915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:07:25.077 [DEBUG] [Thread-16915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:07:25.077 [DEBUG] [Thread-16915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:07:25.097 [INFO] [Thread-16915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:07:25.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:07:25.740 [DEBUG] [Thread-16915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:07:25.740 [DEBUG] [Thread-16915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:07:25.740 [DEBUG] [Thread-16915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:07:25.781 [DEBUG] [Thread-16915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:07:25.781 [DEBUG] [Thread-16915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:07:25.783 [DEBUG] [Thread-16915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:07:25.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:07:25.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:07:25.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:07:25.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:07:25.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:07:25.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:07:25.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:07:25.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:07:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:07:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.712907 -999.00  +23.10  32.13     27   +3.40 1 1 2 1 1   887    0 17.50 -100.06 ----- 35.4 32.1 302.6 38.6 24.1 -26.6 24.3 -26.2 24.3 -24.2 24.4 -24.9
2025-12-25T19:07:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:07:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:07:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.712907
2025-12-25T19:07:25.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:07:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:07:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:07:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:07:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:07:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:06:56', tmtdew=22.88, humidity=21.83, cloud=0.0, wind=37.83, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:06:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:07:25.805 [DEBUG] [Thread-16915] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:07:25.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-25T19:07:25.901 [DEBUG] [Thread-16918] [transport.py] [_log()] starting thread (client mode): 0xb6bb7d00
2025-12-25T19:07:25.901 [DEBUG] [Thread-16918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:07:25.915 [DEBUG] [Thread-16918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:07:25.915 [INFO] [Thread-16918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:07:25.922 [DEBUG] [Thread-16918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] client lang: <none>
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] server lang: <none>
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] kex follows: False
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:07:25.923 [DEBUG] [Thread-16918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:07:25.924 [DEBUG] [Thread-16918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:07:25.924 [DEBUG] [Thread-16918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:07:25.924 [DEBUG] [Thread-16918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:07:25.924 [DEBUG] [Thread-16918] [transport.py] [_log()] Compression: none
2025-12-25T19:07:25.924 [DEBUG] [Thread-16918] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:07:25.981 [DEBUG] [Thread-16918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:07:25.982 [DEBUG] [Thread-16918] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:07:25.983 [DEBUG] [Thread-16918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:07:25.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:07:25.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:07:26.045 [DEBUG] [Thread-16918] [transport.py] [_log()] userauth is OK
2025-12-25T19:07:26.045 [DEBUG] [Thread-16918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:07:26.046 [DEBUG] [Thread-16918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:07:26.046 [DEBUG] [Thread-16918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:07:26.046 [DEBUG] [Thread-16918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:07:26.064 [INFO] [Thread-16918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:07:26.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:07:26.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:07:26.869 [DEBUG] [Thread-16918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:07:26.869 [DEBUG] [Thread-16918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:07:26.917 [DEBUG] [Thread-16918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:07:26.917 [DEBUG] [Thread-16918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:07:26.926 [DEBUG] [Thread-16918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:07:26.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:07:26.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:07:26.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:07:26.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:07:26.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:07:26.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:07:26.963 [DEBUG] [Thread-16918] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:07:39.468 [DEBUG] [Thread-16920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:54.521 [DEBUG] [Thread-16921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:07:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:07:56.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:07:56.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-25T19:07:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 7, 29), 22.83, 21.89, 0.0, 40.35, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:07:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:07:29
2025-12-25T19:07:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:07:57.997 [DEBUG] [Thread-16922] [transport.py] [_log()] starting thread (client mode): 0xb6bb6920
2025-12-25T19:07:57.997 [DEBUG] [Thread-16922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:07:58.016 [DEBUG] [Thread-16922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:07:58.016 [INFO] [Thread-16922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:07:58.020 [DEBUG] [Thread-16922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:07:58.020 [DEBUG] [Thread-16922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:07:58.020 [DEBUG] [Thread-16922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:07:58.020 [DEBUG] [Thread-16922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:07:58.020 [DEBUG] [Thread-16922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] client lang: <none>
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] server lang: <none>
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] kex follows: False
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] Compression: none
2025-12-25T19:07:58.021 [DEBUG] [Thread-16922] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:07:58.036 [DEBUG] [Thread-16922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:07:58.036 [DEBUG] [Thread-16922] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:07:58.037 [DEBUG] [Thread-16922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:07:58.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:07:58.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:07:58.037 [DEBUG] [Thread-16922] [transport.py] [_log()] userauth is OK
2025-12-25T19:07:58.037 [DEBUG] [Thread-16922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:07:58.037 [DEBUG] [Thread-16922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:07:58.038 [DEBUG] [Thread-16922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:07:58.038 [DEBUG] [Thread-16922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:07:58.048 [INFO] [Thread-16922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:07:58.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:07:58.683 [DEBUG] [Thread-16922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:07:58.684 [DEBUG] [Thread-16922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:07:58.684 [DEBUG] [Thread-16922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:07:58.724 [DEBUG] [Thread-16922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:07:58.724 [DEBUG] [Thread-16922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:07:58.727 [DEBUG] [Thread-16922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:07:58.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:07:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:07:58.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:07:58.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:07:58.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:07:58.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:07:58.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.713255 -999.00  +22.90  35.82     27   +3.40 1 1 2 1 1   887    0 17.18 -99.45 ----- 37.4 35.8 294.8 44.4 24.1 -26.7 24.3 -26.3 24.3 -24.3 24.4 -25.2
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.713255
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:07:58.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:07:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:07:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:07:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:07:58.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:07:29', tmtdew=22.83, humidity=21.89, cloud=0.0, wind=40.35, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:07:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:07:58.744 [DEBUG] [Thread-16922] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:07:58.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-25T19:08:09.556 [DEBUG] [Thread-16925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:08:16.429 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:08:16.430 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:08:19.982 [DEBUG] [Thread-16926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:08:24.618 [DEBUG] [Thread-16927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:08:39.648 [DEBUG] [Thread-16928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:08:54.682 [DEBUG] [Thread-16929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:09.717 [DEBUG] [Thread-16930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:16.570 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:16.571 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:20.009 [DEBUG] [Thread-16931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:24.750 [DEBUG] [Thread-16932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:39.788 [DEBUG] [Thread-16933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:09:54.824 [DEBUG] [Thread-16934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:09.855 [DEBUG] [Thread-16935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:13.717 [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-25T19:10:16.711 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:16.712 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:20.055 [DEBUG] [Thread-16936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:24.890 [DEBUG] [Thread-16937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:39.922 [DEBUG] [Thread-16938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:10:43.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:10:43.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:10:43.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:10:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 10, 41), 22.65, 22.38, 0.0, 30.79, 23.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:10:44.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:10:41
2025-12-25T19:10:44.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:10:44.728 [DEBUG] [Thread-16939] [transport.py] [_log()] starting thread (client mode): 0xb6b7e500
2025-12-25T19:10:44.728 [DEBUG] [Thread-16939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:10:44.749 [DEBUG] [Thread-16939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:10:44.749 [INFO] [Thread-16939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] client lang: <none>
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] server lang: <none>
2025-12-25T19:10:44.750 [DEBUG] [Thread-16939] [transport.py] [_log()] kex follows: False
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] Compression: none
2025-12-25T19:10:44.751 [DEBUG] [Thread-16939] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:10:44.770 [DEBUG] [Thread-16939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:10:44.770 [DEBUG] [Thread-16939] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:10:44.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:10:44.771 [DEBUG] [Thread-16939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:10:44.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:10:44.773 [DEBUG] [Thread-16939] [transport.py] [_log()] userauth is OK
2025-12-25T19:10:44.774 [DEBUG] [Thread-16939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:10:44.774 [DEBUG] [Thread-16939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:10:44.774 [DEBUG] [Thread-16939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:10:44.774 [DEBUG] [Thread-16939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:10:44.799 [INFO] [Thread-16939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:10:44.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:10:45.462 [DEBUG] [Thread-16939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:10:45.462 [DEBUG] [Thread-16939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:10:45.463 [DEBUG] [Thread-16939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:10:45.503 [DEBUG] [Thread-16939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:10:45.503 [DEBUG] [Thread-16939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:10:45.506 [DEBUG] [Thread-16939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:10:45.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:10:45.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:10:45.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:10:45.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:10:45.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:10:45.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:10:45.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:10:45.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:10:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:10:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.715338 -999.00  +22.70  27.32     28   +3.40 1 1 1 1 1   887    0 16.94 -113.68 ----- 24.7 27.3 304.8 33.1 23.9 -26.3 24.1 -25.9 24.0 -24.1 24.1 -25.1
2025-12-25T19:10:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:10:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:10:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.715338
2025-12-25T19:10:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:10:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:10:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:10:45.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:10:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:10:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:10:41', tmtdew=22.65, humidity=22.38, cloud=0.0, wind=30.79, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:10:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:10:45.528 [DEBUG] [Thread-16939] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:10:45.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-25T19:10:45.623 [DEBUG] [Thread-16942] [transport.py] [_log()] starting thread (client mode): 0xb6b22890
2025-12-25T19:10:45.624 [DEBUG] [Thread-16942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:10:45.638 [DEBUG] [Thread-16942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:10:45.638 [INFO] [Thread-16942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:10:45.645 [DEBUG] [Thread-16942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] client lang: <none>
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] server lang: <none>
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] kex follows: False
2025-12-25T19:10:45.646 [DEBUG] [Thread-16942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:10:45.647 [DEBUG] [Thread-16942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:10:45.647 [DEBUG] [Thread-16942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:10:45.647 [DEBUG] [Thread-16942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:10:45.647 [DEBUG] [Thread-16942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:10:45.647 [DEBUG] [Thread-16942] [transport.py] [_log()] Compression: none
2025-12-25T19:10:45.647 [DEBUG] [Thread-16942] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:10:45.705 [DEBUG] [Thread-16942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:10:45.706 [DEBUG] [Thread-16942] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:10:45.706 [DEBUG] [Thread-16942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:10:45.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:10:45.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:10:45.761 [DEBUG] [Thread-16942] [transport.py] [_log()] userauth is OK
2025-12-25T19:10:45.762 [DEBUG] [Thread-16942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:10:45.762 [DEBUG] [Thread-16942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:10:45.762 [DEBUG] [Thread-16942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:10:45.762 [DEBUG] [Thread-16942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:10:45.781 [INFO] [Thread-16942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:10:45.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-25T19:10:45.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:10:46.663 [DEBUG] [Thread-16942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:10:46.663 [DEBUG] [Thread-16942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:10:46.714 [DEBUG] [Thread-16942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:10:46.714 [DEBUG] [Thread-16942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:10:46.723 [DEBUG] [Thread-16942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:10:46.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:10:46.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:10:46.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:10:46.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:10:46.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:10:46.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:10:46.760 [DEBUG] [Thread-16942] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:10:54.958 [DEBUG] [Thread-16944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:10.015 [DEBUG] [Thread-16945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:11:16.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:11:16.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-25T19:11:16.854 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:16.855 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:17.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 11, 13), 22.62, 22.42, 0.0, 29.48, 23.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:11:17.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:11:13
2025-12-25T19:11:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:11:17.759 [DEBUG] [Thread-16946] [transport.py] [_log()] starting thread (client mode): 0xb6b23670
2025-12-25T19:11:17.759 [DEBUG] [Thread-16946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:11:17.780 [DEBUG] [Thread-16946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:11:17.780 [INFO] [Thread-16946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:17.784 [DEBUG] [Thread-16946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] client lang: <none>
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] server lang: <none>
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] kex follows: False
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] Compression: none
2025-12-25T19:11:17.785 [DEBUG] [Thread-16946] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:11:17.804 [DEBUG] [Thread-16946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:11:17.805 [DEBUG] [Thread-16946] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:11:17.805 [DEBUG] [Thread-16946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:11:17.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:11:17.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:11:17.807 [DEBUG] [Thread-16946] [transport.py] [_log()] userauth is OK
2025-12-25T19:11:17.807 [DEBUG] [Thread-16946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:11:17.808 [DEBUG] [Thread-16946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:11:17.808 [DEBUG] [Thread-16946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:11:17.808 [DEBUG] [Thread-16946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:11:17.842 [INFO] [Thread-16946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:11:17.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:11:18.490 [DEBUG] [Thread-16946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:11:18.490 [DEBUG] [Thread-16946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:11:18.490 [DEBUG] [Thread-16946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:11:18.531 [DEBUG] [Thread-16946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:11:18.531 [DEBUG] [Thread-16946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:11:18.533 [DEBUG] [Thread-16946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:11:18.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:11:18.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:11:18.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:11:18.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:11:18.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:11:18.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:11:18.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:11:18.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:11:18.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:11:18.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.715685 -999.00  +22.70  31.64     28   +3.40 1 1 2 1 1   887    0 16.84 -124.36 ----- 25.8 31.6 295.4 37.2 23.9 -26.3 24.1 -25.9 23.9 -24.4 24.1 -25.0
2025-12-25T19:11:18.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:11:18.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:11:18.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.715685
2025-12-25T19:11:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:11:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:11:18.561 [DEBUG] [Thread-16946] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:11:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:11:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:11:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:11:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:11:13', tmtdew=22.62, humidity=22.42, cloud=0.0, wind=29.48, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:10:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:11:18.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:11:18.657 [DEBUG] [Thread-16949] [transport.py] [_log()] starting thread (client mode): 0xb6b7ece0
2025-12-25T19:11:18.657 [DEBUG] [Thread-16949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:11:18.672 [DEBUG] [Thread-16949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:11:18.672 [INFO] [Thread-16949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] client lang: <none>
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] server lang: <none>
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] kex follows: False
2025-12-25T19:11:18.680 [DEBUG] [Thread-16949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:11:18.681 [DEBUG] [Thread-16949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:11:18.681 [DEBUG] [Thread-16949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:11:18.681 [DEBUG] [Thread-16949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:11:18.681 [DEBUG] [Thread-16949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:11:18.681 [DEBUG] [Thread-16949] [transport.py] [_log()] Compression: none
2025-12-25T19:11:18.681 [DEBUG] [Thread-16949] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:11:18.740 [DEBUG] [Thread-16949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:11:18.741 [DEBUG] [Thread-16949] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:11:18.741 [DEBUG] [Thread-16949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:11:18.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:11:18.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:11:18.797 [DEBUG] [Thread-16949] [transport.py] [_log()] userauth is OK
2025-12-25T19:11:18.797 [DEBUG] [Thread-16949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:11:18.797 [DEBUG] [Thread-16949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:11:18.797 [DEBUG] [Thread-16949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:11:18.797 [DEBUG] [Thread-16949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:11:18.816 [INFO] [Thread-16949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:11:18.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-25T19:11:18.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:11:19.664 [DEBUG] [Thread-16949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:11:19.664 [DEBUG] [Thread-16949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:11:19.712 [DEBUG] [Thread-16949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:11:19.712 [DEBUG] [Thread-16949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:11:19.721 [DEBUG] [Thread-16949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:11:19.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:11:19.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-25T19:11:19.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-25T19:11:19.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:11:19.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:11:19.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:11:19.756 [DEBUG] [Thread-16949] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:11:20.093 [DEBUG] [Thread-16951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:25.046 [DEBUG] [Thread-16952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:40.108 [DEBUG] [Thread-16953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:11:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:11:49.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:11:49.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-25T19:11:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 11, 45), 22.64, 22.38, 0.0, 30.67, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:11:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:11:45
2025-12-25T19:11:50.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:11:50.808 [DEBUG] [Thread-16954] [transport.py] [_log()] starting thread (client mode): 0xb6bf78b0
2025-12-25T19:11:50.808 [DEBUG] [Thread-16954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:11:50.828 [DEBUG] [Thread-16954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:11:50.828 [INFO] [Thread-16954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] client lang: <none>
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] server lang: <none>
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] kex follows: False
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] Compression: none
2025-12-25T19:11:50.831 [DEBUG] [Thread-16954] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:11:50.847 [DEBUG] [Thread-16954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:11:50.847 [DEBUG] [Thread-16954] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:11:50.847 [DEBUG] [Thread-16954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:11:50.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:11:50.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:11:50.848 [DEBUG] [Thread-16954] [transport.py] [_log()] userauth is OK
2025-12-25T19:11:50.848 [DEBUG] [Thread-16954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:11:50.848 [DEBUG] [Thread-16954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:11:50.848 [DEBUG] [Thread-16954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:11:50.848 [DEBUG] [Thread-16954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:11:50.862 [INFO] [Thread-16954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:11:50.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:11:51.486 [DEBUG] [Thread-16954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:11:51.486 [DEBUG] [Thread-16954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:11:51.486 [DEBUG] [Thread-16954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:11:51.526 [DEBUG] [Thread-16954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:11:51.526 [DEBUG] [Thread-16954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:11:51.529 [DEBUG] [Thread-16954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:11:51.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:11:51.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:11:51.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:11:51.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:11:51.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:11:51.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:11:51.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.716032 -999.00  +22.70  28.38     28   +3.40 1 1 1 1 1   887    0 15.96 -129.34 ----- 27.3 28.4 296.4 32.3 23.9 -26.1 24.1 -25.8 24.0 -23.9 24.1 -24.9
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.716032
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:11:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:11:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:11:51.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:11:45', tmtdew=22.64, humidity=22.38, cloud=0.0, wind=30.67, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:11:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:11:51.549 [DEBUG] [Thread-16954] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:11:51.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-25T19:11:51.632 [DEBUG] [Thread-16957] [transport.py] [_log()] starting thread (client mode): 0xb6bf57b0
2025-12-25T19:11:51.632 [DEBUG] [Thread-16957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:11:51.646 [DEBUG] [Thread-16957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:11:51.646 [INFO] [Thread-16957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] client lang: <none>
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] server lang: <none>
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] kex follows: False
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] Compression: none
2025-12-25T19:11:51.654 [DEBUG] [Thread-16957] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:11:51.710 [DEBUG] [Thread-16957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:11:51.711 [DEBUG] [Thread-16957] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:11:51.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:11:51.711 [DEBUG] [Thread-16957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:11:51.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:11:51.768 [DEBUG] [Thread-16957] [transport.py] [_log()] userauth is OK
2025-12-25T19:11:51.768 [DEBUG] [Thread-16957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:11:51.768 [DEBUG] [Thread-16957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:11:51.768 [DEBUG] [Thread-16957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:11:51.768 [DEBUG] [Thread-16957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:11:51.781 [INFO] [Thread-16957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:11:51.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-25T19:11:51.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:11:52.612 [DEBUG] [Thread-16957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:11:52.612 [DEBUG] [Thread-16957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:11:52.659 [DEBUG] [Thread-16957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:11:52.660 [DEBUG] [Thread-16957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:11:52.668 [DEBUG] [Thread-16957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:11:52.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:11:52.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-25T19:11:52.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:11:52.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:11:52.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:11:52.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:11:52.699 [DEBUG] [Thread-16957] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:11:55.139 [DEBUG] [Thread-16959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:10.178 [DEBUG] [Thread-16960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:16.993 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:16.994 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:20.137 [DEBUG] [Thread-16961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:22.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:12:22.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:12:22.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-25T19:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 12, 17), 22.98, 21.95, 0.0, 35.6, 23.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:12:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:12:17
2025-12-25T19:12:23.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:12:23.711 [DEBUG] [Thread-16962] [transport.py] [_log()] starting thread (client mode): 0xb6bf5690
2025-12-25T19:12:23.711 [DEBUG] [Thread-16962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:12:23.731 [DEBUG] [Thread-16962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:12:23.731 [INFO] [Thread-16962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:12:23.734 [DEBUG] [Thread-16962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:12:23.734 [DEBUG] [Thread-16962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:12:23.734 [DEBUG] [Thread-16962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:12:23.734 [DEBUG] [Thread-16962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:23.734 [DEBUG] [Thread-16962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:23.734 [DEBUG] [Thread-16962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] client lang: <none>
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] server lang: <none>
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] kex follows: False
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] Compression: none
2025-12-25T19:12:23.735 [DEBUG] [Thread-16962] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:12:23.752 [DEBUG] [Thread-16962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:12:23.752 [DEBUG] [Thread-16962] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:12:23.753 [DEBUG] [Thread-16962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:12:23.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:12:23.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:12:23.797 [DEBUG] [Thread-16962] [transport.py] [_log()] userauth is OK
2025-12-25T19:12:23.797 [DEBUG] [Thread-16962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:12:23.797 [DEBUG] [Thread-16962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:12:23.797 [DEBUG] [Thread-16962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:12:23.797 [DEBUG] [Thread-16962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:12:23.817 [INFO] [Thread-16962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:12:23.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:12:24.493 [DEBUG] [Thread-16962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:12:24.493 [DEBUG] [Thread-16962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:12:24.494 [DEBUG] [Thread-16962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:12:24.534 [DEBUG] [Thread-16962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:12:24.534 [DEBUG] [Thread-16962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:12:24.538 [DEBUG] [Thread-16962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:12:24.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:12:24.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:12:24.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:12:24.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:12:24.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:12:24.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:12:24.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:12:24.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:12:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:12:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.716380 -999.00  +22.70  35.04     28   +3.50 1 1 2 1 1   887    0 16.53 -126.11 ----- 30.6 35.0 294.8 38.8 23.9 -26.0 23.9 -25.7 24.0 -24.3 24.1 -24.8
2025-12-25T19:12:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:12:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:12:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.716380
2025-12-25T19:12:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:12:24.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:12:24.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:12:24.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:12:24.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:12:24.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:12:17', tmtdew=22.98, humidity=21.95, cloud=0.0, wind=35.6, temperature=23.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:11:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:12:24.565 [DEBUG] [Thread-16962] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:12:24.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-25T19:12:24.657 [DEBUG] [Thread-16965] [transport.py] [_log()] starting thread (client mode): 0xb95b1060
2025-12-25T19:12:24.658 [DEBUG] [Thread-16965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:12:24.672 [DEBUG] [Thread-16965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:12:24.672 [INFO] [Thread-16965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:12:24.680 [DEBUG] [Thread-16965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] client lang: <none>
2025-12-25T19:12:24.681 [DEBUG] [Thread-16965] [transport.py] [_log()] server lang: <none>
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] kex follows: False
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] Compression: none
2025-12-25T19:12:24.682 [DEBUG] [Thread-16965] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:12:24.741 [DEBUG] [Thread-16965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:12:24.742 [DEBUG] [Thread-16965] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:12:24.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:12:24.744 [DEBUG] [Thread-16965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:12:24.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:12:24.805 [DEBUG] [Thread-16965] [transport.py] [_log()] userauth is OK
2025-12-25T19:12:24.805 [DEBUG] [Thread-16965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:12:24.805 [DEBUG] [Thread-16965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:12:24.805 [DEBUG] [Thread-16965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:12:24.805 [DEBUG] [Thread-16965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:12:24.826 [INFO] [Thread-16965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:12:24.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-25T19:12:24.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:12:25.217 [DEBUG] [Thread-16967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:25.666 [DEBUG] [Thread-16965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:12:25.666 [DEBUG] [Thread-16965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:12:25.715 [DEBUG] [Thread-16965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:12:25.715 [DEBUG] [Thread-16965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:12:25.724 [DEBUG] [Thread-16965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:12:25.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:12:25.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:12:25.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:12:25.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:12:25.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:12:25.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:12:25.759 [DEBUG] [Thread-16965] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:12:40.267 [DEBUG] [Thread-16968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:55.302 [DEBUG] [Thread-16969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:12:55.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:12:55.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:12:55.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-25T19:12:56.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 12, 49), 22.46, 22.66, 0.0, 32.85, 23.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:12:56.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:12:49
2025-12-25T19:12:56.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:12:56.781 [DEBUG] [Thread-16970] [transport.py] [_log()] starting thread (client mode): 0xb6b20040
2025-12-25T19:12:56.781 [DEBUG] [Thread-16970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:12:56.802 [DEBUG] [Thread-16970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:12:56.802 [INFO] [Thread-16970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:12:56.803 [DEBUG] [Thread-16970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] client lang: <none>
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] server lang: <none>
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] kex follows: False
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:12:56.804 [DEBUG] [Thread-16970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:12:56.805 [DEBUG] [Thread-16970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:12:56.805 [DEBUG] [Thread-16970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:12:56.805 [DEBUG] [Thread-16970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:12:56.805 [DEBUG] [Thread-16970] [transport.py] [_log()] Compression: none
2025-12-25T19:12:56.805 [DEBUG] [Thread-16970] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:12:56.817 [DEBUG] [Thread-16970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:12:56.818 [DEBUG] [Thread-16970] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:12:56.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:12:56.819 [DEBUG] [Thread-16970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:12:56.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:12:56.821 [DEBUG] [Thread-16970] [transport.py] [_log()] userauth is OK
2025-12-25T19:12:56.821 [DEBUG] [Thread-16970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:12:56.822 [DEBUG] [Thread-16970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:12:56.822 [DEBUG] [Thread-16970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:12:56.822 [DEBUG] [Thread-16970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:12:56.848 [INFO] [Thread-16970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:12:56.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:12:57.499 [DEBUG] [Thread-16970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:12:57.499 [DEBUG] [Thread-16970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:12:57.500 [DEBUG] [Thread-16970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:12:57.540 [DEBUG] [Thread-16970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:12:57.540 [DEBUG] [Thread-16970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:12:57.544 [DEBUG] [Thread-16970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:12:57.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:12:57.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:12:57.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:12:57.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:12:57.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:12:57.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:12:57.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:12:57.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:12:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:12:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.716727 -999.00  +22.70  30.03     28   +3.50 1 1 2 1 1   887    0 15.88 -133.06 ----- 35.9 30.0 297.2 39.1 23.8 -26.0 24.0 -25.8 23.9 -24.0 24.1 -25.0
2025-12-25T19:12:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:12:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:12:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.716727
2025-12-25T19:12:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:12:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:12:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:12:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:12:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:12:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:12:49', tmtdew=22.46, humidity=22.66, cloud=0.0, wind=32.85, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:12:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:12:57.572 [DEBUG] [Thread-16970] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:12:57.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-25T19:12:57.669 [DEBUG] [Thread-16973] [transport.py] [_log()] starting thread (client mode): 0xb6b238e0
2025-12-25T19:12:57.669 [DEBUG] [Thread-16973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:12:57.683 [DEBUG] [Thread-16973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:12:57.683 [INFO] [Thread-16973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:12:57.691 [DEBUG] [Thread-16973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] client lang: <none>
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] server lang: <none>
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] kex follows: False
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] Compression: none
2025-12-25T19:12:57.692 [DEBUG] [Thread-16973] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:12:57.747 [DEBUG] [Thread-16973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:12:57.748 [DEBUG] [Thread-16973] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:12:57.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:12:57.749 [DEBUG] [Thread-16973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:12:57.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:12:57.807 [DEBUG] [Thread-16973] [transport.py] [_log()] userauth is OK
2025-12-25T19:12:57.807 [DEBUG] [Thread-16973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:12:57.807 [DEBUG] [Thread-16973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:12:57.807 [DEBUG] [Thread-16973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:12:57.807 [DEBUG] [Thread-16973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:12:57.826 [INFO] [Thread-16973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:12: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-25T19:12:57.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:12:58.650 [DEBUG] [Thread-16973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:12:58.651 [DEBUG] [Thread-16973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:12:58.699 [DEBUG] [Thread-16973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:12:58.700 [DEBUG] [Thread-16973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:12:58.709 [DEBUG] [Thread-16973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:12:58.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:12:58.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-25T19:12:58.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-25T19:12:58.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:12:58.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:12:58.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:12:58.746 [DEBUG] [Thread-16973] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:13:10.336 [DEBUG] [Thread-16975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:13:17.133 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:13:17.134 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:13:20.180 [DEBUG] [Thread-16976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:13:25.371 [DEBUG] [Thread-16977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:13:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:13:28.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:13:28.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-25T19:13:29.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 13, 21), 22.41, 22.74, 0.0, 33.82, 23.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:13:29.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:13:21
2025-12-25T19:13:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:13:29.747 [DEBUG] [Thread-16978] [transport.py] [_log()] starting thread (client mode): 0xb6b7c0a0
2025-12-25T19:13:29.748 [DEBUG] [Thread-16978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:13:29.767 [DEBUG] [Thread-16978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:13:29.767 [INFO] [Thread-16978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] client lang: <none>
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] server lang: <none>
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] kex follows: False
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] Compression: none
2025-12-25T19:13:29.770 [DEBUG] [Thread-16978] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:13:29.788 [DEBUG] [Thread-16978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:13:29.789 [DEBUG] [Thread-16978] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:13:29.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:13:29.790 [DEBUG] [Thread-16978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:13:29.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:13:29.792 [DEBUG] [Thread-16978] [transport.py] [_log()] userauth is OK
2025-12-25T19:13:29.792 [DEBUG] [Thread-16978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:13:29.793 [DEBUG] [Thread-16978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:13:29.793 [DEBUG] [Thread-16978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:13:29.793 [DEBUG] [Thread-16978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:13:29.816 [INFO] [Thread-16978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:13:29.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:13:30.438 [DEBUG] [Thread-16978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:13:30.438 [DEBUG] [Thread-16978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:13:30.439 [DEBUG] [Thread-16978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:13:30.479 [DEBUG] [Thread-16978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:13:30.479 [DEBUG] [Thread-16978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:13:30.483 [DEBUG] [Thread-16978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:13:30.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:13:30.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:13:30.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:13:30.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:13:30.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:13:30.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:13:30.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:13:30.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:13:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:13:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.717074 -999.00  +22.70  31.28     28   +3.50 1 1 2 1 1   887    0 16.59 -120.37 ----- 32.5 31.3 292.2 37.3 23.8 -26.1 23.9 -25.7 23.9 -23.8 24.0 -24.9
2025-12-25T19:13:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:13:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:13:30.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.717074
2025-12-25T19:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:13:21', tmtdew=22.41, humidity=22.74, cloud=0.0, wind=33.82, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:12:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:13:30.510 [DEBUG] [Thread-16978] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:13:30.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-25T19:13:40.411 [DEBUG] [Thread-16981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:13:55.458 [DEBUG] [Thread-16982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:10.493 [DEBUG] [Thread-16983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:17.274 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:17.275 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:20.226 [DEBUG] [Thread-16984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:25.527 [DEBUG] [Thread-16985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:40.561 [DEBUG] [Thread-16986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:14:55.598 [DEBUG] [Thread-16987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:10.630 [DEBUG] [Thread-16988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:17.414 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:17.415 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:20.270 [DEBUG] [Thread-16989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:25.667 [DEBUG] [Thread-16990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:40.704 [DEBUG] [Thread-16991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:15:45.493 [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-25T19:15:55.741 [DEBUG] [Thread-16992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:10.775 [DEBUG] [Thread-16993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:15.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:16:15.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:16:15.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-25T19:16:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 16, 1), 22.37, 22.71, 0.0, 32.32, 22.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:16:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:16:01
2025-12-25T19:16:16.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:16:16.518 [DEBUG] [Thread-16994] [transport.py] [_log()] starting thread (client mode): 0xb6b7fdf0
2025-12-25T19:16:16.518 [DEBUG] [Thread-16994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:16:16.540 [DEBUG] [Thread-16994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:16:16.540 [INFO] [Thread-16994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:16:16.543 [DEBUG] [Thread-16994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] client lang: <none>
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] server lang: <none>
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] kex follows: False
2025-12-25T19:16:16.544 [DEBUG] [Thread-16994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:16:16.545 [DEBUG] [Thread-16994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:16:16.545 [DEBUG] [Thread-16994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:16:16.545 [DEBUG] [Thread-16994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:16:16.545 [DEBUG] [Thread-16994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:16:16.545 [DEBUG] [Thread-16994] [transport.py] [_log()] Compression: none
2025-12-25T19:16:16.545 [DEBUG] [Thread-16994] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:16:16.562 [DEBUG] [Thread-16994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:16:16.562 [DEBUG] [Thread-16994] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:16:16.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:16:16.563 [DEBUG] [Thread-16994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:16:16.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:16:16.566 [DEBUG] [Thread-16994] [transport.py] [_log()] userauth is OK
2025-12-25T19:16:16.566 [DEBUG] [Thread-16994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:16:16.566 [DEBUG] [Thread-16994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:16:16.566 [DEBUG] [Thread-16994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:16:16.567 [DEBUG] [Thread-16994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:16:16.603 [INFO] [Thread-16994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:16:16.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:16:17.233 [DEBUG] [Thread-16994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:16:17.234 [DEBUG] [Thread-16994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:16:17.234 [DEBUG] [Thread-16994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:16:17.275 [DEBUG] [Thread-16994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:16:17.275 [DEBUG] [Thread-16994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:16:17.278 [DEBUG] [Thread-16994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:16:17.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:16:17.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:16:17.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:16:17.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:16:17.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:16:17.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:16:17.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:16:17.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:16:17.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:16:17.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.719157 -999.00  +22.80  34.35     28   +3.60 1 1 2 1 1   887    0 16.98 -101.17 ----- 30.2 34.4 292.0 44.2 23.7 -25.9 23.8 -25.7 23.8 -24.5 23.9 -24.7
2025-12-25T19:16:17.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:16:17.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:16:17.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.719157
2025-12-25T19:16:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:16:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:16:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:16:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:16:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:16:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:16:01', tmtdew=22.37, humidity=22.71, cloud=0.0, wind=32.32, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:15:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:16:17.304 [DEBUG] [Thread-16994] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:16:17.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:16:17.398 [DEBUG] [Thread-16997] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e20
2025-12-25T19:16:17.398 [DEBUG] [Thread-16997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:16:17.412 [DEBUG] [Thread-16997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:16:17.412 [INFO] [Thread-16997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] client lang: <none>
2025-12-25T19:16:17.420 [DEBUG] [Thread-16997] [transport.py] [_log()] server lang: <none>
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] kex follows: False
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] Compression: none
2025-12-25T19:16:17.421 [DEBUG] [Thread-16997] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:16:17.476 [DEBUG] [Thread-16997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:16:17.477 [DEBUG] [Thread-16997] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:16:17.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:16:17.478 [DEBUG] [Thread-16997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:16:17.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:16:17.533 [DEBUG] [Thread-16997] [transport.py] [_log()] userauth is OK
2025-12-25T19:16:17.533 [DEBUG] [Thread-16997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:16:17.533 [DEBUG] [Thread-16997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:16:17.533 [DEBUG] [Thread-16997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:16:17.533 [DEBUG] [Thread-16997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:16:17.552 [INFO] [Thread-16997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:16:17.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-25T19:16:17.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:16:17.554 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:17.555 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:18.355 [DEBUG] [Thread-16997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:16:18.356 [DEBUG] [Thread-16997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:16:18.403 [DEBUG] [Thread-16997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:16:18.403 [DEBUG] [Thread-16997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:16:18.412 [DEBUG] [Thread-16997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:16:18.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:16:18.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-25T19:16:18.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-25T19:16:18.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:16:18.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:16:18.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:16:18.451 [DEBUG] [Thread-16997] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:16:20.314 [DEBUG] [Thread-16999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:25.807 [DEBUG] [Thread-17000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:40.850 [DEBUG] [Thread-17001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:16:48.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:16:48.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:16:48.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:16:49.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 16, 33), 22.42, 22.78, 0.0, 47.24, 23.36, 0, 0, 0, 2, 1, 0),)
2025-12-25T19:16:49.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:16:33
2025-12-25T19:16:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:16:49.467 [DEBUG] [Thread-17002] [transport.py] [_log()] starting thread (client mode): 0xb6bb7fa0
2025-12-25T19:16:49.467 [DEBUG] [Thread-17002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:16:49.487 [DEBUG] [Thread-17002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:16:49.487 [INFO] [Thread-17002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:16:49.490 [DEBUG] [Thread-17002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] client lang: <none>
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] server lang: <none>
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] kex follows: False
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:16:49.491 [DEBUG] [Thread-17002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:16:49.492 [DEBUG] [Thread-17002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:16:49.492 [DEBUG] [Thread-17002] [transport.py] [_log()] Compression: none
2025-12-25T19:16:49.492 [DEBUG] [Thread-17002] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:16:49.508 [DEBUG] [Thread-17002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:16:49.508 [DEBUG] [Thread-17002] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:16:49.509 [DEBUG] [Thread-17002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:16:49.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:16:49.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:16:49.553 [DEBUG] [Thread-17002] [transport.py] [_log()] userauth is OK
2025-12-25T19:16:49.553 [DEBUG] [Thread-17002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:16:49.554 [DEBUG] [Thread-17002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:16:49.554 [DEBUG] [Thread-17002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:16:49.554 [DEBUG] [Thread-17002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:16:49.575 [INFO] [Thread-17002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:16:49.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:16:50.187 [DEBUG] [Thread-17002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:16:50.188 [DEBUG] [Thread-17002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:16:50.188 [DEBUG] [Thread-17002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:16:50.229 [DEBUG] [Thread-17002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:16:50.229 [DEBUG] [Thread-17002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:16:50.232 [DEBUG] [Thread-17002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:16:50.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:16:50.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:16:50.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:16:50.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:16:50.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:16:50.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:16:50.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:16:50.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:16:50.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:16:50.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.719505 -999.00  +22.80  28.30     28   +3.50 1 1 1 1 1   887    0 16.77 -99.12 ----- 23.9 28.3 287.6 32.8 23.7 -26.1 23.9 -25.7 23.8 -23.7 23.9 -24.8
2025-12-25T19:16:50.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:16:50.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:16:50.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.719505
2025-12-25T19:16:50.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:16:50.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:16:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:16:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:16:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:16:50.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:16:33', tmtdew=22.42, humidity=22.78, cloud=0.0, wind=47.24, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:16:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:16:50.258 [DEBUG] [Thread-17002] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:16:50.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-25T19:16:50.360 [DEBUG] [Thread-17005] [transport.py] [_log()] starting thread (client mode): 0xb6bf7f40
2025-12-25T19:16:50.360 [DEBUG] [Thread-17005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:16:50.374 [DEBUG] [Thread-17005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:16:50.374 [INFO] [Thread-17005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:16:50.382 [DEBUG] [Thread-17005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:16:50.382 [DEBUG] [Thread-17005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:16:50.382 [DEBUG] [Thread-17005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] client lang: <none>
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] server lang: <none>
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] kex follows: False
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:16:50.383 [DEBUG] [Thread-17005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:16:50.384 [DEBUG] [Thread-17005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:16:50.384 [DEBUG] [Thread-17005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:16:50.384 [DEBUG] [Thread-17005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:16:50.384 [DEBUG] [Thread-17005] [transport.py] [_log()] Compression: none
2025-12-25T19:16:50.384 [DEBUG] [Thread-17005] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:16:50.444 [DEBUG] [Thread-17005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:16:50.444 [DEBUG] [Thread-17005] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:16:50.444 [DEBUG] [Thread-17005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:16:50.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:16:50.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:16:50.501 [DEBUG] [Thread-17005] [transport.py] [_log()] userauth is OK
2025-12-25T19:16:50.501 [DEBUG] [Thread-17005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:16:50.501 [DEBUG] [Thread-17005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:16:50.502 [DEBUG] [Thread-17005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:16:50.502 [DEBUG] [Thread-17005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:16:50.521 [INFO] [Thread-17005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:16:50.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-25T19:16:50.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:16:51.400 [DEBUG] [Thread-17005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:16:51.400 [DEBUG] [Thread-17005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:16:51.448 [DEBUG] [Thread-17005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:16:51.449 [DEBUG] [Thread-17005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:16:51.458 [DEBUG] [Thread-17005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:16:51.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:16:51.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:16:51.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:16:51.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:16:51.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:16:51.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:16:51.494 [DEBUG] [Thread-17005] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:16:55.887 [DEBUG] [Thread-17007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:10.930 [DEBUG] [Thread-17008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:17.693 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:17.694 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:20.357 [DEBUG] [Thread-17009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:21.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:17:21.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:17:21.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-25T19:17:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 17, 5), 22.19, 22.99, 0.0, 38.25, 22.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:17:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:17:05
2025-12-25T19:17:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:17:22.458 [DEBUG] [Thread-17010] [transport.py] [_log()] starting thread (client mode): 0xb6bb5ff0
2025-12-25T19:17:22.458 [DEBUG] [Thread-17010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:17:22.479 [DEBUG] [Thread-17010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:17:22.479 [INFO] [Thread-17010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] client lang: <none>
2025-12-25T19:17:22.483 [DEBUG] [Thread-17010] [transport.py] [_log()] server lang: <none>
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] kex follows: False
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] Compression: none
2025-12-25T19:17:22.484 [DEBUG] [Thread-17010] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:17:22.501 [DEBUG] [Thread-17010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:17:22.501 [DEBUG] [Thread-17010] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:17:22.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:17:22.502 [DEBUG] [Thread-17010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:17:22.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:17:22.504 [DEBUG] [Thread-17010] [transport.py] [_log()] userauth is OK
2025-12-25T19:17:22.504 [DEBUG] [Thread-17010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:17:22.504 [DEBUG] [Thread-17010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:17:22.504 [DEBUG] [Thread-17010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:17:22.504 [DEBUG] [Thread-17010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:17:22.522 [INFO] [Thread-17010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:17:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:17:23.142 [DEBUG] [Thread-17010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:17:23.142 [DEBUG] [Thread-17010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:17:23.142 [DEBUG] [Thread-17010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:17:23.183 [DEBUG] [Thread-17010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:17:23.183 [DEBUG] [Thread-17010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:17:23.187 [DEBUG] [Thread-17010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:17:23.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:17:23.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:17:23.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:17:23.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:17:23.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:17:23.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:17:23.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:17:23.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:17:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.719852 -999.00  +22.80  32.38     28   +3.50 1 1 2 1 1   887    0 16.57 -99.03 ----- 31.1 32.4 292.8 36.1 23.7 -26.3 23.8 -25.6 23.7 -24.0 23.9 -25.0
2025-12-25T19:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.719852
2025-12-25T19:17:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:17:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:17:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:17:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:17:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:17:23.215 [DEBUG] [Thread-17010] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:17:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:17:05', tmtdew=22.19, humidity=22.99, cloud=0.0, wind=38.25, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:16:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:17:23.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-25T19:17:23.309 [DEBUG] [Thread-17013] [transport.py] [_log()] starting thread (client mode): 0xb6b20c40
2025-12-25T19:17:23.309 [DEBUG] [Thread-17013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:17:23.324 [DEBUG] [Thread-17013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:17:23.324 [INFO] [Thread-17013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:17:23.331 [DEBUG] [Thread-17013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:17:23.331 [DEBUG] [Thread-17013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:17:23.331 [DEBUG] [Thread-17013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:17:23.331 [DEBUG] [Thread-17013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] client lang: <none>
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] server lang: <none>
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] kex follows: False
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:17:23.332 [DEBUG] [Thread-17013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:17:23.333 [DEBUG] [Thread-17013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:17:23.333 [DEBUG] [Thread-17013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:17:23.333 [DEBUG] [Thread-17013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:17:23.333 [DEBUG] [Thread-17013] [transport.py] [_log()] Compression: none
2025-12-25T19:17:23.333 [DEBUG] [Thread-17013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:17:23.388 [DEBUG] [Thread-17013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:17:23.389 [DEBUG] [Thread-17013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:17:23.390 [DEBUG] [Thread-17013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:17:23.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:17:23.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:17:23.444 [DEBUG] [Thread-17013] [transport.py] [_log()] userauth is OK
2025-12-25T19:17:23.444 [DEBUG] [Thread-17013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:17:23.444 [DEBUG] [Thread-17013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:17:23.445 [DEBUG] [Thread-17013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:17:23.445 [DEBUG] [Thread-17013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:17:23.463 [INFO] [Thread-17013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:17:23.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-25T19:17:23.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:17:24.300 [DEBUG] [Thread-17013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:17:24.301 [DEBUG] [Thread-17013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:17:24.350 [DEBUG] [Thread-17013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:17:24.351 [DEBUG] [Thread-17013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:17:24.362 [DEBUG] [Thread-17013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:17:24.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:17:24.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:17:24.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-25T19:17:24.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:17:24.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:17:24.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:17:24.397 [DEBUG] [Thread-17013] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:17:25.966 [DEBUG] [Thread-17015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:41.015 [DEBUG] [Thread-17016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:54.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:17:54.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:17:54.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-25T19:17:55.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 17, 37), 22.15, 23.04, 0.0, 33.38, 22.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:17:55.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:17:37
2025-12-25T19:17:55.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:17:55.375 [DEBUG] [Thread-17017] [transport.py] [_log()] starting thread (client mode): 0xb95b3bb0
2025-12-25T19:17:55.375 [DEBUG] [Thread-17017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:17:55.396 [DEBUG] [Thread-17017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:17:55.397 [INFO] [Thread-17017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] client lang: <none>
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] server lang: <none>
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] kex follows: False
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:17:55.400 [DEBUG] [Thread-17017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:17:55.401 [DEBUG] [Thread-17017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:17:55.401 [DEBUG] [Thread-17017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:17:55.401 [DEBUG] [Thread-17017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:17:55.401 [DEBUG] [Thread-17017] [transport.py] [_log()] Compression: none
2025-12-25T19:17:55.401 [DEBUG] [Thread-17017] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:17:55.419 [DEBUG] [Thread-17017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:17:55.419 [DEBUG] [Thread-17017] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:17:55.420 [DEBUG] [Thread-17017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:17:55.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:17:55.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:17:55.422 [DEBUG] [Thread-17017] [transport.py] [_log()] userauth is OK
2025-12-25T19:17:55.422 [DEBUG] [Thread-17017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:17:55.422 [DEBUG] [Thread-17017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:17:55.422 [DEBUG] [Thread-17017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:17:55.423 [DEBUG] [Thread-17017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:17:55.450 [INFO] [Thread-17017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:17:55.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:17:56.047 [DEBUG] [Thread-17019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:17:56.103 [DEBUG] [Thread-17017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:17:56.103 [DEBUG] [Thread-17017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:17:56.104 [DEBUG] [Thread-17017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:17:56.144 [DEBUG] [Thread-17017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:17:56.144 [DEBUG] [Thread-17017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:17:56.147 [DEBUG] [Thread-17017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:17:56.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:17:56.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:17:56.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:17:56.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:17:56.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:17:56.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:17:56.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:17:56.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:17:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:17:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.720199 -999.00  +22.70  27.53     28   +3.60 1 1 1 1 1   887    0 17.35 -91.53 ----- 32.2 27.5 302.0 46.7 23.7 -26.2 23.8 -25.7 23.7 -24.2 23.9 -25.1
2025-12-25T19:17:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:17:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:17:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.720199
2025-12-25T19:17:56.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:17:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:17:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:17:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:17:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:17:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:17:37', tmtdew=22.15, humidity=23.04, cloud=0.0, wind=33.38, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:17:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:17:56.176 [DEBUG] [Thread-17017] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:17:56.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-25T19:17:56.269 [DEBUG] [Thread-17021] [transport.py] [_log()] starting thread (client mode): 0xb6b00e80
2025-12-25T19:17:56.269 [DEBUG] [Thread-17021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:17:56.285 [DEBUG] [Thread-17021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:17:56.285 [INFO] [Thread-17021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:17:56.293 [DEBUG] [Thread-17021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:17:56.293 [DEBUG] [Thread-17021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:17:56.293 [DEBUG] [Thread-17021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:17:56.293 [DEBUG] [Thread-17021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:56.293 [DEBUG] [Thread-17021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] client lang: <none>
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] server lang: <none>
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] kex follows: False
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] Compression: none
2025-12-25T19:17:56.294 [DEBUG] [Thread-17021] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:17:56.352 [DEBUG] [Thread-17021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:17:56.352 [DEBUG] [Thread-17021] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:17:56.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:17:56.353 [DEBUG] [Thread-17021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:17:56.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:17:56.408 [DEBUG] [Thread-17021] [transport.py] [_log()] userauth is OK
2025-12-25T19:17:56.408 [DEBUG] [Thread-17021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:17:56.408 [DEBUG] [Thread-17021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:17:56.408 [DEBUG] [Thread-17021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:17:56.408 [DEBUG] [Thread-17021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:17:56.433 [INFO] [Thread-17021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:17:56.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-25T19:17:56.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:17:57.272 [DEBUG] [Thread-17021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:17:57.273 [DEBUG] [Thread-17021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:17:57.321 [DEBUG] [Thread-17021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:17:57.322 [DEBUG] [Thread-17021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:17:57.331 [DEBUG] [Thread-17021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:17:57.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:17:57.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:17:57.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:17:57.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:17:57.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:17:57.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:17:57.367 [DEBUG] [Thread-17021] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:18:11.085 [DEBUG] [Thread-17023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:18:17.834 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:18:17.835 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:18:20.385 [DEBUG] [Thread-17024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:18:26.128 [DEBUG] [Thread-17025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:18:27.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:18:27.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:18:27.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-25T19:18:28.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 18, 9), 22.07, 23.17, 0.0, 32.32, 22.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:18:28.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:18:09
2025-12-25T19:18:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:18:28.340 [DEBUG] [Thread-17026] [transport.py] [_log()] starting thread (client mode): 0xb6bb7bb0
2025-12-25T19:18:28.341 [DEBUG] [Thread-17026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:18:28.361 [DEBUG] [Thread-17026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:18:28.361 [INFO] [Thread-17026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:18:28.365 [DEBUG] [Thread-17026] [transport.py] [_log()] client lang: <none>
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] server lang: <none>
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] kex follows: False
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] Compression: none
2025-12-25T19:18:28.366 [DEBUG] [Thread-17026] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:18:28.383 [DEBUG] [Thread-17026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:18:28.384 [DEBUG] [Thread-17026] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:18:28.384 [DEBUG] [Thread-17026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:18:28.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:18:28.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:18:28.386 [DEBUG] [Thread-17026] [transport.py] [_log()] userauth is OK
2025-12-25T19:18:28.387 [DEBUG] [Thread-17026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:18:28.387 [DEBUG] [Thread-17026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:18:28.387 [DEBUG] [Thread-17026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:18:28.387 [DEBUG] [Thread-17026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:18:28.410 [INFO] [Thread-17026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:18:28.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:18:29.133 [DEBUG] [Thread-17026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:18:29.133 [DEBUG] [Thread-17026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:18:29.134 [DEBUG] [Thread-17026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:18:29.174 [DEBUG] [Thread-17026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:18:29.174 [DEBUG] [Thread-17026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:18:29.178 [DEBUG] [Thread-17026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:18:29.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:18:29.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:18:29.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:18:29.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:18:29.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:18:29.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:18:29.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:18:29.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:18:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:18:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.720546 -999.00  +22.60  39.59     28   +3.60 1 1 2 1 1   887    0 16.68 -84.82 ----- 34.9 39.6 309.0 45.5 23.6 -26.3 23.7 -25.9 23.6 -24.0 23.9 -25.1
2025-12-25T19:18:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:18:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:18:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.720546
2025-12-25T19:18:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:18:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:18:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:18:29.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:18:29.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:18:29.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:18:09', tmtdew=22.07, humidity=23.17, cloud=0.0, wind=32.32, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:17:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:18:29.206 [DEBUG] [Thread-17026] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:18:29.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-25T19:18:29.307 [DEBUG] [Thread-17029] [transport.py] [_log()] starting thread (client mode): 0xb6bb7940
2025-12-25T19:18:29.307 [DEBUG] [Thread-17029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:18:29.321 [DEBUG] [Thread-17029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:18:29.322 [INFO] [Thread-17029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] client lang: <none>
2025-12-25T19:18:29.329 [DEBUG] [Thread-17029] [transport.py] [_log()] server lang: <none>
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] kex follows: False
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] Compression: none
2025-12-25T19:18:29.330 [DEBUG] [Thread-17029] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:18:29.391 [DEBUG] [Thread-17029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:18:29.392 [DEBUG] [Thread-17029] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:18:29.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:18:29.402 [DEBUG] [Thread-17029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:18:29.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:18:29.447 [DEBUG] [Thread-17029] [transport.py] [_log()] userauth is OK
2025-12-25T19:18:29.448 [DEBUG] [Thread-17029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:18:29.448 [DEBUG] [Thread-17029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:18:29.448 [DEBUG] [Thread-17029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:18:29.448 [DEBUG] [Thread-17029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:18:29.467 [INFO] [Thread-17029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:18:29.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-25T19:18:29.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:18:30.360 [DEBUG] [Thread-17029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:18:30.360 [DEBUG] [Thread-17029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:18:30.408 [DEBUG] [Thread-17029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:18:30.408 [DEBUG] [Thread-17029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:18:30.418 [DEBUG] [Thread-17029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:18:30.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:18:30.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-25T19:18:30.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-25T19:18:30.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:18:30.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:18:30.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:18:30.454 [DEBUG] [Thread-17029] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:18:41.167 [DEBUG] [Thread-17031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:18:56.216 [DEBUG] [Thread-17032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:19:00.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:19:00.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-25T19:19:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 18, 42), 21.98, 23.15, 0.0, 35.8, 22.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:19:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:18:42
2025-12-25T19:19:01.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:19:01.498 [DEBUG] [Thread-17033] [transport.py] [_log()] starting thread (client mode): 0xb95b2ce0
2025-12-25T19:19:01.499 [DEBUG] [Thread-17033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:19:01.520 [DEBUG] [Thread-17033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:19:01.520 [INFO] [Thread-17033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] client lang: <none>
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] server lang: <none>
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] kex follows: False
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:19:01.523 [DEBUG] [Thread-17033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:19:01.524 [DEBUG] [Thread-17033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:19:01.524 [DEBUG] [Thread-17033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:19:01.524 [DEBUG] [Thread-17033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:19:01.524 [DEBUG] [Thread-17033] [transport.py] [_log()] Compression: none
2025-12-25T19:19:01.524 [DEBUG] [Thread-17033] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:19:01.540 [DEBUG] [Thread-17033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:19:01.540 [DEBUG] [Thread-17033] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:19:01.540 [DEBUG] [Thread-17033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:19:01.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:19:01.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:19:01.541 [DEBUG] [Thread-17033] [transport.py] [_log()] userauth is OK
2025-12-25T19:19:01.541 [DEBUG] [Thread-17033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:19:01.541 [DEBUG] [Thread-17033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:19:01.541 [DEBUG] [Thread-17033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:19:01.541 [DEBUG] [Thread-17033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:19:01.556 [INFO] [Thread-17033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:19:01.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:19:02.174 [DEBUG] [Thread-17033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:19:02.174 [DEBUG] [Thread-17033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:19:02.175 [DEBUG] [Thread-17033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:19:02.215 [DEBUG] [Thread-17033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:19:02.215 [DEBUG] [Thread-17033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:19:02.219 [DEBUG] [Thread-17033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:19:02.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:19:02.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:19:02.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:19:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:19:02.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:19:02.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:19:02.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:19:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:19:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:19:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.720893 -999.00  +22.60  31.16     28   +3.60 1 1 2 1 1   887    0 17.31 -85.69 ----- 31.6 31.2 301.0 43.3 23.6 -26.3 23.7 -25.7 23.6 -24.6 23.8 -25.0
2025-12-25T19:19:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:19:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:19:02.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.720893
2025-12-25T19:19:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:19:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:19:02.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:19:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:19:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:19:02.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:18:42', tmtdew=21.98, humidity=23.15, cloud=0.0, wind=35.8, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:18:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:19:02.248 [DEBUG] [Thread-17033] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:19:02.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-25T19:19:02.356 [DEBUG] [Thread-17036] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-25T19:19:02.357 [DEBUG] [Thread-17036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:19:02.371 [DEBUG] [Thread-17036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:19:02.371 [INFO] [Thread-17036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:19:02.378 [DEBUG] [Thread-17036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] client lang: <none>
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] server lang: <none>
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] kex follows: False
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] Compression: none
2025-12-25T19:19:02.379 [DEBUG] [Thread-17036] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:19:02.438 [DEBUG] [Thread-17036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:19:02.438 [DEBUG] [Thread-17036] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:19:02.438 [DEBUG] [Thread-17036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:19:02.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:19:02.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:19:02.495 [DEBUG] [Thread-17036] [transport.py] [_log()] userauth is OK
2025-12-25T19:19:02.496 [DEBUG] [Thread-17036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:19:02.496 [DEBUG] [Thread-17036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:19:02.496 [DEBUG] [Thread-17036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:19:02.496 [DEBUG] [Thread-17036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:19:02.515 [INFO] [Thread-17036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:19:02.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:19:02.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:19:03.350 [DEBUG] [Thread-17036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:19:03.350 [DEBUG] [Thread-17036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:19:03.398 [DEBUG] [Thread-17036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:19:03.398 [DEBUG] [Thread-17036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:19:03.407 [DEBUG] [Thread-17036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:19:03.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:19:03.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-25T19:19:03.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-25T19:19:03.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:19:03.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:19:03.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:19:03.442 [DEBUG] [Thread-17036] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:19:11.247 [DEBUG] [Thread-17038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:17.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:17.976 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:20.440 [DEBUG] [Thread-17039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:26.300 [DEBUG] [Thread-17040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:19:33.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:19:33.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-25T19:19:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 19, 14), 21.92, 23.24, 0.0, 34.3, 22.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:19:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:19:14
2025-12-25T19:19:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:19:34.436 [DEBUG] [Thread-17041] [transport.py] [_log()] starting thread (client mode): 0xb6b03400
2025-12-25T19:19:34.436 [DEBUG] [Thread-17041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:19:34.455 [DEBUG] [Thread-17041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:19:34.455 [INFO] [Thread-17041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] client lang: <none>
2025-12-25T19:19:34.458 [DEBUG] [Thread-17041] [transport.py] [_log()] server lang: <none>
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] kex follows: False
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] Compression: none
2025-12-25T19:19:34.459 [DEBUG] [Thread-17041] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:19:34.475 [DEBUG] [Thread-17041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:19:34.475 [DEBUG] [Thread-17041] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:19:34.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:19:34.476 [DEBUG] [Thread-17041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:19:34.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:19:34.476 [DEBUG] [Thread-17041] [transport.py] [_log()] userauth is OK
2025-12-25T19:19:34.476 [DEBUG] [Thread-17041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:19:34.476 [DEBUG] [Thread-17041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:19:34.476 [DEBUG] [Thread-17041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:19:34.476 [DEBUG] [Thread-17041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:19:34.492 [INFO] [Thread-17041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:19:34.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:19:35.211 [DEBUG] [Thread-17041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:19:35.211 [DEBUG] [Thread-17041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:19:35.211 [DEBUG] [Thread-17041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:19:35.252 [DEBUG] [Thread-17041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:19:35.252 [DEBUG] [Thread-17041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:19:35.254 [DEBUG] [Thread-17041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:19:35.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:19:35.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:19:35.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:19:35.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:19:35.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:19:35.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:19:35.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.721241 -999.00  +22.60  27.75     29   +3.70 1 1 1 1 1   887    0 17.40 -81.76 ----- 27.6 27.8 302.6 37.3 23.5 -26.0 23.7 -25.6 23.5 -24.1 23.8 -25.0
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.721241
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:19:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:19:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:19:14', tmtdew=21.92, humidity=23.24, cloud=0.0, wind=34.3, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:18:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:19:35.275 [DEBUG] [Thread-17041] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:19:35.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-25T19:19:35.359 [DEBUG] [Thread-17044] [transport.py] [_log()] starting thread (client mode): 0xb6b02c80
2025-12-25T19:19:35.359 [DEBUG] [Thread-17044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:19:35.374 [DEBUG] [Thread-17044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:19:35.374 [INFO] [Thread-17044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] client lang: <none>
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] server lang: <none>
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] kex follows: False
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:19:35.382 [DEBUG] [Thread-17044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:19:35.383 [DEBUG] [Thread-17044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:19:35.383 [DEBUG] [Thread-17044] [transport.py] [_log()] Compression: none
2025-12-25T19:19:35.383 [DEBUG] [Thread-17044] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:19:35.438 [DEBUG] [Thread-17044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:19:35.438 [DEBUG] [Thread-17044] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:19:35.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:19:35.438 [DEBUG] [Thread-17044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:19:35.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:19:35.494 [DEBUG] [Thread-17044] [transport.py] [_log()] userauth is OK
2025-12-25T19:19:35.495 [DEBUG] [Thread-17044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:19:35.495 [DEBUG] [Thread-17044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:19:35.495 [DEBUG] [Thread-17044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:19:35.495 [DEBUG] [Thread-17044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:19:35.510 [INFO] [Thread-17044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:19:35.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-25T19:19:35.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:19:36.343 [DEBUG] [Thread-17044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:19:36.343 [DEBUG] [Thread-17044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:19:36.390 [DEBUG] [Thread-17044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:19:36.390 [DEBUG] [Thread-17044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:19:36.399 [DEBUG] [Thread-17044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:19:36.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:19:36.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-25T19:19:36.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-25T19:19:36.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:19:36.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:19:36.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:19:36.430 [DEBUG] [Thread-17044] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:19:41.337 [DEBUG] [Thread-17046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:19:56.394 [DEBUG] [Thread-17047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:20:06.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:20:06.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-25T19:20:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 19, 46), 21.87, 23.75, 0.0, 32.78, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:20:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:19:46
2025-12-25T19:20:07.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:20:07.446 [DEBUG] [Thread-17048] [transport.py] [_log()] starting thread (client mode): 0xb95b30d0
2025-12-25T19:20:07.446 [DEBUG] [Thread-17048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:20:07.467 [DEBUG] [Thread-17048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:20:07.467 [INFO] [Thread-17048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:07.471 [DEBUG] [Thread-17048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] client lang: <none>
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] server lang: <none>
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] kex follows: False
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:20:07.472 [DEBUG] [Thread-17048] [transport.py] [_log()] Compression: none
2025-12-25T19:20:07.473 [DEBUG] [Thread-17048] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:20:07.490 [DEBUG] [Thread-17048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:20:07.491 [DEBUG] [Thread-17048] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:20:07.492 [DEBUG] [Thread-17048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:20:07.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:20:07.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:20:07.494 [DEBUG] [Thread-17048] [transport.py] [_log()] userauth is OK
2025-12-25T19:20:07.494 [DEBUG] [Thread-17048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:20:07.494 [DEBUG] [Thread-17048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:20:07.494 [DEBUG] [Thread-17048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:20:07.494 [DEBUG] [Thread-17048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:20:07.519 [INFO] [Thread-17048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:20:07.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:20:08.471 [DEBUG] [Thread-17048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:20:08.471 [DEBUG] [Thread-17048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:20:08.472 [DEBUG] [Thread-17048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:20:08.512 [DEBUG] [Thread-17048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:20:08.512 [DEBUG] [Thread-17048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:20:08.516 [DEBUG] [Thread-17048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:20:08.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:20:08.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:20:08.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:20:08.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:20:08.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:20:08.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:20:08.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:20:08.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:20:08.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:20:08.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.721588 -999.00  +22.50  29.79     29   +3.70 1 1 1 1 1   887    0 17.22 -78.64 ----- 29.2 29.8 308.4 37.0 23.5 -26.0 23.6 -25.7 23.5 -24.2 23.7 -24.9
2025-12-25T19:20:08.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:20:08.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:20:08.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.721588
2025-12-25T19:20:08.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:20:08.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:20:08.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:20:08.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:20:08.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:20:08.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:19:46', tmtdew=21.87, humidity=23.75, cloud=0.0, wind=32.78, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:19:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:20:08.547 [DEBUG] [Thread-17048] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:20:08.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-25T19:20:08.646 [DEBUG] [Thread-17051] [transport.py] [_log()] starting thread (client mode): 0xb6bb6770
2025-12-25T19:20:08.646 [DEBUG] [Thread-17051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:20:08.661 [DEBUG] [Thread-17051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:20:08.661 [INFO] [Thread-17051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:20:08.668 [DEBUG] [Thread-17051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:20:08.668 [DEBUG] [Thread-17051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] client lang: <none>
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] server lang: <none>
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] kex follows: False
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] Compression: none
2025-12-25T19:20:08.669 [DEBUG] [Thread-17051] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:20:08.727 [DEBUG] [Thread-17051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:20:08.727 [DEBUG] [Thread-17051] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:20:08.728 [DEBUG] [Thread-17051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:20:08.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:20:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:20:08.783 [DEBUG] [Thread-17051] [transport.py] [_log()] userauth is OK
2025-12-25T19:20:08.783 [DEBUG] [Thread-17051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:20:08.784 [DEBUG] [Thread-17051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:20:08.784 [DEBUG] [Thread-17051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:20:08.784 [DEBUG] [Thread-17051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:20:08.802 [INFO] [Thread-17051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:20:08.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-25T19:20:08.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:20:09.603 [DEBUG] [Thread-17051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:20:09.603 [DEBUG] [Thread-17051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:20:09.651 [DEBUG] [Thread-17051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:20:09.651 [DEBUG] [Thread-17051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:20:09.660 [DEBUG] [Thread-17051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:20:09.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:20: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')
2025-12-25T19:20:09.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:20:09.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:20:09.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:20:09.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:20:09.697 [DEBUG] [Thread-17051] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:20:11.433 [DEBUG] [Thread-17053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:18.115 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:18.116 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:20.471 [DEBUG] [Thread-17054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:26.482 [DEBUG] [Thread-17055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:39.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:20:39.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:20:39.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-25T19:20:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 20, 18), 21.9, 23.7, 0.0, 31.99, 22.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:20:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:20:18
2025-12-25T19:20:40.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:20:40.672 [DEBUG] [Thread-17056] [transport.py] [_log()] starting thread (client mode): 0xb6bb5d80
2025-12-25T19:20:40.672 [DEBUG] [Thread-17056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:20:40.693 [DEBUG] [Thread-17056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:20:40.693 [INFO] [Thread-17056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] client lang: <none>
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] server lang: <none>
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] kex follows: False
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] Compression: none
2025-12-25T19:20:40.694 [DEBUG] [Thread-17056] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:20:40.704 [DEBUG] [Thread-17056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:20:40.704 [DEBUG] [Thread-17056] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:20:40.705 [DEBUG] [Thread-17056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:20:40.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:20:40.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:20:40.707 [DEBUG] [Thread-17056] [transport.py] [_log()] userauth is OK
2025-12-25T19:20:40.707 [DEBUG] [Thread-17056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:20:40.707 [DEBUG] [Thread-17056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:20:40.707 [DEBUG] [Thread-17056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:20:40.707 [DEBUG] [Thread-17056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:20:40.724 [INFO] [Thread-17056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:20:40.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:20:41.408 [DEBUG] [Thread-17056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:20:41.409 [DEBUG] [Thread-17056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:20:41.409 [DEBUG] [Thread-17056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:20:41.449 [DEBUG] [Thread-17056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:20:41.449 [DEBUG] [Thread-17056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:20:41.452 [DEBUG] [Thread-17056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:20:41.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:20:41.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:20:41.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:20:41.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:20:41.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:20:41.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:20:41.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:20:41.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:20:41.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:20:41.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.722282 -999.00  +22.50  21.44     29   +3.80 1 1 1 1 1   887    0 17.03 -79.81 ----- 29.5 21.4 290.0 33.3 23.5 -26.1 23.6 -25.7 23.5 -23.9 23.6 -25.0
2025-12-25T19:20:41.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:20:41.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:20:41.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.722282
2025-12-25T19:20:41.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:20:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:20:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:20:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:20:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:20:41.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:20:18', tmtdew=21.9, humidity=23.7, cloud=0.0, wind=31.99, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:20:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:20:41.482 [DEBUG] [Thread-17056] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:20:41.520 [DEBUG] [Thread-17059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:20:41.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:20:41.581 [DEBUG] [Thread-17060] [transport.py] [_log()] starting thread (client mode): 0xb95b0f40
2025-12-25T19:20:41.581 [DEBUG] [Thread-17060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:20:41.598 [DEBUG] [Thread-17060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:20:41.598 [INFO] [Thread-17060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:20:41.610 [DEBUG] [Thread-17060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:20:41.611 [DEBUG] [Thread-17060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:20:41.611 [DEBUG] [Thread-17060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:20:41.611 [DEBUG] [Thread-17060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:41.611 [DEBUG] [Thread-17060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:20:41.611 [DEBUG] [Thread-17060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:41.611 [DEBUG] [Thread-17060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] client lang: <none>
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] server lang: <none>
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] kex follows: False
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:20:41.612 [DEBUG] [Thread-17060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:20:41.613 [DEBUG] [Thread-17060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:20:41.613 [DEBUG] [Thread-17060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:20:41.613 [DEBUG] [Thread-17060] [transport.py] [_log()] Compression: none
2025-12-25T19:20:41.613 [DEBUG] [Thread-17060] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:20:41.667 [DEBUG] [Thread-17060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:20:41.668 [DEBUG] [Thread-17060] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:20:41.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:20:41.669 [DEBUG] [Thread-17060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:20:41.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:20:41.723 [DEBUG] [Thread-17060] [transport.py] [_log()] userauth is OK
2025-12-25T19:20:41.723 [DEBUG] [Thread-17060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:20:41.723 [DEBUG] [Thread-17060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:20:41.723 [DEBUG] [Thread-17060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:20:41.723 [DEBUG] [Thread-17060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:20:41.742 [INFO] [Thread-17060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:20:41.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-25T19:20:41.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:20:42.555 [DEBUG] [Thread-17060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:20:42.555 [DEBUG] [Thread-17060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:20:42.603 [DEBUG] [Thread-17060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:20:42.603 [DEBUG] [Thread-17060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:20:42.612 [DEBUG] [Thread-17060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:20:42.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:20: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-25T19:20:42.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-25T19:20:42.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:20:42.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:20:42.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:20:42.651 [DEBUG] [Thread-17060] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:20:56.558 [DEBUG] [Thread-17062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:11.591 [DEBUG] [Thread-17063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:12.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:21:12.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:21:12.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:21:13.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 20, 50), 21.72, 23.75, 0.0, 30.68, 22.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:21:13.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:20:50
2025-12-25T19:21:13.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:21:13.647 [DEBUG] [Thread-17064] [transport.py] [_log()] starting thread (client mode): 0xb6bf6290
2025-12-25T19:21:13.647 [DEBUG] [Thread-17064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:21:13.668 [DEBUG] [Thread-17064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:21:13.668 [INFO] [Thread-17064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] client lang: <none>
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] server lang: <none>
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] kex follows: False
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] Compression: none
2025-12-25T19:21:13.671 [DEBUG] [Thread-17064] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:21:13.689 [DEBUG] [Thread-17064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:21:13.690 [DEBUG] [Thread-17064] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:21:13.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:21:13.691 [DEBUG] [Thread-17064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:21:13.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:21:13.733 [DEBUG] [Thread-17064] [transport.py] [_log()] userauth is OK
2025-12-25T19:21:13.733 [DEBUG] [Thread-17064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:21:13.733 [DEBUG] [Thread-17064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:21:13.733 [DEBUG] [Thread-17064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:21:13.734 [DEBUG] [Thread-17064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:21:13.766 [INFO] [Thread-17064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:21:13.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:21:14.431 [DEBUG] [Thread-17064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:21:14.432 [DEBUG] [Thread-17064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:21:14.432 [DEBUG] [Thread-17064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:21:14.472 [DEBUG] [Thread-17064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:21:14.472 [DEBUG] [Thread-17064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:21:14.475 [DEBUG] [Thread-17064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:21:14.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:21:14.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:21:14.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:21:14.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:21:14.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:21:14.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:21:14.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:21:14.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:21:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:21:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.722630 -999.00  +22.60  28.87     29   +3.80 1 1 1 1 1   887    0 17.30 -77.72 ----- 32.3 28.9 300.4 36.1 23.5 -26.0 23.6 -25.9 23.4 -24.1 23.6 -24.9
2025-12-25T19:21:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:21:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:21:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.722630
2025-12-25T19:21:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:21:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:21:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:21:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:21:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:21:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:20:50', tmtdew=21.72, humidity=23.75, cloud=0.0, wind=30.68, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:20:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:21:14.502 [DEBUG] [Thread-17064] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:21:14.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-25T19:21:14.594 [DEBUG] [Thread-17067] [transport.py] [_log()] starting thread (client mode): 0xb6bc3dc0
2025-12-25T19:21:14.595 [DEBUG] [Thread-17067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:21:14.610 [DEBUG] [Thread-17067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:21:14.610 [INFO] [Thread-17067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:21:14.617 [DEBUG] [Thread-17067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:21:14.617 [DEBUG] [Thread-17067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:21:14.617 [DEBUG] [Thread-17067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:21:14.617 [DEBUG] [Thread-17067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:14.617 [DEBUG] [Thread-17067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:14.617 [DEBUG] [Thread-17067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] client lang: <none>
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] server lang: <none>
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] kex follows: False
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] Compression: none
2025-12-25T19:21:14.618 [DEBUG] [Thread-17067] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:21:14.677 [DEBUG] [Thread-17067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:21:14.677 [DEBUG] [Thread-17067] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:21:14.677 [DEBUG] [Thread-17067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:21:14.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:21:14.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:21:14.735 [DEBUG] [Thread-17067] [transport.py] [_log()] userauth is OK
2025-12-25T19:21:14.735 [DEBUG] [Thread-17067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:21:14.735 [DEBUG] [Thread-17067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:21:14.735 [DEBUG] [Thread-17067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:21:14.735 [DEBUG] [Thread-17067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:21:14.755 [INFO] [Thread-17067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:21:14.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-25T19:21:14.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:21:15.593 [DEBUG] [Thread-17067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:21:15.593 [DEBUG] [Thread-17067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:21:15.641 [DEBUG] [Thread-17067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:21:15.642 [DEBUG] [Thread-17067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:21:15.650 [DEBUG] [Thread-17067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:21:15.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:21:15.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-25T19:21:15.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:21:15.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:21:15.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:21:15.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:21:15.683 [DEBUG] [Thread-17067] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:21:18.257 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:18.258 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:20.512 [DEBUG] [Thread-17069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:26.626 [DEBUG] [Thread-17070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:41.675 [DEBUG] [Thread-17071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:21:45.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:21:45.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:21:45.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-25T19:21:46.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 21, 22), 21.72, 23.74, 0.0, 34.88, 22.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:21:46.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:21:22
2025-12-25T19:21:46.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:21:46.681 [DEBUG] [Thread-17072] [transport.py] [_log()] starting thread (client mode): 0xb95b3be0
2025-12-25T19:21:46.682 [DEBUG] [Thread-17072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:21:46.701 [DEBUG] [Thread-17072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:21:46.701 [INFO] [Thread-17072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:21:46.704 [DEBUG] [Thread-17072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:21:46.704 [DEBUG] [Thread-17072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:21:46.704 [DEBUG] [Thread-17072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:21:46.704 [DEBUG] [Thread-17072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] client lang: <none>
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] server lang: <none>
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] kex follows: False
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:21:46.705 [DEBUG] [Thread-17072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:21:46.706 [DEBUG] [Thread-17072] [transport.py] [_log()] Compression: none
2025-12-25T19:21:46.706 [DEBUG] [Thread-17072] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:21:46.724 [DEBUG] [Thread-17072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:21:46.725 [DEBUG] [Thread-17072] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:21:46.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:21:46.726 [DEBUG] [Thread-17072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:21:46.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:21:46.728 [DEBUG] [Thread-17072] [transport.py] [_log()] userauth is OK
2025-12-25T19:21:46.728 [DEBUG] [Thread-17072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:21:46.728 [DEBUG] [Thread-17072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:21:46.728 [DEBUG] [Thread-17072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:21:46.728 [DEBUG] [Thread-17072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:21:46.754 [INFO] [Thread-17072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:21:46.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:21:47.499 [DEBUG] [Thread-17072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:21:47.499 [DEBUG] [Thread-17072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:21:47.500 [DEBUG] [Thread-17072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:21:47.540 [DEBUG] [Thread-17072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:21:47.540 [DEBUG] [Thread-17072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:21:47.544 [DEBUG] [Thread-17072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:21:47.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:21:47.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:21:47.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:21:47.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:21:47.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:21:47.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:21:47.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:21:47.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:21:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:21:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.722977 -999.00  +22.40  33.67     29   +3.80 1 1 2 1 1   887    0 17.33 -75.55 ----- 37.5 33.7 303.0 47.8 23.4 -26.4 23.5 -25.8 23.4 -24.7 23.6 -25.0
2025-12-25T19:21:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:21:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:21:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.722977
2025-12-25T19:21:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:21:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:21:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:21:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:21:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:21:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:21:22', tmtdew=21.72, humidity=23.74, cloud=0.0, wind=34.88, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:21:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:21:47.575 [DEBUG] [Thread-17072] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:21:47.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:21:47.667 [DEBUG] [Thread-17075] [transport.py] [_log()] starting thread (client mode): 0xb95b0280
2025-12-25T19:21:47.667 [DEBUG] [Thread-17075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:21:47.683 [DEBUG] [Thread-17075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:21:47.683 [INFO] [Thread-17075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] client lang: <none>
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] server lang: <none>
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] kex follows: False
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:21:47.691 [DEBUG] [Thread-17075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:21:47.692 [DEBUG] [Thread-17075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:21:47.692 [DEBUG] [Thread-17075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:21:47.692 [DEBUG] [Thread-17075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:21:47.692 [DEBUG] [Thread-17075] [transport.py] [_log()] Compression: none
2025-12-25T19:21:47.692 [DEBUG] [Thread-17075] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:21:47.751 [DEBUG] [Thread-17075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:21:47.752 [DEBUG] [Thread-17075] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:21:47.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:21:47.753 [DEBUG] [Thread-17075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:21:47.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:21:47.810 [DEBUG] [Thread-17075] [transport.py] [_log()] userauth is OK
2025-12-25T19:21:47.811 [DEBUG] [Thread-17075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:21:47.811 [DEBUG] [Thread-17075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:21:47.811 [DEBUG] [Thread-17075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:21:47.812 [DEBUG] [Thread-17075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:21:47.837 [INFO] [Thread-17075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:21:47.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-25T19:21:47.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:21:48.692 [DEBUG] [Thread-17075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:21:48.692 [DEBUG] [Thread-17075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:21:48.740 [DEBUG] [Thread-17075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:21:48.740 [DEBUG] [Thread-17075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:21:48.749 [DEBUG] [Thread-17075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:21:48.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:21:48.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:21:48.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-25T19:21:48.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:21:48.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:21:48.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:21:48.783 [DEBUG] [Thread-17075] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:21:56.705 [DEBUG] [Thread-17077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:11.744 [DEBUG] [Thread-17078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:18.400 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:18.401 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:18.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:22:18.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:22:18.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:22:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 21, 54), 21.8, 23.77, 0.0, 30.06, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:22:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:21:54
2025-12-25T19:22:19.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:22:19.772 [DEBUG] [Thread-17079] [transport.py] [_log()] starting thread (client mode): 0xb6bf4490
2025-12-25T19:22:19.772 [DEBUG] [Thread-17079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:22:19.792 [DEBUG] [Thread-17079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:22:19.793 [INFO] [Thread-17079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] client lang: <none>
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] server lang: <none>
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] kex follows: False
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] Compression: none
2025-12-25T19:22:19.796 [DEBUG] [Thread-17079] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:22:19.814 [DEBUG] [Thread-17079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:22:19.815 [DEBUG] [Thread-17079] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:22:19.815 [DEBUG] [Thread-17079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:22:19.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:22:19.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:22:19.817 [DEBUG] [Thread-17079] [transport.py] [_log()] userauth is OK
2025-12-25T19:22:19.818 [DEBUG] [Thread-17079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:22:19.818 [DEBUG] [Thread-17079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:22:19.818 [DEBUG] [Thread-17079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:22:19.818 [DEBUG] [Thread-17079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:22:19.842 [INFO] [Thread-17079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:22:19.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:22:20.488 [DEBUG] [Thread-17079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:22:20.488 [DEBUG] [Thread-17079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:22:20.488 [DEBUG] [Thread-17079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:22:20.528 [DEBUG] [Thread-17079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:22:20.529 [DEBUG] [Thread-17079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:22:20.531 [DEBUG] [Thread-17079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:22:20.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:22:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:22:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:22:20.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:22:20.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:22:20.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:22:20.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.723324 -999.00  +22.40  34.14     29   +3.80 1 1 2 1 1   887    0 16.73 -83.64 ----- 33.5 34.1 309.4 37.3 23.4 -26.1 23.5 -25.7 23.4 -23.7 23.5 -24.8
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.723324
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:22:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:21:54', tmtdew=21.8, humidity=23.77, cloud=0.0, wind=30.06, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:21:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:22:20.549 [DEBUG] [Thread-17079] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:22:20.549 [DEBUG] [Thread-17082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:20.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-25T19:22:20.630 [DEBUG] [Thread-17083] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T19:22:20.630 [DEBUG] [Thread-17083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:22:20.647 [DEBUG] [Thread-17083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:22:20.647 [INFO] [Thread-17083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] client lang: <none>
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] server lang: <none>
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] kex follows: False
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:22:20.655 [DEBUG] [Thread-17083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:22:20.656 [DEBUG] [Thread-17083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:22:20.656 [DEBUG] [Thread-17083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:22:20.656 [DEBUG] [Thread-17083] [transport.py] [_log()] Compression: none
2025-12-25T19:22:20.656 [DEBUG] [Thread-17083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:22:20.717 [DEBUG] [Thread-17083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:22:20.717 [DEBUG] [Thread-17083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:22:20.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:22:20.718 [DEBUG] [Thread-17083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:22:20.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:22:20.774 [DEBUG] [Thread-17083] [transport.py] [_log()] userauth is OK
2025-12-25T19:22:20.774 [DEBUG] [Thread-17083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:22:20.774 [DEBUG] [Thread-17083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:22:20.774 [DEBUG] [Thread-17083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:22:20.774 [DEBUG] [Thread-17083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:22:20.793 [INFO] [Thread-17083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:22:20.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-25T19:22:20.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:22:21.656 [DEBUG] [Thread-17083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:22:21.656 [DEBUG] [Thread-17083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:22:21.704 [DEBUG] [Thread-17083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:22:21.704 [DEBUG] [Thread-17083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:22:21.713 [DEBUG] [Thread-17083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:22:21.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:22:21.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-25T19:22:21.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:22:21.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:22:21.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:22:21.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:22:21.744 [DEBUG] [Thread-17083] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:22:26.777 [DEBUG] [Thread-17085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:41.833 [DEBUG] [Thread-17086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:22:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:22:51.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:22:51.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-25T19:22:52.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 22, 26), 21.79, 23.79, 0.0, 29.02, 22.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:22:52.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:22:26
2025-12-25T19:22:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:22:52.786 [DEBUG] [Thread-17087] [transport.py] [_log()] starting thread (client mode): 0xb6bb6230
2025-12-25T19:22:52.786 [DEBUG] [Thread-17087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:22:52.806 [DEBUG] [Thread-17087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:22:52.806 [INFO] [Thread-17087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:52.809 [DEBUG] [Thread-17087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] client lang: <none>
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] server lang: <none>
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] kex follows: False
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] Compression: none
2025-12-25T19:22:52.810 [DEBUG] [Thread-17087] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:22:52.826 [DEBUG] [Thread-17087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:22:52.826 [DEBUG] [Thread-17087] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:22:52.826 [DEBUG] [Thread-17087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:22:52.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:22:52.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:22:52.827 [DEBUG] [Thread-17087] [transport.py] [_log()] userauth is OK
2025-12-25T19:22:52.827 [DEBUG] [Thread-17087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:22:52.827 [DEBUG] [Thread-17087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:22:52.827 [DEBUG] [Thread-17087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:22:52.827 [DEBUG] [Thread-17087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:22:52.836 [INFO] [Thread-17087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:22:52.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:22:53.615 [DEBUG] [Thread-17087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:22:53.615 [DEBUG] [Thread-17087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:22:53.616 [DEBUG] [Thread-17087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:22:53.657 [DEBUG] [Thread-17087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:22:53.657 [DEBUG] [Thread-17087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:22:53.659 [DEBUG] [Thread-17087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:22:53.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:22:53.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:22:53.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:22:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:22:53.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:22:53.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:22:53.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.723671 -999.00  +22.40  29.61     29   +3.70 1 1 1 1 1   887    0 16.46 -82.93 ----- 32.3 29.6 307.5 39.6 23.4 -26.2 23.4 -25.8 23.4 -24.2 23.5 -24.9
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.723671
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:22:53.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:22:26', tmtdew=21.79, humidity=23.79, cloud=0.0, wind=29.02, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:22:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:22:53.679 [DEBUG] [Thread-17087] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:22:53.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-25T19:22:53.763 [DEBUG] [Thread-17090] [transport.py] [_log()] starting thread (client mode): 0xb6b60c70
2025-12-25T19:22:53.763 [DEBUG] [Thread-17090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:22:53.777 [DEBUG] [Thread-17090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:22:53.777 [INFO] [Thread-17090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] client lang: <none>
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] server lang: <none>
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] kex follows: False
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] Compression: none
2025-12-25T19:22:53.785 [DEBUG] [Thread-17090] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:22:53.840 [DEBUG] [Thread-17090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:22:53.840 [DEBUG] [Thread-17090] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:22:53.840 [DEBUG] [Thread-17090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:22:53.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:22:53.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:22:53.898 [DEBUG] [Thread-17090] [transport.py] [_log()] userauth is OK
2025-12-25T19:22:53.898 [DEBUG] [Thread-17090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:22:53.898 [DEBUG] [Thread-17090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:22:53.898 [DEBUG] [Thread-17090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:22:53.898 [DEBUG] [Thread-17090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:22:53.912 [INFO] [Thread-17090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:22:53.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-25T19:22:53.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:22:54.713 [DEBUG] [Thread-17090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:22:54.713 [DEBUG] [Thread-17090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:22:54.760 [DEBUG] [Thread-17090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:22:54.760 [DEBUG] [Thread-17090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:22:54.769 [DEBUG] [Thread-17090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:22:54.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:22:54.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:22:54.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:22:54.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:22:54.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:22:54.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:22:54.801 [DEBUG] [Thread-17090] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:22:56.866 [DEBUG] [Thread-17092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:11.916 [DEBUG] [Thread-17093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:18.543 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:18.544 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:20.592 [DEBUG] [Thread-17094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:24.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:23:24.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:23:24.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:23:25.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 22, 58), 21.82, 23.82, 0.0, 31.18, 22.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:23:25.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:22:58
2025-12-25T19:23:25.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:23:25.822 [DEBUG] [Thread-17095] [transport.py] [_log()] starting thread (client mode): 0xb95b2ce0
2025-12-25T19:23:25.822 [DEBUG] [Thread-17095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:23:25.842 [DEBUG] [Thread-17095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:23:25.843 [INFO] [Thread-17095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] client lang: <none>
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] server lang: <none>
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] kex follows: False
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:23:25.846 [DEBUG] [Thread-17095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:23:25.847 [DEBUG] [Thread-17095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:23:25.847 [DEBUG] [Thread-17095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:23:25.847 [DEBUG] [Thread-17095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:23:25.847 [DEBUG] [Thread-17095] [transport.py] [_log()] Compression: none
2025-12-25T19:23:25.847 [DEBUG] [Thread-17095] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:23:25.863 [DEBUG] [Thread-17095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:23:25.864 [DEBUG] [Thread-17095] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:23:25.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:23:25.865 [DEBUG] [Thread-17095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:23:25.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:23:25.867 [DEBUG] [Thread-17095] [transport.py] [_log()] userauth is OK
2025-12-25T19:23:25.867 [DEBUG] [Thread-17095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:23:25.867 [DEBUG] [Thread-17095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:23:25.867 [DEBUG] [Thread-17095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:23:25.868 [DEBUG] [Thread-17095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:23:25.891 [INFO] [Thread-17095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:23:25.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:23:26.486 [DEBUG] [Thread-17095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:23:26.486 [DEBUG] [Thread-17095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:23:26.486 [DEBUG] [Thread-17095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:23:26.527 [DEBUG] [Thread-17095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:23:26.528 [DEBUG] [Thread-17095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:23:26.531 [DEBUG] [Thread-17095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:23:26.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:23:26.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:23:26.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:23:26.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:23:26.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:23:26.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:23:26.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:23:26.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:23:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:23:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.724018 -999.00  +22.50  25.75     29   +3.60 1 1 1 1 1   887    0 17.07 -86.52 ----- 27.0 25.8 308.0 44.8 23.4 -26.2 23.4 -25.7 23.3 -23.9 23.5 -25.0
2025-12-25T19:23:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:23:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:23:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.724018
2025-12-25T19:23:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:23:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:23:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:23:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:23:26.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:23:26.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:22:58', tmtdew=21.82, humidity=23.82, cloud=0.0, wind=31.18, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:22:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:23:26.557 [DEBUG] [Thread-17095] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:23:26.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-25T19:23:26.649 [DEBUG] [Thread-17098] [transport.py] [_log()] starting thread (client mode): 0xb95b3e50
2025-12-25T19:23:26.650 [DEBUG] [Thread-17098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:23:26.664 [DEBUG] [Thread-17098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:23:26.665 [INFO] [Thread-17098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:23:26.672 [DEBUG] [Thread-17098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:23:26.673 [DEBUG] [Thread-17098] [transport.py] [_log()] client lang: <none>
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] server lang: <none>
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] kex follows: False
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] Compression: none
2025-12-25T19:23:26.674 [DEBUG] [Thread-17098] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:23:26.730 [DEBUG] [Thread-17098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:23:26.731 [DEBUG] [Thread-17098] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:23:26.732 [DEBUG] [Thread-17098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:23:26.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:23:26.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:23:26.786 [DEBUG] [Thread-17098] [transport.py] [_log()] userauth is OK
2025-12-25T19:23:26.786 [DEBUG] [Thread-17098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:23:26.787 [DEBUG] [Thread-17098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:23:26.787 [DEBUG] [Thread-17098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:23:26.787 [DEBUG] [Thread-17098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:23:26.805 [INFO] [Thread-17098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:23:26.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-25T19:23:26.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:23:26.951 [DEBUG] [Thread-17100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:27.689 [DEBUG] [Thread-17098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:23:27.689 [DEBUG] [Thread-17098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:23:27.737 [DEBUG] [Thread-17098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:23:27.737 [DEBUG] [Thread-17098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:23:27.746 [DEBUG] [Thread-17098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:23:27.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:23:27.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-25T19:23:27.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-25T19:23:27.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:23:27.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:23:27.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:23:27.783 [DEBUG] [Thread-17098] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:23:42.006 [DEBUG] [Thread-17101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:57.042 [DEBUG] [Thread-17102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:23:57.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:23:57.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:23:57.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-25T19:23:58.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 23, 30), 21.82, 23.82, 0.0, 29.02, 22.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:23:58.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:23:30
2025-12-25T19:23:58.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:23:58.768 [DEBUG] [Thread-17103] [transport.py] [_log()] starting thread (client mode): 0xb6b229b0
2025-12-25T19:23:58.768 [DEBUG] [Thread-17103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:23:58.787 [DEBUG] [Thread-17103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:23:58.787 [INFO] [Thread-17103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:23:58.790 [DEBUG] [Thread-17103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] client lang: <none>
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] server lang: <none>
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] kex follows: False
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] Compression: none
2025-12-25T19:23:58.791 [DEBUG] [Thread-17103] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:23:58.806 [DEBUG] [Thread-17103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:23:58.807 [DEBUG] [Thread-17103] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:23:58.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:23:58.808 [DEBUG] [Thread-17103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:23:58.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:23:58.810 [DEBUG] [Thread-17103] [transport.py] [_log()] userauth is OK
2025-12-25T19:23:58.810 [DEBUG] [Thread-17103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:23:58.810 [DEBUG] [Thread-17103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:23:58.810 [DEBUG] [Thread-17103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:23:58.810 [DEBUG] [Thread-17103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:23:58.834 [INFO] [Thread-17103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:23:58.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:23:59.577 [DEBUG] [Thread-17103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:23:59.577 [DEBUG] [Thread-17103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:23:59.578 [DEBUG] [Thread-17103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:23:59.618 [DEBUG] [Thread-17103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:23:59.619 [DEBUG] [Thread-17103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:23:59.621 [DEBUG] [Thread-17103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:23:59.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:23:59.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:23:59.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:23:59.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:23:59.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:23:59.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:23:59.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:23:59.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:23:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:23:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.724366 -999.00  +22.50  31.48     29   +3.70 1 1 2 1 1   887    0 17.04 -85.87 ----- 27.4 31.5 307.0 35.4 23.3 -25.8 23.4 -25.6 23.2 -23.7 23.5 -24.9
2025-12-25T19:23:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:23:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:23:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.724366
2025-12-25T19:23:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:23:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:23:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:23:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:23:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:23:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:23:30', tmtdew=21.82, humidity=23.82, cloud=0.0, wind=29.02, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:23:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:23:59.638 [DEBUG] [Thread-17103] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:23:59.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-25T19:23:59.734 [DEBUG] [Thread-17106] [transport.py] [_log()] starting thread (client mode): 0xb6b22d40
2025-12-25T19:23:59.734 [DEBUG] [Thread-17106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:23:59.748 [DEBUG] [Thread-17106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:23:59.748 [INFO] [Thread-17106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:23:59.755 [DEBUG] [Thread-17106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] client lang: <none>
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] server lang: <none>
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] kex follows: False
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] Compression: none
2025-12-25T19:23:59.756 [DEBUG] [Thread-17106] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:23:59.812 [DEBUG] [Thread-17106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:23:59.812 [DEBUG] [Thread-17106] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:23:59.812 [DEBUG] [Thread-17106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:23:59.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:23:59.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:23:59.874 [DEBUG] [Thread-17106] [transport.py] [_log()] userauth is OK
2025-12-25T19:23:59.874 [DEBUG] [Thread-17106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:23:59.874 [DEBUG] [Thread-17106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:23:59.874 [DEBUG] [Thread-17106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:23:59.874 [DEBUG] [Thread-17106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:23:59.894 [INFO] [Thread-17106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:23:59.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-25T19:23:59.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:24:00.715 [DEBUG] [Thread-17106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:24:00.715 [DEBUG] [Thread-17106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:24:00.762 [DEBUG] [Thread-17106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:24:00.763 [DEBUG] [Thread-17106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:24:00.772 [DEBUG] [Thread-17106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:24:00.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:24:00.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-25T19:24:00.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:24:00.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:24:00.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:24:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:24:00.805 [DEBUG] [Thread-17106] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:24:12.071 [DEBUG] [Thread-17108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:24:18.683 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:24:18.684 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:24:20.622 [DEBUG] [Thread-17109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:24:27.114 [DEBUG] [Thread-17110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:24:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:24:30.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:24:30.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-25T19:24:31.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 24, 2), 21.78, 23.87, 0.0, 30.35, 22.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:24:31.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:24:02
2025-12-25T19:24:31.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:24:31.798 [DEBUG] [Thread-17111] [transport.py] [_log()] starting thread (client mode): 0xb6b033d0
2025-12-25T19:24:31.798 [DEBUG] [Thread-17111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:24:31.818 [DEBUG] [Thread-17111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:24:31.819 [INFO] [Thread-17111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:24:31.822 [DEBUG] [Thread-17111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:24:31.822 [DEBUG] [Thread-17111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:24:31.822 [DEBUG] [Thread-17111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:24:31.822 [DEBUG] [Thread-17111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:24:31.822 [DEBUG] [Thread-17111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:24:31.822 [DEBUG] [Thread-17111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] client lang: <none>
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] server lang: <none>
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] kex follows: False
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:24:31.823 [DEBUG] [Thread-17111] [transport.py] [_log()] Compression: none
2025-12-25T19:24:31.824 [DEBUG] [Thread-17111] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:24:31.841 [DEBUG] [Thread-17111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:24:31.841 [DEBUG] [Thread-17111] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:24:31.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:24:31.842 [DEBUG] [Thread-17111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:24:31.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:24:31.843 [DEBUG] [Thread-17111] [transport.py] [_log()] userauth is OK
2025-12-25T19:24:31.843 [DEBUG] [Thread-17111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:24:31.843 [DEBUG] [Thread-17111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:24:31.843 [DEBUG] [Thread-17111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:24:31.843 [DEBUG] [Thread-17111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:24:31.872 [INFO] [Thread-17111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:24:31.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:24:32.511 [DEBUG] [Thread-17111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:24:32.511 [DEBUG] [Thread-17111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:24:32.512 [DEBUG] [Thread-17111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:24:32.552 [DEBUG] [Thread-17111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:24:32.552 [DEBUG] [Thread-17111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:24:32.556 [DEBUG] [Thread-17111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:24:32.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:24:32.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:24:32.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:24:32.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:24:32.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:24:32.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:24:32.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:24:32.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:24:32.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:24:32.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.724713 -999.00  +22.40  27.76     29   +3.70 1 1 1 1 1   887    0 17.08 -88.74 ----- 33.0 27.8 314.2 34.5 23.3 -26.1 23.4 -25.7 23.2 -23.9 23.4 -24.9
2025-12-25T19:24:32.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:24:32.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:24:32.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.724713
2025-12-25T19:24:32.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:24:32.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:24:32.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:24:32.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:24:32.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:24:32.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:24:02', tmtdew=21.78, humidity=23.87, cloud=0.0, wind=30.35, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:23:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:24:32.584 [DEBUG] [Thread-17111] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:24:32.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-25T19:24:32.678 [DEBUG] [Thread-17114] [transport.py] [_log()] starting thread (client mode): 0xb95b3e50
2025-12-25T19:24:32.678 [DEBUG] [Thread-17114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:24:32.693 [DEBUG] [Thread-17114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:24:32.693 [INFO] [Thread-17114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] client lang: <none>
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] server lang: <none>
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] kex follows: False
2025-12-25T19:24:32.701 [DEBUG] [Thread-17114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:24:32.702 [DEBUG] [Thread-17114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:24:32.702 [DEBUG] [Thread-17114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:24:32.702 [DEBUG] [Thread-17114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:24:32.702 [DEBUG] [Thread-17114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:24:32.702 [DEBUG] [Thread-17114] [transport.py] [_log()] Compression: none
2025-12-25T19:24:32.702 [DEBUG] [Thread-17114] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:24:32.758 [DEBUG] [Thread-17114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:24:32.758 [DEBUG] [Thread-17114] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:24:32.759 [DEBUG] [Thread-17114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:24:32.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:24:32.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:24:32.814 [DEBUG] [Thread-17114] [transport.py] [_log()] userauth is OK
2025-12-25T19:24:32.814 [DEBUG] [Thread-17114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:24:32.815 [DEBUG] [Thread-17114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:24:32.815 [DEBUG] [Thread-17114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:24:32.815 [DEBUG] [Thread-17114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:24:32.833 [INFO] [Thread-17114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:24:32.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-25T19:24:32.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:24:33.673 [DEBUG] [Thread-17114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:24:33.673 [DEBUG] [Thread-17114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:24:33.721 [DEBUG] [Thread-17114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:24:33.721 [DEBUG] [Thread-17114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:24:33.730 [DEBUG] [Thread-17114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:24:33.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:24:33.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:24:33.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-25T19:24:33.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:24:33.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:24:33.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:24:33.767 [DEBUG] [Thread-17114] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:24:42.149 [DEBUG] [Thread-17116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:24:57.193 [DEBUG] [Thread-17117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:03.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:25:03.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:25:03.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-25T19:25:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 24, 34), 21.7, 23.92, 0.0, 25.41, 22.58, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:25:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:24:34
2025-12-25T19:25:04.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:25:04.770 [DEBUG] [Thread-17118] [transport.py] [_log()] starting thread (client mode): 0xb6b609a0
2025-12-25T19:25:04.770 [DEBUG] [Thread-17118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:25:04.792 [DEBUG] [Thread-17118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:25:04.792 [INFO] [Thread-17118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] client lang: <none>
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] server lang: <none>
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] kex follows: False
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:25:04.795 [DEBUG] [Thread-17118] [transport.py] [_log()] Compression: none
2025-12-25T19:25:04.796 [DEBUG] [Thread-17118] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:25:04.813 [DEBUG] [Thread-17118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:25:04.814 [DEBUG] [Thread-17118] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:25:04.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:25:04.815 [DEBUG] [Thread-17118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:25:04.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:25:04.817 [DEBUG] [Thread-17118] [transport.py] [_log()] userauth is OK
2025-12-25T19:25:04.817 [DEBUG] [Thread-17118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:25:04.817 [DEBUG] [Thread-17118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:25:04.817 [DEBUG] [Thread-17118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:25:04.817 [DEBUG] [Thread-17118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:25:04.835 [INFO] [Thread-17118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:25:04.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:25:05.785 [DEBUG] [Thread-17118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:25:05.785 [DEBUG] [Thread-17118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:25:05.785 [DEBUG] [Thread-17118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:25:05.827 [DEBUG] [Thread-17118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:25:05.827 [DEBUG] [Thread-17118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:25:05.830 [DEBUG] [Thread-17118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:25:05.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:25:05.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:25:05.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:25:05.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:25:05.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:25:05.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:25:05.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:25:05.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:25:05.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:25:05.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.725060 -999.00  +22.30  33.47     29   +3.80 1 1 2 1 1   887    0 17.02 -90.13 ----- 31.9 33.5 301.6 39.9 23.2 -26.0 23.4 -25.6 23.1 -23.8 23.4 -24.8
2025-12-25T19:25:05.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:25:05.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:25:05.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.725060
2025-12-25T19:25:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:25:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:25:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:25:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:25:05.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:25:05.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:24:34', tmtdew=21.7, humidity=23.92, cloud=0.0, wind=25.41, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:24:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:25:05.856 [DEBUG] [Thread-17118] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:25:05.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:25:05.950 [DEBUG] [Thread-17121] [transport.py] [_log()] starting thread (client mode): 0xb6b7fe50
2025-12-25T19:25:05.950 [DEBUG] [Thread-17121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:25:05.965 [DEBUG] [Thread-17121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:25:05.965 [INFO] [Thread-17121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:25:05.972 [DEBUG] [Thread-17121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:25:05.972 [DEBUG] [Thread-17121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] client lang: <none>
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] server lang: <none>
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] kex follows: False
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] Compression: none
2025-12-25T19:25:05.973 [DEBUG] [Thread-17121] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:25:06.030 [DEBUG] [Thread-17121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:25:06.030 [DEBUG] [Thread-17121] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:25:06.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:25:06.031 [DEBUG] [Thread-17121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:25:06.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:25:06.086 [DEBUG] [Thread-17121] [transport.py] [_log()] userauth is OK
2025-12-25T19:25:06.086 [DEBUG] [Thread-17121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:25:06.086 [DEBUG] [Thread-17121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:25:06.086 [DEBUG] [Thread-17121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:25:06.086 [DEBUG] [Thread-17121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:25:06.105 [INFO] [Thread-17121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:25:06.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-25T19:25:06.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:25:06.917 [DEBUG] [Thread-17121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:25:06.917 [DEBUG] [Thread-17121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:25:06.965 [DEBUG] [Thread-17121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:25:06.965 [DEBUG] [Thread-17121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:25:06.974 [DEBUG] [Thread-17121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:25:06.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:25:06.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:25:06.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:25:07.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:25:07.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:25:07.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:25:07.010 [DEBUG] [Thread-17121] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:25:12.229 [DEBUG] [Thread-17123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:18.825 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:18.826 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:20.654 [DEBUG] [Thread-17124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:27.276 [DEBUG] [Thread-17125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:37.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:25:37.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:25:37.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-25T19:25:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 25, 7), 21.7, 23.9, 0.0, 25.28, 22.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:25:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:25:07
2025-12-25T19:25:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:25:38.015 [DEBUG] [Thread-17126] [transport.py] [_log()] starting thread (client mode): 0xb6bf5330
2025-12-25T19:25:38.015 [DEBUG] [Thread-17126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:25:38.036 [DEBUG] [Thread-17126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:25:38.036 [INFO] [Thread-17126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:25:38.037 [DEBUG] [Thread-17126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] client lang: <none>
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] server lang: <none>
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] kex follows: False
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] Compression: none
2025-12-25T19:25:38.038 [DEBUG] [Thread-17126] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:25:38.055 [DEBUG] [Thread-17126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:25:38.055 [DEBUG] [Thread-17126] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:25:38.056 [DEBUG] [Thread-17126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:25:38.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:25:38.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:25:38.058 [DEBUG] [Thread-17126] [transport.py] [_log()] userauth is OK
2025-12-25T19:25:38.058 [DEBUG] [Thread-17126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:25:38.058 [DEBUG] [Thread-17126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:25:38.058 [DEBUG] [Thread-17126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:25:38.059 [DEBUG] [Thread-17126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:25:38.077 [INFO] [Thread-17126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:25:38.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:25:38.685 [DEBUG] [Thread-17126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:25:38.686 [DEBUG] [Thread-17126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:25:38.686 [DEBUG] [Thread-17126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:25:38.726 [DEBUG] [Thread-17126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:25:38.726 [DEBUG] [Thread-17126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:25:38.730 [DEBUG] [Thread-17126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:25:38.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:25:38.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:25:38.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:25:38.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:25:38.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:25:38.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:25:38.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:25:38.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:25:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:25:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.725407 -999.00  +22.30  29.85     29   +3.70 1 1 1 1 1   887    0 16.13 -94.23 ----- 30.4 29.9 308.8 35.5 23.2 -25.9 23.3 -25.4 23.1 -23.7 23.3 -24.9
2025-12-25T19:25:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:25:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:25:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.725407
2025-12-25T19:25:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:25:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:25:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:25:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:25:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:25:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:25:07', tmtdew=21.7, humidity=23.9, cloud=0.0, wind=25.28, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:24:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:25:38.759 [DEBUG] [Thread-17126] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:25:38.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:25:38.852 [DEBUG] [Thread-17129] [transport.py] [_log()] starting thread (client mode): 0xb6b63c10
2025-12-25T19:25:38.852 [DEBUG] [Thread-17129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:25:38.867 [DEBUG] [Thread-17129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:25:38.867 [INFO] [Thread-17129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] client lang: <none>
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] server lang: <none>
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] kex follows: False
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] Compression: none
2025-12-25T19:25:38.875 [DEBUG] [Thread-17129] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:25:38.933 [DEBUG] [Thread-17129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:25:38.933 [DEBUG] [Thread-17129] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:25:38.934 [DEBUG] [Thread-17129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:25:38.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:25:38.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:25:38.989 [DEBUG] [Thread-17129] [transport.py] [_log()] userauth is OK
2025-12-25T19:25:38.989 [DEBUG] [Thread-17129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:25:38.989 [DEBUG] [Thread-17129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:25:38.989 [DEBUG] [Thread-17129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:25:38.989 [DEBUG] [Thread-17129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:25:39.007 [INFO] [Thread-17129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:25:39.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:25:39.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:25:39.831 [DEBUG] [Thread-17129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:25:39.831 [DEBUG] [Thread-17129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:25:39.879 [DEBUG] [Thread-17129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:25:39.879 [DEBUG] [Thread-17129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:25:39.888 [DEBUG] [Thread-17129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:25:39.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:25:39.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-25T19:25:39.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-25T19:25:39.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:25:39.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:25:39.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:25:39.924 [DEBUG] [Thread-17129] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:25:42.309 [DEBUG] [Thread-17131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:25:57.363 [DEBUG] [Thread-17132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:09.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:26:09.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:26:09.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-25T19:26:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 25, 39), 21.66, 23.9, 0.0, 28.48, 22.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:26:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:25:39
2025-12-25T19:26:10.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:26:10.951 [DEBUG] [Thread-17133] [transport.py] [_log()] starting thread (client mode): 0xb6bf48b0
2025-12-25T19:26:10.951 [DEBUG] [Thread-17133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:26:10.971 [DEBUG] [Thread-17133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:26:10.971 [INFO] [Thread-17133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:26:10.974 [DEBUG] [Thread-17133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:26:10.974 [DEBUG] [Thread-17133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] client lang: <none>
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] server lang: <none>
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] kex follows: False
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:26:10.975 [DEBUG] [Thread-17133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:26:10.976 [DEBUG] [Thread-17133] [transport.py] [_log()] Compression: none
2025-12-25T19:26:10.976 [DEBUG] [Thread-17133] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:26:10.992 [DEBUG] [Thread-17133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:26:10.993 [DEBUG] [Thread-17133] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:26:10.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:26:10.994 [DEBUG] [Thread-17133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:26:10.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:26:11.037 [DEBUG] [Thread-17133] [transport.py] [_log()] userauth is OK
2025-12-25T19:26:11.037 [DEBUG] [Thread-17133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:26:11.037 [DEBUG] [Thread-17133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:26:11.037 [DEBUG] [Thread-17133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:26:11.038 [DEBUG] [Thread-17133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:26:11.057 [INFO] [Thread-17133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:26:11.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:26:11.840 [DEBUG] [Thread-17133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:26:11.840 [DEBUG] [Thread-17133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:26:11.840 [DEBUG] [Thread-17133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:26:11.881 [DEBUG] [Thread-17133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:26:11.881 [DEBUG] [Thread-17133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:26:11.883 [DEBUG] [Thread-17133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:26:11.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:26:11.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:26:11.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:26:11.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:26:11.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:26:11.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:26:11.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:26:11.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:26:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:26:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.726102 -999.00  +22.30  30.05     29   +3.80 1 1 2 1 1   887    0 16.49 -103.59 ----- 35.2 30.1 300.0 41.7 23.2 -25.7 23.2 -25.3 23.1 -23.9 23.3 -24.6
2025-12-25T19:26:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:26:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:26:11.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.726102
2025-12-25T19:26:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:26:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:26:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:26:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:26:11.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:26:11.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:25:39', tmtdew=21.66, humidity=23.9, cloud=0.0, wind=28.48, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:25:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:26:11.907 [DEBUG] [Thread-17133] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:26:11.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-25T19:26:11.992 [DEBUG] [Thread-17136] [transport.py] [_log()] starting thread (client mode): 0xb6b21630
2025-12-25T19:26:11.992 [DEBUG] [Thread-17136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:26:12.006 [DEBUG] [Thread-17136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:26:12.006 [INFO] [Thread-17136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] client lang: <none>
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] server lang: <none>
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] kex follows: False
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] Compression: none
2025-12-25T19:26:12.014 [DEBUG] [Thread-17136] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:26:12.072 [DEBUG] [Thread-17136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:26:12.072 [DEBUG] [Thread-17136] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:26:12.072 [DEBUG] [Thread-17136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:26:12.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:26:12.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:26:12.129 [DEBUG] [Thread-17136] [transport.py] [_log()] userauth is OK
2025-12-25T19:26:12.129 [DEBUG] [Thread-17136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:26:12.129 [DEBUG] [Thread-17136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:26:12.129 [DEBUG] [Thread-17136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:26:12.129 [DEBUG] [Thread-17136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:26:12.143 [INFO] [Thread-17136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:26:12.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-25T19:26:12.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:26:12.391 [DEBUG] [Thread-17138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:12.959 [DEBUG] [Thread-17136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:26:12.959 [DEBUG] [Thread-17136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:26:13.007 [DEBUG] [Thread-17136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:26:13.007 [DEBUG] [Thread-17136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:26:13.016 [DEBUG] [Thread-17136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:26:13.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:26:13.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:26: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') -> 00000000
2025-12-25T19:26:13.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:26:13.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:26:13.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:26:13.047 [DEBUG] [Thread-17136] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:26:18.967 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:18.968 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:20.689 [DEBUG] [Thread-17139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:27.433 [DEBUG] [Thread-17140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:42.475 [DEBUG] [Thread-17141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:26:43.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:26:43.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:26:43.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-25T19:26:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 26, 11), 21.66, 23.9, 0.0, 27.21, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:26:43.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:26:11
2025-12-25T19:26:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:26:44.108 [DEBUG] [Thread-17142] [transport.py] [_log()] starting thread (client mode): 0xb6bf61a0
2025-12-25T19:26:44.108 [DEBUG] [Thread-17142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:26:44.127 [DEBUG] [Thread-17142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:26:44.127 [INFO] [Thread-17142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:26:44.130 [DEBUG] [Thread-17142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] client lang: <none>
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] server lang: <none>
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] kex follows: False
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] Compression: none
2025-12-25T19:26:44.131 [DEBUG] [Thread-17142] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:26:44.147 [DEBUG] [Thread-17142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:26:44.147 [DEBUG] [Thread-17142] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:26:44.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:26:44.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:26:44.148 [DEBUG] [Thread-17142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:26:44.148 [DEBUG] [Thread-17142] [transport.py] [_log()] userauth is OK
2025-12-25T19:26:44.148 [DEBUG] [Thread-17142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:26:44.148 [DEBUG] [Thread-17142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:26:44.148 [DEBUG] [Thread-17142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:26:44.148 [DEBUG] [Thread-17142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:26:44.159 [INFO] [Thread-17142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:26:44.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:26:44.744 [DEBUG] [Thread-17142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:26:44.744 [DEBUG] [Thread-17142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:26:44.745 [DEBUG] [Thread-17142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:26:44.786 [DEBUG] [Thread-17142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:26:44.786 [DEBUG] [Thread-17142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:26:44.788 [DEBUG] [Thread-17142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:26:44.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:26:44.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:26:44.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:26:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:26:44.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:26:44.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:26:44.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.726449 -999.00  +22.30  26.17     29   +3.80 1 1 1 1 1   887    0 15.85 -110.26 ----- 24.4 26.2 295.2 37.0 23.1 -25.6 23.2 -25.2 23.1 -23.6 23.2 -24.5
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.726449
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:26:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:26:11', tmtdew=21.66, humidity=23.9, cloud=0.0, wind=27.21, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:26:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:26:44.809 [DEBUG] [Thread-17142] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:26:44.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-25T19:26:44.903 [DEBUG] [Thread-17145] [transport.py] [_log()] starting thread (client mode): 0xb95b3760
2025-12-25T19:26:44.903 [DEBUG] [Thread-17145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:26:44.918 [DEBUG] [Thread-17145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:26:44.918 [INFO] [Thread-17145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] client lang: <none>
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] server lang: <none>
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] kex follows: False
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] Compression: none
2025-12-25T19:26:44.926 [DEBUG] [Thread-17145] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:26:44.985 [DEBUG] [Thread-17145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:26:44.985 [DEBUG] [Thread-17145] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:26:44.985 [DEBUG] [Thread-17145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:26:44.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:26:44.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:26:45.041 [DEBUG] [Thread-17145] [transport.py] [_log()] userauth is OK
2025-12-25T19:26:45.041 [DEBUG] [Thread-17145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:26:45.041 [DEBUG] [Thread-17145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:26:45.041 [DEBUG] [Thread-17145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:26:45.041 [DEBUG] [Thread-17145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:26:45.059 [INFO] [Thread-17145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:26:45.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:26:45.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:26:45.942 [DEBUG] [Thread-17145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:26:45.942 [DEBUG] [Thread-17145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:26:45.991 [DEBUG] [Thread-17145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:26:45.991 [DEBUG] [Thread-17145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:26:46.000 [DEBUG] [Thread-17145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:26:46.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:26:46.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-25T19:26:46.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:26:46.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:26:46.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:26:46.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:26:46.032 [DEBUG] [Thread-17145] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:26:57.505 [DEBUG] [Thread-17147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:12.558 [DEBUG] [Thread-17148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:16.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:27:16.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:27:16.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-25T19:27:16.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 26, 43), 21.64, 23.87, 0.0, 24.95, 22.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:27:16.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:26:43
2025-12-25T19:27:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:27:17.103 [DEBUG] [Thread-17149] [transport.py] [_log()] starting thread (client mode): 0xb95b22f0
2025-12-25T19:27:17.103 [DEBUG] [Thread-17149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:27:17.117 [DEBUG] [Thread-17149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:27:17.117 [INFO] [Thread-17149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] client lang: <none>
2025-12-25T19:27:17.120 [DEBUG] [Thread-17149] [transport.py] [_log()] server lang: <none>
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] kex follows: False
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] Compression: none
2025-12-25T19:27:17.121 [DEBUG] [Thread-17149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:27:17.139 [DEBUG] [Thread-17149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:27:17.139 [DEBUG] [Thread-17149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:27:17.139 [DEBUG] [Thread-17149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:27:17.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:27:17.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:27:17.140 [DEBUG] [Thread-17149] [transport.py] [_log()] userauth is OK
2025-12-25T19:27:17.140 [DEBUG] [Thread-17149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:27:17.140 [DEBUG] [Thread-17149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:27:17.140 [DEBUG] [Thread-17149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:27:17.140 [DEBUG] [Thread-17149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:27:17.155 [INFO] [Thread-17149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:27:17.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:27:17.984 [DEBUG] [Thread-17149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:27:17.985 [DEBUG] [Thread-17149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:27:17.985 [DEBUG] [Thread-17149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:27:18.025 [DEBUG] [Thread-17149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:27:18.025 [DEBUG] [Thread-17149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:27:18.028 [DEBUG] [Thread-17149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:27:18.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:27:18.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:27:18.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:27:18.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:27:18.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:27:18.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:27:18.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.726796 -999.00  +22.40  20.74     29   +3.80 1 1 1 1 1   887    0 16.55 -101.61 ----- 24.7 20.7 297.8 31.4 23.1 -25.6 23.2 -25.3 23.0 -23.4 23.2 -24.5
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.726796
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:27:18.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:26:43', tmtdew=21.64, humidity=23.87, cloud=0.0, wind=24.95, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:26:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:27:18.045 [DEBUG] [Thread-17149] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:27:18.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:27:18.128 [DEBUG] [Thread-17152] [transport.py] [_log()] starting thread (client mode): 0xb6b7d360
2025-12-25T19:27:18.128 [DEBUG] [Thread-17152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:27:18.142 [DEBUG] [Thread-17152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:27:18.142 [INFO] [Thread-17152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:27:18.149 [DEBUG] [Thread-17152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] client lang: <none>
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] server lang: <none>
2025-12-25T19:27:18.150 [DEBUG] [Thread-17152] [transport.py] [_log()] kex follows: False
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] Compression: none
2025-12-25T19:27:18.151 [DEBUG] [Thread-17152] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:27:18.213 [DEBUG] [Thread-17152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:27:18.214 [DEBUG] [Thread-17152] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:27:18.214 [DEBUG] [Thread-17152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:27:18.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:27:18.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:27:18.270 [DEBUG] [Thread-17152] [transport.py] [_log()] userauth is OK
2025-12-25T19:27:18.270 [DEBUG] [Thread-17152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:27:18.270 [DEBUG] [Thread-17152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:27:18.270 [DEBUG] [Thread-17152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:27:18.270 [DEBUG] [Thread-17152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:27:18.289 [INFO] [Thread-17152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:27:18.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-25T19:27:18.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:27:19.108 [DEBUG] [Thread-17152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:27:19.108 [DEBUG] [Thread-17152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:27:19.109 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:19.110 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:19.155 [DEBUG] [Thread-17152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:27:19.156 [DEBUG] [Thread-17152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:27:19.164 [DEBUG] [Thread-17152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:27:19.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:27:19.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-25T19:27:19.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-25T19:27:19.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:27:19.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:27:19.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:27:19.198 [DEBUG] [Thread-17152] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:27:20.737 [DEBUG] [Thread-17154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:27.590 [DEBUG] [Thread-17155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:42.644 [DEBUG] [Thread-17156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:27:49.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:27:49.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:27:49.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-25T19:27:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 27, 15), 21.64, 23.84, 0.0, 27.77, 22.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:27:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:27:15
2025-12-25T19:27:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:27:50.254 [DEBUG] [Thread-17157] [transport.py] [_log()] starting thread (client mode): 0xb6b01ff0
2025-12-25T19:27:50.254 [DEBUG] [Thread-17157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:27:50.273 [DEBUG] [Thread-17157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:27:50.273 [INFO] [Thread-17157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] client lang: <none>
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] server lang: <none>
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] kex follows: False
2025-12-25T19:27:50.276 [DEBUG] [Thread-17157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:27:50.277 [DEBUG] [Thread-17157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:27:50.277 [DEBUG] [Thread-17157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:27:50.277 [DEBUG] [Thread-17157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:27:50.277 [DEBUG] [Thread-17157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:27:50.277 [DEBUG] [Thread-17157] [transport.py] [_log()] Compression: none
2025-12-25T19:27:50.277 [DEBUG] [Thread-17157] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:27:50.294 [DEBUG] [Thread-17157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:27:50.295 [DEBUG] [Thread-17157] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:27:50.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:27:50.295 [DEBUG] [Thread-17157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:27:50.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:27:50.297 [DEBUG] [Thread-17157] [transport.py] [_log()] userauth is OK
2025-12-25T19:27:50.297 [DEBUG] [Thread-17157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:27:50.297 [DEBUG] [Thread-17157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:27:50.297 [DEBUG] [Thread-17157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:27:50.297 [DEBUG] [Thread-17157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:27:50.312 [INFO] [Thread-17157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:27:50.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:27:50.960 [DEBUG] [Thread-17157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:27:50.960 [DEBUG] [Thread-17157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:27:50.961 [DEBUG] [Thread-17157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:27:51.001 [DEBUG] [Thread-17157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:27:51.001 [DEBUG] [Thread-17157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:27:51.005 [DEBUG] [Thread-17157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:27:51.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:27:51.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:27:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:27:51.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:27:51.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:27:51.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:27:51.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:27:51.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:27:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:27:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.727143 -999.00  +22.30  27.76     29   +3.80 1 1 1 1 1   887    0 15.95 -97.58 ----- 36.6 27.8 301.8 37.2 23.1 -25.7 23.1 -25.3 23.0 -23.8 23.2 -24.6
2025-12-25T19:27:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:27:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:27:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.727143
2025-12-25T19:27:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:27:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:27:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:27:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:27:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:27:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:27:15', tmtdew=21.64, humidity=23.84, cloud=0.0, wind=27.77, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:27:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:27:51.031 [DEBUG] [Thread-17157] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:27:51.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-25T19:27:51.122 [DEBUG] [Thread-17160] [transport.py] [_log()] starting thread (client mode): 0xb6b7d360
2025-12-25T19:27:51.122 [DEBUG] [Thread-17160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:27:51.137 [DEBUG] [Thread-17160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:27:51.137 [INFO] [Thread-17160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] client lang: <none>
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] server lang: <none>
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] kex follows: False
2025-12-25T19:27:51.145 [DEBUG] [Thread-17160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:27:51.146 [DEBUG] [Thread-17160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:27:51.146 [DEBUG] [Thread-17160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:27:51.146 [DEBUG] [Thread-17160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:27:51.146 [DEBUG] [Thread-17160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:27:51.146 [DEBUG] [Thread-17160] [transport.py] [_log()] Compression: none
2025-12-25T19:27:51.146 [DEBUG] [Thread-17160] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:27:51.210 [DEBUG] [Thread-17160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:27:51.211 [DEBUG] [Thread-17160] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:27:51.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:27:51.212 [DEBUG] [Thread-17160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:27:51.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:27:51.266 [DEBUG] [Thread-17160] [transport.py] [_log()] userauth is OK
2025-12-25T19:27:51.266 [DEBUG] [Thread-17160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:27:51.266 [DEBUG] [Thread-17160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:27:51.266 [DEBUG] [Thread-17160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:27:51.266 [DEBUG] [Thread-17160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:27:51.284 [INFO] [Thread-17160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:27:51.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-25T19:27:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:27:52.187 [DEBUG] [Thread-17160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:27:52.187 [DEBUG] [Thread-17160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:27:52.235 [DEBUG] [Thread-17160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:27:52.235 [DEBUG] [Thread-17160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:27:52.245 [DEBUG] [Thread-17160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:27:52.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:27:52.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-25T19:27:52.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-25T19:27:52.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:27:52.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:27:52.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:27:52.286 [DEBUG] [Thread-17160] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:27:57.683 [DEBUG] [Thread-17162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:12.727 [DEBUG] [Thread-17163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:19.249 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:19.250 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:20.766 [DEBUG] [Thread-17164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:22.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:28:22.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:28:22.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-25T19:28:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 28, 19), 21.65, 23.84, 0.0, 30.56, 22.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:28:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:28:19
2025-12-25T19:28:23.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:28:23.288 [DEBUG] [Thread-17165] [transport.py] [_log()] starting thread (client mode): 0xb6b76050
2025-12-25T19:28:23.288 [DEBUG] [Thread-17165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:28:23.309 [DEBUG] [Thread-17165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:28:23.309 [INFO] [Thread-17165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:28:23.312 [DEBUG] [Thread-17165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] client lang: <none>
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] server lang: <none>
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] kex follows: False
2025-12-25T19:28:23.313 [DEBUG] [Thread-17165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:28:23.314 [DEBUG] [Thread-17165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:28:23.314 [DEBUG] [Thread-17165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:28:23.314 [DEBUG] [Thread-17165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:28:23.314 [DEBUG] [Thread-17165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:28:23.314 [DEBUG] [Thread-17165] [transport.py] [_log()] Compression: none
2025-12-25T19:28:23.314 [DEBUG] [Thread-17165] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:28:23.332 [DEBUG] [Thread-17165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:28:23.333 [DEBUG] [Thread-17165] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:28:23.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:28:23.334 [DEBUG] [Thread-17165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:28:23.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:28:23.336 [DEBUG] [Thread-17165] [transport.py] [_log()] userauth is OK
2025-12-25T19:28:23.336 [DEBUG] [Thread-17165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:28:23.337 [DEBUG] [Thread-17165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:28:23.337 [DEBUG] [Thread-17165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:28:23.337 [DEBUG] [Thread-17165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:28:23.354 [INFO] [Thread-17165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:28:23.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:28:24.191 [DEBUG] [Thread-17165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:28:24.191 [DEBUG] [Thread-17165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:28:24.191 [DEBUG] [Thread-17165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:28:24.232 [DEBUG] [Thread-17165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:28:24.232 [DEBUG] [Thread-17165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:28:24.235 [DEBUG] [Thread-17165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:28:24.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:28:24.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:28:24.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:28:24.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:28:24.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:28:24.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:28:24.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:28:24.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:28:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:28:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.727491 -999.00  +22.30  28.44     29   +3.80 1 1 1 1 1   887    0 15.95 -100.74 ----- 27.7 28.4 299.8 37.0 23.1 -25.7 23.1 -25.2 22.9 -23.8 23.2 -24.6
2025-12-25T19:28:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:28:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:28:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.727491
2025-12-25T19:28:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:28:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:28:24.261 [DEBUG] [Thread-17165] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:28:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:28:24.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:28:24.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:28:24.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:28:19', tmtdew=21.65, humidity=23.84, cloud=0.0, wind=30.56, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:27:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:28:24.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-25T19:28:24.354 [DEBUG] [Thread-17168] [transport.py] [_log()] starting thread (client mode): 0xb6b61510
2025-12-25T19:28:24.354 [DEBUG] [Thread-17168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:28:24.369 [DEBUG] [Thread-17168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:28:24.369 [INFO] [Thread-17168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:28:24.377 [DEBUG] [Thread-17168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:28:24.377 [DEBUG] [Thread-17168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:28:24.377 [DEBUG] [Thread-17168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:28:24.377 [DEBUG] [Thread-17168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:24.377 [DEBUG] [Thread-17168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] client lang: <none>
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] server lang: <none>
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] kex follows: False
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] Compression: none
2025-12-25T19:28:24.378 [DEBUG] [Thread-17168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:28:24.438 [DEBUG] [Thread-17168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:28:24.438 [DEBUG] [Thread-17168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:28:24.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:28:24.439 [DEBUG] [Thread-17168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:28:24.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:28:24.494 [DEBUG] [Thread-17168] [transport.py] [_log()] userauth is OK
2025-12-25T19:28:24.495 [DEBUG] [Thread-17168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:28:24.497 [DEBUG] [Thread-17168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:28:24.497 [DEBUG] [Thread-17168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:28:24.497 [DEBUG] [Thread-17168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:28:24.514 [INFO] [Thread-17168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:28:24.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-25T19:28:24.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:28:25.427 [DEBUG] [Thread-17168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:28:25.428 [DEBUG] [Thread-17168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:28:25.478 [DEBUG] [Thread-17168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:28:25.478 [DEBUG] [Thread-17168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:28:25.488 [DEBUG] [Thread-17168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:28:25.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:28:25.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-25T19:28: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-25T19:28:25.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:28:25.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:28:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:28:25.531 [DEBUG] [Thread-17168] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:28:27.760 [DEBUG] [Thread-17170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:42.812 [DEBUG] [Thread-17171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:28:55.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:28: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-25T19:28:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 28, 51), 21.57, 23.89, 0.0, 29.62, 22.47, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:28:56.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:28:51
2025-12-25T19:28:56.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:28:56.537 [DEBUG] [Thread-17172] [transport.py] [_log()] starting thread (client mode): 0xb6b777c0
2025-12-25T19:28:56.538 [DEBUG] [Thread-17172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:28:56.559 [DEBUG] [Thread-17172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:28:56.559 [INFO] [Thread-17172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] client lang: <none>
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] server lang: <none>
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] kex follows: False
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:28:56.562 [DEBUG] [Thread-17172] [transport.py] [_log()] Compression: none
2025-12-25T19:28:56.563 [DEBUG] [Thread-17172] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:28:56.579 [DEBUG] [Thread-17172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:28:56.579 [DEBUG] [Thread-17172] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:28:56.580 [DEBUG] [Thread-17172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:28:56.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:28:56.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:28:56.582 [DEBUG] [Thread-17172] [transport.py] [_log()] userauth is OK
2025-12-25T19:28:56.582 [DEBUG] [Thread-17172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:28:56.582 [DEBUG] [Thread-17172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:28:56.582 [DEBUG] [Thread-17172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:28:56.582 [DEBUG] [Thread-17172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:28:56.607 [INFO] [Thread-17172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:28:56.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:28:57.256 [DEBUG] [Thread-17172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:28:57.257 [DEBUG] [Thread-17172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:28:57.257 [DEBUG] [Thread-17172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:28:57.298 [DEBUG] [Thread-17172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:28:57.298 [DEBUG] [Thread-17172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:28:57.300 [DEBUG] [Thread-17172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:28:57.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:28:57.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:28:57.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:28:57.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:28:57.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:28:57.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:28:57.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:28:57.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:28:57.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:28:57.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.727838 -999.00  +22.30  26.95     29   +3.80 1 1 1 1 1   887    0 15.96 -104.58 ----- 27.5 26.9 301.2 38.2 23.1 -25.6 23.1 -25.2 22.9 -23.7 23.1 -24.5
2025-12-25T19:28:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:28:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:28:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.727838
2025-12-25T19:28:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:28:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:28:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:28:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:28:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:28:57.327 [DEBUG] [Thread-17172] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:28:57.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:28:51', tmtdew=21.57, humidity=23.89, cloud=0.0, wind=29.62, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:28:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:28:57.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-25T19:28:57.421 [DEBUG] [Thread-17175] [transport.py] [_log()] starting thread (client mode): 0xb6b74580
2025-12-25T19:28:57.421 [DEBUG] [Thread-17175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:28:57.436 [DEBUG] [Thread-17175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:28:57.437 [INFO] [Thread-17175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:28:57.444 [DEBUG] [Thread-17175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] client lang: <none>
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] server lang: <none>
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] kex follows: False
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] Compression: none
2025-12-25T19:28:57.445 [DEBUG] [Thread-17175] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:28:57.502 [DEBUG] [Thread-17175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:28:57.502 [DEBUG] [Thread-17175] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:28:57.503 [DEBUG] [Thread-17175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:28:57.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:28:57.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:28:57.558 [DEBUG] [Thread-17175] [transport.py] [_log()] userauth is OK
2025-12-25T19:28:57.558 [DEBUG] [Thread-17175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:28:57.558 [DEBUG] [Thread-17175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:28:57.558 [DEBUG] [Thread-17175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:28:57.558 [DEBUG] [Thread-17175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:28:57.576 [INFO] [Thread-17175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:28:57.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-25T19:28:57.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:28:57.843 [DEBUG] [Thread-17177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:28:58.373 [DEBUG] [Thread-17175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:28:58.373 [DEBUG] [Thread-17175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:28:58.421 [DEBUG] [Thread-17175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:28:58.421 [DEBUG] [Thread-17175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:28:58.430 [DEBUG] [Thread-17175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:28:58.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:28:58.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-25T19:28: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-25T19:28:58.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:28:58.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:28:58.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:28:58.467 [DEBUG] [Thread-17175] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:29:12.894 [DEBUG] [Thread-17178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:29:19.392 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:29:19.393 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:29:20.796 [DEBUG] [Thread-17179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:29:27.927 [DEBUG] [Thread-17180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:29:28.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:29:28.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:29:28.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-25T19:29:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 29, 23), 21.56, 23.89, 0.0, 31.85, 22.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:29:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:29:23
2025-12-25T19:29:29.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:29:29.454 [DEBUG] [Thread-17181] [transport.py] [_log()] starting thread (client mode): 0xb6b75fc0
2025-12-25T19:29:29.454 [DEBUG] [Thread-17181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:29:29.474 [DEBUG] [Thread-17181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:29:29.475 [INFO] [Thread-17181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:29:29.477 [DEBUG] [Thread-17181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] client lang: <none>
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] server lang: <none>
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] kex follows: False
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] Compression: none
2025-12-25T19:29:29.478 [DEBUG] [Thread-17181] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:29:29.487 [DEBUG] [Thread-17181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:29:29.487 [DEBUG] [Thread-17181] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:29:29.488 [DEBUG] [Thread-17181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:29:29.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:29:29.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:29:29.490 [DEBUG] [Thread-17181] [transport.py] [_log()] userauth is OK
2025-12-25T19:29:29.490 [DEBUG] [Thread-17181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:29:29.490 [DEBUG] [Thread-17181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:29:29.490 [DEBUG] [Thread-17181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:29:29.490 [DEBUG] [Thread-17181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:29:29.514 [INFO] [Thread-17181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:29:29.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:29:30.330 [DEBUG] [Thread-17181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:29:30.330 [DEBUG] [Thread-17181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:29:30.330 [DEBUG] [Thread-17181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:29:30.371 [DEBUG] [Thread-17181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:29:30.371 [DEBUG] [Thread-17181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:29:30.375 [DEBUG] [Thread-17181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:29:30.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:29:30.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:29:30.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:29:30.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:29:30.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:29:30.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:29:30.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:29:30.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:29:30.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:29:30.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.728185 -999.00  +22.30  32.13     29   +3.70 1 1 2 1 1   887    0 15.84 -97.28 ----- 30.2 32.1 293.2 38.7 23.0 -25.7 23.1 -25.2 22.9 -23.5 23.1 -24.5
2025-12-25T19:29:30.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:29:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:29:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.728185
2025-12-25T19:29:30.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:29:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:29:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:29:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:29:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:29:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:29:23', tmtdew=21.56, humidity=23.89, cloud=0.0, wind=31.85, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:28:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:29:30.403 [DEBUG] [Thread-17181] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:29:30.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-25T19:29:30.497 [DEBUG] [Thread-17184] [transport.py] [_log()] starting thread (client mode): 0xb6b75ff0
2025-12-25T19:29:30.497 [DEBUG] [Thread-17184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:29:30.512 [DEBUG] [Thread-17184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:29:30.512 [INFO] [Thread-17184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] client lang: <none>
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] server lang: <none>
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] kex follows: False
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] Compression: none
2025-12-25T19:29:30.520 [DEBUG] [Thread-17184] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:29:30.578 [DEBUG] [Thread-17184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:29:30.578 [DEBUG] [Thread-17184] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:29:30.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:29:30.579 [DEBUG] [Thread-17184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:29:30.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:29:30.634 [DEBUG] [Thread-17184] [transport.py] [_log()] userauth is OK
2025-12-25T19:29:30.634 [DEBUG] [Thread-17184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:29:30.634 [DEBUG] [Thread-17184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:29:30.635 [DEBUG] [Thread-17184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:29:30.635 [DEBUG] [Thread-17184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:29:30.653 [INFO] [Thread-17184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:29:30.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-25T19:29:30.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:29:31.497 [DEBUG] [Thread-17184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:29:31.497 [DEBUG] [Thread-17184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:29:31.545 [DEBUG] [Thread-17184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:29:31.545 [DEBUG] [Thread-17184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:29:31.554 [DEBUG] [Thread-17184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:29:31.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:29:31.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-25T19:29:31.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-25T19:29:31.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:29:31.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:29:31.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:29:31.591 [DEBUG] [Thread-17184] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:29:42.964 [DEBUG] [Thread-17186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:29:58.022 [DEBUG] [Thread-17187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:01.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:30:01.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:30:01.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-25T19:30:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 29, 55), 21.59, 23.92, 0.0, 27.17, 22.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:30:02.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:29:55
2025-12-25T19:30:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:30:02.638 [DEBUG] [Thread-17188] [transport.py] [_log()] starting thread (client mode): 0xb6b77130
2025-12-25T19:30:02.638 [DEBUG] [Thread-17188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:30:02.659 [DEBUG] [Thread-17188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:30:02.659 [INFO] [Thread-17188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:30:02.663 [DEBUG] [Thread-17188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:30:02.663 [DEBUG] [Thread-17188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:30:02.663 [DEBUG] [Thread-17188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:30:02.663 [DEBUG] [Thread-17188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] client lang: <none>
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] server lang: <none>
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] kex follows: False
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] Compression: none
2025-12-25T19:30:02.664 [DEBUG] [Thread-17188] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:30:02.679 [DEBUG] [Thread-17188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:30:02.679 [DEBUG] [Thread-17188] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:30:02.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:30:02.680 [DEBUG] [Thread-17188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:30:02.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:30:02.682 [DEBUG] [Thread-17188] [transport.py] [_log()] userauth is OK
2025-12-25T19:30:02.682 [DEBUG] [Thread-17188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:30:02.682 [DEBUG] [Thread-17188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:30:02.682 [DEBUG] [Thread-17188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:30:02.682 [DEBUG] [Thread-17188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:30:02.692 [INFO] [Thread-17188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:30:02.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:30:03.388 [DEBUG] [Thread-17188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:30:03.389 [DEBUG] [Thread-17188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:30:03.389 [DEBUG] [Thread-17188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:30:03.430 [DEBUG] [Thread-17188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:30:03.430 [DEBUG] [Thread-17188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:30:03.433 [DEBUG] [Thread-17188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:30:03.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:30:03.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:30:03.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:30:03.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:30:03.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:30:03.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:30:03.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:30:03.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:30:03.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:30:03.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.728532 -999.00  +22.30  24.70     29   +3.70 1 1 1 1 1   887    0 16.03 -98.47 ----- 30.8 24.7 305.6 40.0 23.0 -25.7 23.1 -25.3 22.8 -23.3 23.1 -24.4
2025-12-25T19:30:03.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:30:03.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:30:03.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.728532
2025-12-25T19:30:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:30:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:30:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:30:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:30:03.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:30:03.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:29:55', tmtdew=21.59, humidity=23.92, cloud=0.0, wind=27.17, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:29:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:30:03.498 [DEBUG] [Thread-17188] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:30:03.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-25T19:30:03.595 [DEBUG] [Thread-17191] [transport.py] [_log()] starting thread (client mode): 0xb6b77340
2025-12-25T19:30:03.595 [DEBUG] [Thread-17191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:30:03.611 [DEBUG] [Thread-17191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:30:03.611 [INFO] [Thread-17191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:30:03.623 [DEBUG] [Thread-17191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:30:03.623 [DEBUG] [Thread-17191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:30:03.623 [DEBUG] [Thread-17191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:30:03.623 [DEBUG] [Thread-17191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] client lang: <none>
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] server lang: <none>
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] kex follows: False
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:30:03.624 [DEBUG] [Thread-17191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:30:03.625 [DEBUG] [Thread-17191] [transport.py] [_log()] Compression: none
2025-12-25T19:30:03.625 [DEBUG] [Thread-17191] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:30:03.686 [DEBUG] [Thread-17191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:30:03.687 [DEBUG] [Thread-17191] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:30:03.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:30:03.688 [DEBUG] [Thread-17191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:30:03.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:30:03.747 [DEBUG] [Thread-17191] [transport.py] [_log()] userauth is OK
2025-12-25T19:30:03.747 [DEBUG] [Thread-17191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:30:03.747 [DEBUG] [Thread-17191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:30:03.748 [DEBUG] [Thread-17191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:30:03.748 [DEBUG] [Thread-17191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:30:03.766 [INFO] [Thread-17191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:30:03.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-25T19:30:03.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:30:04.633 [DEBUG] [Thread-17191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:30:04.633 [DEBUG] [Thread-17191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:30:04.682 [DEBUG] [Thread-17191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:30:04.682 [DEBUG] [Thread-17191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:30:04.692 [DEBUG] [Thread-17191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:30:04.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:30:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:30:04.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-25T19:30:04.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:30:04.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:30:04.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:30:04.730 [DEBUG] [Thread-17191] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:30:13.056 [DEBUG] [Thread-17193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:19.531 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:19.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:20.846 [DEBUG] [Thread-17194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:28.107 [DEBUG] [Thread-17195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:34.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:30:34.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:30:34.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-25T19:30:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 30, 27), 21.58, 23.92, 0.0, 30.19, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:30:35.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:30:27
2025-12-25T19:30:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:30:35.767 [DEBUG] [Thread-17196] [transport.py] [_log()] starting thread (client mode): 0xb6b74e80
2025-12-25T19:30:35.767 [DEBUG] [Thread-17196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:30:35.788 [DEBUG] [Thread-17196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:30:35.788 [INFO] [Thread-17196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:35.789 [DEBUG] [Thread-17196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] client lang: <none>
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] server lang: <none>
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] kex follows: False
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] Compression: none
2025-12-25T19:30:35.790 [DEBUG] [Thread-17196] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:30:35.797 [DEBUG] [Thread-17196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:30:35.797 [DEBUG] [Thread-17196] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:30:35.797 [DEBUG] [Thread-17196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:30:35.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:30:35.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:30:35.798 [DEBUG] [Thread-17196] [transport.py] [_log()] userauth is OK
2025-12-25T19:30:35.798 [DEBUG] [Thread-17196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:30:35.798 [DEBUG] [Thread-17196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:30:35.798 [DEBUG] [Thread-17196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:30:35.798 [DEBUG] [Thread-17196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:30:35.824 [INFO] [Thread-17196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:30:35.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:30:36.658 [DEBUG] [Thread-17196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:30:36.658 [DEBUG] [Thread-17196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:30:36.658 [DEBUG] [Thread-17196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:30:36.700 [DEBUG] [Thread-17196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:30:36.700 [DEBUG] [Thread-17196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:30:36.703 [DEBUG] [Thread-17196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:30:36.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:30:36.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:30:36.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:30:36.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:30:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:30:36.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:30:36.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:30:36.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.728879 -999.00  +22.30  31.79     29   +3.70 1 1 2 1 1   887    0 15.89 -92.00 ----- 30.2 31.8 291.0 38.2 23.0 -25.6 23.0 -25.3 22.8 -23.5 23.0 -24.5
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.728879
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:30:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:30:27', tmtdew=21.58, humidity=23.92, cloud=0.0, wind=30.19, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:29:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:30:36.720 [DEBUG] [Thread-17196] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:30:36.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-25T19:30:36.804 [DEBUG] [Thread-17199] [transport.py] [_log()] starting thread (client mode): 0xb95b2650
2025-12-25T19:30:36.805 [DEBUG] [Thread-17199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:30:36.819 [DEBUG] [Thread-17199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:30:36.819 [INFO] [Thread-17199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] client lang: <none>
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] server lang: <none>
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] kex follows: False
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] Compression: none
2025-12-25T19:30:36.827 [DEBUG] [Thread-17199] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:30:36.884 [DEBUG] [Thread-17199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:30:36.884 [DEBUG] [Thread-17199] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:30:36.885 [DEBUG] [Thread-17199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:30:36.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:30:36.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:30:36.946 [DEBUG] [Thread-17199] [transport.py] [_log()] userauth is OK
2025-12-25T19:30:36.946 [DEBUG] [Thread-17199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:30:36.946 [DEBUG] [Thread-17199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:30:36.946 [DEBUG] [Thread-17199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:30:36.946 [DEBUG] [Thread-17199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:30:36.961 [INFO] [Thread-17199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:30:36.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-25T19:30:36.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:30:37.779 [DEBUG] [Thread-17199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:30:37.779 [DEBUG] [Thread-17199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:30:37.829 [DEBUG] [Thread-17199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:30:37.829 [DEBUG] [Thread-17199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:30:37.840 [DEBUG] [Thread-17199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:30:37.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:30:37.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-25T19:30:37.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-25T19:30:37.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:30:37.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:30:37.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:30:37.872 [DEBUG] [Thread-17199] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:30:43.140 [DEBUG] [Thread-17201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:30:58.191 [DEBUG] [Thread-17202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:07.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:31:07.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:31:07.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-25T19:31:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 30, 27), 21.58, 23.92, 0.0, 31.99, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:31:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:30:27
2025-12-25T19:31:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:31:08.870 [DEBUG] [Thread-17203] [transport.py] [_log()] starting thread (client mode): 0xb9592200
2025-12-25T19:31:08.870 [DEBUG] [Thread-17203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:31:08.890 [DEBUG] [Thread-17203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:31:08.890 [INFO] [Thread-17203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] client lang: <none>
2025-12-25T19:31:08.894 [DEBUG] [Thread-17203] [transport.py] [_log()] server lang: <none>
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] kex follows: False
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] Compression: none
2025-12-25T19:31:08.895 [DEBUG] [Thread-17203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:31:08.912 [DEBUG] [Thread-17203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:31:08.913 [DEBUG] [Thread-17203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:31:08.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:31:08.914 [DEBUG] [Thread-17203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:31:08.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:31:08.916 [DEBUG] [Thread-17203] [transport.py] [_log()] userauth is OK
2025-12-25T19:31:08.916 [DEBUG] [Thread-17203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:31:08.916 [DEBUG] [Thread-17203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:31:08.916 [DEBUG] [Thread-17203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:31:08.916 [DEBUG] [Thread-17203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:31:08.931 [INFO] [Thread-17203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:31:08.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:31:09.572 [DEBUG] [Thread-17203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:31:09.573 [DEBUG] [Thread-17203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:31:09.573 [DEBUG] [Thread-17203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:31:09.614 [DEBUG] [Thread-17203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:31:09.614 [DEBUG] [Thread-17203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:31:09.617 [DEBUG] [Thread-17203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:31:09.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:31:09.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:31:09.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:31:09.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:31:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:31:09.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:31:09.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:31:09.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:31:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:31:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.729226 -999.00  +22.30  32.08     29   +3.70 1 1 2 1 1   887    0 16.09 -93.30 ----- 36.0 32.1 296.8 41.5 23.0 -25.6 23.0 -25.3 22.8 -23.8 23.0 -24.5
2025-12-25T19:31:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:31:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:31:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.729226
2025-12-25T19:31:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:31:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:31:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:31:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:31:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:31:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:30:27', tmtdew=21.58, humidity=23.92, cloud=0.0, wind=31.99, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:30:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:31:09.645 [DEBUG] [Thread-17203] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:31:09.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-25T19:31:09.739 [DEBUG] [Thread-17206] [transport.py] [_log()] starting thread (client mode): 0xb6b75ff0
2025-12-25T19:31:09.739 [DEBUG] [Thread-17206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:31:09.753 [DEBUG] [Thread-17206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:31:09.753 [INFO] [Thread-17206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:31:09.761 [DEBUG] [Thread-17206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:31:09.761 [DEBUG] [Thread-17206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:31:09.761 [DEBUG] [Thread-17206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:31:09.761 [DEBUG] [Thread-17206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:09.761 [DEBUG] [Thread-17206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:09.761 [DEBUG] [Thread-17206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] client lang: <none>
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] server lang: <none>
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] kex follows: False
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] Compression: none
2025-12-25T19:31:09.762 [DEBUG] [Thread-17206] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:31:09.817 [DEBUG] [Thread-17206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:31:09.818 [DEBUG] [Thread-17206] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:31:09.818 [DEBUG] [Thread-17206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:31:09.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:31:09.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:31:09.874 [DEBUG] [Thread-17206] [transport.py] [_log()] userauth is OK
2025-12-25T19:31:09.874 [DEBUG] [Thread-17206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:31:09.874 [DEBUG] [Thread-17206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:31:09.874 [DEBUG] [Thread-17206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:31:09.874 [DEBUG] [Thread-17206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:31:09.892 [INFO] [Thread-17206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:31:09.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-25T19:31:09.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:31:10.742 [DEBUG] [Thread-17206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:31:10.742 [DEBUG] [Thread-17206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:31:10.790 [DEBUG] [Thread-17206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:31:10.790 [DEBUG] [Thread-17206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:31:10.799 [DEBUG] [Thread-17206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:31:10.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:31:10.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-25T19:31:10.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:31:10.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:31:10.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:31:10.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:31:10.836 [DEBUG] [Thread-17206] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:31:13.229 [DEBUG] [Thread-17208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:19.671 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:19.672 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:20.879 [DEBUG] [Thread-17209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:28.273 [DEBUG] [Thread-17210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:31:40.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:31:40.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-25T19:31:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 31, 32), 21.59, 23.92, 0.0, 31.58, 22.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:31:41.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:31:32
2025-12-25T19:31:41.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:31:41.824 [DEBUG] [Thread-17211] [transport.py] [_log()] starting thread (client mode): 0xb6b77310
2025-12-25T19:31:41.825 [DEBUG] [Thread-17211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:31:41.844 [DEBUG] [Thread-17211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:31:41.845 [INFO] [Thread-17211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] client lang: <none>
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] server lang: <none>
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] kex follows: False
2025-12-25T19:31:41.848 [DEBUG] [Thread-17211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:31:41.849 [DEBUG] [Thread-17211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:31:41.849 [DEBUG] [Thread-17211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:31:41.849 [DEBUG] [Thread-17211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:31:41.849 [DEBUG] [Thread-17211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:31:41.849 [DEBUG] [Thread-17211] [transport.py] [_log()] Compression: none
2025-12-25T19:31:41.849 [DEBUG] [Thread-17211] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:31:41.866 [DEBUG] [Thread-17211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:31:41.866 [DEBUG] [Thread-17211] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:31:41.867 [DEBUG] [Thread-17211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:31:41.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:31:41.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:31:41.869 [DEBUG] [Thread-17211] [transport.py] [_log()] userauth is OK
2025-12-25T19:31:41.869 [DEBUG] [Thread-17211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:31:41.869 [DEBUG] [Thread-17211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:31:41.870 [DEBUG] [Thread-17211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:31:41.870 [DEBUG] [Thread-17211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:31:41.888 [INFO] [Thread-17211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:31:41.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:31:42.714 [DEBUG] [Thread-17211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:31:42.714 [DEBUG] [Thread-17211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:31:42.714 [DEBUG] [Thread-17211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:31:42.755 [DEBUG] [Thread-17211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:31:42.755 [DEBUG] [Thread-17211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:31:42.759 [DEBUG] [Thread-17211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:31:42.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:31:42.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:31:42.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:31:42.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:31:42.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:31:42.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:31:42.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:31:42.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:31:42.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:31:42.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.729921 -999.00  +22.20  36.19     29   +3.50 1 1 2 1 1   887    0 16.55 -77.30 ----- 34.1 36.2 291.0 41.1 22.9 -25.8 22.9 -25.4 22.8 -23.7 23.0 -24.8
2025-12-25T19:31:42.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:31:42.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:31:42.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.729921
2025-12-25T19:31:42.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:31:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:31:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:31:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:31:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:31:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:31:32', tmtdew=21.59, humidity=23.92, cloud=0.0, wind=31.58, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:31:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:31:42.786 [DEBUG] [Thread-17211] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:31:42.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-25T19:31:42.877 [DEBUG] [Thread-17214] [transport.py] [_log()] starting thread (client mode): 0xb6b74d90
2025-12-25T19:31:42.877 [DEBUG] [Thread-17214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:31:42.893 [DEBUG] [Thread-17214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:31:42.893 [INFO] [Thread-17214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:31:42.900 [DEBUG] [Thread-17214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] client lang: <none>
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] server lang: <none>
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] kex follows: False
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] Compression: none
2025-12-25T19:31:42.901 [DEBUG] [Thread-17214] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:31:42.958 [DEBUG] [Thread-17214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:31:42.959 [DEBUG] [Thread-17214] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:31:42.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:31:42.960 [DEBUG] [Thread-17214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:31:42.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:31:43.014 [DEBUG] [Thread-17214] [transport.py] [_log()] userauth is OK
2025-12-25T19:31:43.014 [DEBUG] [Thread-17214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:31:43.014 [DEBUG] [Thread-17214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:31:43.014 [DEBUG] [Thread-17214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:31:43.014 [DEBUG] [Thread-17214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:31:43.033 [INFO] [Thread-17214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:31:43.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-25T19:31:43.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:31:43.311 [DEBUG] [Thread-17216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:31:43.882 [DEBUG] [Thread-17214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:31:43.883 [DEBUG] [Thread-17214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:31:43.931 [DEBUG] [Thread-17214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:31:43.931 [DEBUG] [Thread-17214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:31:43.940 [DEBUG] [Thread-17214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:31:43.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:31:43.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-25T19:31:43.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-25T19:31:43.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:31:43.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:31:43.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:31:43.981 [DEBUG] [Thread-17214] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:31:58.365 [DEBUG] [Thread-17217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:13.402 [DEBUG] [Thread-17218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:14.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:32:14.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:32:14.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-25T19:32:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 32, 4), 21.62, 23.85, 0.0, 31.3, 22.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:32:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:32:04
2025-12-25T19:32:14.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:32:14.969 [DEBUG] [Thread-17219] [transport.py] [_log()] starting thread (client mode): 0xb6b23a90
2025-12-25T19:32:14.969 [DEBUG] [Thread-17219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:32:14.988 [DEBUG] [Thread-17219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:32:14.988 [INFO] [Thread-17219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:32:14.991 [DEBUG] [Thread-17219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] client lang: <none>
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] server lang: <none>
2025-12-25T19:32:14.992 [DEBUG] [Thread-17219] [transport.py] [_log()] kex follows: False
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] Compression: none
2025-12-25T19:32:14.993 [DEBUG] [Thread-17219] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:32:15.012 [DEBUG] [Thread-17219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:32:15.014 [DEBUG] [Thread-17219] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:32:15.014 [DEBUG] [Thread-17219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:32:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:32:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:32:15.017 [DEBUG] [Thread-17219] [transport.py] [_log()] userauth is OK
2025-12-25T19:32:15.017 [DEBUG] [Thread-17219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:32:15.017 [DEBUG] [Thread-17219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:32:15.017 [DEBUG] [Thread-17219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:32:15.017 [DEBUG] [Thread-17219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:32:15.037 [INFO] [Thread-17219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:32:15.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:32:15.682 [DEBUG] [Thread-17219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:32:15.682 [DEBUG] [Thread-17219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:32:15.683 [DEBUG] [Thread-17219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:32:15.724 [DEBUG] [Thread-17219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:32:15.724 [DEBUG] [Thread-17219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:32:15.726 [DEBUG] [Thread-17219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:32:15.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:32:15.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:32:15.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:32:15.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:32:15.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:32:15.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:32:15.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:32:15.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:32:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:32:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.730268 -999.00  +22.20  29.79     29   +3.50 1 1 1 1 1   886    0 16.59 -67.86 ----- 27.1 29.8 296.4 42.1 22.9 -25.7 22.9 -25.2 22.7 -23.6 22.9 -24.5
2025-12-25T19:32:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:32:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:32:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.730268
2025-12-25T19:32:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:32:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:32:15.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:32:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:32:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:32:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:32:04', tmtdew=21.62, humidity=23.85, cloud=0.0, wind=31.3, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:31:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:32:15.751 [DEBUG] [Thread-17219] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:32:15.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-25T19:32:15.849 [DEBUG] [Thread-17222] [transport.py] [_log()] starting thread (client mode): 0xb6b20ee0
2025-12-25T19:32:15.849 [DEBUG] [Thread-17222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:32:15.864 [DEBUG] [Thread-17222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:32:15.864 [INFO] [Thread-17222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:32:15.871 [DEBUG] [Thread-17222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:32:15.871 [DEBUG] [Thread-17222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] client lang: <none>
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] server lang: <none>
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] kex follows: False
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:32:15.872 [DEBUG] [Thread-17222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:32:15.873 [DEBUG] [Thread-17222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:32:15.873 [DEBUG] [Thread-17222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:32:15.873 [DEBUG] [Thread-17222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:32:15.873 [DEBUG] [Thread-17222] [transport.py] [_log()] Compression: none
2025-12-25T19:32:15.873 [DEBUG] [Thread-17222] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:32:15.930 [DEBUG] [Thread-17222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:32:15.930 [DEBUG] [Thread-17222] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:32:15.931 [DEBUG] [Thread-17222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:32:15.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:32:15.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:32:15.986 [DEBUG] [Thread-17222] [transport.py] [_log()] userauth is OK
2025-12-25T19:32:15.987 [DEBUG] [Thread-17222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:32:15.987 [DEBUG] [Thread-17222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:32:15.987 [DEBUG] [Thread-17222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:32:15.987 [DEBUG] [Thread-17222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:32:16.006 [INFO] [Thread-17222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:32:16.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-25T19:32:16.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:32:16.846 [DEBUG] [Thread-17222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:32:16.847 [DEBUG] [Thread-17222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:32:16.897 [DEBUG] [Thread-17222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:32:16.897 [DEBUG] [Thread-17222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:32:16.908 [DEBUG] [Thread-17222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:32:16.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:32:16.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-25T19:32: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-25T19:32:16.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:32:16.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:32:16.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:32:16.954 [DEBUG] [Thread-17222] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:32:19.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:19.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:20.909 [DEBUG] [Thread-17224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:28.434 [DEBUG] [Thread-17225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:43.493 [DEBUG] [Thread-17226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:32:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:32:46.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:32:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:32:47.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 32, 36), 21.58, 23.94, 0.0, 30.97, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:32:47.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:32:36
2025-12-25T19:32:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:32:47.938 [DEBUG] [Thread-17227] [transport.py] [_log()] starting thread (client mode): 0xb95b3e50
2025-12-25T19:32:47.938 [DEBUG] [Thread-17227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:32:47.959 [DEBUG] [Thread-17227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:32:47.959 [INFO] [Thread-17227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:32:47.962 [DEBUG] [Thread-17227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:32:47.962 [DEBUG] [Thread-17227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] client lang: <none>
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] server lang: <none>
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] kex follows: False
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:32:47.963 [DEBUG] [Thread-17227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:32:47.964 [DEBUG] [Thread-17227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:32:47.964 [DEBUG] [Thread-17227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:32:47.964 [DEBUG] [Thread-17227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:32:47.964 [DEBUG] [Thread-17227] [transport.py] [_log()] Compression: none
2025-12-25T19:32:47.964 [DEBUG] [Thread-17227] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:32:47.982 [DEBUG] [Thread-17227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:32:47.983 [DEBUG] [Thread-17227] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:32:47.984 [DEBUG] [Thread-17227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:32:47.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:32:47.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:32:47.986 [DEBUG] [Thread-17227] [transport.py] [_log()] userauth is OK
2025-12-25T19:32:47.986 [DEBUG] [Thread-17227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:32:47.986 [DEBUG] [Thread-17227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:32:47.986 [DEBUG] [Thread-17227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:32:47.986 [DEBUG] [Thread-17227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:32:48.004 [INFO] [Thread-17227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:32:48.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:32:48.763 [DEBUG] [Thread-17227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:32:48.763 [DEBUG] [Thread-17227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:32:48.763 [DEBUG] [Thread-17227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:32:48.803 [DEBUG] [Thread-17227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:32:48.804 [DEBUG] [Thread-17227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:32:48.806 [DEBUG] [Thread-17227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:32:48.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:32:48.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:32:48.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:32:48.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:32:48.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:32:48.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:32:48.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:32:48.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:32:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:32:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.730616 -999.00  +22.10  34.70     29   +3.50 1 1 2 1 1   886    0 17.20 -65.02 ----- 38.4 34.7 295.2 45.8 22.9 -25.8 22.9 -25.3 22.7 -23.6 22.9 -24.6
2025-12-25T19:32:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:32:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:32:48.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.730616
2025-12-25T19:32:48.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:32:48.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:32:48.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:32:48.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:32:48.828 [DEBUG] [Thread-17227] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:32:48.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:32:48.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:32:36', tmtdew=21.58, humidity=23.94, cloud=0.0, wind=30.97, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:32:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:32:48.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-25T19:32:48.931 [DEBUG] [Thread-17230] [transport.py] [_log()] starting thread (client mode): 0xb95b3c10
2025-12-25T19:32:48.932 [DEBUG] [Thread-17230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:32:48.946 [DEBUG] [Thread-17230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:32:48.946 [INFO] [Thread-17230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] client lang: <none>
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] server lang: <none>
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] kex follows: False
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] Compression: none
2025-12-25T19:32:48.953 [DEBUG] [Thread-17230] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:32:49.010 [DEBUG] [Thread-17230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:32:49.011 [DEBUG] [Thread-17230] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:32:49.011 [DEBUG] [Thread-17230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:32:49.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:32:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:32:49.066 [DEBUG] [Thread-17230] [transport.py] [_log()] userauth is OK
2025-12-25T19:32:49.066 [DEBUG] [Thread-17230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:32:49.066 [DEBUG] [Thread-17230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:32:49.066 [DEBUG] [Thread-17230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:32:49.066 [DEBUG] [Thread-17230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:32:49.084 [INFO] [Thread-17230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:32:49.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-25T19:32:49.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:32:49.906 [DEBUG] [Thread-17230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:32:49.907 [DEBUG] [Thread-17230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:32:49.955 [DEBUG] [Thread-17230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:32:49.955 [DEBUG] [Thread-17230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:32:49.965 [DEBUG] [Thread-17230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:32:49.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:32:49.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:32:49.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-25T19:32:49.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:32:49.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:32:49.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:32:50.002 [DEBUG] [Thread-17230] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:32:58.529 [DEBUG] [Thread-17232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:13.576 [DEBUG] [Thread-17233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:19.955 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:19.956 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:33:20.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:33:20.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-25T19:33:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 33, 8), 21.62, 23.87, 0.0, 30.33, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:33:20.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:33:08
2025-12-25T19:33:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:33:20.937 [DEBUG] [Thread-17234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:20.999 [DEBUG] [Thread-17235] [transport.py] [_log()] starting thread (client mode): 0xb95591b0
2025-12-25T19:33:20.999 [DEBUG] [Thread-17235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:33:21.019 [DEBUG] [Thread-17235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:33:21.019 [INFO] [Thread-17235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:33:21.022 [DEBUG] [Thread-17235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:33:21.022 [DEBUG] [Thread-17235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:33:21.022 [DEBUG] [Thread-17235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] client lang: <none>
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] server lang: <none>
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] kex follows: False
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] Compression: none
2025-12-25T19:33:21.023 [DEBUG] [Thread-17235] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:33:21.040 [DEBUG] [Thread-17235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:33:21.041 [DEBUG] [Thread-17235] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:33:21.041 [DEBUG] [Thread-17235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:33:21.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:33:21.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:33:21.043 [DEBUG] [Thread-17235] [transport.py] [_log()] userauth is OK
2025-12-25T19:33:21.043 [DEBUG] [Thread-17235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:33:21.044 [DEBUG] [Thread-17235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:33:21.044 [DEBUG] [Thread-17235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:33:21.044 [DEBUG] [Thread-17235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:33:21.067 [INFO] [Thread-17235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:33:21.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:33:21.705 [DEBUG] [Thread-17235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:33:21.705 [DEBUG] [Thread-17235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:33:21.706 [DEBUG] [Thread-17235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:33:21.747 [DEBUG] [Thread-17235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:33:21.747 [DEBUG] [Thread-17235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:33:21.749 [DEBUG] [Thread-17235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:33:21.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:33:21.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:33:21.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:33:21.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:33:21.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:33:21.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:33:21.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.730963 -999.00  +22.10  36.73     29   +3.50 1 1 2 1 1   886    0 17.12 -61.53 ----- 32.0 36.7 292.2 42.7 22.9 -25.6 22.8 -25.2 22.6 -23.7 22.9 -24.4
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.730963
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:33:21.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:33:08', tmtdew=21.62, humidity=23.87, cloud=0.0, wind=30.33, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:32:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:33:21.767 [DEBUG] [Thread-17235] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:33:21.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:33:21.849 [DEBUG] [Thread-17238] [transport.py] [_log()] starting thread (client mode): 0xb6bc31c0
2025-12-25T19:33:21.849 [DEBUG] [Thread-17238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:33:21.863 [DEBUG] [Thread-17238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:33:21.864 [INFO] [Thread-17238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:21.871 [DEBUG] [Thread-17238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] client lang: <none>
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] server lang: <none>
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] kex follows: False
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] Compression: none
2025-12-25T19:33:21.872 [DEBUG] [Thread-17238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:33:21.930 [DEBUG] [Thread-17238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:33:21.930 [DEBUG] [Thread-17238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:33:21.930 [DEBUG] [Thread-17238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:33:21.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:33:21.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:33:21.989 [DEBUG] [Thread-17238] [transport.py] [_log()] userauth is OK
2025-12-25T19:33:21.989 [DEBUG] [Thread-17238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:33:21.990 [DEBUG] [Thread-17238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:33:21.990 [DEBUG] [Thread-17238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:33:21.990 [DEBUG] [Thread-17238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:33:22.009 [INFO] [Thread-17238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:33:22.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-25T19:33:22.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:33:22.833 [DEBUG] [Thread-17238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:33:22.833 [DEBUG] [Thread-17238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:33:22.881 [DEBUG] [Thread-17238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:33:22.881 [DEBUG] [Thread-17238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:33:22.890 [DEBUG] [Thread-17238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:33:22.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:33:22.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-25T19:33:22.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-25T19:33:22.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:33:22.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:33:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:33:22.927 [DEBUG] [Thread-17238] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:33:28.606 [DEBUG] [Thread-17240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:43.657 [DEBUG] [Thread-17241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:33:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:33:52.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:33:52.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-25T19:33:53.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 33, 40), 21.6, 23.9, 0.0, 29.25, 22.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:33:53.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:33:40
2025-12-25T19:33:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:33:53.976 [DEBUG] [Thread-17242] [transport.py] [_log()] starting thread (client mode): 0xb6b773d0
2025-12-25T19:33:53.976 [DEBUG] [Thread-17242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:33:53.996 [DEBUG] [Thread-17242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:33:53.996 [INFO] [Thread-17242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:33:53.999 [DEBUG] [Thread-17242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:33:53.999 [DEBUG] [Thread-17242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:33:53.999 [DEBUG] [Thread-17242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:33:53.999 [DEBUG] [Thread-17242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] client lang: <none>
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] server lang: <none>
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] kex follows: False
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] Compression: none
2025-12-25T19:33:54.000 [DEBUG] [Thread-17242] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:33:54.014 [DEBUG] [Thread-17242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:33:54.014 [DEBUG] [Thread-17242] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:33:54.014 [DEBUG] [Thread-17242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:33:54.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:33:54.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:33:54.015 [DEBUG] [Thread-17242] [transport.py] [_log()] userauth is OK
2025-12-25T19:33:54.015 [DEBUG] [Thread-17242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:33:54.015 [DEBUG] [Thread-17242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:33:54.015 [DEBUG] [Thread-17242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:33:54.015 [DEBUG] [Thread-17242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:33:54.034 [INFO] [Thread-17242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:33:54.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:33:54.858 [DEBUG] [Thread-17242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:33:54.858 [DEBUG] [Thread-17242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:33:54.859 [DEBUG] [Thread-17242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:33:54.899 [DEBUG] [Thread-17242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:33:54.899 [DEBUG] [Thread-17242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:33:54.902 [DEBUG] [Thread-17242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:33:54.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:33:54.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:33:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:33:54.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:33:54.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:33:54.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:33:54.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:33:54.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:33:54.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:33:54.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.731310 -999.00  +22.10  34.02     29   +3.50 1 1 2 1 1   886    0 17.48 -56.37 ----- 26.3 34.0 294.6 41.6 22.8 -25.8 22.8 -25.2 22.6 -23.8 22.8 -24.5
2025-12-25T19:33:54.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:33:54.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:33:54.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.731310
2025-12-25T19:33:54.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:33:54.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:33:54.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:33:54.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:33:54.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:33:54.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:33:40', tmtdew=21.6, humidity=23.9, cloud=0.0, wind=29.25, temperature=22.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:33:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:33:54.931 [DEBUG] [Thread-17242] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:33: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-25T19:33:55.024 [DEBUG] [Thread-17245] [transport.py] [_log()] starting thread (client mode): 0xb6b753f0
2025-12-25T19:33:55.024 [DEBUG] [Thread-17245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:33:55.038 [DEBUG] [Thread-17245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:33:55.039 [INFO] [Thread-17245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:33:55.046 [DEBUG] [Thread-17245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] client lang: <none>
2025-12-25T19:33:55.047 [DEBUG] [Thread-17245] [transport.py] [_log()] server lang: <none>
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] kex follows: False
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] Compression: none
2025-12-25T19:33:55.048 [DEBUG] [Thread-17245] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:33:55.106 [DEBUG] [Thread-17245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:33:55.107 [DEBUG] [Thread-17245] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:33:55.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:33:55.108 [DEBUG] [Thread-17245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:33:55.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:33:55.162 [DEBUG] [Thread-17245] [transport.py] [_log()] userauth is OK
2025-12-25T19:33:55.162 [DEBUG] [Thread-17245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:33:55.163 [DEBUG] [Thread-17245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:33:55.163 [DEBUG] [Thread-17245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:33:55.163 [DEBUG] [Thread-17245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:33:55.181 [INFO] [Thread-17245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:33:55.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-25T19:33:55.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:33:56.003 [DEBUG] [Thread-17245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:33:56.004 [DEBUG] [Thread-17245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:33:56.052 [DEBUG] [Thread-17245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:33:56.052 [DEBUG] [Thread-17245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:33:56.061 [DEBUG] [Thread-17245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:33:56.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:33:56.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-25T19:33: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-25T19:33:56.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:33:56.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:33:56.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:33:56.097 [DEBUG] [Thread-17245] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:33:58.694 [DEBUG] [Thread-17247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:13.749 [DEBUG] [Thread-17248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:20.099 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:20.100 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:20.970 [DEBUG] [Thread-17249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:26.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:34:26.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:34:26.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-25T19:34:26.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 34, 12), 21.61, 23.87, 0.0, 26.98, 22.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:34:26.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:34:12
2025-12-25T19:34:26.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:34:27.094 [DEBUG] [Thread-17250] [transport.py] [_log()] starting thread (client mode): 0xb6b22b90
2025-12-25T19:34:27.094 [DEBUG] [Thread-17250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:34:27.114 [DEBUG] [Thread-17250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:34:27.114 [INFO] [Thread-17250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] client lang: <none>
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] server lang: <none>
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] kex follows: False
2025-12-25T19:34:27.117 [DEBUG] [Thread-17250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:34:27.118 [DEBUG] [Thread-17250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:34:27.118 [DEBUG] [Thread-17250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:34:27.118 [DEBUG] [Thread-17250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:34:27.118 [DEBUG] [Thread-17250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:34:27.118 [DEBUG] [Thread-17250] [transport.py] [_log()] Compression: none
2025-12-25T19:34:27.118 [DEBUG] [Thread-17250] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:34:27.134 [DEBUG] [Thread-17250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:34:27.134 [DEBUG] [Thread-17250] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:34:27.135 [DEBUG] [Thread-17250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:34:27.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:34:27.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:34:27.136 [DEBUG] [Thread-17250] [transport.py] [_log()] userauth is OK
2025-12-25T19:34:27.136 [DEBUG] [Thread-17250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:34:27.136 [DEBUG] [Thread-17250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:34:27.136 [DEBUG] [Thread-17250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:34:27.136 [DEBUG] [Thread-17250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:34:27.153 [INFO] [Thread-17250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:34:27.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:34:27.783 [DEBUG] [Thread-17250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:34:27.783 [DEBUG] [Thread-17250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:34:27.784 [DEBUG] [Thread-17250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:34:27.824 [DEBUG] [Thread-17250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:34:27.824 [DEBUG] [Thread-17250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:34:27.827 [DEBUG] [Thread-17250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:34:27.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:34:27.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:34:27.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:34:27.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:34:27.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:34:27.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:34:27.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:34:27.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:34:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.731657 -999.00  +22.10  36.82     29   +3.50 1 1 2 1 1   886    0 17.49 -50.25 ----- 33.3 36.8 298.0 43.0 22.8 -25.7 22.8 -25.1 22.6 -23.5 22.8 -24.5
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.731657
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:34:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:34:12', tmtdew=21.61, humidity=23.87, cloud=0.0, wind=26.98, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:33:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:34:27.845 [DEBUG] [Thread-17250] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:34:27.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-25T19:34:28.779 [DEBUG] [Thread-17253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:43.817 [DEBUG] [Thread-17254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:34:58.851 [DEBUG] [Thread-17255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:13.887 [DEBUG] [Thread-17256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:20.241 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:20.243 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:21.004 [DEBUG] [Thread-17257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:28.926 [DEBUG] [Thread-17258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:43.965 [DEBUG] [Thread-17259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:35:58.998 [DEBUG] [Thread-17260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:14.034 [DEBUG] [Thread-17261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:20.383 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:20.384 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:21.037 [DEBUG] [Thread-17262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:29.065 [DEBUG] [Thread-17263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:42.965 [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-25T19:36:44.099 [DEBUG] [Thread-17264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:36:59.130 [DEBUG] [Thread-17265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:37:12.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:37:12.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-25T19:37:13.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 36, 52), 21.42, 24.02, 0.0, 33.96, 22.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:37:13.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:36:52
2025-12-25T19:37:13.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:37:13.960 [DEBUG] [Thread-17266] [transport.py] [_log()] starting thread (client mode): 0xb6b62f50
2025-12-25T19:37:13.961 [DEBUG] [Thread-17266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:37:13.979 [DEBUG] [Thread-17266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:37:13.980 [INFO] [Thread-17266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:37:13.982 [DEBUG] [Thread-17266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] client lang: <none>
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] server lang: <none>
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] kex follows: False
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] Compression: none
2025-12-25T19:37:13.983 [DEBUG] [Thread-17266] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:37:13.999 [DEBUG] [Thread-17266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:37:13.999 [DEBUG] [Thread-17266] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:37:14.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:37:14.000 [DEBUG] [Thread-17266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:37:14.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:37:14.002 [DEBUG] [Thread-17266] [transport.py] [_log()] userauth is OK
2025-12-25T19:37:14.002 [DEBUG] [Thread-17266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:37:14.003 [DEBUG] [Thread-17266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:37:14.003 [DEBUG] [Thread-17266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:37:14.003 [DEBUG] [Thread-17266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:37:14.028 [INFO] [Thread-17266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:37:14.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:37:14.162 [DEBUG] [Thread-17268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:14.760 [DEBUG] [Thread-17266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:37:14.760 [DEBUG] [Thread-17266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:37:14.761 [DEBUG] [Thread-17266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:37:14.801 [DEBUG] [Thread-17266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:37:14.801 [DEBUG] [Thread-17266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:37:14.804 [DEBUG] [Thread-17266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:37:14.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:37:14.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:37:14.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:37:14.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:37:14.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:37:14.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:37:14.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:37:14.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:37:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:37:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.733740 -999.00  +21.90  37.58     30   +3.60 1 1 2 1 1   885    0 17.37 -48.08 ----- 40.4 37.6 298.8 44.6 22.6 -25.7 22.6 -25.1 22.3 -23.4 22.6 -24.4
2025-12-25T19:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.733740
2025-12-25T19:37:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:37:14.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:36:52', tmtdew=21.42, humidity=24.02, cloud=0.0, wind=33.96, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:36:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:37:14.839 [DEBUG] [Thread-17266] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:37:14.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-25T19:37:14.932 [DEBUG] [Thread-17270] [transport.py] [_log()] starting thread (client mode): 0xb6b22920
2025-12-25T19:37:14.932 [DEBUG] [Thread-17270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:37:14.948 [DEBUG] [Thread-17270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:37:14.948 [INFO] [Thread-17270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:37:14.955 [DEBUG] [Thread-17270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] client lang: <none>
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] server lang: <none>
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] kex follows: False
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] Compression: none
2025-12-25T19:37:14.956 [DEBUG] [Thread-17270] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:37:15.016 [DEBUG] [Thread-17270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:37:15.017 [DEBUG] [Thread-17270] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:37:15.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:37:15.018 [DEBUG] [Thread-17270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:37:15.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:37:15.075 [DEBUG] [Thread-17270] [transport.py] [_log()] userauth is OK
2025-12-25T19:37:15.075 [DEBUG] [Thread-17270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:37:15.075 [DEBUG] [Thread-17270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:37:15.076 [DEBUG] [Thread-17270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:37:15.076 [DEBUG] [Thread-17270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:37:15.101 [INFO] [Thread-17270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:37:15.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-25T19:37:15.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:37:15.941 [DEBUG] [Thread-17270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:37:15.942 [DEBUG] [Thread-17270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:37:15.990 [DEBUG] [Thread-17270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:37:15.990 [DEBUG] [Thread-17270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:37:16.000 [DEBUG] [Thread-17270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:37:16.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:37:16.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-25T19:37:16.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:37:16.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:37:16.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:37:16.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:37:16.034 [DEBUG] [Thread-17270] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:37:20.524 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:20.525 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:21.070 [DEBUG] [Thread-17272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:29.196 [DEBUG] [Thread-17273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:44.250 [DEBUG] [Thread-17274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:37:46.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:37:46.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:37:46.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-25T19:37:46.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 37, 24), 21.39, 24.05, 0.0, 32.69, 22.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:37:46.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:37:24
2025-12-25T19:37:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:37:47.077 [DEBUG] [Thread-17275] [transport.py] [_log()] starting thread (client mode): 0xb6bb71f0
2025-12-25T19:37:47.077 [DEBUG] [Thread-17275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:37:47.097 [DEBUG] [Thread-17275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:37:47.097 [INFO] [Thread-17275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] client lang: <none>
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] server lang: <none>
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] kex follows: False
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:37:47.100 [DEBUG] [Thread-17275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:37:47.101 [DEBUG] [Thread-17275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:37:47.101 [DEBUG] [Thread-17275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:37:47.101 [DEBUG] [Thread-17275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:37:47.101 [DEBUG] [Thread-17275] [transport.py] [_log()] Compression: none
2025-12-25T19:37:47.101 [DEBUG] [Thread-17275] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:37:47.118 [DEBUG] [Thread-17275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:37:47.119 [DEBUG] [Thread-17275] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:37:47.120 [DEBUG] [Thread-17275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:37:47.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:37:47.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:37:47.122 [DEBUG] [Thread-17275] [transport.py] [_log()] userauth is OK
2025-12-25T19:37:47.122 [DEBUG] [Thread-17275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:37:47.122 [DEBUG] [Thread-17275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:37:47.122 [DEBUG] [Thread-17275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:37:47.122 [DEBUG] [Thread-17275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:37:47.148 [INFO] [Thread-17275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:37:47.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:37:47.819 [DEBUG] [Thread-17275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:37:47.820 [DEBUG] [Thread-17275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:37:47.820 [DEBUG] [Thread-17275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:37:47.860 [DEBUG] [Thread-17275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:37:47.860 [DEBUG] [Thread-17275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:37:47.863 [DEBUG] [Thread-17275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:37:47.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:37:47.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:37:47.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:37:47.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:37:47.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:37:47.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:37:47.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:37:47.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:37:47.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:37:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.734088 -999.00  +21.90  41.54     30   +3.60 1 1 2 1 1   884    0 17.00 -45.89 ----- 45.0 41.5 295.4 49.1 22.6 -25.5 22.5 -25.2 22.3 -23.4 22.6 -24.4
2025-12-25T19:37:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:37:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:37:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.734088
2025-12-25T19:37:47.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:37:47.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:37:47.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:37:47.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:37:47.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:37:47.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:37:24', tmtdew=21.39, humidity=24.05, cloud=0.0, wind=32.69, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:37:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:37:47.892 [DEBUG] [Thread-17275] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:37:47.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-25T19:37:47.985 [DEBUG] [Thread-17278] [transport.py] [_log()] starting thread (client mode): 0xb6bb6800
2025-12-25T19:37:47.985 [DEBUG] [Thread-17278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:37:48.000 [DEBUG] [Thread-17278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:37:48.000 [INFO] [Thread-17278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:37:48.008 [DEBUG] [Thread-17278] [transport.py] [_log()] client lang: <none>
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] server lang: <none>
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] kex follows: False
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] Compression: none
2025-12-25T19:37:48.009 [DEBUG] [Thread-17278] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:37:48.065 [DEBUG] [Thread-17278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:37:48.065 [DEBUG] [Thread-17278] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:37:48.066 [DEBUG] [Thread-17278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:37:48.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:37:48.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:37:48.122 [DEBUG] [Thread-17278] [transport.py] [_log()] userauth is OK
2025-12-25T19:37:48.122 [DEBUG] [Thread-17278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:37:48.122 [DEBUG] [Thread-17278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:37:48.122 [DEBUG] [Thread-17278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:37:48.122 [DEBUG] [Thread-17278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:37:48.140 [INFO] [Thread-17278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:37:48.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-25T19:37:48.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:37:49.033 [DEBUG] [Thread-17278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:37:49.033 [DEBUG] [Thread-17278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:37:49.081 [DEBUG] [Thread-17278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:37:49.081 [DEBUG] [Thread-17278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:37:49.090 [DEBUG] [Thread-17278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:37:49.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:37:49.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-25T19:37:49.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-25T19:37:49.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:37:49.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:37:49.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:37:49.124 [DEBUG] [Thread-17278] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:37:59.283 [DEBUG] [Thread-17280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:14.334 [DEBUG] [Thread-17281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:19.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:38:19.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:38: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-25T19:38:19.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 37, 56), 21.38, 24.07, 0.0, 32.52, 22.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:38:19.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:37:56
2025-12-25T19:38:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:38:20.173 [DEBUG] [Thread-17282] [transport.py] [_log()] starting thread (client mode): 0xb6b77f40
2025-12-25T19:38:20.173 [DEBUG] [Thread-17282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:38:20.196 [DEBUG] [Thread-17282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:38:20.196 [INFO] [Thread-17282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] client lang: <none>
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] server lang: <none>
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] kex follows: False
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] Compression: none
2025-12-25T19:38:20.200 [DEBUG] [Thread-17282] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:38:20.215 [DEBUG] [Thread-17282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:38:20.215 [DEBUG] [Thread-17282] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:38:20.215 [DEBUG] [Thread-17282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:38:20.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:38:20.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:38:20.216 [DEBUG] [Thread-17282] [transport.py] [_log()] userauth is OK
2025-12-25T19:38:20.216 [DEBUG] [Thread-17282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:38:20.216 [DEBUG] [Thread-17282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:38:20.216 [DEBUG] [Thread-17282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:38:20.216 [DEBUG] [Thread-17282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:38:20.246 [INFO] [Thread-17282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:38:20.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:38:20.665 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:20.666 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:21.029 [DEBUG] [Thread-17282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:38:21.029 [DEBUG] [Thread-17282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:38:21.029 [DEBUG] [Thread-17282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:38:21.070 [DEBUG] [Thread-17282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:38:21.070 [DEBUG] [Thread-17282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:38:21.073 [DEBUG] [Thread-17282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:38:21.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:38:21.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:38:21.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:38:21.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:38:21.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:38:21.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:38:21.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.734435 -999.00  +21.80  39.56     30   +3.60 1 1 2 1 1   884    0 16.89 -49.83 ----- 37.8 39.6 293.8 50.8 22.6 -25.7 22.5 -25.1 22.2 -23.3 22.5 -24.4
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.734435
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:38:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:38:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:38:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:38:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:38:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:37:56', tmtdew=21.38, humidity=24.07, cloud=0.0, wind=32.52, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:37:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:38:21.091 [DEBUG] [Thread-17282] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:38:21.102 [DEBUG] [Thread-17285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:21.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-25T19:38:21.175 [DEBUG] [Thread-17286] [transport.py] [_log()] starting thread (client mode): 0xb6bb7940
2025-12-25T19:38:21.175 [DEBUG] [Thread-17286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:38:21.190 [DEBUG] [Thread-17286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:38:21.190 [INFO] [Thread-17286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:38:21.197 [DEBUG] [Thread-17286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:38:21.197 [DEBUG] [Thread-17286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:38:21.197 [DEBUG] [Thread-17286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] client lang: <none>
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] server lang: <none>
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] kex follows: False
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] Compression: none
2025-12-25T19:38:21.198 [DEBUG] [Thread-17286] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:38:21.253 [DEBUG] [Thread-17286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:38:21.254 [DEBUG] [Thread-17286] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:38:21.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:38:21.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:38:21.254 [DEBUG] [Thread-17286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:38:21.310 [DEBUG] [Thread-17286] [transport.py] [_log()] userauth is OK
2025-12-25T19:38:21.310 [DEBUG] [Thread-17286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:38:21.310 [DEBUG] [Thread-17286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:38:21.310 [DEBUG] [Thread-17286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:38:21.310 [DEBUG] [Thread-17286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:38:21.327 [INFO] [Thread-17286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:38:21.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-25T19:38:21.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:38:22.190 [DEBUG] [Thread-17286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:38:22.191 [DEBUG] [Thread-17286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:38:22.238 [DEBUG] [Thread-17286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:38:22.239 [DEBUG] [Thread-17286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:38:22.247 [DEBUG] [Thread-17286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:38:22.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:38:22.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:38:22.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-25T19:38:22.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:38:22.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:38:22.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:38:22.279 [DEBUG] [Thread-17286] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:38:29.365 [DEBUG] [Thread-17288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:44.410 [DEBUG] [Thread-17289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:38:52.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:38:52.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:38:52.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-25T19:38:53.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 38, 28), 21.37, 24.09, 0.0, 31.79, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:38:53.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:38:28
2025-12-25T19:38:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:38:53.309 [DEBUG] [Thread-17290] [transport.py] [_log()] starting thread (client mode): 0xb6b7c850
2025-12-25T19:38:53.309 [DEBUG] [Thread-17290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:38:53.329 [DEBUG] [Thread-17290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:38:53.330 [INFO] [Thread-17290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] client lang: <none>
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] server lang: <none>
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] kex follows: False
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:38:53.333 [DEBUG] [Thread-17290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:38:53.334 [DEBUG] [Thread-17290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:38:53.334 [DEBUG] [Thread-17290] [transport.py] [_log()] Compression: none
2025-12-25T19:38:53.334 [DEBUG] [Thread-17290] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:38:53.350 [DEBUG] [Thread-17290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:38:53.350 [DEBUG] [Thread-17290] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:38:53.351 [DEBUG] [Thread-17290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:38:53.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:38:53.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:38:53.353 [DEBUG] [Thread-17290] [transport.py] [_log()] userauth is OK
2025-12-25T19:38:53.353 [DEBUG] [Thread-17290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:38:53.353 [DEBUG] [Thread-17290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:38:53.353 [DEBUG] [Thread-17290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:38:53.353 [DEBUG] [Thread-17290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:38:53.377 [INFO] [Thread-17290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:38:53.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:38:54.012 [DEBUG] [Thread-17290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:38:54.012 [DEBUG] [Thread-17290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:38:54.012 [DEBUG] [Thread-17290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:38:54.053 [DEBUG] [Thread-17290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:38:54.053 [DEBUG] [Thread-17290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:38:54.055 [DEBUG] [Thread-17290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:38:54.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:38:54.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:38:54.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:38:54.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:38:54.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:38:54.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:38:54.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:38:54.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:38:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:38:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.734782 -999.00  +21.80  39.94     30   +3.60 1 1 2 1 1   884    0 17.17 -50.32 ----- 38.0 39.9 292.6 49.5 22.5 -25.6 22.5 -25.1 22.2 -23.4 22.4 -24.4
2025-12-25T19:38:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:38:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:38:54.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.734782
2025-12-25T19:38:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:38:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:38:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:38:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:38:54.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:38:54.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:38:28', tmtdew=21.37, humidity=24.09, cloud=0.0, wind=31.79, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:38:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:38:54.081 [DEBUG] [Thread-17290] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:38:54.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-25T19:38:54.180 [DEBUG] [Thread-17293] [transport.py] [_log()] starting thread (client mode): 0xb955b3d0
2025-12-25T19:38:54.180 [DEBUG] [Thread-17293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:38:54.194 [DEBUG] [Thread-17293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:38:54.194 [INFO] [Thread-17293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] client lang: <none>
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] server lang: <none>
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] kex follows: False
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:38:54.202 [DEBUG] [Thread-17293] [transport.py] [_log()] Compression: none
2025-12-25T19:38:54.203 [DEBUG] [Thread-17293] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:38:54.258 [DEBUG] [Thread-17293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:38:54.258 [DEBUG] [Thread-17293] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:38:54.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:38:54.259 [DEBUG] [Thread-17293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:38:54.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:38:54.314 [DEBUG] [Thread-17293] [transport.py] [_log()] userauth is OK
2025-12-25T19:38:54.314 [DEBUG] [Thread-17293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:38:54.314 [DEBUG] [Thread-17293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:38:54.314 [DEBUG] [Thread-17293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:38:54.315 [DEBUG] [Thread-17293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:38:54.336 [INFO] [Thread-17293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:38:54.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-25T19:38:54.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:38:55.176 [DEBUG] [Thread-17293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:38:55.176 [DEBUG] [Thread-17293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:38:55.224 [DEBUG] [Thread-17293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:38:55.225 [DEBUG] [Thread-17293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:38:55.233 [DEBUG] [Thread-17293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:38:55.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:38: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-25T19:38: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-25T19:38:55.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:38:55.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:38:55.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:38:55.267 [DEBUG] [Thread-17293] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:38:59.440 [DEBUG] [Thread-17295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:14.485 [DEBUG] [Thread-17296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:20.804 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:20.805 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:21.134 [DEBUG] [Thread-17297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:25.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:39:25.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:39:25.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-25T19:39:25.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 39), 21.29, 24.05, 0.0, 29.66, 22.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:39:25.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:39:00
2025-12-25T19:39:26.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:39:26.275 [DEBUG] [Thread-17298] [transport.py] [_log()] starting thread (client mode): 0xb95b2560
2025-12-25T19:39:26.275 [DEBUG] [Thread-17298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:39:26.294 [DEBUG] [Thread-17298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:39:26.295 [INFO] [Thread-17298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:39:26.298 [DEBUG] [Thread-17298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:39:26.298 [DEBUG] [Thread-17298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:39:26.298 [DEBUG] [Thread-17298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:39:26.298 [DEBUG] [Thread-17298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:39:26.298 [DEBUG] [Thread-17298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:39:26.298 [DEBUG] [Thread-17298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] client lang: <none>
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] server lang: <none>
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] kex follows: False
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] Compression: none
2025-12-25T19:39:26.299 [DEBUG] [Thread-17298] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:39:26.317 [DEBUG] [Thread-17298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:39:26.318 [DEBUG] [Thread-17298] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:39:26.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:39:26.320 [DEBUG] [Thread-17298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:39:26.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:39:26.361 [DEBUG] [Thread-17298] [transport.py] [_log()] userauth is OK
2025-12-25T19:39:26.361 [DEBUG] [Thread-17298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:39:26.362 [DEBUG] [Thread-17298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:39:26.362 [DEBUG] [Thread-17298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:39:26.362 [DEBUG] [Thread-17298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:39:26.393 [INFO] [Thread-17298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:39:26.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:39:27.191 [DEBUG] [Thread-17298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:39:27.191 [DEBUG] [Thread-17298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:39:27.192 [DEBUG] [Thread-17298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:39:27.232 [DEBUG] [Thread-17298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:39:27.232 [DEBUG] [Thread-17298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:39:27.236 [DEBUG] [Thread-17298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:39:27.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:39:27.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:39:27.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:39:27.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:39:27.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:39:27.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:39:27.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:39:27.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:39:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:39:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.735129 -999.00  +21.80  33.82     30   +3.60 1 1 2 1 1   883    0 16.58 -51.29 ----- 34.5 33.8 296.4 44.1 22.4 -25.5 22.4 -25.1 22.1 -23.5 22.4 -24.5
2025-12-25T19:39:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:39:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:39:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.735129
2025-12-25T19:39:27.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:39:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:39:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:39:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:39:27.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:39:27.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:39:00', tmtdew=21.29, humidity=24.05, cloud=0.0, wind=29.66, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:38:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:39:27.264 [DEBUG] [Thread-17298] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:39:27.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-25T19:39:27.357 [DEBUG] [Thread-17301] [transport.py] [_log()] starting thread (client mode): 0xb95b1750
2025-12-25T19:39:27.358 [DEBUG] [Thread-17301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:39:27.373 [DEBUG] [Thread-17301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:39:27.373 [INFO] [Thread-17301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:39:27.381 [DEBUG] [Thread-17301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] client lang: <none>
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] server lang: <none>
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] kex follows: False
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] Compression: none
2025-12-25T19:39:27.382 [DEBUG] [Thread-17301] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:39:27.439 [DEBUG] [Thread-17301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:39:27.440 [DEBUG] [Thread-17301] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:39:27.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:39:27.441 [DEBUG] [Thread-17301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:39:27.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:39:27.495 [DEBUG] [Thread-17301] [transport.py] [_log()] userauth is OK
2025-12-25T19:39:27.495 [DEBUG] [Thread-17301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:39:27.496 [DEBUG] [Thread-17301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:39:27.496 [DEBUG] [Thread-17301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:39:27.496 [DEBUG] [Thread-17301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:39:27.519 [INFO] [Thread-17301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:39:27.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-25T19:39:27.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:39:28.368 [DEBUG] [Thread-17301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:39:28.368 [DEBUG] [Thread-17301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:39:28.416 [DEBUG] [Thread-17301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:39:28.417 [DEBUG] [Thread-17301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:39:28.426 [DEBUG] [Thread-17301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:39:28.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:39:28.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:39:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:39:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:39:28.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:39:28.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:39:28.462 [DEBUG] [Thread-17301] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:39:29.521 [DEBUG] [Thread-17303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:44.567 [DEBUG] [Thread-17304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:39:58.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:39:58.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:39:58.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:39:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 39, 32), 21.27, 24.09, 0.0, 30.1, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:39:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:39:32
2025-12-25T19:39:59.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:39:59.462 [DEBUG] [Thread-17305] [transport.py] [_log()] starting thread (client mode): 0xb6bc2710
2025-12-25T19:39:59.462 [DEBUG] [Thread-17305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:39:59.483 [DEBUG] [Thread-17305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:39:59.483 [INFO] [Thread-17305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] client lang: <none>
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] server lang: <none>
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] kex follows: False
2025-12-25T19:39:59.486 [DEBUG] [Thread-17305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:39:59.487 [DEBUG] [Thread-17305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:39:59.487 [DEBUG] [Thread-17305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:39:59.487 [DEBUG] [Thread-17305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:39:59.487 [DEBUG] [Thread-17305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:39:59.487 [DEBUG] [Thread-17305] [transport.py] [_log()] Compression: none
2025-12-25T19:39:59.487 [DEBUG] [Thread-17305] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:39:59.505 [DEBUG] [Thread-17305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:39:59.506 [DEBUG] [Thread-17305] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:39:59.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:39:59.507 [DEBUG] [Thread-17305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:39:59.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:39:59.509 [DEBUG] [Thread-17305] [transport.py] [_log()] userauth is OK
2025-12-25T19:39:59.509 [DEBUG] [Thread-17305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:39:59.509 [DEBUG] [Thread-17305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:39:59.509 [DEBUG] [Thread-17305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:39:59.509 [DEBUG] [Thread-17305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:39:59.533 [INFO] [Thread-17305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:39:59.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:39:59.606 [DEBUG] [Thread-17307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:00.197 [DEBUG] [Thread-17305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:40:00.197 [DEBUG] [Thread-17305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:40:00.197 [DEBUG] [Thread-17305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:40:00.238 [DEBUG] [Thread-17305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:40:00.238 [DEBUG] [Thread-17305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:40:00.242 [DEBUG] [Thread-17305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:40:00.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:40:00.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:40:00.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:40:00.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:40:00.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:40:00.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:40:00.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:40:00.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:40:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:40:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.735477 -999.00  +21.80  38.73     30   +3.60 1 1 2 1 1   883    0 17.26 -49.24 ----- 40.3 38.7 298.0 47.0 22.4 -25.5 22.3 -25.0 22.1 -23.5 22.4 -24.4
2025-12-25T19:40:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:40:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:40:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.735477
2025-12-25T19:40:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:40:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:40:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:40:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:40:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:40:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:39:32', tmtdew=21.27, humidity=24.09, cloud=0.0, wind=30.1, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:39:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:40:00.267 [DEBUG] [Thread-17305] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:40:00.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-25T19:40:00.363 [DEBUG] [Thread-17309] [transport.py] [_log()] starting thread (client mode): 0xb6bc3790
2025-12-25T19:40:00.363 [DEBUG] [Thread-17309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:40:00.378 [DEBUG] [Thread-17309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:40:00.378 [INFO] [Thread-17309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:40:00.385 [DEBUG] [Thread-17309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:40:00.385 [DEBUG] [Thread-17309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] client lang: <none>
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] server lang: <none>
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] kex follows: False
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] Compression: none
2025-12-25T19:40:00.386 [DEBUG] [Thread-17309] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:40:00.443 [DEBUG] [Thread-17309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:40:00.443 [DEBUG] [Thread-17309] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:40:00.444 [DEBUG] [Thread-17309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:40:00.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:40:00.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:40:00.499 [DEBUG] [Thread-17309] [transport.py] [_log()] userauth is OK
2025-12-25T19:40:00.499 [DEBUG] [Thread-17309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:40:00.500 [DEBUG] [Thread-17309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:40:00.500 [DEBUG] [Thread-17309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:40:00.500 [DEBUG] [Thread-17309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:40:00.519 [INFO] [Thread-17309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:40:00.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-25T19:40:00.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:40:01.348 [DEBUG] [Thread-17309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:40:01.348 [DEBUG] [Thread-17309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:40:01.398 [DEBUG] [Thread-17309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:40:01.398 [DEBUG] [Thread-17309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:40:01.407 [DEBUG] [Thread-17309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:40:01.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:40:01.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:40:01.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-25T19:40:01.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:40:01.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:40:01.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:40:01.443 [DEBUG] [Thread-17309] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:40:14.643 [DEBUG] [Thread-17311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:20.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:20.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:21.162 [DEBUG] [Thread-17312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:29.691 [DEBUG] [Thread-17313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:31.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:40:31.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:40:31.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-25T19:40:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 40, 4), 21.26, 24.1, 0.0, 28.58, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:40:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:40:04
2025-12-25T19:40:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:40:32.450 [DEBUG] [Thread-17314] [transport.py] [_log()] starting thread (client mode): 0xb6bf7cd0
2025-12-25T19:40:32.450 [DEBUG] [Thread-17314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:40:32.473 [DEBUG] [Thread-17314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:40:32.473 [INFO] [Thread-17314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] client lang: <none>
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] server lang: <none>
2025-12-25T19:40:32.476 [DEBUG] [Thread-17314] [transport.py] [_log()] kex follows: False
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] Compression: none
2025-12-25T19:40:32.477 [DEBUG] [Thread-17314] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:40:32.494 [DEBUG] [Thread-17314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:40:32.494 [DEBUG] [Thread-17314] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:40:32.495 [DEBUG] [Thread-17314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:40:32.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:40:32.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:40:32.497 [DEBUG] [Thread-17314] [transport.py] [_log()] userauth is OK
2025-12-25T19:40:32.497 [DEBUG] [Thread-17314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:40:32.498 [DEBUG] [Thread-17314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:40:32.498 [DEBUG] [Thread-17314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:40:32.498 [DEBUG] [Thread-17314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:40:32.522 [INFO] [Thread-17314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:40:32.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:40:33.296 [DEBUG] [Thread-17314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:40:33.296 [DEBUG] [Thread-17314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:40:33.296 [DEBUG] [Thread-17314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:40:33.337 [DEBUG] [Thread-17314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:40:33.337 [DEBUG] [Thread-17314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:40:33.341 [DEBUG] [Thread-17314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:40:33.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:40:33.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:40:33.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:40:33.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:40:33.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:40:33.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:40:33.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:40:33.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:40:33.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:40:33.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.735823 -999.00  +21.80  25.83     30   +3.60 1 1 1 1 1   883    0 17.35 -48.42 ----- 30.1 25.8 298.6 41.3 22.4 -25.5 22.3 -25.0 22.1 -23.2 22.3 -24.4
2025-12-25T19:40:33.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:40:33.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:40:33.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.735823
2025-12-25T19:40:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:40:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:40:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:40:33.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:40:33.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:40:33.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:40:04', tmtdew=21.26, humidity=24.1, cloud=0.0, wind=28.58, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:39:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:40:33.367 [DEBUG] [Thread-17314] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:40:33.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-25T19:40:33.461 [DEBUG] [Thread-17317] [transport.py] [_log()] starting thread (client mode): 0xb6bc3e20
2025-12-25T19:40:33.461 [DEBUG] [Thread-17317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:40:33.476 [DEBUG] [Thread-17317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:40:33.476 [INFO] [Thread-17317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:40:33.484 [DEBUG] [Thread-17317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] client lang: <none>
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] server lang: <none>
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] kex follows: False
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] Compression: none
2025-12-25T19:40:33.485 [DEBUG] [Thread-17317] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:40:33.543 [DEBUG] [Thread-17317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:40:33.544 [DEBUG] [Thread-17317] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:40:33.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:40:33.545 [DEBUG] [Thread-17317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:40:33.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:40:33.599 [DEBUG] [Thread-17317] [transport.py] [_log()] userauth is OK
2025-12-25T19:40:33.599 [DEBUG] [Thread-17317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:40:33.600 [DEBUG] [Thread-17317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:40:33.600 [DEBUG] [Thread-17317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:40:33.600 [DEBUG] [Thread-17317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:40:33.619 [INFO] [Thread-17317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:40:33.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-25T19:40:33.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:40:34.431 [DEBUG] [Thread-17317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:40:34.431 [DEBUG] [Thread-17317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:40:34.479 [DEBUG] [Thread-17317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:40:34.480 [DEBUG] [Thread-17317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:40:34.489 [DEBUG] [Thread-17317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:40:34.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:40:34.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-25T19:40:34.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-25T19:40:34.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:40:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:40:34.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:40:34.526 [DEBUG] [Thread-17317] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:40:44.730 [DEBUG] [Thread-17319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:40:59.780 [DEBUG] [Thread-17320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:04.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:41:04.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:41:04.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:41:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 40, 36), 21.2, 24.6, 0.0, 32.5, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:41:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:40:36
2025-12-25T19:41:05.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:41:05.531 [DEBUG] [Thread-17321] [transport.py] [_log()] starting thread (client mode): 0xb95b3fd0
2025-12-25T19:41:05.531 [DEBUG] [Thread-17321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:41:05.552 [DEBUG] [Thread-17321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:41:05.552 [INFO] [Thread-17321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] client lang: <none>
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] server lang: <none>
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] kex follows: False
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] Compression: none
2025-12-25T19:41:05.555 [DEBUG] [Thread-17321] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:41:05.563 [DEBUG] [Thread-17321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:41:05.563 [DEBUG] [Thread-17321] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:41:05.564 [DEBUG] [Thread-17321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:41:05.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:41:05.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:41:05.565 [DEBUG] [Thread-17321] [transport.py] [_log()] userauth is OK
2025-12-25T19:41:05.566 [DEBUG] [Thread-17321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:41:05.566 [DEBUG] [Thread-17321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:41:05.566 [DEBUG] [Thread-17321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:41:05.566 [DEBUG] [Thread-17321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:41:05.601 [INFO] [Thread-17321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:41:05.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:41:06.254 [DEBUG] [Thread-17321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:41:06.255 [DEBUG] [Thread-17321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:41:06.255 [DEBUG] [Thread-17321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:41:06.296 [DEBUG] [Thread-17321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:41:06.296 [DEBUG] [Thread-17321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:41:06.300 [DEBUG] [Thread-17321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:41:06.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:41:06.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:41:06.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:41:06.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:41:06.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:41:06.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:41:06.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:41:06.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:41:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:41:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.736171 -999.00  +21.80  31.99     30   +3.60 1 1 2 1 1   882    0 16.95 -49.06 ----- 33.2 32.0 294.3 42.3 22.4 -25.5 22.4 -24.9 22.1 -23.3 22.3 -24.4
2025-12-25T19:41:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:41:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:41:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.736171
2025-12-25T19:41:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:41:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:41:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:41:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:41:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:41:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:40:36', tmtdew=21.2, humidity=24.6, cloud=0.0, wind=32.5, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:40:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:41:06.327 [DEBUG] [Thread-17321] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:41:06.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-25T19:41:06.422 [DEBUG] [Thread-17324] [transport.py] [_log()] starting thread (client mode): 0xb6b00910
2025-12-25T19:41:06.422 [DEBUG] [Thread-17324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:41:06.437 [DEBUG] [Thread-17324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:41:06.437 [INFO] [Thread-17324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] client lang: <none>
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] server lang: <none>
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] kex follows: False
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] Compression: none
2025-12-25T19:41:06.445 [DEBUG] [Thread-17324] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:41:06.503 [DEBUG] [Thread-17324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:41:06.504 [DEBUG] [Thread-17324] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:41:06.504 [DEBUG] [Thread-17324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:41:06.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:41:06.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:41:06.559 [DEBUG] [Thread-17324] [transport.py] [_log()] userauth is OK
2025-12-25T19:41:06.559 [DEBUG] [Thread-17324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:41:06.559 [DEBUG] [Thread-17324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:41:06.560 [DEBUG] [Thread-17324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:41:06.560 [DEBUG] [Thread-17324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:41:06.578 [INFO] [Thread-17324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:41:06.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-25T19:41:06.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:41:07.440 [DEBUG] [Thread-17324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:41:07.441 [DEBUG] [Thread-17324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:41:07.489 [DEBUG] [Thread-17324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:41:07.489 [DEBUG] [Thread-17324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:41:07.498 [DEBUG] [Thread-17324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:41:07.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:41:07.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-25T19:41:07.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-25T19:41:07.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:41:07.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:41:07.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:41:07.535 [DEBUG] [Thread-17324] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:41:14.811 [DEBUG] [Thread-17326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:21.086 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:21.087 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:21.223 [DEBUG] [Thread-17327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:29.866 [DEBUG] [Thread-17328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:41:37.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:41:37.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-25T19:41:38.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 41, 8), 21.19, 24.64, 0.0, 34.16, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:41:38.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:41:08
2025-12-25T19:41:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:41:38.564 [DEBUG] [Thread-17329] [transport.py] [_log()] starting thread (client mode): 0xb6b00b20
2025-12-25T19:41:38.565 [DEBUG] [Thread-17329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:41:38.585 [DEBUG] [Thread-17329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:41:38.585 [INFO] [Thread-17329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:41:38.588 [DEBUG] [Thread-17329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:41:38.588 [DEBUG] [Thread-17329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:41:38.588 [DEBUG] [Thread-17329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:41:38.588 [DEBUG] [Thread-17329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:38.588 [DEBUG] [Thread-17329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] client lang: <none>
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] server lang: <none>
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] kex follows: False
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] Compression: none
2025-12-25T19:41:38.589 [DEBUG] [Thread-17329] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:41:38.607 [DEBUG] [Thread-17329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:41:38.607 [DEBUG] [Thread-17329] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:41:38.607 [DEBUG] [Thread-17329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:41:38.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:41:38.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:41:38.608 [DEBUG] [Thread-17329] [transport.py] [_log()] userauth is OK
2025-12-25T19:41:38.608 [DEBUG] [Thread-17329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:41:38.608 [DEBUG] [Thread-17329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:41:38.608 [DEBUG] [Thread-17329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:41:38.608 [DEBUG] [Thread-17329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:41:38.617 [INFO] [Thread-17329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:41:38.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:41:39.420 [DEBUG] [Thread-17329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:41:39.420 [DEBUG] [Thread-17329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:41:39.420 [DEBUG] [Thread-17329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:41:39.460 [DEBUG] [Thread-17329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:41:39.461 [DEBUG] [Thread-17329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:41:39.463 [DEBUG] [Thread-17329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:41:39.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:41:39.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:41:39.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:41:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:41:39.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:41:39.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:41:39.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:41:39.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.736865 -999.00  +21.80  36.08     30   +3.60 1 1 2 1 1   881    0 17.50 -46.68 ----- 30.8 36.1 296.2 41.0 22.3 -25.4 22.3 -24.9 22.0 -23.2 22.3 -24.1
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.736865
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:41:39.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:41:08', tmtdew=21.19, humidity=24.64, cloud=0.0, wind=34.16, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:41:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:41:39.482 [DEBUG] [Thread-17329] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:41:39.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-25T19:41:39.564 [DEBUG] [Thread-17332] [transport.py] [_log()] starting thread (client mode): 0xb955a3e0
2025-12-25T19:41:39.564 [DEBUG] [Thread-17332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:41:39.579 [DEBUG] [Thread-17332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:41:39.579 [INFO] [Thread-17332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] client lang: <none>
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] server lang: <none>
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] kex follows: False
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:41:39.586 [DEBUG] [Thread-17332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:41:39.587 [DEBUG] [Thread-17332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:41:39.587 [DEBUG] [Thread-17332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:41:39.587 [DEBUG] [Thread-17332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:41:39.587 [DEBUG] [Thread-17332] [transport.py] [_log()] Compression: none
2025-12-25T19:41:39.587 [DEBUG] [Thread-17332] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:41:39.641 [DEBUG] [Thread-17332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:41:39.642 [DEBUG] [Thread-17332] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:41:39.642 [DEBUG] [Thread-17332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:41:39.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:41:39.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:41:39.698 [DEBUG] [Thread-17332] [transport.py] [_log()] userauth is OK
2025-12-25T19:41:39.698 [DEBUG] [Thread-17332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:41:39.699 [DEBUG] [Thread-17332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:41:39.699 [DEBUG] [Thread-17332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:41:39.699 [DEBUG] [Thread-17332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:41:39.712 [INFO] [Thread-17332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:41:39.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-25T19:41:39.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:41:40.522 [DEBUG] [Thread-17332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:41:40.523 [DEBUG] [Thread-17332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:41:40.571 [DEBUG] [Thread-17332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:41:40.571 [DEBUG] [Thread-17332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:41:40.580 [DEBUG] [Thread-17332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:41:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:41:40.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-25T19:41:40.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-25T19:41:40.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:41:40.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:41:40.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:41:40.617 [DEBUG] [Thread-17332] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:41:44.904 [DEBUG] [Thread-17334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:41:59.954 [DEBUG] [Thread-17335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:10.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:42:10.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:42:10.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-25T19:42:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 41, 40), 21.2, 24.62, 0.0, 30.79, 21.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:42:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:41:40
2025-12-25T19:42:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:42:11.608 [DEBUG] [Thread-17336] [transport.py] [_log()] starting thread (client mode): 0xb6bc2dd0
2025-12-25T19:42:11.608 [DEBUG] [Thread-17336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:42:11.628 [DEBUG] [Thread-17336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:42:11.628 [INFO] [Thread-17336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:42:11.631 [DEBUG] [Thread-17336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:42:11.631 [DEBUG] [Thread-17336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] client lang: <none>
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] server lang: <none>
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] kex follows: False
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:42:11.632 [DEBUG] [Thread-17336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:42:11.633 [DEBUG] [Thread-17336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:42:11.633 [DEBUG] [Thread-17336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:42:11.633 [DEBUG] [Thread-17336] [transport.py] [_log()] Compression: none
2025-12-25T19:42:11.633 [DEBUG] [Thread-17336] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:42:11.652 [DEBUG] [Thread-17336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:42:11.653 [DEBUG] [Thread-17336] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:42:11.654 [DEBUG] [Thread-17336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:42:11.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:42:11.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:42:11.655 [DEBUG] [Thread-17336] [transport.py] [_log()] userauth is OK
2025-12-25T19:42:11.656 [DEBUG] [Thread-17336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:42:11.656 [DEBUG] [Thread-17336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:42:11.656 [DEBUG] [Thread-17336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:42:11.656 [DEBUG] [Thread-17336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:42:11.678 [INFO] [Thread-17336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:42:11.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:42:12.316 [DEBUG] [Thread-17336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:42:12.316 [DEBUG] [Thread-17336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:42:12.317 [DEBUG] [Thread-17336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:42:12.357 [DEBUG] [Thread-17336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:42:12.357 [DEBUG] [Thread-17336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:42:12.361 [DEBUG] [Thread-17336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:42:12.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:42:12.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:42:12.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:42:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:42:12.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:42:12.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:42:12.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:42:12.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:42:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:42:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.737213 -999.00  +21.80  24.20     30   +3.60 1 1 1 1 1   880    0 17.59 -45.05 ----- 37.4 24.2 306.1 36.2 22.3 -25.3 22.3 -24.9 22.0 -23.0 22.2 -24.1
2025-12-25T19:42:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:42:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:42:12.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.737213
2025-12-25T19:42:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:42:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:42:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:42:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:42:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:42:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:41:40', tmtdew=21.2, humidity=24.62, cloud=0.0, wind=30.79, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:41:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:42:12.389 [DEBUG] [Thread-17336] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:42:12.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-25T19:42:12.485 [DEBUG] [Thread-17339] [transport.py] [_log()] starting thread (client mode): 0xb6bb6350
2025-12-25T19:42:12.486 [DEBUG] [Thread-17339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:42:12.502 [DEBUG] [Thread-17339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:42:12.503 [INFO] [Thread-17339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:42:12.510 [DEBUG] [Thread-17339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:12.511 [DEBUG] [Thread-17339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] client lang: <none>
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] server lang: <none>
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] kex follows: False
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:42:12.512 [DEBUG] [Thread-17339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:42:12.513 [DEBUG] [Thread-17339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:42:12.513 [DEBUG] [Thread-17339] [transport.py] [_log()] Compression: none
2025-12-25T19:42:12.513 [DEBUG] [Thread-17339] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:42:12.569 [DEBUG] [Thread-17339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:42:12.569 [DEBUG] [Thread-17339] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:42:12.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:42:12.570 [DEBUG] [Thread-17339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:42:12.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:42:12.628 [DEBUG] [Thread-17339] [transport.py] [_log()] userauth is OK
2025-12-25T19:42:12.628 [DEBUG] [Thread-17339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:42:12.628 [DEBUG] [Thread-17339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:42:12.628 [DEBUG] [Thread-17339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:42:12.629 [DEBUG] [Thread-17339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:42:12.647 [INFO] [Thread-17339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:42:12.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-25T19:42:12.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:42:13.462 [DEBUG] [Thread-17339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:42:13.462 [DEBUG] [Thread-17339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:42:13.510 [DEBUG] [Thread-17339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:42:13.510 [DEBUG] [Thread-17339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:42:13.518 [DEBUG] [Thread-17339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:42:13.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:42:13.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-25T19:42: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') -> 00000000
2025-12-25T19:42:13.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:42:13.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:42:13.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:42:13.550 [DEBUG] [Thread-17339] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:42:14.989 [DEBUG] [Thread-17341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:21.280 [DEBUG] [Thread-17342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:30.028 [DEBUG] [Thread-17343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:40.525 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:40.526 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:42:43.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:42:43.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-25T19:42:44.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 42, 12), 21.16, 24.68, 0.0, 28.62, 21.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:42:44.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:42:12
2025-12-25T19:42:44.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:42:44.535 [DEBUG] [Thread-17344] [transport.py] [_log()] starting thread (client mode): 0xb6bf60b0
2025-12-25T19:42:44.535 [DEBUG] [Thread-17344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:42:44.556 [DEBUG] [Thread-17344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:42:44.556 [INFO] [Thread-17344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] client lang: <none>
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] server lang: <none>
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] kex follows: False
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:42:44.559 [DEBUG] [Thread-17344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:42:44.560 [DEBUG] [Thread-17344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:42:44.560 [DEBUG] [Thread-17344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:42:44.560 [DEBUG] [Thread-17344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:42:44.560 [DEBUG] [Thread-17344] [transport.py] [_log()] Compression: none
2025-12-25T19:42:44.560 [DEBUG] [Thread-17344] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:42:44.577 [DEBUG] [Thread-17344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:42:44.577 [DEBUG] [Thread-17344] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:42:44.578 [DEBUG] [Thread-17344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:42:44.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:42:44.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:42:44.580 [DEBUG] [Thread-17344] [transport.py] [_log()] userauth is OK
2025-12-25T19:42:44.580 [DEBUG] [Thread-17344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:42:44.581 [DEBUG] [Thread-17344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:42:44.581 [DEBUG] [Thread-17344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:42:44.581 [DEBUG] [Thread-17344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:42:44.599 [INFO] [Thread-17344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:42:44.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:42:45.068 [DEBUG] [Thread-17346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:42:45.354 [DEBUG] [Thread-17344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:42:45.354 [DEBUG] [Thread-17344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:42:45.355 [DEBUG] [Thread-17344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:42:45.396 [DEBUG] [Thread-17344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:42:45.396 [DEBUG] [Thread-17344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:42:45.400 [DEBUG] [Thread-17344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:42:45.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:42:45.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:42:45.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:42:45.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:42:45.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:42:45.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:42:45.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:42:45.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:42:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:42:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.737560 -999.00  +21.80  40.81     30   +3.60 1 1 2 1 1   880    0 17.13 -44.21 ----- 37.5 40.8 293.0 52.6 22.3 -25.3 22.3 -24.9 21.9 -23.1 22.2 -24.2
2025-12-25T19:42:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:42:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:42:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.737560
2025-12-25T19:42:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:42:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:42:45.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:42:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:42:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:42:45.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:42:12', tmtdew=21.16, humidity=24.68, cloud=0.0, wind=28.62, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:42:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:42:45.433 [DEBUG] [Thread-17344] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:42:45.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-25T19:42:45.528 [DEBUG] [Thread-17348] [transport.py] [_log()] starting thread (client mode): 0xb6bf7220
2025-12-25T19:42:45.528 [DEBUG] [Thread-17348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:42:45.542 [DEBUG] [Thread-17348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:42:45.542 [INFO] [Thread-17348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:42:45.549 [DEBUG] [Thread-17348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] client lang: <none>
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] server lang: <none>
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] kex follows: False
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] Compression: none
2025-12-25T19:42:45.550 [DEBUG] [Thread-17348] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:42:45.605 [DEBUG] [Thread-17348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:42:45.605 [DEBUG] [Thread-17348] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:42:45.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:42:45.606 [DEBUG] [Thread-17348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:42:45.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:42:45.663 [DEBUG] [Thread-17348] [transport.py] [_log()] userauth is OK
2025-12-25T19:42:45.663 [DEBUG] [Thread-17348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:42:45.663 [DEBUG] [Thread-17348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:42:45.663 [DEBUG] [Thread-17348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:42:45.663 [DEBUG] [Thread-17348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:42:45.680 [INFO] [Thread-17348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:42:45.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-25T19:42:45.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:42:46.514 [DEBUG] [Thread-17348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:42:46.514 [DEBUG] [Thread-17348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:42:46.562 [DEBUG] [Thread-17348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:42:46.562 [DEBUG] [Thread-17348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:42:46.571 [DEBUG] [Thread-17348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:42:46.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:42:46.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:42:46.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:42:46.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:42:46.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:42:46.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:42:46.602 [DEBUG] [Thread-17348] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:43:00.100 [DEBUG] [Thread-17350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:15.148 [DEBUG] [Thread-17351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:43:16.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:43:16.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-25T19:43:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 42, 44), 21.16, 24.68, 0.0, 31.02, 21.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:43:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:42:44
2025-12-25T19:43:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:43:17.615 [DEBUG] [Thread-17352] [transport.py] [_log()] starting thread (client mode): 0xb6bf5660
2025-12-25T19:43:17.615 [DEBUG] [Thread-17352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:43:17.635 [DEBUG] [Thread-17352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:43:17.635 [INFO] [Thread-17352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:43:17.638 [DEBUG] [Thread-17352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] client lang: <none>
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] server lang: <none>
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] kex follows: False
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] Compression: none
2025-12-25T19:43:17.639 [DEBUG] [Thread-17352] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:43:17.656 [DEBUG] [Thread-17352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:43:17.656 [DEBUG] [Thread-17352] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:43:17.656 [DEBUG] [Thread-17352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:43:17.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:43:17.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:43:17.700 [DEBUG] [Thread-17352] [transport.py] [_log()] userauth is OK
2025-12-25T19:43:17.700 [DEBUG] [Thread-17352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:43:17.700 [DEBUG] [Thread-17352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:43:17.700 [DEBUG] [Thread-17352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:43:17.700 [DEBUG] [Thread-17352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:43:17.716 [INFO] [Thread-17352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:43:17.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:43:18.380 [DEBUG] [Thread-17352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:43:18.380 [DEBUG] [Thread-17352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:43:18.380 [DEBUG] [Thread-17352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:43:18.421 [DEBUG] [Thread-17352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:43:18.421 [DEBUG] [Thread-17352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:43:18.423 [DEBUG] [Thread-17352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:43:18.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:43:18.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:43:18.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:43:18.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:43:18.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:43:18.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:43:18.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.737907 -999.00  +21.80  34.56     30   +3.60 1 1 2 1 1   879    0 17.43 -41.66 ----- 31.0 34.6 297.4 40.6 22.3 -25.2 22.2 -24.7 21.9 -23.0 22.1 -23.9
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.737907
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:43:18.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:43:18.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:42:44', tmtdew=21.16, humidity=24.68, cloud=0.0, wind=31.02, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:42:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:43:18.441 [DEBUG] [Thread-17352] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:43:18.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:43:18.525 [DEBUG] [Thread-17355] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T19:43:18.525 [DEBUG] [Thread-17355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:43:18.539 [DEBUG] [Thread-17355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:43:18.539 [INFO] [Thread-17355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] client lang: <none>
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] server lang: <none>
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] kex follows: False
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:43:18.546 [DEBUG] [Thread-17355] [transport.py] [_log()] Compression: none
2025-12-25T19:43:18.547 [DEBUG] [Thread-17355] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:43:18.602 [DEBUG] [Thread-17355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:43:18.602 [DEBUG] [Thread-17355] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:43:18.602 [DEBUG] [Thread-17355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:43:18.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:43:18.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:43:18.659 [DEBUG] [Thread-17355] [transport.py] [_log()] userauth is OK
2025-12-25T19:43:18.659 [DEBUG] [Thread-17355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:43:18.659 [DEBUG] [Thread-17355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:43:18.659 [DEBUG] [Thread-17355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:43:18.659 [DEBUG] [Thread-17355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:43:18.673 [INFO] [Thread-17355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:43:18.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-25T19:43:18.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:43:19.488 [DEBUG] [Thread-17355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:43:19.488 [DEBUG] [Thread-17355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:43:19.536 [DEBUG] [Thread-17355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:43:19.536 [DEBUG] [Thread-17355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:43:19.545 [DEBUG] [Thread-17355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:43:19.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:43:19.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:43:19.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:43:19.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:43:19.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:43:19.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:43:19.581 [DEBUG] [Thread-17355] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:43:21.349 [DEBUG] [Thread-17357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:30.185 [DEBUG] [Thread-17358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:45.231 [DEBUG] [Thread-17359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:45.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:45.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:43:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:43:49.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:43:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:43:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 43, 16), 21.19, 24.64, 0.0, 31.41, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:43:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:43:16
2025-12-25T19:43:50.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:43:50.671 [DEBUG] [Thread-17360] [transport.py] [_log()] starting thread (client mode): 0xb6bf6e30
2025-12-25T19:43:50.671 [DEBUG] [Thread-17360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:43:50.692 [DEBUG] [Thread-17360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:43:50.692 [INFO] [Thread-17360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] client lang: <none>
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] server lang: <none>
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] kex follows: False
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] Compression: none
2025-12-25T19:43:50.696 [DEBUG] [Thread-17360] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:43:50.714 [DEBUG] [Thread-17360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:43:50.714 [DEBUG] [Thread-17360] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:43:50.715 [DEBUG] [Thread-17360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:43:50.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:43:50.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:43:50.715 [DEBUG] [Thread-17360] [transport.py] [_log()] userauth is OK
2025-12-25T19:43:50.715 [DEBUG] [Thread-17360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:43:50.716 [DEBUG] [Thread-17360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:43:50.716 [DEBUG] [Thread-17360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:43:50.716 [DEBUG] [Thread-17360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:43:50.725 [INFO] [Thread-17360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:43:50.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:43:51.527 [DEBUG] [Thread-17360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:43:51.527 [DEBUG] [Thread-17360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:43:51.527 [DEBUG] [Thread-17360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:43:51.568 [DEBUG] [Thread-17360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:43:51.568 [DEBUG] [Thread-17360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:43:51.571 [DEBUG] [Thread-17360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:43:51.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:43:51.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:43:51.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:43:51.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:43:51.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:43:51.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:43:51.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:43:51.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:43:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:43:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.738254 -999.00  +21.70  29.43     30   +3.60 1 1 1 1 1   878    0 17.10 -43.28 ----- 28.3 29.4 296.2 41.8 22.3 -25.3 22.2 -24.8 21.9 -23.2 22.1 -24.1
2025-12-25T19:43:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:43:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:43:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.738254
2025-12-25T19:43:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:43:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:43:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:43:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:43:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:43:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:43:16', tmtdew=21.19, humidity=24.64, cloud=0.0, wind=31.41, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:43:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:43:51.590 [DEBUG] [Thread-17360] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:43:51.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-25T19:43:51.678 [DEBUG] [Thread-17363] [transport.py] [_log()] starting thread (client mode): 0xb6bf6d70
2025-12-25T19:43:51.678 [DEBUG] [Thread-17363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:43:51.693 [DEBUG] [Thread-17363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:43:51.693 [INFO] [Thread-17363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:43:51.700 [DEBUG] [Thread-17363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] client lang: <none>
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] server lang: <none>
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] kex follows: False
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] Compression: none
2025-12-25T19:43:51.701 [DEBUG] [Thread-17363] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:43:51.760 [DEBUG] [Thread-17363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:43:51.760 [DEBUG] [Thread-17363] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:43:51.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:43:51.762 [DEBUG] [Thread-17363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:43:51.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:43:51.816 [DEBUG] [Thread-17363] [transport.py] [_log()] userauth is OK
2025-12-25T19:43:51.816 [DEBUG] [Thread-17363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:43:51.816 [DEBUG] [Thread-17363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:43:51.816 [DEBUG] [Thread-17363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:43:51.816 [DEBUG] [Thread-17363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:43:51.835 [INFO] [Thread-17363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:43:51.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-25T19:43:51.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:43:52.660 [DEBUG] [Thread-17363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:43:52.661 [DEBUG] [Thread-17363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:43:52.708 [DEBUG] [Thread-17363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:43:52.708 [DEBUG] [Thread-17363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:43:52.718 [DEBUG] [Thread-17363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:43:52.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:43:52.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:43:52.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:43:52.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:43:52.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:43:52.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:43:52.755 [DEBUG] [Thread-17363] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:44:00.267 [DEBUG] [Thread-17365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:15.316 [DEBUG] [Thread-17366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:21.415 [DEBUG] [Thread-17367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:22.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:44:22.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:44:22.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-25T19:44:23.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 43, 48), 21.19, 24.62, 0.0, 36.47, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:44:23.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:43:48
2025-12-25T19:44:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:44:23.791 [DEBUG] [Thread-17368] [transport.py] [_log()] starting thread (client mode): 0xb6bb50f0
2025-12-25T19:44:23.791 [DEBUG] [Thread-17368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:44:23.811 [DEBUG] [Thread-17368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:44:23.811 [INFO] [Thread-17368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:44:23.814 [DEBUG] [Thread-17368] [transport.py] [_log()] client lang: <none>
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] server lang: <none>
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] kex follows: False
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] Compression: none
2025-12-25T19:44:23.815 [DEBUG] [Thread-17368] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:44:23.832 [DEBUG] [Thread-17368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:44:23.832 [DEBUG] [Thread-17368] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:44:23.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:44:23.833 [DEBUG] [Thread-17368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:44:23.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:44:23.877 [DEBUG] [Thread-17368] [transport.py] [_log()] userauth is OK
2025-12-25T19:44:23.877 [DEBUG] [Thread-17368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:44:23.877 [DEBUG] [Thread-17368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:44:23.877 [DEBUG] [Thread-17368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:44:23.877 [DEBUG] [Thread-17368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:44:23.909 [INFO] [Thread-17368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:44:23.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:44:24.583 [DEBUG] [Thread-17368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:44:24.583 [DEBUG] [Thread-17368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:44:24.584 [DEBUG] [Thread-17368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:44:24.624 [DEBUG] [Thread-17368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:44:24.624 [DEBUG] [Thread-17368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:44:24.628 [DEBUG] [Thread-17368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:44:24.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:44:24.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:44:24.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:44:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:44:24.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:44:24.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:44:24.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:44:24.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:44:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:44:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.738602 -999.00  +21.70  32.43     30   +3.60 1 1 2 1 1   877    0 17.43 -42.46 ----- 27.8 32.4 297.6 38.0 22.2 -25.2 22.2 -24.7 21.9 -23.0 22.2 -24.1
2025-12-25T19:44:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:44:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:44:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.738602
2025-12-25T19:44:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:44:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:44:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:44:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:44:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:44:24.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:43:48', tmtdew=21.19, humidity=24.62, cloud=0.0, wind=36.47, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:43:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:44:24.657 [DEBUG] [Thread-17368] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:44: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-25T19:44:24.752 [DEBUG] [Thread-17371] [transport.py] [_log()] starting thread (client mode): 0xb6bb4040
2025-12-25T19:44:24.752 [DEBUG] [Thread-17371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:44:24.767 [DEBUG] [Thread-17371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:44:24.767 [INFO] [Thread-17371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:44:24.774 [DEBUG] [Thread-17371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:44:24.775 [DEBUG] [Thread-17371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:44:24.775 [DEBUG] [Thread-17371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:44:24.775 [DEBUG] [Thread-17371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:24.775 [DEBUG] [Thread-17371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:24.775 [DEBUG] [Thread-17371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] client lang: <none>
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] server lang: <none>
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] kex follows: False
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] Compression: none
2025-12-25T19:44:24.776 [DEBUG] [Thread-17371] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:44:24.831 [DEBUG] [Thread-17371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:44:24.832 [DEBUG] [Thread-17371] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:44:24.832 [DEBUG] [Thread-17371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:44:24.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:44:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:44:24.887 [DEBUG] [Thread-17371] [transport.py] [_log()] userauth is OK
2025-12-25T19:44:24.888 [DEBUG] [Thread-17371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:44:24.888 [DEBUG] [Thread-17371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:44:24.888 [DEBUG] [Thread-17371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:44:24.888 [DEBUG] [Thread-17371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:44:24.906 [INFO] [Thread-17371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:44:24.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-25T19:44:24.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:44:25.734 [DEBUG] [Thread-17371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:44:25.734 [DEBUG] [Thread-17371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:44:25.782 [DEBUG] [Thread-17371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:44:25.783 [DEBUG] [Thread-17371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:44:25.792 [DEBUG] [Thread-17371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:44:25.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:44:25.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:44:25.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:44:25.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:44:25.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:44:25.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:44:25.826 [DEBUG] [Thread-17371] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:44:30.349 [DEBUG] [Thread-17373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:45.408 [DEBUG] [Thread-17374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:52.740 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:52.740 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:44:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:44:55.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:44:55.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-25T19:44:56.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 44, 53), 21.16, 24.67, 0.0, 31.71, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:44:56.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:44:53
2025-12-25T19:44:56.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:44:56.834 [DEBUG] [Thread-17375] [transport.py] [_log()] starting thread (client mode): 0xb95b1750
2025-12-25T19:44:56.834 [DEBUG] [Thread-17375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:44:56.848 [DEBUG] [Thread-17375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:44:56.848 [INFO] [Thread-17375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] client lang: <none>
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] server lang: <none>
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] kex follows: False
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] Compression: none
2025-12-25T19:44:56.851 [DEBUG] [Thread-17375] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:44:56.868 [DEBUG] [Thread-17375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:44:56.869 [DEBUG] [Thread-17375] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:44:56.869 [DEBUG] [Thread-17375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:44:56.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:44:56.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:44:56.871 [DEBUG] [Thread-17375] [transport.py] [_log()] userauth is OK
2025-12-25T19:44:56.871 [DEBUG] [Thread-17375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:44:56.871 [DEBUG] [Thread-17375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:44:56.871 [DEBUG] [Thread-17375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:44:56.872 [DEBUG] [Thread-17375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:44:56.895 [INFO] [Thread-17375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:44:56.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:44:57.693 [DEBUG] [Thread-17375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:44:57.693 [DEBUG] [Thread-17375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:44:57.693 [DEBUG] [Thread-17375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:44:57.734 [DEBUG] [Thread-17375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:44:57.734 [DEBUG] [Thread-17375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:44:57.737 [DEBUG] [Thread-17375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:44:57.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:44:57.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:44:57.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:44:57.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:44:57.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:44:57.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:44:57.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:44:57.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:44:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:44:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.738949 -999.00  +21.70  35.01     30   +3.50 1 1 2 1 1   876    0 16.69 -42.20 ----- 33.5 35.0 305.6 41.2 22.2 -25.4 22.2 -24.7 21.9 -23.1 22.1 -24.2
2025-12-25T19:44:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:44:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:44:57.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.738949
2025-12-25T19:44:57.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:44:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:44:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:44:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:44:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:44:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:44:53', tmtdew=21.16, humidity=24.67, cloud=0.0, wind=31.71, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:44:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:44:57.763 [DEBUG] [Thread-17375] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:44:57.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-25T19:44:57.863 [DEBUG] [Thread-17378] [transport.py] [_log()] starting thread (client mode): 0xb6b02860
2025-12-25T19:44:57.863 [DEBUG] [Thread-17378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:44:57.877 [DEBUG] [Thread-17378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:44:57.877 [INFO] [Thread-17378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:57.887 [DEBUG] [Thread-17378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] client lang: <none>
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] server lang: <none>
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] kex follows: False
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] Compression: none
2025-12-25T19:44:57.888 [DEBUG] [Thread-17378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:44:57.943 [DEBUG] [Thread-17378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:44:57.943 [DEBUG] [Thread-17378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:44:57.944 [DEBUG] [Thread-17378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:44:57.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:44:57.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:44:57.999 [DEBUG] [Thread-17378] [transport.py] [_log()] userauth is OK
2025-12-25T19:44:58.000 [DEBUG] [Thread-17378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:44:58.000 [DEBUG] [Thread-17378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:44:58.000 [DEBUG] [Thread-17378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:44:58.000 [DEBUG] [Thread-17378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:44:58.018 [INFO] [Thread-17378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:44:58.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-25T19:44:58.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:44:58.859 [DEBUG] [Thread-17378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:44:58.860 [DEBUG] [Thread-17378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:44:58.908 [DEBUG] [Thread-17378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:44:58.908 [DEBUG] [Thread-17378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:44:58.917 [DEBUG] [Thread-17378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:44:58.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:44:58.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-25T19:44:58.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-25T19:44:58.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:44:58.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:44:58.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:44:58.953 [DEBUG] [Thread-17378] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:45:00.442 [DEBUG] [Thread-17380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:45:15.491 [DEBUG] [Thread-17381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:45:21.470 [DEBUG] [Thread-17382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:45:28.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:45:28.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:45:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:45:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 45, 25), 21.19, 24.62, 0.0, 33.06, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:45:29.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:45:25
2025-12-25T19:45:29.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:45:29.983 [DEBUG] [Thread-17383] [transport.py] [_log()] starting thread (client mode): 0xb6b02650
2025-12-25T19:45:29.983 [DEBUG] [Thread-17383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:45:29.999 [DEBUG] [Thread-17383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:45:29.999 [INFO] [Thread-17383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] client lang: <none>
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] server lang: <none>
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] kex follows: False
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] Compression: none
2025-12-25T19:45:30.002 [DEBUG] [Thread-17383] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:45:30.018 [DEBUG] [Thread-17383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:45:30.019 [DEBUG] [Thread-17383] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:45:30.019 [DEBUG] [Thread-17383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:45:30.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:45:30.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:45:30.020 [DEBUG] [Thread-17383] [transport.py] [_log()] userauth is OK
2025-12-25T19:45:30.020 [DEBUG] [Thread-17383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:45:30.020 [DEBUG] [Thread-17383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:45:30.020 [DEBUG] [Thread-17383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:45:30.020 [DEBUG] [Thread-17383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:45:30.030 [INFO] [Thread-17383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:45:30.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:45:30.521 [DEBUG] [Thread-17385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:45:30.724 [DEBUG] [Thread-17383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:45:30.724 [DEBUG] [Thread-17383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:45:30.724 [DEBUG] [Thread-17383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:45:30.765 [DEBUG] [Thread-17383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:45:30.765 [DEBUG] [Thread-17383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:45:30.768 [DEBUG] [Thread-17383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:45:30.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:45:30.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:45:30.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:45:30.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:45:30.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:45:30.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.739296 -999.00  +21.70  35.06     30   +3.50 1 1 2 1 1   875    0 17.51 -40.82 ----- 41.2 35.1 299.8 38.5 22.2 -25.2 22.2 -24.8 21.9 -23.0 22.1 -24.1
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:45:30.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.739296
2025-12-25T19:45:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:45:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:45:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:45:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:45:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:45:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:45:25', tmtdew=21.19, humidity=24.62, cloud=0.0, wind=33.06, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:44:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:45:30.786 [DEBUG] [Thread-17383] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:45:30.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-25T19:45:30.871 [DEBUG] [Thread-17387] [transport.py] [_log()] starting thread (client mode): 0xb95b0a90
2025-12-25T19:45:30.871 [DEBUG] [Thread-17387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:45:30.885 [DEBUG] [Thread-17387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:45:30.885 [INFO] [Thread-17387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] client lang: <none>
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] server lang: <none>
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] kex follows: False
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] Compression: none
2025-12-25T19:45:30.893 [DEBUG] [Thread-17387] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:45:30.954 [DEBUG] [Thread-17387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:45:30.954 [DEBUG] [Thread-17387] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:45:30.954 [DEBUG] [Thread-17387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:45:30.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:45:30.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:45:31.010 [DEBUG] [Thread-17387] [transport.py] [_log()] userauth is OK
2025-12-25T19:45:31.010 [DEBUG] [Thread-17387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:45:31.010 [DEBUG] [Thread-17387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:45:31.010 [DEBUG] [Thread-17387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:45:31.010 [DEBUG] [Thread-17387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:45:31.025 [INFO] [Thread-17387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:45:31.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-25T19:45:31.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:45:31.854 [DEBUG] [Thread-17387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:45:31.854 [DEBUG] [Thread-17387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:45:31.902 [DEBUG] [Thread-17387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:45:31.902 [DEBUG] [Thread-17387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:45:31.910 [DEBUG] [Thread-17387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:45:31.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:45:31.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-25T19:45:31.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-25T19:45:31.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:45:31.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:45:31.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:45:31.942 [DEBUG] [Thread-17387] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:45:45.555 [DEBUG] [Thread-17389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:45:58.519 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:45:58.520 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:46:00.603 [DEBUG] [Thread-17390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:46:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:46:01.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:46:01.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-25T19:46:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 45, 57), 21.1, 24.69, 0.0, 35.09, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:46:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:45:57
2025-12-25T19:46:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:46:02.922 [DEBUG] [Thread-17391] [transport.py] [_log()] starting thread (client mode): 0xb955b700
2025-12-25T19:46:02.922 [DEBUG] [Thread-17391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:46:02.943 [DEBUG] [Thread-17391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:46:02.943 [INFO] [Thread-17391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:46:02.946 [DEBUG] [Thread-17391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:46:02.946 [DEBUG] [Thread-17391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] client lang: <none>
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] server lang: <none>
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] kex follows: False
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] Compression: none
2025-12-25T19:46:02.947 [DEBUG] [Thread-17391] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:46:02.965 [DEBUG] [Thread-17391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:46:02.965 [DEBUG] [Thread-17391] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:46:02.966 [DEBUG] [Thread-17391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:46:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:46:02.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:46:02.968 [DEBUG] [Thread-17391] [transport.py] [_log()] userauth is OK
2025-12-25T19:46:02.968 [DEBUG] [Thread-17391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:46:02.968 [DEBUG] [Thread-17391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:46:02.968 [DEBUG] [Thread-17391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:46:02.969 [DEBUG] [Thread-17391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:46:02.982 [INFO] [Thread-17391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:46:02.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:46:03.802 [DEBUG] [Thread-17391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:46:03.802 [DEBUG] [Thread-17391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:46:03.802 [DEBUG] [Thread-17391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:46:03.843 [DEBUG] [Thread-17391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:46:03.843 [DEBUG] [Thread-17391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:46:03.845 [DEBUG] [Thread-17391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:46:03.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:46:03.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:46:03.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:46:03.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:46:03.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:46:03.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:46:03.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.739643 -999.00  +21.70  27.81     30   +3.50 1 1 1 1 1   874    0 17.09 -39.81 ----- 28.5 27.8 294.0 41.5 22.1 -25.1 22.1 -24.8 21.8 -23.0 22.1 -24.1
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.739643
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:46:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:45:57', tmtdew=21.1, humidity=24.69, cloud=0.0, wind=35.09, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:45:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:46:03.865 [DEBUG] [Thread-17391] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:46:03.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-25T19:46:03.947 [DEBUG] [Thread-17394] [transport.py] [_log()] starting thread (client mode): 0xb95598a0
2025-12-25T19:46:03.947 [DEBUG] [Thread-17394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:46:03.963 [DEBUG] [Thread-17394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:46:03.963 [INFO] [Thread-17394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:46:03.970 [DEBUG] [Thread-17394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:03.971 [DEBUG] [Thread-17394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] client lang: <none>
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] server lang: <none>
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] kex follows: False
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:46:03.972 [DEBUG] [Thread-17394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:46:03.973 [DEBUG] [Thread-17394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:46:03.973 [DEBUG] [Thread-17394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:46:03.973 [DEBUG] [Thread-17394] [transport.py] [_log()] Compression: none
2025-12-25T19:46:03.973 [DEBUG] [Thread-17394] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:46:04.030 [DEBUG] [Thread-17394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:46:04.031 [DEBUG] [Thread-17394] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:46:04.031 [DEBUG] [Thread-17394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:46:04.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:46:04.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:46:04.086 [DEBUG] [Thread-17394] [transport.py] [_log()] userauth is OK
2025-12-25T19:46:04.086 [DEBUG] [Thread-17394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:46:04.086 [DEBUG] [Thread-17394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:46:04.086 [DEBUG] [Thread-17394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:46:04.086 [DEBUG] [Thread-17394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:46:04.102 [INFO] [Thread-17394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:46:04.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-25T19:46:04.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:46:04.922 [DEBUG] [Thread-17394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:46:04.922 [DEBUG] [Thread-17394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:46:04.970 [DEBUG] [Thread-17394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:46:04.970 [DEBUG] [Thread-17394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:46:04.981 [DEBUG] [Thread-17394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:46:04.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:46:04.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-25T19:46:04.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:46:05.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:46:05.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:46:05.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:46:05.018 [DEBUG] [Thread-17394] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:46:15.636 [DEBUG] [Thread-17396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:46:21.532 [DEBUG] [Thread-17397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:46:30.681 [DEBUG] [Thread-17398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:46:35.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:46:35.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:46:35.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:46:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 46, 29), 21.09, 24.69, 0.0, 34.93, 21.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:46:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:46:29
2025-12-25T19:46:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:46:36.003 [DEBUG] [Thread-17399] [transport.py] [_log()] starting thread (client mode): 0xb6bb7d00
2025-12-25T19:46:36.003 [DEBUG] [Thread-17399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:46:36.022 [DEBUG] [Thread-17399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:46:36.022 [INFO] [Thread-17399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:46:36.026 [DEBUG] [Thread-17399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:46:36.026 [DEBUG] [Thread-17399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:46:36.026 [DEBUG] [Thread-17399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] client lang: <none>
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] server lang: <none>
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] kex follows: False
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:46:36.027 [DEBUG] [Thread-17399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:46:36.028 [DEBUG] [Thread-17399] [transport.py] [_log()] Compression: none
2025-12-25T19:46:36.028 [DEBUG] [Thread-17399] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:46:36.045 [DEBUG] [Thread-17399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:46:36.046 [DEBUG] [Thread-17399] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:46:36.046 [DEBUG] [Thread-17399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:46:36.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:46:36.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:46:36.089 [DEBUG] [Thread-17399] [transport.py] [_log()] userauth is OK
2025-12-25T19:46:36.089 [DEBUG] [Thread-17399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:46:36.090 [DEBUG] [Thread-17399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:46:36.090 [DEBUG] [Thread-17399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:46:36.090 [DEBUG] [Thread-17399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:46:36.110 [INFO] [Thread-17399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:46:36.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:46:36.770 [DEBUG] [Thread-17399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:46:36.770 [DEBUG] [Thread-17399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:46:36.771 [DEBUG] [Thread-17399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:46:36.811 [DEBUG] [Thread-17399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:46:36.811 [DEBUG] [Thread-17399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:46:36.814 [DEBUG] [Thread-17399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:46:36.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:46:36.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:46:36.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:46:36.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:46:36.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:46:36.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:46:36.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:46:36.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:46:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:46:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.739990 -999.00  +21.70  32.76     30   +3.50 1 1 2 1 1   873    0 17.53 -36.89 ----- 33.8 32.8 290.4 39.1 22.1 -25.2 22.1 -24.8 21.9 -23.0 22.1 -24.1
2025-12-25T19:46:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:46:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:46:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.739990
2025-12-25T19:46:36.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:46:36.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:46:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:46:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:46:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:46:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:46:29', tmtdew=21.09, humidity=24.69, cloud=0.0, wind=34.93, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:45:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:46:36.839 [DEBUG] [Thread-17399] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:46:36.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-25T19:46:36.932 [DEBUG] [Thread-17402] [transport.py] [_log()] starting thread (client mode): 0xb6bb6920
2025-12-25T19:46:36.932 [DEBUG] [Thread-17402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:46:36.947 [DEBUG] [Thread-17402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:46:36.947 [INFO] [Thread-17402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:46:36.954 [DEBUG] [Thread-17402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] client lang: <none>
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] server lang: <none>
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] kex follows: False
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] Compression: none
2025-12-25T19:46:36.955 [DEBUG] [Thread-17402] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:46:37.015 [DEBUG] [Thread-17402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:46:37.015 [DEBUG] [Thread-17402] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:46:37.016 [DEBUG] [Thread-17402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:46:37.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:46:37.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:46:37.070 [DEBUG] [Thread-17402] [transport.py] [_log()] userauth is OK
2025-12-25T19:46:37.071 [DEBUG] [Thread-17402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:46:37.071 [DEBUG] [Thread-17402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:46:37.071 [DEBUG] [Thread-17402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:46:37.071 [DEBUG] [Thread-17402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:46:37.090 [INFO] [Thread-17402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:46:37.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-25T19:46:37.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:46:37.911 [DEBUG] [Thread-17402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:46:37.912 [DEBUG] [Thread-17402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:46:37.960 [DEBUG] [Thread-17402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:46:37.960 [DEBUG] [Thread-17402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:46:37.969 [DEBUG] [Thread-17402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:46:37.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:46: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')
2025-12-25T19:46:37.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:46:37.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:46:37.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:46:37.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:46:38.006 [DEBUG] [Thread-17402] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:46:45.711 [DEBUG] [Thread-17404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:00.760 [DEBUG] [Thread-17405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:04.557 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:04.558 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:08.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:47:08.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:47:08.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-25T19:47:08.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 47, 1), 21.09, 24.7, 0.0, 32.13, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:47:08.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:47:01
2025-12-25T19:47:08.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:47:09.000 [DEBUG] [Thread-17406] [transport.py] [_log()] starting thread (client mode): 0xb95b3280
2025-12-25T19:47:09.000 [DEBUG] [Thread-17406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:47:09.020 [DEBUG] [Thread-17406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:47:09.020 [INFO] [Thread-17406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] client lang: <none>
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] server lang: <none>
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] kex follows: False
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:47:09.023 [DEBUG] [Thread-17406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:47:09.024 [DEBUG] [Thread-17406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:47:09.024 [DEBUG] [Thread-17406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:47:09.024 [DEBUG] [Thread-17406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:47:09.024 [DEBUG] [Thread-17406] [transport.py] [_log()] Compression: none
2025-12-25T19:47:09.024 [DEBUG] [Thread-17406] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:47:09.041 [DEBUG] [Thread-17406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:47:09.041 [DEBUG] [Thread-17406] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:47:09.042 [DEBUG] [Thread-17406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:47:09.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:47:09.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:47:09.044 [DEBUG] [Thread-17406] [transport.py] [_log()] userauth is OK
2025-12-25T19:47:09.044 [DEBUG] [Thread-17406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:47:09.045 [DEBUG] [Thread-17406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:47:09.045 [DEBUG] [Thread-17406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:47:09.045 [DEBUG] [Thread-17406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:47:09.069 [INFO] [Thread-17406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:47:09.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:47:09.720 [DEBUG] [Thread-17406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:47:09.721 [DEBUG] [Thread-17406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:47:09.721 [DEBUG] [Thread-17406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:47:09.762 [DEBUG] [Thread-17406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:47:09.762 [DEBUG] [Thread-17406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:47:09.765 [DEBUG] [Thread-17406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:47:09.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:47:09.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:47:09.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:47:09.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:47:09.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:47:09.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:47:09.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:47:09.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:47:09.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:47:09.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.740685 -999.00  +21.60  34.44     30   +3.50 1 1 2 1 1   870    0 17.36 -37.73 ----- 36.0 34.4 297.6 41.1 22.1 -25.1 22.1 -24.6 21.8 -23.0 22.1 -24.1
2025-12-25T19:47:09.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:47:09.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:47:09.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.740685
2025-12-25T19:47:09.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:47:09.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:47:09.800 [DEBUG] [Thread-17406] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:47:09.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:47:09.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:47:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:47:09.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:47:01', tmtdew=21.09, humidity=24.7, cloud=0.0, wind=32.13, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:46:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:47: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-25T19:47:09.884 [DEBUG] [Thread-17409] [transport.py] [_log()] starting thread (client mode): 0xb6b62470
2025-12-25T19:47:09.885 [DEBUG] [Thread-17409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:47:09.899 [DEBUG] [Thread-17409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:47:09.899 [INFO] [Thread-17409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:47:09.907 [DEBUG] [Thread-17409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:47:09.907 [DEBUG] [Thread-17409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:47:09.907 [DEBUG] [Thread-17409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:47:09.907 [DEBUG] [Thread-17409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:09.907 [DEBUG] [Thread-17409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:09.907 [DEBUG] [Thread-17409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] client lang: <none>
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] server lang: <none>
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] kex follows: False
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] Compression: none
2025-12-25T19:47:09.908 [DEBUG] [Thread-17409] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:47:09.966 [DEBUG] [Thread-17409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:47:09.967 [DEBUG] [Thread-17409] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:47:09.967 [DEBUG] [Thread-17409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:47:09.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:47:09.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:47:10.022 [DEBUG] [Thread-17409] [transport.py] [_log()] userauth is OK
2025-12-25T19:47:10.023 [DEBUG] [Thread-17409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:47:10.023 [DEBUG] [Thread-17409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:47:10.023 [DEBUG] [Thread-17409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:47:10.023 [DEBUG] [Thread-17409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:47:10.042 [INFO] [Thread-17409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:47:10.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-25T19:47:10.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:47:10.874 [DEBUG] [Thread-17409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:47:10.874 [DEBUG] [Thread-17409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:47:10.922 [DEBUG] [Thread-17409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:47:10.922 [DEBUG] [Thread-17409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:47:10.931 [DEBUG] [Thread-17409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:47:10.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:47:10.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-25T19:47:10.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:47:10.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:47:10.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:47:10.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:47:10.967 [DEBUG] [Thread-17409] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:47:15.797 [DEBUG] [Thread-17411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:21.588 [DEBUG] [Thread-17412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:30.849 [DEBUG] [Thread-17413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:47:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:47:40.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:47:40.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-25T19:47:41.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 47, 33), 21.23, 24.47, 0.0, 33.34, 22.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:47:41.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:47:33
2025-12-25T19:47:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:47:41.967 [DEBUG] [Thread-17414] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2025-12-25T19:47:41.967 [DEBUG] [Thread-17414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:47:41.987 [DEBUG] [Thread-17414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:47:41.987 [INFO] [Thread-17414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:47:41.990 [DEBUG] [Thread-17414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] client lang: <none>
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] server lang: <none>
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] kex follows: False
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:47:41.991 [DEBUG] [Thread-17414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:47:41.992 [DEBUG] [Thread-17414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:47:41.992 [DEBUG] [Thread-17414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:47:41.992 [DEBUG] [Thread-17414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:47:41.992 [DEBUG] [Thread-17414] [transport.py] [_log()] Compression: none
2025-12-25T19:47:41.992 [DEBUG] [Thread-17414] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:47:42.010 [DEBUG] [Thread-17414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:47:42.011 [DEBUG] [Thread-17414] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:47:42.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:47:42.012 [DEBUG] [Thread-17414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:47:42.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:47:42.014 [DEBUG] [Thread-17414] [transport.py] [_log()] userauth is OK
2025-12-25T19:47:42.015 [DEBUG] [Thread-17414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:47:42.015 [DEBUG] [Thread-17414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:47:42.015 [DEBUG] [Thread-17414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:47:42.015 [DEBUG] [Thread-17414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:47:42.051 [INFO] [Thread-17414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:47:42.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:47:42.704 [DEBUG] [Thread-17414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:47:42.704 [DEBUG] [Thread-17414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:47:42.704 [DEBUG] [Thread-17414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:47:42.745 [DEBUG] [Thread-17414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:47:42.745 [DEBUG] [Thread-17414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:47:42.749 [DEBUG] [Thread-17414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:47:42.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:47:42.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:47:42.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:47:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:47:42.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:47:42.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:47:42.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:47:42.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:47:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:47:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.741032 -999.00  +21.60  32.21     30   +3.50 1 1 2 1 1   868    0 17.43 -36.02 ----- 35.7 32.2 294.6 43.5 22.1 -25.2 22.1 -24.8 21.8 -22.9 22.0 -24.0
2025-12-25T19:47:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:47:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:47:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.741032
2025-12-25T19:47:42.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:47:42.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:47:42.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:47:42.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:47:42.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:47:42.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:47:33', tmtdew=21.23, humidity=24.47, cloud=0.0, wind=33.34, temperature=22.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:47:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:47:42.776 [DEBUG] [Thread-17414] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:47:42.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:47:42.870 [DEBUG] [Thread-17417] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T19:47:42.870 [DEBUG] [Thread-17417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:47:42.885 [DEBUG] [Thread-17417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:47:42.885 [INFO] [Thread-17417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] client lang: <none>
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] server lang: <none>
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] kex follows: False
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:47:42.893 [DEBUG] [Thread-17417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:47:42.894 [DEBUG] [Thread-17417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:47:42.894 [DEBUG] [Thread-17417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:47:42.894 [DEBUG] [Thread-17417] [transport.py] [_log()] Compression: none
2025-12-25T19:47:42.894 [DEBUG] [Thread-17417] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:47:42.949 [DEBUG] [Thread-17417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:47:42.950 [DEBUG] [Thread-17417] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:47:42.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:47:42.951 [DEBUG] [Thread-17417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:47:42.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:47:43.006 [DEBUG] [Thread-17417] [transport.py] [_log()] userauth is OK
2025-12-25T19:47:43.007 [DEBUG] [Thread-17417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:47:43.007 [DEBUG] [Thread-17417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:47:43.007 [DEBUG] [Thread-17417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:47:43.007 [DEBUG] [Thread-17417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:47:43.032 [INFO] [Thread-17417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:47:43.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-25T19:47:43.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:47:43.854 [DEBUG] [Thread-17417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:47:43.854 [DEBUG] [Thread-17417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:47:43.902 [DEBUG] [Thread-17417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:47:43.902 [DEBUG] [Thread-17417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:47:43.912 [DEBUG] [Thread-17417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:47:43.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:47:43.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-25T19:47:43.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-25T19:47:43.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:47:43.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:47:43.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:47:43.949 [DEBUG] [Thread-17417] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:47:45.882 [DEBUG] [Thread-17419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:00.932 [DEBUG] [Thread-17420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:09.723 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:09.724 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:13.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:48:13.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:48:13.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-25T19:48:14.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 48, 5), 21.07, 24.72, 0.0, 36.81, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:48:14.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:48:05
2025-12-25T19:48:14.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:48:14.940 [DEBUG] [Thread-17421] [transport.py] [_log()] starting thread (client mode): 0xb6b63970
2025-12-25T19:48:14.940 [DEBUG] [Thread-17421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:48:14.961 [DEBUG] [Thread-17421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:48:14.962 [INFO] [Thread-17421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] client lang: <none>
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] server lang: <none>
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] kex follows: False
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:48:14.965 [DEBUG] [Thread-17421] [transport.py] [_log()] Compression: none
2025-12-25T19:48:14.966 [DEBUG] [Thread-17421] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:48:14.984 [DEBUG] [Thread-17421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:48:14.984 [DEBUG] [Thread-17421] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:48:14.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:48:14.985 [DEBUG] [Thread-17421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:48:14.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:48:14.987 [DEBUG] [Thread-17421] [transport.py] [_log()] userauth is OK
2025-12-25T19:48:14.988 [DEBUG] [Thread-17421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:48:14.988 [DEBUG] [Thread-17421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:48:14.988 [DEBUG] [Thread-17421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:48:14.988 [DEBUG] [Thread-17421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:48:15.012 [INFO] [Thread-17421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:48:15.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:48:15.671 [DEBUG] [Thread-17421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:48:15.671 [DEBUG] [Thread-17421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:48:15.671 [DEBUG] [Thread-17421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:48:15.711 [DEBUG] [Thread-17421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:48:15.712 [DEBUG] [Thread-17421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:48:15.714 [DEBUG] [Thread-17421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:48:15.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:48:15.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:48:15.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:48:15.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:48:15.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:48:15.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:48:15.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:48:15.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:48:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:48:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.741379 -999.00  +21.60  27.68     30   +3.50 1 1 1 1 1   866    0 17.33 -37.30 ----- 32.8 27.7 299.0 46.8 22.1 -25.2 22.1 -24.6 21.8 -22.9 22.0 -23.9
2025-12-25T19:48:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:48:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:48:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.741379
2025-12-25T19:48:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:48:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:48:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:48:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:48:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:48:15.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:48:05', tmtdew=21.07, humidity=24.72, cloud=0.0, wind=36.81, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:47:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:48:15.736 [DEBUG] [Thread-17421] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:48:15.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-25T19:48:15.831 [DEBUG] [Thread-17424] [transport.py] [_log()] starting thread (client mode): 0xb6bf6d40
2025-12-25T19:48:15.831 [DEBUG] [Thread-17424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:48:15.846 [DEBUG] [Thread-17424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:48:15.846 [INFO] [Thread-17424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] client lang: <none>
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] server lang: <none>
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] kex follows: False
2025-12-25T19:48:15.854 [DEBUG] [Thread-17424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:48:15.855 [DEBUG] [Thread-17424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:48:15.855 [DEBUG] [Thread-17424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:48:15.855 [DEBUG] [Thread-17424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:48:15.855 [DEBUG] [Thread-17424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:48:15.855 [DEBUG] [Thread-17424] [transport.py] [_log()] Compression: none
2025-12-25T19:48:15.855 [DEBUG] [Thread-17424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:48:15.914 [DEBUG] [Thread-17424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:48:15.914 [DEBUG] [Thread-17424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:48:15.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:48:15.915 [DEBUG] [Thread-17424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:48:15.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:48:15.965 [DEBUG] [Thread-17426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:15.970 [DEBUG] [Thread-17424] [transport.py] [_log()] userauth is OK
2025-12-25T19:48:15.971 [DEBUG] [Thread-17424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:48:15.971 [DEBUG] [Thread-17424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:48:15.972 [DEBUG] [Thread-17424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:48:15.972 [DEBUG] [Thread-17424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:48:15.996 [INFO] [Thread-17424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:48:15.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-25T19:48:15.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:48:16.848 [DEBUG] [Thread-17424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:48:16.848 [DEBUG] [Thread-17424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:48:16.896 [DEBUG] [Thread-17424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:48:16.896 [DEBUG] [Thread-17424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:48:16.905 [DEBUG] [Thread-17424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:48:16.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:48:16.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-25T19:48:16.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-25T19:48:16.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:48:16.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:48:16.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:48:16.942 [DEBUG] [Thread-17424] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:48:21.646 [DEBUG] [Thread-17427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:31.023 [DEBUG] [Thread-17428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:46.055 [DEBUG] [Thread-17429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:48:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:48:46.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:48:46.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-25T19:48:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 48, 37), 21.0, 24.77, 0.0, 39.35, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:48:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:48:37
2025-12-25T19:48:47.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:48:47.980 [DEBUG] [Thread-17430] [transport.py] [_log()] starting thread (client mode): 0xb6b76050
2025-12-25T19:48:47.981 [DEBUG] [Thread-17430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:48:48.000 [DEBUG] [Thread-17430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:48:48.000 [INFO] [Thread-17430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:48:48.001 [DEBUG] [Thread-17430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:48:48.001 [DEBUG] [Thread-17430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:48:48.001 [DEBUG] [Thread-17430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:48:48.001 [DEBUG] [Thread-17430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:48.001 [DEBUG] [Thread-17430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:48.001 [DEBUG] [Thread-17430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] client lang: <none>
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] server lang: <none>
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] kex follows: False
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] Compression: none
2025-12-25T19:48:48.002 [DEBUG] [Thread-17430] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:48:48.009 [DEBUG] [Thread-17430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:48:48.009 [DEBUG] [Thread-17430] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:48:48.010 [DEBUG] [Thread-17430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:48:48.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:48:48.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:48:48.010 [DEBUG] [Thread-17430] [transport.py] [_log()] userauth is OK
2025-12-25T19:48:48.010 [DEBUG] [Thread-17430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:48:48.011 [DEBUG] [Thread-17430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:48:48.011 [DEBUG] [Thread-17430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:48:48.011 [DEBUG] [Thread-17430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:48:48.022 [INFO] [Thread-17430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:48:48.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:48:48.663 [DEBUG] [Thread-17430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:48:48.663 [DEBUG] [Thread-17430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:48:48.663 [DEBUG] [Thread-17430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:48:48.704 [DEBUG] [Thread-17430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:48:48.704 [DEBUG] [Thread-17430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:48:48.707 [DEBUG] [Thread-17430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:48:48.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:48:48.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:48:48.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:48:48.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:48:48.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:48:48.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:48:48.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:48:48.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:48:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:48:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.741726 -999.00  +21.60  35.02     30   +3.60 1 1 2 1 1   864    0 17.11 -35.68 ----- 31.1 35.0 287.4 38.1 22.1 -25.1 22.0 -24.7 21.8 -23.0 22.0 -24.0
2025-12-25T19:48:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:48:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:48:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.741726
2025-12-25T19:48:48.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:48:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:48:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:48:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:48:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:48:48.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:48:37', tmtdew=21.0, humidity=24.77, cloud=0.0, wind=39.35, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:48:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:48:48.735 [DEBUG] [Thread-17430] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:48:48.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-25T19:48:48.841 [DEBUG] [Thread-17433] [transport.py] [_log()] starting thread (client mode): 0xb6bf6fb0
2025-12-25T19:48:48.841 [DEBUG] [Thread-17433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:48:48.856 [DEBUG] [Thread-17433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:48:48.856 [INFO] [Thread-17433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:48:48.864 [DEBUG] [Thread-17433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:48:48.864 [DEBUG] [Thread-17433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:48:48.864 [DEBUG] [Thread-17433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] client lang: <none>
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] server lang: <none>
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] kex follows: False
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:48:48.865 [DEBUG] [Thread-17433] [transport.py] [_log()] Compression: none
2025-12-25T19:48:48.866 [DEBUG] [Thread-17433] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:48:48.924 [DEBUG] [Thread-17433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:48:48.924 [DEBUG] [Thread-17433] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:48:48.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:48:48.924 [DEBUG] [Thread-17433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:48:48.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:48:48.981 [DEBUG] [Thread-17433] [transport.py] [_log()] userauth is OK
2025-12-25T19:48:48.981 [DEBUG] [Thread-17433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:48:48.982 [DEBUG] [Thread-17433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:48:48.982 [DEBUG] [Thread-17433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:48:48.982 [DEBUG] [Thread-17433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:48:49.006 [INFO] [Thread-17433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:48:49.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-25T19:48:49.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:48:49.830 [DEBUG] [Thread-17433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:48:49.831 [DEBUG] [Thread-17433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:48:49.879 [DEBUG] [Thread-17433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:48:49.879 [DEBUG] [Thread-17433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:48:49.889 [DEBUG] [Thread-17433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:48:49.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:48:49.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:48:49.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-25T19:48:49.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:48:49.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:48:49.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:48:49.930 [DEBUG] [Thread-17433] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:49:01.089 [DEBUG] [Thread-17435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:15.164 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:15.165 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:16.139 [DEBUG] [Thread-17436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:19.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:49:19.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:49:19.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:49:20.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 49, 9), 20.96, 24.82, 0.0, 37.62, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:49:20.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:49:09
2025-12-25T19:49:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:49:20.956 [DEBUG] [Thread-17437] [transport.py] [_log()] starting thread (client mode): 0xb6b77d60
2025-12-25T19:49:20.956 [DEBUG] [Thread-17437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:49:20.977 [DEBUG] [Thread-17437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:49:20.977 [INFO] [Thread-17437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:49:20.980 [DEBUG] [Thread-17437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] client lang: <none>
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] server lang: <none>
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] kex follows: False
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] Compression: none
2025-12-25T19:49:20.981 [DEBUG] [Thread-17437] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:49:20.997 [DEBUG] [Thread-17437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:49:20.997 [DEBUG] [Thread-17437] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:49:20.997 [DEBUG] [Thread-17437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:49:20.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:49:20.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:49:20.998 [DEBUG] [Thread-17437] [transport.py] [_log()] userauth is OK
2025-12-25T19:49:20.998 [DEBUG] [Thread-17437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:49:20.998 [DEBUG] [Thread-17437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:49:20.998 [DEBUG] [Thread-17437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:49:20.998 [DEBUG] [Thread-17437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:49:21.007 [INFO] [Thread-17437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:49:21.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:49:21.619 [DEBUG] [Thread-17437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:49:21.619 [DEBUG] [Thread-17437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:49:21.619 [DEBUG] [Thread-17437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:49:21.660 [DEBUG] [Thread-17437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:49:21.660 [DEBUG] [Thread-17437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:49:21.662 [DEBUG] [Thread-17437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:49:21.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:49:21.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:49:21.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:49:21.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:49:21.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:49:21.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:49:21.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:49:21.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.742074 -999.00  +21.60  29.01     30   +3.50 1 1 1 1 1   862    0 17.54 -34.42 ----- 29.4 29.0 304.3 40.0 22.1 -25.1 22.0 -24.6 21.7 -22.9 22.0 -23.9
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.742074
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:49:21.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:49:09', tmtdew=20.96, humidity=24.82, cloud=0.0, wind=37.62, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:48:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:49:21.680 [DEBUG] [Thread-17437] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:49:21.700 [DEBUG] [Thread-17440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:21.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-25T19:49:21.766 [DEBUG] [Thread-17441] [transport.py] [_log()] starting thread (client mode): 0xb95b34f0
2025-12-25T19:49:21.766 [DEBUG] [Thread-17441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:49:21.781 [DEBUG] [Thread-17441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:49:21.781 [INFO] [Thread-17441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] client lang: <none>
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] server lang: <none>
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] kex follows: False
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] Compression: none
2025-12-25T19:49:21.788 [DEBUG] [Thread-17441] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:49:21.843 [DEBUG] [Thread-17441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:49:21.843 [DEBUG] [Thread-17441] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:49:21.844 [DEBUG] [Thread-17441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:49:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:49:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:49:21.901 [DEBUG] [Thread-17441] [transport.py] [_log()] userauth is OK
2025-12-25T19:49:21.901 [DEBUG] [Thread-17441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:49:21.901 [DEBUG] [Thread-17441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:49:21.901 [DEBUG] [Thread-17441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:49:21.901 [DEBUG] [Thread-17441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:49:21.919 [INFO] [Thread-17441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:49:21.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:49:21.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:49:22.743 [DEBUG] [Thread-17441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:49:22.743 [DEBUG] [Thread-17441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:49:22.792 [DEBUG] [Thread-17441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:49:22.792 [DEBUG] [Thread-17441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:49:22.800 [DEBUG] [Thread-17441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:49:22.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:49:22.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-25T19:49:22.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-25T19:49:22.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:49:22.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:49:22.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:49:22.833 [DEBUG] [Thread-17441] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:49:31.170 [DEBUG] [Thread-17443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:46.231 [DEBUG] [Thread-17444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:49:52.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:49:52.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:49:52.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-25T19:49:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 49, 41), 20.98, 24.8, 0.0, 38.73, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:49:53.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:49:41
2025-12-25T19:49:53.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:49:53.826 [DEBUG] [Thread-17445] [transport.py] [_log()] starting thread (client mode): 0xb6b01030
2025-12-25T19:49:53.826 [DEBUG] [Thread-17445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:49:53.847 [DEBUG] [Thread-17445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:49:53.847 [INFO] [Thread-17445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] client lang: <none>
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] server lang: <none>
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] kex follows: False
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] Compression: none
2025-12-25T19:49:53.851 [DEBUG] [Thread-17445] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:49:53.868 [DEBUG] [Thread-17445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:49:53.868 [DEBUG] [Thread-17445] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:49:53.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:49:53.869 [DEBUG] [Thread-17445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:49:53.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:49:53.871 [DEBUG] [Thread-17445] [transport.py] [_log()] userauth is OK
2025-12-25T19:49:53.872 [DEBUG] [Thread-17445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:49:53.872 [DEBUG] [Thread-17445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:49:53.872 [DEBUG] [Thread-17445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:49:53.872 [DEBUG] [Thread-17445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:49:53.898 [INFO] [Thread-17445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:49:53.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:49:54.551 [DEBUG] [Thread-17445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:49:54.551 [DEBUG] [Thread-17445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:49:54.552 [DEBUG] [Thread-17445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:49:54.592 [DEBUG] [Thread-17445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:49:54.592 [DEBUG] [Thread-17445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:49:54.596 [DEBUG] [Thread-17445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:49:54.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:49:54.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:49:54.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:49:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:49:54.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:49:54.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:49:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:49:54.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:49:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:49:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.742421 -999.00  +21.60  35.42     30   +3.50 1 1 2 1 1   860    0 17.38 -33.92 ----- 31.7 35.4 298.0 38.4 22.0 -25.1 22.0 -24.6 21.7 -22.9 21.9 -23.9
2025-12-25T19:49:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:49:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:49:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.742421
2025-12-25T19:49:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:49:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:49:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:49:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:49:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:49:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:49:41', tmtdew=20.98, humidity=24.8, cloud=0.0, wind=38.73, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:49:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:49:54.622 [DEBUG] [Thread-17445] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:49:54.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-25T19:49:54.723 [DEBUG] [Thread-17448] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T19:49:54.724 [DEBUG] [Thread-17448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:49:54.739 [DEBUG] [Thread-17448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:49:54.739 [INFO] [Thread-17448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:49:54.747 [DEBUG] [Thread-17448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:49:54.748 [DEBUG] [Thread-17448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] client lang: <none>
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] server lang: <none>
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] kex follows: False
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:49:54.749 [DEBUG] [Thread-17448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:49:54.750 [DEBUG] [Thread-17448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:49:54.750 [DEBUG] [Thread-17448] [transport.py] [_log()] Compression: none
2025-12-25T19:49:54.750 [DEBUG] [Thread-17448] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:49:54.805 [DEBUG] [Thread-17448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:49:54.806 [DEBUG] [Thread-17448] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:49:54.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:49:54.807 [DEBUG] [Thread-17448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:49:54.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:49:54.861 [DEBUG] [Thread-17448] [transport.py] [_log()] userauth is OK
2025-12-25T19:49:54.862 [DEBUG] [Thread-17448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:49:54.862 [DEBUG] [Thread-17448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:49:54.862 [DEBUG] [Thread-17448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:49:54.862 [DEBUG] [Thread-17448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:49:54.880 [INFO] [Thread-17448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:49:54.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:49:54.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:49:55.703 [DEBUG] [Thread-17448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:49:55.703 [DEBUG] [Thread-17448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:49:55.751 [DEBUG] [Thread-17448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:49:55.752 [DEBUG] [Thread-17448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:49:55.760 [DEBUG] [Thread-17448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:49:55.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:49:55.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:49:55.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-25T19:49:55.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:49:55.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:49:55.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:49:55.794 [DEBUG] [Thread-17448] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:50:01.266 [DEBUG] [Thread-17450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:16.307 [DEBUG] [Thread-17451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:19.360 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:19.361 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:21.750 [DEBUG] [Thread-17452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:50:25.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:50:25.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-25T19:50:26.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 50, 13), 20.98, 24.77, 0.0, 40.23, 21.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:50:26.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:50:13
2025-12-25T19:50:26.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:50:26.801 [DEBUG] [Thread-17453] [transport.py] [_log()] starting thread (client mode): 0xb955bb20
2025-12-25T19:50:26.801 [DEBUG] [Thread-17453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:50:26.823 [DEBUG] [Thread-17453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:50:26.823 [INFO] [Thread-17453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] client lang: <none>
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] server lang: <none>
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] kex follows: False
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:50:26.826 [DEBUG] [Thread-17453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:50:26.827 [DEBUG] [Thread-17453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:50:26.827 [DEBUG] [Thread-17453] [transport.py] [_log()] Compression: none
2025-12-25T19:50:26.827 [DEBUG] [Thread-17453] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:50:26.842 [DEBUG] [Thread-17453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:50:26.843 [DEBUG] [Thread-17453] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:50:26.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:50:26.844 [DEBUG] [Thread-17453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:50:26.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:50:26.846 [DEBUG] [Thread-17453] [transport.py] [_log()] userauth is OK
2025-12-25T19:50:26.846 [DEBUG] [Thread-17453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:50:26.846 [DEBUG] [Thread-17453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:50:26.846 [DEBUG] [Thread-17453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:50:26.846 [DEBUG] [Thread-17453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:50:26.871 [INFO] [Thread-17453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:50:26.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:50:27.482 [DEBUG] [Thread-17453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:50:27.482 [DEBUG] [Thread-17453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:50:27.482 [DEBUG] [Thread-17453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:50:27.523 [DEBUG] [Thread-17453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:50:27.524 [DEBUG] [Thread-17453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:50:27.526 [DEBUG] [Thread-17453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:50:27.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:50:27.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:50:27.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:50:27.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:50:27.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:50:27.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:50:27.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:50:27.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:50:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:50:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.742768 -999.00  +21.60  25.00     30   +3.50 1 1 1 1 1   857    0 17.32 -33.01 ----- 32.4 25.0 307.0 34.2 22.0 -25.0 22.0 -24.6 21.7 -22.9 21.9 -23.9
2025-12-25T19:50:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:50:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:50:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.742768
2025-12-25T19:50:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:50:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:50:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:50:27.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:50:27.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:50:27.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:50:13', tmtdew=20.98, humidity=24.77, cloud=0.0, wind=40.23, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:49:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:50:27.553 [DEBUG] [Thread-17453] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:50: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-25T19:50:27.645 [DEBUG] [Thread-17456] [transport.py] [_log()] starting thread (client mode): 0xb6b63fd0
2025-12-25T19:50:27.645 [DEBUG] [Thread-17456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:50:27.659 [DEBUG] [Thread-17456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:50:27.659 [INFO] [Thread-17456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:50:27.667 [DEBUG] [Thread-17456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:50:27.667 [DEBUG] [Thread-17456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:50:27.667 [DEBUG] [Thread-17456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] client lang: <none>
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] server lang: <none>
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] kex follows: False
2025-12-25T19:50:27.668 [DEBUG] [Thread-17456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:50:27.669 [DEBUG] [Thread-17456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:50:27.669 [DEBUG] [Thread-17456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:50:27.669 [DEBUG] [Thread-17456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:50:27.669 [DEBUG] [Thread-17456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:50:27.669 [DEBUG] [Thread-17456] [transport.py] [_log()] Compression: none
2025-12-25T19:50:27.669 [DEBUG] [Thread-17456] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:50:27.726 [DEBUG] [Thread-17456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:50:27.727 [DEBUG] [Thread-17456] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:50:27.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:50:27.729 [DEBUG] [Thread-17456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:50:27.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:50:27.788 [DEBUG] [Thread-17456] [transport.py] [_log()] userauth is OK
2025-12-25T19:50:27.788 [DEBUG] [Thread-17456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:50:27.789 [DEBUG] [Thread-17456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:50:27.789 [DEBUG] [Thread-17456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:50:27.789 [DEBUG] [Thread-17456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:50:27.808 [INFO] [Thread-17456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:50:27.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:50:27.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:50:28.678 [DEBUG] [Thread-17456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:50:28.678 [DEBUG] [Thread-17456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:50:28.728 [DEBUG] [Thread-17456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:50:28.728 [DEBUG] [Thread-17456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:50:28.738 [DEBUG] [Thread-17456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:50:28.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:50:28.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-25T19:50:28.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:50:28.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:50:28.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:50:28.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:50:28.775 [DEBUG] [Thread-17456] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:50:31.340 [DEBUG] [Thread-17458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:46.397 [DEBUG] [Thread-17459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:50:58.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:50:58.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:50:58.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-25T19:50:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 50, 45), 20.96, 24.8, 0.0, 35.75, 21.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:50:59.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:50:45
2025-12-25T19:50:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:50:59.783 [DEBUG] [Thread-17460] [transport.py] [_log()] starting thread (client mode): 0xb6b23ca0
2025-12-25T19:50:59.783 [DEBUG] [Thread-17460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:50:59.804 [DEBUG] [Thread-17460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:50:59.804 [INFO] [Thread-17460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] client lang: <none>
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] server lang: <none>
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] kex follows: False
2025-12-25T19:50:59.807 [DEBUG] [Thread-17460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:50:59.808 [DEBUG] [Thread-17460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:50:59.808 [DEBUG] [Thread-17460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:50:59.808 [DEBUG] [Thread-17460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:50:59.808 [DEBUG] [Thread-17460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:50:59.808 [DEBUG] [Thread-17460] [transport.py] [_log()] Compression: none
2025-12-25T19:50:59.808 [DEBUG] [Thread-17460] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:50:59.825 [DEBUG] [Thread-17460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:50:59.825 [DEBUG] [Thread-17460] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:50:59.826 [DEBUG] [Thread-17460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:50:59.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:50:59.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:50:59.828 [DEBUG] [Thread-17460] [transport.py] [_log()] userauth is OK
2025-12-25T19:50:59.828 [DEBUG] [Thread-17460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:50:59.828 [DEBUG] [Thread-17460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:50:59.828 [DEBUG] [Thread-17460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:50:59.828 [DEBUG] [Thread-17460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:50:59.852 [INFO] [Thread-17460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:50:59.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:51:00.489 [DEBUG] [Thread-17460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:51:00.490 [DEBUG] [Thread-17460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:51:00.490 [DEBUG] [Thread-17460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:51:00.531 [DEBUG] [Thread-17460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:51:00.531 [DEBUG] [Thread-17460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:51:00.535 [DEBUG] [Thread-17460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:51:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:51:00.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:51:00.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:51:00.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:51:00.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:51:00.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:51:00.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:51:00.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:51:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:51:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.743115 -999.00  +21.50  29.14     30   +3.50 1 1 1 1 1   855    0 17.38 -32.39 ----- 26.6 29.1 295.6 39.4 22.0 -25.1 21.9 -24.6 21.7 -22.9 21.9 -23.9
2025-12-25T19:51:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:51:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:51:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.743115
2025-12-25T19:51:00.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:51:00.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:51:00.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:51:00.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:51:00.559 [DEBUG] [Thread-17460] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:51:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:51:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:50:45', tmtdew=20.96, humidity=24.8, cloud=0.0, wind=35.75, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:50:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:51:00.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:51:00.656 [DEBUG] [Thread-17463] [transport.py] [_log()] starting thread (client mode): 0xb955b460
2025-12-25T19:51:00.656 [DEBUG] [Thread-17463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:51:00.672 [DEBUG] [Thread-17463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:51:00.672 [INFO] [Thread-17463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:51:00.680 [DEBUG] [Thread-17463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:51:00.681 [DEBUG] [Thread-17463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:51:00.681 [DEBUG] [Thread-17463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:51:00.681 [DEBUG] [Thread-17463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:51:00.681 [DEBUG] [Thread-17463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:51:00.681 [DEBUG] [Thread-17463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] client lang: <none>
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] server lang: <none>
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] kex follows: False
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] Compression: none
2025-12-25T19:51:00.682 [DEBUG] [Thread-17463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:51:00.741 [DEBUG] [Thread-17463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:51:00.741 [DEBUG] [Thread-17463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:51:00.742 [DEBUG] [Thread-17463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:51:00.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:51:00.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:51:00.797 [DEBUG] [Thread-17463] [transport.py] [_log()] userauth is OK
2025-12-25T19:51:00.797 [DEBUG] [Thread-17463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:51:00.797 [DEBUG] [Thread-17463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:51:00.797 [DEBUG] [Thread-17463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:51:00.797 [DEBUG] [Thread-17463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:51:00.817 [INFO] [Thread-17463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:51:00.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-25T19:51:00.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:51:01.429 [DEBUG] [Thread-17465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:51:01.678 [DEBUG] [Thread-17463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:51:01.678 [DEBUG] [Thread-17463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:51:01.726 [DEBUG] [Thread-17463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:51:01.727 [DEBUG] [Thread-17463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:51:01.736 [DEBUG] [Thread-17463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:51:01.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:51:01.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-25T19:51:01.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-25T19:51:01.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:51:01.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:51:01.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:51:01.773 [DEBUG] [Thread-17463] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:51:16.480 [DEBUG] [Thread-17466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:51:21.802 [DEBUG] [Thread-17467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:51:23.862 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:51:23.863 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:51:31.514 [DEBUG] [Thread-17468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:51:31.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:51:31.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:51:31.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-25T19:51:32.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 51, 17), 20.95, 24.83, 0.0, 37.58, 21.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:51:32.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:51:17
2025-12-25T19:51:32.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:51:32.757 [DEBUG] [Thread-17469] [transport.py] [_log()] starting thread (client mode): 0xb6b632b0
2025-12-25T19:51:32.757 [DEBUG] [Thread-17469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:51:32.778 [DEBUG] [Thread-17469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:51:32.778 [INFO] [Thread-17469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:51:32.781 [DEBUG] [Thread-17469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] client lang: <none>
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] server lang: <none>
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] kex follows: False
2025-12-25T19:51:32.782 [DEBUG] [Thread-17469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:51:32.783 [DEBUG] [Thread-17469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:51:32.783 [DEBUG] [Thread-17469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:51:32.783 [DEBUG] [Thread-17469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:51:32.783 [DEBUG] [Thread-17469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:51:32.783 [DEBUG] [Thread-17469] [transport.py] [_log()] Compression: none
2025-12-25T19:51:32.783 [DEBUG] [Thread-17469] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:51:32.801 [DEBUG] [Thread-17469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:51:32.802 [DEBUG] [Thread-17469] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:51:32.802 [DEBUG] [Thread-17469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:51:32.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:51:32.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:51:32.804 [DEBUG] [Thread-17469] [transport.py] [_log()] userauth is OK
2025-12-25T19:51:32.805 [DEBUG] [Thread-17469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:51:32.805 [DEBUG] [Thread-17469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:51:32.805 [DEBUG] [Thread-17469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:51:32.805 [DEBUG] [Thread-17469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:51:32.831 [INFO] [Thread-17469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:51:32.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:51:33.491 [DEBUG] [Thread-17469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:51:33.492 [DEBUG] [Thread-17469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:51:33.492 [DEBUG] [Thread-17469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:51:33.532 [DEBUG] [Thread-17469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:51:33.533 [DEBUG] [Thread-17469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:51:33.535 [DEBUG] [Thread-17469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:51:33.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:51:33.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:51:33.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:51:33.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:51:33.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:51:33.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:51:33.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:51:33.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:51:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:51:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.743463 -999.00  +21.50  27.71     30   +3.50 1 1 1 1 1   851    0 17.43 -34.03 ----- 28.6 27.7 295.2 38.7 22.0 -25.1 21.9 -24.6 21.6 -22.9 21.9 -23.8
2025-12-25T19:51:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:51:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:51:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.743463
2025-12-25T19:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:51:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:51:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:51:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:51:17', tmtdew=20.95, humidity=24.83, cloud=0.0, wind=37.58, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:50:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:51:33.560 [DEBUG] [Thread-17469] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:51:33.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:51:33.653 [DEBUG] [Thread-17472] [transport.py] [_log()] starting thread (client mode): 0xb6b7e770
2025-12-25T19:51:33.653 [DEBUG] [Thread-17472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:51:33.668 [DEBUG] [Thread-17472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:51:33.668 [INFO] [Thread-17472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:51:33.675 [DEBUG] [Thread-17472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] client lang: <none>
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] server lang: <none>
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] kex follows: False
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:51:33.676 [DEBUG] [Thread-17472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:51:33.677 [DEBUG] [Thread-17472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:51:33.677 [DEBUG] [Thread-17472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:51:33.677 [DEBUG] [Thread-17472] [transport.py] [_log()] Compression: none
2025-12-25T19:51:33.677 [DEBUG] [Thread-17472] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:51:33.732 [DEBUG] [Thread-17472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:51:33.732 [DEBUG] [Thread-17472] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:51:33.733 [DEBUG] [Thread-17472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:51:33.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:51:33.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:51:33.789 [DEBUG] [Thread-17472] [transport.py] [_log()] userauth is OK
2025-12-25T19:51:33.789 [DEBUG] [Thread-17472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:51:33.789 [DEBUG] [Thread-17472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:51:33.790 [DEBUG] [Thread-17472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:51:33.790 [DEBUG] [Thread-17472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:51:33.809 [INFO] [Thread-17472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:51:33.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-25T19:51:33.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:51:34.655 [DEBUG] [Thread-17472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:51:34.656 [DEBUG] [Thread-17472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:51:34.703 [DEBUG] [Thread-17472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:51:34.704 [DEBUG] [Thread-17472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:51:34.712 [DEBUG] [Thread-17472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:51:34.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:51:34.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-25T19:51:34.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-25T19:51:34.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:51:34.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:51:34.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:51:34.746 [DEBUG] [Thread-17472] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:51:46.548 [DEBUG] [Thread-17474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:01.594 [DEBUG] [Thread-17475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:52:04.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:52:04.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-25T19:52:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 51, 50), 20.9, 24.83, 0.0, 32.13, 21.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:52:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:51:50
2025-12-25T19:52:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:52:05.710 [DEBUG] [Thread-17476] [transport.py] [_log()] starting thread (client mode): 0xb6b75c30
2025-12-25T19:52:05.710 [DEBUG] [Thread-17476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:52:05.730 [DEBUG] [Thread-17476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:52:05.730 [INFO] [Thread-17476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] client lang: <none>
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] server lang: <none>
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] kex follows: False
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:52:05.732 [DEBUG] [Thread-17476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:52:05.733 [DEBUG] [Thread-17476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:52:05.733 [DEBUG] [Thread-17476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:52:05.733 [DEBUG] [Thread-17476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:52:05.733 [DEBUG] [Thread-17476] [transport.py] [_log()] Compression: none
2025-12-25T19:52:05.733 [DEBUG] [Thread-17476] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:52:05.741 [DEBUG] [Thread-17476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:52:05.741 [DEBUG] [Thread-17476] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:52:05.742 [DEBUG] [Thread-17476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:52:05.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:52:05.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:52:05.743 [DEBUG] [Thread-17476] [transport.py] [_log()] userauth is OK
2025-12-25T19:52:05.743 [DEBUG] [Thread-17476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:52:05.743 [DEBUG] [Thread-17476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:52:05.743 [DEBUG] [Thread-17476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:52:05.744 [DEBUG] [Thread-17476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:52:05.767 [INFO] [Thread-17476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:52:05.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:52:06.388 [DEBUG] [Thread-17476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:52:06.388 [DEBUG] [Thread-17476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:52:06.389 [DEBUG] [Thread-17476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:52:06.429 [DEBUG] [Thread-17476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:52:06.429 [DEBUG] [Thread-17476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:52:06.433 [DEBUG] [Thread-17476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:52:06.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:52:06.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:52:06.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:52:06.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:52:06.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:52:06.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:52:06.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:52:06.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:52:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:52:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.743810 -999.00  +21.50  24.57     30   +3.50 1 1 1 1 1   848    0 17.18 -36.43 ----- 29.3 24.6 299.0 37.1 21.9 -25.1 21.9 -24.5 21.6 -22.8 21.9 -23.9
2025-12-25T19:52:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:52:06.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:52:06.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.743810
2025-12-25T19:52:06.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:52:06.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:52:06.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:52:06.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:52:06.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:52:06.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:51:50', tmtdew=20.9, humidity=24.83, cloud=0.0, wind=32.13, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:51:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:52:06.460 [DEBUG] [Thread-17476] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:52:06.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-25T19:52:06.554 [DEBUG] [Thread-17479] [transport.py] [_log()] starting thread (client mode): 0xb6b75a50
2025-12-25T19:52:06.554 [DEBUG] [Thread-17479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:52:06.568 [DEBUG] [Thread-17479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:52:06.568 [INFO] [Thread-17479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:52:06.575 [DEBUG] [Thread-17479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:52:06.575 [DEBUG] [Thread-17479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] client lang: <none>
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] server lang: <none>
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] kex follows: False
2025-12-25T19:52:06.576 [DEBUG] [Thread-17479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:52:06.577 [DEBUG] [Thread-17479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:52:06.577 [DEBUG] [Thread-17479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:52:06.577 [DEBUG] [Thread-17479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:52:06.577 [DEBUG] [Thread-17479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:52:06.577 [DEBUG] [Thread-17479] [transport.py] [_log()] Compression: none
2025-12-25T19:52:06.577 [DEBUG] [Thread-17479] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:52:06.640 [DEBUG] [Thread-17479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:52:06.641 [DEBUG] [Thread-17479] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:52:06.642 [DEBUG] [Thread-17479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:52:06.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:52:06.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:52:06.696 [DEBUG] [Thread-17479] [transport.py] [_log()] userauth is OK
2025-12-25T19:52:06.697 [DEBUG] [Thread-17479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:52:06.697 [DEBUG] [Thread-17479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:52:06.697 [DEBUG] [Thread-17479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:52:06.697 [DEBUG] [Thread-17479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:52:06.716 [INFO] [Thread-17479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:52:06.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-25T19:52:06.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:52:07.522 [DEBUG] [Thread-17479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:52:07.522 [DEBUG] [Thread-17479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:52:07.570 [DEBUG] [Thread-17479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:52:07.570 [DEBUG] [Thread-17479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:52:07.578 [DEBUG] [Thread-17479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:52:07.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:52:07.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:52:07.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:52:07.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:52:07.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:52:07.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:52:07.613 [DEBUG] [Thread-17479] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:52:16.628 [DEBUG] [Thread-17481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:21.855 [DEBUG] [Thread-17482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:29.672 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:29.674 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:31.672 [DEBUG] [Thread-17483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:52:37.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:52:37.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:52:37.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-25T19:52:38.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 52, 22), 20.91, 24.8, 0.0, 30.21, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:52:38.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:52:22
2025-12-25T19:52:38.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:52:38.659 [DEBUG] [Thread-17484] [transport.py] [_log()] starting thread (client mode): 0xb6b63100
2025-12-25T19:52:38.659 [DEBUG] [Thread-17484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:52:38.679 [DEBUG] [Thread-17484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:52:38.679 [INFO] [Thread-17484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:52:38.682 [DEBUG] [Thread-17484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:52:38.682 [DEBUG] [Thread-17484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:52:38.682 [DEBUG] [Thread-17484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:52:38.682 [DEBUG] [Thread-17484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:38.682 [DEBUG] [Thread-17484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:38.682 [DEBUG] [Thread-17484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] client lang: <none>
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] server lang: <none>
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] kex follows: False
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] Compression: none
2025-12-25T19:52:38.683 [DEBUG] [Thread-17484] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:52:38.698 [DEBUG] [Thread-17484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:52:38.699 [DEBUG] [Thread-17484] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:52:38.699 [DEBUG] [Thread-17484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:52:38.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:52:38.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:52:38.740 [DEBUG] [Thread-17484] [transport.py] [_log()] userauth is OK
2025-12-25T19:52:38.740 [DEBUG] [Thread-17484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:52:38.740 [DEBUG] [Thread-17484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:52:38.740 [DEBUG] [Thread-17484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:52:38.740 [DEBUG] [Thread-17484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:52:38.755 [INFO] [Thread-17484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:52:38.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:52:39.400 [DEBUG] [Thread-17484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:52:39.400 [DEBUG] [Thread-17484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:52:39.401 [DEBUG] [Thread-17484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:52:39.442 [DEBUG] [Thread-17484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:52:39.442 [DEBUG] [Thread-17484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:52:39.444 [DEBUG] [Thread-17484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:52:39.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:52:39.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:52:39.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:52:39.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:52:39.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:52:39.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:52:39.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.744504 -999.00  +21.50  39.41     30   +3.60 1 1 2 1 1   841    0 17.18 -37.28 ----- 43.4 39.4 293.0 47.7 21.9 -25.1 21.8 -24.6 21.6 -22.9 21.9 -23.9
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.744504
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:52:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:52:22', tmtdew=20.91, humidity=24.8, cloud=0.0, wind=30.21, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:52:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:52:39.465 [DEBUG] [Thread-17484] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:52:39.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-25T19:52:39.548 [DEBUG] [Thread-17487] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T19:52:39.548 [DEBUG] [Thread-17487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:52:39.563 [DEBUG] [Thread-17487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:52:39.563 [INFO] [Thread-17487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] client lang: <none>
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] server lang: <none>
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] kex follows: False
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] Compression: none
2025-12-25T19:52:39.570 [DEBUG] [Thread-17487] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:52:39.626 [DEBUG] [Thread-17487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:52:39.626 [DEBUG] [Thread-17487] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:52:39.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:52:39.626 [DEBUG] [Thread-17487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:52:39.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:52:39.683 [DEBUG] [Thread-17487] [transport.py] [_log()] userauth is OK
2025-12-25T19:52:39.684 [DEBUG] [Thread-17487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:52:39.684 [DEBUG] [Thread-17487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:52:39.684 [DEBUG] [Thread-17487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:52:39.684 [DEBUG] [Thread-17487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:52:39.697 [INFO] [Thread-17487] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:52:39.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-25T19:52:39.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:52:40.516 [DEBUG] [Thread-17487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:52:40.516 [DEBUG] [Thread-17487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:52:40.564 [DEBUG] [Thread-17487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:52:40.565 [DEBUG] [Thread-17487] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:52:40.573 [DEBUG] [Thread-17487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:52:40.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:52:40.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-25T19:52:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:52:40.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:52:40.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:52:40.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:52:40.604 [DEBUG] [Thread-17487] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:52:46.712 [DEBUG] [Thread-17489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:01.772 [DEBUG] [Thread-17490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:10.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:53:10.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:53:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:53:11.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 52, 54), 20.82, 24.88, 0.0, 33.67, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:53:11.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:52:54
2025-12-25T19:53:11.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:53:11.619 [DEBUG] [Thread-17491] [transport.py] [_log()] starting thread (client mode): 0xb6b20850
2025-12-25T19:53:11.619 [DEBUG] [Thread-17491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:53:11.638 [DEBUG] [Thread-17491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:53:11.639 [INFO] [Thread-17491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:11.642 [DEBUG] [Thread-17491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] client lang: <none>
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] server lang: <none>
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] kex follows: False
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] Compression: none
2025-12-25T19:53:11.643 [DEBUG] [Thread-17491] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:53:11.662 [DEBUG] [Thread-17491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:53:11.662 [DEBUG] [Thread-17491] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:53:11.663 [DEBUG] [Thread-17491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:53:11.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:53:11.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:53:11.666 [DEBUG] [Thread-17491] [transport.py] [_log()] userauth is OK
2025-12-25T19:53:11.666 [DEBUG] [Thread-17491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:53:11.666 [DEBUG] [Thread-17491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:53:11.666 [DEBUG] [Thread-17491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:53:11.666 [DEBUG] [Thread-17491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:53:11.689 [INFO] [Thread-17491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:53:11.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:53:12.328 [DEBUG] [Thread-17491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:53:12.329 [DEBUG] [Thread-17491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:53:12.329 [DEBUG] [Thread-17491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:53:12.370 [DEBUG] [Thread-17491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:53:12.370 [DEBUG] [Thread-17491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:53:12.374 [DEBUG] [Thread-17491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:53:12.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:53:12.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:53:12.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:53:12.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:53:12.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:53:12.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:53:12.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:53:12.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:53:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:53:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.744852 -999.00  +21.40  37.35     30   +3.50 1 1 2 1 1   836    0 17.32 -36.98 ----- 34.2 37.4 294.6 46.4 21.9 -25.0 21.9 -24.5 21.6 -22.9 21.8 -23.9
2025-12-25T19:53:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:53:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:53:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.744852
2025-12-25T19:53:12.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:53:12.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:53:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:53:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:53:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:53:12.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:52:54', tmtdew=20.82, humidity=24.88, cloud=0.0, wind=33.67, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:52:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:53:12.400 [DEBUG] [Thread-17491] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:53:12.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-25T19:53:12.493 [DEBUG] [Thread-17494] [transport.py] [_log()] starting thread (client mode): 0xb955ada0
2025-12-25T19:53:12.493 [DEBUG] [Thread-17494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:53:12.508 [DEBUG] [Thread-17494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:53:12.508 [INFO] [Thread-17494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:53:12.516 [DEBUG] [Thread-17494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:53:12.516 [DEBUG] [Thread-17494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:53:12.516 [DEBUG] [Thread-17494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:53:12.516 [DEBUG] [Thread-17494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] client lang: <none>
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] server lang: <none>
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] kex follows: False
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:53:12.517 [DEBUG] [Thread-17494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:53:12.518 [DEBUG] [Thread-17494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:53:12.518 [DEBUG] [Thread-17494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:53:12.518 [DEBUG] [Thread-17494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:53:12.518 [DEBUG] [Thread-17494] [transport.py] [_log()] Compression: none
2025-12-25T19:53:12.518 [DEBUG] [Thread-17494] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:53:12.574 [DEBUG] [Thread-17494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:53:12.574 [DEBUG] [Thread-17494] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:53:12.575 [DEBUG] [Thread-17494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:53:12.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:53:12.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:53:12.633 [DEBUG] [Thread-17494] [transport.py] [_log()] userauth is OK
2025-12-25T19:53:12.633 [DEBUG] [Thread-17494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:53:12.633 [DEBUG] [Thread-17494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:53:12.633 [DEBUG] [Thread-17494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:53:12.634 [DEBUG] [Thread-17494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:53:12.652 [INFO] [Thread-17494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:53:12.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-25T19:53:12.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:53:13.509 [DEBUG] [Thread-17494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:53:13.510 [DEBUG] [Thread-17494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:53:13.558 [DEBUG] [Thread-17494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:53:13.558 [DEBUG] [Thread-17494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:53:13.568 [DEBUG] [Thread-17494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:53:13.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:53:13.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:53: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') -> 00000000
2025-12-25T19:53:13.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:53:13.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:53:13.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:53:13.605 [DEBUG] [Thread-17494] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:53:16.807 [DEBUG] [Thread-17496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:21.921 [DEBUG] [Thread-17497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:31.844 [DEBUG] [Thread-17498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:36.443 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:36.445 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:53:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:53:43.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:53:43.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-25T19:53:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 53, 26), 20.78, 24.93, 0.0, 37.6, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:53:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:53:26
2025-12-25T19:53:44.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:53:44.578 [DEBUG] [Thread-17499] [transport.py] [_log()] starting thread (client mode): 0xb6b7fa90
2025-12-25T19:53:44.578 [DEBUG] [Thread-17499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:53:44.599 [DEBUG] [Thread-17499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:53:44.599 [INFO] [Thread-17499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:53:44.602 [DEBUG] [Thread-17499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] client lang: <none>
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] server lang: <none>
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] kex follows: False
2025-12-25T19:53:44.603 [DEBUG] [Thread-17499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:53:44.604 [DEBUG] [Thread-17499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:53:44.604 [DEBUG] [Thread-17499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:53:44.604 [DEBUG] [Thread-17499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:53:44.604 [DEBUG] [Thread-17499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:53:44.604 [DEBUG] [Thread-17499] [transport.py] [_log()] Compression: none
2025-12-25T19:53:44.604 [DEBUG] [Thread-17499] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:53:44.625 [DEBUG] [Thread-17499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:53:44.625 [DEBUG] [Thread-17499] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:53:44.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:53:44.626 [DEBUG] [Thread-17499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:53:44.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:53:44.628 [DEBUG] [Thread-17499] [transport.py] [_log()] userauth is OK
2025-12-25T19:53:44.629 [DEBUG] [Thread-17499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:53:44.629 [DEBUG] [Thread-17499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:53:44.629 [DEBUG] [Thread-17499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:53:44.629 [DEBUG] [Thread-17499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:53:44.656 [INFO] [Thread-17499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:53:44.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:53:45.287 [DEBUG] [Thread-17499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:53:45.287 [DEBUG] [Thread-17499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:53:45.287 [DEBUG] [Thread-17499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:53:45.328 [DEBUG] [Thread-17499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:53:45.328 [DEBUG] [Thread-17499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:53:45.331 [DEBUG] [Thread-17499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:53:45.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:53:45.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:53:45.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:53:45.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:53:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:53:45.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:53:45.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:53:45.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:53:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:53:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.745199 -999.00  +21.40  38.61     31   +3.60 1 1 2 1 1   832    0 17.24 -36.85 ----- 37.8 38.6 294.6 48.7 21.9 -25.0 21.8 -24.5 21.6 -22.8 21.8 -23.8
2025-12-25T19:53:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:53:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:53:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.745199
2025-12-25T19:53:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:53:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:53:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:53:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:53:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:53:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:53:26', tmtdew=20.78, humidity=24.93, cloud=0.0, wind=37.6, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:53:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:53:45.356 [DEBUG] [Thread-17499] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:53:45.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-25T19:53:45.451 [DEBUG] [Thread-17502] [transport.py] [_log()] starting thread (client mode): 0xb6b7f9a0
2025-12-25T19:53:45.451 [DEBUG] [Thread-17502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:53:45.465 [DEBUG] [Thread-17502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:53:45.465 [INFO] [Thread-17502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:53:45.472 [DEBUG] [Thread-17502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:53:45.472 [DEBUG] [Thread-17502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:53:45.472 [DEBUG] [Thread-17502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:53:45.472 [DEBUG] [Thread-17502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:45.472 [DEBUG] [Thread-17502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] client lang: <none>
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] server lang: <none>
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] kex follows: False
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:53:45.473 [DEBUG] [Thread-17502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:53:45.474 [DEBUG] [Thread-17502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:53:45.474 [DEBUG] [Thread-17502] [transport.py] [_log()] Compression: none
2025-12-25T19:53:45.474 [DEBUG] [Thread-17502] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:53:45.531 [DEBUG] [Thread-17502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:53:45.531 [DEBUG] [Thread-17502] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:53:45.532 [DEBUG] [Thread-17502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:53:45.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:53:45.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:53:45.587 [DEBUG] [Thread-17502] [transport.py] [_log()] userauth is OK
2025-12-25T19:53:45.587 [DEBUG] [Thread-17502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:53:45.588 [DEBUG] [Thread-17502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:53:45.588 [DEBUG] [Thread-17502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:53:45.588 [DEBUG] [Thread-17502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:53:45.606 [INFO] [Thread-17502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:53:45.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-25T19:53:45.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:53:46.514 [DEBUG] [Thread-17502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:53:46.515 [DEBUG] [Thread-17502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:53:46.563 [DEBUG] [Thread-17502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:53:46.563 [DEBUG] [Thread-17502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:53:46.572 [DEBUG] [Thread-17502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:53:46.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:53:46.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-25T19:53:46.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:53:46.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:53:46.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:53:46.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:53:46.606 [DEBUG] [Thread-17502] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:53:46.878 [DEBUG] [Thread-17504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:01.924 [DEBUG] [Thread-17505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:54:16.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:54:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:54:16.959 [DEBUG] [Thread-17506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:17.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 53, 58), 20.76, 24.98, 0.0, 35.31, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:54:17.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:53:58
2025-12-25T19:54:17.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:54:17.605 [DEBUG] [Thread-17507] [transport.py] [_log()] starting thread (client mode): 0xb95588b0
2025-12-25T19:54:17.606 [DEBUG] [Thread-17507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:54:17.619 [DEBUG] [Thread-17507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:54:17.619 [INFO] [Thread-17507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:17.622 [DEBUG] [Thread-17507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] client lang: <none>
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] server lang: <none>
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] kex follows: False
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] Compression: none
2025-12-25T19:54:17.623 [DEBUG] [Thread-17507] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:54:17.638 [DEBUG] [Thread-17507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:54:17.638 [DEBUG] [Thread-17507] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:54:17.638 [DEBUG] [Thread-17507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:54:17.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:54:17.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:54:17.640 [DEBUG] [Thread-17507] [transport.py] [_log()] userauth is OK
2025-12-25T19:54:17.640 [DEBUG] [Thread-17507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:54:17.640 [DEBUG] [Thread-17507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:54:17.641 [DEBUG] [Thread-17507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:54:17.641 [DEBUG] [Thread-17507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:54:17.677 [INFO] [Thread-17507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:54:17.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:54:18.306 [DEBUG] [Thread-17507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:54:18.307 [DEBUG] [Thread-17507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:54:18.307 [DEBUG] [Thread-17507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:54:18.348 [DEBUG] [Thread-17507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:54:18.348 [DEBUG] [Thread-17507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:54:18.352 [DEBUG] [Thread-17507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:54:18.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:54:18.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:54:18.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:54:18.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:54:18.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:54:18.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:54:18.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:54:18.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:54:18.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:54:18.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.745546 -999.00  +21.40  32.29     31   +3.60 1 1 2 1 1   827    0 17.32 -35.47 ----- 36.1 32.3 297.8 39.5 21.9 -25.0 21.8 -24.6 21.5 -22.9 21.8 -23.8
2025-12-25T19:54:18.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:54:18.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:54:18.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.745546
2025-12-25T19:54:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:54:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:54:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:54:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:54:18.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:54:18.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:53:58', tmtdew=20.76, humidity=24.98, cloud=0.0, wind=35.31, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:53:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:54:18.379 [DEBUG] [Thread-17507] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:54:18.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:54:18.472 [DEBUG] [Thread-17510] [transport.py] [_log()] starting thread (client mode): 0xb6b20790
2025-12-25T19:54:18.472 [DEBUG] [Thread-17510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:54:18.488 [DEBUG] [Thread-17510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:54:18.488 [INFO] [Thread-17510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:54:18.496 [DEBUG] [Thread-17510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:54:18.497 [DEBUG] [Thread-17510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] client lang: <none>
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] server lang: <none>
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] kex follows: False
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:54:18.498 [DEBUG] [Thread-17510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:54:18.499 [DEBUG] [Thread-17510] [transport.py] [_log()] Compression: none
2025-12-25T19:54:18.499 [DEBUG] [Thread-17510] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:54:18.556 [DEBUG] [Thread-17510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:54:18.557 [DEBUG] [Thread-17510] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:54:18.558 [DEBUG] [Thread-17510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:54:18.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:54:18.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:54:18.612 [DEBUG] [Thread-17510] [transport.py] [_log()] userauth is OK
2025-12-25T19:54:18.612 [DEBUG] [Thread-17510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:54:18.612 [DEBUG] [Thread-17510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:54:18.612 [DEBUG] [Thread-17510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:54:18.613 [DEBUG] [Thread-17510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:54:18.632 [INFO] [Thread-17510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:54:18.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-25T19:54:18.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:54:19.441 [DEBUG] [Thread-17510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:54:19.441 [DEBUG] [Thread-17510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:54:19.489 [DEBUG] [Thread-17510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:54:19.489 [DEBUG] [Thread-17510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:54:19.498 [DEBUG] [Thread-17510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:54:19.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:54:19.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-25T19:54:19.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-25T19:54:19.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:54:19.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:54:19.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:54:19.537 [DEBUG] [Thread-17510] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:54:22.003 [DEBUG] [Thread-17512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:31.989 [DEBUG] [Thread-17513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:42.189 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:42.190 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:47.029 [DEBUG] [Thread-17514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:54:49.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:54:49.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:54:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T19:54:50.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 54, 30), 20.72, 25.05, 0.0, 40.44, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:54:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:54:30
2025-12-25T19:54:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:54:50.517 [DEBUG] [Thread-17515] [transport.py] [_log()] starting thread (client mode): 0xb6b7caf0
2025-12-25T19:54:50.517 [DEBUG] [Thread-17515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:54:50.537 [DEBUG] [Thread-17515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:54:50.537 [INFO] [Thread-17515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:54:50.540 [DEBUG] [Thread-17515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:54:50.540 [DEBUG] [Thread-17515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] client lang: <none>
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] server lang: <none>
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] kex follows: False
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] Compression: none
2025-12-25T19:54:50.541 [DEBUG] [Thread-17515] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:54:50.559 [DEBUG] [Thread-17515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:54:50.560 [DEBUG] [Thread-17515] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:54:50.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:54:50.561 [DEBUG] [Thread-17515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:54:50.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:54:50.563 [DEBUG] [Thread-17515] [transport.py] [_log()] userauth is OK
2025-12-25T19:54:50.563 [DEBUG] [Thread-17515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:54:50.563 [DEBUG] [Thread-17515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:54:50.563 [DEBUG] [Thread-17515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:54:50.563 [DEBUG] [Thread-17515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:54:50.582 [INFO] [Thread-17515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:54:50.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:54:51.228 [DEBUG] [Thread-17515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:54:51.228 [DEBUG] [Thread-17515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:54:51.228 [DEBUG] [Thread-17515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:54:51.269 [DEBUG] [Thread-17515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:54:51.269 [DEBUG] [Thread-17515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:54:51.272 [DEBUG] [Thread-17515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:54:51.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:54:51.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:54:51.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:54:51.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:54:51.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:54:51.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:54:51.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.745893 -999.00  +21.40  35.40     31   +3.60 1 1 2 1 1   821    0 17.46 -36.53 ----- 39.7 35.4 293.6 37.7 21.9 -25.0 21.8 -24.5 21.5 -22.8 21.8 -23.8
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.745893
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:54:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:54:30', tmtdew=20.72, humidity=25.05, cloud=0.0, wind=40.44, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:54:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:54:51.294 [DEBUG] [Thread-17515] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:54:51.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-25T19:54:51.376 [DEBUG] [Thread-17518] [transport.py] [_log()] starting thread (client mode): 0xb6b7ec80
2025-12-25T19:54:51.377 [DEBUG] [Thread-17518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:54:51.391 [DEBUG] [Thread-17518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:54:51.391 [INFO] [Thread-17518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] client lang: <none>
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] server lang: <none>
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] kex follows: False
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:54:51.399 [DEBUG] [Thread-17518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:54:51.400 [DEBUG] [Thread-17518] [transport.py] [_log()] Compression: none
2025-12-25T19:54:51.400 [DEBUG] [Thread-17518] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:54:51.461 [DEBUG] [Thread-17518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:54:51.461 [DEBUG] [Thread-17518] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:54:51.462 [DEBUG] [Thread-17518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:54:51.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:54:51.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:54:51.520 [DEBUG] [Thread-17518] [transport.py] [_log()] userauth is OK
2025-12-25T19:54:51.520 [DEBUG] [Thread-17518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:54:51.520 [DEBUG] [Thread-17518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:54:51.520 [DEBUG] [Thread-17518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:54:51.520 [DEBUG] [Thread-17518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:54:51.539 [INFO] [Thread-17518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:54:51.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-25T19:54:51.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:54:52.331 [DEBUG] [Thread-17518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:54:52.331 [DEBUG] [Thread-17518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:54:52.379 [DEBUG] [Thread-17518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:54:52.379 [DEBUG] [Thread-17518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:54:52.389 [DEBUG] [Thread-17518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:54:52.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:54: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')
2025-12-25T19:54:52.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:54:52.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:54:52.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:54:52.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:54:52.425 [DEBUG] [Thread-17518] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:55:02.067 [DEBUG] [Thread-17520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:17.119 [DEBUG] [Thread-17521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:22.071 [DEBUG] [Thread-17522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:22.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:55:22.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:55:22.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-25T19:55:23.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 55, 2), 20.68, 25.12, 0.0, 40.39, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:55:23.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:55:02
2025-12-25T19:55:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:55:23.430 [DEBUG] [Thread-17523] [transport.py] [_log()] starting thread (client mode): 0xb955b8b0
2025-12-25T19:55:23.430 [DEBUG] [Thread-17523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:55:23.457 [DEBUG] [Thread-17523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:55:23.457 [INFO] [Thread-17523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:55:23.460 [DEBUG] [Thread-17523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] client lang: <none>
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] server lang: <none>
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] kex follows: False
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:55:23.461 [DEBUG] [Thread-17523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:55:23.462 [DEBUG] [Thread-17523] [transport.py] [_log()] Compression: none
2025-12-25T19:55:23.462 [DEBUG] [Thread-17523] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:55:23.479 [DEBUG] [Thread-17523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:55:23.480 [DEBUG] [Thread-17523] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:55:23.480 [DEBUG] [Thread-17523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:55:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:55:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:55:23.482 [DEBUG] [Thread-17523] [transport.py] [_log()] userauth is OK
2025-12-25T19:55:23.483 [DEBUG] [Thread-17523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:55:23.483 [DEBUG] [Thread-17523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:55:23.483 [DEBUG] [Thread-17523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:55:23.483 [DEBUG] [Thread-17523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:55:23.507 [INFO] [Thread-17523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:55:23.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:55:24.180 [DEBUG] [Thread-17523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:55:24.180 [DEBUG] [Thread-17523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:55:24.181 [DEBUG] [Thread-17523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:55:24.221 [DEBUG] [Thread-17523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:55:24.221 [DEBUG] [Thread-17523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:55:24.225 [DEBUG] [Thread-17523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:55:24.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:55:24.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:55:24.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:55:24.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:55:24.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:55:24.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:55:24.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:55:24.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:55:24.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:55:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.746240 -999.00  +21.40  33.11     31   +3.60 1 1 2 1 1   816    0 17.10 -37.53 ----- 34.9 33.1 298.2 40.5 21.8 -25.0 21.7 -24.5 21.5 -22.8 21.8 -23.9
2025-12-25T19:55:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:55:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:55:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.746240
2025-12-25T19:55:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:55:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:55:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:55:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:55:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:55:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:55:02', tmtdew=20.68, humidity=25.12, cloud=0.0, wind=40.39, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:54:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:55:24.252 [DEBUG] [Thread-17523] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:55:24.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-25T19:55:24.346 [DEBUG] [Thread-17526] [transport.py] [_log()] starting thread (client mode): 0xb6b7fbe0
2025-12-25T19:55:24.347 [DEBUG] [Thread-17526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:55:24.361 [DEBUG] [Thread-17526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:55:24.361 [INFO] [Thread-17526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:55:24.369 [DEBUG] [Thread-17526] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:55:24.369 [DEBUG] [Thread-17526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:55:24.370 [DEBUG] [Thread-17526] [transport.py] [_log()] client lang: <none>
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] server lang: <none>
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] kex follows: False
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:55:24.371 [DEBUG] [Thread-17526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:55:24.372 [DEBUG] [Thread-17526] [transport.py] [_log()] Compression: none
2025-12-25T19:55:24.372 [DEBUG] [Thread-17526] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:55:24.432 [DEBUG] [Thread-17526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:55:24.432 [DEBUG] [Thread-17526] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:55:24.433 [DEBUG] [Thread-17526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:55:24.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:55:24.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:55:24.488 [DEBUG] [Thread-17526] [transport.py] [_log()] userauth is OK
2025-12-25T19:55:24.488 [DEBUG] [Thread-17526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:55:24.488 [DEBUG] [Thread-17526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:55:24.488 [DEBUG] [Thread-17526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:55:24.488 [DEBUG] [Thread-17526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:55:24.518 [INFO] [Thread-17526] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:55:24.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-25T19:55:24.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:55:25.380 [DEBUG] [Thread-17526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:55:25.380 [DEBUG] [Thread-17526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:55:25.428 [DEBUG] [Thread-17526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:55:25.428 [DEBUG] [Thread-17526] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:55:25.441 [DEBUG] [Thread-17526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:55:25.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:55:25.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-25T19:55:25.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:55:25.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:55:25.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:55:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:55:25.491 [DEBUG] [Thread-17526] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:55:32.151 [DEBUG] [Thread-17528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:47.204 [DEBUG] [Thread-17529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:47.281 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:47.282 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:55:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:55:55.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:55:55.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-25T19:55:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 55, 34), 20.59, 25.6, 0.0, 34.04, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:55:56.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:55:34
2025-12-25T19:55:56.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:55:56.522 [DEBUG] [Thread-17530] [transport.py] [_log()] starting thread (client mode): 0xb955ab30
2025-12-25T19:55:56.523 [DEBUG] [Thread-17530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:55:56.542 [DEBUG] [Thread-17530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:55:56.542 [INFO] [Thread-17530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:55:56.545 [DEBUG] [Thread-17530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] client lang: <none>
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] server lang: <none>
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] kex follows: False
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] Compression: none
2025-12-25T19:55:56.546 [DEBUG] [Thread-17530] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:55:56.561 [DEBUG] [Thread-17530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:55:56.562 [DEBUG] [Thread-17530] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:55:56.562 [DEBUG] [Thread-17530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:55:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:55:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:55:56.563 [DEBUG] [Thread-17530] [transport.py] [_log()] userauth is OK
2025-12-25T19:55:56.563 [DEBUG] [Thread-17530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:55:56.563 [DEBUG] [Thread-17530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:55:56.563 [DEBUG] [Thread-17530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:55:56.563 [DEBUG] [Thread-17530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:55:56.572 [INFO] [Thread-17530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:55:56.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:55:57.215 [DEBUG] [Thread-17530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:55:57.215 [DEBUG] [Thread-17530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:55:57.216 [DEBUG] [Thread-17530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:55:57.256 [DEBUG] [Thread-17530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:55:57.256 [DEBUG] [Thread-17530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:55:57.260 [DEBUG] [Thread-17530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:55:57.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:55:57.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:55:57.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:55:57.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:55:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:55:57.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:55:57.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:55:57.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:55:57.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:55:57.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.746587 -999.00  +21.30  44.06     31   +3.70 1 1 2 1 1   809    0 17.23 -36.18 ----- 42.5 44.1 298.2 49.4 21.8 -25.0 21.8 -24.5 21.5 -22.8 21.7 -23.7
2025-12-25T19:55:57.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:55:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:55:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.746587
2025-12-25T19:55:57.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:55:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:55:57.287 [DEBUG] [Thread-17530] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:55:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:55:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:55:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:55:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:55:34', tmtdew=20.59, humidity=25.6, cloud=0.0, wind=34.04, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:55:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:55:57.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-25T19:55:57.381 [DEBUG] [Thread-17533] [transport.py] [_log()] starting thread (client mode): 0xb6b771f0
2025-12-25T19:55:57.381 [DEBUG] [Thread-17533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:55:57.396 [DEBUG] [Thread-17533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:55:57.396 [INFO] [Thread-17533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] client lang: <none>
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] server lang: <none>
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] kex follows: False
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:55:57.404 [DEBUG] [Thread-17533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:55:57.405 [DEBUG] [Thread-17533] [transport.py] [_log()] Compression: none
2025-12-25T19:55:57.405 [DEBUG] [Thread-17533] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:55:57.464 [DEBUG] [Thread-17533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:55:57.464 [DEBUG] [Thread-17533] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:55:57.465 [DEBUG] [Thread-17533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:55:57.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:55:57.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:55:57.520 [DEBUG] [Thread-17533] [transport.py] [_log()] userauth is OK
2025-12-25T19:55:57.520 [DEBUG] [Thread-17533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:55:57.520 [DEBUG] [Thread-17533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:55:57.520 [DEBUG] [Thread-17533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:55:57.520 [DEBUG] [Thread-17533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:55:57.539 [INFO] [Thread-17533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:55: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-25T19:55:57.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:55:58.357 [DEBUG] [Thread-17533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:55:58.358 [DEBUG] [Thread-17533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:55:58.406 [DEBUG] [Thread-17533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:55:58.406 [DEBUG] [Thread-17533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:55:58.415 [DEBUG] [Thread-17533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:55:58.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:55:58.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-25T19:55:58.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-25T19:55:58.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:55:58.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:55:58.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:55:58.452 [DEBUG] [Thread-17533] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:56:02.236 [DEBUG] [Thread-17535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:56:17.294 [DEBUG] [Thread-17536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:56:22.145 [DEBUG] [Thread-17537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:56:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:56:28.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:56:28.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-25T19:56:29.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 56, 6), 20.61, 25.57, 0.0, 33.08, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:56:29.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:56:06
2025-12-25T19:56:29.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:56:29.470 [DEBUG] [Thread-17538] [transport.py] [_log()] starting thread (client mode): 0xb6b76530
2025-12-25T19:56:29.470 [DEBUG] [Thread-17538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:56:29.489 [DEBUG] [Thread-17538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:56:29.490 [INFO] [Thread-17538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] client lang: <none>
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] server lang: <none>
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] kex follows: False
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] Compression: none
2025-12-25T19:56:29.493 [DEBUG] [Thread-17538] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:56:29.509 [DEBUG] [Thread-17538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:56:29.509 [DEBUG] [Thread-17538] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:56:29.509 [DEBUG] [Thread-17538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:56:29.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:56:29.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:56:29.510 [DEBUG] [Thread-17538] [transport.py] [_log()] userauth is OK
2025-12-25T19:56:29.510 [DEBUG] [Thread-17538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:56:29.510 [DEBUG] [Thread-17538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:56:29.510 [DEBUG] [Thread-17538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:56:29.510 [DEBUG] [Thread-17538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:56:29.529 [INFO] [Thread-17538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:56:29.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:56:30.189 [DEBUG] [Thread-17538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:56:30.189 [DEBUG] [Thread-17538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:56:30.189 [DEBUG] [Thread-17538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:56:30.230 [DEBUG] [Thread-17538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:56:30.230 [DEBUG] [Thread-17538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:56:30.233 [DEBUG] [Thread-17538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:56:30.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:56:30.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:56:30.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:56:30.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:56:30.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:56:30.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:56:30.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:56:30.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:56:30.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.746935 -999.00  +21.30  31.77     31   +3.60 1 1 2 1 1   803    0 17.13 -37.69 ----- 34.2 31.8 305.6 46.7 21.8 -25.0 21.7 -24.4 21.4 -22.8 21.8 -23.8
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.746935
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:56:30.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:56:06', tmtdew=20.61, humidity=25.57, cloud=0.0, wind=33.08, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:55:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:56:30.251 [DEBUG] [Thread-17538] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:56:30.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-25T19:56:30.337 [DEBUG] [Thread-17541] [transport.py] [_log()] starting thread (client mode): 0xb95597b0
2025-12-25T19:56:30.337 [DEBUG] [Thread-17541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:56:30.352 [DEBUG] [Thread-17541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:56:30.352 [INFO] [Thread-17541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] client lang: <none>
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] server lang: <none>
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] kex follows: False
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] Compression: none
2025-12-25T19:56:30.360 [DEBUG] [Thread-17541] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:56:30.418 [DEBUG] [Thread-17541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:56:30.418 [DEBUG] [Thread-17541] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:56:30.419 [DEBUG] [Thread-17541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:56:30.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:56:30.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:56:30.475 [DEBUG] [Thread-17541] [transport.py] [_log()] userauth is OK
2025-12-25T19:56:30.475 [DEBUG] [Thread-17541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:56:30.475 [DEBUG] [Thread-17541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:56:30.475 [DEBUG] [Thread-17541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:56:30.475 [DEBUG] [Thread-17541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:56:30.489 [INFO] [Thread-17541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:56:30.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T19:56:30.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:56:31.320 [DEBUG] [Thread-17541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:56:31.320 [DEBUG] [Thread-17541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:56:31.369 [DEBUG] [Thread-17541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:56:31.369 [DEBUG] [Thread-17541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:56:31.377 [DEBUG] [Thread-17541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:56:31.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:56:31.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-25T19:56:31.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-25T19:56:31.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:56:31.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:56:31.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:56:31.409 [DEBUG] [Thread-17541] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:56:32.327 [DEBUG] [Thread-17543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:56:47.367 [DEBUG] [Thread-17544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:56:54.043 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:56:54.045 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:57:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:57:01.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:57:01.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-25T19:57:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 56, 38), 20.55, 25.57, 0.0, 35.39, 21.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:57:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:56:38
2025-12-25T19:57:02.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:57:02.402 [DEBUG] [Thread-17545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:57:02.411 [DEBUG] [Thread-17546] [transport.py] [_log()] starting thread (client mode): 0xb6b63070
2025-12-25T19:57:02.411 [DEBUG] [Thread-17546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:57:02.432 [DEBUG] [Thread-17546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:57:02.432 [INFO] [Thread-17546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:57:02.435 [DEBUG] [Thread-17546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] client lang: <none>
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] server lang: <none>
2025-12-25T19:57:02.436 [DEBUG] [Thread-17546] [transport.py] [_log()] kex follows: False
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] Compression: none
2025-12-25T19:57:02.437 [DEBUG] [Thread-17546] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:57:02.458 [DEBUG] [Thread-17546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:57:02.458 [DEBUG] [Thread-17546] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:57:02.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:57:02.460 [DEBUG] [Thread-17546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:57:02.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:57:02.462 [DEBUG] [Thread-17546] [transport.py] [_log()] userauth is OK
2025-12-25T19:57:02.462 [DEBUG] [Thread-17546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:57:02.463 [DEBUG] [Thread-17546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:57:02.463 [DEBUG] [Thread-17546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:57:02.463 [DEBUG] [Thread-17546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:57:02.486 [INFO] [Thread-17546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:57:02.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:57:03.149 [DEBUG] [Thread-17546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:57:03.150 [DEBUG] [Thread-17546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:57:03.150 [DEBUG] [Thread-17546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:57:03.191 [DEBUG] [Thread-17546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:57:03.191 [DEBUG] [Thread-17546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:57:03.195 [DEBUG] [Thread-17546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:57:03.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:57:03.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:57:03.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:57:03.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:57:03.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:57:03.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:57:03.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:57:03.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:57:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:57:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.747282 -999.00  +21.30  30.99     31   +3.70 1 1 2 1 1   795    0 17.24 -41.24 ----- 33.5 31.0 294.6 43.7 21.8 -24.9 21.8 -24.5 21.4 -22.8 21.7 -23.8
2025-12-25T19:57:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:57:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:57:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.747282
2025-12-25T19:57:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:57:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:57:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:57:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:57:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:57:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:56:38', tmtdew=20.55, humidity=25.57, cloud=0.0, wind=35.39, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:56:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:57:03.215 [DEBUG] [Thread-17546] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:57:03.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-25T19:57:03.314 [DEBUG] [Thread-17549] [transport.py] [_log()] starting thread (client mode): 0xb6bb71f0
2025-12-25T19:57:03.314 [DEBUG] [Thread-17549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:57:03.328 [DEBUG] [Thread-17549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:57:03.328 [INFO] [Thread-17549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] client lang: <none>
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] server lang: <none>
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] kex follows: False
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:57:03.336 [DEBUG] [Thread-17549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:57:03.337 [DEBUG] [Thread-17549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:57:03.337 [DEBUG] [Thread-17549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:57:03.337 [DEBUG] [Thread-17549] [transport.py] [_log()] Compression: none
2025-12-25T19:57:03.337 [DEBUG] [Thread-17549] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:57:03.396 [DEBUG] [Thread-17549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:57:03.396 [DEBUG] [Thread-17549] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:57:03.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:57:03.397 [DEBUG] [Thread-17549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:57:03.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:57:03.451 [DEBUG] [Thread-17549] [transport.py] [_log()] userauth is OK
2025-12-25T19:57:03.452 [DEBUG] [Thread-17549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:57:03.452 [DEBUG] [Thread-17549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:57:03.452 [DEBUG] [Thread-17549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:57:03.452 [DEBUG] [Thread-17549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:57:03.471 [INFO] [Thread-17549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:57:03.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-25T19:57:03.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:57:04.343 [DEBUG] [Thread-17549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:57:04.343 [DEBUG] [Thread-17549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:57:04.391 [DEBUG] [Thread-17549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:57:04.391 [DEBUG] [Thread-17549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:57:04.400 [DEBUG] [Thread-17549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:57:04.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:57:04.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-25T19:57:04.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:57:04.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:57:04.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:57:04.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:57:04.436 [DEBUG] [Thread-17549] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:57:17.431 [DEBUG] [Thread-17551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:57:22.202 [DEBUG] [Thread-17552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:57:32.483 [DEBUG] [Thread-17553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:57:34.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:57:34.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:57:34.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-25T19:57:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 57, 10), 20.52, 25.62, 0.0, 33.72, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:57:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:57:10
2025-12-25T19:57:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:57:35.404 [DEBUG] [Thread-17554] [transport.py] [_log()] starting thread (client mode): 0xb9590ee0
2025-12-25T19:57:35.404 [DEBUG] [Thread-17554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:57:35.425 [DEBUG] [Thread-17554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:57:35.426 [INFO] [Thread-17554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] client lang: <none>
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] server lang: <none>
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] kex follows: False
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] Compression: none
2025-12-25T19:57:35.427 [DEBUG] [Thread-17554] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:57:35.438 [DEBUG] [Thread-17554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:57:35.438 [DEBUG] [Thread-17554] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:57:35.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:57:35.439 [DEBUG] [Thread-17554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:57:35.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:57:35.440 [DEBUG] [Thread-17554] [transport.py] [_log()] userauth is OK
2025-12-25T19:57:35.440 [DEBUG] [Thread-17554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:57:35.440 [DEBUG] [Thread-17554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:57:35.440 [DEBUG] [Thread-17554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:57:35.440 [DEBUG] [Thread-17554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:57:35.462 [INFO] [Thread-17554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:57:35.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:57:36.120 [DEBUG] [Thread-17554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:57:36.120 [DEBUG] [Thread-17554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:57:36.120 [DEBUG] [Thread-17554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:57:36.161 [DEBUG] [Thread-17554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:57:36.161 [DEBUG] [Thread-17554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:57:36.164 [DEBUG] [Thread-17554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:57:36.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:57:36.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:57:36.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:57:36.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:57:36.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:57:36.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:57:36.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:57:36.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:57:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:57:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.747976 -999.00  +21.30  34.14     31   +3.60 1 1 2 1 1   779    0 17.08 -44.61 ----- 26.7 34.1 302.2 43.1 21.8 -24.9 21.7 -24.4 21.4 -22.7 21.7 -23.8
2025-12-25T19:57:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:57:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:57:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.747976
2025-12-25T19:57:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:57:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:57:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:57:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:57:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:57:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:57:10', tmtdew=20.52, humidity=25.62, cloud=0.0, wind=33.72, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:57:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:57:36.191 [DEBUG] [Thread-17554] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:57:36.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T19:57:36.284 [DEBUG] [Thread-17557] [transport.py] [_log()] starting thread (client mode): 0xb6b7e440
2025-12-25T19:57:36.284 [DEBUG] [Thread-17557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:57:36.298 [DEBUG] [Thread-17557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:57:36.298 [INFO] [Thread-17557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:57:36.306 [DEBUG] [Thread-17557] [transport.py] [_log()] client lang: <none>
2025-12-25T19:57:36.307 [DEBUG] [Thread-17557] [transport.py] [_log()] server lang: <none>
2025-12-25T19:57:36.307 [DEBUG] [Thread-17557] [transport.py] [_log()] kex follows: False
2025-12-25T19:57:36.307 [DEBUG] [Thread-17557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:57:36.307 [DEBUG] [Thread-17557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:57:36.307 [DEBUG] [Thread-17557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:57:36.315 [DEBUG] [Thread-17557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:57:36.316 [DEBUG] [Thread-17557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:57:36.316 [DEBUG] [Thread-17557] [transport.py] [_log()] Compression: none
2025-12-25T19:57:36.316 [DEBUG] [Thread-17557] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:57:36.363 [DEBUG] [Thread-17557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:57:36.364 [DEBUG] [Thread-17557] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:57:36.364 [DEBUG] [Thread-17557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:57:36.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:57:36.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:57:36.420 [DEBUG] [Thread-17557] [transport.py] [_log()] userauth is OK
2025-12-25T19:57:36.420 [DEBUG] [Thread-17557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:57:36.420 [DEBUG] [Thread-17557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:57:36.421 [DEBUG] [Thread-17557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:57:36.421 [DEBUG] [Thread-17557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:57:36.440 [INFO] [Thread-17557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:57:36.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-25T19:57:36.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:57:37.271 [DEBUG] [Thread-17557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:57:37.271 [DEBUG] [Thread-17557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:57:37.319 [DEBUG] [Thread-17557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:57:37.319 [DEBUG] [Thread-17557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:57:37.328 [DEBUG] [Thread-17557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:57:37.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:57:37.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-25T19:57:37.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-25T19:57:37.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:57:37.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:57:37.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:57:37.365 [DEBUG] [Thread-17557] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:57:47.518 [DEBUG] [Thread-17559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:00.003 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:00.003 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:02.564 [DEBUG] [Thread-17560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:07.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:58:07.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:58:07.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-25T19:58:08.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 57, 42), 20.56, 25.63, 0.0, 33.56, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:58:08.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:57:42
2025-12-25T19:58:08.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:58:08.351 [DEBUG] [Thread-17561] [transport.py] [_log()] starting thread (client mode): 0xb6b7d180
2025-12-25T19:58:08.351 [DEBUG] [Thread-17561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:58:08.368 [DEBUG] [Thread-17561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:58:08.368 [INFO] [Thread-17561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] client lang: <none>
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] server lang: <none>
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] kex follows: False
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] Compression: none
2025-12-25T19:58:08.371 [DEBUG] [Thread-17561] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:58:08.388 [DEBUG] [Thread-17561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:58:08.389 [DEBUG] [Thread-17561] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:58:08.390 [DEBUG] [Thread-17561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:58:08.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:58:08.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:58:08.392 [DEBUG] [Thread-17561] [transport.py] [_log()] userauth is OK
2025-12-25T19:58:08.392 [DEBUG] [Thread-17561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:58:08.392 [DEBUG] [Thread-17561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:58:08.392 [DEBUG] [Thread-17561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:58:08.392 [DEBUG] [Thread-17561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:58:08.411 [INFO] [Thread-17561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:58:08.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:58:09.073 [DEBUG] [Thread-17561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:58:09.073 [DEBUG] [Thread-17561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:58:09.074 [DEBUG] [Thread-17561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:58:09.114 [DEBUG] [Thread-17561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:58:09.114 [DEBUG] [Thread-17561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:58:09.117 [DEBUG] [Thread-17561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:58:09.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:58:09.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:58:09.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:58:09.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:58:09.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:58:09.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:58:09.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:58:09.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:58:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:58:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.748324 -999.00  +21.30  31.58     31   +3.60 1 1 2 1 1   770    0 16.87 -43.58 ----- 36.1 31.6 297.4 38.4 21.7 -24.9 21.6 -24.5 21.4 -22.8 21.7 -23.8
2025-12-25T19:58:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:58:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:58:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.748324
2025-12-25T19:58:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:58:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:58:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:58:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:58:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:58:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:57:42', tmtdew=20.56, humidity=25.63, cloud=0.0, wind=33.56, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:57:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:58:09.140 [DEBUG] [Thread-17561] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:58:09.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-25T19:58:09.233 [DEBUG] [Thread-17564] [transport.py] [_log()] starting thread (client mode): 0xb6b7c220
2025-12-25T19:58:09.233 [DEBUG] [Thread-17564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:58:09.251 [DEBUG] [Thread-17564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:58:09.251 [INFO] [Thread-17564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:58:09.259 [DEBUG] [Thread-17564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:58:09.259 [DEBUG] [Thread-17564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:58:09.259 [DEBUG] [Thread-17564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:58:09.259 [DEBUG] [Thread-17564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] client lang: <none>
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] server lang: <none>
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] kex follows: False
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] Compression: none
2025-12-25T19:58:09.260 [DEBUG] [Thread-17564] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:58:09.318 [DEBUG] [Thread-17564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:58:09.319 [DEBUG] [Thread-17564] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:58:09.319 [DEBUG] [Thread-17564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:58:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:58:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:58:09.375 [DEBUG] [Thread-17564] [transport.py] [_log()] userauth is OK
2025-12-25T19:58:09.375 [DEBUG] [Thread-17564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:58:09.375 [DEBUG] [Thread-17564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:58:09.375 [DEBUG] [Thread-17564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:58:09.376 [DEBUG] [Thread-17564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:58:09.399 [INFO] [Thread-17564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:58:09.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-25T19:58:09.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:58:10.211 [DEBUG] [Thread-17564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:58:10.211 [DEBUG] [Thread-17564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:58:10.262 [DEBUG] [Thread-17564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:58:10.263 [DEBUG] [Thread-17564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:58:10.272 [DEBUG] [Thread-17564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:58:10.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:58:10.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-25T19:58:10.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:58:10.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:58:10.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:58:10.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:58:10.309 [DEBUG] [Thread-17564] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:58:17.598 [DEBUG] [Thread-17566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:22.258 [DEBUG] [Thread-17567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:32.644 [DEBUG] [Thread-17568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:58:40.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:58:40.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:58:40.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-25T19:58:41.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 58, 14), 20.56, 25.63, 0.0, 33.1, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:58:41.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:58:14
2025-12-25T19:58:41.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:58:41.300 [DEBUG] [Thread-17569] [transport.py] [_log()] starting thread (client mode): 0xb6b20a30
2025-12-25T19:58:41.300 [DEBUG] [Thread-17569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:58:41.320 [DEBUG] [Thread-17569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:58:41.320 [INFO] [Thread-17569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] client lang: <none>
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] server lang: <none>
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] kex follows: False
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] Compression: none
2025-12-25T19:58:41.322 [DEBUG] [Thread-17569] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:58:41.331 [DEBUG] [Thread-17569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:58:41.331 [DEBUG] [Thread-17569] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:58:41.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:58:41.331 [DEBUG] [Thread-17569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:58:41.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:58:41.332 [DEBUG] [Thread-17569] [transport.py] [_log()] userauth is OK
2025-12-25T19:58:41.332 [DEBUG] [Thread-17569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:58:41.332 [DEBUG] [Thread-17569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:58:41.332 [DEBUG] [Thread-17569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:58:41.332 [DEBUG] [Thread-17569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:58:41.344 [INFO] [Thread-17569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:58:41.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:58:42.009 [DEBUG] [Thread-17569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:58:42.009 [DEBUG] [Thread-17569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:58:42.010 [DEBUG] [Thread-17569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:58:42.050 [DEBUG] [Thread-17569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:58:42.050 [DEBUG] [Thread-17569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:58:42.054 [DEBUG] [Thread-17569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:58:42.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:58:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:58:42.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:58:42.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:58:42.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:58:42.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:58:42.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:58:42.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:58:42.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:58:42.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.748671 -999.00  +21.30  35.17     31   +3.60 1 1 2 1 1   761    0 16.22 -50.26 ----- 30.8 35.2 295.6 43.1 21.7 -25.0 21.6 -24.4 21.4 -22.7 21.6 -23.7
2025-12-25T19:58:42.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:58:42.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:58:42.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.748671
2025-12-25T19:58:42.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:58:42.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:58:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:58:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:58:42.080 [DEBUG] [Thread-17569] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:58:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:58:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:58:14', tmtdew=20.56, humidity=25.63, cloud=0.0, wind=33.1, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:58:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:58:42.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-25T19:58:42.171 [DEBUG] [Thread-17572] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f10
2025-12-25T19:58:42.171 [DEBUG] [Thread-17572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:58:42.185 [DEBUG] [Thread-17572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T19:58:42.186 [INFO] [Thread-17572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T19:58:42.193 [DEBUG] [Thread-17572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] client lang: <none>
2025-12-25T19:58:42.194 [DEBUG] [Thread-17572] [transport.py] [_log()] server lang: <none>
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] kex follows: False
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] Compression: none
2025-12-25T19:58:42.195 [DEBUG] [Thread-17572] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:58:42.251 [DEBUG] [Thread-17572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:58:42.252 [DEBUG] [Thread-17572] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:58:42.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T19:58:42.253 [DEBUG] [Thread-17572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T19:58:42.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:58:42.308 [DEBUG] [Thread-17572] [transport.py] [_log()] userauth is OK
2025-12-25T19:58:42.308 [DEBUG] [Thread-17572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:58:42.308 [DEBUG] [Thread-17572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:58:42.308 [DEBUG] [Thread-17572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T19:58:42.309 [DEBUG] [Thread-17572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:58:42.327 [INFO] [Thread-17572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:58:42.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-25T19:58:42.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:58:43.167 [DEBUG] [Thread-17572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:58:43.167 [DEBUG] [Thread-17572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:58:43.215 [DEBUG] [Thread-17572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:58:43.215 [DEBUG] [Thread-17572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:58:43.224 [DEBUG] [Thread-17572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:58:43.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:58:43.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T19:58:43.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T19:58:43.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:58:43.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:58:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:58:43.261 [DEBUG] [Thread-17572] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:58:47.675 [DEBUG] [Thread-17574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:02.718 [DEBUG] [Thread-17575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:04.783 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:04.784 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:13.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T19:59:13.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T19:59:13.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-25T19:59:13.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 19, 58, 46), 20.54, 25.67, 0.0, 27.77, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-25T19:59:13.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 19:58:46
2025-12-25T19:59:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T19:59:14.268 [DEBUG] [Thread-17576] [transport.py] [_log()] starting thread (client mode): 0xb6b7ddb0
2025-12-25T19:59:14.269 [DEBUG] [Thread-17576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T19:59:14.288 [DEBUG] [Thread-17576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T19:59:14.289 [INFO] [Thread-17576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] client lang: <none>
2025-12-25T19:59:14.292 [DEBUG] [Thread-17576] [transport.py] [_log()] server lang: <none>
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] kex follows: False
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] Compression: none
2025-12-25T19:59:14.293 [DEBUG] [Thread-17576] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T19:59:14.311 [DEBUG] [Thread-17576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T19:59:14.311 [DEBUG] [Thread-17576] [transport.py] [_log()] Switch to new keys ...
2025-12-25T19:59:14.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T19:59:14.312 [DEBUG] [Thread-17576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T19:59:14.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T19:59:14.315 [DEBUG] [Thread-17576] [transport.py] [_log()] userauth is OK
2025-12-25T19:59:14.315 [DEBUG] [Thread-17576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T19:59:14.315 [DEBUG] [Thread-17576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T19:59:14.315 [DEBUG] [Thread-17576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T19:59:14.315 [DEBUG] [Thread-17576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T19:59:14.351 [INFO] [Thread-17576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T19:59:14.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T19:59:14.984 [DEBUG] [Thread-17576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T19:59:14.984 [DEBUG] [Thread-17576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T19:59:14.984 [DEBUG] [Thread-17576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T19:59:15.025 [DEBUG] [Thread-17576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T19:59:15.025 [DEBUG] [Thread-17576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T19:59:15.028 [DEBUG] [Thread-17576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T19:59:15.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T19:59:15.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T19:59:15.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T19:59:15.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T19:59:15.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T19:59:15.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T19:59:15.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T19:59:15.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T19:59:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T19:59:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.749018 -999.00  +21.30  29.54     31   +3.60 1 1 1 1 1   750    0 16.70 -50.07 ----- 31.9 29.5 289.6 44.8 21.7 -25.0 21.6 -24.3 21.4 -22.7 21.6 -23.7
2025-12-25T19:59:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T19:59:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T19:59:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.749018
2025-12-25T19:59:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T19:59:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T19:59:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T19:59:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T19:59:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T19:59:15.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T19:58:46', tmtdew=20.54, humidity=25.67, cloud=0.0, wind=27.77, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T17:58:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T19:59:15.055 [DEBUG] [Thread-17576] [transport.py] [_log()] EOF in transport thread
2025-12-25T19:59:15.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-25T19:59:17.756 [DEBUG] [Thread-17579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:22.314 [DEBUG] [Thread-17580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:32.817 [DEBUG] [Thread-17581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T19:59:47.851 [DEBUG] [Thread-17582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:02.878 [DEBUG] [Thread-17583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:10.536 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:10.537 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:17.916 [DEBUG] [Thread-17584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:22.378 [DEBUG] [Thread-17585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:32.946 [DEBUG] [Thread-17586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:00:47.983 [DEBUG] [Thread-17587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:03.020 [DEBUG] [Thread-17588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:15.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:15.811 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:18.051 [DEBUG] [Thread-17589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:22.435 [DEBUG] [Thread-17590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:29.813 [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-25T20:01:33.090 [DEBUG] [Thread-17591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:48.120 [DEBUG] [Thread-17592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:01:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:01:59.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:01:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:02:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 1, 27), 20.47, 25.7, 0.0, 33.1, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:02:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:01:27
2025-12-25T20:02:00.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:02:00.871 [DEBUG] [Thread-17593] [transport.py] [_log()] starting thread (client mode): 0xb6b63b20
2025-12-25T20:02:00.871 [DEBUG] [Thread-17593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:02:00.892 [DEBUG] [Thread-17593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:02:00.892 [INFO] [Thread-17593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:02:00.893 [DEBUG] [Thread-17593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:02:00.893 [DEBUG] [Thread-17593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:02:00.893 [DEBUG] [Thread-17593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] client lang: <none>
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] server lang: <none>
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] kex follows: False
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] Compression: none
2025-12-25T20:02:00.894 [DEBUG] [Thread-17593] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:02:00.902 [DEBUG] [Thread-17593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:02:00.902 [DEBUG] [Thread-17593] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:02:00.902 [DEBUG] [Thread-17593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:02:00.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:02:00.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:02:00.903 [DEBUG] [Thread-17593] [transport.py] [_log()] userauth is OK
2025-12-25T20:02:00.903 [DEBUG] [Thread-17593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:02:00.903 [DEBUG] [Thread-17593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:02:00.903 [DEBUG] [Thread-17593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:02:00.903 [DEBUG] [Thread-17593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:02:00.917 [INFO] [Thread-17593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:02:00.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:02:01.524 [DEBUG] [Thread-17593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:02:01.524 [DEBUG] [Thread-17593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:02:01.524 [DEBUG] [Thread-17593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:02:01.566 [DEBUG] [Thread-17593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:02:01.566 [DEBUG] [Thread-17593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:02:01.568 [DEBUG] [Thread-17593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:02:01.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:02:01.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:02:01.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:02:01.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:02:01.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:02:01.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:02:01.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.750754 -999.00  +21.20  36.18     31   +3.60 1 1 2 1 1   689    0 16.49 -46.77 NA 38.1 36.2 297.6 44.8 21.6 -24.8 21.6 -24.3 21.2 -22.6 21.6 -23.7
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.750754
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:02:01.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:01:27', tmtdew=20.47, humidity=25.7, cloud=0.0, wind=33.1, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:01:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:02:01.588 [DEBUG] [Thread-17593] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:02:01.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-25T20:02:01.673 [DEBUG] [Thread-17596] [transport.py] [_log()] starting thread (client mode): 0xb955b430
2025-12-25T20:02:01.673 [DEBUG] [Thread-17596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:02:01.689 [DEBUG] [Thread-17596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:02:01.689 [INFO] [Thread-17596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] client lang: <none>
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] server lang: <none>
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] kex follows: False
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] Compression: none
2025-12-25T20:02:01.699 [DEBUG] [Thread-17596] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:02:01.758 [DEBUG] [Thread-17596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:02:01.758 [DEBUG] [Thread-17596] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:02:01.758 [DEBUG] [Thread-17596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:02:01.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:02:01.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:02:01.822 [DEBUG] [Thread-17596] [transport.py] [_log()] userauth is OK
2025-12-25T20:02:01.822 [DEBUG] [Thread-17596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:02:01.822 [DEBUG] [Thread-17596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:02:01.822 [DEBUG] [Thread-17596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:02:01.822 [DEBUG] [Thread-17596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:02:01.839 [INFO] [Thread-17596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:02: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-25T20:02:01.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:02:02.689 [DEBUG] [Thread-17596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:02:02.689 [DEBUG] [Thread-17596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:02:02.737 [DEBUG] [Thread-17596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:02:02.737 [DEBUG] [Thread-17596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:02:02.747 [DEBUG] [Thread-17596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:02:02.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:02:02.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-25T20:02:02.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-25T20:02:02.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:02:02.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:02:02.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:02:02.787 [DEBUG] [Thread-17596] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:02:03.153 [DEBUG] [Thread-17598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:02:18.204 [DEBUG] [Thread-17599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:02:19.870 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:02:19.871 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:02:22.490 [DEBUG] [Thread-17600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:02:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:02:32.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:02:32.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-25T20:02:33.235 [DEBUG] [Thread-17601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:02:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 1, 59), 20.45, 25.73, 0.0, 36.14, 21.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:02:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:01:59
2025-12-25T20:02:33.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:02:33.846 [DEBUG] [Thread-17602] [transport.py] [_log()] starting thread (client mode): 0xb9558970
2025-12-25T20:02:33.846 [DEBUG] [Thread-17602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:02:33.867 [DEBUG] [Thread-17602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:02:33.867 [INFO] [Thread-17602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:02:33.870 [DEBUG] [Thread-17602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] client lang: <none>
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] server lang: <none>
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] kex follows: False
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] Compression: none
2025-12-25T20:02:33.871 [DEBUG] [Thread-17602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:02:33.887 [DEBUG] [Thread-17602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:02:33.887 [DEBUG] [Thread-17602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:02:33.887 [DEBUG] [Thread-17602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:02:33.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:02:33.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:02:33.888 [DEBUG] [Thread-17602] [transport.py] [_log()] userauth is OK
2025-12-25T20:02:33.888 [DEBUG] [Thread-17602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:02:33.888 [DEBUG] [Thread-17602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:02:33.888 [DEBUG] [Thread-17602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:02:33.888 [DEBUG] [Thread-17602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:02:33.903 [INFO] [Thread-17602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:02:33.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:02:34.539 [DEBUG] [Thread-17602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:02:34.540 [DEBUG] [Thread-17602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:02:34.540 [DEBUG] [Thread-17602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:02:34.581 [DEBUG] [Thread-17602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:02:34.581 [DEBUG] [Thread-17602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:02:34.584 [DEBUG] [Thread-17602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:02:34.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:02:34.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:02:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:02:34.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:02:34.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:02:34.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:02:34.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:02:34.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:02:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:02:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.751101 -999.00  +21.20  37.57     31   +3.60 1 1 2 1 1   675    0 16.83 -45.20 ----- 37.0 37.6 294.4 42.9 21.6 -24.7 21.5 -24.3 21.2 -22.6 21.5 -23.6
2025-12-25T20:02:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:02:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:02:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.751101
2025-12-25T20:02:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:02:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:02:34.612 [DEBUG] [Thread-17602] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:02:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:02:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:02:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:02:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:01:59', tmtdew=20.45, humidity=25.73, cloud=0.0, wind=36.14, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:01:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:02:34.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:02:34.706 [DEBUG] [Thread-17605] [transport.py] [_log()] starting thread (client mode): 0xb6b77f40
2025-12-25T20:02:34.707 [DEBUG] [Thread-17605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:02:34.722 [DEBUG] [Thread-17605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:02:34.723 [INFO] [Thread-17605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:02:34.730 [DEBUG] [Thread-17605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:02:34.731 [DEBUG] [Thread-17605] [transport.py] [_log()] client lang: <none>
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] server lang: <none>
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] kex follows: False
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:02:34.732 [DEBUG] [Thread-17605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:02:34.733 [DEBUG] [Thread-17605] [transport.py] [_log()] Compression: none
2025-12-25T20:02:34.733 [DEBUG] [Thread-17605] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:02:34.788 [DEBUG] [Thread-17605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:02:34.788 [DEBUG] [Thread-17605] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:02:34.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:02:34.790 [DEBUG] [Thread-17605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:02:34.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:02:34.850 [DEBUG] [Thread-17605] [transport.py] [_log()] userauth is OK
2025-12-25T20:02:34.850 [DEBUG] [Thread-17605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:02:34.850 [DEBUG] [Thread-17605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:02:34.850 [DEBUG] [Thread-17605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:02:34.850 [DEBUG] [Thread-17605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:02:34.872 [INFO] [Thread-17605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:02:34.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:02:34.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:02:35.694 [DEBUG] [Thread-17605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:02:35.694 [DEBUG] [Thread-17605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:02:35.742 [DEBUG] [Thread-17605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:02:35.743 [DEBUG] [Thread-17605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:02:35.752 [DEBUG] [Thread-17605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:02:35.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:02:35.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-25T20:02:35.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-25T20:02:35.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:02:35.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:02:35.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:02:35.785 [DEBUG] [Thread-17605] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:02:48.268 [DEBUG] [Thread-17607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:03.315 [DEBUG] [Thread-17608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:05.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:03:05.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:03:05.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:03:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 2, 31), 20.46, 25.7, 0.0, 38.22, 21.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:03:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:02:31
2025-12-25T20:03:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:03:06.835 [DEBUG] [Thread-17609] [transport.py] [_log()] starting thread (client mode): 0xb6b7d180
2025-12-25T20:03:06.835 [DEBUG] [Thread-17609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:03:06.855 [DEBUG] [Thread-17609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:03:06.855 [INFO] [Thread-17609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:03:06.858 [DEBUG] [Thread-17609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] client lang: <none>
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] server lang: <none>
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] kex follows: False
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:03:06.859 [DEBUG] [Thread-17609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:03:06.860 [DEBUG] [Thread-17609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:03:06.860 [DEBUG] [Thread-17609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:03:06.860 [DEBUG] [Thread-17609] [transport.py] [_log()] Compression: none
2025-12-25T20:03:06.860 [DEBUG] [Thread-17609] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:03:06.872 [DEBUG] [Thread-17609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:03:06.873 [DEBUG] [Thread-17609] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:03:06.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:03:06.874 [DEBUG] [Thread-17609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:03:06.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:03:06.917 [DEBUG] [Thread-17609] [transport.py] [_log()] userauth is OK
2025-12-25T20:03:06.917 [DEBUG] [Thread-17609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:03:06.918 [DEBUG] [Thread-17609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:03:06.918 [DEBUG] [Thread-17609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:03:06.918 [DEBUG] [Thread-17609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:03:06.938 [INFO] [Thread-17609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:03:06.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:03:07.627 [DEBUG] [Thread-17609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:03:07.628 [DEBUG] [Thread-17609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:03:07.628 [DEBUG] [Thread-17609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:03:07.669 [DEBUG] [Thread-17609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:03:07.669 [DEBUG] [Thread-17609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:03:07.673 [DEBUG] [Thread-17609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:03:07.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:03:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:03:07.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:03:07.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:03:07.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:03:07.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:03:07.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:03:07.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:03:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:03:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.751796 -999.00  +21.20  35.85     31   +3.60 1 1 2 1 1   644    0 16.47 -42.34 ----- 37.8 35.9 297.2 42.3 21.6 -24.7 21.5 -24.3 21.2 -22.5 21.5 -23.7
2025-12-25T20:03:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:03:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:03:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.751796
2025-12-25T20:03:07.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:03:07.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:03:07.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:03:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:03:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:03:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:02:31', tmtdew=20.46, humidity=25.7, cloud=0.0, wind=38.22, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:02:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:03:07.698 [DEBUG] [Thread-17609] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:03:07.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-25T20:03:07.791 [DEBUG] [Thread-17612] [transport.py] [_log()] starting thread (client mode): 0xb6bb5fc0
2025-12-25T20:03:07.791 [DEBUG] [Thread-17612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:03:07.806 [DEBUG] [Thread-17612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:03:07.806 [INFO] [Thread-17612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:07.814 [DEBUG] [Thread-17612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] client lang: <none>
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] server lang: <none>
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] kex follows: False
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] Compression: none
2025-12-25T20:03:07.815 [DEBUG] [Thread-17612] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:03:07.871 [DEBUG] [Thread-17612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:03:07.872 [DEBUG] [Thread-17612] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:03:07.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:03:07.873 [DEBUG] [Thread-17612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:03:07.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:03:07.928 [DEBUG] [Thread-17612] [transport.py] [_log()] userauth is OK
2025-12-25T20:03:07.928 [DEBUG] [Thread-17612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:03:07.928 [DEBUG] [Thread-17612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:03:07.929 [DEBUG] [Thread-17612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:03:07.929 [DEBUG] [Thread-17612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:03:07.947 [INFO] [Thread-17612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:03:07.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-25T20:03:07.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:03:08.774 [DEBUG] [Thread-17612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:03:08.774 [DEBUG] [Thread-17612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:03:08.823 [DEBUG] [Thread-17612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:03:08.823 [DEBUG] [Thread-17612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:03:08.832 [DEBUG] [Thread-17612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:03:08.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:03:08.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-25T20:03:08.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-25T20:03:08.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:03:08.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:03:08.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:03:08.871 [DEBUG] [Thread-17612] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:03:18.344 [DEBUG] [Thread-17614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:22.551 [DEBUG] [Thread-17615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:25.056 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:25.057 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:33.395 [DEBUG] [Thread-17616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:03:38.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:03:38.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:03:38.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-25T20:03:39.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 3, 35), 20.46, 25.7, 0.0, 31.04, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:03:39.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:03:35
2025-12-25T20:03:39.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:03:39.877 [DEBUG] [Thread-17617] [transport.py] [_log()] starting thread (client mode): 0xb6b771f0
2025-12-25T20:03:39.877 [DEBUG] [Thread-17617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:03:39.896 [DEBUG] [Thread-17617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:03:39.896 [INFO] [Thread-17617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] client lang: <none>
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] server lang: <none>
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] kex follows: False
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] Compression: none
2025-12-25T20:03:39.899 [DEBUG] [Thread-17617] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:03:39.915 [DEBUG] [Thread-17617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:03:39.915 [DEBUG] [Thread-17617] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:03:39.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:03:39.916 [DEBUG] [Thread-17617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:03:39.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:03:39.917 [DEBUG] [Thread-17617] [transport.py] [_log()] userauth is OK
2025-12-25T20:03:39.917 [DEBUG] [Thread-17617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:03:39.917 [DEBUG] [Thread-17617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:03:39.917 [DEBUG] [Thread-17617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:03:39.917 [DEBUG] [Thread-17617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:03:39.932 [INFO] [Thread-17617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:03:39.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:03:40.573 [DEBUG] [Thread-17617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:03:40.573 [DEBUG] [Thread-17617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:03:40.573 [DEBUG] [Thread-17617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:03:40.614 [DEBUG] [Thread-17617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:03:40.615 [DEBUG] [Thread-17617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:03:40.617 [DEBUG] [Thread-17617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:03:40.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:03:40.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:03:40.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:03:40.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:03:40.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:03:40.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:03:40.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.752143 -999.00  +21.20  34.47     31   +3.60 1 1 2 1 1   628    0 16.67 -42.69 ----- 30.6 34.5 301.2 42.4 21.6 -24.8 21.5 -24.2 21.2 -22.5 21.5 -23.6
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.752143
2025-12-25T20:03:40.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:03:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:03:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:03:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:03:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:03:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:03:35', tmtdew=20.46, humidity=25.7, cloud=0.0, wind=31.04, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:03:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:03:40.636 [DEBUG] [Thread-17617] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:03:40.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-25T20:03:40.719 [DEBUG] [Thread-17620] [transport.py] [_log()] starting thread (client mode): 0xb955b730
2025-12-25T20:03:40.719 [DEBUG] [Thread-17620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:03:40.733 [DEBUG] [Thread-17620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:03:40.733 [INFO] [Thread-17620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:03:40.740 [DEBUG] [Thread-17620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:03:40.740 [DEBUG] [Thread-17620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:03:40.740 [DEBUG] [Thread-17620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] client lang: <none>
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] server lang: <none>
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] kex follows: False
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] Compression: none
2025-12-25T20:03:40.741 [DEBUG] [Thread-17620] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:03:40.797 [DEBUG] [Thread-17620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:03:40.797 [DEBUG] [Thread-17620] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:03:40.797 [DEBUG] [Thread-17620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:03:40.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:03:40.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:03:40.859 [DEBUG] [Thread-17620] [transport.py] [_log()] userauth is OK
2025-12-25T20:03:40.859 [DEBUG] [Thread-17620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:03:40.859 [DEBUG] [Thread-17620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:03:40.859 [DEBUG] [Thread-17620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:03:40.859 [DEBUG] [Thread-17620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:03:40.874 [INFO] [Thread-17620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:03:40.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-25T20:03:40.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:03:41.685 [DEBUG] [Thread-17620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:03:41.685 [DEBUG] [Thread-17620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:03:41.733 [DEBUG] [Thread-17620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:03:41.734 [DEBUG] [Thread-17620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:03:41.742 [DEBUG] [Thread-17620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:03:41.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:03:41.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-25T20:03:41.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-25T20:03:41.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:03:41.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:03:41.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:03:41.774 [DEBUG] [Thread-17620] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:03:48.426 [DEBUG] [Thread-17622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:03.482 [DEBUG] [Thread-17623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:04:11.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:04:11.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-25T20:04:12.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 4, 7), 20.45, 25.73, 0.0, 29.32, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:04:12.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:04:07
2025-12-25T20:04:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:04:12.792 [DEBUG] [Thread-17624] [transport.py] [_log()] starting thread (client mode): 0xb6bb7ca0
2025-12-25T20:04:12.792 [DEBUG] [Thread-17624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:04:12.810 [DEBUG] [Thread-17624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:04:12.810 [INFO] [Thread-17624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] client lang: <none>
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] server lang: <none>
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] kex follows: False
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] Compression: none
2025-12-25T20:04:12.813 [DEBUG] [Thread-17624] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:04:12.831 [DEBUG] [Thread-17624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:04:12.831 [DEBUG] [Thread-17624] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:04:12.832 [DEBUG] [Thread-17624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:04:12.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:04:12.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:04:12.834 [DEBUG] [Thread-17624] [transport.py] [_log()] userauth is OK
2025-12-25T20:04:12.834 [DEBUG] [Thread-17624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:04:12.834 [DEBUG] [Thread-17624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:04:12.834 [DEBUG] [Thread-17624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:04:12.834 [DEBUG] [Thread-17624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:04:12.854 [INFO] [Thread-17624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:04:12.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:04:13.498 [DEBUG] [Thread-17624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:04:13.498 [DEBUG] [Thread-17624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:04:13.499 [DEBUG] [Thread-17624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:04:13.539 [DEBUG] [Thread-17624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:04:13.539 [DEBUG] [Thread-17624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:04:13.543 [DEBUG] [Thread-17624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:04:13.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:04:13.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:04:13.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:04:13.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:04:13.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:04:13.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:04:13.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:04:13.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:04:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:04:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.752490 -999.00  +21.20  30.92     31   +3.60 1 1 2 1 1   611    0 16.94 -42.36 ----- 29.1 30.9 297.8 42.1 21.6 -24.7 21.5 -24.2 21.2 -22.6 21.4 -23.6
2025-12-25T20:04:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:04:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:04:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.752490
2025-12-25T20:04:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:04:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:04:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:04:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:04:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:04:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:04:07', tmtdew=20.45, humidity=25.73, cloud=0.0, wind=29.32, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:03:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:04:13.564 [DEBUG] [Thread-17624] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:04:13.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-25T20:04:13.656 [DEBUG] [Thread-17627] [transport.py] [_log()] starting thread (client mode): 0xb6b7d5d0
2025-12-25T20:04:13.656 [DEBUG] [Thread-17627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:04:13.671 [DEBUG] [Thread-17627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:04:13.671 [INFO] [Thread-17627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:04:13.678 [DEBUG] [Thread-17627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] client lang: <none>
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] server lang: <none>
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] kex follows: False
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] Compression: none
2025-12-25T20:04:13.679 [DEBUG] [Thread-17627] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:04:13.739 [DEBUG] [Thread-17627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:04:13.740 [DEBUG] [Thread-17627] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:04:13.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:04:13.741 [DEBUG] [Thread-17627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:04:13.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:04:13.795 [DEBUG] [Thread-17627] [transport.py] [_log()] userauth is OK
2025-12-25T20:04:13.796 [DEBUG] [Thread-17627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:04:13.796 [DEBUG] [Thread-17627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:04:13.796 [DEBUG] [Thread-17627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:04:13.796 [DEBUG] [Thread-17627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:04:13.814 [INFO] [Thread-17627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:04:13.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-25T20:04:13.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:04:14.634 [DEBUG] [Thread-17627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:04:14.634 [DEBUG] [Thread-17627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:04:14.682 [DEBUG] [Thread-17627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:04:14.682 [DEBUG] [Thread-17627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:04:14.691 [DEBUG] [Thread-17627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:04:14.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:04:14.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-25T20:04:14.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:04:14.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:04:14.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:04:14.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:04:14.728 [DEBUG] [Thread-17627] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:04:18.512 [DEBUG] [Thread-17629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:22.607 [DEBUG] [Thread-17630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:31.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:31.736 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:33.553 [DEBUG] [Thread-17631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:04:44.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:04:44.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:04:44.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-25T20:04:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 4, 39), 20.38, 25.77, 0.0, 27.56, 21.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:04:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:04:39
2025-12-25T20:04:45.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:04:45.716 [DEBUG] [Thread-17632] [transport.py] [_log()] starting thread (client mode): 0xb955a080
2025-12-25T20:04:45.716 [DEBUG] [Thread-17632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:04:45.735 [DEBUG] [Thread-17632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:04:45.736 [INFO] [Thread-17632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] client lang: <none>
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] server lang: <none>
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] kex follows: False
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:04:45.739 [DEBUG] [Thread-17632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:04:45.740 [DEBUG] [Thread-17632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:04:45.740 [DEBUG] [Thread-17632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:04:45.740 [DEBUG] [Thread-17632] [transport.py] [_log()] Compression: none
2025-12-25T20:04:45.740 [DEBUG] [Thread-17632] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:04:45.758 [DEBUG] [Thread-17632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:04:45.759 [DEBUG] [Thread-17632] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:04:45.759 [DEBUG] [Thread-17632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:04:45.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:04:45.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:04:45.762 [DEBUG] [Thread-17632] [transport.py] [_log()] userauth is OK
2025-12-25T20:04:45.762 [DEBUG] [Thread-17632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:04:45.762 [DEBUG] [Thread-17632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:04:45.762 [DEBUG] [Thread-17632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:04:45.762 [DEBUG] [Thread-17632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:04:45.783 [INFO] [Thread-17632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:04:45.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:04:46.447 [DEBUG] [Thread-17632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:04:46.447 [DEBUG] [Thread-17632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:04:46.447 [DEBUG] [Thread-17632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:04:46.488 [DEBUG] [Thread-17632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:04:46.488 [DEBUG] [Thread-17632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:04:46.491 [DEBUG] [Thread-17632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:04:46.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:04:46.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:04:46.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:04:46.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:04:46.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:04:46.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:04:46.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:04:46.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:04:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:04:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.752838 -999.00  +21.20  31.17     31   +3.60 1 1 2 1 1   593    0 16.89 -37.59 ----- 27.9 31.2 294.6 35.5 21.6 -24.6 21.5 -24.1 21.2 -22.6 21.4 -23.6
2025-12-25T20:04:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:04:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:04:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.752838
2025-12-25T20:04:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:04:46.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:04:46.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:04:46.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:04:46.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:04:46.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:04:39', tmtdew=20.38, humidity=25.77, cloud=0.0, wind=27.56, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:04:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:04:46.519 [DEBUG] [Thread-17632] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:04:46.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-25T20:04:46.614 [DEBUG] [Thread-17635] [transport.py] [_log()] starting thread (client mode): 0xb6b21960
2025-12-25T20:04:46.614 [DEBUG] [Thread-17635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:04:46.631 [DEBUG] [Thread-17635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:04:46.631 [INFO] [Thread-17635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] client lang: <none>
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] server lang: <none>
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] kex follows: False
2025-12-25T20:04:46.639 [DEBUG] [Thread-17635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:04:46.640 [DEBUG] [Thread-17635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:04:46.640 [DEBUG] [Thread-17635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:04:46.640 [DEBUG] [Thread-17635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:04:46.640 [DEBUG] [Thread-17635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:04:46.640 [DEBUG] [Thread-17635] [transport.py] [_log()] Compression: none
2025-12-25T20:04:46.640 [DEBUG] [Thread-17635] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:04:46.700 [DEBUG] [Thread-17635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:04:46.700 [DEBUG] [Thread-17635] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:04:46.701 [DEBUG] [Thread-17635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:04:46.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:04:46.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:04:46.760 [DEBUG] [Thread-17635] [transport.py] [_log()] userauth is OK
2025-12-25T20:04:46.761 [DEBUG] [Thread-17635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:04:46.761 [DEBUG] [Thread-17635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:04:46.761 [DEBUG] [Thread-17635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:04:46.761 [DEBUG] [Thread-17635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:04:46.780 [INFO] [Thread-17635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:04:46.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-25T20:04:46.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:04:47.606 [DEBUG] [Thread-17635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:04:47.606 [DEBUG] [Thread-17635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:04:47.654 [DEBUG] [Thread-17635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:04:47.654 [DEBUG] [Thread-17635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:04:47.663 [DEBUG] [Thread-17635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:04:47.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:04: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-25T20:04: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-25T20:04:47.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:04:47.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:04:47.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:04:47.700 [DEBUG] [Thread-17635] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:04:48.587 [DEBUG] [Thread-17637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:03.633 [DEBUG] [Thread-17638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:17.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:05:17.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:05:17.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:05:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 5, 11), 20.38, 25.77, 0.0, 29.31, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:05:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:05:11
2025-12-25T20:05:18.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:05:18.664 [DEBUG] [Thread-17639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:18.706 [DEBUG] [Thread-17640] [transport.py] [_log()] starting thread (client mode): 0xb6b01a80
2025-12-25T20:05:18.706 [DEBUG] [Thread-17640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:05:18.728 [DEBUG] [Thread-17640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:05:18.728 [INFO] [Thread-17640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:05:18.731 [DEBUG] [Thread-17640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] client lang: <none>
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] server lang: <none>
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] kex follows: False
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:05:18.732 [DEBUG] [Thread-17640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:05:18.733 [DEBUG] [Thread-17640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:05:18.733 [DEBUG] [Thread-17640] [transport.py] [_log()] Compression: none
2025-12-25T20:05:18.733 [DEBUG] [Thread-17640] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:05:18.750 [DEBUG] [Thread-17640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:05:18.750 [DEBUG] [Thread-17640] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:05:18.751 [DEBUG] [Thread-17640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:05:18.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:05:18.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:05:18.752 [DEBUG] [Thread-17640] [transport.py] [_log()] userauth is OK
2025-12-25T20:05:18.753 [DEBUG] [Thread-17640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:05:18.753 [DEBUG] [Thread-17640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:05:18.753 [DEBUG] [Thread-17640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:05:18.753 [DEBUG] [Thread-17640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:05:18.777 [INFO] [Thread-17640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:05:18.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:05:19.705 [DEBUG] [Thread-17640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:05:19.705 [DEBUG] [Thread-17640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:05:19.705 [DEBUG] [Thread-17640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:05:19.747 [DEBUG] [Thread-17640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:05:19.747 [DEBUG] [Thread-17640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:05:19.749 [DEBUG] [Thread-17640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:05:19.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:05:19.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:05:19.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:05:19.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:05:19.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:05:19.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:05:19.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:05:19.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:05:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:05:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.753185 -999.00  +21.10  26.82     31   +3.60 1 1 1 1 1   575    0 16.86 -40.81 ----- 28.6 26.8 291.6 36.5 21.5 -24.8 21.4 -24.2 21.2 -22.5 21.4 -23.6
2025-12-25T20:05:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:05:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:05:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.753185
2025-12-25T20:05:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:05:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:05:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:05:19.777 [DEBUG] [Thread-17640] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:05:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:05:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:05:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:05:11', tmtdew=20.38, humidity=25.77, cloud=0.0, wind=29.31, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:04:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:05:19.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-25T20:05:19.871 [DEBUG] [Thread-17643] [transport.py] [_log()] starting thread (client mode): 0xb6b604f0
2025-12-25T20:05:19.871 [DEBUG] [Thread-17643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:05:19.885 [DEBUG] [Thread-17643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:05:19.885 [INFO] [Thread-17643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] client lang: <none>
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] server lang: <none>
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] kex follows: False
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:05:19.893 [DEBUG] [Thread-17643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:05:19.894 [DEBUG] [Thread-17643] [transport.py] [_log()] Compression: none
2025-12-25T20:05:19.894 [DEBUG] [Thread-17643] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:05:19.950 [DEBUG] [Thread-17643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:05:19.951 [DEBUG] [Thread-17643] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:05:19.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:05:19.952 [DEBUG] [Thread-17643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:05:19.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:05:20.007 [DEBUG] [Thread-17643] [transport.py] [_log()] userauth is OK
2025-12-25T20:05:20.007 [DEBUG] [Thread-17643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:05:20.007 [DEBUG] [Thread-17643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:05:20.007 [DEBUG] [Thread-17643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:05:20.007 [DEBUG] [Thread-17643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:05:20.026 [INFO] [Thread-17643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:05:20.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-25T20:05:20.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:05:20.905 [DEBUG] [Thread-17643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:05:20.905 [DEBUG] [Thread-17643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:05:20.952 [DEBUG] [Thread-17643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:05:20.953 [DEBUG] [Thread-17643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:05:20.968 [DEBUG] [Thread-17643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:05:20.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:05:20.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-25T20:05: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') -> 00000000
2025-12-25T20:05:21.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:05:21.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:05:21.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:05:21.012 [DEBUG] [Thread-17643] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:05:22.672 [DEBUG] [Thread-17645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:33.699 [DEBUG] [Thread-17646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:38.395 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:38.396 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:48.747 [DEBUG] [Thread-17647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:05:51.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:05:51.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:05:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:05:51.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 5, 43), 20.37, 25.78, 0.0, 34.46, 21.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:05:51.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:05:43
2025-12-25T20:05:51.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:05:52.014 [DEBUG] [Thread-17648] [transport.py] [_log()] starting thread (client mode): 0xb6b76890
2025-12-25T20:05:52.014 [DEBUG] [Thread-17648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:05:52.035 [DEBUG] [Thread-17648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:05:52.036 [INFO] [Thread-17648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:05:52.038 [DEBUG] [Thread-17648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] client lang: <none>
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] server lang: <none>
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] kex follows: False
2025-12-25T20:05:52.039 [DEBUG] [Thread-17648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:05:52.040 [DEBUG] [Thread-17648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:05:52.040 [DEBUG] [Thread-17648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:05:52.040 [DEBUG] [Thread-17648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:05:52.040 [DEBUG] [Thread-17648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:05:52.040 [DEBUG] [Thread-17648] [transport.py] [_log()] Compression: none
2025-12-25T20:05:52.040 [DEBUG] [Thread-17648] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:05:52.057 [DEBUG] [Thread-17648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:05:52.058 [DEBUG] [Thread-17648] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:05:52.059 [DEBUG] [Thread-17648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:05:52.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:05:52.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:05:52.061 [DEBUG] [Thread-17648] [transport.py] [_log()] userauth is OK
2025-12-25T20:05:52.061 [DEBUG] [Thread-17648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:05:52.061 [DEBUG] [Thread-17648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:05:52.061 [DEBUG] [Thread-17648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:05:52.062 [DEBUG] [Thread-17648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:05:52.098 [INFO] [Thread-17648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:05:52.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:05:52.738 [DEBUG] [Thread-17648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:05:52.738 [DEBUG] [Thread-17648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:05:52.738 [DEBUG] [Thread-17648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:05:52.779 [DEBUG] [Thread-17648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:05:52.779 [DEBUG] [Thread-17648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:05:52.783 [DEBUG] [Thread-17648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:05:52.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:05:52.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:05:52.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:05:52.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:05:52.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:05:52.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:05:52.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:05:52.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:05:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:05:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.753532 -999.00  +21.10  31.05     31   +3.50 1 1 2 1 1   557    0 16.69 -38.74 ----- 34.7 31.1 296.8 43.6 21.5 -24.7 21.4 -24.2 21.2 -22.5 21.4 -23.7
2025-12-25T20:05:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:05:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:05:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.753532
2025-12-25T20:05:52.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:05:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:05:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:05:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:05:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:05:52.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:05:43', tmtdew=20.37, humidity=25.78, cloud=0.0, wind=34.46, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:05:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:05:52.811 [DEBUG] [Thread-17648] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:05:52.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-25T20:05:52.904 [DEBUG] [Thread-17651] [transport.py] [_log()] starting thread (client mode): 0xb95b1780
2025-12-25T20:05:52.905 [DEBUG] [Thread-17651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:05:52.919 [DEBUG] [Thread-17651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:05:52.919 [INFO] [Thread-17651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] client lang: <none>
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] server lang: <none>
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] kex follows: False
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] Compression: none
2025-12-25T20:05:52.927 [DEBUG] [Thread-17651] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:05:52.983 [DEBUG] [Thread-17651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:05:52.984 [DEBUG] [Thread-17651] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:05:52.984 [DEBUG] [Thread-17651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:05:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:05:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:05:53.039 [DEBUG] [Thread-17651] [transport.py] [_log()] userauth is OK
2025-12-25T20:05:53.040 [DEBUG] [Thread-17651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:05:53.040 [DEBUG] [Thread-17651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:05:53.040 [DEBUG] [Thread-17651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:05:53.040 [DEBUG] [Thread-17651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:05:53.060 [INFO] [Thread-17651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:05:53.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-25T20:05:53.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:05:53.889 [DEBUG] [Thread-17651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:05:53.889 [DEBUG] [Thread-17651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:05:53.937 [DEBUG] [Thread-17651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:05:53.937 [DEBUG] [Thread-17651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:05:53.946 [DEBUG] [Thread-17651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:05:53.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:05:53.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-25T20:05:53.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-25T20:05:53.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:05:53.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:05:53.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:05:53.984 [DEBUG] [Thread-17651] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:06:03.785 [DEBUG] [Thread-17653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:18.841 [DEBUG] [Thread-17654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:22.735 [DEBUG] [Thread-17655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:24.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:06:24.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:06:24.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:06:24.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 6, 16), 20.37, 25.78, 0.0, 32.54, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:06:24.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:06:16
2025-12-25T20:06:24.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:06:24.972 [DEBUG] [Thread-17656] [transport.py] [_log()] starting thread (client mode): 0xb6bf4430
2025-12-25T20:06:24.972 [DEBUG] [Thread-17656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:06:24.991 [DEBUG] [Thread-17656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:06:24.992 [INFO] [Thread-17656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] client lang: <none>
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] server lang: <none>
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] kex follows: False
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] Compression: none
2025-12-25T20:06:24.995 [DEBUG] [Thread-17656] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:06:25.012 [DEBUG] [Thread-17656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:06:25.012 [DEBUG] [Thread-17656] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:06:25.013 [DEBUG] [Thread-17656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:06:25.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:06:25.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:06:25.014 [DEBUG] [Thread-17656] [transport.py] [_log()] userauth is OK
2025-12-25T20:06:25.014 [DEBUG] [Thread-17656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:06:25.015 [DEBUG] [Thread-17656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:06:25.015 [DEBUG] [Thread-17656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:06:25.015 [DEBUG] [Thread-17656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:06:25.036 [INFO] [Thread-17656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:06:25.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:06:25.831 [DEBUG] [Thread-17656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:06:25.831 [DEBUG] [Thread-17656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:06:25.832 [DEBUG] [Thread-17656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:06:25.873 [DEBUG] [Thread-17656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:06:25.874 [DEBUG] [Thread-17656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:06:25.875 [DEBUG] [Thread-17656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:06:25.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:06:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:06:25.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:06:25.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:06:25.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:06:25.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:06:25.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:06:25.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:06:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:06:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.753879 -999.00  +21.10  32.90     31   +3.60 1 1 2 1 1   538    0 16.67 -37.29 ----- 36.1 32.9 298.2 42.0 21.5 -24.8 21.4 -24.1 21.1 -22.6 21.4 -23.6
2025-12-25T20:06:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:06:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:06:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.753879
2025-12-25T20:06:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:06:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:06:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:06:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:06:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:06:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:06:16', tmtdew=20.37, humidity=25.78, cloud=0.0, wind=32.54, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:05:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:06:25.891 [DEBUG] [Thread-17656] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:06:25.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-25T20:06:25.985 [DEBUG] [Thread-17659] [transport.py] [_log()] starting thread (client mode): 0xb6b7f4f0
2025-12-25T20:06:25.985 [DEBUG] [Thread-17659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:06:25.998 [DEBUG] [Thread-17659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:06:25.999 [INFO] [Thread-17659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:06:26.006 [DEBUG] [Thread-17659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:06:26.006 [DEBUG] [Thread-17659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:06:26.006 [DEBUG] [Thread-17659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] client lang: <none>
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] server lang: <none>
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] kex follows: False
2025-12-25T20:06:26.007 [DEBUG] [Thread-17659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:06:26.008 [DEBUG] [Thread-17659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:06:26.008 [DEBUG] [Thread-17659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:06:26.008 [DEBUG] [Thread-17659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:06:26.008 [DEBUG] [Thread-17659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:06:26.008 [DEBUG] [Thread-17659] [transport.py] [_log()] Compression: none
2025-12-25T20:06:26.008 [DEBUG] [Thread-17659] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:06:26.062 [DEBUG] [Thread-17659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:06:26.063 [DEBUG] [Thread-17659] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:06:26.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:06:26.064 [DEBUG] [Thread-17659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:06:26.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:06:26.123 [DEBUG] [Thread-17659] [transport.py] [_log()] userauth is OK
2025-12-25T20:06:26.123 [DEBUG] [Thread-17659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:06:26.123 [DEBUG] [Thread-17659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:06:26.123 [DEBUG] [Thread-17659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:06:26.123 [DEBUG] [Thread-17659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:06:26.142 [INFO] [Thread-17659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:06:26.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-25T20:06:26.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:06:26.948 [DEBUG] [Thread-17659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:06:26.949 [DEBUG] [Thread-17659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:06:26.996 [DEBUG] [Thread-17659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:06:26.997 [DEBUG] [Thread-17659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:06:27.005 [DEBUG] [Thread-17659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:06:27.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:06:27.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-25T20:06: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') -> 00000000
2025-12-25T20:06:27.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:06:27.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:06:27.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:06:27.043 [DEBUG] [Thread-17659] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:06:33.872 [DEBUG] [Thread-17661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:43.560 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:43.561 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:48.919 [DEBUG] [Thread-17662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:06:57.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:06:57.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:06:57.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-25T20:06:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 6, 48), 20.42, 25.78, 0.0, 27.05, 21.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:06:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:06:48
2025-12-25T20:06:57.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:06:58.080 [DEBUG] [Thread-17663] [transport.py] [_log()] starting thread (client mode): 0xb95b2e90
2025-12-25T20:06:58.080 [DEBUG] [Thread-17663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:06:58.101 [DEBUG] [Thread-17663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:06:58.101 [INFO] [Thread-17663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:06:58.104 [DEBUG] [Thread-17663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:06:58.104 [DEBUG] [Thread-17663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:06:58.104 [DEBUG] [Thread-17663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:06:58.104 [DEBUG] [Thread-17663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:58.104 [DEBUG] [Thread-17663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] client lang: <none>
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] server lang: <none>
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] kex follows: False
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] Compression: none
2025-12-25T20:06:58.105 [DEBUG] [Thread-17663] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:06:58.121 [DEBUG] [Thread-17663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:06:58.121 [DEBUG] [Thread-17663] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:06:58.121 [DEBUG] [Thread-17663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:06:58.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:06:58.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:06:58.122 [DEBUG] [Thread-17663] [transport.py] [_log()] userauth is OK
2025-12-25T20:06:58.122 [DEBUG] [Thread-17663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:06:58.122 [DEBUG] [Thread-17663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:06:58.122 [DEBUG] [Thread-17663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:06:58.122 [DEBUG] [Thread-17663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:06:58.141 [INFO] [Thread-17663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:06:58.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:06:58.785 [DEBUG] [Thread-17663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:06:58.785 [DEBUG] [Thread-17663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:06:58.786 [DEBUG] [Thread-17663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:06:58.826 [DEBUG] [Thread-17663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:06:58.827 [DEBUG] [Thread-17663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:06:58.829 [DEBUG] [Thread-17663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:06:58.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:06:58.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:06:58.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:06:58.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:06:58.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:06:58.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:06:58.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.754227 -999.00  +21.10  29.55     31   +3.60 1 1 1 1 1   519    0 17.09 -35.80 ----- 29.3 29.6 299.2 39.8 21.4 -24.7 21.4 -24.1 21.1 -22.5 21.4 -23.7
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.754227
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:06:58.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:06:48', tmtdew=20.42, humidity=25.78, cloud=0.0, wind=27.05, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:06:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:06:58.846 [DEBUG] [Thread-17663] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:06:58.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-25T20:06:58.932 [DEBUG] [Thread-17666] [transport.py] [_log()] starting thread (client mode): 0xb95b38e0
2025-12-25T20:06:58.932 [DEBUG] [Thread-17666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:06:58.947 [DEBUG] [Thread-17666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:06:58.947 [INFO] [Thread-17666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:06:58.954 [DEBUG] [Thread-17666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] client lang: <none>
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] server lang: <none>
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] kex follows: False
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] Compression: none
2025-12-25T20:06:58.955 [DEBUG] [Thread-17666] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:06:59.009 [DEBUG] [Thread-17666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:06:59.009 [DEBUG] [Thread-17666] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:06:59.009 [DEBUG] [Thread-17666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:06:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:06:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:06:59.067 [DEBUG] [Thread-17666] [transport.py] [_log()] userauth is OK
2025-12-25T20:06:59.067 [DEBUG] [Thread-17666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:06:59.067 [DEBUG] [Thread-17666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:06:59.067 [DEBUG] [Thread-17666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:06:59.067 [DEBUG] [Thread-17666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:06:59.080 [INFO] [Thread-17666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:06:59.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-25T20:06:59.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:06:59.926 [DEBUG] [Thread-17666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:06:59.926 [DEBUG] [Thread-17666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:06:59.974 [DEBUG] [Thread-17666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:06:59.974 [DEBUG] [Thread-17666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:06:59.982 [DEBUG] [Thread-17666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:06:59.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:06:59.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-25T20:06: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') -> 00000000
2025-12-25T20:07:00.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:07:00.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:07:00.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:07:00.013 [DEBUG] [Thread-17666] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:07:03.952 [DEBUG] [Thread-17668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:07:19.003 [DEBUG] [Thread-17669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:07:22.790 [DEBUG] [Thread-17670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:07:30.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:07:30.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:07:30.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-25T20:07:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 7, 20), 20.42, 25.78, 0.0, 26.09, 21.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:07:30.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:07:20
2025-12-25T20:07:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:07:31.001 [DEBUG] [Thread-17671] [transport.py] [_log()] starting thread (client mode): 0xb6b609a0
2025-12-25T20:07:31.001 [DEBUG] [Thread-17671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:07:31.021 [DEBUG] [Thread-17671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:07:31.021 [INFO] [Thread-17671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] client lang: <none>
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] server lang: <none>
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] kex follows: False
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] Compression: none
2025-12-25T20:07:31.024 [DEBUG] [Thread-17671] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:07:31.040 [DEBUG] [Thread-17671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:07:31.040 [DEBUG] [Thread-17671] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:07:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:07:31.041 [DEBUG] [Thread-17671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:07:31.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:07:31.043 [DEBUG] [Thread-17671] [transport.py] [_log()] userauth is OK
2025-12-25T20:07:31.043 [DEBUG] [Thread-17671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:07:31.043 [DEBUG] [Thread-17671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:07:31.043 [DEBUG] [Thread-17671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:07:31.044 [DEBUG] [Thread-17671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:07:31.064 [INFO] [Thread-17671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:07:31.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:07:31.841 [DEBUG] [Thread-17671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:07:31.841 [DEBUG] [Thread-17671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:07:31.842 [DEBUG] [Thread-17671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:07:31.882 [DEBUG] [Thread-17671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:07:31.882 [DEBUG] [Thread-17671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:07:31.886 [DEBUG] [Thread-17671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:07:31.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:07:31.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:07:31.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:07:31.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:07:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:07:31.909 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:07:31.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:07:31.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:07:31.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:07:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.754574 -999.00  +21.10  34.80     31   +3.60 1 1 2 1 1   499    0 17.02 -36.10 ----- 36.8 34.8 300.0 39.1 21.4 -24.6 21.4 -24.1 21.1 -22.5 21.4 -23.6
2025-12-25T20:07:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:07:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:07:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.754574
2025-12-25T20:07:31.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:07:31.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:07:31.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:07:31.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:07:31.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:07:31.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:07:20', tmtdew=20.42, humidity=25.78, cloud=0.0, wind=26.09, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:06:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:07:31.911 [DEBUG] [Thread-17671] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:07:31.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-25T20:07:32.004 [DEBUG] [Thread-17674] [transport.py] [_log()] starting thread (client mode): 0xb95b1060
2025-12-25T20:07:32.005 [DEBUG] [Thread-17674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:07:32.019 [DEBUG] [Thread-17674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:07:32.020 [INFO] [Thread-17674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:07:32.027 [DEBUG] [Thread-17674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:07:32.027 [DEBUG] [Thread-17674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] client lang: <none>
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] server lang: <none>
2025-12-25T20:07:32.028 [DEBUG] [Thread-17674] [transport.py] [_log()] kex follows: False
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] Compression: none
2025-12-25T20:07:32.029 [DEBUG] [Thread-17674] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:07:32.088 [DEBUG] [Thread-17674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:07:32.088 [DEBUG] [Thread-17674] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:07:32.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:07:32.090 [DEBUG] [Thread-17674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:07:32.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:07:32.144 [DEBUG] [Thread-17674] [transport.py] [_log()] userauth is OK
2025-12-25T20:07:32.144 [DEBUG] [Thread-17674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:07:32.144 [DEBUG] [Thread-17674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:07:32.144 [DEBUG] [Thread-17674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:07:32.144 [DEBUG] [Thread-17674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:07:32.163 [INFO] [Thread-17674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:07:32.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-25T20:07:32.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:07:32.990 [DEBUG] [Thread-17674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:07:32.990 [DEBUG] [Thread-17674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:07:33.038 [DEBUG] [Thread-17674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:07:33.038 [DEBUG] [Thread-17674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:07:33.047 [DEBUG] [Thread-17674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:07:33.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:07:33.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-25T20:07:33.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-25T20:07:33.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:07:33.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:07:33.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:07:33.081 [DEBUG] [Thread-17674] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:07:34.038 [DEBUG] [Thread-17676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:07:49.074 [DEBUG] [Thread-17677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:07:49.178 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:07:49.180 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:03.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:08:03.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:08:03.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-25T20:08:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 7, 52), 20.37, 25.78, 0.0, 35.78, 21.22, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:08:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:07:52
2025-12-25T20:08:03.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:08:04.076 [DEBUG] [Thread-17678] [transport.py] [_log()] starting thread (client mode): 0xb6b62950
2025-12-25T20:08:04.076 [DEBUG] [Thread-17678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:08:04.094 [DEBUG] [Thread-17678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:08:04.094 [INFO] [Thread-17678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] client lang: <none>
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] server lang: <none>
2025-12-25T20:08:04.098 [DEBUG] [Thread-17678] [transport.py] [_log()] kex follows: False
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] Compression: none
2025-12-25T20:08:04.099 [DEBUG] [Thread-17678] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:08:04.114 [DEBUG] [Thread-17680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:04.115 [DEBUG] [Thread-17678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:08:04.116 [DEBUG] [Thread-17678] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:08:04.117 [DEBUG] [Thread-17678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:08:04.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:08:04.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:08:04.120 [DEBUG] [Thread-17678] [transport.py] [_log()] userauth is OK
2025-12-25T20:08:04.120 [DEBUG] [Thread-17678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:08:04.120 [DEBUG] [Thread-17678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:08:04.121 [DEBUG] [Thread-17678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:08:04.121 [DEBUG] [Thread-17678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:08:04.144 [INFO] [Thread-17678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:08:04.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:08:04.764 [DEBUG] [Thread-17678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:08:04.764 [DEBUG] [Thread-17678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:08:04.765 [DEBUG] [Thread-17678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:08:04.806 [DEBUG] [Thread-17678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:08:04.806 [DEBUG] [Thread-17678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:08:04.809 [DEBUG] [Thread-17678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:08:04.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:08:04.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:08:04.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:08:04.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:08:04.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:08:04.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:08:04.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:08:04.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:08:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:08:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.754921 -999.00  +21.10  26.22     31   +3.50 1 1 1 1 1   480    0 16.76 -36.57 ----- 30.4 26.2 301.6 38.6 21.4 -24.6 21.4 -24.1 21.1 -22.5 21.4 -23.7
2025-12-25T20:08:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:08:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:08:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.754921
2025-12-25T20:08:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:08:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:08:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:08:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:08:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:08:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:07:52', tmtdew=20.37, humidity=25.78, cloud=0.0, wind=35.78, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:07:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:08:04.836 [DEBUG] [Thread-17678] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:08:04.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-25T20:08:04.929 [DEBUG] [Thread-17682] [transport.py] [_log()] starting thread (client mode): 0xb95b3490
2025-12-25T20:08:04.930 [DEBUG] [Thread-17682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:08:04.945 [DEBUG] [Thread-17682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:08:04.945 [INFO] [Thread-17682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:04.952 [DEBUG] [Thread-17682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] client lang: <none>
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] server lang: <none>
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] kex follows: False
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] Compression: none
2025-12-25T20:08:04.953 [DEBUG] [Thread-17682] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:08:05.014 [DEBUG] [Thread-17682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:08:05.014 [DEBUG] [Thread-17682] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:08:05.015 [DEBUG] [Thread-17682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:08:05.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:08:05.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:08:05.071 [DEBUG] [Thread-17682] [transport.py] [_log()] userauth is OK
2025-12-25T20:08:05.071 [DEBUG] [Thread-17682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:08:05.071 [DEBUG] [Thread-17682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:08:05.071 [DEBUG] [Thread-17682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:08:05.071 [DEBUG] [Thread-17682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:08:05.091 [INFO] [Thread-17682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:08:05.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-25T20:08:05.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:08:05.945 [DEBUG] [Thread-17682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:08:05.945 [DEBUG] [Thread-17682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:08:05.993 [DEBUG] [Thread-17682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:08:05.993 [DEBUG] [Thread-17682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:08:06.003 [DEBUG] [Thread-17682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:08:06.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:08:06.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-25T20:08:06.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:08:06.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:08:06.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:08:06.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:08:06.046 [DEBUG] [Thread-17682] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:08:19.145 [DEBUG] [Thread-17684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:22.858 [DEBUG] [Thread-17685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:24.207 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:34.202 [DEBUG] [Thread-17687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:36.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:08:36.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:08:36.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-25T20:08:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 8, 24), 20.38, 25.77, 0.0, 36.98, 21.23, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:08:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:08:24
2025-12-25T20:08:36.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:08:37.039 [DEBUG] [Thread-17688] [transport.py] [_log()] starting thread (client mode): 0xb6bf7d60
2025-12-25T20:08:37.039 [DEBUG] [Thread-17688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:08:37.059 [DEBUG] [Thread-17688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:08:37.059 [INFO] [Thread-17688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:08:37.062 [DEBUG] [Thread-17688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:08:37.062 [DEBUG] [Thread-17688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:08:37.062 [DEBUG] [Thread-17688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:08:37.062 [DEBUG] [Thread-17688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] client lang: <none>
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] server lang: <none>
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] kex follows: False
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] Compression: none
2025-12-25T20:08:37.063 [DEBUG] [Thread-17688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:08:37.083 [DEBUG] [Thread-17688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:08:37.084 [DEBUG] [Thread-17688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:08:37.084 [DEBUG] [Thread-17688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:08:37.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:08:37.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:08:37.128 [DEBUG] [Thread-17688] [transport.py] [_log()] userauth is OK
2025-12-25T20:08:37.128 [DEBUG] [Thread-17688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:08:37.129 [DEBUG] [Thread-17688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:08:37.129 [DEBUG] [Thread-17688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:08:37.129 [DEBUG] [Thread-17688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:08:37.152 [INFO] [Thread-17688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:08:37.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:08:37.910 [DEBUG] [Thread-17688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:08:37.910 [DEBUG] [Thread-17688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:08:37.910 [DEBUG] [Thread-17688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:08:37.951 [DEBUG] [Thread-17688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:08:37.951 [DEBUG] [Thread-17688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:08:37.954 [DEBUG] [Thread-17688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:08:37.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:08:37.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:08:37.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:08:37.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:08:37.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:08:37.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:08:37.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:08:37.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:08:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:08:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.755615 -999.00  +21.00  35.94     31   +3.50 1 1 2 1 1   440    0 16.69 -38.17 ----- 40.8 35.9 295.6 40.6 21.4 -24.6 21.3 -24.1 21.1 -22.6 21.4 -23.4
2025-12-25T20:08:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:08:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:08:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.755615
2025-12-25T20:08:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:08:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:08:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:08:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:08:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:08:37.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:08:24', tmtdew=20.38, humidity=25.77, cloud=0.0, wind=36.98, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:08:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:08:37.974 [DEBUG] [Thread-17688] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:08:38.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-25T20:08:38.070 [DEBUG] [Thread-17691] [transport.py] [_log()] starting thread (client mode): 0xb6bf71c0
2025-12-25T20:08:38.070 [DEBUG] [Thread-17691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:08:38.086 [DEBUG] [Thread-17691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:08:38.086 [INFO] [Thread-17691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:08:38.093 [DEBUG] [Thread-17691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] client lang: <none>
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] server lang: <none>
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] kex follows: False
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] Compression: none
2025-12-25T20:08:38.094 [DEBUG] [Thread-17691] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:08:38.151 [DEBUG] [Thread-17691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:08:38.151 [DEBUG] [Thread-17691] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:08:38.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:08:38.152 [DEBUG] [Thread-17691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:08:38.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:08:38.207 [DEBUG] [Thread-17691] [transport.py] [_log()] userauth is OK
2025-12-25T20:08:38.207 [DEBUG] [Thread-17691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:08:38.207 [DEBUG] [Thread-17691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:08:38.208 [DEBUG] [Thread-17691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:08:38.208 [DEBUG] [Thread-17691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:08:38.230 [INFO] [Thread-17691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:08:38.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-25T20:08:38.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:08:39.033 [DEBUG] [Thread-17691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:08:39.033 [DEBUG] [Thread-17691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:08:39.080 [DEBUG] [Thread-17691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:08:39.081 [DEBUG] [Thread-17691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:08:39.089 [DEBUG] [Thread-17691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:08:39.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:08:39.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-25T20:08:39.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:08:39.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:08:39.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:08:39.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:08:39.123 [DEBUG] [Thread-17691] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:08:49.236 [DEBUG] [Thread-17693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:54.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:08:54.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:03.908 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:04.281 [DEBUG] [Thread-17694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:09.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:09:09.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:09:09.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-25T20:09:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 8, 56), 20.4, 25.8, 0.0, 29.29, 21.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:09:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:08:56
2025-12-25T20:09:09.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:09:10.112 [DEBUG] [Thread-17695] [transport.py] [_log()] starting thread (client mode): 0xb9590ee0
2025-12-25T20:09:10.112 [DEBUG] [Thread-17695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:09:10.132 [DEBUG] [Thread-17695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:09:10.132 [INFO] [Thread-17695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:10.135 [DEBUG] [Thread-17695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] client lang: <none>
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] server lang: <none>
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] kex follows: False
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] Compression: none
2025-12-25T20:09:10.136 [DEBUG] [Thread-17695] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:09:10.152 [DEBUG] [Thread-17695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:09:10.153 [DEBUG] [Thread-17695] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:09:10.153 [DEBUG] [Thread-17695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:09:10.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:09:10.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:09:10.155 [DEBUG] [Thread-17695] [transport.py] [_log()] userauth is OK
2025-12-25T20:09:10.156 [DEBUG] [Thread-17695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:09:10.156 [DEBUG] [Thread-17695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:09:10.156 [DEBUG] [Thread-17695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:09:10.156 [DEBUG] [Thread-17695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:09:10.175 [INFO] [Thread-17695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:09:10.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:09:10.830 [DEBUG] [Thread-17695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:09:10.830 [DEBUG] [Thread-17695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:09:10.831 [DEBUG] [Thread-17695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:09:10.871 [DEBUG] [Thread-17695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:09:10.871 [DEBUG] [Thread-17695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:09:10.874 [DEBUG] [Thread-17695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:09:10.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:09:10.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:09:10.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:09:10.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:09:10.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:09:10.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:09:10.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:09:10.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:09:10.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:09:10.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.755962 -999.00  +21.00  32.61     31   +3.50 1 1 2 1 1   420    0 16.83 -37.25 ----- 32.1 32.6 295.6 45.0 21.4 -24.6 21.3 -24.1 21.1 -22.4 21.3 -23.5
2025-12-25T20:09:10.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:09:10.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:09:10.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.755962
2025-12-25T20:09:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:09:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:09:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:09:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:09:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:09:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:08:56', tmtdew=20.4, humidity=25.8, cloud=0.0, wind=29.29, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:08:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:09:10.902 [DEBUG] [Thread-17695] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:09:10.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-25T20:09:10.997 [DEBUG] [Thread-17698] [transport.py] [_log()] starting thread (client mode): 0xb6b60a90
2025-12-25T20:09:10.997 [DEBUG] [Thread-17698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:09:11.013 [DEBUG] [Thread-17698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:09:11.014 [INFO] [Thread-17698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:09:11.021 [DEBUG] [Thread-17698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:09:11.022 [DEBUG] [Thread-17698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] client lang: <none>
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] server lang: <none>
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] kex follows: False
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:09:11.023 [DEBUG] [Thread-17698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:09:11.024 [DEBUG] [Thread-17698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:09:11.024 [DEBUG] [Thread-17698] [transport.py] [_log()] Compression: none
2025-12-25T20:09:11.025 [DEBUG] [Thread-17698] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:09:11.080 [DEBUG] [Thread-17698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:09:11.081 [DEBUG] [Thread-17698] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:09:11.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:09:11.082 [DEBUG] [Thread-17698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:09:11.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:09:11.135 [DEBUG] [Thread-17698] [transport.py] [_log()] userauth is OK
2025-12-25T20:09:11.135 [DEBUG] [Thread-17698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:09:11.135 [DEBUG] [Thread-17698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:09:11.135 [DEBUG] [Thread-17698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:09:11.135 [DEBUG] [Thread-17698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:09:11.149 [INFO] [Thread-17698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:09: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-25T20:09:11.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:09:11.972 [DEBUG] [Thread-17698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:09:11.973 [DEBUG] [Thread-17698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:09:12.021 [DEBUG] [Thread-17698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:09:12.021 [DEBUG] [Thread-17698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:09:12.031 [DEBUG] [Thread-17698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:09:12.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:09:12.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-25T20:09:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:09:12.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:09:12.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:09:12.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:09:12.065 [DEBUG] [Thread-17698] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:09:19.316 [DEBUG] [Thread-17700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:22.923 [DEBUG] [Thread-17701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:32.619 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:34.366 [DEBUG] [Thread-17702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:42.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:09:42.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:09:42.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:09:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 9, 28), 20.41, 25.78, 0.0, 27.21, 21.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:09:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:09:28
2025-12-25T20:09:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:09:43.047 [DEBUG] [Thread-17703] [transport.py] [_log()] starting thread (client mode): 0xb6b02c80
2025-12-25T20:09:43.047 [DEBUG] [Thread-17703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:09:43.064 [DEBUG] [Thread-17703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:09:43.064 [INFO] [Thread-17703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] client lang: <none>
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] server lang: <none>
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] kex follows: False
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] Compression: none
2025-12-25T20:09:43.067 [DEBUG] [Thread-17703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:09:43.086 [DEBUG] [Thread-17703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:09:43.087 [DEBUG] [Thread-17703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:09:43.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:09:43.088 [DEBUG] [Thread-17703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:09:43.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:09:43.129 [DEBUG] [Thread-17703] [transport.py] [_log()] userauth is OK
2025-12-25T20:09:43.129 [DEBUG] [Thread-17703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:09:43.129 [DEBUG] [Thread-17703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:09:43.129 [DEBUG] [Thread-17703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:09:43.129 [DEBUG] [Thread-17703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:09:43.149 [INFO] [Thread-17703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:09:43.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:09:43.861 [DEBUG] [Thread-17703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:09:43.862 [DEBUG] [Thread-17703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:09:43.863 [DEBUG] [Thread-17703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:09:43.903 [DEBUG] [Thread-17703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:09:43.903 [DEBUG] [Thread-17703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:09:43.906 [DEBUG] [Thread-17703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:09:43.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:09:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:09:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:09:43.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:09:43.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:09:43.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:09:43.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:09:43.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:09:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:09:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.756310 -999.00  +21.00  29.94     31   +3.50 1 1 1 1 1   400    0 16.55 -38.56 ----- 31.0 29.9 301.0 36.5 21.4 -24.6 21.3 -24.1 21.0 -22.3 21.3 -23.4
2025-12-25T20:09:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:09:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:09:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.756310
2025-12-25T20:09:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:09:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:09:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:09:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:09:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:09:43.924 [DEBUG] [Thread-17703] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:09:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:09:28', tmtdew=20.41, humidity=25.78, cloud=0.0, wind=27.21, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:09:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:09:44.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:09:44.015 [DEBUG] [Thread-17706] [transport.py] [_log()] starting thread (client mode): 0xb6b03ee0
2025-12-25T20:09:44.015 [DEBUG] [Thread-17706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:09:44.029 [DEBUG] [Thread-17706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:09:44.029 [INFO] [Thread-17706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] client lang: <none>
2025-12-25T20:09:44.036 [DEBUG] [Thread-17706] [transport.py] [_log()] server lang: <none>
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] kex follows: False
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] Compression: none
2025-12-25T20:09:44.037 [DEBUG] [Thread-17706] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:09:44.096 [DEBUG] [Thread-17706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:09:44.096 [DEBUG] [Thread-17706] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:09:44.097 [DEBUG] [Thread-17706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:09:44.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:09:44.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:09:44.152 [DEBUG] [Thread-17706] [transport.py] [_log()] userauth is OK
2025-12-25T20:09:44.152 [DEBUG] [Thread-17706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:09:44.152 [DEBUG] [Thread-17706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:09:44.153 [DEBUG] [Thread-17706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:09:44.153 [DEBUG] [Thread-17706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:09:44.172 [INFO] [Thread-17706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:09:44.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-25T20:09:44.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:09:44.989 [DEBUG] [Thread-17706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:09:44.989 [DEBUG] [Thread-17706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:09:45.037 [DEBUG] [Thread-17706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:09:45.037 [DEBUG] [Thread-17706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:09:45.046 [DEBUG] [Thread-17706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:09:45.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:09:45.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-25T20:09:45.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:09:45.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:09:45.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:09:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:09:45.083 [DEBUG] [Thread-17706] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:09:49.401 [DEBUG] [Thread-17708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:59.686 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:09:59.687 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:10:04.450 [DEBUG] [Thread-17709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:10:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:10:15.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:10:15.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-25T20:10:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 10), 20.4, 25.8, 0.0, 25.92, 21.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:10:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:10:00
2025-12-25T20:10:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:10:16.077 [DEBUG] [Thread-17710] [transport.py] [_log()] starting thread (client mode): 0xb6bc3610
2025-12-25T20:10:16.077 [DEBUG] [Thread-17710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:10:16.097 [DEBUG] [Thread-17710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:10:16.097 [INFO] [Thread-17710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] client lang: <none>
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] server lang: <none>
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] kex follows: False
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:10:16.101 [DEBUG] [Thread-17710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:10:16.102 [DEBUG] [Thread-17710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:10:16.102 [DEBUG] [Thread-17710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:10:16.102 [DEBUG] [Thread-17710] [transport.py] [_log()] Compression: none
2025-12-25T20:10:16.102 [DEBUG] [Thread-17710] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:10:16.119 [DEBUG] [Thread-17710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:10:16.120 [DEBUG] [Thread-17710] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:10:16.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:10:16.121 [DEBUG] [Thread-17710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:10:16.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:10:16.122 [DEBUG] [Thread-17710] [transport.py] [_log()] userauth is OK
2025-12-25T20:10:16.123 [DEBUG] [Thread-17710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:10:16.123 [DEBUG] [Thread-17710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:10:16.123 [DEBUG] [Thread-17710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:10:16.123 [DEBUG] [Thread-17710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:10:16.154 [INFO] [Thread-17710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:10:16.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:10:16.772 [DEBUG] [Thread-17710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:10:16.772 [DEBUG] [Thread-17710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:10:16.772 [DEBUG] [Thread-17710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:10:16.813 [DEBUG] [Thread-17710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:10:16.813 [DEBUG] [Thread-17710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:10:16.816 [DEBUG] [Thread-17710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:10:16.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:10:16.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:10:16.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:10:16.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:10:16.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:10:16.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:10:16.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:10:16.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:10:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:10:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.756657 -999.00  +21.00  33.21     31   +3.50 1 1 2 1 1   381    0 16.43 -36.33 ----- 27.9 33.2 297.2 34.3 21.4 -24.6 21.3 -24.1 21.0 -22.4 21.3 -23.5
2025-12-25T20:10:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:10:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:10:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.756657
2025-12-25T20:10:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:10:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:10:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:10:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:10:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:10:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:10:00', tmtdew=20.4, humidity=25.8, cloud=0.0, wind=25.92, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:09:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:10:16.842 [DEBUG] [Thread-17710] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:10:16.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:10:16.937 [DEBUG] [Thread-17713] [transport.py] [_log()] starting thread (client mode): 0xb6bc0790
2025-12-25T20:10:16.937 [DEBUG] [Thread-17713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:10:16.953 [DEBUG] [Thread-17713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:10:16.953 [INFO] [Thread-17713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:10:16.961 [DEBUG] [Thread-17713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:10:16.961 [DEBUG] [Thread-17713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] client lang: <none>
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] server lang: <none>
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] kex follows: False
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] Compression: none
2025-12-25T20:10:16.962 [DEBUG] [Thread-17713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:10:17.024 [DEBUG] [Thread-17713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:10:17.025 [DEBUG] [Thread-17713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:10:17.025 [DEBUG] [Thread-17713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:10:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:10:17.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:10:17.085 [DEBUG] [Thread-17713] [transport.py] [_log()] userauth is OK
2025-12-25T20:10:17.085 [DEBUG] [Thread-17713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:10:17.085 [DEBUG] [Thread-17713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:10:17.085 [DEBUG] [Thread-17713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:10:17.085 [DEBUG] [Thread-17713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:10:17.104 [INFO] [Thread-17713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:10:17.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:10:17.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:10:17.950 [DEBUG] [Thread-17713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:10:17.950 [DEBUG] [Thread-17713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:10:17.998 [DEBUG] [Thread-17713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:10:17.998 [DEBUG] [Thread-17713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:10:18.008 [DEBUG] [Thread-17713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:10:18.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:10:18.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:10:18.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-25T20:10:18.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:10:18.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:10:18.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:10:18.047 [DEBUG] [Thread-17713] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:10:19.482 [DEBUG] [Thread-17715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:10:22.977 [DEBUG] [Thread-17716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:10:34.532 [DEBUG] [Thread-17717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:10:48.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:10:48.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:10:48.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-25T20:10:48.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 10, 32), 20.41, 25.77, 0.0, 25.6, 21.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:10:48.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:10:32
2025-12-25T20:10:48.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:10:49.119 [DEBUG] [Thread-17718] [transport.py] [_log()] starting thread (client mode): 0xb6b01ba0
2025-12-25T20:10:49.119 [DEBUG] [Thread-17718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:10:49.139 [DEBUG] [Thread-17718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:10:49.139 [INFO] [Thread-17718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] client lang: <none>
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] server lang: <none>
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] kex follows: False
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:10:49.142 [DEBUG] [Thread-17718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:10:49.143 [DEBUG] [Thread-17718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:10:49.143 [DEBUG] [Thread-17718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:10:49.143 [DEBUG] [Thread-17718] [transport.py] [_log()] Compression: none
2025-12-25T20:10:49.143 [DEBUG] [Thread-17718] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:10:49.157 [DEBUG] [Thread-17718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:10:49.157 [DEBUG] [Thread-17718] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:10:49.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:10:49.158 [DEBUG] [Thread-17718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:10:49.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:10:49.159 [DEBUG] [Thread-17718] [transport.py] [_log()] userauth is OK
2025-12-25T20:10:49.159 [DEBUG] [Thread-17718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:10:49.159 [DEBUG] [Thread-17718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:10:49.159 [DEBUG] [Thread-17718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:10:49.159 [DEBUG] [Thread-17718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:10:49.168 [INFO] [Thread-17718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:10:49.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:10:49.560 [DEBUG] [Thread-17720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:10:49.934 [DEBUG] [Thread-17718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:10:49.935 [DEBUG] [Thread-17718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:10:49.935 [DEBUG] [Thread-17718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:10:49.975 [DEBUG] [Thread-17718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:10:49.975 [DEBUG] [Thread-17718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:10:49.977 [DEBUG] [Thread-17718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:10:49.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:10:49.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:10:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:10:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:10:49.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:10:49.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:10:49.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.757004 -999.00  +21.00  26.27     31   +3.50 1 1 1 1 1   361    0 16.22 -37.38 ----- 32.8 26.3 295.2 36.1 21.4 -24.5 21.4 -24.1 -999.0 -999.0 21.3 -23.4
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.757004
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:10:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:10:32', tmtdew=20.41, humidity=25.77, cloud=0.0, wind=25.6, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:10:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:10:49.994 [DEBUG] [Thread-17718] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:10:50.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-25T20:10:50.077 [DEBUG] [Thread-17722] [transport.py] [_log()] starting thread (client mode): 0xb6b01c90
2025-12-25T20:10:50.077 [DEBUG] [Thread-17722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:10:50.091 [DEBUG] [Thread-17722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:10:50.091 [INFO] [Thread-17722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] client lang: <none>
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] server lang: <none>
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] kex follows: False
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] Compression: none
2025-12-25T20:10:50.099 [DEBUG] [Thread-17722] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:10:50.154 [DEBUG] [Thread-17722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:10:50.154 [DEBUG] [Thread-17722] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:10:50.154 [DEBUG] [Thread-17722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:10:50.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:10:50.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:10:50.214 [DEBUG] [Thread-17722] [transport.py] [_log()] userauth is OK
2025-12-25T20:10:50.214 [DEBUG] [Thread-17722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:10:50.214 [DEBUG] [Thread-17722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:10:50.214 [DEBUG] [Thread-17722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:10:50.214 [DEBUG] [Thread-17722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:10:50.228 [INFO] [Thread-17722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:10:50.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-25T20:10:50.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:10:51.037 [DEBUG] [Thread-17722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:10:51.038 [DEBUG] [Thread-17722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:10:51.085 [DEBUG] [Thread-17722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:10:51.086 [DEBUG] [Thread-17722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:10:51.094 [DEBUG] [Thread-17722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:10:51.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:10:51.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-25T20:10:51.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-25T20:10:51.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:10:51.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:10:51.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:10:51.126 [DEBUG] [Thread-17722] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:10:59.938 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:04.092 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:04.093 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:04.593 [DEBUG] [Thread-17724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:06.060 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:19.647 [DEBUG] [Thread-17725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:11:21.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:11:21.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-25T20:11:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 11, 4), 20.41, 25.78, 0.0, 26.94, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:11:21.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:11:04
2025-12-25T20:11:21.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:11:22.110 [DEBUG] [Thread-17726] [transport.py] [_log()] starting thread (client mode): 0xb95598a0
2025-12-25T20:11:22.110 [DEBUG] [Thread-17726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:11:22.130 [DEBUG] [Thread-17726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:11:22.130 [INFO] [Thread-17726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:11:22.133 [DEBUG] [Thread-17726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:11:22.133 [DEBUG] [Thread-17726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:11:22.133 [DEBUG] [Thread-17726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:11:22.133 [DEBUG] [Thread-17726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:22.133 [DEBUG] [Thread-17726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] client lang: <none>
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] server lang: <none>
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] kex follows: False
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] Compression: none
2025-12-25T20:11:22.134 [DEBUG] [Thread-17726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:11:22.142 [DEBUG] [Thread-17726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:11:22.143 [DEBUG] [Thread-17726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:11:22.143 [DEBUG] [Thread-17726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:11:22.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:11:22.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:11:22.145 [DEBUG] [Thread-17726] [transport.py] [_log()] userauth is OK
2025-12-25T20:11:22.145 [DEBUG] [Thread-17726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:11:22.145 [DEBUG] [Thread-17726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:11:22.145 [DEBUG] [Thread-17726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:11:22.145 [DEBUG] [Thread-17726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:11:22.180 [INFO] [Thread-17726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:11:22.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:11:22.839 [DEBUG] [Thread-17726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:11:22.840 [DEBUG] [Thread-17726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:11:22.840 [DEBUG] [Thread-17726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:11:22.881 [DEBUG] [Thread-17726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:11:22.881 [DEBUG] [Thread-17726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:11:22.885 [DEBUG] [Thread-17726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:11:22.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:11:22.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:11:22.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:11:22.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:11:22.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:11:22.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:11:22.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:11:22.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:11:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:11:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.757351 -999.00  +21.00  35.11     31   +3.50 1 1 2 1 1   342    0 16.61 -37.09 ----- 29.9 35.1 295.6 41.2 21.4 -24.6 21.2 -24.1 21.0 -22.4 21.3 -23.3
2025-12-25T20:11:22.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:11:22.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:11:22.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.757351
2025-12-25T20:11:22.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:11:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:11:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:11:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:11:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:11:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:11:04', tmtdew=20.41, humidity=25.78, cloud=0.0, wind=26.94, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:10:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:11:22.910 [DEBUG] [Thread-17726] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:11:22.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-25T20:11:23.008 [DEBUG] [Thread-17729] [transport.py] [_log()] starting thread (client mode): 0xb95588b0
2025-12-25T20:11:23.008 [DEBUG] [Thread-17729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:11:23.024 [DEBUG] [Thread-17729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:11:23.024 [INFO] [Thread-17729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:11:23.028 [DEBUG] [Thread-17731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] client lang: <none>
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] server lang: <none>
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] kex follows: False
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] Compression: none
2025-12-25T20:11:23.032 [DEBUG] [Thread-17729] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:11:23.092 [DEBUG] [Thread-17729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:11:23.093 [DEBUG] [Thread-17729] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:11:23.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:11:23.095 [DEBUG] [Thread-17729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:11:23.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:11:23.155 [DEBUG] [Thread-17729] [transport.py] [_log()] userauth is OK
2025-12-25T20:11:23.155 [DEBUG] [Thread-17729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:11:23.155 [DEBUG] [Thread-17729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:11:23.156 [DEBUG] [Thread-17729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:11:23.156 [DEBUG] [Thread-17729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:11:23.179 [INFO] [Thread-17729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:11:23.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-25T20:11:23.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:11:24.033 [DEBUG] [Thread-17729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:11:24.033 [DEBUG] [Thread-17729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:11:24.082 [DEBUG] [Thread-17729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:11:24.082 [DEBUG] [Thread-17729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:11:24.091 [DEBUG] [Thread-17729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:11:24.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:11:24.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-25T20:11:24.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:11:24.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:11:24.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:11:24.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:11:24.129 [DEBUG] [Thread-17729] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:11:33.475 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:34.678 [DEBUG] [Thread-17732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:49.738 [DEBUG] [Thread-17733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:11:54.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:11:54.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:11:54.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:11:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 11, 37), 20.3, 25.78, 0.0, 29.38, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:11:54.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:11:37
2025-12-25T20:11:54.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:11:55.131 [DEBUG] [Thread-17734] [transport.py] [_log()] starting thread (client mode): 0xb955baf0
2025-12-25T20:11:55.131 [DEBUG] [Thread-17734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:11:55.151 [DEBUG] [Thread-17734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:11:55.151 [INFO] [Thread-17734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:11:55.154 [DEBUG] [Thread-17734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:11:55.154 [DEBUG] [Thread-17734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:11:55.154 [DEBUG] [Thread-17734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:11:55.154 [DEBUG] [Thread-17734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:55.154 [DEBUG] [Thread-17734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] client lang: <none>
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] server lang: <none>
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] kex follows: False
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:11:55.155 [DEBUG] [Thread-17734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:11:55.156 [DEBUG] [Thread-17734] [transport.py] [_log()] Compression: none
2025-12-25T20:11:55.156 [DEBUG] [Thread-17734] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:11:55.173 [DEBUG] [Thread-17734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:11:55.174 [DEBUG] [Thread-17734] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:11:55.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:11:55.176 [DEBUG] [Thread-17734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:11:55.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:11:55.217 [DEBUG] [Thread-17734] [transport.py] [_log()] userauth is OK
2025-12-25T20:11:55.217 [DEBUG] [Thread-17734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:11:55.217 [DEBUG] [Thread-17734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:11:55.217 [DEBUG] [Thread-17734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:11:55.217 [DEBUG] [Thread-17734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:11:55.242 [INFO] [Thread-17734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:11:55.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:11:56.019 [DEBUG] [Thread-17734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:11:56.020 [DEBUG] [Thread-17734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:11:56.020 [DEBUG] [Thread-17734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:11:56.061 [DEBUG] [Thread-17734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:11:56.061 [DEBUG] [Thread-17734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:11:56.064 [DEBUG] [Thread-17734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:11:56.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:11:56.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:11:56.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:11:56.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:11:56.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:11:56.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:11:56.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:11:56.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.757699 -999.00  +20.90  31.88     31   +3.50 1 1 2 1 1   324    0 17.08 -37.30 ----- 31.4 31.9 301.4 39.7 21.4 -24.7 21.2 -24.0 21.0 -22.4 21.2 -23.4
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.757699
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:11:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:11:37', tmtdew=20.3, humidity=25.78, cloud=0.0, wind=29.38, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:11:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:11:56.084 [DEBUG] [Thread-17734] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:11:56.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-25T20:11:56.169 [DEBUG] [Thread-17737] [transport.py] [_log()] starting thread (client mode): 0xb95b24a0
2025-12-25T20:11:56.170 [DEBUG] [Thread-17737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:11:56.186 [DEBUG] [Thread-17737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:11:56.186 [INFO] [Thread-17737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:11:56.193 [DEBUG] [Thread-17737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:11:56.194 [DEBUG] [Thread-17737] [transport.py] [_log()] client lang: <none>
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] server lang: <none>
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] kex follows: False
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:11:56.195 [DEBUG] [Thread-17737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:11:56.196 [DEBUG] [Thread-17737] [transport.py] [_log()] Compression: none
2025-12-25T20:11:56.196 [DEBUG] [Thread-17737] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:11:56.257 [DEBUG] [Thread-17737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:11:56.257 [DEBUG] [Thread-17737] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:11:56.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:11:56.258 [DEBUG] [Thread-17737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:11:56.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:11:56.316 [DEBUG] [Thread-17737] [transport.py] [_log()] userauth is OK
2025-12-25T20:11:56.316 [DEBUG] [Thread-17737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:11:56.316 [DEBUG] [Thread-17737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:11:56.316 [DEBUG] [Thread-17737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:11:56.316 [DEBUG] [Thread-17737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:11:56.334 [INFO] [Thread-17737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:11:56.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-25T20:11:56.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:11:57.174 [DEBUG] [Thread-17737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:11:57.174 [DEBUG] [Thread-17737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:11:57.222 [DEBUG] [Thread-17737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:11:57.222 [DEBUG] [Thread-17737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:11:57.237 [DEBUG] [Thread-17737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:11:57.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:11:57.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:11:57.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:11:57.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:11:57.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:11:57.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:11:57.273 [DEBUG] [Thread-17737] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:11:58.886 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:04.774 [DEBUG] [Thread-17739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:09.448 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:09.597 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:09.597 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:15.550 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:19.826 [DEBUG] [Thread-17740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:23.086 [DEBUG] [Thread-17741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:27.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:12:27.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:12:27.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-25T20:12:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 12, 9), 20.29, 25.82, 0.0, 28.42, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:12:27.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:12:09
2025-12-25T20:12:28.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:12:28.277 [DEBUG] [Thread-17742] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f70
2025-12-25T20:12:28.277 [DEBUG] [Thread-17742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:12:28.295 [DEBUG] [Thread-17742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:12:28.295 [INFO] [Thread-17742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] client lang: <none>
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] server lang: <none>
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] kex follows: False
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] Compression: none
2025-12-25T20:12:28.297 [DEBUG] [Thread-17742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:12:28.316 [DEBUG] [Thread-17742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:12:28.316 [DEBUG] [Thread-17742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:12:28.317 [DEBUG] [Thread-17742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:12:28.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:12:28.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:12:28.319 [DEBUG] [Thread-17742] [transport.py] [_log()] userauth is OK
2025-12-25T20:12:28.319 [DEBUG] [Thread-17742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:12:28.319 [DEBUG] [Thread-17742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:12:28.319 [DEBUG] [Thread-17742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:12:28.319 [DEBUG] [Thread-17742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:12:28.344 [INFO] [Thread-17742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:12:28.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:12:29.001 [DEBUG] [Thread-17742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:12:29.001 [DEBUG] [Thread-17742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:12:29.001 [DEBUG] [Thread-17742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:12:29.042 [DEBUG] [Thread-17742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:12:29.042 [DEBUG] [Thread-17742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:12:29.046 [DEBUG] [Thread-17742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:12:29.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:12:29.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:12:29.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:12:29.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:12:29.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:12:29.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:12:29.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:12:29.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:12:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:12:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.758046 -999.00  +20.90  28.74     31   +3.40 1 1 1 1 1   305    0 16.81 -35.66 ----- 30.5 28.7 292.0 36.1 21.3 -24.6 21.2 -24.1 20.9 -22.3 21.2 -23.4
2025-12-25T20:12:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:12:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:12:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.758046
2025-12-25T20:12:29.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:12:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:12:09', tmtdew=20.29, humidity=25.82, cloud=0.0, wind=28.42, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:11:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:12:29.085 [DEBUG] [Thread-17742] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:12:29.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-25T20:12:29.181 [DEBUG] [Thread-17745] [transport.py] [_log()] starting thread (client mode): 0xb6bc3dc0
2025-12-25T20:12:29.181 [DEBUG] [Thread-17745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:12:29.195 [DEBUG] [Thread-17745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:12:29.195 [INFO] [Thread-17745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:12:29.203 [DEBUG] [Thread-17745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] client lang: <none>
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] server lang: <none>
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] kex follows: False
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] Compression: none
2025-12-25T20:12:29.204 [DEBUG] [Thread-17745] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:12:29.259 [DEBUG] [Thread-17745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:12:29.260 [DEBUG] [Thread-17745] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:12:29.260 [DEBUG] [Thread-17745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:12:29.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:12:29.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:12:29.317 [DEBUG] [Thread-17745] [transport.py] [_log()] userauth is OK
2025-12-25T20:12:29.318 [DEBUG] [Thread-17745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:12:29.318 [DEBUG] [Thread-17745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:12:29.318 [DEBUG] [Thread-17745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:12:29.318 [DEBUG] [Thread-17745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:12:29.339 [INFO] [Thread-17745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:12:29.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-25T20:12:29.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:12:30.137 [DEBUG] [Thread-17745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:12:30.138 [DEBUG] [Thread-17745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:12:30.185 [DEBUG] [Thread-17745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:12:30.185 [DEBUG] [Thread-17745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:12:30.196 [DEBUG] [Thread-17745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:12:30.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:12:30.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-25T20:12:30.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-25T20:12:30.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:12:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:12:30.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:12:30.233 [DEBUG] [Thread-17745] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:12:34.865 [DEBUG] [Thread-17747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:39.971 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:12:49.910 [DEBUG] [Thread-17748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:13:00.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:13:00.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-25T20:13:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 12, 41), 20.36, 25.77, 0.0, 27.86, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:13:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:12:41
2025-12-25T20:13:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:13:01.248 [DEBUG] [Thread-17749] [transport.py] [_log()] starting thread (client mode): 0xb6bc32e0
2025-12-25T20:13:01.248 [DEBUG] [Thread-17749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:13:01.268 [DEBUG] [Thread-17749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:13:01.268 [INFO] [Thread-17749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] client lang: <none>
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] server lang: <none>
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] kex follows: False
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:13:01.271 [DEBUG] [Thread-17749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:13:01.272 [DEBUG] [Thread-17749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:13:01.272 [DEBUG] [Thread-17749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:13:01.272 [DEBUG] [Thread-17749] [transport.py] [_log()] Compression: none
2025-12-25T20:13:01.272 [DEBUG] [Thread-17749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:13:01.290 [DEBUG] [Thread-17749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:13:01.290 [DEBUG] [Thread-17749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:13:01.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:13:01.291 [DEBUG] [Thread-17749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:13:01.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:13:01.293 [DEBUG] [Thread-17749] [transport.py] [_log()] userauth is OK
2025-12-25T20:13:01.294 [DEBUG] [Thread-17749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:13:01.294 [DEBUG] [Thread-17749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:13:01.294 [DEBUG] [Thread-17749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:13:01.294 [DEBUG] [Thread-17749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:13:01.319 [INFO] [Thread-17749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:13:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:13:02.114 [DEBUG] [Thread-17749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:13:02.114 [DEBUG] [Thread-17749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:13:02.115 [DEBUG] [Thread-17749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:13:02.155 [DEBUG] [Thread-17749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:13:02.155 [DEBUG] [Thread-17749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:13:02.158 [DEBUG] [Thread-17749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:13:02.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:13:02.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:13:02.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:13:02.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:13:02.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:13:02.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:13:02.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:13:02.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:13:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:13:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.758393 -999.00  +20.90  33.84     31   +3.50 1 1 2 1 1   288    0 16.66 -35.22 ----- 32.2 33.8 296.6 39.9 21.3 -24.6 21.2 -24.1 21.0 -22.3 21.2 -23.5
2025-12-25T20:13:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:13:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:13:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.758393
2025-12-25T20:13:02.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:13:02.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:13:02.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:13:02.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:13:02.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:13:02.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:12:41', tmtdew=20.36, humidity=25.77, cloud=0.0, wind=27.86, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:12:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:13:02.177 [DEBUG] [Thread-17749] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:13:02.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-25T20:13:02.272 [DEBUG] [Thread-17752] [transport.py] [_log()] starting thread (client mode): 0xb6b007c0
2025-12-25T20:13:02.273 [DEBUG] [Thread-17752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:13:02.287 [DEBUG] [Thread-17752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:13:02.287 [INFO] [Thread-17752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] client lang: <none>
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] server lang: <none>
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] kex follows: False
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:13:02.295 [DEBUG] [Thread-17752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:13:02.296 [DEBUG] [Thread-17752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:13:02.296 [DEBUG] [Thread-17752] [transport.py] [_log()] Compression: none
2025-12-25T20:13:02.296 [DEBUG] [Thread-17752] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:13:02.352 [DEBUG] [Thread-17752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:13:02.353 [DEBUG] [Thread-17752] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:13:02.353 [DEBUG] [Thread-17752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:13:02.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:13:02.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:13:02.408 [DEBUG] [Thread-17752] [transport.py] [_log()] userauth is OK
2025-12-25T20:13:02.408 [DEBUG] [Thread-17752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:13:02.409 [DEBUG] [Thread-17752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:13:02.409 [DEBUG] [Thread-17752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:13:02.409 [DEBUG] [Thread-17752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:13:02.427 [INFO] [Thread-17752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:13:02.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-25T20:13:02.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:13:03.250 [DEBUG] [Thread-17752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:13:03.250 [DEBUG] [Thread-17752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:13:03.298 [DEBUG] [Thread-17752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:13:03.298 [DEBUG] [Thread-17752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:13:03.307 [DEBUG] [Thread-17752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:13:03.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:13:03.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-25T20:13:03.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-25T20:13:03.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:13:03.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:13:03.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:13:03.344 [DEBUG] [Thread-17752] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:13:03.375 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:04.939 [DEBUG] [Thread-17754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:11.983 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:15.846 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:15.847 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:18.082 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:19.990 [DEBUG] [Thread-17755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:23.142 [DEBUG] [Thread-17756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:33.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:13:33.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:13:33.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:13:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 13, 13), 20.39, 25.72, 0.0, 26.01, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:13:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:13:13
2025-12-25T20:13:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:13:34.334 [DEBUG] [Thread-17757] [transport.py] [_log()] starting thread (client mode): 0xb95b1c90
2025-12-25T20:13:34.335 [DEBUG] [Thread-17757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:13:34.355 [DEBUG] [Thread-17757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:13:34.355 [INFO] [Thread-17757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] client lang: <none>
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] server lang: <none>
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] kex follows: False
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:13:34.356 [DEBUG] [Thread-17757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:13:34.357 [DEBUG] [Thread-17757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:13:34.357 [DEBUG] [Thread-17757] [transport.py] [_log()] Compression: none
2025-12-25T20:13:34.357 [DEBUG] [Thread-17757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:13:34.367 [DEBUG] [Thread-17757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:13:34.368 [DEBUG] [Thread-17757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:13:34.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:13:34.369 [DEBUG] [Thread-17757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:13:34.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:13:34.378 [DEBUG] [Thread-17757] [transport.py] [_log()] userauth is OK
2025-12-25T20:13:34.378 [DEBUG] [Thread-17757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:13:34.378 [DEBUG] [Thread-17757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:13:34.378 [DEBUG] [Thread-17757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:13:34.378 [DEBUG] [Thread-17757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:13:34.410 [INFO] [Thread-17757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:13:34.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:13:35.023 [DEBUG] [Thread-17759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:35.047 [DEBUG] [Thread-17757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:13:35.047 [DEBUG] [Thread-17757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:13:35.048 [DEBUG] [Thread-17757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:13:35.088 [DEBUG] [Thread-17757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:13:35.088 [DEBUG] [Thread-17757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:13:35.092 [DEBUG] [Thread-17757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:13:35.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:13:35.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:13:35.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:13:35.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:13:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:13:35.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:13:35.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:13:35.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:13:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:13:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.759087 -999.00  +20.90  31.67     31   +3.40 1 1 2 1 1   254    0 16.43 -36.42 ----- 32.8 31.7 295.0 39.8 21.3 -24.7 21.2 -24.0 20.9 -22.4 21.2 -23.5
2025-12-25T20:13:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:13:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:13:35.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.759087
2025-12-25T20:13:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:13:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:13:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:13:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:13:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:13:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:13:13', tmtdew=20.39, humidity=25.72, cloud=0.0, wind=26.01, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:13:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:13:35.120 [DEBUG] [Thread-17757] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:13:35.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-25T20:13:35.214 [DEBUG] [Thread-17761] [transport.py] [_log()] starting thread (client mode): 0xb95b1780
2025-12-25T20:13:35.214 [DEBUG] [Thread-17761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:13:35.228 [DEBUG] [Thread-17761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:13:35.228 [INFO] [Thread-17761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] client lang: <none>
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] server lang: <none>
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] kex follows: False
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:13:35.236 [DEBUG] [Thread-17761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:13:35.237 [DEBUG] [Thread-17761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:13:35.237 [DEBUG] [Thread-17761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:13:35.237 [DEBUG] [Thread-17761] [transport.py] [_log()] Compression: none
2025-12-25T20:13:35.237 [DEBUG] [Thread-17761] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:13:35.296 [DEBUG] [Thread-17761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:13:35.296 [DEBUG] [Thread-17761] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:13:35.297 [DEBUG] [Thread-17761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:13:35.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:13:35.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:13:35.352 [DEBUG] [Thread-17761] [transport.py] [_log()] userauth is OK
2025-12-25T20:13:35.352 [DEBUG] [Thread-17761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:13:35.353 [DEBUG] [Thread-17761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:13:35.353 [DEBUG] [Thread-17761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:13:35.353 [DEBUG] [Thread-17761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:13:35.375 [INFO] [Thread-17761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:13:35.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-25T20:13:35.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:13:36.184 [DEBUG] [Thread-17761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:13:36.184 [DEBUG] [Thread-17761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:13:36.232 [DEBUG] [Thread-17761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:13:36.232 [DEBUG] [Thread-17761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:13:36.241 [DEBUG] [Thread-17761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:13:36.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:13:36.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-25T20:13:36.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-25T20:13:36.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:13:36.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:13:36.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:13:36.277 [DEBUG] [Thread-17761] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:13:41.460 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:13:50.060 [DEBUG] [Thread-17763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:04.848 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:05.108 [DEBUG] [Thread-17764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:06.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:14:06.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:14:06.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:14:07.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 13, 45), 20.38, 25.73, 0.0, 27.65, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:14:07.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:13:45
2025-12-25T20:14:07.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:14:07.333 [DEBUG] [Thread-17765] [transport.py] [_log()] starting thread (client mode): 0xb6bb6200
2025-12-25T20:14:07.334 [DEBUG] [Thread-17765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:14:07.353 [DEBUG] [Thread-17765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:14:07.353 [INFO] [Thread-17765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] client lang: <none>
2025-12-25T20:14:07.357 [DEBUG] [Thread-17765] [transport.py] [_log()] server lang: <none>
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] kex follows: False
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] Compression: none
2025-12-25T20:14:07.358 [DEBUG] [Thread-17765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:14:07.374 [DEBUG] [Thread-17765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:14:07.374 [DEBUG] [Thread-17765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:14:07.374 [DEBUG] [Thread-17765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:14:07.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:14:07.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:14:07.375 [DEBUG] [Thread-17765] [transport.py] [_log()] userauth is OK
2025-12-25T20:14:07.375 [DEBUG] [Thread-17765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:14:07.375 [DEBUG] [Thread-17765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:14:07.375 [DEBUG] [Thread-17765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:14:07.375 [DEBUG] [Thread-17765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:14:07.401 [INFO] [Thread-17765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:14:07.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:14:08.190 [DEBUG] [Thread-17765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:14:08.190 [DEBUG] [Thread-17765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:14:08.190 [DEBUG] [Thread-17765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:14:08.231 [DEBUG] [Thread-17765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:14:08.231 [DEBUG] [Thread-17765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:14:08.233 [DEBUG] [Thread-17765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:14:08.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:14:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:14:08.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:14:08.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:14:08.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:14:08.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:14:08.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.759435 -999.00  +20.90  26.57     31   +3.40 1 1 1 1 1   238    0 16.58 -38.28 ----- 27.3 26.6 302.2 37.7 21.3 -24.7 21.2 -24.1 20.9 -22.4 21.2 -23.7
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.759435
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:14:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:13:45', tmtdew=20.38, humidity=25.73, cloud=0.0, wind=27.65, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:13:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:14:08.244 [DEBUG] [Thread-17765] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:14:08.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-25T20:14:08.328 [DEBUG] [Thread-17768] [transport.py] [_log()] starting thread (client mode): 0xb6bb66e0
2025-12-25T20:14:08.328 [DEBUG] [Thread-17768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:14:08.343 [DEBUG] [Thread-17768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:14:08.343 [INFO] [Thread-17768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] client lang: <none>
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] server lang: <none>
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] kex follows: False
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] Compression: none
2025-12-25T20:14:08.351 [DEBUG] [Thread-17768] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:14:08.406 [DEBUG] [Thread-17768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:14:08.406 [DEBUG] [Thread-17768] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:14:08.407 [DEBUG] [Thread-17768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:14:08.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:14:08.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:14:08.463 [DEBUG] [Thread-17768] [transport.py] [_log()] userauth is OK
2025-12-25T20:14:08.464 [DEBUG] [Thread-17768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:14:08.464 [DEBUG] [Thread-17768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:14:08.464 [DEBUG] [Thread-17768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:14:08.464 [DEBUG] [Thread-17768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:14:08.481 [INFO] [Thread-17768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:14:08.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-25T20:14:08.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:14:09.325 [DEBUG] [Thread-17768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:14:09.325 [DEBUG] [Thread-17768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:14:09.374 [DEBUG] [Thread-17768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:14:09.374 [DEBUG] [Thread-17768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:14:09.384 [DEBUG] [Thread-17768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:14:09.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:14:09.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-25T20:14:09.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-25T20:14:09.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:14:09.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:14:09.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:14:09.422 [DEBUG] [Thread-17768] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:14:13.527 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:19.649 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:20.142 [DEBUG] [Thread-17770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:22.088 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:22.090 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:23.201 [DEBUG] [Thread-17771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:35.206 [DEBUG] [Thread-17772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:14:39.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:14:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:14:40.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 14, 17), 20.35, 25.78, 0.0, 28.3, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:14:40.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:14:17
2025-12-25T20:14:40.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:14:40.397 [DEBUG] [Thread-17773] [transport.py] [_log()] starting thread (client mode): 0xb6b209d0
2025-12-25T20:14:40.398 [DEBUG] [Thread-17773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:14:40.417 [DEBUG] [Thread-17773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:14:40.418 [INFO] [Thread-17773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:14:40.421 [DEBUG] [Thread-17773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:14:40.421 [DEBUG] [Thread-17773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:14:40.421 [DEBUG] [Thread-17773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:14:40.421 [DEBUG] [Thread-17773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:40.421 [DEBUG] [Thread-17773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:40.421 [DEBUG] [Thread-17773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] client lang: <none>
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] server lang: <none>
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] kex follows: False
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] Compression: none
2025-12-25T20:14:40.422 [DEBUG] [Thread-17773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:14:40.442 [DEBUG] [Thread-17773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:14:40.442 [DEBUG] [Thread-17773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:14:40.443 [DEBUG] [Thread-17773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:14:40.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:14:40.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:14:40.445 [DEBUG] [Thread-17773] [transport.py] [_log()] userauth is OK
2025-12-25T20:14:40.445 [DEBUG] [Thread-17773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:14:40.445 [DEBUG] [Thread-17773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:14:40.446 [DEBUG] [Thread-17773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:14:40.446 [DEBUG] [Thread-17773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:14:40.469 [INFO] [Thread-17773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:14:40.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:14:41.121 [DEBUG] [Thread-17773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:14:41.122 [DEBUG] [Thread-17773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:14:41.122 [DEBUG] [Thread-17773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:14:41.163 [DEBUG] [Thread-17773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:14:41.163 [DEBUG] [Thread-17773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:14:41.167 [DEBUG] [Thread-17773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:14:41.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:14:41.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:14:41.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:14:41.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:14:41.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:14:41.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:14:41.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:14:41.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:14:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:14:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.759782 -999.00  +20.90  33.72     31   +3.30 1 1 2 1 1   223    0 16.85 -36.42 ----- 36.5 33.7 302.2 40.1 21.3 -24.6 21.2 -24.1 20.9 -22.4 21.1 -23.5
2025-12-25T20:14:41.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:14:41.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:14:41.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.759782
2025-12-25T20:14:41.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:14:41.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:14:41.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:14:41.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:14:41.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:14:41.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:14:17', tmtdew=20.35, humidity=25.78, cloud=0.0, wind=28.3, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:14:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:14:41.193 [DEBUG] [Thread-17773] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:14:41.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-25T20:14:41.294 [DEBUG] [Thread-17776] [transport.py] [_log()] starting thread (client mode): 0xb6b7c070
2025-12-25T20:14:41.294 [DEBUG] [Thread-17776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:14:41.309 [DEBUG] [Thread-17776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:14:41.309 [INFO] [Thread-17776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:14:41.316 [DEBUG] [Thread-17776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] client lang: <none>
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] server lang: <none>
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] kex follows: False
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] Compression: none
2025-12-25T20:14:41.317 [DEBUG] [Thread-17776] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:14:41.376 [DEBUG] [Thread-17776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:14:41.377 [DEBUG] [Thread-17776] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:14:41.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:14:41.378 [DEBUG] [Thread-17776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:14:41.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:14:41.432 [DEBUG] [Thread-17776] [transport.py] [_log()] userauth is OK
2025-12-25T20:14:41.432 [DEBUG] [Thread-17776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:14:41.433 [DEBUG] [Thread-17776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:14:41.433 [DEBUG] [Thread-17776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:14:41.433 [DEBUG] [Thread-17776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:14:41.451 [INFO] [Thread-17776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:14:41.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-25T20:14:41.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:14:42.279 [DEBUG] [Thread-17776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:14:42.279 [DEBUG] [Thread-17776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:14:42.326 [DEBUG] [Thread-17776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:14:42.326 [DEBUG] [Thread-17776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:14:42.334 [DEBUG] [Thread-17776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:14:42.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:14:42.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:14:42.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-25T20:14:42.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:14:42.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:14:42.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:14:42.366 [DEBUG] [Thread-17776] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:14:43.109 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:14:50.235 [DEBUG] [Thread-17778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:05.273 [DEBUG] [Thread-17779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:06.645 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:12.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:15:12.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:15:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:15:13.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 14, 49), 20.38, 25.73, 0.0, 35.85, 21.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:15:13.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:14:49
2025-12-25T20:15:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:15:13.360 [DEBUG] [Thread-17780] [transport.py] [_log()] starting thread (client mode): 0xb95588b0
2025-12-25T20:15:13.360 [DEBUG] [Thread-17780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:15:13.382 [DEBUG] [Thread-17780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:15:13.382 [INFO] [Thread-17780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:15:13.385 [DEBUG] [Thread-17780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:15:13.385 [DEBUG] [Thread-17780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:15:13.385 [DEBUG] [Thread-17780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:15:13.385 [DEBUG] [Thread-17780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:13.385 [DEBUG] [Thread-17780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:13.385 [DEBUG] [Thread-17780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] client lang: <none>
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] server lang: <none>
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] kex follows: False
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] Compression: none
2025-12-25T20:15:13.386 [DEBUG] [Thread-17780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:15:13.403 [DEBUG] [Thread-17780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:15:13.404 [DEBUG] [Thread-17780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:15:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:15:13.405 [DEBUG] [Thread-17780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:15:13.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:15:13.407 [DEBUG] [Thread-17780] [transport.py] [_log()] userauth is OK
2025-12-25T20:15:13.407 [DEBUG] [Thread-17780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:15:13.407 [DEBUG] [Thread-17780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:15:13.407 [DEBUG] [Thread-17780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:15:13.407 [DEBUG] [Thread-17780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:15:13.427 [INFO] [Thread-17780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:15:13.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:15:14.732 [DEBUG] [Thread-17780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:15:14.732 [DEBUG] [Thread-17780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:15:14.732 [DEBUG] [Thread-17780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:15:14.773 [DEBUG] [Thread-17780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:15:14.773 [DEBUG] [Thread-17780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:15:14.777 [DEBUG] [Thread-17780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:15:14.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:15:14.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:15:14.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:15:14.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:15:14.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:15:14.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:15:14.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:15:14.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:15:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:15:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.760129 -999.00  +20.90  33.37     31   +3.40 1 1 2 1 1   209    0 16.69 -34.59 ----- 32.9 33.4 296.4 39.3 21.2 -24.6 21.2 -24.0 20.9 -22.6 21.1 -23.4
2025-12-25T20:15:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:15:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:15:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.760129
2025-12-25T20:15:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:15:14.802 [DEBUG] [Thread-17780] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:15:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:15:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:15:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:15:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:15:14.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:14:49', tmtdew=20.38, humidity=25.73, cloud=0.0, wind=35.85, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:14:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:15:14.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:15:14.896 [DEBUG] [Thread-17783] [transport.py] [_log()] starting thread (client mode): 0xb6b7fe20
2025-12-25T20:15:14.896 [DEBUG] [Thread-17783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:15:14.911 [DEBUG] [Thread-17783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:15:14.911 [INFO] [Thread-17783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] client lang: <none>
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] server lang: <none>
2025-12-25T20:15:14.919 [DEBUG] [Thread-17783] [transport.py] [_log()] kex follows: False
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] Compression: none
2025-12-25T20:15:14.920 [DEBUG] [Thread-17783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:15:14.976 [DEBUG] [Thread-17783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:15:14.976 [DEBUG] [Thread-17783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:15:14.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:15:14.978 [DEBUG] [Thread-17783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:15:14.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:15:14.999 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:15.032 [DEBUG] [Thread-17783] [transport.py] [_log()] userauth is OK
2025-12-25T20:15:15.033 [DEBUG] [Thread-17783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:15:15.033 [DEBUG] [Thread-17783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:15:15.033 [DEBUG] [Thread-17783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:15:15.033 [DEBUG] [Thread-17783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:15:15.053 [INFO] [Thread-17783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:15:15.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-25T20:15:15.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:15:15.916 [DEBUG] [Thread-17783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:15:15.917 [DEBUG] [Thread-17783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:15:15.965 [DEBUG] [Thread-17783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:15:15.965 [DEBUG] [Thread-17783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:15:15.974 [DEBUG] [Thread-17783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:15:15.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:15:15.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:15:15.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:15:16.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:15:16.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:15:16.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:15:16.010 [DEBUG] [Thread-17783] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:15:20.314 [DEBUG] [Thread-17785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:21.135 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:23.254 [DEBUG] [Thread-17786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:27.122 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:27.123 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:35.361 [DEBUG] [Thread-17787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:44.676 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:15:46.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:15:46.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:15:46.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-25T20:15:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 15, 21), 20.37, 25.75, 0.0, 34.14, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:15:46.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:15:21
2025-12-25T20:15:46.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:15:47.005 [DEBUG] [Thread-17788] [transport.py] [_log()] starting thread (client mode): 0xb6b7c400
2025-12-25T20:15:47.005 [DEBUG] [Thread-17788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:15:47.025 [DEBUG] [Thread-17788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:15:47.025 [INFO] [Thread-17788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:15:47.028 [DEBUG] [Thread-17788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:15:47.028 [DEBUG] [Thread-17788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:15:47.028 [DEBUG] [Thread-17788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:15:47.028 [DEBUG] [Thread-17788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] client lang: <none>
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] server lang: <none>
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] kex follows: False
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] Compression: none
2025-12-25T20:15:47.029 [DEBUG] [Thread-17788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:15:47.046 [DEBUG] [Thread-17788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:15:47.046 [DEBUG] [Thread-17788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:15:47.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:15:47.047 [DEBUG] [Thread-17788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:15:47.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:15:47.049 [DEBUG] [Thread-17788] [transport.py] [_log()] userauth is OK
2025-12-25T20:15:47.049 [DEBUG] [Thread-17788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:15:47.050 [DEBUG] [Thread-17788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:15:47.050 [DEBUG] [Thread-17788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:15:47.050 [DEBUG] [Thread-17788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:15:47.073 [INFO] [Thread-17788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:15:47.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:15:47.721 [DEBUG] [Thread-17788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:15:47.721 [DEBUG] [Thread-17788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:15:47.721 [DEBUG] [Thread-17788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:15:47.762 [DEBUG] [Thread-17788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:15:47.762 [DEBUG] [Thread-17788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:15:47.766 [DEBUG] [Thread-17788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:15:47.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:15:47.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:15:47.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:15:47.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:15:47.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:15:47.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:15:47.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:15:47.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:15:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:15:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.760476 -999.00  +20.90  30.15     31   +3.40 1 1 2 1 1   195    0 16.51 -34.66 ----- 28.0 30.1 289.8 35.5 21.2 -24.5 21.2 -24.2 20.9 -22.5 21.2 -23.5
2025-12-25T20:15:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:15:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:15:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.760476
2025-12-25T20:15:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:15:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:15:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:15:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:15:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:15:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:15:21', tmtdew=20.37, humidity=25.75, cloud=0.0, wind=34.14, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:15:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:15:47.793 [DEBUG] [Thread-17788] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:15:47.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:15:47.886 [DEBUG] [Thread-17791] [transport.py] [_log()] starting thread (client mode): 0xb6b02f20
2025-12-25T20:15:47.886 [DEBUG] [Thread-17791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:15:47.906 [DEBUG] [Thread-17791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:15:47.906 [INFO] [Thread-17791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] client lang: <none>
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] server lang: <none>
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] kex follows: False
2025-12-25T20:15:47.917 [DEBUG] [Thread-17791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:15:47.918 [DEBUG] [Thread-17791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:15:47.918 [DEBUG] [Thread-17791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:15:47.918 [DEBUG] [Thread-17791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:15:47.918 [DEBUG] [Thread-17791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:15:47.918 [DEBUG] [Thread-17791] [transport.py] [_log()] Compression: none
2025-12-25T20:15:47.918 [DEBUG] [Thread-17791] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:15:47.972 [DEBUG] [Thread-17791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:15:47.973 [DEBUG] [Thread-17791] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:15:47.974 [DEBUG] [Thread-17791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:15:47.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:15:47.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:15:48.028 [DEBUG] [Thread-17791] [transport.py] [_log()] userauth is OK
2025-12-25T20:15:48.028 [DEBUG] [Thread-17791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:15:48.029 [DEBUG] [Thread-17791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:15:48.029 [DEBUG] [Thread-17791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:15:48.029 [DEBUG] [Thread-17791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:15:48.047 [INFO] [Thread-17791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:15:48.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-25T20:15:48.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:15:48.864 [DEBUG] [Thread-17791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:15:48.864 [DEBUG] [Thread-17791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:15:48.912 [DEBUG] [Thread-17791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:15:48.912 [DEBUG] [Thread-17791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:15:48.921 [DEBUG] [Thread-17791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:15:48.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:15:48.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-25T20:15:48.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-25T20:15:48.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:15:48.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:15:48.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:15:48.955 [DEBUG] [Thread-17791] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:15:50.397 [DEBUG] [Thread-17793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:05.444 [DEBUG] [Thread-17794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:08.154 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:18.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:16:18.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:16:18.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-25T20:16:19.646 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:19.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 15, 53), 20.33, 25.72, 0.0, 29.99, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:16:19.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:15:53
2025-12-25T20:16:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:16:19.967 [DEBUG] [Thread-17795] [transport.py] [_log()] starting thread (client mode): 0xb6b7dba0
2025-12-25T20:16:19.967 [DEBUG] [Thread-17795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:16:19.988 [DEBUG] [Thread-17795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:16:19.988 [INFO] [Thread-17795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:19.991 [DEBUG] [Thread-17795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] client lang: <none>
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] server lang: <none>
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] kex follows: False
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] Compression: none
2025-12-25T20:16:19.992 [DEBUG] [Thread-17795] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:16:20.007 [DEBUG] [Thread-17795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:16:20.007 [DEBUG] [Thread-17795] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:16:20.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:16:20.008 [DEBUG] [Thread-17795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:16:20.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:16:20.010 [DEBUG] [Thread-17795] [transport.py] [_log()] userauth is OK
2025-12-25T20:16:20.011 [DEBUG] [Thread-17795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:16:20.011 [DEBUG] [Thread-17795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:16:20.011 [DEBUG] [Thread-17795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:16:20.011 [DEBUG] [Thread-17795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:16:20.031 [INFO] [Thread-17795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:16:20.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:16:20.475 [DEBUG] [Thread-17797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:20.785 [DEBUG] [Thread-17795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:16:20.785 [DEBUG] [Thread-17795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:16:20.785 [DEBUG] [Thread-17795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:16:20.826 [DEBUG] [Thread-17795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:16:20.826 [DEBUG] [Thread-17795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:16:20.829 [DEBUG] [Thread-17795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:16:20.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:16:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:16:20.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:16:20.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:16:20.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:16:20.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:16:20.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:16:20.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:16:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:16:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.760823 -999.00  +20.80  28.68     31   +3.30 1 1 1 1 1   182    0 16.61 -33.26 ----- 33.7 28.7 301.8 35.1 21.2 -24.7 21.1 -24.1 20.9 -22.4 21.1 -23.5
2025-12-25T20:16:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:16:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:16:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.760823
2025-12-25T20:16:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:16:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:16:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:16:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:16:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:16:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:15:53', tmtdew=20.33, humidity=25.72, cloud=0.0, wind=29.99, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:15:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:16:20.852 [DEBUG] [Thread-17795] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:16:20.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-25T20:16:20.946 [DEBUG] [Thread-17799] [transport.py] [_log()] starting thread (client mode): 0xb6b77250
2025-12-25T20:16:20.946 [DEBUG] [Thread-17799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:16:20.960 [DEBUG] [Thread-17799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:16:20.960 [INFO] [Thread-17799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] client lang: <none>
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] server lang: <none>
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] kex follows: False
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:16:20.968 [DEBUG] [Thread-17799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:16:20.969 [DEBUG] [Thread-17799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:16:20.969 [DEBUG] [Thread-17799] [transport.py] [_log()] Compression: none
2025-12-25T20:16:20.969 [DEBUG] [Thread-17799] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:16:21.027 [DEBUG] [Thread-17799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:16:21.028 [DEBUG] [Thread-17799] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:16:21.028 [DEBUG] [Thread-17799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:16:21.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:16:21.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:16:21.084 [DEBUG] [Thread-17799] [transport.py] [_log()] userauth is OK
2025-12-25T20:16:21.084 [DEBUG] [Thread-17799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:16:21.084 [DEBUG] [Thread-17799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:16:21.084 [DEBUG] [Thread-17799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:16:21.084 [DEBUG] [Thread-17799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:16:21.102 [INFO] [Thread-17799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:16:21.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:16:21.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:16:21.936 [DEBUG] [Thread-17799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:16:21.937 [DEBUG] [Thread-17799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:16:21.985 [DEBUG] [Thread-17799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:16:21.985 [DEBUG] [Thread-17799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:16:21.994 [DEBUG] [Thread-17799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:16:22.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:16:22.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-25T20:16:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:16:22.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:16:22.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:16:22.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:16:22.028 [DEBUG] [Thread-17799] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:16:23.311 [DEBUG] [Thread-17801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:24.716 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:34.453 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:34.455 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:35.510 [DEBUG] [Thread-17802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:48.145 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:50.557 [DEBUG] [Thread-17803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:16:52.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:16:52.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:16:52.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-25T20:16:52.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 16, 25), 20.3, 25.77, 0.0, 28.62, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:16:52.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:16:25
2025-12-25T20:16:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:16:53.025 [DEBUG] [Thread-17804] [transport.py] [_log()] starting thread (client mode): 0xb6b230a0
2025-12-25T20:16:53.025 [DEBUG] [Thread-17804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:16:53.045 [DEBUG] [Thread-17804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:16:53.045 [INFO] [Thread-17804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:53.047 [DEBUG] [Thread-17804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] client lang: <none>
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] server lang: <none>
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] kex follows: False
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] Compression: none
2025-12-25T20:16:53.048 [DEBUG] [Thread-17804] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:16:53.058 [DEBUG] [Thread-17804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:16:53.059 [DEBUG] [Thread-17804] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:16:53.059 [DEBUG] [Thread-17804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:16:53.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:16:53.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:16:53.061 [DEBUG] [Thread-17804] [transport.py] [_log()] userauth is OK
2025-12-25T20:16:53.061 [DEBUG] [Thread-17804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:16:53.061 [DEBUG] [Thread-17804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:16:53.062 [DEBUG] [Thread-17804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:16:53.062 [DEBUG] [Thread-17804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:16:53.098 [INFO] [Thread-17804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:16:53.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:16:53.749 [DEBUG] [Thread-17804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:16:53.750 [DEBUG] [Thread-17804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:16:53.750 [DEBUG] [Thread-17804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:16:53.791 [DEBUG] [Thread-17804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:16:53.791 [DEBUG] [Thread-17804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:16:53.795 [DEBUG] [Thread-17804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:16:53.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:16:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:16:53.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:16:53.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:16:53.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:16:53.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:16:53.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:16:53.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:16:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:16:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.761171 -999.00  +20.80  31.10     31   +3.20 1 1 2 1 1   169    0 16.47 -34.38 ----- 34.8 31.1 307.4 45.7 21.2 -24.7 21.1 -24.1 20.9 -22.3 21.2 -23.7
2025-12-25T20:16:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:16:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:16:53.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.761171
2025-12-25T20:16:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:16:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:16:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:16:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:16:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:16:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:16:25', tmtdew=20.3, humidity=25.77, cloud=0.0, wind=28.62, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:16:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:16:53.822 [DEBUG] [Thread-17804] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:16:53.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-25T20:16:53.916 [DEBUG] [Thread-17807] [transport.py] [_log()] starting thread (client mode): 0xb6bf54b0
2025-12-25T20:16:53.916 [DEBUG] [Thread-17807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:16:53.931 [DEBUG] [Thread-17807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:16:53.931 [INFO] [Thread-17807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:16:53.938 [DEBUG] [Thread-17807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:16:53.938 [DEBUG] [Thread-17807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] client lang: <none>
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] server lang: <none>
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] kex follows: False
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] Compression: none
2025-12-25T20:16:53.939 [DEBUG] [Thread-17807] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:16:54.003 [DEBUG] [Thread-17807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:16:54.004 [DEBUG] [Thread-17807] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:16:54.004 [DEBUG] [Thread-17807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:16:54.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:16:54.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:16:54.064 [DEBUG] [Thread-17807] [transport.py] [_log()] userauth is OK
2025-12-25T20:16:54.064 [DEBUG] [Thread-17807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:16:54.065 [DEBUG] [Thread-17807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:16:54.065 [DEBUG] [Thread-17807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:16:54.065 [DEBUG] [Thread-17807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:16:54.083 [INFO] [Thread-17807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:16:54.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-25T20:16:54.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:16:54.885 [DEBUG] [Thread-17807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:16:54.885 [DEBUG] [Thread-17807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:16:54.933 [DEBUG] [Thread-17807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:16:54.933 [DEBUG] [Thread-17807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:16:54.942 [DEBUG] [Thread-17807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:16:54.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:16:54.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:16:54.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:16:54.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:16:54.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:16:54.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:16:54.979 [DEBUG] [Thread-17807] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:17:05.586 [DEBUG] [Thread-17809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:11.536 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:17.255 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:20.629 [DEBUG] [Thread-17810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:22.317 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:23.364 [DEBUG] [Thread-17811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:17:25.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:17:25.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-25T20:17:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 16, 57), 20.36, 25.77, 0.0, 36.13, 20.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:17:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:16:57
2025-12-25T20:17:25.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:17:25.984 [DEBUG] [Thread-17812] [transport.py] [_log()] starting thread (client mode): 0xb6b77880
2025-12-25T20:17:25.984 [DEBUG] [Thread-17812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:17:25.999 [DEBUG] [Thread-17812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:17:25.999 [INFO] [Thread-17812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:17:26.002 [DEBUG] [Thread-17812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:17:26.002 [DEBUG] [Thread-17812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:17:26.002 [DEBUG] [Thread-17812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:17:26.002 [DEBUG] [Thread-17812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] client lang: <none>
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] server lang: <none>
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] kex follows: False
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] Compression: none
2025-12-25T20:17:26.003 [DEBUG] [Thread-17812] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:17:26.023 [DEBUG] [Thread-17812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:17:26.024 [DEBUG] [Thread-17812] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:17:26.024 [DEBUG] [Thread-17812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:17:26.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:17:26.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:17:26.026 [DEBUG] [Thread-17812] [transport.py] [_log()] userauth is OK
2025-12-25T20:17:26.027 [DEBUG] [Thread-17812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:17:26.027 [DEBUG] [Thread-17812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:17:26.027 [DEBUG] [Thread-17812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:17:26.027 [DEBUG] [Thread-17812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:17:26.049 [INFO] [Thread-17812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:17:26.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:17:26.858 [DEBUG] [Thread-17812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:17:26.858 [DEBUG] [Thread-17812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:17:26.858 [DEBUG] [Thread-17812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:17:26.899 [DEBUG] [Thread-17812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:17:26.899 [DEBUG] [Thread-17812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:17:26.902 [DEBUG] [Thread-17812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:17:26.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:17:26.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:17:26.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:17:26.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:17:26.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:17:26.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:17:26.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:17:26.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:17:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:17:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.761518 -999.00  +20.70  32.31     31   +3.20 1 1 2 1 1   157    0 16.80 -32.06 ----- 33.7 32.3 299.6 39.6 21.2 -24.7 21.1 -24.0 20.9 -22.5 21.1 -23.5
2025-12-25T20:17:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:17:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:17:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.761518
2025-12-25T20:17:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:17:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:17:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:17:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:17:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:17:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:16:57', tmtdew=20.36, humidity=25.77, cloud=0.0, wind=36.13, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:16:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:17:26.931 [DEBUG] [Thread-17812] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:17:27.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-25T20:17:27.035 [DEBUG] [Thread-17815] [transport.py] [_log()] starting thread (client mode): 0xb6b7d780
2025-12-25T20:17:27.035 [DEBUG] [Thread-17815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:17:27.053 [DEBUG] [Thread-17815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:17:27.053 [INFO] [Thread-17815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] client lang: <none>
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] server lang: <none>
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] kex follows: False
2025-12-25T20:17:27.061 [DEBUG] [Thread-17815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:17:27.062 [DEBUG] [Thread-17815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:17:27.062 [DEBUG] [Thread-17815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:17:27.062 [DEBUG] [Thread-17815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:17:27.062 [DEBUG] [Thread-17815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:17:27.062 [DEBUG] [Thread-17815] [transport.py] [_log()] Compression: none
2025-12-25T20:17:27.062 [DEBUG] [Thread-17815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:17:27.121 [DEBUG] [Thread-17815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:17:27.121 [DEBUG] [Thread-17815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:17:27.122 [DEBUG] [Thread-17815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:17:27.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:17:27.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:17:27.181 [DEBUG] [Thread-17815] [transport.py] [_log()] userauth is OK
2025-12-25T20:17:27.181 [DEBUG] [Thread-17815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:17:27.184 [DEBUG] [Thread-17815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:17:27.184 [DEBUG] [Thread-17815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:17:27.184 [DEBUG] [Thread-17815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:17:27.202 [INFO] [Thread-17815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:17:27.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-25T20:17:27.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:17:28.010 [DEBUG] [Thread-17815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:17:28.011 [DEBUG] [Thread-17815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:17:28.059 [DEBUG] [Thread-17815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:17:28.059 [DEBUG] [Thread-17815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:17:28.068 [DEBUG] [Thread-17815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:17:28.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:17:28.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-25T20:17:28.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-25T20:17:28.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:17:28.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:17:28.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:17:28.104 [DEBUG] [Thread-17815] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:17:35.658 [DEBUG] [Thread-17817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:40.349 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:40.351 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:45.729 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:50.705 [DEBUG] [Thread-17818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:17:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:17:58.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:17:58.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-25T20:17:58.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 17, 29), 20.37, 25.75, 0.0, 34.94, 20.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:17:58.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:17:29
2025-12-25T20:17:59.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:17:59.181 [DEBUG] [Thread-17819] [transport.py] [_log()] starting thread (client mode): 0xb6bc3e20
2025-12-25T20:17:59.181 [DEBUG] [Thread-17819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:17:59.201 [DEBUG] [Thread-17819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:17:59.201 [INFO] [Thread-17819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] client lang: <none>
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] server lang: <none>
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] kex follows: False
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] Compression: none
2025-12-25T20:17:59.203 [DEBUG] [Thread-17819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:17:59.211 [DEBUG] [Thread-17819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:17:59.211 [DEBUG] [Thread-17819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:17:59.211 [DEBUG] [Thread-17819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:17:59.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:17:59.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:17:59.212 [DEBUG] [Thread-17819] [transport.py] [_log()] userauth is OK
2025-12-25T20:17:59.212 [DEBUG] [Thread-17819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:17:59.212 [DEBUG] [Thread-17819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:17:59.212 [DEBUG] [Thread-17819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:17:59.212 [DEBUG] [Thread-17819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:17:59.221 [INFO] [Thread-17819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:17:59.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:17:59.873 [DEBUG] [Thread-17819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:17:59.873 [DEBUG] [Thread-17819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:17:59.874 [DEBUG] [Thread-17819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:17:59.915 [DEBUG] [Thread-17819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:17:59.915 [DEBUG] [Thread-17819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:17:59.917 [DEBUG] [Thread-17819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:17:59.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:17:59.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:17:59.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:17:59.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:17:59.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:17:59.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:17:59.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.761865 -999.00  +20.70  35.84     31   +3.20 1 1 2 1 1   146    0 16.42 -30.34 ----- 29.8 35.8 297.4 41.5 21.2 -24.6 21.1 -24.1 20.9 -22.3 21.1 -23.4
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.761865
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:17:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:17:29', tmtdew=20.37, humidity=25.75, cloud=0.0, wind=34.94, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:17:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:17:59.946 [DEBUG] [Thread-17819] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:18:00.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-25T20:18:00.030 [DEBUG] [Thread-17822] [transport.py] [_log()] starting thread (client mode): 0xb6bc3cd0
2025-12-25T20:18:00.030 [DEBUG] [Thread-17822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:18:00.045 [DEBUG] [Thread-17822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:18:00.045 [INFO] [Thread-17822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] client lang: <none>
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] server lang: <none>
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] kex follows: False
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] Compression: none
2025-12-25T20:18:00.052 [DEBUG] [Thread-17822] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:18:00.114 [DEBUG] [Thread-17822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:18:00.115 [DEBUG] [Thread-17822] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:18:00.115 [DEBUG] [Thread-17822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:18:00.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:18:00.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:18:00.172 [DEBUG] [Thread-17822] [transport.py] [_log()] userauth is OK
2025-12-25T20:18:00.172 [DEBUG] [Thread-17822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:18:00.172 [DEBUG] [Thread-17822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:18:00.172 [DEBUG] [Thread-17822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:18:00.172 [DEBUG] [Thread-17822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:18:00.186 [INFO] [Thread-17822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:18:00.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-25T20:18:00.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:18:01.044 [DEBUG] [Thread-17822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:18:01.044 [DEBUG] [Thread-17822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:18:01.091 [DEBUG] [Thread-17822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:18:01.091 [DEBUG] [Thread-17822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:18:01.100 [DEBUG] [Thread-17822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:18:01.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:18:01.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:18:01.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-25T20:18:01.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:18:01.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:18:01.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:18:01.131 [DEBUG] [Thread-17822] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:18:05.737 [DEBUG] [Thread-17824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:09.221 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:20.795 [DEBUG] [Thread-17825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:23.422 [DEBUG] [Thread-17826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:18:31.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:18:31.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-25T20:18:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 18, 1), 20.37, 25.73, 0.0, 33.28, 20.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:18:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:18:01
2025-12-25T20:18:31.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:18:32.113 [DEBUG] [Thread-17827] [transport.py] [_log()] starting thread (client mode): 0xb6b75810
2025-12-25T20:18:32.113 [DEBUG] [Thread-17827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:18:32.129 [DEBUG] [Thread-17827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:18:32.129 [INFO] [Thread-17827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] client lang: <none>
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] server lang: <none>
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] kex follows: False
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] Compression: none
2025-12-25T20:18:32.133 [DEBUG] [Thread-17827] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:18:32.149 [DEBUG] [Thread-17827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:18:32.150 [DEBUG] [Thread-17827] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:18:32.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:18:32.150 [DEBUG] [Thread-17827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:18:32.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:18:32.152 [DEBUG] [Thread-17827] [transport.py] [_log()] userauth is OK
2025-12-25T20:18:32.152 [DEBUG] [Thread-17827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:18:32.152 [DEBUG] [Thread-17827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:18:32.152 [DEBUG] [Thread-17827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:18:32.153 [DEBUG] [Thread-17827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:18:32.178 [INFO] [Thread-17827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:18:32.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:18:32.962 [DEBUG] [Thread-17827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:18:32.963 [DEBUG] [Thread-17827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:18:32.963 [DEBUG] [Thread-17827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:18:33.003 [DEBUG] [Thread-17827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:18:33.003 [DEBUG] [Thread-17827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:18:33.007 [DEBUG] [Thread-17827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:18:33.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:18:33.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:18:33.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:18:33.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:18:33.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:18:33.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:18:33.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:18:33.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:18:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:18:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.762212 -999.00  +20.70  36.32     31   +3.20 1 1 2 1 1   136    0 16.43 -28.18 ----- 33.8 36.3 305.2 43.1 21.1 -24.7 21.1 -24.1 20.8 -22.4 21.1 -23.6
2025-12-25T20:18:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:18:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:18:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.762212
2025-12-25T20:18:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:18:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:18:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:18:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:18:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:18:33.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:18:01', tmtdew=20.37, humidity=25.73, cloud=0.0, wind=33.28, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:17:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:18:33.027 [DEBUG] [Thread-17827] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:18:33.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-25T20:18:33.120 [DEBUG] [Thread-17830] [transport.py] [_log()] starting thread (client mode): 0xb6b21660
2025-12-25T20:18:33.120 [DEBUG] [Thread-17830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:18:33.135 [DEBUG] [Thread-17830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:18:33.135 [INFO] [Thread-17830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:18:33.143 [DEBUG] [Thread-17830] [transport.py] [_log()] client lang: <none>
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] server lang: <none>
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] kex follows: False
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] Compression: none
2025-12-25T20:18:33.144 [DEBUG] [Thread-17830] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:18:33.200 [DEBUG] [Thread-17830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:18:33.201 [DEBUG] [Thread-17830] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:18:33.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:18:33.202 [DEBUG] [Thread-17830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:18:33.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:18:33.256 [DEBUG] [Thread-17830] [transport.py] [_log()] userauth is OK
2025-12-25T20:18:33.257 [DEBUG] [Thread-17830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:18:33.257 [DEBUG] [Thread-17830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:18:33.257 [DEBUG] [Thread-17830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:18:33.257 [DEBUG] [Thread-17830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:18:33.275 [INFO] [Thread-17830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:18:33.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-25T20:18:33.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:18:34.116 [DEBUG] [Thread-17830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:18:34.117 [DEBUG] [Thread-17830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:18:34.164 [DEBUG] [Thread-17830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:18:34.164 [DEBUG] [Thread-17830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:18:34.173 [DEBUG] [Thread-17830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:18:34.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:18:34.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-25T20:18:34.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-25T20:18:34.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:18:34.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:18:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:18:34.210 [DEBUG] [Thread-17830] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:18:35.830 [DEBUG] [Thread-17832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:46.640 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:46.641 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:18:50.879 [DEBUG] [Thread-17833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:04.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:19:04.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:19:04.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:19:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 18, 33), 20.37, 25.73, 0.0, 29.73, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:19:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:18:33
2025-12-25T20:19:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:19:05.231 [DEBUG] [Thread-17834] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T20:19:05.231 [DEBUG] [Thread-17834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:19:05.251 [DEBUG] [Thread-17834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:19:05.251 [INFO] [Thread-17834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] client lang: <none>
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] server lang: <none>
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] kex follows: False
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:19:05.255 [DEBUG] [Thread-17834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:19:05.256 [DEBUG] [Thread-17834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:19:05.256 [DEBUG] [Thread-17834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:19:05.256 [DEBUG] [Thread-17834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:19:05.256 [DEBUG] [Thread-17834] [transport.py] [_log()] Compression: none
2025-12-25T20:19:05.256 [DEBUG] [Thread-17834] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:19:05.272 [DEBUG] [Thread-17834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:19:05.272 [DEBUG] [Thread-17834] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:19:05.273 [DEBUG] [Thread-17834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20: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-25T20:19:05.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:19:05.316 [DEBUG] [Thread-17834] [transport.py] [_log()] userauth is OK
2025-12-25T20:19:05.316 [DEBUG] [Thread-17834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:19:05.316 [DEBUG] [Thread-17834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:19:05.317 [DEBUG] [Thread-17834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:19:05.317 [DEBUG] [Thread-17834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:19:05.350 [INFO] [Thread-17834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:19:05.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:19:05.914 [DEBUG] [Thread-17836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:05.995 [DEBUG] [Thread-17834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:19:05.995 [DEBUG] [Thread-17834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:19:05.996 [DEBUG] [Thread-17834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:19:06.036 [DEBUG] [Thread-17834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:19:06.036 [DEBUG] [Thread-17834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:19:06.040 [DEBUG] [Thread-17834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:19:06.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:19:06.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:19:06.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:19:06.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:19:06.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:19:06.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:19:06.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:19:06.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:19:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:19:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.762907 -999.00  +20.70  23.83     31   +3.20 1 1 1 1 1   117    0 16.93 -25.97 ----- 22.6 23.8 297.8 33.3 21.2 -24.5 21.1 -24.0 20.9 -22.5 21.0 -23.5
2025-12-25T20:19:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:19:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:19:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.762907
2025-12-25T20:19:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:19:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:19:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:19:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:19:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:19:06.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:18:33', tmtdew=20.37, humidity=25.73, cloud=0.0, wind=29.73, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:18:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:19:06.068 [DEBUG] [Thread-17834] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:19: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-25T20:19:06.162 [DEBUG] [Thread-17838] [transport.py] [_log()] starting thread (client mode): 0xb6bc3ee0
2025-12-25T20:19:06.162 [DEBUG] [Thread-17838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:19:06.176 [DEBUG] [Thread-17838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:19:06.176 [INFO] [Thread-17838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] client lang: <none>
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] server lang: <none>
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] kex follows: False
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] Compression: none
2025-12-25T20:19:06.184 [DEBUG] [Thread-17838] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:19:06.244 [DEBUG] [Thread-17838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:19:06.245 [DEBUG] [Thread-17838] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:19:06.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:19:06.246 [DEBUG] [Thread-17838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:19:06.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:19:06.303 [DEBUG] [Thread-17838] [transport.py] [_log()] userauth is OK
2025-12-25T20:19:06.303 [DEBUG] [Thread-17838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:19:06.303 [DEBUG] [Thread-17838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:19:06.303 [DEBUG] [Thread-17838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:19:06.303 [DEBUG] [Thread-17838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:19:06.323 [INFO] [Thread-17838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:19:06.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-25T20:19:06.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:19:07.163 [DEBUG] [Thread-17838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:19:07.163 [DEBUG] [Thread-17838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:19:07.211 [DEBUG] [Thread-17838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:19:07.212 [DEBUG] [Thread-17838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:19:07.220 [DEBUG] [Thread-17838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:19:07.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:19:07.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:19:07.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-25T20:19:07.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:19:07.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:19:07.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:19:07.253 [DEBUG] [Thread-17838] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:19:20.941 [DEBUG] [Thread-17840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:23.478 [DEBUG] [Thread-17841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:35.982 [DEBUG] [Thread-17842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:19:37.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:19:37.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-25T20:19:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 19, 5), 20.35, 25.77, 0.0, 33.19, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:19:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:19:05
2025-12-25T20:19:38.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:19:38.250 [DEBUG] [Thread-17843] [transport.py] [_log()] starting thread (client mode): 0xb6b77d30
2025-12-25T20:19:38.251 [DEBUG] [Thread-17843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:19:38.270 [DEBUG] [Thread-17843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:19:38.271 [INFO] [Thread-17843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:19:38.273 [DEBUG] [Thread-17843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] client lang: <none>
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] server lang: <none>
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] kex follows: False
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:19:38.274 [DEBUG] [Thread-17843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:19:38.275 [DEBUG] [Thread-17843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:19:38.275 [DEBUG] [Thread-17843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:19:38.275 [DEBUG] [Thread-17843] [transport.py] [_log()] Compression: none
2025-12-25T20:19:38.275 [DEBUG] [Thread-17843] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:19:38.294 [DEBUG] [Thread-17843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:19:38.295 [DEBUG] [Thread-17843] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:19:38.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:19:38.297 [DEBUG] [Thread-17843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:19:38.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:19:38.299 [DEBUG] [Thread-17843] [transport.py] [_log()] userauth is OK
2025-12-25T20:19:38.299 [DEBUG] [Thread-17843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:19:38.299 [DEBUG] [Thread-17843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:19:38.299 [DEBUG] [Thread-17843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:19:38.299 [DEBUG] [Thread-17843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:19:38.324 [INFO] [Thread-17843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:19:38.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:19:39.065 [DEBUG] [Thread-17843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:19:39.065 [DEBUG] [Thread-17843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:19:39.065 [DEBUG] [Thread-17843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:19:39.106 [DEBUG] [Thread-17843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:19:39.106 [DEBUG] [Thread-17843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:19:39.108 [DEBUG] [Thread-17843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:19:39.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:19:39.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:19:39.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:19:39.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:19:39.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:19:39.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:19:39.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:19:39.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.763254 -999.00  +20.70  30.31     31   +3.20 1 1 2 1 1   108    0 16.65 -26.19 ----- 24.9 30.3 289.2 36.5 21.1 -24.6 21.1 -24.1 20.8 -22.3 21.1 -23.4
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.763254
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:19:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:19:05', tmtdew=20.35, humidity=25.77, cloud=0.0, wind=33.19, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:19:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:19:39.126 [DEBUG] [Thread-17843] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:19:39.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-25T20:19:39.211 [DEBUG] [Thread-17846] [transport.py] [_log()] starting thread (client mode): 0xb6b76bc0
2025-12-25T20:19:39.211 [DEBUG] [Thread-17846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:19:39.227 [DEBUG] [Thread-17846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:19:39.227 [INFO] [Thread-17846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:19:39.234 [DEBUG] [Thread-17846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:19:39.234 [DEBUG] [Thread-17846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:19:39.234 [DEBUG] [Thread-17846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:19:39.234 [DEBUG] [Thread-17846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:39.234 [DEBUG] [Thread-17846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] client lang: <none>
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] server lang: <none>
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] kex follows: False
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] Compression: none
2025-12-25T20:19:39.235 [DEBUG] [Thread-17846] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:19:39.291 [DEBUG] [Thread-17846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:19:39.291 [DEBUG] [Thread-17846] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:19:39.291 [DEBUG] [Thread-17846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:19:39.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:19:39.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:19:39.348 [DEBUG] [Thread-17846] [transport.py] [_log()] userauth is OK
2025-12-25T20:19:39.348 [DEBUG] [Thread-17846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:19:39.348 [DEBUG] [Thread-17846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:19:39.348 [DEBUG] [Thread-17846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:19:39.348 [DEBUG] [Thread-17846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:19:39.363 [INFO] [Thread-17846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:19:39.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-25T20:19:39.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:19:40.249 [DEBUG] [Thread-17846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:19:40.249 [DEBUG] [Thread-17846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:19:40.297 [DEBUG] [Thread-17846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:19:40.297 [DEBUG] [Thread-17846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:19:40.305 [DEBUG] [Thread-17846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:19:40.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:19:40.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-25T20:19:40.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:19:40.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:19:40.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:19:40.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:19:40.338 [DEBUG] [Thread-17846] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:19:51.015 [DEBUG] [Thread-17848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:51.914 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:51.915 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:52.031 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:19:58.113 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:06.069 [DEBUG] [Thread-17849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:08.508 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:20:10.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:20:10.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-25T20:20:11.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 19, 37), 20.28, 25.8, 0.0, 30.22, 20.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:20:11.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:19:37
2025-12-25T20:20:11.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:20:11.407 [DEBUG] [Thread-17850] [transport.py] [_log()] starting thread (client mode): 0xb6b75d80
2025-12-25T20:20:11.407 [DEBUG] [Thread-17850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:20:11.427 [DEBUG] [Thread-17850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:20:11.427 [INFO] [Thread-17850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] client lang: <none>
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] server lang: <none>
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] kex follows: False
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] Compression: none
2025-12-25T20:20:11.431 [DEBUG] [Thread-17850] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:20:11.439 [DEBUG] [Thread-17850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:20:11.439 [DEBUG] [Thread-17850] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:20:11.439 [DEBUG] [Thread-17850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:20:11.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:20:11.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:20:11.480 [DEBUG] [Thread-17850] [transport.py] [_log()] userauth is OK
2025-12-25T20:20:11.480 [DEBUG] [Thread-17850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:20:11.480 [DEBUG] [Thread-17850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:20:11.480 [DEBUG] [Thread-17850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:20:11.480 [DEBUG] [Thread-17850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:20:11.499 [INFO] [Thread-17850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:20:11.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:20:12.233 [DEBUG] [Thread-17850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:20:12.233 [DEBUG] [Thread-17850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:20:12.233 [DEBUG] [Thread-17850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:20:12.274 [DEBUG] [Thread-17850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:20:12.274 [DEBUG] [Thread-17850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:20:12.277 [DEBUG] [Thread-17850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:20:12.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:20:12.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:20:12.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:20:12.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:20:12.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:20:12.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:20:12.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.763601 -999.00  +20.70  25.91     31   +3.20 1 1 1 1 1   100    0 16.46 -22.03 ----- 35.6 25.9 298.8 37.7 21.1 -24.7 21.1 -23.9 20.8 -22.4 21.0 -23.4
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.763601
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:20:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:19:37', tmtdew=20.28, humidity=25.8, cloud=0.0, wind=30.22, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:19:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:20:12.292 [DEBUG] [Thread-17850] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:20:12.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-25T20:20:12.377 [DEBUG] [Thread-17853] [transport.py] [_log()] starting thread (client mode): 0xb6b22590
2025-12-25T20:20:12.377 [DEBUG] [Thread-17853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:20:12.393 [DEBUG] [Thread-17853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:20:12.393 [INFO] [Thread-17853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:20:12.400 [DEBUG] [Thread-17853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] client lang: <none>
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] server lang: <none>
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] kex follows: False
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] Compression: none
2025-12-25T20:20:12.401 [DEBUG] [Thread-17853] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:20:12.459 [DEBUG] [Thread-17853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:20:12.459 [DEBUG] [Thread-17853] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:20:12.460 [DEBUG] [Thread-17853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:20:12.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:20:12.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:20:12.518 [DEBUG] [Thread-17853] [transport.py] [_log()] userauth is OK
2025-12-25T20:20:12.519 [DEBUG] [Thread-17853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:20:12.519 [DEBUG] [Thread-17853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:20:12.519 [DEBUG] [Thread-17853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:20:12.519 [DEBUG] [Thread-17853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:20:12.538 [INFO] [Thread-17853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:20:12.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-25T20:20:12.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:20:13.375 [DEBUG] [Thread-17853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:20:13.375 [DEBUG] [Thread-17853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:20:13.423 [DEBUG] [Thread-17853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:20:13.423 [DEBUG] [Thread-17853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:20:13.434 [DEBUG] [Thread-17853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:20:13.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:20:13.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-25T20:20:13.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:20:13.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:20:13.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:20:13.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:20:13.471 [DEBUG] [Thread-17853] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:20:17.887 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:21.104 [DEBUG] [Thread-17855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:23.533 [DEBUG] [Thread-17856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:28.384 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:34.479 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:36.159 [DEBUG] [Thread-17857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:42.945 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:43.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:20:43.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:20:43.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-25T20:20:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 20, 9), 20.29, 25.78, 0.0, 26.45, 20.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:20:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:20:09
2025-12-25T20:20:44.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:20:44.531 [DEBUG] [Thread-17858] [transport.py] [_log()] starting thread (client mode): 0xb6b234c0
2025-12-25T20:20:44.531 [DEBUG] [Thread-17858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:20:44.552 [DEBUG] [Thread-17858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:20:44.552 [INFO] [Thread-17858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:20:44.555 [DEBUG] [Thread-17858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] client lang: <none>
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] server lang: <none>
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] kex follows: False
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] Compression: none
2025-12-25T20:20:44.556 [DEBUG] [Thread-17858] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:20:44.564 [DEBUG] [Thread-17858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:20:44.565 [DEBUG] [Thread-17858] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:20:44.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:20:44.566 [DEBUG] [Thread-17858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:20:44.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:20:44.568 [DEBUG] [Thread-17858] [transport.py] [_log()] userauth is OK
2025-12-25T20:20:44.568 [DEBUG] [Thread-17858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:20:44.568 [DEBUG] [Thread-17858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:20:44.568 [DEBUG] [Thread-17858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:20:44.568 [DEBUG] [Thread-17858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:20:44.586 [INFO] [Thread-17858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:20:44.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:20:45.397 [DEBUG] [Thread-17858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:20:45.398 [DEBUG] [Thread-17858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:20:45.399 [DEBUG] [Thread-17858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:20:45.439 [DEBUG] [Thread-17858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:20:45.439 [DEBUG] [Thread-17858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:20:45.442 [DEBUG] [Thread-17858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:20:45.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:20:45.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:20:45.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:20:45.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:20:45.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:20:45.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:20:45.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.763949 -999.00  +20.70  27.04     31   +3.20 1 1 1 1 1    92    0 16.59 -22.82 ----- 24.8 27.0 294.6 40.6 21.1 -24.6 21.1 -24.0 20.7 -22.3 21.0 -23.4
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.763949
2025-12-25T20:20:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:20:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:20:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:20:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:20:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:20:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:20:09', tmtdew=20.29, humidity=25.78, cloud=0.0, wind=26.45, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:20:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:20:45.466 [DEBUG] [Thread-17858] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:20:45.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-25T20:20:45.562 [DEBUG] [Thread-17861] [transport.py] [_log()] starting thread (client mode): 0xb6b23130
2025-12-25T20:20:45.562 [DEBUG] [Thread-17861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:20:45.577 [DEBUG] [Thread-17861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:20:45.577 [INFO] [Thread-17861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:20:45.584 [DEBUG] [Thread-17861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:20:45.584 [DEBUG] [Thread-17861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:20:45.584 [DEBUG] [Thread-17861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] client lang: <none>
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] server lang: <none>
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] kex follows: False
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] Compression: none
2025-12-25T20:20:45.585 [DEBUG] [Thread-17861] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:20:45.648 [DEBUG] [Thread-17861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:20:45.648 [DEBUG] [Thread-17861] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:20:45.649 [DEBUG] [Thread-17861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:20:45.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:20:45.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:20:45.704 [DEBUG] [Thread-17861] [transport.py] [_log()] userauth is OK
2025-12-25T20:20:45.705 [DEBUG] [Thread-17861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:20:45.705 [DEBUG] [Thread-17861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:20:45.705 [DEBUG] [Thread-17861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:20:45.705 [DEBUG] [Thread-17861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:20:45.729 [INFO] [Thread-17861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:20:45.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:20:45.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:20:46.581 [DEBUG] [Thread-17861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:20:46.582 [DEBUG] [Thread-17861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:20:46.629 [DEBUG] [Thread-17861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:20:46.629 [DEBUG] [Thread-17861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:20:46.638 [DEBUG] [Thread-17861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:20:46.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:20:46.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:20:46.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-25T20:20:46.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:20:46.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:20:46.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:20:46.675 [DEBUG] [Thread-17861] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:20:50.477 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:51.191 [DEBUG] [Thread-17863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:56.857 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:20:56.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:00.843 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:06.242 [DEBUG] [Thread-17864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:06.965 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:14.356 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:16.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:21:16.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:21:16.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-25T20:21:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 21, 13), 20.29, 25.78, 0.0, 27.51, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:21:17.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:21:13
2025-12-25T20:21:17.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:21:17.689 [DEBUG] [Thread-17865] [transport.py] [_log()] starting thread (client mode): 0xb6b7c400
2025-12-25T20:21:17.689 [DEBUG] [Thread-17865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:21:17.710 [DEBUG] [Thread-17865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:21:17.710 [INFO] [Thread-17865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:21:17.711 [DEBUG] [Thread-17865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:21:17.711 [DEBUG] [Thread-17865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:21:17.711 [DEBUG] [Thread-17865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:21:17.711 [DEBUG] [Thread-17865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:17.711 [DEBUG] [Thread-17865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] client lang: <none>
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] server lang: <none>
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] kex follows: False
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] Compression: none
2025-12-25T20:21:17.712 [DEBUG] [Thread-17865] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:21:17.730 [DEBUG] [Thread-17865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:21:17.730 [DEBUG] [Thread-17865] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:21:17.730 [DEBUG] [Thread-17865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:21:17.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:21:17.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:21:17.731 [DEBUG] [Thread-17865] [transport.py] [_log()] userauth is OK
2025-12-25T20:21:17.731 [DEBUG] [Thread-17865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:21:17.731 [DEBUG] [Thread-17865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:21:17.731 [DEBUG] [Thread-17865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:21:17.731 [DEBUG] [Thread-17865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:21:17.747 [INFO] [Thread-17865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:21:17.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:21:18.398 [DEBUG] [Thread-17865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:21:18.398 [DEBUG] [Thread-17865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:21:18.399 [DEBUG] [Thread-17865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:21:18.439 [DEBUG] [Thread-17865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:21:18.439 [DEBUG] [Thread-17865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:21:18.441 [DEBUG] [Thread-17865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:21:18.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:21:18.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:21:18.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:21:18.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:21:18.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:21:18.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:21:18.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.764295 -999.00  +20.70  24.12     31   +3.20 1 2 1 1 1    85    0 17.06 -22.25 ----- 35.0 24.1 291.2 35.1 21.1 -24.5 21.1 -23.9 20.8 -22.1 21.0 -23.3
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.764295
2025-12-25T20:21:18.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:21:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:21:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:21:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:21:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:21:18.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:21:13', tmtdew=20.29, humidity=25.78, cloud=0.0, wind=27.51, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:20:35.088', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:21:18.461 [DEBUG] [Thread-17865] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:21:18.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-25T20:21:18.548 [DEBUG] [Thread-17868] [transport.py] [_log()] starting thread (client mode): 0xb9558430
2025-12-25T20:21:18.548 [DEBUG] [Thread-17868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:21:18.569 [DEBUG] [Thread-17868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:21:18.569 [INFO] [Thread-17868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:21:18.576 [DEBUG] [Thread-17868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:21:18.576 [DEBUG] [Thread-17868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:21:18.576 [DEBUG] [Thread-17868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:21:18.576 [DEBUG] [Thread-17868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] client lang: <none>
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] server lang: <none>
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] kex follows: False
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] Compression: none
2025-12-25T20:21:18.577 [DEBUG] [Thread-17868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:21:18.635 [DEBUG] [Thread-17868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:21:18.636 [DEBUG] [Thread-17868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:21:18.636 [DEBUG] [Thread-17868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:21:18.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:21:18.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:21:18.700 [DEBUG] [Thread-17868] [transport.py] [_log()] userauth is OK
2025-12-25T20:21:18.701 [DEBUG] [Thread-17868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:21:18.701 [DEBUG] [Thread-17868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:21:18.701 [DEBUG] [Thread-17868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:21:18.701 [DEBUG] [Thread-17868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:21:18.719 [INFO] [Thread-17868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:21:18.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-25T20:21:18.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:21:19.599 [DEBUG] [Thread-17868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:21:19.599 [DEBUG] [Thread-17868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:21:19.649 [DEBUG] [Thread-17868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:21:19.649 [DEBUG] [Thread-17868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:21:19.660 [DEBUG] [Thread-17868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:21:19.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:21:19.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:21:19.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-25T20:21:19.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:21:19.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:21:19.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:21:19.703 [DEBUG] [Thread-17868] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:21:21.273 [DEBUG] [Thread-17870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:21.803 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:23.589 [DEBUG] [Thread-17871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:29.331 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:35.431 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:36.332 [DEBUG] [Thread-17872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:42.821 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:49.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:21:49.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:21:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:21:50.193 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 21, 46), 20.28, 25.77, 0.0, 26.82, 20.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:21:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:21:46
2025-12-25T20:21:50.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:21:50.717 [DEBUG] [Thread-17873] [transport.py] [_log()] starting thread (client mode): 0xb95b21a0
2025-12-25T20:21:50.717 [DEBUG] [Thread-17873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:21:50.734 [DEBUG] [Thread-17873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:21:50.734 [INFO] [Thread-17873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:21:50.737 [DEBUG] [Thread-17873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:21:50.737 [DEBUG] [Thread-17873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] client lang: <none>
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] server lang: <none>
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] kex follows: False
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:21:50.738 [DEBUG] [Thread-17873] [transport.py] [_log()] Compression: none
2025-12-25T20:21:50.739 [DEBUG] [Thread-17873] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:21:50.758 [DEBUG] [Thread-17873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:21:50.759 [DEBUG] [Thread-17873] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:21:50.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:21:50.761 [DEBUG] [Thread-17873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:21:50.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:21:50.763 [DEBUG] [Thread-17873] [transport.py] [_log()] userauth is OK
2025-12-25T20:21:50.763 [DEBUG] [Thread-17873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:21:50.764 [DEBUG] [Thread-17873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:21:50.764 [DEBUG] [Thread-17873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:21:50.764 [DEBUG] [Thread-17873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:21:50.782 [INFO] [Thread-17873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:21:50.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:21:51.365 [DEBUG] [Thread-17875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:21:51.614 [DEBUG] [Thread-17873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:21:51.614 [DEBUG] [Thread-17873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:21:51.614 [DEBUG] [Thread-17873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:21:51.655 [DEBUG] [Thread-17873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:21:51.655 [DEBUG] [Thread-17873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:21:51.659 [DEBUG] [Thread-17873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:21:51.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:21:51.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:21:51.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:21:51.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:21:51.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:21:51.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:21:51.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:21:51.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:21:51.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:21:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.764643 -999.00  +20.70  24.59     31   +3.20 1 1 1 1 1    79    0 17.13 -19.34 ----- 26.2 24.6 301.2 34.5 21.1 -24.6 21.0 -24.0 20.7 -22.4 21.0 -23.4
2025-12-25T20:21:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:21:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:21:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.764643
2025-12-25T20:21:51.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:21:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:21:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:21:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:21:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:21:51.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:21:46', tmtdew=20.28, humidity=25.77, cloud=0.0, wind=26.82, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:21:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:21:51.686 [DEBUG] [Thread-17873] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:21:51.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:21:51.783 [DEBUG] [Thread-17877] [transport.py] [_log()] starting thread (client mode): 0xb6b7e920
2025-12-25T20:21:51.783 [DEBUG] [Thread-17877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:21:51.798 [DEBUG] [Thread-17877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:21:51.798 [INFO] [Thread-17877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:21:51.805 [DEBUG] [Thread-17877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] client lang: <none>
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] server lang: <none>
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] kex follows: False
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] Compression: none
2025-12-25T20:21:51.806 [DEBUG] [Thread-17877] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:21:51.865 [DEBUG] [Thread-17877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:21:51.865 [DEBUG] [Thread-17877] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:21:51.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:21:51.866 [DEBUG] [Thread-17877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:21:51.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:21:51.920 [DEBUG] [Thread-17877] [transport.py] [_log()] userauth is OK
2025-12-25T20:21:51.921 [DEBUG] [Thread-17877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:21:51.921 [DEBUG] [Thread-17877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:21:51.921 [DEBUG] [Thread-17877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:21:51.921 [DEBUG] [Thread-17877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:21:51.939 [INFO] [Thread-17877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:21:51.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-25T20:21:51.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:21:52.805 [DEBUG] [Thread-17877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:21:52.805 [DEBUG] [Thread-17877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:21:52.853 [DEBUG] [Thread-17877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:21:52.853 [DEBUG] [Thread-17877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:21:52.862 [DEBUG] [Thread-17877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:21:52.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:21:52.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-25T20:21:52.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-25T20:21:52.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:21:52.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:21:52.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:21:52.899 [DEBUG] [Thread-17877] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:21:57.653 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:01.583 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:01.584 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:03.750 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:06.399 [DEBUG] [Thread-17879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:11.216 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:18.700 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:21.450 [DEBUG] [Thread-17880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:22:22.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:22:22.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-25T20:22:23.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 22, 18), 20.26, 25.82, 0.0, 27.98, 20.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:22:23.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:22:18
2025-12-25T20:22:23.643 [DEBUG] [Thread-17881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:23.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:22:23.908 [DEBUG] [Thread-17882] [transport.py] [_log()] starting thread (client mode): 0xb6b7f1c0
2025-12-25T20:22:23.908 [DEBUG] [Thread-17882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:22:23.928 [DEBUG] [Thread-17882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:22:23.928 [INFO] [Thread-17882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] client lang: <none>
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] server lang: <none>
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] kex follows: False
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] Compression: none
2025-12-25T20:22:23.932 [DEBUG] [Thread-17882] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:22:23.948 [DEBUG] [Thread-17882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:22:23.949 [DEBUG] [Thread-17882] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:22:23.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:22:23.950 [DEBUG] [Thread-17882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:22:23.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:22:23.952 [DEBUG] [Thread-17882] [transport.py] [_log()] userauth is OK
2025-12-25T20:22:23.952 [DEBUG] [Thread-17882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:22:23.952 [DEBUG] [Thread-17882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:22:23.952 [DEBUG] [Thread-17882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:22:23.952 [DEBUG] [Thread-17882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:22:23.977 [INFO] [Thread-17882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:22:23.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:22:24.604 [DEBUG] [Thread-17882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:22:24.605 [DEBUG] [Thread-17882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:22:24.605 [DEBUG] [Thread-17882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:22:24.646 [DEBUG] [Thread-17882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:22:24.646 [DEBUG] [Thread-17882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:22:24.649 [DEBUG] [Thread-17882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:22:24.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:22:24.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:22:24.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:22:24.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:22:24.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:22:24.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:22:24.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:22:24.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:22:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:22:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.764990 -999.00  +20.70  27.14     31   +3.20 1 1 1 1 1    73    0 17.16 -18.16 ----- 28.0 27.1 293.4 32.0 21.0 -24.5 21.0 -23.9 20.7 -22.3 21.0 -23.4
2025-12-25T20:22:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:22:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:22:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.764990
2025-12-25T20:22:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:22:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:22:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:22:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:22:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:22:24.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:22:18', tmtdew=20.26, humidity=25.82, cloud=0.0, wind=27.98, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:21:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:22:24.673 [DEBUG] [Thread-17882] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:22:24.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-25T20:22:24.767 [DEBUG] [Thread-17885] [transport.py] [_log()] starting thread (client mode): 0xb6bb4130
2025-12-25T20:22:24.767 [DEBUG] [Thread-17885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:22:24.782 [DEBUG] [Thread-17885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:22:24.782 [INFO] [Thread-17885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] client lang: <none>
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] server lang: <none>
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] kex follows: False
2025-12-25T20:22:24.789 [DEBUG] [Thread-17885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:22:24.790 [DEBUG] [Thread-17885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:22:24.790 [DEBUG] [Thread-17885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:22:24.790 [DEBUG] [Thread-17885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:22:24.790 [DEBUG] [Thread-17885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:22:24.790 [DEBUG] [Thread-17885] [transport.py] [_log()] Compression: none
2025-12-25T20:22:24.790 [DEBUG] [Thread-17885] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:22:24.846 [DEBUG] [Thread-17885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:22:24.846 [DEBUG] [Thread-17885] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:22:24.847 [DEBUG] [Thread-17885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:22:24.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:22:24.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:22:24.902 [DEBUG] [Thread-17885] [transport.py] [_log()] userauth is OK
2025-12-25T20:22:24.903 [DEBUG] [Thread-17885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:22:24.903 [DEBUG] [Thread-17885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:22:24.903 [DEBUG] [Thread-17885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:22:24.903 [DEBUG] [Thread-17885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:22:24.922 [INFO] [Thread-17885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:22:24.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-25T20:22:24.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:22:25.724 [DEBUG] [Thread-17885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:22:25.724 [DEBUG] [Thread-17885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:22:25.771 [DEBUG] [Thread-17885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:22:25.772 [DEBUG] [Thread-17885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:22:25.780 [DEBUG] [Thread-17885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:22:25.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:22:25.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:22:25.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-25T20:22:25.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:22:25.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:22:25.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:22:25.815 [DEBUG] [Thread-17885] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:22:30.359 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:35.415 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:36.482 [DEBUG] [Thread-17887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:42.806 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:50.213 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:51.526 [DEBUG] [Thread-17888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:54.615 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:22:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:22:55.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:22:55.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:22:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 22, 50), 20.28, 25.78, 0.0, 27.68, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:22:56.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:22:50
2025-12-25T20:22:56.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:22:56.832 [DEBUG] [Thread-17889] [transport.py] [_log()] starting thread (client mode): 0xb6bb6890
2025-12-25T20:22:56.832 [DEBUG] [Thread-17889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:22:56.853 [DEBUG] [Thread-17889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:22:56.853 [INFO] [Thread-17889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:56.856 [DEBUG] [Thread-17889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] client lang: <none>
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] server lang: <none>
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] kex follows: False
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] Compression: none
2025-12-25T20:22:56.857 [DEBUG] [Thread-17889] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:22:56.873 [DEBUG] [Thread-17889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:22:56.874 [DEBUG] [Thread-17889] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:22:56.875 [DEBUG] [Thread-17889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:22:56.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:22:56.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:22:56.877 [DEBUG] [Thread-17889] [transport.py] [_log()] userauth is OK
2025-12-25T20:22:56.877 [DEBUG] [Thread-17889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:22:56.877 [DEBUG] [Thread-17889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:22:56.878 [DEBUG] [Thread-17889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:22:56.878 [DEBUG] [Thread-17889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:22:56.902 [INFO] [Thread-17889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:22:56.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:22:57.721 [DEBUG] [Thread-17889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:22:57.721 [DEBUG] [Thread-17889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:22:57.721 [DEBUG] [Thread-17889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:22:57.762 [DEBUG] [Thread-17889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:22:57.762 [DEBUG] [Thread-17889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:22:57.766 [DEBUG] [Thread-17889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:22:57.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:22:57.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:22:57.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:22:57.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:22:57.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:22:57.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:22:57.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:22:57.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:22:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:22:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.765337 -999.00  +20.70  23.41     31   +3.20 1 1 1 1 1    67    0 17.02 -16.07 ----- 24.8 23.4 291.4 32.1 21.1 -24.6 21.0 -24.0 20.8 -22.2 21.0 -23.3
2025-12-25T20:22:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:22:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:22:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.765337
2025-12-25T20:22:57.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:22:57.792 [DEBUG] [Thread-17889] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:22:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:22:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:22:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:22:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:22:57.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:22:50', tmtdew=20.28, humidity=25.78, cloud=0.0, wind=27.68, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:22:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:22:57.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-25T20:22:57.889 [DEBUG] [Thread-17892] [transport.py] [_log()] starting thread (client mode): 0xb6b75ea0
2025-12-25T20:22:57.890 [DEBUG] [Thread-17892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:22:57.904 [DEBUG] [Thread-17892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:22:57.905 [INFO] [Thread-17892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:22:57.912 [DEBUG] [Thread-17892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:22:57.912 [DEBUG] [Thread-17892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:22:57.912 [DEBUG] [Thread-17892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] client lang: <none>
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] server lang: <none>
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] kex follows: False
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] Compression: none
2025-12-25T20:22:57.913 [DEBUG] [Thread-17892] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:22:57.973 [DEBUG] [Thread-17892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:22:57.974 [DEBUG] [Thread-17892] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:22:57.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:22:57.975 [DEBUG] [Thread-17892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:22:57.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:22:58.029 [DEBUG] [Thread-17892] [transport.py] [_log()] userauth is OK
2025-12-25T20:22:58.030 [DEBUG] [Thread-17892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:22:58.030 [DEBUG] [Thread-17892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:22:58.030 [DEBUG] [Thread-17892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:22:58.030 [DEBUG] [Thread-17892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:22:58.049 [INFO] [Thread-17892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:22:58.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:22:58.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:22:58.886 [DEBUG] [Thread-17892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:22:58.886 [DEBUG] [Thread-17892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:22:58.934 [DEBUG] [Thread-17892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:22:58.935 [DEBUG] [Thread-17892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:22:58.944 [DEBUG] [Thread-17892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:22:58.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:22:58.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:22:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:22:58.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:22:58.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:22:58.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:22:58.982 [DEBUG] [Thread-17892] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:22:59.674 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:06.481 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:06.483 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:06.560 [DEBUG] [Thread-17894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:07.052 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:14.448 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:21.605 [DEBUG] [Thread-17895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:23.700 [DEBUG] [Thread-17896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:29.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:23:29.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:23:29.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-25T20:23:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 23, 22), 20.29, 25.77, 0.0, 28.18, 20.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:23:29.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:23:22
2025-12-25T20:23:29.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:23:29.990 [DEBUG] [Thread-17897] [transport.py] [_log()] starting thread (client mode): 0xb95b2d10
2025-12-25T20:23:29.990 [DEBUG] [Thread-17897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:23:30.011 [DEBUG] [Thread-17897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:23:30.011 [INFO] [Thread-17897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] client lang: <none>
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] server lang: <none>
2025-12-25T20:23:30.014 [DEBUG] [Thread-17897] [transport.py] [_log()] kex follows: False
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] Compression: none
2025-12-25T20:23:30.015 [DEBUG] [Thread-17897] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:23:30.033 [DEBUG] [Thread-17897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:23:30.034 [DEBUG] [Thread-17897] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:23:30.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:23:30.035 [DEBUG] [Thread-17897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:23:30.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:23:30.037 [DEBUG] [Thread-17897] [transport.py] [_log()] userauth is OK
2025-12-25T20:23:30.037 [DEBUG] [Thread-17897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:23:30.037 [DEBUG] [Thread-17897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:23:30.037 [DEBUG] [Thread-17897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:23:30.037 [DEBUG] [Thread-17897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:23:30.072 [INFO] [Thread-17897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:23:30.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:23:30.700 [DEBUG] [Thread-17897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:23:30.700 [DEBUG] [Thread-17897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:23:30.701 [DEBUG] [Thread-17897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:23:30.741 [DEBUG] [Thread-17897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:23:30.741 [DEBUG] [Thread-17897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:23:30.745 [DEBUG] [Thread-17897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:23:30.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:23:30.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:23:30.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:23:30.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:23:30.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:23:30.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:23:30.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:23:30.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:23:30.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:23:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.765685 -999.00  +20.70  27.65     31   +3.30 1 1 1 1 1    62    0 17.07 -14.67 ----- 27.1 27.6 290.6 32.0 21.1 -24.4 21.0 -23.9 20.7 -22.2 20.9 -23.5
2025-12-25T20:23:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:23:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:23:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.765685
2025-12-25T20:23:30.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:23:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:23:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:23:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:23:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:23:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:23:22', tmtdew=20.29, humidity=25.77, cloud=0.0, wind=28.18, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:22:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:23:30.772 [DEBUG] [Thread-17897] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:23:30.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-25T20:23:30.868 [DEBUG] [Thread-17900] [transport.py] [_log()] starting thread (client mode): 0xb95598d0
2025-12-25T20:23:30.868 [DEBUG] [Thread-17900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:23:30.882 [DEBUG] [Thread-17900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:23:30.883 [INFO] [Thread-17900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:23:30.890 [DEBUG] [Thread-17900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:23:30.890 [DEBUG] [Thread-17900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:23:30.890 [DEBUG] [Thread-17900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:23:30.890 [DEBUG] [Thread-17900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:23:30.890 [DEBUG] [Thread-17900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:23:30.890 [DEBUG] [Thread-17900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] client lang: <none>
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] server lang: <none>
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] kex follows: False
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:23:30.891 [DEBUG] [Thread-17900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:23:30.892 [DEBUG] [Thread-17900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:23:30.892 [DEBUG] [Thread-17900] [transport.py] [_log()] Compression: none
2025-12-25T20:23:30.892 [DEBUG] [Thread-17900] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:23:30.952 [DEBUG] [Thread-17900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:23:30.953 [DEBUG] [Thread-17900] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:23:30.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:23:30.955 [DEBUG] [Thread-17900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:23:30.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:23:31.011 [DEBUG] [Thread-17900] [transport.py] [_log()] userauth is OK
2025-12-25T20:23:31.011 [DEBUG] [Thread-17900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:23:31.012 [DEBUG] [Thread-17900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:23:31.012 [DEBUG] [Thread-17900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:23:31.012 [DEBUG] [Thread-17900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:23:31.031 [INFO] [Thread-17900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:23:31.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-25T20:23:31.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:23:31.876 [DEBUG] [Thread-17900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:23:31.876 [DEBUG] [Thread-17900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:23:31.924 [DEBUG] [Thread-17900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:23:31.924 [DEBUG] [Thread-17900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:23:31.933 [DEBUG] [Thread-17900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:23:31.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:23:31.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:23:31.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-25T20:23:31.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:23:31.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:23:31.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:23:31.970 [DEBUG] [Thread-17900] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:23:36.638 [DEBUG] [Thread-17902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:23:51.687 [DEBUG] [Thread-17903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:01.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:24:01.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:24:01.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-25T20:24:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 23, 54), 20.03, 26.28, 0.0, 29.77, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:24:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:23:54
2025-12-25T20:24:02.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:24:02.955 [DEBUG] [Thread-17904] [transport.py] [_log()] starting thread (client mode): 0xb6b63fd0
2025-12-25T20:24:02.955 [DEBUG] [Thread-17904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:24:02.980 [DEBUG] [Thread-17904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:24:02.980 [INFO] [Thread-17904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] client lang: <none>
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] server lang: <none>
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] kex follows: False
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:24:02.982 [DEBUG] [Thread-17904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:24:02.983 [DEBUG] [Thread-17904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:24:02.983 [DEBUG] [Thread-17904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:24:02.983 [DEBUG] [Thread-17904] [transport.py] [_log()] Compression: none
2025-12-25T20:24:02.983 [DEBUG] [Thread-17904] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:24:02.993 [DEBUG] [Thread-17904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:24:02.993 [DEBUG] [Thread-17904] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:24:02.994 [DEBUG] [Thread-17904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:24:02.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:24:02.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:24:02.996 [DEBUG] [Thread-17904] [transport.py] [_log()] userauth is OK
2025-12-25T20:24:02.996 [DEBUG] [Thread-17904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:24:02.996 [DEBUG] [Thread-17904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:24:02.996 [DEBUG] [Thread-17904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:24:02.996 [DEBUG] [Thread-17904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:24:03.020 [INFO] [Thread-17904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:24:03.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:24:03.801 [DEBUG] [Thread-17904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:24:03.801 [DEBUG] [Thread-17904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:24:03.802 [DEBUG] [Thread-17904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:24:03.842 [DEBUG] [Thread-17904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:24:03.842 [DEBUG] [Thread-17904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:24:03.846 [DEBUG] [Thread-17904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:24:03.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:24:03.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:24:03.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:24:03.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:24:03.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:24:03.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:24:03.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:24:03.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:24:03.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:24:03.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.766032 -999.00  +20.70  29.17     31   +3.30 1 1 1 1 1    57    0 17.25 -15.02 ----- 27.2 29.2 291.8 35.7 21.0 -24.5 20.9 -23.9 20.7 -22.3 20.9 -23.3
2025-12-25T20:24:03.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:24:03.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:24:03.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.766032
2025-12-25T20:24:03.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:24:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:24:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:24:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:24:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:24:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:23:54', tmtdew=20.03, humidity=26.28, cloud=0.0, wind=29.77, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:23:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:24:03.871 [DEBUG] [Thread-17904] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:24:03.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-25T20:24:03.963 [DEBUG] [Thread-17907] [transport.py] [_log()] starting thread (client mode): 0xb6b7f520
2025-12-25T20:24:03.963 [DEBUG] [Thread-17907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:24:03.978 [DEBUG] [Thread-17907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:24:03.978 [INFO] [Thread-17907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:24:03.985 [DEBUG] [Thread-17907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:24:03.986 [DEBUG] [Thread-17907] [transport.py] [_log()] client lang: <none>
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] server lang: <none>
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] kex follows: False
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:24:03.987 [DEBUG] [Thread-17907] [transport.py] [_log()] Compression: none
2025-12-25T20:24:03.988 [DEBUG] [Thread-17907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:24:04.053 [DEBUG] [Thread-17907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:24:04.054 [DEBUG] [Thread-17907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:24:04.055 [DEBUG] [Thread-17907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:24:04.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:24:04.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:24:04.110 [DEBUG] [Thread-17907] [transport.py] [_log()] userauth is OK
2025-12-25T20:24:04.110 [DEBUG] [Thread-17907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:24:04.110 [DEBUG] [Thread-17907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:24:04.110 [DEBUG] [Thread-17907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:24:04.110 [DEBUG] [Thread-17907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:24:04.135 [INFO] [Thread-17907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:24:04.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-25T20:24:04.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:24:04.990 [DEBUG] [Thread-17907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:24:04.991 [DEBUG] [Thread-17907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:24:05.039 [DEBUG] [Thread-17907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:24:05.039 [DEBUG] [Thread-17907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:24:05.048 [DEBUG] [Thread-17907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:24:05.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:24:05.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-25T20:24:05.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-25T20:24:05.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:24:05.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:24:05.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:24:05.085 [DEBUG] [Thread-17907] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:24:06.717 [DEBUG] [Thread-17909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:12.644 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:12.645 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:21.771 [DEBUG] [Thread-17910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:23.759 [DEBUG] [Thread-17911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:35.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:24:35.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:24:35.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-25T20:24:35.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 24, 26), 19.99, 26.35, 0.0, 32.38, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:24:35.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:24:26
2025-12-25T20:24:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:24:36.100 [DEBUG] [Thread-17912] [transport.py] [_log()] starting thread (client mode): 0xb955abf0
2025-12-25T20:24:36.100 [DEBUG] [Thread-17912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:24:36.120 [DEBUG] [Thread-17912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:24:36.120 [INFO] [Thread-17912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:36.123 [DEBUG] [Thread-17912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] client lang: <none>
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] server lang: <none>
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] kex follows: False
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] Compression: none
2025-12-25T20:24:36.124 [DEBUG] [Thread-17912] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:24:36.139 [DEBUG] [Thread-17912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:24:36.140 [DEBUG] [Thread-17912] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:24:36.140 [DEBUG] [Thread-17912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:24:36.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:24:36.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:24:36.141 [DEBUG] [Thread-17912] [transport.py] [_log()] userauth is OK
2025-12-25T20:24:36.141 [DEBUG] [Thread-17912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:24:36.141 [DEBUG] [Thread-17912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:24:36.141 [DEBUG] [Thread-17912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:24:36.141 [DEBUG] [Thread-17912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:24:36.149 [INFO] [Thread-17912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:24:36.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:24:36.788 [DEBUG] [Thread-17912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:24:36.789 [DEBUG] [Thread-17912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:24:36.789 [DEBUG] [Thread-17912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:24:36.797 [DEBUG] [Thread-17914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:36.830 [DEBUG] [Thread-17912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:24:36.830 [DEBUG] [Thread-17912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:24:36.832 [DEBUG] [Thread-17912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:24:36.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:24:36.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:24:36.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:24:36.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:24:36.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:24:36.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:24:36.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.766726 -999.00  +20.00  26.68     49   +9.00 1 1 1 1 1    48    0 16.22 -36.73 ----- 21.6 26.7 267.8 35.6 20.9 -24.9 20.9 -24.1 20.5 -22.6 20.8 -24.1
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.766726
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:24:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:24:26', tmtdew=19.99, humidity=26.35, cloud=0.0, wind=32.38, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:24:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:24:36.851 [DEBUG] [Thread-17912] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:24:36.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-25T20:24:36.933 [DEBUG] [Thread-17916] [transport.py] [_log()] starting thread (client mode): 0xb6bb6a10
2025-12-25T20:24:36.933 [DEBUG] [Thread-17916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:24:36.948 [DEBUG] [Thread-17916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:24:36.948 [INFO] [Thread-17916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:24:36.955 [DEBUG] [Thread-17916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:24:36.955 [DEBUG] [Thread-17916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:24:36.955 [DEBUG] [Thread-17916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:24:36.955 [DEBUG] [Thread-17916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] client lang: <none>
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] server lang: <none>
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] kex follows: False
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] Compression: none
2025-12-25T20:24:36.956 [DEBUG] [Thread-17916] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:24:37.010 [DEBUG] [Thread-17916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:24:37.010 [DEBUG] [Thread-17916] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:24:37.010 [DEBUG] [Thread-17916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:24:37.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:24:37.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:24:37.068 [DEBUG] [Thread-17916] [transport.py] [_log()] userauth is OK
2025-12-25T20:24:37.068 [DEBUG] [Thread-17916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:24:37.068 [DEBUG] [Thread-17916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:24:37.068 [DEBUG] [Thread-17916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:24:37.068 [DEBUG] [Thread-17916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:24:37.082 [INFO] [Thread-17916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:24:37.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-25T20:24:37.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:24:37.922 [DEBUG] [Thread-17916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:24:37.922 [DEBUG] [Thread-17916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:24:37.970 [DEBUG] [Thread-17916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:24:37.970 [DEBUG] [Thread-17916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:24:37.979 [DEBUG] [Thread-17916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:24:37.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:24:37.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-25T20:24:37.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-25T20:24:38.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:24:38.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:24:38.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:24:38.017 [DEBUG] [Thread-17916] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:24:43.926 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:47.000 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:24:51.830 [DEBUG] [Thread-17918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:06.879 [DEBUG] [Thread-17919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:25:08.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:25:08.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:25:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 24, 58), 15.21, 37.86, 0.0, 23.38, 20.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:25:08.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:24:58
2025-12-25T20:25:08.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:25:09.005 [DEBUG] [Thread-17920] [transport.py] [_log()] starting thread (client mode): 0xb6bf7490
2025-12-25T20:25:09.006 [DEBUG] [Thread-17920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:25:09.018 [DEBUG] [Thread-17920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:25:09.018 [INFO] [Thread-17920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] client lang: <none>
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] server lang: <none>
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] kex follows: False
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] Compression: none
2025-12-25T20:25:09.020 [DEBUG] [Thread-17920] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:25:09.032 [DEBUG] [Thread-17920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:25:09.033 [DEBUG] [Thread-17920] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:25:09.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:25:09.033 [DEBUG] [Thread-17920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:25:09.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:25:09.034 [DEBUG] [Thread-17920] [transport.py] [_log()] userauth is OK
2025-12-25T20:25:09.034 [DEBUG] [Thread-17920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:25:09.035 [DEBUG] [Thread-17920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:25:09.035 [DEBUG] [Thread-17920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:25:09.035 [DEBUG] [Thread-17920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:25:09.067 [INFO] [Thread-17920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:25:09.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:25:10.340 [DEBUG] [Thread-17920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:25:10.340 [DEBUG] [Thread-17920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:25:10.340 [DEBUG] [Thread-17920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:25:10.381 [DEBUG] [Thread-17920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:25:10.381 [DEBUG] [Thread-17920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:25:10.383 [DEBUG] [Thread-17920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:25:10.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:25:10.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:25:10.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:25:10.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:25:10.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:25:10.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:25:10.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.767074 -999.00  +19.60  13.70     53   +9.90 1 1 1 1 1    44    0 15.29 -65.68 ----- 16.9 13.7 269.4 23.9 20.8 -24.5 20.8 -24.0 20.4 -22.1 20.6 -23.5
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.767074
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:24:58', tmtdew=15.21, humidity=37.86, cloud=0.0, wind=23.38, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:24:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:25:10.406 [DEBUG] [Thread-17920] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:25:10.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:25:10.490 [DEBUG] [Thread-17923] [transport.py] [_log()] starting thread (client mode): 0xb6bb6740
2025-12-25T20:25:10.490 [DEBUG] [Thread-17923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:25:10.505 [DEBUG] [Thread-17923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:25:10.505 [INFO] [Thread-17923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:25:10.512 [DEBUG] [Thread-17923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:25:10.512 [DEBUG] [Thread-17923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] client lang: <none>
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] server lang: <none>
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] kex follows: False
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] Compression: none
2025-12-25T20:25:10.513 [DEBUG] [Thread-17923] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:25:10.569 [DEBUG] [Thread-17923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:25:10.570 [DEBUG] [Thread-17923] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:25:10.570 [DEBUG] [Thread-17923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:25:10.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:25:10.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:25:10.627 [DEBUG] [Thread-17923] [transport.py] [_log()] userauth is OK
2025-12-25T20:25:10.627 [DEBUG] [Thread-17923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:25:10.627 [DEBUG] [Thread-17923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:25:10.627 [DEBUG] [Thread-17923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:25:10.627 [DEBUG] [Thread-17923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:25:10.641 [INFO] [Thread-17923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:25:10.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-25T20:25:10.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:25:11.500 [DEBUG] [Thread-17923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:25:11.500 [DEBUG] [Thread-17923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:25:11.548 [DEBUG] [Thread-17923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:25:11.548 [DEBUG] [Thread-17923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:25:11.557 [DEBUG] [Thread-17923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:25:11.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:25:11.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-25T20:25:11.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-25T20:25:11.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:25:11.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:25:11.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:25:11.596 [DEBUG] [Thread-17923] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:25:15.508 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:21.339 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:21.340 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:21.909 [DEBUG] [Thread-17925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:23.827 [DEBUG] [Thread-17926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:36.961 [DEBUG] [Thread-17927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:41.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:25:41.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:25:41.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-25T20:25:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 25, 30), 12.02, 45.81, 0.0, 19.59, 19.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:25:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:25:30
2025-12-25T20:25:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:25:42.601 [DEBUG] [Thread-17928] [transport.py] [_log()] starting thread (client mode): 0xb6b21630
2025-12-25T20:25:42.601 [DEBUG] [Thread-17928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:25:42.621 [DEBUG] [Thread-17928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:25:42.622 [INFO] [Thread-17928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] client lang: <none>
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] server lang: <none>
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] kex follows: False
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] Compression: none
2025-12-25T20:25:42.625 [DEBUG] [Thread-17928] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:25:42.643 [DEBUG] [Thread-17928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:25:42.643 [DEBUG] [Thread-17928] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:25:42.644 [DEBUG] [Thread-17928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:25:42.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:25:42.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:25:42.646 [DEBUG] [Thread-17928] [transport.py] [_log()] userauth is OK
2025-12-25T20:25:42.646 [DEBUG] [Thread-17928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:25:42.646 [DEBUG] [Thread-17928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:25:42.646 [DEBUG] [Thread-17928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:25:42.646 [DEBUG] [Thread-17928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:25:42.664 [INFO] [Thread-17928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:25:42.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:25:43.087 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:25:43.330 [DEBUG] [Thread-17928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:25:43.330 [DEBUG] [Thread-17928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:25:43.330 [DEBUG] [Thread-17928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:25:43.371 [DEBUG] [Thread-17928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:25:43.371 [DEBUG] [Thread-17928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:25:43.375 [DEBUG] [Thread-17928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:25:43.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:25:43.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:25:43.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:25:43.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:25:43.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:25:43.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:25:43.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:25:43.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:25:43.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:25:43.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.767420 -999.00  +19.40  14.19     55  +10.20 1 2 1 1 1    41    0 13.99 -103.64 ----- 15.7 14.2 267.8 17.2 20.7 -24.2 20.7 -23.6 20.3 -22.1 20.6 -23.3
2025-12-25T20:25:43.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:25:43.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:25:43.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.767420
2025-12-25T20:25:43.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:25:43.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:25:43.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:25:43.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:25:43.403 [DEBUG] [Thread-17928] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:25:43.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:25:43.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:25:30', tmtdew=12.02, humidity=45.81, cloud=0.0, wind=19.59, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:25:05.088', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:25:43.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-25T20:25:43.496 [DEBUG] [Thread-17931] [transport.py] [_log()] starting thread (client mode): 0xb6b77970
2025-12-25T20:25:43.496 [DEBUG] [Thread-17931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:25:43.518 [DEBUG] [Thread-17931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:25:43.518 [INFO] [Thread-17931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] client lang: <none>
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] server lang: <none>
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] kex follows: False
2025-12-25T20:25:43.526 [DEBUG] [Thread-17931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:25:43.527 [DEBUG] [Thread-17931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:25:43.527 [DEBUG] [Thread-17931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:25:43.527 [DEBUG] [Thread-17931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:25:43.527 [DEBUG] [Thread-17931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:25:43.527 [DEBUG] [Thread-17931] [transport.py] [_log()] Compression: none
2025-12-25T20:25:43.527 [DEBUG] [Thread-17931] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:25:43.586 [DEBUG] [Thread-17931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:25:43.587 [DEBUG] [Thread-17931] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:25:43.588 [DEBUG] [Thread-17931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:25:43.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:25:43.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:25:43.642 [DEBUG] [Thread-17931] [transport.py] [_log()] userauth is OK
2025-12-25T20:25:43.642 [DEBUG] [Thread-17931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:25:43.642 [DEBUG] [Thread-17931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:25:43.642 [DEBUG] [Thread-17931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:25:43.643 [DEBUG] [Thread-17931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:25:43.662 [INFO] [Thread-17931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:25:43.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-25T20:25:43.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:25:44.482 [DEBUG] [Thread-17931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:25:44.482 [DEBUG] [Thread-17931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:25:44.530 [DEBUG] [Thread-17931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:25:44.530 [DEBUG] [Thread-17931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:25:44.540 [DEBUG] [Thread-17931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:25:44.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:25:44.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:25:44.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:25:44.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:25:44.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:25:44.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:25:44.576 [DEBUG] [Thread-17931] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:25:51.993 [DEBUG] [Thread-17933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:07.034 [DEBUG] [Thread-17934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:14.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:26:14.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:26:14.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:26:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 26, 2), 11.62, 47.02, 0.0, 20.52, 19.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:26:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:26:02
2025-12-25T20:26:15.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:26:15.574 [DEBUG] [Thread-17935] [transport.py] [_log()] starting thread (client mode): 0xb9559120
2025-12-25T20:26:15.574 [DEBUG] [Thread-17935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:26:15.593 [DEBUG] [Thread-17935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:26:15.594 [INFO] [Thread-17935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] client lang: <none>
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] server lang: <none>
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] kex follows: False
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:26:15.597 [DEBUG] [Thread-17935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:26:15.598 [DEBUG] [Thread-17935] [transport.py] [_log()] Compression: none
2025-12-25T20:26:15.598 [DEBUG] [Thread-17935] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:26:15.612 [DEBUG] [Thread-17935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:26:15.613 [DEBUG] [Thread-17935] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:26:15.613 [DEBUG] [Thread-17935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:26:15.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:26:15.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:26:15.615 [DEBUG] [Thread-17935] [transport.py] [_log()] userauth is OK
2025-12-25T20:26:15.615 [DEBUG] [Thread-17935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:26:15.615 [DEBUG] [Thread-17935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:26:15.615 [DEBUG] [Thread-17935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:26:15.615 [DEBUG] [Thread-17935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:26:15.638 [INFO] [Thread-17935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:26:15.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:26:16.454 [DEBUG] [Thread-17935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:26:16.454 [DEBUG] [Thread-17935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:26:16.455 [DEBUG] [Thread-17935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:26:16.495 [DEBUG] [Thread-17935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:26:16.495 [DEBUG] [Thread-17935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:26:16.499 [DEBUG] [Thread-17935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:26:16.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:26:16.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:26:16.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:26:16.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:26:16.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:26:16.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:26:16.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:26:16.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:26:16.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:26:16.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.767768 -999.00  +19.20  17.11     57  +10.60 1 2 1 1 1    37    0 12.63 -137.99 ----- 11.9 17.1 267.8 20.4 20.6 -24.1 20.7 -23.3 20.2 -21.9 20.4 -23.2
2025-12-25T20:26:16.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:26:16.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:26:16.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.767768
2025-12-25T20:26:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:26:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:26:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:26:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:26:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:26:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:26:02', tmtdew=11.62, humidity=47.02, cloud=0.0, wind=20.52, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:25:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:26:16.526 [DEBUG] [Thread-17935] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:26:16.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:26:16.622 [DEBUG] [Thread-17938] [transport.py] [_log()] starting thread (client mode): 0xb6b7f520
2025-12-25T20:26:16.622 [DEBUG] [Thread-17938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:26:16.637 [DEBUG] [Thread-17938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:26:16.637 [INFO] [Thread-17938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:26:16.645 [DEBUG] [Thread-17938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:26:16.645 [DEBUG] [Thread-17938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:26:16.645 [DEBUG] [Thread-17938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:26:16.645 [DEBUG] [Thread-17938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:16.645 [DEBUG] [Thread-17938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] client lang: <none>
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] server lang: <none>
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] kex follows: False
2025-12-25T20:26:16.646 [DEBUG] [Thread-17938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:26:16.647 [DEBUG] [Thread-17938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:26:16.647 [DEBUG] [Thread-17938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:26:16.647 [DEBUG] [Thread-17938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:26:16.647 [DEBUG] [Thread-17938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:26:16.647 [DEBUG] [Thread-17938] [transport.py] [_log()] Compression: none
2025-12-25T20:26:16.647 [DEBUG] [Thread-17938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:26:16.706 [DEBUG] [Thread-17938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:26:16.706 [DEBUG] [Thread-17938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:26:16.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:26:16.707 [DEBUG] [Thread-17938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:26:16.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:26:16.765 [DEBUG] [Thread-17938] [transport.py] [_log()] userauth is OK
2025-12-25T20:26:16.765 [DEBUG] [Thread-17938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:26:16.765 [DEBUG] [Thread-17938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:26:16.765 [DEBUG] [Thread-17938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:26:16.765 [DEBUG] [Thread-17938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:26:16.785 [INFO] [Thread-17938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:26:16.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-25T20:26:16.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:26:17.602 [DEBUG] [Thread-17938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:26:17.602 [DEBUG] [Thread-17938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:26:17.650 [DEBUG] [Thread-17938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:26:17.650 [DEBUG] [Thread-17938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:26:17.660 [DEBUG] [Thread-17938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:26:17.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:26:17.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-25T20:26:17.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:26:17.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:26:17.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:26:17.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:26:17.696 [DEBUG] [Thread-17938] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:26:22.069 [DEBUG] [Thread-17940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:23.884 [DEBUG] [Thread-17941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:27.632 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:27.633 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:37.111 [DEBUG] [Thread-17942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:26:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:26:47.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:26:47.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-25T20:26:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 26, 34), 9.55, 53.67, 0.0, 14.2, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:26:48.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:26:34
2025-12-25T20:26:48.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:26:48.697 [DEBUG] [Thread-17943] [transport.py] [_log()] starting thread (client mode): 0xb955a5c0
2025-12-25T20:26:48.698 [DEBUG] [Thread-17943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:26:48.717 [DEBUG] [Thread-17943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:26:48.717 [INFO] [Thread-17943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:26:48.720 [DEBUG] [Thread-17943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] client lang: <none>
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] server lang: <none>
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] kex follows: False
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] Compression: none
2025-12-25T20:26:48.721 [DEBUG] [Thread-17943] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:26:48.738 [DEBUG] [Thread-17943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:26:48.738 [DEBUG] [Thread-17943] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:26:48.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:26:48.739 [DEBUG] [Thread-17943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:26:48.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:26:48.741 [DEBUG] [Thread-17943] [transport.py] [_log()] userauth is OK
2025-12-25T20:26:48.741 [DEBUG] [Thread-17943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:26:48.742 [DEBUG] [Thread-17943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:26:48.742 [DEBUG] [Thread-17943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:26:48.742 [DEBUG] [Thread-17943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:26:48.760 [INFO] [Thread-17943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:26:48.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:26:49.410 [DEBUG] [Thread-17943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:26:49.411 [DEBUG] [Thread-17943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:26:49.411 [DEBUG] [Thread-17943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:26:49.452 [DEBUG] [Thread-17943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:26:49.452 [DEBUG] [Thread-17943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:26:49.455 [DEBUG] [Thread-17943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:26:49.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:26:49.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:26:49.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:26:49.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:26:49.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:26:49.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:26:49.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:26:49.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:26:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:26:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.768115 -999.00  +19.00  15.95     59  +11.00 1 2 1 1 1    34    0 11.81 -162.09 ----- 16.5 15.9 263.6 20.9 20.5 -24.4 20.6 -23.3 20.1 -22.3 20.3 -23.3
2025-12-25T20:26:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:26:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:26:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.768115
2025-12-25T20:26:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:26:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:26:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:26:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:26:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:26:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:26:34', tmtdew=9.55, humidity=53.67, cloud=0.0, wind=14.2, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:26:05.136', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:26:49.480 [DEBUG] [Thread-17943] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:26:49.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-25T20:26:49.573 [DEBUG] [Thread-17946] [transport.py] [_log()] starting thread (client mode): 0xb6bb7d30
2025-12-25T20:26:49.574 [DEBUG] [Thread-17946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:26:49.588 [DEBUG] [Thread-17946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:26:49.588 [INFO] [Thread-17946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:26:49.595 [DEBUG] [Thread-17946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] client lang: <none>
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] server lang: <none>
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] kex follows: False
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] Compression: none
2025-12-25T20:26:49.596 [DEBUG] [Thread-17946] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:26:49.655 [DEBUG] [Thread-17946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:26:49.656 [DEBUG] [Thread-17946] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:26:49.656 [DEBUG] [Thread-17946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:26:49.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:26:49.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:26:49.711 [DEBUG] [Thread-17946] [transport.py] [_log()] userauth is OK
2025-12-25T20:26:49.712 [DEBUG] [Thread-17946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:26:49.712 [DEBUG] [Thread-17946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:26:49.712 [DEBUG] [Thread-17946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:26:49.712 [DEBUG] [Thread-17946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:26:49.731 [INFO] [Thread-17946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:26:49.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-25T20:26:49.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:26:50.647 [DEBUG] [Thread-17946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:26:50.647 [DEBUG] [Thread-17946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:26:50.695 [DEBUG] [Thread-17946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:26:50.695 [DEBUG] [Thread-17946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:26:50.704 [DEBUG] [Thread-17946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:26:50.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:26:50.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-25T20:26:50.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:26:50.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:26:50.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:26:50.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:26:50.740 [DEBUG] [Thread-17946] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:26:52.143 [DEBUG] [Thread-17948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:07.197 [DEBUG] [Thread-17949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:20.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:27:20.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:27:20.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-25T20:27:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 27, 6), 9.16, 54.99, 0.0, 12.46, 18.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:27:21.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:27:06
2025-12-25T20:27:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:27:21.717 [DEBUG] [Thread-17950] [transport.py] [_log()] starting thread (client mode): 0xb6baa080
2025-12-25T20:27:21.717 [DEBUG] [Thread-17950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:27:21.738 [DEBUG] [Thread-17950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:27:21.738 [INFO] [Thread-17950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] client lang: <none>
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] server lang: <none>
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] kex follows: False
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:27:21.741 [DEBUG] [Thread-17950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:27:21.742 [DEBUG] [Thread-17950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:27:21.742 [DEBUG] [Thread-17950] [transport.py] [_log()] Compression: none
2025-12-25T20:27:21.742 [DEBUG] [Thread-17950] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:27:21.757 [DEBUG] [Thread-17950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:27:21.757 [DEBUG] [Thread-17950] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:27:21.757 [DEBUG] [Thread-17950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:27:21.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:27:21.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:27:21.758 [DEBUG] [Thread-17950] [transport.py] [_log()] userauth is OK
2025-12-25T20:27:21.758 [DEBUG] [Thread-17950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:27:21.758 [DEBUG] [Thread-17950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:27:21.758 [DEBUG] [Thread-17950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:27:21.758 [DEBUG] [Thread-17950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:27:21.774 [INFO] [Thread-17950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:27:21.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:27:22.231 [DEBUG] [Thread-17952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:22.589 [DEBUG] [Thread-17950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:27:22.589 [DEBUG] [Thread-17950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:27:22.589 [DEBUG] [Thread-17950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:27:22.630 [DEBUG] [Thread-17950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:27:22.630 [DEBUG] [Thread-17950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:27:22.633 [DEBUG] [Thread-17950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:27:22.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:27:22.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:27:22.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:27:22.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:27:22.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:27:22.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:27:22.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:27:22.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:27:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:27:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.768462 -999.00  +18.90  13.03     60  +11.10 1 2 1 1 1    32    0 10.10 -212.75 ----- 8.4 13.0 245.4 16.0 20.4 -24.1 20.5 -23.1 20.1 -21.6 20.2 -23.2
2025-12-25T20:27:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:27:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:27:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.768462
2025-12-25T20:27:22.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:27:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:27:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:27:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:27:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:27:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:27:06', tmtdew=9.16, humidity=54.99, cloud=0.0, wind=12.46, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:26:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:27:22.662 [DEBUG] [Thread-17950] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:27:22.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-25T20:27:22.755 [DEBUG] [Thread-17954] [transport.py] [_log()] starting thread (client mode): 0xb6b75c60
2025-12-25T20:27:22.755 [DEBUG] [Thread-17954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:27:22.769 [DEBUG] [Thread-17954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:27:22.769 [INFO] [Thread-17954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:27:22.777 [DEBUG] [Thread-17954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:27:22.777 [DEBUG] [Thread-17954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] client lang: <none>
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] server lang: <none>
2025-12-25T20:27:22.778 [DEBUG] [Thread-17954] [transport.py] [_log()] kex follows: False
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] Compression: none
2025-12-25T20:27:22.779 [DEBUG] [Thread-17954] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:27:22.835 [DEBUG] [Thread-17954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:27:22.835 [DEBUG] [Thread-17954] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:27:22.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:27:22.836 [DEBUG] [Thread-17954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:27:22.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:27:22.890 [DEBUG] [Thread-17954] [transport.py] [_log()] userauth is OK
2025-12-25T20:27:22.891 [DEBUG] [Thread-17954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:27:22.891 [DEBUG] [Thread-17954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:27:22.891 [DEBUG] [Thread-17954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:27:22.891 [DEBUG] [Thread-17954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:27:22.910 [INFO] [Thread-17954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:27:22.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-25T20:27:22.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:27:23.755 [DEBUG] [Thread-17954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:27:23.756 [DEBUG] [Thread-17954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:27:23.804 [DEBUG] [Thread-17954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:27:23.804 [DEBUG] [Thread-17954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:27:23.813 [DEBUG] [Thread-17954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:27:23.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:27:23.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:27:23.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-25T20:27:23.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:27:23.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:27:23.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:27:23.856 [DEBUG] [Thread-17954] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:27:23.946 [DEBUG] [Thread-17956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:33.105 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:33.106 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:37.267 [DEBUG] [Thread-17957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:52.309 [DEBUG] [Thread-17958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:27:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:27:53.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:27: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-25T20:27:54.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 27, 38), 8.91, 56.18, 0.0, 13.3, 18.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:27:54.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:27:38
2025-12-25T20:27:54.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:27:54.855 [DEBUG] [Thread-17959] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f30
2025-12-25T20:27:54.855 [DEBUG] [Thread-17959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:27:54.875 [DEBUG] [Thread-17959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:27:54.875 [INFO] [Thread-17959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:27:54.878 [DEBUG] [Thread-17959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] client lang: <none>
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] server lang: <none>
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] kex follows: False
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] Compression: none
2025-12-25T20:27:54.879 [DEBUG] [Thread-17959] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:27:54.896 [DEBUG] [Thread-17959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:27:54.897 [DEBUG] [Thread-17959] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:27:54.897 [DEBUG] [Thread-17959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:27:54.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:27:54.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:27:54.941 [DEBUG] [Thread-17959] [transport.py] [_log()] userauth is OK
2025-12-25T20:27:54.941 [DEBUG] [Thread-17959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:27:54.942 [DEBUG] [Thread-17959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:27:54.942 [DEBUG] [Thread-17959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:27:54.942 [DEBUG] [Thread-17959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:27:54.973 [INFO] [Thread-17959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:27:54.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:27:55.594 [DEBUG] [Thread-17959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:27:55.595 [DEBUG] [Thread-17959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:27:55.595 [DEBUG] [Thread-17959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:27:55.636 [DEBUG] [Thread-17959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:27:55.636 [DEBUG] [Thread-17959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:27:55.639 [DEBUG] [Thread-17959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:27:55.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:27:55.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:27:55.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:27:55.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:27:55.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:27:55.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:27:55.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:27:55.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:27:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:27:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.768810 -999.00  +18.80   9.91     60  +11.00 1 2 1 1 1    29    0 9.22 -237.45 ----- 11.5 9.9 279.2 13.6 20.4 -23.6 20.4 -23.0 20.0 -21.5 20.2 -22.5
2025-12-25T20:27:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:27:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:27:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.768810
2025-12-25T20:27:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:27:55.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:27:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:27:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:27:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:27:55.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:27:38', tmtdew=8.91, humidity=56.18, cloud=0.0, wind=13.3, temperature=18.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:27:05.184', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:27:55.665 [DEBUG] [Thread-17959] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:27:55.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-25T20:27:55.759 [DEBUG] [Thread-17962] [transport.py] [_log()] starting thread (client mode): 0xb6bf7e20
2025-12-25T20:27:55.759 [DEBUG] [Thread-17962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:27:55.777 [DEBUG] [Thread-17962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:27:55.777 [INFO] [Thread-17962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:27:55.788 [DEBUG] [Thread-17962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] client lang: <none>
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] server lang: <none>
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] kex follows: False
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] Compression: none
2025-12-25T20:27:55.789 [DEBUG] [Thread-17962] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:27:55.849 [DEBUG] [Thread-17962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:27:55.849 [DEBUG] [Thread-17962] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:27:55.850 [DEBUG] [Thread-17962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:27:55.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:27:55.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:27:55.909 [DEBUG] [Thread-17962] [transport.py] [_log()] userauth is OK
2025-12-25T20:27:55.909 [DEBUG] [Thread-17962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:27:55.909 [DEBUG] [Thread-17962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:27:55.909 [DEBUG] [Thread-17962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:27:55.909 [DEBUG] [Thread-17962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:27:55.929 [INFO] [Thread-17962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:27:55.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-25T20:27:55.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:27:56.771 [DEBUG] [Thread-17962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:27:56.771 [DEBUG] [Thread-17962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:27:56.823 [DEBUG] [Thread-17962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:27:56.823 [DEBUG] [Thread-17962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:27:56.837 [DEBUG] [Thread-17962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:27:56.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:27:56.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:27:56.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-25T20:27:56.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:27:56.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:27:56.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:27:56.886 [DEBUG] [Thread-17962] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:28:07.342 [DEBUG] [Thread-17964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:28:22.394 [DEBUG] [Thread-17965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:28:24.013 [DEBUG] [Thread-17966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:28:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:28:26.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:28:26.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-25T20:28:27.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 28, 10), 8.89, 56.23, 0.0, 13.32, 18.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:28:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:28:10
2025-12-25T20:28:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:28:27.917 [DEBUG] [Thread-17967] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2025-12-25T20:28:27.917 [DEBUG] [Thread-17967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:28:27.938 [DEBUG] [Thread-17967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:28:27.938 [INFO] [Thread-17967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:28:27.941 [DEBUG] [Thread-17967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] client lang: <none>
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] server lang: <none>
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] kex follows: False
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] Compression: none
2025-12-25T20:28:27.942 [DEBUG] [Thread-17967] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:28:27.958 [DEBUG] [Thread-17967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:28:27.958 [DEBUG] [Thread-17967] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:28:27.959 [DEBUG] [Thread-17967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:28:27.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:28:27.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:28:27.959 [DEBUG] [Thread-17967] [transport.py] [_log()] userauth is OK
2025-12-25T20:28:27.959 [DEBUG] [Thread-17967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:28:27.959 [DEBUG] [Thread-17967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:28:27.959 [DEBUG] [Thread-17967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:28:27.959 [DEBUG] [Thread-17967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:28:27.976 [INFO] [Thread-17967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:28:27.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:28:28.790 [DEBUG] [Thread-17967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:28:28.790 [DEBUG] [Thread-17967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:28:28.790 [DEBUG] [Thread-17967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:28:28.830 [DEBUG] [Thread-17967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:28:28.830 [DEBUG] [Thread-17967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:28:28.833 [DEBUG] [Thread-17967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:28:28.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:28:28.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:28:28.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:28:28.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:28:28.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:28:28.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:28:28.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:28:28.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:28:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:28:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.769157 -999.00  +18.80   7.55     60  +11.10 1 2 1 1 1    27    0 8.05 -264.71 ----- 11.0 7.5 263.7 18.0 20.3 -23.7 20.4 -22.9 19.9 -21.3 20.1 -22.8
2025-12-25T20:28:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:28:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:28:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.769157
2025-12-25T20:28:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:28:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:28:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:28:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:28:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:28:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:28:10', tmtdew=8.89, humidity=56.23, cloud=0.0, wind=13.32, temperature=18.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:27:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:28:28.850 [DEBUG] [Thread-17967] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:28:28.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-25T20:28:28.937 [DEBUG] [Thread-17970] [transport.py] [_log()] starting thread (client mode): 0xb955a080
2025-12-25T20:28:28.937 [DEBUG] [Thread-17970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:28:28.952 [DEBUG] [Thread-17970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:28:28.952 [INFO] [Thread-17970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] client lang: <none>
2025-12-25T20:28:28.959 [DEBUG] [Thread-17970] [transport.py] [_log()] server lang: <none>
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] kex follows: False
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] Compression: none
2025-12-25T20:28:28.960 [DEBUG] [Thread-17970] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:28:29.014 [DEBUG] [Thread-17970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:28:29.015 [DEBUG] [Thread-17970] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:28:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:28:29.015 [DEBUG] [Thread-17970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:28:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:28:29.072 [DEBUG] [Thread-17970] [transport.py] [_log()] userauth is OK
2025-12-25T20:28:29.072 [DEBUG] [Thread-17970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:28:29.072 [DEBUG] [Thread-17970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:28:29.072 [DEBUG] [Thread-17970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:28:29.072 [DEBUG] [Thread-17970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:28:29.086 [INFO] [Thread-17970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:28: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-25T20:28:29.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:28:29.925 [DEBUG] [Thread-17970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:28:29.925 [DEBUG] [Thread-17970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:28:29.973 [DEBUG] [Thread-17970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:28:29.973 [DEBUG] [Thread-17970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:28:29.981 [DEBUG] [Thread-17970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:28:29.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:28: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-25T20:28: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-25T20:28:30.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:28:30.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:28:30.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:28:30.013 [DEBUG] [Thread-17970] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:28:37.427 [DEBUG] [Thread-17972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:28:42.159 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:28:42.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:28:52.478 [DEBUG] [Thread-17973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:00.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:29:00.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:29:00.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-25T20:29:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 28, 42), 8.61, 57.22, 0.0, 16.08, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:29:00.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:28:42
2025-12-25T20:29:00.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:29:01.009 [DEBUG] [Thread-17974] [transport.py] [_log()] starting thread (client mode): 0xb6bc0430
2025-12-25T20:29:01.009 [DEBUG] [Thread-17974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:29:01.028 [DEBUG] [Thread-17974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:29:01.028 [INFO] [Thread-17974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] client lang: <none>
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] server lang: <none>
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] kex follows: False
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:29:01.031 [DEBUG] [Thread-17974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:29:01.032 [DEBUG] [Thread-17974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:29:01.032 [DEBUG] [Thread-17974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:29:01.032 [DEBUG] [Thread-17974] [transport.py] [_log()] Compression: none
2025-12-25T20:29:01.032 [DEBUG] [Thread-17974] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:29:01.048 [DEBUG] [Thread-17974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:29:01.049 [DEBUG] [Thread-17974] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:29:01.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:29:01.050 [DEBUG] [Thread-17974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:29:01.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:29:01.052 [DEBUG] [Thread-17974] [transport.py] [_log()] userauth is OK
2025-12-25T20:29:01.052 [DEBUG] [Thread-17974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:29:01.052 [DEBUG] [Thread-17974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:29:01.052 [DEBUG] [Thread-17974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:29:01.052 [DEBUG] [Thread-17974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:29:01.088 [INFO] [Thread-17974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:29:01.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:29:01.754 [DEBUG] [Thread-17974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:29:01.755 [DEBUG] [Thread-17974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:29:01.755 [DEBUG] [Thread-17974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:29:01.805 [DEBUG] [Thread-17974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:29:01.805 [DEBUG] [Thread-17974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:29:01.807 [DEBUG] [Thread-17974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:29:01.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:29:01.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:29:01.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:29:01.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:29:01.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:29:01.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:29:01.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:29:01.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:29:01.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:29:01.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.769504 -999.00  +18.80   9.65     61  +11.30 1 2 1 1 1    24    0 7.13 -300.66 ----- 8.4 9.7 245.2 14.8 20.3 -23.6 20.3 -22.8 19.9 -21.4 20.1 -22.5
2025-12-25T20:29:01.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:29:01.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:29:01.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.769504
2025-12-25T20:29:01.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:29:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:29:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:29:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:29:01.833 [DEBUG] [Thread-17974] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:29:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:29:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:28:42', tmtdew=8.61, humidity=57.22, cloud=0.0, wind=16.08, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:28:05.146', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:29:01.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-25T20:29:01.925 [DEBUG] [Thread-17977] [transport.py] [_log()] starting thread (client mode): 0xb6bb72b0
2025-12-25T20:29:01.925 [DEBUG] [Thread-17977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:29:01.940 [DEBUG] [Thread-17977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:29:01.940 [INFO] [Thread-17977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:01.948 [DEBUG] [Thread-17977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] client lang: <none>
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] server lang: <none>
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] kex follows: False
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:29:01.949 [DEBUG] [Thread-17977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:29:01.950 [DEBUG] [Thread-17977] [transport.py] [_log()] Compression: none
2025-12-25T20:29:01.950 [DEBUG] [Thread-17977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:29:02.008 [DEBUG] [Thread-17977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:29:02.008 [DEBUG] [Thread-17977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:29:02.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:29:02.010 [DEBUG] [Thread-17977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:29:02.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:29:02.067 [DEBUG] [Thread-17977] [transport.py] [_log()] userauth is OK
2025-12-25T20:29:02.067 [DEBUG] [Thread-17977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:29:02.068 [DEBUG] [Thread-17977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:29:02.068 [DEBUG] [Thread-17977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:29:02.068 [DEBUG] [Thread-17977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:29:02.086 [INFO] [Thread-17977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:29:02.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-25T20:29:02.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:29:02.908 [DEBUG] [Thread-17977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:29:02.908 [DEBUG] [Thread-17977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:29:02.956 [DEBUG] [Thread-17977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:29:02.956 [DEBUG] [Thread-17977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:29:02.966 [DEBUG] [Thread-17977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:29:02.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:29:02.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-25T20:29:02.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:29:02.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:29:02.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:29:02.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:29:03.004 [DEBUG] [Thread-17977] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:29:07.509 [DEBUG] [Thread-17979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:22.556 [DEBUG] [Thread-17980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:24.070 [DEBUG] [Thread-17981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:29:33.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:29:33.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-25T20:29:33.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 29, 15), 8.56, 57.37, 0.0, 15.14, 18.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:29:33.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:29:15
2025-12-25T20:29:33.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:29:34.001 [DEBUG] [Thread-17982] [transport.py] [_log()] starting thread (client mode): 0xb6bab160
2025-12-25T20:29:34.001 [DEBUG] [Thread-17982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:29:34.017 [DEBUG] [Thread-17982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:29:34.017 [INFO] [Thread-17982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:29:34.020 [DEBUG] [Thread-17982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] client lang: <none>
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] server lang: <none>
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] kex follows: False
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] Compression: none
2025-12-25T20:29:34.021 [DEBUG] [Thread-17982] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:29:34.040 [DEBUG] [Thread-17982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:29:34.040 [DEBUG] [Thread-17982] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:29:34.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:29:34.041 [DEBUG] [Thread-17982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:29:34.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:29:34.042 [DEBUG] [Thread-17982] [transport.py] [_log()] userauth is OK
2025-12-25T20:29:34.042 [DEBUG] [Thread-17982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:29:34.043 [DEBUG] [Thread-17982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:29:34.043 [DEBUG] [Thread-17982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:29:34.043 [DEBUG] [Thread-17982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:29:34.057 [INFO] [Thread-17982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:29:34.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:29:34.838 [DEBUG] [Thread-17982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:29:34.839 [DEBUG] [Thread-17982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:29:34.839 [DEBUG] [Thread-17982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:29:34.879 [DEBUG] [Thread-17982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:29:34.879 [DEBUG] [Thread-17982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:29:34.882 [DEBUG] [Thread-17982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:29:34.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:29:34.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:29:34.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:29:34.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:29:34.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:29:34.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:29:34.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:29:34.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:29:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:29:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.770198 -999.00  +18.70  12.48     62  +11.40 1 2 1 1 1    21    0 4.06 -373.45 ----- 13.8 12.5 262.8 18.2 20.1 -23.3 20.2 -22.8 19.7 -21.0 19.9 -22.3
2025-12-25T20:29:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:29:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:29:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.770198
2025-12-25T20:29:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:29:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:29:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:29:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:29:34.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:29:34.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:29:15', tmtdew=8.56, humidity=57.37, cloud=0.0, wind=15.14, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:29:05.107', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:29:34.908 [DEBUG] [Thread-17982] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:29:34.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-25T20:29:34.998 [DEBUG] [Thread-17985] [transport.py] [_log()] starting thread (client mode): 0xb6bc3610
2025-12-25T20:29:34.998 [DEBUG] [Thread-17985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:29:35.013 [DEBUG] [Thread-17985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:29:35.013 [INFO] [Thread-17985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:29:35.020 [DEBUG] [Thread-17985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] client lang: <none>
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] server lang: <none>
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] kex follows: False
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] Compression: none
2025-12-25T20:29:35.021 [DEBUG] [Thread-17985] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:29:35.078 [DEBUG] [Thread-17985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:29:35.079 [DEBUG] [Thread-17985] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:29:35.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:29:35.080 [DEBUG] [Thread-17985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:29:35.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:29:35.139 [DEBUG] [Thread-17985] [transport.py] [_log()] userauth is OK
2025-12-25T20:29:35.139 [DEBUG] [Thread-17985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:29:35.140 [DEBUG] [Thread-17985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:29:35.140 [DEBUG] [Thread-17985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:29:35.140 [DEBUG] [Thread-17985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:29:35.159 [INFO] [Thread-17985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:29:35.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-25T20:29:35.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:29:36.049 [DEBUG] [Thread-17985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:29:36.049 [DEBUG] [Thread-17985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:29:36.097 [DEBUG] [Thread-17985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:29:36.097 [DEBUG] [Thread-17985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:29:36.107 [DEBUG] [Thread-17985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:29:36.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:29:36.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:29:36.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:29:36.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:29:36.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:29:36.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:29:36.143 [DEBUG] [Thread-17985] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:29:37.598 [DEBUG] [Thread-17987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:47.503 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:47.504 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:29:52.649 [DEBUG] [Thread-17988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:30:06.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:30:06.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-25T20:30:06.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 29, 47), 8.23, 58.73, 0.0, 11.7, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:30:06.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:29:47
2025-12-25T20:30:06.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:30:07.119 [DEBUG] [Thread-17989] [transport.py] [_log()] starting thread (client mode): 0xb6bf51b0
2025-12-25T20:30:07.119 [DEBUG] [Thread-17989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:30:07.141 [DEBUG] [Thread-17989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:30:07.141 [INFO] [Thread-17989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:30:07.144 [DEBUG] [Thread-17989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:30:07.144 [DEBUG] [Thread-17989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:30:07.144 [DEBUG] [Thread-17989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] client lang: <none>
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] server lang: <none>
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] kex follows: False
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] Compression: none
2025-12-25T20:30:07.145 [DEBUG] [Thread-17989] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:30:07.164 [DEBUG] [Thread-17989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:30:07.164 [DEBUG] [Thread-17989] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:30:07.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:30:07.165 [DEBUG] [Thread-17989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:30:07.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:30:07.167 [DEBUG] [Thread-17989] [transport.py] [_log()] userauth is OK
2025-12-25T20:30:07.167 [DEBUG] [Thread-17989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:30:07.168 [DEBUG] [Thread-17989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:30:07.168 [DEBUG] [Thread-17989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:30:07.168 [DEBUG] [Thread-17989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:30:07.184 [INFO] [Thread-17989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:30:07.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:30:07.685 [DEBUG] [Thread-17991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:08.050 [DEBUG] [Thread-17989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:30:08.051 [DEBUG] [Thread-17989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:30:08.051 [DEBUG] [Thread-17989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:30:08.092 [DEBUG] [Thread-17989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:30:08.092 [DEBUG] [Thread-17989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:30:08.095 [DEBUG] [Thread-17989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:30:08.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:30:08.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:30:08.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:30:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:30:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:30:08.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:30:08.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:30:08.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:30:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.770546 -999.00  +18.60  12.14     62  +11.30 1 2 1 1 1    19    0 2.38 -428.39 ----- 12.2 12.1 263.2 13.6 20.1 -23.0 20.1 -22.6 19.7 -21.0 19.8 -22.2
2025-12-25T20:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.770546
2025-12-25T20:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:29:47', tmtdew=8.23, humidity=58.73, cloud=0.0, wind=11.7, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:29:35.174', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:30:08.121 [DEBUG] [Thread-17989] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:30:08.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:30:08.217 [DEBUG] [Thread-17993] [transport.py] [_log()] starting thread (client mode): 0xb6bb6230
2025-12-25T20:30:08.217 [DEBUG] [Thread-17993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:30:08.231 [DEBUG] [Thread-17993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:30:08.231 [INFO] [Thread-17993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:30:08.239 [DEBUG] [Thread-17993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:30:08.239 [DEBUG] [Thread-17993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:30:08.239 [DEBUG] [Thread-17993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] client lang: <none>
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] server lang: <none>
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] kex follows: False
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] Compression: none
2025-12-25T20:30:08.240 [DEBUG] [Thread-17993] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:30:08.298 [DEBUG] [Thread-17993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:30:08.299 [DEBUG] [Thread-17993] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:30:08.299 [DEBUG] [Thread-17993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:30:08.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:30:08.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:30:08.357 [DEBUG] [Thread-17993] [transport.py] [_log()] userauth is OK
2025-12-25T20:30:08.357 [DEBUG] [Thread-17993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:30:08.358 [DEBUG] [Thread-17993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:30:08.358 [DEBUG] [Thread-17993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:30:08.358 [DEBUG] [Thread-17993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:30:08.381 [INFO] [Thread-17993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:30:08.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-25T20:30:08.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:30:09.063 [DEBUG] [Thread-17993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:30:09.063 [DEBUG] [Thread-17993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:30:09.111 [DEBUG] [Thread-17993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:30:09.111 [DEBUG] [Thread-17993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:30:09.123 [DEBUG] [Thread-17993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:30:09.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:30:09.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-25T20:30:09.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-25T20:30:09.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:30:09.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:30:09.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:30:09.186 [DEBUG] [Thread-17993] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:30:22.719 [DEBUG] [Thread-17995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:24.123 [DEBUG] [Thread-17996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:37.762 [DEBUG] [Thread-17997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:39.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:30:39.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:30:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:30:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 30, 20), 8.23, 58.72, 0.0, 13.38, 18.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:30:39.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:30:20
2025-12-25T20:30:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:30:40.175 [DEBUG] [Thread-17998] [transport.py] [_log()] starting thread (client mode): 0xb6b63970
2025-12-25T20:30:40.175 [DEBUG] [Thread-17998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:30:40.191 [DEBUG] [Thread-17998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:30:40.192 [INFO] [Thread-17998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:30:40.194 [DEBUG] [Thread-17998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:30:40.194 [DEBUG] [Thread-17998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] client lang: <none>
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] server lang: <none>
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] kex follows: False
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] Compression: none
2025-12-25T20:30:40.195 [DEBUG] [Thread-17998] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:30:40.213 [DEBUG] [Thread-17998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:30:40.214 [DEBUG] [Thread-17998] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:30:40.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:30:40.215 [DEBUG] [Thread-17998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:30:40.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:30:40.256 [DEBUG] [Thread-17998] [transport.py] [_log()] userauth is OK
2025-12-25T20:30:40.257 [DEBUG] [Thread-17998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:30:40.257 [DEBUG] [Thread-17998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:30:40.257 [DEBUG] [Thread-17998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:30:40.257 [DEBUG] [Thread-17998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:30:40.289 [INFO] [Thread-17998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:30:40.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:30:41.420 [DEBUG] [Thread-17998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:30:41.420 [DEBUG] [Thread-17998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:30:41.421 [DEBUG] [Thread-17998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:30:41.461 [DEBUG] [Thread-17998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:30:41.461 [DEBUG] [Thread-17998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:30:41.465 [DEBUG] [Thread-17998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:30:41.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:30:41.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:30:41.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:30:41.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:30:41.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:30:41.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:30:41.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:30:41.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:30:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:30:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.770893 -999.00  +18.60  11.35     62  +11.30 1 2 1 1 1    17    0 1.66 -447.30 ----- 11.9 11.3 268.6 14.3 20.0 -22.9 20.1 -22.5 19.6 -20.7 19.8 -21.9
2025-12-25T20:30:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:30:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:30:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.770893
2025-12-25T20:30:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:30:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:30:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:30:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:30:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:30:41.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:30:20', tmtdew=8.23, humidity=58.72, cloud=0.0, wind=13.38, temperature=18.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:30:05.155', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:30:41.493 [DEBUG] [Thread-17998] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:30:41.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:30:41.586 [DEBUG] [Thread-18001] [transport.py] [_log()] starting thread (client mode): 0xb6bb4280
2025-12-25T20:30:41.586 [DEBUG] [Thread-18001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:30:41.601 [DEBUG] [Thread-18001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:30:41.601 [INFO] [Thread-18001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:30:41.609 [DEBUG] [Thread-18001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:30:41.609 [DEBUG] [Thread-18001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:30:41.609 [DEBUG] [Thread-18001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] client lang: <none>
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] server lang: <none>
2025-12-25T20:30:41.610 [DEBUG] [Thread-18001] [transport.py] [_log()] kex follows: False
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] Compression: none
2025-12-25T20:30:41.611 [DEBUG] [Thread-18001] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:30:41.669 [DEBUG] [Thread-18001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:30:41.670 [DEBUG] [Thread-18001] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:30:41.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:30:41.672 [DEBUG] [Thread-18001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:30:41.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:30:41.729 [DEBUG] [Thread-18001] [transport.py] [_log()] userauth is OK
2025-12-25T20:30:41.729 [DEBUG] [Thread-18001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:30:41.730 [DEBUG] [Thread-18001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:30:41.730 [DEBUG] [Thread-18001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:30:41.730 [DEBUG] [Thread-18001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:30:41.752 [INFO] [Thread-18001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:30:41.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:30:41.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:30:42.007 [DEBUG] [Thread-18001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:30:42.007 [DEBUG] [Thread-18001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:30:42.055 [DEBUG] [Thread-18001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:30:42.055 [DEBUG] [Thread-18001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:30:42.064 [DEBUG] [Thread-18001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:30:42.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:30:42.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-25T20:30:42.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-25T20:30:42.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:30:42.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:30:42.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:30:42.101 [DEBUG] [Thread-18001] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:30:52.798 [DEBUG] [Thread-18003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:52.858 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:30:52.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:07.834 [DEBUG] [Thread-18004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:12.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:31:12.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:31:12.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-25T20:31:12.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 30, 52), 8.13, 58.93, 0.0, 10.68, 18.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:31:12.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:30:52
2025-12-25T20:31:12.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:31:13.086 [DEBUG] [Thread-18005] [transport.py] [_log()] starting thread (client mode): 0xb6baa650
2025-12-25T20:31:13.086 [DEBUG] [Thread-18005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:31:13.105 [DEBUG] [Thread-18005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:31:13.106 [INFO] [Thread-18005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:31:13.109 [DEBUG] [Thread-18005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] client lang: <none>
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] server lang: <none>
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] kex follows: False
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] Compression: none
2025-12-25T20:31:13.110 [DEBUG] [Thread-18005] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:31:13.128 [DEBUG] [Thread-18005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:31:13.129 [DEBUG] [Thread-18005] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:31:13.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:31:13.131 [DEBUG] [Thread-18005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:31:13.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:31:13.133 [DEBUG] [Thread-18005] [transport.py] [_log()] userauth is OK
2025-12-25T20:31:13.133 [DEBUG] [Thread-18005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:31:13.133 [DEBUG] [Thread-18005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:31:13.133 [DEBUG] [Thread-18005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:31:13.133 [DEBUG] [Thread-18005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:31:13.151 [INFO] [Thread-18005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:31:13.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:31:13.802 [DEBUG] [Thread-18005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:31:13.802 [DEBUG] [Thread-18005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:31:13.802 [DEBUG] [Thread-18005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:31:13.843 [DEBUG] [Thread-18005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:31:13.843 [DEBUG] [Thread-18005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:31:13.847 [DEBUG] [Thread-18005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:31:13.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:31:13.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:31:13.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:31:13.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:31:13.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:31:13.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:31:13.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:31:13.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:31:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:31:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.771240 -999.00  +18.60   8.94     62  +11.30 1 2 1 1 1    16    0 -0.23 -508.76 ----- 6.3 8.9 276.4 12.2 20.0 -22.9 20.0 -22.5 19.6 -20.8 19.8 -21.9
2025-12-25T20:31:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:31:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:31:13.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.771240
2025-12-25T20:31:13.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:31:13.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:31:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:31:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:31:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:31:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:30:52', tmtdew=8.13, humidity=58.93, cloud=0.0, wind=10.68, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:30:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:31:13.876 [DEBUG] [Thread-18005] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:31:13.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-25T20:31:22.867 [DEBUG] [Thread-18008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:24.179 [DEBUG] [Thread-18009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:37.925 [DEBUG] [Thread-18010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:52.957 [DEBUG] [Thread-18011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:57.891 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:31:57.892 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:32:07.990 [DEBUG] [Thread-18012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:32:23.023 [DEBUG] [Thread-18013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:32:24.232 [DEBUG] [Thread-18014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:32:38.056 [DEBUG] [Thread-18015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:32:53.094 [DEBUG] [Thread-18016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:05.263 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:05.264 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:08.126 [DEBUG] [Thread-18017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:23.163 [DEBUG] [Thread-18018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:24.290 [DEBUG] [Thread-18019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:26.741 [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-25T20:33:38.200 [DEBUG] [Thread-18020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:53.231 [DEBUG] [Thread-18021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:33:56.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:33:56.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:33:56.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-25T20:33:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 33, 32), 7.95, 59.93, 0.0, 15.25, 18.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:33:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:33:32
2025-12-25T20:33:57.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:33:57.767 [DEBUG] [Thread-18022] [transport.py] [_log()] starting thread (client mode): 0xb6ba98d0
2025-12-25T20:33:57.767 [DEBUG] [Thread-18022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:33:57.789 [DEBUG] [Thread-18022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:33:57.789 [INFO] [Thread-18022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] client lang: <none>
2025-12-25T20:33:57.792 [DEBUG] [Thread-18022] [transport.py] [_log()] server lang: <none>
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] kex follows: False
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] Compression: none
2025-12-25T20:33:57.793 [DEBUG] [Thread-18022] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:33:57.812 [DEBUG] [Thread-18022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:33:57.813 [DEBUG] [Thread-18022] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:33:57.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:33:57.814 [DEBUG] [Thread-18022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:33:57.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:33:57.816 [DEBUG] [Thread-18022] [transport.py] [_log()] userauth is OK
2025-12-25T20:33:57.816 [DEBUG] [Thread-18022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:33:57.816 [DEBUG] [Thread-18022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:33:57.816 [DEBUG] [Thread-18022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:33:57.816 [DEBUG] [Thread-18022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:33:57.841 [INFO] [Thread-18022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:33:57.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:33:58.485 [DEBUG] [Thread-18022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:33:58.485 [DEBUG] [Thread-18022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:33:58.486 [DEBUG] [Thread-18022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:33:58.526 [DEBUG] [Thread-18022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:33:58.526 [DEBUG] [Thread-18022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:33:58.530 [DEBUG] [Thread-18022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:33:58.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:33:58.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:33:58.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:33:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:33:58.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:33:58.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:33:58.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:33:58.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:33:58.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:33:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.772976 -999.00  +18.40  11.86     63  +11.40 1 2 1 1 1    10    0 -6.96 -695.53 ----- 14.2 11.9 212.4 18.6 19.7 -22.8 19.8 -22.3 19.4 -20.8 19.6 -22.0
2025-12-25T20:33:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:33:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:33:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.772976
2025-12-25T20:33:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:33:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:33:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:33:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:33:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:33:58.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:33:32', tmtdew=7.95, humidity=59.93, cloud=0.0, wind=15.25, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:33:05.126', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:33:58.560 [DEBUG] [Thread-18022] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:33:58.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:33:58.653 [DEBUG] [Thread-18025] [transport.py] [_log()] starting thread (client mode): 0xb6bc0430
2025-12-25T20:33:58.653 [DEBUG] [Thread-18025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:33:58.668 [DEBUG] [Thread-18025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:33:58.668 [INFO] [Thread-18025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:33:58.675 [DEBUG] [Thread-18025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] client lang: <none>
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] server lang: <none>
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] kex follows: False
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:33:58.676 [DEBUG] [Thread-18025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:33:58.677 [DEBUG] [Thread-18025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:33:58.677 [DEBUG] [Thread-18025] [transport.py] [_log()] Compression: none
2025-12-25T20:33:58.677 [DEBUG] [Thread-18025] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:33:58.736 [DEBUG] [Thread-18025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:33:58.736 [DEBUG] [Thread-18025] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:33:58.737 [DEBUG] [Thread-18025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:33:58.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:33:58.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:33:58.792 [DEBUG] [Thread-18025] [transport.py] [_log()] userauth is OK
2025-12-25T20:33:58.792 [DEBUG] [Thread-18025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:33:58.793 [DEBUG] [Thread-18025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:33:58.793 [DEBUG] [Thread-18025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:33:58.793 [DEBUG] [Thread-18025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:33:58.811 [INFO] [Thread-18025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:33: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-25T20:33:58.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:33:59.643 [DEBUG] [Thread-18025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:33:59.643 [DEBUG] [Thread-18025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:33:59.690 [DEBUG] [Thread-18025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:33:59.691 [DEBUG] [Thread-18025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:33:59.699 [DEBUG] [Thread-18025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:33:59.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:33:59.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:33:59.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-25T20:33:59.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:33:59.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:33:59.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:33:59.733 [DEBUG] [Thread-18025] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:34:08.264 [DEBUG] [Thread-18027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:34:12.389 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:34:12.390 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:34:23.322 [DEBUG] [Thread-18028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:34:24.342 [DEBUG] [Thread-18029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:34:29.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:34:29.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:34:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:34:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 34, 5), 7.91, 60.06, 0.0, 19.76, 18.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:34:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:34:05
2025-12-25T20:34:30.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:34:30.742 [DEBUG] [Thread-18030] [transport.py] [_log()] starting thread (client mode): 0xb6bf7460
2025-12-25T20:34:30.742 [DEBUG] [Thread-18030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:34:30.762 [DEBUG] [Thread-18030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:34:30.762 [INFO] [Thread-18030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:34:30.766 [DEBUG] [Thread-18030] [transport.py] [_log()] client lang: <none>
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] server lang: <none>
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] kex follows: False
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] Compression: none
2025-12-25T20:34:30.767 [DEBUG] [Thread-18030] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:34:30.785 [DEBUG] [Thread-18030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:34:30.785 [DEBUG] [Thread-18030] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:34:30.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:34:30.786 [DEBUG] [Thread-18030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:34:30.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:34:30.788 [DEBUG] [Thread-18030] [transport.py] [_log()] userauth is OK
2025-12-25T20:34:30.789 [DEBUG] [Thread-18030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:34:30.789 [DEBUG] [Thread-18030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:34:30.789 [DEBUG] [Thread-18030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:34:30.789 [DEBUG] [Thread-18030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:34:30.803 [INFO] [Thread-18030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:34:30.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:34:31.481 [DEBUG] [Thread-18030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:34:31.481 [DEBUG] [Thread-18030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:34:31.481 [DEBUG] [Thread-18030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:34:31.522 [DEBUG] [Thread-18030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:34:31.522 [DEBUG] [Thread-18030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:34:31.526 [DEBUG] [Thread-18030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:34:31.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:34:31.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:34:31.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:34:31.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:34:31.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:34:31.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:34:31.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:34:31.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:34:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:34:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.773323 -999.00  +18.40  10.48     63  +11.40 1 2 1 1 1     9    0 -8.90 -752.80 ----- 10.6 10.5 222.2 17.5 19.7 -22.9 19.7 -22.7 19.4 -20.9 19.6 -22.1
2025-12-25T20:34:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:34:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:34:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.773323
2025-12-25T20:34:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:34:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:34:31.553 [DEBUG] [Thread-18030] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:34:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:34:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:34:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:34:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:34:05', tmtdew=7.91, humidity=60.06, cloud=0.0, wind=19.76, 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-25T00:06:06', seeing=3.21, atlas_timestamp='2025-12-25T18:33:35.107', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:34:31.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:34:31.648 [DEBUG] [Thread-18033] [transport.py] [_log()] starting thread (client mode): 0xb6babdc0
2025-12-25T20:34:31.648 [DEBUG] [Thread-18033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:34:31.663 [DEBUG] [Thread-18033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:34:31.663 [INFO] [Thread-18033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:34:31.670 [DEBUG] [Thread-18033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:34:31.670 [DEBUG] [Thread-18033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] client lang: <none>
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] server lang: <none>
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] kex follows: False
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] Compression: none
2025-12-25T20:34:31.671 [DEBUG] [Thread-18033] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:34:31.732 [DEBUG] [Thread-18033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:34:31.732 [DEBUG] [Thread-18033] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:34:31.733 [DEBUG] [Thread-18033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:34:31.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:34:31.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:34:31.788 [DEBUG] [Thread-18033] [transport.py] [_log()] userauth is OK
2025-12-25T20:34:31.788 [DEBUG] [Thread-18033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:34:31.788 [DEBUG] [Thread-18033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:34:31.788 [DEBUG] [Thread-18033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:34:31.789 [DEBUG] [Thread-18033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:34:31.808 [INFO] [Thread-18033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:34:31.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-25T20:34:31.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:34:32.632 [DEBUG] [Thread-18033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:34:32.633 [DEBUG] [Thread-18033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:34:32.681 [DEBUG] [Thread-18033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:34:32.681 [DEBUG] [Thread-18033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:34:32.690 [DEBUG] [Thread-18033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:34:32.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:34:32.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-25T20:34:32.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-25T20:34:32.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:34:32.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:34:32.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:34:32.728 [DEBUG] [Thread-18033] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:34:38.355 [DEBUG] [Thread-18035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:34:53.395 [DEBUG] [Thread-18036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:02.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:35:02.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:35:02.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-25T20:35:03.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 34, 37), 7.84, 60.14, 0.0, 15.88, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:35:03.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:34:37
2025-12-25T20:35:03.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:35:03.779 [DEBUG] [Thread-18037] [transport.py] [_log()] starting thread (client mode): 0xb6ba8370
2025-12-25T20:35:03.779 [DEBUG] [Thread-18037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:35:03.798 [DEBUG] [Thread-18037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:35:03.799 [INFO] [Thread-18037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] client lang: <none>
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] server lang: <none>
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] kex follows: False
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] Compression: none
2025-12-25T20:35:03.802 [DEBUG] [Thread-18037] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:35:03.817 [DEBUG] [Thread-18037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:35:03.817 [DEBUG] [Thread-18037] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:35:03.817 [DEBUG] [Thread-18037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:35:03.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:35:03.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:35:03.818 [DEBUG] [Thread-18037] [transport.py] [_log()] userauth is OK
2025-12-25T20:35:03.818 [DEBUG] [Thread-18037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:35:03.818 [DEBUG] [Thread-18037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:35:03.818 [DEBUG] [Thread-18037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:35:03.818 [DEBUG] [Thread-18037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:35:03.834 [INFO] [Thread-18037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:35:03.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:35:04.639 [DEBUG] [Thread-18037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:35:04.639 [DEBUG] [Thread-18037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:35:04.639 [DEBUG] [Thread-18037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:35:04.680 [DEBUG] [Thread-18037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:35:04.680 [DEBUG] [Thread-18037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:35:04.682 [DEBUG] [Thread-18037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:35:04.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:35:04.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:35:04.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:35:04.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:35:04.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:35:04.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:35:04.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:35:04.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:35:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:35:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.774018 -999.00  +18.50  13.89     63  +11.30 1 2 1 1 1     8    0 -11.72 -820.95 ----- 11.5 13.9 206.6 21.9 19.6 -23.0 19.6 -22.5 19.2 -20.8 19.5 -22.0
2025-12-25T20:35:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:35:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:35:04.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.774018
2025-12-25T20:35:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:35:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:35:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:35:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:35:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:35:04.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:34:37', tmtdew=7.84, humidity=60.14, cloud=0.0, wind=15.88, 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-25T20:34:37', seeing=2.8, atlas_timestamp='2025-12-25T18:34:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:35:04.757 [DEBUG] [Thread-18037] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:35:04.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-25T20:35:04.839 [DEBUG] [Thread-18040] [transport.py] [_log()] starting thread (client mode): 0xb6b63490
2025-12-25T20:35:04.839 [DEBUG] [Thread-18040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:35:04.854 [DEBUG] [Thread-18040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:35:04.854 [INFO] [Thread-18040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:35:04.861 [DEBUG] [Thread-18040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:35:04.861 [DEBUG] [Thread-18040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:35:04.861 [DEBUG] [Thread-18040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:35:04.861 [DEBUG] [Thread-18040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] client lang: <none>
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] server lang: <none>
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] kex follows: False
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] Compression: none
2025-12-25T20:35:04.862 [DEBUG] [Thread-18040] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:35:04.921 [DEBUG] [Thread-18040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:35:04.921 [DEBUG] [Thread-18040] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:35:04.921 [DEBUG] [Thread-18040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:35:04.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:35:04.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:35:04.978 [DEBUG] [Thread-18040] [transport.py] [_log()] userauth is OK
2025-12-25T20:35:04.978 [DEBUG] [Thread-18040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:35:04.978 [DEBUG] [Thread-18040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:35:04.978 [DEBUG] [Thread-18040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:35:04.978 [DEBUG] [Thread-18040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:35:04.992 [INFO] [Thread-18040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:35:04.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:35:04.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:35:05.822 [DEBUG] [Thread-18040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:35:05.822 [DEBUG] [Thread-18040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:35:05.871 [DEBUG] [Thread-18040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:35:05.871 [DEBUG] [Thread-18040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:35:05.879 [DEBUG] [Thread-18040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:35:05.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:35:05.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:35:05.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-25T20:35:05.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:35:05.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:35:05.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:35:05.912 [DEBUG] [Thread-18040] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:35:08.423 [DEBUG] [Thread-18042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:17.176 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:17.176 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:23.456 [DEBUG] [Thread-18043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:24.394 [DEBUG] [Thread-18044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:35:35.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:35:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:35:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 35, 9), 7.86, 60.08, 0.0, 16.13, 18.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:35:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:35:09
2025-12-25T20:35:36.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:35:36.908 [DEBUG] [Thread-18045] [transport.py] [_log()] starting thread (client mode): 0xb6bb6800
2025-12-25T20:35:36.908 [DEBUG] [Thread-18045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:35:36.928 [DEBUG] [Thread-18045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:35:36.928 [INFO] [Thread-18045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] client lang: <none>
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] server lang: <none>
2025-12-25T20:35:36.931 [DEBUG] [Thread-18045] [transport.py] [_log()] kex follows: False
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] Compression: none
2025-12-25T20:35:36.932 [DEBUG] [Thread-18045] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:35:36.948 [DEBUG] [Thread-18045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:35:36.948 [DEBUG] [Thread-18045] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:35:36.948 [DEBUG] [Thread-18045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:35:36.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:35:36.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:35:36.949 [DEBUG] [Thread-18045] [transport.py] [_log()] userauth is OK
2025-12-25T20:35:36.949 [DEBUG] [Thread-18045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:35:36.949 [DEBUG] [Thread-18045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:35:36.949 [DEBUG] [Thread-18045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:35:36.949 [DEBUG] [Thread-18045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:35:36.966 [INFO] [Thread-18045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:35:36.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:35:37.611 [DEBUG] [Thread-18045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:35:37.611 [DEBUG] [Thread-18045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:35:37.611 [DEBUG] [Thread-18045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:35:37.652 [DEBUG] [Thread-18045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:35:37.652 [DEBUG] [Thread-18045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:35:37.654 [DEBUG] [Thread-18045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:35:37.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:35:37.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:35:37.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:35:37.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:35:37.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:35:37.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:35:37.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:35:37.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.774365 -999.00  +18.40   8.52     63  +11.40 1 2 1 1 1     7    0 -12.76 -854.22 ----- 8.5 8.5 226.4 18.9 19.5 -23.0 19.5 -22.5 19.2 -21.0 19.5 -22.0
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.774365
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:35:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:35:09', tmtdew=7.86, humidity=60.08, cloud=0.0, wind=16.13, 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-25T20:35:09', seeing=2.87, atlas_timestamp='2025-12-25T18:35:05.136', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:35:37.674 [DEBUG] [Thread-18045] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:35:37.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-25T20:35:37.754 [DEBUG] [Thread-18048] [transport.py] [_log()] starting thread (client mode): 0xb6bf5270
2025-12-25T20:35:37.755 [DEBUG] [Thread-18048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:35:37.770 [DEBUG] [Thread-18048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:35:37.770 [INFO] [Thread-18048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] client lang: <none>
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] server lang: <none>
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] kex follows: False
2025-12-25T20:35:37.777 [DEBUG] [Thread-18048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:35:37.778 [DEBUG] [Thread-18048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:35:37.778 [DEBUG] [Thread-18048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:35:37.778 [DEBUG] [Thread-18048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:35:37.778 [DEBUG] [Thread-18048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:35:37.778 [DEBUG] [Thread-18048] [transport.py] [_log()] Compression: none
2025-12-25T20:35:37.778 [DEBUG] [Thread-18048] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:35:37.832 [DEBUG] [Thread-18048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:35:37.832 [DEBUG] [Thread-18048] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:35:37.832 [DEBUG] [Thread-18048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:35:37.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:35:37.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:35:37.889 [DEBUG] [Thread-18048] [transport.py] [_log()] userauth is OK
2025-12-25T20:35:37.889 [DEBUG] [Thread-18048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:35:37.889 [DEBUG] [Thread-18048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:35:37.889 [DEBUG] [Thread-18048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:35:37.889 [DEBUG] [Thread-18048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:35:37.904 [INFO] [Thread-18048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:35:37.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-25T20:35:37.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:35:38.480 [DEBUG] [Thread-18050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:35:38.759 [DEBUG] [Thread-18048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:35:38.759 [DEBUG] [Thread-18048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:35:38.810 [DEBUG] [Thread-18048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:35:38.810 [DEBUG] [Thread-18048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:35:38.818 [DEBUG] [Thread-18048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:35:38.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:35:38.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:35:38.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-25T20:35:38.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:35:38.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:35:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:35:38.850 [DEBUG] [Thread-18048] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:35:53.514 [DEBUG] [Thread-18051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:08.540 [DEBUG] [Thread-18052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:36:08.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:36:08.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-25T20:36:09.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 35, 41), 7.86, 60.06, 0.0, 16.68, 18.21, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:36:09.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:35:41
2025-12-25T20:36:09.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:36:09.987 [DEBUG] [Thread-18053] [transport.py] [_log()] starting thread (client mode): 0xb6bf79d0
2025-12-25T20:36:09.987 [DEBUG] [Thread-18053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:36:10.007 [DEBUG] [Thread-18053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:36:10.007 [INFO] [Thread-18053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] client lang: <none>
2025-12-25T20:36:10.010 [DEBUG] [Thread-18053] [transport.py] [_log()] server lang: <none>
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] kex follows: False
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] Compression: none
2025-12-25T20:36:10.011 [DEBUG] [Thread-18053] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:36:10.026 [DEBUG] [Thread-18053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:36:10.026 [DEBUG] [Thread-18053] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:36:10.026 [DEBUG] [Thread-18053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:36:10.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:36:10.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:36:10.027 [DEBUG] [Thread-18053] [transport.py] [_log()] userauth is OK
2025-12-25T20:36:10.027 [DEBUG] [Thread-18053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:36:10.027 [DEBUG] [Thread-18053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:36:10.027 [DEBUG] [Thread-18053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:36:10.027 [DEBUG] [Thread-18053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:36:10.042 [INFO] [Thread-18053] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:36:10.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:36:10.704 [DEBUG] [Thread-18053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:36:10.704 [DEBUG] [Thread-18053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:36:10.704 [DEBUG] [Thread-18053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:36:10.744 [DEBUG] [Thread-18053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:36:10.744 [DEBUG] [Thread-18053] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:36:10.746 [DEBUG] [Thread-18053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:36:10.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:36:10.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:36:10.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:36:10.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:36:10.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:36:10.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:36:10.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.774712 -999.00  +18.40  12.47     63  +11.30 1 2 1 1 1     6    0 -14.45 -901.23 ----- 14.1 12.5 183.9 20.1 19.5 -23.0 19.5 -22.5 19.2 -21.0 19.4 -22.0
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.774712
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:36:10.763 [DEBUG] [Thread-18053] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:36:10.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:36:10.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:35:41', tmtdew=7.86, humidity=60.06, cloud=0.0, wind=16.68, temperature=18.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:35:41', seeing=2.87, atlas_timestamp='2025-12-25T18:35:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:36:10.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-25T20:36:10.862 [DEBUG] [Thread-18056] [transport.py] [_log()] starting thread (client mode): 0xb6bf6ad0
2025-12-25T20:36:10.862 [DEBUG] [Thread-18056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:36:10.877 [DEBUG] [Thread-18056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:36:10.877 [INFO] [Thread-18056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] client lang: <none>
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] server lang: <none>
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] kex follows: False
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] Compression: none
2025-12-25T20:36:10.886 [DEBUG] [Thread-18056] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:36:10.943 [DEBUG] [Thread-18056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:36:10.944 [DEBUG] [Thread-18056] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:36:10.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:36:10.944 [DEBUG] [Thread-18056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:36:10.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:36:11.001 [DEBUG] [Thread-18056] [transport.py] [_log()] userauth is OK
2025-12-25T20:36:11.001 [DEBUG] [Thread-18056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:36:11.001 [DEBUG] [Thread-18056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:36:11.001 [DEBUG] [Thread-18056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:36:11.001 [DEBUG] [Thread-18056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:36:11.015 [INFO] [Thread-18056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:36:11.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-25T20:36:11.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:36:11.837 [DEBUG] [Thread-18056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:36:11.837 [DEBUG] [Thread-18056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:36:11.884 [DEBUG] [Thread-18056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:36:11.884 [DEBUG] [Thread-18056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:36:11.892 [DEBUG] [Thread-18056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:36:11.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:36: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')
2025-12-25T20:36:11.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:36:11.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:36:11.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:36:11.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:36:11.924 [DEBUG] [Thread-18056] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:36:22.708 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:22.709 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:23.563 [DEBUG] [Thread-18058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:24.466 [DEBUG] [Thread-18059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:38.597 [DEBUG] [Thread-18060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:36:41.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:36:41.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:36:41.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-25T20:36:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 36, 13), 7.86, 60.06, 0.0, 19.13, 18.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:36:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:36:13
2025-12-25T20:36:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:36:43.049 [DEBUG] [Thread-18061] [transport.py] [_log()] starting thread (client mode): 0xb6ba8160
2025-12-25T20:36:43.049 [DEBUG] [Thread-18061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:36:43.070 [DEBUG] [Thread-18061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:36:43.070 [INFO] [Thread-18061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] client lang: <none>
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] server lang: <none>
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] kex follows: False
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] Compression: none
2025-12-25T20:36:43.073 [DEBUG] [Thread-18061] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:36:43.089 [DEBUG] [Thread-18061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:36:43.089 [DEBUG] [Thread-18061] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:36:43.089 [DEBUG] [Thread-18061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:36:43.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:36:43.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:36:43.090 [DEBUG] [Thread-18061] [transport.py] [_log()] userauth is OK
2025-12-25T20:36:43.090 [DEBUG] [Thread-18061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:36:43.090 [DEBUG] [Thread-18061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:36:43.090 [DEBUG] [Thread-18061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:36:43.090 [DEBUG] [Thread-18061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:36:43.099 [INFO] [Thread-18061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:36:43.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:36:43.751 [DEBUG] [Thread-18061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:36:43.751 [DEBUG] [Thread-18061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:36:43.751 [DEBUG] [Thread-18061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:36:43.792 [DEBUG] [Thread-18061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:36:43.792 [DEBUG] [Thread-18061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:36:43.795 [DEBUG] [Thread-18061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:36:43.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:36:43.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:36:43.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:36:43.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:36:43.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:36:43.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:36:43.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:36:43.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.775059 -999.00  +18.40  19.30     63  +11.40 1 2 1 1 1     6    0 -18.41 -1023.42 ZNE.. 12.9 19.3 211.6 23.8 19.4 -22.9 19.4 -22.6 19.1 -21.0 19.4 -21.9
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.775059
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:36:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:36:13', tmtdew=7.86, humidity=60.06, cloud=0.0, wind=19.13, 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-25T20:36:13', seeing=3.65, atlas_timestamp='2025-12-25T18:36:05.098', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:36:43.818 [DEBUG] [Thread-18061] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:36:43.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-25T20:36:43.899 [DEBUG] [Thread-18064] [transport.py] [_log()] starting thread (client mode): 0xb6b61240
2025-12-25T20:36:43.899 [DEBUG] [Thread-18064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:36:43.915 [DEBUG] [Thread-18064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:36:43.915 [INFO] [Thread-18064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:36:43.922 [DEBUG] [Thread-18064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:36:43.922 [DEBUG] [Thread-18064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] client lang: <none>
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] server lang: <none>
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] kex follows: False
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] Compression: none
2025-12-25T20:36:43.923 [DEBUG] [Thread-18064] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:36:43.979 [DEBUG] [Thread-18064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:36:43.979 [DEBUG] [Thread-18064] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:36:43.979 [DEBUG] [Thread-18064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:36:43.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:36:43.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:36:44.036 [DEBUG] [Thread-18064] [transport.py] [_log()] userauth is OK
2025-12-25T20:36:44.036 [DEBUG] [Thread-18064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:36:44.036 [DEBUG] [Thread-18064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:36:44.036 [DEBUG] [Thread-18064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:36:44.036 [DEBUG] [Thread-18064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:36:44.050 [INFO] [Thread-18064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:36:44.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-25T20:36:44.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:36:44.933 [DEBUG] [Thread-18064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:36:44.933 [DEBUG] [Thread-18064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:36:44.981 [DEBUG] [Thread-18064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:36:44.981 [DEBUG] [Thread-18064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:36:44.990 [DEBUG] [Thread-18064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:36:44.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:36:44.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-25T20:36:45.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-25T20:36:45.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:36:45.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:36:45.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:36:45.026 [DEBUG] [Thread-18064] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:36:53.622 [DEBUG] [Thread-18066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:08.656 [DEBUG] [Thread-18067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:37:15.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:37:15.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-25T20:37:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 36, 45), 7.73, 60.68, 0.0, 23.13, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:37:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:36:45
2025-12-25T20:37:15.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:37:15.994 [DEBUG] [Thread-18068] [transport.py] [_log()] starting thread (client mode): 0xb6b610c0
2025-12-25T20:37:15.994 [DEBUG] [Thread-18068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:37:16.015 [DEBUG] [Thread-18068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:37:16.015 [INFO] [Thread-18068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] client lang: <none>
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] server lang: <none>
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] kex follows: False
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] Compression: none
2025-12-25T20:37:16.018 [DEBUG] [Thread-18068] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:37:16.033 [DEBUG] [Thread-18068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:37:16.033 [DEBUG] [Thread-18068] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:37:16.033 [DEBUG] [Thread-18068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:37:16.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:37:16.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:37:16.034 [DEBUG] [Thread-18068] [transport.py] [_log()] userauth is OK
2025-12-25T20:37:16.034 [DEBUG] [Thread-18068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:37:16.034 [DEBUG] [Thread-18068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:37:16.034 [DEBUG] [Thread-18068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:37:16.034 [DEBUG] [Thread-18068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:37:16.043 [INFO] [Thread-18068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:37:16.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:37:16.672 [DEBUG] [Thread-18068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:37:16.672 [DEBUG] [Thread-18068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:37:16.672 [DEBUG] [Thread-18068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:37:16.713 [DEBUG] [Thread-18068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:37:16.713 [DEBUG] [Thread-18068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:37:16.715 [DEBUG] [Thread-18068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:37:16.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:37:16.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:37:16.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:37:16.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:37:16.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:37:16.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:37:16.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.775407 -999.00  +18.30  12.44     64  +11.40 1 2 1 1 1     5    0 -17.14 -975.73 ZNE.. 13.0 12.4 213.0 21.1 19.4 -23.1 19.4 -23.1 19.1 -21.4 19.4 -22.1
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.775407
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:37:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:36:45', tmtdew=7.73, humidity=60.68, cloud=0.0, wind=23.13, 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-25T20:36:46', seeing=3.02, atlas_timestamp='2025-12-25T18:36:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:37:16.735 [DEBUG] [Thread-18068] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:37:16.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-25T20:37:16.816 [DEBUG] [Thread-18071] [transport.py] [_log()] starting thread (client mode): 0xb6b77400
2025-12-25T20:37:16.816 [DEBUG] [Thread-18071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:37:16.830 [DEBUG] [Thread-18071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:37:16.830 [INFO] [Thread-18071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] client lang: <none>
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] server lang: <none>
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] kex follows: False
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] Compression: none
2025-12-25T20:37:16.838 [DEBUG] [Thread-18071] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:37:16.894 [DEBUG] [Thread-18071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:37:16.894 [DEBUG] [Thread-18071] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:37:16.894 [DEBUG] [Thread-18071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:37:16.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:37:16.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:37:16.951 [DEBUG] [Thread-18071] [transport.py] [_log()] userauth is OK
2025-12-25T20:37:16.951 [DEBUG] [Thread-18071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:37:16.951 [DEBUG] [Thread-18071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:37:16.951 [DEBUG] [Thread-18071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:37:16.951 [DEBUG] [Thread-18071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:37:16.965 [INFO] [Thread-18071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:37:16.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-25T20:37:16.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:37:17.791 [DEBUG] [Thread-18071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:37:17.791 [DEBUG] [Thread-18071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:37:17.838 [DEBUG] [Thread-18071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:37:17.838 [DEBUG] [Thread-18071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:37:17.847 [DEBUG] [Thread-18071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:37:17.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:37:17.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')
2025-12-25T20:37:17.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-25T20:37:17.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:37:17.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:37:17.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:37:17.878 [DEBUG] [Thread-18071] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:37:23.680 [DEBUG] [Thread-18073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:24.530 [DEBUG] [Thread-18074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:26.996 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:26.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:38.723 [DEBUG] [Thread-18075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:37:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:37:47.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:37:47.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-25T20:37:48.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 37, 17), 7.7, 60.78, 0.0, 22.06, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:37:48.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:37:17
2025-12-25T20:37:48.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:37:48.855 [DEBUG] [Thread-18076] [transport.py] [_log()] starting thread (client mode): 0xb6b76860
2025-12-25T20:37:48.855 [DEBUG] [Thread-18076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:37:48.873 [DEBUG] [Thread-18076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:37:48.873 [INFO] [Thread-18076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:48.875 [DEBUG] [Thread-18076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] client lang: <none>
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] server lang: <none>
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] kex follows: False
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] Compression: none
2025-12-25T20:37:48.876 [DEBUG] [Thread-18076] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:37:48.892 [DEBUG] [Thread-18076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:37:48.892 [DEBUG] [Thread-18076] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:37:48.892 [DEBUG] [Thread-18076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:37:48.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:37:48.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:37:48.894 [DEBUG] [Thread-18076] [transport.py] [_log()] userauth is OK
2025-12-25T20:37:48.894 [DEBUG] [Thread-18076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:37:48.894 [DEBUG] [Thread-18076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:37:48.894 [DEBUG] [Thread-18076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:37:48.894 [DEBUG] [Thread-18076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:37:48.913 [INFO] [Thread-18076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:37:48.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:37:49.557 [DEBUG] [Thread-18076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:37:49.557 [DEBUG] [Thread-18076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:37:49.557 [DEBUG] [Thread-18076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:37:49.598 [DEBUG] [Thread-18076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:37:49.598 [DEBUG] [Thread-18076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:37:49.600 [DEBUG] [Thread-18076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:37:49.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:37:49.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:37:49.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:37:49.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:37:49.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:37:49.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:37:49.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.775754 -999.00  +18.30  12.28     64  +11.40 1 2 1 1 1     5    0 -15.29 -912.96 ZNE.. 14.9 12.3 220.0 21.2 19.3 -22.8 19.3 -22.8 19.1 -21.0 19.3 -21.9
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.775754
2025-12-25T20:37:49.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:37:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:37:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:37:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:37:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:37:49.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:37:17', tmtdew=7.7, humidity=60.78, cloud=0.0, wind=22.06, 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-25T20:37:18', seeing=2.48, atlas_timestamp='2025-12-25T18:37:05.146', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:37:49.623 [DEBUG] [Thread-18076] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:37:49.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:37:49.704 [DEBUG] [Thread-18079] [transport.py] [_log()] starting thread (client mode): 0xb6b7e440
2025-12-25T20:37:49.704 [DEBUG] [Thread-18079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:37:49.718 [DEBUG] [Thread-18079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:37:49.718 [INFO] [Thread-18079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] client lang: <none>
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] server lang: <none>
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] kex follows: False
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:37:49.725 [DEBUG] [Thread-18079] [transport.py] [_log()] Compression: none
2025-12-25T20:37:49.726 [DEBUG] [Thread-18079] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:37:49.784 [DEBUG] [Thread-18079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:37:49.784 [DEBUG] [Thread-18079] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:37:49.784 [DEBUG] [Thread-18079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:37:49.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:37:49.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:37:49.839 [DEBUG] [Thread-18079] [transport.py] [_log()] userauth is OK
2025-12-25T20:37:49.839 [DEBUG] [Thread-18079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:37:49.839 [DEBUG] [Thread-18079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:37:49.839 [DEBUG] [Thread-18079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:37:49.839 [DEBUG] [Thread-18079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:37:49.854 [INFO] [Thread-18079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:37:49.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-25T20:37:49.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:37:50.680 [DEBUG] [Thread-18079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:37:50.680 [DEBUG] [Thread-18079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:37:50.729 [DEBUG] [Thread-18079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:37:50.729 [DEBUG] [Thread-18079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:37:50.738 [DEBUG] [Thread-18079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:37:50.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:37:50.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-25T20:37:50.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-25T20:37:50.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:37:50.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:37:50.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:37:50.770 [DEBUG] [Thread-18079] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:37:53.747 [DEBUG] [Thread-18081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:08.781 [DEBUG] [Thread-18082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:20.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:38:20.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:38:20.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-25T20:38:21.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 37, 49), 7.6, 60.99, 0.0, 16.78, 18.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:38:21.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:37:49
2025-12-25T20:38:21.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:38:21.775 [DEBUG] [Thread-18083] [transport.py] [_log()] starting thread (client mode): 0xb6b7f3a0
2025-12-25T20:38:21.775 [DEBUG] [Thread-18083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:38:21.794 [DEBUG] [Thread-18083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:38:21.794 [INFO] [Thread-18083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] client lang: <none>
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] server lang: <none>
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] kex follows: False
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] Compression: none
2025-12-25T20:38:21.796 [DEBUG] [Thread-18083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:38:21.810 [DEBUG] [Thread-18083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:38:21.810 [DEBUG] [Thread-18083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:38:21.811 [DEBUG] [Thread-18083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:38:21.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:38:21.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:38:21.811 [DEBUG] [Thread-18083] [transport.py] [_log()] userauth is OK
2025-12-25T20:38:21.812 [DEBUG] [Thread-18083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:38:21.812 [DEBUG] [Thread-18083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:38:21.812 [DEBUG] [Thread-18083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:38:21.812 [DEBUG] [Thread-18083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:38:21.829 [INFO] [Thread-18083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:38:21.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:38:22.491 [DEBUG] [Thread-18083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:38:22.491 [DEBUG] [Thread-18083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:38:22.491 [DEBUG] [Thread-18083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:38:22.532 [DEBUG] [Thread-18083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:38:22.532 [DEBUG] [Thread-18083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:38:22.534 [DEBUG] [Thread-18083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:38:22.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:38:22.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:38:22.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:38:22.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:38:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:38:22.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:38:22.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.776101 -999.00  +18.20  14.84     64  +11.50 1 2 1 1 1     4    0 -15.94 -922.65 zNE.. 18.1 14.8 221.7 21.0 19.3 -23.1 19.2 -22.5 19.0 -21.0 19.2 -22.2
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.776101
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:38:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:37:49', tmtdew=7.6, humidity=60.99, cloud=0.0, wind=16.78, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:37:50', seeing=2.63, atlas_timestamp='2025-12-25T18:37:35.126', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:38:22.554 [DEBUG] [Thread-18083] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:38:22.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-25T20:38:22.639 [DEBUG] [Thread-18086] [transport.py] [_log()] starting thread (client mode): 0xb6b77160
2025-12-25T20:38:22.640 [DEBUG] [Thread-18086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:38:22.654 [DEBUG] [Thread-18086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:38:22.654 [INFO] [Thread-18086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] client lang: <none>
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] server lang: <none>
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] kex follows: False
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] Compression: none
2025-12-25T20:38:22.662 [DEBUG] [Thread-18086] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:38:22.718 [DEBUG] [Thread-18086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:38:22.718 [DEBUG] [Thread-18086] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:38:22.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:38:22.718 [DEBUG] [Thread-18086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:38:22.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:38:22.776 [DEBUG] [Thread-18086] [transport.py] [_log()] userauth is OK
2025-12-25T20:38:22.776 [DEBUG] [Thread-18086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:38:22.777 [DEBUG] [Thread-18086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:38:22.777 [DEBUG] [Thread-18086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:38:22.777 [DEBUG] [Thread-18086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:38:22.791 [INFO] [Thread-18086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:38:22.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:38:22.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:38:23.591 [DEBUG] [Thread-18086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:38:23.591 [DEBUG] [Thread-18086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:38:23.639 [DEBUG] [Thread-18086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:38:23.639 [DEBUG] [Thread-18086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:38:23.648 [DEBUG] [Thread-18086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:38:23.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:38: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')
2025-12-25T20:38:23.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:38:23.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:38:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:38:23.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:38:23.679 [DEBUG] [Thread-18086] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:38:23.807 [DEBUG] [Thread-18088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:24.581 [DEBUG] [Thread-18089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:31.180 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:31.181 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:38.851 [DEBUG] [Thread-18090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:38:53.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:38:53.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-25T20:38:53.874 [DEBUG] [Thread-18091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:38:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 38, 21), 7.59, 61.01, 0.0, 20.15, 18.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:38:54.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:38:21
2025-12-25T20:38:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:38:54.685 [DEBUG] [Thread-18092] [transport.py] [_log()] starting thread (client mode): 0xb9559150
2025-12-25T20:38:54.686 [DEBUG] [Thread-18092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:38:54.699 [DEBUG] [Thread-18092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:38:54.699 [INFO] [Thread-18092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:54.702 [DEBUG] [Thread-18092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] client lang: <none>
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] server lang: <none>
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] kex follows: False
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] Compression: none
2025-12-25T20:38:54.703 [DEBUG] [Thread-18092] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:38:54.719 [DEBUG] [Thread-18092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:38:54.719 [DEBUG] [Thread-18092] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:38:54.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:38:54.719 [DEBUG] [Thread-18092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:38:54.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:38:54.720 [DEBUG] [Thread-18092] [transport.py] [_log()] userauth is OK
2025-12-25T20:38:54.720 [DEBUG] [Thread-18092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:38:54.720 [DEBUG] [Thread-18092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:38:54.720 [DEBUG] [Thread-18092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:38:54.720 [DEBUG] [Thread-18092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:38:54.733 [INFO] [Thread-18092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:38:54.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:38:55.387 [DEBUG] [Thread-18092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:38:55.387 [DEBUG] [Thread-18092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:38:55.387 [DEBUG] [Thread-18092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:38:55.428 [DEBUG] [Thread-18092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:38:55.429 [DEBUG] [Thread-18092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:38:55.431 [DEBUG] [Thread-18092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:38:55.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:38:55.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:38:55.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:38:55.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:38:55.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:38:55.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:38:55.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.776448 -999.00  +18.20  10.48     64  +11.40 1 2 1 1 1     4    0 -16.91 -947.48 zNE.. 12.4 10.5 235.5 23.1 19.3 -22.9 19.2 -22.6 18.9 -20.9 19.2 -22.0
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.776448
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:38:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:38:21', tmtdew=7.59, humidity=61.01, cloud=0.0, wind=20.15, 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-25T20:38:22', seeing=2.63, atlas_timestamp='2025-12-25T18:38:05.107', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, 0.8952500000000008, 2.3104999999999993, nan, nan, nan, nan, nan, nan, 2.4692499999999997, 2.0435, 3.2775, nan, nan, nan, nan, nan, nan, nan, 2.5734999999999983, nan, nan, nan, nan, nan, nan, nan, nan, 1.4110000000000014, nan, nan, nan], zp_timestamp='2025-12-25T02:04:00')
2025-12-25T20:38:55.449 [DEBUG] [Thread-18092] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:38:55.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-25T20:38:55.533 [DEBUG] [Thread-18095] [transport.py] [_log()] starting thread (client mode): 0xb6bf75b0
2025-12-25T20:38:55.533 [DEBUG] [Thread-18095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:38:55.548 [DEBUG] [Thread-18095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:38:55.548 [INFO] [Thread-18095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] client lang: <none>
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] server lang: <none>
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] kex follows: False
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:38:55.555 [DEBUG] [Thread-18095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:38:55.556 [DEBUG] [Thread-18095] [transport.py] [_log()] Compression: none
2025-12-25T20:38:55.556 [DEBUG] [Thread-18095] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:38:55.613 [DEBUG] [Thread-18095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:38:55.613 [DEBUG] [Thread-18095] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:38:55.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:38:55.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:38:55.613 [DEBUG] [Thread-18095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:38:55.670 [DEBUG] [Thread-18095] [transport.py] [_log()] userauth is OK
2025-12-25T20:38:55.671 [DEBUG] [Thread-18095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:38:55.671 [DEBUG] [Thread-18095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:38:55.671 [DEBUG] [Thread-18095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:38:55.671 [DEBUG] [Thread-18095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:38:55.688 [INFO] [Thread-18095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:38:55.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-25T20:38:55.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:38:56.489 [DEBUG] [Thread-18095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:38:56.489 [DEBUG] [Thread-18095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:38:56.536 [DEBUG] [Thread-18095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:38:56.536 [DEBUG] [Thread-18095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:38:56.545 [DEBUG] [Thread-18095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:38:56.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:38:56.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-25T20:38:56.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:38:56.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:38:56.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:38:56.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:38:56.577 [DEBUG] [Thread-18095] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:39:08.900 [DEBUG] [Thread-18097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:23.938 [DEBUG] [Thread-18098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:24.645 [DEBUG] [Thread-18099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:26.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:39:26.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:39:26.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-25T20:39:27.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 38, 53), 7.53, 61.26, 0.0, 19.85, 18.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:39:27.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:38:53
2025-12-25T20:39:27.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:39:27.675 [DEBUG] [Thread-18100] [transport.py] [_log()] starting thread (client mode): 0xb95b3bb0
2025-12-25T20:39:27.675 [DEBUG] [Thread-18100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:39:27.698 [DEBUG] [Thread-18100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:39:27.698 [INFO] [Thread-18100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:39:27.702 [DEBUG] [Thread-18100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] client lang: <none>
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] server lang: <none>
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] kex follows: False
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] Compression: none
2025-12-25T20:39:27.703 [DEBUG] [Thread-18100] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:39:27.718 [DEBUG] [Thread-18100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:39:27.718 [DEBUG] [Thread-18100] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:39:27.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:39:27.718 [DEBUG] [Thread-18100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:39:27.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:39:27.719 [DEBUG] [Thread-18100] [transport.py] [_log()] userauth is OK
2025-12-25T20:39:27.719 [DEBUG] [Thread-18100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:39:27.719 [DEBUG] [Thread-18100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:39:27.720 [DEBUG] [Thread-18100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:39:27.720 [DEBUG] [Thread-18100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:39:27.729 [INFO] [Thread-18100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:39:27.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:39:28.342 [DEBUG] [Thread-18100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:39:28.342 [DEBUG] [Thread-18100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:39:28.342 [DEBUG] [Thread-18100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:39:28.382 [DEBUG] [Thread-18100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:39:28.382 [DEBUG] [Thread-18100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:39:28.385 [DEBUG] [Thread-18100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:39:28.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:39:28.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:39:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:39:28.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:39:28.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:39:28.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:39:28.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.777143 -999.00  +18.20   8.00     64  +11.40 1 2 1 1 1     3    0 -19.22 -1009.92 ZNES. 9.8 8.0 201.4 17.3 19.2 -22.9 19.1 -22.4 18.9 -21.1 19.1 -22.2
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.777143
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:39:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:39:28.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:38:53', tmtdew=7.53, humidity=61.26, cloud=0.0, wind=19.85, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:39:26', seeing=3.74, atlas_timestamp='2025-12-25T18:39:05.155', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 2.8979999999999997, nan, nan, nan, nan, nan, nan, 2.1632499999999997, nan, 3.3259999999999996, nan, nan, nan, nan, nan, nan, nan, nan, 2.263749999999999, nan, nan, nan, nan, nan, nan, nan, 2.155000000000001, nan, nan, nan], zp_timestamp='2025-12-25T18:38:00')
2025-12-25T20:39:28.404 [DEBUG] [Thread-18100] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:39:28.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-25T20:39:28.492 [DEBUG] [Thread-18103] [transport.py] [_log()] starting thread (client mode): 0xb6b21540
2025-12-25T20:39:28.492 [DEBUG] [Thread-18103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:39:28.507 [DEBUG] [Thread-18103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:39:28.507 [INFO] [Thread-18103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:39:28.514 [DEBUG] [Thread-18103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:39:28.514 [DEBUG] [Thread-18103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:39:28.514 [DEBUG] [Thread-18103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:39:28.514 [DEBUG] [Thread-18103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:39:28.514 [DEBUG] [Thread-18103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:39:28.514 [DEBUG] [Thread-18103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] client lang: <none>
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] server lang: <none>
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] kex follows: False
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] Compression: none
2025-12-25T20:39:28.515 [DEBUG] [Thread-18103] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:39:28.572 [DEBUG] [Thread-18103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:39:28.572 [DEBUG] [Thread-18103] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:39:28.572 [DEBUG] [Thread-18103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:39:28.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:39:28.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:39:28.633 [DEBUG] [Thread-18103] [transport.py] [_log()] userauth is OK
2025-12-25T20:39:28.633 [DEBUG] [Thread-18103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:39:28.633 [DEBUG] [Thread-18103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:39:28.633 [DEBUG] [Thread-18103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:39:28.633 [DEBUG] [Thread-18103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:39:28.648 [INFO] [Thread-18103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:39:28.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-25T20:39:28.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:39:29.552 [DEBUG] [Thread-18103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:39:29.552 [DEBUG] [Thread-18103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:39:29.602 [DEBUG] [Thread-18103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:39:29.602 [DEBUG] [Thread-18103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:39:29.617 [DEBUG] [Thread-18103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:39:29.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:39:29.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-25T20:39:29.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:39:29.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:39:29.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:39:29.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:39:29.653 [DEBUG] [Thread-18103] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:39:36.980 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:36.980 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:38.963 [DEBUG] [Thread-18105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:54.005 [DEBUG] [Thread-18106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:39:59.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:39:59.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:39:59.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-25T20:40:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 39, 25), 7.5, 61.37, 0.0, 17.01, 18.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:40:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:39:25
2025-12-25T20:40:00.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:40:00.713 [DEBUG] [Thread-18107] [transport.py] [_log()] starting thread (client mode): 0xb6bf5b40
2025-12-25T20:40:00.713 [DEBUG] [Thread-18107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:40:00.733 [DEBUG] [Thread-18107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:40:00.733 [INFO] [Thread-18107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] client lang: <none>
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] server lang: <none>
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] kex follows: False
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] Compression: none
2025-12-25T20:40:00.736 [DEBUG] [Thread-18107] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:40:00.743 [DEBUG] [Thread-18107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:40:00.744 [DEBUG] [Thread-18107] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:40:00.744 [DEBUG] [Thread-18107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:40:00.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:40:00.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:40:00.745 [DEBUG] [Thread-18107] [transport.py] [_log()] userauth is OK
2025-12-25T20:40:00.745 [DEBUG] [Thread-18107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:40:00.745 [DEBUG] [Thread-18107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:40:00.745 [DEBUG] [Thread-18107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:40:00.745 [DEBUG] [Thread-18107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:40:00.754 [INFO] [Thread-18107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:40:00.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:40:01.359 [DEBUG] [Thread-18107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:40:01.359 [DEBUG] [Thread-18107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:40:01.360 [DEBUG] [Thread-18107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:40:01.401 [DEBUG] [Thread-18107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:40:01.401 [DEBUG] [Thread-18107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:40:01.403 [DEBUG] [Thread-18107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:40:01.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:40:01.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:40:01.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:40:01.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:40:01.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:40:01.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:40:01.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:40:01.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:40:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:40:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.777490 -999.00  +18.20   7.35     64  +11.40 1 2 1 1 1     3    0 -19.44 -1012.26 ZNES. 7.2 7.3 205.4 13.7 19.2 -23.0 19.1 -22.6 18.8 -21.1 19.1 -22.0
2025-12-25T20:40:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:40:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:40:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.777490
2025-12-25T20:40:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:40:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:40:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:40:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:40:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:40:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:39:25', tmtdew=7.5, humidity=61.37, cloud=0.0, wind=17.01, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:39:58', seeing=3.69, atlas_timestamp='2025-12-25T18:39:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 2.8979999999999997, nan, nan, nan, nan, nan, nan, 2.1632499999999997, nan, 3.3259999999999996, nan, nan, nan, nan, nan, nan, nan, nan, 2.263749999999999, nan, nan, nan, nan, nan, nan, nan, 2.155000000000001, nan, nan, nan], zp_timestamp='2025-12-25T18:38:00')
2025-12-25T20:40:01.422 [DEBUG] [Thread-18107] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:40:01.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:40:01.505 [DEBUG] [Thread-18110] [transport.py] [_log()] starting thread (client mode): 0xb6bf6f20
2025-12-25T20:40:01.505 [DEBUG] [Thread-18110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:40:01.520 [DEBUG] [Thread-18110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:40:01.520 [INFO] [Thread-18110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] client lang: <none>
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] server lang: <none>
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] kex follows: False
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] Compression: none
2025-12-25T20:40:01.528 [DEBUG] [Thread-18110] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:40:01.588 [DEBUG] [Thread-18110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:40:01.588 [DEBUG] [Thread-18110] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:40:01.588 [DEBUG] [Thread-18110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:40:01.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:40:01.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:40:01.646 [DEBUG] [Thread-18110] [transport.py] [_log()] userauth is OK
2025-12-25T20:40:01.646 [DEBUG] [Thread-18110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:40:01.646 [DEBUG] [Thread-18110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:40:01.646 [DEBUG] [Thread-18110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:40:01.646 [DEBUG] [Thread-18110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:40:01.664 [INFO] [Thread-18110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:40:01.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-25T20:40:01.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:40:02.536 [DEBUG] [Thread-18110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:40:02.537 [DEBUG] [Thread-18110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:40:02.584 [DEBUG] [Thread-18110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:40:02.584 [DEBUG] [Thread-18110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:40:02.593 [DEBUG] [Thread-18110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:40:02.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:40:02.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:40:02.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-25T20:40:02.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:40:02.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:40:02.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:40:02.625 [DEBUG] [Thread-18110] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:40:09.027 [DEBUG] [Thread-18112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:40:24.067 [DEBUG] [Thread-18113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:40:24.703 [DEBUG] [Thread-18114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:40:32.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:40:32.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:40:32.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-25T20:40:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 40, 30), 7.45, 61.57, 0.0, 17.61, 17.92, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:40:33.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:40:30
2025-12-25T20:40:33.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:40:33.608 [DEBUG] [Thread-18115] [transport.py] [_log()] starting thread (client mode): 0xb6bb6260
2025-12-25T20:40:33.608 [DEBUG] [Thread-18115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:40:33.628 [DEBUG] [Thread-18115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:40:33.628 [INFO] [Thread-18115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:40:33.630 [DEBUG] [Thread-18115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] client lang: <none>
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] server lang: <none>
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] kex follows: False
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] Compression: none
2025-12-25T20:40:33.631 [DEBUG] [Thread-18115] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:40:33.648 [DEBUG] [Thread-18115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:40:33.648 [DEBUG] [Thread-18115] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:40:33.648 [DEBUG] [Thread-18115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:40:33.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:40:33.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:40:33.649 [DEBUG] [Thread-18115] [transport.py] [_log()] userauth is OK
2025-12-25T20:40:33.649 [DEBUG] [Thread-18115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:40:33.649 [DEBUG] [Thread-18115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:40:33.649 [DEBUG] [Thread-18115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:40:33.649 [DEBUG] [Thread-18115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:40:33.658 [INFO] [Thread-18115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:40:33.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:40:34.280 [DEBUG] [Thread-18115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:40:34.280 [DEBUG] [Thread-18115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:40:34.280 [DEBUG] [Thread-18115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:40:34.321 [DEBUG] [Thread-18115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:40:34.322 [DEBUG] [Thread-18115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:40:34.324 [DEBUG] [Thread-18115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:40:34.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:40:34.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:40:34.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:40:34.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:40:34.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:40:34.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:40:34.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:40:34.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:40:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:40:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.777837 -999.00  +18.20   7.90     64  +11.40 1 2 1 1 1     3    0 -20.21 -1030.58 ZNES. 6.1 7.9 193.0 12.6 19.1 -23.0 19.1 -22.3 18.8 -21.1 19.1 -22.0
2025-12-25T20:40:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:40:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:40:34.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.777837
2025-12-25T20:40:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:40:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:40:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:40:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:40:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-25T20:40:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:40:30', tmtdew=7.45, humidity=61.57, cloud=0.0, wind=17.61, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:40:30', seeing=3.69, atlas_timestamp='2025-12-25T18:40:05.117', atlas_cloud=2, atlas_rain=1, zp_data=[nan, nan, nan, 2.8979999999999997, nan, nan, nan, nan, nan, nan, 2.1632499999999997, nan, 3.3259999999999996, nan, nan, nan, nan, nan, nan, nan, nan, 2.263749999999999, nan, nan, nan, nan, nan, nan, nan, 2.155000000000001, nan, nan, nan], zp_timestamp='2025-12-25T18:38:00')
2025-12-25T20:40:34.343 [DEBUG] [Thread-18115] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:40:34.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:40:34.424 [DEBUG] [Thread-18118] [transport.py] [_log()] starting thread (client mode): 0xb6b7c490
2025-12-25T20:40:34.424 [DEBUG] [Thread-18118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:40:34.439 [DEBUG] [Thread-18118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:40:34.440 [INFO] [Thread-18118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] client lang: <none>
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] server lang: <none>
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] kex follows: False
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] Compression: none
2025-12-25T20:40:34.447 [DEBUG] [Thread-18118] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:40:34.503 [DEBUG] [Thread-18118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:40:34.503 [DEBUG] [Thread-18118] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:40:34.503 [DEBUG] [Thread-18118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:40:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:40:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:40:34.561 [DEBUG] [Thread-18118] [transport.py] [_log()] userauth is OK
2025-12-25T20:40:34.561 [DEBUG] [Thread-18118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:40:34.561 [DEBUG] [Thread-18118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:40:34.561 [DEBUG] [Thread-18118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:40:34.561 [DEBUG] [Thread-18118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:40:34.575 [INFO] [Thread-18118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:40:34.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:40:34.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:40:35.449 [DEBUG] [Thread-18118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:40:35.449 [DEBUG] [Thread-18118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:40:35.501 [DEBUG] [Thread-18118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:40:35.501 [DEBUG] [Thread-18118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:40:35.509 [DEBUG] [Thread-18118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:40:35.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:40:35.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-25T20:40:35.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-25T20:40:35.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:40:35.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:40:35.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:40:35.540 [DEBUG] [Thread-18118] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:40:37.181 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:40:37.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:40:39.090 [DEBUG] [Thread-18120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:40:54.133 [DEBUG] [Thread-18121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:41:05.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:41:05.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-25T20:41:06.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 41, 2), 7.42, 61.71, 0.0, 13.75, 17.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:41:06.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:41:02
2025-12-25T20:41:06.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:41:06.546 [DEBUG] [Thread-18122] [transport.py] [_log()] starting thread (client mode): 0xb6ba9840
2025-12-25T20:41:06.546 [DEBUG] [Thread-18122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:41:06.566 [DEBUG] [Thread-18122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:41:06.566 [INFO] [Thread-18122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:41:06.569 [DEBUG] [Thread-18122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] client lang: <none>
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] server lang: <none>
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] kex follows: False
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] Compression: none
2025-12-25T20:41:06.570 [DEBUG] [Thread-18122] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:41:06.585 [DEBUG] [Thread-18122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:41:06.585 [DEBUG] [Thread-18122] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:41:06.585 [DEBUG] [Thread-18122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:41:06.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:41:06.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:41:06.586 [DEBUG] [Thread-18122] [transport.py] [_log()] userauth is OK
2025-12-25T20:41:06.586 [DEBUG] [Thread-18122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:41:06.586 [DEBUG] [Thread-18122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:41:06.586 [DEBUG] [Thread-18122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:41:06.586 [DEBUG] [Thread-18122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:41:06.595 [INFO] [Thread-18122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:41:06.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:41:07.230 [DEBUG] [Thread-18122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:41:07.230 [DEBUG] [Thread-18122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:41:07.230 [DEBUG] [Thread-18122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:41:07.270 [DEBUG] [Thread-18122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:41:07.270 [DEBUG] [Thread-18122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:41:07.273 [DEBUG] [Thread-18122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:41:07.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:41:07.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:41:07.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:41:07.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:41:07.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:41:07.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:41:07.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:41:07.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.778184 -999.00  +18.20  15.88     64  +11.40 1 1 1 1 1     2    0 -25.44 -1203.17 ZNESW 14.6 15.9 217.4 18.9 19.1 -23.0 19.0 -22.5 18.8 -21.1 19.1 -22.0
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.778184
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:41:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:41:02', tmtdew=7.42, humidity=61.71, cloud=0.0, wind=13.75, temperature=17.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:41:02', seeing=4.34, atlas_timestamp='2025-12-25T18:40:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.8979999999999997, nan, nan, nan, nan, nan, nan, 2.1632499999999997, nan, 3.3259999999999996, nan, nan, nan, nan, nan, nan, nan, nan, 2.263749999999999, nan, nan, nan, nan, nan, nan, nan, 2.155000000000001, nan, nan, nan], zp_timestamp='2025-12-25T18:38:00')
2025-12-25T20:41:07.292 [DEBUG] [Thread-18122] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:41:07.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-25T20:41:07.372 [DEBUG] [Thread-18125] [transport.py] [_log()] starting thread (client mode): 0xb95b2e90
2025-12-25T20:41:07.373 [DEBUG] [Thread-18125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:41:07.388 [DEBUG] [Thread-18125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:41:07.388 [INFO] [Thread-18125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] client lang: <none>
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] server lang: <none>
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] kex follows: False
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] Compression: none
2025-12-25T20:41:07.395 [DEBUG] [Thread-18125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:41:07.455 [DEBUG] [Thread-18125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:41:07.455 [DEBUG] [Thread-18125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:41:07.455 [DEBUG] [Thread-18125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:41:07.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:41:07.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:41:07.512 [DEBUG] [Thread-18125] [transport.py] [_log()] userauth is OK
2025-12-25T20:41:07.512 [DEBUG] [Thread-18125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:41:07.512 [DEBUG] [Thread-18125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:41:07.512 [DEBUG] [Thread-18125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:41:07.512 [DEBUG] [Thread-18125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:41:07.526 [INFO] [Thread-18125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:41:07.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-25T20:41:07.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:41:08.427 [DEBUG] [Thread-18125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:41:08.427 [DEBUG] [Thread-18125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:41:08.474 [DEBUG] [Thread-18125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:41:08.474 [DEBUG] [Thread-18125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:41:08.483 [DEBUG] [Thread-18125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:41:08.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:41:08.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-25T20:41:08.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:41:08.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:41:08.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:41:08.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:41:08.515 [DEBUG] [Thread-18125] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:41:09.156 [DEBUG] [Thread-18127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:24.197 [DEBUG] [Thread-18128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:24.754 [DEBUG] [Thread-18129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:37.381 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:37.382 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:41:38.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:41:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:41:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 41, 34), 7.26, 62.22, 0.0, 20.36, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:41:39.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:41:34
2025-12-25T20:41:39.219 [DEBUG] [Thread-18130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:41:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:41:39.495 [DEBUG] [Thread-18131] [transport.py] [_log()] starting thread (client mode): 0xb6bb6800
2025-12-25T20:41:39.496 [DEBUG] [Thread-18131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:41:39.517 [DEBUG] [Thread-18131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:41:39.517 [INFO] [Thread-18131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:41:39.520 [DEBUG] [Thread-18131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:41:39.520 [DEBUG] [Thread-18131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] client lang: <none>
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] server lang: <none>
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] kex follows: False
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] Compression: none
2025-12-25T20:41:39.521 [DEBUG] [Thread-18131] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:41:39.536 [DEBUG] [Thread-18131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:41:39.536 [DEBUG] [Thread-18131] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:41:39.536 [DEBUG] [Thread-18131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:41:39.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:41:39.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:41:39.537 [DEBUG] [Thread-18131] [transport.py] [_log()] userauth is OK
2025-12-25T20:41:39.537 [DEBUG] [Thread-18131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:41:39.537 [DEBUG] [Thread-18131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:41:39.537 [DEBUG] [Thread-18131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:41:39.537 [DEBUG] [Thread-18131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:41:39.546 [INFO] [Thread-18131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:41:39.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:41:40.221 [DEBUG] [Thread-18131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:41:40.221 [DEBUG] [Thread-18131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:41:40.221 [DEBUG] [Thread-18131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:41:40.261 [DEBUG] [Thread-18131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:41:40.261 [DEBUG] [Thread-18131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:41:40.264 [DEBUG] [Thread-18131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:41:40.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:41:40.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:41:40.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:41:40.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:41:40.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:41:40.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:41:40.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:41:40.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:41:40.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:41:40.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.778532 -999.00  +18.10  12.54     65  +11.40 1 1 1 1 1     2    0 -23.60 -1126.93 ZNESW 8.2 12.5 204.6 21.2 19.1 -23.0 19.0 -22.6 18.8 -21.1 19.0 -22.0
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.778532
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:41:40.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:41:34', tmtdew=7.26, humidity=62.22, cloud=0.0, wind=20.36, 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-25T20:41:35', seeing=3.09, atlas_timestamp='2025-12-25T18:41:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.8979999999999997, nan, nan, nan, nan, nan, nan, 2.1632499999999997, nan, 3.3259999999999996, nan, nan, nan, nan, nan, nan, nan, nan, 2.263749999999999, nan, nan, nan, nan, nan, nan, nan, 2.155000000000001, nan, nan, nan], zp_timestamp='2025-12-25T18:38:00')
2025-12-25T20:41:40.285 [DEBUG] [Thread-18131] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:41:40.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:41:40.367 [DEBUG] [Thread-18134] [transport.py] [_log()] starting thread (client mode): 0xb6b21a80
2025-12-25T20:41:40.367 [DEBUG] [Thread-18134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:41:40.382 [DEBUG] [Thread-18134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:41:40.382 [INFO] [Thread-18134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:40.389 [DEBUG] [Thread-18134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] client lang: <none>
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] server lang: <none>
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] kex follows: False
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] Compression: none
2025-12-25T20:41:40.390 [DEBUG] [Thread-18134] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:41:40.446 [DEBUG] [Thread-18134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:41:40.446 [DEBUG] [Thread-18134] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:41:40.446 [DEBUG] [Thread-18134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:41:40.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:41:40.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:41:40.503 [DEBUG] [Thread-18134] [transport.py] [_log()] userauth is OK
2025-12-25T20:41:40.503 [DEBUG] [Thread-18134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:41:40.503 [DEBUG] [Thread-18134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:41:40.503 [DEBUG] [Thread-18134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:41:40.503 [DEBUG] [Thread-18134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:41:40.517 [INFO] [Thread-18134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:41:40.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-25T20:41:40.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:41:41.364 [DEBUG] [Thread-18134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:41:41.364 [DEBUG] [Thread-18134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:41:41.411 [DEBUG] [Thread-18134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:41:41.411 [DEBUG] [Thread-18134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:41:41.420 [DEBUG] [Thread-18134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:41:41.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:41:41.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-25T20:41:41.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-25T20:41:41.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:41:41.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:41:41.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:41:41.452 [DEBUG] [Thread-18134] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:41:54.243 [DEBUG] [Thread-18136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:09.277 [DEBUG] [Thread-18137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:11.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:42:11.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:42:11.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-25T20:42:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 42, 7), 7.26, 62.22, 0.0, 18.26, 17.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:42:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:42:07
2025-12-25T20:42:12.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:42:12.449 [DEBUG] [Thread-18138] [transport.py] [_log()] starting thread (client mode): 0xb6baba90
2025-12-25T20:42:12.449 [DEBUG] [Thread-18138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:42:12.471 [DEBUG] [Thread-18138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:42:12.471 [INFO] [Thread-18138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:42:12.474 [DEBUG] [Thread-18138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:42:12.474 [DEBUG] [Thread-18138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:42:12.474 [DEBUG] [Thread-18138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:42:12.474 [DEBUG] [Thread-18138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] client lang: <none>
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] server lang: <none>
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] kex follows: False
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] Compression: none
2025-12-25T20:42:12.475 [DEBUG] [Thread-18138] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:42:12.490 [DEBUG] [Thread-18138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:42:12.490 [DEBUG] [Thread-18138] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:42:12.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:42:12.491 [DEBUG] [Thread-18138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:42:12.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:42:12.491 [DEBUG] [Thread-18138] [transport.py] [_log()] userauth is OK
2025-12-25T20:42:12.491 [DEBUG] [Thread-18138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:42:12.491 [DEBUG] [Thread-18138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:42:12.491 [DEBUG] [Thread-18138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:42:12.491 [DEBUG] [Thread-18138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:42:12.504 [INFO] [Thread-18138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:42:12.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:42:13.172 [DEBUG] [Thread-18138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:42:13.172 [DEBUG] [Thread-18138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:42:13.172 [DEBUG] [Thread-18138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:42:13.214 [DEBUG] [Thread-18138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:42:13.214 [DEBUG] [Thread-18138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:42:13.216 [DEBUG] [Thread-18138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:42:13.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:42:13.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:42:13.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:42:13.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:42:13.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:42:13.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:42:13.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.778879 -999.00  +18.10  16.11     65  +11.50 1 1 1 1 1     2    0 -23.81 -1120.41 ZNESW 19.4 16.1 206.2 23.4 19.0 -23.1 18.9 -22.8 18.7 -21.2 18.9 -22.1
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.778879
2025-12-25T20:42:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:42:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:42:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:42:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:42:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:42:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:42:07', tmtdew=7.26, humidity=62.22, cloud=0.0, wind=18.26, 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-25T20:42:07', seeing=3.09, atlas_timestamp='2025-12-25T18:41:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, 2.8979999999999997, nan, nan, nan, nan, nan, nan, 2.1632499999999997, nan, 3.3259999999999996, nan, nan, nan, nan, nan, nan, nan, nan, 2.263749999999999, nan, nan, nan, nan, nan, nan, nan, 2.155000000000001, nan, nan, nan], zp_timestamp='2025-12-25T18:38:00')
2025-12-25T20:42:13.237 [DEBUG] [Thread-18138] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:42:13.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:42:13.318 [DEBUG] [Thread-18141] [transport.py] [_log()] starting thread (client mode): 0xb9559e70
2025-12-25T20:42:13.318 [DEBUG] [Thread-18141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:42:13.333 [DEBUG] [Thread-18141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:42:13.333 [INFO] [Thread-18141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] client lang: <none>
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] server lang: <none>
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] kex follows: False
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] Compression: none
2025-12-25T20:42:13.341 [DEBUG] [Thread-18141] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:42:13.398 [DEBUG] [Thread-18141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:42:13.398 [DEBUG] [Thread-18141] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:42:13.398 [DEBUG] [Thread-18141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:42:13.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:42:13.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:42:13.455 [DEBUG] [Thread-18141] [transport.py] [_log()] userauth is OK
2025-12-25T20:42:13.455 [DEBUG] [Thread-18141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:42:13.455 [DEBUG] [Thread-18141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:42:13.455 [DEBUG] [Thread-18141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:42:13.455 [DEBUG] [Thread-18141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:42:13.468 [INFO] [Thread-18141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:42:13.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:42:13.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:42:14.292 [DEBUG] [Thread-18141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:42:14.292 [DEBUG] [Thread-18141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:42:14.341 [DEBUG] [Thread-18141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:42:14.341 [DEBUG] [Thread-18141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:42:14.349 [DEBUG] [Thread-18141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:42:14.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:42:14.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:42:14.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-25T20:42:14.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:42:14.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:42:14.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:42:14.383 [DEBUG] [Thread-18141] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:42:24.311 [DEBUG] [Thread-18143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:24.811 [DEBUG] [Thread-18144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:37.583 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:37.584 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:39.360 [DEBUG] [Thread-18145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:42:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:42:44.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:42:44.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-25T20:42:45.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 42, 39), 7.22, 62.66, 0.0, 18.63, 17.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:42:45.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:42:39
2025-12-25T20:42:45.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:42:45.383 [DEBUG] [Thread-18146] [transport.py] [_log()] starting thread (client mode): 0xb6bb8310
2025-12-25T20:42:45.383 [DEBUG] [Thread-18146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:42:45.409 [DEBUG] [Thread-18146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:42:45.409 [INFO] [Thread-18146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:42:45.411 [DEBUG] [Thread-18146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:42:45.411 [DEBUG] [Thread-18146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:42:45.411 [DEBUG] [Thread-18146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:42:45.411 [DEBUG] [Thread-18146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:45.411 [DEBUG] [Thread-18146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] client lang: <none>
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] server lang: <none>
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] kex follows: False
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:42:45.412 [DEBUG] [Thread-18146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:42:45.413 [DEBUG] [Thread-18146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:42:45.413 [DEBUG] [Thread-18146] [transport.py] [_log()] Compression: none
2025-12-25T20:42:45.413 [DEBUG] [Thread-18146] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:42:45.431 [DEBUG] [Thread-18146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:42:45.431 [DEBUG] [Thread-18146] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:42:45.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:42:45.432 [DEBUG] [Thread-18146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:42:45.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:42:45.434 [DEBUG] [Thread-18146] [transport.py] [_log()] userauth is OK
2025-12-25T20:42:45.434 [DEBUG] [Thread-18146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:42:45.434 [DEBUG] [Thread-18146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:42:45.434 [DEBUG] [Thread-18146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:42:45.434 [DEBUG] [Thread-18146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:42:45.459 [INFO] [Thread-18146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:42:45.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:42:46.067 [DEBUG] [Thread-18146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:42:46.067 [DEBUG] [Thread-18146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:42:46.068 [DEBUG] [Thread-18146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:42:46.108 [DEBUG] [Thread-18146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:42:46.108 [DEBUG] [Thread-18146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:42:46.112 [DEBUG] [Thread-18146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:42:46.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:42:46.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:42:46.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:42:46.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:42:46.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:42:46.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:42:46.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:42:46.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:42:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:42:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.779573 -999.00  +17.90  11.33     66  +11.50 1 1 1 1 1     2    0 -25.11 -1148.18 ZNESW 13.8 11.3 233.4 22.7 18.9 -23.0 18.9 -22.7 18.7 -20.8 18.9 -21.8
2025-12-25T20:42:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:42:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:42:46.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.779573
2025-12-25T20:42:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:42:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:42:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:42:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:42:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:42:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:42:39', tmtdew=7.22, humidity=62.66, cloud=0.0, wind=18.63, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:42:39', seeing=3.09, atlas_timestamp='2025-12-25T18:42:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.12374999999999936, 0.08425000000000082, 0.1662499999999998, 0.1014999999999997, 0.15549999999999997, 0.16525000000000034, 0.14250000000000007, 0.1797500000000003, 0.15199999999999925, 0.11500000000000021, 0.1437500000000007, 0.06799999999999962, 0.16799999999999926, 0.17724999999999902, 0.10599999999999987, 0.1429999999999989, 0.13625000000000043, 0.15199999999999925, 0.11799999999999855, 0.07774999999999821, 0.09399999999999942, 0.1717499999999994, 0.1462500000000002, 0.19824999999999982, 0.10799999999999876, 0.12899999999999956, 0.19674999999999976, 0.16749999999999865, 0.19700000000000095, 0.13150000000000084, 0.22900000000000098, 0.1545000000000023, 0.12524999999999942], zp_timestamp='2025-12-25T18:41:00')
2025-12-25T20:42:46.138 [DEBUG] [Thread-18146] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:42:46.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-25T20:42:46.242 [DEBUG] [Thread-18149] [transport.py] [_log()] starting thread (client mode): 0xb6bb9900
2025-12-25T20:42:46.242 [DEBUG] [Thread-18149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:42:46.256 [DEBUG] [Thread-18149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:42:46.256 [INFO] [Thread-18149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:42:46.264 [DEBUG] [Thread-18149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:42:46.264 [DEBUG] [Thread-18149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:42:46.264 [DEBUG] [Thread-18149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:42:46.264 [DEBUG] [Thread-18149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:46.264 [DEBUG] [Thread-18149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] client lang: <none>
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] server lang: <none>
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] kex follows: False
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] Compression: none
2025-12-25T20:42:46.265 [DEBUG] [Thread-18149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:42:46.324 [DEBUG] [Thread-18149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:42:46.324 [DEBUG] [Thread-18149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:42:46.325 [DEBUG] [Thread-18149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:42:46.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:42:46.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:42:46.383 [DEBUG] [Thread-18149] [transport.py] [_log()] userauth is OK
2025-12-25T20:42:46.383 [DEBUG] [Thread-18149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:42:46.384 [DEBUG] [Thread-18149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:42:46.384 [DEBUG] [Thread-18149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:42:46.384 [DEBUG] [Thread-18149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:42:46.404 [INFO] [Thread-18149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:42:46.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:42:46.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:42:47.276 [DEBUG] [Thread-18149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:42:47.277 [DEBUG] [Thread-18149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:42:47.324 [DEBUG] [Thread-18149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:42:47.324 [DEBUG] [Thread-18149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:42:47.333 [DEBUG] [Thread-18149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:42:47.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:42:47.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-25T20:42: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') -> 00000000
2025-12-25T20:42:47.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:42:47.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:42:47.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:42:47.364 [DEBUG] [Thread-18149] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:42:54.388 [DEBUG] [Thread-18151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:09.441 [DEBUG] [Thread-18152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:17.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:43:17.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:43:17.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:43:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 43, 11), 7.21, 62.71, 0.0, 20.49, 17.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:43:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:43:11
2025-12-25T20:43:18.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:43:18.373 [DEBUG] [Thread-18153] [transport.py] [_log()] starting thread (client mode): 0xb6bb9660
2025-12-25T20:43:18.374 [DEBUG] [Thread-18153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:43:18.387 [DEBUG] [Thread-18153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:43:18.387 [INFO] [Thread-18153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] client lang: <none>
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] server lang: <none>
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] kex follows: False
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] Compression: none
2025-12-25T20:43:18.390 [DEBUG] [Thread-18153] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:43:18.399 [DEBUG] [Thread-18153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:43:18.399 [DEBUG] [Thread-18153] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:43:18.399 [DEBUG] [Thread-18153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:43:18.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:43:18.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:43:18.401 [DEBUG] [Thread-18153] [transport.py] [_log()] userauth is OK
2025-12-25T20:43:18.401 [DEBUG] [Thread-18153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:43:18.401 [DEBUG] [Thread-18153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:43:18.401 [DEBUG] [Thread-18153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:43:18.401 [DEBUG] [Thread-18153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:43:18.416 [INFO] [Thread-18153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:43:18.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:43:18.999 [DEBUG] [Thread-18153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:43:19.000 [DEBUG] [Thread-18153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:43:19.000 [DEBUG] [Thread-18153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:43:19.041 [DEBUG] [Thread-18153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:43:19.041 [DEBUG] [Thread-18153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:43:19.044 [DEBUG] [Thread-18153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:43:19.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:43:19.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:43:19.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:43:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:43:19.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:43:19.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:43:19.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:43:19.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:43:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:43:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.779921 -999.00  +17.90  13.30     66  +11.50 1 1 1 1 1     1    0 -28.62 -1267.17 ZNESW 9.7 13.3 242.0 23.0 18.9 -22.7 18.9 -22.3 18.6 -20.7 18.9 -21.9
2025-12-25T20:43:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:43:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:43:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.779921
2025-12-25T20:43:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:43:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:43:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:43:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:43:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:43:19.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:43:11', tmtdew=7.21, humidity=62.71, cloud=0.0, wind=20.49, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:43:11', seeing=3.09, atlas_timestamp='2025-12-25T18:43:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[0.12374999999999936, 0.08425000000000082, 0.1662499999999998, 0.1014999999999997, 0.15549999999999997, 0.16525000000000034, 0.14250000000000007, 0.1797500000000003, 0.15199999999999925, 0.11500000000000021, 0.1437500000000007, 0.06799999999999962, 0.16799999999999926, 0.17724999999999902, 0.10599999999999987, 0.1429999999999989, 0.13625000000000043, 0.15199999999999925, 0.11799999999999855, 0.07774999999999821, 0.09399999999999942, 0.1717499999999994, 0.1462500000000002, 0.19824999999999982, 0.10799999999999876, 0.12899999999999956, 0.19674999999999976, 0.16749999999999865, 0.19700000000000095, 0.13150000000000084, 0.22900000000000098, 0.1545000000000023, 0.12524999999999942], zp_timestamp='2025-12-25T18:41:00')
2025-12-25T20:43:19.070 [DEBUG] [Thread-18153] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:43:19.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:43:19.163 [DEBUG] [Thread-18156] [transport.py] [_log()] starting thread (client mode): 0xb6b238e0
2025-12-25T20:43:19.163 [DEBUG] [Thread-18156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:43:19.178 [DEBUG] [Thread-18156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:43:19.178 [INFO] [Thread-18156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:43:19.186 [DEBUG] [Thread-18156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:43:19.186 [DEBUG] [Thread-18156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:43:19.186 [DEBUG] [Thread-18156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:43:19.186 [DEBUG] [Thread-18156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:19.186 [DEBUG] [Thread-18156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:19.186 [DEBUG] [Thread-18156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] client lang: <none>
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] server lang: <none>
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] kex follows: False
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] Compression: none
2025-12-25T20:43:19.187 [DEBUG] [Thread-18156] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:43:19.247 [DEBUG] [Thread-18156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:43:19.248 [DEBUG] [Thread-18156] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:43:19.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:43:19.249 [DEBUG] [Thread-18156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:43:19.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:43:19.303 [DEBUG] [Thread-18156] [transport.py] [_log()] userauth is OK
2025-12-25T20:43:19.303 [DEBUG] [Thread-18156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:43:19.303 [DEBUG] [Thread-18156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:43:19.303 [DEBUG] [Thread-18156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:43:19.303 [DEBUG] [Thread-18156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:43:19.322 [INFO] [Thread-18156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:43: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-25T20:43:19.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:43:20.150 [DEBUG] [Thread-18156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:43:20.158 [DEBUG] [Thread-18156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:43:20.198 [DEBUG] [Thread-18156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:43:20.198 [DEBUG] [Thread-18156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:43:20.207 [DEBUG] [Thread-18156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:43:20.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:43:20.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-25T20:43:20.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:43:20.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:43:20.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:43:20.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:43:20.243 [DEBUG] [Thread-18156] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:43:24.475 [DEBUG] [Thread-18158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:24.866 [DEBUG] [Thread-18159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:37.785 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:37.786 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:39.533 [DEBUG] [Thread-18160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:43:50.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:43:50.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:43:50.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-25T20:43:50.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 43, 43), 7.15, 62.74, 0.0, 21.55, 17.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:43:50.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:43:43
2025-12-25T20:43:51.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:43:51.207 [DEBUG] [Thread-18161] [transport.py] [_log()] starting thread (client mode): 0xb6bb8100
2025-12-25T20:43:51.208 [DEBUG] [Thread-18161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:43:51.218 [DEBUG] [Thread-18161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:43:51.218 [INFO] [Thread-18161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:43:51.220 [DEBUG] [Thread-18161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:43:51.220 [DEBUG] [Thread-18161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] client lang: <none>
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] server lang: <none>
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] kex follows: False
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] Compression: none
2025-12-25T20:43:51.221 [DEBUG] [Thread-18161] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:43:51.231 [DEBUG] [Thread-18161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:43:51.232 [DEBUG] [Thread-18161] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:43:51.232 [DEBUG] [Thread-18161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:43:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:43:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:43:51.233 [DEBUG] [Thread-18161] [transport.py] [_log()] userauth is OK
2025-12-25T20:43:51.233 [DEBUG] [Thread-18161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:43:51.233 [DEBUG] [Thread-18161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:43:51.233 [DEBUG] [Thread-18161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:43:51.233 [DEBUG] [Thread-18161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:43:51.246 [INFO] [Thread-18161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:43:51.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:43:51.864 [DEBUG] [Thread-18161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:43:51.864 [DEBUG] [Thread-18161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:43:51.864 [DEBUG] [Thread-18161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:43:51.905 [DEBUG] [Thread-18161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:43:51.905 [DEBUG] [Thread-18161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:43:51.909 [DEBUG] [Thread-18161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:43:51.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:43:51.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:43:51.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:43:51.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:43:51.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:43:51.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:43:51.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:43:51.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:43:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:43:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.780268 -999.00  +17.90  12.57     66  +11.50 1 1 1 1 1     1    0 -25.49 -1167.65 ZNESW 12.9 12.6 203.8 20.3 18.9 -22.6 18.8 -22.2 18.5 -20.7 18.8 -21.6
2025-12-25T20:43:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:43:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:43:51.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.780268
2025-12-25T20:43:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:43:51.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:43:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:43:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:43:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:43:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:43:43', tmtdew=7.15, humidity=62.74, cloud=0.0, wind=21.55, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:43:43', seeing=3.09, atlas_timestamp='2025-12-25T18:43:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.12374999999999936, 0.08425000000000082, 0.1662499999999998, 0.1014999999999997, 0.15549999999999997, 0.16525000000000034, 0.14250000000000007, 0.1797500000000003, 0.15199999999999925, 0.11500000000000021, 0.1437500000000007, 0.06799999999999962, 0.16799999999999926, 0.17724999999999902, 0.10599999999999987, 0.1429999999999989, 0.13625000000000043, 0.15199999999999925, 0.11799999999999855, 0.07774999999999821, 0.09399999999999942, 0.1717499999999994, 0.1462500000000002, 0.19824999999999982, 0.10799999999999876, 0.12899999999999956, 0.19674999999999976, 0.16749999999999865, 0.19700000000000095, 0.13150000000000084, 0.22900000000000098, 0.1545000000000023, 0.12524999999999942], zp_timestamp='2025-12-25T18:41:00')
2025-12-25T20:43:51.935 [DEBUG] [Thread-18161] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:43:52.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-25T20:43:52.032 [DEBUG] [Thread-18164] [transport.py] [_log()] starting thread (client mode): 0xb6bb8910
2025-12-25T20:43:52.032 [DEBUG] [Thread-18164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:43:52.050 [DEBUG] [Thread-18164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:43:52.050 [INFO] [Thread-18164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:43:52.058 [DEBUG] [Thread-18164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:43:52.058 [DEBUG] [Thread-18164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:43:52.058 [DEBUG] [Thread-18164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:43:52.058 [DEBUG] [Thread-18164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] client lang: <none>
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] server lang: <none>
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] kex follows: False
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] Compression: none
2025-12-25T20:43:52.059 [DEBUG] [Thread-18164] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:43:52.118 [DEBUG] [Thread-18164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:43:52.119 [DEBUG] [Thread-18164] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:43:52.120 [DEBUG] [Thread-18164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:43:52.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:43:52.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:43:52.175 [DEBUG] [Thread-18164] [transport.py] [_log()] userauth is OK
2025-12-25T20:43:52.175 [DEBUG] [Thread-18164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:43:52.175 [DEBUG] [Thread-18164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:43:52.175 [DEBUG] [Thread-18164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:43:52.175 [DEBUG] [Thread-18164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:43:52.195 [INFO] [Thread-18164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:43:52.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-25T20:43:52.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:43:53.034 [DEBUG] [Thread-18164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:43:53.034 [DEBUG] [Thread-18164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:43:53.082 [DEBUG] [Thread-18164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:43:53.082 [DEBUG] [Thread-18164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:43:53.091 [DEBUG] [Thread-18164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:43:53.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:43:53.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:43:53.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-25T20:43:53.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:43:53.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:43:53.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:43:53.128 [DEBUG] [Thread-18164] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:43:54.565 [DEBUG] [Thread-18166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:09.612 [DEBUG] [Thread-18167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:44:23.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:44:23.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-25T20:44:23.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 44, 15), 7.11, 62.94, 0.0, 20.06, 17.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:44:23.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:44:15
2025-12-25T20:44:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:44:24.119 [DEBUG] [Thread-18168] [transport.py] [_log()] starting thread (client mode): 0xb6bc3340
2025-12-25T20:44:24.119 [DEBUG] [Thread-18168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:44:24.139 [DEBUG] [Thread-18168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:44:24.139 [INFO] [Thread-18168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:44:24.142 [DEBUG] [Thread-18168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] client lang: <none>
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] server lang: <none>
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] kex follows: False
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] Compression: none
2025-12-25T20:44:24.143 [DEBUG] [Thread-18168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:44:24.163 [DEBUG] [Thread-18168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:44:24.163 [DEBUG] [Thread-18168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:44:24.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:44:24.164 [DEBUG] [Thread-18168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:44:24.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:44:24.166 [DEBUG] [Thread-18168] [transport.py] [_log()] userauth is OK
2025-12-25T20:44:24.166 [DEBUG] [Thread-18168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:44:24.166 [DEBUG] [Thread-18168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:44:24.167 [DEBUG] [Thread-18168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:44:24.167 [DEBUG] [Thread-18168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:44:24.192 [INFO] [Thread-18168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:44:24.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:44:24.643 [DEBUG] [Thread-18170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:24.841 [DEBUG] [Thread-18168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:44:24.841 [DEBUG] [Thread-18168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:44:24.842 [DEBUG] [Thread-18168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:44:24.882 [DEBUG] [Thread-18168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:44:24.882 [DEBUG] [Thread-18168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:44:24.884 [DEBUG] [Thread-18168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:44:24.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:44:24.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:44:24.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:44:24.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:44:24.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:44:24.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:44:24.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.780268 -999.00  +17.90  12.57     66  +11.50 1 1 1 1 1     1    0 -25.49 -1167.65 ZNESW 12.9 12.6 203.8 20.3 18.9 -22.6 18.8 -22.2 18.5 -20.7 18.8 -21.6
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.780268
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:44:24.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:44:15', tmtdew=7.11, humidity=62.94, cloud=0.0, wind=20.06, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:44:16', seeing=3.09, atlas_timestamp='2025-12-25T18:43:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.12374999999999936, 0.08425000000000082, 0.1662499999999998, 0.1014999999999997, 0.15549999999999997, 0.16525000000000034, 0.14250000000000007, 0.1797500000000003, 0.15199999999999925, 0.11500000000000021, 0.1437500000000007, 0.06799999999999962, 0.16799999999999926, 0.17724999999999902, 0.10599999999999987, 0.1429999999999989, 0.13625000000000043, 0.15199999999999925, 0.11799999999999855, 0.07774999999999821, 0.09399999999999942, 0.1717499999999994, 0.1462500000000002, 0.19824999999999982, 0.10799999999999876, 0.12899999999999956, 0.19674999999999976, 0.16749999999999865, 0.19700000000000095, 0.13150000000000084, 0.22900000000000098, 0.1545000000000023, 0.12524999999999942], zp_timestamp='2025-12-25T18:41:00')
2025-12-25T20:44:24.898 [DEBUG] [Thread-18168] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:44:24.931 [DEBUG] [Thread-18172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44: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-25T20:44:24.979 [DEBUG] [Thread-18173] [transport.py] [_log()] starting thread (client mode): 0xb6bb9b10
2025-12-25T20:44:24.979 [DEBUG] [Thread-18173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:44:24.994 [DEBUG] [Thread-18173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:44:24.994 [INFO] [Thread-18173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:44:25.003 [DEBUG] [Thread-18173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:44:25.003 [DEBUG] [Thread-18173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:44:25.003 [DEBUG] [Thread-18173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:44:25.003 [DEBUG] [Thread-18173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:25.003 [DEBUG] [Thread-18173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] client lang: <none>
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] server lang: <none>
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] kex follows: False
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] Compression: none
2025-12-25T20:44:25.004 [DEBUG] [Thread-18173] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:44:25.062 [DEBUG] [Thread-18173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:44:25.063 [DEBUG] [Thread-18173] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:44:25.063 [DEBUG] [Thread-18173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:44:25.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:44:25.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:44:25.118 [DEBUG] [Thread-18173] [transport.py] [_log()] userauth is OK
2025-12-25T20:44:25.118 [DEBUG] [Thread-18173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:44:25.118 [DEBUG] [Thread-18173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:44:25.118 [DEBUG] [Thread-18173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:44:25.118 [DEBUG] [Thread-18173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:44:25.138 [INFO] [Thread-18173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:44:25.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-25T20:44:25.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:44:25.965 [DEBUG] [Thread-18173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:44:25.965 [DEBUG] [Thread-18173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:44:26.013 [DEBUG] [Thread-18173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:44:26.013 [DEBUG] [Thread-18173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:44:26.023 [DEBUG] [Thread-18173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:44:26.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:44:26.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-25T20:44:26.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-25T20:44:26.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:44:26.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:44:26.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:44:26.060 [DEBUG] [Thread-18173] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:44:37.989 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:37.990 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:39.677 [DEBUG] [Thread-18175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:54.721 [DEBUG] [Thread-18176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:44:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:44:56.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:44:56.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:44:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 44, 48), 7.07, 63.07, 0.0, 18.74, 17.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:44:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:44:48
2025-12-25T20:44:56.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:44:57.039 [DEBUG] [Thread-18177] [transport.py] [_log()] starting thread (client mode): 0xb6b21570
2025-12-25T20:44:57.039 [DEBUG] [Thread-18177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:44:57.059 [DEBUG] [Thread-18177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:44:57.059 [INFO] [Thread-18177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:44:57.062 [DEBUG] [Thread-18177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:44:57.062 [DEBUG] [Thread-18177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:44:57.062 [DEBUG] [Thread-18177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] client lang: <none>
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] server lang: <none>
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] kex follows: False
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] Compression: none
2025-12-25T20:44:57.063 [DEBUG] [Thread-18177] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:44:57.082 [DEBUG] [Thread-18177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:44:57.083 [DEBUG] [Thread-18177] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:44:57.083 [DEBUG] [Thread-18177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:44:57.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:44:57.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:44:57.125 [DEBUG] [Thread-18177] [transport.py] [_log()] userauth is OK
2025-12-25T20:44:57.125 [DEBUG] [Thread-18177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:44:57.125 [DEBUG] [Thread-18177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:44:57.126 [DEBUG] [Thread-18177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:44:57.126 [DEBUG] [Thread-18177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:44:57.163 [INFO] [Thread-18177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:44:57.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:44:57.836 [DEBUG] [Thread-18177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:44:57.837 [DEBUG] [Thread-18177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:44:57.837 [DEBUG] [Thread-18177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:44:57.878 [DEBUG] [Thread-18177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:44:57.878 [DEBUG] [Thread-18177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:44:57.881 [DEBUG] [Thread-18177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:44:57.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:44:57.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:44:57.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:44:57.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:44:57.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:44:57.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:44:57.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:44:57.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:44:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:44:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.780615 -999.00  +17.90   8.01     66  +11.50 1 1 1 1 1     1    0 -23.92 -1099.54 ZNESW 8.6 8.0 169.3 19.0 18.8 -22.8 18.8 -22.2 18.5 -20.9 18.8 -21.9
2025-12-25T20:44:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:44:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:44:57.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.780615
2025-12-25T20:44:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:44:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:44:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:44:57.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:44:57.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:44:57.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:44:48', tmtdew=7.07, humidity=63.07, cloud=0.0, wind=18.74, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:44:48', seeing=3.09, atlas_timestamp='2025-12-25T18:44:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.12374999999999936, 0.08425000000000082, 0.1662499999999998, 0.1014999999999997, 0.15549999999999997, 0.16525000000000034, 0.14250000000000007, 0.1797500000000003, 0.15199999999999925, 0.11500000000000021, 0.1437500000000007, 0.06799999999999962, 0.16799999999999926, 0.17724999999999902, 0.10599999999999987, 0.1429999999999989, 0.13625000000000043, 0.15199999999999925, 0.11799999999999855, 0.07774999999999821, 0.09399999999999942, 0.1717499999999994, 0.1462500000000002, 0.19824999999999982, 0.10799999999999876, 0.12899999999999956, 0.19674999999999976, 0.16749999999999865, 0.19700000000000095, 0.13150000000000084, 0.22900000000000098, 0.1545000000000023, 0.12524999999999942], zp_timestamp='2025-12-25T18:41:00')
2025-12-25T20:44:57.908 [DEBUG] [Thread-18177] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:44:57.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-25T20:44:58.001 [DEBUG] [Thread-18180] [transport.py] [_log()] starting thread (client mode): 0xb95b2dd0
2025-12-25T20:44:58.001 [DEBUG] [Thread-18180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:44:58.017 [DEBUG] [Thread-18180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:44:58.018 [INFO] [Thread-18180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:44:58.028 [DEBUG] [Thread-18180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:44:58.028 [DEBUG] [Thread-18180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:44:58.028 [DEBUG] [Thread-18180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:44:58.028 [DEBUG] [Thread-18180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:58.028 [DEBUG] [Thread-18180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:44:58.028 [DEBUG] [Thread-18180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] client lang: <none>
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] server lang: <none>
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] kex follows: False
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] Compression: none
2025-12-25T20:44:58.029 [DEBUG] [Thread-18180] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:44:58.085 [DEBUG] [Thread-18180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:44:58.086 [DEBUG] [Thread-18180] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:44:58.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:44:58.087 [DEBUG] [Thread-18180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:44:58.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:44:58.142 [DEBUG] [Thread-18180] [transport.py] [_log()] userauth is OK
2025-12-25T20:44:58.142 [DEBUG] [Thread-18180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:44:58.142 [DEBUG] [Thread-18180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:44:58.143 [DEBUG] [Thread-18180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:44:58.143 [DEBUG] [Thread-18180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:44:58.162 [INFO] [Thread-18180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:44:58.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-25T20:44:58.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:44:58.996 [DEBUG] [Thread-18180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:44:58.996 [DEBUG] [Thread-18180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:44:59.044 [DEBUG] [Thread-18180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:44:59.044 [DEBUG] [Thread-18180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:44:59.053 [DEBUG] [Thread-18180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:44:59.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:44:59.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:44:59.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-25T20:44:59.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:44:59.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:44:59.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:44:59.090 [DEBUG] [Thread-18180] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:45:09.758 [DEBUG] [Thread-18182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:24.813 [DEBUG] [Thread-18183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:24.983 [DEBUG] [Thread-18184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:29.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:45:29.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:45:29.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-25T20:45:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 45, 20), 7.09, 63.02, 0.0, 20.93, 17.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:45:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:45:20
2025-12-25T20:45:29.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:45:30.094 [DEBUG] [Thread-18185] [transport.py] [_log()] starting thread (client mode): 0xb6b20220
2025-12-25T20:45:30.095 [DEBUG] [Thread-18185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:45:30.115 [DEBUG] [Thread-18185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:45:30.115 [INFO] [Thread-18185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] client lang: <none>
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] server lang: <none>
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] kex follows: False
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:45:30.118 [DEBUG] [Thread-18185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:45:30.119 [DEBUG] [Thread-18185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:45:30.119 [DEBUG] [Thread-18185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:45:30.119 [DEBUG] [Thread-18185] [transport.py] [_log()] Compression: none
2025-12-25T20:45:30.119 [DEBUG] [Thread-18185] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:45:30.136 [DEBUG] [Thread-18185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:45:30.137 [DEBUG] [Thread-18185] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:45:30.137 [DEBUG] [Thread-18185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:45:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:45:30.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:45:30.137 [DEBUG] [Thread-18185] [transport.py] [_log()] userauth is OK
2025-12-25T20:45:30.137 [DEBUG] [Thread-18185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:45:30.137 [DEBUG] [Thread-18185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:45:30.138 [DEBUG] [Thread-18185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:45:30.138 [DEBUG] [Thread-18185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:45:30.147 [INFO] [Thread-18185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:45:30.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:45:30.800 [DEBUG] [Thread-18185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:45:30.800 [DEBUG] [Thread-18185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:45:30.800 [DEBUG] [Thread-18185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:45:30.841 [DEBUG] [Thread-18185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:45:30.841 [DEBUG] [Thread-18185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:45:30.844 [DEBUG] [Thread-18185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:45:30.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:45:30.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:45:30.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:45:30.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:45:30.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:45:30.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:45:30.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:45:30.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:45:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:45:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.780962 -999.00  +17.90  12.70     66  +11.50 1 1 1 1 1     1    0 -25.69 -1175.20 ZNESW 14.0 12.7 228.4 24.1 18.8 -22.8 18.7 -22.5 18.5 -20.8 18.8 -21.8
2025-12-25T20:45:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:45:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:45:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.780962
2025-12-25T20:45:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:45:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:45:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:45:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:45:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:45:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:45:20', tmtdew=7.09, humidity=63.02, cloud=0.0, wind=20.93, temperature=17.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:45:21', seeing=3.09, atlas_timestamp='2025-12-25T18:44:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:44:00')
2025-12-25T20:45:30.869 [DEBUG] [Thread-18185] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:45:30.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-25T20:45:30.970 [DEBUG] [Thread-18188] [transport.py] [_log()] starting thread (client mode): 0xb6b23670
2025-12-25T20:45:30.970 [DEBUG] [Thread-18188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:45:30.985 [DEBUG] [Thread-18188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:45:30.985 [INFO] [Thread-18188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:45:30.992 [DEBUG] [Thread-18188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:45:30.992 [DEBUG] [Thread-18188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:45:30.992 [DEBUG] [Thread-18188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] client lang: <none>
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] server lang: <none>
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] kex follows: False
2025-12-25T20:45:30.993 [DEBUG] [Thread-18188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:45:30.994 [DEBUG] [Thread-18188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:45:30.994 [DEBUG] [Thread-18188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:45:30.994 [DEBUG] [Thread-18188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:45:30.994 [DEBUG] [Thread-18188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:45:30.994 [DEBUG] [Thread-18188] [transport.py] [_log()] Compression: none
2025-12-25T20:45:30.994 [DEBUG] [Thread-18188] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:45:31.048 [DEBUG] [Thread-18188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:45:31.049 [DEBUG] [Thread-18188] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:45:31.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:45:31.050 [DEBUG] [Thread-18188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:45:31.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:45:31.105 [DEBUG] [Thread-18188] [transport.py] [_log()] userauth is OK
2025-12-25T20:45:31.105 [DEBUG] [Thread-18188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:45:31.105 [DEBUG] [Thread-18188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:45:31.105 [DEBUG] [Thread-18188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:45:31.105 [DEBUG] [Thread-18188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:45:31.127 [INFO] [Thread-18188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:45:31.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-25T20:45:31.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:45:31.968 [DEBUG] [Thread-18188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:45:31.968 [DEBUG] [Thread-18188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:45:32.016 [DEBUG] [Thread-18188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:45:32.016 [DEBUG] [Thread-18188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:45:32.025 [DEBUG] [Thread-18188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:45:32.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:45:32.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:45:32.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-25T20:45:32.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:45:32.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:45:32.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:45:32.059 [DEBUG] [Thread-18188] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:45:33.314 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:38.193 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:38.195 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:39.851 [DEBUG] [Thread-18190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:45:54.902 [DEBUG] [Thread-18191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:02.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:46:02.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:46:02.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-25T20:46:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 45, 52), 7.07, 63.09, 0.0, 18.44, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:46:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:45:52
2025-12-25T20:46:02.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:46:03.053 [DEBUG] [Thread-18192] [transport.py] [_log()] starting thread (client mode): 0xb6b21d20
2025-12-25T20:46:03.054 [DEBUG] [Thread-18192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:46:03.074 [DEBUG] [Thread-18192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:46:03.075 [INFO] [Thread-18192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:46:03.076 [DEBUG] [Thread-18192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:46:03.076 [DEBUG] [Thread-18192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:46:03.076 [DEBUG] [Thread-18192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:46:03.076 [DEBUG] [Thread-18192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] client lang: <none>
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] server lang: <none>
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] kex follows: False
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] Compression: none
2025-12-25T20:46:03.077 [DEBUG] [Thread-18192] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:46:03.088 [DEBUG] [Thread-18192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:46:03.088 [DEBUG] [Thread-18192] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:46:03.088 [DEBUG] [Thread-18192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:46:03.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:46:03.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:46:03.089 [DEBUG] [Thread-18192] [transport.py] [_log()] userauth is OK
2025-12-25T20:46:03.089 [DEBUG] [Thread-18192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:46:03.089 [DEBUG] [Thread-18192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:46:03.089 [DEBUG] [Thread-18192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:46:03.089 [DEBUG] [Thread-18192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:46:03.101 [INFO] [Thread-18192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:46:03.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:46:03.723 [DEBUG] [Thread-18192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:46:03.723 [DEBUG] [Thread-18192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:46:03.723 [DEBUG] [Thread-18192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:46:03.763 [DEBUG] [Thread-18192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:46:03.763 [DEBUG] [Thread-18192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:46:03.766 [DEBUG] [Thread-18192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:46:03.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:46:03.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:46:03.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:46:03.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:46:03.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:46:03.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:46:03.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.781309 -999.00  +17.90  15.15     66  +11.60 1 1 1 1 1     1    0 -23.50 -1075.49 ZNESW 16.4 15.2 206.2 23.4 18.8 -22.7 18.7 -22.5 18.4 -20.9 18.8 -21.7
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.781309
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:46:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:45:52', tmtdew=7.07, humidity=63.09, cloud=0.0, wind=18.44, 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-25T20:45:53', seeing=3.58, atlas_timestamp='2025-12-25T18:45:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:44:00')
2025-12-25T20:46:03.783 [DEBUG] [Thread-18192] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:46:03.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-25T20:46:03.867 [DEBUG] [Thread-18195] [transport.py] [_log()] starting thread (client mode): 0xb6b63760
2025-12-25T20:46:03.867 [DEBUG] [Thread-18195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:46:03.882 [DEBUG] [Thread-18195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:46:03.882 [INFO] [Thread-18195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] client lang: <none>
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] server lang: <none>
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] kex follows: False
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] Compression: none
2025-12-25T20:46:03.890 [DEBUG] [Thread-18195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:46:03.947 [DEBUG] [Thread-18195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:46:03.947 [DEBUG] [Thread-18195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:46:03.947 [DEBUG] [Thread-18195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:46:03.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:46:03.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:46:04.004 [DEBUG] [Thread-18195] [transport.py] [_log()] userauth is OK
2025-12-25T20:46:04.004 [DEBUG] [Thread-18195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:46:04.004 [DEBUG] [Thread-18195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:46:04.004 [DEBUG] [Thread-18195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:46:04.004 [DEBUG] [Thread-18195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:46:04.018 [INFO] [Thread-18195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:46:04.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-25T20:46:04.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:46:04.857 [DEBUG] [Thread-18195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:46:04.858 [DEBUG] [Thread-18195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:46:04.905 [DEBUG] [Thread-18195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:46:04.905 [DEBUG] [Thread-18195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:46:04.913 [DEBUG] [Thread-18195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:46:04.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:46:04.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-25T20:46:04.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-25T20:46:04.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:46:04.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:46:04.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:46:04.945 [DEBUG] [Thread-18195] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:46:09.931 [DEBUG] [Thread-18197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:24.984 [DEBUG] [Thread-18198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:25.055 [DEBUG] [Thread-18199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:34.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:46:34.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:46:34.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-25T20:46:35.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 46, 24), 7.08, 63.04, 0.0, 18.53, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:46:35.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:46:24
2025-12-25T20:46:35.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:46:35.946 [DEBUG] [Thread-18200] [transport.py] [_log()] starting thread (client mode): 0xb6bba320
2025-12-25T20:46:35.946 [DEBUG] [Thread-18200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:46:35.967 [DEBUG] [Thread-18200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:46:35.968 [INFO] [Thread-18200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:46:35.969 [DEBUG] [Thread-18200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:46:35.969 [DEBUG] [Thread-18200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:46:35.969 [DEBUG] [Thread-18200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] client lang: <none>
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] server lang: <none>
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] kex follows: False
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:46:35.970 [DEBUG] [Thread-18200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:46:35.971 [DEBUG] [Thread-18200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:46:35.971 [DEBUG] [Thread-18200] [transport.py] [_log()] Compression: none
2025-12-25T20:46:35.971 [DEBUG] [Thread-18200] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:46:35.985 [DEBUG] [Thread-18200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:46:35.986 [DEBUG] [Thread-18200] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:46:35.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:46:35.988 [DEBUG] [Thread-18200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:46:35.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:46:35.990 [DEBUG] [Thread-18200] [transport.py] [_log()] userauth is OK
2025-12-25T20:46:35.990 [DEBUG] [Thread-18200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:46:35.991 [DEBUG] [Thread-18200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:46:35.991 [DEBUG] [Thread-18200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:46:35.991 [DEBUG] [Thread-18200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:46:36.017 [INFO] [Thread-18200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:46:36.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:46:36.651 [DEBUG] [Thread-18200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:46:36.651 [DEBUG] [Thread-18200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:46:36.651 [DEBUG] [Thread-18200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:46:36.692 [DEBUG] [Thread-18200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:46:36.692 [DEBUG] [Thread-18200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:46:36.696 [DEBUG] [Thread-18200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:46:36.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:46:36.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:46:36.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:46:36.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:46:36.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:46:36.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:46:36.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:46:36.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:46:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:46:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.782004 -999.00  +17.80  10.24     66  +11.60 1 1 1 1 1     1    0 -16.56 -840.56 ZNESW 8.2 10.2 228.1 24.5 18.7 -22.6 18.6 -22.5 18.4 -20.8 18.6 -21.9
2025-12-25T20:46:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:46:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:46:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.782004
2025-12-25T20:46:36.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:46:36.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:46:36.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:46:36.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:46:36.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:46:36.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:46:24', tmtdew=7.08, humidity=63.04, cloud=0.0, wind=18.53, 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-25T20:46:25', seeing=3.58, atlas_timestamp='2025-12-25T18:46:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:44:00')
2025-12-25T20:46:36.722 [DEBUG] [Thread-18200] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:46:36.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-25T20:46:36.813 [DEBUG] [Thread-18203] [transport.py] [_log()] starting thread (client mode): 0xb6b21960
2025-12-25T20:46:36.813 [DEBUG] [Thread-18203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:46:36.828 [DEBUG] [Thread-18203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:46:36.828 [INFO] [Thread-18203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:46:36.835 [DEBUG] [Thread-18203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] client lang: <none>
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] server lang: <none>
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] kex follows: False
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] Compression: none
2025-12-25T20:46:36.836 [DEBUG] [Thread-18203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:46:36.897 [DEBUG] [Thread-18203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:46:36.897 [DEBUG] [Thread-18203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:46:36.898 [DEBUG] [Thread-18203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:46:36.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:46:36.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:46:36.952 [DEBUG] [Thread-18203] [transport.py] [_log()] userauth is OK
2025-12-25T20:46:36.952 [DEBUG] [Thread-18203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:46:36.953 [DEBUG] [Thread-18203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:46:36.953 [DEBUG] [Thread-18203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:46:36.953 [DEBUG] [Thread-18203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:46:36.977 [INFO] [Thread-18203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:46:36.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-25T20:46:36.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:46:37.793 [DEBUG] [Thread-18203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:46:37.794 [DEBUG] [Thread-18203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:46:37.842 [DEBUG] [Thread-18203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:46:37.842 [DEBUG] [Thread-18203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:46:37.851 [DEBUG] [Thread-18203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:46:37.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:46:37.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-25T20:46:37.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:46:37.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:46:37.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:46:37.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:46:37.888 [DEBUG] [Thread-18203] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:46:38.399 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:38.400 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:40.020 [DEBUG] [Thread-18205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:46:55.059 [DEBUG] [Thread-18206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:07.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:47:07.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:47:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:47:08.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 46, 56), 7.02, 63.59, 0.0, 20.61, 17.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:47:08.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:46:56
2025-12-25T20:47:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:47:08.874 [DEBUG] [Thread-18207] [transport.py] [_log()] starting thread (client mode): 0xb6b20e80
2025-12-25T20:47:08.875 [DEBUG] [Thread-18207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:47:08.894 [DEBUG] [Thread-18207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:47:08.895 [INFO] [Thread-18207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:47:08.897 [DEBUG] [Thread-18207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:47:08.897 [DEBUG] [Thread-18207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:47:08.897 [DEBUG] [Thread-18207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:47:08.897 [DEBUG] [Thread-18207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:08.897 [DEBUG] [Thread-18207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] client lang: <none>
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] server lang: <none>
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] kex follows: False
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] Compression: none
2025-12-25T20:47:08.898 [DEBUG] [Thread-18207] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:47:08.915 [DEBUG] [Thread-18207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:47:08.916 [DEBUG] [Thread-18207] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:47:08.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:47:08.917 [DEBUG] [Thread-18207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:47:08.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:47:08.919 [DEBUG] [Thread-18207] [transport.py] [_log()] userauth is OK
2025-12-25T20:47:08.920 [DEBUG] [Thread-18207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:47:08.920 [DEBUG] [Thread-18207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:47:08.920 [DEBUG] [Thread-18207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:47:08.920 [DEBUG] [Thread-18207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:47:08.940 [INFO] [Thread-18207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:47:08.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:47:09.754 [DEBUG] [Thread-18207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:47:09.755 [DEBUG] [Thread-18207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:47:09.755 [DEBUG] [Thread-18207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:47:09.796 [DEBUG] [Thread-18207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:47:09.796 [DEBUG] [Thread-18207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:47:09.799 [DEBUG] [Thread-18207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:47:09.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:47:09.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:47:09.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:47:09.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:47:09.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:47:09.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:47:09.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:47:09.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:47:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:47:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.782351 -999.00  +17.80  11.71     66  +11.60 1 1 1 1 1     1    0 -14.05 -760.44 ZNESW 9.4 11.7 199.6 16.5 18.7 -22.3 18.6 -22.1 18.4 -20.4 18.7 -21.6
2025-12-25T20:47:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:47:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:47:09.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.782351
2025-12-25T20:47:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:47:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:47:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:47:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:47:09.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:47:09.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:46:56', tmtdew=7.02, humidity=63.59, cloud=0.0, wind=20.61, temperature=17.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:46:57', seeing=3.34, atlas_timestamp='2025-12-25T18:46:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:44:00')
2025-12-25T20:47:09.820 [DEBUG] [Thread-18207] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:47:09.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-25T20:47:09.913 [DEBUG] [Thread-18210] [transport.py] [_log()] starting thread (client mode): 0xb95b2320
2025-12-25T20:47:09.913 [DEBUG] [Thread-18210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:47:09.928 [DEBUG] [Thread-18210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:47:09.928 [INFO] [Thread-18210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:47:09.935 [DEBUG] [Thread-18210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:47:09.935 [DEBUG] [Thread-18210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:47:09.935 [DEBUG] [Thread-18210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:47:09.935 [DEBUG] [Thread-18210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] client lang: <none>
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] server lang: <none>
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] kex follows: False
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] Compression: none
2025-12-25T20:47:09.936 [DEBUG] [Thread-18210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:47:09.996 [DEBUG] [Thread-18210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:47:09.996 [DEBUG] [Thread-18210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:47:09.997 [DEBUG] [Thread-18210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:47:09.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:47:09.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:47:10.052 [DEBUG] [Thread-18210] [transport.py] [_log()] userauth is OK
2025-12-25T20:47:10.052 [DEBUG] [Thread-18210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:47:10.052 [DEBUG] [Thread-18210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:47:10.053 [DEBUG] [Thread-18210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:47:10.053 [DEBUG] [Thread-18210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:47:10.071 [INFO] [Thread-18210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:47:10.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:47:10.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:47:10.093 [DEBUG] [Thread-18212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:10.894 [DEBUG] [Thread-18210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:47:10.894 [DEBUG] [Thread-18210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:47:10.942 [DEBUG] [Thread-18210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:47:10.942 [DEBUG] [Thread-18210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:47:10.951 [DEBUG] [Thread-18210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:47:10.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:47: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-25T20:47:10.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-25T20:47:10.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:47:10.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:47:10.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:47:10.987 [DEBUG] [Thread-18210] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:47:25.108 [DEBUG] [Thread-18213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:25.146 [DEBUG] [Thread-18214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:38.605 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:38.606 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:40.181 [DEBUG] [Thread-18215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:47:40.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:47:40.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:47:40.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-25T20:47:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 47, 28), 7.03, 63.55, 0.0, 19.36, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:47:41.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:47:28
2025-12-25T20:47:41.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:47:41.949 [DEBUG] [Thread-18216] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-25T20:47:41.950 [DEBUG] [Thread-18216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:47:41.970 [DEBUG] [Thread-18216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:47:41.970 [INFO] [Thread-18216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:47:41.973 [DEBUG] [Thread-18216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] client lang: <none>
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] server lang: <none>
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] kex follows: False
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] Compression: none
2025-12-25T20:47:41.974 [DEBUG] [Thread-18216] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:47:41.990 [DEBUG] [Thread-18216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:47:41.990 [DEBUG] [Thread-18216] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:47:41.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:47:41.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:47:41.992 [DEBUG] [Thread-18216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:47:41.993 [DEBUG] [Thread-18216] [transport.py] [_log()] userauth is OK
2025-12-25T20:47:41.993 [DEBUG] [Thread-18216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:47:41.993 [DEBUG] [Thread-18216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:47:41.994 [DEBUG] [Thread-18216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:47:41.994 [DEBUG] [Thread-18216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:47:42.015 [INFO] [Thread-18216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:47:42.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:47:42.666 [DEBUG] [Thread-18216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:47:42.666 [DEBUG] [Thread-18216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:47:42.667 [DEBUG] [Thread-18216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:47:42.707 [DEBUG] [Thread-18216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:47:42.708 [DEBUG] [Thread-18216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:47:42.711 [DEBUG] [Thread-18216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:47:42.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:47:42.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:47:42.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:47:42.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:47:42.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:47:42.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:47:42.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:47:42.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.782698 -999.00  +17.80   7.62     66  +11.60 1 1 1 1 1     1    0 -12.92 -721.57 ZNESW 13.9 7.6 212.9 15.0 18.7 -22.3 18.6 -22.1 18.4 -20.5 18.7 -21.5
2025-12-25T20:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:47:42.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.782698
2025-12-25T20:47:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:47:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:47:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:47:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:47:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:47:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:47:28', tmtdew=7.03, humidity=63.55, cloud=0.0, wind=19.36, 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-25T20:47:29', seeing=3.76, atlas_timestamp='2025-12-25T18:47:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:44:00')
2025-12-25T20:47:42.738 [DEBUG] [Thread-18216] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:47: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-25T20:47:42.834 [DEBUG] [Thread-18219] [transport.py] [_log()] starting thread (client mode): 0xb6b75240
2025-12-25T20:47:42.834 [DEBUG] [Thread-18219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:47:42.849 [DEBUG] [Thread-18219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:47:42.849 [INFO] [Thread-18219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:47:42.857 [DEBUG] [Thread-18219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:47:42.858 [DEBUG] [Thread-18219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:47:42.858 [DEBUG] [Thread-18219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:47:42.858 [DEBUG] [Thread-18219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:42.858 [DEBUG] [Thread-18219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:47:42.858 [DEBUG] [Thread-18219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:42.858 [DEBUG] [Thread-18219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] client lang: <none>
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] server lang: <none>
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] kex follows: False
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] Compression: none
2025-12-25T20:47:42.859 [DEBUG] [Thread-18219] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:47:42.920 [DEBUG] [Thread-18219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:47:42.920 [DEBUG] [Thread-18219] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:47:42.921 [DEBUG] [Thread-18219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:47:42.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:47:42.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:47:42.980 [DEBUG] [Thread-18219] [transport.py] [_log()] userauth is OK
2025-12-25T20:47:42.980 [DEBUG] [Thread-18219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:47:42.980 [DEBUG] [Thread-18219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:47:42.981 [DEBUG] [Thread-18219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:47:42.981 [DEBUG] [Thread-18219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:47:43.000 [INFO] [Thread-18219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:47:43.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-25T20:47:43.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:47:43.839 [DEBUG] [Thread-18219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:47:43.840 [DEBUG] [Thread-18219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:47:43.891 [DEBUG] [Thread-18219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:47:43.892 [DEBUG] [Thread-18219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:47:43.901 [DEBUG] [Thread-18219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:47:43.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:47:43.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-25T20:47:43.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-25T20:47:43.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:47:43.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:47:43.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:47:43.938 [DEBUG] [Thread-18219] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:47:55.218 [DEBUG] [Thread-18221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:10.265 [DEBUG] [Thread-18222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:13.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:48:13.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:48:13.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:48:14.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 48), 6.96, 63.64, 0.0, 21.39, 17.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:48:14.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:48:00
2025-12-25T20:48:14.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:48:14.925 [DEBUG] [Thread-18223] [transport.py] [_log()] starting thread (client mode): 0xb6b7f880
2025-12-25T20:48:14.925 [DEBUG] [Thread-18223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:48:14.946 [DEBUG] [Thread-18223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:48:14.946 [INFO] [Thread-18223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] client lang: <none>
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] server lang: <none>
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] kex follows: False
2025-12-25T20:48:14.949 [DEBUG] [Thread-18223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:48:14.950 [DEBUG] [Thread-18223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:48:14.950 [DEBUG] [Thread-18223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:48:14.950 [DEBUG] [Thread-18223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:48:14.950 [DEBUG] [Thread-18223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:48:14.950 [DEBUG] [Thread-18223] [transport.py] [_log()] Compression: none
2025-12-25T20:48:14.950 [DEBUG] [Thread-18223] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:48:14.967 [DEBUG] [Thread-18223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:48:14.968 [DEBUG] [Thread-18223] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:48:14.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:48:14.969 [DEBUG] [Thread-18223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:48:14.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:48:14.971 [DEBUG] [Thread-18223] [transport.py] [_log()] userauth is OK
2025-12-25T20:48:14.971 [DEBUG] [Thread-18223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:48:14.971 [DEBUG] [Thread-18223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:48:14.971 [DEBUG] [Thread-18223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:48:14.971 [DEBUG] [Thread-18223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:48:14.995 [INFO] [Thread-18223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:48:14.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:48:15.774 [DEBUG] [Thread-18223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:48:15.775 [DEBUG] [Thread-18223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:48:15.775 [DEBUG] [Thread-18223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:48:15.816 [DEBUG] [Thread-18223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:48:15.816 [DEBUG] [Thread-18223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:48:15.818 [DEBUG] [Thread-18223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:48:15.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:48:15.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:48:15.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:48:15.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:48:15.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:48:15.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:48:15.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:48:15.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:48:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:48:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.783045 -999.00  +17.80   8.25     67  +11.60 1 1 1 1 1     0    0 -13.89 -740.56 ZNESW 12.0 8.2 251.6 22.9 18.6 -22.3 18.6 -21.8 18.4 -20.4 18.6 -21.5
2025-12-25T20:48:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:48:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:48:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.783045
2025-12-25T20:48:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:48:15.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:48:15.838 [DEBUG] [Thread-18223] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:48:15.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:48:15.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:48:15.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:48:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:48:00', tmtdew=6.96, humidity=63.64, cloud=0.0, wind=21.39, temperature=17.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:48:01', seeing=3.63, atlas_timestamp='2025-12-25T18:47:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:44:00')
2025-12-25T20:48:15.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-25T20:48:15.933 [DEBUG] [Thread-18226] [transport.py] [_log()] starting thread (client mode): 0xb6b23760
2025-12-25T20:48:15.934 [DEBUG] [Thread-18226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:48:15.948 [DEBUG] [Thread-18226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:48:15.948 [INFO] [Thread-18226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] client lang: <none>
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] server lang: <none>
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] kex follows: False
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:48:15.956 [DEBUG] [Thread-18226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:48:15.957 [DEBUG] [Thread-18226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:48:15.957 [DEBUG] [Thread-18226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:48:15.957 [DEBUG] [Thread-18226] [transport.py] [_log()] Compression: none
2025-12-25T20:48:15.957 [DEBUG] [Thread-18226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:48:16.014 [DEBUG] [Thread-18226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:48:16.015 [DEBUG] [Thread-18226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:48:16.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:48:16.016 [DEBUG] [Thread-18226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:48:16.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:48:16.071 [DEBUG] [Thread-18226] [transport.py] [_log()] userauth is OK
2025-12-25T20:48:16.071 [DEBUG] [Thread-18226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:48:16.071 [DEBUG] [Thread-18226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:48:16.072 [DEBUG] [Thread-18226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:48:16.072 [DEBUG] [Thread-18226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:48:16.091 [INFO] [Thread-18226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:48:16.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:48:16.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:48:16.934 [DEBUG] [Thread-18226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:48:16.935 [DEBUG] [Thread-18226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:48:16.983 [DEBUG] [Thread-18226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:48:16.983 [DEBUG] [Thread-18226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:48:16.992 [DEBUG] [Thread-18226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:48:17.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:48:17.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-25T20:48:17.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:48:17.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:48:17.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:48:17.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:48:17.033 [DEBUG] [Thread-18226] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:48:25.166 [DEBUG] [Thread-18228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:25.302 [DEBUG] [Thread-18229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:27.693 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:38.805 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:38.806 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:40.363 [DEBUG] [Thread-18230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:48:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:48:47.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:48:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:48:47.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 48, 33), 6.92, 63.77, 0.0, 17.75, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:48:47.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:48:33
2025-12-25T20:48:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:48:48.017 [DEBUG] [Thread-18231] [transport.py] [_log()] starting thread (client mode): 0xb6b23790
2025-12-25T20:48:48.017 [DEBUG] [Thread-18231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:48:48.037 [DEBUG] [Thread-18231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:48:48.037 [INFO] [Thread-18231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:48:48.040 [DEBUG] [Thread-18231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] client lang: <none>
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] server lang: <none>
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] kex follows: False
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] Compression: none
2025-12-25T20:48:48.041 [DEBUG] [Thread-18231] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:48:48.059 [DEBUG] [Thread-18231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:48:48.060 [DEBUG] [Thread-18231] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:48:48.060 [DEBUG] [Thread-18231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:48:48.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:48:48.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:48:48.062 [DEBUG] [Thread-18231] [transport.py] [_log()] userauth is OK
2025-12-25T20:48:48.062 [DEBUG] [Thread-18231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:48:48.062 [DEBUG] [Thread-18231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:48:48.062 [DEBUG] [Thread-18231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:48:48.062 [DEBUG] [Thread-18231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:48:48.097 [INFO] [Thread-18231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:48:48.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:48:48.745 [DEBUG] [Thread-18231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:48:48.745 [DEBUG] [Thread-18231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:48:48.746 [DEBUG] [Thread-18231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:48:48.786 [DEBUG] [Thread-18231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:48:48.786 [DEBUG] [Thread-18231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:48:48.788 [DEBUG] [Thread-18231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:48:48.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:48:48.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:48:48.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:48:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:48:48.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:48:48.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:48:48.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:48:48.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:48:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:48:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.783393 -999.00  +17.70  11.09     67  +11.60 1 1 1 1 1     0    0 -12.39 -683.85 ZNESW 16.8 11.1 227.2 17.1 18.6 -22.2 18.6 -21.7 18.4 -20.3 18.6 -21.3
2025-12-25T20:48:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:48:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:48:48.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.783393
2025-12-25T20:48:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:48:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:48:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:48:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:48:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:48:48.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:48:33', tmtdew=6.92, humidity=63.77, cloud=0.0, wind=17.75, 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-25T20:48:33', seeing=2.89, atlas_timestamp='2025-12-25T18:48:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:47:00')
2025-12-25T20:48:48.813 [DEBUG] [Thread-18231] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:48:48.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-25T20:48:48.909 [DEBUG] [Thread-18234] [transport.py] [_log()] starting thread (client mode): 0xb6bb7bb0
2025-12-25T20:48:48.909 [DEBUG] [Thread-18234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:48:48.928 [DEBUG] [Thread-18234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:48:48.928 [INFO] [Thread-18234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] client lang: <none>
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] server lang: <none>
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] kex follows: False
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] Compression: none
2025-12-25T20:48:48.936 [DEBUG] [Thread-18234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:48:48.994 [DEBUG] [Thread-18234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:48:48.995 [DEBUG] [Thread-18234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:48:48.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:48:48.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:48:48.996 [DEBUG] [Thread-18234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:48:49.050 [DEBUG] [Thread-18234] [transport.py] [_log()] userauth is OK
2025-12-25T20:48:49.050 [DEBUG] [Thread-18234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:48:49.050 [DEBUG] [Thread-18234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:48:49.050 [DEBUG] [Thread-18234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:48:49.050 [DEBUG] [Thread-18234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:48:49.071 [INFO] [Thread-18234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:48:49.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-25T20:48:49.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:48:49.948 [DEBUG] [Thread-18234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:48:49.948 [DEBUG] [Thread-18234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:48:49.997 [DEBUG] [Thread-18234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:48:49.997 [DEBUG] [Thread-18234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:48:50.005 [DEBUG] [Thread-18234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:48:50.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:48:50.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:48:50.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-25T20:48:50.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:48:50.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:48:50.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:48:50.036 [DEBUG] [Thread-18234] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:48:55.392 [DEBUG] [Thread-18236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:10.453 [DEBUG] [Thread-18237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:49:20.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:49:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:49:20.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 49, 5), 6.93, 63.74, 0.0, 18.46, 17.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:49:20.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:49:05
2025-12-25T20:49:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:49:21.085 [DEBUG] [Thread-18238] [transport.py] [_log()] starting thread (client mode): 0xb6bbad70
2025-12-25T20:49:21.085 [DEBUG] [Thread-18238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:49:21.106 [DEBUG] [Thread-18238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:49:21.106 [INFO] [Thread-18238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:21.109 [DEBUG] [Thread-18238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] client lang: <none>
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] server lang: <none>
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] kex follows: False
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] Compression: none
2025-12-25T20:49:21.110 [DEBUG] [Thread-18238] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:49:21.125 [DEBUG] [Thread-18238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:49:21.125 [DEBUG] [Thread-18238] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:49:21.125 [DEBUG] [Thread-18238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:49:21.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:49:21.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:49:21.126 [DEBUG] [Thread-18238] [transport.py] [_log()] userauth is OK
2025-12-25T20:49:21.126 [DEBUG] [Thread-18238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:49:21.126 [DEBUG] [Thread-18238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:49:21.126 [DEBUG] [Thread-18238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:49:21.126 [DEBUG] [Thread-18238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:49:21.143 [INFO] [Thread-18238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:49:21.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:49:21.960 [DEBUG] [Thread-18238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:49:21.960 [DEBUG] [Thread-18238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:49:21.960 [DEBUG] [Thread-18238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:49:22.001 [DEBUG] [Thread-18238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:49:22.001 [DEBUG] [Thread-18238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:49:22.002 [DEBUG] [Thread-18238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:49:22.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:49:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:49:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:49:22.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:49:22.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:49:22.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:49:22.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.783740 -999.00  +17.70  17.04     67  +11.50 1 1 1 1 1     0    0 -13.14 -708.73 ZNESW 13.4 17.0 212.0 23.0 18.6 -22.2 18.5 -21.6 18.3 -20.2 18.6 -21.5
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.783740
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:49:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:49:05', tmtdew=6.93, humidity=63.74, cloud=0.0, wind=18.46, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:49:05', seeing=2.92, atlas_timestamp='2025-12-25T18:48:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:47:00')
2025-12-25T20:49:22.022 [DEBUG] [Thread-18238] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:49:22.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-25T20:49:22.105 [DEBUG] [Thread-18241] [transport.py] [_log()] starting thread (client mode): 0xb6b61480
2025-12-25T20:49:22.105 [DEBUG] [Thread-18241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:49:22.120 [DEBUG] [Thread-18241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:49:22.120 [INFO] [Thread-18241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:49:22.127 [DEBUG] [Thread-18241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:49:22.127 [DEBUG] [Thread-18241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:49:22.127 [DEBUG] [Thread-18241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] client lang: <none>
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] server lang: <none>
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] kex follows: False
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] Compression: none
2025-12-25T20:49:22.128 [DEBUG] [Thread-18241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:49:22.184 [DEBUG] [Thread-18241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:49:22.184 [DEBUG] [Thread-18241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:49:22.184 [DEBUG] [Thread-18241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:49:22.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:49:22.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:49:22.242 [DEBUG] [Thread-18241] [transport.py] [_log()] userauth is OK
2025-12-25T20:49:22.242 [DEBUG] [Thread-18241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:49:22.242 [DEBUG] [Thread-18241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:49:22.242 [DEBUG] [Thread-18241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:49:22.242 [DEBUG] [Thread-18241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:49:22.256 [INFO] [Thread-18241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:49:22.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-25T20:49:22.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:49:23.111 [DEBUG] [Thread-18241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:49:23.111 [DEBUG] [Thread-18241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:49:23.159 [DEBUG] [Thread-18241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:49:23.159 [DEBUG] [Thread-18241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:49:23.167 [DEBUG] [Thread-18241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:49:23.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:49:23.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-25T20:49:23.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-25T20:49:23.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:49:23.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:49:23.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:49:23.199 [DEBUG] [Thread-18241] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:49:25.228 [DEBUG] [Thread-18243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:25.483 [DEBUG] [Thread-18244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:37.333 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:39.008 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:39.009 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:40.455 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:40.530 [DEBUG] [Thread-18245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:45.548 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:52.037 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:49:53.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:49:53.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-25T20:49:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 49, 37), 6.89, 63.89, 0.0, 21.44, 17.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:49:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:49:37
2025-12-25T20:49:54.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:49:54.195 [DEBUG] [Thread-18246] [transport.py] [_log()] starting thread (client mode): 0xb6b229b0
2025-12-25T20:49:54.196 [DEBUG] [Thread-18246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:49:54.214 [DEBUG] [Thread-18246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:49:54.215 [INFO] [Thread-18246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:49:54.218 [DEBUG] [Thread-18246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:49:54.218 [DEBUG] [Thread-18246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:49:54.218 [DEBUG] [Thread-18246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:49:54.218 [DEBUG] [Thread-18246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:54.218 [DEBUG] [Thread-18246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:54.218 [DEBUG] [Thread-18246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] client lang: <none>
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] server lang: <none>
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] kex follows: False
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] Compression: none
2025-12-25T20:49:54.219 [DEBUG] [Thread-18246] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:49:54.237 [DEBUG] [Thread-18246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:49:54.238 [DEBUG] [Thread-18246] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:49:54.239 [DEBUG] [Thread-18246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:49:54.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:49:54.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:49:54.242 [DEBUG] [Thread-18246] [transport.py] [_log()] userauth is OK
2025-12-25T20:49:54.242 [DEBUG] [Thread-18246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:49:54.242 [DEBUG] [Thread-18246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:49:54.242 [DEBUG] [Thread-18246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:49:54.242 [DEBUG] [Thread-18246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:49:54.266 [INFO] [Thread-18246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:49:54.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:49:54.912 [DEBUG] [Thread-18246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:49:54.913 [DEBUG] [Thread-18246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:49:54.913 [DEBUG] [Thread-18246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:49:54.954 [DEBUG] [Thread-18246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:49:54.955 [DEBUG] [Thread-18246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:49:54.958 [DEBUG] [Thread-18246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:49:54.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:49:54.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:49:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:49:54.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:49:54.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:49:54.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:49:54.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.784435 -999.00  +17.70  10.26     67  +11.50 1 1 1 1 1     0    0 -7.66 -521.06 ZNESW 10.7 10.3 237.1 23.3 18.6 -22.0 18.4 -21.6 18.2 -20.1 18.6 -21.1
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.784435
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:49:54.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:49:54.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:49:37', tmtdew=6.89, humidity=63.89, cloud=0.0, wind=21.44, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:49:37', seeing=2.82, atlas_timestamp='2025-12-25T18:49:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:47:00')
2025-12-25T20:49:54.979 [DEBUG] [Thread-18246] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:49:55.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-25T20:49:55.067 [DEBUG] [Thread-18249] [transport.py] [_log()] starting thread (client mode): 0xb6b7c970
2025-12-25T20:49:55.067 [DEBUG] [Thread-18249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:49:55.082 [DEBUG] [Thread-18249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:49:55.082 [INFO] [Thread-18249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:49:55.089 [DEBUG] [Thread-18249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] client lang: <none>
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] server lang: <none>
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] kex follows: False
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] Compression: none
2025-12-25T20:49:55.090 [DEBUG] [Thread-18249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:49:55.148 [DEBUG] [Thread-18249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:49:55.148 [DEBUG] [Thread-18249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:49:55.149 [DEBUG] [Thread-18249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:49:55.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:49:55.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:49:55.205 [DEBUG] [Thread-18249] [transport.py] [_log()] userauth is OK
2025-12-25T20:49:55.205 [DEBUG] [Thread-18249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:49:55.205 [DEBUG] [Thread-18249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:49:55.205 [DEBUG] [Thread-18249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:49:55.205 [DEBUG] [Thread-18249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:49:55.223 [INFO] [Thread-18249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:49:55.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-25T20:49:55.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:49:55.565 [DEBUG] [Thread-18251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:49:56.059 [DEBUG] [Thread-18249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:49:56.059 [DEBUG] [Thread-18249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:49:56.107 [DEBUG] [Thread-18249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:49:56.107 [DEBUG] [Thread-18249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:49:56.116 [DEBUG] [Thread-18249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:49:56.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:49:56.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-25T20:49:56.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-25T20:49:56.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:49:56.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:49:56.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:49:56.154 [DEBUG] [Thread-18249] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:50:10.605 [DEBUG] [Thread-18252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:11.499 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:15.981 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:25.285 [DEBUG] [Thread-18253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:25.637 [DEBUG] [Thread-18254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:26.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:50:26.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:50:26.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:50:26.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 50, 9), 6.82, 64.17, 0.0, 20.71, 17.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:50:26.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:50:09
2025-12-25T20:50:27.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:50:27.153 [DEBUG] [Thread-18255] [transport.py] [_log()] starting thread (client mode): 0xb6babb20
2025-12-25T20:50:27.153 [DEBUG] [Thread-18255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:50:27.174 [DEBUG] [Thread-18255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:50:27.174 [INFO] [Thread-18255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] client lang: <none>
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] server lang: <none>
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] kex follows: False
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:50:27.176 [DEBUG] [Thread-18255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:50:27.177 [DEBUG] [Thread-18255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:50:27.177 [DEBUG] [Thread-18255] [transport.py] [_log()] Compression: none
2025-12-25T20:50:27.177 [DEBUG] [Thread-18255] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:50:27.189 [DEBUG] [Thread-18255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:50:27.190 [DEBUG] [Thread-18255] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:50:27.190 [DEBUG] [Thread-18255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:50:27.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:50:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:50:27.192 [DEBUG] [Thread-18255] [transport.py] [_log()] userauth is OK
2025-12-25T20:50:27.192 [DEBUG] [Thread-18255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:50:27.192 [DEBUG] [Thread-18255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:50:27.192 [DEBUG] [Thread-18255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:50:27.192 [DEBUG] [Thread-18255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:50:27.211 [INFO] [Thread-18255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:50:27.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:50:27.886 [DEBUG] [Thread-18255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:50:27.886 [DEBUG] [Thread-18255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:50:27.887 [DEBUG] [Thread-18255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:50:27.927 [DEBUG] [Thread-18255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:50:27.927 [DEBUG] [Thread-18255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:50:27.930 [DEBUG] [Thread-18255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:50:27.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:50:27.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:50:27.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:50:27.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:50:27.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:50:27.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:50:27.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:50:27.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:50:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:50:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.784782 -999.00  +17.70   9.40     67  +11.60 1 1 1 1 1     0    0 -5.16 -433.01 ZNESW 10.2 9.4 210.4 18.9 18.6 -21.9 18.4 -21.2 18.2 -20.1 18.5 -21.0
2025-12-25T20:50:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:50:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:50:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.784782
2025-12-25T20:50:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:50:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:50:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:50:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:50:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:50:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:50:09', tmtdew=6.82, humidity=64.17, cloud=0.0, wind=20.71, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:50:09', seeing=2.82, atlas_timestamp='2025-12-25T18:50:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:47:00')
2025-12-25T20:50:27.956 [DEBUG] [Thread-18255] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:50:28.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-25T20:50:28.049 [DEBUG] [Thread-18258] [transport.py] [_log()] starting thread (client mode): 0xb6b00070
2025-12-25T20:50:28.049 [DEBUG] [Thread-18258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:50:28.064 [DEBUG] [Thread-18258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:50:28.064 [INFO] [Thread-18258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:50:28.071 [DEBUG] [Thread-18258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] client lang: <none>
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] server lang: <none>
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] kex follows: False
2025-12-25T20:50:28.072 [DEBUG] [Thread-18258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:50:28.073 [DEBUG] [Thread-18258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:50:28.073 [DEBUG] [Thread-18258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:50:28.073 [DEBUG] [Thread-18258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:50:28.073 [DEBUG] [Thread-18258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:50:28.073 [DEBUG] [Thread-18258] [transport.py] [_log()] Compression: none
2025-12-25T20:50:28.073 [DEBUG] [Thread-18258] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:50:28.129 [DEBUG] [Thread-18258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:50:28.130 [DEBUG] [Thread-18258] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:50:28.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:50:28.131 [DEBUG] [Thread-18258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:50:28.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:50:28.187 [DEBUG] [Thread-18258] [transport.py] [_log()] userauth is OK
2025-12-25T20:50:28.187 [DEBUG] [Thread-18258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:50:28.187 [DEBUG] [Thread-18258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:50:28.187 [DEBUG] [Thread-18258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:50:28.187 [DEBUG] [Thread-18258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:50:28.206 [INFO] [Thread-18258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:50:28.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:50:28.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:50:29.099 [DEBUG] [Thread-18258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:50:29.099 [DEBUG] [Thread-18258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:50:29.147 [DEBUG] [Thread-18258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:50:29.148 [DEBUG] [Thread-18258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:50:29.157 [DEBUG] [Thread-18258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:50:29.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:50:29.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')
2025-12-25T20:50:29.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-25T20:50:29.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:50:29.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:50:29.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:50:29.194 [DEBUG] [Thread-18258] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:50:35.281 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:39.208 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:39.209 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:39.746 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:40.669 [DEBUG] [Thread-18260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:46.416 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:50.877 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:55.706 [DEBUG] [Thread-18261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:50:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:50:59.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:50:59.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-25T20:50:59.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 50, 41), 6.74, 64.32, 0.0, 23.01, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:50:59.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:50:41
2025-12-25T20:51:00.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:51:00.211 [DEBUG] [Thread-18262] [transport.py] [_log()] starting thread (client mode): 0xb6b7e7d0
2025-12-25T20:51:00.211 [DEBUG] [Thread-18262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:51:00.231 [DEBUG] [Thread-18262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:51:00.231 [INFO] [Thread-18262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] client lang: <none>
2025-12-25T20:51:00.235 [DEBUG] [Thread-18262] [transport.py] [_log()] server lang: <none>
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] kex follows: False
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] Compression: none
2025-12-25T20:51:00.236 [DEBUG] [Thread-18262] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:51:00.254 [DEBUG] [Thread-18262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:51:00.254 [DEBUG] [Thread-18262] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:51:00.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:51:00.255 [DEBUG] [Thread-18262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:51:00.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:51:00.296 [DEBUG] [Thread-18262] [transport.py] [_log()] userauth is OK
2025-12-25T20:51:00.296 [DEBUG] [Thread-18262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:51:00.297 [DEBUG] [Thread-18262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:51:00.297 [DEBUG] [Thread-18262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:51:00.297 [DEBUG] [Thread-18262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:51:00.320 [INFO] [Thread-18262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:51:00.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:51:00.936 [DEBUG] [Thread-18262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:51:00.936 [DEBUG] [Thread-18262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:51:00.936 [DEBUG] [Thread-18262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:51:00.977 [DEBUG] [Thread-18262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:51:00.977 [DEBUG] [Thread-18262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:51:00.979 [DEBUG] [Thread-18262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:51:00.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:51:00.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:51:00.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:51:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:51:01.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:51:01.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:51:01.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:51:01.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:51:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:51:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.785129 -999.00  +17.60  13.13     67  +11.50 1 1 1 1 1     0    0 -3.19 -364.88 ZNESW 12.2 13.1 195.9 20.6 18.5 -22.0 18.5 -21.7 18.3 -20.1 18.5 -21.2
2025-12-25T20:51:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:51:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:51:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.785129
2025-12-25T20:51:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:51:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:51:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:51:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:51:01.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:51:01.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:50:41', tmtdew=6.74, humidity=64.32, cloud=0.0, wind=23.01, 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-25T20:50:41', seeing=3.2, atlas_timestamp='2025-12-25T18:50:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.10975000000000001, 0.07624999999999993, 0.20425000000000004, 0.13349999999999795, 0.09849999999999959, 0.15375000000000227, 0.049999999999998934, 0.15725000000000122, 0.07949999999999946, 0.10699999999999932, 0.14024999999999999, 0.0730000000000004, 0.1014999999999997, 0.13924999999999876, 0.11899999999999977, 0.14349999999999952, 0.12924999999999898, 0.1324999999999985, 0.12049999999999983, 0.15424999999999933, 0.17599999999999838, 0.18774999999999764, 0.1797500000000003, 0.17875000000000085, 0.14499999999999957, 0.11350000000000016, 0.19624999999999915, 0.24849999999999994, 0.2999999999999998, 0.23850000000000193, 0.22900000000000098, 0.20800000000000018, 0.1792499999999997], zp_timestamp='2025-12-25T18:47:00')
2025-12-25T20:51:01.006 [DEBUG] [Thread-18262] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:51:01.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-25T20:51:01.103 [DEBUG] [Thread-18265] [transport.py] [_log()] starting thread (client mode): 0xb6bb6920
2025-12-25T20:51:01.103 [DEBUG] [Thread-18265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:51:01.118 [DEBUG] [Thread-18265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:51:01.118 [INFO] [Thread-18265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:51:01.125 [DEBUG] [Thread-18265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:51:01.125 [DEBUG] [Thread-18265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:51:01.125 [DEBUG] [Thread-18265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:51:01.125 [DEBUG] [Thread-18265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:01.125 [DEBUG] [Thread-18265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:01.125 [DEBUG] [Thread-18265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] client lang: <none>
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] server lang: <none>
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] kex follows: False
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] Compression: none
2025-12-25T20:51:01.126 [DEBUG] [Thread-18265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:51:01.184 [DEBUG] [Thread-18265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:51:01.184 [DEBUG] [Thread-18265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:51:01.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:51:01.185 [DEBUG] [Thread-18265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:51:01.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:51:01.245 [DEBUG] [Thread-18265] [transport.py] [_log()] userauth is OK
2025-12-25T20:51:01.245 [DEBUG] [Thread-18265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:51:01.245 [DEBUG] [Thread-18265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:51:01.245 [DEBUG] [Thread-18265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:51:01.245 [DEBUG] [Thread-18265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:51:01.264 [INFO] [Thread-18265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:51:01.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-25T20:51:01.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:51:02.156 [DEBUG] [Thread-18265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:51:02.156 [DEBUG] [Thread-18265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:51:02.203 [DEBUG] [Thread-18265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:51:02.204 [DEBUG] [Thread-18265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:51:02.212 [DEBUG] [Thread-18265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:51:02.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:51:02.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-25T20:51:02.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-25T20:51:02.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:51:02.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:51:02.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:51:02.246 [DEBUG] [Thread-18265] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:51:10.743 [DEBUG] [Thread-18267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:25.345 [DEBUG] [Thread-18268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:25.790 [DEBUG] [Thread-18269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:32.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:51:32.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:51:32.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-25T20:51:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 51, 13), 6.69, 64.5, 0.0, 19.6, 17.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:51:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:51:13
2025-12-25T20:51:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:51:33.258 [DEBUG] [Thread-18270] [transport.py] [_log()] starting thread (client mode): 0xb6b23cd0
2025-12-25T20:51:33.258 [DEBUG] [Thread-18270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:51:33.277 [DEBUG] [Thread-18270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:51:33.277 [INFO] [Thread-18270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:51:33.280 [DEBUG] [Thread-18270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:51:33.280 [DEBUG] [Thread-18270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] client lang: <none>
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] server lang: <none>
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] kex follows: False
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:51:33.281 [DEBUG] [Thread-18270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:51:33.282 [DEBUG] [Thread-18270] [transport.py] [_log()] Compression: none
2025-12-25T20:51:33.282 [DEBUG] [Thread-18270] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:51:33.298 [DEBUG] [Thread-18270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:51:33.299 [DEBUG] [Thread-18270] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:51:33.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:51:33.300 [DEBUG] [Thread-18270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:51:33.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:51:33.302 [DEBUG] [Thread-18270] [transport.py] [_log()] userauth is OK
2025-12-25T20:51:33.302 [DEBUG] [Thread-18270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:51:33.302 [DEBUG] [Thread-18270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:51:33.303 [DEBUG] [Thread-18270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:51:33.303 [DEBUG] [Thread-18270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:51:33.326 [INFO] [Thread-18270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:51:33.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:51:33.993 [DEBUG] [Thread-18270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:51:33.993 [DEBUG] [Thread-18270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:51:33.993 [DEBUG] [Thread-18270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:51:34.034 [DEBUG] [Thread-18270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:51:34.034 [DEBUG] [Thread-18270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:51:34.037 [DEBUG] [Thread-18270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:51:34.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:51:34.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:51:34.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:51:34.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:51:34.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:51:34.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:51:34.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:51:34.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.785476 -999.00  +17.60  15.04     67  +11.60 1 1 1 1 1     0    0 -2.13 -322.40 ZNESW 19.9 15.0 190.4 24.5 18.5 -21.9 18.5 -21.5 18.2 -20.1 18.6 -21.0
2025-12-25T20:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.785476
2025-12-25T20:51:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:51:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:51:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:51:34.062 [DEBUG] [Thread-18270] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:51:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:51:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:51:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:51:13', tmtdew=6.69, humidity=64.5, cloud=0.0, wind=19.6, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:51:14', seeing=3.05, atlas_timestamp='2025-12-25T18:51:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:50:00')
2025-12-25T20:51:34.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-25T20:51:34.156 [DEBUG] [Thread-18273] [transport.py] [_log()] starting thread (client mode): 0xb6b003a0
2025-12-25T20:51:34.156 [DEBUG] [Thread-18273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:51:34.172 [DEBUG] [Thread-18273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:51:34.172 [INFO] [Thread-18273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] client lang: <none>
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] server lang: <none>
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] kex follows: False
2025-12-25T20:51:34.180 [DEBUG] [Thread-18273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:51:34.181 [DEBUG] [Thread-18273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:51:34.181 [DEBUG] [Thread-18273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:51:34.181 [DEBUG] [Thread-18273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:51:34.181 [DEBUG] [Thread-18273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:51:34.181 [DEBUG] [Thread-18273] [transport.py] [_log()] Compression: none
2025-12-25T20:51:34.181 [DEBUG] [Thread-18273] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:51:34.248 [DEBUG] [Thread-18273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:51:34.249 [DEBUG] [Thread-18273] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:51:34.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:51:34.250 [DEBUG] [Thread-18273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:51:34.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:51:34.307 [DEBUG] [Thread-18273] [transport.py] [_log()] userauth is OK
2025-12-25T20:51:34.307 [DEBUG] [Thread-18273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:51:34.308 [DEBUG] [Thread-18273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:51:34.308 [DEBUG] [Thread-18273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:51:34.308 [DEBUG] [Thread-18273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:51:34.326 [INFO] [Thread-18273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:51:34.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-25T20:51:34.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:51:35.166 [DEBUG] [Thread-18273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:51:35.166 [DEBUG] [Thread-18273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:51:35.214 [DEBUG] [Thread-18273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:51:35.214 [DEBUG] [Thread-18273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:51:35.227 [DEBUG] [Thread-18273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:51:35.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:51:35.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:51: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-25T20:51:35.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:51:35.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:51:35.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:51:35.260 [DEBUG] [Thread-18273] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:51:39.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:39.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:40.829 [DEBUG] [Thread-18275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:55.890 [DEBUG] [Thread-18276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:51:59.466 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:03.555 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:05.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:52:05.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:52: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-25T20:52:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 51, 45), 6.68, 65.05, 0.0, 17.27, 17.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:52:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:51:45
2025-12-25T20:52:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:52:06.262 [DEBUG] [Thread-18277] [transport.py] [_log()] starting thread (client mode): 0xb6bba320
2025-12-25T20:52:06.263 [DEBUG] [Thread-18277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:52:06.285 [DEBUG] [Thread-18277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:52:06.285 [INFO] [Thread-18277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] client lang: <none>
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] server lang: <none>
2025-12-25T20:52:06.288 [DEBUG] [Thread-18277] [transport.py] [_log()] kex follows: False
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] Compression: none
2025-12-25T20:52:06.289 [DEBUG] [Thread-18277] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:52:06.305 [DEBUG] [Thread-18277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:52:06.306 [DEBUG] [Thread-18277] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:52:06.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:52:06.307 [DEBUG] [Thread-18277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:52:06.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:52:06.309 [DEBUG] [Thread-18277] [transport.py] [_log()] userauth is OK
2025-12-25T20:52:06.309 [DEBUG] [Thread-18277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:52:06.309 [DEBUG] [Thread-18277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:52:06.309 [DEBUG] [Thread-18277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:52:06.309 [DEBUG] [Thread-18277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:52:06.344 [INFO] [Thread-18277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:52:06.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:52:07.012 [DEBUG] [Thread-18277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:52:07.013 [DEBUG] [Thread-18277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:52:07.013 [DEBUG] [Thread-18277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:52:07.054 [DEBUG] [Thread-18277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:52:07.054 [DEBUG] [Thread-18277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:52:07.058 [DEBUG] [Thread-18277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:52:07.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:52:07.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:52:07.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:52:07.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:52:07.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:52:07.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:52:07.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:52:07.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:52:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:52:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.785823 -999.00  +17.60  11.46     67  +11.60 1 1 1 1 1     0    0 -1.63 -299.41 ZNESW 16.5 11.5 190.6 20.6 18.5 -21.8 18.4 -21.2 18.2 -20.0 18.5 -21.0
2025-12-25T20:52:07.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:52:07.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:52:07.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.785823
2025-12-25T20:52:07.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:52:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:52:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:52:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:52:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:52:07.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:51:45', tmtdew=6.68, humidity=65.05, cloud=0.0, wind=17.27, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:51:46', seeing=2.92, atlas_timestamp='2025-12-25T18:51:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:50:00')
2025-12-25T20:52:07.085 [DEBUG] [Thread-18277] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:52:07.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-25T20:52:07.178 [DEBUG] [Thread-18280] [transport.py] [_log()] starting thread (client mode): 0xb6baba60
2025-12-25T20:52:07.178 [DEBUG] [Thread-18280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:52:07.193 [DEBUG] [Thread-18280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:52:07.194 [INFO] [Thread-18280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:52:07.201 [DEBUG] [Thread-18280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:52:07.201 [DEBUG] [Thread-18280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] client lang: <none>
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] server lang: <none>
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] kex follows: False
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] Compression: none
2025-12-25T20:52:07.202 [DEBUG] [Thread-18280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:52:07.261 [DEBUG] [Thread-18280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:52:07.262 [DEBUG] [Thread-18280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:52:07.262 [DEBUG] [Thread-18280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:52:07.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:52:07.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:52:07.320 [DEBUG] [Thread-18280] [transport.py] [_log()] userauth is OK
2025-12-25T20:52:07.321 [DEBUG] [Thread-18280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:52:07.321 [DEBUG] [Thread-18280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:52:07.321 [DEBUG] [Thread-18280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:52:07.321 [DEBUG] [Thread-18280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:52:07.340 [INFO] [Thread-18280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:52:07.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-25T20:52:07.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:52:08.207 [DEBUG] [Thread-18280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:52:08.207 [DEBUG] [Thread-18280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:52:08.255 [DEBUG] [Thread-18280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:52:08.255 [DEBUG] [Thread-18280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:52:08.265 [DEBUG] [Thread-18280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:52:08.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:52:08.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-25T20:52:08.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:52:08.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:52:08.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:52:08.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:52:08.302 [DEBUG] [Thread-18280] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:52:10.923 [DEBUG] [Thread-18282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:25.402 [DEBUG] [Thread-18283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:25.973 [DEBUG] [Thread-18284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:38.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:52:38.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:52:38.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-25T20:52:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 52, 17), 6.66, 65.15, 0.0, 19.53, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:52:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:52:17
2025-12-25T20:52:39.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:52:39.314 [DEBUG] [Thread-18285] [transport.py] [_log()] starting thread (client mode): 0xb6bb81c0
2025-12-25T20:52:39.314 [DEBUG] [Thread-18285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:52:39.329 [DEBUG] [Thread-18285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:52:39.329 [INFO] [Thread-18285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] client lang: <none>
2025-12-25T20:52:39.332 [DEBUG] [Thread-18285] [transport.py] [_log()] server lang: <none>
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] kex follows: False
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] Compression: none
2025-12-25T20:52:39.333 [DEBUG] [Thread-18285] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:52:39.350 [DEBUG] [Thread-18285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:52:39.351 [DEBUG] [Thread-18285] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:52:39.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:52:39.352 [DEBUG] [Thread-18285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:52:39.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:52:39.354 [DEBUG] [Thread-18285] [transport.py] [_log()] userauth is OK
2025-12-25T20:52:39.354 [DEBUG] [Thread-18285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:52:39.354 [DEBUG] [Thread-18285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:52:39.354 [DEBUG] [Thread-18285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:52:39.355 [DEBUG] [Thread-18285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:52:39.380 [INFO] [Thread-18285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:52:39.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:52:39.606 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:39.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:40.055 [DEBUG] [Thread-18285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:52:40.056 [DEBUG] [Thread-18285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:52:40.056 [DEBUG] [Thread-18285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:52:40.096 [DEBUG] [Thread-18285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:52:40.096 [DEBUG] [Thread-18285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:52:40.099 [DEBUG] [Thread-18285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:52:40.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:52:40.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:52:40.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:52:40.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:52:40.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:52:40.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:52:40.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:52:40.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:52:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:52:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.786170 -999.00  +17.60   7.61     67  +11.50 1 1 1 1 1     0    0 -0.83 -268.89 ZNESW 9.4 7.6 167.3 15.8 18.5 -21.7 18.4 -21.3 18.2 -19.9 18.5 -20.9
2025-12-25T20:52:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:52:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:52:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.786170
2025-12-25T20:52:40.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:52:40.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:52:40.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:52:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:52:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:52:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:52:17', tmtdew=6.66, humidity=65.15, cloud=0.0, wind=19.53, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:52:18', seeing=2.48, atlas_timestamp='2025-12-25T18:52:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:50:00')
2025-12-25T20:52:40.127 [DEBUG] [Thread-18285] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:52:40.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:52:40.222 [DEBUG] [Thread-18288] [transport.py] [_log()] starting thread (client mode): 0xb6ba9840
2025-12-25T20:52:40.222 [DEBUG] [Thread-18288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:52:40.238 [DEBUG] [Thread-18288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:52:40.238 [INFO] [Thread-18288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] client lang: <none>
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] server lang: <none>
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] kex follows: False
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] Compression: none
2025-12-25T20:52:40.246 [DEBUG] [Thread-18288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:52:40.303 [DEBUG] [Thread-18288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:52:40.304 [DEBUG] [Thread-18288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:52:40.304 [DEBUG] [Thread-18288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:52:40.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:52:40.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:52:40.360 [DEBUG] [Thread-18288] [transport.py] [_log()] userauth is OK
2025-12-25T20:52:40.360 [DEBUG] [Thread-18288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:52:40.361 [DEBUG] [Thread-18288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:52:40.361 [DEBUG] [Thread-18288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:52:40.361 [DEBUG] [Thread-18288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:52:40.379 [INFO] [Thread-18288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:52:40.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-25T20:52:40.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:52:41.010 [DEBUG] [Thread-18290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:52:41.221 [DEBUG] [Thread-18288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:52:41.221 [DEBUG] [Thread-18288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:52:41.269 [DEBUG] [Thread-18288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:52:41.269 [DEBUG] [Thread-18288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:52:41.279 [DEBUG] [Thread-18288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:52:41.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:52:41.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-25T20:52:41.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-25T20:52:41.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:52:41.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:52:41.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:52:41.317 [DEBUG] [Thread-18288] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:52:56.063 [DEBUG] [Thread-18291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:11.102 [DEBUG] [Thread-18292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:11.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:53:11.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:53:11.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-25T20:53:12.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 52, 49), 6.65, 64.68, 0.0, 20.31, 17.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:53:12.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:52:49
2025-12-25T20:53:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:53:12.371 [DEBUG] [Thread-18293] [transport.py] [_log()] starting thread (client mode): 0xb6baa590
2025-12-25T20:53:12.371 [DEBUG] [Thread-18293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:53:12.388 [DEBUG] [Thread-18293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:53:12.388 [INFO] [Thread-18293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] client lang: <none>
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] server lang: <none>
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] kex follows: False
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] Compression: none
2025-12-25T20:53:12.390 [DEBUG] [Thread-18293] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:53:12.403 [DEBUG] [Thread-18293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:53:12.404 [DEBUG] [Thread-18293] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:53:12.404 [DEBUG] [Thread-18293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:53:12.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:53:12.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:53:12.405 [DEBUG] [Thread-18293] [transport.py] [_log()] userauth is OK
2025-12-25T20:53:12.405 [DEBUG] [Thread-18293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:53:12.405 [DEBUG] [Thread-18293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:53:12.405 [DEBUG] [Thread-18293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:53:12.405 [DEBUG] [Thread-18293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:53:12.415 [INFO] [Thread-18293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:53:12.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:53:12.990 [DEBUG] [Thread-18293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:53:12.990 [DEBUG] [Thread-18293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:53:12.990 [DEBUG] [Thread-18293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:53:13.032 [DEBUG] [Thread-18293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:53:13.032 [DEBUG] [Thread-18293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:53:13.033 [DEBUG] [Thread-18293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:53:13.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:53:13.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:53:13.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:53:13.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:53:13.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:53:13.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:53:13.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:53:13.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.786865 -999.00  +17.60  13.06     67  +11.50 1 1 1 1 1     0    0 1.20 -193.02 ZNESW 10.0 13.1 212.0 17.1 18.5 -21.6 18.4 -21.2 18.2 -20.0 18.4 -20.8
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.786865
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:53:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:52:49', tmtdew=6.65, humidity=64.68, cloud=0.0, wind=20.31, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:52:50', seeing=2.55, atlas_timestamp='2025-12-25T18:53:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:50:00')
2025-12-25T20:53:13.045 [DEBUG] [Thread-18293] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:53: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-25T20:53:13.133 [DEBUG] [Thread-18296] [transport.py] [_log()] starting thread (client mode): 0xb955b700
2025-12-25T20:53:13.133 [DEBUG] [Thread-18296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:53:13.148 [DEBUG] [Thread-18296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:53:13.148 [INFO] [Thread-18296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:53:13.155 [DEBUG] [Thread-18296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] client lang: <none>
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] server lang: <none>
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] kex follows: False
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] Compression: none
2025-12-25T20:53:13.156 [DEBUG] [Thread-18296] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:53:13.212 [DEBUG] [Thread-18296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:53:13.212 [DEBUG] [Thread-18296] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:53:13.213 [DEBUG] [Thread-18296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:53:13.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:53:13.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:53:13.269 [DEBUG] [Thread-18296] [transport.py] [_log()] userauth is OK
2025-12-25T20:53:13.269 [DEBUG] [Thread-18296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:53:13.269 [DEBUG] [Thread-18296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:53:13.269 [DEBUG] [Thread-18296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:53:13.270 [DEBUG] [Thread-18296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:53:13.285 [INFO] [Thread-18296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:53:13.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-25T20:53:13.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:53:14.115 [DEBUG] [Thread-18296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:53:14.115 [DEBUG] [Thread-18296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:53:14.162 [DEBUG] [Thread-18296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:53:14.162 [DEBUG] [Thread-18296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:53:14.172 [DEBUG] [Thread-18296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:53:14.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:53:14.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-25T20:53:14.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-25T20:53:14.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:53:14.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:53:14.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:53:14.206 [DEBUG] [Thread-18296] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:53:25.473 [DEBUG] [Thread-18298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:26.137 [DEBUG] [Thread-18299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:39.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:39.812 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:41.198 [DEBUG] [Thread-18300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:53:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:53:44.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:53:44.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-25T20:53:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 53, 21), 6.63, 64.75, 0.0, 21.4, 17.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:53:44.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:53:21
2025-12-25T20:53:45.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:53:45.224 [DEBUG] [Thread-18301] [transport.py] [_log()] starting thread (client mode): 0xb6bf71f0
2025-12-25T20:53:45.224 [DEBUG] [Thread-18301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:53:45.244 [DEBUG] [Thread-18301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:53:45.244 [INFO] [Thread-18301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] client lang: <none>
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] server lang: <none>
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] kex follows: False
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] Compression: none
2025-12-25T20:53:45.247 [DEBUG] [Thread-18301] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:53:45.255 [DEBUG] [Thread-18301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:53:45.255 [DEBUG] [Thread-18301] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:53:45.255 [DEBUG] [Thread-18301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:53:45.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:53:45.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:53:45.256 [DEBUG] [Thread-18301] [transport.py] [_log()] userauth is OK
2025-12-25T20:53:45.256 [DEBUG] [Thread-18301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:53:45.256 [DEBUG] [Thread-18301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:53:45.256 [DEBUG] [Thread-18301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:53:45.256 [DEBUG] [Thread-18301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:53:45.265 [INFO] [Thread-18301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:53:45.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:53:45.896 [DEBUG] [Thread-18301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:53:45.896 [DEBUG] [Thread-18301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:53:45.897 [DEBUG] [Thread-18301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:53:45.938 [DEBUG] [Thread-18301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:53:45.938 [DEBUG] [Thread-18301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:53:45.941 [DEBUG] [Thread-18301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:53:45.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:53:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:53:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:53:45.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:53:45.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:53:45.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:53:45.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:53:45.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:53:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:53:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.787212 -999.00  +17.60  16.79     67  +11.50 1 1 1 1 1     0    0 2.13 -156.18 ZNESW 11.5 16.8 210.8 23.6 18.5 -21.6 18.4 -21.2 18.2 -19.9 18.4 -20.7
2025-12-25T20:53:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:53:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:53:45.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.787212
2025-12-25T20:53:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:53:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:53:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:53:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:53:45.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:53:45.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:53:21', tmtdew=6.63, humidity=64.75, cloud=0.0, wind=21.4, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:53:22', seeing=2.55, atlas_timestamp='2025-12-25T18:53:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:50:00')
2025-12-25T20:53:45.981 [DEBUG] [Thread-18301] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:53:46.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-25T20:53:46.077 [DEBUG] [Thread-18304] [transport.py] [_log()] starting thread (client mode): 0xb6bf68f0
2025-12-25T20:53:46.077 [DEBUG] [Thread-18304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:53:46.092 [DEBUG] [Thread-18304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:53:46.092 [INFO] [Thread-18304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] client lang: <none>
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] server lang: <none>
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] kex follows: False
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:53:46.100 [DEBUG] [Thread-18304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:53:46.101 [DEBUG] [Thread-18304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:53:46.101 [DEBUG] [Thread-18304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:53:46.101 [DEBUG] [Thread-18304] [transport.py] [_log()] Compression: none
2025-12-25T20:53:46.101 [DEBUG] [Thread-18304] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:53:46.157 [DEBUG] [Thread-18304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:53:46.157 [DEBUG] [Thread-18304] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:53:46.158 [DEBUG] [Thread-18304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:53:46.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:53:46.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:53:46.212 [DEBUG] [Thread-18304] [transport.py] [_log()] userauth is OK
2025-12-25T20:53:46.213 [DEBUG] [Thread-18304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:53:46.213 [DEBUG] [Thread-18304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:53:46.213 [DEBUG] [Thread-18304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:53:46.213 [DEBUG] [Thread-18304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:53:46.231 [INFO] [Thread-18304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:53:46.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-25T20:53:46.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:53:47.102 [DEBUG] [Thread-18304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:53:47.103 [DEBUG] [Thread-18304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:53:47.151 [DEBUG] [Thread-18304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:53:47.151 [DEBUG] [Thread-18304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:53:47.160 [DEBUG] [Thread-18304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:53:47.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:53:47.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-25T20:53:47.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-25T20:53:47.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:53:47.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:53:47.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:53:47.195 [DEBUG] [Thread-18304] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:53:56.228 [DEBUG] [Thread-18306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:11.270 [DEBUG] [Thread-18307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:54:17.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:54:17.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-25T20:54:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 53, 53), 6.7, 64.68, 0.0, 18.83, 17.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:54:17.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:53:53
2025-12-25T20:54:18.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:54:18.194 [DEBUG] [Thread-18308] [transport.py] [_log()] starting thread (client mode): 0xb6bf74c0
2025-12-25T20:54:18.194 [DEBUG] [Thread-18308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:54:18.214 [DEBUG] [Thread-18308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:54:18.214 [INFO] [Thread-18308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:54:18.218 [DEBUG] [Thread-18308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:54:18.218 [DEBUG] [Thread-18308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:54:18.218 [DEBUG] [Thread-18308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:54:18.218 [DEBUG] [Thread-18308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:18.218 [DEBUG] [Thread-18308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:18.218 [DEBUG] [Thread-18308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] client lang: <none>
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] server lang: <none>
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] kex follows: False
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:54:18.219 [DEBUG] [Thread-18308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:54:18.220 [DEBUG] [Thread-18308] [transport.py] [_log()] Compression: none
2025-12-25T20:54:18.220 [DEBUG] [Thread-18308] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:54:18.237 [DEBUG] [Thread-18308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:54:18.238 [DEBUG] [Thread-18308] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:54:18.238 [DEBUG] [Thread-18308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:54:18.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:54:18.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:54:18.240 [DEBUG] [Thread-18308] [transport.py] [_log()] userauth is OK
2025-12-25T20:54:18.240 [DEBUG] [Thread-18308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:54:18.240 [DEBUG] [Thread-18308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:54:18.240 [DEBUG] [Thread-18308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:54:18.241 [DEBUG] [Thread-18308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:54:18.265 [INFO] [Thread-18308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:54:18.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:54:18.902 [DEBUG] [Thread-18308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:54:18.902 [DEBUG] [Thread-18308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:54:18.903 [DEBUG] [Thread-18308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:54:18.943 [DEBUG] [Thread-18308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:54:18.943 [DEBUG] [Thread-18308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:54:18.944 [DEBUG] [Thread-18308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:54:18.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:54:18.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:54:18.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:54:18.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:54:18.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:54:18.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:54:18.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.787212 -999.00  +17.60  16.79     67  +11.50 1 1 1 1 1     0    0 2.13 -156.18 ZNESW 11.5 16.8 210.8 23.6 18.5 -21.6 18.4 -21.2 18.2 -19.9 18.4 -20.7
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.787212
2025-12-25T20:54:18.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:54:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:54:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:54:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:54:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:54:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:53:53', tmtdew=6.7, humidity=64.68, cloud=0.0, wind=18.83, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:53:54', seeing=2.18, atlas_timestamp='2025-12-25T18:53:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:50:00')
2025-12-25T20:54:18.957 [DEBUG] [Thread-18308] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:54:19.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-25T20:54:19.042 [DEBUG] [Thread-18311] [transport.py] [_log()] starting thread (client mode): 0xb6b00d00
2025-12-25T20:54:19.042 [DEBUG] [Thread-18311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:54:19.058 [DEBUG] [Thread-18311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:54:19.058 [INFO] [Thread-18311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:54:19.065 [DEBUG] [Thread-18311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:54:19.066 [DEBUG] [Thread-18311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:54:19.066 [DEBUG] [Thread-18311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:54:19.066 [DEBUG] [Thread-18311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:19.066 [DEBUG] [Thread-18311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:19.066 [DEBUG] [Thread-18311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] client lang: <none>
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] server lang: <none>
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] kex follows: False
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] Compression: none
2025-12-25T20:54:19.067 [DEBUG] [Thread-18311] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:54:19.122 [DEBUG] [Thread-18311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:54:19.122 [DEBUG] [Thread-18311] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:54:19.122 [DEBUG] [Thread-18311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:54:19.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:54:19.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:54:19.179 [DEBUG] [Thread-18311] [transport.py] [_log()] userauth is OK
2025-12-25T20:54:19.179 [DEBUG] [Thread-18311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:54:19.179 [DEBUG] [Thread-18311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:54:19.179 [DEBUG] [Thread-18311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:54:19.180 [DEBUG] [Thread-18311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:54:19.202 [INFO] [Thread-18311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:54:19.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-25T20:54:19.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:54:20.018 [DEBUG] [Thread-18311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:54:20.018 [DEBUG] [Thread-18311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:54:20.067 [DEBUG] [Thread-18311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:54:20.067 [DEBUG] [Thread-18311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:54:20.075 [DEBUG] [Thread-18311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:54:20.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:54:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:54:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:54:20.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:54:20.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:54:20.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:54:20.114 [DEBUG] [Thread-18311] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:54:25.538 [DEBUG] [Thread-18313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:26.311 [DEBUG] [Thread-18314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:40.012 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:40.013 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:41.366 [DEBUG] [Thread-18315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:54:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:54:50.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:54:50.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-25T20:54:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 54, 25), 6.69, 64.71, 0.0, 20.93, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:54:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:54:25
2025-12-25T20:54:50.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:54:51.095 [DEBUG] [Thread-18316] [transport.py] [_log()] starting thread (client mode): 0xb6bf7220
2025-12-25T20:54:51.095 [DEBUG] [Thread-18316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:54:51.115 [DEBUG] [Thread-18316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:54:51.115 [INFO] [Thread-18316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:54:51.118 [DEBUG] [Thread-18316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] client lang: <none>
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] server lang: <none>
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] kex follows: False
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] Compression: none
2025-12-25T20:54:51.119 [DEBUG] [Thread-18316] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:54:51.136 [DEBUG] [Thread-18316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:54:51.137 [DEBUG] [Thread-18316] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:54:51.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:54:51.137 [DEBUG] [Thread-18316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:54:51.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:54:51.181 [DEBUG] [Thread-18316] [transport.py] [_log()] userauth is OK
2025-12-25T20:54:51.181 [DEBUG] [Thread-18316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:54:51.181 [DEBUG] [Thread-18316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:54:51.182 [DEBUG] [Thread-18316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:54:51.182 [DEBUG] [Thread-18316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:54:51.214 [INFO] [Thread-18316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:54:51.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:54:51.860 [DEBUG] [Thread-18316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:54:51.860 [DEBUG] [Thread-18316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:54:51.860 [DEBUG] [Thread-18316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:54:51.901 [DEBUG] [Thread-18316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:54:51.901 [DEBUG] [Thread-18316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:54:51.904 [DEBUG] [Thread-18316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:54:51.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:54:51.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:54:51.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:54:51.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:54:51.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:54:51.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:54:51.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:54:51.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:54:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:54:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.787559 -999.00  +17.60  14.10     67  +11.50 1 1 1 1 1     0    0 3.04 -121.32 ZNESW 14.6 14.1 204.2 23.6 18.4 -22.0 18.4 -21.9 18.2 -20.0 18.4 -20.9
2025-12-25T20:54:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:54:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:54:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.787559
2025-12-25T20:54:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:54:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:54:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:54:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:54:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:54:51.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:54:25', tmtdew=6.69, humidity=64.71, cloud=0.0, wind=20.93, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:54:26', seeing=2.88, atlas_timestamp='2025-12-25T18:54:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:53:00')
2025-12-25T20:54:51.932 [DEBUG] [Thread-18316] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:54:52.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-25T20:54:52.027 [DEBUG] [Thread-18319] [transport.py] [_log()] starting thread (client mode): 0xb6bf6e30
2025-12-25T20:54:52.028 [DEBUG] [Thread-18319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:54:52.043 [DEBUG] [Thread-18319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:54:52.043 [INFO] [Thread-18319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:54:52.050 [DEBUG] [Thread-18319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] client lang: <none>
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] server lang: <none>
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] kex follows: False
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:54:52.051 [DEBUG] [Thread-18319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:54:52.052 [DEBUG] [Thread-18319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:54:52.052 [DEBUG] [Thread-18319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:54:52.052 [DEBUG] [Thread-18319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:54:52.052 [DEBUG] [Thread-18319] [transport.py] [_log()] Compression: none
2025-12-25T20:54:52.052 [DEBUG] [Thread-18319] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:54:52.111 [DEBUG] [Thread-18319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:54:52.112 [DEBUG] [Thread-18319] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:54:52.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:54:52.113 [DEBUG] [Thread-18319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:54:52.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:54:52.170 [DEBUG] [Thread-18319] [transport.py] [_log()] userauth is OK
2025-12-25T20:54:52.171 [DEBUG] [Thread-18319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:54:52.171 [DEBUG] [Thread-18319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:54:52.171 [DEBUG] [Thread-18319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:54:52.171 [DEBUG] [Thread-18319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:54:52.191 [INFO] [Thread-18319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:54:52.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-25T20:54:52.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:54:53.080 [DEBUG] [Thread-18319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:54:53.080 [DEBUG] [Thread-18319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:54:53.128 [DEBUG] [Thread-18319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:54:53.128 [DEBUG] [Thread-18319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:54:53.136 [DEBUG] [Thread-18319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:54:53.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:54:53.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-25T20:54:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:54:53.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:54:53.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:54:53.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:54:53.171 [DEBUG] [Thread-18319] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:54:56.402 [DEBUG] [Thread-18321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:11.451 [DEBUG] [Thread-18322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:23.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:55:23.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:55:23.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-25T20:55:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 54, 57), 6.64, 64.72, 0.0, 21.37, 17.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:55:23.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:54:57
2025-12-25T20:55:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:55:24.150 [DEBUG] [Thread-18323] [transport.py] [_log()] starting thread (client mode): 0xb6bb4220
2025-12-25T20:55:24.151 [DEBUG] [Thread-18323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:55:24.172 [DEBUG] [Thread-18323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:55:24.172 [INFO] [Thread-18323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] client lang: <none>
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] server lang: <none>
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] kex follows: False
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:55:24.176 [DEBUG] [Thread-18323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:55:24.177 [DEBUG] [Thread-18323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:55:24.177 [DEBUG] [Thread-18323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:55:24.177 [DEBUG] [Thread-18323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:55:24.177 [DEBUG] [Thread-18323] [transport.py] [_log()] Compression: none
2025-12-25T20:55:24.177 [DEBUG] [Thread-18323] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:55:24.194 [DEBUG] [Thread-18323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:55:24.195 [DEBUG] [Thread-18323] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:55:24.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:55:24.195 [DEBUG] [Thread-18323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:55:24.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:55:24.197 [DEBUG] [Thread-18323] [transport.py] [_log()] userauth is OK
2025-12-25T20:55:24.198 [DEBUG] [Thread-18323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:55:24.198 [DEBUG] [Thread-18323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:55:24.198 [DEBUG] [Thread-18323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:55:24.198 [DEBUG] [Thread-18323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:55:24.219 [INFO] [Thread-18323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:55:24.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:55:24.879 [DEBUG] [Thread-18323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:55:24.879 [DEBUG] [Thread-18323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:55:24.879 [DEBUG] [Thread-18323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:55:24.920 [DEBUG] [Thread-18323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:55:24.920 [DEBUG] [Thread-18323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:55:24.923 [DEBUG] [Thread-18323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:55:24.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:55:24.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:55:24.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:55:24.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:55:24.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:55:24.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:55:24.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:55:24.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:55:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:55:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.787906 -999.00  +17.50  18.22     68  +11.50 1 1 1 1 1     0    0 3.51 -104.26 ZNESW 16.9 18.2 199.1 27.1 18.5 -21.8 18.3 -21.5 18.1 -20.1 18.4 -20.9
2025-12-25T20:55:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:55:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:55:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.787906
2025-12-25T20:55:24.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:55:24.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:55:24.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:55:24.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:55:24.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:55:24.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:54:57', tmtdew=6.64, humidity=64.72, cloud=0.0, wind=21.37, 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-25T20:54:58', seeing=2.66, atlas_timestamp='2025-12-25T18:54:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:53:00')
2025-12-25T20:55:24.951 [DEBUG] [Thread-18323] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:55:25.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-25T20:55:25.043 [DEBUG] [Thread-18326] [transport.py] [_log()] starting thread (client mode): 0xb955be50
2025-12-25T20:55:25.043 [DEBUG] [Thread-18326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:55:25.059 [DEBUG] [Thread-18326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:55:25.059 [INFO] [Thread-18326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] client lang: <none>
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] server lang: <none>
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] kex follows: False
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:55:25.067 [DEBUG] [Thread-18326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:55:25.068 [DEBUG] [Thread-18326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:55:25.068 [DEBUG] [Thread-18326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:55:25.068 [DEBUG] [Thread-18326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:55:25.068 [DEBUG] [Thread-18326] [transport.py] [_log()] Compression: none
2025-12-25T20:55:25.068 [DEBUG] [Thread-18326] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:55:25.125 [DEBUG] [Thread-18326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:55:25.126 [DEBUG] [Thread-18326] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:55:25.126 [DEBUG] [Thread-18326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:55:25.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:55:25.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:55:25.181 [DEBUG] [Thread-18326] [transport.py] [_log()] userauth is OK
2025-12-25T20:55:25.181 [DEBUG] [Thread-18326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:55:25.181 [DEBUG] [Thread-18326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:55:25.181 [DEBUG] [Thread-18326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:55:25.181 [DEBUG] [Thread-18326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:55:25.201 [INFO] [Thread-18326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:55:25.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-25T20:55:25.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:55:25.592 [DEBUG] [Thread-18328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:26.036 [DEBUG] [Thread-18326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:55:26.037 [DEBUG] [Thread-18326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:55:26.084 [DEBUG] [Thread-18326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:55:26.084 [DEBUG] [Thread-18326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:55:26.093 [DEBUG] [Thread-18326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:55:26.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:55: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')
2025-12-25T20:55:26.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-25T20:55:26.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:55:26.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:55:26.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:55:26.127 [DEBUG] [Thread-18326] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:55:26.479 [DEBUG] [Thread-18329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:40.224 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:40.225 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:41.543 [DEBUG] [Thread-18330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:56.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:55:56.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:55:56.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-25T20:55:56.576 [DEBUG] [Thread-18331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:55:56.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 55, 30), 6.65, 64.65, 0.0, 24.38, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:55:56.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:55:30
2025-12-25T20:55:56.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:55:57.130 [DEBUG] [Thread-18332] [transport.py] [_log()] starting thread (client mode): 0xb9559810
2025-12-25T20:55:57.130 [DEBUG] [Thread-18332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:55:57.150 [DEBUG] [Thread-18332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:55:57.151 [INFO] [Thread-18332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] client lang: <none>
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] server lang: <none>
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] kex follows: False
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] Compression: none
2025-12-25T20:55:57.154 [DEBUG] [Thread-18332] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:55:57.163 [DEBUG] [Thread-18332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:55:57.163 [DEBUG] [Thread-18332] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:55:57.164 [DEBUG] [Thread-18332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:55:57.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:55:57.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:55:57.165 [DEBUG] [Thread-18332] [transport.py] [_log()] userauth is OK
2025-12-25T20:55:57.165 [DEBUG] [Thread-18332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:55:57.166 [DEBUG] [Thread-18332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:55:57.166 [DEBUG] [Thread-18332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:55:57.166 [DEBUG] [Thread-18332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:55:57.189 [INFO] [Thread-18332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:55:57.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:55:57.855 [DEBUG] [Thread-18332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:55:57.855 [DEBUG] [Thread-18332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:55:57.856 [DEBUG] [Thread-18332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:55:57.896 [DEBUG] [Thread-18332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:55:57.896 [DEBUG] [Thread-18332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:55:57.900 [DEBUG] [Thread-18332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:55:57.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:55:57.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:55:57.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:55:57.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:55:57.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:55:57.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:55:57.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:55:57.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:55:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:55:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.788254 -999.00  +17.30  23.79     68  +11.50 1 1 1 1 1     0    0 3.83 -93.53 ZNESW 19.3 23.8 198.8 29.2 18.4 -22.4 18.2 -22.3 18.1 -20.5 18.4 -21.4
2025-12-25T20:55:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:55:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:55:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.788254
2025-12-25T20:55:57.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:55:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:55:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:55:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:55:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:55:57.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:55:30', tmtdew=6.65, humidity=64.65, cloud=0.0, wind=24.38, 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-25T20:55:30', seeing=2.98, atlas_timestamp='2025-12-25T18:55:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:53:00')
2025-12-25T20:55:57.930 [DEBUG] [Thread-18332] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:55:58.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-25T20:55:58.024 [DEBUG] [Thread-18335] [transport.py] [_log()] starting thread (client mode): 0xb6b630a0
2025-12-25T20:55:58.024 [DEBUG] [Thread-18335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:55:58.041 [DEBUG] [Thread-18335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:55:58.041 [INFO] [Thread-18335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:55:58.048 [DEBUG] [Thread-18335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] client lang: <none>
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] server lang: <none>
2025-12-25T20:55:58.049 [DEBUG] [Thread-18335] [transport.py] [_log()] kex follows: False
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] Compression: none
2025-12-25T20:55:58.050 [DEBUG] [Thread-18335] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:55:58.107 [DEBUG] [Thread-18335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:55:58.107 [DEBUG] [Thread-18335] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:55:58.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:55:58.108 [DEBUG] [Thread-18335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:55:58.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:55:58.163 [DEBUG] [Thread-18335] [transport.py] [_log()] userauth is OK
2025-12-25T20:55:58.163 [DEBUG] [Thread-18335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:55:58.164 [DEBUG] [Thread-18335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:55:58.164 [DEBUG] [Thread-18335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:55:58.164 [DEBUG] [Thread-18335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:55:58.184 [INFO] [Thread-18335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:55:58.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-25T20:55:58.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:55:59.048 [DEBUG] [Thread-18335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:55:59.048 [DEBUG] [Thread-18335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:55:59.096 [DEBUG] [Thread-18335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:55:59.096 [DEBUG] [Thread-18335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:55:59.105 [DEBUG] [Thread-18335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:55:59.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:55:59.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-25T20:55:59.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-25T20:55:59.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:55:59.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:55:59.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:55:59.140 [DEBUG] [Thread-18335] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:56:11.607 [DEBUG] [Thread-18337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:56:25.659 [DEBUG] [Thread-18338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:56:26.664 [DEBUG] [Thread-18339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:56:29.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:56:29.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:56:29.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-25T20:56:29.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 56, 2), 6.61, 64.83, 0.0, 24.97, 17.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:56:29.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:56:02
2025-12-25T20:56:30.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:56:30.186 [DEBUG] [Thread-18340] [transport.py] [_log()] starting thread (client mode): 0xb6bb5030
2025-12-25T20:56:30.187 [DEBUG] [Thread-18340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:56:30.207 [DEBUG] [Thread-18340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:56:30.207 [INFO] [Thread-18340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] client lang: <none>
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] server lang: <none>
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] kex follows: False
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] Compression: none
2025-12-25T20:56:30.210 [DEBUG] [Thread-18340] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:56:30.226 [DEBUG] [Thread-18340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:56:30.226 [DEBUG] [Thread-18340] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:56:30.226 [DEBUG] [Thread-18340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:56:30.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:56:30.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:56:30.227 [DEBUG] [Thread-18340] [transport.py] [_log()] userauth is OK
2025-12-25T20:56:30.227 [DEBUG] [Thread-18340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:56:30.227 [DEBUG] [Thread-18340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:56:30.227 [DEBUG] [Thread-18340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:56:30.227 [DEBUG] [Thread-18340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:56:30.236 [INFO] [Thread-18340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:56:30.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:56:30.908 [DEBUG] [Thread-18340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:56:30.908 [DEBUG] [Thread-18340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:56:30.908 [DEBUG] [Thread-18340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:56:30.950 [DEBUG] [Thread-18340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:56:30.950 [DEBUG] [Thread-18340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:56:30.952 [DEBUG] [Thread-18340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:56:30.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:56:30.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:56:30.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:56:30.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:56:30.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:56:30.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:56:30.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.788601 -999.00  +17.30  20.58     68  +11.50 1 1 1 1 1     0    0 4.09 -82.42 ZNESW 23.3 20.6 206.7 26.1 18.4 -22.1 18.2 -21.7 18.1 -20.1 18.4 -21.2
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.788601
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:56:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:56:02', tmtdew=6.61, humidity=64.83, cloud=0.0, wind=24.97, 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-25T20:56:02', seeing=2.27, atlas_timestamp='2025-12-25T18:55:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:53:00')
2025-12-25T20:56:30.975 [DEBUG] [Thread-18340] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:56:31.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:56:31.060 [DEBUG] [Thread-18343] [transport.py] [_log()] starting thread (client mode): 0xb9559e70
2025-12-25T20:56:31.060 [DEBUG] [Thread-18343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:56:31.075 [DEBUG] [Thread-18343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:56:31.075 [INFO] [Thread-18343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:56:31.082 [DEBUG] [Thread-18343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] client lang: <none>
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] server lang: <none>
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] kex follows: False
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] Compression: none
2025-12-25T20:56:31.083 [DEBUG] [Thread-18343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:56:31.140 [DEBUG] [Thread-18343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:56:31.140 [DEBUG] [Thread-18343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:56:31.140 [DEBUG] [Thread-18343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:56:31.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:56:31.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:56:31.197 [DEBUG] [Thread-18343] [transport.py] [_log()] userauth is OK
2025-12-25T20:56:31.197 [DEBUG] [Thread-18343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:56:31.197 [DEBUG] [Thread-18343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:56:31.197 [DEBUG] [Thread-18343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:56:31.197 [DEBUG] [Thread-18343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:56:31.212 [INFO] [Thread-18343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:56:31.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-25T20:56:31.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:56:32.050 [DEBUG] [Thread-18343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:56:32.051 [DEBUG] [Thread-18343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:56:32.099 [DEBUG] [Thread-18343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:56:32.099 [DEBUG] [Thread-18343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:56:32.108 [DEBUG] [Thread-18343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:56:32.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:56:32.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:56: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-25T20:56:32.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:56:32.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:56:32.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:56:32.145 [DEBUG] [Thread-18343] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:56:40.470 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:56:40.472 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:56:41.697 [DEBUG] [Thread-18345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:56:56.757 [DEBUG] [Thread-18346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:02.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:57:02.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:57:02.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T20:57:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 56, 34), 6.43, 65.96, 0.0, 26.5, 17.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:57:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:56:34
2025-12-25T20:57:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:57:03.142 [DEBUG] [Thread-18347] [transport.py] [_log()] starting thread (client mode): 0xb955a650
2025-12-25T20:57:03.142 [DEBUG] [Thread-18347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:57:03.162 [DEBUG] [Thread-18347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:57:03.162 [INFO] [Thread-18347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] client lang: <none>
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] server lang: <none>
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] kex follows: False
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] Compression: none
2025-12-25T20:57:03.166 [DEBUG] [Thread-18347] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:57:03.182 [DEBUG] [Thread-18347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:57:03.183 [DEBUG] [Thread-18347] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:57:03.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:57:03.184 [DEBUG] [Thread-18347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:57:03.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:57:03.186 [DEBUG] [Thread-18347] [transport.py] [_log()] userauth is OK
2025-12-25T20:57:03.186 [DEBUG] [Thread-18347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:57:03.186 [DEBUG] [Thread-18347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:57:03.186 [DEBUG] [Thread-18347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:57:03.186 [DEBUG] [Thread-18347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:57:03.209 [INFO] [Thread-18347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:57:03.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:57:03.870 [DEBUG] [Thread-18347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:57:03.870 [DEBUG] [Thread-18347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:57:03.870 [DEBUG] [Thread-18347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:57:03.910 [DEBUG] [Thread-18347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:57:03.911 [DEBUG] [Thread-18347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:57:03.914 [DEBUG] [Thread-18347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:57:03.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:57:03.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:57:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:57:03.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:57:03.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:57:03.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:57:03.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:57:03.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:57:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:57:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.788948 -999.00  +17.20  19.58     69  +11.50 1 1 1 1 1     0    0 4.28 -79.83 ZNESW 20.9 19.6 198.4 28.1 18.3 -22.1 18.2 -21.9 18.0 -20.1 18.3 -21.3
2025-12-25T20:57:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:57:03.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:57:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.788948
2025-12-25T20:57:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:57:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:57:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:57:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:57:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:57:03.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:56:34', tmtdew=6.43, humidity=65.96, cloud=0.0, wind=26.5, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:56:34', seeing=2.25, atlas_timestamp='2025-12-25T18:56:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.07624999999999993, 0.22724999999999973, 0.12049999999999983, 0.10249999999999915, 0.1332500000000003, 0.07899999999999885, 0.12424999999999997, 0.08099999999999952, 0.08699999999999974, 0.14024999999999999, 0.05799999999999983, 0.09600000000000009, 0.11324999999999896, 0.134999999999998, 0.08299999999999841, 0.07975000000000065, 0.14949999999999974, 0.13649999999999984, 0.13074999999999903, 0.14099999999999824, 0.14174999999999827, 0.16575000000000095, 0.18725000000000058, 0.10849999999999937, 0.1844999999999999, 0.2417499999999997, 0.19250000000000078, 0.33499999999999996, 0.3180000000000014, 0.18400000000000105, 0.2110000000000003, 0.1352499999999992], zp_timestamp='2025-12-25T18:53:00')
2025-12-25T20:57:03.938 [DEBUG] [Thread-18347] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:57:04.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-25T20:57:04.038 [DEBUG] [Thread-18350] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T20:57:04.038 [DEBUG] [Thread-18350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:57:04.056 [DEBUG] [Thread-18350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:57:04.056 [INFO] [Thread-18350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:57:04.063 [DEBUG] [Thread-18350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] client lang: <none>
2025-12-25T20:57:04.064 [DEBUG] [Thread-18350] [transport.py] [_log()] server lang: <none>
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] kex follows: False
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] Compression: none
2025-12-25T20:57:04.065 [DEBUG] [Thread-18350] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:57:04.123 [DEBUG] [Thread-18350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:57:04.124 [DEBUG] [Thread-18350] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:57:04.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:57:04.125 [DEBUG] [Thread-18350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:57:04.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:57:04.180 [DEBUG] [Thread-18350] [transport.py] [_log()] userauth is OK
2025-12-25T20:57:04.180 [DEBUG] [Thread-18350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:57:04.180 [DEBUG] [Thread-18350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:57:04.181 [DEBUG] [Thread-18350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:57:04.181 [DEBUG] [Thread-18350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:57:04.199 [INFO] [Thread-18350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:57:04.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-25T20:57:04.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:57:05.089 [DEBUG] [Thread-18350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:57:05.089 [DEBUG] [Thread-18350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:57:05.137 [DEBUG] [Thread-18350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:57:05.137 [DEBUG] [Thread-18350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:57:05.146 [DEBUG] [Thread-18350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:57:05.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:57:05.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-25T20:57:05.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-25T20:57:05.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:57:05.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:57:05.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:57:05.178 [DEBUG] [Thread-18350] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:57:11.789 [DEBUG] [Thread-18352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:25.747 [DEBUG] [Thread-18353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:26.827 [DEBUG] [Thread-18354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:57:35.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:57:35.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-25T20:57:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 57, 6), 6.42, 66.0, 0.0, 28.2, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:57:35.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:57:06
2025-12-25T20:57:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:57:36.167 [DEBUG] [Thread-18355] [transport.py] [_log()] starting thread (client mode): 0xb6b03fa0
2025-12-25T20:57:36.168 [DEBUG] [Thread-18355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:57:36.189 [DEBUG] [Thread-18355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:57:36.189 [INFO] [Thread-18355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] client lang: <none>
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] server lang: <none>
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] kex follows: False
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:57:36.192 [DEBUG] [Thread-18355] [transport.py] [_log()] Compression: none
2025-12-25T20:57:36.193 [DEBUG] [Thread-18355] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:57:36.211 [DEBUG] [Thread-18355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:57:36.212 [DEBUG] [Thread-18355] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:57:36.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:57:36.213 [DEBUG] [Thread-18355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:57:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:57:36.215 [DEBUG] [Thread-18355] [transport.py] [_log()] userauth is OK
2025-12-25T20:57:36.215 [DEBUG] [Thread-18355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:57:36.215 [DEBUG] [Thread-18355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:57:36.215 [DEBUG] [Thread-18355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:57:36.215 [DEBUG] [Thread-18355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:57:36.251 [INFO] [Thread-18355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:57:36.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:57:36.932 [DEBUG] [Thread-18355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:57:36.932 [DEBUG] [Thread-18355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:57:36.933 [DEBUG] [Thread-18355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:57:36.973 [DEBUG] [Thread-18355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:57:36.973 [DEBUG] [Thread-18355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:57:36.977 [DEBUG] [Thread-18355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:57:36.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:57:36.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:57:36.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:57:36.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:57:36.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:57:36.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:57:37.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:57:37.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:57:37.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:57:37.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.789643 -999.00  +17.20  18.35     69  +11.50 1 1 1 1 1     0    0 4.32 -73.76 ZNESW 15.6 18.4 193.6 21.4 18.2 -21.9 18.1 -21.4 17.9 -20.0 18.3 -21.0
2025-12-25T20:57:37.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:57:37.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:57:37.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.789643
2025-12-25T20:57:37.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:57:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:57:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:57:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:57:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:57:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:57:06', tmtdew=6.42, humidity=66.0, cloud=0.0, wind=28.2, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:57:06', seeing=2.25, atlas_timestamp='2025-12-25T18:57:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.07925000000000004, 0.09625000000000128, 0.18825000000000003, 0.045999999999999375, 0.1144999999999996, 0.08675000000000033, 0.06899999999999906, 0.15024999999999977, 0.06649999999999956, 0.10400000000000098, 0.14124999999999943, 0.04100000000000037, 0.10650000000000048, 0.14074999999999882, 0.129999999999999, 0.13699999999999868, 0.05524999999999913, 0.14649999999999963, 0.12899999999999956, 0.12124999999999808, 0.11599999999999788, 0.12774999999999892, 0.14225000000000065, 0.15975000000000072, 0.08799999999999919, 0.18399999999999928, 0.2627500000000005, 0.2575000000000003, 0.33700000000000063, 0.3210000000000024, 0.1960000000000015, 0.22600000000000087, 0.15974999999999895], zp_timestamp='2025-12-25T18:56:00')
2025-12-25T20:57:37.002 [DEBUG] [Thread-18355] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:57:37.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-25T20:57:37.098 [DEBUG] [Thread-18358] [transport.py] [_log()] starting thread (client mode): 0xb6baa2c0
2025-12-25T20:57:37.098 [DEBUG] [Thread-18358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:57:37.113 [DEBUG] [Thread-18358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:57:37.114 [INFO] [Thread-18358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:57:37.121 [DEBUG] [Thread-18358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:57:37.121 [DEBUG] [Thread-18358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] client lang: <none>
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] server lang: <none>
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] kex follows: False
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] Compression: none
2025-12-25T20:57:37.122 [DEBUG] [Thread-18358] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:57:37.182 [DEBUG] [Thread-18358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:57:37.182 [DEBUG] [Thread-18358] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:57:37.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:57:37.183 [DEBUG] [Thread-18358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:57:37.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:57:37.238 [DEBUG] [Thread-18358] [transport.py] [_log()] userauth is OK
2025-12-25T20:57:37.238 [DEBUG] [Thread-18358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:57:37.238 [DEBUG] [Thread-18358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:57:37.238 [DEBUG] [Thread-18358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:57:37.238 [DEBUG] [Thread-18358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:57:37.257 [INFO] [Thread-18358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:57:37.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-25T20:57:37.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:57:38.100 [DEBUG] [Thread-18358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:57:38.100 [DEBUG] [Thread-18358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:57:38.149 [DEBUG] [Thread-18358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:57:38.149 [DEBUG] [Thread-18358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:57:38.158 [DEBUG] [Thread-18358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:57:38.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:57:38.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-25T20:57:38.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:57:38.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:57:38.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:57:38.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:57:38.196 [DEBUG] [Thread-18358] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:57:40.669 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:40.670 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:41.865 [DEBUG] [Thread-18360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:57:56.921 [DEBUG] [Thread-18361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:08.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:58:08.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:58:08.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-25T20:58:08.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 57, 38), 6.35, 66.08, 0.0, 26.22, 17.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:58:08.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:57:38
2025-12-25T20:58:09.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:58:09.185 [DEBUG] [Thread-18362] [transport.py] [_log()] starting thread (client mode): 0xb6b015a0
2025-12-25T20:58:09.185 [DEBUG] [Thread-18362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:58:09.207 [DEBUG] [Thread-18362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:58:09.207 [INFO] [Thread-18362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] client lang: <none>
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] server lang: <none>
2025-12-25T20:58:09.210 [DEBUG] [Thread-18362] [transport.py] [_log()] kex follows: False
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] Compression: none
2025-12-25T20:58:09.211 [DEBUG] [Thread-18362] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:58:09.228 [DEBUG] [Thread-18362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:58:09.228 [DEBUG] [Thread-18362] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:58:09.229 [DEBUG] [Thread-18362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:58:09.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:58:09.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:58:09.231 [DEBUG] [Thread-18362] [transport.py] [_log()] userauth is OK
2025-12-25T20:58:09.231 [DEBUG] [Thread-18362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:58:09.231 [DEBUG] [Thread-18362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:58:09.231 [DEBUG] [Thread-18362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:58:09.231 [DEBUG] [Thread-18362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:58:09.248 [INFO] [Thread-18362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:58:09.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:58:09.879 [DEBUG] [Thread-18362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:58:09.879 [DEBUG] [Thread-18362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:58:09.880 [DEBUG] [Thread-18362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:58:09.920 [DEBUG] [Thread-18362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:58:09.920 [DEBUG] [Thread-18362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:58:09.923 [DEBUG] [Thread-18362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:58:09.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:58:09.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:58:09.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:58:09.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:58:09.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:58:09.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:58:09.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:58:09.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:58:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:58:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.789990 -999.00  +17.20  15.15     69  +11.50 1 1 1 1 1     0    0 4.25 -75.16 ZNESW 14.9 15.2 199.2 21.8 18.2 -21.9 18.1 -21.6 17.9 -19.9 18.2 -20.9
2025-12-25T20:58:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:58:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:58:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.789990
2025-12-25T20:58:09.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:58:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:58:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:58:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:58:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:58:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:57:38', tmtdew=6.35, humidity=66.08, cloud=0.0, wind=26.22, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:57:38', seeing=2.25, atlas_timestamp='2025-12-25T18:57:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.07925000000000004, 0.09625000000000128, 0.18825000000000003, 0.045999999999999375, 0.1144999999999996, 0.08675000000000033, 0.06899999999999906, 0.15024999999999977, 0.06649999999999956, 0.10400000000000098, 0.14124999999999943, 0.04100000000000037, 0.10650000000000048, 0.14074999999999882, 0.129999999999999, 0.13699999999999868, 0.05524999999999913, 0.14649999999999963, 0.12899999999999956, 0.12124999999999808, 0.11599999999999788, 0.12774999999999892, 0.14225000000000065, 0.15975000000000072, 0.08799999999999919, 0.18399999999999928, 0.2627500000000005, 0.2575000000000003, 0.33700000000000063, 0.3210000000000024, 0.1960000000000015, 0.22600000000000087, 0.15974999999999895], zp_timestamp='2025-12-25T18:56:00')
2025-12-25T20:58:09.945 [DEBUG] [Thread-18362] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:58:10.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-25T20:58:10.038 [DEBUG] [Thread-18365] [transport.py] [_log()] starting thread (client mode): 0xb6b612a0
2025-12-25T20:58:10.038 [DEBUG] [Thread-18365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:58:10.053 [DEBUG] [Thread-18365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:58:10.053 [INFO] [Thread-18365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] client lang: <none>
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] server lang: <none>
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] kex follows: False
2025-12-25T20:58:10.061 [DEBUG] [Thread-18365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:58:10.062 [DEBUG] [Thread-18365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:58:10.062 [DEBUG] [Thread-18365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:58:10.062 [DEBUG] [Thread-18365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:58:10.062 [DEBUG] [Thread-18365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:58:10.062 [DEBUG] [Thread-18365] [transport.py] [_log()] Compression: none
2025-12-25T20:58:10.062 [DEBUG] [Thread-18365] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:58:10.118 [DEBUG] [Thread-18365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:58:10.119 [DEBUG] [Thread-18365] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:58:10.120 [DEBUG] [Thread-18365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:58:10.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:58:10.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:58:10.174 [DEBUG] [Thread-18365] [transport.py] [_log()] userauth is OK
2025-12-25T20:58:10.175 [DEBUG] [Thread-18365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:58:10.175 [DEBUG] [Thread-18365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:58:10.175 [DEBUG] [Thread-18365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:58:10.175 [DEBUG] [Thread-18365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:58:10.194 [INFO] [Thread-18365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:58:10.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-25T20:58:10.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:58:11.005 [DEBUG] [Thread-18365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:58:11.006 [DEBUG] [Thread-18365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:58:11.053 [DEBUG] [Thread-18365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:58:11.053 [DEBUG] [Thread-18365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:58:11.062 [DEBUG] [Thread-18365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:58:11.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:58:11.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-25T20:58: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-25T20:58:11.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:58:11.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:58:11.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:58:11.094 [DEBUG] [Thread-18365] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:58:11.951 [DEBUG] [Thread-18367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:25.815 [DEBUG] [Thread-18368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:26.992 [DEBUG] [Thread-18369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:40.873 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:40.875 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:58:41.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:58:41.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-25T20:58:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 58, 10), 6.33, 66.15, 0.0, 25.95, 17.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:58:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:58:10
2025-12-25T20:58:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:58:42.021 [DEBUG] [Thread-18370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:58:42.106 [DEBUG] [Thread-18371] [transport.py] [_log()] starting thread (client mode): 0xb6bb7400
2025-12-25T20:58:42.107 [DEBUG] [Thread-18371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:58:42.127 [DEBUG] [Thread-18371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:58:42.127 [INFO] [Thread-18371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:58:42.131 [DEBUG] [Thread-18371] [transport.py] [_log()] client lang: <none>
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] server lang: <none>
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] kex follows: False
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] Compression: none
2025-12-25T20:58:42.132 [DEBUG] [Thread-18371] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:58:42.150 [DEBUG] [Thread-18371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:58:42.151 [DEBUG] [Thread-18371] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:58:42.152 [DEBUG] [Thread-18371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:58:42.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:58:42.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:58:42.154 [DEBUG] [Thread-18371] [transport.py] [_log()] userauth is OK
2025-12-25T20:58:42.154 [DEBUG] [Thread-18371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:58:42.154 [DEBUG] [Thread-18371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:58:42.155 [DEBUG] [Thread-18371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:58:42.155 [DEBUG] [Thread-18371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:58:42.178 [INFO] [Thread-18371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:58:42.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:58:42.828 [DEBUG] [Thread-18371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:58:42.828 [DEBUG] [Thread-18371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:58:42.828 [DEBUG] [Thread-18371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:58:42.869 [DEBUG] [Thread-18371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:58:42.869 [DEBUG] [Thread-18371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:58:42.873 [DEBUG] [Thread-18371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:58:42.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:58:42.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:58:42.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:58:42.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:58:42.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:58:42.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:58:42.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:58:42.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:58:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:58:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.790337 -999.00  +17.20  10.99     69  +11.50 1 1 1 1 1     0    0 4.38 -71.75 ZNESW 13.7 11.0 217.1 28.8 18.2 -21.9 18.1 -21.5 17.9 -20.0 18.2 -21.0
2025-12-25T20:58:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:58:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:58:42.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.790337
2025-12-25T20:58:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:58:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:58:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:58:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:58:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:58:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:58:10', tmtdew=6.33, humidity=66.15, cloud=0.0, wind=25.95, 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-25T20:58:11', seeing=2.25, atlas_timestamp='2025-12-25T18:58:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.07925000000000004, 0.09625000000000128, 0.18825000000000003, 0.045999999999999375, 0.1144999999999996, 0.08675000000000033, 0.06899999999999906, 0.15024999999999977, 0.06649999999999956, 0.10400000000000098, 0.14124999999999943, 0.04100000000000037, 0.10650000000000048, 0.14074999999999882, 0.129999999999999, 0.13699999999999868, 0.05524999999999913, 0.14649999999999963, 0.12899999999999956, 0.12124999999999808, 0.11599999999999788, 0.12774999999999892, 0.14225000000000065, 0.15975000000000072, 0.08799999999999919, 0.18399999999999928, 0.2627500000000005, 0.2575000000000003, 0.33700000000000063, 0.3210000000000024, 0.1960000000000015, 0.22600000000000087, 0.15974999999999895], zp_timestamp='2025-12-25T18:56:00')
2025-12-25T20:58:42.900 [DEBUG] [Thread-18371] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:58:42.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T20:58:42.993 [DEBUG] [Thread-18374] [transport.py] [_log()] starting thread (client mode): 0xb6bb7df0
2025-12-25T20:58:42.993 [DEBUG] [Thread-18374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:58:43.009 [DEBUG] [Thread-18374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:58:43.009 [INFO] [Thread-18374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:58:43.017 [DEBUG] [Thread-18374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:58:43.017 [DEBUG] [Thread-18374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] client lang: <none>
2025-12-25T20:58:43.018 [DEBUG] [Thread-18374] [transport.py] [_log()] server lang: <none>
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] kex follows: False
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:58:43.019 [DEBUG] [Thread-18374] [transport.py] [_log()] Compression: none
2025-12-25T20:58:43.020 [DEBUG] [Thread-18374] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:58:43.076 [DEBUG] [Thread-18374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:58:43.077 [DEBUG] [Thread-18374] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:58:43.077 [DEBUG] [Thread-18374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:58:43.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:58:43.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:58:43.132 [DEBUG] [Thread-18374] [transport.py] [_log()] userauth is OK
2025-12-25T20:58:43.132 [DEBUG] [Thread-18374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:58:43.132 [DEBUG] [Thread-18374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:58:43.132 [DEBUG] [Thread-18374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:58:43.132 [DEBUG] [Thread-18374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:58:43.146 [INFO] [Thread-18374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:58:43.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:58:43.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:58:44.009 [DEBUG] [Thread-18374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:58:44.009 [DEBUG] [Thread-18374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:58:44.056 [DEBUG] [Thread-18374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:58:44.056 [DEBUG] [Thread-18374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:58:44.065 [DEBUG] [Thread-18374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:58:44.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:58:44.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-25T20:58:44.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-25T20:58:44.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:58:44.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:58:44.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:58:44.096 [DEBUG] [Thread-18374] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:58:57.053 [DEBUG] [Thread-18376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:12.093 [DEBUG] [Thread-18377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:14.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:59:14.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:59:14.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-25T20:59:14.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 58, 42), 6.32, 66.21, 0.0, 25.58, 17.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:59:14.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:58:42
2025-12-25T20:59:14.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:59:15.114 [DEBUG] [Thread-18378] [transport.py] [_log()] starting thread (client mode): 0xb6b22920
2025-12-25T20:59:15.114 [DEBUG] [Thread-18378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:59:15.133 [DEBUG] [Thread-18378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:59:15.133 [INFO] [Thread-18378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:59:15.136 [DEBUG] [Thread-18378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:59:15.136 [DEBUG] [Thread-18378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] client lang: <none>
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] server lang: <none>
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] kex follows: False
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:59:15.137 [DEBUG] [Thread-18378] [transport.py] [_log()] Compression: none
2025-12-25T20:59:15.138 [DEBUG] [Thread-18378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:59:15.153 [DEBUG] [Thread-18378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:59:15.153 [DEBUG] [Thread-18378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:59:15.153 [DEBUG] [Thread-18378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:59:15.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:59:15.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:59:15.154 [DEBUG] [Thread-18378] [transport.py] [_log()] userauth is OK
2025-12-25T20:59:15.154 [DEBUG] [Thread-18378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:59:15.154 [DEBUG] [Thread-18378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:59:15.154 [DEBUG] [Thread-18378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:59:15.154 [DEBUG] [Thread-18378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:59:15.163 [INFO] [Thread-18378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:59:15.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:59:15.810 [DEBUG] [Thread-18378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:59:15.810 [DEBUG] [Thread-18378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:59:15.810 [DEBUG] [Thread-18378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:59:15.852 [DEBUG] [Thread-18378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:59:15.852 [DEBUG] [Thread-18378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:59:15.854 [DEBUG] [Thread-18378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:59:15.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:59:15.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:59:15.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:59:15.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:59:15.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:59:15.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:59:15.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.790684 -999.00  +17.20  20.53     69  +11.50 1 1 1 1 1     0    0 4.34 -70.93 ZNESW 14.5 20.5 199.5 28.0 18.1 -21.6 18.0 -21.7 17.9 -19.8 18.1 -20.8
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.790684
2025-12-25T20:59:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:59:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:59:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:59:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:59:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:59:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:58:42', tmtdew=6.32, humidity=66.21, cloud=0.0, wind=25.58, 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-25T20:58:43', seeing=2.25, atlas_timestamp='2025-12-25T18:58:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.07925000000000004, 0.09625000000000128, 0.18825000000000003, 0.045999999999999375, 0.1144999999999996, 0.08675000000000033, 0.06899999999999906, 0.15024999999999977, 0.06649999999999956, 0.10400000000000098, 0.14124999999999943, 0.04100000000000037, 0.10650000000000048, 0.14074999999999882, 0.129999999999999, 0.13699999999999868, 0.05524999999999913, 0.14649999999999963, 0.12899999999999956, 0.12124999999999808, 0.11599999999999788, 0.12774999999999892, 0.14225000000000065, 0.15975000000000072, 0.08799999999999919, 0.18399999999999928, 0.2627500000000005, 0.2575000000000003, 0.33700000000000063, 0.3210000000000024, 0.1960000000000015, 0.22600000000000087, 0.15974999999999895], zp_timestamp='2025-12-25T18:56:00')
2025-12-25T20:59:15.873 [DEBUG] [Thread-18378] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:59:15.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-25T20:59:15.957 [DEBUG] [Thread-18381] [transport.py] [_log()] starting thread (client mode): 0xb6b21c90
2025-12-25T20:59:15.957 [DEBUG] [Thread-18381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:59:15.972 [DEBUG] [Thread-18381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:59:15.972 [INFO] [Thread-18381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] client lang: <none>
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] server lang: <none>
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] kex follows: False
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] Compression: none
2025-12-25T20:59:15.979 [DEBUG] [Thread-18381] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:59:16.037 [DEBUG] [Thread-18381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:59:16.037 [DEBUG] [Thread-18381] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:59:16.037 [DEBUG] [Thread-18381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:59:16.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:59:16.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:59:16.095 [DEBUG] [Thread-18381] [transport.py] [_log()] userauth is OK
2025-12-25T20:59:16.095 [DEBUG] [Thread-18381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:59:16.095 [DEBUG] [Thread-18381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:59:16.095 [DEBUG] [Thread-18381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:59:16.095 [DEBUG] [Thread-18381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:59:16.113 [INFO] [Thread-18381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:59:16.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T20:59:16.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:59:16.941 [DEBUG] [Thread-18381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:59:16.941 [DEBUG] [Thread-18381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:59:16.989 [DEBUG] [Thread-18381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:59:16.989 [DEBUG] [Thread-18381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:59:16.998 [DEBUG] [Thread-18381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:59:17.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:59:17.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-25T20:59:17.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T20:59:17.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:59:17.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:59:17.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:59:17.029 [DEBUG] [Thread-18381] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:59:25.881 [DEBUG] [Thread-18383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:27.125 [DEBUG] [Thread-18384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:41.079 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:41.080 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:42.183 [DEBUG] [Thread-18385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T20:59:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T20:59:47.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T20:59: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-25T20:59:47.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 59, 14), 6.29, 66.31, 0.0, 26.47, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-25T20:59:47.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:59:14
2025-12-25T20:59:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T20:59:48.119 [DEBUG] [Thread-18386] [transport.py] [_log()] starting thread (client mode): 0xb6b23df0
2025-12-25T20:59:48.119 [DEBUG] [Thread-18386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:59:48.139 [DEBUG] [Thread-18386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T20:59:48.139 [INFO] [Thread-18386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] client lang: <none>
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] server lang: <none>
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] kex follows: False
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] Compression: none
2025-12-25T20:59:48.142 [DEBUG] [Thread-18386] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:59:48.156 [DEBUG] [Thread-18386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:59:48.157 [DEBUG] [Thread-18386] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:59:48.157 [DEBUG] [Thread-18386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T20:59:48.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T20:59:48.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:59:48.158 [DEBUG] [Thread-18386] [transport.py] [_log()] userauth is OK
2025-12-25T20:59:48.158 [DEBUG] [Thread-18386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:59:48.158 [DEBUG] [Thread-18386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:59:48.158 [DEBUG] [Thread-18386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T20:59:48.158 [DEBUG] [Thread-18386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:59:48.175 [INFO] [Thread-18386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:59:48.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:59:48.815 [DEBUG] [Thread-18386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:59:48.815 [DEBUG] [Thread-18386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:59:48.815 [DEBUG] [Thread-18386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T20:59:48.855 [DEBUG] [Thread-18386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:59:48.855 [DEBUG] [Thread-18386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:59:48.857 [DEBUG] [Thread-18386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:59:48.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:59:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T20:59:48.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T20:59:48.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T20:59:48.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:59:48.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T20:59:48.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:59:48.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:59:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T20:59:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.791032 -999.00  +17.10  17.23     69  +11.60 1 1 1 1 1     0    0 4.41 -68.37 ZNESW 17.1 17.2 192.0 27.5 18.1 -21.8 18.0 -21.6 17.9 -19.8 18.1 -20.6
2025-12-25T20:59:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T20:59:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.791032
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T20:59:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:59:14', tmtdew=6.29, humidity=66.31, cloud=0.0, wind=26.47, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T20:59:15', seeing=2.18, atlas_timestamp='2025-12-25T18:59:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[0.07925000000000004, 0.09625000000000128, 0.18825000000000003, 0.045999999999999375, 0.1144999999999996, 0.08675000000000033, 0.06899999999999906, 0.15024999999999977, 0.06649999999999956, 0.10400000000000098, 0.14124999999999943, 0.04100000000000037, 0.10650000000000048, 0.14074999999999882, 0.129999999999999, 0.13699999999999868, 0.05524999999999913, 0.14649999999999963, 0.12899999999999956, 0.12124999999999808, 0.11599999999999788, 0.12774999999999892, 0.14225000000000065, 0.15975000000000072, 0.08799999999999919, 0.18399999999999928, 0.2627500000000005, 0.2575000000000003, 0.33700000000000063, 0.3210000000000024, 0.1960000000000015, 0.22600000000000087, 0.15974999999999895], zp_timestamp='2025-12-25T18:56:00')
2025-12-25T20:59:48.873 [DEBUG] [Thread-18386] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:59:48.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-25T20:59:48.974 [DEBUG] [Thread-18389] [transport.py] [_log()] starting thread (client mode): 0xb6b20730
2025-12-25T20:59:48.975 [DEBUG] [Thread-18389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T20:59:48.989 [DEBUG] [Thread-18389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T20:59:48.989 [INFO] [Thread-18389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] client lang: <none>
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] server lang: <none>
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] kex follows: False
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] Compression: none
2025-12-25T20:59:48.997 [DEBUG] [Thread-18389] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T20:59:49.054 [DEBUG] [Thread-18389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T20:59:49.054 [DEBUG] [Thread-18389] [transport.py] [_log()] Switch to new keys ...
2025-12-25T20:59:49.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T20:59:49.055 [DEBUG] [Thread-18389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T20:59:49.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T20:59:49.115 [DEBUG] [Thread-18389] [transport.py] [_log()] userauth is OK
2025-12-25T20:59:49.115 [DEBUG] [Thread-18389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T20:59:49.115 [DEBUG] [Thread-18389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T20:59:49.115 [DEBUG] [Thread-18389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T20:59:49.116 [DEBUG] [Thread-18389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T20:59:49.133 [INFO] [Thread-18389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T20:59:49.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-25T20:59:49.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T20:59:49.983 [DEBUG] [Thread-18389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T20:59:49.983 [DEBUG] [Thread-18389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T20:59:50.031 [DEBUG] [Thread-18389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T20:59:50.032 [DEBUG] [Thread-18389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T20:59:50.040 [DEBUG] [Thread-18389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T20:59:50.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T20:59:50.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T20:59:50.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-25T20:59:50.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T20:59:50.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T20:59:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T20:59:50.072 [DEBUG] [Thread-18389] [transport.py] [_log()] EOF in transport thread
2025-12-25T20:59:57.216 [DEBUG] [Thread-18391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:12.267 [DEBUG] [Thread-18392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:20.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:00:20.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:00:20.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-25T21:00:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 20, 59, 46), 6.27, 66.43, 0.0, 23.78, 16.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:00:20.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 20:59:46
2025-12-25T21:00:20.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:00:21.124 [DEBUG] [Thread-18393] [transport.py] [_log()] starting thread (client mode): 0xb6ba9810
2025-12-25T21:00:21.124 [DEBUG] [Thread-18393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:00:21.144 [DEBUG] [Thread-18393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:00:21.144 [INFO] [Thread-18393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:00:21.145 [DEBUG] [Thread-18393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] client lang: <none>
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] server lang: <none>
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] kex follows: False
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] Compression: none
2025-12-25T21:00:21.146 [DEBUG] [Thread-18393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:00:21.153 [DEBUG] [Thread-18393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:00:21.154 [DEBUG] [Thread-18393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:00:21.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:00:21.154 [DEBUG] [Thread-18393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:00:21.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:00:21.155 [DEBUG] [Thread-18393] [transport.py] [_log()] userauth is OK
2025-12-25T21:00:21.155 [DEBUG] [Thread-18393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:00:21.155 [DEBUG] [Thread-18393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:00:21.155 [DEBUG] [Thread-18393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:00:21.155 [DEBUG] [Thread-18393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:00:21.174 [INFO] [Thread-18393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:00:21.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:00:21.809 [DEBUG] [Thread-18393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:00:21.809 [DEBUG] [Thread-18393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:00:21.809 [DEBUG] [Thread-18393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:00:21.850 [DEBUG] [Thread-18393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:00:21.850 [DEBUG] [Thread-18393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:00:21.852 [DEBUG] [Thread-18393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:00:21.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:00:21.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:00:21.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:00:21.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:00:21.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:00:21.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:00:21.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.791378 -999.00  +17.10  19.77     70  +11.60 1 1 1 1 1     0    0 4.36 -65.94 ZNESW 19.2 19.8 199.1 29.3 18.1 -21.6 17.9 -21.5 17.8 -19.8 18.1 -20.8
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.791378
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:00:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T20:59:46', tmtdew=6.27, humidity=66.43, cloud=0.0, wind=23.78, temperature=16.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:00:19', seeing=1.96, atlas_timestamp='2025-12-25T18:59:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.07925000000000004, 0.09625000000000128, 0.18825000000000003, 0.045999999999999375, 0.1144999999999996, 0.08675000000000033, 0.06899999999999906, 0.15024999999999977, 0.06649999999999956, 0.10400000000000098, 0.14124999999999943, 0.04100000000000037, 0.10650000000000048, 0.14074999999999882, 0.129999999999999, 0.13699999999999868, 0.05524999999999913, 0.14649999999999963, 0.12899999999999956, 0.12124999999999808, 0.11599999999999788, 0.12774999999999892, 0.14225000000000065, 0.15975000000000072, 0.08799999999999919, 0.18399999999999928, 0.2627500000000005, 0.2575000000000003, 0.33700000000000063, 0.3210000000000024, 0.1960000000000015, 0.22600000000000087, 0.15974999999999895], zp_timestamp='2025-12-25T18:56:00')
2025-12-25T21:00:21.871 [DEBUG] [Thread-18393] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:00:21.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-25T21:00:21.956 [DEBUG] [Thread-18396] [transport.py] [_log()] starting thread (client mode): 0xb6bf7e50
2025-12-25T21:00:21.956 [DEBUG] [Thread-18396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:00:21.971 [DEBUG] [Thread-18396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:00:21.971 [INFO] [Thread-18396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] client lang: <none>
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] server lang: <none>
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] kex follows: False
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] Compression: none
2025-12-25T21:00:21.983 [DEBUG] [Thread-18396] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:00:22.036 [DEBUG] [Thread-18396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:00:22.037 [DEBUG] [Thread-18396] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:00:22.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:00:22.038 [DEBUG] [Thread-18396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:00:22.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:00:22.094 [DEBUG] [Thread-18396] [transport.py] [_log()] userauth is OK
2025-12-25T21:00:22.094 [DEBUG] [Thread-18396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:00:22.095 [DEBUG] [Thread-18396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:00:22.095 [DEBUG] [Thread-18396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:00:22.095 [DEBUG] [Thread-18396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:00:22.113 [INFO] [Thread-18396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:00:22.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:00:22.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:00:22.989 [DEBUG] [Thread-18396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:00:22.989 [DEBUG] [Thread-18396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:00:23.037 [DEBUG] [Thread-18396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:00:23.037 [DEBUG] [Thread-18396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:00:23.046 [DEBUG] [Thread-18396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:00:23.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:00:23.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-25T21:00:23.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:00:23.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:00:23.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:00:23.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:00:23.083 [DEBUG] [Thread-18396] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:00:25.945 [DEBUG] [Thread-18398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:27.300 [DEBUG] [Thread-18399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:41.281 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:41.283 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:42.341 [DEBUG] [Thread-18400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:00:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:00:53.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:00:53.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-25T21:00:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 0, 18), 6.27, 66.43, 0.0, 23.31, 16.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:00:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:00:18
2025-12-25T21:00:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:00:54.133 [DEBUG] [Thread-18401] [transport.py] [_log()] starting thread (client mode): 0xb6b02590
2025-12-25T21:00:54.134 [DEBUG] [Thread-18401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:00:54.155 [DEBUG] [Thread-18401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:00:54.155 [INFO] [Thread-18401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] client lang: <none>
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] server lang: <none>
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] kex follows: False
2025-12-25T21:00:54.158 [DEBUG] [Thread-18401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:00:54.159 [DEBUG] [Thread-18401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:00:54.159 [DEBUG] [Thread-18401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:00:54.159 [DEBUG] [Thread-18401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:00:54.159 [DEBUG] [Thread-18401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:00:54.159 [DEBUG] [Thread-18401] [transport.py] [_log()] Compression: none
2025-12-25T21:00:54.159 [DEBUG] [Thread-18401] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:00:54.179 [DEBUG] [Thread-18401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:00:54.180 [DEBUG] [Thread-18401] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:00:54.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:00:54.181 [DEBUG] [Thread-18401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:00:54.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:00:54.183 [DEBUG] [Thread-18401] [transport.py] [_log()] userauth is OK
2025-12-25T21:00:54.183 [DEBUG] [Thread-18401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:00:54.183 [DEBUG] [Thread-18401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:00:54.183 [DEBUG] [Thread-18401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:00:54.184 [DEBUG] [Thread-18401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:00:54.219 [INFO] [Thread-18401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:00:54.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:00:54.834 [DEBUG] [Thread-18401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:00:54.834 [DEBUG] [Thread-18401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:00:54.835 [DEBUG] [Thread-18401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:00:54.875 [DEBUG] [Thread-18401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:00:54.875 [DEBUG] [Thread-18401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:00:54.878 [DEBUG] [Thread-18401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:00:54.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:00:54.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:00:54.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:00:54.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:00:54.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:00:54.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:00:54.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:00:54.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:00:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:00:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.792073 -999.00  +17.00  21.85     70  +11.50 1 1 1 1 1     0    0 4.43 -59.89 ZNESW 12.3 21.9 204.8 26.5 18.1 -21.7 17.9 -21.8 17.8 -19.8 18.1 -20.9
2025-12-25T21:00:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:00:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:00:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.792073
2025-12-25T21:00:54.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:00:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:00:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:00:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:00:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:00:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:00:18', tmtdew=6.27, humidity=66.43, cloud=0.0, wind=23.31, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:00:52', seeing=2.1, atlas_timestamp='2025-12-25T19:00:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T18:59:00')
2025-12-25T21:00:54.907 [DEBUG] [Thread-18401] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:00:54.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-25T21:00:55.001 [DEBUG] [Thread-18404] [transport.py] [_log()] starting thread (client mode): 0xb6bb6770
2025-12-25T21:00:55.002 [DEBUG] [Thread-18404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:00:55.016 [DEBUG] [Thread-18404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:00:55.016 [INFO] [Thread-18404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:00:55.024 [DEBUG] [Thread-18404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:00:55.024 [DEBUG] [Thread-18404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:00:55.024 [DEBUG] [Thread-18404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:00:55.024 [DEBUG] [Thread-18404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:55.024 [DEBUG] [Thread-18404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:00:55.024 [DEBUG] [Thread-18404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] client lang: <none>
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] server lang: <none>
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] kex follows: False
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] Compression: none
2025-12-25T21:00:55.025 [DEBUG] [Thread-18404] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:00:55.082 [DEBUG] [Thread-18404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:00:55.083 [DEBUG] [Thread-18404] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:00:55.084 [DEBUG] [Thread-18404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:00:55.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:00:55.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:00:55.139 [DEBUG] [Thread-18404] [transport.py] [_log()] userauth is OK
2025-12-25T21:00:55.139 [DEBUG] [Thread-18404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:00:55.139 [DEBUG] [Thread-18404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:00:55.139 [DEBUG] [Thread-18404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:00:55.139 [DEBUG] [Thread-18404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:00:55.158 [INFO] [Thread-18404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:00:55.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-25T21:00:55.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:00:55.971 [DEBUG] [Thread-18404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:00:55.971 [DEBUG] [Thread-18404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:00:56.019 [DEBUG] [Thread-18404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:00:56.019 [DEBUG] [Thread-18404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:00:56.029 [DEBUG] [Thread-18404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:00:56.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:00:56.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-25T21:00:56.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:00:56.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:00:56.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:00:56.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:00:56.065 [DEBUG] [Thread-18404] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:00:57.375 [DEBUG] [Thread-18406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:12.415 [DEBUG] [Thread-18407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:25.998 [DEBUG] [Thread-18408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:01:26.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:01:26.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-25T21:01:26.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 0, 51), 6.19, 66.51, 0.0, 22.99, 16.94, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:01:26.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:00:51
2025-12-25T21:01:26.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:01:27.092 [DEBUG] [Thread-18409] [transport.py] [_log()] starting thread (client mode): 0xb6bf4520
2025-12-25T21:01:27.092 [DEBUG] [Thread-18409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:01:27.112 [DEBUG] [Thread-18409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:01:27.112 [INFO] [Thread-18409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] client lang: <none>
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] server lang: <none>
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] kex follows: False
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] Compression: none
2025-12-25T21:01:27.115 [DEBUG] [Thread-18409] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:01:27.128 [DEBUG] [Thread-18409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:01:27.128 [DEBUG] [Thread-18409] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:01:27.128 [DEBUG] [Thread-18409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:01:27.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:01:27.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:01:27.130 [DEBUG] [Thread-18409] [transport.py] [_log()] userauth is OK
2025-12-25T21:01:27.130 [DEBUG] [Thread-18409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:01:27.130 [DEBUG] [Thread-18409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:01:27.130 [DEBUG] [Thread-18409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:01:27.131 [DEBUG] [Thread-18409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:01:27.154 [INFO] [Thread-18409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:01:27.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:01:27.451 [DEBUG] [Thread-18411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:27.764 [DEBUG] [Thread-18409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:01:27.764 [DEBUG] [Thread-18409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:01:27.765 [DEBUG] [Thread-18409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:01:27.805 [DEBUG] [Thread-18409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:01:27.805 [DEBUG] [Thread-18409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:01:27.808 [DEBUG] [Thread-18409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:01:27.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:01:27.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:01:27.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:01:27.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:01:27.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:01:27.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:01:27.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:01:27.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:01:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:01:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.792420 -999.00  +17.00  16.19     70  +11.60 1 1 1 1 1     0    0 4.33 -62.84 ZNESW 16.9 16.2 197.6 26.3 18.0 -21.7 17.9 -22.0 17.7 -19.7 18.1 -20.6
2025-12-25T21:01:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:01:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:01:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.792420
2025-12-25T21:01:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:01:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:01:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:01:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:01:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:01:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:00:51', tmtdew=6.19, humidity=66.51, cloud=0.0, wind=22.99, 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-25T21:01:24', seeing=2.1, atlas_timestamp='2025-12-25T19:01:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T18:59:00')
2025-12-25T21:01:27.840 [DEBUG] [Thread-18409] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:01:27.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-25T21:01:27.946 [DEBUG] [Thread-18413] [transport.py] [_log()] starting thread (client mode): 0xb955a5c0
2025-12-25T21:01:27.946 [DEBUG] [Thread-18413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:01:27.960 [DEBUG] [Thread-18413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:01:27.961 [INFO] [Thread-18413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:01:27.968 [DEBUG] [Thread-18413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:01:27.968 [DEBUG] [Thread-18413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] client lang: <none>
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] server lang: <none>
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] kex follows: False
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] Compression: none
2025-12-25T21:01:27.969 [DEBUG] [Thread-18413] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:01:28.027 [DEBUG] [Thread-18413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:01:28.028 [DEBUG] [Thread-18413] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:01:28.029 [DEBUG] [Thread-18413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:01:28.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:01:28.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:01:28.083 [DEBUG] [Thread-18413] [transport.py] [_log()] userauth is OK
2025-12-25T21:01:28.084 [DEBUG] [Thread-18413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:01:28.084 [DEBUG] [Thread-18413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:01:28.084 [DEBUG] [Thread-18413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:01:28.084 [DEBUG] [Thread-18413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:01:28.109 [INFO] [Thread-18413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:01:28.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:01:28.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:01:28.969 [DEBUG] [Thread-18413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:01:28.969 [DEBUG] [Thread-18413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:01:29.017 [DEBUG] [Thread-18413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:01:29.017 [DEBUG] [Thread-18413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:01:29.027 [DEBUG] [Thread-18413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:01:29.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:01:29.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-25T21:01:29.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-25T21:01:29.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:01:29.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:01:29.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:01:29.064 [DEBUG] [Thread-18413] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:01:41.485 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:41.486 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:42.486 [DEBUG] [Thread-18415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:57.532 [DEBUG] [Thread-18416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:01:59.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:01:59.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:01:59.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-25T21:01:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 1, 56), 6.25, 66.5, 0.0, 23.7, 16.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:01:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:01:56
2025-12-25T21:01:59.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:02:00.056 [DEBUG] [Thread-18417] [transport.py] [_log()] starting thread (client mode): 0xb6bf7eb0
2025-12-25T21:02:00.056 [DEBUG] [Thread-18417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:02:00.077 [DEBUG] [Thread-18417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:02:00.077 [INFO] [Thread-18417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:02:00.078 [DEBUG] [Thread-18417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] client lang: <none>
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] server lang: <none>
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] kex follows: False
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:02:00.079 [DEBUG] [Thread-18417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:02:00.080 [DEBUG] [Thread-18417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:02:00.080 [DEBUG] [Thread-18417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:02:00.080 [DEBUG] [Thread-18417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:02:00.080 [DEBUG] [Thread-18417] [transport.py] [_log()] Compression: none
2025-12-25T21:02:00.080 [DEBUG] [Thread-18417] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:02:00.098 [DEBUG] [Thread-18417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:02:00.099 [DEBUG] [Thread-18417] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:02:00.099 [DEBUG] [Thread-18417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:02:00.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:02:00.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:02:00.101 [DEBUG] [Thread-18417] [transport.py] [_log()] userauth is OK
2025-12-25T21:02:00.102 [DEBUG] [Thread-18417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:02:00.102 [DEBUG] [Thread-18417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:02:00.102 [DEBUG] [Thread-18417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:02:00.102 [DEBUG] [Thread-18417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:02:00.137 [INFO] [Thread-18417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:02:00.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:02:00.826 [DEBUG] [Thread-18417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:02:00.826 [DEBUG] [Thread-18417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:02:00.827 [DEBUG] [Thread-18417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:02:00.867 [DEBUG] [Thread-18417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:02:00.867 [DEBUG] [Thread-18417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:02:00.871 [DEBUG] [Thread-18417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:02:00.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:02:00.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:02:00.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:02:00.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:02:00.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:02:00.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:02:00.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:02:00.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:02:00.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:02:00.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.792768 -999.00  +17.00  13.39     70  +11.50 1 1 1 1 1     0    0 4.14 -67.46 ZNESW 13.6 13.4 202.8 20.4 18.0 -21.6 17.9 -21.5 17.8 -19.7 18.0 -20.6
2025-12-25T21:02:00.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:02:00.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:02:00.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.792768
2025-12-25T21:02:00.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:02:00.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:02:00.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:02:00.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:02:00.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:02:00.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:01:56', tmtdew=6.25, humidity=66.5, cloud=0.0, wind=23.7, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:01:56', seeing=2.13, atlas_timestamp='2025-12-25T19:01:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T18:59:00')
2025-12-25T21:02:00.897 [DEBUG] [Thread-18417] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:02:00.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:02:00.992 [DEBUG] [Thread-18420] [transport.py] [_log()] starting thread (client mode): 0xb6b7fa90
2025-12-25T21:02:00.992 [DEBUG] [Thread-18420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:02:01.007 [DEBUG] [Thread-18420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:02:01.007 [INFO] [Thread-18420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:02:01.014 [DEBUG] [Thread-18420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:02:01.014 [DEBUG] [Thread-18420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:02:01.014 [DEBUG] [Thread-18420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:02:01.014 [DEBUG] [Thread-18420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] client lang: <none>
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] server lang: <none>
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] kex follows: False
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] Compression: none
2025-12-25T21:02:01.015 [DEBUG] [Thread-18420] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:02:01.072 [DEBUG] [Thread-18420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:02:01.072 [DEBUG] [Thread-18420] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:02:01.073 [DEBUG] [Thread-18420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:02:01.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:02:01.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:02:01.129 [DEBUG] [Thread-18420] [transport.py] [_log()] userauth is OK
2025-12-25T21:02:01.130 [DEBUG] [Thread-18420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:02:01.130 [DEBUG] [Thread-18420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:02:01.130 [DEBUG] [Thread-18420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:02:01.130 [DEBUG] [Thread-18420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:02:01.149 [INFO] [Thread-18420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:02:01.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-25T21:02:01.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:02:01.971 [DEBUG] [Thread-18420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:02:01.971 [DEBUG] [Thread-18420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:02:02.020 [DEBUG] [Thread-18420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:02:02.020 [DEBUG] [Thread-18420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:02:02.030 [DEBUG] [Thread-18420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:02:02.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:02:02.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-25T21:02: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') -> 00000000
2025-12-25T21:02:02.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:02:02.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:02:02.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:02:02.066 [DEBUG] [Thread-18420] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:02:04.748 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:12.565 [DEBUG] [Thread-18422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:26.049 [DEBUG] [Thread-18423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:27.611 [DEBUG] [Thread-18424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:32.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:02:32.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:02:32.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-25T21:02:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 2, 28), 6.23, 66.56, 0.0, 22.62, 16.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:02:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:02:28
2025-12-25T21:02:32.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:02:33.057 [DEBUG] [Thread-18425] [transport.py] [_log()] starting thread (client mode): 0xb6b77df0
2025-12-25T21:02:33.057 [DEBUG] [Thread-18425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:02:33.073 [DEBUG] [Thread-18425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:02:33.073 [INFO] [Thread-18425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] client lang: <none>
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] server lang: <none>
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] kex follows: False
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:02:33.076 [DEBUG] [Thread-18425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:02:33.077 [DEBUG] [Thread-18425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:02:33.077 [DEBUG] [Thread-18425] [transport.py] [_log()] Compression: none
2025-12-25T21:02:33.077 [DEBUG] [Thread-18425] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:02:33.093 [DEBUG] [Thread-18425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:02:33.094 [DEBUG] [Thread-18425] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:02:33.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:02:33.095 [DEBUG] [Thread-18425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:02:33.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:02:33.097 [DEBUG] [Thread-18425] [transport.py] [_log()] userauth is OK
2025-12-25T21:02:33.097 [DEBUG] [Thread-18425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:02:33.097 [DEBUG] [Thread-18425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:02:33.098 [DEBUG] [Thread-18425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:02:33.098 [DEBUG] [Thread-18425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:02:33.123 [INFO] [Thread-18425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:02:33.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:02:33.743 [DEBUG] [Thread-18425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:02:33.744 [DEBUG] [Thread-18425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:02:33.744 [DEBUG] [Thread-18425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:02:33.785 [DEBUG] [Thread-18425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:02:33.785 [DEBUG] [Thread-18425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:02:33.788 [DEBUG] [Thread-18425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:02:33.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:02:33.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:02:33.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:02:33.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:02:33.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:02:33.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:02:33.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:02:33.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:02:33.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:02:33.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.793115 -999.00  +17.10  17.11     70  +11.50 1 1 1 1 1     0    0 4.18 -65.39 ZNESW 14.3 17.1 189.6 21.2 18.0 -21.5 17.9 -21.0 17.8 -19.5 18.0 -20.4
2025-12-25T21:02:33.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:02:33.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:02:33.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.793115
2025-12-25T21:02:33.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:02:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:02:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:02:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:02:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:02:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:02:28', tmtdew=6.23, humidity=66.56, cloud=0.0, wind=22.62, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:02:28', seeing=2.02, atlas_timestamp='2025-12-25T19:02:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T18:59:00')
2025-12-25T21:02:33.806 [DEBUG] [Thread-18425] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:02:33.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-25T21:02:33.900 [DEBUG] [Thread-18428] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f10
2025-12-25T21:02:33.900 [DEBUG] [Thread-18428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:02:33.915 [DEBUG] [Thread-18428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:02:33.915 [INFO] [Thread-18428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] client lang: <none>
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server lang: <none>
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] kex follows: False
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:02:33.923 [DEBUG] [Thread-18428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:02:33.924 [DEBUG] [Thread-18428] [transport.py] [_log()] Compression: none
2025-12-25T21:02:33.924 [DEBUG] [Thread-18428] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:02:33.982 [DEBUG] [Thread-18428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:02:33.982 [DEBUG] [Thread-18428] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:02:33.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:02:33.983 [DEBUG] [Thread-18428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:02:33.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:02:34.038 [DEBUG] [Thread-18428] [transport.py] [_log()] userauth is OK
2025-12-25T21:02:34.038 [DEBUG] [Thread-18428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:02:34.038 [DEBUG] [Thread-18428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:02:34.039 [DEBUG] [Thread-18428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:02:34.039 [DEBUG] [Thread-18428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:02:34.057 [INFO] [Thread-18428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:02:34.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-25T21:02:34.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:02:34.869 [DEBUG] [Thread-18428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:02:34.870 [DEBUG] [Thread-18428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:02:34.917 [DEBUG] [Thread-18428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:02:34.917 [DEBUG] [Thread-18428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:02:34.927 [DEBUG] [Thread-18428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:02:34.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:02:34.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-25T21:02:34.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-25T21:02:34.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:02:34.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:02:34.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:02:34.965 [DEBUG] [Thread-18428] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:02:41.686 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:41.688 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:42.642 [DEBUG] [Thread-18430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:02:57.692 [DEBUG] [Thread-18431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:03:04.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:03:04.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-25T21:03:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 2, 28), 6.23, 66.56, 0.0, 22.62, 16.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:03:05.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:02:28
2025-12-25T21:03:05.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:03:05.977 [DEBUG] [Thread-18432] [transport.py] [_log()] starting thread (client mode): 0xb6b7da20
2025-12-25T21:03:05.977 [DEBUG] [Thread-18432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:03:05.997 [DEBUG] [Thread-18432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:03:05.997 [INFO] [Thread-18432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] client lang: <none>
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] server lang: <none>
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] kex follows: False
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] Compression: none
2025-12-25T21:03:05.998 [DEBUG] [Thread-18432] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:03:06.009 [DEBUG] [Thread-18432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:03:06.010 [DEBUG] [Thread-18432] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:03:06.010 [DEBUG] [Thread-18432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:03:06.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:03:06.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:03:06.010 [DEBUG] [Thread-18432] [transport.py] [_log()] userauth is OK
2025-12-25T21:03:06.010 [DEBUG] [Thread-18432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:03:06.010 [DEBUG] [Thread-18432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:03:06.011 [DEBUG] [Thread-18432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:03:06.011 [DEBUG] [Thread-18432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:03:06.020 [INFO] [Thread-18432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:03:06.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:03:06.606 [DEBUG] [Thread-18432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:03:06.606 [DEBUG] [Thread-18432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:03:06.607 [DEBUG] [Thread-18432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:03:06.647 [DEBUG] [Thread-18432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:03:06.647 [DEBUG] [Thread-18432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:03:06.649 [DEBUG] [Thread-18432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:03:06.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:03:06.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:03:06.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:03:06.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:03:06.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:03:06.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:03:06.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.793462 -999.00  +17.10  15.30     70  +11.60 1 1 1 1 1     0    0 4.16 -67.01 ZNESW 15.7 15.3 191.2 18.6 18.0 -21.5 17.9 -21.2 17.8 -19.6 18.0 -20.4
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.793462
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:03:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:02:28', tmtdew=6.23, humidity=66.56, cloud=0.0, wind=22.62, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:03:00', seeing=2.17, atlas_timestamp='2025-12-25T19:02:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T18:59:00')
2025-12-25T21:03:06.669 [DEBUG] [Thread-18432] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:03:06.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:03:06.750 [DEBUG] [Thread-18435] [transport.py] [_log()] starting thread (client mode): 0xb6b02b90
2025-12-25T21:03:06.750 [DEBUG] [Thread-18435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:03:06.766 [DEBUG] [Thread-18435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:03:06.767 [INFO] [Thread-18435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] client lang: <none>
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] server lang: <none>
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] kex follows: False
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] Compression: none
2025-12-25T21:03:06.774 [DEBUG] [Thread-18435] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:03:06.829 [DEBUG] [Thread-18435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:03:06.829 [DEBUG] [Thread-18435] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:03:06.830 [DEBUG] [Thread-18435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:03:06.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:03:06.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:03:06.886 [DEBUG] [Thread-18435] [transport.py] [_log()] userauth is OK
2025-12-25T21:03:06.886 [DEBUG] [Thread-18435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:03:06.886 [DEBUG] [Thread-18435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:03:06.886 [DEBUG] [Thread-18435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:03:06.886 [DEBUG] [Thread-18435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:03:06.900 [INFO] [Thread-18435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:03:06.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:03:06.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:03:07.741 [DEBUG] [Thread-18435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:03:07.741 [DEBUG] [Thread-18435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:03:07.789 [DEBUG] [Thread-18435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:03:07.790 [DEBUG] [Thread-18435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:03:07.800 [DEBUG] [Thread-18435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:03:07.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:03:07.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:03:07.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:03:07.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:03:07.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:03:07.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:03:07.838 [DEBUG] [Thread-18435] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:03:12.726 [DEBUG] [Thread-18437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:26.107 [DEBUG] [Thread-18438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:27.775 [DEBUG] [Thread-18439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:37.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:03:37.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:03:37.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-25T21:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 3, 32), 6.17, 67.11, 0.0, 19.59, 16.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:03:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:03:32
2025-12-25T21:03:38.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:03:38.833 [DEBUG] [Thread-18440] [transport.py] [_log()] starting thread (client mode): 0xb6bb85b0
2025-12-25T21:03:38.833 [DEBUG] [Thread-18440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:03:38.852 [DEBUG] [Thread-18440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:03:38.853 [INFO] [Thread-18440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:03:38.856 [DEBUG] [Thread-18440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:03:38.856 [DEBUG] [Thread-18440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:03:38.856 [DEBUG] [Thread-18440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:03:38.856 [DEBUG] [Thread-18440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:38.856 [DEBUG] [Thread-18440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:38.856 [DEBUG] [Thread-18440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] client lang: <none>
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] server lang: <none>
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] kex follows: False
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] Compression: none
2025-12-25T21:03:38.857 [DEBUG] [Thread-18440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:03:38.866 [DEBUG] [Thread-18440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:03:38.867 [DEBUG] [Thread-18440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:03:38.867 [DEBUG] [Thread-18440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:03:38.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:03:38.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:03:38.869 [DEBUG] [Thread-18440] [transport.py] [_log()] userauth is OK
2025-12-25T21:03:38.869 [DEBUG] [Thread-18440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:03:38.869 [DEBUG] [Thread-18440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:03:38.869 [DEBUG] [Thread-18440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:03:38.869 [DEBUG] [Thread-18440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:03:38.892 [INFO] [Thread-18440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:03:38.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:03:39.505 [DEBUG] [Thread-18440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:03:39.506 [DEBUG] [Thread-18440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:03:39.506 [DEBUG] [Thread-18440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:03:39.546 [DEBUG] [Thread-18440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:03:39.547 [DEBUG] [Thread-18440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:03:39.549 [DEBUG] [Thread-18440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:03:39.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:03:39.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:03:39.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:03:39.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:03:39.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:03:39.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:03:39.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:03:39.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:03:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:03:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.793809 -999.00  +17.00  12.25     70  +11.60 1 1 1 1 1     0    0 4.09 -69.83 ZNESW 10.8 12.2 203.7 27.0 18.0 -21.5 17.9 -21.2 17.7 -19.6 17.9 -20.4
2025-12-25T21:03:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:03:39.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:03:39.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.793809
2025-12-25T21:03:39.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:03:39.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:03:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:03:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:03:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:03:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:03:32', tmtdew=6.17, humidity=67.11, cloud=0.0, wind=19.59, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:03:33', seeing=2.26, atlas_timestamp='2025-12-25T19:03:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T19:02:00')
2025-12-25T21:03:39.569 [DEBUG] [Thread-18440] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:03:39.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-25T21:03:39.670 [DEBUG] [Thread-18443] [transport.py] [_log()] starting thread (client mode): 0xb6bb8910
2025-12-25T21:03:39.670 [DEBUG] [Thread-18443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:03:39.685 [DEBUG] [Thread-18443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:03:39.685 [INFO] [Thread-18443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:03:39.693 [DEBUG] [Thread-18443] [transport.py] [_log()] client lang: <none>
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] server lang: <none>
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] kex follows: False
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] Compression: none
2025-12-25T21:03:39.694 [DEBUG] [Thread-18443] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:03:39.751 [DEBUG] [Thread-18443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:03:39.751 [DEBUG] [Thread-18443] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:03:39.752 [DEBUG] [Thread-18443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:03:39.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:03:39.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:03:39.807 [DEBUG] [Thread-18443] [transport.py] [_log()] userauth is OK
2025-12-25T21:03:39.808 [DEBUG] [Thread-18443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:03:39.808 [DEBUG] [Thread-18443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:03:39.808 [DEBUG] [Thread-18443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:03:39.808 [DEBUG] [Thread-18443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:03:39.827 [INFO] [Thread-18443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:03:39.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-25T21:03:39.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:03:40.664 [DEBUG] [Thread-18443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:03:40.664 [DEBUG] [Thread-18443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:03:40.712 [DEBUG] [Thread-18443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:03:40.712 [DEBUG] [Thread-18443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:03:40.720 [DEBUG] [Thread-18443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:03:40.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:03:40.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:03:40.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-25T21:03:40.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:03:40.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:03:40.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:03:40.751 [DEBUG] [Thread-18443] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:03:41.890 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:41.890 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:42.806 [DEBUG] [Thread-18445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:03:57.847 [DEBUG] [Thread-18446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:10.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:04:10.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:04:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:04:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 4, 4), 6.16, 67.14, 0.0, 17.54, 16.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:04:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:04:04
2025-12-25T21:04:11.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:04:11.730 [DEBUG] [Thread-18447] [transport.py] [_log()] starting thread (client mode): 0xb95b0d30
2025-12-25T21:04:11.730 [DEBUG] [Thread-18447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:04:11.751 [DEBUG] [Thread-18447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:04:11.751 [INFO] [Thread-18447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] client lang: <none>
2025-12-25T21:04:11.758 [DEBUG] [Thread-18447] [transport.py] [_log()] server lang: <none>
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] kex follows: False
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] Compression: none
2025-12-25T21:04:11.759 [DEBUG] [Thread-18447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:04:11.769 [DEBUG] [Thread-18447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:04:11.769 [DEBUG] [Thread-18447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:04:11.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:04:11.770 [DEBUG] [Thread-18447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:04:11.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:04:11.772 [DEBUG] [Thread-18447] [transport.py] [_log()] userauth is OK
2025-12-25T21:04:11.772 [DEBUG] [Thread-18447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:04:11.772 [DEBUG] [Thread-18447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:04:11.772 [DEBUG] [Thread-18447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:04:11.772 [DEBUG] [Thread-18447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:04:11.797 [INFO] [Thread-18447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:04:11.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:04:12.399 [DEBUG] [Thread-18447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:04:12.400 [DEBUG] [Thread-18447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:04:12.400 [DEBUG] [Thread-18447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:04:12.440 [DEBUG] [Thread-18447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:04:12.440 [DEBUG] [Thread-18447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:04:12.443 [DEBUG] [Thread-18447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:04:12.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:04:12.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:04:12.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:04:12.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:04:12.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:04:12.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:04:12.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:04:12.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:04:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:04:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.794504 -999.00  +17.10  16.98     70  +11.60 1 1 1 1 1     0    0 3.95 -72.24 ZNESW 17.2 17.0 196.0 20.9 18.0 -21.5 17.9 -21.3 17.7 -19.7 18.0 -20.4
2025-12-25T21:04:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:04:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:04:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.794504
2025-12-25T21:04:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:04:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:04:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:04:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:04:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:04:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:04:04', tmtdew=6.16, humidity=67.14, cloud=0.0, wind=17.54, 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-25T21:04:05', seeing=1.87, atlas_timestamp='2025-12-25T19:04:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T19:02:00')
2025-12-25T21:04:12.466 [DEBUG] [Thread-18447] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:04:12.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-25T21:04:12.558 [DEBUG] [Thread-18450] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2025-12-25T21:04:12.559 [DEBUG] [Thread-18450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:04:12.574 [DEBUG] [Thread-18450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:04:12.574 [INFO] [Thread-18450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:04:12.581 [DEBUG] [Thread-18450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:04:12.581 [DEBUG] [Thread-18450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:04:12.581 [DEBUG] [Thread-18450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:04:12.581 [DEBUG] [Thread-18450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:12.581 [DEBUG] [Thread-18450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:12.581 [DEBUG] [Thread-18450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] client lang: <none>
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] server lang: <none>
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] kex follows: False
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:04:12.582 [DEBUG] [Thread-18450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:04:12.583 [DEBUG] [Thread-18450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:04:12.583 [DEBUG] [Thread-18450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:04:12.583 [DEBUG] [Thread-18450] [transport.py] [_log()] Compression: none
2025-12-25T21:04:12.583 [DEBUG] [Thread-18450] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:04:12.641 [DEBUG] [Thread-18450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:04:12.642 [DEBUG] [Thread-18450] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:04:12.642 [DEBUG] [Thread-18450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:04:12.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:04:12.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:04:12.697 [DEBUG] [Thread-18450] [transport.py] [_log()] userauth is OK
2025-12-25T21:04:12.698 [DEBUG] [Thread-18450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:04:12.698 [DEBUG] [Thread-18450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:04:12.698 [DEBUG] [Thread-18450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:04:12.698 [DEBUG] [Thread-18450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:04:12.717 [INFO] [Thread-18450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:04:12.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-25T21:04:12.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:04:12.881 [DEBUG] [Thread-18452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:13.536 [DEBUG] [Thread-18450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:04:13.536 [DEBUG] [Thread-18450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:04:13.584 [DEBUG] [Thread-18450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:04:13.584 [DEBUG] [Thread-18450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:04:13.594 [DEBUG] [Thread-18450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:04:13.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:04:13.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-25T21:04:13.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-25T21:04:13.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:04:13.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:04:13.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:04:13.632 [DEBUG] [Thread-18450] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:04:26.183 [DEBUG] [Thread-18453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:27.946 [DEBUG] [Thread-18454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:42.092 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:42.093 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:42.983 [DEBUG] [Thread-18455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:04:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:04:43.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:04:43.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-25T21:04:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 4, 36), 6.1, 67.19, 0.0, 19.44, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:04:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:04:36
2025-12-25T21:04:44.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:04:44.608 [DEBUG] [Thread-18456] [transport.py] [_log()] starting thread (client mode): 0xb95b3d30
2025-12-25T21:04:44.608 [DEBUG] [Thread-18456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:04:44.629 [DEBUG] [Thread-18456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:04:44.629 [INFO] [Thread-18456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] client lang: <none>
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] server lang: <none>
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] kex follows: False
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:04:44.632 [DEBUG] [Thread-18456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:04:44.633 [DEBUG] [Thread-18456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:04:44.633 [DEBUG] [Thread-18456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:04:44.633 [DEBUG] [Thread-18456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:04:44.633 [DEBUG] [Thread-18456] [transport.py] [_log()] Compression: none
2025-12-25T21:04:44.633 [DEBUG] [Thread-18456] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:04:44.650 [DEBUG] [Thread-18456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:04:44.651 [DEBUG] [Thread-18456] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:04:44.651 [DEBUG] [Thread-18456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:04:44.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:04:44.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:04:44.653 [DEBUG] [Thread-18456] [transport.py] [_log()] userauth is OK
2025-12-25T21:04:44.654 [DEBUG] [Thread-18456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:04:44.654 [DEBUG] [Thread-18456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:04:44.654 [DEBUG] [Thread-18456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:04:44.654 [DEBUG] [Thread-18456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:04:44.688 [INFO] [Thread-18456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:04:44.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:04:45.287 [DEBUG] [Thread-18456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:04:45.288 [DEBUG] [Thread-18456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:04:45.288 [DEBUG] [Thread-18456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:04:45.329 [DEBUG] [Thread-18456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:04:45.329 [DEBUG] [Thread-18456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:04:45.331 [DEBUG] [Thread-18456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:04:45.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:04:45.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:04:45.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:04:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:04:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:04:45.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:04:45.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:04:45.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:04:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:04:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.794504 -999.00  +17.10  16.98     70  +11.60 1 1 1 1 1     0    0 3.95 -72.24 ZNESW 17.2 17.0 196.0 20.9 18.0 -21.5 17.9 -21.3 17.7 -19.7 18.0 -20.4
2025-12-25T21:04:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:04:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:04:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.794504
2025-12-25T21:04:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:04:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:04:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:04:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:04:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:04:45.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:04:36', tmtdew=6.1, humidity=67.19, cloud=0.0, wind=19.44, 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-25T21:04:37', seeing=1.87, atlas_timestamp='2025-12-25T19:04:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T19:02:00')
2025-12-25T21:04:45.357 [DEBUG] [Thread-18456] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:04:45.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:04:45.449 [DEBUG] [Thread-18459] [transport.py] [_log()] starting thread (client mode): 0xb95b3bb0
2025-12-25T21:04:45.449 [DEBUG] [Thread-18459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:04:45.464 [DEBUG] [Thread-18459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:04:45.464 [INFO] [Thread-18459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:04:45.471 [DEBUG] [Thread-18459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] client lang: <none>
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] server lang: <none>
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] kex follows: False
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] Compression: none
2025-12-25T21:04:45.472 [DEBUG] [Thread-18459] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:04:45.529 [DEBUG] [Thread-18459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:04:45.530 [DEBUG] [Thread-18459] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:04:45.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:04:45.531 [DEBUG] [Thread-18459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:04:45.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:04:45.589 [DEBUG] [Thread-18459] [transport.py] [_log()] userauth is OK
2025-12-25T21:04:45.590 [DEBUG] [Thread-18459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:04:45.590 [DEBUG] [Thread-18459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:04:45.590 [DEBUG] [Thread-18459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:04:45.590 [DEBUG] [Thread-18459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:04:45.610 [INFO] [Thread-18459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:04:45.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-25T21:04:45.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:04:46.465 [DEBUG] [Thread-18459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:04:46.466 [DEBUG] [Thread-18459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:04:46.514 [DEBUG] [Thread-18459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:04:46.514 [DEBUG] [Thread-18459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:04:46.523 [DEBUG] [Thread-18459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:04:46.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:04:46.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-25T21:04:46.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-25T21:04:46.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:04:46.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:04:46.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:04:46.560 [DEBUG] [Thread-18459] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:04:58.017 [DEBUG] [Thread-18461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:13.051 [DEBUG] [Thread-18462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:16.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:05:16.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:05:16.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-25T21:05:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 5, 8), 6.06, 67.36, 0.0, 20.38, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:05:17.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:05:08
2025-12-25T21:05:17.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:05:17.554 [DEBUG] [Thread-18463] [transport.py] [_log()] starting thread (client mode): 0xb95b0df0
2025-12-25T21:05:17.554 [DEBUG] [Thread-18463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:05:17.576 [DEBUG] [Thread-18463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:05:17.576 [INFO] [Thread-18463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:05:17.579 [DEBUG] [Thread-18463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:05:17.579 [DEBUG] [Thread-18463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:05:17.579 [DEBUG] [Thread-18463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:05:17.579 [DEBUG] [Thread-18463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:17.579 [DEBUG] [Thread-18463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] client lang: <none>
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] server lang: <none>
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] kex follows: False
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:05:17.580 [DEBUG] [Thread-18463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:05:17.581 [DEBUG] [Thread-18463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:05:17.581 [DEBUG] [Thread-18463] [transport.py] [_log()] Compression: none
2025-12-25T21:05:17.581 [DEBUG] [Thread-18463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:05:17.600 [DEBUG] [Thread-18463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:05:17.601 [DEBUG] [Thread-18463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:05:17.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:05:17.602 [DEBUG] [Thread-18463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:05:17.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:05:17.604 [DEBUG] [Thread-18463] [transport.py] [_log()] userauth is OK
2025-12-25T21:05:17.604 [DEBUG] [Thread-18463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:05:17.604 [DEBUG] [Thread-18463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:05:17.604 [DEBUG] [Thread-18463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:05:17.605 [DEBUG] [Thread-18463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:05:17.629 [INFO] [Thread-18463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:05:17.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:05:18.280 [DEBUG] [Thread-18463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:05:18.280 [DEBUG] [Thread-18463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:05:18.281 [DEBUG] [Thread-18463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:05:18.322 [DEBUG] [Thread-18463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:05:18.322 [DEBUG] [Thread-18463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:05:18.325 [DEBUG] [Thread-18463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:05:18.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:05:18.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:05:18.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:05:18.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:05:18.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:05:18.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:05:18.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:05:18.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:05:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:05:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.794851 -999.00  +17.10  13.00     70  +11.60 1 1 1 1 1     0    0 4.00 -69.69 ZNESW 15.3 13.0 203.4 21.1 17.9 -21.6 17.8 -21.2 17.7 -19.8 17.9 -20.6
2025-12-25T21:05:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:05:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:05:18.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.794851
2025-12-25T21:05:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:05:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:05:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:05:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:05:18.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:05:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:05:08', tmtdew=6.06, humidity=67.36, cloud=0.0, wind=20.38, 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-25T21:05:09', seeing=1.84, atlas_timestamp='2025-12-25T19:04:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T19:02:00')
2025-12-25T21:05:18.352 [DEBUG] [Thread-18463] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:05:18.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-25T21:05:18.445 [DEBUG] [Thread-18466] [transport.py] [_log()] starting thread (client mode): 0xb95b1420
2025-12-25T21:05:18.445 [DEBUG] [Thread-18466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:05:18.460 [DEBUG] [Thread-18466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:05:18.460 [INFO] [Thread-18466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:18.468 [DEBUG] [Thread-18466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] client lang: <none>
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] server lang: <none>
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] kex follows: False
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:05:18.469 [DEBUG] [Thread-18466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:05:18.470 [DEBUG] [Thread-18466] [transport.py] [_log()] Compression: none
2025-12-25T21:05:18.470 [DEBUG] [Thread-18466] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:05:18.527 [DEBUG] [Thread-18466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:05:18.528 [DEBUG] [Thread-18466] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:05:18.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:05:18.529 [DEBUG] [Thread-18466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:05:18.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:05:18.586 [DEBUG] [Thread-18466] [transport.py] [_log()] userauth is OK
2025-12-25T21:05:18.586 [DEBUG] [Thread-18466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:05:18.586 [DEBUG] [Thread-18466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:05:18.587 [DEBUG] [Thread-18466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:05:18.587 [DEBUG] [Thread-18466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:05:18.601 [INFO] [Thread-18466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:05:18.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-25T21:05:18.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:05:19.448 [DEBUG] [Thread-18466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:05:19.448 [DEBUG] [Thread-18466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:05:19.495 [DEBUG] [Thread-18466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:05:19.496 [DEBUG] [Thread-18466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:05:19.505 [DEBUG] [Thread-18466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:05:19.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:05:19.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-25T21:05:19.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-25T21:05:19.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:05:19.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:05:19.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:05:19.539 [DEBUG] [Thread-18466] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:05:26.247 [DEBUG] [Thread-18468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:28.086 [DEBUG] [Thread-18469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:42.294 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:42.294 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:43.134 [DEBUG] [Thread-18470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:05:49.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:05:49.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:05:49.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:05:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 5, 40), 6.05, 67.39, 0.0, 18.81, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:05:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:05:40
2025-12-25T21:05:50.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:05:50.549 [DEBUG] [Thread-18471] [transport.py] [_log()] starting thread (client mode): 0xb95b0460
2025-12-25T21:05:50.549 [DEBUG] [Thread-18471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:05:50.569 [DEBUG] [Thread-18471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:05:50.569 [INFO] [Thread-18471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] client lang: <none>
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] server lang: <none>
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] kex follows: False
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] Compression: none
2025-12-25T21:05:50.573 [DEBUG] [Thread-18471] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:05:50.589 [DEBUG] [Thread-18471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:05:50.590 [DEBUG] [Thread-18471] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:05:50.590 [DEBUG] [Thread-18471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:05:50.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:05:50.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:05:50.592 [DEBUG] [Thread-18471] [transport.py] [_log()] userauth is OK
2025-12-25T21:05:50.592 [DEBUG] [Thread-18471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:05:50.592 [DEBUG] [Thread-18471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:05:50.592 [DEBUG] [Thread-18471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:05:50.592 [DEBUG] [Thread-18471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:05:50.627 [INFO] [Thread-18471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:05:50.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:05:51.280 [DEBUG] [Thread-18471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:05:51.281 [DEBUG] [Thread-18471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:05:51.281 [DEBUG] [Thread-18471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:05:51.322 [DEBUG] [Thread-18471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:05:51.322 [DEBUG] [Thread-18471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:05:51.325 [DEBUG] [Thread-18471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:05:51.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:05:51.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:05:51.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:05:51.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:05:51.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:05:51.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:05:51.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:05:51.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:05:51.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:05:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.795198 -999.00  +17.00  11.31     70  +11.60 1 1 1 1 1     0    0 3.93 -69.48 ZNESW 19.1 11.3 201.0 16.5 18.0 -21.8 17.8 -21.5 17.7 -19.8 17.9 -20.7
2025-12-25T21:05:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:05:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:05:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.795198
2025-12-25T21:05:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:05:51.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:05:51.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:05:51.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:05:51.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:05:51.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:05:40', tmtdew=6.05, humidity=67.39, cloud=0.0, wind=18.81, 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-25T21:05:41', seeing=2.03, atlas_timestamp='2025-12-25T19:05:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T19:02:00')
2025-12-25T21:05:51.350 [DEBUG] [Thread-18471] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:05:51.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-25T21:05:51.450 [DEBUG] [Thread-18474] [transport.py] [_log()] starting thread (client mode): 0xb955a920
2025-12-25T21:05:51.450 [DEBUG] [Thread-18474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:05:51.465 [DEBUG] [Thread-18474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:05:51.465 [INFO] [Thread-18474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:05:51.473 [DEBUG] [Thread-18474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] client lang: <none>
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] server lang: <none>
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] kex follows: False
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] Compression: none
2025-12-25T21:05:51.474 [DEBUG] [Thread-18474] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:05:51.531 [DEBUG] [Thread-18474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:05:51.532 [DEBUG] [Thread-18474] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:05:51.532 [DEBUG] [Thread-18474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:05:51.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:05:51.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:05:51.591 [DEBUG] [Thread-18474] [transport.py] [_log()] userauth is OK
2025-12-25T21:05:51.591 [DEBUG] [Thread-18474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:05:51.591 [DEBUG] [Thread-18474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:05:51.591 [DEBUG] [Thread-18474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:05:51.591 [DEBUG] [Thread-18474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:05:51.610 [INFO] [Thread-18474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:05:51.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-25T21:05:51.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:05:52.468 [DEBUG] [Thread-18474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:05:52.469 [DEBUG] [Thread-18474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:05:52.517 [DEBUG] [Thread-18474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:05:52.517 [DEBUG] [Thread-18474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:05:52.526 [DEBUG] [Thread-18474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:05:52.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:05:52.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-25T21:05:52.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-25T21:05:52.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:05:52.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:05:52.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:05:52.560 [DEBUG] [Thread-18474] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:05:58.165 [DEBUG] [Thread-18476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:13.220 [DEBUG] [Thread-18477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:06:22.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:06:22.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-25T21:06:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 6, 12), 6.04, 67.46, 0.0, 18.58, 16.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:06:23.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:06:12
2025-12-25T21:06:23.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:06:23.560 [DEBUG] [Thread-18478] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T21:06:23.560 [DEBUG] [Thread-18478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:06:23.579 [DEBUG] [Thread-18478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:06:23.579 [INFO] [Thread-18478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:06:23.582 [DEBUG] [Thread-18478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:06:23.582 [DEBUG] [Thread-18478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:06:23.582 [DEBUG] [Thread-18478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] client lang: <none>
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] server lang: <none>
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] kex follows: False
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] Compression: none
2025-12-25T21:06:23.583 [DEBUG] [Thread-18478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:06:23.597 [DEBUG] [Thread-18478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:06:23.598 [DEBUG] [Thread-18478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:06:23.598 [DEBUG] [Thread-18478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:06:23.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:06:23.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:06:23.599 [DEBUG] [Thread-18478] [transport.py] [_log()] userauth is OK
2025-12-25T21:06:23.599 [DEBUG] [Thread-18478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:06:23.599 [DEBUG] [Thread-18478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:06:23.599 [DEBUG] [Thread-18478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:06:23.599 [DEBUG] [Thread-18478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:06:23.617 [INFO] [Thread-18478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:06:23.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:06:24.230 [DEBUG] [Thread-18478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:06:24.231 [DEBUG] [Thread-18478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:06:24.231 [DEBUG] [Thread-18478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:06:24.271 [DEBUG] [Thread-18478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:06:24.271 [DEBUG] [Thread-18478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:06:24.274 [DEBUG] [Thread-18478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:06:24.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:06:24.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:06:24.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:06:24.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:06:24.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:06:24.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:06:24.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:06:24.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.795545 -999.00  +17.00   9.80     70  +11.60 1 1 1 1 1     0    0 3.87 -72.75 ZNESW 11.1 9.8 212.4 18.7 18.0 -21.8 17.9 -21.3 17.6 -19.9 17.9 -20.7
2025-12-25T21:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:06:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.795545
2025-12-25T21:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:06:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:06:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:06:24.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:06:12', tmtdew=6.04, humidity=67.46, cloud=0.0, wind=18.58, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:06:13', seeing=1.9, atlas_timestamp='2025-12-25T19:05:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.08975000000000044, 0.08174999999999955, 0.15225000000000044, 0.10749999999999993, 0.0754999999999999, 0.09975000000000023, 0.125, 0.12725000000000009, 0.13599999999999923, 0.09399999999999942, 0.1712499999999988, 0.041499999999999204, 0.11599999999999966, 0.10275000000000034, 0.1120000000000001, 0.08699999999999974, 0.07925000000000004, 0.1485000000000003, 0.14400000000000013, 0.10424999999999862, 0.14999999999999858, 0.11374999999999957, 0.14024999999999999, 0.15975000000000072, 0.08450000000000024, 0.11900000000000155, 0.22574999999999967, 0.21850000000000058, 0.3025000000000002, 0.2190000000000012, 0.18200000000000038, 0.13800000000000168, 0.1347499999999986], zp_timestamp='2025-12-25T19:02:00')
2025-12-25T21:06:24.303 [DEBUG] [Thread-18478] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:06:24.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:06:24.403 [DEBUG] [Thread-18481] [transport.py] [_log()] starting thread (client mode): 0xb6bc36d0
2025-12-25T21:06:24.403 [DEBUG] [Thread-18481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:06:24.418 [DEBUG] [Thread-18481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:06:24.419 [INFO] [Thread-18481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:06:24.426 [DEBUG] [Thread-18481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:06:24.426 [DEBUG] [Thread-18481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] client lang: <none>
2025-12-25T21:06:24.427 [DEBUG] [Thread-18481] [transport.py] [_log()] server lang: <none>
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] kex follows: False
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:06:24.428 [DEBUG] [Thread-18481] [transport.py] [_log()] Compression: none
2025-12-25T21:06:24.429 [DEBUG] [Thread-18481] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:06:24.487 [DEBUG] [Thread-18481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:06:24.487 [DEBUG] [Thread-18481] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:06:24.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:06:24.488 [DEBUG] [Thread-18481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:06:24.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:06:24.544 [DEBUG] [Thread-18481] [transport.py] [_log()] userauth is OK
2025-12-25T21:06:24.545 [DEBUG] [Thread-18481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:06:24.545 [DEBUG] [Thread-18481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:06:24.545 [DEBUG] [Thread-18481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:06:24.545 [DEBUG] [Thread-18481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:06:24.564 [INFO] [Thread-18481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:06:24.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:06:24.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:06:25.411 [DEBUG] [Thread-18481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:06:25.411 [DEBUG] [Thread-18481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:06:25.459 [DEBUG] [Thread-18481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:06:25.459 [DEBUG] [Thread-18481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:06:25.467 [DEBUG] [Thread-18481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:06:25.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:06:25.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-25T21:06:25.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:06:25.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:06:25.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:06:25.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:06:25.500 [DEBUG] [Thread-18481] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:06:26.304 [DEBUG] [Thread-18483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:28.250 [DEBUG] [Thread-18484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:42.491 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:42.492 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:43.305 [DEBUG] [Thread-18485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:06:55.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:06:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:06:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 6, 44), 5.99, 67.48, 0.0, 21.35, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:06:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:06:44
2025-12-25T21:06:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:06:56.520 [DEBUG] [Thread-18486] [transport.py] [_log()] starting thread (client mode): 0xb95b2110
2025-12-25T21:06:56.521 [DEBUG] [Thread-18486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:06:56.542 [DEBUG] [Thread-18486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:06:56.542 [INFO] [Thread-18486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:06:56.545 [DEBUG] [Thread-18486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:06:56.545 [DEBUG] [Thread-18486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:06:56.545 [DEBUG] [Thread-18486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:06:56.545 [DEBUG] [Thread-18486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] client lang: <none>
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] server lang: <none>
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] kex follows: False
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] Compression: none
2025-12-25T21:06:56.546 [DEBUG] [Thread-18486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:06:56.562 [DEBUG] [Thread-18486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:06:56.562 [DEBUG] [Thread-18486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:06:56.562 [DEBUG] [Thread-18486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:06:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:06:56.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:06:56.563 [DEBUG] [Thread-18486] [transport.py] [_log()] userauth is OK
2025-12-25T21:06:56.563 [DEBUG] [Thread-18486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:06:56.563 [DEBUG] [Thread-18486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:06:56.563 [DEBUG] [Thread-18486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:06:56.563 [DEBUG] [Thread-18486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:06:56.575 [INFO] [Thread-18486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:06:56.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:06:57.190 [DEBUG] [Thread-18486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:06:57.191 [DEBUG] [Thread-18486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:06:57.191 [DEBUG] [Thread-18486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:06:57.231 [DEBUG] [Thread-18486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:06:57.232 [DEBUG] [Thread-18486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:06:57.234 [DEBUG] [Thread-18486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:06:57.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:06:57.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:06:57.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:06:57.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:06:57.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:06:57.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:06:57.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.795893 -999.00  +17.00  12.69     70  +11.60 1 1 1 1 1     0    0 3.79 -76.45 ZNESW 10.0 12.7 222.2 18.2 17.9 -21.7 17.8 -21.2 17.7 -19.8 17.9 -20.8
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.795893
2025-12-25T21:06:57.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:06:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:06:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:06:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:06:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:06:57.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:06:44', tmtdew=5.99, humidity=67.48, cloud=0.0, wind=21.35, 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-25T21:06:45', seeing=1.75, atlas_timestamp='2025-12-25T19:06:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:05:00')
2025-12-25T21:06:57.251 [DEBUG] [Thread-18486] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:06:57.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-25T21:06:57.334 [DEBUG] [Thread-18489] [transport.py] [_log()] starting thread (client mode): 0xb6b21120
2025-12-25T21:06:57.334 [DEBUG] [Thread-18489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:06:57.349 [DEBUG] [Thread-18489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:06:57.349 [INFO] [Thread-18489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] client lang: <none>
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] server lang: <none>
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] kex follows: False
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] Compression: none
2025-12-25T21:06:57.357 [DEBUG] [Thread-18489] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:06:57.415 [DEBUG] [Thread-18489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:06:57.415 [DEBUG] [Thread-18489] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:06:57.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:06:57.416 [DEBUG] [Thread-18489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:06:57.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:06:57.472 [DEBUG] [Thread-18489] [transport.py] [_log()] userauth is OK
2025-12-25T21:06:57.472 [DEBUG] [Thread-18489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:06:57.472 [DEBUG] [Thread-18489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:06:57.472 [DEBUG] [Thread-18489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:06:57.472 [DEBUG] [Thread-18489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:06:57.486 [INFO] [Thread-18489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:06:57.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-25T21:06:57.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:06:58.330 [DEBUG] [Thread-18489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:06:58.330 [DEBUG] [Thread-18489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:06:58.335 [DEBUG] [Thread-18491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:06:58.377 [DEBUG] [Thread-18489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:06:58.377 [DEBUG] [Thread-18489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:06:58.386 [DEBUG] [Thread-18489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:06:58.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:06:58.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-25T21:06:58.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-25T21:06:58.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:06:58.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:06:58.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:06:58.417 [DEBUG] [Thread-18489] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:07:13.374 [DEBUG] [Thread-18492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:07:26.365 [DEBUG] [Thread-18493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:07:28.411 [DEBUG] [Thread-18494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:07:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:07:28.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:07:28.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-25T21:07:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 7, 16), 5.98, 67.49, 0.0, 20.2, 16.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:07:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:07:16
2025-12-25T21:07:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:07:29.432 [DEBUG] [Thread-18495] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2025-12-25T21:07:29.432 [DEBUG] [Thread-18495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:07:29.453 [DEBUG] [Thread-18495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:07:29.453 [INFO] [Thread-18495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:07:29.456 [DEBUG] [Thread-18495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] client lang: <none>
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] server lang: <none>
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] kex follows: False
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] Compression: none
2025-12-25T21:07:29.457 [DEBUG] [Thread-18495] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:07:29.476 [DEBUG] [Thread-18495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:07:29.476 [DEBUG] [Thread-18495] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:07:29.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:07:29.477 [DEBUG] [Thread-18495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:07:29.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:07:29.479 [DEBUG] [Thread-18495] [transport.py] [_log()] userauth is OK
2025-12-25T21:07:29.479 [DEBUG] [Thread-18495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:07:29.479 [DEBUG] [Thread-18495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:07:29.479 [DEBUG] [Thread-18495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:07:29.479 [DEBUG] [Thread-18495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:07:29.496 [INFO] [Thread-18495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:07:29.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:07:30.115 [DEBUG] [Thread-18495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:07:30.116 [DEBUG] [Thread-18495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:07:30.116 [DEBUG] [Thread-18495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:07:30.156 [DEBUG] [Thread-18495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:07:30.156 [DEBUG] [Thread-18495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:07:30.160 [DEBUG] [Thread-18495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:07:30.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:07:30.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:07:30.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:07:30.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:07:30.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:07:30.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:07:30.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:07:30.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:07:30.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:07:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.796240 -999.00  +17.00  13.95     70  +11.60 1 1 1 1 1     0    0 3.69 -76.38 ZNESW 7.9 13.9 207.9 21.0 17.9 -21.9 17.8 -21.3 17.6 -20.0 17.9 -20.9
2025-12-25T21:07:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:07:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:07:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.796240
2025-12-25T21:07:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:07:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:07:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:07:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:07:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:07:30.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:07:16', tmtdew=5.98, humidity=67.49, cloud=0.0, wind=20.2, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:07:17', seeing=1.8, atlas_timestamp='2025-12-25T19:06:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:05:00')
2025-12-25T21:07:30.188 [DEBUG] [Thread-18495] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:07:30.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-25T21:07:30.282 [DEBUG] [Thread-18498] [transport.py] [_log()] starting thread (client mode): 0xb6bc0e80
2025-12-25T21:07:30.282 [DEBUG] [Thread-18498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:07:30.297 [DEBUG] [Thread-18498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:07:30.297 [INFO] [Thread-18498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:07:30.304 [DEBUG] [Thread-18498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:07:30.304 [DEBUG] [Thread-18498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:07:30.304 [DEBUG] [Thread-18498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:07:30.304 [DEBUG] [Thread-18498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:07:30.304 [DEBUG] [Thread-18498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:07:30.304 [DEBUG] [Thread-18498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] client lang: <none>
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] server lang: <none>
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] kex follows: False
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] Compression: none
2025-12-25T21:07:30.305 [DEBUG] [Thread-18498] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:07:30.362 [DEBUG] [Thread-18498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:07:30.363 [DEBUG] [Thread-18498] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:07:30.364 [DEBUG] [Thread-18498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:07:30.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:07:30.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:07:30.422 [DEBUG] [Thread-18498] [transport.py] [_log()] userauth is OK
2025-12-25T21:07:30.423 [DEBUG] [Thread-18498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:07:30.423 [DEBUG] [Thread-18498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:07:30.424 [DEBUG] [Thread-18498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:07:30.424 [DEBUG] [Thread-18498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:07:30.442 [INFO] [Thread-18498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:07:30.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-25T21:07:30.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:07:31.311 [DEBUG] [Thread-18498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:07:31.312 [DEBUG] [Thread-18498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:07:31.360 [DEBUG] [Thread-18498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:07:31.360 [DEBUG] [Thread-18498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:07:31.369 [DEBUG] [Thread-18498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:07:31.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:07:31.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-25T21:07:31.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:07:31.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:07:31.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:07:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:07:31.411 [DEBUG] [Thread-18498] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:07:42.690 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:07:42.692 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:07:43.443 [DEBUG] [Thread-18500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:07:58.490 [DEBUG] [Thread-18501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:01.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:08:01.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:08:01.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-25T21:08:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 7, 49), 5.97, 67.53, 0.0, 16.39, 16.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:08:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:07:49
2025-12-25T21:08:02.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:08:02.404 [DEBUG] [Thread-18502] [transport.py] [_log()] starting thread (client mode): 0xb6bb8c10
2025-12-25T21:08:02.405 [DEBUG] [Thread-18502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:08:02.425 [DEBUG] [Thread-18502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:08:02.425 [INFO] [Thread-18502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:08:02.428 [DEBUG] [Thread-18502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:08:02.428 [DEBUG] [Thread-18502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:08:02.428 [DEBUG] [Thread-18502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:08:02.428 [DEBUG] [Thread-18502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] client lang: <none>
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] server lang: <none>
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] kex follows: False
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] Compression: none
2025-12-25T21:08:02.429 [DEBUG] [Thread-18502] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:08:02.446 [DEBUG] [Thread-18502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:08:02.447 [DEBUG] [Thread-18502] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:08:02.447 [DEBUG] [Thread-18502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:08:02.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:08:02.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:08:02.449 [DEBUG] [Thread-18502] [transport.py] [_log()] userauth is OK
2025-12-25T21:08:02.450 [DEBUG] [Thread-18502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:08:02.450 [DEBUG] [Thread-18502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:08:02.450 [DEBUG] [Thread-18502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:08:02.450 [DEBUG] [Thread-18502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:08:02.476 [INFO] [Thread-18502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:08:02.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:08:03.123 [DEBUG] [Thread-18502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:08:03.124 [DEBUG] [Thread-18502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:08:03.124 [DEBUG] [Thread-18502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:08:03.165 [DEBUG] [Thread-18502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:08:03.165 [DEBUG] [Thread-18502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:08:03.167 [DEBUG] [Thread-18502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:08:03.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:08:03.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:08:03.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:08:03.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:08:03.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:08:03.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:08:03.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:08:03.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:08:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:08:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.796934 -999.00  +17.00  15.65     70  +11.50 1 1 1 1 1     0    0 3.68 -76.89 ZNESW 12.0 15.7 210.6 18.1 17.9 -21.5 17.8 -21.2 17.6 -19.7 17.9 -20.6
2025-12-25T21:08:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:08:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:08:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.796934
2025-12-25T21:08:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:08:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:08:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:08:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:08:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:08:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:07:49', tmtdew=5.97, humidity=67.53, cloud=0.0, wind=16.39, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:07:49', seeing=2.05, atlas_timestamp='2025-12-25T19:07:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:05:00')
2025-12-25T21:08:03.191 [DEBUG] [Thread-18502] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:08:03.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:08:03.286 [DEBUG] [Thread-18505] [transport.py] [_log()] starting thread (client mode): 0xb6b7e560
2025-12-25T21:08:03.286 [DEBUG] [Thread-18505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:08:03.301 [DEBUG] [Thread-18505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:08:03.301 [INFO] [Thread-18505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:08:03.308 [DEBUG] [Thread-18505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] client lang: <none>
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] server lang: <none>
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] kex follows: False
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] Compression: none
2025-12-25T21:08:03.309 [DEBUG] [Thread-18505] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:08:03.366 [DEBUG] [Thread-18505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:08:03.367 [DEBUG] [Thread-18505] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:08:03.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:08:03.368 [DEBUG] [Thread-18505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:08:03.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:08:03.422 [DEBUG] [Thread-18505] [transport.py] [_log()] userauth is OK
2025-12-25T21:08:03.422 [DEBUG] [Thread-18505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:08:03.422 [DEBUG] [Thread-18505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:08:03.422 [DEBUG] [Thread-18505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:08:03.422 [DEBUG] [Thread-18505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:08:03.441 [INFO] [Thread-18505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:08:03.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-25T21:08:03.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:08:04.342 [DEBUG] [Thread-18505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:08:04.342 [DEBUG] [Thread-18505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:08:04.390 [DEBUG] [Thread-18505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:08:04.390 [DEBUG] [Thread-18505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:08:04.400 [DEBUG] [Thread-18505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:08:04.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:08: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-25T21:08:04.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:08:04.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:08:04.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:08:04.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:08:04.436 [DEBUG] [Thread-18505] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:08:13.525 [DEBUG] [Thread-18507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:26.419 [DEBUG] [Thread-18508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:28.563 [DEBUG] [Thread-18509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:34.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:08:34.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:08:34.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-25T21:08:35.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 8, 21), 5.97, 67.56, 0.0, 16.0, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:08:35.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:08:21
2025-12-25T21:08:35.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:08:35.434 [DEBUG] [Thread-18510] [transport.py] [_log()] starting thread (client mode): 0xb6bb8b80
2025-12-25T21:08:35.434 [DEBUG] [Thread-18510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:08:35.454 [DEBUG] [Thread-18510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:08:35.454 [INFO] [Thread-18510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] client lang: <none>
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] server lang: <none>
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] kex follows: False
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] Compression: none
2025-12-25T21:08:35.458 [DEBUG] [Thread-18510] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:08:35.476 [DEBUG] [Thread-18510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:08:35.476 [DEBUG] [Thread-18510] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:08:35.477 [DEBUG] [Thread-18510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:08:35.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:08:35.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:08:35.479 [DEBUG] [Thread-18510] [transport.py] [_log()] userauth is OK
2025-12-25T21:08:35.479 [DEBUG] [Thread-18510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:08:35.479 [DEBUG] [Thread-18510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:08:35.480 [DEBUG] [Thread-18510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:08:35.480 [DEBUG] [Thread-18510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:08:35.515 [INFO] [Thread-18510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:08:35.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:08:36.174 [DEBUG] [Thread-18510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:08:36.174 [DEBUG] [Thread-18510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:08:36.175 [DEBUG] [Thread-18510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:08:36.215 [DEBUG] [Thread-18510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:08:36.215 [DEBUG] [Thread-18510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:08:36.219 [DEBUG] [Thread-18510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:08:36.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:08:36.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:08:36.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:08:36.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:08:36.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:08:36.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:08:36.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:08:36.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:08:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:08:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.797281 -999.00  +17.00  12.07     70  +11.60 1 1 1 1 1     0    0 3.73 -74.02 ZNESW 11.1 12.1 202.1 15.6 17.9 -21.6 17.7 -21.2 17.6 -19.8 17.9 -20.7
2025-12-25T21:08:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:08:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:08:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.797281
2025-12-25T21:08:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:08:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:08:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:08:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:08:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:08:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:08:21', tmtdew=5.97, humidity=67.56, cloud=0.0, wind=16.0, 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-25T21:08:21', seeing=2.05, atlas_timestamp='2025-12-25T19:08:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:05:00')
2025-12-25T21:08:36.246 [DEBUG] [Thread-18510] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:08: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-25T21:08:36.342 [DEBUG] [Thread-18513] [transport.py] [_log()] starting thread (client mode): 0xb95b3280
2025-12-25T21:08:36.343 [DEBUG] [Thread-18513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:08:36.357 [DEBUG] [Thread-18513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:08:36.357 [INFO] [Thread-18513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:08:36.365 [DEBUG] [Thread-18513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:08:36.365 [DEBUG] [Thread-18513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:08:36.365 [DEBUG] [Thread-18513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:08:36.365 [DEBUG] [Thread-18513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:36.365 [DEBUG] [Thread-18513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] client lang: <none>
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] server lang: <none>
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] kex follows: False
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] Compression: none
2025-12-25T21:08:36.366 [DEBUG] [Thread-18513] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:08:36.423 [DEBUG] [Thread-18513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:08:36.423 [DEBUG] [Thread-18513] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:08:36.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:08:36.424 [DEBUG] [Thread-18513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:08:36.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:08:36.478 [DEBUG] [Thread-18513] [transport.py] [_log()] userauth is OK
2025-12-25T21:08:36.478 [DEBUG] [Thread-18513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:08:36.478 [DEBUG] [Thread-18513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:08:36.478 [DEBUG] [Thread-18513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:08:36.478 [DEBUG] [Thread-18513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:08:36.493 [INFO] [Thread-18513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:08:36.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-25T21:08:36.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:08:37.321 [DEBUG] [Thread-18513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:08:37.321 [DEBUG] [Thread-18513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:08:37.369 [DEBUG] [Thread-18513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:08:37.369 [DEBUG] [Thread-18513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:08:37.379 [DEBUG] [Thread-18513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:08:37.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:08:37.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-25T21:08:37.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-25T21:08:37.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:08:37.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:08:37.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:08:37.416 [DEBUG] [Thread-18513] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:08:42.892 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:42.894 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:43.599 [DEBUG] [Thread-18515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:08:58.659 [DEBUG] [Thread-18516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:09:07.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:09:07.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-25T21:09:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 8, 53), 5.98, 67.51, 0.0, 16.23, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:09:08.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:08:53
2025-12-25T21:09:08.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:09:08.410 [DEBUG] [Thread-18517] [transport.py] [_log()] starting thread (client mode): 0xb6bc3280
2025-12-25T21:09:08.411 [DEBUG] [Thread-18517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:09:08.430 [DEBUG] [Thread-18517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:09:08.430 [INFO] [Thread-18517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:09:08.432 [DEBUG] [Thread-18517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] client lang: <none>
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] server lang: <none>
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] kex follows: False
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] Compression: none
2025-12-25T21:09:08.433 [DEBUG] [Thread-18517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:09:08.451 [DEBUG] [Thread-18517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:09:08.452 [DEBUG] [Thread-18517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:09:08.453 [DEBUG] [Thread-18517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:09:08.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:09:08.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:09:08.456 [DEBUG] [Thread-18517] [transport.py] [_log()] userauth is OK
2025-12-25T21:09:08.456 [DEBUG] [Thread-18517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:09:08.456 [DEBUG] [Thread-18517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:09:08.456 [DEBUG] [Thread-18517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:09:08.456 [DEBUG] [Thread-18517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:09:08.477 [INFO] [Thread-18517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:09:08.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:09:09.151 [DEBUG] [Thread-18517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:09:09.152 [DEBUG] [Thread-18517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:09:09.152 [DEBUG] [Thread-18517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:09:09.194 [DEBUG] [Thread-18517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:09:09.194 [DEBUG] [Thread-18517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:09:09.197 [DEBUG] [Thread-18517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:09:09.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:09:09.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:09:09.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:09:09.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:09:09.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:09:09.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:09:09.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:09:09.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:09:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:09:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.797629 -999.00  +17.00  16.15     70  +11.60 1 1 1 1 1     0    0 3.52 -76.93 ZNESW 14.1 16.1 211.2 20.7 17.8 -21.7 17.8 -21.3 17.6 -20.1 17.9 -20.7
2025-12-25T21:09:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:09:09.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:09:09.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.797629
2025-12-25T21:09:09.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:09:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:09:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:09:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:09:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:09:09.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:08:53', tmtdew=5.98, humidity=67.51, cloud=0.0, wind=16.23, 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-25T21:08:53', seeing=1.78, atlas_timestamp='2025-12-25T19:08:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:05:00')
2025-12-25T21:09:09.221 [DEBUG] [Thread-18517] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:09:09.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-25T21:09:09.316 [DEBUG] [Thread-18520] [transport.py] [_log()] starting thread (client mode): 0xb6b238e0
2025-12-25T21:09:09.316 [DEBUG] [Thread-18520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:09:09.331 [DEBUG] [Thread-18520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:09:09.331 [INFO] [Thread-18520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] client lang: <none>
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] server lang: <none>
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] kex follows: False
2025-12-25T21:09:09.339 [DEBUG] [Thread-18520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:09:09.340 [DEBUG] [Thread-18520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:09:09.340 [DEBUG] [Thread-18520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:09:09.340 [DEBUG] [Thread-18520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:09:09.340 [DEBUG] [Thread-18520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:09:09.340 [DEBUG] [Thread-18520] [transport.py] [_log()] Compression: none
2025-12-25T21:09:09.340 [DEBUG] [Thread-18520] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:09:09.400 [DEBUG] [Thread-18520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:09:09.401 [DEBUG] [Thread-18520] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:09:09.401 [DEBUG] [Thread-18520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:09:09.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:09:09.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:09:09.459 [DEBUG] [Thread-18520] [transport.py] [_log()] userauth is OK
2025-12-25T21:09:09.459 [DEBUG] [Thread-18520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:09:09.460 [DEBUG] [Thread-18520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:09:09.460 [DEBUG] [Thread-18520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:09:09.460 [DEBUG] [Thread-18520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:09:09.480 [INFO] [Thread-18520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:09:09.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-25T21:09:09.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:09:10.327 [DEBUG] [Thread-18520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:09:10.328 [DEBUG] [Thread-18520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:09:10.375 [DEBUG] [Thread-18520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:09:10.376 [DEBUG] [Thread-18520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:09:10.385 [DEBUG] [Thread-18520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:09:10.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:09:10.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-25T21:09:10.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-25T21:09:10.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:09:10.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:09:10.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:09:10.420 [DEBUG] [Thread-18520] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:09:13.696 [DEBUG] [Thread-18522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:26.471 [DEBUG] [Thread-18523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:28.754 [DEBUG] [Thread-18524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:40.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:09:40.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:09:40.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-25T21:09:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 9, 25), 5.98, 67.51, 0.0, 15.35, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:09:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:09:25
2025-12-25T21:09:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:09:41.412 [DEBUG] [Thread-18525] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-25T21:09:41.413 [DEBUG] [Thread-18525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:09:41.434 [DEBUG] [Thread-18525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:09:41.434 [INFO] [Thread-18525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] client lang: <none>
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] server lang: <none>
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] kex follows: False
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:09:41.437 [DEBUG] [Thread-18525] [transport.py] [_log()] Compression: none
2025-12-25T21:09:41.438 [DEBUG] [Thread-18525] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:09:41.459 [DEBUG] [Thread-18525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:09:41.460 [DEBUG] [Thread-18525] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:09:41.460 [DEBUG] [Thread-18525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:09:41.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:09:41.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:09:41.462 [DEBUG] [Thread-18525] [transport.py] [_log()] userauth is OK
2025-12-25T21:09:41.463 [DEBUG] [Thread-18525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:09:41.463 [DEBUG] [Thread-18525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:09:41.463 [DEBUG] [Thread-18525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:09:41.463 [DEBUG] [Thread-18525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:09:41.492 [INFO] [Thread-18525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:09:41.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:09:42.216 [DEBUG] [Thread-18525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:09:42.217 [DEBUG] [Thread-18525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:09:42.217 [DEBUG] [Thread-18525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:09:42.258 [DEBUG] [Thread-18525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:09:42.258 [DEBUG] [Thread-18525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:09:42.261 [DEBUG] [Thread-18525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:09:42.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:09:42.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:09:42.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:09:42.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:09:42.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:09:42.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:09:42.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:09:42.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:09:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:09:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.797976 -999.00  +17.00   6.16     70  +11.60 1 1 1 1 1     0    0 3.52 -75.56 ZNESW 14.4 6.2 190.0 18.8 17.8 -21.6 17.8 -21.2 17.6 -19.9 17.9 -20.7
2025-12-25T21:09:42.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:09:42.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:09:42.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.797976
2025-12-25T21:09:42.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:09:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:09:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:09:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:09:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:09:42.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:09:25', tmtdew=5.98, humidity=67.51, cloud=0.0, wind=15.35, 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-25T21:09:25', seeing=1.89, atlas_timestamp='2025-12-25T19:09:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:08:00')
2025-12-25T21:09:42.286 [DEBUG] [Thread-18525] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:09:42.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-25T21:09:42.379 [DEBUG] [Thread-18528] [transport.py] [_log()] starting thread (client mode): 0xb6bc3340
2025-12-25T21:09:42.379 [DEBUG] [Thread-18528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:09:42.394 [DEBUG] [Thread-18528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:09:42.395 [INFO] [Thread-18528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:09:42.402 [DEBUG] [Thread-18528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:09:42.403 [DEBUG] [Thread-18528] [transport.py] [_log()] client lang: <none>
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] server lang: <none>
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] kex follows: False
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:09:42.404 [DEBUG] [Thread-18528] [transport.py] [_log()] Compression: none
2025-12-25T21:09:42.405 [DEBUG] [Thread-18528] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:09:42.460 [DEBUG] [Thread-18528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:09:42.460 [DEBUG] [Thread-18528] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:09:42.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:09:42.462 [DEBUG] [Thread-18528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:09:42.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:09:42.516 [DEBUG] [Thread-18528] [transport.py] [_log()] userauth is OK
2025-12-25T21:09:42.516 [DEBUG] [Thread-18528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:09:42.516 [DEBUG] [Thread-18528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:09:42.516 [DEBUG] [Thread-18528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:09:42.516 [DEBUG] [Thread-18528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:09:42.535 [INFO] [Thread-18528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:09:42.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-25T21:09:42.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:09:43.099 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:43.100 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:43.399 [DEBUG] [Thread-18528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:09:43.399 [DEBUG] [Thread-18528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:09:43.447 [DEBUG] [Thread-18528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:09:43.447 [DEBUG] [Thread-18528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:09:43.456 [DEBUG] [Thread-18528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:09:43.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:09:43.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-25T21:09:43.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-25T21:09:43.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:09:43.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:09:43.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:09:43.493 [DEBUG] [Thread-18528] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:09:43.787 [DEBUG] [Thread-18530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:09:58.839 [DEBUG] [Thread-18531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:13.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:10:13.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:10:13.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-25T21:10:13.861 [DEBUG] [Thread-18532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 9, 57), 5.99, 67.46, 0.0, 14.57, 16.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:10:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:09:57
2025-12-25T21:10:14.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:10:14.529 [DEBUG] [Thread-18533] [transport.py] [_log()] starting thread (client mode): 0xb6bc26e0
2025-12-25T21:10:14.529 [DEBUG] [Thread-18533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:10:14.545 [DEBUG] [Thread-18533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:10:14.545 [INFO] [Thread-18533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] client lang: <none>
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] server lang: <none>
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] kex follows: False
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] Compression: none
2025-12-25T21:10:14.549 [DEBUG] [Thread-18533] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:10:14.564 [DEBUG] [Thread-18533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:10:14.564 [DEBUG] [Thread-18533] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:10:14.564 [DEBUG] [Thread-18533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:10:14.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:10:14.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:10:14.565 [DEBUG] [Thread-18533] [transport.py] [_log()] userauth is OK
2025-12-25T21:10:14.565 [DEBUG] [Thread-18533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:10:14.565 [DEBUG] [Thread-18533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:10:14.565 [DEBUG] [Thread-18533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:10:14.565 [DEBUG] [Thread-18533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:10:14.574 [INFO] [Thread-18533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:10:14.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:10:15.331 [DEBUG] [Thread-18533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:10:15.331 [DEBUG] [Thread-18533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:10:15.331 [DEBUG] [Thread-18533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:10:15.372 [DEBUG] [Thread-18533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:10:15.373 [DEBUG] [Thread-18533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:10:15.375 [DEBUG] [Thread-18533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:10:15.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:10:15.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:10:15.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:10:15.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:10:15.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:10:15.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:10:15.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.798323 -999.00  +17.00   6.38     70  +11.60 1 1 1 1 1     0    0 3.66 -71.71 ZNESW 12.9 6.4 213.3 14.3 17.8 -21.5 17.7 -21.0 17.6 -19.8 17.8 -20.6
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.798323
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:10:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:10:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:10:15.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:09:57', tmtdew=5.99, humidity=67.46, cloud=0.0, wind=14.57, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:09:57', seeing=1.65, atlas_timestamp='2025-12-25T19:09:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:08:00')
2025-12-25T21:10:15.395 [DEBUG] [Thread-18533] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:10:15.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-25T21:10:15.481 [DEBUG] [Thread-18536] [transport.py] [_log()] starting thread (client mode): 0xb6b217e0
2025-12-25T21:10:15.481 [DEBUG] [Thread-18536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:10:15.496 [DEBUG] [Thread-18536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:10:15.496 [INFO] [Thread-18536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] client lang: <none>
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] server lang: <none>
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] kex follows: False
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] Compression: none
2025-12-25T21:10:15.504 [DEBUG] [Thread-18536] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:10:15.563 [DEBUG] [Thread-18536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:10:15.563 [DEBUG] [Thread-18536] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:10:15.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:10:15.563 [DEBUG] [Thread-18536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:10:15.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:10:15.620 [DEBUG] [Thread-18536] [transport.py] [_log()] userauth is OK
2025-12-25T21:10:15.620 [DEBUG] [Thread-18536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:10:15.620 [DEBUG] [Thread-18536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:10:15.621 [DEBUG] [Thread-18536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:10:15.621 [DEBUG] [Thread-18536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:10:15.643 [INFO] [Thread-18536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:10:15.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:10:15.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:10:16.490 [DEBUG] [Thread-18536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:10:16.490 [DEBUG] [Thread-18536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:10:16.538 [DEBUG] [Thread-18536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:10:16.538 [DEBUG] [Thread-18536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:10:16.547 [DEBUG] [Thread-18536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:10:16.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:10:16.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-25T21:10:16.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-25T21:10:16.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:10:16.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:10:16.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:10:16.583 [DEBUG] [Thread-18536] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:10:26.532 [DEBUG] [Thread-18538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:28.893 [DEBUG] [Thread-18539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:43.302 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:43.303 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:43.946 [DEBUG] [Thread-18540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:10:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:10:46.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:10: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-25T21:10:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 10, 29), 5.98, 67.49, 0.0, 11.38, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:10:47.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:10:29
2025-12-25T21:10:47.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:10:47.595 [DEBUG] [Thread-18541] [transport.py] [_log()] starting thread (client mode): 0xb6b22b30
2025-12-25T21:10:47.595 [DEBUG] [Thread-18541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:10:47.615 [DEBUG] [Thread-18541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:10:47.615 [INFO] [Thread-18541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] client lang: <none>
2025-12-25T21:10:47.619 [DEBUG] [Thread-18541] [transport.py] [_log()] server lang: <none>
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] kex follows: False
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] Compression: none
2025-12-25T21:10:47.620 [DEBUG] [Thread-18541] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:10:47.641 [DEBUG] [Thread-18541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:10:47.642 [DEBUG] [Thread-18541] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:10:47.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:10:47.643 [DEBUG] [Thread-18541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:10:47.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:10:47.685 [DEBUG] [Thread-18541] [transport.py] [_log()] userauth is OK
2025-12-25T21:10:47.685 [DEBUG] [Thread-18541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:10:47.685 [DEBUG] [Thread-18541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:10:47.685 [DEBUG] [Thread-18541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:10:47.685 [DEBUG] [Thread-18541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:10:47.719 [INFO] [Thread-18541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:10:47.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:10:48.389 [DEBUG] [Thread-18541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:10:48.389 [DEBUG] [Thread-18541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:10:48.389 [DEBUG] [Thread-18541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:10:48.430 [DEBUG] [Thread-18541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:10:48.431 [DEBUG] [Thread-18541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:10:48.433 [DEBUG] [Thread-18541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:10:48.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:10:48.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:10:48.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:10:48.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:10:48.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:10:48.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:10:48.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.798670 -999.00  +17.00  13.26     70  +11.60 1 1 1 1 1     0    0 3.61 -71.68 ZNESW 7.8 13.3 212.0 20.1 17.8 -21.7 17.7 -21.6 17.6 -20.0 17.8 -20.9
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.798670
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:10:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:10:29', tmtdew=5.98, humidity=67.49, cloud=0.0, wind=11.38, 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-25T21:10:29', seeing=1.82, atlas_timestamp='2025-12-25T19:10:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:08:00')
2025-12-25T21:10:48.451 [DEBUG] [Thread-18541] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:10:48.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-25T21:10:48.536 [DEBUG] [Thread-18544] [transport.py] [_log()] starting thread (client mode): 0xb6b7f580
2025-12-25T21:10:48.536 [DEBUG] [Thread-18544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:10:48.553 [DEBUG] [Thread-18544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:10:48.553 [INFO] [Thread-18544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:10:48.560 [DEBUG] [Thread-18544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] client lang: <none>
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] server lang: <none>
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] kex follows: False
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] Compression: none
2025-12-25T21:10:48.561 [DEBUG] [Thread-18544] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:10:48.619 [DEBUG] [Thread-18544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:10:48.619 [DEBUG] [Thread-18544] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:10:48.620 [DEBUG] [Thread-18544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:10:48.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:10:48.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:10:48.676 [DEBUG] [Thread-18544] [transport.py] [_log()] userauth is OK
2025-12-25T21:10:48.676 [DEBUG] [Thread-18544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:10:48.676 [DEBUG] [Thread-18544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:10:48.676 [DEBUG] [Thread-18544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:10:48.676 [DEBUG] [Thread-18544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:10:48.691 [INFO] [Thread-18544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:10:48.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-25T21:10:48.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:10:49.583 [DEBUG] [Thread-18544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:10:49.584 [DEBUG] [Thread-18544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:10:49.631 [DEBUG] [Thread-18544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:10:49.631 [DEBUG] [Thread-18544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:10:49.639 [DEBUG] [Thread-18544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:10:49.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:10:49.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:10:49.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-25T21:10:49.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:10:49.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:10:49.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:10:49.672 [DEBUG] [Thread-18544] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:10:58.978 [DEBUG] [Thread-18546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:14.028 [DEBUG] [Thread-18547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:19.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:11:19.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:11:19.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-25T21:11:20.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 11, 1), 5.99, 67.44, 0.0, 12.81, 16.79, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:11:20.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:11:01
2025-12-25T21:11:20.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:11:20.677 [DEBUG] [Thread-18548] [transport.py] [_log()] starting thread (client mode): 0xb6bbaa40
2025-12-25T21:11:20.677 [DEBUG] [Thread-18548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:11:20.688 [DEBUG] [Thread-18548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:11:20.688 [INFO] [Thread-18548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:11:20.692 [DEBUG] [Thread-18548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:11:20.692 [DEBUG] [Thread-18548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:11:20.692 [DEBUG] [Thread-18548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:11:20.692 [DEBUG] [Thread-18548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:20.692 [DEBUG] [Thread-18548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:20.692 [DEBUG] [Thread-18548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] client lang: <none>
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] server lang: <none>
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] kex follows: False
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] Compression: none
2025-12-25T21:11:20.693 [DEBUG] [Thread-18548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:11:20.710 [DEBUG] [Thread-18548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:11:20.710 [DEBUG] [Thread-18548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:11:20.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:11:20.711 [DEBUG] [Thread-18548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:11:20.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:11:20.713 [DEBUG] [Thread-18548] [transport.py] [_log()] userauth is OK
2025-12-25T21:11:20.713 [DEBUG] [Thread-18548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:11:20.714 [DEBUG] [Thread-18548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:11:20.714 [DEBUG] [Thread-18548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:11:20.714 [DEBUG] [Thread-18548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:11:20.736 [INFO] [Thread-18548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:11:20.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:11:21.381 [DEBUG] [Thread-18548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:11:21.381 [DEBUG] [Thread-18548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:11:21.382 [DEBUG] [Thread-18548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:11:21.423 [DEBUG] [Thread-18548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:11:21.423 [DEBUG] [Thread-18548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:11:21.426 [DEBUG] [Thread-18548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:11:21.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:11:21.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:11:21.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:11:21.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:11:21.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:11:21.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:11:21.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:11:21.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:11:21.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:11:21.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.799365 -999.00  +17.00   7.36     70  +11.50 1 1 1 1 1     0    0 3.73 -64.55 ZNESW 7.2 7.4 219.6 14.7 17.8 -21.5 17.8 -21.2 17.5 -19.7 17.8 -20.6
2025-12-25T21:11:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:11:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:11:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.799365
2025-12-25T21:11:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:11:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:11:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:11:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:11:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:11:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:11:01', tmtdew=5.99, humidity=67.44, cloud=0.0, wind=12.81, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:11:01', seeing=1.57, atlas_timestamp='2025-12-25T19:11:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:08:00')
2025-12-25T21:11:21.455 [DEBUG] [Thread-18548] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:11:21.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-25T21:11:21.551 [DEBUG] [Thread-18551] [transport.py] [_log()] starting thread (client mode): 0xb6bbbee0
2025-12-25T21:11:21.551 [DEBUG] [Thread-18551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:11:21.565 [DEBUG] [Thread-18551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:11:21.565 [INFO] [Thread-18551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] client lang: <none>
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] server lang: <none>
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] kex follows: False
2025-12-25T21:11:21.573 [DEBUG] [Thread-18551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:11:21.574 [DEBUG] [Thread-18551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:11:21.574 [DEBUG] [Thread-18551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:11:21.574 [DEBUG] [Thread-18551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:11:21.574 [DEBUG] [Thread-18551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:11:21.574 [DEBUG] [Thread-18551] [transport.py] [_log()] Compression: none
2025-12-25T21:11:21.574 [DEBUG] [Thread-18551] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:11:21.633 [DEBUG] [Thread-18551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:11:21.633 [DEBUG] [Thread-18551] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:11:21.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:11:21.635 [DEBUG] [Thread-18551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:11:21.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:11:21.693 [DEBUG] [Thread-18551] [transport.py] [_log()] userauth is OK
2025-12-25T21:11:21.693 [DEBUG] [Thread-18551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:11:21.693 [DEBUG] [Thread-18551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:11:21.693 [DEBUG] [Thread-18551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:11:21.694 [DEBUG] [Thread-18551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:11:21.715 [INFO] [Thread-18551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:11:21.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-25T21:11:21.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:11:22.552 [DEBUG] [Thread-18551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:11:22.552 [DEBUG] [Thread-18551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:11:22.600 [DEBUG] [Thread-18551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:11:22.600 [DEBUG] [Thread-18551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:11:22.610 [DEBUG] [Thread-18551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:11:22.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:11:22.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:11:22.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:11:22.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:11:22.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:11:22.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:11:22.646 [DEBUG] [Thread-18551] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:11:26.595 [DEBUG] [Thread-18553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:29.060 [DEBUG] [Thread-18554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:43.504 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:43.505 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:44.100 [DEBUG] [Thread-18555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:11:52.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:11:52.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:11:52.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-25T21:11:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 11, 33), 6.19, 66.89, 0.0, 14.22, 17.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:11:53.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:11:33
2025-12-25T21:11:53.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:11:53.635 [DEBUG] [Thread-18556] [transport.py] [_log()] starting thread (client mode): 0xb6bb8460
2025-12-25T21:11:53.635 [DEBUG] [Thread-18556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:11:53.655 [DEBUG] [Thread-18556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:11:53.655 [INFO] [Thread-18556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:11:53.658 [DEBUG] [Thread-18556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] client lang: <none>
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] server lang: <none>
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] kex follows: False
2025-12-25T21:11:53.659 [DEBUG] [Thread-18556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:11:53.660 [DEBUG] [Thread-18556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:11:53.660 [DEBUG] [Thread-18556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:11:53.660 [DEBUG] [Thread-18556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:11:53.660 [DEBUG] [Thread-18556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:11:53.660 [DEBUG] [Thread-18556] [transport.py] [_log()] Compression: none
2025-12-25T21:11:53.660 [DEBUG] [Thread-18556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:11:53.675 [DEBUG] [Thread-18556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:11:53.676 [DEBUG] [Thread-18556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:11:53.676 [DEBUG] [Thread-18556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:11:53.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:11:53.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:11:53.721 [DEBUG] [Thread-18556] [transport.py] [_log()] userauth is OK
2025-12-25T21:11:53.721 [DEBUG] [Thread-18556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:11:53.721 [DEBUG] [Thread-18556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:11:53.722 [DEBUG] [Thread-18556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:11:53.722 [DEBUG] [Thread-18556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:11:53.759 [INFO] [Thread-18556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:11:53.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:11:54.418 [DEBUG] [Thread-18556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:11:54.418 [DEBUG] [Thread-18556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:11:54.419 [DEBUG] [Thread-18556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:11:54.459 [DEBUG] [Thread-18556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:11:54.459 [DEBUG] [Thread-18556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:11:54.462 [DEBUG] [Thread-18556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:11:54.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:11:54.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:11:54.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:11:54.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:11:54.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:11:54.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:11:54.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:11:54.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:11:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:11:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.799712 -999.00  +17.00  10.58     70  +11.60 1 1 1 1 1     0    0 4.00 -63.08 ZNESW 16.3 10.6 253.7 19.4 17.9 -21.5 17.7 -21.1 17.5 -19.9 17.8 -20.6
2025-12-25T21:11:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:11:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:11:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.799712
2025-12-25T21:11:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:11:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:11:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:11:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:11:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:11:54.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:11:33', tmtdew=6.19, humidity=66.89, cloud=0.0, wind=14.22, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:11:34', seeing=1.57, atlas_timestamp='2025-12-25T19:11:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.09574999999999889, 0.09224999999999994, 0.20124999999999993, 0.14149999999999885, 0.13049999999999962, 0.1092499999999994, 0.14199999999999946, 0.12925000000000075, 0.176499999999999, 0.12899999999999956, 0.1587499999999995, 0.05400000000000027, 0.12599999999999945, 0.14224999999999888, 0.125, 0.11399999999999899, 0.07724999999999937, 0.16750000000000043, 0.13699999999999868, 0.12124999999999808, 0.16799999999999926, 0.14374999999999893, 0.12975000000000136, 0.1427499999999995, 0.1379999999999999, 0.13000000000000078, 0.2217500000000001, 0.23550000000000004, 0.3620000000000001, 0.2550000000000008, 0.22900000000000098, 0.15399999999999991, 0.14224999999999888], zp_timestamp='2025-12-25T19:08:00')
2025-12-25T21:11:54.488 [DEBUG] [Thread-18556] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:11:54.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:11:54.582 [DEBUG] [Thread-18559] [transport.py] [_log()] starting thread (client mode): 0xb6b007f0
2025-12-25T21:11:54.582 [DEBUG] [Thread-18559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:11:54.597 [DEBUG] [Thread-18559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:11:54.597 [INFO] [Thread-18559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:11:54.605 [DEBUG] [Thread-18559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:11:54.605 [DEBUG] [Thread-18559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:11:54.605 [DEBUG] [Thread-18559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:11:54.605 [DEBUG] [Thread-18559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:54.605 [DEBUG] [Thread-18559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:11:54.605 [DEBUG] [Thread-18559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] client lang: <none>
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] server lang: <none>
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] kex follows: False
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] Compression: none
2025-12-25T21:11:54.606 [DEBUG] [Thread-18559] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:11:54.666 [DEBUG] [Thread-18559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:11:54.666 [DEBUG] [Thread-18559] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:11:54.667 [DEBUG] [Thread-18559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:11:54.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:11:54.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:11:54.721 [DEBUG] [Thread-18559] [transport.py] [_log()] userauth is OK
2025-12-25T21:11:54.722 [DEBUG] [Thread-18559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:11:54.722 [DEBUG] [Thread-18559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:11:54.722 [DEBUG] [Thread-18559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:11:54.722 [DEBUG] [Thread-18559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:11:54.741 [INFO] [Thread-18559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:11:54.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-25T21:11:54.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:11:55.551 [DEBUG] [Thread-18559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:11:55.551 [DEBUG] [Thread-18559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:11:55.603 [DEBUG] [Thread-18559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:11:55.604 [DEBUG] [Thread-18559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:11:55.613 [DEBUG] [Thread-18559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:11:55.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:11:55.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:11:55.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-25T21:11:55.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:11:55.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:11:55.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:11:55.647 [DEBUG] [Thread-18559] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:11:59.134 [DEBUG] [Thread-18561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:06.212 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:14.185 [DEBUG] [Thread-18562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:12:25.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:12:25.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-25T21:12:26.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 12, 5), 6.02, 67.31, 0.0, 15.05, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:12:26.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:12:05
2025-12-25T21:12:26.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:12:26.647 [DEBUG] [Thread-18563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:26.654 [DEBUG] [Thread-18564] [transport.py] [_log()] starting thread (client mode): 0xb6b74af0
2025-12-25T21:12:26.654 [DEBUG] [Thread-18564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:12:26.675 [DEBUG] [Thread-18564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:12:26.675 [INFO] [Thread-18564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] client lang: <none>
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] server lang: <none>
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] kex follows: False
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] Compression: none
2025-12-25T21:12:26.677 [DEBUG] [Thread-18564] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:12:26.695 [DEBUG] [Thread-18564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:12:26.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:12:26.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] userauth is OK
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:12:26.696 [DEBUG] [Thread-18564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:12:26.705 [INFO] [Thread-18564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:12:26.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:12:27.356 [DEBUG] [Thread-18564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:12:27.356 [DEBUG] [Thread-18564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:12:27.357 [DEBUG] [Thread-18564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:12:27.397 [DEBUG] [Thread-18564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:12:27.397 [DEBUG] [Thread-18564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:12:27.401 [DEBUG] [Thread-18564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:12:27.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:12:27.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:12:27.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:12:27.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:12:27.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:12:27.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:12:27.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.800059 -999.00  +17.00   9.36     70  +11.60 1 1 1 1 1     0    0 3.72 -62.48 ZNESW 13.7 9.4 195.0 22.6 17.8 -21.8 17.6 -21.1 17.5 -19.9 17.8 -20.7
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.800059
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:12:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:12:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:12:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:12:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:12:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:12:05', tmtdew=6.02, humidity=67.31, cloud=0.0, wind=15.05, 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-25T21:12:06', seeing=1.76, atlas_timestamp='2025-12-25T19:12:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.004750000000001364, 0.15525000000000055, 0.0884999999999998, 0.09850000000000136, 0.09025000000000105, 0.14599999999999902, 0.13725000000000165, 0.14449999999999896, 0.09699999999999953, 0.14424999999999955, 0.02200000000000024, 0.17350000000000065, 0.1302500000000002, 0.08000000000000007, 0.1164999999999985, 0.10224999999999973, 0.1274999999999995, 0.10099999999999909, 0.15924999999999834, 0.16549999999999798, 0.13074999999999903, 0.13125000000000142, 0.1327499999999997, 0.10599999999999987, 0.10749999999999993, 0.21175000000000033, 0.20000000000000107, 0.2519999999999998, 0.2090000000000014, 0.18200000000000038, 0.17849999999999966, 0.1557499999999994], zp_timestamp='2025-12-25T19:11:00')
2025-12-25T21:12:27.424 [DEBUG] [Thread-18564] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:12:27.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:12:27.511 [DEBUG] [Thread-18567] [transport.py] [_log()] starting thread (client mode): 0xb955a3e0
2025-12-25T21:12:27.511 [DEBUG] [Thread-18567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:12:27.526 [DEBUG] [Thread-18567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:12:27.526 [INFO] [Thread-18567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] client lang: <none>
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] server lang: <none>
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] kex follows: False
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:12:27.534 [DEBUG] [Thread-18567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:12:27.535 [DEBUG] [Thread-18567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:12:27.535 [DEBUG] [Thread-18567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:12:27.535 [DEBUG] [Thread-18567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:12:27.535 [DEBUG] [Thread-18567] [transport.py] [_log()] Compression: none
2025-12-25T21:12:27.535 [DEBUG] [Thread-18567] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:12:27.594 [DEBUG] [Thread-18567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:12:27.594 [DEBUG] [Thread-18567] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:12:27.595 [DEBUG] [Thread-18567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:12:27.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:12:27.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:12:27.650 [DEBUG] [Thread-18567] [transport.py] [_log()] userauth is OK
2025-12-25T21:12:27.650 [DEBUG] [Thread-18567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:12:27.650 [DEBUG] [Thread-18567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:12:27.650 [DEBUG] [Thread-18567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:12:27.650 [DEBUG] [Thread-18567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:12:27.670 [INFO] [Thread-18567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:12:27.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-25T21:12:27.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:12:28.539 [DEBUG] [Thread-18567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:12:28.539 [DEBUG] [Thread-18567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:12:28.587 [DEBUG] [Thread-18567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:12:28.587 [DEBUG] [Thread-18567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:12:28.597 [DEBUG] [Thread-18567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:12:28.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:12:28.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:12:28.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-25T21:12:28.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:12:28.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:12:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:12:28.633 [DEBUG] [Thread-18567] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:12:29.221 [DEBUG] [Thread-18569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:43.706 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:43.708 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:44.277 [DEBUG] [Thread-18570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:12:58.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:12:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:12:59.313 [DEBUG] [Thread-18571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:12:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 12, 37), 6.02, 67.33, 0.0, 16.18, 16.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:12:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:12:37
2025-12-25T21:12:59.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:12:59.615 [DEBUG] [Thread-18572] [transport.py] [_log()] starting thread (client mode): 0xb6baa650
2025-12-25T21:12:59.615 [DEBUG] [Thread-18572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:12:59.634 [DEBUG] [Thread-18572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:12:59.634 [INFO] [Thread-18572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:12:59.636 [DEBUG] [Thread-18572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] client lang: <none>
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] server lang: <none>
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] kex follows: False
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] Compression: none
2025-12-25T21:12:59.637 [DEBUG] [Thread-18572] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:12:59.645 [DEBUG] [Thread-18572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:12:59.646 [DEBUG] [Thread-18572] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:12:59.646 [DEBUG] [Thread-18572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:12:59.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:12:59.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:12:59.647 [DEBUG] [Thread-18572] [transport.py] [_log()] userauth is OK
2025-12-25T21:12:59.648 [DEBUG] [Thread-18572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:12:59.648 [DEBUG] [Thread-18572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:12:59.648 [DEBUG] [Thread-18572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:12:59.648 [DEBUG] [Thread-18572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:12:59.665 [INFO] [Thread-18572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:12:59.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:13:00.276 [DEBUG] [Thread-18572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:13:00.276 [DEBUG] [Thread-18572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:13:00.276 [DEBUG] [Thread-18572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:13:00.317 [DEBUG] [Thread-18572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:13:00.317 [DEBUG] [Thread-18572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:13:00.322 [DEBUG] [Thread-18572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:13:00.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:13:00.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:13:00.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:13:00.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:13:00.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:13:00.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:13:00.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:13:00.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:13:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:13:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.800406 -999.00  +17.00  13.68     70  +11.60 1 1 1 1 1     0    0 3.70 -65.66 ZNESW 9.0 13.7 205.0 18.7 17.8 -21.7 17.7 -21.1 17.5 -19.8 17.8 -20.9
2025-12-25T21:13:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:13:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:13:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.800406
2025-12-25T21:13:00.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:13:00.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:13:00.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:13:00.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:13:00.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:13:00.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:12:37', tmtdew=6.02, humidity=67.33, cloud=0.0, wind=16.18, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:12:38', seeing=1.8, atlas_timestamp='2025-12-25T19:12:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.004750000000001364, 0.15525000000000055, 0.0884999999999998, 0.09850000000000136, 0.09025000000000105, 0.14599999999999902, 0.13725000000000165, 0.14449999999999896, 0.09699999999999953, 0.14424999999999955, 0.02200000000000024, 0.17350000000000065, 0.1302500000000002, 0.08000000000000007, 0.1164999999999985, 0.10224999999999973, 0.1274999999999995, 0.10099999999999909, 0.15924999999999834, 0.16549999999999798, 0.13074999999999903, 0.13125000000000142, 0.1327499999999997, 0.10599999999999987, 0.10749999999999993, 0.21175000000000033, 0.20000000000000107, 0.2519999999999998, 0.2090000000000014, 0.18200000000000038, 0.17849999999999966, 0.1557499999999994], zp_timestamp='2025-12-25T19:11:00')
2025-12-25T21:13:00.342 [DEBUG] [Thread-18572] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:13:00.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-25T21:13:00.438 [DEBUG] [Thread-18575] [transport.py] [_log()] starting thread (client mode): 0xb6b00c40
2025-12-25T21:13:00.438 [DEBUG] [Thread-18575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:13:00.452 [DEBUG] [Thread-18575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:13:00.453 [INFO] [Thread-18575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:13:00.460 [DEBUG] [Thread-18575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:13:00.460 [DEBUG] [Thread-18575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] client lang: <none>
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] server lang: <none>
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] kex follows: False
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] Compression: none
2025-12-25T21:13:00.461 [DEBUG] [Thread-18575] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:13:00.518 [DEBUG] [Thread-18575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:13:00.518 [DEBUG] [Thread-18575] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:13:00.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:13:00.519 [DEBUG] [Thread-18575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:13:00.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:13:00.574 [DEBUG] [Thread-18575] [transport.py] [_log()] userauth is OK
2025-12-25T21:13:00.574 [DEBUG] [Thread-18575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:13:00.575 [DEBUG] [Thread-18575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:13:00.575 [DEBUG] [Thread-18575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:13:00.575 [DEBUG] [Thread-18575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:13:00.593 [INFO] [Thread-18575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:13:00.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-25T21:13:00.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:13:01.401 [DEBUG] [Thread-18575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:13:01.401 [DEBUG] [Thread-18575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:13:01.448 [DEBUG] [Thread-18575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:13:01.449 [DEBUG] [Thread-18575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:13:01.458 [DEBUG] [Thread-18575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:13:01.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:13:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:13:01.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:13:01.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:13:01.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:13:01.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:13:01.492 [DEBUG] [Thread-18575] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:13:14.346 [DEBUG] [Thread-18577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:13:26.699 [DEBUG] [Thread-18578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:13:29.393 [DEBUG] [Thread-18579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:13:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:13:31.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:13:31.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-25T21:13:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 13, 9), 5.98, 67.49, 0.0, 14.54, 16.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:13:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:13:09
2025-12-25T21:13:32.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:13:32.481 [DEBUG] [Thread-18580] [transport.py] [_log()] starting thread (client mode): 0xb6b77c70
2025-12-25T21:13:32.481 [DEBUG] [Thread-18580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:13:32.500 [DEBUG] [Thread-18580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:13:32.500 [INFO] [Thread-18580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:13:32.503 [DEBUG] [Thread-18580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] client lang: <none>
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] server lang: <none>
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] kex follows: False
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] Compression: none
2025-12-25T21:13:32.504 [DEBUG] [Thread-18580] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:13:32.522 [DEBUG] [Thread-18580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:13:32.522 [DEBUG] [Thread-18580] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:13:32.523 [DEBUG] [Thread-18580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:13:32.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:13:32.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:13:32.525 [DEBUG] [Thread-18580] [transport.py] [_log()] userauth is OK
2025-12-25T21:13:32.525 [DEBUG] [Thread-18580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:13:32.525 [DEBUG] [Thread-18580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:13:32.525 [DEBUG] [Thread-18580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:13:32.525 [DEBUG] [Thread-18580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:13:32.544 [INFO] [Thread-18580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:13:32.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:13:33.146 [DEBUG] [Thread-18580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:13:33.147 [DEBUG] [Thread-18580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:13:33.147 [DEBUG] [Thread-18580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:13:33.188 [DEBUG] [Thread-18580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:13:33.188 [DEBUG] [Thread-18580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:13:33.190 [DEBUG] [Thread-18580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:13:33.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:13:33.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:13:33.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:13:33.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:13:33.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:13:33.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:13:33.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:13:33.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:13:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:13:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.800754 -999.00  +17.00  10.37     70  +11.60 1 1 1 1 1     0    0 3.69 -64.30 ZNESW 11.8 10.4 211.7 15.6 17.8 -21.6 17.7 -21.1 17.5 -19.7 17.8 -20.7
2025-12-25T21:13:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:13:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:13:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.800754
2025-12-25T21:13:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:13:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:13:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:13:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:13:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:13:33.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:13:09', tmtdew=5.98, humidity=67.49, cloud=0.0, wind=14.54, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:13:10', seeing=2.04, atlas_timestamp='2025-12-25T19:13:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.004750000000001364, 0.15525000000000055, 0.0884999999999998, 0.09850000000000136, 0.09025000000000105, 0.14599999999999902, 0.13725000000000165, 0.14449999999999896, 0.09699999999999953, 0.14424999999999955, 0.02200000000000024, 0.17350000000000065, 0.1302500000000002, 0.08000000000000007, 0.1164999999999985, 0.10224999999999973, 0.1274999999999995, 0.10099999999999909, 0.15924999999999834, 0.16549999999999798, 0.13074999999999903, 0.13125000000000142, 0.1327499999999997, 0.10599999999999987, 0.10749999999999993, 0.21175000000000033, 0.20000000000000107, 0.2519999999999998, 0.2090000000000014, 0.18200000000000038, 0.17849999999999966, 0.1557499999999994], zp_timestamp='2025-12-25T19:11:00')
2025-12-25T21:13:33.213 [DEBUG] [Thread-18580] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:13:33.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-25T21:13:33.306 [DEBUG] [Thread-18583] [transport.py] [_log()] starting thread (client mode): 0xb6b03ee0
2025-12-25T21:13:33.306 [DEBUG] [Thread-18583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:13:33.322 [DEBUG] [Thread-18583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:13:33.322 [INFO] [Thread-18583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:13:33.329 [DEBUG] [Thread-18583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] client lang: <none>
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] server lang: <none>
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] kex follows: False
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] Compression: none
2025-12-25T21:13:33.330 [DEBUG] [Thread-18583] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:13:33.386 [DEBUG] [Thread-18583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:13:33.387 [DEBUG] [Thread-18583] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:13:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:13:33.388 [DEBUG] [Thread-18583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:13:33.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:13:33.443 [DEBUG] [Thread-18583] [transport.py] [_log()] userauth is OK
2025-12-25T21:13:33.443 [DEBUG] [Thread-18583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:13:33.443 [DEBUG] [Thread-18583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:13:33.444 [DEBUG] [Thread-18583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:13:33.444 [DEBUG] [Thread-18583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:13:33.464 [INFO] [Thread-18583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:13:33.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-25T21:13:33.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:13:34.294 [DEBUG] [Thread-18583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:13:34.294 [DEBUG] [Thread-18583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:13:34.342 [DEBUG] [Thread-18583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:13:34.342 [DEBUG] [Thread-18583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:13:34.354 [DEBUG] [Thread-18583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:13:34.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:13:34.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-25T21:13:34.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-25T21:13:34.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:13:34.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:13:34.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:13:34.392 [DEBUG] [Thread-18583] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:13:43.910 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:13:43.911 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:13:44.424 [DEBUG] [Thread-18585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:13:59.475 [DEBUG] [Thread-18586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:04.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:14:04.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:14:04.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-25T21:14:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 13, 41), 5.98, 67.51, 0.0, 18.7, 16.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:14:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:13:41
2025-12-25T21:14:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:14:05.439 [DEBUG] [Thread-18587] [transport.py] [_log()] starting thread (client mode): 0xb6bb8040
2025-12-25T21:14:05.440 [DEBUG] [Thread-18587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:14:05.460 [DEBUG] [Thread-18587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:14:05.460 [INFO] [Thread-18587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] client lang: <none>
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] server lang: <none>
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] kex follows: False
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:14:05.463 [DEBUG] [Thread-18587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:14:05.464 [DEBUG] [Thread-18587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:14:05.464 [DEBUG] [Thread-18587] [transport.py] [_log()] Compression: none
2025-12-25T21:14:05.464 [DEBUG] [Thread-18587] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:14:05.479 [DEBUG] [Thread-18587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:14:05.479 [DEBUG] [Thread-18587] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:14:05.479 [DEBUG] [Thread-18587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:14:05.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:14:05.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:14:05.480 [DEBUG] [Thread-18587] [transport.py] [_log()] userauth is OK
2025-12-25T21:14:05.480 [DEBUG] [Thread-18587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:14:05.480 [DEBUG] [Thread-18587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:14:05.480 [DEBUG] [Thread-18587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:14:05.480 [DEBUG] [Thread-18587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:14:05.490 [INFO] [Thread-18587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:14:05.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:14:06.184 [DEBUG] [Thread-18587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:14:06.184 [DEBUG] [Thread-18587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:14:06.184 [DEBUG] [Thread-18587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:14:06.226 [DEBUG] [Thread-18587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:14:06.226 [DEBUG] [Thread-18587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:14:06.229 [DEBUG] [Thread-18587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:14:06.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:14:06.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:14:06.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:14:06.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:14:06.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:14:06.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:14:06.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.800754 -999.00  +17.00  10.37     70  +11.60 1 1 1 1 1     0    0 3.69 -64.30 ZNESW 11.8 10.4 211.7 15.6 17.8 -21.6 17.7 -21.1 17.5 -19.7 17.8 -20.7
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.800754
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:14:06.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:13:41', tmtdew=5.98, humidity=67.51, cloud=0.0, wind=18.7, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:13:42', seeing=1.82, atlas_timestamp='2025-12-25T19:13:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.004750000000001364, 0.15525000000000055, 0.0884999999999998, 0.09850000000000136, 0.09025000000000105, 0.14599999999999902, 0.13725000000000165, 0.14449999999999896, 0.09699999999999953, 0.14424999999999955, 0.02200000000000024, 0.17350000000000065, 0.1302500000000002, 0.08000000000000007, 0.1164999999999985, 0.10224999999999973, 0.1274999999999995, 0.10099999999999909, 0.15924999999999834, 0.16549999999999798, 0.13074999999999903, 0.13125000000000142, 0.1327499999999997, 0.10599999999999987, 0.10749999999999993, 0.21175000000000033, 0.20000000000000107, 0.2519999999999998, 0.2090000000000014, 0.18200000000000038, 0.17849999999999966, 0.1557499999999994], zp_timestamp='2025-12-25T19:11:00')
2025-12-25T21:14:06.250 [DEBUG] [Thread-18587] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:14:06.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-25T21:14:06.333 [DEBUG] [Thread-18590] [transport.py] [_log()] starting thread (client mode): 0xb6b74b50
2025-12-25T21:14:06.333 [DEBUG] [Thread-18590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:14:06.349 [DEBUG] [Thread-18590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:14:06.349 [INFO] [Thread-18590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] client lang: <none>
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] server lang: <none>
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] kex follows: False
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] Compression: none
2025-12-25T21:14:06.357 [DEBUG] [Thread-18590] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:14:06.418 [DEBUG] [Thread-18590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:14:06.418 [DEBUG] [Thread-18590] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:14:06.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:14:06.418 [DEBUG] [Thread-18590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:14:06.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:14:06.474 [DEBUG] [Thread-18590] [transport.py] [_log()] userauth is OK
2025-12-25T21:14:06.474 [DEBUG] [Thread-18590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:14:06.474 [DEBUG] [Thread-18590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:14:06.474 [DEBUG] [Thread-18590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:14:06.474 [DEBUG] [Thread-18590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:14:06.488 [INFO] [Thread-18590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:14:06.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:14:06.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:14:07.327 [DEBUG] [Thread-18590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:14:07.327 [DEBUG] [Thread-18590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:14:07.375 [DEBUG] [Thread-18590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:14:07.375 [DEBUG] [Thread-18590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:14:07.384 [DEBUG] [Thread-18590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:14:07.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:14:07.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:14:07.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:14:07.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:14:07.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:14:07.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:14:07.415 [DEBUG] [Thread-18590] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:14:14.506 [DEBUG] [Thread-18592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:26.755 [DEBUG] [Thread-18593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:29.545 [DEBUG] [Thread-18594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:14:37.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:14:37.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-25T21:14:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 14, 13), 5.97, 67.56, 0.0, 17.15, 16.74, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:14:38.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:14:13
2025-12-25T21:14:38.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:14:38.401 [DEBUG] [Thread-18595] [transport.py] [_log()] starting thread (client mode): 0xb6b23910
2025-12-25T21:14:38.401 [DEBUG] [Thread-18595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:14:38.421 [DEBUG] [Thread-18595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:14:38.421 [INFO] [Thread-18595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:14:38.423 [DEBUG] [Thread-18595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] client lang: <none>
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] server lang: <none>
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] kex follows: False
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:14:38.424 [DEBUG] [Thread-18595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:14:38.425 [DEBUG] [Thread-18595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:14:38.425 [DEBUG] [Thread-18595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:14:38.425 [DEBUG] [Thread-18595] [transport.py] [_log()] Compression: none
2025-12-25T21:14:38.425 [DEBUG] [Thread-18595] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:14:38.444 [DEBUG] [Thread-18595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:14:38.445 [DEBUG] [Thread-18595] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:14:38.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:14:38.446 [DEBUG] [Thread-18595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:14:38.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:14:38.447 [DEBUG] [Thread-18595] [transport.py] [_log()] userauth is OK
2025-12-25T21:14:38.448 [DEBUG] [Thread-18595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:14:38.448 [DEBUG] [Thread-18595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:14:38.448 [DEBUG] [Thread-18595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:14:38.448 [DEBUG] [Thread-18595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:14:38.462 [INFO] [Thread-18595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:14:38.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:14:39.065 [DEBUG] [Thread-18595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:14:39.065 [DEBUG] [Thread-18595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:14:39.066 [DEBUG] [Thread-18595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:14:39.106 [DEBUG] [Thread-18595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:14:39.106 [DEBUG] [Thread-18595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:14:39.110 [DEBUG] [Thread-18595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:14:39.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:14:39.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:14:39.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:14:39.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:14:39.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:14:39.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:14:39.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:14:39.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:14:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:14:39.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.801101 -999.00  +17.00  11.97     70  +11.60 1 1 1 1 1     0    0 3.84 -62.76 ZNESW 9.2 12.0 212.1 20.3 17.8 -21.7 17.7 -20.9 17.5 -19.7 17.8 -20.8
2025-12-25T21:14:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:14:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:14:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.801101
2025-12-25T21:14:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:14:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:14:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:14:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:14:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:14:39.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:14:13', tmtdew=5.97, humidity=67.56, cloud=0.0, wind=17.15, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:14:14', seeing=1.82, atlas_timestamp='2025-12-25T19:13:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.004750000000001364, 0.15525000000000055, 0.0884999999999998, 0.09850000000000136, 0.09025000000000105, 0.14599999999999902, 0.13725000000000165, 0.14449999999999896, 0.09699999999999953, 0.14424999999999955, 0.02200000000000024, 0.17350000000000065, 0.1302500000000002, 0.08000000000000007, 0.1164999999999985, 0.10224999999999973, 0.1274999999999995, 0.10099999999999909, 0.15924999999999834, 0.16549999999999798, 0.13074999999999903, 0.13125000000000142, 0.1327499999999997, 0.10599999999999987, 0.10749999999999993, 0.21175000000000033, 0.20000000000000107, 0.2519999999999998, 0.2090000000000014, 0.18200000000000038, 0.17849999999999966, 0.1557499999999994], zp_timestamp='2025-12-25T19:11:00')
2025-12-25T21:14:39.133 [DEBUG] [Thread-18595] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:14:39.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-25T21:14:39.228 [DEBUG] [Thread-18598] [transport.py] [_log()] starting thread (client mode): 0xb6bba440
2025-12-25T21:14:39.229 [DEBUG] [Thread-18598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:14:39.245 [DEBUG] [Thread-18598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:14:39.245 [INFO] [Thread-18598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:39.253 [DEBUG] [Thread-18598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] client lang: <none>
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] server lang: <none>
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] kex follows: False
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:14:39.254 [DEBUG] [Thread-18598] [transport.py] [_log()] Compression: none
2025-12-25T21:14:39.255 [DEBUG] [Thread-18598] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:14:39.310 [DEBUG] [Thread-18598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:14:39.311 [DEBUG] [Thread-18598] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:14:39.311 [DEBUG] [Thread-18598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:14:39.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:14:39.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:14:39.366 [DEBUG] [Thread-18598] [transport.py] [_log()] userauth is OK
2025-12-25T21:14:39.366 [DEBUG] [Thread-18598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:14:39.367 [DEBUG] [Thread-18598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:14:39.367 [DEBUG] [Thread-18598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:14:39.367 [DEBUG] [Thread-18598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:14:39.381 [INFO] [Thread-18598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:14:39.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:14:39.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:14:40.275 [DEBUG] [Thread-18598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:14:40.275 [DEBUG] [Thread-18598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:14:40.323 [DEBUG] [Thread-18598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:14:40.323 [DEBUG] [Thread-18598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:14:40.333 [DEBUG] [Thread-18598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:14:40.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:14: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')
2025-12-25T21:14:40.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:14:40.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:14:40.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:14:40.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:14:40.369 [DEBUG] [Thread-18598] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:14:44.110 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:44.111 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:44.583 [DEBUG] [Thread-18600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:14:59.633 [DEBUG] [Thread-18601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:10.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:15:10.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:15:10.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-25T21:15:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 14, 45), 5.96, 67.61, 0.0, 18.81, 16.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:15:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:14:45
2025-12-25T21:15:11.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:15:11.369 [DEBUG] [Thread-18602] [transport.py] [_log()] starting thread (client mode): 0xb6b01b10
2025-12-25T21:15:11.369 [DEBUG] [Thread-18602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:15:11.391 [DEBUG] [Thread-18602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:15:11.391 [INFO] [Thread-18602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] client lang: <none>
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] server lang: <none>
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] kex follows: False
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:15:11.392 [DEBUG] [Thread-18602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:15:11.393 [DEBUG] [Thread-18602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:15:11.393 [DEBUG] [Thread-18602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:15:11.393 [DEBUG] [Thread-18602] [transport.py] [_log()] Compression: none
2025-12-25T21:15:11.393 [DEBUG] [Thread-18602] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:15:11.407 [DEBUG] [Thread-18602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:15:11.408 [DEBUG] [Thread-18602] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:15:11.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:15:11.409 [DEBUG] [Thread-18602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:15:11.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:15:11.411 [DEBUG] [Thread-18602] [transport.py] [_log()] userauth is OK
2025-12-25T21:15:11.411 [DEBUG] [Thread-18602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:15:11.411 [DEBUG] [Thread-18602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:15:11.411 [DEBUG] [Thread-18602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:15:11.411 [DEBUG] [Thread-18602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:15:11.429 [INFO] [Thread-18602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:15:11.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:15:14.578 [DEBUG] [Thread-18602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:15:14.579 [DEBUG] [Thread-18602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:15:14.579 [DEBUG] [Thread-18602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:15:14.619 [DEBUG] [Thread-18602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:15:14.619 [DEBUG] [Thread-18602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:15:14.623 [DEBUG] [Thread-18602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:15:14.673 [DEBUG] [Thread-18604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:14.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:15:14.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:15:14.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:15:14.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:15:14.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:15:14.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:15:14.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.801795 -999.00  +16.90  14.90     70  +11.60 1 1 1 1 1     0    0 3.99 -54.70 ZNESW 16.9 14.9 232.6 20.9 17.8 -21.5 17.7 -21.1 17.5 -19.9 17.8 -21.0
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.801795
2025-12-25T21:15:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:15:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:15:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:15:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:15:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:15:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:14:45', tmtdew=5.96, humidity=67.61, cloud=0.0, wind=18.81, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:14:46', seeing=1.7, atlas_timestamp='2025-12-25T19:14:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.09174999999999933, 0.004750000000001364, 0.15525000000000055, 0.0884999999999998, 0.09850000000000136, 0.09025000000000105, 0.14599999999999902, 0.13725000000000165, 0.14449999999999896, 0.09699999999999953, 0.14424999999999955, 0.02200000000000024, 0.17350000000000065, 0.1302500000000002, 0.08000000000000007, 0.1164999999999985, 0.10224999999999973, 0.1274999999999995, 0.10099999999999909, 0.15924999999999834, 0.16549999999999798, 0.13074999999999903, 0.13125000000000142, 0.1327499999999997, 0.10599999999999987, 0.10749999999999993, 0.21175000000000033, 0.20000000000000107, 0.2519999999999998, 0.2090000000000014, 0.18200000000000038, 0.17849999999999966, 0.1557499999999994], zp_timestamp='2025-12-25T19:11:00')
2025-12-25T21:15:14.746 [DEBUG] [Thread-18602] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:15:14.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-25T21:15:14.838 [DEBUG] [Thread-18606] [transport.py] [_log()] starting thread (client mode): 0xb6b61480
2025-12-25T21:15:14.838 [DEBUG] [Thread-18606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:15:14.852 [DEBUG] [Thread-18606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:15:14.853 [INFO] [Thread-18606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] client lang: <none>
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] server lang: <none>
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] kex follows: False
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] Compression: none
2025-12-25T21:15:14.861 [DEBUG] [Thread-18606] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:15:14.920 [DEBUG] [Thread-18606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:15:14.920 [DEBUG] [Thread-18606] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:15:14.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:15:14.921 [DEBUG] [Thread-18606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:15:14.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:15:14.976 [DEBUG] [Thread-18606] [transport.py] [_log()] userauth is OK
2025-12-25T21:15:14.976 [DEBUG] [Thread-18606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:15:14.976 [DEBUG] [Thread-18606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:15:14.976 [DEBUG] [Thread-18606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:15:14.976 [DEBUG] [Thread-18606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:15:14.995 [INFO] [Thread-18606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:15:14.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-25T21:15:14.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:15:15.843 [DEBUG] [Thread-18606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:15:15.844 [DEBUG] [Thread-18606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:15:15.892 [DEBUG] [Thread-18606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:15:15.892 [DEBUG] [Thread-18606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:15:15.902 [DEBUG] [Thread-18606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:15:15.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:15:15.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-25T21:15:15.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-25T21:15:15.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:15:15.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:15:15.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:15:15.939 [DEBUG] [Thread-18606] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:15:26.808 [DEBUG] [Thread-18608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:29.703 [DEBUG] [Thread-18609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:44.312 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:44.312 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:44.756 [DEBUG] [Thread-18610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:15:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:15:45.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:15:45.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:15:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 15, 18), 5.94, 67.68, 0.0, 18.9, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:15:46.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:15:18
2025-12-25T21:15:46.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:15:46.924 [DEBUG] [Thread-18611] [transport.py] [_log()] starting thread (client mode): 0xb6bf7010
2025-12-25T21:15:46.924 [DEBUG] [Thread-18611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:15:46.945 [DEBUG] [Thread-18611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:15:46.945 [INFO] [Thread-18611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:15:46.948 [DEBUG] [Thread-18611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] client lang: <none>
2025-12-25T21:15:46.949 [DEBUG] [Thread-18611] [transport.py] [_log()] server lang: <none>
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] kex follows: False
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] Compression: none
2025-12-25T21:15:46.950 [DEBUG] [Thread-18611] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:15:46.975 [DEBUG] [Thread-18611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:15:46.975 [DEBUG] [Thread-18611] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:15:46.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:15:46.976 [DEBUG] [Thread-18611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:15:46.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:15:46.979 [DEBUG] [Thread-18611] [transport.py] [_log()] userauth is OK
2025-12-25T21:15:46.979 [DEBUG] [Thread-18611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:15:46.979 [DEBUG] [Thread-18611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:15:46.979 [DEBUG] [Thread-18611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:15:46.979 [DEBUG] [Thread-18611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:15:47.004 [INFO] [Thread-18611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:15:47.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:15:47.634 [DEBUG] [Thread-18611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:15:47.635 [DEBUG] [Thread-18611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:15:47.635 [DEBUG] [Thread-18611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:15:47.676 [DEBUG] [Thread-18611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:15:47.676 [DEBUG] [Thread-18611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:15:47.680 [DEBUG] [Thread-18611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:15:47.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:15:47.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:15:47.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:15:47.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:15:47.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:15:47.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:15:47.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:15:47.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:15:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:15:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.802142 -999.00  +16.80  11.68     71  +11.60 1 1 1 1 1     0    0 3.96 -54.34 ZNESW 14.3 11.7 233.3 21.9 17.7 -21.7 17.6 -20.9 17.4 -19.7 17.7 -20.7
2025-12-25T21:15:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:15:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:15:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.802142
2025-12-25T21:15:47.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:15:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:15:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:15:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:15:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:15:47.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:15:18', tmtdew=5.94, humidity=67.68, cloud=0.0, wind=18.9, 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-25T21:15:18', seeing=1.7, atlas_timestamp='2025-12-25T19:15:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:14:00')
2025-12-25T21:15:47.706 [DEBUG] [Thread-18611] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:15:47.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:15:47.798 [DEBUG] [Thread-18614] [transport.py] [_log()] starting thread (client mode): 0xb6bf5f90
2025-12-25T21:15:47.799 [DEBUG] [Thread-18614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:15:47.814 [DEBUG] [Thread-18614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:15:47.814 [INFO] [Thread-18614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:15:47.822 [DEBUG] [Thread-18614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:15:47.822 [DEBUG] [Thread-18614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:15:47.822 [DEBUG] [Thread-18614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:15:47.822 [DEBUG] [Thread-18614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:47.822 [DEBUG] [Thread-18614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] client lang: <none>
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] server lang: <none>
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] kex follows: False
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] Compression: none
2025-12-25T21:15:47.823 [DEBUG] [Thread-18614] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:15:47.881 [DEBUG] [Thread-18614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:15:47.881 [DEBUG] [Thread-18614] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:15:47.882 [DEBUG] [Thread-18614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:15:47.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:15:47.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:15:47.947 [DEBUG] [Thread-18614] [transport.py] [_log()] userauth is OK
2025-12-25T21:15:47.947 [DEBUG] [Thread-18614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:15:47.947 [DEBUG] [Thread-18614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:15:47.947 [DEBUG] [Thread-18614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:15:47.947 [DEBUG] [Thread-18614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:15:47.967 [INFO] [Thread-18614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:15:47.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-25T21:15:47.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:15:48.865 [DEBUG] [Thread-18614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:15:48.865 [DEBUG] [Thread-18614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:15:48.913 [DEBUG] [Thread-18614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:15:48.914 [DEBUG] [Thread-18614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:15:48.922 [DEBUG] [Thread-18614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:15:48.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:15:48.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-25T21:15:48.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-25T21:15:48.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:15:48.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:15:48.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:15:48.956 [DEBUG] [Thread-18614] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:15:59.794 [DEBUG] [Thread-18616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:14.852 [DEBUG] [Thread-18617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:18.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:16:18.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:16:18.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:16:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 15, 50), 5.91, 68.11, 0.0, 21.72, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:16:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:15:50
2025-12-25T21:16:19.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:16:19.953 [DEBUG] [Thread-18618] [transport.py] [_log()] starting thread (client mode): 0xb6bf6b60
2025-12-25T21:16:19.954 [DEBUG] [Thread-18618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:16:19.974 [DEBUG] [Thread-18618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:16:19.975 [INFO] [Thread-18618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:16:19.977 [DEBUG] [Thread-18618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] client lang: <none>
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] server lang: <none>
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] kex follows: False
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] Compression: none
2025-12-25T21:16:19.978 [DEBUG] [Thread-18618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:16:19.995 [DEBUG] [Thread-18618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:16:19.996 [DEBUG] [Thread-18618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:16:19.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:16:19.997 [DEBUG] [Thread-18618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:16:19.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:16:19.999 [DEBUG] [Thread-18618] [transport.py] [_log()] userauth is OK
2025-12-25T21:16:19.999 [DEBUG] [Thread-18618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:16:20.000 [DEBUG] [Thread-18618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:16:20.000 [DEBUG] [Thread-18618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:16:20.000 [DEBUG] [Thread-18618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:16:20.024 [INFO] [Thread-18618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:16:20.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:16:20.836 [DEBUG] [Thread-18618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:16:20.836 [DEBUG] [Thread-18618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:16:20.837 [DEBUG] [Thread-18618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:16:20.878 [DEBUG] [Thread-18618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:16:20.878 [DEBUG] [Thread-18618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:16:20.881 [DEBUG] [Thread-18618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:16:20.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:16:20.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:16:20.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:16:20.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:16:20.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:16:20.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:16:20.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:16:20.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:16:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:16:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.802490 -999.00  +16.90  13.99     71  +11.60 1 1 1 1 1     0    0 3.94 -52.24 ZNESW 11.0 14.0 206.0 16.8 17.8 -21.4 17.6 -20.9 17.4 -19.7 17.7 -20.6
2025-12-25T21:16:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:16:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:16:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.802490
2025-12-25T21:16:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:16:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:16:20.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:16:20.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:16:20.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:16:20.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:15:50', tmtdew=5.91, humidity=68.11, cloud=0.0, wind=21.72, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:15:50', seeing=1.59, atlas_timestamp='2025-12-25T19:15:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:14:00')
2025-12-25T21:16:20.905 [DEBUG] [Thread-18618] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:16:20.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-25T21:16:21.004 [DEBUG] [Thread-18621] [transport.py] [_log()] starting thread (client mode): 0xb6babac0
2025-12-25T21:16:21.005 [DEBUG] [Thread-18621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:16:21.026 [DEBUG] [Thread-18621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:16:21.026 [INFO] [Thread-18621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:16:21.034 [DEBUG] [Thread-18621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:16:21.034 [DEBUG] [Thread-18621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:16:21.034 [DEBUG] [Thread-18621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:16:21.034 [DEBUG] [Thread-18621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:21.034 [DEBUG] [Thread-18621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:21.034 [DEBUG] [Thread-18621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] client lang: <none>
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] server lang: <none>
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] kex follows: False
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] Compression: none
2025-12-25T21:16:21.035 [DEBUG] [Thread-18621] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:16:21.091 [DEBUG] [Thread-18621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:16:21.092 [DEBUG] [Thread-18621] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:16:21.092 [DEBUG] [Thread-18621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:16:21.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:16:21.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:16:21.148 [DEBUG] [Thread-18621] [transport.py] [_log()] userauth is OK
2025-12-25T21:16:21.148 [DEBUG] [Thread-18621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:16:21.148 [DEBUG] [Thread-18621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:16:21.148 [DEBUG] [Thread-18621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:16:21.148 [DEBUG] [Thread-18621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:16:21.172 [INFO] [Thread-18621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:16:21.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-25T21:16:21.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:16:22.006 [DEBUG] [Thread-18621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:16:22.007 [DEBUG] [Thread-18621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:16:22.054 [DEBUG] [Thread-18621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:16:22.055 [DEBUG] [Thread-18621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:16:22.063 [DEBUG] [Thread-18621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:16:22.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:16:22.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-25T21:16:22.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-25T21:16:22.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:16:22.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:16:22.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:16:22.098 [DEBUG] [Thread-18621] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:16:26.866 [DEBUG] [Thread-18623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:29.883 [DEBUG] [Thread-18624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:44.518 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:44.519 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:44.963 [DEBUG] [Thread-18625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:16:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:16:52.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:16:52.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-25T21:16:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 16, 22), 5.91, 68.06, 0.0, 20.98, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:16:52.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:16:22
2025-12-25T21:16:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:16:53.089 [DEBUG] [Thread-18626] [transport.py] [_log()] starting thread (client mode): 0xb6bf48b0
2025-12-25T21:16:53.090 [DEBUG] [Thread-18626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:16:53.109 [DEBUG] [Thread-18626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:16:53.109 [INFO] [Thread-18626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:16:53.112 [DEBUG] [Thread-18626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] client lang: <none>
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] server lang: <none>
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] kex follows: False
2025-12-25T21:16:53.113 [DEBUG] [Thread-18626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:16:53.114 [DEBUG] [Thread-18626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:16:53.114 [DEBUG] [Thread-18626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:16:53.114 [DEBUG] [Thread-18626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:16:53.114 [DEBUG] [Thread-18626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:16:53.114 [DEBUG] [Thread-18626] [transport.py] [_log()] Compression: none
2025-12-25T21:16:53.114 [DEBUG] [Thread-18626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:16:53.132 [DEBUG] [Thread-18626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:16:53.133 [DEBUG] [Thread-18626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:16:53.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:16:53.134 [DEBUG] [Thread-18626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:16:53.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:16:53.136 [DEBUG] [Thread-18626] [transport.py] [_log()] userauth is OK
2025-12-25T21:16:53.136 [DEBUG] [Thread-18626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:16:53.136 [DEBUG] [Thread-18626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:16:53.136 [DEBUG] [Thread-18626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:16:53.136 [DEBUG] [Thread-18626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:16:53.159 [INFO] [Thread-18626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:16:53.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:16:53.766 [DEBUG] [Thread-18626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:16:53.766 [DEBUG] [Thread-18626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:16:53.767 [DEBUG] [Thread-18626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:16:53.807 [DEBUG] [Thread-18626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:16:53.808 [DEBUG] [Thread-18626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:16:53.810 [DEBUG] [Thread-18626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:16:53.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:16:53.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:16:53.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:16:53.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:16:53.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:16:53.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:16:53.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:16:53.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:16:53.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:16:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.802837 -999.00  +16.90  10.88     71  +11.60 1 1 1 1 1     0    0 4.07 -54.57 ZNESW 8.3 10.9 195.5 19.5 17.8 -21.3 17.6 -20.9 17.4 -19.6 17.7 -20.6
2025-12-25T21:16:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:16:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:16:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.802837
2025-12-25T21:16:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:16:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:16:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:16:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:16:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:16:53.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:16:22', tmtdew=5.91, humidity=68.06, cloud=0.0, wind=20.98, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:16:22', seeing=1.59, atlas_timestamp='2025-12-25T19:16:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:14:00')
2025-12-25T21:16:53.838 [DEBUG] [Thread-18626] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:16:53.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-25T21:16:53.931 [DEBUG] [Thread-18629] [transport.py] [_log()] starting thread (client mode): 0xb6bf7fd0
2025-12-25T21:16:53.932 [DEBUG] [Thread-18629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:16:53.946 [DEBUG] [Thread-18629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:16:53.946 [INFO] [Thread-18629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] client lang: <none>
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] server lang: <none>
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] kex follows: False
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] Compression: none
2025-12-25T21:16:53.954 [DEBUG] [Thread-18629] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:16:54.011 [DEBUG] [Thread-18629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:16:54.012 [DEBUG] [Thread-18629] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:16:54.012 [DEBUG] [Thread-18629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:16:54.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:16:54.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:16:54.068 [DEBUG] [Thread-18629] [transport.py] [_log()] userauth is OK
2025-12-25T21:16:54.069 [DEBUG] [Thread-18629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:16:54.069 [DEBUG] [Thread-18629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:16:54.069 [DEBUG] [Thread-18629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:16:54.069 [DEBUG] [Thread-18629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:16:54.088 [INFO] [Thread-18629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:16:54.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-25T21:16:54.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:16:54.914 [DEBUG] [Thread-18629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:16:54.914 [DEBUG] [Thread-18629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:16:54.962 [DEBUG] [Thread-18629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:16:54.962 [DEBUG] [Thread-18629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:16:54.971 [DEBUG] [Thread-18629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:16:54.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:16:54.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-25T21:16:54.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-25T21:16:54.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:16:54.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:16:54.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:16:55.003 [DEBUG] [Thread-18629] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:16:59.990 [DEBUG] [Thread-18631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:15.045 [DEBUG] [Thread-18632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:17:25.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:17:25.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-25T21:17:25.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 16, 54), 5.87, 68.26, 0.0, 18.21, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:17:25.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:16:54
2025-12-25T21:17:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:17:26.001 [DEBUG] [Thread-18633] [transport.py] [_log()] starting thread (client mode): 0xb6b60370
2025-12-25T21:17:26.002 [DEBUG] [Thread-18633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:17:26.022 [DEBUG] [Thread-18633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:17:26.022 [INFO] [Thread-18633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] client lang: <none>
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] server lang: <none>
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] kex follows: False
2025-12-25T21:17:26.026 [DEBUG] [Thread-18633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:17:26.027 [DEBUG] [Thread-18633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:17:26.027 [DEBUG] [Thread-18633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:17:26.027 [DEBUG] [Thread-18633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:17:26.027 [DEBUG] [Thread-18633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:17:26.027 [DEBUG] [Thread-18633] [transport.py] [_log()] Compression: none
2025-12-25T21:17:26.027 [DEBUG] [Thread-18633] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:17:26.043 [DEBUG] [Thread-18633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:17:26.044 [DEBUG] [Thread-18633] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:17:26.044 [DEBUG] [Thread-18633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:17:26.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:17:26.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:17:26.047 [DEBUG] [Thread-18633] [transport.py] [_log()] userauth is OK
2025-12-25T21:17:26.047 [DEBUG] [Thread-18633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:17:26.047 [DEBUG] [Thread-18633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:17:26.047 [DEBUG] [Thread-18633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:17:26.047 [DEBUG] [Thread-18633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:17:26.072 [INFO] [Thread-18633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:17:26.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:17:26.913 [DEBUG] [Thread-18633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:17:26.913 [DEBUG] [Thread-18633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:17:26.913 [DEBUG] [Thread-18633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:17:26.924 [DEBUG] [Thread-18635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:26.954 [DEBUG] [Thread-18633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:17:26.954 [DEBUG] [Thread-18633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:17:26.957 [DEBUG] [Thread-18633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:17:26.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:17:26.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:17:26.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:17:26.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:17:26.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:17:26.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:17:26.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:17:26.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:17:26.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:17:26.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.803184 -999.00  +16.90   8.65     71  +11.60 1 1 1 1 1     0    0 3.91 -59.89 ZNESW 10.7 8.7 220.1 15.9 17.7 -21.5 17.6 -20.8 17.4 -19.8 17.7 -20.7
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.803184
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:17:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:16:54', tmtdew=5.87, humidity=68.26, cloud=0.0, wind=18.21, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:16:54', seeing=1.39, atlas_timestamp='2025-12-25T19:16:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:14:00')
2025-12-25T21:17:26.973 [DEBUG] [Thread-18633] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:17:27.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-25T21:17:27.057 [DEBUG] [Thread-18637] [transport.py] [_log()] starting thread (client mode): 0xb6bf74f0
2025-12-25T21:17:27.057 [DEBUG] [Thread-18637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:17:27.072 [DEBUG] [Thread-18637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:17:27.073 [INFO] [Thread-18637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] client lang: <none>
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] server lang: <none>
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] kex follows: False
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] Compression: none
2025-12-25T21:17:27.083 [DEBUG] [Thread-18637] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:17:27.136 [DEBUG] [Thread-18637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:17:27.136 [DEBUG] [Thread-18637] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:17:27.136 [DEBUG] [Thread-18637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:17:27.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:17:27.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:17:27.192 [DEBUG] [Thread-18637] [transport.py] [_log()] userauth is OK
2025-12-25T21:17:27.192 [DEBUG] [Thread-18637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:17:27.192 [DEBUG] [Thread-18637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:17:27.192 [DEBUG] [Thread-18637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:17:27.192 [DEBUG] [Thread-18637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:17:27.206 [INFO] [Thread-18637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:17:27.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:17:27.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:17:28.044 [DEBUG] [Thread-18637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:17:28.044 [DEBUG] [Thread-18637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:17:28.091 [DEBUG] [Thread-18637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:17:28.091 [DEBUG] [Thread-18637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:17:28.099 [DEBUG] [Thread-18637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:17:28.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:17:28.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:17:28.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-25T21:17:28.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:17:28.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:17:28.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:17:28.130 [DEBUG] [Thread-18637] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:17:30.074 [DEBUG] [Thread-18639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:44.722 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:44.723 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:45.147 [DEBUG] [Thread-18640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:17:58.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:17:58.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:17:58.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:17:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 17, 26), 5.88, 68.23, 0.0, 18.51, 16.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:17:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:17:26
2025-12-25T21:17:59.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:17:59.197 [DEBUG] [Thread-18641] [transport.py] [_log()] starting thread (client mode): 0xb6bf5360
2025-12-25T21:17:59.198 [DEBUG] [Thread-18641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:17:59.218 [DEBUG] [Thread-18641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:17:59.218 [INFO] [Thread-18641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] client lang: <none>
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] server lang: <none>
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] kex follows: False
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:17:59.221 [DEBUG] [Thread-18641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:17:59.222 [DEBUG] [Thread-18641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:17:59.222 [DEBUG] [Thread-18641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:17:59.222 [DEBUG] [Thread-18641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:17:59.222 [DEBUG] [Thread-18641] [transport.py] [_log()] Compression: none
2025-12-25T21:17:59.222 [DEBUG] [Thread-18641] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:17:59.238 [DEBUG] [Thread-18641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:17:59.238 [DEBUG] [Thread-18641] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:17:59.238 [DEBUG] [Thread-18641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:17:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:17:59.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:17:59.239 [DEBUG] [Thread-18641] [transport.py] [_log()] userauth is OK
2025-12-25T21:17:59.239 [DEBUG] [Thread-18641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:17:59.239 [DEBUG] [Thread-18641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:17:59.239 [DEBUG] [Thread-18641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:17:59.239 [DEBUG] [Thread-18641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:17:59.250 [INFO] [Thread-18641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:17:59.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:17:59.913 [DEBUG] [Thread-18641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:17:59.913 [DEBUG] [Thread-18641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:17:59.913 [DEBUG] [Thread-18641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:17:59.955 [DEBUG] [Thread-18641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:17:59.955 [DEBUG] [Thread-18641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:17:59.957 [DEBUG] [Thread-18641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:17:59.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:17:59.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:17:59.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:17:59.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:17:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:17:59.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:17:59.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.803531 -999.00  +16.80   9.03     71  +11.60 1 1 1 1 1     0    0 3.98 -53.87 ZNESW 11.8 9.0 233.7 20.2 17.7 -21.4 17.6 -20.8 17.4 -19.6 17.7 -20.6
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.803531
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:17:59.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:17:26', tmtdew=5.88, humidity=68.23, cloud=0.0, wind=18.51, temperature=16.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:17:26', seeing=1.72, atlas_timestamp='2025-12-25T19:17:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:14:00')
2025-12-25T21:17:59.978 [DEBUG] [Thread-18641] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:18:00.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-25T21:18:00.066 [DEBUG] [Thread-18644] [transport.py] [_log()] starting thread (client mode): 0xb6b76aa0
2025-12-25T21:18:00.066 [DEBUG] [Thread-18644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:18:00.085 [DEBUG] [Thread-18644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:18:00.085 [INFO] [Thread-18644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:18:00.093 [DEBUG] [Thread-18644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:18:00.093 [DEBUG] [Thread-18644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:18:00.093 [DEBUG] [Thread-18644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] client lang: <none>
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] server lang: <none>
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] kex follows: False
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] Compression: none
2025-12-25T21:18:00.094 [DEBUG] [Thread-18644] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:18:00.154 [DEBUG] [Thread-18644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:18:00.154 [DEBUG] [Thread-18644] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:18:00.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:18:00.154 [DEBUG] [Thread-18644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:18:00.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:18:00.181 [DEBUG] [Thread-18646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:18:00.219 [DEBUG] [Thread-18644] [transport.py] [_log()] userauth is OK
2025-12-25T21:18:00.219 [DEBUG] [Thread-18644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:18:00.219 [DEBUG] [Thread-18644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:18:00.219 [DEBUG] [Thread-18644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:18:00.219 [DEBUG] [Thread-18644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:18:00.236 [INFO] [Thread-18644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:18:00.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-25T21:18:00.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:18:01.058 [DEBUG] [Thread-18644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:18:01.058 [DEBUG] [Thread-18644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:18:01.105 [DEBUG] [Thread-18644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:18:01.105 [DEBUG] [Thread-18644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:18:01.115 [DEBUG] [Thread-18644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:18:01.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:18:01.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-25T21:18:01.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-25T21:18:01.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:18:01.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:18:01.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:18:01.147 [DEBUG] [Thread-18644] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:18:15.220 [DEBUG] [Thread-18647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:18:26.985 [DEBUG] [Thread-18648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:18:30.257 [DEBUG] [Thread-18649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:18:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:18:31.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:18:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:18:31.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 17, 58), 5.87, 68.28, 0.0, 19.5, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:18:31.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:17:58
2025-12-25T21:18:32.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:18:32.205 [DEBUG] [Thread-18650] [transport.py] [_log()] starting thread (client mode): 0xb6b63490
2025-12-25T21:18:32.205 [DEBUG] [Thread-18650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:18:32.222 [DEBUG] [Thread-18650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:18:32.222 [INFO] [Thread-18650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] client lang: <none>
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] server lang: <none>
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] kex follows: False
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:18:32.224 [DEBUG] [Thread-18650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:18:32.225 [DEBUG] [Thread-18650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:18:32.225 [DEBUG] [Thread-18650] [transport.py] [_log()] Compression: none
2025-12-25T21:18:32.225 [DEBUG] [Thread-18650] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:18:32.234 [DEBUG] [Thread-18650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:18:32.235 [DEBUG] [Thread-18650] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:18:32.235 [DEBUG] [Thread-18650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:18:32.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:18:32.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:18:32.236 [DEBUG] [Thread-18650] [transport.py] [_log()] userauth is OK
2025-12-25T21:18:32.236 [DEBUG] [Thread-18650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:18:32.236 [DEBUG] [Thread-18650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:18:32.236 [DEBUG] [Thread-18650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:18:32.236 [DEBUG] [Thread-18650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:18:32.245 [INFO] [Thread-18650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:18:32.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:18:33.045 [DEBUG] [Thread-18650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:18:33.045 [DEBUG] [Thread-18650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:18:33.045 [DEBUG] [Thread-18650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:18:33.087 [DEBUG] [Thread-18650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:18:33.087 [DEBUG] [Thread-18650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:18:33.089 [DEBUG] [Thread-18650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:18:33.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:18:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:18:33.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:18:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:18:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:18:33.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:18:33.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:18:33.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:18:33.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:18:33.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.804226 -999.00  +16.80  10.70     71  +11.60 1 1 1 1 1     0    0 3.77 -56.14 ZNESW 8.1 10.7 202.8 19.0 17.7 -21.4 17.6 -20.9 17.4 -19.6 17.7 -20.7
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.804226
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:18:33.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:17:58', tmtdew=5.87, humidity=68.28, cloud=0.0, wind=19.5, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:18:31', seeing=1.52, atlas_timestamp='2025-12-25T19:18:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:17:00')
2025-12-25T21:18:33.107 [DEBUG] [Thread-18650] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:18:33.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-25T21:18:33.193 [DEBUG] [Thread-18653] [transport.py] [_log()] starting thread (client mode): 0xb6baa3e0
2025-12-25T21:18:33.193 [DEBUG] [Thread-18653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:18:33.207 [DEBUG] [Thread-18653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:18:33.208 [INFO] [Thread-18653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] client lang: <none>
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] server lang: <none>
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] kex follows: False
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:18:33.215 [DEBUG] [Thread-18653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:18:33.216 [DEBUG] [Thread-18653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:18:33.216 [DEBUG] [Thread-18653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:18:33.216 [DEBUG] [Thread-18653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:18:33.216 [DEBUG] [Thread-18653] [transport.py] [_log()] Compression: none
2025-12-25T21:18:33.216 [DEBUG] [Thread-18653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:18:33.272 [DEBUG] [Thread-18653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:18:33.272 [DEBUG] [Thread-18653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:18:33.273 [DEBUG] [Thread-18653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:18:33.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:18:33.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:18:33.329 [DEBUG] [Thread-18653] [transport.py] [_log()] userauth is OK
2025-12-25T21:18:33.329 [DEBUG] [Thread-18653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:18:33.329 [DEBUG] [Thread-18653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:18:33.329 [DEBUG] [Thread-18653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:18:33.329 [DEBUG] [Thread-18653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:18:33.350 [INFO] [Thread-18653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:18:33.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-25T21:18:33.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:18:34.224 [DEBUG] [Thread-18653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:18:34.224 [DEBUG] [Thread-18653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:18:34.274 [DEBUG] [Thread-18653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:18:34.274 [DEBUG] [Thread-18653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:18:34.283 [DEBUG] [Thread-18653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:18:34.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:18:34.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-25T21:18:34.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-25T21:18:34.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:18:34.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:18:34.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:18:34.317 [DEBUG] [Thread-18653] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:18:44.926 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:18:44.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:18:45.285 [DEBUG] [Thread-18655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:00.335 [DEBUG] [Thread-18656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:04.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:19:04.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:19:04.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-25T21:19:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 18, 30), 5.85, 68.36, 0.0, 20.49, 16.61, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:19:05.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:18:30
2025-12-25T21:19:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:19:05.370 [DEBUG] [Thread-18657] [transport.py] [_log()] starting thread (client mode): 0xb6ba8b50
2025-12-25T21:19:05.370 [DEBUG] [Thread-18657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:19:05.389 [DEBUG] [Thread-18657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:19:05.389 [INFO] [Thread-18657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] client lang: <none>
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] server lang: <none>
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] kex follows: False
2025-12-25T21:19:05.391 [DEBUG] [Thread-18657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:19:05.392 [DEBUG] [Thread-18657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:19:05.392 [DEBUG] [Thread-18657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:19:05.392 [DEBUG] [Thread-18657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:19:05.392 [DEBUG] [Thread-18657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:19:05.392 [DEBUG] [Thread-18657] [transport.py] [_log()] Compression: none
2025-12-25T21:19:05.392 [DEBUG] [Thread-18657] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:19:05.401 [DEBUG] [Thread-18657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:19:05.402 [DEBUG] [Thread-18657] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:19:05.402 [DEBUG] [Thread-18657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:19:05.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:19:05.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:19:05.404 [DEBUG] [Thread-18657] [transport.py] [_log()] userauth is OK
2025-12-25T21:19:05.404 [DEBUG] [Thread-18657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:19:05.404 [DEBUG] [Thread-18657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:19:05.404 [DEBUG] [Thread-18657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:19:05.404 [DEBUG] [Thread-18657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:19:05.428 [INFO] [Thread-18657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:19:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:19:06.059 [DEBUG] [Thread-18657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:19:06.060 [DEBUG] [Thread-18657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:19:06.061 [DEBUG] [Thread-18657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:19:06.101 [DEBUG] [Thread-18657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:19:06.101 [DEBUG] [Thread-18657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:19:06.105 [DEBUG] [Thread-18657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:19:06.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:19:06.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:19:06.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:19:06.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:19:06.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:19:06.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:19:06.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:19:06.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:19:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:19:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.804573 -999.00  +16.80  11.28     71  +11.60 1 1 1 1 1     0    0 3.72 -56.05 ZNESW 8.8 11.3 209.9 15.2 17.7 -21.4 17.5 -20.9 17.4 -19.6 17.7 -20.5
2025-12-25T21:19:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:19:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:19:06.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.804573
2025-12-25T21:19:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:19:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:19:06.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:19:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:19:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:19:06.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:18:30', tmtdew=5.85, humidity=68.36, cloud=0.0, wind=20.49, temperature=16.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:19:03', seeing=1.53, atlas_timestamp='2025-12-25T19:18:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:17:00')
2025-12-25T21:19:06.132 [DEBUG] [Thread-18657] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:19:06.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:19:06.226 [DEBUG] [Thread-18660] [transport.py] [_log()] starting thread (client mode): 0xb6b63c10
2025-12-25T21:19:06.226 [DEBUG] [Thread-18660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:19:06.241 [DEBUG] [Thread-18660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:19:06.241 [INFO] [Thread-18660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] client lang: <none>
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] server lang: <none>
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] kex follows: False
2025-12-25T21:19:06.249 [DEBUG] [Thread-18660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:19:06.250 [DEBUG] [Thread-18660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:19:06.250 [DEBUG] [Thread-18660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:19:06.250 [DEBUG] [Thread-18660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:19:06.250 [DEBUG] [Thread-18660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:19:06.250 [DEBUG] [Thread-18660] [transport.py] [_log()] Compression: none
2025-12-25T21:19:06.250 [DEBUG] [Thread-18660] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:19:06.310 [DEBUG] [Thread-18660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:19:06.311 [DEBUG] [Thread-18660] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:19:06.311 [DEBUG] [Thread-18660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:19:06.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:19:06.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:19:06.369 [DEBUG] [Thread-18660] [transport.py] [_log()] userauth is OK
2025-12-25T21:19:06.370 [DEBUG] [Thread-18660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:19:06.370 [DEBUG] [Thread-18660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:19:06.370 [DEBUG] [Thread-18660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:19:06.370 [DEBUG] [Thread-18660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:19:06.394 [INFO] [Thread-18660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:19:06.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-25T21:19:06.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:19:07.270 [DEBUG] [Thread-18660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:19:07.270 [DEBUG] [Thread-18660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:19:07.318 [DEBUG] [Thread-18660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:19:07.318 [DEBUG] [Thread-18660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:19:07.328 [DEBUG] [Thread-18660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:19:07.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:19:07.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-25T21:19:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:19:07.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:19:07.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:19:07.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:19:07.365 [DEBUG] [Thread-18660] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:19:15.371 [DEBUG] [Thread-18662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:27.060 [DEBUG] [Thread-18663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:30.428 [DEBUG] [Thread-18664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:19:37.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:19:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:19:38.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 19, 34), 5.72, 68.48, 0.0, 18.9, 16.51, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:19:38.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:19:34
2025-12-25T21:19:38.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:19:38.356 [DEBUG] [Thread-18665] [transport.py] [_log()] starting thread (client mode): 0xb6bf6ad0
2025-12-25T21:19:38.356 [DEBUG] [Thread-18665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:19:38.378 [DEBUG] [Thread-18665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:19:38.378 [INFO] [Thread-18665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:19:38.381 [DEBUG] [Thread-18665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] client lang: <none>
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] server lang: <none>
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] kex follows: False
2025-12-25T21:19:38.382 [DEBUG] [Thread-18665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:19:38.383 [DEBUG] [Thread-18665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:19:38.383 [DEBUG] [Thread-18665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:19:38.383 [DEBUG] [Thread-18665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:19:38.383 [DEBUG] [Thread-18665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:19:38.383 [DEBUG] [Thread-18665] [transport.py] [_log()] Compression: none
2025-12-25T21:19:38.383 [DEBUG] [Thread-18665] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:19:38.402 [DEBUG] [Thread-18665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:19:38.402 [DEBUG] [Thread-18665] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:19:38.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:19:38.403 [DEBUG] [Thread-18665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:19:38.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:19:38.406 [DEBUG] [Thread-18665] [transport.py] [_log()] userauth is OK
2025-12-25T21:19:38.406 [DEBUG] [Thread-18665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:19:38.406 [DEBUG] [Thread-18665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:19:38.406 [DEBUG] [Thread-18665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:19:38.406 [DEBUG] [Thread-18665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:19:38.443 [INFO] [Thread-18665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:19:38.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:19:39.073 [DEBUG] [Thread-18665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:19:39.073 [DEBUG] [Thread-18665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:19:39.073 [DEBUG] [Thread-18665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:19:39.114 [DEBUG] [Thread-18665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:19:39.114 [DEBUG] [Thread-18665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:19:39.118 [DEBUG] [Thread-18665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:19:39.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:19:39.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:19:39.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:19:39.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:19:39.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:19:39.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:19:39.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:19:39.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:19:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:19:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.804920 -999.00  +16.80  12.74     71  +11.60 1 1 1 1 1     0    0 4.01 -51.59 ZNESW 12.7 12.7 210.1 17.4 17.7 -21.3 17.6 -20.8 17.4 -19.7 17.6 -20.5
2025-12-25T21:19:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:19:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:19:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.804920
2025-12-25T21:19:39.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:19:39.140 [DEBUG] [Thread-18665] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:19:39.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:19:39.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:19:34', tmtdew=5.72, humidity=68.48, cloud=0.0, wind=18.9, 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-25T21:19:35', seeing=1.41, atlas_timestamp='2025-12-25T19:19:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:17:00')
2025-12-25T21:19:39.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-25T21:19:39.240 [DEBUG] [Thread-18668] [transport.py] [_log()] starting thread (client mode): 0xb6b758a0
2025-12-25T21:19:39.240 [DEBUG] [Thread-18668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:19:39.255 [DEBUG] [Thread-18668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:19:39.255 [INFO] [Thread-18668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:19:39.263 [DEBUG] [Thread-18668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:19:39.263 [DEBUG] [Thread-18668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:19:39.263 [DEBUG] [Thread-18668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] client lang: <none>
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] server lang: <none>
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] kex follows: False
2025-12-25T21:19:39.264 [DEBUG] [Thread-18668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:19:39.265 [DEBUG] [Thread-18668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:19:39.265 [DEBUG] [Thread-18668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:19:39.265 [DEBUG] [Thread-18668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:19:39.265 [DEBUG] [Thread-18668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:19:39.265 [DEBUG] [Thread-18668] [transport.py] [_log()] Compression: none
2025-12-25T21:19:39.265 [DEBUG] [Thread-18668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:19:39.321 [DEBUG] [Thread-18668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:19:39.322 [DEBUG] [Thread-18668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:19:39.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:19:39.323 [DEBUG] [Thread-18668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:19:39.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:19:39.379 [DEBUG] [Thread-18668] [transport.py] [_log()] userauth is OK
2025-12-25T21:19:39.379 [DEBUG] [Thread-18668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:19:39.379 [DEBUG] [Thread-18668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:19:39.379 [DEBUG] [Thread-18668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:19:39.379 [DEBUG] [Thread-18668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:19:39.403 [INFO] [Thread-18668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:19:39.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-25T21:19:39.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:19:40.262 [DEBUG] [Thread-18668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:19:40.263 [DEBUG] [Thread-18668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:19:40.314 [DEBUG] [Thread-18668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:19:40.314 [DEBUG] [Thread-18668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:19:40.325 [DEBUG] [Thread-18668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:19:40.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:19:40.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-25T21:19:40.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-25T21:19:40.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:19:40.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:19:40.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:19:40.356 [DEBUG] [Thread-18668] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:19:45.128 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:45.129 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:19:45.464 [DEBUG] [Thread-18670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:00.509 [DEBUG] [Thread-18671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:20:10.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:20:10.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-25T21:20:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 20, 6), 5.72, 68.48, 0.0, 19.18, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:20:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:20:06
2025-12-25T21:20:11.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:20:11.362 [DEBUG] [Thread-18672] [transport.py] [_log()] starting thread (client mode): 0xb6b02140
2025-12-25T21:20:11.362 [DEBUG] [Thread-18672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:20:11.382 [DEBUG] [Thread-18672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:20:11.382 [INFO] [Thread-18672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] client lang: <none>
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] server lang: <none>
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] kex follows: False
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] Compression: none
2025-12-25T21:20:11.385 [DEBUG] [Thread-18672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:20:11.401 [DEBUG] [Thread-18672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:20:11.402 [DEBUG] [Thread-18672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:20:11.402 [DEBUG] [Thread-18672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:20:11.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:20:11.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:20:11.404 [DEBUG] [Thread-18672] [transport.py] [_log()] userauth is OK
2025-12-25T21:20:11.405 [DEBUG] [Thread-18672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:20:11.405 [DEBUG] [Thread-18672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:20:11.405 [DEBUG] [Thread-18672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:20:11.405 [DEBUG] [Thread-18672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:20:11.431 [INFO] [Thread-18672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:20:11.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:20:12.124 [DEBUG] [Thread-18672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:20:12.124 [DEBUG] [Thread-18672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:20:12.125 [DEBUG] [Thread-18672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:20:12.165 [DEBUG] [Thread-18672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:20:12.165 [DEBUG] [Thread-18672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:20:12.169 [DEBUG] [Thread-18672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:20:12.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:20:12.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:20:12.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:20:12.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:20:12.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:20:12.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:20:12.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:20:12.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:20:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:20:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.805267 -999.00  +16.70  14.01     71  +11.50 1 1 1 1 1     0    0 4.03 -47.32 ZNESW 12.0 14.0 212.2 21.2 17.7 -21.2 17.6 -20.7 17.4 -19.5 17.6 -20.4
2025-12-25T21:20:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:20:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:20:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.805267
2025-12-25T21:20:12.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:20:12.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:20:12.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:20:12.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:20:12.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:20:12.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:20:06', tmtdew=5.72, humidity=68.48, cloud=0.0, wind=19.18, 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-25T21:20:07', seeing=1.41, atlas_timestamp='2025-12-25T19:19:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:17:00')
2025-12-25T21:20:12.193 [DEBUG] [Thread-18672] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:20:12.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-25T21:20:12.286 [DEBUG] [Thread-18675] [transport.py] [_log()] starting thread (client mode): 0xb6b76e60
2025-12-25T21:20:12.287 [DEBUG] [Thread-18675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:20:12.302 [DEBUG] [Thread-18675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:20:12.302 [INFO] [Thread-18675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:20:12.310 [DEBUG] [Thread-18675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:20:12.310 [DEBUG] [Thread-18675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] client lang: <none>
2025-12-25T21:20:12.311 [DEBUG] [Thread-18675] [transport.py] [_log()] server lang: <none>
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] kex follows: False
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:20:12.312 [DEBUG] [Thread-18675] [transport.py] [_log()] Compression: none
2025-12-25T21:20:12.313 [DEBUG] [Thread-18675] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:20:12.370 [DEBUG] [Thread-18675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:20:12.370 [DEBUG] [Thread-18675] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:20:12.371 [DEBUG] [Thread-18675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:20:12.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:20:12.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:20:12.425 [DEBUG] [Thread-18675] [transport.py] [_log()] userauth is OK
2025-12-25T21:20:12.425 [DEBUG] [Thread-18675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:20:12.426 [DEBUG] [Thread-18675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:20:12.426 [DEBUG] [Thread-18675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:20:12.426 [DEBUG] [Thread-18675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:20:12.450 [INFO] [Thread-18675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:20:12.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-25T21:20:12.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:20:13.302 [DEBUG] [Thread-18675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:20:13.302 [DEBUG] [Thread-18675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:20:13.350 [DEBUG] [Thread-18675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:20:13.350 [DEBUG] [Thread-18675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:20:13.361 [DEBUG] [Thread-18675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:20:13.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:20:13.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-25T21:20:13.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-25T21:20:13.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:20:13.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:20:13.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:20:13.397 [DEBUG] [Thread-18675] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:20:15.539 [DEBUG] [Thread-18677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:27.119 [DEBUG] [Thread-18678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:30.590 [DEBUG] [Thread-18679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:20:43.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:20:43.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-25T21:20:44.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 20, 38), 5.71, 69.01, 0.0, 22.6, 16.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:20:44.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:20:38
2025-12-25T21:20:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:20:44.401 [DEBUG] [Thread-18680] [transport.py] [_log()] starting thread (client mode): 0xb6b63070
2025-12-25T21:20:44.401 [DEBUG] [Thread-18680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:20:44.421 [DEBUG] [Thread-18680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:20:44.421 [INFO] [Thread-18680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:20:44.425 [DEBUG] [Thread-18680] [transport.py] [_log()] client lang: <none>
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] server lang: <none>
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] kex follows: False
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] Compression: none
2025-12-25T21:20:44.426 [DEBUG] [Thread-18680] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:20:44.444 [DEBUG] [Thread-18680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:20:44.444 [DEBUG] [Thread-18680] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:20:44.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:20:44.445 [DEBUG] [Thread-18680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:20:44.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:20:44.447 [DEBUG] [Thread-18680] [transport.py] [_log()] userauth is OK
2025-12-25T21:20:44.447 [DEBUG] [Thread-18680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:20:44.447 [DEBUG] [Thread-18680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:20:44.448 [DEBUG] [Thread-18680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:20:44.448 [DEBUG] [Thread-18680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:20:44.466 [INFO] [Thread-18680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:20:44.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:20:45.103 [DEBUG] [Thread-18680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:20:45.103 [DEBUG] [Thread-18680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:20:45.103 [DEBUG] [Thread-18680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:20:45.144 [DEBUG] [Thread-18680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:20:45.144 [DEBUG] [Thread-18680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:20:45.148 [DEBUG] [Thread-18680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:20:45.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:20:45.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:20:45.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:20:45.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:20:45.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:20:45.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:20:45.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:20:45.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:20:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:20:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.805615 -999.00  +16.70  10.59     71  +11.60 1 1 1 1 1     0    0 4.10 -45.59 ZNESW 11.8 10.6 213.8 25.6 17.7 -21.2 17.6 -20.7 17.4 -19.5 17.6 -20.4
2025-12-25T21:20:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:20:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:20:45.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.805615
2025-12-25T21:20:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:20:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:20:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:20:45.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:20:45.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:20:38', tmtdew=5.71, humidity=69.01, cloud=0.0, wind=22.6, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:20:39', seeing=1.34, atlas_timestamp='2025-12-25T19:20:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:17:00')
2025-12-25T21:20:45.175 [DEBUG] [Thread-18680] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:20:45.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-25T21:20:45.274 [DEBUG] [Thread-18683] [transport.py] [_log()] starting thread (client mode): 0xb6b7fb80
2025-12-25T21:20:45.274 [DEBUG] [Thread-18683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:20:45.294 [DEBUG] [Thread-18683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:20:45.294 [INFO] [Thread-18683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:20:45.303 [DEBUG] [Thread-18683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:20:45.303 [DEBUG] [Thread-18683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:20:45.303 [DEBUG] [Thread-18683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] client lang: <none>
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] server lang: <none>
2025-12-25T21:20:45.304 [DEBUG] [Thread-18683] [transport.py] [_log()] kex follows: False
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] Compression: none
2025-12-25T21:20:45.305 [DEBUG] [Thread-18683] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:20:45.331 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:45.332 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:45.366 [DEBUG] [Thread-18683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:20:45.366 [DEBUG] [Thread-18683] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:20:45.367 [DEBUG] [Thread-18683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:20:45.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:20:45.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:20:45.425 [DEBUG] [Thread-18683] [transport.py] [_log()] userauth is OK
2025-12-25T21:20:45.425 [DEBUG] [Thread-18683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:20:45.425 [DEBUG] [Thread-18683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:20:45.425 [DEBUG] [Thread-18683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:20:45.425 [DEBUG] [Thread-18683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:20:45.439 [INFO] [Thread-18683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:20:45.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-25T21:20:45.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:20:45.624 [DEBUG] [Thread-18685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:20:46.320 [DEBUG] [Thread-18683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:20:46.321 [DEBUG] [Thread-18683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:20:46.369 [DEBUG] [Thread-18683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:20:46.369 [DEBUG] [Thread-18683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:20:46.379 [DEBUG] [Thread-18683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:20:46.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:20:46.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-25T21:20:46.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-25T21:20:46.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:20:46.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:20:46.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:20:46.415 [DEBUG] [Thread-18683] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:21:00.677 [DEBUG] [Thread-18686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:15.708 [DEBUG] [Thread-18687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:16.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:21:16.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:21:16.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:21:17.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 21, 10), 5.71, 69.03, 0.0, 21.91, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:21:17.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:21:10
2025-12-25T21:21:17.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:21:17.441 [DEBUG] [Thread-18688] [transport.py] [_log()] starting thread (client mode): 0xb6ba91b0
2025-12-25T21:21:17.441 [DEBUG] [Thread-18688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:21:17.462 [DEBUG] [Thread-18688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:21:17.462 [INFO] [Thread-18688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:21:17.465 [DEBUG] [Thread-18688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:21:17.465 [DEBUG] [Thread-18688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:21:17.465 [DEBUG] [Thread-18688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:21:17.465 [DEBUG] [Thread-18688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:17.465 [DEBUG] [Thread-18688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:17.465 [DEBUG] [Thread-18688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] client lang: <none>
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] server lang: <none>
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] kex follows: False
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] Compression: none
2025-12-25T21:21:17.466 [DEBUG] [Thread-18688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:21:17.483 [DEBUG] [Thread-18688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:21:17.484 [DEBUG] [Thread-18688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:21:17.484 [DEBUG] [Thread-18688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:21:17.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:21:17.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:21:17.485 [DEBUG] [Thread-18688] [transport.py] [_log()] userauth is OK
2025-12-25T21:21:17.485 [DEBUG] [Thread-18688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:21:17.485 [DEBUG] [Thread-18688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:21:17.485 [DEBUG] [Thread-18688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:21:17.485 [DEBUG] [Thread-18688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:21:17.500 [INFO] [Thread-18688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:21:17.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:21:18.160 [DEBUG] [Thread-18688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:21:18.160 [DEBUG] [Thread-18688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:21:18.160 [DEBUG] [Thread-18688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:21:18.200 [DEBUG] [Thread-18688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:21:18.201 [DEBUG] [Thread-18688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:21:18.203 [DEBUG] [Thread-18688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:21:18.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:21:18.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:21:18.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:21:18.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:21:18.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:21:18.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:21:18.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:21:18.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:21:18.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.805962 -999.00  +16.70  17.23     71  +11.50 1 1 1 1 1     0    0 4.15 -43.73 ZNESW 18.3 17.2 192.4 21.4 17.6 -21.1 17.5 -20.7 17.4 -19.5 17.6 -20.3
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.805962
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:21:10', tmtdew=5.71, humidity=69.03, cloud=0.0, wind=21.91, 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-25T21:21:11', seeing=1.48, atlas_timestamp='2025-12-25T19:20:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08425000000000082, 0.11025000000000063, 0.19125000000000014, 0.12849999999999895, 0.07949999999999946, 0.08825000000000038, 0.1479999999999997, 0.14425000000000132, 0.14149999999999885, 0.11100000000000065, 0.17324999999999946, 0.041999999999999815, 0.1120000000000001, 0.09924999999999962, 0.1399999999999988, 0.12199999999999989, 0.13374999999999915, 0.18950000000000067, 0.14100000000000001, 0.14424999999999955, 0.1294999999999984, 0.12324999999999875, 0.12424999999999997, 0.10125000000000028, 0.12649999999999828, 0.12650000000000006, 0.2397500000000008, 0.2215000000000007, 0.2450000000000001, 0.2740000000000009, 0.1855000000000011, 0.18900000000000006, 0.1507499999999986], zp_timestamp='2025-12-25T19:17:00')
2025-12-25T21:21:18.224 [DEBUG] [Thread-18688] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:21:18.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-25T21:21:18.308 [DEBUG] [Thread-18691] [transport.py] [_log()] starting thread (client mode): 0xb6b03250
2025-12-25T21:21:18.308 [DEBUG] [Thread-18691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:21:18.323 [DEBUG] [Thread-18691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:21:18.323 [INFO] [Thread-18691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] client lang: <none>
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] server lang: <none>
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] kex follows: False
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] Compression: none
2025-12-25T21:21:18.331 [DEBUG] [Thread-18691] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:21:18.388 [DEBUG] [Thread-18691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:21:18.388 [DEBUG] [Thread-18691] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:21:18.389 [DEBUG] [Thread-18691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:21:18.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:21:18.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:21:18.446 [DEBUG] [Thread-18691] [transport.py] [_log()] userauth is OK
2025-12-25T21:21:18.446 [DEBUG] [Thread-18691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:21:18.446 [DEBUG] [Thread-18691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:21:18.446 [DEBUG] [Thread-18691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:21:18.446 [DEBUG] [Thread-18691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:21:18.460 [INFO] [Thread-18691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:21:18.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:21:18.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:21:19.295 [DEBUG] [Thread-18691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:21:19.295 [DEBUG] [Thread-18691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:21:19.343 [DEBUG] [Thread-18691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:21:19.343 [DEBUG] [Thread-18691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:21:19.352 [DEBUG] [Thread-18691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:21:19.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:21:19.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-25T21:21:19.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-25T21:21:19.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:21:19.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:21:19.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:21:19.384 [DEBUG] [Thread-18691] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:21:27.175 [DEBUG] [Thread-18693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:30.739 [DEBUG] [Thread-18694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:45.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:45.535 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:45.797 [DEBUG] [Thread-18695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:21:49.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:21:49.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:21:49.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-25T21:21:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 21, 42), 5.77, 68.98, 0.0, 16.9, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:21:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:21:42
2025-12-25T21:21:50.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:21:50.380 [DEBUG] [Thread-18696] [transport.py] [_log()] starting thread (client mode): 0xb6bc3130
2025-12-25T21:21:50.380 [DEBUG] [Thread-18696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:21:50.400 [DEBUG] [Thread-18696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:21:50.400 [INFO] [Thread-18696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] client lang: <none>
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] server lang: <none>
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] kex follows: False
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] Compression: none
2025-12-25T21:21:50.404 [DEBUG] [Thread-18696] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:21:50.423 [DEBUG] [Thread-18696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:21:50.423 [DEBUG] [Thread-18696] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:21:50.424 [DEBUG] [Thread-18696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:21:50.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:21:50.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:21:50.425 [DEBUG] [Thread-18696] [transport.py] [_log()] userauth is OK
2025-12-25T21:21:50.425 [DEBUG] [Thread-18696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:21:50.426 [DEBUG] [Thread-18696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:21:50.426 [DEBUG] [Thread-18696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:21:50.426 [DEBUG] [Thread-18696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:21:50.447 [INFO] [Thread-18696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:21:50.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:21:51.072 [DEBUG] [Thread-18696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:21:51.072 [DEBUG] [Thread-18696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:21:51.072 [DEBUG] [Thread-18696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:21:51.113 [DEBUG] [Thread-18696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:21:51.113 [DEBUG] [Thread-18696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:21:51.115 [DEBUG] [Thread-18696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:21:51.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:21:51.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:21:51.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:21:51.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:21:51.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:21:51.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:21:51.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.806656 -999.00  +16.70  13.15     71  +11.50 1 1 1 1 1     0    0 4.01 -43.90 ZNESW 19.8 13.2 217.5 27.8 17.6 -21.2 17.5 -20.7 17.3 -19.5 17.6 -20.3
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.806656
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:21:51.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:21:42', tmtdew=5.77, humidity=68.98, cloud=0.0, wind=16.9, 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-25T21:21:43', seeing=1.47, atlas_timestamp='2025-12-25T19:21:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:20:00')
2025-12-25T21:21:51.137 [DEBUG] [Thread-18696] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:21:51.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-25T21:21:51.217 [DEBUG] [Thread-18699] [transport.py] [_log()] starting thread (client mode): 0xb6b22e30
2025-12-25T21:21:51.217 [DEBUG] [Thread-18699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:21:51.231 [DEBUG] [Thread-18699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:21:51.232 [INFO] [Thread-18699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:21:51.239 [DEBUG] [Thread-18699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:21:51.239 [DEBUG] [Thread-18699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:21:51.239 [DEBUG] [Thread-18699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:21:51.239 [DEBUG] [Thread-18699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:51.239 [DEBUG] [Thread-18699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] client lang: <none>
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] server lang: <none>
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] kex follows: False
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] Compression: none
2025-12-25T21:21:51.240 [DEBUG] [Thread-18699] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:21:51.301 [DEBUG] [Thread-18699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:21:51.301 [DEBUG] [Thread-18699] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:21:51.302 [DEBUG] [Thread-18699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:21:51.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:21:51.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:21:51.358 [DEBUG] [Thread-18699] [transport.py] [_log()] userauth is OK
2025-12-25T21:21:51.358 [DEBUG] [Thread-18699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:21:51.358 [DEBUG] [Thread-18699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:21:51.358 [DEBUG] [Thread-18699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:21:51.358 [DEBUG] [Thread-18699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:21:51.377 [INFO] [Thread-18699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:21:51.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-25T21:21:51.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:21:52.152 [DEBUG] [Thread-18699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:21:52.152 [DEBUG] [Thread-18699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:21:52.201 [DEBUG] [Thread-18699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:21:52.201 [DEBUG] [Thread-18699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:21:52.210 [DEBUG] [Thread-18699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:21:52.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:21:52.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-25T21:21:52.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:21:52.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:21:52.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:21:52.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:21:52.243 [DEBUG] [Thread-18699] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:22:00.831 [DEBUG] [Thread-18701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:06.664 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:15.884 [DEBUG] [Thread-18702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:15.951 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:20.046 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:22.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:22:22.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:22:22.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-25T21:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 22, 15), 5.78, 68.91, 0.0, 17.82, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:22:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:22:15
2025-12-25T21:22:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:22:23.226 [DEBUG] [Thread-18703] [transport.py] [_log()] starting thread (client mode): 0xb6b77550
2025-12-25T21:22:23.226 [DEBUG] [Thread-18703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:22:23.246 [DEBUG] [Thread-18703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:22:23.247 [INFO] [Thread-18703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:22:23.250 [DEBUG] [Thread-18703] [transport.py] [_log()] client lang: <none>
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] server lang: <none>
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] kex follows: False
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] Compression: none
2025-12-25T21:22:23.251 [DEBUG] [Thread-18703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:22:23.272 [DEBUG] [Thread-18703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:22:23.272 [DEBUG] [Thread-18703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:22:23.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:22:23.273 [DEBUG] [Thread-18703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:22:23.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:22:23.275 [DEBUG] [Thread-18703] [transport.py] [_log()] userauth is OK
2025-12-25T21:22:23.276 [DEBUG] [Thread-18703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:22:23.276 [DEBUG] [Thread-18703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:22:23.276 [DEBUG] [Thread-18703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:22:23.276 [DEBUG] [Thread-18703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:22:23.300 [INFO] [Thread-18703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:22:23.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:22:23.982 [DEBUG] [Thread-18703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:22:23.983 [DEBUG] [Thread-18703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:22:23.983 [DEBUG] [Thread-18703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:22:24.024 [DEBUG] [Thread-18703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:22:24.024 [DEBUG] [Thread-18703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:22:24.027 [DEBUG] [Thread-18703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:22:24.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:22:24.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:22:24.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:22:24.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:22:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:22:24.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:22:24.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:22:24.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.807003 -999.00  +16.60  16.44     72  +11.50 1 1 1 1 1     0    0 4.08 -44.07 ZNESW 9.1 16.4 207.1 25.2 17.6 -21.2 17.5 -20.6 17.3 -19.5 17.6 -20.5
2025-12-25T21:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.807003
2025-12-25T21:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:22:24.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:22:15', tmtdew=5.78, humidity=68.91, cloud=0.0, wind=17.82, 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-25T21:22:15', seeing=1.27, atlas_timestamp='2025-12-25T19:22:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:20:00')
2025-12-25T21:22:24.054 [DEBUG] [Thread-18703] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:22:24.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-25T21:22:24.147 [DEBUG] [Thread-18706] [transport.py] [_log()] starting thread (client mode): 0xb6bc3610
2025-12-25T21:22:24.147 [DEBUG] [Thread-18706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:22:24.161 [DEBUG] [Thread-18706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:22:24.162 [INFO] [Thread-18706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:22:24.169 [DEBUG] [Thread-18706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] client lang: <none>
2025-12-25T21:22:24.170 [DEBUG] [Thread-18706] [transport.py] [_log()] server lang: <none>
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] kex follows: False
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] Compression: none
2025-12-25T21:22:24.171 [DEBUG] [Thread-18706] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:22:24.227 [DEBUG] [Thread-18706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:22:24.228 [DEBUG] [Thread-18706] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:22:24.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:22:24.229 [DEBUG] [Thread-18706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:22:24.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:22:24.286 [DEBUG] [Thread-18706] [transport.py] [_log()] userauth is OK
2025-12-25T21:22:24.286 [DEBUG] [Thread-18706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:22:24.287 [DEBUG] [Thread-18706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:22:24.287 [DEBUG] [Thread-18706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:22:24.287 [DEBUG] [Thread-18706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:22:24.307 [INFO] [Thread-18706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:22:24.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-25T21:22:24.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:22:25.175 [DEBUG] [Thread-18706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:22:25.176 [DEBUG] [Thread-18706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:22:25.224 [DEBUG] [Thread-18706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:22:25.224 [DEBUG] [Thread-18706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:22:25.233 [DEBUG] [Thread-18706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:22:25.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:22:25.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-25T21:22:25.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-25T21:22:25.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:22:25.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:22:25.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:22:25.269 [DEBUG] [Thread-18706] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:22:27.270 [DEBUG] [Thread-18708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:30.916 [DEBUG] [Thread-18709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:45.739 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:45.740 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:45.973 [DEBUG] [Thread-18710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:22:55.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:22:55.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:22:55.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-25T21:22:55.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 22, 47), 5.7, 69.06, 0.0, 23.04, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:22:55.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:22:47
2025-12-25T21:22:56.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:22:56.253 [DEBUG] [Thread-18711] [transport.py] [_log()] starting thread (client mode): 0xb95581c0
2025-12-25T21:22:56.253 [DEBUG] [Thread-18711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:22:56.278 [DEBUG] [Thread-18711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:22:56.278 [INFO] [Thread-18711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] client lang: <none>
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] server lang: <none>
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] kex follows: False
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:22:56.282 [DEBUG] [Thread-18711] [transport.py] [_log()] Compression: none
2025-12-25T21:22:56.283 [DEBUG] [Thread-18711] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:22:56.300 [DEBUG] [Thread-18711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:22:56.300 [DEBUG] [Thread-18711] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:22:56.301 [DEBUG] [Thread-18711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:22:56.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:22:56.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:22:56.303 [DEBUG] [Thread-18711] [transport.py] [_log()] userauth is OK
2025-12-25T21:22:56.303 [DEBUG] [Thread-18711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:22:56.303 [DEBUG] [Thread-18711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:22:56.303 [DEBUG] [Thread-18711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:22:56.303 [DEBUG] [Thread-18711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:22:56.328 [INFO] [Thread-18711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:22:56.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:22:56.985 [DEBUG] [Thread-18711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:22:56.985 [DEBUG] [Thread-18711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:22:56.986 [DEBUG] [Thread-18711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:22:57.026 [DEBUG] [Thread-18711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:22:57.027 [DEBUG] [Thread-18711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:22:57.030 [DEBUG] [Thread-18711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:22:57.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:22:57.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:22:57.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:22:57.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:22:57.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:22:57.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:22:57.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:22:57.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:22:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:22:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.807351 -999.00  +16.60  14.36     72  +11.50 1 1 1 1 1     0    0 3.93 -44.77 ZNESW 14.9 14.4 197.8 24.0 17.6 -21.2 17.4 -20.6 17.3 -19.3 17.6 -20.3
2025-12-25T21:22:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:22:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:22:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.807351
2025-12-25T21:22:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:22:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:22:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:22:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:22:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:22:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:22:47', tmtdew=5.7, humidity=69.06, cloud=0.0, wind=23.04, 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-25T21:22:47', seeing=1.53, atlas_timestamp='2025-12-25T19:22:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:20:00')
2025-12-25T21:22:57.058 [DEBUG] [Thread-18711] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:22:57.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-25T21:22:57.155 [DEBUG] [Thread-18714] [transport.py] [_log()] starting thread (client mode): 0xb6b03b50
2025-12-25T21:22:57.155 [DEBUG] [Thread-18714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:22:57.173 [DEBUG] [Thread-18714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:22:57.173 [INFO] [Thread-18714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:22:57.185 [DEBUG] [Thread-18714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:22:57.185 [DEBUG] [Thread-18714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] client lang: <none>
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] server lang: <none>
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] kex follows: False
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:22:57.186 [DEBUG] [Thread-18714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:22:57.187 [DEBUG] [Thread-18714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:22:57.187 [DEBUG] [Thread-18714] [transport.py] [_log()] Compression: none
2025-12-25T21:22:57.187 [DEBUG] [Thread-18714] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:22:57.242 [DEBUG] [Thread-18714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:22:57.242 [DEBUG] [Thread-18714] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:22:57.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:22:57.244 [DEBUG] [Thread-18714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:22:57.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:22:57.303 [DEBUG] [Thread-18714] [transport.py] [_log()] userauth is OK
2025-12-25T21:22:57.303 [DEBUG] [Thread-18714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:22:57.303 [DEBUG] [Thread-18714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:22:57.304 [DEBUG] [Thread-18714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:22:57.304 [DEBUG] [Thread-18714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:22:57.324 [INFO] [Thread-18714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:22:57.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-25T21:22:57.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:22:58.178 [DEBUG] [Thread-18714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:22:58.179 [DEBUG] [Thread-18714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:22:58.227 [DEBUG] [Thread-18714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:22:58.227 [DEBUG] [Thread-18714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:22:58.236 [DEBUG] [Thread-18714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:22:58.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:22:58.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-25T21:22:58.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-25T21:22:58.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:22:58.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:22:58.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:22:58.274 [DEBUG] [Thread-18714] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:23:01.007 [DEBUG] [Thread-18716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:23:16.051 [DEBUG] [Thread-18717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:23:27.327 [DEBUG] [Thread-18718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:23:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:23:28.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:23:28.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-25T21:23:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 23, 19), 5.69, 69.09, 0.0, 23.61, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:23:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:23:19
2025-12-25T21:23:29.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:23:29.263 [DEBUG] [Thread-18719] [transport.py] [_log()] starting thread (client mode): 0xb6bf5840
2025-12-25T21:23:29.263 [DEBUG] [Thread-18719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:23:29.284 [DEBUG] [Thread-18719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:23:29.284 [INFO] [Thread-18719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] client lang: <none>
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] server lang: <none>
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] kex follows: False
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] Compression: none
2025-12-25T21:23:29.285 [DEBUG] [Thread-18719] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:23:29.293 [DEBUG] [Thread-18719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:23:29.294 [DEBUG] [Thread-18719] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:23:29.294 [DEBUG] [Thread-18719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:23:29.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:23:29.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:23:29.296 [DEBUG] [Thread-18719] [transport.py] [_log()] userauth is OK
2025-12-25T21:23:29.296 [DEBUG] [Thread-18719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:23:29.296 [DEBUG] [Thread-18719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:23:29.296 [DEBUG] [Thread-18719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:23:29.296 [DEBUG] [Thread-18719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:23:29.313 [INFO] [Thread-18719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:23:29.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:23:29.922 [DEBUG] [Thread-18719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:23:29.922 [DEBUG] [Thread-18719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:23:29.923 [DEBUG] [Thread-18719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:23:29.963 [DEBUG] [Thread-18719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:23:29.963 [DEBUG] [Thread-18719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:23:29.965 [DEBUG] [Thread-18719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:23:29.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:23:29.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:23:29.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:23:29.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:23:29.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:23:29.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:23:29.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:23:29.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:23:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:23:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.807698 -999.00  +16.60  11.72     72  +11.50 1 1 1 1 1     0    0 4.08 -40.20 ZNESW 17.7 11.7 213.0 23.4 17.6 -21.1 17.4 -20.7 17.2 -19.4 17.6 -20.2
2025-12-25T21:23:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:23:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:23:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.807698
2025-12-25T21:23:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:23:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:23:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:23:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:23:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:23:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:23:19', tmtdew=5.69, humidity=69.09, cloud=0.0, wind=23.61, 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-25T21:23:19', seeing=1.53, atlas_timestamp='2025-12-25T19:23:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:20:00')
2025-12-25T21:23:29.986 [DEBUG] [Thread-18719] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:23:30.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-25T21:23:30.080 [DEBUG] [Thread-18722] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T21:23:30.080 [DEBUG] [Thread-18722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:23:30.095 [DEBUG] [Thread-18722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:23:30.095 [INFO] [Thread-18722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] client lang: <none>
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] server lang: <none>
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] kex follows: False
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:23:30.103 [DEBUG] [Thread-18722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:23:30.104 [DEBUG] [Thread-18722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:23:30.104 [DEBUG] [Thread-18722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:23:30.104 [DEBUG] [Thread-18722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:23:30.104 [DEBUG] [Thread-18722] [transport.py] [_log()] Compression: none
2025-12-25T21:23:30.104 [DEBUG] [Thread-18722] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:23:30.168 [DEBUG] [Thread-18722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:23:30.168 [DEBUG] [Thread-18722] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:23:30.169 [DEBUG] [Thread-18722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:23:30.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:23:30.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:23:30.228 [DEBUG] [Thread-18722] [transport.py] [_log()] userauth is OK
2025-12-25T21:23:30.228 [DEBUG] [Thread-18722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:23:30.228 [DEBUG] [Thread-18722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:23:30.229 [DEBUG] [Thread-18722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:23:30.229 [DEBUG] [Thread-18722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:23:30.249 [INFO] [Thread-18722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:23:30.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-25T21:23:30.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:23:31.081 [DEBUG] [Thread-18724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:23:31.169 [DEBUG] [Thread-18722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:23:31.170 [DEBUG] [Thread-18722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:23:31.218 [DEBUG] [Thread-18722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:23:31.218 [DEBUG] [Thread-18722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:23:31.227 [DEBUG] [Thread-18722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:23:31.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:23:31.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-25T21:23:31.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:23:31.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:23:31.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:23:31.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:23:31.264 [DEBUG] [Thread-18722] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:23:45.944 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:23:45.945 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:23:46.130 [DEBUG] [Thread-18725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:01.163 [DEBUG] [Thread-18726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:24:01.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:24:01.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-25T21:24:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 23, 51), 5.69, 69.09, 0.0, 16.46, 16.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:24:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:23:51
2025-12-25T21:24:02.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:24:02.271 [DEBUG] [Thread-18727] [transport.py] [_log()] starting thread (client mode): 0xb9559930
2025-12-25T21:24:02.271 [DEBUG] [Thread-18727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:24:02.291 [DEBUG] [Thread-18727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:24:02.292 [INFO] [Thread-18727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] client lang: <none>
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] server lang: <none>
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] kex follows: False
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] Compression: none
2025-12-25T21:24:02.294 [DEBUG] [Thread-18727] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:24:02.302 [DEBUG] [Thread-18727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:24:02.303 [DEBUG] [Thread-18727] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:24:02.303 [DEBUG] [Thread-18727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:24:02.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:24:02.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:24:02.305 [DEBUG] [Thread-18727] [transport.py] [_log()] userauth is OK
2025-12-25T21:24:02.305 [DEBUG] [Thread-18727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:24:02.305 [DEBUG] [Thread-18727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:24:02.305 [DEBUG] [Thread-18727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:24:02.305 [DEBUG] [Thread-18727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:24:02.323 [INFO] [Thread-18727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:24:02.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:24:02.899 [DEBUG] [Thread-18727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:24:02.899 [DEBUG] [Thread-18727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:24:02.900 [DEBUG] [Thread-18727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:24:02.940 [DEBUG] [Thread-18727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:24:02.940 [DEBUG] [Thread-18727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:24:02.943 [DEBUG] [Thread-18727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:24:02.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:24:02.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:24:02.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:24:02.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:24:02.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:24:02.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:24:02.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:24:02.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:24:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.808045 -999.00  +16.60   7.58     72  +11.60 1 1 1 1 1     0    0 4.20 -40.25 ZNESW 10.4 7.6 211.1 25.0 17.5 -21.0 17.4 -20.7 17.2 -19.4 17.5 -20.2
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.808045
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:24:02.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:24:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:24:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:24:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:23:51', tmtdew=5.69, humidity=69.09, cloud=0.0, wind=16.46, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:23:51', seeing=1.59, atlas_timestamp='2025-12-25T19:23:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:20:00')
2025-12-25T21:24:02.963 [DEBUG] [Thread-18727] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:24:03.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:24:03.057 [DEBUG] [Thread-18730] [transport.py] [_log()] starting thread (client mode): 0xb6b23580
2025-12-25T21:24:03.057 [DEBUG] [Thread-18730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:24:03.073 [DEBUG] [Thread-18730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:24:03.073 [INFO] [Thread-18730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:24:03.080 [DEBUG] [Thread-18730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] client lang: <none>
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] server lang: <none>
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] kex follows: False
2025-12-25T21:24:03.081 [DEBUG] [Thread-18730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:24:03.082 [DEBUG] [Thread-18730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:24:03.082 [DEBUG] [Thread-18730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:24:03.082 [DEBUG] [Thread-18730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:24:03.082 [DEBUG] [Thread-18730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:24:03.082 [DEBUG] [Thread-18730] [transport.py] [_log()] Compression: none
2025-12-25T21:24:03.082 [DEBUG] [Thread-18730] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:24:03.143 [DEBUG] [Thread-18730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:24:03.143 [DEBUG] [Thread-18730] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:24:03.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:24:03.145 [DEBUG] [Thread-18730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:24:03.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:24:03.199 [DEBUG] [Thread-18730] [transport.py] [_log()] userauth is OK
2025-12-25T21:24:03.199 [DEBUG] [Thread-18730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:24:03.199 [DEBUG] [Thread-18730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:24:03.199 [DEBUG] [Thread-18730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:24:03.199 [DEBUG] [Thread-18730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:24:03.221 [INFO] [Thread-18730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:24:03.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:24:03.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:24:04.075 [DEBUG] [Thread-18730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:24:04.075 [DEBUG] [Thread-18730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:24:04.123 [DEBUG] [Thread-18730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:24:04.123 [DEBUG] [Thread-18730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:24:04.133 [DEBUG] [Thread-18730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:24:04.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:24:04.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-25T21:24:04.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-25T21:24:04.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:24:04.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:24:04.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:24:04.169 [DEBUG] [Thread-18730] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:24:16.201 [DEBUG] [Thread-18732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:27.392 [DEBUG] [Thread-18733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:31.256 [DEBUG] [Thread-18734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:24:34.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:24:34.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-25T21:24:34.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 24, 23), 5.7, 69.04, 0.0, 18.65, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:24:34.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:24:23
2025-12-25T21:24:35.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:24:35.165 [DEBUG] [Thread-18735] [transport.py] [_log()] starting thread (client mode): 0xb9558130
2025-12-25T21:24:35.165 [DEBUG] [Thread-18735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:24:35.179 [DEBUG] [Thread-18735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:24:35.179 [INFO] [Thread-18735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] client lang: <none>
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] server lang: <none>
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] kex follows: False
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] Compression: none
2025-12-25T21:24:35.183 [DEBUG] [Thread-18735] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:24:35.201 [DEBUG] [Thread-18735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:24:35.202 [DEBUG] [Thread-18735] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:24:35.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:24:35.203 [DEBUG] [Thread-18735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:24:35.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:24:35.205 [DEBUG] [Thread-18735] [transport.py] [_log()] userauth is OK
2025-12-25T21:24:35.205 [DEBUG] [Thread-18735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:24:35.206 [DEBUG] [Thread-18735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:24:35.206 [DEBUG] [Thread-18735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:24:35.206 [DEBUG] [Thread-18735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:24:35.220 [INFO] [Thread-18735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:24:35.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:24:35.786 [DEBUG] [Thread-18735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:24:35.787 [DEBUG] [Thread-18735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:24:35.787 [DEBUG] [Thread-18735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:24:35.827 [DEBUG] [Thread-18735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:24:35.827 [DEBUG] [Thread-18735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:24:35.830 [DEBUG] [Thread-18735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:24:35.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:24:35.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:24:35.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:24:35.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:24:35.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:24:35.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:24:35.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:24:35.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:24:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:24:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.808045 -999.00  +16.60   7.58     72  +11.60 1 1 1 1 1     0    0 4.20 -40.25 ZNESW 10.4 7.6 211.1 25.0 17.5 -21.0 17.4 -20.7 17.2 -19.4 17.5 -20.2
2025-12-25T21:24:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:24:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:24:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.808045
2025-12-25T21:24:35.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:24:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:24:23', tmtdew=5.7, humidity=69.04, cloud=0.0, wind=18.65, 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-25T21:24:23', seeing=1.47, atlas_timestamp='2025-12-25T19:23:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:23:00')
2025-12-25T21:24:35.856 [DEBUG] [Thread-18735] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:24: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-25T21:24:35.951 [DEBUG] [Thread-18738] [transport.py] [_log()] starting thread (client mode): 0xb6b602b0
2025-12-25T21:24:35.951 [DEBUG] [Thread-18738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:24:35.966 [DEBUG] [Thread-18738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:24:35.966 [INFO] [Thread-18738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:24:35.974 [DEBUG] [Thread-18738] [transport.py] [_log()] client lang: <none>
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] server lang: <none>
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] kex follows: False
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] Compression: none
2025-12-25T21:24:35.975 [DEBUG] [Thread-18738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:24:36.031 [DEBUG] [Thread-18738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:24:36.031 [DEBUG] [Thread-18738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:24:36.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:24:36.032 [DEBUG] [Thread-18738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:24:36.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:24:36.090 [DEBUG] [Thread-18738] [transport.py] [_log()] userauth is OK
2025-12-25T21:24:36.090 [DEBUG] [Thread-18738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:24:36.090 [DEBUG] [Thread-18738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:24:36.091 [DEBUG] [Thread-18738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:24:36.091 [DEBUG] [Thread-18738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:24:36.114 [INFO] [Thread-18738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:24:36.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:24:36.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:24:36.974 [DEBUG] [Thread-18738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:24:36.974 [DEBUG] [Thread-18738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:24:37.022 [DEBUG] [Thread-18738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:24:37.022 [DEBUG] [Thread-18738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:24:37.031 [DEBUG] [Thread-18738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:24:37.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:24:37.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-25T21:24:37.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:24:37.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:24:37.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:24:37.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:24:37.071 [DEBUG] [Thread-18738] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:24:46.144 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:46.146 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:24:46.291 [DEBUG] [Thread-18740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:01.341 [DEBUG] [Thread-18741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:25:07.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:25:07.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-25T21:25:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 24, 55), 5.79, 68.88, 0.0, 18.26, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:25:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:24:55
2025-12-25T21:25:07.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:25:08.110 [DEBUG] [Thread-18742] [transport.py] [_log()] starting thread (client mode): 0xb6b75a20
2025-12-25T21:25:08.110 [DEBUG] [Thread-18742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:25:08.130 [DEBUG] [Thread-18742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:25:08.130 [INFO] [Thread-18742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] client lang: <none>
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] server lang: <none>
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] kex follows: False
2025-12-25T21:25:08.133 [DEBUG] [Thread-18742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:25:08.134 [DEBUG] [Thread-18742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:25:08.134 [DEBUG] [Thread-18742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:25:08.134 [DEBUG] [Thread-18742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:25:08.134 [DEBUG] [Thread-18742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:25:08.134 [DEBUG] [Thread-18742] [transport.py] [_log()] Compression: none
2025-12-25T21:25:08.134 [DEBUG] [Thread-18742] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:25:08.148 [DEBUG] [Thread-18742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:25:08.148 [DEBUG] [Thread-18742] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:25:08.148 [DEBUG] [Thread-18742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:25:08.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:25:08.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:25:08.149 [DEBUG] [Thread-18742] [transport.py] [_log()] userauth is OK
2025-12-25T21:25:08.149 [DEBUG] [Thread-18742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:25:08.149 [DEBUG] [Thread-18742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:25:08.149 [DEBUG] [Thread-18742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:25:08.149 [DEBUG] [Thread-18742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:25:08.167 [INFO] [Thread-18742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:25:08.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:25:08.932 [DEBUG] [Thread-18742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:25:08.932 [DEBUG] [Thread-18742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:25:08.933 [DEBUG] [Thread-18742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:25:08.974 [DEBUG] [Thread-18742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:25:08.974 [DEBUG] [Thread-18742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:25:08.976 [DEBUG] [Thread-18742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:25:08.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:25:08.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:25:08.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:25:08.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:25:08.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:25:08.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:25:08.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.808392 -999.00  +16.60   8.04     71  +11.50 1 1 1 1 1     0    0 4.35 -36.00 ZNESW 11.7 8.0 197.0 18.1 17.5 -21.0 17.4 -20.5 17.2 -19.2 17.5 -20.1
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.808392
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:25:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:25:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:24:55', tmtdew=5.79, humidity=68.88, cloud=0.0, wind=18.26, 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-25T21:24:57', seeing=1.47, atlas_timestamp='2025-12-25T19:24:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:23:00')
2025-12-25T21:25:08.999 [DEBUG] [Thread-18742] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:25:09.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-25T21:25:09.081 [DEBUG] [Thread-18745] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e20
2025-12-25T21:25:09.081 [DEBUG] [Thread-18745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:25:09.096 [DEBUG] [Thread-18745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:25:09.096 [INFO] [Thread-18745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] client lang: <none>
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] server lang: <none>
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] kex follows: False
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] Compression: none
2025-12-25T21:25:09.104 [DEBUG] [Thread-18745] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:25:09.161 [DEBUG] [Thread-18745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:25:09.162 [DEBUG] [Thread-18745] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:25:09.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:25:09.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:25:09.162 [DEBUG] [Thread-18745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:25:09.218 [DEBUG] [Thread-18745] [transport.py] [_log()] userauth is OK
2025-12-25T21:25:09.218 [DEBUG] [Thread-18745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:25:09.218 [DEBUG] [Thread-18745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:25:09.218 [DEBUG] [Thread-18745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:25:09.218 [DEBUG] [Thread-18745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:25:09.236 [INFO] [Thread-18745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:25:09.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-25T21:25:09.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:25:10.093 [DEBUG] [Thread-18745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:25:10.093 [DEBUG] [Thread-18745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:25:10.143 [DEBUG] [Thread-18745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:25:10.143 [DEBUG] [Thread-18745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:25:10.151 [DEBUG] [Thread-18745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:25:10.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:25:10.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:25:10.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-25T21:25:10.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:25:10.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:25:10.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:25:10.183 [DEBUG] [Thread-18745] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:25:16.375 [DEBUG] [Thread-18747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:27.448 [DEBUG] [Thread-18748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:31.425 [DEBUG] [Thread-18749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:25:40.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:25:40.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-25T21:25:40.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 25, 28), 5.82, 68.76, 0.0, 21.03, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:25:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:25:28
2025-12-25T21:25:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:25:41.155 [DEBUG] [Thread-18750] [transport.py] [_log()] starting thread (client mode): 0xb6b7d270
2025-12-25T21:25:41.155 [DEBUG] [Thread-18750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:25:41.174 [DEBUG] [Thread-18750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:25:41.175 [INFO] [Thread-18750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:25:41.178 [DEBUG] [Thread-18750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] client lang: <none>
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] server lang: <none>
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] kex follows: False
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] Compression: none
2025-12-25T21:25:41.179 [DEBUG] [Thread-18750] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:25:41.199 [DEBUG] [Thread-18750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:25:41.200 [DEBUG] [Thread-18750] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:25:41.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:25:41.201 [DEBUG] [Thread-18750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:25:41.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:25:41.245 [DEBUG] [Thread-18750] [transport.py] [_log()] userauth is OK
2025-12-25T21:25:41.245 [DEBUG] [Thread-18750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:25:41.245 [DEBUG] [Thread-18750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:25:41.245 [DEBUG] [Thread-18750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:25:41.245 [DEBUG] [Thread-18750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:25:41.276 [INFO] [Thread-18750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:25:41.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:25:42.084 [DEBUG] [Thread-18750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:25:42.084 [DEBUG] [Thread-18750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:25:42.084 [DEBUG] [Thread-18750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:25:42.125 [DEBUG] [Thread-18750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:25:42.125 [DEBUG] [Thread-18750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:25:42.128 [DEBUG] [Thread-18750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:25:42.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:25:42.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:25:42.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:25:42.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:25:42.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:25:42.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:25:42.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:25:42.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:25:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:25:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.809087 -999.00  +16.60  19.32     71  +11.50 1 1 1 1 1     0    0 4.52 -27.30 ZNESW 13.6 19.3 204.6 23.6 17.5 -21.2 17.4 -20.8 17.2 -19.4 17.5 -20.6
2025-12-25T21:25:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:25:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:25:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.809087
2025-12-25T21:25:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:25:42.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:25:42.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:25:42.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:25:42.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:25:42.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:25:28', tmtdew=5.82, humidity=68.76, cloud=0.0, wind=21.03, 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-25T21:25:29', seeing=1.4, atlas_timestamp='2025-12-25T19:25:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:23:00')
2025-12-25T21:25:42.156 [DEBUG] [Thread-18750] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:25:42.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-25T21:25:42.249 [DEBUG] [Thread-18753] [transport.py] [_log()] starting thread (client mode): 0xb6baa4d0
2025-12-25T21:25:42.249 [DEBUG] [Thread-18753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:25:42.268 [DEBUG] [Thread-18753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:25:42.268 [INFO] [Thread-18753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:25:42.276 [DEBUG] [Thread-18753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:25:42.277 [DEBUG] [Thread-18753] [transport.py] [_log()] client lang: <none>
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] server lang: <none>
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] kex follows: False
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] Compression: none
2025-12-25T21:25:42.278 [DEBUG] [Thread-18753] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:25:42.334 [DEBUG] [Thread-18753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:25:42.334 [DEBUG] [Thread-18753] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:25:42.335 [DEBUG] [Thread-18753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:25:42.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:25:42.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:25:42.391 [DEBUG] [Thread-18753] [transport.py] [_log()] userauth is OK
2025-12-25T21:25:42.391 [DEBUG] [Thread-18753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:25:42.391 [DEBUG] [Thread-18753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:25:42.391 [DEBUG] [Thread-18753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:25:42.391 [DEBUG] [Thread-18753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:25:42.410 [INFO] [Thread-18753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:25:42.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-25T21:25:42.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:25:43.246 [DEBUG] [Thread-18753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:25:43.246 [DEBUG] [Thread-18753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:25:43.293 [DEBUG] [Thread-18753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:25:43.293 [DEBUG] [Thread-18753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:25:43.303 [DEBUG] [Thread-18753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:25:43.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:25:43.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:25:43.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:25:43.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:25:43.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:25:43.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:25:43.337 [DEBUG] [Thread-18753] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:25:46.349 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:46.350 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:25:46.460 [DEBUG] [Thread-18755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:01.509 [DEBUG] [Thread-18756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:13.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:26:13.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:26:13.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-25T21:26:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 26), 5.75, 68.33, 0.0, 19.89, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:26:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:26:00
2025-12-25T21:26:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:26:14.327 [DEBUG] [Thread-18757] [transport.py] [_log()] starting thread (client mode): 0xb6b7c610
2025-12-25T21:26:14.328 [DEBUG] [Thread-18757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:26:14.349 [DEBUG] [Thread-18757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:26:14.349 [INFO] [Thread-18757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:26:14.352 [DEBUG] [Thread-18757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] client lang: <none>
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] server lang: <none>
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] kex follows: False
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] Compression: none
2025-12-25T21:26:14.353 [DEBUG] [Thread-18757] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:26:14.370 [DEBUG] [Thread-18757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:26:14.371 [DEBUG] [Thread-18757] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:26:14.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:26:14.372 [DEBUG] [Thread-18757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:26:14.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:26:14.374 [DEBUG] [Thread-18757] [transport.py] [_log()] userauth is OK
2025-12-25T21:26:14.374 [DEBUG] [Thread-18757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:26:14.374 [DEBUG] [Thread-18757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:26:14.374 [DEBUG] [Thread-18757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:26:14.374 [DEBUG] [Thread-18757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:26:14.399 [INFO] [Thread-18757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:26:14.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:26:15.042 [DEBUG] [Thread-18757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:26:15.043 [DEBUG] [Thread-18757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:26:15.043 [DEBUG] [Thread-18757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:26:15.083 [DEBUG] [Thread-18757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:26:15.083 [DEBUG] [Thread-18757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:26:15.086 [DEBUG] [Thread-18757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:26:15.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:26:15.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:26:15.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:26:15.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:26:15.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:26:15.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:26:15.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.809434 -999.00  +16.60  12.79     72  +11.60 1 1 1 1 1     0    0 4.60 -25.01 ZNESW 15.0 12.8 195.8 20.0 17.5 -21.2 17.4 -20.6 17.2 -19.4 17.5 -20.4
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.809434
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:26:15.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:26:00', tmtdew=5.75, humidity=68.33, cloud=0.0, wind=19.89, 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-25T21:26:01', seeing=1.57, atlas_timestamp='2025-12-25T19:25:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:23:00')
2025-12-25T21:26:15.107 [DEBUG] [Thread-18757] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:26:15.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:26:15.199 [DEBUG] [Thread-18760] [transport.py] [_log()] starting thread (client mode): 0xb6b49c90
2025-12-25T21:26:15.199 [DEBUG] [Thread-18760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:26:15.214 [DEBUG] [Thread-18760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:26:15.215 [INFO] [Thread-18760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:26:15.222 [DEBUG] [Thread-18760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:26:15.222 [DEBUG] [Thread-18760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] client lang: <none>
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] server lang: <none>
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] kex follows: False
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] Compression: none
2025-12-25T21:26:15.223 [DEBUG] [Thread-18760] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:26:15.289 [DEBUG] [Thread-18760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:26:15.289 [DEBUG] [Thread-18760] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:26:15.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:26:15.291 [DEBUG] [Thread-18760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:26:15.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:26:15.348 [DEBUG] [Thread-18760] [transport.py] [_log()] userauth is OK
2025-12-25T21:26:15.348 [DEBUG] [Thread-18760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:26:15.348 [DEBUG] [Thread-18760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:26:15.349 [DEBUG] [Thread-18760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:26:15.349 [DEBUG] [Thread-18760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:26:15.368 [INFO] [Thread-18760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:26:15.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-25T21:26:15.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:26:16.216 [DEBUG] [Thread-18760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:26:16.216 [DEBUG] [Thread-18760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:26:16.264 [DEBUG] [Thread-18760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:26:16.264 [DEBUG] [Thread-18760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:26:16.273 [DEBUG] [Thread-18760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:26:16.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:26:16.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-25T21:26:16.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-25T21:26:16.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:26:16.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:26:16.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:26:16.310 [DEBUG] [Thread-18760] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:26:16.542 [DEBUG] [Thread-18762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:27.499 [DEBUG] [Thread-18763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:31.588 [DEBUG] [Thread-18764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:46.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:26:46.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:26:46.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-25T21:26:46.551 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:46.551 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:46.621 [DEBUG] [Thread-18765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:26:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 26, 32), 5.75, 68.34, 0.0, 19.64, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:26:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:26:32
2025-12-25T21:26:47.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:26:47.298 [DEBUG] [Thread-18766] [transport.py] [_log()] starting thread (client mode): 0xb6b48fa0
2025-12-25T21:26:47.299 [DEBUG] [Thread-18766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:26:47.319 [DEBUG] [Thread-18766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:26:47.319 [INFO] [Thread-18766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:47.322 [DEBUG] [Thread-18766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] client lang: <none>
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] server lang: <none>
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] kex follows: False
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] Compression: none
2025-12-25T21:26:47.323 [DEBUG] [Thread-18766] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:26:47.339 [DEBUG] [Thread-18766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:26:47.340 [DEBUG] [Thread-18766] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:26:47.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:26:47.341 [DEBUG] [Thread-18766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:26:47.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:26:47.343 [DEBUG] [Thread-18766] [transport.py] [_log()] userauth is OK
2025-12-25T21:26:47.344 [DEBUG] [Thread-18766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:26:47.344 [DEBUG] [Thread-18766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:26:47.344 [DEBUG] [Thread-18766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:26:47.344 [DEBUG] [Thread-18766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:26:47.368 [INFO] [Thread-18766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:26:47.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:26:48.196 [DEBUG] [Thread-18766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:26:48.196 [DEBUG] [Thread-18766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:26:48.196 [DEBUG] [Thread-18766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:26:48.237 [DEBUG] [Thread-18766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:26:48.237 [DEBUG] [Thread-18766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:26:48.239 [DEBUG] [Thread-18766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:26:48.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:26:48.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:26:48.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:26:48.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:26:48.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:26:48.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:26:48.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:26:48.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:26:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:26:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.809781 -999.00  +16.50  18.30     72  +11.60 1 1 1 1 1     0    0 4.59 -24.78 ZNESW 17.6 18.3 196.2 21.7 17.5 -21.1 17.3 -20.7 17.2 -19.5 17.4 -20.4
2025-12-25T21:26:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:26:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:26:48.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.809781
2025-12-25T21:26:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:26:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:26:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:26:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:26:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:26:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:26:32', tmtdew=5.75, humidity=68.34, cloud=0.0, wind=19.64, 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-25T21:26:33', seeing=1.62, atlas_timestamp='2025-12-25T19:26:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:23:00')
2025-12-25T21:26:48.258 [DEBUG] [Thread-18766] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:26:48.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-25T21:26:48.556 [DEBUG] [Thread-18769] [transport.py] [_log()] starting thread (client mode): 0xb6bbad70
2025-12-25T21:26:48.556 [DEBUG] [Thread-18769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:26:49.107 [DEBUG] [Thread-18769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:26:49.107 [INFO] [Thread-18769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:26:49.363 [DEBUG] [Thread-18769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:26:49.363 [DEBUG] [Thread-18769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:26:49.363 [DEBUG] [Thread-18769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] client lang: <none>
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] server lang: <none>
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] kex follows: False
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:26:49.364 [DEBUG] [Thread-18769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:26:49.365 [DEBUG] [Thread-18769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:26:49.365 [DEBUG] [Thread-18769] [transport.py] [_log()] Compression: none
2025-12-25T21:26:49.365 [DEBUG] [Thread-18769] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:26:49.550 [DEBUG] [Thread-18769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:26:49.551 [DEBUG] [Thread-18769] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:26:49.551 [DEBUG] [Thread-18769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:26:49.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:26:49.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:26:49.905 [DEBUG] [Thread-18769] [transport.py] [_log()] userauth is OK
2025-12-25T21:26:49.906 [DEBUG] [Thread-18769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:26:49.906 [DEBUG] [Thread-18769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:26:49.906 [DEBUG] [Thread-18769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:26:49.906 [DEBUG] [Thread-18769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:26:50.225 [INFO] [Thread-18769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:26:50.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:26:50.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:26:51.981 [DEBUG] [Thread-18769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:26:51.982 [DEBUG] [Thread-18769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:26:52.239 [DEBUG] [Thread-18769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:26:52.240 [DEBUG] [Thread-18769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:26:52.762 [DEBUG] [Thread-18769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:26:52.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:26:52.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-25T21:26:52.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-25T21:26:53.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:26:53.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:26:53.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:26:53.055 [DEBUG] [Thread-18769] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:27:01.655 [DEBUG] [Thread-18771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:16.702 [DEBUG] [Thread-18772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:27:23.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:27:23.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-25T21:27:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 27, 4), 5.73, 68.43, 0.0, 18.97, 16.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:27:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:27:04
2025-12-25T21:27:23.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:27:24.072 [DEBUG] [Thread-18773] [transport.py] [_log()] starting thread (client mode): 0xb6bb8a60
2025-12-25T21:27:24.072 [DEBUG] [Thread-18773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:27:24.093 [DEBUG] [Thread-18773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:27:24.093 [INFO] [Thread-18773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] client lang: <none>
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] server lang: <none>
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] kex follows: False
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:27:24.095 [DEBUG] [Thread-18773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:27:24.096 [DEBUG] [Thread-18773] [transport.py] [_log()] Compression: none
2025-12-25T21:27:24.096 [DEBUG] [Thread-18773] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:27:24.106 [DEBUG] [Thread-18773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:27:24.107 [DEBUG] [Thread-18773] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:27:24.107 [DEBUG] [Thread-18773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:27:24.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:27:24.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:27:24.109 [DEBUG] [Thread-18773] [transport.py] [_log()] userauth is OK
2025-12-25T21:27:24.109 [DEBUG] [Thread-18773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:27:24.109 [DEBUG] [Thread-18773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:27:24.109 [DEBUG] [Thread-18773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:27:24.109 [DEBUG] [Thread-18773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:27:24.133 [INFO] [Thread-18773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:27:24.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:27:24.713 [DEBUG] [Thread-18773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:27:24.713 [DEBUG] [Thread-18773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:27:24.713 [DEBUG] [Thread-18773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:27:24.754 [DEBUG] [Thread-18773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:27:24.755 [DEBUG] [Thread-18773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:27:24.758 [DEBUG] [Thread-18773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:27:24.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:27:24.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:27:24.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:27:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:27:24.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:27:24.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:27:24.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.810128 -999.00  +16.50  18.87     72  +11.50 1 1 1 1 1     0    0 4.53 -24.17 ZNESW 15.9 18.9 207.8 23.0 17.5 -21.2 17.4 -20.8 17.2 -19.4 17.5 -20.3
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.810128
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:27:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:27:04', tmtdew=5.73, humidity=68.43, cloud=0.0, wind=18.97, 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-25T21:27:05', seeing=1.38, atlas_timestamp='2025-12-25T19:26:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.09074999999999989, 0.045249999999999346, 0.14275000000000126, 0.09450000000000003, 0.14349999999999952, 0.15525000000000055, 0.15450000000000053, 0.1147500000000008, 0.1504999999999992, 0.12049999999999983, 0.16174999999999962, 0.028999999999999915, 0.09200000000000053, 0.12925000000000075, 0.13949999999999818, 0.12199999999999989, 0.0962499999999995, 0.16949999999999932, 0.13299999999999912, 0.1402499999999982, 0.13099999999999845, 0.1477499999999985, 0.13925000000000054, 0.11375000000000135, 0.09799999999999898, 0.1225000000000005, 0.2587500000000009, 0.18200000000000038, 0.1980000000000004, 0.18950000000000067, 0.2220000000000013, 0.19400000000000084, 0.12875000000000014], zp_timestamp='2025-12-25T19:23:00')
2025-12-25T21:27:24.777 [DEBUG] [Thread-18773] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:27:24.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-25T21:27:24.864 [DEBUG] [Thread-18776] [transport.py] [_log()] starting thread (client mode): 0xb6bb5030
2025-12-25T21:27:24.864 [DEBUG] [Thread-18776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:27:24.879 [DEBUG] [Thread-18776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:27:24.879 [INFO] [Thread-18776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] client lang: <none>
2025-12-25T21:27:24.887 [DEBUG] [Thread-18776] [transport.py] [_log()] server lang: <none>
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] kex follows: False
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] Compression: none
2025-12-25T21:27:24.888 [DEBUG] [Thread-18776] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:27:24.950 [DEBUG] [Thread-18776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:27:24.951 [DEBUG] [Thread-18776] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:27:24.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:27:24.952 [DEBUG] [Thread-18776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:27:24.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:27:25.006 [DEBUG] [Thread-18776] [transport.py] [_log()] userauth is OK
2025-12-25T21:27:25.006 [DEBUG] [Thread-18776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:27:25.006 [DEBUG] [Thread-18776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:27:25.006 [DEBUG] [Thread-18776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:27:25.007 [DEBUG] [Thread-18776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:27:25.031 [INFO] [Thread-18776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:27:25.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-25T21:27:25.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:27:25.963 [DEBUG] [Thread-18776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:27:25.963 [DEBUG] [Thread-18776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:27:26.011 [DEBUG] [Thread-18776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:27:26.011 [DEBUG] [Thread-18776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:27:26.020 [DEBUG] [Thread-18776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:27:26.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:27:26.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-25T21:27:26.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:27:26.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:27:26.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:27:26.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:27:26.056 [DEBUG] [Thread-18776] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:27:27.557 [DEBUG] [Thread-18778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:31.735 [DEBUG] [Thread-18779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:46.755 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:46.756 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:46.781 [DEBUG] [Thread-18780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:27:56.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:27:56.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:27:56.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-25T21:27:56.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 27, 36), 5.71, 69.01, 0.0, 15.72, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:27:56.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:27:36
2025-12-25T21:27:56.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:27:57.055 [DEBUG] [Thread-18781] [transport.py] [_log()] starting thread (client mode): 0xb6bb99f0
2025-12-25T21:27:57.055 [DEBUG] [Thread-18781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:27:57.075 [DEBUG] [Thread-18781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:27:57.076 [INFO] [Thread-18781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] client lang: <none>
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] server lang: <none>
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] kex follows: False
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] Compression: none
2025-12-25T21:27:57.079 [DEBUG] [Thread-18781] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:27:57.096 [DEBUG] [Thread-18781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:27:57.097 [DEBUG] [Thread-18781] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:27:57.097 [DEBUG] [Thread-18781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:27:57.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:27:57.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:27:57.141 [DEBUG] [Thread-18781] [transport.py] [_log()] userauth is OK
2025-12-25T21:27:57.141 [DEBUG] [Thread-18781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:27:57.141 [DEBUG] [Thread-18781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:27:57.141 [DEBUG] [Thread-18781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:27:57.141 [DEBUG] [Thread-18781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:27:57.162 [INFO] [Thread-18781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:27:57.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:27:57.784 [DEBUG] [Thread-18781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:27:57.784 [DEBUG] [Thread-18781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:27:57.785 [DEBUG] [Thread-18781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:27:57.825 [DEBUG] [Thread-18781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:27:57.825 [DEBUG] [Thread-18781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:27:57.829 [DEBUG] [Thread-18781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:27:57.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:27:57.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:27:57.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:27:57.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:27:57.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:27:57.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:27:57.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:27:57.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:27:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:27:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.810476 -999.00  +16.50  13.51     72  +11.60 1 1 1 1 1     0    0 4.52 -25.05 ZNESW 17.9 13.5 218.8 21.9 17.5 -21.2 17.3 -20.7 17.2 -19.4 17.5 -20.4
2025-12-25T21:27:57.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:27:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:27:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.810476
2025-12-25T21:27:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:27:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:27:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:27:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:27:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:27:57.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:27:36', tmtdew=5.71, humidity=69.01, cloud=0.0, wind=15.72, 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-25T21:27:37', seeing=1.39, atlas_timestamp='2025-12-25T19:27:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.08725000000000094, 0.08125000000000071, 0.12025000000000041, 0.06149999999999878, 0.09149999999999991, 0.09875000000000078, 0.09499999999999886, 0.10725000000000051, 0.1324999999999985, 0.10200000000000031, 0.16225000000000023, 0.051000000000000156, 0.09600000000000009, 0.14724999999999966, 0.07099999999999973, 0.14199999999999946, 0.0782500000000006, 0.14749999999999908, 0.1255000000000006, 0.13374999999999915, 0.14899999999999736, 0.1817499999999974, 0.14225000000000065, 0.14575000000000138, 0.0649999999999995, 0.11850000000000094, 0.2552500000000002, 0.22300000000000075, 0.29300000000000015, 0.16000000000000014, 0.22600000000000087, 0.1850000000000005, 0.12424999999999997], zp_timestamp='2025-12-25T19:25:00')
2025-12-25T21:27:57.855 [DEBUG] [Thread-18781] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:27:57.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:27:57.947 [DEBUG] [Thread-18784] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f00
2025-12-25T21:27:57.948 [DEBUG] [Thread-18784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:27:57.962 [DEBUG] [Thread-18784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:27:57.962 [INFO] [Thread-18784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:27:57.971 [DEBUG] [Thread-18784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:27:57.972 [DEBUG] [Thread-18784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] client lang: <none>
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] server lang: <none>
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] kex follows: False
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] Compression: none
2025-12-25T21:27:57.973 [DEBUG] [Thread-18784] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:27:58.028 [DEBUG] [Thread-18784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:27:58.028 [DEBUG] [Thread-18784] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:27:58.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:27:58.029 [DEBUG] [Thread-18784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:27:58.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:27:58.083 [DEBUG] [Thread-18784] [transport.py] [_log()] userauth is OK
2025-12-25T21:27:58.084 [DEBUG] [Thread-18784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:27:58.084 [DEBUG] [Thread-18784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:27:58.084 [DEBUG] [Thread-18784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:27:58.084 [DEBUG] [Thread-18784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:27:58.108 [INFO] [Thread-18784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:27:58.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:27:58.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:27:58.909 [DEBUG] [Thread-18784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:27:58.909 [DEBUG] [Thread-18784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:27:58.957 [DEBUG] [Thread-18784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:27:58.957 [DEBUG] [Thread-18784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:27:58.966 [DEBUG] [Thread-18784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:27:58.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:27:58.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-25T21:27:58.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-25T21:27:58.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:27:58.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:27:58.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:27:59.004 [DEBUG] [Thread-18784] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:28:01.811 [DEBUG] [Thread-18786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:28:16.862 [DEBUG] [Thread-18787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:28:27.628 [DEBUG] [Thread-18788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:28:29.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:28:29.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:28:29.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-25T21:28:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 28, 8), 5.69, 69.08, 0.0, 20.47, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:28:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:28:08
2025-12-25T21:28:29.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:28:30.005 [DEBUG] [Thread-18789] [transport.py] [_log()] starting thread (client mode): 0xb6b49f60
2025-12-25T21:28:30.006 [DEBUG] [Thread-18789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:28:30.025 [DEBUG] [Thread-18789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:28:30.025 [INFO] [Thread-18789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:28:30.028 [DEBUG] [Thread-18789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:28:30.028 [DEBUG] [Thread-18789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:28:30.028 [DEBUG] [Thread-18789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] client lang: <none>
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] server lang: <none>
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] kex follows: False
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] Compression: none
2025-12-25T21:28:30.029 [DEBUG] [Thread-18789] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:28:30.045 [DEBUG] [Thread-18789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:28:30.045 [DEBUG] [Thread-18789] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:28:30.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:28:30.047 [DEBUG] [Thread-18789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:28:30.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:28:30.049 [DEBUG] [Thread-18789] [transport.py] [_log()] userauth is OK
2025-12-25T21:28:30.049 [DEBUG] [Thread-18789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:28:30.049 [DEBUG] [Thread-18789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:28:30.050 [DEBUG] [Thread-18789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:28:30.050 [DEBUG] [Thread-18789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:28:30.075 [INFO] [Thread-18789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:28:30.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:28:30.720 [DEBUG] [Thread-18789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:28:30.720 [DEBUG] [Thread-18789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:28:30.721 [DEBUG] [Thread-18789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:28:30.761 [DEBUG] [Thread-18789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:28:30.761 [DEBUG] [Thread-18789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:28:30.764 [DEBUG] [Thread-18789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:28:30.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:28:30.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:28:30.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:28:30.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:28:30.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:28:30.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:28:30.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:28:30.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:28:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:28:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.810823 -999.00  +16.50  11.36     72  +11.60 1 1 1 1 1     0    0 4.53 -23.99 ZNESW 13.8 11.4 181.4 26.1 17.4 -21.1 17.3 -20.8 17.1 -19.6 17.4 -20.3
2025-12-25T21:28:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:28:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:28:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.810823
2025-12-25T21:28:30.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:28:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:28:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:28:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:28:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:28:30.791 [DEBUG] [Thread-18789] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:28:30.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:28:08', tmtdew=5.69, humidity=69.08, cloud=0.0, wind=20.47, 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-25T21:28:09', seeing=1.39, atlas_timestamp='2025-12-25T19:27:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.08725000000000094, 0.08125000000000071, 0.12025000000000041, 0.06149999999999878, 0.09149999999999991, 0.09875000000000078, 0.09499999999999886, 0.10725000000000051, 0.1324999999999985, 0.10200000000000031, 0.16225000000000023, 0.051000000000000156, 0.09600000000000009, 0.14724999999999966, 0.07099999999999973, 0.14199999999999946, 0.0782500000000006, 0.14749999999999908, 0.1255000000000006, 0.13374999999999915, 0.14899999999999736, 0.1817499999999974, 0.14225000000000065, 0.14575000000000138, 0.0649999999999995, 0.11850000000000094, 0.2552500000000002, 0.22300000000000075, 0.29300000000000015, 0.16000000000000014, 0.22600000000000087, 0.1850000000000005, 0.12424999999999997], zp_timestamp='2025-12-25T19:25:00')
2025-12-25T21:28:30.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:28:30.886 [DEBUG] [Thread-18792] [transport.py] [_log()] starting thread (client mode): 0xb6bc3430
2025-12-25T21:28:30.887 [DEBUG] [Thread-18792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:28:30.901 [DEBUG] [Thread-18792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:28:30.902 [INFO] [Thread-18792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:28:30.909 [DEBUG] [Thread-18792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] client lang: <none>
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] server lang: <none>
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] kex follows: False
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] Compression: none
2025-12-25T21:28:30.910 [DEBUG] [Thread-18792] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:28:30.968 [DEBUG] [Thread-18792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:28:30.968 [DEBUG] [Thread-18792] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:28:30.968 [DEBUG] [Thread-18792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:28:30.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:28:30.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:28:31.025 [DEBUG] [Thread-18792] [transport.py] [_log()] userauth is OK
2025-12-25T21:28:31.025 [DEBUG] [Thread-18792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:28:31.025 [DEBUG] [Thread-18792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:28:31.025 [DEBUG] [Thread-18792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:28:31.026 [DEBUG] [Thread-18792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:28:31.046 [INFO] [Thread-18792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:28:31.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-25T21:28:31.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:28:31.891 [DEBUG] [Thread-18792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:28:31.892 [DEBUG] [Thread-18792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:28:31.892 [DEBUG] [Thread-18794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:28:31.939 [DEBUG] [Thread-18792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:28:31.939 [DEBUG] [Thread-18792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:28:31.949 [DEBUG] [Thread-18792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:28:31.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:28:31.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-25T21:28:31.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:28:31.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:28:31.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:28:31.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:28:31.986 [DEBUG] [Thread-18792] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:28:46.943 [DEBUG] [Thread-18795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:28:46.956 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:28:46.957 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:01.238 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:01.978 [DEBUG] [Thread-18796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:02.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:29:02.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:29:02.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-25T21:29:02.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 28, 40), 5.63, 69.14, 0.0, 19.99, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:29:02.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:28:40
2025-12-25T21:29:02.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:29:03.042 [DEBUG] [Thread-18797] [transport.py] [_log()] starting thread (client mode): 0xb95590f0
2025-12-25T21:29:03.042 [DEBUG] [Thread-18797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:29:03.063 [DEBUG] [Thread-18797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:29:03.063 [INFO] [Thread-18797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] client lang: <none>
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] server lang: <none>
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] kex follows: False
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] Compression: none
2025-12-25T21:29:03.065 [DEBUG] [Thread-18797] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:29:03.074 [DEBUG] [Thread-18797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:29:03.074 [DEBUG] [Thread-18797] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:29:03.074 [DEBUG] [Thread-18797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:29:03.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:29:03.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:29:03.075 [DEBUG] [Thread-18797] [transport.py] [_log()] userauth is OK
2025-12-25T21:29:03.075 [DEBUG] [Thread-18797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:29:03.075 [DEBUG] [Thread-18797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:29:03.075 [DEBUG] [Thread-18797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:29:03.075 [DEBUG] [Thread-18797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:29:03.094 [INFO] [Thread-18797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:29:03.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:29:03.704 [DEBUG] [Thread-18797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:29:03.704 [DEBUG] [Thread-18797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:29:03.704 [DEBUG] [Thread-18797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:29:03.745 [DEBUG] [Thread-18797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:29:03.746 [DEBUG] [Thread-18797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:29:03.748 [DEBUG] [Thread-18797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:29:03.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:29:03.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:29:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:29:03.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:29:03.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:29:03.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:29:03.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:29:03.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.811517 -999.00  +16.50   6.62     72  +11.50 1 1 1 1 1     0    0 4.48 -25.27 ZNESW 15.9 6.6 189.7 20.6 17.4 -21.1 17.3 -20.8 17.1 -19.6 17.4 -20.2
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.811517
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:29:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:28:40', tmtdew=5.63, humidity=69.14, cloud=0.0, wind=19.99, 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-25T21:28:41', seeing=1.49, atlas_timestamp='2025-12-25T19:28:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.08725000000000094, 0.08125000000000071, 0.12025000000000041, 0.06149999999999878, 0.09149999999999991, 0.09875000000000078, 0.09499999999999886, 0.10725000000000051, 0.1324999999999985, 0.10200000000000031, 0.16225000000000023, 0.051000000000000156, 0.09600000000000009, 0.14724999999999966, 0.07099999999999973, 0.14199999999999946, 0.0782500000000006, 0.14749999999999908, 0.1255000000000006, 0.13374999999999915, 0.14899999999999736, 0.1817499999999974, 0.14225000000000065, 0.14575000000000138, 0.0649999999999995, 0.11850000000000094, 0.2552500000000002, 0.22300000000000075, 0.29300000000000015, 0.16000000000000014, 0.22600000000000087, 0.1850000000000005, 0.12424999999999997], zp_timestamp='2025-12-25T19:25:00')
2025-12-25T21:29:03.765 [DEBUG] [Thread-18797] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:29: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-25T21:29:03.852 [DEBUG] [Thread-18800] [transport.py] [_log()] starting thread (client mode): 0xb6b23010
2025-12-25T21:29:03.852 [DEBUG] [Thread-18800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:29:03.871 [DEBUG] [Thread-18800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:29:03.871 [INFO] [Thread-18800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] client lang: <none>
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] server lang: <none>
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] kex follows: False
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] Compression: none
2025-12-25T21:29:03.878 [DEBUG] [Thread-18800] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:29:03.935 [DEBUG] [Thread-18800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:29:03.935 [DEBUG] [Thread-18800] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:29:03.935 [DEBUG] [Thread-18800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:29:03.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:29:03.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:29:03.991 [DEBUG] [Thread-18800] [transport.py] [_log()] userauth is OK
2025-12-25T21:29:03.991 [DEBUG] [Thread-18800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:29:03.991 [DEBUG] [Thread-18800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:29:03.991 [DEBUG] [Thread-18800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:29:03.991 [DEBUG] [Thread-18800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:29:04.006 [INFO] [Thread-18800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:29:04.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-25T21:29:04.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:29:04.854 [DEBUG] [Thread-18800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:29:04.854 [DEBUG] [Thread-18800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:29:04.903 [DEBUG] [Thread-18800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:29:04.903 [DEBUG] [Thread-18800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:29:04.911 [DEBUG] [Thread-18800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:29:04.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:29:04.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:29:04.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:29:04.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:29:04.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:29:04.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:29:04.943 [DEBUG] [Thread-18800] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:29:17.008 [DEBUG] [Thread-18802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:27.680 [DEBUG] [Thread-18803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:32.060 [DEBUG] [Thread-18804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:34.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:29:34.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:29:34.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-25T21:29:35.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 29, 12), 5.61, 69.23, 0.0, 16.34, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:29:35.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:29:12
2025-12-25T21:29:35.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:29:35.943 [DEBUG] [Thread-18805] [transport.py] [_log()] starting thread (client mode): 0xb6bc0ee0
2025-12-25T21:29:35.943 [DEBUG] [Thread-18805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:29:35.962 [DEBUG] [Thread-18805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:29:35.962 [INFO] [Thread-18805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] client lang: <none>
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] server lang: <none>
2025-12-25T21:29:35.966 [DEBUG] [Thread-18805] [transport.py] [_log()] kex follows: False
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] Compression: none
2025-12-25T21:29:35.967 [DEBUG] [Thread-18805] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:29:35.987 [DEBUG] [Thread-18805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:29:35.988 [DEBUG] [Thread-18805] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:29:35.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:29:35.989 [DEBUG] [Thread-18805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:29:35.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:29:35.991 [DEBUG] [Thread-18805] [transport.py] [_log()] userauth is OK
2025-12-25T21:29:35.991 [DEBUG] [Thread-18805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:29:35.991 [DEBUG] [Thread-18805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:29:35.991 [DEBUG] [Thread-18805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:29:35.991 [DEBUG] [Thread-18805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:29:36.028 [INFO] [Thread-18805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:29:36.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:29:36.667 [DEBUG] [Thread-18805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:29:36.668 [DEBUG] [Thread-18805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:29:36.668 [DEBUG] [Thread-18805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:29:36.709 [DEBUG] [Thread-18805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:29:36.709 [DEBUG] [Thread-18805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:29:36.713 [DEBUG] [Thread-18805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:29:36.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:29:36.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:29:36.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:29:36.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:29:36.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:29:36.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:29:36.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:29:36.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:29:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:29:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.811864 -999.00  +16.40  16.93     72  +11.50 1 1 1 1 1     0    0 4.54 -23.99 ZNESW 13.3 16.9 204.8 19.4 17.4 -21.2 17.2 -20.9 17.1 -19.4 17.4 -20.3
2025-12-25T21:29:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:29:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:29:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.811864
2025-12-25T21:29:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:29:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:29:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:29:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:29:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:29:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:29:12', tmtdew=5.61, humidity=69.23, cloud=0.0, wind=16.34, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:29:13', seeing=1.73, atlas_timestamp='2025-12-25T19:29:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.08725000000000094, 0.08125000000000071, 0.12025000000000041, 0.06149999999999878, 0.09149999999999991, 0.09875000000000078, 0.09499999999999886, 0.10725000000000051, 0.1324999999999985, 0.10200000000000031, 0.16225000000000023, 0.051000000000000156, 0.09600000000000009, 0.14724999999999966, 0.07099999999999973, 0.14199999999999946, 0.0782500000000006, 0.14749999999999908, 0.1255000000000006, 0.13374999999999915, 0.14899999999999736, 0.1817499999999974, 0.14225000000000065, 0.14575000000000138, 0.0649999999999995, 0.11850000000000094, 0.2552500000000002, 0.22300000000000075, 0.29300000000000015, 0.16000000000000014, 0.22600000000000087, 0.1850000000000005, 0.12424999999999997], zp_timestamp='2025-12-25T19:25:00')
2025-12-25T21:29:36.739 [DEBUG] [Thread-18805] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:29:36.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-25T21:29:36.829 [DEBUG] [Thread-18808] [transport.py] [_log()] starting thread (client mode): 0xb6bb7940
2025-12-25T21:29:36.829 [DEBUG] [Thread-18808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:29:36.843 [DEBUG] [Thread-18808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:29:36.843 [INFO] [Thread-18808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] client lang: <none>
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] server lang: <none>
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] kex follows: False
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:29:36.851 [DEBUG] [Thread-18808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:29:36.852 [DEBUG] [Thread-18808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:29:36.852 [DEBUG] [Thread-18808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:29:36.852 [DEBUG] [Thread-18808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:29:36.852 [DEBUG] [Thread-18808] [transport.py] [_log()] Compression: none
2025-12-25T21:29:36.852 [DEBUG] [Thread-18808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:29:36.910 [DEBUG] [Thread-18808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:29:36.910 [DEBUG] [Thread-18808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:29:36.911 [DEBUG] [Thread-18808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:29:36.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:29:36.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:29:36.966 [DEBUG] [Thread-18808] [transport.py] [_log()] userauth is OK
2025-12-25T21:29:36.966 [DEBUG] [Thread-18808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:29:36.967 [DEBUG] [Thread-18808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:29:36.967 [DEBUG] [Thread-18808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:29:36.967 [DEBUG] [Thread-18808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:29:36.985 [INFO] [Thread-18808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:29:36.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-25T21:29:36.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:29:37.829 [DEBUG] [Thread-18808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:29:37.829 [DEBUG] [Thread-18808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:29:37.880 [DEBUG] [Thread-18808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:29:37.880 [DEBUG] [Thread-18808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:29:37.892 [DEBUG] [Thread-18808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:29:37.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:29:37.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-25T21:29:37.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-25T21:29:37.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:29:37.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:29:37.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:29:37.943 [DEBUG] [Thread-18808] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:29:47.091 [DEBUG] [Thread-18810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:47.159 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:29:47.159 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:02.131 [DEBUG] [Thread-18811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:07.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:30:07.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:30:07.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-25T21:30:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 29, 44), 5.6, 69.74, 0.0, 20.52, 16.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:30:08.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:29:44
2025-12-25T21:30:08.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:30:08.930 [DEBUG] [Thread-18812] [transport.py] [_log()] starting thread (client mode): 0xb6bb5f30
2025-12-25T21:30:08.930 [DEBUG] [Thread-18812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:30:08.950 [DEBUG] [Thread-18812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:30:08.951 [INFO] [Thread-18812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:30:08.954 [DEBUG] [Thread-18812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] client lang: <none>
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] server lang: <none>
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] kex follows: False
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] Compression: none
2025-12-25T21:30:08.955 [DEBUG] [Thread-18812] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:30:08.970 [DEBUG] [Thread-18812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:30:08.970 [DEBUG] [Thread-18812] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:30:08.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:30:08.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:30:08.971 [DEBUG] [Thread-18812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:30:08.971 [DEBUG] [Thread-18812] [transport.py] [_log()] userauth is OK
2025-12-25T21:30:08.971 [DEBUG] [Thread-18812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:30:08.971 [DEBUG] [Thread-18812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:30:08.971 [DEBUG] [Thread-18812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:30:08.971 [DEBUG] [Thread-18812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:30:08.986 [INFO] [Thread-18812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:30:08.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:30:13.616 [DEBUG] [Thread-18812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:30:13.616 [DEBUG] [Thread-18812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:30:13.617 [DEBUG] [Thread-18812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:30:13.657 [DEBUG] [Thread-18812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:30:13.657 [DEBUG] [Thread-18812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:30:13.662 [DEBUG] [Thread-18812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:30:13.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:30:13.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:30:13.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:30:13.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:30:13.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:30:13.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:30:13.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:30:13.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:30:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:30:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.812212 -999.00  +16.40  11.72     72  +11.50 1 1 1 1 1     0    0 4.59 -25.49 ZNESW 8.7 11.7 212.0 16.7 17.4 -21.1 17.3 -20.7 17.1 -19.4 17.4 -20.0
2025-12-25T21:30:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:30:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:30:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.812212
2025-12-25T21:30:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:30:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:30:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:30:13.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:30:13.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:30:13.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:29:44', tmtdew=5.6, humidity=69.74, cloud=0.0, wind=20.52, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:29:45', seeing=2.08, atlas_timestamp='2025-12-25T19:29:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08725000000000094, 0.08125000000000071, 0.12025000000000041, 0.06149999999999878, 0.09149999999999991, 0.09875000000000078, 0.09499999999999886, 0.10725000000000051, 0.1324999999999985, 0.10200000000000031, 0.16225000000000023, 0.051000000000000156, 0.09600000000000009, 0.14724999999999966, 0.07099999999999973, 0.14199999999999946, 0.0782500000000006, 0.14749999999999908, 0.1255000000000006, 0.13374999999999915, 0.14899999999999736, 0.1817499999999974, 0.14225000000000065, 0.14575000000000138, 0.0649999999999995, 0.11850000000000094, 0.2552500000000002, 0.22300000000000075, 0.29300000000000015, 0.16000000000000014, 0.22600000000000087, 0.1850000000000005, 0.12424999999999997], zp_timestamp='2025-12-25T19:25:00')
2025-12-25T21:30:13.800 [DEBUG] [Thread-18812] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:30:13.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-25T21:30:13.894 [DEBUG] [Thread-18815] [transport.py] [_log()] starting thread (client mode): 0xb6bc3460
2025-12-25T21:30:13.894 [DEBUG] [Thread-18815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:30:13.909 [DEBUG] [Thread-18815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:30:13.909 [INFO] [Thread-18815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] client lang: <none>
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] server lang: <none>
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] kex follows: False
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:30:13.917 [DEBUG] [Thread-18815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:30:13.918 [DEBUG] [Thread-18815] [transport.py] [_log()] Compression: none
2025-12-25T21:30:13.918 [DEBUG] [Thread-18815] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:30:13.976 [DEBUG] [Thread-18815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:30:13.977 [DEBUG] [Thread-18815] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:30:13.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:30:13.978 [DEBUG] [Thread-18815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:30:13.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:30:14.032 [DEBUG] [Thread-18815] [transport.py] [_log()] userauth is OK
2025-12-25T21:30:14.032 [DEBUG] [Thread-18815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:30:14.032 [DEBUG] [Thread-18815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:30:14.032 [DEBUG] [Thread-18815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:30:14.032 [DEBUG] [Thread-18815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:30:14.050 [INFO] [Thread-18815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:30:14.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-25T21:30:14.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:30:14.857 [DEBUG] [Thread-18815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:30:14.857 [DEBUG] [Thread-18815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:30:14.905 [DEBUG] [Thread-18815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:30:14.905 [DEBUG] [Thread-18815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:30:14.913 [DEBUG] [Thread-18815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:30:14.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:30:14.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-25T21:30:14.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-25T21:30:14.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:30:14.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:30:14.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:30:14.948 [DEBUG] [Thread-18815] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:30:17.167 [DEBUG] [Thread-18817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:27.748 [DEBUG] [Thread-18818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:32.218 [DEBUG] [Thread-18819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:30:44.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:30:44.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-25T21:30:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 30, 17), 5.58, 69.84, 0.0, 21.4, 16.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:30:45.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:30:17
2025-12-25T21:30:45.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:30:45.938 [DEBUG] [Thread-18820] [transport.py] [_log()] starting thread (client mode): 0xb6bb8370
2025-12-25T21:30:45.938 [DEBUG] [Thread-18820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:30:45.958 [DEBUG] [Thread-18820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:30:45.958 [INFO] [Thread-18820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] client lang: <none>
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] server lang: <none>
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] kex follows: False
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:30:45.961 [DEBUG] [Thread-18820] [transport.py] [_log()] Compression: none
2025-12-25T21:30:45.962 [DEBUG] [Thread-18820] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:30:45.981 [DEBUG] [Thread-18820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:30:45.982 [DEBUG] [Thread-18820] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:30:45.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:30:45.983 [DEBUG] [Thread-18820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:30:45.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:30:45.985 [DEBUG] [Thread-18820] [transport.py] [_log()] userauth is OK
2025-12-25T21:30:45.985 [DEBUG] [Thread-18820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:30:45.985 [DEBUG] [Thread-18820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:30:45.985 [DEBUG] [Thread-18820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:30:45.985 [DEBUG] [Thread-18820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:30:46.020 [INFO] [Thread-18820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:30:46.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:30:47.054 [DEBUG] [Thread-18820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:30:47.054 [DEBUG] [Thread-18820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:30:47.055 [DEBUG] [Thread-18820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:30:47.096 [DEBUG] [Thread-18820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:30:47.096 [DEBUG] [Thread-18820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:30:47.099 [DEBUG] [Thread-18820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:30:47.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:30:47.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:30:47.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:30:47.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:30:47.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:30:47.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:30:47.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:30:47.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:30:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:30:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.812559 -999.00  +16.50   4.16     72  +11.50 1 1 1 1 1     0    0 4.44 -24.13 ZNESW 8.7 4.2 262.2 16.4 17.4 -21.0 17.3 -20.6 17.1 -19.3 17.4 -20.1
2025-12-25T21:30:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:30:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:30:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.812559
2025-12-25T21:30:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:30:47.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:30:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:30:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:30:47.127 [DEBUG] [Thread-18820] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:30:47.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:30:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:30:17', tmtdew=5.58, humidity=69.84, cloud=0.0, wind=21.4, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:30:17', seeing=1.88, atlas_timestamp='2025-12-25T19:30:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:29:00')
2025-12-25T21:30:47.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:30:47.220 [DEBUG] [Thread-18823] [transport.py] [_log()] starting thread (client mode): 0xb95b3fd0
2025-12-25T21:30:47.220 [DEBUG] [Thread-18823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:30:47.234 [DEBUG] [Thread-18823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:30:47.234 [INFO] [Thread-18823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] client lang: <none>
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] server lang: <none>
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] kex follows: False
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] Compression: none
2025-12-25T21:30:47.242 [DEBUG] [Thread-18823] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:30:47.254 [DEBUG] [Thread-18825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:47.301 [DEBUG] [Thread-18823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:30:47.302 [DEBUG] [Thread-18823] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:30:47.302 [DEBUG] [Thread-18823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:30:47.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:30:47.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:30:47.358 [DEBUG] [Thread-18823] [transport.py] [_log()] userauth is OK
2025-12-25T21:30:47.358 [DEBUG] [Thread-18823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:30:47.358 [DEBUG] [Thread-18823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:30:47.358 [DEBUG] [Thread-18823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:30:47.358 [DEBUG] [Thread-18823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:30:47.358 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:47.359 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:30:47.371 [INFO] [Thread-18823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:30:47.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-25T21:30:47.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:30:48.214 [DEBUG] [Thread-18823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:30:48.214 [DEBUG] [Thread-18823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:30:48.262 [DEBUG] [Thread-18823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:30:48.262 [DEBUG] [Thread-18823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:30:48.271 [DEBUG] [Thread-18823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:30:48.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:30:48.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-25T21:30:48.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:30:48.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:30:48.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:30:48.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:30:48.304 [DEBUG] [Thread-18823] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:31:02.310 [DEBUG] [Thread-18826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:17.340 [DEBUG] [Thread-18827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:31:18.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:31:18.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-25T21:31:19.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 30, 49), 5.51, 69.96, 0.0, 16.48, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:31:19.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:30:49
2025-12-25T21:31:19.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:31:19.338 [DEBUG] [Thread-18828] [transport.py] [_log()] starting thread (client mode): 0xb6b23cd0
2025-12-25T21:31:19.338 [DEBUG] [Thread-18828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:31:19.358 [DEBUG] [Thread-18828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:31:19.358 [INFO] [Thread-18828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] client lang: <none>
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] server lang: <none>
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] kex follows: False
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] Compression: none
2025-12-25T21:31:19.361 [DEBUG] [Thread-18828] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:31:19.380 [DEBUG] [Thread-18828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:31:19.381 [DEBUG] [Thread-18828] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:31:19.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:31:19.381 [DEBUG] [Thread-18828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:31:19.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:31:19.383 [DEBUG] [Thread-18828] [transport.py] [_log()] userauth is OK
2025-12-25T21:31:19.383 [DEBUG] [Thread-18828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:31:19.383 [DEBUG] [Thread-18828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:31:19.383 [DEBUG] [Thread-18828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:31:19.383 [DEBUG] [Thread-18828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:31:19.399 [INFO] [Thread-18828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:31:19.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:31:20.130 [DEBUG] [Thread-18828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:31:20.130 [DEBUG] [Thread-18828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:31:20.131 [DEBUG] [Thread-18828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:31:20.171 [DEBUG] [Thread-18828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:31:20.171 [DEBUG] [Thread-18828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:31:20.174 [DEBUG] [Thread-18828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:31:20.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:31:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:31:20.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:31:20.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:31:20.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:31:20.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:31:20.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:31:20.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:31:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:31:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.812906 -999.00  +16.50   6.32     72  +11.50 1 1 1 1 1     0    0 4.55 -23.11 ZNESW 17.2 6.3 178.6 18.0 17.4 -21.1 17.2 -20.6 17.1 -19.6 17.4 -20.2
2025-12-25T21:31:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:31:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:31:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.812906
2025-12-25T21:31:20.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:31:20.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:31:20.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:31:20.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:31:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:31:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:30:49', tmtdew=5.51, humidity=69.96, cloud=0.0, wind=16.48, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:30:49', seeing=1.85, atlas_timestamp='2025-12-25T19:30:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:29:00')
2025-12-25T21:31:20.194 [DEBUG] [Thread-18828] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:31:20.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:31:20.289 [DEBUG] [Thread-18831] [transport.py] [_log()] starting thread (client mode): 0xb6b22590
2025-12-25T21:31:20.290 [DEBUG] [Thread-18831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:31:20.308 [DEBUG] [Thread-18831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:31:20.308 [INFO] [Thread-18831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:31:20.315 [DEBUG] [Thread-18831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:31:20.315 [DEBUG] [Thread-18831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:31:20.315 [DEBUG] [Thread-18831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] client lang: <none>
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] server lang: <none>
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] kex follows: False
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] Compression: none
2025-12-25T21:31:20.316 [DEBUG] [Thread-18831] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:31:20.372 [DEBUG] [Thread-18831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:31:20.373 [DEBUG] [Thread-18831] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:31:20.373 [DEBUG] [Thread-18831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:31:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:31:20.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:31:20.430 [DEBUG] [Thread-18831] [transport.py] [_log()] userauth is OK
2025-12-25T21:31:20.430 [DEBUG] [Thread-18831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:31:20.430 [DEBUG] [Thread-18831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:31:20.430 [DEBUG] [Thread-18831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:31:20.430 [DEBUG] [Thread-18831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:31:20.444 [INFO] [Thread-18831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:31:20.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:31:20.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:31:21.239 [DEBUG] [Thread-18831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:31:21.239 [DEBUG] [Thread-18831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:31:21.287 [DEBUG] [Thread-18831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:31:21.288 [DEBUG] [Thread-18831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:31:21.297 [DEBUG] [Thread-18831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:31:21.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:31:21.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:31:21.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:31:21.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:31:21.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:31:21.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:31:21.331 [DEBUG] [Thread-18831] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:31:27.805 [DEBUG] [Thread-18833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:32.372 [DEBUG] [Thread-18834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:47.422 [DEBUG] [Thread-18835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:47.559 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:47.561 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:31:51.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:31:51.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:31:51.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-25T21:31:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 31, 21), 5.52, 69.91, 0.0, 19.25, 16.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:31:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:31:21
2025-12-25T21:31:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:31:52.358 [DEBUG] [Thread-18836] [transport.py] [_log()] starting thread (client mode): 0xb6bbb490
2025-12-25T21:31:52.359 [DEBUG] [Thread-18836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:31:52.382 [DEBUG] [Thread-18836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:31:52.382 [INFO] [Thread-18836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:31:52.385 [DEBUG] [Thread-18836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:31:52.385 [DEBUG] [Thread-18836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] client lang: <none>
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] server lang: <none>
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] kex follows: False
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] Compression: none
2025-12-25T21:31:52.386 [DEBUG] [Thread-18836] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:31:52.403 [DEBUG] [Thread-18836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:31:52.404 [DEBUG] [Thread-18836] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:31:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:31:52.405 [DEBUG] [Thread-18836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:31:52.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:31:52.407 [DEBUG] [Thread-18836] [transport.py] [_log()] userauth is OK
2025-12-25T21:31:52.407 [DEBUG] [Thread-18836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:31:52.407 [DEBUG] [Thread-18836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:31:52.407 [DEBUG] [Thread-18836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:31:52.408 [DEBUG] [Thread-18836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:31:52.432 [INFO] [Thread-18836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:31:52.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:31:53.074 [DEBUG] [Thread-18836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:31:53.074 [DEBUG] [Thread-18836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:31:53.075 [DEBUG] [Thread-18836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:31:53.115 [DEBUG] [Thread-18836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:31:53.116 [DEBUG] [Thread-18836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:31:53.119 [DEBUG] [Thread-18836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:31:53.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:31:53.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:31:53.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:31:53.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:31:53.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:31:53.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:31:53.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:31:53.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:31:53.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:31:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.813254 -999.00  +16.40  16.21     72  +11.50 1 1 1 1 1     0    0 4.42 -23.21 ZNESW 11.8 16.2 204.4 20.9 17.4 -21.1 17.3 -20.9 17.1 -19.5 17.3 -20.3
2025-12-25T21:31:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:31:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:31:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.813254
2025-12-25T21:31:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:31:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:31:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:31:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:31:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:31:53.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:31:21', tmtdew=5.52, humidity=69.91, cloud=0.0, wind=19.25, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:31:21', seeing=1.85, atlas_timestamp='2025-12-25T19:31:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:29:00')
2025-12-25T21:31:53.146 [DEBUG] [Thread-18836] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:31:53.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-25T21:31:53.239 [DEBUG] [Thread-18839] [transport.py] [_log()] starting thread (client mode): 0xb6b003a0
2025-12-25T21:31:53.239 [DEBUG] [Thread-18839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:31:53.253 [DEBUG] [Thread-18839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:31:53.254 [INFO] [Thread-18839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:31:53.261 [DEBUG] [Thread-18839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:31:53.261 [DEBUG] [Thread-18839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:31:53.261 [DEBUG] [Thread-18839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] client lang: <none>
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] server lang: <none>
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] kex follows: False
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] Compression: none
2025-12-25T21:31:53.262 [DEBUG] [Thread-18839] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:31:53.319 [DEBUG] [Thread-18839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:31:53.320 [DEBUG] [Thread-18839] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:31:53.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:31:53.321 [DEBUG] [Thread-18839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:31:53.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:31:53.380 [DEBUG] [Thread-18839] [transport.py] [_log()] userauth is OK
2025-12-25T21:31:53.380 [DEBUG] [Thread-18839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:31:53.380 [DEBUG] [Thread-18839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:31:53.381 [DEBUG] [Thread-18839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:31:53.381 [DEBUG] [Thread-18839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:31:53.403 [INFO] [Thread-18839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:31:53.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-25T21:31:53.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:31:54.219 [DEBUG] [Thread-18839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:31:54.220 [DEBUG] [Thread-18839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:31:54.267 [DEBUG] [Thread-18839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:31:54.267 [DEBUG] [Thread-18839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:31:54.275 [DEBUG] [Thread-18839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:31:54.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:31: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-25T21:31:54.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-25T21:31:54.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:31:54.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:31:54.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:31:54.308 [DEBUG] [Thread-18839] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:32:02.460 [DEBUG] [Thread-18841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:17.520 [DEBUG] [Thread-18842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:24.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:32:24.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:32:24.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-25T21:32:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 31, 53), 5.5, 69.99, 0.0, 16.29, 16.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:32:25.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:31:53
2025-12-25T21:32:25.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:32:25.328 [DEBUG] [Thread-18843] [transport.py] [_log()] starting thread (client mode): 0xb95b0a90
2025-12-25T21:32:25.329 [DEBUG] [Thread-18843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:32:25.350 [DEBUG] [Thread-18843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:32:25.350 [INFO] [Thread-18843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:32:25.353 [DEBUG] [Thread-18843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:32:25.353 [DEBUG] [Thread-18843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:32:25.353 [DEBUG] [Thread-18843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:32:25.353 [DEBUG] [Thread-18843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:25.353 [DEBUG] [Thread-18843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:25.353 [DEBUG] [Thread-18843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] client lang: <none>
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] server lang: <none>
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] kex follows: False
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:32:25.354 [DEBUG] [Thread-18843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:32:25.355 [DEBUG] [Thread-18843] [transport.py] [_log()] Compression: none
2025-12-25T21:32:25.355 [DEBUG] [Thread-18843] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:32:25.375 [DEBUG] [Thread-18843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:32:25.376 [DEBUG] [Thread-18843] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:32:25.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:32:25.377 [DEBUG] [Thread-18843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:32:25.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:32:25.379 [DEBUG] [Thread-18843] [transport.py] [_log()] userauth is OK
2025-12-25T21:32:25.379 [DEBUG] [Thread-18843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:32:25.379 [DEBUG] [Thread-18843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:32:25.379 [DEBUG] [Thread-18843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:32:25.379 [DEBUG] [Thread-18843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:32:25.404 [INFO] [Thread-18843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:32:25.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:32:26.130 [DEBUG] [Thread-18843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:32:26.130 [DEBUG] [Thread-18843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:32:26.130 [DEBUG] [Thread-18843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:32:26.171 [DEBUG] [Thread-18843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:32:26.172 [DEBUG] [Thread-18843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:32:26.174 [DEBUG] [Thread-18843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:32:26.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:32:26.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:32:26.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:32:26.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:32:26.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:32:26.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:32:26.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.813948 -999.00  +16.40   6.90     72  +11.50 1 1 1 1 1     0    0 4.42 -25.55 ZNESW 4.7 6.9 219.8 14.7 17.4 -21.1 17.2 -20.7 17.1 -19.5 17.4 -20.4
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.813948
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:32:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:31:53', tmtdew=5.5, humidity=69.99, cloud=0.0, wind=16.29, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:31:53', seeing=1.72, atlas_timestamp='2025-12-25T19:32:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:29:00')
2025-12-25T21:32:26.193 [DEBUG] [Thread-18843] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:32:26.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-25T21:32:26.278 [DEBUG] [Thread-18846] [transport.py] [_log()] starting thread (client mode): 0xb6bb6a10
2025-12-25T21:32:26.278 [DEBUG] [Thread-18846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:32:26.293 [DEBUG] [Thread-18846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:32:26.293 [INFO] [Thread-18846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] client lang: <none>
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] server lang: <none>
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] kex follows: False
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] Compression: none
2025-12-25T21:32:26.301 [DEBUG] [Thread-18846] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:32:26.361 [DEBUG] [Thread-18846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:32:26.361 [DEBUG] [Thread-18846] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:32:26.361 [DEBUG] [Thread-18846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:32:26.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:32:26.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:32:26.418 [DEBUG] [Thread-18846] [transport.py] [_log()] userauth is OK
2025-12-25T21:32:26.418 [DEBUG] [Thread-18846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:32:26.418 [DEBUG] [Thread-18846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:32:26.418 [DEBUG] [Thread-18846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:32:26.418 [DEBUG] [Thread-18846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:32:26.436 [INFO] [Thread-18846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:32:26.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-25T21:32:26.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:32:27.285 [DEBUG] [Thread-18846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:32:27.285 [DEBUG] [Thread-18846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:32:27.333 [DEBUG] [Thread-18846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:32:27.333 [DEBUG] [Thread-18846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:32:27.341 [DEBUG] [Thread-18846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:32:27.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:32:27.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:32:27.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:32:27.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:32:27.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:32:27.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:32:27.386 [DEBUG] [Thread-18846] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:32:27.857 [DEBUG] [Thread-18848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:32.553 [DEBUG] [Thread-18849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:47.605 [DEBUG] [Thread-18850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:47.764 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:47.765 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:32:57.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:32:57.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:32:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:32:58.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 32, 25), 5.49, 70.03, 0.0, 16.5, 16.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:32:58.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:32:25
2025-12-25T21:32:58.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:32:58.421 [DEBUG] [Thread-18851] [transport.py] [_log()] starting thread (client mode): 0xb6b7f520
2025-12-25T21:32:58.421 [DEBUG] [Thread-18851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:32:58.442 [DEBUG] [Thread-18851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:32:58.442 [INFO] [Thread-18851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:32:58.445 [DEBUG] [Thread-18851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:32:58.445 [DEBUG] [Thread-18851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:32:58.445 [DEBUG] [Thread-18851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] client lang: <none>
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] server lang: <none>
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] kex follows: False
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] Compression: none
2025-12-25T21:32:58.446 [DEBUG] [Thread-18851] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:32:58.461 [DEBUG] [Thread-18851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:32:58.461 [DEBUG] [Thread-18851] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:32:58.461 [DEBUG] [Thread-18851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:32:58.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:32:58.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:32:58.462 [DEBUG] [Thread-18851] [transport.py] [_log()] userauth is OK
2025-12-25T21:32:58.462 [DEBUG] [Thread-18851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:32:58.462 [DEBUG] [Thread-18851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:32:58.462 [DEBUG] [Thread-18851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:32:58.462 [DEBUG] [Thread-18851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:32:58.471 [INFO] [Thread-18851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:32:58.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:32:59.114 [DEBUG] [Thread-18851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:32:59.114 [DEBUG] [Thread-18851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:32:59.114 [DEBUG] [Thread-18851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:32:59.154 [DEBUG] [Thread-18851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:32:59.154 [DEBUG] [Thread-18851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:32:59.157 [DEBUG] [Thread-18851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:32:59.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:32:59.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:32:59.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:32:59.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:32:59.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:32:59.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:32:59.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:32:59.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:32:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:32:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.814295 -999.00  +16.40   6.81     72  +11.50 1 1 1 1 1     0    0 4.38 -26.45 ZNESW 4.8 6.8 187.6 11.6 17.4 -21.1 17.2 -20.8 17.1 -19.6 17.4 -20.3
2025-12-25T21:32:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:32:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:32:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.814295
2025-12-25T21:32:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:32:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:32:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:32:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:32:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:32:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:32:25', tmtdew=5.49, humidity=70.03, cloud=0.0, wind=16.5, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:32:25', seeing=1.71, atlas_timestamp='2025-12-25T19:32:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:29:00')
2025-12-25T21:32:59.178 [DEBUG] [Thread-18851] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:32:59.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-25T21:32:59.261 [DEBUG] [Thread-18854] [transport.py] [_log()] starting thread (client mode): 0xb6b7f100
2025-12-25T21:32:59.261 [DEBUG] [Thread-18854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:32:59.275 [DEBUG] [Thread-18854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:32:59.275 [INFO] [Thread-18854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] client lang: <none>
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] server lang: <none>
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] kex follows: False
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] Compression: none
2025-12-25T21:32:59.283 [DEBUG] [Thread-18854] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:32:59.339 [DEBUG] [Thread-18854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:32:59.339 [DEBUG] [Thread-18854] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:32:59.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:32:59.340 [DEBUG] [Thread-18854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:32:59.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:32:59.397 [DEBUG] [Thread-18854] [transport.py] [_log()] userauth is OK
2025-12-25T21:32:59.397 [DEBUG] [Thread-18854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:32:59.397 [DEBUG] [Thread-18854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:32:59.397 [DEBUG] [Thread-18854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:32:59.397 [DEBUG] [Thread-18854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:32:59.415 [INFO] [Thread-18854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:32:59.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-25T21:32:59.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:33:00.248 [DEBUG] [Thread-18854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:33:00.248 [DEBUG] [Thread-18854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:33:00.295 [DEBUG] [Thread-18854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:33:00.296 [DEBUG] [Thread-18854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:33:00.304 [DEBUG] [Thread-18854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:33:00.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:33:00.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-25T21:33:00.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:33:00.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:33:00.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:33:00.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:33:00.337 [DEBUG] [Thread-18854] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:33:02.636 [DEBUG] [Thread-18856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:33:17.678 [DEBUG] [Thread-18857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:33:27.922 [DEBUG] [Thread-18858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:33:30.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:33:30.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:33:30.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-25T21:33:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 32, 57), 5.43, 70.06, 0.0, 18.65, 16.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:33:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:32:57
2025-12-25T21:33:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:33:31.418 [DEBUG] [Thread-18859] [transport.py] [_log()] starting thread (client mode): 0xb6bb8610
2025-12-25T21:33:31.418 [DEBUG] [Thread-18859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:33:31.437 [DEBUG] [Thread-18859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:33:31.437 [INFO] [Thread-18859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] client lang: <none>
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] server lang: <none>
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] kex follows: False
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:33:31.440 [DEBUG] [Thread-18859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:33:31.441 [DEBUG] [Thread-18859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:33:31.441 [DEBUG] [Thread-18859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:33:31.441 [DEBUG] [Thread-18859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:33:31.441 [DEBUG] [Thread-18859] [transport.py] [_log()] Compression: none
2025-12-25T21:33:31.441 [DEBUG] [Thread-18859] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:33:31.456 [DEBUG] [Thread-18859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:33:31.456 [DEBUG] [Thread-18859] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:33:31.456 [DEBUG] [Thread-18859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:33:31.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:33:31.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:33:31.457 [DEBUG] [Thread-18859] [transport.py] [_log()] userauth is OK
2025-12-25T21:33:31.457 [DEBUG] [Thread-18859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:33:31.457 [DEBUG] [Thread-18859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:33:31.457 [DEBUG] [Thread-18859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:33:31.457 [DEBUG] [Thread-18859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:33:31.472 [INFO] [Thread-18859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:33:31.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:33:32.132 [DEBUG] [Thread-18859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:33:32.132 [DEBUG] [Thread-18859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:33:32.132 [DEBUG] [Thread-18859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:33:32.173 [DEBUG] [Thread-18859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:33:32.173 [DEBUG] [Thread-18859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:33:32.176 [DEBUG] [Thread-18859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:33:32.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:33:32.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:33:32.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:33:32.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:33:32.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:33:32.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:33:32.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:33:32.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:33:32.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:33:32.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.814642 -999.00  +16.50   6.08     72  +11.50 1 1 1 1 1     0    0 4.40 -25.23 ZNESW 8.7 6.1 210.6 11.3 -999.0 -999.0 17.3 -20.8 17.1 -19.6 17.4 -20.5
2025-12-25T21:33:32.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:33:32.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:33:32.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.814642
2025-12-25T21:33:32.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:33:32.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:33:32.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:33:32.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:33:32.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:33:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:32:57', tmtdew=5.43, humidity=70.06, cloud=0.0, wind=18.65, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:33:30', seeing=1.39, atlas_timestamp='2025-12-25T19:33:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:31:00')
2025-12-25T21:33:32.201 [DEBUG] [Thread-18859] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:33:32.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-25T21:33:32.295 [DEBUG] [Thread-18862] [transport.py] [_log()] starting thread (client mode): 0xb6b22b90
2025-12-25T21:33:32.296 [DEBUG] [Thread-18862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:33:32.311 [DEBUG] [Thread-18862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:33:32.311 [INFO] [Thread-18862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] client lang: <none>
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] server lang: <none>
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] kex follows: False
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:33:32.319 [DEBUG] [Thread-18862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:33:32.320 [DEBUG] [Thread-18862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:33:32.320 [DEBUG] [Thread-18862] [transport.py] [_log()] Compression: none
2025-12-25T21:33:32.320 [DEBUG] [Thread-18862] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:33:32.376 [DEBUG] [Thread-18862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:33:32.377 [DEBUG] [Thread-18862] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:33:32.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:33:32.378 [DEBUG] [Thread-18862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:33:32.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:33:32.432 [DEBUG] [Thread-18862] [transport.py] [_log()] userauth is OK
2025-12-25T21:33:32.432 [DEBUG] [Thread-18862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:33:32.432 [DEBUG] [Thread-18862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:33:32.433 [DEBUG] [Thread-18862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:33:32.433 [DEBUG] [Thread-18862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:33:32.451 [INFO] [Thread-18862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:33:32.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-25T21:33:32.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:33:32.711 [DEBUG] [Thread-18864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:33:33.306 [DEBUG] [Thread-18862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:33:33.306 [DEBUG] [Thread-18862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:33:33.354 [DEBUG] [Thread-18862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:33:33.354 [DEBUG] [Thread-18862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:33:33.363 [DEBUG] [Thread-18862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:33:33.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:33:33.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-25T21:33:33.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-25T21:33:33.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:33:33.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:33:33.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:33:33.400 [DEBUG] [Thread-18862] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:33:47.762 [DEBUG] [Thread-18865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:33:47.967 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:33:47.969 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:02.800 [DEBUG] [Thread-18866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:03.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:34:03.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:34:03.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:34:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 33, 29), 5.41, 70.19, 0.0, 17.61, 16.2, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:34:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:33:29
2025-12-25T21:34:04.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:34:04.448 [DEBUG] [Thread-18867] [transport.py] [_log()] starting thread (client mode): 0xb6b02980
2025-12-25T21:34:04.448 [DEBUG] [Thread-18867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:34:04.469 [DEBUG] [Thread-18867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:34:04.469 [INFO] [Thread-18867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] client lang: <none>
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] server lang: <none>
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] kex follows: False
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:34:04.473 [DEBUG] [Thread-18867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:34:04.474 [DEBUG] [Thread-18867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:34:04.474 [DEBUG] [Thread-18867] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:34:04.474 [DEBUG] [Thread-18867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:34:04.474 [DEBUG] [Thread-18867] [transport.py] [_log()] Compression: none
2025-12-25T21:34:04.474 [DEBUG] [Thread-18867] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:34:04.491 [DEBUG] [Thread-18867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:34:04.492 [DEBUG] [Thread-18867] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:34:04.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:34:04.493 [DEBUG] [Thread-18867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:34:04.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:34:04.495 [DEBUG] [Thread-18867] [transport.py] [_log()] userauth is OK
2025-12-25T21:34:04.496 [DEBUG] [Thread-18867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:34:04.496 [DEBUG] [Thread-18867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:34:04.496 [DEBUG] [Thread-18867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:34:04.496 [DEBUG] [Thread-18867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:34:04.515 [INFO] [Thread-18867] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:34:04.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:34:05.176 [DEBUG] [Thread-18867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:34:05.177 [DEBUG] [Thread-18867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:34:05.177 [DEBUG] [Thread-18867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:34:05.218 [DEBUG] [Thread-18867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:34:05.218 [DEBUG] [Thread-18867] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:34:05.221 [DEBUG] [Thread-18867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:34:05.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:34:05.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:34:05.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:34:05.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:34:05.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:34:05.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:34:05.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:34:05.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:34:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:34:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.814989 -999.00  +16.40   6.89     72  +11.50 1 1 1 1 1     0    0 4.37 -25.85 ZNESW 10.3 6.9 212.5 13.6 17.3 -21.2 17.2 -20.7 17.0 -19.6 17.3 -20.4
2025-12-25T21:34:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:34:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:34:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.814989
2025-12-25T21:34:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:34:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:34:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:34:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:34:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:34:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:33:29', tmtdew=5.41, humidity=70.19, cloud=0.0, wind=17.61, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:34:02', seeing=1.34, atlas_timestamp='2025-12-25T19:33:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:31:00')
2025-12-25T21:34:05.246 [DEBUG] [Thread-18867] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:34:05.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-25T21:34:05.342 [DEBUG] [Thread-18870] [transport.py] [_log()] starting thread (client mode): 0xb6b21090
2025-12-25T21:34:05.342 [DEBUG] [Thread-18870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:34:05.358 [DEBUG] [Thread-18870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:34:05.358 [INFO] [Thread-18870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:34:05.365 [DEBUG] [Thread-18870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] client lang: <none>
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] server lang: <none>
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] kex follows: False
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] Compression: none
2025-12-25T21:34:05.366 [DEBUG] [Thread-18870] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:34:05.426 [DEBUG] [Thread-18870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:34:05.427 [DEBUG] [Thread-18870] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:34:05.428 [DEBUG] [Thread-18870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:34:05.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:34:05.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:34:05.486 [DEBUG] [Thread-18870] [transport.py] [_log()] userauth is OK
2025-12-25T21:34:05.486 [DEBUG] [Thread-18870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:34:05.487 [DEBUG] [Thread-18870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:34:05.487 [DEBUG] [Thread-18870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:34:05.487 [DEBUG] [Thread-18870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:34:05.513 [INFO] [Thread-18870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:34:05.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-25T21:34:05.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:34:06.378 [DEBUG] [Thread-18870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:34:06.378 [DEBUG] [Thread-18870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:34:06.426 [DEBUG] [Thread-18870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:34:06.426 [DEBUG] [Thread-18870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:34:06.438 [DEBUG] [Thread-18870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:34:06.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:34:06.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-25T21:34:06.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-25T21:34:06.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:34:06.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:34:06.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:34:06.475 [DEBUG] [Thread-18870] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:34:17.829 [DEBUG] [Thread-18872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:27.982 [DEBUG] [Thread-18873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:32.868 [DEBUG] [Thread-18874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:36.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:34:36.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:34:36.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-25T21:34:37.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 34, 33), 5.59, 69.48, 0.0, 14.22, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:34:37.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:34:33
2025-12-25T21:34:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:34:37.492 [DEBUG] [Thread-18875] [transport.py] [_log()] starting thread (client mode): 0xb6b02f20
2025-12-25T21:34:37.492 [DEBUG] [Thread-18875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:34:37.512 [DEBUG] [Thread-18875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:34:37.512 [INFO] [Thread-18875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:34:37.515 [DEBUG] [Thread-18875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] client lang: <none>
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] server lang: <none>
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] kex follows: False
2025-12-25T21:34:37.516 [DEBUG] [Thread-18875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:34:37.517 [DEBUG] [Thread-18875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:34:37.517 [DEBUG] [Thread-18875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:34:37.517 [DEBUG] [Thread-18875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:34:37.517 [DEBUG] [Thread-18875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:34:37.517 [DEBUG] [Thread-18875] [transport.py] [_log()] Compression: none
2025-12-25T21:34:37.517 [DEBUG] [Thread-18875] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:34:37.534 [DEBUG] [Thread-18875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:34:37.535 [DEBUG] [Thread-18875] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:34:37.535 [DEBUG] [Thread-18875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:34:37.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:34:37.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:34:37.537 [DEBUG] [Thread-18875] [transport.py] [_log()] userauth is OK
2025-12-25T21:34:37.538 [DEBUG] [Thread-18875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:34:37.538 [DEBUG] [Thread-18875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:34:37.538 [DEBUG] [Thread-18875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:34:37.538 [DEBUG] [Thread-18875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:34:37.563 [INFO] [Thread-18875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:34:37.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:34:38.193 [DEBUG] [Thread-18875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:34:38.193 [DEBUG] [Thread-18875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:34:38.194 [DEBUG] [Thread-18875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:34:38.234 [DEBUG] [Thread-18875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:34:38.235 [DEBUG] [Thread-18875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:34:38.238 [DEBUG] [Thread-18875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:34:38.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:34:38.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:34:38.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:34:38.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:34:38.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:34:38.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:34:38.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:34:38.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:34:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:34:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.815337 -999.00  +16.40   5.79     72  +11.50 1 1 1 1 1     0    0 4.42 -25.08 ZNESW 10.1 5.8 208.6 11.8 17.4 -21.2 17.2 -20.8 17.1 -19.6 17.3 -20.4
2025-12-25T21:34:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:34:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:34:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.815337
2025-12-25T21:34:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:34:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:34:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:34:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:34:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:34:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:34:33', tmtdew=5.59, humidity=69.48, cloud=0.0, wind=14.22, 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-25T21:34:34', seeing=1.31, atlas_timestamp='2025-12-25T19:34:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:31:00')
2025-12-25T21:34:38.264 [DEBUG] [Thread-18875] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:34:38.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-25T21:34:38.358 [DEBUG] [Thread-18878] [transport.py] [_log()] starting thread (client mode): 0xb6ba9b10
2025-12-25T21:34:38.359 [DEBUG] [Thread-18878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:34:38.374 [DEBUG] [Thread-18878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:34:38.374 [INFO] [Thread-18878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] client lang: <none>
2025-12-25T21:34:38.382 [DEBUG] [Thread-18878] [transport.py] [_log()] server lang: <none>
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] kex follows: False
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] Compression: none
2025-12-25T21:34:38.383 [DEBUG] [Thread-18878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:34:38.441 [DEBUG] [Thread-18878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:34:38.442 [DEBUG] [Thread-18878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:34:38.443 [DEBUG] [Thread-18878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:34:38.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:34:38.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:34:38.498 [DEBUG] [Thread-18878] [transport.py] [_log()] userauth is OK
2025-12-25T21:34:38.498 [DEBUG] [Thread-18878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:34:38.498 [DEBUG] [Thread-18878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:34:38.499 [DEBUG] [Thread-18878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:34:38.499 [DEBUG] [Thread-18878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:34:38.517 [INFO] [Thread-18878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:34:38.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-25T21:34:38.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:34:39.346 [DEBUG] [Thread-18878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:34:39.347 [DEBUG] [Thread-18878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:34:39.395 [DEBUG] [Thread-18878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:34:39.395 [DEBUG] [Thread-18878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:34:39.404 [DEBUG] [Thread-18878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:34:39.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:34:39.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-25T21:34:39.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:34:39.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:34:39.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:34:39.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:34:39.441 [DEBUG] [Thread-18878] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:34:47.906 [DEBUG] [Thread-18880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:48.174 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:34:48.175 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:02.958 [DEBUG] [Thread-18881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:09.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:35:09.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:35:09.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-25T21:35:10.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 35, 5), 5.39, 70.24, 0.0, 14.96, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:35:10.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:35:05
2025-12-25T21:35:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:35:10.445 [DEBUG] [Thread-18882] [transport.py] [_log()] starting thread (client mode): 0xb6ba9cf0
2025-12-25T21:35:10.445 [DEBUG] [Thread-18882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:35:10.465 [DEBUG] [Thread-18882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:35:10.465 [INFO] [Thread-18882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:10.466 [DEBUG] [Thread-18882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] client lang: <none>
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] server lang: <none>
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] kex follows: False
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] Compression: none
2025-12-25T21:35:10.467 [DEBUG] [Thread-18882] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:35:10.478 [DEBUG] [Thread-18882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:35:10.478 [DEBUG] [Thread-18882] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:35:10.479 [DEBUG] [Thread-18882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:35:10.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:35:10.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:35:10.480 [DEBUG] [Thread-18882] [transport.py] [_log()] userauth is OK
2025-12-25T21:35:10.480 [DEBUG] [Thread-18882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:35:10.480 [DEBUG] [Thread-18882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:35:10.480 [DEBUG] [Thread-18882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:35:10.480 [DEBUG] [Thread-18882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:35:10.502 [INFO] [Thread-18882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:35:10.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:35:13.888 [DEBUG] [Thread-18882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:35:13.889 [DEBUG] [Thread-18882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:35:13.889 [DEBUG] [Thread-18882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:35:13.930 [DEBUG] [Thread-18882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:35:13.930 [DEBUG] [Thread-18882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:35:13.933 [DEBUG] [Thread-18882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:35:13.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:35:13.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:35:13.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:35:13.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:35:14.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:35:14.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:35:14.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:35:14.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:35:14.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:35:14.014 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-25T21:35:14.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:35:05', tmtdew=5.39, humidity=70.24, cloud=0.0, wind=14.96, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:35:06', seeing=1.31, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:31:00')
2025-12-25T21:35:14.015 [DEBUG] [Thread-18882] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:35:14.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-25T21:35:14.098 [DEBUG] [Thread-18885] [transport.py] [_log()] starting thread (client mode): 0xb6b77b50
2025-12-25T21:35:14.098 [DEBUG] [Thread-18885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:35:14.113 [DEBUG] [Thread-18885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:35:14.113 [INFO] [Thread-18885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] client lang: <none>
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] server lang: <none>
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] kex follows: False
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:35:14.121 [DEBUG] [Thread-18885] [transport.py] [_log()] Compression: none
2025-12-25T21:35:14.122 [DEBUG] [Thread-18885] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:35:14.180 [DEBUG] [Thread-18885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:35:14.180 [DEBUG] [Thread-18885] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:35:14.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:35:14.181 [DEBUG] [Thread-18885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:35:14.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:35:14.236 [DEBUG] [Thread-18885] [transport.py] [_log()] userauth is OK
2025-12-25T21:35:14.237 [DEBUG] [Thread-18885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:35:14.237 [DEBUG] [Thread-18885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:35:14.237 [DEBUG] [Thread-18885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:35:14.237 [DEBUG] [Thread-18885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:35:14.255 [INFO] [Thread-18885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:35:14.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-25T21:35:14.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:35:15.089 [DEBUG] [Thread-18885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:35:15.089 [DEBUG] [Thread-18885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:35:15.137 [DEBUG] [Thread-18885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:35:15.137 [DEBUG] [Thread-18885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:35:15.146 [DEBUG] [Thread-18885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:35:15.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:35:15.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:35:15.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-25T21:35:15.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:35:15.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:35:15.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:35:15.190 [DEBUG] [Thread-18885] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:35:17.993 [DEBUG] [Thread-18887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:28.041 [DEBUG] [Thread-18888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:33.052 [DEBUG] [Thread-18889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:42.195 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:35:45.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:35:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:35:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 35, 37), 5.34, 70.24, 0.0, 13.85, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:35:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:35:37
2025-12-25T21:35:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:35:46.184 [DEBUG] [Thread-18890] [transport.py] [_log()] starting thread (client mode): 0xb9559cc0
2025-12-25T21:35:46.184 [DEBUG] [Thread-18890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:35:46.204 [DEBUG] [Thread-18890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:35:46.204 [INFO] [Thread-18890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] client lang: <none>
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] server lang: <none>
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] kex follows: False
2025-12-25T21:35:46.205 [DEBUG] [Thread-18890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:35:46.206 [DEBUG] [Thread-18890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:35:46.206 [DEBUG] [Thread-18890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:35:46.206 [DEBUG] [Thread-18890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:35:46.206 [DEBUG] [Thread-18890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:35:46.206 [DEBUG] [Thread-18890] [transport.py] [_log()] Compression: none
2025-12-25T21:35:46.206 [DEBUG] [Thread-18890] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:35:46.218 [DEBUG] [Thread-18890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:35:46.218 [DEBUG] [Thread-18890] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:35:46.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:35:46.219 [DEBUG] [Thread-18890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:35:46.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:35:46.221 [DEBUG] [Thread-18890] [transport.py] [_log()] userauth is OK
2025-12-25T21:35:46.222 [DEBUG] [Thread-18890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:35:46.222 [DEBUG] [Thread-18890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:35:46.222 [DEBUG] [Thread-18890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:35:46.222 [DEBUG] [Thread-18890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:35:46.258 [INFO] [Thread-18890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:35:46.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:35:46.901 [DEBUG] [Thread-18890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:35:46.901 [DEBUG] [Thread-18890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:35:46.901 [DEBUG] [Thread-18890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:35:46.942 [DEBUG] [Thread-18890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:35:46.942 [DEBUG] [Thread-18890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:35:46.946 [DEBUG] [Thread-18890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:35:46.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:35:46.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:35:46.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:35:46.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:35:46.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:35:46.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:35:46.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:35:46.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:35:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:35:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.815684 -999.00  +16.40  10.07     73  +11.50 1 1 1 1 1     0    0 4.41 -24.77 ZNESW 13.9 10.1 201.1 16.6 17.3 -21.4 17.2 -20.8 17.0 -19.7 17.3 -20.6
2025-12-25T21:35:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:35:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:35:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.815684
2025-12-25T21:35:46.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:35:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:35:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:35:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:35:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:35:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:35:37', tmtdew=5.34, humidity=70.24, cloud=0.0, wind=13.85, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:35:38', seeing=1.16, atlas_timestamp='2025-12-25T19:34:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:31:00')
2025-12-25T21:35:46.974 [DEBUG] [Thread-18890] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:35:47.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-25T21:35:47.066 [DEBUG] [Thread-18893] [transport.py] [_log()] starting thread (client mode): 0xb6bb9150
2025-12-25T21:35:47.067 [DEBUG] [Thread-18893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:35:47.082 [DEBUG] [Thread-18893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:35:47.082 [INFO] [Thread-18893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:35:47.089 [DEBUG] [Thread-18893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:35:47.089 [DEBUG] [Thread-18893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] client lang: <none>
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] server lang: <none>
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] kex follows: False
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:35:47.090 [DEBUG] [Thread-18893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:35:47.091 [DEBUG] [Thread-18893] [transport.py] [_log()] Compression: none
2025-12-25T21:35:47.091 [DEBUG] [Thread-18893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:35:47.152 [DEBUG] [Thread-18893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:35:47.152 [DEBUG] [Thread-18893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:35:47.153 [DEBUG] [Thread-18893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:35:47.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:35:47.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:35:47.208 [DEBUG] [Thread-18893] [transport.py] [_log()] userauth is OK
2025-12-25T21:35:47.208 [DEBUG] [Thread-18893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:35:47.208 [DEBUG] [Thread-18893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:35:47.208 [DEBUG] [Thread-18893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:35:47.208 [DEBUG] [Thread-18893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:35:47.227 [INFO] [Thread-18893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:35:47.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:35:47.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:35:48.081 [DEBUG] [Thread-18895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:48.085 [DEBUG] [Thread-18893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:35:48.085 [DEBUG] [Thread-18893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:35:48.135 [DEBUG] [Thread-18893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:35:48.135 [DEBUG] [Thread-18893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:35:48.144 [DEBUG] [Thread-18893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:35:48.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:35:48.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:35:48.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:35:48.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:35:48.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:35:48.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:35:48.181 [DEBUG] [Thread-18893] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:35:48.411 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:35:48.412 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:03.136 [DEBUG] [Thread-18896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:18.168 [DEBUG] [Thread-18897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:36:18.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:36:18.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-25T21:36:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 36, 9), 5.32, 70.34, 0.0, 15.37, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:36:18.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:36:09
2025-12-25T21:36:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:36:19.234 [DEBUG] [Thread-18898] [transport.py] [_log()] starting thread (client mode): 0xb6bb9d50
2025-12-25T21:36:19.234 [DEBUG] [Thread-18898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:36:19.252 [DEBUG] [Thread-18898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:36:19.252 [INFO] [Thread-18898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] client lang: <none>
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] server lang: <none>
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] kex follows: False
2025-12-25T21:36:19.255 [DEBUG] [Thread-18898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:36:19.256 [DEBUG] [Thread-18898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:36:19.256 [DEBUG] [Thread-18898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:36:19.256 [DEBUG] [Thread-18898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:36:19.256 [DEBUG] [Thread-18898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:36:19.256 [DEBUG] [Thread-18898] [transport.py] [_log()] Compression: none
2025-12-25T21:36:19.256 [DEBUG] [Thread-18898] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:36:19.263 [DEBUG] [Thread-18898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:36:19.263 [DEBUG] [Thread-18898] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:36:19.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:36:19.264 [DEBUG] [Thread-18898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:36:19.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:36:19.264 [DEBUG] [Thread-18898] [transport.py] [_log()] userauth is OK
2025-12-25T21:36:19.264 [DEBUG] [Thread-18898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:36:19.264 [DEBUG] [Thread-18898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:36:19.264 [DEBUG] [Thread-18898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:36:19.264 [DEBUG] [Thread-18898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:36:19.274 [INFO] [Thread-18898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:36:19.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:36:20.038 [DEBUG] [Thread-18898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:36:20.038 [DEBUG] [Thread-18898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:36:20.038 [DEBUG] [Thread-18898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:36:20.080 [DEBUG] [Thread-18898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:36:20.080 [DEBUG] [Thread-18898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:36:20.082 [DEBUG] [Thread-18898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:36:20.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:36:20.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:36:20.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:36:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:36:20.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:36:20.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:36:20.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.816378 -999.00  +16.40   9.73     73  +11.50 1 1 1 1 1     0    0 4.27 -27.51 ZNESW 9.0 9.7 190.1 17.3 17.3 -21.3 17.2 -20.8 17.0 -19.7 17.3 -20.5
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.816378
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:36:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:36:09', tmtdew=5.32, humidity=70.34, cloud=0.0, wind=15.37, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:36:10', seeing=1.24, atlas_timestamp='2025-12-25T19:35:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.10074999999999967, 0.11325000000000074, 0.17225000000000001, 0.1014999999999997, 0.07450000000000045, 0.1172500000000003, 0.15399999999999991, 0.17625000000000135, 0.11949999999999861, 0.11800000000000033, 0.17624999999999957, 0.06099999999999994, 0.10599999999999987, 0.13824999999999932, 0.12399999999999878, 0.1280000000000001, 0.04374999999999929, 0.1485000000000003, 0.13899999999999935, 0.12875000000000014, 0.15199999999999747, 0.15774999999999828, 0.1802500000000009, 0.14175000000000004, 0.07099999999999973, 0.1355000000000004, 0.24075000000000024, 0.198500000000001, 0.28300000000000036, 0.20000000000000107, 0.2510000000000012, 0.21700000000000053, 0.13374999999999915], zp_timestamp='2025-12-25T19:31:00')
2025-12-25T21:36:20.102 [DEBUG] [Thread-18898] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:36:20.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-25T21:36:20.184 [DEBUG] [Thread-18901] [transport.py] [_log()] starting thread (client mode): 0xb6babb50
2025-12-25T21:36:20.184 [DEBUG] [Thread-18901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:36:20.199 [DEBUG] [Thread-18901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:36:20.199 [INFO] [Thread-18901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] client lang: <none>
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] server lang: <none>
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] kex follows: False
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] Compression: none
2025-12-25T21:36:20.207 [DEBUG] [Thread-18901] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:36:20.265 [DEBUG] [Thread-18901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:36:20.265 [DEBUG] [Thread-18901] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:36:20.265 [DEBUG] [Thread-18901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:36:20.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:36:20.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:36:20.322 [DEBUG] [Thread-18901] [transport.py] [_log()] userauth is OK
2025-12-25T21:36:20.322 [DEBUG] [Thread-18901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:36:20.322 [DEBUG] [Thread-18901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:36:20.322 [DEBUG] [Thread-18901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:36:20.322 [DEBUG] [Thread-18901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:36:20.336 [INFO] [Thread-18901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:36:20.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-25T21:36:20.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:36:21.180 [DEBUG] [Thread-18901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:36:21.180 [DEBUG] [Thread-18901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:36:21.228 [DEBUG] [Thread-18901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:36:21.228 [DEBUG] [Thread-18901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:36:21.236 [DEBUG] [Thread-18901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:36:21.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:36:21.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-25T21:36:21.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-25T21:36:21.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:36:21.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:36:21.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:36:21.267 [DEBUG] [Thread-18901] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:36:28.111 [DEBUG] [Thread-18903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:33.201 [DEBUG] [Thread-18904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:48.250 [DEBUG] [Thread-18905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:48.613 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:48.614 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:36:51.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:36:51.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:36:51.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-25T21:36:52.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 36, 41), 5.37, 70.37, 0.0, 14.08, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:36:52.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:36:41
2025-12-25T21:36:52.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:36:52.282 [DEBUG] [Thread-18906] [transport.py] [_log()] starting thread (client mode): 0xb6b00d00
2025-12-25T21:36:52.282 [DEBUG] [Thread-18906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:36:52.303 [DEBUG] [Thread-18906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:36:52.303 [INFO] [Thread-18906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] client lang: <none>
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] server lang: <none>
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] kex follows: False
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] Compression: none
2025-12-25T21:36:52.306 [DEBUG] [Thread-18906] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:36:52.324 [DEBUG] [Thread-18906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:36:52.325 [DEBUG] [Thread-18906] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:36:52.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:36:52.326 [DEBUG] [Thread-18906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:36:52.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:36:52.328 [DEBUG] [Thread-18906] [transport.py] [_log()] userauth is OK
2025-12-25T21:36:52.328 [DEBUG] [Thread-18906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:36:52.328 [DEBUG] [Thread-18906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:36:52.328 [DEBUG] [Thread-18906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:36:52.328 [DEBUG] [Thread-18906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:36:52.341 [INFO] [Thread-18906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:36:52.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:36:52.964 [DEBUG] [Thread-18906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:36:52.964 [DEBUG] [Thread-18906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:36:52.964 [DEBUG] [Thread-18906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:36:53.005 [DEBUG] [Thread-18906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:36:53.005 [DEBUG] [Thread-18906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:36:53.008 [DEBUG] [Thread-18906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:36:53.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:36:53.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:36:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:36:53.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:36:53.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:36:53.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:36:53.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:36:53.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:36:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:36:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.816725 -999.00  +16.30   5.55     73  +11.50 1 1 1 1 1     0    0 4.32 -28.24 ZNESW 10.0 5.5 211.8 14.8 17.3 -21.2 17.2 -21.0 17.0 -19.6 17.2 -20.4
2025-12-25T21:36:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:36:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:36:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.816725
2025-12-25T21:36:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:36:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:36:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:36:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:36:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:36:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:36:41', tmtdew=5.37, humidity=70.37, cloud=0.0, wind=14.08, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:36:42', seeing=1.26, atlas_timestamp='2025-12-25T19:36:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:35:00')
2025-12-25T21:36:53.035 [DEBUG] [Thread-18906] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:36:53.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-25T21:36:53.127 [DEBUG] [Thread-18909] [transport.py] [_log()] starting thread (client mode): 0xb6bf7eb0
2025-12-25T21:36:53.128 [DEBUG] [Thread-18909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:36:53.142 [DEBUG] [Thread-18909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:36:53.142 [INFO] [Thread-18909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:36:53.150 [DEBUG] [Thread-18909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] client lang: <none>
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] server lang: <none>
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] kex follows: False
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] Compression: none
2025-12-25T21:36:53.151 [DEBUG] [Thread-18909] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:36:53.208 [DEBUG] [Thread-18909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:36:53.208 [DEBUG] [Thread-18909] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:36:53.208 [DEBUG] [Thread-18909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:36:53.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:36:53.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:36:53.265 [DEBUG] [Thread-18909] [transport.py] [_log()] userauth is OK
2025-12-25T21:36:53.266 [DEBUG] [Thread-18909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:36:53.266 [DEBUG] [Thread-18909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:36:53.266 [DEBUG] [Thread-18909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:36:53.266 [DEBUG] [Thread-18909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:36:53.279 [INFO] [Thread-18909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:36:53.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-25T21:36:53.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:36:54.095 [DEBUG] [Thread-18909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:36:54.095 [DEBUG] [Thread-18909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:36:54.143 [DEBUG] [Thread-18909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:36:54.143 [DEBUG] [Thread-18909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:36:54.152 [DEBUG] [Thread-18909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:36:54.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:36:54.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-25T21:36:54.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:36:54.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:36:54.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:36:54.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:36:54.186 [DEBUG] [Thread-18909] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:37:03.277 [DEBUG] [Thread-18911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:18.332 [DEBUG] [Thread-18912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:24.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:37:24.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:37:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:37:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 37, 13), 5.34, 70.49, 0.0, 14.19, 16.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:37:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:37:13
2025-12-25T21:37:25.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:37:25.162 [DEBUG] [Thread-18913] [transport.py] [_log()] starting thread (client mode): 0xb6bf51b0
2025-12-25T21:37:25.162 [DEBUG] [Thread-18913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:37:25.181 [DEBUG] [Thread-18913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:37:25.181 [INFO] [Thread-18913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] client lang: <none>
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] server lang: <none>
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] kex follows: False
2025-12-25T21:37:25.185 [DEBUG] [Thread-18913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:37:25.186 [DEBUG] [Thread-18913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:37:25.186 [DEBUG] [Thread-18913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:37:25.186 [DEBUG] [Thread-18913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:37:25.186 [DEBUG] [Thread-18913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:37:25.186 [DEBUG] [Thread-18913] [transport.py] [_log()] Compression: none
2025-12-25T21:37:25.186 [DEBUG] [Thread-18913] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:37:25.203 [DEBUG] [Thread-18913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:37:25.204 [DEBUG] [Thread-18913] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:37:25.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:37:25.205 [DEBUG] [Thread-18913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:37:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:37:25.207 [DEBUG] [Thread-18913] [transport.py] [_log()] userauth is OK
2025-12-25T21:37:25.207 [DEBUG] [Thread-18913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:37:25.208 [DEBUG] [Thread-18913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:37:25.208 [DEBUG] [Thread-18913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:37:25.208 [DEBUG] [Thread-18913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:37:25.244 [INFO] [Thread-18913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:37:25.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:37:26.044 [DEBUG] [Thread-18913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:37:26.044 [DEBUG] [Thread-18913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:37:26.044 [DEBUG] [Thread-18913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:37:26.085 [DEBUG] [Thread-18913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:37:26.085 [DEBUG] [Thread-18913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:37:26.088 [DEBUG] [Thread-18913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:37:26.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:37:26.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:37:26.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:37:26.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:37:26.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:37:26.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:37:26.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:37:26.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:37:26.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.817072 -999.00  +16.30   8.04     73  +11.50 1 1 1 1 1     0    0 4.20 -28.96 ZNESW 5.7 8.0 228.8 11.6 17.3 -21.3 17.2 -20.9 17.0 -19.7 17.3 -20.6
2025-12-25T21:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.817072
2025-12-25T21:37:26.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:37:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:37:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:37:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:37:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:37:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:37:13', tmtdew=5.34, humidity=70.49, cloud=0.0, wind=14.19, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:37:14', seeing=1.19, atlas_timestamp='2025-12-25T19:36:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:35:00')
2025-12-25T21:37:26.114 [DEBUG] [Thread-18913] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:37:26.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-25T21:37:26.211 [DEBUG] [Thread-18916] [transport.py] [_log()] starting thread (client mode): 0xb6b76c20
2025-12-25T21:37:26.211 [DEBUG] [Thread-18916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:37:26.227 [DEBUG] [Thread-18916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:37:26.227 [INFO] [Thread-18916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:37:26.235 [DEBUG] [Thread-18916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:37:26.235 [DEBUG] [Thread-18916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:37:26.235 [DEBUG] [Thread-18916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:37:26.235 [DEBUG] [Thread-18916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] client lang: <none>
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] server lang: <none>
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] kex follows: False
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] Compression: none
2025-12-25T21:37:26.236 [DEBUG] [Thread-18916] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:37:26.293 [DEBUG] [Thread-18916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:37:26.294 [DEBUG] [Thread-18916] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:37:26.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:37:26.295 [DEBUG] [Thread-18916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:37:26.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:37:26.349 [DEBUG] [Thread-18916] [transport.py] [_log()] userauth is OK
2025-12-25T21:37:26.349 [DEBUG] [Thread-18916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:37:26.350 [DEBUG] [Thread-18916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:37:26.350 [DEBUG] [Thread-18916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:37:26.350 [DEBUG] [Thread-18916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:37:26.369 [INFO] [Thread-18916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:37:26.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-25T21:37:26.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:37:27.241 [DEBUG] [Thread-18916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:37:27.242 [DEBUG] [Thread-18916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:37:27.290 [DEBUG] [Thread-18916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:37:27.290 [DEBUG] [Thread-18916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:37:27.299 [DEBUG] [Thread-18916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:37:27.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:37:27.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-25T21:37:27.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:37:27.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:37:27.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:37:27.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:37:27.336 [DEBUG] [Thread-18916] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:37:28.175 [DEBUG] [Thread-18918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:33.368 [DEBUG] [Thread-18919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:48.419 [DEBUG] [Thread-18920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:48.877 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:48.878 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:37:57.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:37:57.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:37:57.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-25T21:37:58.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 37, 46), 5.33, 70.54, 0.0, 12.51, 16.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:37:58.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:37:46
2025-12-25T21:37:58.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:37:58.345 [DEBUG] [Thread-18921] [transport.py] [_log()] starting thread (client mode): 0xb6b77790
2025-12-25T21:37:58.345 [DEBUG] [Thread-18921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:37:58.365 [DEBUG] [Thread-18921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:37:58.365 [INFO] [Thread-18921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:37:58.368 [DEBUG] [Thread-18921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:37:58.368 [DEBUG] [Thread-18921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:37:58.368 [DEBUG] [Thread-18921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:37:58.368 [DEBUG] [Thread-18921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:58.368 [DEBUG] [Thread-18921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] client lang: <none>
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] server lang: <none>
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] kex follows: False
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] Compression: none
2025-12-25T21:37:58.369 [DEBUG] [Thread-18921] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:37:58.386 [DEBUG] [Thread-18921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:37:58.386 [DEBUG] [Thread-18921] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:37:58.387 [DEBUG] [Thread-18921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:37:58.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:37:58.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:37:58.389 [DEBUG] [Thread-18921] [transport.py] [_log()] userauth is OK
2025-12-25T21:37:58.389 [DEBUG] [Thread-18921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:37:58.390 [DEBUG] [Thread-18921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:37:58.390 [DEBUG] [Thread-18921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:37:58.390 [DEBUG] [Thread-18921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:37:58.416 [INFO] [Thread-18921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:37:58.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:37:59.060 [DEBUG] [Thread-18921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:37:59.061 [DEBUG] [Thread-18921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:37:59.061 [DEBUG] [Thread-18921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:37:59.101 [DEBUG] [Thread-18921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:37:59.102 [DEBUG] [Thread-18921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:37:59.105 [DEBUG] [Thread-18921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:37:59.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:37:59.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:37:59.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:37:59.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:37:59.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:37:59.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:37:59.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:37:59.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:37:59.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:37:59.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.817420 -999.00  +16.30   8.04     73  +11.50 1 1 1 1 1     0    0 4.18 -31.67 ZNESW 7.8 8.0 251.1 13.5 17.3 -21.4 17.2 -21.0 17.0 -19.7 17.3 -20.5
2025-12-25T21:37:59.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:37:59.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:37:59.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.817420
2025-12-25T21:37:59.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:37:59.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:37:59.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:37:59.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:37:59.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:37:59.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:37:46', tmtdew=5.33, humidity=70.54, cloud=0.0, wind=12.51, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:37:46', seeing=1.26, atlas_timestamp='2025-12-25T19:37:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:35:00')
2025-12-25T21:37:59.130 [DEBUG] [Thread-18921] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:37:59.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:37:59.224 [DEBUG] [Thread-18924] [transport.py] [_log()] starting thread (client mode): 0xb6b77df0
2025-12-25T21:37:59.224 [DEBUG] [Thread-18924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:37:59.240 [DEBUG] [Thread-18924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:37:59.240 [INFO] [Thread-18924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:37:59.247 [DEBUG] [Thread-18924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:37:59.248 [DEBUG] [Thread-18924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] client lang: <none>
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] server lang: <none>
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] kex follows: False
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:37:59.249 [DEBUG] [Thread-18924] [transport.py] [_log()] Compression: none
2025-12-25T21:37:59.250 [DEBUG] [Thread-18924] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:37:59.304 [DEBUG] [Thread-18924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:37:59.305 [DEBUG] [Thread-18924] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:37:59.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:37:59.306 [DEBUG] [Thread-18924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:37:59.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:37:59.360 [DEBUG] [Thread-18924] [transport.py] [_log()] userauth is OK
2025-12-25T21:37:59.360 [DEBUG] [Thread-18924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:37:59.360 [DEBUG] [Thread-18924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:37:59.360 [DEBUG] [Thread-18924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:37:59.361 [DEBUG] [Thread-18924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:37:59.379 [INFO] [Thread-18924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:37:59.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:37:59.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:38:00.195 [DEBUG] [Thread-18924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:38:00.195 [DEBUG] [Thread-18924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:38:00.243 [DEBUG] [Thread-18924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:38:00.243 [DEBUG] [Thread-18924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:38:00.253 [DEBUG] [Thread-18924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:38:00.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:38:00.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-25T21:38:00.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-25T21:38:00.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:38:00.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:38:00.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:38:00.288 [DEBUG] [Thread-18924] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:38:03.452 [DEBUG] [Thread-18926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:38:18.499 [DEBUG] [Thread-18927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:38:28.233 [DEBUG] [Thread-18928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:38:30.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:38:30.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:38:30.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-25T21:38:30.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 38, 18), 5.33, 70.54, 0.0, 11.63, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:38:30.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:38:18
2025-12-25T21:38:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:38:31.277 [DEBUG] [Thread-18929] [transport.py] [_log()] starting thread (client mode): 0xb6ba9b10
2025-12-25T21:38:31.277 [DEBUG] [Thread-18929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:38:31.297 [DEBUG] [Thread-18929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:38:31.298 [INFO] [Thread-18929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] client lang: <none>
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] server lang: <none>
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] kex follows: False
2025-12-25T21:38:31.301 [DEBUG] [Thread-18929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:38:31.302 [DEBUG] [Thread-18929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:38:31.302 [DEBUG] [Thread-18929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:38:31.302 [DEBUG] [Thread-18929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:38:31.302 [DEBUG] [Thread-18929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:38:31.302 [DEBUG] [Thread-18929] [transport.py] [_log()] Compression: none
2025-12-25T21:38:31.302 [DEBUG] [Thread-18929] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:38:31.319 [DEBUG] [Thread-18929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:38:31.320 [DEBUG] [Thread-18929] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:38:31.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:38:31.321 [DEBUG] [Thread-18929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:38:31.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:38:31.323 [DEBUG] [Thread-18929] [transport.py] [_log()] userauth is OK
2025-12-25T21:38:31.323 [DEBUG] [Thread-18929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:38:31.323 [DEBUG] [Thread-18929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:38:31.323 [DEBUG] [Thread-18929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:38:31.323 [DEBUG] [Thread-18929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:38:31.349 [INFO] [Thread-18929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:38:31.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:38:32.158 [DEBUG] [Thread-18929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:38:32.158 [DEBUG] [Thread-18929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:38:32.159 [DEBUG] [Thread-18929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:38:32.199 [DEBUG] [Thread-18929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:38:32.199 [DEBUG] [Thread-18929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:38:32.203 [DEBUG] [Thread-18929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:38:32.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:38:32.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:38:32.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:38:32.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:38:32.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:38:32.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:38:32.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:38:32.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:38:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:38:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.817767 -999.00  +16.40  10.10     73  +11.50 1 1 1 1 1     0    0 4.04 -31.80 ZNESW 10.4 10.1 194.6 10.7 17.3 -21.3 17.2 -20.9 17.0 -19.7 17.2 -20.7
2025-12-25T21:38:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:38:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:38:32.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.817767
2025-12-25T21:38:32.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:38:32.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:38:32.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:38:32.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:38:32.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:38:32.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:38:18', tmtdew=5.33, humidity=70.54, cloud=0.0, wind=11.63, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:38:18', seeing=1.26, atlas_timestamp='2025-12-25T19:37:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:35:00')
2025-12-25T21:38:32.230 [DEBUG] [Thread-18929] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:38:32.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-25T21:38:32.325 [DEBUG] [Thread-18932] [transport.py] [_log()] starting thread (client mode): 0xb6ba9bd0
2025-12-25T21:38:32.325 [DEBUG] [Thread-18932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:38:32.343 [DEBUG] [Thread-18932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:38:32.343 [INFO] [Thread-18932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:38:32.350 [DEBUG] [Thread-18932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:38:32.350 [DEBUG] [Thread-18932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:38:32.350 [DEBUG] [Thread-18932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:38:32.350 [DEBUG] [Thread-18932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] client lang: <none>
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] server lang: <none>
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] kex follows: False
2025-12-25T21:38:32.351 [DEBUG] [Thread-18932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:38:32.352 [DEBUG] [Thread-18932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:38:32.352 [DEBUG] [Thread-18932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:38:32.352 [DEBUG] [Thread-18932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:38:32.352 [DEBUG] [Thread-18932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:38:32.352 [DEBUG] [Thread-18932] [transport.py] [_log()] Compression: none
2025-12-25T21:38:32.352 [DEBUG] [Thread-18932] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:38:32.409 [DEBUG] [Thread-18932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:38:32.409 [DEBUG] [Thread-18932] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:38:32.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:38:32.410 [DEBUG] [Thread-18932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:38:32.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:38:32.468 [DEBUG] [Thread-18932] [transport.py] [_log()] userauth is OK
2025-12-25T21:38:32.468 [DEBUG] [Thread-18932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:38:32.468 [DEBUG] [Thread-18932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:38:32.468 [DEBUG] [Thread-18932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:38:32.468 [DEBUG] [Thread-18932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:38:32.488 [INFO] [Thread-18932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:38: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-25T21:38:32.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:38:33.343 [DEBUG] [Thread-18932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:38:33.343 [DEBUG] [Thread-18932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:38:33.391 [DEBUG] [Thread-18932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:38:33.391 [DEBUG] [Thread-18932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:38:33.400 [DEBUG] [Thread-18932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:38:33.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:38:33.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:38:33.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:38:33.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:38:33.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:38:33.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:38:33.437 [DEBUG] [Thread-18932] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:38:33.531 [DEBUG] [Thread-18934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:38:48.571 [DEBUG] [Thread-18935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:38:49.080 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:38:49.080 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:03.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:39:03.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:39:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:39:03.601 [DEBUG] [Thread-18936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 38, 50), 5.33, 70.54, 0.0, 11.52, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:39:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:38:50
2025-12-25T21:39:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:39:04.408 [DEBUG] [Thread-18937] [transport.py] [_log()] starting thread (client mode): 0xb6ba9c60
2025-12-25T21:39:04.408 [DEBUG] [Thread-18937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:39:04.427 [DEBUG] [Thread-18937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:39:04.427 [INFO] [Thread-18937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] client lang: <none>
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] server lang: <none>
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] kex follows: False
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] Compression: none
2025-12-25T21:39:04.429 [DEBUG] [Thread-18937] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:39:04.445 [DEBUG] [Thread-18937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:39:04.445 [DEBUG] [Thread-18937] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:39:04.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:39:04.446 [DEBUG] [Thread-18937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:39:04.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:39:04.448 [DEBUG] [Thread-18937] [transport.py] [_log()] userauth is OK
2025-12-25T21:39:04.449 [DEBUG] [Thread-18937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:39:04.449 [DEBUG] [Thread-18937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:39:04.449 [DEBUG] [Thread-18937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:39:04.449 [DEBUG] [Thread-18937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:39:04.473 [INFO] [Thread-18937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:39:04.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:39:05.149 [DEBUG] [Thread-18937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:39:05.149 [DEBUG] [Thread-18937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:39:05.149 [DEBUG] [Thread-18937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:39:05.190 [DEBUG] [Thread-18937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:39:05.190 [DEBUG] [Thread-18937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:39:05.192 [DEBUG] [Thread-18937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:39:05.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:39:05.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:39:05.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:39:05.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:39:05.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:39:05.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:39:05.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:39:05.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:39:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:39:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.818462 -999.00  +16.30  11.22     73  +11.60 1 1 1 1 1     0    0 4.04 -33.47 ZNESW 9.9 11.2 188.2 13.2 17.3 -21.4 17.2 -21.0 16.9 -19.6 17.3 -20.8
2025-12-25T21:39:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:39:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:39:05.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.818462
2025-12-25T21:39:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:39:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:39:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:39:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:39:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:39:05.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:38:50', tmtdew=5.33, humidity=70.54, cloud=0.0, wind=11.52, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:38:50', seeing=1.37, atlas_timestamp='2025-12-25T19:38:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:35:00')
2025-12-25T21:39:05.218 [DEBUG] [Thread-18937] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:39:05.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-25T21:39:05.311 [DEBUG] [Thread-18940] [transport.py] [_log()] starting thread (client mode): 0xb6bc3130
2025-12-25T21:39:05.311 [DEBUG] [Thread-18940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:39:05.326 [DEBUG] [Thread-18940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:39:05.326 [INFO] [Thread-18940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:39:05.333 [DEBUG] [Thread-18940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:39:05.333 [DEBUG] [Thread-18940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:39:05.333 [DEBUG] [Thread-18940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] client lang: <none>
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] server lang: <none>
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] kex follows: False
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:39:05.334 [DEBUG] [Thread-18940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:39:05.335 [DEBUG] [Thread-18940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:39:05.335 [DEBUG] [Thread-18940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:39:05.335 [DEBUG] [Thread-18940] [transport.py] [_log()] Compression: none
2025-12-25T21:39:05.335 [DEBUG] [Thread-18940] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:39:05.391 [DEBUG] [Thread-18940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:39:05.392 [DEBUG] [Thread-18940] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:39:05.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:39:05.393 [DEBUG] [Thread-18940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:39:05.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:39:05.446 [DEBUG] [Thread-18940] [transport.py] [_log()] userauth is OK
2025-12-25T21:39:05.447 [DEBUG] [Thread-18940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:39:05.447 [DEBUG] [Thread-18940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:39:05.447 [DEBUG] [Thread-18940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:39:05.447 [DEBUG] [Thread-18940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:39:05.468 [INFO] [Thread-18940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:39:05.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:39:05.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:39:06.335 [DEBUG] [Thread-18940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:39:06.336 [DEBUG] [Thread-18940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:39:06.383 [DEBUG] [Thread-18940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:39:06.383 [DEBUG] [Thread-18940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:39:06.392 [DEBUG] [Thread-18940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:39:06.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:39:06.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-25T21:39:06.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-25T21:39:06.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:39:06.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:39:06.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:39:06.428 [DEBUG] [Thread-18940] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:39:18.635 [DEBUG] [Thread-18942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:28.292 [DEBUG] [Thread-18943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:33.684 [DEBUG] [Thread-18944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:39:36.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:39:36.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-25T21:39:37.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 39, 22), 5.35, 70.42, 0.0, 12.02, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:39:37.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:39:22
2025-12-25T21:39:37.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:39:37.445 [DEBUG] [Thread-18945] [transport.py] [_log()] starting thread (client mode): 0xb6b75c00
2025-12-25T21:39:37.445 [DEBUG] [Thread-18945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:39:37.464 [DEBUG] [Thread-18945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:39:37.465 [INFO] [Thread-18945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] client lang: <none>
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] server lang: <none>
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] kex follows: False
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] Compression: none
2025-12-25T21:39:37.468 [DEBUG] [Thread-18945] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:39:37.485 [DEBUG] [Thread-18945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:39:37.485 [DEBUG] [Thread-18945] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:39:37.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:39:37.485 [DEBUG] [Thread-18945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:39:37.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:39:37.486 [DEBUG] [Thread-18945] [transport.py] [_log()] userauth is OK
2025-12-25T21:39:37.486 [DEBUG] [Thread-18945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:39:37.486 [DEBUG] [Thread-18945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:39:37.486 [DEBUG] [Thread-18945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:39:37.486 [DEBUG] [Thread-18945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:39:37.495 [INFO] [Thread-18945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:39:37.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:39:38.134 [DEBUG] [Thread-18945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:39:38.134 [DEBUG] [Thread-18945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:39:38.134 [DEBUG] [Thread-18945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:39:38.174 [DEBUG] [Thread-18945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:39:38.175 [DEBUG] [Thread-18945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:39:38.177 [DEBUG] [Thread-18945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:39:38.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:39:38.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:39:38.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:39:38.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:39:38.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:39:38.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:39:38.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.818809 -999.00  +16.30  10.41     73  +11.50 1 1 1 1 1     0    0 4.08 -32.13 ZNESW 10.2 10.4 209.2 15.6 17.3 -21.4 17.1 -21.0 16.9 -19.7 17.2 -20.5
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.818809
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:39:38.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:39:22', tmtdew=5.35, humidity=70.42, cloud=0.0, wind=12.02, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:39:22', seeing=1.37, atlas_timestamp='2025-12-25T19:39:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:37:00')
2025-12-25T21:39:38.195 [DEBUG] [Thread-18945] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:39:38.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:39:38.280 [DEBUG] [Thread-18948] [transport.py] [_log()] starting thread (client mode): 0xb6b77310
2025-12-25T21:39:38.281 [DEBUG] [Thread-18948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:39:38.295 [DEBUG] [Thread-18948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:39:38.295 [INFO] [Thread-18948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] client lang: <none>
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] server lang: <none>
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] kex follows: False
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] Compression: none
2025-12-25T21:39:38.305 [DEBUG] [Thread-18948] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:39:38.360 [DEBUG] [Thread-18948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:39:38.361 [DEBUG] [Thread-18948] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:39:38.361 [DEBUG] [Thread-18948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:39:38.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:39:38.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:39:38.418 [DEBUG] [Thread-18948] [transport.py] [_log()] userauth is OK
2025-12-25T21:39:38.418 [DEBUG] [Thread-18948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:39:38.418 [DEBUG] [Thread-18948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:39:38.418 [DEBUG] [Thread-18948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:39:38.418 [DEBUG] [Thread-18948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:39:38.432 [INFO] [Thread-18948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:39:38.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-25T21:39:38.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:39:39.260 [DEBUG] [Thread-18948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:39:39.261 [DEBUG] [Thread-18948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:39:39.309 [DEBUG] [Thread-18948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:39:39.309 [DEBUG] [Thread-18948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:39:39.318 [DEBUG] [Thread-18948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:39:39.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:39:39.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:39:39.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:39:39.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:39:39.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:39:39.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:39:39.352 [DEBUG] [Thread-18948] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:39:48.713 [DEBUG] [Thread-18950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:49.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:39:49.321 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:03.765 [DEBUG] [Thread-18951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:40:09.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:40:09.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-25T21:40:10.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 39, 54), 5.33, 70.51, 0.0, 13.16, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:40:10.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:39:54
2025-12-25T21:40:10.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:40:10.342 [DEBUG] [Thread-18952] [transport.py] [_log()] starting thread (client mode): 0xb6ba8190
2025-12-25T21:40:10.342 [DEBUG] [Thread-18952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:40:10.363 [DEBUG] [Thread-18952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:40:10.363 [INFO] [Thread-18952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] client lang: <none>
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] server lang: <none>
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] kex follows: False
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:40:10.367 [DEBUG] [Thread-18952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:40:10.368 [DEBUG] [Thread-18952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:40:10.368 [DEBUG] [Thread-18952] [transport.py] [_log()] Compression: none
2025-12-25T21:40:10.368 [DEBUG] [Thread-18952] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:40:10.391 [DEBUG] [Thread-18952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:40:10.392 [DEBUG] [Thread-18952] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:40:10.392 [DEBUG] [Thread-18952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:40:10.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:40:10.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:40:10.396 [DEBUG] [Thread-18952] [transport.py] [_log()] userauth is OK
2025-12-25T21:40:10.396 [DEBUG] [Thread-18952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:40:10.397 [DEBUG] [Thread-18952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:40:10.397 [DEBUG] [Thread-18952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:40:10.397 [DEBUG] [Thread-18952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:40:10.423 [INFO] [Thread-18952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:40:10.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:40:11.134 [DEBUG] [Thread-18952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:40:11.134 [DEBUG] [Thread-18952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:40:11.135 [DEBUG] [Thread-18952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:40:11.175 [DEBUG] [Thread-18952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:40:11.175 [DEBUG] [Thread-18952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:40:11.179 [DEBUG] [Thread-18952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:40:11.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:40:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:40:11.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:40:11.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:40:11.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:40:11.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:40:11.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:40:11.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:40:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:40:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.819156 -999.00  +16.30   7.44     73  +11.50 1 1 1 1 1     0    0 4.07 -32.02 ZNESW 6.0 7.4 195.6 17.0 17.2 -21.4 17.1 -21.0 16.9 -19.9 17.2 -20.6
2025-12-25T21:40:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:40:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:40:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.819156
2025-12-25T21:40:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:40:11.279 [DEBUG] [Thread-18952] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:40:11.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:40:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:40:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:40:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:40:11.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:39:54', tmtdew=5.33, humidity=70.51, cloud=0.0, wind=13.16, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:39:54', seeing=1.13, atlas_timestamp='2025-12-25T19:39:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:37:00')
2025-12-25T21:40:11.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-25T21:40:11.374 [DEBUG] [Thread-18955] [transport.py] [_log()] starting thread (client mode): 0xb6b03250
2025-12-25T21:40:11.374 [DEBUG] [Thread-18955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:40:11.389 [DEBUG] [Thread-18955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:40:11.389 [INFO] [Thread-18955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] client lang: <none>
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] server lang: <none>
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] kex follows: False
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:40:11.397 [DEBUG] [Thread-18955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:40:11.398 [DEBUG] [Thread-18955] [transport.py] [_log()] Compression: none
2025-12-25T21:40:11.398 [DEBUG] [Thread-18955] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:40:11.454 [DEBUG] [Thread-18955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:40:11.455 [DEBUG] [Thread-18955] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:40:11.455 [DEBUG] [Thread-18955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:40:11.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:40:11.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:40:11.509 [DEBUG] [Thread-18955] [transport.py] [_log()] userauth is OK
2025-12-25T21:40:11.510 [DEBUG] [Thread-18955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:40:11.510 [DEBUG] [Thread-18955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:40:11.510 [DEBUG] [Thread-18955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:40:11.510 [DEBUG] [Thread-18955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:40:11.529 [INFO] [Thread-18955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:40:11.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-25T21:40:11.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:40:12.350 [DEBUG] [Thread-18955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:40:12.350 [DEBUG] [Thread-18955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:40:12.398 [DEBUG] [Thread-18955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:40:12.398 [DEBUG] [Thread-18955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:40:12.406 [DEBUG] [Thread-18955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:40:12.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:40:12.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:40:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:40:12.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:40:12.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:40:12.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:40:12.438 [DEBUG] [Thread-18955] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:40:18.801 [DEBUG] [Thread-18957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:28.344 [DEBUG] [Thread-18958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:33.849 [DEBUG] [Thread-18959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:42.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:40:42.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:40:42.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-25T21:40:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 40, 26), 5.34, 70.47, 0.0, 13.69, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:40:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:40:26
2025-12-25T21:40:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:40:43.420 [DEBUG] [Thread-18960] [transport.py] [_log()] starting thread (client mode): 0xb6b757b0
2025-12-25T21:40:43.420 [DEBUG] [Thread-18960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:40:43.439 [DEBUG] [Thread-18960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:40:43.439 [INFO] [Thread-18960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:40:43.442 [DEBUG] [Thread-18960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:40:43.443 [DEBUG] [Thread-18960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:40:43.443 [DEBUG] [Thread-18960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:40:43.443 [DEBUG] [Thread-18960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:43.443 [DEBUG] [Thread-18960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:43.443 [DEBUG] [Thread-18960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:43.443 [DEBUG] [Thread-18960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:43.444 [DEBUG] [Thread-18960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:40:43.444 [DEBUG] [Thread-18960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:40:43.444 [DEBUG] [Thread-18960] [transport.py] [_log()] client lang: <none>
2025-12-25T21:40:43.444 [DEBUG] [Thread-18960] [transport.py] [_log()] server lang: <none>
2025-12-25T21:40:43.444 [DEBUG] [Thread-18960] [transport.py] [_log()] kex follows: False
2025-12-25T21:40:43.444 [DEBUG] [Thread-18960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:40:43.445 [DEBUG] [Thread-18960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:40:43.445 [DEBUG] [Thread-18960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:40:43.445 [DEBUG] [Thread-18960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:40:43.445 [DEBUG] [Thread-18960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:40:43.445 [DEBUG] [Thread-18960] [transport.py] [_log()] Compression: none
2025-12-25T21:40:43.445 [DEBUG] [Thread-18960] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:40:43.456 [DEBUG] [Thread-18960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:40:43.456 [DEBUG] [Thread-18960] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:40:43.457 [DEBUG] [Thread-18960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:40:43.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:40:43.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:40:43.459 [DEBUG] [Thread-18960] [transport.py] [_log()] userauth is OK
2025-12-25T21:40:43.459 [DEBUG] [Thread-18960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:40:43.459 [DEBUG] [Thread-18960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:40:43.459 [DEBUG] [Thread-18960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:40:43.459 [DEBUG] [Thread-18960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:40:43.483 [INFO] [Thread-18960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:40:43.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:40:44.102 [DEBUG] [Thread-18960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:40:44.103 [DEBUG] [Thread-18960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:40:44.103 [DEBUG] [Thread-18960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:40:44.143 [DEBUG] [Thread-18960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:40:44.143 [DEBUG] [Thread-18960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:40:44.147 [DEBUG] [Thread-18960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:40:44.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:40:44.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:40:44.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:40:44.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:40:44.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:40:44.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:40:44.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:40:44.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:40:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:40:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.819503 -999.00  +16.30  11.82     73  +11.50 1 1 1 1 1     0    0 3.97 -33.58 ZNESW 7.9 11.8 189.4 15.1 17.2 -21.4 17.1 -21.0 16.9 -19.8 17.2 -20.7
2025-12-25T21:40:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:40:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:40:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.819503
2025-12-25T21:40:44.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:40:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:40:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:40:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:40:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:40:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:40:26', tmtdew=5.34, humidity=70.47, cloud=0.0, wind=13.69, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:40:26', seeing=1.13, atlas_timestamp='2025-12-25T19:40:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:37:00')
2025-12-25T21:40:44.174 [DEBUG] [Thread-18960] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:40:44.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-25T21:40:44.268 [DEBUG] [Thread-18963] [transport.py] [_log()] starting thread (client mode): 0xb6b76d70
2025-12-25T21:40:44.268 [DEBUG] [Thread-18963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:40:44.282 [DEBUG] [Thread-18963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:40:44.283 [INFO] [Thread-18963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:40:44.290 [DEBUG] [Thread-18963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] client lang: <none>
2025-12-25T21:40:44.291 [DEBUG] [Thread-18963] [transport.py] [_log()] server lang: <none>
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] kex follows: False
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] Compression: none
2025-12-25T21:40:44.292 [DEBUG] [Thread-18963] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:40:44.350 [DEBUG] [Thread-18963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:40:44.350 [DEBUG] [Thread-18963] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:40:44.351 [DEBUG] [Thread-18963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:40:44.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:40:44.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:40:44.409 [DEBUG] [Thread-18963] [transport.py] [_log()] userauth is OK
2025-12-25T21:40:44.409 [DEBUG] [Thread-18963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:40:44.410 [DEBUG] [Thread-18963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:40:44.410 [DEBUG] [Thread-18963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:40:44.410 [DEBUG] [Thread-18963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:40:44.432 [INFO] [Thread-18963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:40:44.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-25T21:40:44.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:40:45.247 [DEBUG] [Thread-18963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:40:45.247 [DEBUG] [Thread-18963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:40:45.295 [DEBUG] [Thread-18963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:40:45.295 [DEBUG] [Thread-18963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:40:45.304 [DEBUG] [Thread-18963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:40:45.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:40:45.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-25T21:40:45.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-25T21:40:45.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:40:45.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:40:45.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:40:45.341 [DEBUG] [Thread-18963] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:40:48.882 [DEBUG] [Thread-18965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:49.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:40:49.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:03.928 [DEBUG] [Thread-18966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:15.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:41:15.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:41: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-25T21:41:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 40, 58), 5.29, 70.47, 0.0, 12.21, 16.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:41:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:40:58
2025-12-25T21:41:16.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:41:16.338 [DEBUG] [Thread-18967] [transport.py] [_log()] starting thread (client mode): 0xb6babe80
2025-12-25T21:41:16.338 [DEBUG] [Thread-18967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:41:16.360 [DEBUG] [Thread-18967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:41:16.360 [INFO] [Thread-18967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] client lang: <none>
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] server lang: <none>
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] kex follows: False
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] Compression: none
2025-12-25T21:41:16.364 [DEBUG] [Thread-18967] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:41:16.381 [DEBUG] [Thread-18967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:41:16.381 [DEBUG] [Thread-18967] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:41:16.381 [DEBUG] [Thread-18967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:41:16.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:41:16.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:41:16.382 [DEBUG] [Thread-18967] [transport.py] [_log()] userauth is OK
2025-12-25T21:41:16.382 [DEBUG] [Thread-18967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:41:16.382 [DEBUG] [Thread-18967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:41:16.382 [DEBUG] [Thread-18967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:41:16.382 [DEBUG] [Thread-18967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:41:16.394 [INFO] [Thread-18967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:41:16.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:41:17.063 [DEBUG] [Thread-18967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:41:17.063 [DEBUG] [Thread-18967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:41:17.063 [DEBUG] [Thread-18967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:41:17.104 [DEBUG] [Thread-18967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:41:17.104 [DEBUG] [Thread-18967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:41:17.108 [DEBUG] [Thread-18967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:41:17.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:41:17.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:41:17.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:41:17.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:41:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:41:17.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:41:17.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:41:17.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:41:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:41:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.819850 -999.00  +16.20  12.14     73  +11.60 1 1 1 1 1     0    0 3.97 -33.68 ZNESW 12.5 12.1 195.8 16.2 17.2 -21.5 17.1 -21.8 16.9 -19.9 17.2 -20.8
2025-12-25T21:41:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:41:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:41:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.819850
2025-12-25T21:41:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:41:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:41:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:41:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:41:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:41:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:40:58', tmtdew=5.29, humidity=70.47, cloud=0.0, wind=12.21, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:40:58', seeing=1.35, atlas_timestamp='2025-12-25T19:40:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:37:00')
2025-12-25T21:41:17.138 [DEBUG] [Thread-18967] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:41:17.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-25T21:41:17.233 [DEBUG] [Thread-18970] [transport.py] [_log()] starting thread (client mode): 0xb9559ea0
2025-12-25T21:41:17.233 [DEBUG] [Thread-18970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:41:17.247 [DEBUG] [Thread-18970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:41:17.247 [INFO] [Thread-18970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] client lang: <none>
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] server lang: <none>
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] kex follows: False
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:41:17.255 [DEBUG] [Thread-18970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:41:17.256 [DEBUG] [Thread-18970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:41:17.256 [DEBUG] [Thread-18970] [transport.py] [_log()] Compression: none
2025-12-25T21:41:17.256 [DEBUG] [Thread-18970] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:41:17.313 [DEBUG] [Thread-18970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:41:17.313 [DEBUG] [Thread-18970] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:41:17.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:41:17.314 [DEBUG] [Thread-18970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:41:17.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:41:17.369 [DEBUG] [Thread-18970] [transport.py] [_log()] userauth is OK
2025-12-25T21:41:17.369 [DEBUG] [Thread-18970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:41:17.369 [DEBUG] [Thread-18970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:41:17.369 [DEBUG] [Thread-18970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:41:17.369 [DEBUG] [Thread-18970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:41:17.387 [INFO] [Thread-18970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:41:17.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-25T21:41:17.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:41:18.197 [DEBUG] [Thread-18970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:41:18.197 [DEBUG] [Thread-18970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:41:18.245 [DEBUG] [Thread-18970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:41:18.245 [DEBUG] [Thread-18970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:41:18.255 [DEBUG] [Thread-18970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:41:18.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:41:18.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-25T21:41:18.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-25T21:41:18.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:41:18.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:41:18.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:41:18.292 [DEBUG] [Thread-18970] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:41:18.962 [DEBUG] [Thread-18972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:28.431 [DEBUG] [Thread-18973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:34.016 [DEBUG] [Thread-18974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:41:48.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:41:48.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-25T21:41:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 41, 30), 5.3, 70.42, 0.0, 12.46, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:41:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:41:30
2025-12-25T21:41:49.047 [DEBUG] [Thread-18975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:49.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:41:49.298 [DEBUG] [Thread-18976] [transport.py] [_log()] starting thread (client mode): 0xb6ba99f0
2025-12-25T21:41:49.298 [DEBUG] [Thread-18976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:41:49.318 [DEBUG] [Thread-18976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:41:49.318 [INFO] [Thread-18976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] client lang: <none>
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] server lang: <none>
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] kex follows: False
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] Compression: none
2025-12-25T21:41:49.321 [DEBUG] [Thread-18976] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:41:49.339 [DEBUG] [Thread-18976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:41:49.340 [DEBUG] [Thread-18976] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:41:49.340 [DEBUG] [Thread-18976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:41:49.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:41:49.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:41:49.342 [DEBUG] [Thread-18976] [transport.py] [_log()] userauth is OK
2025-12-25T21:41:49.342 [DEBUG] [Thread-18976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:41:49.342 [DEBUG] [Thread-18976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:41:49.342 [DEBUG] [Thread-18976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:41:49.343 [DEBUG] [Thread-18976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:41:49.378 [INFO] [Thread-18976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:41:49.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:41:49.725 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:49.727 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:41:49.990 [DEBUG] [Thread-18976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:41:49.990 [DEBUG] [Thread-18976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:41:49.991 [DEBUG] [Thread-18976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:41:50.031 [DEBUG] [Thread-18976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:41:50.031 [DEBUG] [Thread-18976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:41:50.034 [DEBUG] [Thread-18976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:41:50.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:41:50.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:41:50.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:41:50.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:41:50.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:41:50.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:41:50.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:41:50.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:41:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:41:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.820198 -999.00  +16.20  12.28     74  +11.60 1 1 1 1 1     0    0 3.96 -35.21 ZNESW 8.4 12.3 202.6 15.2 17.2 -21.5 17.1 -21.2 16.9 -19.9 17.2 -20.8
2025-12-25T21:41:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:41:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:41:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.820198
2025-12-25T21:41:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:41:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:41:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:41:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:41:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:41:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:41:30', tmtdew=5.3, humidity=70.42, cloud=0.0, wind=12.46, 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-25T21:41:30', seeing=1.45, atlas_timestamp='2025-12-25T19:41:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:37:00')
2025-12-25T21:41:50.060 [DEBUG] [Thread-18976] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:41:50.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-25T21:41:50.155 [DEBUG] [Thread-18979] [transport.py] [_log()] starting thread (client mode): 0xb6bb6800
2025-12-25T21:41:50.155 [DEBUG] [Thread-18979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:41:50.174 [DEBUG] [Thread-18979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:41:50.175 [INFO] [Thread-18979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:41:50.182 [DEBUG] [Thread-18979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:41:50.182 [DEBUG] [Thread-18979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:41:50.182 [DEBUG] [Thread-18979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:41:50.182 [DEBUG] [Thread-18979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:50.182 [DEBUG] [Thread-18979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] client lang: <none>
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] server lang: <none>
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] kex follows: False
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:41:50.183 [DEBUG] [Thread-18979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:41:50.184 [DEBUG] [Thread-18979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:41:50.184 [DEBUG] [Thread-18979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:41:50.184 [DEBUG] [Thread-18979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:41:50.184 [DEBUG] [Thread-18979] [transport.py] [_log()] Compression: none
2025-12-25T21:41:50.184 [DEBUG] [Thread-18979] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:41:50.239 [DEBUG] [Thread-18979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:41:50.239 [DEBUG] [Thread-18979] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:41:50.240 [DEBUG] [Thread-18979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:41:50.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:41:50.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:41:50.300 [DEBUG] [Thread-18979] [transport.py] [_log()] userauth is OK
2025-12-25T21:41:50.300 [DEBUG] [Thread-18979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:41:50.300 [DEBUG] [Thread-18979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:41:50.300 [DEBUG] [Thread-18979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:41:50.300 [DEBUG] [Thread-18979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:41:50.319 [INFO] [Thread-18979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:41: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-25T21:41:50.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:41:51.134 [DEBUG] [Thread-18979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:41:51.135 [DEBUG] [Thread-18979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:41:51.182 [DEBUG] [Thread-18979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:41:51.182 [DEBUG] [Thread-18979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:41:51.191 [DEBUG] [Thread-18979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:41:51.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:41:51.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-25T21:41:51.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-25T21:41:51.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:41:51.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:41:51.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:41:51.222 [DEBUG] [Thread-18979] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:42:04.076 [DEBUG] [Thread-18981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:19.115 [DEBUG] [Thread-18982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:42:21.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:42:21.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-25T21:42:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 42, 2), 5.3, 70.42, 0.0, 11.79, 16.07, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:42:21.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:42:02
2025-12-25T21:42:22.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:42:22.205 [DEBUG] [Thread-18983] [transport.py] [_log()] starting thread (client mode): 0xb6ba9cc0
2025-12-25T21:42:22.205 [DEBUG] [Thread-18983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:42:22.226 [DEBUG] [Thread-18983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:42:22.226 [INFO] [Thread-18983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] client lang: <none>
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] server lang: <none>
2025-12-25T21:42:22.229 [DEBUG] [Thread-18983] [transport.py] [_log()] kex follows: False
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] Compression: none
2025-12-25T21:42:22.230 [DEBUG] [Thread-18983] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:42:22.246 [DEBUG] [Thread-18983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:42:22.247 [DEBUG] [Thread-18983] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:42:22.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:42:22.247 [DEBUG] [Thread-18983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:42:22.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:42:22.249 [DEBUG] [Thread-18983] [transport.py] [_log()] userauth is OK
2025-12-25T21:42:22.250 [DEBUG] [Thread-18983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:42:22.250 [DEBUG] [Thread-18983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:42:22.250 [DEBUG] [Thread-18983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:42:22.250 [DEBUG] [Thread-18983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:42:22.271 [INFO] [Thread-18983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:42:22.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:42:22.904 [DEBUG] [Thread-18983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:42:22.904 [DEBUG] [Thread-18983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:42:22.904 [DEBUG] [Thread-18983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:42:22.945 [DEBUG] [Thread-18983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:42:22.945 [DEBUG] [Thread-18983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:42:22.949 [DEBUG] [Thread-18983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:42:22.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:42:22.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:42:22.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:42:22.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:42:22.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:42:22.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:42:22.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:42:22.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:42:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:42:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.820892 -999.00  +16.20   7.83     73  +11.50 1 1 1 1 1     0    0 3.91 -34.41 ZNESW 9.0 7.8 186.8 13.8 17.1 -21.6 17.0 -21.4 16.9 -19.8 17.1 -20.7
2025-12-25T21:42:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:42:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:42:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.820892
2025-12-25T21:42:22.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:42:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:42:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:42:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:42:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:42:22.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:42:02', tmtdew=5.3, humidity=70.42, cloud=0.0, wind=11.79, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:42:03', seeing=1.32, atlas_timestamp='2025-12-25T19:42:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.09775000000000134, 0.1662499999999998, 0.09750000000000014, 0.0884999999999998, 0.11125000000000007, 0.09999999999999964, 0.1642500000000009, 0.12049999999999983, 0.07349999999999923, 0.12324999999999875, 0.06899999999999906, 0.13149999999999906, 0.14175000000000004, 0.09149999999999991, 0.10199999999999854, 0.08525000000000027, 0.1615000000000002, 0.12199999999999989, 0.09174999999999933, 0.15399999999999814, 0.16424999999999912, 0.1122500000000013, 0.13424999999999976, 0.05999999999999872, 0.10650000000000048, 0.22625000000000028, 0.19350000000000023, 0.20400000000000063, 0.19450000000000145, 0.24200000000000088, 0.21500000000000163, 0.13374999999999915], zp_timestamp='2025-12-25T19:37:00')
2025-12-25T21:42:22.975 [DEBUG] [Thread-18983] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:42:23.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-25T21:42:23.069 [DEBUG] [Thread-18986] [transport.py] [_log()] starting thread (client mode): 0xb6ba91b0
2025-12-25T21:42:23.069 [DEBUG] [Thread-18986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:42:23.084 [DEBUG] [Thread-18986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:42:23.084 [INFO] [Thread-18986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:42:23.091 [DEBUG] [Thread-18986] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:42:23.091 [DEBUG] [Thread-18986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] client lang: <none>
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] server lang: <none>
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] kex follows: False
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] Compression: none
2025-12-25T21:42:23.092 [DEBUG] [Thread-18986] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:42:23.151 [DEBUG] [Thread-18986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:42:23.151 [DEBUG] [Thread-18986] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:42:23.152 [DEBUG] [Thread-18986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:42:23.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:42:23.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:42:23.207 [DEBUG] [Thread-18986] [transport.py] [_log()] userauth is OK
2025-12-25T21:42:23.208 [DEBUG] [Thread-18986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:42:23.208 [DEBUG] [Thread-18986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:42:23.208 [DEBUG] [Thread-18986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:42:23.208 [DEBUG] [Thread-18986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:42:23.210 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:23.232 [INFO] [Thread-18986] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:42:23.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-25T21:42:23.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:42:24.080 [DEBUG] [Thread-18986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:42:24.080 [DEBUG] [Thread-18986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:42:24.128 [DEBUG] [Thread-18986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:42:24.128 [DEBUG] [Thread-18986] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:42:24.138 [DEBUG] [Thread-18986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:42:24.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:42: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-25T21:42:24.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-25T21:42:24.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:42:24.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:42:24.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:42:24.177 [DEBUG] [Thread-18986] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:42:28.499 [DEBUG] [Thread-18988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:33.277 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:34.146 [DEBUG] [Thread-18989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:37.384 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:49.200 [DEBUG] [Thread-18990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:49.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:49.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:42:54.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:42:54.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:42:54.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-25T21:42:54.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 42, 34), 5.28, 70.51, 0.0, 14.47, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:42:54.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:42:34
2025-12-25T21:42:55.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:42:55.193 [DEBUG] [Thread-18991] [transport.py] [_log()] starting thread (client mode): 0xb6baa470
2025-12-25T21:42:55.194 [DEBUG] [Thread-18991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:42:55.213 [DEBUG] [Thread-18991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:42:55.213 [INFO] [Thread-18991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:42:55.217 [DEBUG] [Thread-18991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:42:55.217 [DEBUG] [Thread-18991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:42:55.217 [DEBUG] [Thread-18991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:42:55.217 [DEBUG] [Thread-18991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] client lang: <none>
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] server lang: <none>
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] kex follows: False
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:42:55.218 [DEBUG] [Thread-18991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:42:55.219 [DEBUG] [Thread-18991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:42:55.219 [DEBUG] [Thread-18991] [transport.py] [_log()] Compression: none
2025-12-25T21:42:55.219 [DEBUG] [Thread-18991] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:42:55.238 [DEBUG] [Thread-18991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:42:55.239 [DEBUG] [Thread-18991] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:42:55.239 [DEBUG] [Thread-18991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:42:55.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:42:55.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:42:55.241 [DEBUG] [Thread-18991] [transport.py] [_log()] userauth is OK
2025-12-25T21:42:55.241 [DEBUG] [Thread-18991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:42:55.242 [DEBUG] [Thread-18991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:42:55.242 [DEBUG] [Thread-18991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:42:55.242 [DEBUG] [Thread-18991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:42:55.276 [INFO] [Thread-18991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:42:55.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:42:55.939 [DEBUG] [Thread-18991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:42:55.939 [DEBUG] [Thread-18991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:42:55.940 [DEBUG] [Thread-18991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:42:55.980 [DEBUG] [Thread-18991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:42:55.980 [DEBUG] [Thread-18991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:42:55.983 [DEBUG] [Thread-18991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:42:55.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:42:55.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:42:55.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:42:56.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:42:56.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:42:56.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:42:56.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:42:56.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:42:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:42:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.821239 -999.00  +16.20   7.35     73  +11.50 1 1 1 1 1     0    0 3.92 -35.06 ZNESW 7.3 7.3 177.0 13.1 17.1 -21.6 17.0 -21.5 16.9 -19.9 17.2 -20.8
2025-12-25T21:42:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:42:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:42:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.821239
2025-12-25T21:42:56.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:42:56.012 [DEBUG] [Thread-18991] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:42:34', tmtdew=5.28, humidity=70.51, cloud=0.0, wind=14.47, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:42:35', seeing=1.38, atlas_timestamp='2025-12-25T19:42:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.12424999999999997, 0.11425000000000018, 0.08999999999999986, 0.09249999999999936, 0.1387500000000017, 0.09249999999999936, 0.16774999999999984, 0.1404999999999994, 0.08099999999999952, 0.11924999999999919, 0.0649999999999995, 0.11749999999999972, 0.1117499999999989, 0.11899999999999977, 0.129999999999999, 0.05924999999999869, 0.13649999999999984, 0.13099999999999845, 0.11424999999999841, 0.10749999999999815, 0.12074999999999747, 0.17774999999999963, 0.12875000000000014, 0.10599999999999987, 0.12400000000000055, 0.22075000000000067, 0.16249999999999964, 0.2190000000000012, 0.1620000000000008, 0.22900000000000098, 0.16850000000000165, 0.1427499999999995], zp_timestamp='2025-12-25T19:41:00')
2025-12-25T21:42:56.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-25T21:42:56.106 [DEBUG] [Thread-18994] [transport.py] [_log()] starting thread (client mode): 0xb6b609a0
2025-12-25T21:42:56.106 [DEBUG] [Thread-18994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:42:56.125 [DEBUG] [Thread-18994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:42:56.125 [INFO] [Thread-18994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:56.132 [DEBUG] [Thread-18994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] client lang: <none>
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] server lang: <none>
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] kex follows: False
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] Compression: none
2025-12-25T21:42:56.133 [DEBUG] [Thread-18994] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:42:56.194 [DEBUG] [Thread-18994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:42:56.195 [DEBUG] [Thread-18994] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:42:56.195 [DEBUG] [Thread-18994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:42:56.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:42:56.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:42:56.254 [DEBUG] [Thread-18994] [transport.py] [_log()] userauth is OK
2025-12-25T21:42:56.254 [DEBUG] [Thread-18994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:42:56.255 [DEBUG] [Thread-18994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:42:56.255 [DEBUG] [Thread-18994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:42:56.255 [DEBUG] [Thread-18994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:42:56.276 [INFO] [Thread-18994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:42:56.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-25T21:42:56.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:42:57.102 [DEBUG] [Thread-18994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:42:57.103 [DEBUG] [Thread-18994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:42:57.151 [DEBUG] [Thread-18994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:42:57.151 [DEBUG] [Thread-18994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:42:57.161 [DEBUG] [Thread-18994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:42:57.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:42: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-25T21:42: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-25T21:42:57.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:42:57.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:42:57.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:42:57.197 [DEBUG] [Thread-18994] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:43:04.230 [DEBUG] [Thread-18996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:43:19.283 [DEBUG] [Thread-18997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:43:27.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:43:27.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:43:27.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-25T21:43:27.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 43, 6), 5.28, 70.52, 0.0, 12.76, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:43:27.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:43:06
2025-12-25T21:43:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:43:28.224 [DEBUG] [Thread-18998] [transport.py] [_log()] starting thread (client mode): 0xb6b76a40
2025-12-25T21:43:28.224 [DEBUG] [Thread-18998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:43:28.245 [DEBUG] [Thread-18998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:43:28.245 [INFO] [Thread-18998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] client lang: <none>
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] server lang: <none>
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] kex follows: False
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] Compression: none
2025-12-25T21:43:28.248 [DEBUG] [Thread-18998] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:43:28.266 [DEBUG] [Thread-18998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:43:28.266 [DEBUG] [Thread-18998] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:43:28.266 [DEBUG] [Thread-18998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:43:28.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:43:28.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:43:28.267 [DEBUG] [Thread-18998] [transport.py] [_log()] userauth is OK
2025-12-25T21:43:28.267 [DEBUG] [Thread-18998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:43:28.267 [DEBUG] [Thread-18998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:43:28.267 [DEBUG] [Thread-18998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:43:28.267 [DEBUG] [Thread-18998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:43:28.279 [INFO] [Thread-18998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:43:28.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:43:28.552 [DEBUG] [Thread-19000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:43:28.943 [DEBUG] [Thread-18998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:43:28.943 [DEBUG] [Thread-18998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:43:28.943 [DEBUG] [Thread-18998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:43:28.985 [DEBUG] [Thread-18998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:43:28.985 [DEBUG] [Thread-18998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:43:28.987 [DEBUG] [Thread-18998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:43:29.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:43:29.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:43:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:43:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:43:29.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:43:29.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:43:29.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.821587 -999.00  +16.30   9.77     73  +11.60 1 1 1 1 1     0    0 3.92 -34.84 ZNESW 9.6 9.8 183.6 12.0 17.2 -21.5 17.0 -21.5 16.9 -19.9 17.1 -20.9
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.821587
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:43:29.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:43:06', tmtdew=5.28, humidity=70.52, cloud=0.0, wind=12.76, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:43:07', seeing=1.41, atlas_timestamp='2025-12-25T19:43:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.12424999999999997, 0.11425000000000018, 0.08999999999999986, 0.09249999999999936, 0.1387500000000017, 0.09249999999999936, 0.16774999999999984, 0.1404999999999994, 0.08099999999999952, 0.11924999999999919, 0.0649999999999995, 0.11749999999999972, 0.1117499999999989, 0.11899999999999977, 0.129999999999999, 0.05924999999999869, 0.13649999999999984, 0.13099999999999845, 0.11424999999999841, 0.10749999999999815, 0.12074999999999747, 0.17774999999999963, 0.12875000000000014, 0.10599999999999987, 0.12400000000000055, 0.22075000000000067, 0.16249999999999964, 0.2190000000000012, 0.1620000000000008, 0.22900000000000098, 0.16850000000000165, 0.1427499999999995], zp_timestamp='2025-12-25T19:41:00')
2025-12-25T21:43:29.007 [DEBUG] [Thread-18998] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:43:29.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-25T21:43:29.090 [DEBUG] [Thread-19002] [transport.py] [_log()] starting thread (client mode): 0xb6b03250
2025-12-25T21:43:29.090 [DEBUG] [Thread-19002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:43:29.106 [DEBUG] [Thread-19002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:43:29.106 [INFO] [Thread-19002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:43:29.113 [DEBUG] [Thread-19002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] client lang: <none>
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] server lang: <none>
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] kex follows: False
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] Compression: none
2025-12-25T21:43:29.114 [DEBUG] [Thread-19002] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:43:29.171 [DEBUG] [Thread-19002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:43:29.171 [DEBUG] [Thread-19002] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:43:29.171 [DEBUG] [Thread-19002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:43:29.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:43:29.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:43:29.226 [DEBUG] [Thread-19002] [transport.py] [_log()] userauth is OK
2025-12-25T21:43:29.226 [DEBUG] [Thread-19002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:43:29.227 [DEBUG] [Thread-19002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:43:29.227 [DEBUG] [Thread-19002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:43:29.227 [DEBUG] [Thread-19002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:43:29.243 [INFO] [Thread-19002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:43:29.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-25T21:43:29.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:43:30.093 [DEBUG] [Thread-19002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:43:30.093 [DEBUG] [Thread-19002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:43:30.140 [DEBUG] [Thread-19002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:43:30.141 [DEBUG] [Thread-19002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:43:30.149 [DEBUG] [Thread-19002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:43:30.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:43:30.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-25T21:43:30.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-25T21:43:30.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:43:30.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:43:30.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:43:30.181 [DEBUG] [Thread-19002] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:43:34.314 [DEBUG] [Thread-19004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:43:49.370 [DEBUG] [Thread-19005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:43:50.130 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:43:50.131 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:00.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:44:00.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:44:00.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-25T21:44:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 43, 38), 5.32, 70.56, 0.0, 13.18, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:44:00.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:43:38
2025-12-25T21:44:01.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:44:01.174 [DEBUG] [Thread-19006] [transport.py] [_log()] starting thread (client mode): 0xb6b76cb0
2025-12-25T21:44:01.174 [DEBUG] [Thread-19006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:44:01.184 [DEBUG] [Thread-19006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:44:01.184 [INFO] [Thread-19006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] client lang: <none>
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] server lang: <none>
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] kex follows: False
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] Compression: none
2025-12-25T21:44:01.186 [DEBUG] [Thread-19006] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:44:01.194 [DEBUG] [Thread-19006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:44:01.194 [DEBUG] [Thread-19006] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:44:01.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:44:01.194 [DEBUG] [Thread-19006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:44:01.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:44:01.195 [DEBUG] [Thread-19006] [transport.py] [_log()] userauth is OK
2025-12-25T21:44:01.195 [DEBUG] [Thread-19006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:44:01.195 [DEBUG] [Thread-19006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:44:01.195 [DEBUG] [Thread-19006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:44:01.195 [DEBUG] [Thread-19006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:44:01.207 [INFO] [Thread-19006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:44:01.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:44:01.795 [DEBUG] [Thread-19006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:44:01.795 [DEBUG] [Thread-19006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:44:01.796 [DEBUG] [Thread-19006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:44:01.837 [DEBUG] [Thread-19006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:44:01.837 [DEBUG] [Thread-19006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:44:01.839 [DEBUG] [Thread-19006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:44:01.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:44:01.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:44:01.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:44:01.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:44:01.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:44:01.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:44:01.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:44:01.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:44:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:44:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.821934 -999.00  +16.30   7.83     73  +11.60 1 1 1 1 1     0    0 3.94 -34.58 ZNESW 9.4 7.8 173.4 10.0 17.1 -21.6 17.0 -21.5 16.9 -19.9 17.1 -20.8
2025-12-25T21:44:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:44:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:44:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.821934
2025-12-25T21:44:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:44:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:44:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:44:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:44:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:44:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:43:38', tmtdew=5.32, humidity=70.56, cloud=0.0, wind=13.18, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:43:39', seeing=1.42, atlas_timestamp='2025-12-25T19:43:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.12424999999999997, 0.11425000000000018, 0.08999999999999986, 0.09249999999999936, 0.1387500000000017, 0.09249999999999936, 0.16774999999999984, 0.1404999999999994, 0.08099999999999952, 0.11924999999999919, 0.0649999999999995, 0.11749999999999972, 0.1117499999999989, 0.11899999999999977, 0.129999999999999, 0.05924999999999869, 0.13649999999999984, 0.13099999999999845, 0.11424999999999841, 0.10749999999999815, 0.12074999999999747, 0.17774999999999963, 0.12875000000000014, 0.10599999999999987, 0.12400000000000055, 0.22075000000000067, 0.16249999999999964, 0.2190000000000012, 0.1620000000000008, 0.22900000000000098, 0.16850000000000165, 0.1427499999999995], zp_timestamp='2025-12-25T19:41:00')
2025-12-25T21:44:01.873 [DEBUG] [Thread-19006] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:44:01.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-25T21:44:01.978 [DEBUG] [Thread-19009] [transport.py] [_log()] starting thread (client mode): 0xb6b7c7f0
2025-12-25T21:44:01.978 [DEBUG] [Thread-19009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:44:01.993 [DEBUG] [Thread-19009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:44:01.993 [INFO] [Thread-19009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:44:02.001 [DEBUG] [Thread-19009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:44:02.001 [DEBUG] [Thread-19009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:44:02.001 [DEBUG] [Thread-19009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:44:02.001 [DEBUG] [Thread-19009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:02.001 [DEBUG] [Thread-19009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] client lang: <none>
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] server lang: <none>
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] kex follows: False
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:44:02.002 [DEBUG] [Thread-19009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:44:02.003 [DEBUG] [Thread-19009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:44:02.003 [DEBUG] [Thread-19009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:44:02.003 [DEBUG] [Thread-19009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:44:02.003 [DEBUG] [Thread-19009] [transport.py] [_log()] Compression: none
2025-12-25T21:44:02.003 [DEBUG] [Thread-19009] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:44:02.064 [DEBUG] [Thread-19009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:44:02.065 [DEBUG] [Thread-19009] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:44:02.065 [DEBUG] [Thread-19009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:44:02.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:44:02.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:44:02.122 [DEBUG] [Thread-19009] [transport.py] [_log()] userauth is OK
2025-12-25T21:44:02.122 [DEBUG] [Thread-19009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:44:02.122 [DEBUG] [Thread-19009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:44:02.122 [DEBUG] [Thread-19009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:44:02.122 [DEBUG] [Thread-19009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:44:02.141 [INFO] [Thread-19009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:44:02.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-25T21:44:02.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:44:02.997 [DEBUG] [Thread-19009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:44:02.997 [DEBUG] [Thread-19009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:44:03.045 [DEBUG] [Thread-19009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:44:03.045 [DEBUG] [Thread-19009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:44:03.054 [DEBUG] [Thread-19009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:44:03.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:44:03.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-25T21:44: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') -> 00000000
2025-12-25T21:44:03.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:44:03.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:44:03.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:44:03.088 [DEBUG] [Thread-19009] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:44:04.404 [DEBUG] [Thread-19011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:19.443 [DEBUG] [Thread-19012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:28.626 [DEBUG] [Thread-19013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:44:33.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:44:33.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-25T21:44:33.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 44, 10), 5.3, 70.64, 0.0, 12.18, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:44:33.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:44:10
2025-12-25T21:44:33.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:44:34.085 [DEBUG] [Thread-19014] [transport.py] [_log()] starting thread (client mode): 0xb6bf7ca0
2025-12-25T21:44:34.086 [DEBUG] [Thread-19014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:44:34.103 [DEBUG] [Thread-19014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:44:34.103 [INFO] [Thread-19014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] client lang: <none>
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] server lang: <none>
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] kex follows: False
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] Compression: none
2025-12-25T21:44:34.106 [DEBUG] [Thread-19014] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:44:34.118 [DEBUG] [Thread-19014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:44:34.119 [DEBUG] [Thread-19014] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:44:34.119 [DEBUG] [Thread-19014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:44:34.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:44:34.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:44:34.121 [DEBUG] [Thread-19014] [transport.py] [_log()] userauth is OK
2025-12-25T21:44:34.121 [DEBUG] [Thread-19014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:44:34.121 [DEBUG] [Thread-19014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:44:34.121 [DEBUG] [Thread-19014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:44:34.121 [DEBUG] [Thread-19014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:44:34.146 [INFO] [Thread-19014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:44:34.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:44:34.481 [DEBUG] [Thread-19016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:34.750 [DEBUG] [Thread-19014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:44:34.750 [DEBUG] [Thread-19014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:44:34.750 [DEBUG] [Thread-19014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:44:34.791 [DEBUG] [Thread-19014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:44:34.791 [DEBUG] [Thread-19014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:44:34.794 [DEBUG] [Thread-19014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:44:34.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:44:34.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:44:34.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:44:34.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:44:34.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:44:34.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:44:34.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:44:34.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:44:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:44:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.822281 -999.00  +16.20  13.02     73  +11.50 1 1 1 1 1     0    0 4.03 -31.26 ZNESW 13.2 13.0 180.4 15.3 17.1 -21.5 17.0 -21.1 16.8 -19.9 17.1 -20.9
2025-12-25T21:44:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:44:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:44:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.822281
2025-12-25T21:44:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:44:10', tmtdew=5.3, humidity=70.64, cloud=0.0, wind=12.18, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:44:11', seeing=1.42, atlas_timestamp='2025-12-25T19:44:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.12424999999999997, 0.11425000000000018, 0.08999999999999986, 0.09249999999999936, 0.1387500000000017, 0.09249999999999936, 0.16774999999999984, 0.1404999999999994, 0.08099999999999952, 0.11924999999999919, 0.0649999999999995, 0.11749999999999972, 0.1117499999999989, 0.11899999999999977, 0.129999999999999, 0.05924999999999869, 0.13649999999999984, 0.13099999999999845, 0.11424999999999841, 0.10749999999999815, 0.12074999999999747, 0.17774999999999963, 0.12875000000000014, 0.10599999999999987, 0.12400000000000055, 0.22075000000000067, 0.16249999999999964, 0.2190000000000012, 0.1620000000000008, 0.22900000000000098, 0.16850000000000165, 0.1427499999999995], zp_timestamp='2025-12-25T19:41:00')
2025-12-25T21:44:34.821 [DEBUG] [Thread-19014] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:44:34.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-25T21:44:34.926 [DEBUG] [Thread-19018] [transport.py] [_log()] starting thread (client mode): 0xb6b23010
2025-12-25T21:44:34.926 [DEBUG] [Thread-19018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:44:34.940 [DEBUG] [Thread-19018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:44:34.941 [INFO] [Thread-19018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:44:34.948 [DEBUG] [Thread-19018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] client lang: <none>
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] server lang: <none>
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] kex follows: False
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:44:34.949 [DEBUG] [Thread-19018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:44:34.950 [DEBUG] [Thread-19018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:44:34.950 [DEBUG] [Thread-19018] [transport.py] [_log()] Compression: none
2025-12-25T21:44:34.950 [DEBUG] [Thread-19018] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:44:35.005 [DEBUG] [Thread-19018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:44:35.006 [DEBUG] [Thread-19018] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:44:35.006 [DEBUG] [Thread-19018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:44:35.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:44:35.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:44:35.061 [DEBUG] [Thread-19018] [transport.py] [_log()] userauth is OK
2025-12-25T21:44:35.062 [DEBUG] [Thread-19018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:44:35.062 [DEBUG] [Thread-19018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:44:35.062 [DEBUG] [Thread-19018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:44:35.062 [DEBUG] [Thread-19018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:44:35.081 [INFO] [Thread-19018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:44:35.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-25T21:44:35.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:44:35.903 [DEBUG] [Thread-19018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:44:35.904 [DEBUG] [Thread-19018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:44:35.951 [DEBUG] [Thread-19018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:44:35.952 [DEBUG] [Thread-19018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:44:35.960 [DEBUG] [Thread-19018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:44:35.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:44:35.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:44:35.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:44:35.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:44:35.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:44:35.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:44:35.994 [DEBUG] [Thread-19018] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:44:49.513 [DEBUG] [Thread-19020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:50.327 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:44:50.328 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:04.554 [DEBUG] [Thread-19021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:06.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:45:06.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:45:06.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:45:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 44, 42), 5.25, 70.67, 0.0, 12.4, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:45:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:44:42
2025-12-25T21:45:06.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:45:06.966 [DEBUG] [Thread-19022] [transport.py] [_log()] starting thread (client mode): 0xb6baba60
2025-12-25T21:45:06.966 [DEBUG] [Thread-19022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:45:06.980 [DEBUG] [Thread-19022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:45:06.980 [INFO] [Thread-19022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:45:06.983 [DEBUG] [Thread-19022] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] client lang: <none>
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] server lang: <none>
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] kex follows: False
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] Compression: none
2025-12-25T21:45:06.984 [DEBUG] [Thread-19022] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:45:06.992 [DEBUG] [Thread-19022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:45:06.992 [DEBUG] [Thread-19022] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:45:06.993 [DEBUG] [Thread-19022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:45:06.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:45:06.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:45:06.994 [DEBUG] [Thread-19022] [transport.py] [_log()] userauth is OK
2025-12-25T21:45:06.994 [DEBUG] [Thread-19022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:45:06.994 [DEBUG] [Thread-19022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:45:06.994 [DEBUG] [Thread-19022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:45:06.994 [DEBUG] [Thread-19022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:45:07.006 [INFO] [Thread-19022] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:45:07.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:45:07.757 [DEBUG] [Thread-19022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:45:07.757 [DEBUG] [Thread-19022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:45:07.758 [DEBUG] [Thread-19022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:45:07.798 [DEBUG] [Thread-19022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:45:07.798 [DEBUG] [Thread-19022] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:45:07.801 [DEBUG] [Thread-19022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:45:07.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:45:07.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:45:07.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:45:07.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:45:07.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:45:07.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:45:07.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:45:07.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:45:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:45:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.822281 -999.00  +16.20  13.02     73  +11.50 1 1 1 1 1     0    0 4.03 -31.26 ZNESW 13.2 13.0 180.4 15.3 17.1 -21.5 17.0 -21.1 16.8 -19.9 17.1 -20.9
2025-12-25T21:45:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:45:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:45:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.822281
2025-12-25T21:45:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:45:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:45:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:45:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:45:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:45:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:44:42', tmtdew=5.25, humidity=70.67, cloud=0.0, wind=12.4, 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-25T21:44:43', seeing=1.27, atlas_timestamp='2025-12-25T19:44:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08274999999999899, 0.12424999999999997, 0.11425000000000018, 0.08999999999999986, 0.09249999999999936, 0.1387500000000017, 0.09249999999999936, 0.16774999999999984, 0.1404999999999994, 0.08099999999999952, 0.11924999999999919, 0.0649999999999995, 0.11749999999999972, 0.1117499999999989, 0.11899999999999977, 0.129999999999999, 0.05924999999999869, 0.13649999999999984, 0.13099999999999845, 0.11424999999999841, 0.10749999999999815, 0.12074999999999747, 0.17774999999999963, 0.12875000000000014, 0.10599999999999987, 0.12400000000000055, 0.22075000000000067, 0.16249999999999964, 0.2190000000000012, 0.1620000000000008, 0.22900000000000098, 0.16850000000000165, 0.1427499999999995], zp_timestamp='2025-12-25T19:41:00')
2025-12-25T21:45:07.826 [DEBUG] [Thread-19022] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:45:07.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-25T21:45:07.919 [DEBUG] [Thread-19025] [transport.py] [_log()] starting thread (client mode): 0xb6b746a0
2025-12-25T21:45:07.919 [DEBUG] [Thread-19025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:45:07.934 [DEBUG] [Thread-19025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:45:07.934 [INFO] [Thread-19025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:45:07.941 [DEBUG] [Thread-19025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:45:07.942 [DEBUG] [Thread-19025] [transport.py] [_log()] client lang: <none>
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] server lang: <none>
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] kex follows: False
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] Compression: none
2025-12-25T21:45:07.943 [DEBUG] [Thread-19025] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:45:08.002 [DEBUG] [Thread-19025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:45:08.003 [DEBUG] [Thread-19025] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:45:08.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:45:08.004 [DEBUG] [Thread-19025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:45:08.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:45:08.061 [DEBUG] [Thread-19025] [transport.py] [_log()] userauth is OK
2025-12-25T21:45:08.062 [DEBUG] [Thread-19025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:45:08.062 [DEBUG] [Thread-19025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:45:08.062 [DEBUG] [Thread-19025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:45:08.062 [DEBUG] [Thread-19025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:45:08.081 [INFO] [Thread-19025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:45:08.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-25T21:45:08.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:45:08.953 [DEBUG] [Thread-19025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:45:08.953 [DEBUG] [Thread-19025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:45:09.001 [DEBUG] [Thread-19025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:45:09.001 [DEBUG] [Thread-19025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:45:09.010 [DEBUG] [Thread-19025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:45:09.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:45:09.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-25T21:45:09.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:45:09.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:45:09.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:45:09.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:45:09.046 [DEBUG] [Thread-19025] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:45:19.592 [DEBUG] [Thread-19027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:28.678 [DEBUG] [Thread-19028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:34.641 [DEBUG] [Thread-19029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:39.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:45:39.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:45:39.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-25T21:45:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 45, 14), 5.26, 70.61, 0.0, 13.46, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:45:39.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:45:14
2025-12-25T21:45:39.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:45:40.055 [DEBUG] [Thread-19030] [transport.py] [_log()] starting thread (client mode): 0xb6bf49a0
2025-12-25T21:45:40.056 [DEBUG] [Thread-19030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:45:40.076 [DEBUG] [Thread-19030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:45:40.077 [INFO] [Thread-19030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:45:40.080 [DEBUG] [Thread-19030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:45:40.080 [DEBUG] [Thread-19030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:45:40.080 [DEBUG] [Thread-19030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:45:40.080 [DEBUG] [Thread-19030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:40.080 [DEBUG] [Thread-19030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] client lang: <none>
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] server lang: <none>
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] kex follows: False
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:45:40.081 [DEBUG] [Thread-19030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:45:40.082 [DEBUG] [Thread-19030] [transport.py] [_log()] Compression: none
2025-12-25T21:45:40.082 [DEBUG] [Thread-19030] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:45:40.100 [DEBUG] [Thread-19030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:45:40.101 [DEBUG] [Thread-19030] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:45:40.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:45:40.103 [DEBUG] [Thread-19030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:45:40.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:45:40.105 [DEBUG] [Thread-19030] [transport.py] [_log()] userauth is OK
2025-12-25T21:45:40.105 [DEBUG] [Thread-19030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:45:40.105 [DEBUG] [Thread-19030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:45:40.105 [DEBUG] [Thread-19030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:45:40.105 [DEBUG] [Thread-19030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:45:40.124 [INFO] [Thread-19030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:45:40.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:45:40.756 [DEBUG] [Thread-19030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:45:40.757 [DEBUG] [Thread-19030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:45:40.757 [DEBUG] [Thread-19030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:45:40.798 [DEBUG] [Thread-19030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:45:40.798 [DEBUG] [Thread-19030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:45:40.802 [DEBUG] [Thread-19030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:45:40.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:45:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:45:40.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:45:40.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:45:40.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:45:40.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:45:40.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:45:40.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:45:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:45:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.822628 -999.00  +16.20   9.17     74  +11.60 1 1 1 1 1     0    0 3.93 -31.67 ZNESW 12.0 9.2 182.2 14.1 17.1 -21.4 16.9 -21.2 16.9 -19.8 17.1 -20.8
2025-12-25T21:45:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:45:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:45:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.822628
2025-12-25T21:45:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:45:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:45:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:45:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:45:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:45:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:45:14', tmtdew=5.26, humidity=70.61, cloud=0.0, wind=13.46, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:45:15', seeing=1.27, atlas_timestamp='2025-12-25T19:44:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:44:00')
2025-12-25T21:45:40.831 [DEBUG] [Thread-19030] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:45:40.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-25T21:45:40.924 [DEBUG] [Thread-19033] [transport.py] [_log()] starting thread (client mode): 0xb6b7e1a0
2025-12-25T21:45:40.924 [DEBUG] [Thread-19033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:45:40.943 [DEBUG] [Thread-19033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:45:40.943 [INFO] [Thread-19033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:45:40.950 [DEBUG] [Thread-19033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:45:40.950 [DEBUG] [Thread-19033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] client lang: <none>
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] server lang: <none>
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] kex follows: False
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] Compression: none
2025-12-25T21:45:40.951 [DEBUG] [Thread-19033] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:45:41.012 [DEBUG] [Thread-19033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:45:41.013 [DEBUG] [Thread-19033] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:45:41.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:45:41.014 [DEBUG] [Thread-19033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:45:41.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:45:41.069 [DEBUG] [Thread-19033] [transport.py] [_log()] userauth is OK
2025-12-25T21:45:41.069 [DEBUG] [Thread-19033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:45:41.069 [DEBUG] [Thread-19033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:45:41.069 [DEBUG] [Thread-19033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:45:41.069 [DEBUG] [Thread-19033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:45:41.088 [INFO] [Thread-19033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:45:41.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-25T21:45:41.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:45:41.884 [DEBUG] [Thread-19033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:45:41.884 [DEBUG] [Thread-19033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:45:41.932 [DEBUG] [Thread-19033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:45:41.932 [DEBUG] [Thread-19033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:45:41.941 [DEBUG] [Thread-19033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:45:41.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:45:41.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:45: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') -> 00000000
2025-12-25T21:45:41.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:45:41.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:45:41.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:45:41.977 [DEBUG] [Thread-19033] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:45:49.675 [DEBUG] [Thread-19035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:50.531 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:45:50.533 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:04.726 [DEBUG] [Thread-19036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:46:12.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:46:12.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-25T21:46:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 45, 46), 5.26, 70.59, 0.0, 11.8, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:46:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:45:46
2025-12-25T21:46:12.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:46:12.966 [DEBUG] [Thread-19037] [transport.py] [_log()] starting thread (client mode): 0xb6bb5a20
2025-12-25T21:46:12.966 [DEBUG] [Thread-19037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:46:12.986 [DEBUG] [Thread-19037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:46:12.987 [INFO] [Thread-19037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:46:12.987 [DEBUG] [Thread-19037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] client lang: <none>
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] server lang: <none>
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] kex follows: False
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] Compression: none
2025-12-25T21:46:12.988 [DEBUG] [Thread-19037] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:46:12.996 [DEBUG] [Thread-19037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:46:12.996 [DEBUG] [Thread-19037] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:46:12.997 [DEBUG] [Thread-19037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:46:12.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:46:12.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:46:12.998 [DEBUG] [Thread-19037] [transport.py] [_log()] userauth is OK
2025-12-25T21:46:12.998 [DEBUG] [Thread-19037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:46:12.998 [DEBUG] [Thread-19037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:46:12.998 [DEBUG] [Thread-19037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:46:12.998 [DEBUG] [Thread-19037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:46:13.011 [INFO] [Thread-19037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:46:13.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:46:13.679 [DEBUG] [Thread-19037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:46:13.680 [DEBUG] [Thread-19037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:46:13.680 [DEBUG] [Thread-19037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:46:13.721 [DEBUG] [Thread-19037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:46:13.721 [DEBUG] [Thread-19037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:46:13.724 [DEBUG] [Thread-19037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:46:13.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:46:13.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:46:13.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:46:13.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:46:13.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:46:13.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:46:13.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.823323 -999.00  +16.10  13.50     74  +11.60 1 1 1 1 1     0    0 3.88 -31.96 ZNESW 12.1 13.5 172.2 16.3 17.1 -21.5 17.0 -21.3 16.8 -19.8 17.1 -20.8
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.823323
2025-12-25T21:46:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:46:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:46:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:46:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:46:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:46:13.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:45:46', tmtdew=5.26, humidity=70.59, cloud=0.0, wind=11.8, 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-25T21:45:47', seeing=1.11, atlas_timestamp='2025-12-25T19:45:35.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:44:00')
2025-12-25T21:46:13.744 [DEBUG] [Thread-19037] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:46:13.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:46:13.825 [DEBUG] [Thread-19040] [transport.py] [_log()] starting thread (client mode): 0xb6b23280
2025-12-25T21:46:13.825 [DEBUG] [Thread-19040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:46:13.844 [DEBUG] [Thread-19040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:46:13.844 [INFO] [Thread-19040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:46:13.852 [DEBUG] [Thread-19040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:46:13.853 [DEBUG] [Thread-19040] [transport.py] [_log()] client lang: <none>
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] server lang: <none>
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] kex follows: False
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:46:13.854 [DEBUG] [Thread-19040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:46:13.855 [DEBUG] [Thread-19040] [transport.py] [_log()] Compression: none
2025-12-25T21:46:13.855 [DEBUG] [Thread-19040] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:46:13.913 [DEBUG] [Thread-19040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:46:13.913 [DEBUG] [Thread-19040] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:46:13.914 [DEBUG] [Thread-19040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:46:13.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:46:13.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:46:13.968 [DEBUG] [Thread-19040] [transport.py] [_log()] userauth is OK
2025-12-25T21:46:13.969 [DEBUG] [Thread-19040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:46:13.969 [DEBUG] [Thread-19040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:46:13.969 [DEBUG] [Thread-19040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:46:13.969 [DEBUG] [Thread-19040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:46:13.988 [INFO] [Thread-19040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:46:13.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-25T21:46:13.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:46:14.866 [DEBUG] [Thread-19040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:46:14.866 [DEBUG] [Thread-19040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:46:14.916 [DEBUG] [Thread-19040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:46:14.916 [DEBUG] [Thread-19040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:46:14.925 [DEBUG] [Thread-19040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:46:14.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:46:14.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-25T21:46:14.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:46:14.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:46:14.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:46:14.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:46:14.969 [DEBUG] [Thread-19040] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:46:19.755 [DEBUG] [Thread-19042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:28.743 [DEBUG] [Thread-19043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:34.794 [DEBUG] [Thread-19044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:44.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:46:44.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:46:44.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-25T21:46:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 46, 19), 5.26, 70.61, 0.0, 11.43, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:46:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:46:19
2025-12-25T21:46:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:46:46.020 [DEBUG] [Thread-19045] [transport.py] [_log()] starting thread (client mode): 0xb6b60c70
2025-12-25T21:46:46.021 [DEBUG] [Thread-19045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:46:46.040 [DEBUG] [Thread-19045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:46:46.040 [INFO] [Thread-19045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] client lang: <none>
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] server lang: <none>
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] kex follows: False
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] Compression: none
2025-12-25T21:46:46.044 [DEBUG] [Thread-19045] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:46:46.058 [DEBUG] [Thread-19045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:46:46.058 [DEBUG] [Thread-19045] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:46:46.058 [DEBUG] [Thread-19045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:46:46.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:46:46.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:46:46.059 [DEBUG] [Thread-19045] [transport.py] [_log()] userauth is OK
2025-12-25T21:46:46.059 [DEBUG] [Thread-19045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:46:46.059 [DEBUG] [Thread-19045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:46:46.059 [DEBUG] [Thread-19045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:46:46.059 [DEBUG] [Thread-19045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:46:46.068 [INFO] [Thread-19045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:46:46.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:46:46.721 [DEBUG] [Thread-19045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:46:46.722 [DEBUG] [Thread-19045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:46:46.722 [DEBUG] [Thread-19045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:46:46.763 [DEBUG] [Thread-19045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:46:46.763 [DEBUG] [Thread-19045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:46:46.765 [DEBUG] [Thread-19045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:46:46.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:46:46.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:46:46.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:46:46.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:46:46.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:46:46.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:46:46.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:46:46.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.823670 -999.00  +16.10   9.83     74  +11.50 1 1 1 1 1     0    0 3.80 -36.04 ZNESW 7.4 9.8 191.5 15.8 17.1 -21.5 16.9 -21.1 16.8 -19.8 17.0 -20.7
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.823670
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:46:46.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:46:19', tmtdew=5.26, humidity=70.61, cloud=0.0, wind=11.43, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:46:19', seeing=1.08, atlas_timestamp='2025-12-25T19:46:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:44:00')
2025-12-25T21:46:46.785 [DEBUG] [Thread-19045] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:46:46.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:46:46.868 [DEBUG] [Thread-19048] [transport.py] [_log()] starting thread (client mode): 0xb6b74c10
2025-12-25T21:46:46.869 [DEBUG] [Thread-19048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:46:46.883 [DEBUG] [Thread-19048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:46:46.883 [INFO] [Thread-19048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] client lang: <none>
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] server lang: <none>
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] kex follows: False
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] Compression: none
2025-12-25T21:46:46.891 [DEBUG] [Thread-19048] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:46:46.946 [DEBUG] [Thread-19048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:46:46.946 [DEBUG] [Thread-19048] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:46:46.946 [DEBUG] [Thread-19048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:46:46.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:46:46.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:46:47.003 [DEBUG] [Thread-19048] [transport.py] [_log()] userauth is OK
2025-12-25T21:46:47.003 [DEBUG] [Thread-19048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:46:47.003 [DEBUG] [Thread-19048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:46:47.003 [DEBUG] [Thread-19048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:46:47.003 [DEBUG] [Thread-19048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:46:47.020 [INFO] [Thread-19048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:46:47.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-25T21:46:47.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:46:47.895 [DEBUG] [Thread-19048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:46:47.895 [DEBUG] [Thread-19048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:46:47.943 [DEBUG] [Thread-19048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:46:47.943 [DEBUG] [Thread-19048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:46:47.952 [DEBUG] [Thread-19048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:46:47.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:46:47.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:46:47.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-25T21:46:47.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:46:47.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:46:47.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:46:47.983 [DEBUG] [Thread-19048] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:46:49.828 [DEBUG] [Thread-19050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:50.728 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:46:50.730 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:04.890 [DEBUG] [Thread-19051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:17.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:47:17.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:47:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:47:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 46, 51), 5.24, 71.21, 0.0, 15.18, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:47:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:46:51
2025-12-25T21:47:18.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:47:18.971 [DEBUG] [Thread-19052] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f60
2025-12-25T21:47:18.971 [DEBUG] [Thread-19052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:47:18.993 [DEBUG] [Thread-19052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:47:18.993 [INFO] [Thread-19052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] client lang: <none>
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] server lang: <none>
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] kex follows: False
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] Compression: none
2025-12-25T21:47:18.996 [DEBUG] [Thread-19052] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:47:19.014 [DEBUG] [Thread-19052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:47:19.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:47:19.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] userauth is OK
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:47:19.015 [DEBUG] [Thread-19052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:47:19.024 [INFO] [Thread-19052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:47:19.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:47:19.794 [DEBUG] [Thread-19052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:47:19.794 [DEBUG] [Thread-19052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:47:19.795 [DEBUG] [Thread-19052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:47:19.835 [DEBUG] [Thread-19052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:47:19.835 [DEBUG] [Thread-19052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:47:19.839 [DEBUG] [Thread-19052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:47:19.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:47:19.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:47:19.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:47:19.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:47:19.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:47:19.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:47:19.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:47:19.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:47:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:47:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.824017 -999.00  +16.10  10.13     74  +11.50 1 1 1 1 1     0    0 3.82 -31.71 ZNESW 10.5 10.1 194.4 14.7 17.1 -21.5 17.0 -21.1 16.8 -19.8 17.0 -20.6
2025-12-25T21:47:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:47:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:47:19.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.824017
2025-12-25T21:47:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:47:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:47:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:47:19.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:47:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:47:19.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:46:51', tmtdew=5.24, humidity=71.21, cloud=0.0, wind=15.18, 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-25T21:46:51', seeing=1.09, atlas_timestamp='2025-12-25T19:46:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:44:00')
2025-12-25T21:47:19.866 [DEBUG] [Thread-19052] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:47:19.924 [DEBUG] [Thread-19055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:19.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-25T21:47:19.960 [DEBUG] [Thread-19056] [transport.py] [_log()] starting thread (client mode): 0xb6b7fc10
2025-12-25T21:47:19.960 [DEBUG] [Thread-19056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:47:19.977 [DEBUG] [Thread-19056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:47:19.977 [INFO] [Thread-19056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:47:19.990 [DEBUG] [Thread-19056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:47:19.990 [DEBUG] [Thread-19056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:47:19.990 [DEBUG] [Thread-19056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] client lang: <none>
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] server lang: <none>
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] kex follows: False
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:47:19.991 [DEBUG] [Thread-19056] [transport.py] [_log()] Compression: none
2025-12-25T21:47:19.992 [DEBUG] [Thread-19056] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:47:20.046 [DEBUG] [Thread-19056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:47:20.047 [DEBUG] [Thread-19056] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:47:20.047 [DEBUG] [Thread-19056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:47:20.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:47:20.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:47:20.103 [DEBUG] [Thread-19056] [transport.py] [_log()] userauth is OK
2025-12-25T21:47:20.104 [DEBUG] [Thread-19056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:47:20.104 [DEBUG] [Thread-19056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:47:20.104 [DEBUG] [Thread-19056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:47:20.104 [DEBUG] [Thread-19056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:47:20.123 [INFO] [Thread-19056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:47:20.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-25T21:47:20.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:47:20.929 [DEBUG] [Thread-19056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:47:20.930 [DEBUG] [Thread-19056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:47:20.977 [DEBUG] [Thread-19056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:47:20.977 [DEBUG] [Thread-19056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:47:20.988 [DEBUG] [Thread-19056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:47:21.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:47:21.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:47:21.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:47:21.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:47:21.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:47:21.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:47:21.027 [DEBUG] [Thread-19056] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:47:28.801 [DEBUG] [Thread-19058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:34.964 [DEBUG] [Thread-19059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:50.001 [DEBUG] [Thread-19060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:50.932 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:50.933 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:47:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:47:51.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:47:51.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:47:51.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 47, 23), 5.25, 71.16, 0.0, 15.26, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:47:51.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:47:23
2025-12-25T21:47:51.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:47:52.033 [DEBUG] [Thread-19061] [transport.py] [_log()] starting thread (client mode): 0xb6b20730
2025-12-25T21:47:52.033 [DEBUG] [Thread-19061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:47:52.053 [DEBUG] [Thread-19061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:47:52.053 [INFO] [Thread-19061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:47:52.056 [DEBUG] [Thread-19061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:47:52.056 [DEBUG] [Thread-19061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:47:52.056 [DEBUG] [Thread-19061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:47:52.056 [DEBUG] [Thread-19061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:52.056 [DEBUG] [Thread-19061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] client lang: <none>
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] server lang: <none>
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] kex follows: False
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] Compression: none
2025-12-25T21:47:52.057 [DEBUG] [Thread-19061] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:47:52.074 [DEBUG] [Thread-19061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:47:52.074 [DEBUG] [Thread-19061] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:47:52.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:47:52.075 [DEBUG] [Thread-19061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:47:52.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:47:52.078 [DEBUG] [Thread-19061] [transport.py] [_log()] userauth is OK
2025-12-25T21:47:52.078 [DEBUG] [Thread-19061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:47:52.078 [DEBUG] [Thread-19061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:47:52.078 [DEBUG] [Thread-19061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:47:52.078 [DEBUG] [Thread-19061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:47:52.114 [INFO] [Thread-19061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:47:52.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:47:52.750 [DEBUG] [Thread-19061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:47:52.750 [DEBUG] [Thread-19061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:47:52.751 [DEBUG] [Thread-19061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:47:52.791 [DEBUG] [Thread-19061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:47:52.791 [DEBUG] [Thread-19061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:47:52.795 [DEBUG] [Thread-19061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:47:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:47:52.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:47:52.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:47:52.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:47:52.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:47:52.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:47:52.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:47:52.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:47:52.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.824364 -999.00  +16.10   7.62     74  +11.50 1 1 1 1 1     0    0 3.93 -33.15 ZNESW 9.4 7.6 191.1 13.1 17.1 -21.5 16.9 -20.9 16.8 -19.8 17.1 -20.6
2025-12-25T21:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.824364
2025-12-25T21:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:47:23', tmtdew=5.25, humidity=71.16, cloud=0.0, wind=15.26, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:47:23', seeing=1.36, atlas_timestamp='2025-12-25T19:47:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:44:00')
2025-12-25T21:47:52.823 [DEBUG] [Thread-19061] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:47:52.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-25T21:47:52.916 [DEBUG] [Thread-19064] [transport.py] [_log()] starting thread (client mode): 0xb6b01c90
2025-12-25T21:47:52.916 [DEBUG] [Thread-19064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:47:52.932 [DEBUG] [Thread-19064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:47:52.932 [INFO] [Thread-19064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:47:52.939 [DEBUG] [Thread-19064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] client lang: <none>
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] server lang: <none>
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] kex follows: False
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] Compression: none
2025-12-25T21:47:52.940 [DEBUG] [Thread-19064] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:47:53.000 [DEBUG] [Thread-19064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:47:53.000 [DEBUG] [Thread-19064] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:47:53.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:47:53.001 [DEBUG] [Thread-19064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:47:53.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:47:53.059 [DEBUG] [Thread-19064] [transport.py] [_log()] userauth is OK
2025-12-25T21:47:53.060 [DEBUG] [Thread-19064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:47:53.060 [DEBUG] [Thread-19064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:47:53.060 [DEBUG] [Thread-19064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:47:53.060 [DEBUG] [Thread-19064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:47:53.079 [INFO] [Thread-19064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:47:53.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-25T21:47:53.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:47:53.886 [DEBUG] [Thread-19064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:47:53.886 [DEBUG] [Thread-19064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:47:53.934 [DEBUG] [Thread-19064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:47:53.934 [DEBUG] [Thread-19064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:47:53.944 [DEBUG] [Thread-19064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:47:53.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:47: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-25T21:47:53.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-25T21:47:53.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:47:53.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:47:53.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:47:53.984 [DEBUG] [Thread-19064] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:48:05.032 [DEBUG] [Thread-19066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:20.070 [DEBUG] [Thread-19067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:48:23.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:48:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:48:24.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 47, 55), 5.24, 71.19, 0.0, 15.47, 15.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:48:24.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:47:55
2025-12-25T21:48:24.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:48:24.978 [DEBUG] [Thread-19068] [transport.py] [_log()] starting thread (client mode): 0xb6bb91b0
2025-12-25T21:48:24.979 [DEBUG] [Thread-19068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:48:24.994 [DEBUG] [Thread-19068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:48:24.994 [INFO] [Thread-19068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:48:24.997 [DEBUG] [Thread-19068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:48:24.997 [DEBUG] [Thread-19068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] client lang: <none>
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] server lang: <none>
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] kex follows: False
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] Compression: none
2025-12-25T21:48:24.998 [DEBUG] [Thread-19068] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:48:25.016 [DEBUG] [Thread-19068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:48:25.017 [DEBUG] [Thread-19068] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:48:25.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:48:25.019 [DEBUG] [Thread-19068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:48:25.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:48:25.021 [DEBUG] [Thread-19068] [transport.py] [_log()] userauth is OK
2025-12-25T21:48:25.021 [DEBUG] [Thread-19068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:48:25.021 [DEBUG] [Thread-19068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:48:25.021 [DEBUG] [Thread-19068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:48:25.022 [DEBUG] [Thread-19068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:48:25.041 [INFO] [Thread-19068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:48:25.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:48:25.839 [DEBUG] [Thread-19068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:48:25.840 [DEBUG] [Thread-19068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:48:25.840 [DEBUG] [Thread-19068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:48:25.881 [DEBUG] [Thread-19068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:48:25.882 [DEBUG] [Thread-19068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:48:25.884 [DEBUG] [Thread-19068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:48:25.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:48:25.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:48:25.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:48:25.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:48:25.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:48:25.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:48:25.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:48:25.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:48:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:48:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.824711 -999.00  +16.10   8.54     74  +11.50 1 1 1 1 1     0    0 3.91 -30.49 ZNESW 6.8 8.5 188.6 14.8 17.1 -21.5 16.9 -21.4 16.8 -19.8 17.1 -20.7
2025-12-25T21:48:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:48:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:48:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.824711
2025-12-25T21:48:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:48:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:48:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:48:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:48:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:48:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:47:55', tmtdew=5.24, humidity=71.19, cloud=0.0, wind=15.47, 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-25T21:47:55', seeing=1.36, atlas_timestamp='2025-12-25T19:47:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:44:00')
2025-12-25T21:48:25.907 [DEBUG] [Thread-19068] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:48:25.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:48:26.001 [DEBUG] [Thread-19071] [transport.py] [_log()] starting thread (client mode): 0xb6b636a0
2025-12-25T21:48:26.001 [DEBUG] [Thread-19071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:48:26.016 [DEBUG] [Thread-19071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:48:26.016 [INFO] [Thread-19071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:48:26.024 [DEBUG] [Thread-19071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:48:26.024 [DEBUG] [Thread-19071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:48:26.024 [DEBUG] [Thread-19071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:48:26.024 [DEBUG] [Thread-19071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] client lang: <none>
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] server lang: <none>
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] kex follows: False
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] Compression: none
2025-12-25T21:48:26.025 [DEBUG] [Thread-19071] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:48:26.086 [DEBUG] [Thread-19071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:48:26.086 [DEBUG] [Thread-19071] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:48:26.087 [DEBUG] [Thread-19071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:48:26.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:48:26.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:48:26.142 [DEBUG] [Thread-19071] [transport.py] [_log()] userauth is OK
2025-12-25T21:48:26.143 [DEBUG] [Thread-19071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:48:26.143 [DEBUG] [Thread-19071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:48:26.143 [DEBUG] [Thread-19071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:48:26.143 [DEBUG] [Thread-19071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:48:26.162 [INFO] [Thread-19071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:48:26.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-25T21:48:26.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:48:27.007 [DEBUG] [Thread-19071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:48:27.007 [DEBUG] [Thread-19071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:48:27.055 [DEBUG] [Thread-19071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:48:27.055 [DEBUG] [Thread-19071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:48:27.064 [DEBUG] [Thread-19071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:48:27.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:48:27.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-25T21:48:27.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-25T21:48:27.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:48:27.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:48:27.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:48:27.101 [DEBUG] [Thread-19071] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:48:28.853 [DEBUG] [Thread-19073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:35.105 [DEBUG] [Thread-19074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:38.588 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:50.154 [DEBUG] [Thread-19075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:51.133 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:51.135 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:48:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:48:57.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:48:57.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-25T21:48:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 48, 27), 5.22, 71.31, 0.0, 14.93, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:48:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:48:27
2025-12-25T21:48:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:48:58.104 [DEBUG] [Thread-19076] [transport.py] [_log()] starting thread (client mode): 0xb6bb9e10
2025-12-25T21:48:58.104 [DEBUG] [Thread-19076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:48:58.125 [DEBUG] [Thread-19076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:48:58.125 [INFO] [Thread-19076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:48:58.128 [DEBUG] [Thread-19076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:48:58.128 [DEBUG] [Thread-19076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:48:58.128 [DEBUG] [Thread-19076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:48:58.128 [DEBUG] [Thread-19076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] client lang: <none>
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] server lang: <none>
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] kex follows: False
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:48:58.129 [DEBUG] [Thread-19076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:48:58.130 [DEBUG] [Thread-19076] [transport.py] [_log()] Compression: none
2025-12-25T21:48:58.130 [DEBUG] [Thread-19076] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:48:58.147 [DEBUG] [Thread-19076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:48:58.148 [DEBUG] [Thread-19076] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:48:58.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:48:58.149 [DEBUG] [Thread-19076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:48:58.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:48:58.150 [DEBUG] [Thread-19076] [transport.py] [_log()] userauth is OK
2025-12-25T21:48:58.151 [DEBUG] [Thread-19076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:48:58.151 [DEBUG] [Thread-19076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:48:58.151 [DEBUG] [Thread-19076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:48:58.151 [DEBUG] [Thread-19076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:48:58.185 [INFO] [Thread-19076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:48:58.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:48:58.836 [DEBUG] [Thread-19076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:48:58.836 [DEBUG] [Thread-19076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:48:58.836 [DEBUG] [Thread-19076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:48:58.877 [DEBUG] [Thread-19076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:48:58.877 [DEBUG] [Thread-19076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:48:58.881 [DEBUG] [Thread-19076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:48:58.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:48:58.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:48:58.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:48:58.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:48:58.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:48:58.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:48:58.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:48:58.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.825059 -999.00  +16.10  17.52     74  +11.50 1 1 1 1 1     0    0 4.02 -30.24 ZNESW 12.5 17.5 196.0 19.4 17.1 -21.6 16.9 -21.6 16.8 -19.9 17.0 -20.9
2025-12-25T21:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:48:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.825059
2025-12-25T21:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:48:58.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:48:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:48:58.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:48:27', tmtdew=5.22, humidity=71.31, cloud=0.0, wind=14.93, 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-25T21:48:27', seeing=1.46, atlas_timestamp='2025-12-25T19:48:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:46:00')
2025-12-25T21:48:58.908 [DEBUG] [Thread-19076] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:48:58.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-25T21:48:59.001 [DEBUG] [Thread-19079] [transport.py] [_log()] starting thread (client mode): 0xb6bb9480
2025-12-25T21:48:59.001 [DEBUG] [Thread-19079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:48:59.017 [DEBUG] [Thread-19079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:48:59.017 [INFO] [Thread-19079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] client lang: <none>
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] server lang: <none>
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] kex follows: False
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:48:59.024 [DEBUG] [Thread-19079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:48:59.025 [DEBUG] [Thread-19079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:48:59.025 [DEBUG] [Thread-19079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:48:59.025 [DEBUG] [Thread-19079] [transport.py] [_log()] Compression: none
2025-12-25T21:48:59.025 [DEBUG] [Thread-19079] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:48:59.080 [DEBUG] [Thread-19079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:48:59.080 [DEBUG] [Thread-19079] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:48:59.080 [DEBUG] [Thread-19079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:48:59.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:48:59.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:48:59.138 [DEBUG] [Thread-19079] [transport.py] [_log()] userauth is OK
2025-12-25T21:48:59.139 [DEBUG] [Thread-19079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:48:59.139 [DEBUG] [Thread-19079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:48:59.139 [DEBUG] [Thread-19079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:48:59.139 [DEBUG] [Thread-19079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:48:59.157 [INFO] [Thread-19079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:48:59.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-25T21:48:59.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:48:59.993 [DEBUG] [Thread-19079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:48:59.994 [DEBUG] [Thread-19079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:49:00.041 [DEBUG] [Thread-19079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:49:00.041 [DEBUG] [Thread-19079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:49:00.049 [DEBUG] [Thread-19079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:49:00.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:49:00.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-25T21:49:00.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-25T21:49:00.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:49:00.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:49:00.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:49:00.081 [DEBUG] [Thread-19079] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:49:05.188 [DEBUG] [Thread-19081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:49:20.239 [DEBUG] [Thread-19082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:49:28.918 [DEBUG] [Thread-19083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:49:30.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:49:30.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:49:30.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-25T21:49:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 48, 59), 5.24, 71.19, 0.0, 16.83, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:49:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:48:59
2025-12-25T21:49:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:49:31.077 [DEBUG] [Thread-19084] [transport.py] [_log()] starting thread (client mode): 0xb6bb9120
2025-12-25T21:49:31.077 [DEBUG] [Thread-19084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:49:31.097 [DEBUG] [Thread-19084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:49:31.098 [INFO] [Thread-19084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:49:31.100 [DEBUG] [Thread-19084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] client lang: <none>
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] server lang: <none>
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] kex follows: False
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:49:31.101 [DEBUG] [Thread-19084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:49:31.102 [DEBUG] [Thread-19084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:49:31.102 [DEBUG] [Thread-19084] [transport.py] [_log()] Compression: none
2025-12-25T21:49:31.102 [DEBUG] [Thread-19084] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:49:31.121 [DEBUG] [Thread-19084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:49:31.122 [DEBUG] [Thread-19084] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:49:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:49:31.123 [DEBUG] [Thread-19084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:49:31.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:49:31.125 [DEBUG] [Thread-19084] [transport.py] [_log()] userauth is OK
2025-12-25T21:49:31.125 [DEBUG] [Thread-19084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:49:31.125 [DEBUG] [Thread-19084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:49:31.125 [DEBUG] [Thread-19084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:49:31.125 [DEBUG] [Thread-19084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:49:31.150 [INFO] [Thread-19084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:49:31.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:49:31.959 [DEBUG] [Thread-19084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:49:31.959 [DEBUG] [Thread-19084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:49:31.960 [DEBUG] [Thread-19084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:49:32.000 [DEBUG] [Thread-19084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:49:32.001 [DEBUG] [Thread-19084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:49:32.003 [DEBUG] [Thread-19084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:49:32.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:49:32.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:49:32.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:49:32.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:49:32.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:49:32.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:49:32.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:49:32.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.825753 -999.00  +16.00  15.02     74  +11.50 1 1 1 1 1     0    0 3.77 -31.95 ZNESW 8.3 15.0 203.6 17.6 17.0 -21.7 16.9 -21.2 16.8 -19.9 17.0 -20.8
2025-12-25T21:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:49:32.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.825753
2025-12-25T21:49:32.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:49:32.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:49:32.025 [DEBUG] [Thread-19084] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:49:32.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:48:59', tmtdew=5.24, humidity=71.19, cloud=0.0, wind=16.83, 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-25T21:48:59', seeing=1.33, atlas_timestamp='2025-12-25T19:49:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:46:00')
2025-12-25T21:49:32.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-25T21:49:32.125 [DEBUG] [Thread-19087] [transport.py] [_log()] starting thread (client mode): 0xb6bbac80
2025-12-25T21:49:32.125 [DEBUG] [Thread-19087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:49:32.141 [DEBUG] [Thread-19087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:49:32.141 [INFO] [Thread-19087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] client lang: <none>
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] server lang: <none>
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] kex follows: False
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] Compression: none
2025-12-25T21:49:32.149 [DEBUG] [Thread-19087] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:49:32.204 [DEBUG] [Thread-19087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:49:32.204 [DEBUG] [Thread-19087] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:49:32.205 [DEBUG] [Thread-19087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:49:32.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:49:32.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:49:32.262 [DEBUG] [Thread-19087] [transport.py] [_log()] userauth is OK
2025-12-25T21:49:32.262 [DEBUG] [Thread-19087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:49:32.262 [DEBUG] [Thread-19087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:49:32.262 [DEBUG] [Thread-19087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:49:32.262 [DEBUG] [Thread-19087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:49:32.276 [INFO] [Thread-19087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:49:32.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-25T21:49:32.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:49:33.103 [DEBUG] [Thread-19087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:49:33.103 [DEBUG] [Thread-19087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:49:33.151 [DEBUG] [Thread-19087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:49:33.151 [DEBUG] [Thread-19087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:49:33.159 [DEBUG] [Thread-19087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:49:33.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:49:33.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')
2025-12-25T21:49:33.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:49:33.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:49:33.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:49:33.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:49:33.191 [DEBUG] [Thread-19087] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:49:35.271 [DEBUG] [Thread-19089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:49:50.324 [DEBUG] [Thread-19090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:49:51.337 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:49:51.338 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:50:03.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:50:03.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-25T21:50:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 49, 31), 5.23, 71.26, 0.0, 16.76, 15.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:50:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:49:31
2025-12-25T21:50:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:50:04.210 [DEBUG] [Thread-19091] [transport.py] [_log()] starting thread (client mode): 0xb6bba5f0
2025-12-25T21:50:04.210 [DEBUG] [Thread-19091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:50:04.230 [DEBUG] [Thread-19091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:50:04.231 [INFO] [Thread-19091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] client lang: <none>
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] server lang: <none>
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] kex follows: False
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] Compression: none
2025-12-25T21:50:04.234 [DEBUG] [Thread-19091] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:50:04.249 [DEBUG] [Thread-19091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:50:04.250 [DEBUG] [Thread-19091] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:50:04.250 [DEBUG] [Thread-19091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:50:04.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:50:04.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:50:04.251 [DEBUG] [Thread-19091] [transport.py] [_log()] userauth is OK
2025-12-25T21:50:04.251 [DEBUG] [Thread-19091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:50:04.251 [DEBUG] [Thread-19091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:50:04.251 [DEBUG] [Thread-19091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:50:04.251 [DEBUG] [Thread-19091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:50:04.261 [INFO] [Thread-19091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:50:04.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:50:05.095 [DEBUG] [Thread-19091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:50:05.095 [DEBUG] [Thread-19091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:50:05.095 [DEBUG] [Thread-19091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:50:05.135 [DEBUG] [Thread-19091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:50:05.135 [DEBUG] [Thread-19091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:50:05.138 [DEBUG] [Thread-19091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:50:05.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:50:05.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:50:05.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:50:05.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:50:05.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:50:05.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:50:05.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:50:05.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.826100 -999.00  +16.00   9.53     74  +11.60 1 1 1 1 1     0    0 3.89 -31.41 ZNESW 9.7 9.5 213.9 18.0 17.0 -21.8 16.9 -21.2 16.7 -19.9 17.0 -20.7
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.826100
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:50:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:49:31', tmtdew=5.23, humidity=71.26, cloud=0.0, wind=16.76, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:49:32', seeing=1.17, atlas_timestamp='2025-12-25T19:49:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:46:00')
2025-12-25T21:50:05.167 [DEBUG] [Thread-19091] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:50:05.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:50:05.251 [DEBUG] [Thread-19094] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T21:50:05.251 [DEBUG] [Thread-19094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:50:05.265 [DEBUG] [Thread-19094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:50:05.265 [INFO] [Thread-19094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] client lang: <none>
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] server lang: <none>
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] kex follows: False
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] Compression: none
2025-12-25T21:50:05.273 [DEBUG] [Thread-19094] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:50:05.328 [DEBUG] [Thread-19094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:50:05.328 [DEBUG] [Thread-19094] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:50:05.328 [DEBUG] [Thread-19094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:50:05.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:50:05.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:50:05.353 [DEBUG] [Thread-19096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:05.385 [DEBUG] [Thread-19094] [transport.py] [_log()] userauth is OK
2025-12-25T21:50:05.385 [DEBUG] [Thread-19094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:50:05.385 [DEBUG] [Thread-19094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:50:05.385 [DEBUG] [Thread-19094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:50:05.385 [DEBUG] [Thread-19094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:50:05.400 [INFO] [Thread-19094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:50:05.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-25T21:50:05.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:50:06.262 [DEBUG] [Thread-19094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:50:06.262 [DEBUG] [Thread-19094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:50:06.310 [DEBUG] [Thread-19094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:50:06.310 [DEBUG] [Thread-19094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:50:06.319 [DEBUG] [Thread-19094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:50:06.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:50:06.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-25T21:50:06.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:50:06.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:50:06.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:50:06.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:50:06.356 [DEBUG] [Thread-19094] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:50:20.392 [DEBUG] [Thread-19097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:28.987 [DEBUG] [Thread-19098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:35.425 [DEBUG] [Thread-19099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:50:36.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:50:36.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-25T21:50:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 50, 3), 5.23, 71.24, 0.0, 16.45, 15.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:50:37.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:50:03
2025-12-25T21:50:37.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:50:37.442 [DEBUG] [Thread-19100] [transport.py] [_log()] starting thread (client mode): 0xb95b02e0
2025-12-25T21:50:37.442 [DEBUG] [Thread-19100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:50:37.463 [DEBUG] [Thread-19100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:50:37.463 [INFO] [Thread-19100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] client lang: <none>
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] server lang: <none>
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] kex follows: False
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] Compression: none
2025-12-25T21:50:37.466 [DEBUG] [Thread-19100] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:50:37.479 [DEBUG] [Thread-19100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:50:37.479 [DEBUG] [Thread-19100] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:50:37.479 [DEBUG] [Thread-19100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:50:37.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:50:37.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:50:37.480 [DEBUG] [Thread-19100] [transport.py] [_log()] userauth is OK
2025-12-25T21:50:37.480 [DEBUG] [Thread-19100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:50:37.480 [DEBUG] [Thread-19100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:50:37.480 [DEBUG] [Thread-19100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:50:37.480 [DEBUG] [Thread-19100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:50:37.489 [INFO] [Thread-19100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:50:37.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:50:38.328 [DEBUG] [Thread-19100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:50:38.328 [DEBUG] [Thread-19100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:50:38.328 [DEBUG] [Thread-19100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:50:38.370 [DEBUG] [Thread-19100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:50:38.370 [DEBUG] [Thread-19100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:50:38.372 [DEBUG] [Thread-19100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:50:38.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:50:38.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:50:38.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:50:38.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:50:38.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:50:38.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:50:38.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:50:38.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.826447 -999.00  +16.00  10.29     74  +11.50 1 1 1 1 1     0    0 3.91 -30.27 ZNESW 9.5 10.3 205.6 13.6 17.0 -21.9 16.9 -21.5 16.7 -20.1 17.0 -20.9
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.826447
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:50:38.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:50:03', tmtdew=5.23, humidity=71.24, cloud=0.0, wind=16.45, 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-25T21:50:36', seeing=1.03, atlas_timestamp='2025-12-25T19:50:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:46:00')
2025-12-25T21:50:38.390 [DEBUG] [Thread-19100] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:50:38.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:50:38.474 [DEBUG] [Thread-19103] [transport.py] [_log()] starting thread (client mode): 0xb95b2680
2025-12-25T21:50:38.474 [DEBUG] [Thread-19103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:50:38.491 [DEBUG] [Thread-19103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:50:38.491 [INFO] [Thread-19103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] client lang: <none>
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] server lang: <none>
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] kex follows: False
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] Compression: none
2025-12-25T21:50:38.499 [DEBUG] [Thread-19103] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:50:38.556 [DEBUG] [Thread-19103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:50:38.556 [DEBUG] [Thread-19103] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:50:38.556 [DEBUG] [Thread-19103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:50:38.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:50:38.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:50:38.619 [DEBUG] [Thread-19103] [transport.py] [_log()] userauth is OK
2025-12-25T21:50:38.619 [DEBUG] [Thread-19103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:50:38.619 [DEBUG] [Thread-19103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:50:38.619 [DEBUG] [Thread-19103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:50:38.619 [DEBUG] [Thread-19103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:50:38.633 [INFO] [Thread-19103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:50:38.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-25T21:50:38.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:50:39.496 [DEBUG] [Thread-19103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:50:39.496 [DEBUG] [Thread-19103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:50:39.544 [DEBUG] [Thread-19103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:50:39.544 [DEBUG] [Thread-19103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:50:39.552 [DEBUG] [Thread-19103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:50:39.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:50:39.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:50:39.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-25T21:50:39.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:50:39.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:50:39.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:50:39.584 [DEBUG] [Thread-19103] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:50:50.457 [DEBUG] [Thread-19105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:51.538 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:50:51.540 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:05.508 [DEBUG] [Thread-19106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:09.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:51:09.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:51:09.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-25T21:51:10.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 50, 35), 5.12, 71.29, 0.0, 16.43, 15.89, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:51:10.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:50:35
2025-12-25T21:51:10.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:51:10.616 [DEBUG] [Thread-19107] [transport.py] [_log()] starting thread (client mode): 0xb6bba500
2025-12-25T21:51:10.616 [DEBUG] [Thread-19107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:51:10.637 [DEBUG] [Thread-19107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:51:10.637 [INFO] [Thread-19107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:51:10.640 [DEBUG] [Thread-19107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:51:10.640 [DEBUG] [Thread-19107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:51:10.640 [DEBUG] [Thread-19107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:51:10.640 [DEBUG] [Thread-19107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:10.640 [DEBUG] [Thread-19107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] client lang: <none>
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] server lang: <none>
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] kex follows: False
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:51:10.641 [DEBUG] [Thread-19107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:51:10.642 [DEBUG] [Thread-19107] [transport.py] [_log()] Compression: none
2025-12-25T21:51:10.642 [DEBUG] [Thread-19107] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:51:10.660 [DEBUG] [Thread-19107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:51:10.661 [DEBUG] [Thread-19107] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:51:10.661 [DEBUG] [Thread-19107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:51:10.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:51:10.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:51:10.663 [DEBUG] [Thread-19107] [transport.py] [_log()] userauth is OK
2025-12-25T21:51:10.664 [DEBUG] [Thread-19107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:51:10.664 [DEBUG] [Thread-19107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:51:10.664 [DEBUG] [Thread-19107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:51:10.664 [DEBUG] [Thread-19107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:51:10.689 [INFO] [Thread-19107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:51:10.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:51:11.344 [DEBUG] [Thread-19107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:51:11.344 [DEBUG] [Thread-19107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:51:11.345 [DEBUG] [Thread-19107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:51:11.385 [DEBUG] [Thread-19107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:51:11.385 [DEBUG] [Thread-19107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:51:11.387 [DEBUG] [Thread-19107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:51:11.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:51:11.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:51:11.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:51:11.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:51:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:51:11.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:51:11.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:51:11.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:51:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:51:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.826795 -999.00  +16.00   9.05     74  +11.60 1 1 1 1 1     0    0 3.96 -29.30 ZNESW 11.7 9.1 196.4 16.6 17.0 -21.9 16.9 -21.4 16.7 -20.2 16.9 -21.1
2025-12-25T21:51:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:51:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:51:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.826795
2025-12-25T21:51:11.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:51:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:51:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:51:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:51:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:51:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:50:35', tmtdew=5.12, humidity=71.29, cloud=0.0, wind=16.43, 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-25T21:51:08', seeing=1.03, atlas_timestamp='2025-12-25T19:50:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.10374999999999979, 0.13824999999999932, 0.18125000000000036, 0.1064999999999987, 0.07649999999999935, 0.10325000000000095, 0.10050000000000026, 0.13525000000000098, 0.15850000000000009, 0.11700000000000088, 0.15124999999999922, 0.08450000000000024, 0.1169999999999991, 0.14724999999999966, 0.10599999999999987, 0.13599999999999923, 0.056250000000000355, 0.1225000000000005, 0.13099999999999845, 0.10674999999999812, 0.09499999999999886, 0.1687499999999993, 0.12925000000000075, 0.09074999999999989, 0.08099999999999952, 0.10449999999999982, 0.20175000000000054, 0.17650000000000077, 0.1869999999999994, 0.12650000000000006, 0.20800000000000018, 0.19950000000000045, 0.13824999999999932], zp_timestamp='2025-12-25T19:46:00')
2025-12-25T21:51:11.414 [DEBUG] [Thread-19107] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:51:11.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:51:11.507 [DEBUG] [Thread-19110] [transport.py] [_log()] starting thread (client mode): 0xb6bba7d0
2025-12-25T21:51:11.507 [DEBUG] [Thread-19110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:51:11.522 [DEBUG] [Thread-19110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:51:11.522 [INFO] [Thread-19110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:51:11.530 [DEBUG] [Thread-19110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:51:11.530 [DEBUG] [Thread-19110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:51:11.530 [DEBUG] [Thread-19110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:51:11.530 [DEBUG] [Thread-19110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] client lang: <none>
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] server lang: <none>
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] kex follows: False
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:51:11.531 [DEBUG] [Thread-19110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:51:11.532 [DEBUG] [Thread-19110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:51:11.532 [DEBUG] [Thread-19110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:51:11.532 [DEBUG] [Thread-19110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:51:11.532 [DEBUG] [Thread-19110] [transport.py] [_log()] Compression: none
2025-12-25T21:51:11.532 [DEBUG] [Thread-19110] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:51:11.590 [DEBUG] [Thread-19110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:51:11.591 [DEBUG] [Thread-19110] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:51:11.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:51:11.592 [DEBUG] [Thread-19110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:51:11.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:51:11.649 [DEBUG] [Thread-19110] [transport.py] [_log()] userauth is OK
2025-12-25T21:51:11.650 [DEBUG] [Thread-19110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:51:11.650 [DEBUG] [Thread-19110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:51:11.650 [DEBUG] [Thread-19110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:51:11.650 [DEBUG] [Thread-19110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:51:11.674 [INFO] [Thread-19110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:51:11.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-25T21:51:11.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:51:12.507 [DEBUG] [Thread-19110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:51:12.507 [DEBUG] [Thread-19110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:51:12.555 [DEBUG] [Thread-19110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:51:12.555 [DEBUG] [Thread-19110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:51:12.564 [DEBUG] [Thread-19110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:51:12.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:51:12.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-25T21:51:12.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-25T21:51:12.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:51:12.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:51:12.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:51:12.602 [DEBUG] [Thread-19110] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:51:20.538 [DEBUG] [Thread-19112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:29.043 [DEBUG] [Thread-19113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:35.581 [DEBUG] [Thread-19114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:42.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:51:42.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:51:42.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-25T21:51:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 51, 39), 5.08, 71.96, 0.0, 15.92, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:51:43.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:51:39
2025-12-25T21:51:43.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:51:43.590 [DEBUG] [Thread-19115] [transport.py] [_log()] starting thread (client mode): 0xb95b0f10
2025-12-25T21:51:43.590 [DEBUG] [Thread-19115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:51:43.609 [DEBUG] [Thread-19115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:51:43.610 [INFO] [Thread-19115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] client lang: <none>
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] server lang: <none>
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] kex follows: False
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] Compression: none
2025-12-25T21:51:43.613 [DEBUG] [Thread-19115] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:51:43.622 [DEBUG] [Thread-19115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:51:43.622 [DEBUG] [Thread-19115] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:51:43.623 [DEBUG] [Thread-19115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:51:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:51:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:51:43.624 [DEBUG] [Thread-19115] [transport.py] [_log()] userauth is OK
2025-12-25T21:51:43.624 [DEBUG] [Thread-19115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:51:43.625 [DEBUG] [Thread-19115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:51:43.625 [DEBUG] [Thread-19115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:51:43.625 [DEBUG] [Thread-19115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:51:43.649 [INFO] [Thread-19115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:51:43.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:51:44.296 [DEBUG] [Thread-19115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:51:44.296 [DEBUG] [Thread-19115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:51:44.297 [DEBUG] [Thread-19115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:51:44.337 [DEBUG] [Thread-19115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:51:44.337 [DEBUG] [Thread-19115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:51:44.341 [DEBUG] [Thread-19115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:51:44.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:51:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:51:44.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:51:44.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:51:44.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:51:44.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:51:44.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:51:44.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:51:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:51:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.827142 -999.00  +16.00  10.09     74  +11.50 1 1 1 1 1     0    0 3.72 -32.16 ZNESW 10.2 10.1 200.8 13.0 17.0 -21.8 16.8 -21.6 16.7 -20.0 16.9 -21.2
2025-12-25T21:51:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:51:44.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:51:44.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.827142
2025-12-25T21:51:44.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:51:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:51:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:51:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:51:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:51:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:51:39', tmtdew=5.08, humidity=71.96, cloud=0.0, wind=15.92, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:51:40', seeing=1.53, atlas_timestamp='2025-12-25T19:51:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:49:00')
2025-12-25T21:51:44.369 [DEBUG] [Thread-19115] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:51:44.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-25T21:51:44.468 [DEBUG] [Thread-19118] [transport.py] [_log()] starting thread (client mode): 0xb6b00e80
2025-12-25T21:51:44.468 [DEBUG] [Thread-19118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:51:44.484 [DEBUG] [Thread-19118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:51:44.484 [INFO] [Thread-19118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] client lang: <none>
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] server lang: <none>
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] kex follows: False
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:51:44.492 [DEBUG] [Thread-19118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:51:44.493 [DEBUG] [Thread-19118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:51:44.493 [DEBUG] [Thread-19118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:51:44.493 [DEBUG] [Thread-19118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:51:44.493 [DEBUG] [Thread-19118] [transport.py] [_log()] Compression: none
2025-12-25T21:51:44.493 [DEBUG] [Thread-19118] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:51:44.548 [DEBUG] [Thread-19118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:51:44.549 [DEBUG] [Thread-19118] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:51:44.549 [DEBUG] [Thread-19118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:51:44.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:51:44.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:51:44.605 [DEBUG] [Thread-19118] [transport.py] [_log()] userauth is OK
2025-12-25T21:51:44.605 [DEBUG] [Thread-19118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:51:44.605 [DEBUG] [Thread-19118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:51:44.605 [DEBUG] [Thread-19118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:51:44.605 [DEBUG] [Thread-19118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:51:44.624 [INFO] [Thread-19118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:51:44.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-25T21:51:44.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:51:45.485 [DEBUG] [Thread-19118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:51:45.485 [DEBUG] [Thread-19118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:51:45.532 [DEBUG] [Thread-19118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:51:45.532 [DEBUG] [Thread-19118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:51:45.541 [DEBUG] [Thread-19118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:51:45.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:51:45.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-25T21:51:45.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-25T21:51:45.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:51:45.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:51:45.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:51:45.575 [DEBUG] [Thread-19118] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:51:50.616 [DEBUG] [Thread-19120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:51.740 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:51:51.741 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:05.674 [DEBUG] [Thread-19121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:15.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:52:15.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:52:15.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-25T21:52:16.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 52, 11), 5.06, 72.07, 0.0, 13.5, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:52:16.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:52:11
2025-12-25T21:52:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:52:16.583 [DEBUG] [Thread-19122] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T21:52:16.583 [DEBUG] [Thread-19122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:52:16.603 [DEBUG] [Thread-19122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:52:16.603 [INFO] [Thread-19122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:16.606 [DEBUG] [Thread-19122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] client lang: <none>
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] server lang: <none>
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] kex follows: False
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] Compression: none
2025-12-25T21:52:16.607 [DEBUG] [Thread-19122] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:52:16.621 [DEBUG] [Thread-19122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:52:16.621 [DEBUG] [Thread-19122] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:52:16.621 [DEBUG] [Thread-19122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:52:16.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:52:16.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:52:16.622 [DEBUG] [Thread-19122] [transport.py] [_log()] userauth is OK
2025-12-25T21:52:16.622 [DEBUG] [Thread-19122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:52:16.622 [DEBUG] [Thread-19122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:52:16.622 [DEBUG] [Thread-19122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:52:16.622 [DEBUG] [Thread-19122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:52:16.631 [INFO] [Thread-19122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:52:16.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:52:17.229 [DEBUG] [Thread-19122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:52:17.230 [DEBUG] [Thread-19122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:52:17.230 [DEBUG] [Thread-19122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:52:17.271 [DEBUG] [Thread-19122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:52:17.271 [DEBUG] [Thread-19122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:52:17.274 [DEBUG] [Thread-19122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:52:17.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:52:17.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:52:17.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:52:17.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:52:17.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:52:17.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:52:17.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:52:17.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:52:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:52:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.827489 -999.00  +16.00   9.71     74  +11.50 1 1 1 1 1     0    0 3.85 -31.86 ZNESW 8.2 9.7 190.6 15.0 17.0 -21.8 16.8 -21.5 16.7 -20.1 16.9 -21.0
2025-12-25T21:52:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:52:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:52:17.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.827489
2025-12-25T21:52:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:52:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:52:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:52:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:52:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:52:17.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:52:11', tmtdew=5.06, humidity=72.07, cloud=0.0, wind=13.5, 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-25T21:52:12', seeing=1.1, atlas_timestamp='2025-12-25T19:51:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:49:00')
2025-12-25T21:52:17.302 [DEBUG] [Thread-19122] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:52:17.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:52:17.406 [DEBUG] [Thread-19125] [transport.py] [_log()] starting thread (client mode): 0xb6b019c0
2025-12-25T21:52:17.406 [DEBUG] [Thread-19125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:52:17.420 [DEBUG] [Thread-19125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:52:17.420 [INFO] [Thread-19125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] client lang: <none>
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] server lang: <none>
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] kex follows: False
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] Compression: none
2025-12-25T21:52:17.428 [DEBUG] [Thread-19125] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:52:17.495 [DEBUG] [Thread-19125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:52:17.495 [DEBUG] [Thread-19125] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:52:17.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:52:17.496 [DEBUG] [Thread-19125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:52:17.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:52:17.556 [DEBUG] [Thread-19125] [transport.py] [_log()] userauth is OK
2025-12-25T21:52:17.557 [DEBUG] [Thread-19125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:52:17.557 [DEBUG] [Thread-19125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:52:17.557 [DEBUG] [Thread-19125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:52:17.557 [DEBUG] [Thread-19125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:52:17.575 [INFO] [Thread-19125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:52:17.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-25T21:52:17.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:52:18.407 [DEBUG] [Thread-19125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:52:18.407 [DEBUG] [Thread-19125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:52:18.455 [DEBUG] [Thread-19125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:52:18.455 [DEBUG] [Thread-19125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:52:18.467 [DEBUG] [Thread-19125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:52:18.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:52:18.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-25T21:52:18.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-25T21:52:18.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:52:18.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:52:18.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:52:18.509 [DEBUG] [Thread-19125] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:52:20.706 [DEBUG] [Thread-19127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:29.134 [DEBUG] [Thread-19128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:35.748 [DEBUG] [Thread-19129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:48.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:52:48.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:52:48.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-25T21:52:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 52, 43), 5.05, 72.11, 0.0, 15.65, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:52:49.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:52:43
2025-12-25T21:52:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:52:49.519 [DEBUG] [Thread-19130] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f10
2025-12-25T21:52:49.519 [DEBUG] [Thread-19130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:52:49.539 [DEBUG] [Thread-19130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:52:49.539 [INFO] [Thread-19130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:52:49.542 [DEBUG] [Thread-19130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] client lang: <none>
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] server lang: <none>
2025-12-25T21:52:49.543 [DEBUG] [Thread-19130] [transport.py] [_log()] kex follows: False
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] Compression: none
2025-12-25T21:52:49.544 [DEBUG] [Thread-19130] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:52:49.564 [DEBUG] [Thread-19130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:52:49.565 [DEBUG] [Thread-19130] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:52:49.566 [DEBUG] [Thread-19130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:52:49.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:52:49.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:52:49.568 [DEBUG] [Thread-19130] [transport.py] [_log()] userauth is OK
2025-12-25T21:52:49.569 [DEBUG] [Thread-19130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:52:49.569 [DEBUG] [Thread-19130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:52:49.569 [DEBUG] [Thread-19130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:52:49.569 [DEBUG] [Thread-19130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:52:49.593 [INFO] [Thread-19130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:52:49.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:52:50.234 [DEBUG] [Thread-19130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:52:50.235 [DEBUG] [Thread-19130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:52:50.235 [DEBUG] [Thread-19130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:52:50.276 [DEBUG] [Thread-19130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:52:50.276 [DEBUG] [Thread-19130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:52:50.279 [DEBUG] [Thread-19130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:52:50.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:52:50.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:52:50.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:52:50.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:52:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:52:50.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:52:50.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:52:50.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:52:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:52:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.828184 -999.00  +16.00   7.70     74  +11.50 1 1 1 1 1     0    0 3.65 -34.19 ZNESW 10.2 7.7 190.8 16.0 16.9 -21.9 16.8 -21.7 16.7 -20.1 16.9 -20.9
2025-12-25T21:52:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:52:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:52:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.828184
2025-12-25T21:52:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:52:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:52:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:52:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:52:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:52:50.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:52:43', tmtdew=5.05, humidity=72.11, cloud=0.0, wind=15.65, 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-25T21:52:44', seeing=1.08, atlas_timestamp='2025-12-25T19:52:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:49:00')
2025-12-25T21:52:50.303 [DEBUG] [Thread-19130] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:52:50.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-25T21:52:50.398 [DEBUG] [Thread-19133] [transport.py] [_log()] starting thread (client mode): 0xb6bb7ca0
2025-12-25T21:52:50.398 [DEBUG] [Thread-19133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:52:50.413 [DEBUG] [Thread-19133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:52:50.413 [INFO] [Thread-19133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:52:50.420 [DEBUG] [Thread-19133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:52:50.420 [DEBUG] [Thread-19133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:52:50.420 [DEBUG] [Thread-19133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:52:50.420 [DEBUG] [Thread-19133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:50.420 [DEBUG] [Thread-19133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] client lang: <none>
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] server lang: <none>
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] kex follows: False
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] Compression: none
2025-12-25T21:52:50.421 [DEBUG] [Thread-19133] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:52:50.480 [DEBUG] [Thread-19133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:52:50.480 [DEBUG] [Thread-19133] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:52:50.481 [DEBUG] [Thread-19133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:52:50.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:52:50.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:52:50.536 [DEBUG] [Thread-19133] [transport.py] [_log()] userauth is OK
2025-12-25T21:52:50.536 [DEBUG] [Thread-19133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:52:50.536 [DEBUG] [Thread-19133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:52:50.536 [DEBUG] [Thread-19133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:52:50.536 [DEBUG] [Thread-19133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:52:50.555 [INFO] [Thread-19133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:52:50.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-25T21:52:50.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:52:50.780 [DEBUG] [Thread-19135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:51.433 [DEBUG] [Thread-19133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:52:51.433 [DEBUG] [Thread-19133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:52:51.481 [DEBUG] [Thread-19133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:52:51.481 [DEBUG] [Thread-19133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:52:51.490 [DEBUG] [Thread-19133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:52:51.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:52:51.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:52:51.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:52:51.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:52:51.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:52:51.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:52:51.527 [DEBUG] [Thread-19133] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:52:51.940 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:52:51.942 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:05.831 [DEBUG] [Thread-19136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:20.864 [DEBUG] [Thread-19137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:21.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:53:21.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:53:21.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-25T21:53:22.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 53, 15), 5.03, 72.22, 0.0, 14.68, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:53:22.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:53:15
2025-12-25T21:53:22.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:53:22.520 [DEBUG] [Thread-19138] [transport.py] [_log()] starting thread (client mode): 0xb6b7c940
2025-12-25T21:53:22.520 [DEBUG] [Thread-19138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:53:22.540 [DEBUG] [Thread-19138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:53:22.540 [INFO] [Thread-19138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:53:22.543 [DEBUG] [Thread-19138] [transport.py] [_log()] client lang: <none>
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] server lang: <none>
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] kex follows: False
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] Compression: none
2025-12-25T21:53:22.544 [DEBUG] [Thread-19138] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:53:22.561 [DEBUG] [Thread-19138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:53:22.561 [DEBUG] [Thread-19138] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:53:22.562 [DEBUG] [Thread-19138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:53:22.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:53:22.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:53:22.564 [DEBUG] [Thread-19138] [transport.py] [_log()] userauth is OK
2025-12-25T21:53:22.564 [DEBUG] [Thread-19138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:53:22.564 [DEBUG] [Thread-19138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:53:22.564 [DEBUG] [Thread-19138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:53:22.564 [DEBUG] [Thread-19138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:53:22.588 [INFO] [Thread-19138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:53:22.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:53:23.237 [DEBUG] [Thread-19138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:53:23.237 [DEBUG] [Thread-19138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:53:23.238 [DEBUG] [Thread-19138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:53:23.278 [DEBUG] [Thread-19138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:53:23.278 [DEBUG] [Thread-19138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:53:23.281 [DEBUG] [Thread-19138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:53:23.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:53:23.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:53:23.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:53:23.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:53:23.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:53:23.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:53:23.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:53:23.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:53:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:53:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.828531 -999.00  +16.00  10.53     75  +11.60 1 1 1 1 1     0    0 3.48 -36.90 ZNESW 16.5 10.5 192.4 14.7 16.9 -22.2 16.8 -22.0 16.6 -20.2 16.9 -21.4
2025-12-25T21:53:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:53:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:53:23.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.828531
2025-12-25T21:53:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:53:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:53:23.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:53:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:53:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:53:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:53:15', tmtdew=5.03, humidity=72.22, cloud=0.0, wind=14.68, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:53:16', seeing=1.04, atlas_timestamp='2025-12-25T19:53:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:49:00')
2025-12-25T21:53:23.308 [DEBUG] [Thread-19138] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:53:23.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-25T21:53:23.403 [DEBUG] [Thread-19141] [transport.py] [_log()] starting thread (client mode): 0xb6b7c550
2025-12-25T21:53:23.403 [DEBUG] [Thread-19141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:53:23.423 [DEBUG] [Thread-19141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:53:23.423 [INFO] [Thread-19141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:53:23.431 [DEBUG] [Thread-19141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:53:23.431 [DEBUG] [Thread-19141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] client lang: <none>
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] server lang: <none>
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] kex follows: False
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:53:23.432 [DEBUG] [Thread-19141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:53:23.433 [DEBUG] [Thread-19141] [transport.py] [_log()] Compression: none
2025-12-25T21:53:23.433 [DEBUG] [Thread-19141] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:53:23.492 [DEBUG] [Thread-19141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:53:23.492 [DEBUG] [Thread-19141] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:53:23.493 [DEBUG] [Thread-19141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:53:23.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:53:23.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:53:23.548 [DEBUG] [Thread-19141] [transport.py] [_log()] userauth is OK
2025-12-25T21:53:23.548 [DEBUG] [Thread-19141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:53:23.548 [DEBUG] [Thread-19141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:53:23.548 [DEBUG] [Thread-19141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:53:23.548 [DEBUG] [Thread-19141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:53:23.567 [INFO] [Thread-19141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:53:23.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:53:23.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:53:24.410 [DEBUG] [Thread-19141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:53:24.410 [DEBUG] [Thread-19141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:53:24.458 [DEBUG] [Thread-19141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:53:24.458 [DEBUG] [Thread-19141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:53:24.467 [DEBUG] [Thread-19141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:53:24.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:53:24.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-25T21:53:24.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-25T21:53:24.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:53:24.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:53:24.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:53:24.507 [DEBUG] [Thread-19141] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:53:29.194 [DEBUG] [Thread-19143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:35.898 [DEBUG] [Thread-19144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:50.950 [DEBUG] [Thread-19145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:52.142 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:52.144 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:53:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:53:54.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:53:54.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-25T21:53:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 53, 48), 5.02, 71.75, 0.0, 15.9, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:53:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:53:48
2025-12-25T21:53:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:53:55.518 [DEBUG] [Thread-19146] [transport.py] [_log()] starting thread (client mode): 0xb6b7f2b0
2025-12-25T21:53:55.518 [DEBUG] [Thread-19146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:53:55.538 [DEBUG] [Thread-19146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:53:55.538 [INFO] [Thread-19146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] client lang: <none>
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] server lang: <none>
2025-12-25T21:53:55.539 [DEBUG] [Thread-19146] [transport.py] [_log()] kex follows: False
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] Compression: none
2025-12-25T21:53:55.540 [DEBUG] [Thread-19146] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:53:55.556 [DEBUG] [Thread-19146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:53:55.556 [DEBUG] [Thread-19146] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:53:55.556 [DEBUG] [Thread-19146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:53:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:53:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:53:55.557 [DEBUG] [Thread-19146] [transport.py] [_log()] userauth is OK
2025-12-25T21:53:55.557 [DEBUG] [Thread-19146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:53:55.557 [DEBUG] [Thread-19146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:53:55.557 [DEBUG] [Thread-19146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:53:55.557 [DEBUG] [Thread-19146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:53:55.566 [INFO] [Thread-19146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:53:55.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:53:56.200 [DEBUG] [Thread-19146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:53:56.200 [DEBUG] [Thread-19146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:53:56.200 [DEBUG] [Thread-19146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:53:56.240 [DEBUG] [Thread-19146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:53:56.240 [DEBUG] [Thread-19146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:53:56.243 [DEBUG] [Thread-19146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:53:56.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:53:56.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:53:56.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:53:56.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:53:56.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:53:56.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:53:56.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:53:56.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.828878 -999.00  +15.90  11.40     75  +11.60 1 1 1 1 1     0    0 3.63 -39.23 ZNESW 10.6 11.4 197.4 17.5 16.9 -22.0 16.7 -22.1 16.6 -20.2 16.9 -21.2
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.828878
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:53:56.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:53:48', tmtdew=5.02, humidity=71.75, cloud=0.0, wind=15.9, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:53:48', seeing=1.26, atlas_timestamp='2025-12-25T19:53:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:49:00')
2025-12-25T21:53:56.259 [DEBUG] [Thread-19146] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:53:56.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-25T21:53:56.343 [DEBUG] [Thread-19149] [transport.py] [_log()] starting thread (client mode): 0xb6bf6f80
2025-12-25T21:53:56.343 [DEBUG] [Thread-19149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:53:56.358 [DEBUG] [Thread-19149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:53:56.358 [INFO] [Thread-19149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] client lang: <none>
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] server lang: <none>
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] kex follows: False
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] Compression: none
2025-12-25T21:53:56.366 [DEBUG] [Thread-19149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:53:56.426 [DEBUG] [Thread-19149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:53:56.426 [DEBUG] [Thread-19149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:53:56.426 [DEBUG] [Thread-19149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:53:56.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:53:56.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:53:56.485 [DEBUG] [Thread-19149] [transport.py] [_log()] userauth is OK
2025-12-25T21:53:56.485 [DEBUG] [Thread-19149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:53:56.485 [DEBUG] [Thread-19149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:53:56.485 [DEBUG] [Thread-19149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:53:56.485 [DEBUG] [Thread-19149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:53:56.501 [INFO] [Thread-19149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:53:56.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-25T21:53:56.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:53:57.393 [DEBUG] [Thread-19149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:53:57.393 [DEBUG] [Thread-19149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:53:57.443 [DEBUG] [Thread-19149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:53:57.443 [DEBUG] [Thread-19149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:53:57.451 [DEBUG] [Thread-19149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:53:57.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:53:57.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:53:57.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-25T21:53:57.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:53:57.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:53:57.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:53:57.486 [DEBUG] [Thread-19149] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:54:05.981 [DEBUG] [Thread-19151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:21.041 [DEBUG] [Thread-19152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:27.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:54:27.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:54:27.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:54:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 54, 20), 5.01, 71.77, 0.0, 16.0, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:54:28.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:54:20
2025-12-25T21:54:28.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:54:28.491 [DEBUG] [Thread-19153] [transport.py] [_log()] starting thread (client mode): 0xb6b7d690
2025-12-25T21:54:28.491 [DEBUG] [Thread-19153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:54:28.505 [DEBUG] [Thread-19153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:54:28.506 [INFO] [Thread-19153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] client lang: <none>
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] server lang: <none>
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] kex follows: False
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:54:28.509 [DEBUG] [Thread-19153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:54:28.510 [DEBUG] [Thread-19153] [transport.py] [_log()] Compression: none
2025-12-25T21:54:28.510 [DEBUG] [Thread-19153] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:54:28.528 [DEBUG] [Thread-19153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:54:28.528 [DEBUG] [Thread-19153] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:54:28.529 [DEBUG] [Thread-19153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:54:28.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:54:28.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:54:28.531 [DEBUG] [Thread-19153] [transport.py] [_log()] userauth is OK
2025-12-25T21:54:28.531 [DEBUG] [Thread-19153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:54:28.531 [DEBUG] [Thread-19153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:54:28.531 [DEBUG] [Thread-19153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:54:28.531 [DEBUG] [Thread-19153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:54:28.545 [INFO] [Thread-19153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:54:28.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:54:29.106 [DEBUG] [Thread-19153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:54:29.106 [DEBUG] [Thread-19153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:54:29.106 [DEBUG] [Thread-19153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:54:29.147 [DEBUG] [Thread-19153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:54:29.147 [DEBUG] [Thread-19153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:54:29.151 [DEBUG] [Thread-19153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:54:29.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:54:29.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:54:29.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:54:29.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:54:29.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:54:29.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:54:29.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:54:29.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:54:29.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:54:29.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.829225 -999.00  +15.90  10.59     75  +11.60 1 1 1 1 1     0    0 3.71 -33.84 ZNESW 10.0 10.6 193.8 12.7 16.9 -22.2 16.8 -22.1 16.6 -20.2 16.9 -21.4
2025-12-25T21:54:29.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:54:29.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:54:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.829225
2025-12-25T21:54:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:54:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:54:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:54:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:54:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:54:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:54:20', tmtdew=5.01, humidity=71.77, cloud=0.0, wind=16.0, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:54:20', seeing=1.26, atlas_timestamp='2025-12-25T19:54:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:49:00')
2025-12-25T21:54:29.178 [DEBUG] [Thread-19153] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:54:29.245 [DEBUG] [Thread-19156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:29.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-25T21:54:29.273 [DEBUG] [Thread-19157] [transport.py] [_log()] starting thread (client mode): 0xb955a3e0
2025-12-25T21:54:29.273 [DEBUG] [Thread-19157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:54:29.288 [DEBUG] [Thread-19157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:54:29.288 [INFO] [Thread-19157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:54:29.295 [DEBUG] [Thread-19157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] client lang: <none>
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] server lang: <none>
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] kex follows: False
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] Compression: none
2025-12-25T21:54:29.296 [DEBUG] [Thread-19157] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:54:29.356 [DEBUG] [Thread-19157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:54:29.356 [DEBUG] [Thread-19157] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:54:29.357 [DEBUG] [Thread-19157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:54:29.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:54:29.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:54:29.411 [DEBUG] [Thread-19157] [transport.py] [_log()] userauth is OK
2025-12-25T21:54:29.411 [DEBUG] [Thread-19157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:54:29.411 [DEBUG] [Thread-19157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:54:29.411 [DEBUG] [Thread-19157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:54:29.412 [DEBUG] [Thread-19157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:54:29.430 [INFO] [Thread-19157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:54:29.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-25T21:54:29.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:54:30.312 [DEBUG] [Thread-19157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:54:30.313 [DEBUG] [Thread-19157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:54:30.360 [DEBUG] [Thread-19157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:54:30.360 [DEBUG] [Thread-19157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:54:30.369 [DEBUG] [Thread-19157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:54:30.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:54:30.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-25T21:54: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-25T21:54:30.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:54:30.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:54:30.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:54:30.403 [DEBUG] [Thread-19157] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:54:36.071 [DEBUG] [Thread-19159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:39.456 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:51.112 [DEBUG] [Thread-19160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:52.346 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:54:52.347 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:55:00.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:55:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:55:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 54, 52), 4.94, 72.4, 0.0, 16.52, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:55:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:54:52
2025-12-25T21:55:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:55:01.384 [DEBUG] [Thread-19161] [transport.py] [_log()] starting thread (client mode): 0xb6b61db0
2025-12-25T21:55:01.384 [DEBUG] [Thread-19161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:55:01.403 [DEBUG] [Thread-19161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:55:01.403 [INFO] [Thread-19161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:55:01.404 [DEBUG] [Thread-19161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] client lang: <none>
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] server lang: <none>
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] kex follows: False
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:55:01.405 [DEBUG] [Thread-19161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:55:01.406 [DEBUG] [Thread-19161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:55:01.406 [DEBUG] [Thread-19161] [transport.py] [_log()] Compression: none
2025-12-25T21:55:01.406 [DEBUG] [Thread-19161] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:55:01.416 [DEBUG] [Thread-19161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:55:01.416 [DEBUG] [Thread-19161] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:55:01.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:55:01.418 [DEBUG] [Thread-19161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:55:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:55:01.420 [DEBUG] [Thread-19161] [transport.py] [_log()] userauth is OK
2025-12-25T21:55:01.420 [DEBUG] [Thread-19161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:55:01.421 [DEBUG] [Thread-19161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:55:01.421 [DEBUG] [Thread-19161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:55:01.421 [DEBUG] [Thread-19161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:55:01.448 [INFO] [Thread-19161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:55:01.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:55:02.132 [DEBUG] [Thread-19161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:55:02.132 [DEBUG] [Thread-19161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:55:02.133 [DEBUG] [Thread-19161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:55:02.173 [DEBUG] [Thread-19161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:55:02.173 [DEBUG] [Thread-19161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:55:02.177 [DEBUG] [Thread-19161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:55:02.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:55:02.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:55:02.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:55:02.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:55:02.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:55:02.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:55:02.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:55:02.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:55:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:55:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.829572 -999.00  +15.90  11.01     75  +11.60 1 1 1 1 1     0    0 3.57 -34.94 ZNESW 9.9 11.0 192.2 14.1 16.8 -22.1 16.8 -21.9 16.6 -20.2 16.9 -21.2
2025-12-25T21:55:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:55:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:55:02.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.829572
2025-12-25T21:55:02.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:55:02.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:55:02.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:55:02.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:55:02.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:55:02.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:54:52', tmtdew=4.94, humidity=72.4, cloud=0.0, wind=16.52, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:54:52', seeing=1.14, atlas_timestamp='2025-12-25T19:54:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:53:00')
2025-12-25T21:55:02.208 [DEBUG] [Thread-19161] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:55:02.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-25T21:55:02.295 [DEBUG] [Thread-19164] [transport.py] [_log()] starting thread (client mode): 0xb6b60a90
2025-12-25T21:55:02.295 [DEBUG] [Thread-19164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:55:02.310 [DEBUG] [Thread-19164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:55:02.310 [INFO] [Thread-19164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] client lang: <none>
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] server lang: <none>
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] kex follows: False
2025-12-25T21:55:02.318 [DEBUG] [Thread-19164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:55:02.319 [DEBUG] [Thread-19164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:55:02.319 [DEBUG] [Thread-19164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:55:02.319 [DEBUG] [Thread-19164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:55:02.319 [DEBUG] [Thread-19164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:55:02.319 [DEBUG] [Thread-19164] [transport.py] [_log()] Compression: none
2025-12-25T21:55:02.319 [DEBUG] [Thread-19164] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:55:02.375 [DEBUG] [Thread-19164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:55:02.375 [DEBUG] [Thread-19164] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:55:02.376 [DEBUG] [Thread-19164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:55:02.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:55:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:55:02.431 [DEBUG] [Thread-19164] [transport.py] [_log()] userauth is OK
2025-12-25T21:55:02.431 [DEBUG] [Thread-19164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:55:02.432 [DEBUG] [Thread-19164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:55:02.432 [DEBUG] [Thread-19164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:55:02.432 [DEBUG] [Thread-19164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:55:02.450 [INFO] [Thread-19164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:55:02.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-25T21:55:02.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:55:03.293 [DEBUG] [Thread-19164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:55:03.294 [DEBUG] [Thread-19164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:55:03.342 [DEBUG] [Thread-19164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:55:03.342 [DEBUG] [Thread-19164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:55:03.351 [DEBUG] [Thread-19164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:55:03.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:55:03.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-25T21:55:03.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-25T21:55:03.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:55:03.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:55:03.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:55:03.391 [DEBUG] [Thread-19164] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:55:06.148 [DEBUG] [Thread-19166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:21.194 [DEBUG] [Thread-19167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:29.306 [DEBUG] [Thread-19168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:55:33.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:55: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-25T21:55:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 55, 24), 4.94, 72.37, 0.0, 15.07, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:55:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:55:24
2025-12-25T21:55:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:55:34.364 [DEBUG] [Thread-19169] [transport.py] [_log()] starting thread (client mode): 0xb6bf59c0
2025-12-25T21:55:34.364 [DEBUG] [Thread-19169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:55:34.385 [DEBUG] [Thread-19169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:55:34.385 [INFO] [Thread-19169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:55:34.388 [DEBUG] [Thread-19169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:55:34.388 [DEBUG] [Thread-19169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:55:34.388 [DEBUG] [Thread-19169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:55:34.388 [DEBUG] [Thread-19169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:34.388 [DEBUG] [Thread-19169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:34.388 [DEBUG] [Thread-19169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] client lang: <none>
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] server lang: <none>
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] kex follows: False
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] Compression: none
2025-12-25T21:55:34.389 [DEBUG] [Thread-19169] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:55:34.405 [DEBUG] [Thread-19169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:55:34.405 [DEBUG] [Thread-19169] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:55:34.405 [DEBUG] [Thread-19169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:55:34.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:55:34.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:55:34.406 [DEBUG] [Thread-19169] [transport.py] [_log()] userauth is OK
2025-12-25T21:55:34.406 [DEBUG] [Thread-19169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:55:34.406 [DEBUG] [Thread-19169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:55:34.406 [DEBUG] [Thread-19169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:55:34.406 [DEBUG] [Thread-19169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:55:34.422 [INFO] [Thread-19169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:55:34.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:55:35.048 [DEBUG] [Thread-19169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:55:35.048 [DEBUG] [Thread-19169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:55:35.049 [DEBUG] [Thread-19169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:55:35.089 [DEBUG] [Thread-19169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:55:35.090 [DEBUG] [Thread-19169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:55:35.093 [DEBUG] [Thread-19169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:55:35.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:55:35.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:55:35.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:55:35.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:55:35.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:55:35.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:55:35.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:55:35.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:55:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:55:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.829572 -999.00  +15.90  11.01     75  +11.60 1 1 1 1 1     0    0 3.57 -34.94 ZNESW 9.9 11.0 192.2 14.1 16.8 -22.1 16.8 -21.9 16.6 -20.2 16.9 -21.2
2025-12-25T21:55:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:55:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:55:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.829572
2025-12-25T21:55:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:55:35.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:55:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:55:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:55:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:55:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:55:24', tmtdew=4.94, humidity=72.37, cloud=0.0, wind=15.07, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:55:24', seeing=1.21, atlas_timestamp='2025-12-25T19:54:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:53:00')
2025-12-25T21:55:35.121 [DEBUG] [Thread-19169] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:55:35.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-25T21:55:35.219 [DEBUG] [Thread-19172] [transport.py] [_log()] starting thread (client mode): 0xb6babc40
2025-12-25T21:55:35.219 [DEBUG] [Thread-19172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:55:35.235 [DEBUG] [Thread-19172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:55:35.235 [INFO] [Thread-19172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:55:35.245 [DEBUG] [Thread-19172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:55:35.245 [DEBUG] [Thread-19172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:55:35.245 [DEBUG] [Thread-19172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] client lang: <none>
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] server lang: <none>
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] kex follows: False
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] Compression: none
2025-12-25T21:55:35.246 [DEBUG] [Thread-19172] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:55:35.303 [DEBUG] [Thread-19172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:55:35.304 [DEBUG] [Thread-19172] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:55:35.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:55:35.305 [DEBUG] [Thread-19172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:55:35.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:55:35.363 [DEBUG] [Thread-19172] [transport.py] [_log()] userauth is OK
2025-12-25T21:55:35.363 [DEBUG] [Thread-19172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:55:35.363 [DEBUG] [Thread-19172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:55:35.363 [DEBUG] [Thread-19172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:55:35.363 [DEBUG] [Thread-19172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:55:35.382 [INFO] [Thread-19172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:55:35.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-25T21:55:35.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:55:36.228 [DEBUG] [Thread-19174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:36.246 [DEBUG] [Thread-19172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:55:36.246 [DEBUG] [Thread-19172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:55:36.294 [DEBUG] [Thread-19172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:55:36.294 [DEBUG] [Thread-19172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:55:36.304 [DEBUG] [Thread-19172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:55:36.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:55:36.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-25T21:55:36.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:55:36.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:55:36.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:55:36.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:55:36.341 [DEBUG] [Thread-19172] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:55:51.280 [DEBUG] [Thread-19175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:52.544 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:55:52.545 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:06.310 [DEBUG] [Thread-19176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:56:06.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:56:06.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:56:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 55, 56), 4.89, 72.37, 0.0, 13.61, 15.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:56:07.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:55:56
2025-12-25T21:56:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:56:07.328 [DEBUG] [Thread-19177] [transport.py] [_log()] starting thread (client mode): 0xb6bb7d00
2025-12-25T21:56:07.328 [DEBUG] [Thread-19177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:56:07.348 [DEBUG] [Thread-19177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:56:07.348 [INFO] [Thread-19177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:56:07.349 [DEBUG] [Thread-19177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:56:07.349 [DEBUG] [Thread-19177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:56:07.349 [DEBUG] [Thread-19177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:56:07.349 [DEBUG] [Thread-19177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] client lang: <none>
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] server lang: <none>
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] kex follows: False
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] Compression: none
2025-12-25T21:56:07.350 [DEBUG] [Thread-19177] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:56:07.364 [DEBUG] [Thread-19177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:56:07.365 [DEBUG] [Thread-19177] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:56:07.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:56:07.366 [DEBUG] [Thread-19177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:56:07.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:56:07.367 [DEBUG] [Thread-19177] [transport.py] [_log()] userauth is OK
2025-12-25T21:56:07.368 [DEBUG] [Thread-19177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:56:07.368 [DEBUG] [Thread-19177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:56:07.368 [DEBUG] [Thread-19177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:56:07.368 [DEBUG] [Thread-19177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:56:07.386 [INFO] [Thread-19177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:56:07.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:56:08.003 [DEBUG] [Thread-19177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:56:08.003 [DEBUG] [Thread-19177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:56:08.003 [DEBUG] [Thread-19177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:56:08.044 [DEBUG] [Thread-19177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:56:08.044 [DEBUG] [Thread-19177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:56:08.047 [DEBUG] [Thread-19177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:56:08.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:56:08.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:56:08.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:56:08.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:56:08.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:56:08.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:56:08.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:56:08.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:56:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:56:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.830267 -999.00  +15.90   8.88     75  +11.60 1 1 1 1 1     0    0 3.72 -34.40 ZNESW 7.8 8.9 189.4 14.9 16.8 -22.0 16.7 -21.5 16.5 -20.2 16.8 -21.2
2025-12-25T21:56:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:56:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:56:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.830267
2025-12-25T21:56:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:56:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:56:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:56:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:56:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:56:08.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:55:56', tmtdew=4.89, humidity=72.37, cloud=0.0, wind=13.61, 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-25T21:55:56', seeing=1.21, atlas_timestamp='2025-12-25T19:55:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:53:00')
2025-12-25T21:56:08.073 [DEBUG] [Thread-19177] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:56:08.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:56:08.169 [DEBUG] [Thread-19180] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e20
2025-12-25T21:56:08.169 [DEBUG] [Thread-19180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:56:08.183 [DEBUG] [Thread-19180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:56:08.183 [INFO] [Thread-19180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] client lang: <none>
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] server lang: <none>
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] kex follows: False
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:56:08.191 [DEBUG] [Thread-19180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:56:08.192 [DEBUG] [Thread-19180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:56:08.192 [DEBUG] [Thread-19180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:56:08.192 [DEBUG] [Thread-19180] [transport.py] [_log()] Compression: none
2025-12-25T21:56:08.192 [DEBUG] [Thread-19180] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:56:08.250 [DEBUG] [Thread-19180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:56:08.250 [DEBUG] [Thread-19180] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:56:08.251 [DEBUG] [Thread-19180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:56:08.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:56:08.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:56:08.306 [DEBUG] [Thread-19180] [transport.py] [_log()] userauth is OK
2025-12-25T21:56:08.306 [DEBUG] [Thread-19180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:56:08.306 [DEBUG] [Thread-19180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:56:08.307 [DEBUG] [Thread-19180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:56:08.307 [DEBUG] [Thread-19180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:56:08.325 [INFO] [Thread-19180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:56:08.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-25T21:56:08.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:56:09.130 [DEBUG] [Thread-19180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:56:09.131 [DEBUG] [Thread-19180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:56:09.179 [DEBUG] [Thread-19180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:56:09.179 [DEBUG] [Thread-19180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:56:09.188 [DEBUG] [Thread-19180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:56:09.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:56:09.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-25T21:56:09.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-25T21:56:09.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:56:09.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:56:09.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:56:09.227 [DEBUG] [Thread-19180] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:56:21.351 [DEBUG] [Thread-19182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:29.359 [DEBUG] [Thread-19183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:36.400 [DEBUG] [Thread-19184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:39.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:56:39.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:56:39.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-25T21:56:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 56, 28), 4.9, 72.35, 0.0, 13.16, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:56:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:56:28
2025-12-25T21:56:40.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:56:40.207 [DEBUG] [Thread-19185] [transport.py] [_log()] starting thread (client mode): 0xb6b61db0
2025-12-25T21:56:40.207 [DEBUG] [Thread-19185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:56:40.227 [DEBUG] [Thread-19185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:56:40.227 [INFO] [Thread-19185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:56:40.231 [DEBUG] [Thread-19185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:56:40.231 [DEBUG] [Thread-19185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] client lang: <none>
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] server lang: <none>
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] kex follows: False
2025-12-25T21:56:40.232 [DEBUG] [Thread-19185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:56:40.233 [DEBUG] [Thread-19185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:56:40.233 [DEBUG] [Thread-19185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:56:40.233 [DEBUG] [Thread-19185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:56:40.233 [DEBUG] [Thread-19185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:56:40.233 [DEBUG] [Thread-19185] [transport.py] [_log()] Compression: none
2025-12-25T21:56:40.233 [DEBUG] [Thread-19185] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:56:40.249 [DEBUG] [Thread-19185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:56:40.250 [DEBUG] [Thread-19185] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:56:40.250 [DEBUG] [Thread-19185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:56:40.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:56:40.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:56:40.251 [DEBUG] [Thread-19185] [transport.py] [_log()] userauth is OK
2025-12-25T21:56:40.251 [DEBUG] [Thread-19185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:56:40.251 [DEBUG] [Thread-19185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:56:40.251 [DEBUG] [Thread-19185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:56:40.251 [DEBUG] [Thread-19185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:56:40.265 [INFO] [Thread-19185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:56:40.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:56:40.901 [DEBUG] [Thread-19185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:56:40.901 [DEBUG] [Thread-19185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:56:40.902 [DEBUG] [Thread-19185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:56:40.942 [DEBUG] [Thread-19185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:56:40.942 [DEBUG] [Thread-19185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:56:40.946 [DEBUG] [Thread-19185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:56:40.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:56:40.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:56:40.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:56:40.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:56:40.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:56:40.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:56:40.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:56:40.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:56:40.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:56:40.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.830614 -999.00  +15.90   7.49     75  +11.50 1 1 1 1 1     0    0 3.60 -34.89 ZNESW 5.9 7.5 186.4 8.7 16.8 -22.1 16.7 -21.7 16.6 -20.3 16.8 -21.2
2025-12-25T21:56:40.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:56:40.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:56:40.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.830614
2025-12-25T21:56:40.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:56:40.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:56:40.973 [DEBUG] [Thread-19185] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:56:40.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:56:40.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:56:40.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:56:40.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:56:28', tmtdew=4.9, humidity=72.35, cloud=0.0, wind=13.16, 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-25T21:56:28', seeing=0.91, atlas_timestamp='2025-12-25T19:56:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:53:00')
2025-12-25T21:56: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-25T21:56:41.079 [DEBUG] [Thread-19188] [transport.py] [_log()] starting thread (client mode): 0xb6b63eb0
2025-12-25T21:56:41.079 [DEBUG] [Thread-19188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:56:41.095 [DEBUG] [Thread-19188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:56:41.095 [INFO] [Thread-19188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:56:41.102 [DEBUG] [Thread-19188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] client lang: <none>
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] server lang: <none>
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] kex follows: False
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] Compression: none
2025-12-25T21:56:41.103 [DEBUG] [Thread-19188] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:56:41.163 [DEBUG] [Thread-19188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:56:41.163 [DEBUG] [Thread-19188] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:56:41.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:56:41.164 [DEBUG] [Thread-19188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:56:41.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:56:41.222 [DEBUG] [Thread-19188] [transport.py] [_log()] userauth is OK
2025-12-25T21:56:41.222 [DEBUG] [Thread-19188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:56:41.222 [DEBUG] [Thread-19188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:56:41.222 [DEBUG] [Thread-19188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:56:41.222 [DEBUG] [Thread-19188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:56:41.244 [INFO] [Thread-19188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:56:41.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-25T21:56:41.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:56:42.058 [DEBUG] [Thread-19188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:56:42.058 [DEBUG] [Thread-19188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:56:42.105 [DEBUG] [Thread-19188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:56:42.106 [DEBUG] [Thread-19188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:56:42.114 [DEBUG] [Thread-19188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:56:42.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:56:42.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-25T21:56:42.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:56:42.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:56:42.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:56:42.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:56:42.150 [DEBUG] [Thread-19188] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:56:51.431 [DEBUG] [Thread-19190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:52.746 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:56:52.748 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:06.488 [DEBUG] [Thread-19191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:12.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:57:12.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:57:12.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T21:57:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 57), 4.9, 72.32, 0.0, 12.16, 15.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:57:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:57:00
2025-12-25T21:57:12.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:57:13.147 [DEBUG] [Thread-19192] [transport.py] [_log()] starting thread (client mode): 0xb6b7fee0
2025-12-25T21:57:13.147 [DEBUG] [Thread-19192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:57:13.161 [DEBUG] [Thread-19192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:57:13.161 [INFO] [Thread-19192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] client lang: <none>
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] server lang: <none>
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] kex follows: False
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] Compression: none
2025-12-25T21:57:13.162 [DEBUG] [Thread-19192] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:57:13.169 [DEBUG] [Thread-19192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:57:13.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:57:13.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] userauth is OK
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:57:13.170 [DEBUG] [Thread-19192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:57:13.181 [INFO] [Thread-19192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:57:13.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:57:13.855 [DEBUG] [Thread-19192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:57:13.855 [DEBUG] [Thread-19192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:57:13.855 [DEBUG] [Thread-19192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:57:13.897 [DEBUG] [Thread-19192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:57:13.897 [DEBUG] [Thread-19192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:57:13.899 [DEBUG] [Thread-19192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:57:13.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:57:13.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:57:13.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:57:13.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:57:13.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:57:13.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:57:13.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.830961 -999.00  +15.90  12.43     75  +11.60 1 1 1 1 1     0    0 3.67 -35.21 ZNESW 11.2 12.4 195.6 14.1 16.8 -22.2 16.7 -22.2 16.6 -20.5 16.8 -21.3
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.830961
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:57:13.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:57:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:57:13.917 [DEBUG] [Thread-19192] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:57:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:57:13.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:57:00', tmtdew=4.9, humidity=72.32, cloud=0.0, wind=12.16, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:57:01', seeing=1.17, atlas_timestamp='2025-12-25T19:56:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.11925000000000097, 0.16225000000000023, 0.13049999999999962, 0.10250000000000092, 0.11125000000000007, 0.10899999999999999, 0.16325000000000145, 0.14250000000000007, 0.08800000000000097, 0.13625000000000043, 0.12299999999999933, 0.14199999999999946, 0.13624999999999865, 0.12149999999999928, 0.14749999999999908, 0.08674999999999855, 0.15649999999999942, 0.1280000000000001, 0.1092499999999994, 0.1034999999999986, 0.1842499999999987, 0.15725000000000122, 0.1297499999999996, 0.11099999999999888, 0.14250000000000007, 0.17875000000000085, 0.1974999999999998, 0.1869999999999994, 0.13000000000000078, 0.22600000000000087, 0.20199999999999996, 0.18874999999999886], zp_timestamp='2025-12-25T19:53:00')
2025-12-25T21:57:14.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-25T21:57:14.017 [DEBUG] [Thread-19195] [transport.py] [_log()] starting thread (client mode): 0xb6bb5fc0
2025-12-25T21:57:14.017 [DEBUG] [Thread-19195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:57:14.031 [DEBUG] [Thread-19195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:57:14.031 [INFO] [Thread-19195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:14.038 [DEBUG] [Thread-19195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] client lang: <none>
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] server lang: <none>
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] kex follows: False
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] Compression: none
2025-12-25T21:57:14.039 [DEBUG] [Thread-19195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:57:14.097 [DEBUG] [Thread-19195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:57:14.098 [DEBUG] [Thread-19195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:57:14.098 [DEBUG] [Thread-19195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:57:14.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:57:14.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:57:14.154 [DEBUG] [Thread-19195] [transport.py] [_log()] userauth is OK
2025-12-25T21:57:14.154 [DEBUG] [Thread-19195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:57:14.154 [DEBUG] [Thread-19195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:57:14.154 [DEBUG] [Thread-19195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:57:14.155 [DEBUG] [Thread-19195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:57:14.172 [INFO] [Thread-19195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:57:14.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:57:14.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:57:15.031 [DEBUG] [Thread-19195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:57:15.031 [DEBUG] [Thread-19195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:57:15.079 [DEBUG] [Thread-19195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:57:15.079 [DEBUG] [Thread-19195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:57:15.089 [DEBUG] [Thread-19195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:57:15.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:57:15.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-25T21:57:15.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-25T21:57:15.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:57:15.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:57:15.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:57:15.124 [DEBUG] [Thread-19195] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:57:21.524 [DEBUG] [Thread-19197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:29.413 [DEBUG] [Thread-19198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:36.574 [DEBUG] [Thread-19199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:45.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:57:45.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:57:45.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-25T21:57:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 57, 32), 4.89, 72.39, 0.0, 12.49, 15.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:57:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:57:32
2025-12-25T21:57:45.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:57:46.136 [DEBUG] [Thread-19200] [transport.py] [_log()] starting thread (client mode): 0xb6baa260
2025-12-25T21:57:46.136 [DEBUG] [Thread-19200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:57:46.156 [DEBUG] [Thread-19200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:57:46.157 [INFO] [Thread-19200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:57:46.160 [DEBUG] [Thread-19200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:57:46.160 [DEBUG] [Thread-19200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] client lang: <none>
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] server lang: <none>
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] kex follows: False
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:57:46.161 [DEBUG] [Thread-19200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:57:46.162 [DEBUG] [Thread-19200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:57:46.162 [DEBUG] [Thread-19200] [transport.py] [_log()] Compression: none
2025-12-25T21:57:46.162 [DEBUG] [Thread-19200] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:57:46.180 [DEBUG] [Thread-19200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:57:46.180 [DEBUG] [Thread-19200] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:57:46.181 [DEBUG] [Thread-19200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:57:46.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:57:46.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:57:46.183 [DEBUG] [Thread-19200] [transport.py] [_log()] userauth is OK
2025-12-25T21:57:46.183 [DEBUG] [Thread-19200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:57:46.183 [DEBUG] [Thread-19200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:57:46.183 [DEBUG] [Thread-19200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:57:46.183 [DEBUG] [Thread-19200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:57:46.209 [INFO] [Thread-19200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:57:46.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:57:46.835 [DEBUG] [Thread-19200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:57:46.835 [DEBUG] [Thread-19200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:57:46.835 [DEBUG] [Thread-19200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:57:46.875 [DEBUG] [Thread-19200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:57:46.875 [DEBUG] [Thread-19200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:57:46.877 [DEBUG] [Thread-19200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:57:46.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:57:46.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:57:46.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:57:46.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:57:46.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:57:46.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:57:46.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.831308 -999.00  +15.80   9.63     75  +11.60 1 1 1 1 1     0    0 3.45 -38.74 ZNESW 11.7 9.6 192.4 13.6 16.8 -22.1 16.6 -22.3 16.5 -20.4 16.8 -21.2
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.831308
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:57:46.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:57:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:57:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:57:32', tmtdew=4.89, humidity=72.39, cloud=0.0, wind=12.49, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:57:33', seeing=1.17, atlas_timestamp='2025-12-25T19:57:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.11425000000000018, 0.15775000000000006, 0.10299999999999976, 0.0884999999999998, 0.14724999999999966, 0.11800000000000033, 0.1542500000000011, 0.14649999999999963, 0.09450000000000003, 0.15274999999999928, 0.028999999999999915, 0.13949999999999996, 0.10824999999999996, 0.0990000000000002, 0.09799999999999898, 0.1172500000000003, 0.15249999999999986, 0.09699999999999953, 0.06724999999999959, 0.14599999999999902, 0.1872499999999988, 0.14874999999999972, 0.12074999999999925, 0.10849999999999937, 0.12299999999999933, 0.1977499999999992, 0.16750000000000043, 0.1620000000000008, 0.11250000000000071, 0.21300000000000097, 0.15399999999999991, 0.12124999999999986], zp_timestamp='2025-12-25T19:56:00')
2025-12-25T21:57:46.897 [DEBUG] [Thread-19200] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:57:46.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T21:57:46.981 [DEBUG] [Thread-19203] [transport.py] [_log()] starting thread (client mode): 0xb6baac20
2025-12-25T21:57:46.981 [DEBUG] [Thread-19203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:57:46.995 [DEBUG] [Thread-19203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:57:46.995 [INFO] [Thread-19203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] client lang: <none>
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] server lang: <none>
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] kex follows: False
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] Compression: none
2025-12-25T21:57:47.003 [DEBUG] [Thread-19203] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:57:47.060 [DEBUG] [Thread-19203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:57:47.060 [DEBUG] [Thread-19203] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:57:47.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:57:47.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:57:47.061 [DEBUG] [Thread-19203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:57:47.117 [DEBUG] [Thread-19203] [transport.py] [_log()] userauth is OK
2025-12-25T21:57:47.117 [DEBUG] [Thread-19203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:57:47.117 [DEBUG] [Thread-19203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:57:47.117 [DEBUG] [Thread-19203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:57:47.117 [DEBUG] [Thread-19203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:57:47.132 [INFO] [Thread-19203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:57:47.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-25T21:57:47.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:57:48.011 [DEBUG] [Thread-19203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:57:48.011 [DEBUG] [Thread-19203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:57:48.058 [DEBUG] [Thread-19203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:57:48.058 [DEBUG] [Thread-19203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:57:48.066 [DEBUG] [Thread-19203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:57:48.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:57:48.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-25T21:57:48.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:57:48.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:57:48.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:57:48.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:57:48.097 [DEBUG] [Thread-19203] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:57:51.604 [DEBUG] [Thread-19205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:52.950 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:57:52.951 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:06.651 [DEBUG] [Thread-19206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:18.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:58:18.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:58:18.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-25T21:58:18.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 58, 4), 4.88, 72.4, 0.0, 13.04, 15.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:58:18.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:58:04
2025-12-25T21:58:18.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:58:19.107 [DEBUG] [Thread-19207] [transport.py] [_log()] starting thread (client mode): 0xb6b77b80
2025-12-25T21:58:19.107 [DEBUG] [Thread-19207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:58:19.123 [DEBUG] [Thread-19207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:58:19.123 [INFO] [Thread-19207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] client lang: <none>
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] server lang: <none>
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] kex follows: False
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] Compression: none
2025-12-25T21:58:19.126 [DEBUG] [Thread-19207] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:58:19.141 [DEBUG] [Thread-19207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:58:19.141 [DEBUG] [Thread-19207] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:58:19.141 [DEBUG] [Thread-19207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:58:19.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:58:19.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:58:19.142 [DEBUG] [Thread-19207] [transport.py] [_log()] userauth is OK
2025-12-25T21:58:19.142 [DEBUG] [Thread-19207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:58:19.142 [DEBUG] [Thread-19207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:58:19.142 [DEBUG] [Thread-19207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:58:19.142 [DEBUG] [Thread-19207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:58:19.155 [INFO] [Thread-19207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:58:19.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:58:19.782 [DEBUG] [Thread-19207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:58:19.782 [DEBUG] [Thread-19207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:58:19.783 [DEBUG] [Thread-19207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:58:19.823 [DEBUG] [Thread-19207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:58:19.823 [DEBUG] [Thread-19207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:58:19.826 [DEBUG] [Thread-19207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:58:19.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:58:19.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:58:19.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:58:19.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:58:19.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:58:19.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:58:19.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:58:19.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:58:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:58:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.831656 -999.00  +15.80   9.08     75  +11.60 1 1 1 1 1     0    0 3.50 -36.34 ZNESW 8.7 9.1 191.8 12.6 16.8 -22.2 16.6 -21.9 16.5 -20.3 16.8 -21.4
2025-12-25T21:58:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:58:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:58:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.831656
2025-12-25T21:58:19.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:58:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:58:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:58:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:58:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:58:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:58:04', tmtdew=4.88, humidity=72.4, cloud=0.0, wind=13.04, 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-25T21:58:05', seeing=1.17, atlas_timestamp='2025-12-25T19:57:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.11425000000000018, 0.15775000000000006, 0.10299999999999976, 0.0884999999999998, 0.14724999999999966, 0.11800000000000033, 0.1542500000000011, 0.14649999999999963, 0.09450000000000003, 0.15274999999999928, 0.028999999999999915, 0.13949999999999996, 0.10824999999999996, 0.0990000000000002, 0.09799999999999898, 0.1172500000000003, 0.15249999999999986, 0.09699999999999953, 0.06724999999999959, 0.14599999999999902, 0.1872499999999988, 0.14874999999999972, 0.12074999999999925, 0.10849999999999937, 0.12299999999999933, 0.1977499999999992, 0.16750000000000043, 0.1620000000000008, 0.11250000000000071, 0.21300000000000097, 0.15399999999999991, 0.12124999999999986], zp_timestamp='2025-12-25T19:56:00')
2025-12-25T21:58:19.852 [DEBUG] [Thread-19207] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:58:19.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-25T21:58:19.945 [DEBUG] [Thread-19210] [transport.py] [_log()] starting thread (client mode): 0xb6bb5a20
2025-12-25T21:58:19.945 [DEBUG] [Thread-19210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:58:19.959 [DEBUG] [Thread-19210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:58:19.959 [INFO] [Thread-19210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:58:19.966 [DEBUG] [Thread-19210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] client lang: <none>
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] server lang: <none>
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] kex follows: False
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] Compression: none
2025-12-25T21:58:19.967 [DEBUG] [Thread-19210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:58:20.025 [DEBUG] [Thread-19210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:58:20.026 [DEBUG] [Thread-19210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:58:20.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:58:20.027 [DEBUG] [Thread-19210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:58:20.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:58:20.082 [DEBUG] [Thread-19210] [transport.py] [_log()] userauth is OK
2025-12-25T21:58:20.082 [DEBUG] [Thread-19210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:58:20.082 [DEBUG] [Thread-19210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:58:20.082 [DEBUG] [Thread-19210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:58:20.082 [DEBUG] [Thread-19210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:58:20.106 [INFO] [Thread-19210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:58:20.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-25T21:58:20.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:58:20.926 [DEBUG] [Thread-19210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:58:20.927 [DEBUG] [Thread-19210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:58:20.974 [DEBUG] [Thread-19210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:58:20.975 [DEBUG] [Thread-19210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:58:20.985 [DEBUG] [Thread-19210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:58:20.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:58:20.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')
2025-12-25T21:58: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-25T21:58:21.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:58:21.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:58:21.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:58:21.021 [DEBUG] [Thread-19210] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:58:21.686 [DEBUG] [Thread-19212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:29.465 [DEBUG] [Thread-19213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:36.736 [DEBUG] [Thread-19214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:58:51.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:58:51.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-25T21:58:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 58, 36), 4.81, 73.04, 0.0, 13.15, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:58:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:58:36
2025-12-25T21:58:51.767 [DEBUG] [Thread-19215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:51.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:58:52.039 [DEBUG] [Thread-19216] [transport.py] [_log()] starting thread (client mode): 0xb6bb41c0
2025-12-25T21:58:52.040 [DEBUG] [Thread-19216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:58:52.059 [DEBUG] [Thread-19216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:58:52.060 [INFO] [Thread-19216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:58:52.063 [DEBUG] [Thread-19216] [transport.py] [_log()] client lang: <none>
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] server lang: <none>
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] kex follows: False
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] Compression: none
2025-12-25T21:58:52.064 [DEBUG] [Thread-19216] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:58:52.083 [DEBUG] [Thread-19216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:58:52.083 [DEBUG] [Thread-19216] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:58:52.084 [DEBUG] [Thread-19216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:58:52.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:58:52.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:58:52.124 [DEBUG] [Thread-19216] [transport.py] [_log()] userauth is OK
2025-12-25T21:58:52.125 [DEBUG] [Thread-19216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:58:52.125 [DEBUG] [Thread-19216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:58:52.125 [DEBUG] [Thread-19216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:58:52.125 [DEBUG] [Thread-19216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:58:52.145 [INFO] [Thread-19216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:58:52.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:58:52.797 [DEBUG] [Thread-19216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:58:52.797 [DEBUG] [Thread-19216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:58:52.798 [DEBUG] [Thread-19216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:58:52.839 [DEBUG] [Thread-19216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:58:52.839 [DEBUG] [Thread-19216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:58:52.842 [DEBUG] [Thread-19216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:58:52.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:58:52.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:58:52.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:58:52.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:58:52.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:58:52.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:58:52.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:58:52.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:58:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:58:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.832350 -999.00  +15.80   8.96     75  +11.60 1 1 1 1 1     0    0 3.53 -36.80 ZNESW 11.6 9.0 177.4 10.9 16.8 -22.0 16.6 -22.2 16.5 -20.4 16.8 -21.3
2025-12-25T21:58:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:58:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:58:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.832350
2025-12-25T21:58:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:58:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:58:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:58:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:58:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:58:52.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:58:36', tmtdew=4.81, humidity=73.04, cloud=0.0, wind=13.15, 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-25T21:58:37', seeing=1.53, atlas_timestamp='2025-12-25T19:58:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.11425000000000018, 0.15775000000000006, 0.10299999999999976, 0.0884999999999998, 0.14724999999999966, 0.11800000000000033, 0.1542500000000011, 0.14649999999999963, 0.09450000000000003, 0.15274999999999928, 0.028999999999999915, 0.13949999999999996, 0.10824999999999996, 0.0990000000000002, 0.09799999999999898, 0.1172500000000003, 0.15249999999999986, 0.09699999999999953, 0.06724999999999959, 0.14599999999999902, 0.1872499999999988, 0.14874999999999972, 0.12074999999999925, 0.10849999999999937, 0.12299999999999933, 0.1977499999999992, 0.16750000000000043, 0.1620000000000008, 0.11250000000000071, 0.21300000000000097, 0.15399999999999991, 0.12124999999999986], zp_timestamp='2025-12-25T19:56:00')
2025-12-25T21:58:52.865 [DEBUG] [Thread-19216] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:58:52.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-25T21:58:52.965 [DEBUG] [Thread-19219] [transport.py] [_log()] starting thread (client mode): 0xb6b76e60
2025-12-25T21:58:52.966 [DEBUG] [Thread-19219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:58:52.980 [DEBUG] [Thread-19219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:58:52.980 [INFO] [Thread-19219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:58:52.987 [DEBUG] [Thread-19219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] client lang: <none>
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] server lang: <none>
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] kex follows: False
2025-12-25T21:58:52.988 [DEBUG] [Thread-19219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:58:52.989 [DEBUG] [Thread-19219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:58:52.989 [DEBUG] [Thread-19219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:58:52.989 [DEBUG] [Thread-19219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:58:52.989 [DEBUG] [Thread-19219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:58:52.989 [DEBUG] [Thread-19219] [transport.py] [_log()] Compression: none
2025-12-25T21:58:52.989 [DEBUG] [Thread-19219] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:58:53.045 [DEBUG] [Thread-19219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:58:53.045 [DEBUG] [Thread-19219] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:58:53.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:58:53.046 [DEBUG] [Thread-19219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:58:53.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:58:53.100 [DEBUG] [Thread-19219] [transport.py] [_log()] userauth is OK
2025-12-25T21:58:53.101 [DEBUG] [Thread-19219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:58:53.101 [DEBUG] [Thread-19219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:58:53.101 [DEBUG] [Thread-19219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:58:53.101 [DEBUG] [Thread-19219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:58:53.119 [INFO] [Thread-19219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:58:53.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T21:58:53.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:58:53.150 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:53.151 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:58:53.947 [DEBUG] [Thread-19219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:58:53.947 [DEBUG] [Thread-19219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:58:53.995 [DEBUG] [Thread-19219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:58:53.996 [DEBUG] [Thread-19219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:58:54.004 [DEBUG] [Thread-19219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:58:54.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:58:54.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-25T21:58:54.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-25T21:58:54.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:58:54.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:58:54.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:58:54.038 [DEBUG] [Thread-19219] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:59:06.796 [DEBUG] [Thread-19221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:21.833 [DEBUG] [Thread-19222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:59:24.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:59:24.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-25T21:59:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 59, 8), 4.8, 73.07, 0.0, 12.03, 15.57, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:59:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:59:08
2025-12-25T21:59:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:59:25.030 [DEBUG] [Thread-19223] [transport.py] [_log()] starting thread (client mode): 0xb6b49f60
2025-12-25T21:59:25.031 [DEBUG] [Thread-19223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:59:25.050 [DEBUG] [Thread-19223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:59:25.051 [INFO] [Thread-19223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:59:25.054 [DEBUG] [Thread-19223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:59:25.054 [DEBUG] [Thread-19223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:59:25.054 [DEBUG] [Thread-19223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:59:25.054 [DEBUG] [Thread-19223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] client lang: <none>
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] server lang: <none>
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] kex follows: False
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:59:25.055 [DEBUG] [Thread-19223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:59:25.056 [DEBUG] [Thread-19223] [transport.py] [_log()] Compression: none
2025-12-25T21:59:25.056 [DEBUG] [Thread-19223] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:59:25.073 [DEBUG] [Thread-19223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:59:25.074 [DEBUG] [Thread-19223] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:59:25.074 [DEBUG] [Thread-19223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:59:25.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:59:25.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:59:25.076 [DEBUG] [Thread-19223] [transport.py] [_log()] userauth is OK
2025-12-25T21:59:25.076 [DEBUG] [Thread-19223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:59:25.076 [DEBUG] [Thread-19223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:59:25.076 [DEBUG] [Thread-19223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:59:25.077 [DEBUG] [Thread-19223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:59:25.093 [INFO] [Thread-19223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:59:25.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:59:25.752 [DEBUG] [Thread-19223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:59:25.752 [DEBUG] [Thread-19223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:59:25.753 [DEBUG] [Thread-19223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:59:25.793 [DEBUG] [Thread-19223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:59:25.793 [DEBUG] [Thread-19223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:59:25.795 [DEBUG] [Thread-19223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:59:25.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:59:25.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:59:25.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:59:25.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:59:25.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:59:25.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:59:25.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:59:25.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:59:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:59:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.832697 -999.00  +15.80   9.04     75  +11.60 1 1 1 1 1     0    0 3.37 -40.77 ZNESW 8.2 9.0 200.4 11.7 16.8 -22.1 16.6 -22.0 16.5 -20.5 16.7 -21.4
2025-12-25T21:59:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:59:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:59:25.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.832697
2025-12-25T21:59:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:59:25.816 [DEBUG] [Thread-19223] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:59:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:59:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:59:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:59:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:59:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:59:08', tmtdew=4.8, humidity=73.07, cloud=0.0, wind=12.03, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T21:59:09', seeing=1.13, atlas_timestamp='2025-12-25T19:59:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.11425000000000018, 0.15775000000000006, 0.10299999999999976, 0.0884999999999998, 0.14724999999999966, 0.11800000000000033, 0.1542500000000011, 0.14649999999999963, 0.09450000000000003, 0.15274999999999928, 0.028999999999999915, 0.13949999999999996, 0.10824999999999996, 0.0990000000000002, 0.09799999999999898, 0.1172500000000003, 0.15249999999999986, 0.09699999999999953, 0.06724999999999959, 0.14599999999999902, 0.1872499999999988, 0.14874999999999972, 0.12074999999999925, 0.10849999999999937, 0.12299999999999933, 0.1977499999999992, 0.16750000000000043, 0.1620000000000008, 0.11250000000000071, 0.21300000000000097, 0.15399999999999991, 0.12124999999999986], zp_timestamp='2025-12-25T19:56:00')
2025-12-25T21:59:25.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-25T21:59:25.918 [DEBUG] [Thread-19226] [transport.py] [_log()] starting thread (client mode): 0xb6b76080
2025-12-25T21:59:25.918 [DEBUG] [Thread-19226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:59:25.933 [DEBUG] [Thread-19226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:59:25.933 [INFO] [Thread-19226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:59:25.940 [DEBUG] [Thread-19226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] client lang: <none>
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] server lang: <none>
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] kex follows: False
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] Compression: none
2025-12-25T21:59:25.941 [DEBUG] [Thread-19226] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:59:26.001 [DEBUG] [Thread-19226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:59:26.002 [DEBUG] [Thread-19226] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:59:26.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:59:26.003 [DEBUG] [Thread-19226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:59:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:59:26.061 [DEBUG] [Thread-19226] [transport.py] [_log()] userauth is OK
2025-12-25T21:59:26.062 [DEBUG] [Thread-19226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:59:26.062 [DEBUG] [Thread-19226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:59:26.062 [DEBUG] [Thread-19226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:59:26.062 [DEBUG] [Thread-19226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:59:26.082 [INFO] [Thread-19226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:59:26.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-25T21:59:26.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:59:26.911 [DEBUG] [Thread-19226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:59:26.911 [DEBUG] [Thread-19226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:59:26.959 [DEBUG] [Thread-19226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:59:26.959 [DEBUG] [Thread-19226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:59:26.968 [DEBUG] [Thread-19226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:59:26.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:59:26.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T21:59:26.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-25T21:59:26.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:59:26.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:59:26.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:59:27.005 [DEBUG] [Thread-19226] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:59:29.532 [DEBUG] [Thread-19228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:36.865 [DEBUG] [Thread-19229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:51.920 [DEBUG] [Thread-19230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:53.353 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:53.354 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T21:59:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T21:59:57.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T21:59:57.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-25T21:59:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 21, 59, 40), 4.79, 73.14, 0.0, 12.19, 15.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T21:59:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 21:59:40
2025-12-25T21:59:57.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T21:59:57.984 [DEBUG] [Thread-19231] [transport.py] [_log()] starting thread (client mode): 0xb6b74b20
2025-12-25T21:59:57.985 [DEBUG] [Thread-19231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:59:58.005 [DEBUG] [Thread-19231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T21:59:58.005 [INFO] [Thread-19231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T21:59:58.008 [DEBUG] [Thread-19231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] client lang: <none>
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] server lang: <none>
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] kex follows: False
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] Compression: none
2025-12-25T21:59:58.009 [DEBUG] [Thread-19231] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:59:58.026 [DEBUG] [Thread-19231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:59:58.027 [DEBUG] [Thread-19231] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:59:58.028 [DEBUG] [Thread-19231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T21:59:58.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T21:59:58.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:59:58.030 [DEBUG] [Thread-19231] [transport.py] [_log()] userauth is OK
2025-12-25T21:59:58.031 [DEBUG] [Thread-19231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:59:58.031 [DEBUG] [Thread-19231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:59:58.031 [DEBUG] [Thread-19231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T21:59:58.031 [DEBUG] [Thread-19231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:59:58.066 [INFO] [Thread-19231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:59:58.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:59:58.728 [DEBUG] [Thread-19231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:59:58.728 [DEBUG] [Thread-19231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:59:58.729 [DEBUG] [Thread-19231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T21:59:58.769 [DEBUG] [Thread-19231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:59:58.769 [DEBUG] [Thread-19231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:59:58.772 [DEBUG] [Thread-19231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:59:58.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:59:58.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T21:59:58.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T21:59:58.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T21:59:58.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:59:58.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T21:59:58.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:59:58.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:59:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T21:59:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.833045 -999.00  +15.80  10.30     76  +11.50 1 1 1 1 1     0    0 3.30 -42.73 ZNESW 8.2 10.3 190.8 13.0 16.7 -22.1 16.6 -21.7 16.5 -20.5 16.7 -21.3
2025-12-25T21:59:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T21:59:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T21:59:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.833045
2025-12-25T21:59:58.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T21:59:58.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T21:59:58.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T21:59:58.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T21:59:58.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T21:59:58.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T21:59:40', tmtdew=4.79, humidity=73.14, cloud=0.0, wind=12.19, 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-25T21:59:41', seeing=1.13, atlas_timestamp='2025-12-25T19:59:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.11425000000000018, 0.15775000000000006, 0.10299999999999976, 0.0884999999999998, 0.14724999999999966, 0.11800000000000033, 0.1542500000000011, 0.14649999999999963, 0.09450000000000003, 0.15274999999999928, 0.028999999999999915, 0.13949999999999996, 0.10824999999999996, 0.0990000000000002, 0.09799999999999898, 0.1172500000000003, 0.15249999999999986, 0.09699999999999953, 0.06724999999999959, 0.14599999999999902, 0.1872499999999988, 0.14874999999999972, 0.12074999999999925, 0.10849999999999937, 0.12299999999999933, 0.1977499999999992, 0.16750000000000043, 0.1620000000000008, 0.11250000000000071, 0.21300000000000097, 0.15399999999999991, 0.12124999999999986], zp_timestamp='2025-12-25T19:56:00')
2025-12-25T21:59:58.797 [DEBUG] [Thread-19231] [transport.py] [_log()] EOF in transport thread
2025-12-25T21:59:58.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-25T21:59:58.891 [DEBUG] [Thread-19234] [transport.py] [_log()] starting thread (client mode): 0xb6b77e80
2025-12-25T21:59:58.892 [DEBUG] [Thread-19234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T21:59:58.910 [DEBUG] [Thread-19234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T21:59:58.910 [INFO] [Thread-19234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T21:59:58.917 [DEBUG] [Thread-19234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] client lang: <none>
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] server lang: <none>
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] kex follows: False
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T21:59:58.918 [DEBUG] [Thread-19234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T21:59:58.919 [DEBUG] [Thread-19234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T21:59:58.919 [DEBUG] [Thread-19234] [transport.py] [_log()] Compression: none
2025-12-25T21:59:58.919 [DEBUG] [Thread-19234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T21:59:58.976 [DEBUG] [Thread-19234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T21:59:58.977 [DEBUG] [Thread-19234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T21:59:58.977 [DEBUG] [Thread-19234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T21:59:58.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T21:59:58.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T21:59:59.032 [DEBUG] [Thread-19234] [transport.py] [_log()] userauth is OK
2025-12-25T21:59:59.033 [DEBUG] [Thread-19234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T21:59:59.033 [DEBUG] [Thread-19234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T21:59:59.033 [DEBUG] [Thread-19234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T21:59:59.033 [DEBUG] [Thread-19234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T21:59:59.052 [INFO] [Thread-19234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T21:59:59.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-25T21:59:59.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T21:59:59.902 [DEBUG] [Thread-19234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T21:59:59.902 [DEBUG] [Thread-19234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T21:59:59.950 [DEBUG] [Thread-19234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T21:59:59.950 [DEBUG] [Thread-19234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T21:59:59.959 [DEBUG] [Thread-19234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T21:59:59.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T21:59:59.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-25T21:59:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T21:59:59.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T21:59:59.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T21:59:59.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T21:59:59.996 [DEBUG] [Thread-19234] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:00:06.957 [DEBUG] [Thread-19236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:22.015 [DEBUG] [Thread-19237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:29.590 [DEBUG] [Thread-19238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:30.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:00:30.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:00:30.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-25T22:00:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 0, 12), 4.78, 73.17, 0.0, 11.31, 15.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:00:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:00:12
2025-12-25T22:00:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:00:30.986 [DEBUG] [Thread-19239] [transport.py] [_log()] starting thread (client mode): 0xb6baa320
2025-12-25T22:00:30.986 [DEBUG] [Thread-19239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:00:31.006 [DEBUG] [Thread-19239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:00:31.006 [INFO] [Thread-19239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] client lang: <none>
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] server lang: <none>
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] kex follows: False
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] Compression: none
2025-12-25T22:00:31.009 [DEBUG] [Thread-19239] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:00:31.024 [DEBUG] [Thread-19239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:00:31.024 [DEBUG] [Thread-19239] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:00:31.024 [DEBUG] [Thread-19239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:00:31.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:00:31.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:00:31.025 [DEBUG] [Thread-19239] [transport.py] [_log()] userauth is OK
2025-12-25T22:00:31.025 [DEBUG] [Thread-19239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:00:31.025 [DEBUG] [Thread-19239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:00:31.025 [DEBUG] [Thread-19239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:00:31.025 [DEBUG] [Thread-19239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:00:31.052 [INFO] [Thread-19239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:00:31.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:00:31.686 [DEBUG] [Thread-19239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:00:31.687 [DEBUG] [Thread-19239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:00:31.687 [DEBUG] [Thread-19239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:00:31.728 [DEBUG] [Thread-19239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:00:31.728 [DEBUG] [Thread-19239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:00:31.733 [DEBUG] [Thread-19239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:00:31.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:00:31.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:00:31.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:00:31.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:00:31.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:00:31.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:00:31.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:00:31.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:00:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:00:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.833392 -999.00  +15.70  10.44     76  +11.60 1 1 1 1 1     0    0 3.31 -42.92 ZNESW 11.4 10.4 188.0 14.6 16.7 -22.1 16.6 -21.8 16.4 -20.6 16.7 -21.2
2025-12-25T22:00:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:00:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:00:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.833392
2025-12-25T22:00:31.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:00:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:00:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:00:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:00:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:00:31.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:00:12', tmtdew=4.78, humidity=73.17, cloud=0.0, wind=11.31, 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-25T22:00:13', seeing=0.86, atlas_timestamp='2025-12-25T20:00:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.07375000000000043, 0.11425000000000018, 0.15775000000000006, 0.10299999999999976, 0.0884999999999998, 0.14724999999999966, 0.11800000000000033, 0.1542500000000011, 0.14649999999999963, 0.09450000000000003, 0.15274999999999928, 0.028999999999999915, 0.13949999999999996, 0.10824999999999996, 0.0990000000000002, 0.09799999999999898, 0.1172500000000003, 0.15249999999999986, 0.09699999999999953, 0.06724999999999959, 0.14599999999999902, 0.1872499999999988, 0.14874999999999972, 0.12074999999999925, 0.10849999999999937, 0.12299999999999933, 0.1977499999999992, 0.16750000000000043, 0.1620000000000008, 0.11250000000000071, 0.21300000000000097, 0.15399999999999991, 0.12124999999999986], zp_timestamp='2025-12-25T19:56:00')
2025-12-25T22:00:31.758 [DEBUG] [Thread-19239] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:00:31.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:00:31.852 [DEBUG] [Thread-19242] [transport.py] [_log()] starting thread (client mode): 0xb6bb5a20
2025-12-25T22:00:31.853 [DEBUG] [Thread-19242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:00:31.868 [DEBUG] [Thread-19242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:00:31.868 [INFO] [Thread-19242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:00:31.875 [DEBUG] [Thread-19242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] client lang: <none>
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] server lang: <none>
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] kex follows: False
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] Compression: none
2025-12-25T22:00:31.876 [DEBUG] [Thread-19242] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:00:31.932 [DEBUG] [Thread-19242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:00:31.933 [DEBUG] [Thread-19242] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:00:31.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:00:31.934 [DEBUG] [Thread-19242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:00:31.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:00:31.988 [DEBUG] [Thread-19242] [transport.py] [_log()] userauth is OK
2025-12-25T22:00:31.989 [DEBUG] [Thread-19242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:00:31.989 [DEBUG] [Thread-19242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:00:31.989 [DEBUG] [Thread-19242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:00:31.990 [DEBUG] [Thread-19242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:00:32.009 [INFO] [Thread-19242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:00:32.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-25T22:00:32.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:00:32.852 [DEBUG] [Thread-19242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:00:32.852 [DEBUG] [Thread-19242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:00:32.900 [DEBUG] [Thread-19242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:00:32.900 [DEBUG] [Thread-19242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:00:32.909 [DEBUG] [Thread-19242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:00:32.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:00:32.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-25T22:00:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:00:32.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:00:32.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:00:32.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:00:32.945 [DEBUG] [Thread-19242] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:00:37.045 [DEBUG] [Thread-19244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:40.429 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:50.417 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:52.095 [DEBUG] [Thread-19245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:53.557 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:53.558 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:00:54.512 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:01:02.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:01:02.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-25T22:01:03.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 0, 44), 4.78, 73.19, 0.0, 11.66, 15.67, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:01:03.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:00:44
2025-12-25T22:01:03.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:01:03.974 [DEBUG] [Thread-19246] [transport.py] [_log()] starting thread (client mode): 0xb6bb7f70
2025-12-25T22:01:03.974 [DEBUG] [Thread-19246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:01:03.993 [DEBUG] [Thread-19246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:01:03.993 [INFO] [Thread-19246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] client lang: <none>
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] server lang: <none>
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] kex follows: False
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] Compression: none
2025-12-25T22:01:03.997 [DEBUG] [Thread-19246] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:01:04.008 [DEBUG] [Thread-19246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:01:04.008 [DEBUG] [Thread-19246] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:01:04.009 [DEBUG] [Thread-19246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:01:04.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:01:04.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:01:04.009 [DEBUG] [Thread-19246] [transport.py] [_log()] userauth is OK
2025-12-25T22:01:04.009 [DEBUG] [Thread-19246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:01:04.010 [DEBUG] [Thread-19246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:01:04.010 [DEBUG] [Thread-19246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:01:04.010 [DEBUG] [Thread-19246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:01:04.021 [INFO] [Thread-19246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:01:04.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:01:04.617 [DEBUG] [Thread-19246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:01:04.617 [DEBUG] [Thread-19246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:01:04.617 [DEBUG] [Thread-19246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:01:04.657 [DEBUG] [Thread-19246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:01:04.657 [DEBUG] [Thread-19246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:01:04.660 [DEBUG] [Thread-19246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:01:04.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:01:04.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:01:04.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:01:04.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:01:04.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:01:04.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:01:04.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.833739 -999.00  +15.70   7.06     76  +11.50 1 1 1 1 1     0    0 3.42 -39.30 ZNESW 6.7 7.1 198.4 13.6 16.7 -22.1 16.6 -21.7 16.4 -20.3 16.7 -21.2
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.833739
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:01:04.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:00:44', tmtdew=4.78, humidity=73.19, cloud=0.0, wind=11.66, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:00:45', seeing=1.17, atlas_timestamp='2025-12-25T20:00:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T19:59:00')
2025-12-25T22:01:04.682 [DEBUG] [Thread-19246] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:01:04.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:01:04.768 [DEBUG] [Thread-19249] [transport.py] [_log()] starting thread (client mode): 0xb6ba8f40
2025-12-25T22:01:04.768 [DEBUG] [Thread-19249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:01:04.785 [DEBUG] [Thread-19249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:01:04.785 [INFO] [Thread-19249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] client lang: <none>
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] server lang: <none>
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] kex follows: False
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:01:04.795 [DEBUG] [Thread-19249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:01:04.796 [DEBUG] [Thread-19249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:01:04.796 [DEBUG] [Thread-19249] [transport.py] [_log()] Compression: none
2025-12-25T22:01:04.796 [DEBUG] [Thread-19249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:01:04.858 [DEBUG] [Thread-19249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:01:04.858 [DEBUG] [Thread-19249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:01:04.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:01:04.858 [DEBUG] [Thread-19249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:01:04.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:01:04.916 [DEBUG] [Thread-19249] [transport.py] [_log()] userauth is OK
2025-12-25T22:01:04.916 [DEBUG] [Thread-19249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:01:04.916 [DEBUG] [Thread-19249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:01:04.916 [DEBUG] [Thread-19249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:01:04.916 [DEBUG] [Thread-19249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:01:04.932 [INFO] [Thread-19249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:01:04.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-25T22:01:04.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:01:05.855 [DEBUG] [Thread-19249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:01:05.855 [DEBUG] [Thread-19249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:01:05.904 [DEBUG] [Thread-19249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:01:05.904 [DEBUG] [Thread-19249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:01:05.912 [DEBUG] [Thread-19249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:01:05.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:01: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')
2025-12-25T22:01:05.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-25T22:01:05.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:01:05.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:01:05.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:01:05.945 [DEBUG] [Thread-19249] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:01:07.128 [DEBUG] [Thread-19251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:22.167 [DEBUG] [Thread-19252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:29.664 [DEBUG] [Thread-19253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:01:35.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:01:35.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-25T22:01:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 1, 17), 4.75, 73.32, 0.0, 10.43, 15.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:01:36.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:01:17
2025-12-25T22:01:36.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:01:36.946 [DEBUG] [Thread-19254] [transport.py] [_log()] starting thread (client mode): 0xb6baa560
2025-12-25T22:01:36.946 [DEBUG] [Thread-19254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:01:36.966 [DEBUG] [Thread-19254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:01:36.966 [INFO] [Thread-19254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] client lang: <none>
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] server lang: <none>
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] kex follows: False
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:01:36.969 [DEBUG] [Thread-19254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:01:36.970 [DEBUG] [Thread-19254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:01:36.970 [DEBUG] [Thread-19254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:01:36.970 [DEBUG] [Thread-19254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:01:36.970 [DEBUG] [Thread-19254] [transport.py] [_log()] Compression: none
2025-12-25T22:01:36.970 [DEBUG] [Thread-19254] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:01:36.986 [DEBUG] [Thread-19254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:01:36.987 [DEBUG] [Thread-19254] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:01:36.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:01:36.988 [DEBUG] [Thread-19254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:01:36.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:01:36.990 [DEBUG] [Thread-19254] [transport.py] [_log()] userauth is OK
2025-12-25T22:01:36.990 [DEBUG] [Thread-19254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:01:36.990 [DEBUG] [Thread-19254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:01:36.991 [DEBUG] [Thread-19254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:01:36.991 [DEBUG] [Thread-19254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:01:37.017 [INFO] [Thread-19254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:01:37.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:01:37.200 [DEBUG] [Thread-19256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:37.660 [DEBUG] [Thread-19254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:01:37.661 [DEBUG] [Thread-19254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:01:37.661 [DEBUG] [Thread-19254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:01:37.702 [DEBUG] [Thread-19254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:01:37.702 [DEBUG] [Thread-19254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:01:37.704 [DEBUG] [Thread-19254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:01:37.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:01:37.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:01:37.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:01:37.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:01:37.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:01:37.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:01:37.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:01:37.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:01:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:01:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.833739 -999.00  +15.70   7.06     76  +11.50 1 1 1 1 1     0    0 3.42 -39.30 ZNESW 6.7 7.1 198.4 13.6 16.7 -22.1 16.6 -21.7 16.4 -20.3 16.7 -21.2
2025-12-25T22:01:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:01:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:01:37.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.833739
2025-12-25T22:01:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:01:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:01:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:01:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:01:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:01:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:01:17', tmtdew=4.75, humidity=73.32, cloud=0.0, wind=10.43, 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-25T22:01:17', seeing=1.15, atlas_timestamp='2025-12-25T20:00:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T19:59:00')
2025-12-25T22:01:37.723 [DEBUG] [Thread-19254] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:01:37.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:01:37.810 [DEBUG] [Thread-19258] [transport.py] [_log()] starting thread (client mode): 0xb6bb6500
2025-12-25T22:01:37.810 [DEBUG] [Thread-19258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:01:37.824 [DEBUG] [Thread-19258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:01:37.824 [INFO] [Thread-19258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:01:37.832 [DEBUG] [Thread-19258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:01:37.832 [DEBUG] [Thread-19258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:01:37.833 [DEBUG] [Thread-19258] [transport.py] [_log()] client lang: <none>
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] server lang: <none>
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] kex follows: False
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:01:37.834 [DEBUG] [Thread-19258] [transport.py] [_log()] Compression: none
2025-12-25T22:01:37.835 [DEBUG] [Thread-19258] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:01:37.889 [DEBUG] [Thread-19258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:01:37.890 [DEBUG] [Thread-19258] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:01:37.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:01:37.891 [DEBUG] [Thread-19258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:01:37.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:01:37.944 [DEBUG] [Thread-19258] [transport.py] [_log()] userauth is OK
2025-12-25T22:01:37.944 [DEBUG] [Thread-19258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:01:37.944 [DEBUG] [Thread-19258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:01:37.944 [DEBUG] [Thread-19258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:01:37.944 [DEBUG] [Thread-19258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:01:37.958 [INFO] [Thread-19258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:01:37.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-25T22:01:37.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:01:39.033 [DEBUG] [Thread-19258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:01:39.033 [DEBUG] [Thread-19258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:01:39.034 [DEBUG] [Thread-19258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:01:39.034 [DEBUG] [Thread-19258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:01:39.043 [DEBUG] [Thread-19258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:01:39.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:01:39.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-25T22:01: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-25T22:01:39.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:01:39.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:01:39.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:01:39.081 [DEBUG] [Thread-19258] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:01:52.228 [DEBUG] [Thread-19260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:53.757 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:01:53.759 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:07.288 [DEBUG] [Thread-19261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:09.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:02:09.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:02:09.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-25T22:02:09.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 1, 49), 4.72, 73.2, 0.0, 12.09, 15.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:02:09.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:01:49
2025-12-25T22:02:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:02:10.086 [DEBUG] [Thread-19262] [transport.py] [_log()] starting thread (client mode): 0xb6bf5c60
2025-12-25T22:02:10.086 [DEBUG] [Thread-19262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:02:10.105 [DEBUG] [Thread-19262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:02:10.106 [INFO] [Thread-19262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:02:10.109 [DEBUG] [Thread-19262] [transport.py] [_log()] client lang: <none>
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] server lang: <none>
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] kex follows: False
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] Compression: none
2025-12-25T22:02:10.110 [DEBUG] [Thread-19262] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:02:10.129 [DEBUG] [Thread-19262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:02:10.130 [DEBUG] [Thread-19262] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:02:10.130 [DEBUG] [Thread-19262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:02:10.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:02:10.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:02:10.132 [DEBUG] [Thread-19262] [transport.py] [_log()] userauth is OK
2025-12-25T22:02:10.133 [DEBUG] [Thread-19262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:02:10.133 [DEBUG] [Thread-19262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:02:10.133 [DEBUG] [Thread-19262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:02:10.133 [DEBUG] [Thread-19262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:02:10.158 [INFO] [Thread-19262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:02:10.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:02:10.808 [DEBUG] [Thread-19262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:02:10.808 [DEBUG] [Thread-19262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:02:10.808 [DEBUG] [Thread-19262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:02:10.849 [DEBUG] [Thread-19262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:02:10.849 [DEBUG] [Thread-19262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:02:10.852 [DEBUG] [Thread-19262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:02:10.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:02:10.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:02:10.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:02:10.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:02:10.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:02:10.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:02:10.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:02:10.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:02:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:02:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.834086 -999.00  +15.70   8.75     76  +11.60 1 1 1 1 1     0    0 3.24 -41.87 ZNESW 8.4 8.8 191.2 12.5 16.7 -22.1 16.6 -21.8 16.4 -20.5 16.7 -21.3
2025-12-25T22:02:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:02:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:02:10.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.834086
2025-12-25T22:02:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:02:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:02:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:02:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:02:10.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:02:10.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:01:49', tmtdew=4.72, humidity=73.2, cloud=0.0, wind=12.09, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:01:49', seeing=1.2, atlas_timestamp='2025-12-25T20:01:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T19:59:00')
2025-12-25T22:02:10.879 [DEBUG] [Thread-19262] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:02:10.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-25T22:02:10.972 [DEBUG] [Thread-19265] [transport.py] [_log()] starting thread (client mode): 0xb6bf6f50
2025-12-25T22:02:10.972 [DEBUG] [Thread-19265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:02:10.987 [DEBUG] [Thread-19265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:02:10.987 [INFO] [Thread-19265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] client lang: <none>
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] server lang: <none>
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] kex follows: False
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] Compression: none
2025-12-25T22:02:10.995 [DEBUG] [Thread-19265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:02:11.057 [DEBUG] [Thread-19265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:02:11.058 [DEBUG] [Thread-19265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:02:11.059 [DEBUG] [Thread-19265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:02:11.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:02:11.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:02:11.114 [DEBUG] [Thread-19265] [transport.py] [_log()] userauth is OK
2025-12-25T22:02:11.114 [DEBUG] [Thread-19265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:02:11.114 [DEBUG] [Thread-19265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:02:11.114 [DEBUG] [Thread-19265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:02:11.114 [DEBUG] [Thread-19265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:02:11.132 [INFO] [Thread-19265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:02:11.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-25T22:02:11.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:02:11.960 [DEBUG] [Thread-19265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:02:11.960 [DEBUG] [Thread-19265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:02:12.008 [DEBUG] [Thread-19265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:02:12.008 [DEBUG] [Thread-19265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:02:12.018 [DEBUG] [Thread-19265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:02:12.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:02:12.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-25T22:02:12.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-25T22:02:12.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:02:12.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:02:12.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:02:12.055 [DEBUG] [Thread-19265] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:02:22.322 [DEBUG] [Thread-19267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:29.720 [DEBUG] [Thread-19268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:37.361 [DEBUG] [Thread-19269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:42.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:02:42.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:02:42.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-25T22:02:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 2, 21), 4.72, 73.22, 0.0, 11.79, 15.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:02:42.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:02:21
2025-12-25T22:02:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:02:43.021 [DEBUG] [Thread-19270] [transport.py] [_log()] starting thread (client mode): 0xb6bf73d0
2025-12-25T22:02:43.021 [DEBUG] [Thread-19270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:02:43.041 [DEBUG] [Thread-19270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:02:43.042 [INFO] [Thread-19270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] client lang: <none>
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] server lang: <none>
2025-12-25T22:02:43.045 [DEBUG] [Thread-19270] [transport.py] [_log()] kex follows: False
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] Compression: none
2025-12-25T22:02:43.046 [DEBUG] [Thread-19270] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:02:43.063 [DEBUG] [Thread-19270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:02:43.063 [DEBUG] [Thread-19270] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:02:43.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:02:43.064 [DEBUG] [Thread-19270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:02:43.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:02:43.066 [DEBUG] [Thread-19270] [transport.py] [_log()] userauth is OK
2025-12-25T22:02:43.066 [DEBUG] [Thread-19270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:02:43.066 [DEBUG] [Thread-19270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:02:43.066 [DEBUG] [Thread-19270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:02:43.067 [DEBUG] [Thread-19270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:02:43.088 [INFO] [Thread-19270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:02:43.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:02:43.730 [DEBUG] [Thread-19270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:02:43.730 [DEBUG] [Thread-19270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:02:43.731 [DEBUG] [Thread-19270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:02:43.771 [DEBUG] [Thread-19270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:02:43.771 [DEBUG] [Thread-19270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:02:43.775 [DEBUG] [Thread-19270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:02:43.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:02:43.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:02:43.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:02:43.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:02:43.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:02:43.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:02:43.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:02:43.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:02:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:02:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.834781 -999.00  +15.70   6.83     76  +11.50 1 1 1 1 1     0    0 2.98 -50.37 ZNESW 8.0 6.8 209.3 13.6 16.7 -22.0 16.6 -21.6 16.4 -20.3 16.7 -21.2
2025-12-25T22:02:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:02:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:02:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.834781
2025-12-25T22:02:43.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:02:43.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:02:43.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:02:43.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:02:43.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:02:43.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:02:21', tmtdew=4.72, humidity=73.22, cloud=0.0, wind=11.79, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:02:21', seeing=1.2, atlas_timestamp='2025-12-25T20:02:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T19:59:00')
2025-12-25T22:02:43.803 [DEBUG] [Thread-19270] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:02:43.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:02:43.897 [DEBUG] [Thread-19273] [transport.py] [_log()] starting thread (client mode): 0xb6b77cd0
2025-12-25T22:02:43.897 [DEBUG] [Thread-19273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:02:43.912 [DEBUG] [Thread-19273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:02:43.913 [INFO] [Thread-19273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:02:43.920 [DEBUG] [Thread-19273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:02:43.921 [DEBUG] [Thread-19273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] client lang: <none>
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] server lang: <none>
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] kex follows: False
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] Compression: none
2025-12-25T22:02:43.922 [DEBUG] [Thread-19273] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:02:43.978 [DEBUG] [Thread-19273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:02:43.979 [DEBUG] [Thread-19273] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:02:43.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:02:43.979 [DEBUG] [Thread-19273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:02:43.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:02:44.033 [DEBUG] [Thread-19273] [transport.py] [_log()] userauth is OK
2025-12-25T22:02:44.034 [DEBUG] [Thread-19273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:02:44.034 [DEBUG] [Thread-19273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:02:44.034 [DEBUG] [Thread-19273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:02:44.034 [DEBUG] [Thread-19273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:02:44.056 [INFO] [Thread-19273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:02:44.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-25T22:02:44.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:02:44.975 [DEBUG] [Thread-19273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:02:44.975 [DEBUG] [Thread-19273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:02:45.022 [DEBUG] [Thread-19273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:02:45.023 [DEBUG] [Thread-19273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:02:45.031 [DEBUG] [Thread-19273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:02:45.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:02:45.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:02:45.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-25T22:02:45.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:02:45.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:02:45.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:02:45.065 [DEBUG] [Thread-19273] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:02:52.395 [DEBUG] [Thread-19275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:53.958 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:02:53.959 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:07.438 [DEBUG] [Thread-19276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:15.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:03:15.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:03:15.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-25T22:03:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 2, 53), 4.74, 73.34, 0.0, 12.92, 15.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:03:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:02:53
2025-12-25T22:03:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:03:16.030 [DEBUG] [Thread-19277] [transport.py] [_log()] starting thread (client mode): 0xb6baa4d0
2025-12-25T22:03:16.030 [DEBUG] [Thread-19277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:03:16.050 [DEBUG] [Thread-19277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:03:16.050 [INFO] [Thread-19277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:03:16.053 [DEBUG] [Thread-19277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:03:16.053 [DEBUG] [Thread-19277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:03:16.053 [DEBUG] [Thread-19277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] client lang: <none>
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] server lang: <none>
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] kex follows: False
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] Compression: none
2025-12-25T22:03:16.054 [DEBUG] [Thread-19277] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:03:16.071 [DEBUG] [Thread-19277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:03:16.071 [DEBUG] [Thread-19277] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:03:16.072 [DEBUG] [Thread-19277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:03:16.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:03:16.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:03:16.074 [DEBUG] [Thread-19277] [transport.py] [_log()] userauth is OK
2025-12-25T22:03:16.074 [DEBUG] [Thread-19277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:03:16.074 [DEBUG] [Thread-19277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:03:16.074 [DEBUG] [Thread-19277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:03:16.074 [DEBUG] [Thread-19277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:03:16.098 [INFO] [Thread-19277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:03:16.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:03:16.730 [DEBUG] [Thread-19277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:03:16.730 [DEBUG] [Thread-19277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:03:16.731 [DEBUG] [Thread-19277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:03:16.771 [DEBUG] [Thread-19277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:03:16.772 [DEBUG] [Thread-19277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:03:16.775 [DEBUG] [Thread-19277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:03:16.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:03:16.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:03:16.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:03:16.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:03:16.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:03:16.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:03:16.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:03:16.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:03:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:03:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.835128 -999.00  +15.70   5.23     76  +11.50 1 1 1 1 1     0    0 2.98 -50.41 ZNESW 10.2 5.2 224.0 11.8 16.7 -21.9 16.6 -21.5 16.4 -20.2 16.7 -21.1
2025-12-25T22:03:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:03:16.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:03:16.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.835128
2025-12-25T22:03:16.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:03:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:03:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:03:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:03:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:03:16.804 [DEBUG] [Thread-19277] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:03:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:02:53', tmtdew=4.74, humidity=73.34, cloud=0.0, wind=12.92, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:02:53', seeing=1.08, atlas_timestamp='2025-12-25T20:02:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T19:59:00')
2025-12-25T22:03:16.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:03:16.897 [DEBUG] [Thread-19280] [transport.py] [_log()] starting thread (client mode): 0xb6ba91b0
2025-12-25T22:03:16.897 [DEBUG] [Thread-19280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:03:16.912 [DEBUG] [Thread-19280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:03:16.912 [INFO] [Thread-19280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:03:16.919 [DEBUG] [Thread-19280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] client lang: <none>
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] server lang: <none>
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] kex follows: False
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] Compression: none
2025-12-25T22:03:16.920 [DEBUG] [Thread-19280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:03:16.979 [DEBUG] [Thread-19280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:03:16.979 [DEBUG] [Thread-19280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:03:16.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:03:16.980 [DEBUG] [Thread-19280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:03:16.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:03:17.035 [DEBUG] [Thread-19280] [transport.py] [_log()] userauth is OK
2025-12-25T22:03:17.035 [DEBUG] [Thread-19280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:03:17.035 [DEBUG] [Thread-19280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:03:17.035 [DEBUG] [Thread-19280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:03:17.035 [DEBUG] [Thread-19280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:03:17.054 [INFO] [Thread-19280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:03:17.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:03:17.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:03:17.931 [DEBUG] [Thread-19280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:03:17.932 [DEBUG] [Thread-19280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:03:17.980 [DEBUG] [Thread-19280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:03:17.980 [DEBUG] [Thread-19280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:03:17.990 [DEBUG] [Thread-19280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:03:17.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:03:17.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-25T22:03:18.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:03:18.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:03:18.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:03:18.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:03:18.027 [DEBUG] [Thread-19280] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:03:22.472 [DEBUG] [Thread-19282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:29.777 [DEBUG] [Thread-19283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:37.523 [DEBUG] [Thread-19284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:48.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:03:48.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:03:48.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-25T22:03:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 3, 25), 4.75, 73.3, 0.0, 12.79, 15.54, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:03:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:03:25
2025-12-25T22:03:48.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:03:49.048 [DEBUG] [Thread-19285] [transport.py] [_log()] starting thread (client mode): 0xb95b34c0
2025-12-25T22:03:49.048 [DEBUG] [Thread-19285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:03:49.068 [DEBUG] [Thread-19285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:03:49.069 [INFO] [Thread-19285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] client lang: <none>
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] server lang: <none>
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] kex follows: False
2025-12-25T22:03:49.071 [DEBUG] [Thread-19285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:03:49.072 [DEBUG] [Thread-19285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:03:49.072 [DEBUG] [Thread-19285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:03:49.072 [DEBUG] [Thread-19285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:03:49.072 [DEBUG] [Thread-19285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:03:49.072 [DEBUG] [Thread-19285] [transport.py] [_log()] Compression: none
2025-12-25T22:03:49.072 [DEBUG] [Thread-19285] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:03:49.087 [DEBUG] [Thread-19285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:03:49.088 [DEBUG] [Thread-19285] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:03:49.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:03:49.089 [DEBUG] [Thread-19285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:03:49.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:03:49.091 [DEBUG] [Thread-19285] [transport.py] [_log()] userauth is OK
2025-12-25T22:03:49.091 [DEBUG] [Thread-19285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:03:49.091 [DEBUG] [Thread-19285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:03:49.091 [DEBUG] [Thread-19285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:03:49.091 [DEBUG] [Thread-19285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:03:49.107 [INFO] [Thread-19285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:03:49.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:03:49.775 [DEBUG] [Thread-19285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:03:49.775 [DEBUG] [Thread-19285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:03:49.776 [DEBUG] [Thread-19285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:03:49.816 [DEBUG] [Thread-19285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:03:49.816 [DEBUG] [Thread-19285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:03:49.819 [DEBUG] [Thread-19285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:03:49.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:03:49.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:03:49.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:03:49.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:03:49.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:03:49.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:03:49.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.835475 -999.00  +15.70   8.79     76  +11.50 1 1 1 1 1     0    0 3.08 -50.65 ZNESW 10.0 8.8 204.3 15.9 16.6 -21.9 16.6 -21.6 16.4 -20.4 16.7 -21.1
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.835475
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:03:49.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:03:25', tmtdew=4.75, humidity=73.3, cloud=0.0, wind=12.79, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:03:25', seeing=1.3, atlas_timestamp='2025-12-25T20:03:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T20:02:00')
2025-12-25T22:03:49.840 [DEBUG] [Thread-19285] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:03:49.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-25T22:03:49.924 [DEBUG] [Thread-19288] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T22:03:49.924 [DEBUG] [Thread-19288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:03:49.939 [DEBUG] [Thread-19288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:03:49.939 [INFO] [Thread-19288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] client lang: <none>
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] server lang: <none>
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] kex follows: False
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:03:49.947 [DEBUG] [Thread-19288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:03:49.948 [DEBUG] [Thread-19288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:03:49.948 [DEBUG] [Thread-19288] [transport.py] [_log()] Compression: none
2025-12-25T22:03:49.948 [DEBUG] [Thread-19288] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:03:50.007 [DEBUG] [Thread-19288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:03:50.007 [DEBUG] [Thread-19288] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:03:50.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:03:50.008 [DEBUG] [Thread-19288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:03:50.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:03:50.063 [DEBUG] [Thread-19288] [transport.py] [_log()] userauth is OK
2025-12-25T22:03:50.063 [DEBUG] [Thread-19288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:03:50.064 [DEBUG] [Thread-19288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:03:50.064 [DEBUG] [Thread-19288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:03:50.064 [DEBUG] [Thread-19288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:03:50.088 [INFO] [Thread-19288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:03:50.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:03:50.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:03:50.935 [DEBUG] [Thread-19288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:03:50.935 [DEBUG] [Thread-19288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:03:50.983 [DEBUG] [Thread-19288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:03:50.983 [DEBUG] [Thread-19288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:03:50.992 [DEBUG] [Thread-19288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:03:51.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:03: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-25T22:03:51.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-25T22:03:51.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:03:51.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:03:51.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:03:51.026 [DEBUG] [Thread-19288] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:03:52.554 [DEBUG] [Thread-19290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:54.160 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:03:54.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:07.603 [DEBUG] [Thread-19291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:21.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:04:21.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:04:21.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-25T22:04:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 3, 57), 4.76, 73.24, 0.0, 13.11, 15.56, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:04:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:03:57
2025-12-25T22:04:21.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:04:22.056 [DEBUG] [Thread-19292] [transport.py] [_log()] starting thread (client mode): 0xb6babd00
2025-12-25T22:04:22.056 [DEBUG] [Thread-19292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:04:22.076 [DEBUG] [Thread-19292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:04:22.076 [INFO] [Thread-19292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] client lang: <none>
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] server lang: <none>
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] kex follows: False
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] Compression: none
2025-12-25T22:04:22.080 [DEBUG] [Thread-19292] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:04:22.096 [DEBUG] [Thread-19292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:04:22.096 [DEBUG] [Thread-19292] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:04:22.096 [DEBUG] [Thread-19292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:04:22.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:04:22.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:04:22.097 [DEBUG] [Thread-19292] [transport.py] [_log()] userauth is OK
2025-12-25T22:04:22.097 [DEBUG] [Thread-19292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:04:22.098 [DEBUG] [Thread-19292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:04:22.098 [DEBUG] [Thread-19292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:04:22.098 [DEBUG] [Thread-19292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:04:22.108 [INFO] [Thread-19292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:04:22.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:04:22.633 [DEBUG] [Thread-19294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:22.745 [DEBUG] [Thread-19292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:04:22.745 [DEBUG] [Thread-19292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:04:22.746 [DEBUG] [Thread-19292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:04:22.786 [DEBUG] [Thread-19292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:04:22.786 [DEBUG] [Thread-19292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:04:22.790 [DEBUG] [Thread-19292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:04:22.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:04:22.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:04:22.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:04:22.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:04:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:04:22.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:04:22.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:04:22.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:04:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:04:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.835822 -999.00  +15.70   5.18     76  +11.50 1 1 1 1 1     0    0 3.14 -42.91 ZNESW 4.6 5.2 215.7 10.9 16.6 -22.0 16.6 -21.6 16.3 -20.3 16.6 -21.3
2025-12-25T22:04:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:04:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:04:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.835822
2025-12-25T22:04:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:04:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:04:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:04:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:04:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:04:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:03:57', tmtdew=4.76, humidity=73.24, cloud=0.0, wind=13.11, 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-25T22:03:58', seeing=1.13, atlas_timestamp='2025-12-25T20:03:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T20:02:00')
2025-12-25T22:04:22.817 [DEBUG] [Thread-19292] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:04:22.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-25T22:04:22.911 [DEBUG] [Thread-19296] [transport.py] [_log()] starting thread (client mode): 0xb6b76860
2025-12-25T22:04:22.911 [DEBUG] [Thread-19296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:04:22.925 [DEBUG] [Thread-19296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:04:22.926 [INFO] [Thread-19296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:04:22.933 [DEBUG] [Thread-19296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:04:22.933 [DEBUG] [Thread-19296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:04:22.934 [DEBUG] [Thread-19296] [transport.py] [_log()] client lang: <none>
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] server lang: <none>
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] kex follows: False
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] Compression: none
2025-12-25T22:04:22.935 [DEBUG] [Thread-19296] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:04:22.991 [DEBUG] [Thread-19296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:04:22.992 [DEBUG] [Thread-19296] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:04:22.992 [DEBUG] [Thread-19296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:04:22.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:04:22.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:04:23.048 [DEBUG] [Thread-19296] [transport.py] [_log()] userauth is OK
2025-12-25T22:04:23.048 [DEBUG] [Thread-19296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:04:23.048 [DEBUG] [Thread-19296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:04:23.048 [DEBUG] [Thread-19296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:04:23.049 [DEBUG] [Thread-19296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:04:23.068 [INFO] [Thread-19296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:04:23.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-25T22:04:23.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:04:23.908 [DEBUG] [Thread-19296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:04:23.908 [DEBUG] [Thread-19296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:04:23.956 [DEBUG] [Thread-19296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:04:23.957 [DEBUG] [Thread-19296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:04:23.966 [DEBUG] [Thread-19296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:04:23.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:04:23.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-25T22:04:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:04:23.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:04:23.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:04:23.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:04:24.002 [DEBUG] [Thread-19296] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:04:29.856 [DEBUG] [Thread-19298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:37.669 [DEBUG] [Thread-19299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:52.733 [DEBUG] [Thread-19300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:54.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:04:54.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:04:54.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-25T22:04:54.369 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:54.370 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:04:54.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 4, 29), 4.75, 73.29, 0.0, 15.42, 15.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:04:54.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:04:29
2025-12-25T22:04:54.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:04:54.995 [DEBUG] [Thread-19301] [transport.py] [_log()] starting thread (client mode): 0xb6b7e710
2025-12-25T22:04:54.995 [DEBUG] [Thread-19301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:04:55.013 [DEBUG] [Thread-19301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:04:55.013 [INFO] [Thread-19301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:04:55.016 [DEBUG] [Thread-19301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:04:55.016 [DEBUG] [Thread-19301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:04:55.016 [DEBUG] [Thread-19301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:04:55.016 [DEBUG] [Thread-19301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:55.016 [DEBUG] [Thread-19301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] client lang: <none>
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] server lang: <none>
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] kex follows: False
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] Compression: none
2025-12-25T22:04:55.017 [DEBUG] [Thread-19301] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:04:55.036 [DEBUG] [Thread-19301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:04:55.037 [DEBUG] [Thread-19301] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:04:55.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:04:55.038 [DEBUG] [Thread-19301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:04:55.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:04:55.040 [DEBUG] [Thread-19301] [transport.py] [_log()] userauth is OK
2025-12-25T22:04:55.040 [DEBUG] [Thread-19301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:04:55.041 [DEBUG] [Thread-19301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:04:55.041 [DEBUG] [Thread-19301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:04:55.041 [DEBUG] [Thread-19301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:04:55.065 [INFO] [Thread-19301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:04:55.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:04:55.736 [DEBUG] [Thread-19301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:04:55.736 [DEBUG] [Thread-19301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:04:55.736 [DEBUG] [Thread-19301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:04:55.777 [DEBUG] [Thread-19301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:04:55.777 [DEBUG] [Thread-19301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:04:55.779 [DEBUG] [Thread-19301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:04:55.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:04:55.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:04:55.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:04:55.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:04:55.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:04:55.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:04:55.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.836170 -999.00  +15.70   6.91     75  +11.50 1 1 1 1 1     0    0 3.25 -43.18 ZNESW 4.8 6.9 216.1 11.0 16.6 -21.9 16.6 -21.8 16.4 -20.2 16.7 -21.1
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.836170
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:04:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:04:29', tmtdew=4.75, humidity=73.29, cloud=0.0, wind=15.42, 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-25T22:04:30', seeing=1.26, atlas_timestamp='2025-12-25T20:04:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T20:02:00')
2025-12-25T22:04:55.797 [DEBUG] [Thread-19301] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:04:55.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-25T22:04:55.881 [DEBUG] [Thread-19304] [transport.py] [_log()] starting thread (client mode): 0xb6b7f6d0
2025-12-25T22:04:55.881 [DEBUG] [Thread-19304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:04:55.896 [DEBUG] [Thread-19304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:04:55.896 [INFO] [Thread-19304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] client lang: <none>
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] server lang: <none>
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] kex follows: False
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] Compression: none
2025-12-25T22:04:55.903 [DEBUG] [Thread-19304] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:04:55.961 [DEBUG] [Thread-19304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:04:55.961 [DEBUG] [Thread-19304] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:04:55.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:04:55.962 [DEBUG] [Thread-19304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:04:55.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:04:56.019 [DEBUG] [Thread-19304] [transport.py] [_log()] userauth is OK
2025-12-25T22:04:56.019 [DEBUG] [Thread-19304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:04:56.019 [DEBUG] [Thread-19304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:04:56.019 [DEBUG] [Thread-19304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:04:56.019 [DEBUG] [Thread-19304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:04:56.033 [INFO] [Thread-19304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:04:56.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-25T22:04:56.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:04:56.885 [DEBUG] [Thread-19304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:04:56.885 [DEBUG] [Thread-19304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:04:56.932 [DEBUG] [Thread-19304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:04:56.932 [DEBUG] [Thread-19304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:04:56.940 [DEBUG] [Thread-19304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:04:56.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:04:56.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-25T22:04:56.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-25T22:04:56.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:04:56.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:04:56.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:04:56.972 [DEBUG] [Thread-19304] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:05:07.768 [DEBUG] [Thread-19306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:22.816 [DEBUG] [Thread-19307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:26.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:05:26.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:05:26.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-25T22:05:27.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 5, 1), 4.73, 73.4, 0.0, 15.65, 15.52, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:05:27.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:05:01
2025-12-25T22:05:27.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:05:27.972 [DEBUG] [Thread-19308] [transport.py] [_log()] starting thread (client mode): 0xb6bf5b40
2025-12-25T22:05:27.972 [DEBUG] [Thread-19308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:05:27.991 [DEBUG] [Thread-19308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:05:27.991 [INFO] [Thread-19308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] client lang: <none>
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] server lang: <none>
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] kex follows: False
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:05:27.995 [DEBUG] [Thread-19308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:05:27.996 [DEBUG] [Thread-19308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:05:27.996 [DEBUG] [Thread-19308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:05:27.996 [DEBUG] [Thread-19308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:05:27.996 [DEBUG] [Thread-19308] [transport.py] [_log()] Compression: none
2025-12-25T22:05:27.996 [DEBUG] [Thread-19308] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:05:28.011 [DEBUG] [Thread-19308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:05:28.012 [DEBUG] [Thread-19308] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:05:28.013 [DEBUG] [Thread-19308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:05:28.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:05:28.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:05:28.015 [DEBUG] [Thread-19308] [transport.py] [_log()] userauth is OK
2025-12-25T22:05:28.015 [DEBUG] [Thread-19308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:05:28.015 [DEBUG] [Thread-19308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:05:28.015 [DEBUG] [Thread-19308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:05:28.015 [DEBUG] [Thread-19308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:05:28.043 [INFO] [Thread-19308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:05:28.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:05:28.677 [DEBUG] [Thread-19308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:05:28.677 [DEBUG] [Thread-19308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:05:28.678 [DEBUG] [Thread-19308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:05:28.718 [DEBUG] [Thread-19308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:05:28.718 [DEBUG] [Thread-19308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:05:28.721 [DEBUG] [Thread-19308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:05:28.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:05:28.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:05:28.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:05:28.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:05:28.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:05:28.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:05:28.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:05:28.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:05:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:05:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.836516 -999.00  +15.70   5.55     75  +11.50 1 1 1 1 1     0    0 3.02 -47.60 ZNESW 5.1 5.5 199.7 11.5 16.6 -21.9 16.6 -21.5 16.4 -20.1 16.6 -21.1
2025-12-25T22:05:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:05:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:05:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.836516
2025-12-25T22:05:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:05:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:05:28.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:05:28.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:05:28.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:05:28.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:05:01', tmtdew=4.73, humidity=73.4, cloud=0.0, wind=15.65, 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-25T22:05:02', seeing=1.4, atlas_timestamp='2025-12-25T20:04:34.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T20:02:00')
2025-12-25T22:05:28.747 [DEBUG] [Thread-19308] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:05:28.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:05:28.838 [DEBUG] [Thread-19311] [transport.py] [_log()] starting thread (client mode): 0xb6bf55d0
2025-12-25T22:05:28.838 [DEBUG] [Thread-19311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:05:28.852 [DEBUG] [Thread-19311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:05:28.853 [INFO] [Thread-19311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:05:28.860 [DEBUG] [Thread-19311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:05:28.860 [DEBUG] [Thread-19311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:05:28.860 [DEBUG] [Thread-19311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:05:28.860 [DEBUG] [Thread-19311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] client lang: <none>
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] server lang: <none>
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] kex follows: False
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] Compression: none
2025-12-25T22:05:28.861 [DEBUG] [Thread-19311] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:05:28.920 [DEBUG] [Thread-19311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:05:28.920 [DEBUG] [Thread-19311] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:05:28.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:05:28.921 [DEBUG] [Thread-19311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:05:28.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:05:28.976 [DEBUG] [Thread-19311] [transport.py] [_log()] userauth is OK
2025-12-25T22:05:28.977 [DEBUG] [Thread-19311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:05:28.977 [DEBUG] [Thread-19311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:05:28.977 [DEBUG] [Thread-19311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:05:28.977 [DEBUG] [Thread-19311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:05:28.996 [INFO] [Thread-19311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:05:28.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-25T22:05:28.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:05:29.819 [DEBUG] [Thread-19311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:05:29.819 [DEBUG] [Thread-19311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:05:29.866 [DEBUG] [Thread-19311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:05:29.866 [DEBUG] [Thread-19311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:05:29.874 [DEBUG] [Thread-19311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:05:29.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:05:29.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-25T22:05:29.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-25T22:05:29.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:05:29.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:05:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:05:29.909 [DEBUG] [Thread-19311] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:05:29.912 [DEBUG] [Thread-19313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:37.852 [DEBUG] [Thread-19314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:52.904 [DEBUG] [Thread-19315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:54.599 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:54.600 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:05:59.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:05:59.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:05:59.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:06:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 5, 33), 4.71, 73.45, 0.0, 11.33, 15.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:06:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:05:33
2025-12-25T22:06:00.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:06:00.855 [DEBUG] [Thread-19316] [transport.py] [_log()] starting thread (client mode): 0xb6ba8460
2025-12-25T22:06:00.855 [DEBUG] [Thread-19316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:06:00.875 [DEBUG] [Thread-19316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:06:00.875 [INFO] [Thread-19316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] client lang: <none>
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] server lang: <none>
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] kex follows: False
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:06:00.878 [DEBUG] [Thread-19316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:06:00.879 [DEBUG] [Thread-19316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:06:00.879 [DEBUG] [Thread-19316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:06:00.879 [DEBUG] [Thread-19316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:06:00.879 [DEBUG] [Thread-19316] [transport.py] [_log()] Compression: none
2025-12-25T22:06:00.879 [DEBUG] [Thread-19316] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:06:00.895 [DEBUG] [Thread-19316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:06:00.896 [DEBUG] [Thread-19316] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:06:00.896 [DEBUG] [Thread-19316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:06:00.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:06:00.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:06:00.941 [DEBUG] [Thread-19316] [transport.py] [_log()] userauth is OK
2025-12-25T22:06:00.941 [DEBUG] [Thread-19316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:06:00.941 [DEBUG] [Thread-19316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:06:00.941 [DEBUG] [Thread-19316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:06:00.942 [DEBUG] [Thread-19316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:06:00.963 [INFO] [Thread-19316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:06:00.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:06:01.620 [DEBUG] [Thread-19316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:06:01.620 [DEBUG] [Thread-19316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:06:01.621 [DEBUG] [Thread-19316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:06:01.661 [DEBUG] [Thread-19316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:06:01.661 [DEBUG] [Thread-19316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:06:01.665 [DEBUG] [Thread-19316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:06:01.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:06:01.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:06:01.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:06:01.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:06:01.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:06:01.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:06:01.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:06:01.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:06:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:06:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.837211 -999.00  +15.70  13.36     76  +11.50 1 1 1 1 1     0    0 3.10 -41.29 ZNESW 12.1 13.4 198.6 15.2 16.6 -22.1 16.6 -21.9 16.4 -20.4 16.6 -21.1
2025-12-25T22:06:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:06:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:06:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.837211
2025-12-25T22:06:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:06:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:06:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:06:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:06:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:06:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:05:33', tmtdew=4.71, humidity=73.45, cloud=0.0, wind=11.33, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:05:34', seeing=1.23, atlas_timestamp='2025-12-25T20:05:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T20:02:00')
2025-12-25T22:06:01.692 [DEBUG] [Thread-19316] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:06:01.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-25T22:06:01.789 [DEBUG] [Thread-19319] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T22:06:01.789 [DEBUG] [Thread-19319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:06:01.804 [DEBUG] [Thread-19319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:06:01.805 [INFO] [Thread-19319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:01.814 [DEBUG] [Thread-19319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] client lang: <none>
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] server lang: <none>
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] kex follows: False
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] Compression: none
2025-12-25T22:06:01.815 [DEBUG] [Thread-19319] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:06:01.874 [DEBUG] [Thread-19319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:06:01.875 [DEBUG] [Thread-19319] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:06:01.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:06:01.876 [DEBUG] [Thread-19319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:06:01.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:06:01.939 [DEBUG] [Thread-19319] [transport.py] [_log()] userauth is OK
2025-12-25T22:06:01.940 [DEBUG] [Thread-19319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:06:01.940 [DEBUG] [Thread-19319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:06:01.940 [DEBUG] [Thread-19319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:06:01.940 [DEBUG] [Thread-19319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:06:01.964 [INFO] [Thread-19319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:06:01.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:06:01.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:06:02.811 [DEBUG] [Thread-19319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:06:02.811 [DEBUG] [Thread-19319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:06:02.859 [DEBUG] [Thread-19319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:06:02.860 [DEBUG] [Thread-19319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:06:02.869 [DEBUG] [Thread-19319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:06:02.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:06:02.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-25T22:06:02.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:06:02.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:06:02.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:06:02.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:06:02.907 [DEBUG] [Thread-19319] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:06:07.937 [DEBUG] [Thread-19321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:22.983 [DEBUG] [Thread-19322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:29.981 [DEBUG] [Thread-19323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:06:32.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:06:32.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:06:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 6, 5), 4.7, 73.52, 0.0, 10.78, 15.49, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:06:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:06:05
2025-12-25T22:06:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:06:33.882 [DEBUG] [Thread-19324] [transport.py] [_log()] starting thread (client mode): 0xb6bf7430
2025-12-25T22:06:33.882 [DEBUG] [Thread-19324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:06:33.902 [DEBUG] [Thread-19324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:06:33.902 [INFO] [Thread-19324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] client lang: <none>
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] server lang: <none>
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] kex follows: False
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:06:33.905 [DEBUG] [Thread-19324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:06:33.906 [DEBUG] [Thread-19324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:06:33.906 [DEBUG] [Thread-19324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:06:33.906 [DEBUG] [Thread-19324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:06:33.906 [DEBUG] [Thread-19324] [transport.py] [_log()] Compression: none
2025-12-25T22:06:33.906 [DEBUG] [Thread-19324] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:06:33.926 [DEBUG] [Thread-19324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:06:33.926 [DEBUG] [Thread-19324] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:06:33.927 [DEBUG] [Thread-19324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:06:33.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:06:33.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:06:33.929 [DEBUG] [Thread-19324] [transport.py] [_log()] userauth is OK
2025-12-25T22:06:33.929 [DEBUG] [Thread-19324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:06:33.929 [DEBUG] [Thread-19324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:06:33.929 [DEBUG] [Thread-19324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:06:33.929 [DEBUG] [Thread-19324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:06:33.944 [INFO] [Thread-19324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:06:33.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:06:34.566 [DEBUG] [Thread-19324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:06:34.566 [DEBUG] [Thread-19324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:06:34.566 [DEBUG] [Thread-19324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:06:34.607 [DEBUG] [Thread-19324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:06:34.607 [DEBUG] [Thread-19324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:06:34.611 [DEBUG] [Thread-19324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:06:34.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:06:34.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:06:34.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:06:34.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:06:34.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:06:34.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:06:34.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:06:34.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:06:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:06:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.837558 -999.00  +15.70   6.85     76  +11.50 1 1 1 1 1     0    0 3.25 -40.80 ZNESW 6.8 6.8 224.3 13.0 16.6 -21.9 16.6 -21.6 16.4 -20.3 16.6 -21.3
2025-12-25T22:06:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:06:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:06:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.837558
2025-12-25T22:06:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:06:34.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:06:34.637 [DEBUG] [Thread-19324] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:06:34.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:06:34.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:06:34.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:06:34.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:06:05', tmtdew=4.7, humidity=73.52, cloud=0.0, wind=10.78, 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-25T22:06:06', seeing=1.23, atlas_timestamp='2025-12-25T20:06:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.053749999999999076, 0.11625000000000085, 0.11524999999999963, 0.07549999999999812, 0.046499999999999986, 0.14124999999999943, 0.09549999999999947, 0.17324999999999946, 0.07149999999999856, 0.07750000000000057, 0.12875000000000014, 0.05299999999999905, 0.12599999999999945, 0.09575000000000067, 0.08099999999999952, 0.10699999999999932, 0.06925000000000026, 0.1095000000000006, 0.08699999999999974, 0.06974999999999909, 0.10999999999999943, 0.14674999999999905, 0.13125000000000142, 0.10074999999999967, 0.06349999999999945, 0.11750000000000149, 0.16025000000000134, 0.14700000000000024, 0.14300000000000068, 0.11500000000000199, 0.1720000000000006, 0.15300000000000047, 0.14124999999999943], zp_timestamp='2025-12-25T20:02:00')
2025-12-25T22:06:34.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-25T22:06:34.724 [DEBUG] [Thread-19327] [transport.py] [_log()] starting thread (client mode): 0xb6b232e0
2025-12-25T22:06:34.724 [DEBUG] [Thread-19327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:06:34.738 [DEBUG] [Thread-19327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:06:34.738 [INFO] [Thread-19327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] client lang: <none>
2025-12-25T22:06:34.747 [DEBUG] [Thread-19327] [transport.py] [_log()] server lang: <none>
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] kex follows: False
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] Compression: none
2025-12-25T22:06:34.748 [DEBUG] [Thread-19327] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:06:34.805 [DEBUG] [Thread-19327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:06:34.805 [DEBUG] [Thread-19327] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:06:34.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:06:34.806 [DEBUG] [Thread-19327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:06:34.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:06:34.861 [DEBUG] [Thread-19327] [transport.py] [_log()] userauth is OK
2025-12-25T22:06:34.861 [DEBUG] [Thread-19327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:06:34.861 [DEBUG] [Thread-19327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:06:34.861 [DEBUG] [Thread-19327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:06:34.861 [DEBUG] [Thread-19327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:06:34.880 [INFO] [Thread-19327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:06:34.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-25T22:06:34.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:06:35.688 [DEBUG] [Thread-19327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:06:35.689 [DEBUG] [Thread-19327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:06:35.737 [DEBUG] [Thread-19327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:06:35.738 [DEBUG] [Thread-19327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:06:35.746 [DEBUG] [Thread-19327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:06:35.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:06:35.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-25T22:06:35.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:06:35.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:06:35.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:06:35.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:06:35.782 [DEBUG] [Thread-19327] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:06:38.018 [DEBUG] [Thread-19329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:53.062 [DEBUG] [Thread-19330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:54.800 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:54.801 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:06:55.611 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:07:05.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:07:05.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-25T22:07:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 6, 37), 4.65, 73.55, 0.0, 14.72, 15.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:07:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:06:37
2025-12-25T22:07:06.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:07:06.774 [DEBUG] [Thread-19331] [transport.py] [_log()] starting thread (client mode): 0xb6ba8190
2025-12-25T22:07:06.774 [DEBUG] [Thread-19331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:07:06.795 [DEBUG] [Thread-19331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:07:06.796 [INFO] [Thread-19331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:06.799 [DEBUG] [Thread-19331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] client lang: <none>
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] server lang: <none>
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] kex follows: False
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] Compression: none
2025-12-25T22:07:06.800 [DEBUG] [Thread-19331] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:07:06.818 [DEBUG] [Thread-19331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:07:06.818 [DEBUG] [Thread-19331] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:07:06.819 [DEBUG] [Thread-19331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:07:06.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:07:06.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:07:06.821 [DEBUG] [Thread-19331] [transport.py] [_log()] userauth is OK
2025-12-25T22:07:06.821 [DEBUG] [Thread-19331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:07:06.821 [DEBUG] [Thread-19331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:07:06.821 [DEBUG] [Thread-19331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:07:06.821 [DEBUG] [Thread-19331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:07:06.846 [INFO] [Thread-19331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:07:06.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:07:07.485 [DEBUG] [Thread-19331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:07:07.486 [DEBUG] [Thread-19331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:07:07.487 [DEBUG] [Thread-19331] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:07:07.526 [DEBUG] [Thread-19331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:07:07.526 [DEBUG] [Thread-19331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:07:07.529 [DEBUG] [Thread-19331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:07:07.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:07:07.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:07:07.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:07:07.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:07:07.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:07:07.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:07:07.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:07:07.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:07:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:07:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.837906 -999.00  +15.70   8.85     76  +11.50 1 1 1 1 1     0    0 3.26 -38.14 ZNESW 10.9 8.8 191.8 9.5 16.6 -22.1 16.5 -21.6 16.4 -20.3 16.6 -21.3
2025-12-25T22:07:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:07:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:07:07.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.837906
2025-12-25T22:07:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:07:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:07:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:07:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:07:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:07:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:06:37', tmtdew=4.65, humidity=73.55, cloud=0.0, wind=14.72, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:06:38', seeing=1.16, atlas_timestamp='2025-12-25T20:06:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:05:00')
2025-12-25T22:07:07.554 [DEBUG] [Thread-19331] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:07:07.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-25T22:07:07.639 [DEBUG] [Thread-19334] [transport.py] [_log()] starting thread (client mode): 0xb6bf79d0
2025-12-25T22:07:07.639 [DEBUG] [Thread-19334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:07:07.655 [DEBUG] [Thread-19334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:07:07.655 [INFO] [Thread-19334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] client lang: <none>
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] server lang: <none>
2025-12-25T22:07:07.663 [DEBUG] [Thread-19334] [transport.py] [_log()] kex follows: False
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] Compression: none
2025-12-25T22:07:07.664 [DEBUG] [Thread-19334] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:07:07.722 [DEBUG] [Thread-19334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:07:07.723 [DEBUG] [Thread-19334] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:07:07.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:07:07.724 [DEBUG] [Thread-19334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:07:07.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:07:07.781 [DEBUG] [Thread-19334] [transport.py] [_log()] userauth is OK
2025-12-25T22:07:07.781 [DEBUG] [Thread-19334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:07:07.782 [DEBUG] [Thread-19334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:07:07.782 [DEBUG] [Thread-19334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:07:07.782 [DEBUG] [Thread-19334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:07:07.801 [INFO] [Thread-19334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:07:07.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-25T22:07:07.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:07:08.093 [DEBUG] [Thread-19336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:08.667 [DEBUG] [Thread-19334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:07:08.668 [DEBUG] [Thread-19334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:07:08.717 [DEBUG] [Thread-19334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:07:08.717 [DEBUG] [Thread-19334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:07:08.727 [DEBUG] [Thread-19334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:07:08.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:07:08.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-25T22:07:08.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:07:08.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:07:08.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:07:08.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:07:08.764 [DEBUG] [Thread-19334] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:07:23.151 [DEBUG] [Thread-19337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:30.043 [DEBUG] [Thread-19338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:38.180 [DEBUG] [Thread-19339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:38.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:07:38.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:07:38.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-25T22:07:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 7, 10), 4.64, 73.59, 0.0, 14.79, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:07:39.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:07:10
2025-12-25T22:07:39.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:07:39.739 [DEBUG] [Thread-19340] [transport.py] [_log()] starting thread (client mode): 0xb6b028f0
2025-12-25T22:07:39.739 [DEBUG] [Thread-19340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:07:39.759 [DEBUG] [Thread-19340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:07:39.759 [INFO] [Thread-19340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:07:39.762 [DEBUG] [Thread-19340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:07:39.762 [DEBUG] [Thread-19340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:07:39.762 [DEBUG] [Thread-19340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:07:39.762 [DEBUG] [Thread-19340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:39.762 [DEBUG] [Thread-19340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:39.762 [DEBUG] [Thread-19340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] client lang: <none>
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] server lang: <none>
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] kex follows: False
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] Compression: none
2025-12-25T22:07:39.763 [DEBUG] [Thread-19340] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:07:39.778 [DEBUG] [Thread-19340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:07:39.778 [DEBUG] [Thread-19340] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:07:39.778 [DEBUG] [Thread-19340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:07:39.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:07:39.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:07:39.780 [DEBUG] [Thread-19340] [transport.py] [_log()] userauth is OK
2025-12-25T22:07:39.780 [DEBUG] [Thread-19340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:07:39.780 [DEBUG] [Thread-19340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:07:39.781 [DEBUG] [Thread-19340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:07:39.781 [DEBUG] [Thread-19340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:07:39.804 [INFO] [Thread-19340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:07:39.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:07:40.437 [DEBUG] [Thread-19340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:07:40.437 [DEBUG] [Thread-19340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:07:40.438 [DEBUG] [Thread-19340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:07:40.478 [DEBUG] [Thread-19340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:07:40.478 [DEBUG] [Thread-19340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:07:40.482 [DEBUG] [Thread-19340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:07:40.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:07:40.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:07:40.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:07:40.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:07:40.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:07:40.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:07:40.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:07:40.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:07:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:07:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.838253 -999.00  +15.60   7.91     76  +11.50 1 1 1 1 1     0    0 3.29 -36.21 ZNESW 5.6 7.9 207.9 16.0 16.6 -22.0 16.5 -21.8 16.3 -20.2 16.6 -21.1
2025-12-25T22:07:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:07:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:07:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.838253
2025-12-25T22:07:40.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:07:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:07:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:07:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:07:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:07:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:07:10', tmtdew=4.64, humidity=73.59, cloud=0.0, wind=14.79, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:07:10', seeing=1.16, atlas_timestamp='2025-12-25T20:07:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:05:00')
2025-12-25T22:07:40.510 [DEBUG] [Thread-19340] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:07:40.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-25T22:07:40.603 [DEBUG] [Thread-19343] [transport.py] [_log()] starting thread (client mode): 0xb6b77af0
2025-12-25T22:07:40.603 [DEBUG] [Thread-19343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:07:40.618 [DEBUG] [Thread-19343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:07:40.618 [INFO] [Thread-19343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] client lang: <none>
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] server lang: <none>
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] kex follows: False
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:07:40.626 [DEBUG] [Thread-19343] [transport.py] [_log()] Compression: none
2025-12-25T22:07:40.627 [DEBUG] [Thread-19343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:07:40.685 [DEBUG] [Thread-19343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:07:40.686 [DEBUG] [Thread-19343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:07:40.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:07:40.687 [DEBUG] [Thread-19343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:07:40.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:07:40.741 [DEBUG] [Thread-19343] [transport.py] [_log()] userauth is OK
2025-12-25T22:07:40.742 [DEBUG] [Thread-19343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:07:40.742 [DEBUG] [Thread-19343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:07:40.742 [DEBUG] [Thread-19343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:07:40.742 [DEBUG] [Thread-19343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:07:40.761 [INFO] [Thread-19343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:07:40.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-25T22:07:40.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:07:41.614 [DEBUG] [Thread-19343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:07:41.614 [DEBUG] [Thread-19343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:07:41.662 [DEBUG] [Thread-19343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:07:41.663 [DEBUG] [Thread-19343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:07:41.672 [DEBUG] [Thread-19343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:07:41.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:07:41.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:07:41.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:07:41.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:07:41.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:07:41.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:07:41.714 [DEBUG] [Thread-19343] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:07:53.219 [DEBUG] [Thread-19345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:55.001 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:07:55.002 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:08.280 [DEBUG] [Thread-19346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:11.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:08:11.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:08:11.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:08:12.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 7, 42), 4.62, 74.15, 0.0, 14.63, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:08:12.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:07:42
2025-12-25T22:08:12.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:08:12.749 [DEBUG] [Thread-19347] [transport.py] [_log()] starting thread (client mode): 0xb6b7fc70
2025-12-25T22:08:12.749 [DEBUG] [Thread-19347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:08:12.770 [DEBUG] [Thread-19347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:08:12.770 [INFO] [Thread-19347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] client lang: <none>
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] server lang: <none>
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] kex follows: False
2025-12-25T22:08:12.773 [DEBUG] [Thread-19347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:08:12.774 [DEBUG] [Thread-19347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:08:12.774 [DEBUG] [Thread-19347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:08:12.774 [DEBUG] [Thread-19347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:08:12.774 [DEBUG] [Thread-19347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:08:12.774 [DEBUG] [Thread-19347] [transport.py] [_log()] Compression: none
2025-12-25T22:08:12.774 [DEBUG] [Thread-19347] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:08:12.789 [DEBUG] [Thread-19347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:08:12.789 [DEBUG] [Thread-19347] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:08:12.789 [DEBUG] [Thread-19347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:08:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:08:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:08:12.790 [DEBUG] [Thread-19347] [transport.py] [_log()] userauth is OK
2025-12-25T22:08:12.790 [DEBUG] [Thread-19347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:08:12.790 [DEBUG] [Thread-19347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:08:12.790 [DEBUG] [Thread-19347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:08:12.790 [DEBUG] [Thread-19347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:08:12.799 [INFO] [Thread-19347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:08:12.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:08:13.436 [DEBUG] [Thread-19347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:08:13.436 [DEBUG] [Thread-19347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:08:13.436 [DEBUG] [Thread-19347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:08:13.476 [DEBUG] [Thread-19347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:08:13.476 [DEBUG] [Thread-19347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:08:13.479 [DEBUG] [Thread-19347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:08:13.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:08:13.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:08:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:08:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:08:13.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:08:13.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:08:13.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.838600 -999.00  +15.60   7.96     76  +11.60 1 1 1 1 1     0    0 3.22 -38.49 ZNESW 5.4 8.0 209.4 14.0 16.6 -22.2 16.4 -21.6 16.4 -20.4 16.6 -21.3
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.838600
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:08:13.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:07:42', tmtdew=4.62, humidity=74.15, cloud=0.0, wind=14.63, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:07:42', seeing=1.22, atlas_timestamp='2025-12-25T20:07:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:05:00')
2025-12-25T22:08:13.497 [DEBUG] [Thread-19347] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:08:13.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:08:13.581 [DEBUG] [Thread-19350] [transport.py] [_log()] starting thread (client mode): 0xb6b20790
2025-12-25T22:08:13.581 [DEBUG] [Thread-19350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:08:13.596 [DEBUG] [Thread-19350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:08:13.596 [INFO] [Thread-19350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] client lang: <none>
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] server lang: <none>
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] kex follows: False
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] Compression: none
2025-12-25T22:08:13.605 [DEBUG] [Thread-19350] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:08:13.659 [DEBUG] [Thread-19350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:08:13.660 [DEBUG] [Thread-19350] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:08:13.660 [DEBUG] [Thread-19350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:08:13.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:08:13.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:08:13.727 [DEBUG] [Thread-19350] [transport.py] [_log()] userauth is OK
2025-12-25T22:08:13.727 [DEBUG] [Thread-19350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:08:13.727 [DEBUG] [Thread-19350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:08:13.727 [DEBUG] [Thread-19350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:08:13.727 [DEBUG] [Thread-19350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:08:13.741 [INFO] [Thread-19350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:08:13.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-25T22:08:13.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:08:14.581 [DEBUG] [Thread-19350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:08:14.581 [DEBUG] [Thread-19350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:08:14.629 [DEBUG] [Thread-19350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:08:14.629 [DEBUG] [Thread-19350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:08:14.638 [DEBUG] [Thread-19350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:08:14.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:08:14.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:08:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:08:14.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:08:14.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:08:14.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:08:14.678 [DEBUG] [Thread-19350] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:08:23.313 [DEBUG] [Thread-19352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:30.103 [DEBUG] [Thread-19353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:38.365 [DEBUG] [Thread-19354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:08:44.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:08:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:08:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 8, 14), 4.62, 74.19, 0.0, 14.26, 15.44, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:08:45.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:08:14
2025-12-25T22:08:45.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:08:45.670 [DEBUG] [Thread-19355] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T22:08:45.670 [DEBUG] [Thread-19355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:08:45.690 [DEBUG] [Thread-19355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:08:45.690 [INFO] [Thread-19355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] client lang: <none>
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] server lang: <none>
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] kex follows: False
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] Compression: none
2025-12-25T22:08:45.691 [DEBUG] [Thread-19355] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:08:45.699 [DEBUG] [Thread-19355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:08:45.699 [DEBUG] [Thread-19355] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:08:45.700 [DEBUG] [Thread-19355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:08:45.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:08:45.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:08:45.701 [DEBUG] [Thread-19355] [transport.py] [_log()] userauth is OK
2025-12-25T22:08:45.701 [DEBUG] [Thread-19355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:08:45.701 [DEBUG] [Thread-19355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:08:45.701 [DEBUG] [Thread-19355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:08:45.701 [DEBUG] [Thread-19355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:08:45.720 [INFO] [Thread-19355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:08:45.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:08:46.373 [DEBUG] [Thread-19355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:08:46.373 [DEBUG] [Thread-19355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:08:46.374 [DEBUG] [Thread-19355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:08:46.414 [DEBUG] [Thread-19355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:08:46.414 [DEBUG] [Thread-19355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:08:46.417 [DEBUG] [Thread-19355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:08:46.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:08:46.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:08:46.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:08:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:08:46.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:08:46.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:08:46.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:08:46.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:08:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:08:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.839295 -999.00  +15.60   9.29     77  +11.60 1 1 1 1 1     0    0 3.20 -42.84 ZNESW 12.0 9.3 205.6 12.2 16.6 -22.2 16.5 -21.7 16.3 -20.4 16.6 -21.3
2025-12-25T22:08:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:08:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:08:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.839295
2025-12-25T22:08:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:08:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:08:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:08:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:08:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:08:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:08:14', tmtdew=4.62, humidity=74.19, cloud=0.0, wind=14.26, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:08:14', seeing=1.15, atlas_timestamp='2025-12-25T20:08:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:05:00')
2025-12-25T22:08:46.442 [DEBUG] [Thread-19355] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:08:46.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:08:46.534 [DEBUG] [Thread-19358] [transport.py] [_log()] starting thread (client mode): 0xb6b7c7f0
2025-12-25T22:08:46.534 [DEBUG] [Thread-19358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:08:46.548 [DEBUG] [Thread-19358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:08:46.548 [INFO] [Thread-19358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] client lang: <none>
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] server lang: <none>
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] kex follows: False
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:08:46.556 [DEBUG] [Thread-19358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:08:46.557 [DEBUG] [Thread-19358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:08:46.557 [DEBUG] [Thread-19358] [transport.py] [_log()] Compression: none
2025-12-25T22:08:46.557 [DEBUG] [Thread-19358] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:08:46.614 [DEBUG] [Thread-19358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:08:46.615 [DEBUG] [Thread-19358] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:08:46.615 [DEBUG] [Thread-19358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:08:46.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:08:46.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:08:46.678 [DEBUG] [Thread-19358] [transport.py] [_log()] userauth is OK
2025-12-25T22:08:46.678 [DEBUG] [Thread-19358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:08:46.678 [DEBUG] [Thread-19358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:08:46.679 [DEBUG] [Thread-19358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:08:46.679 [DEBUG] [Thread-19358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:08:46.698 [INFO] [Thread-19358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:08:46.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-25T22:08:46.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:08:47.562 [DEBUG] [Thread-19358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:08:47.562 [DEBUG] [Thread-19358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:08:47.609 [DEBUG] [Thread-19358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:08:47.609 [DEBUG] [Thread-19358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:08:47.617 [DEBUG] [Thread-19358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:08:47.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:08:47.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-25T22:08:47.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-25T22:08:47.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:08:47.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:08:47.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:08:47.655 [DEBUG] [Thread-19358] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:08:53.397 [DEBUG] [Thread-19360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:55.202 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:08:55.203 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:08.440 [DEBUG] [Thread-19361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:09:17.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:09:17.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-25T22:09:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 8, 46), 4.58, 74.15, 0.0, 10.94, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:09:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:08:46
2025-12-25T22:09:18.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:09:18.619 [DEBUG] [Thread-19362] [transport.py] [_log()] starting thread (client mode): 0xb6bba650
2025-12-25T22:09:18.620 [DEBUG] [Thread-19362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:09:18.639 [DEBUG] [Thread-19362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:09:18.639 [INFO] [Thread-19362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] client lang: <none>
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] server lang: <none>
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] kex follows: False
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:09:18.640 [DEBUG] [Thread-19362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:09:18.641 [DEBUG] [Thread-19362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:09:18.641 [DEBUG] [Thread-19362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:09:18.641 [DEBUG] [Thread-19362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:09:18.641 [DEBUG] [Thread-19362] [transport.py] [_log()] Compression: none
2025-12-25T22:09:18.641 [DEBUG] [Thread-19362] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:09:18.652 [DEBUG] [Thread-19362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:09:18.652 [DEBUG] [Thread-19362] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:09:18.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:09:18.653 [DEBUG] [Thread-19362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:09:18.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:09:18.655 [DEBUG] [Thread-19362] [transport.py] [_log()] userauth is OK
2025-12-25T22:09:18.655 [DEBUG] [Thread-19362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:09:18.655 [DEBUG] [Thread-19362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:09:18.655 [DEBUG] [Thread-19362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:09:18.655 [DEBUG] [Thread-19362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:09:18.675 [INFO] [Thread-19362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:09:18.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:09:19.267 [DEBUG] [Thread-19362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:09:19.267 [DEBUG] [Thread-19362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:09:19.267 [DEBUG] [Thread-19362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:09:19.307 [DEBUG] [Thread-19362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:09:19.307 [DEBUG] [Thread-19362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:09:19.310 [DEBUG] [Thread-19362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:09:19.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:09:19.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:09:19.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:09:19.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:09:19.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:09:19.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:09:19.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.839642 -999.00  +15.60  10.05     77  +11.60 1 1 1 1 1     0    0 3.08 -42.22 ZNESW 7.1 10.1 203.0 15.4 16.6 -21.9 16.4 -21.8 16.3 -20.2 16.5 -21.1
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.839642
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:09:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:08:46', tmtdew=4.58, humidity=74.15, cloud=0.0, wind=10.94, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:08:46', seeing=1.06, atlas_timestamp='2025-12-25T20:09:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:05:00')
2025-12-25T22:09:19.326 [DEBUG] [Thread-19362] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:09:19.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-25T22:09:19.411 [DEBUG] [Thread-19365] [transport.py] [_log()] starting thread (client mode): 0xb6b21120
2025-12-25T22:09:19.412 [DEBUG] [Thread-19365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:09:19.427 [DEBUG] [Thread-19365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:09:19.427 [INFO] [Thread-19365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] client lang: <none>
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] server lang: <none>
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] kex follows: False
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] Compression: none
2025-12-25T22:09:19.435 [DEBUG] [Thread-19365] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:09:19.492 [DEBUG] [Thread-19365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:09:19.492 [DEBUG] [Thread-19365] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:09:19.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:09:19.493 [DEBUG] [Thread-19365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:09:19.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:09:19.552 [DEBUG] [Thread-19365] [transport.py] [_log()] userauth is OK
2025-12-25T22:09:19.552 [DEBUG] [Thread-19365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:09:19.552 [DEBUG] [Thread-19365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:09:19.552 [DEBUG] [Thread-19365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:09:19.552 [DEBUG] [Thread-19365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:09:19.566 [INFO] [Thread-19365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:09:19.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:09:19.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:09:20.388 [DEBUG] [Thread-19365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:09:20.388 [DEBUG] [Thread-19365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:09:20.436 [DEBUG] [Thread-19365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:09:20.436 [DEBUG] [Thread-19365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:09:20.445 [DEBUG] [Thread-19365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:09:20.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:09:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:09:20.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-25T22:09:20.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:09:20.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:09:20.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:09:20.479 [DEBUG] [Thread-19365] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:09:23.473 [DEBUG] [Thread-19367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:30.155 [DEBUG] [Thread-19368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:38.519 [DEBUG] [Thread-19369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:50.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:09:50.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:09:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:09:51.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 9, 18), 4.55, 74.25, 0.0, 10.45, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:09:51.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:09:18
2025-12-25T22:09:51.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:09:51.519 [DEBUG] [Thread-19370] [transport.py] [_log()] starting thread (client mode): 0xb6bb8ca0
2025-12-25T22:09:51.519 [DEBUG] [Thread-19370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:09:51.537 [DEBUG] [Thread-19370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:09:51.537 [INFO] [Thread-19370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] client lang: <none>
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] server lang: <none>
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] kex follows: False
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] Compression: none
2025-12-25T22:09:51.544 [DEBUG] [Thread-19370] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:09:51.552 [DEBUG] [Thread-19370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:09:51.552 [DEBUG] [Thread-19370] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:09:51.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:09:51.553 [DEBUG] [Thread-19370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:09:51.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:09:51.553 [DEBUG] [Thread-19370] [transport.py] [_log()] userauth is OK
2025-12-25T22:09:51.553 [DEBUG] [Thread-19370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:09:51.553 [DEBUG] [Thread-19370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:09:51.553 [DEBUG] [Thread-19370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:09:51.553 [DEBUG] [Thread-19370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:09:51.573 [INFO] [Thread-19370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:09:51.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:09:52.147 [DEBUG] [Thread-19370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:09:52.147 [DEBUG] [Thread-19370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:09:52.147 [DEBUG] [Thread-19370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:09:52.189 [DEBUG] [Thread-19370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:09:52.189 [DEBUG] [Thread-19370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:09:52.191 [DEBUG] [Thread-19370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:09:52.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:09:52.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:09:52.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:09:52.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:09:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:09:52.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:09:52.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.839989 -999.00  +15.60   4.77     77  +11.60 1 1 1 1 1     0    0 3.20 -40.50 ZNESW 6.0 4.8 176.6 10.7 16.6 -22.1 16.4 -21.6 16.3 -20.3 16.5 -21.0
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.839989
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:09:52.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:09:18', tmtdew=4.55, humidity=74.25, cloud=0.0, wind=10.45, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:09:18', seeing=1.52, atlas_timestamp='2025-12-25T20:09:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:08:00')
2025-12-25T22:09:52.210 [DEBUG] [Thread-19370] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:09:52.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-25T22:09:52.295 [DEBUG] [Thread-19373] [transport.py] [_log()] starting thread (client mode): 0xb6b76710
2025-12-25T22:09:52.295 [DEBUG] [Thread-19373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:09:52.311 [DEBUG] [Thread-19373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:09:52.311 [INFO] [Thread-19373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] client lang: <none>
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] server lang: <none>
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] kex follows: False
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] Compression: none
2025-12-25T22:09:52.319 [DEBUG] [Thread-19373] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:09:52.377 [DEBUG] [Thread-19373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:09:52.377 [DEBUG] [Thread-19373] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:09:52.377 [DEBUG] [Thread-19373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:09:52.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:09:52.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:09:52.437 [DEBUG] [Thread-19373] [transport.py] [_log()] userauth is OK
2025-12-25T22:09:52.437 [DEBUG] [Thread-19373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:09:52.437 [DEBUG] [Thread-19373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:09:52.437 [DEBUG] [Thread-19373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:09:52.437 [DEBUG] [Thread-19373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:09:52.452 [INFO] [Thread-19373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:09:52.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-25T22:09:52.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:09:53.325 [DEBUG] [Thread-19373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:09:53.325 [DEBUG] [Thread-19373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:09:53.373 [DEBUG] [Thread-19373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:09:53.373 [DEBUG] [Thread-19373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:09:53.383 [DEBUG] [Thread-19373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:09:53.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:09:53.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-25T22:09:53.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:09:53.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:09:53.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:09:53.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:09:53.420 [DEBUG] [Thread-19373] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:09:53.553 [DEBUG] [Thread-19375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:55.404 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:09:55.406 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:08.614 [DEBUG] [Thread-19376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:23.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:10:23.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:10:23.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-25T22:10:23.642 [DEBUG] [Thread-19377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:24.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 9, 50), 4.56, 74.25, 0.0, 11.68, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:10:24.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:09:50
2025-12-25T22:10:24.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:10:24.473 [DEBUG] [Thread-19378] [transport.py] [_log()] starting thread (client mode): 0xb6bba590
2025-12-25T22:10:24.473 [DEBUG] [Thread-19378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:10:24.493 [DEBUG] [Thread-19378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:10:24.493 [INFO] [Thread-19378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] client lang: <none>
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] server lang: <none>
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] kex follows: False
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] Compression: none
2025-12-25T22:10:24.497 [DEBUG] [Thread-19378] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:10:24.512 [DEBUG] [Thread-19378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:10:24.512 [DEBUG] [Thread-19378] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:10:24.513 [DEBUG] [Thread-19378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:10:24.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:10:24.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:10:24.513 [DEBUG] [Thread-19378] [transport.py] [_log()] userauth is OK
2025-12-25T22:10:24.513 [DEBUG] [Thread-19378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:10:24.513 [DEBUG] [Thread-19378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:10:24.513 [DEBUG] [Thread-19378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:10:24.513 [DEBUG] [Thread-19378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:10:24.540 [INFO] [Thread-19378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:10:24.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:10:25.185 [DEBUG] [Thread-19378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:10:25.185 [DEBUG] [Thread-19378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:10:25.186 [DEBUG] [Thread-19378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:10:25.225 [DEBUG] [Thread-19378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:10:25.225 [DEBUG] [Thread-19378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:10:25.227 [DEBUG] [Thread-19378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:10:25.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:10:25.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:10:25.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:10:25.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:10:25.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:10:25.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:10:25.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.839989 -999.00  +15.60   4.77     77  +11.60 1 1 1 1 1     0    0 3.20 -40.50 ZNESW 6.0 4.8 176.6 10.7 16.6 -22.1 16.4 -21.6 16.3 -20.3 16.5 -21.0
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.839989
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:09:50', tmtdew=4.56, humidity=74.25, cloud=0.0, wind=11.68, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:10:23', seeing=1.28, atlas_timestamp='2025-12-25T20:09:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:08:00')
2025-12-25T22:10:25.246 [DEBUG] [Thread-19378] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:10:25.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-25T22:10:25.329 [DEBUG] [Thread-19381] [transport.py] [_log()] starting thread (client mode): 0xb6bb97b0
2025-12-25T22:10:25.329 [DEBUG] [Thread-19381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:10:25.344 [DEBUG] [Thread-19381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:10:25.344 [INFO] [Thread-19381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] client lang: <none>
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] server lang: <none>
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] kex follows: False
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:10:25.352 [DEBUG] [Thread-19381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:10:25.353 [DEBUG] [Thread-19381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:10:25.353 [DEBUG] [Thread-19381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:10:25.353 [DEBUG] [Thread-19381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:10:25.353 [DEBUG] [Thread-19381] [transport.py] [_log()] Compression: none
2025-12-25T22:10:25.353 [DEBUG] [Thread-19381] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:10:25.411 [DEBUG] [Thread-19381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:10:25.411 [DEBUG] [Thread-19381] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:10:25.412 [DEBUG] [Thread-19381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:10:25.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:10:25.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:10:25.470 [DEBUG] [Thread-19381] [transport.py] [_log()] userauth is OK
2025-12-25T22:10:25.470 [DEBUG] [Thread-19381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:10:25.470 [DEBUG] [Thread-19381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:10:25.470 [DEBUG] [Thread-19381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:10:25.470 [DEBUG] [Thread-19381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:10:25.490 [INFO] [Thread-19381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:10:25.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-25T22:10:25.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:10:26.346 [DEBUG] [Thread-19381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:10:26.347 [DEBUG] [Thread-19381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:10:26.395 [DEBUG] [Thread-19381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:10:26.395 [DEBUG] [Thread-19381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:10:26.404 [DEBUG] [Thread-19381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:10:26.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:10:26.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-25T22:10:26.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-25T22:10:26.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:10:26.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:10:26.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:10:26.441 [DEBUG] [Thread-19381] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:10:30.211 [DEBUG] [Thread-19383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:38.674 [DEBUG] [Thread-19384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:53.733 [DEBUG] [Thread-19385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:55.606 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:55.607 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:10:56.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:10:56.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:10:56.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-25T22:10:57.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 10, 22), 4.54, 74.32, 0.0, 10.57, 15.36, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:10:57.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:10:22
2025-12-25T22:10:57.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:10:57.473 [DEBUG] [Thread-19386] [transport.py] [_log()] starting thread (client mode): 0xb6bbac80
2025-12-25T22:10:57.474 [DEBUG] [Thread-19386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:10:57.494 [DEBUG] [Thread-19386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:10:57.494 [INFO] [Thread-19386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:57.497 [DEBUG] [Thread-19386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] client lang: <none>
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] server lang: <none>
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] kex follows: False
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] Compression: none
2025-12-25T22:10:57.498 [DEBUG] [Thread-19386] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:10:57.516 [DEBUG] [Thread-19386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:10:57.516 [DEBUG] [Thread-19386] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:10:57.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:10:57.518 [DEBUG] [Thread-19386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:10:57.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:10:57.519 [DEBUG] [Thread-19386] [transport.py] [_log()] userauth is OK
2025-12-25T22:10:57.520 [DEBUG] [Thread-19386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:10:57.520 [DEBUG] [Thread-19386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:10:57.520 [DEBUG] [Thread-19386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:10:57.520 [DEBUG] [Thread-19386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:10:57.544 [INFO] [Thread-19386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:10:57.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:10:58.317 [DEBUG] [Thread-19386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:10:58.318 [DEBUG] [Thread-19386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:10:58.318 [DEBUG] [Thread-19386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:10:58.359 [DEBUG] [Thread-19386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:10:58.360 [DEBUG] [Thread-19386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:10:58.363 [DEBUG] [Thread-19386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:10:58.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:10:58.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:10:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:10:58.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:10:58.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:10:58.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:10:58.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:10:58.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:10:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:10:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.840336 -999.00  +15.60   8.43     77  +11.60 1 1 1 1 1     0    0 3.14 -38.19 ZNESW 7.6 8.4 209.6 10.0 16.6 -21.9 16.4 -21.5 16.2 -20.2 16.5 -21.2
2025-12-25T22:10:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:10:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:10:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.840336
2025-12-25T22:10:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:10:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:10:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:10:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:10:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:10:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:10:22', tmtdew=4.54, humidity=74.32, cloud=0.0, wind=10.57, 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-25T22:10:55', seeing=1.06, atlas_timestamp='2025-12-25T20:10:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:08:00')
2025-12-25T22:10:58.390 [DEBUG] [Thread-19386] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:10:58.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-25T22:10:58.486 [DEBUG] [Thread-19389] [transport.py] [_log()] starting thread (client mode): 0xb6bb8400
2025-12-25T22:10:58.486 [DEBUG] [Thread-19389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:10:58.502 [DEBUG] [Thread-19389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:10:58.502 [INFO] [Thread-19389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] client lang: <none>
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] server lang: <none>
2025-12-25T22:10:58.510 [DEBUG] [Thread-19389] [transport.py] [_log()] kex follows: False
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] Compression: none
2025-12-25T22:10:58.511 [DEBUG] [Thread-19389] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:10:58.571 [DEBUG] [Thread-19389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:10:58.571 [DEBUG] [Thread-19389] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:10:58.572 [DEBUG] [Thread-19389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:10:58.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:10:58.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:10:58.626 [DEBUG] [Thread-19389] [transport.py] [_log()] userauth is OK
2025-12-25T22:10:58.627 [DEBUG] [Thread-19389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:10:58.627 [DEBUG] [Thread-19389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:10:58.627 [DEBUG] [Thread-19389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:10:58.627 [DEBUG] [Thread-19389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:10:58.652 [INFO] [Thread-19389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:10:58.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-25T22:10:58.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:10:59.472 [DEBUG] [Thread-19389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:10:59.472 [DEBUG] [Thread-19389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:10:59.520 [DEBUG] [Thread-19389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:10:59.520 [DEBUG] [Thread-19389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:10:59.529 [DEBUG] [Thread-19389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:10:59.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:10:59.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:10:59.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-25T22:10:59.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:10:59.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:10:59.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:10:59.566 [DEBUG] [Thread-19389] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:11:08.768 [DEBUG] [Thread-19391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:11:23.821 [DEBUG] [Thread-19392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:11:29.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:11:29.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:11:29.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-25T22:11:30.264 [DEBUG] [Thread-19393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:11:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 11, 26), 4.47, 74.4, 0.0, 10.06, 15.34, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:11:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:11:26
2025-12-25T22:11:30.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:11:30.622 [DEBUG] [Thread-19394] [transport.py] [_log()] starting thread (client mode): 0xb6b21420
2025-12-25T22:11:30.622 [DEBUG] [Thread-19394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:11:30.643 [DEBUG] [Thread-19394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:11:30.643 [INFO] [Thread-19394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:11:30.646 [DEBUG] [Thread-19394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] client lang: <none>
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] server lang: <none>
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] kex follows: False
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] Compression: none
2025-12-25T22:11:30.647 [DEBUG] [Thread-19394] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:11:30.662 [DEBUG] [Thread-19394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:11:30.662 [DEBUG] [Thread-19394] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:11:30.662 [DEBUG] [Thread-19394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:11:30.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:11:30.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:11:30.663 [DEBUG] [Thread-19394] [transport.py] [_log()] userauth is OK
2025-12-25T22:11:30.663 [DEBUG] [Thread-19394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:11:30.663 [DEBUG] [Thread-19394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:11:30.663 [DEBUG] [Thread-19394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:11:30.663 [DEBUG] [Thread-19394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:11:30.672 [INFO] [Thread-19394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:11:30.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:11:31.322 [DEBUG] [Thread-19394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:11:31.322 [DEBUG] [Thread-19394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:11:31.322 [DEBUG] [Thread-19394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:11:31.364 [DEBUG] [Thread-19394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:11:31.364 [DEBUG] [Thread-19394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:11:31.366 [DEBUG] [Thread-19394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:11:31.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:11:31.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:11:31.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:11:31.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:11:31.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:11:31.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:11:31.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:11:31.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.840683 -999.00  +15.60   5.50     77  +11.50 1 1 1 1 1     0    0 3.15 -38.85 ZNESW 6.0 5.5 192.0 10.5 16.6 -21.8 16.4 -21.5 16.2 -19.9 16.5 -21.1
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.840683
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:11:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:11:26', tmtdew=4.47, humidity=74.4, cloud=0.0, wind=10.06, 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-25T22:11:27', seeing=1.28, atlas_timestamp='2025-12-25T20:10:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:08:00')
2025-12-25T22:11:31.385 [DEBUG] [Thread-19394] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:11:31.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-25T22:11:31.470 [DEBUG] [Thread-19397] [transport.py] [_log()] starting thread (client mode): 0xb6b23a90
2025-12-25T22:11:31.470 [DEBUG] [Thread-19397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:11:31.484 [DEBUG] [Thread-19397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:11:31.484 [INFO] [Thread-19397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] client lang: <none>
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] server lang: <none>
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] kex follows: False
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:11:31.492 [DEBUG] [Thread-19397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:11:31.493 [DEBUG] [Thread-19397] [transport.py] [_log()] Compression: none
2025-12-25T22:11:31.493 [DEBUG] [Thread-19397] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:11:31.549 [DEBUG] [Thread-19397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:11:31.549 [DEBUG] [Thread-19397] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:11:31.549 [DEBUG] [Thread-19397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:11:31.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:11:31.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:11:31.606 [DEBUG] [Thread-19397] [transport.py] [_log()] userauth is OK
2025-12-25T22:11:31.606 [DEBUG] [Thread-19397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:11:31.606 [DEBUG] [Thread-19397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:11:31.606 [DEBUG] [Thread-19397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:11:31.606 [DEBUG] [Thread-19397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:11:31.623 [INFO] [Thread-19397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:11:31.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-25T22:11:31.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:11:32.495 [DEBUG] [Thread-19397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:11:32.495 [DEBUG] [Thread-19397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:11:32.543 [DEBUG] [Thread-19397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:11:32.543 [DEBUG] [Thread-19397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:11:32.553 [DEBUG] [Thread-19397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:11:32.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:11:32.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-25T22:11: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') -> 00000000
2025-12-25T22:11:32.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:11:32.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:11:32.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:11:32.589 [DEBUG] [Thread-19397] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:11:38.848 [DEBUG] [Thread-19399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:11:53.902 [DEBUG] [Thread-19400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:11:55.809 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:11:55.810 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:02.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:12:02.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:12:02.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-25T22:12:03.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 11, 58), 4.46, 74.45, 0.0, 9.25, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:12:03.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:11:58
2025-12-25T22:12:03.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:12:03.588 [DEBUG] [Thread-19401] [transport.py] [_log()] starting thread (client mode): 0xb6bb9390
2025-12-25T22:12:03.588 [DEBUG] [Thread-19401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:12:03.609 [DEBUG] [Thread-19401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:12:03.609 [INFO] [Thread-19401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:12:03.612 [DEBUG] [Thread-19401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] client lang: <none>
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] server lang: <none>
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] kex follows: False
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] Compression: none
2025-12-25T22:12:03.613 [DEBUG] [Thread-19401] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:12:03.630 [DEBUG] [Thread-19401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:12:03.630 [DEBUG] [Thread-19401] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:12:03.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:12:03.632 [DEBUG] [Thread-19401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:12:03.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:12:03.634 [DEBUG] [Thread-19401] [transport.py] [_log()] userauth is OK
2025-12-25T22:12:03.634 [DEBUG] [Thread-19401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:12:03.634 [DEBUG] [Thread-19401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:12:03.634 [DEBUG] [Thread-19401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:12:03.634 [DEBUG] [Thread-19401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:12:03.652 [INFO] [Thread-19401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:12:03.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:12:04.481 [DEBUG] [Thread-19401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:12:04.481 [DEBUG] [Thread-19401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:12:04.481 [DEBUG] [Thread-19401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:12:04.521 [DEBUG] [Thread-19401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:12:04.521 [DEBUG] [Thread-19401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:12:04.524 [DEBUG] [Thread-19401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:12:04.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:12:04.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:12:04.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:12:04.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:12:04.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:12:04.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:12:04.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.841031 -999.00  +15.60   5.95     77  +11.60 1 1 1 1 1     0    0 3.19 -35.91 ZNESW 4.1 6.0 204.4 8.1 16.6 -21.9 16.4 -21.4 16.2 -20.1 16.5 -21.2
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.841031
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:12:04.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:11:58', tmtdew=4.46, humidity=74.45, cloud=0.0, wind=9.25, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:11:59', seeing=1.07, atlas_timestamp='2025-12-25T20:11:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:08:00')
2025-12-25T22:12:04.543 [DEBUG] [Thread-19401] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:12:04.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-25T22:12:04.626 [DEBUG] [Thread-19404] [transport.py] [_log()] starting thread (client mode): 0xb6b00a60
2025-12-25T22:12:04.626 [DEBUG] [Thread-19404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:12:04.641 [DEBUG] [Thread-19404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:12:04.641 [INFO] [Thread-19404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:12:04.648 [DEBUG] [Thread-19404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:12:04.648 [DEBUG] [Thread-19404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:12:04.648 [DEBUG] [Thread-19404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] client lang: <none>
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] server lang: <none>
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] kex follows: False
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] Compression: none
2025-12-25T22:12:04.649 [DEBUG] [Thread-19404] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:12:04.710 [DEBUG] [Thread-19404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:12:04.710 [DEBUG] [Thread-19404] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:12:04.710 [DEBUG] [Thread-19404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:12:04.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:12:04.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:12:04.766 [DEBUG] [Thread-19404] [transport.py] [_log()] userauth is OK
2025-12-25T22:12:04.766 [DEBUG] [Thread-19404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:12:04.766 [DEBUG] [Thread-19404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:12:04.766 [DEBUG] [Thread-19404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:12:04.766 [DEBUG] [Thread-19404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:12:04.784 [INFO] [Thread-19404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:12:04.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:12:04.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:12:05.641 [DEBUG] [Thread-19404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:12:05.641 [DEBUG] [Thread-19404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:12:05.689 [DEBUG] [Thread-19404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:12:05.690 [DEBUG] [Thread-19404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:12:05.698 [DEBUG] [Thread-19404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:12:05.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:12:05.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-25T22:12:05.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-25T22:12:05.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:12:05.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:12:05.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:12:05.730 [DEBUG] [Thread-19404] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:12:08.930 [DEBUG] [Thread-19406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:23.969 [DEBUG] [Thread-19407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:30.337 [DEBUG] [Thread-19408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:35.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:12:35.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:12:35.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-25T22:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 12, 30), 4.46, 74.45, 0.0, 9.03, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:12:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:12:30
2025-12-25T22:12:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:12:36.741 [DEBUG] [Thread-19409] [transport.py] [_log()] starting thread (client mode): 0xb6b20dc0
2025-12-25T22:12:36.741 [DEBUG] [Thread-19409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:12:36.762 [DEBUG] [Thread-19409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:12:36.763 [INFO] [Thread-19409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] client lang: <none>
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] server lang: <none>
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] kex follows: False
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] Compression: none
2025-12-25T22:12:36.766 [DEBUG] [Thread-19409] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:12:36.784 [DEBUG] [Thread-19409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:12:36.785 [DEBUG] [Thread-19409] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:12:36.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:12:36.786 [DEBUG] [Thread-19409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:12:36.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:12:36.788 [DEBUG] [Thread-19409] [transport.py] [_log()] userauth is OK
2025-12-25T22:12:36.788 [DEBUG] [Thread-19409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:12:36.788 [DEBUG] [Thread-19409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:12:36.788 [DEBUG] [Thread-19409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:12:36.788 [DEBUG] [Thread-19409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:12:36.807 [INFO] [Thread-19409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:12:36.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:12:37.430 [DEBUG] [Thread-19409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:12:37.430 [DEBUG] [Thread-19409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:12:37.431 [DEBUG] [Thread-19409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:12:37.471 [DEBUG] [Thread-19409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:12:37.471 [DEBUG] [Thread-19409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:12:37.475 [DEBUG] [Thread-19409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:12:37.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:12:37.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:12:37.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:12:37.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:12:37.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:12:37.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:12:37.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:12:37.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:12:37.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:12:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.841725 -999.00  +15.60   6.24     76  +11.50 1 1 1 1 1     0    0 3.33 -32.05 ZNESW 4.7 6.2 217.0 7.6 16.5 -22.0 16.4 -21.3 16.2 -20.1 16.5 -21.0
2025-12-25T22:12:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:12:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:12:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.841725
2025-12-25T22:12:37.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:12:37.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:12:37.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:12:37.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:12:37.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:12:37.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:12:30', tmtdew=4.46, humidity=74.45, cloud=0.0, wind=9.03, 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-25T22:12:31', seeing=1.07, atlas_timestamp='2025-12-25T20:12:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.08624999999999972, 0.12424999999999997, 0.13525000000000098, 0.0754999999999999, 0.06450000000000067, 0.07525000000000048, 0.06799999999999962, 0.18374999999999986, 0.07149999999999856, 0.06600000000000072, 0.13625000000000043, 0.041999999999999815, 0.1349999999999998, 0.13424999999999976, 0.11399999999999899, 0.12199999999999989, 0.06925000000000026, 0.11500000000000021, 0.08699999999999974, 0.09924999999999962, 0.12399999999999878, 0.1587499999999995, 0.15375000000000227, 0.12274999999999991, 0.10099999999999909, 0.0965000000000007, 0.18575000000000053, 0.1540000000000017, 0.21649999999999991, 0.11100000000000065, 0.2140000000000004, 0.15200000000000102, 0.15274999999999928], zp_timestamp='2025-12-25T20:08:00')
2025-12-25T22:12:37.502 [DEBUG] [Thread-19409] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:12:37.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-25T22:12:37.596 [DEBUG] [Thread-19412] [transport.py] [_log()] starting thread (client mode): 0xb6b22ef0
2025-12-25T22:12:37.596 [DEBUG] [Thread-19412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:12:37.612 [DEBUG] [Thread-19412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:12:37.612 [INFO] [Thread-19412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:12:37.620 [DEBUG] [Thread-19412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:12:37.620 [DEBUG] [Thread-19412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:12:37.620 [DEBUG] [Thread-19412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:12:37.620 [DEBUG] [Thread-19412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:37.620 [DEBUG] [Thread-19412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:12:37.620 [DEBUG] [Thread-19412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] client lang: <none>
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] server lang: <none>
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] kex follows: False
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] Compression: none
2025-12-25T22:12:37.621 [DEBUG] [Thread-19412] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:12:37.684 [DEBUG] [Thread-19412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:12:37.684 [DEBUG] [Thread-19412] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:12:37.685 [DEBUG] [Thread-19412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:12:37.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:12:37.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:12:37.743 [DEBUG] [Thread-19412] [transport.py] [_log()] userauth is OK
2025-12-25T22:12:37.743 [DEBUG] [Thread-19412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:12:37.743 [DEBUG] [Thread-19412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:12:37.743 [DEBUG] [Thread-19412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:12:37.744 [DEBUG] [Thread-19412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:12:37.762 [INFO] [Thread-19412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:12:37.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-25T22:12:37.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:12:38.602 [DEBUG] [Thread-19412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:12:38.602 [DEBUG] [Thread-19412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:12:38.650 [DEBUG] [Thread-19412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:12:38.651 [DEBUG] [Thread-19412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:12:38.660 [DEBUG] [Thread-19412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:12:38.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:12:38.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:12:38.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:12:38.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:12:38.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:12:38.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:12:38.698 [DEBUG] [Thread-19412] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:12:39.004 [DEBUG] [Thread-19414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:54.059 [DEBUG] [Thread-19415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:56.011 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:56.012 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:12:56.665 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:13:08.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:13:08.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-25T22:13:09.093 [DEBUG] [Thread-19416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:09.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 13, 2), 4.46, 74.47, 0.0, 9.53, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:13:09.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:13:02
2025-12-25T22:13:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:13:09.721 [DEBUG] [Thread-19417] [transport.py] [_log()] starting thread (client mode): 0xb6b02c20
2025-12-25T22:13:09.721 [DEBUG] [Thread-19417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:13:09.741 [DEBUG] [Thread-19417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:13:09.741 [INFO] [Thread-19417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:13:09.744 [DEBUG] [Thread-19417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:13:09.744 [DEBUG] [Thread-19417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:13:09.744 [DEBUG] [Thread-19417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] client lang: <none>
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] server lang: <none>
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] kex follows: False
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] Compression: none
2025-12-25T22:13:09.745 [DEBUG] [Thread-19417] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:13:09.762 [DEBUG] [Thread-19417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:13:09.762 [DEBUG] [Thread-19417] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:13:09.762 [DEBUG] [Thread-19417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:13:09.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:13:09.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:13:09.764 [DEBUG] [Thread-19417] [transport.py] [_log()] userauth is OK
2025-12-25T22:13:09.764 [DEBUG] [Thread-19417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:13:09.765 [DEBUG] [Thread-19417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:13:09.765 [DEBUG] [Thread-19417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:13:09.765 [DEBUG] [Thread-19417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:13:09.788 [INFO] [Thread-19417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:13:09.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:13:10.601 [DEBUG] [Thread-19417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:13:10.602 [DEBUG] [Thread-19417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:13:10.602 [DEBUG] [Thread-19417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:13:10.642 [DEBUG] [Thread-19417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:13:10.642 [DEBUG] [Thread-19417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:13:10.646 [DEBUG] [Thread-19417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:13:10.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:13:10.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:13:10.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:13:10.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:13:10.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:13:10.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:13:10.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:13:10.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:13:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:13:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.842072 -999.00  +15.60   7.06     76  +11.50 1 1 1 1 1     0    0 3.41 -29.16 ZNESW 6.8 7.1 217.8 9.5 16.5 -21.9 16.4 -21.5 16.2 -20.1 16.5 -21.0
2025-12-25T22:13:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:13:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:13:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.842072
2025-12-25T22:13:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:13:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:13:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:13:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:13:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:13:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:13:02', tmtdew=4.46, humidity=74.47, cloud=0.0, wind=9.53, 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-25T22:13:03', seeing=1.07, atlas_timestamp='2025-12-25T20:12:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.05674999999999919, 0.14225000000000065, 0.13225000000000087, 0.08000000000000007, 0.07499999999999929, 0.08225000000000016, 0.10949999999999882, 0.12025000000000041, 0.08899999999999864, 0.062000000000001165, 0.1352499999999992, 0.0965000000000007, 0.1225000000000005, 0.08225000000000016, 0.10599999999999987, 0.06299999999999883, 0.07925000000000004, 0.1330000000000009, 0.1120000000000001, 0.04224999999999923, 0.09699999999999953, 0.11074999999999946, 0.12325000000000053, 0.13175000000000026, 0.07699999999999996, 0.05400000000000027, 0.17774999999999963, 0.22049999999999947, 0.1880000000000006, 0.1880000000000006, 0.22600000000000087, 0.15600000000000058, 0.13374999999999915], zp_timestamp='2025-12-25T20:11:00')
2025-12-25T22:13:10.673 [DEBUG] [Thread-19417] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:13:10.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:13:10.767 [DEBUG] [Thread-19420] [transport.py] [_log()] starting thread (client mode): 0xb6bb4280
2025-12-25T22:13:10.767 [DEBUG] [Thread-19420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:13:10.782 [DEBUG] [Thread-19420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:13:10.782 [INFO] [Thread-19420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:13:10.789 [DEBUG] [Thread-19420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] client lang: <none>
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] server lang: <none>
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] kex follows: False
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] Compression: none
2025-12-25T22:13:10.790 [DEBUG] [Thread-19420] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:13:10.846 [DEBUG] [Thread-19420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:13:10.847 [DEBUG] [Thread-19420] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:13:10.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:13:10.848 [DEBUG] [Thread-19420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:13:10.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:13:10.903 [DEBUG] [Thread-19420] [transport.py] [_log()] userauth is OK
2025-12-25T22:13:10.903 [DEBUG] [Thread-19420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:13:10.904 [DEBUG] [Thread-19420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:13:10.904 [DEBUG] [Thread-19420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:13:10.904 [DEBUG] [Thread-19420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:13:10.923 [INFO] [Thread-19420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:13:10.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-25T22:13:10.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:13:11.787 [DEBUG] [Thread-19420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:13:11.787 [DEBUG] [Thread-19420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:13:11.835 [DEBUG] [Thread-19420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:13:11.835 [DEBUG] [Thread-19420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:13:11.845 [DEBUG] [Thread-19420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:13:11.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:13:11.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')
2025-12-25T22:13:11.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-25T22:13:11.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:13:11.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:13:11.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:13:11.882 [DEBUG] [Thread-19420] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:13:24.121 [DEBUG] [Thread-19422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:30.395 [DEBUG] [Thread-19423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:39.168 [DEBUG] [Thread-19424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:41.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:13:41.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:13:41.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-25T22:13:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 13, 34), 4.51, 74.47, 0.0, 12.16, 15.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:13:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:13:34
2025-12-25T22:13:42.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:13:42.900 [DEBUG] [Thread-19425] [transport.py] [_log()] starting thread (client mode): 0xb6bb5e10
2025-12-25T22:13:42.900 [DEBUG] [Thread-19425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:13:42.913 [DEBUG] [Thread-19425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:13:42.913 [INFO] [Thread-19425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] client lang: <none>
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] server lang: <none>
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] kex follows: False
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] Compression: none
2025-12-25T22:13:42.916 [DEBUG] [Thread-19425] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:13:42.934 [DEBUG] [Thread-19425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:13:42.935 [DEBUG] [Thread-19425] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:13:42.935 [DEBUG] [Thread-19425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:13:42.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:13:42.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:13:42.937 [DEBUG] [Thread-19425] [transport.py] [_log()] userauth is OK
2025-12-25T22:13:42.937 [DEBUG] [Thread-19425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:13:42.937 [DEBUG] [Thread-19425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:13:42.937 [DEBUG] [Thread-19425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:13:42.937 [DEBUG] [Thread-19425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:13:42.955 [INFO] [Thread-19425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:13:42.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:13:43.591 [DEBUG] [Thread-19425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:13:43.591 [DEBUG] [Thread-19425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:13:43.592 [DEBUG] [Thread-19425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:13:43.632 [DEBUG] [Thread-19425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:13:43.632 [DEBUG] [Thread-19425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:13:43.635 [DEBUG] [Thread-19425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:13:43.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:13:43.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:13:43.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:13:43.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:13:43.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:13:43.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:13:43.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:13:43.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:13:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:13:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.842419 -999.00  +15.60   4.28     76  +11.50 1 1 1 1 1     0    0 3.46 -27.55 ZNESW 3.3 4.3 255.1 9.4 16.6 -22.0 16.4 -21.7 16.2 -20.3 16.4 -21.1
2025-12-25T22:13:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:13:43.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:13:43.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.842419
2025-12-25T22:13:43.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:13:43.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:13:43.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:13:43.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:13:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:13:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:13:34', tmtdew=4.51, humidity=74.47, cloud=0.0, wind=12.16, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:13:35', seeing=1.07, atlas_timestamp='2025-12-25T20:13:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.05674999999999919, 0.14225000000000065, 0.13225000000000087, 0.08000000000000007, 0.07499999999999929, 0.08225000000000016, 0.10949999999999882, 0.12025000000000041, 0.08899999999999864, 0.062000000000001165, 0.1352499999999992, 0.0965000000000007, 0.1225000000000005, 0.08225000000000016, 0.10599999999999987, 0.06299999999999883, 0.07925000000000004, 0.1330000000000009, 0.1120000000000001, 0.04224999999999923, 0.09699999999999953, 0.11074999999999946, 0.12325000000000053, 0.13175000000000026, 0.07699999999999996, 0.05400000000000027, 0.17774999999999963, 0.22049999999999947, 0.1880000000000006, 0.1880000000000006, 0.22600000000000087, 0.15600000000000058, 0.13374999999999915], zp_timestamp='2025-12-25T20:11:00')
2025-12-25T22:13:43.667 [DEBUG] [Thread-19425] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:13:43.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-25T22:13:43.757 [DEBUG] [Thread-19428] [transport.py] [_log()] starting thread (client mode): 0xb6bb9f00
2025-12-25T22:13:43.757 [DEBUG] [Thread-19428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:13:43.772 [DEBUG] [Thread-19428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:13:43.772 [INFO] [Thread-19428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] client lang: <none>
2025-12-25T22:13:43.779 [DEBUG] [Thread-19428] [transport.py] [_log()] server lang: <none>
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] kex follows: False
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] Compression: none
2025-12-25T22:13:43.780 [DEBUG] [Thread-19428] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:13:43.837 [DEBUG] [Thread-19428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:13:43.838 [DEBUG] [Thread-19428] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:13:43.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:13:43.839 [DEBUG] [Thread-19428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:13:43.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:13:43.894 [DEBUG] [Thread-19428] [transport.py] [_log()] userauth is OK
2025-12-25T22:13:43.894 [DEBUG] [Thread-19428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:13:43.894 [DEBUG] [Thread-19428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:13:43.894 [DEBUG] [Thread-19428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:13:43.895 [DEBUG] [Thread-19428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:13:43.913 [INFO] [Thread-19428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:13:43.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-25T22:13:43.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:13:44.766 [DEBUG] [Thread-19428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:13:44.767 [DEBUG] [Thread-19428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:13:44.815 [DEBUG] [Thread-19428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:13:44.815 [DEBUG] [Thread-19428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:13:44.824 [DEBUG] [Thread-19428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:13:44.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:13:44.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-25T22:13:44.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-25T22:13:44.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:13:44.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:13:44.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:13:44.858 [DEBUG] [Thread-19428] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:13:54.200 [DEBUG] [Thread-19430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:56.214 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:13:56.216 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:09.243 [DEBUG] [Thread-19431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:14:14.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:14:14.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-25T22:14:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 14, 7), 4.5, 74.52, 0.0, 11.51, 15.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:14:15.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:14:07
2025-12-25T22:14:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:14:15.860 [DEBUG] [Thread-19432] [transport.py] [_log()] starting thread (client mode): 0xb95b2680
2025-12-25T22:14:15.860 [DEBUG] [Thread-19432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:14:15.880 [DEBUG] [Thread-19432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:14:15.881 [INFO] [Thread-19432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:14:15.883 [DEBUG] [Thread-19432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:14:15.883 [DEBUG] [Thread-19432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] client lang: <none>
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] server lang: <none>
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] kex follows: False
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] Compression: none
2025-12-25T22:14:15.884 [DEBUG] [Thread-19432] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:14:15.892 [DEBUG] [Thread-19432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:14:15.892 [DEBUG] [Thread-19432] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:14:15.893 [DEBUG] [Thread-19432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:14:15.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:14:15.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:14:15.895 [DEBUG] [Thread-19432] [transport.py] [_log()] userauth is OK
2025-12-25T22:14:15.901 [DEBUG] [Thread-19432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:14:15.901 [DEBUG] [Thread-19432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:14:15.901 [DEBUG] [Thread-19432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:14:15.901 [DEBUG] [Thread-19432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:14:15.926 [INFO] [Thread-19432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:14:15.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:14:16.546 [DEBUG] [Thread-19432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:14:16.547 [DEBUG] [Thread-19432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:14:16.547 [DEBUG] [Thread-19432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:14:16.588 [DEBUG] [Thread-19432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:14:16.588 [DEBUG] [Thread-19432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:14:16.592 [DEBUG] [Thread-19432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:14:16.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:14:16.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:14:16.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:14:16.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:14:16.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:14:16.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:14:16.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:14:16.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:14:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:14:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.842767 -999.00  +15.50   8.11     76  +11.50 1 1 1 1 1     0    0 3.42 -27.57 ZNESW 7.3 8.1 215.4 13.2 16.5 -21.9 16.4 -21.5 16.2 -20.1 16.4 -21.3
2025-12-25T22:14:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:14:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:14:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.842767
2025-12-25T22:14:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:14:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:14:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:14:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:14:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:14:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:14:07', tmtdew=4.5, humidity=74.52, cloud=0.0, wind=11.51, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:14:07', seeing=1.05, atlas_timestamp='2025-12-25T20:13:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.05674999999999919, 0.14225000000000065, 0.13225000000000087, 0.08000000000000007, 0.07499999999999929, 0.08225000000000016, 0.10949999999999882, 0.12025000000000041, 0.08899999999999864, 0.062000000000001165, 0.1352499999999992, 0.0965000000000007, 0.1225000000000005, 0.08225000000000016, 0.10599999999999987, 0.06299999999999883, 0.07925000000000004, 0.1330000000000009, 0.1120000000000001, 0.04224999999999923, 0.09699999999999953, 0.11074999999999946, 0.12325000000000053, 0.13175000000000026, 0.07699999999999996, 0.05400000000000027, 0.17774999999999963, 0.22049999999999947, 0.1880000000000006, 0.1880000000000006, 0.22600000000000087, 0.15600000000000058, 0.13374999999999915], zp_timestamp='2025-12-25T20:11:00')
2025-12-25T22:14:16.619 [DEBUG] [Thread-19432] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:14:16.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-25T22:14:16.724 [DEBUG] [Thread-19435] [transport.py] [_log()] starting thread (client mode): 0xb6b7f1c0
2025-12-25T22:14:16.724 [DEBUG] [Thread-19435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:14:16.738 [DEBUG] [Thread-19435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:14:16.738 [INFO] [Thread-19435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:14:16.746 [DEBUG] [Thread-19435] [transport.py] [_log()] client lang: <none>
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] server lang: <none>
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] kex follows: False
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] Compression: none
2025-12-25T22:14:16.747 [DEBUG] [Thread-19435] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:14:16.808 [DEBUG] [Thread-19435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:14:16.809 [DEBUG] [Thread-19435] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:14:16.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:14:16.810 [DEBUG] [Thread-19435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:14:16.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:14:16.867 [DEBUG] [Thread-19435] [transport.py] [_log()] userauth is OK
2025-12-25T22:14:16.868 [DEBUG] [Thread-19435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:14:16.868 [DEBUG] [Thread-19435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:14:16.868 [DEBUG] [Thread-19435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:14:16.868 [DEBUG] [Thread-19435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:14:16.887 [INFO] [Thread-19435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:14:16.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-25T22:14:16.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:14:17.734 [DEBUG] [Thread-19435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:14:17.735 [DEBUG] [Thread-19435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:14:17.784 [DEBUG] [Thread-19435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:14:17.785 [DEBUG] [Thread-19435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:14:17.794 [DEBUG] [Thread-19435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:14:17.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:14:17.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-25T22:14:17.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:14:17.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:14:17.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:14:17.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:14:17.833 [DEBUG] [Thread-19435] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:14:24.275 [DEBUG] [Thread-19437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:30.450 [DEBUG] [Thread-19438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:39.330 [DEBUG] [Thread-19439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:47.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:14:47.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:14:47.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-25T22:14:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 14, 39), 4.44, 74.57, 0.0, 10.32, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:14:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:14:39
2025-12-25T22:14:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:14:48.834 [DEBUG] [Thread-19440] [transport.py] [_log()] starting thread (client mode): 0xb6bb5b40
2025-12-25T22:14:48.834 [DEBUG] [Thread-19440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:14:48.856 [DEBUG] [Thread-19440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:14:48.856 [INFO] [Thread-19440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:48.859 [DEBUG] [Thread-19440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] client lang: <none>
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] server lang: <none>
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] kex follows: False
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:14:48.860 [DEBUG] [Thread-19440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:14:48.861 [DEBUG] [Thread-19440] [transport.py] [_log()] Compression: none
2025-12-25T22:14:48.861 [DEBUG] [Thread-19440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:14:48.878 [DEBUG] [Thread-19440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:14:48.879 [DEBUG] [Thread-19440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:14:48.879 [DEBUG] [Thread-19440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:14:48.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:14:48.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:14:48.880 [DEBUG] [Thread-19440] [transport.py] [_log()] userauth is OK
2025-12-25T22:14:48.881 [DEBUG] [Thread-19440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:14:48.881 [DEBUG] [Thread-19440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:14:48.881 [DEBUG] [Thread-19440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:14:48.881 [DEBUG] [Thread-19440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:14:48.894 [INFO] [Thread-19440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:14:48.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:14:49.561 [DEBUG] [Thread-19440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:14:49.561 [DEBUG] [Thread-19440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:14:49.562 [DEBUG] [Thread-19440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:14:49.602 [DEBUG] [Thread-19440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:14:49.602 [DEBUG] [Thread-19440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:14:49.606 [DEBUG] [Thread-19440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:14:49.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:14:49.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:14:49.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:14:49.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:14:49.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:14:49.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:14:49.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:14:49.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:14:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:14:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.843114 -999.00  +15.50   9.12     77  +11.50 1 1 1 1 1     0    0 3.43 -27.67 ZNESW 8.3 9.1 228.4 11.1 16.4 -22.0 16.4 -21.4 16.2 -20.1 16.5 -21.0
2025-12-25T22:14:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:14:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:14:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.843114
2025-12-25T22:14:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:14:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:14:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:14:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:14:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:14:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:14:39', tmtdew=4.44, humidity=74.57, cloud=0.0, wind=10.32, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:14:39', seeing=1.25, atlas_timestamp='2025-12-25T20:14:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.05674999999999919, 0.14225000000000065, 0.13225000000000087, 0.08000000000000007, 0.07499999999999929, 0.08225000000000016, 0.10949999999999882, 0.12025000000000041, 0.08899999999999864, 0.062000000000001165, 0.1352499999999992, 0.0965000000000007, 0.1225000000000005, 0.08225000000000016, 0.10599999999999987, 0.06299999999999883, 0.07925000000000004, 0.1330000000000009, 0.1120000000000001, 0.04224999999999923, 0.09699999999999953, 0.11074999999999946, 0.12325000000000053, 0.13175000000000026, 0.07699999999999996, 0.05400000000000027, 0.17774999999999963, 0.22049999999999947, 0.1880000000000006, 0.1880000000000006, 0.22600000000000087, 0.15600000000000058, 0.13374999999999915], zp_timestamp='2025-12-25T20:11:00')
2025-12-25T22:14:49.635 [DEBUG] [Thread-19440] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:14: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-25T22:14:49.729 [DEBUG] [Thread-19443] [transport.py] [_log()] starting thread (client mode): 0xb6b21270
2025-12-25T22:14:49.729 [DEBUG] [Thread-19443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:14:49.744 [DEBUG] [Thread-19443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:14:49.744 [INFO] [Thread-19443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:14:49.752 [DEBUG] [Thread-19443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] client lang: <none>
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] server lang: <none>
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] kex follows: False
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] Compression: none
2025-12-25T22:14:49.753 [DEBUG] [Thread-19443] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:14:49.811 [DEBUG] [Thread-19443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:14:49.811 [DEBUG] [Thread-19443] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:14:49.812 [DEBUG] [Thread-19443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:14:49.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:14:49.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:14:49.872 [DEBUG] [Thread-19443] [transport.py] [_log()] userauth is OK
2025-12-25T22:14:49.872 [DEBUG] [Thread-19443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:14:49.872 [DEBUG] [Thread-19443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:14:49.872 [DEBUG] [Thread-19443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:14:49.872 [DEBUG] [Thread-19443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:14:49.892 [INFO] [Thread-19443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:14:49.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-25T22:14:49.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:14:50.741 [DEBUG] [Thread-19443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:14:50.741 [DEBUG] [Thread-19443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:14:50.789 [DEBUG] [Thread-19443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:14:50.789 [DEBUG] [Thread-19443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:14:50.798 [DEBUG] [Thread-19443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:14:50.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:14:50.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:14: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-25T22:14:50.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:14:50.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:14:50.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:14:50.831 [DEBUG] [Thread-19443] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:14:54.365 [DEBUG] [Thread-19445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:56.417 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:14:56.419 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:09.417 [DEBUG] [Thread-19446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:20.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:15:20.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:15:20.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-25T22:15:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 15, 11), 4.48, 74.37, 0.0, 11.51, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:15:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:15:11
2025-12-25T22:15:21.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:15:21.895 [DEBUG] [Thread-19447] [transport.py] [_log()] starting thread (client mode): 0xb6bb8280
2025-12-25T22:15:21.895 [DEBUG] [Thread-19447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:15:21.916 [DEBUG] [Thread-19447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:15:21.916 [INFO] [Thread-19447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] client lang: <none>
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] server lang: <none>
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] kex follows: False
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] Compression: none
2025-12-25T22:15:21.919 [DEBUG] [Thread-19447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:15:21.935 [DEBUG] [Thread-19447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:15:21.935 [DEBUG] [Thread-19447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:15:21.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:15:21.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:15:21.936 [DEBUG] [Thread-19447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:15:21.976 [DEBUG] [Thread-19447] [transport.py] [_log()] userauth is OK
2025-12-25T22:15:21.976 [DEBUG] [Thread-19447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:15:21.976 [DEBUG] [Thread-19447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:15:21.976 [DEBUG] [Thread-19447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:15:21.977 [DEBUG] [Thread-19447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:15:22.003 [INFO] [Thread-19447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:15:22.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:15:22.636 [DEBUG] [Thread-19447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:15:22.636 [DEBUG] [Thread-19447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:15:22.636 [DEBUG] [Thread-19447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:15:22.677 [DEBUG] [Thread-19447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:15:22.677 [DEBUG] [Thread-19447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:15:22.680 [DEBUG] [Thread-19447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:15:22.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:15:22.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:15:22.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:15:22.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:15:22.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:15:22.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:15:22.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.843461 -999.00  +15.50   8.59     77  +11.50 1 1 1 1 1     0    0 3.43 -26.99 ZNESW 8.2 8.6 236.4 13.0 16.5 -22.1 16.4 -21.5 16.1 -20.0 16.4 -21.3
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.843461
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:15:22.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:15:11', tmtdew=4.48, humidity=74.37, cloud=0.0, wind=11.51, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:15:11', seeing=1.07, atlas_timestamp='2025-12-25T20:14:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.05674999999999919, 0.14225000000000065, 0.13225000000000087, 0.08000000000000007, 0.07499999999999929, 0.08225000000000016, 0.10949999999999882, 0.12025000000000041, 0.08899999999999864, 0.062000000000001165, 0.1352499999999992, 0.0965000000000007, 0.1225000000000005, 0.08225000000000016, 0.10599999999999987, 0.06299999999999883, 0.07925000000000004, 0.1330000000000009, 0.1120000000000001, 0.04224999999999923, 0.09699999999999953, 0.11074999999999946, 0.12325000000000053, 0.13175000000000026, 0.07699999999999996, 0.05400000000000027, 0.17774999999999963, 0.22049999999999947, 0.1880000000000006, 0.1880000000000006, 0.22600000000000087, 0.15600000000000058, 0.13374999999999915], zp_timestamp='2025-12-25T20:11:00')
2025-12-25T22:15:22.698 [DEBUG] [Thread-19447] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:15:22.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:15:22.787 [DEBUG] [Thread-19450] [transport.py] [_log()] starting thread (client mode): 0xb6bba650
2025-12-25T22:15:22.787 [DEBUG] [Thread-19450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:15:22.802 [DEBUG] [Thread-19450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:15:22.802 [INFO] [Thread-19450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:15:22.811 [DEBUG] [Thread-19450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:15:22.811 [DEBUG] [Thread-19450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:15:22.811 [DEBUG] [Thread-19450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] client lang: <none>
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] server lang: <none>
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] kex follows: False
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] Compression: none
2025-12-25T22:15:22.812 [DEBUG] [Thread-19450] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:15:22.871 [DEBUG] [Thread-19450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:15:22.871 [DEBUG] [Thread-19450] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:15:22.872 [DEBUG] [Thread-19450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:15:22.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:15:22.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:15:22.937 [DEBUG] [Thread-19450] [transport.py] [_log()] userauth is OK
2025-12-25T22:15:22.937 [DEBUG] [Thread-19450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:15:22.937 [DEBUG] [Thread-19450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:15:22.937 [DEBUG] [Thread-19450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:15:22.937 [DEBUG] [Thread-19450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:15:22.955 [INFO] [Thread-19450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:15:22.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-25T22:15:22.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:15:23.823 [DEBUG] [Thread-19450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:15:23.823 [DEBUG] [Thread-19450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:15:23.874 [DEBUG] [Thread-19450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:15:23.874 [DEBUG] [Thread-19450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:15:23.886 [DEBUG] [Thread-19450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:15:23.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:15:23.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-25T22:15:23.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-25T22:15:23.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:15:23.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:15:23.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:15:23.928 [DEBUG] [Thread-19450] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:15:24.446 [DEBUG] [Thread-19452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:30.507 [DEBUG] [Thread-19453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:39.487 [DEBUG] [Thread-19454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:15:53.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:15:53.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-25T22:15:54.520 [DEBUG] [Thread-19455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 15, 43), 4.48, 74.37, 0.0, 15.39, 15.29, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:15:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:15:43
2025-12-25T22:15:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:15:54.948 [DEBUG] [Thread-19456] [transport.py] [_log()] starting thread (client mode): 0xb6b01b40
2025-12-25T22:15:54.948 [DEBUG] [Thread-19456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:15:54.968 [DEBUG] [Thread-19456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:15:54.968 [INFO] [Thread-19456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:15:54.969 [DEBUG] [Thread-19456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] client lang: <none>
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] server lang: <none>
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] kex follows: False
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] Compression: none
2025-12-25T22:15:54.970 [DEBUG] [Thread-19456] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:15:54.989 [DEBUG] [Thread-19456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:15:54.990 [DEBUG] [Thread-19456] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:15:54.990 [DEBUG] [Thread-19456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:15:54.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:15:54.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:15:54.992 [DEBUG] [Thread-19456] [transport.py] [_log()] userauth is OK
2025-12-25T22:15:54.992 [DEBUG] [Thread-19456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:15:54.992 [DEBUG] [Thread-19456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:15:54.992 [DEBUG] [Thread-19456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:15:54.992 [DEBUG] [Thread-19456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:15:55.016 [INFO] [Thread-19456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:15:55.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:15:55.672 [DEBUG] [Thread-19456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:15:55.672 [DEBUG] [Thread-19456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:15:55.672 [DEBUG] [Thread-19456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:15:55.713 [DEBUG] [Thread-19456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:15:55.714 [DEBUG] [Thread-19456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:15:55.716 [DEBUG] [Thread-19456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:15:55.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:15:55.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:15:55.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:15:55.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:15:55.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:15:55.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:15:55.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.844156 -999.00  +15.40   9.65     77  +11.50 1 1 1 1 1     0    0 3.43 -26.13 ZNESW 10.2 9.7 226.7 15.3 16.4 -22.1 16.3 -21.4 16.1 -20.2 16.4 -21.0
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.844156
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:15:55.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:15:43', tmtdew=4.48, humidity=74.37, cloud=0.0, wind=15.39, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:15:43', seeing=1.08, atlas_timestamp='2025-12-25T20:15:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:14:00')
2025-12-25T22:15:55.735 [DEBUG] [Thread-19456] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:15:55.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:15:55.822 [DEBUG] [Thread-19459] [transport.py] [_log()] starting thread (client mode): 0xb6bb8610
2025-12-25T22:15:55.822 [DEBUG] [Thread-19459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:15:55.837 [DEBUG] [Thread-19459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:15:55.837 [INFO] [Thread-19459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] client lang: <none>
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] server lang: <none>
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] kex follows: False
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:15:55.845 [DEBUG] [Thread-19459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:15:55.846 [DEBUG] [Thread-19459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:15:55.846 [DEBUG] [Thread-19459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:15:55.846 [DEBUG] [Thread-19459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:15:55.846 [DEBUG] [Thread-19459] [transport.py] [_log()] Compression: none
2025-12-25T22:15:55.846 [DEBUG] [Thread-19459] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:15:55.902 [DEBUG] [Thread-19459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:15:55.903 [DEBUG] [Thread-19459] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:15:55.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:15:55.904 [DEBUG] [Thread-19459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:15:55.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:15:55.960 [DEBUG] [Thread-19459] [transport.py] [_log()] userauth is OK
2025-12-25T22:15:55.960 [DEBUG] [Thread-19459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:15:55.960 [DEBUG] [Thread-19459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:15:55.961 [DEBUG] [Thread-19459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:15:55.961 [DEBUG] [Thread-19459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:15:55.986 [INFO] [Thread-19459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:15:55.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:15:55.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:15:56.619 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:56.621 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:15:56.809 [DEBUG] [Thread-19459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:15:56.809 [DEBUG] [Thread-19459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:15:56.857 [DEBUG] [Thread-19459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:15:56.857 [DEBUG] [Thread-19459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:15:56.867 [DEBUG] [Thread-19459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:15:56.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:15:56.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-25T22:15:56.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-25T22:15:56.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:15:56.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:15:56.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:15:56.904 [DEBUG] [Thread-19459] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:16:09.550 [DEBUG] [Thread-19461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:24.603 [DEBUG] [Thread-19462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:26.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:16:26.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:16:26.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:16:27.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 16, 15), 4.48, 74.39, 0.0, 14.22, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:16:27.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:16:15
2025-12-25T22:16:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:16:27.924 [DEBUG] [Thread-19463] [transport.py] [_log()] starting thread (client mode): 0xb6b7e560
2025-12-25T22:16:27.924 [DEBUG] [Thread-19463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:16:27.944 [DEBUG] [Thread-19463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:16:27.944 [INFO] [Thread-19463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:16:27.948 [DEBUG] [Thread-19463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:16:27.948 [DEBUG] [Thread-19463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:16:27.948 [DEBUG] [Thread-19463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] client lang: <none>
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] server lang: <none>
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] kex follows: False
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:16:27.949 [DEBUG] [Thread-19463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:16:27.950 [DEBUG] [Thread-19463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:16:27.950 [DEBUG] [Thread-19463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:16:27.950 [DEBUG] [Thread-19463] [transport.py] [_log()] Compression: none
2025-12-25T22:16:27.950 [DEBUG] [Thread-19463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:16:27.967 [DEBUG] [Thread-19463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:16:27.968 [DEBUG] [Thread-19463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:16:27.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:16:27.969 [DEBUG] [Thread-19463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:16:27.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:16:27.971 [DEBUG] [Thread-19463] [transport.py] [_log()] userauth is OK
2025-12-25T22:16:27.971 [DEBUG] [Thread-19463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:16:27.971 [DEBUG] [Thread-19463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:16:27.971 [DEBUG] [Thread-19463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:16:27.971 [DEBUG] [Thread-19463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:16:28.006 [INFO] [Thread-19463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:16:28.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:16:28.656 [DEBUG] [Thread-19463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:16:28.657 [DEBUG] [Thread-19463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:16:28.657 [DEBUG] [Thread-19463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:16:28.698 [DEBUG] [Thread-19463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:16:28.698 [DEBUG] [Thread-19463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:16:28.701 [DEBUG] [Thread-19463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:16:28.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:16:28.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:16:28.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:16:28.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:16:28.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:16:28.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:16:28.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:16:28.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:16:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:16:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.844503 -999.00  +15.40   7.48     77  +11.50 1 1 1 1 1     0    0 3.42 -26.57 ZNESW 4.3 7.5 242.9 10.2 16.4 -21.9 16.3 -21.5 16.1 -20.0 16.4 -21.1
2025-12-25T22:16:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:16:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:16:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.844503
2025-12-25T22:16:28.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:16:28.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:16:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:16:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:16:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:16:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:16:15', tmtdew=4.48, humidity=74.39, cloud=0.0, wind=14.22, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:16:15', seeing=1.05, atlas_timestamp='2025-12-25T20:16:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:14:00')
2025-12-25T22:16:28.729 [DEBUG] [Thread-19463] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:16:28.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-25T22:16:28.821 [DEBUG] [Thread-19466] [transport.py] [_log()] starting thread (client mode): 0xb6b7d030
2025-12-25T22:16:28.821 [DEBUG] [Thread-19466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:16:28.836 [DEBUG] [Thread-19466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:16:28.836 [INFO] [Thread-19466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:16:28.847 [DEBUG] [Thread-19466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:16:28.847 [DEBUG] [Thread-19466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:16:28.847 [DEBUG] [Thread-19466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:16:28.847 [DEBUG] [Thread-19466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:16:28.847 [DEBUG] [Thread-19466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] client lang: <none>
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] server lang: <none>
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] kex follows: False
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] Compression: none
2025-12-25T22:16:28.848 [DEBUG] [Thread-19466] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:16:28.904 [DEBUG] [Thread-19466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:16:28.905 [DEBUG] [Thread-19466] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:16:28.905 [DEBUG] [Thread-19466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:16:28.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:16:28.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:16:28.963 [DEBUG] [Thread-19466] [transport.py] [_log()] userauth is OK
2025-12-25T22:16:28.963 [DEBUG] [Thread-19466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:16:28.964 [DEBUG] [Thread-19466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:16:28.964 [DEBUG] [Thread-19466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:16:28.964 [DEBUG] [Thread-19466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:16:28.983 [INFO] [Thread-19466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:16:28.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-25T22:16:28.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:16:29.792 [DEBUG] [Thread-19466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:16:29.792 [DEBUG] [Thread-19466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:16:29.840 [DEBUG] [Thread-19466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:16:29.840 [DEBUG] [Thread-19466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:16:29.850 [DEBUG] [Thread-19466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:16:29.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:16:29.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-25T22:16:29.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:16:29.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:16:29.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:16:29.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:16:29.890 [DEBUG] [Thread-19466] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:16:30.573 [DEBUG] [Thread-19468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:39.639 [DEBUG] [Thread-19469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:54.686 [DEBUG] [Thread-19470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:56.822 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:56.823 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:16:59.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:16:59.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:16:59.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:17:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 16, 47), 4.47, 74.39, 0.0, 12.99, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:17:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:16:47
2025-12-25T22:17:00.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:17:00.888 [DEBUG] [Thread-19471] [transport.py] [_log()] starting thread (client mode): 0xb6b7fb20
2025-12-25T22:17:00.888 [DEBUG] [Thread-19471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:17:00.908 [DEBUG] [Thread-19471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:17:00.909 [INFO] [Thread-19471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:17:00.912 [DEBUG] [Thread-19471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] client lang: <none>
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] server lang: <none>
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] kex follows: False
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:17:00.913 [DEBUG] [Thread-19471] [transport.py] [_log()] Compression: none
2025-12-25T22:17:00.914 [DEBUG] [Thread-19471] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:17:00.932 [DEBUG] [Thread-19471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:17:00.932 [DEBUG] [Thread-19471] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:17:00.933 [DEBUG] [Thread-19471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:17:00.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:17:00.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:17:00.935 [DEBUG] [Thread-19471] [transport.py] [_log()] userauth is OK
2025-12-25T22:17:00.936 [DEBUG] [Thread-19471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:17:00.936 [DEBUG] [Thread-19471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:17:00.936 [DEBUG] [Thread-19471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:17:00.936 [DEBUG] [Thread-19471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:17:00.959 [INFO] [Thread-19471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:17:00.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:17:01.582 [DEBUG] [Thread-19471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:17:01.582 [DEBUG] [Thread-19471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:17:01.583 [DEBUG] [Thread-19471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:17:01.623 [DEBUG] [Thread-19471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:17:01.623 [DEBUG] [Thread-19471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:17:01.626 [DEBUG] [Thread-19471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:17:01.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:17:01.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:17:01.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:17:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:17:01.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:17:01.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:17:01.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:17:01.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:17:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:17:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.844850 -999.00  +15.40   7.16     77  +11.40 1 1 1 1 1     0    0 3.44 -27.87 ZNESW 9.7 7.2 211.0 11.6 16.4 -22.0 16.3 -21.5 16.1 -20.1 16.3 -21.0
2025-12-25T22:17:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:17:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:17:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.844850
2025-12-25T22:17:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:17:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:17:01.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:17:01.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:17:01.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:17:01.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:16:47', tmtdew=4.47, humidity=74.39, cloud=0.0, wind=12.99, 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-25T22:16:47', seeing=1.04, atlas_timestamp='2025-12-25T20:16:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:14:00')
2025-12-25T22:17:01.653 [DEBUG] [Thread-19471] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:17:01.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-25T22:17:09.717 [DEBUG] [Thread-19474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:17:24.765 [DEBUG] [Thread-19475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:17:30.630 [DEBUG] [Thread-19476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:17:39.801 [DEBUG] [Thread-19477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:17:54.841 [DEBUG] [Thread-19478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:17:57.024 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:17:57.025 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:09.873 [DEBUG] [Thread-19479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:24.905 [DEBUG] [Thread-19480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:30.684 [DEBUG] [Thread-19481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:39.934 [DEBUG] [Thread-19482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:54.968 [DEBUG] [Thread-19483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:57.227 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:57.228 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:18:57.716 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:07.993 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:10.006 [DEBUG] [Thread-19484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:12.079 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:15.541 [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-25T22:19:25.039 [DEBUG] [Thread-19485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:30.767 [DEBUG] [Thread-19486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:40.073 [DEBUG] [Thread-19487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:45.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:19:45.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:19:45.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:19:46.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 19, 27), 4.4, 74.99, 0.0, 10.54, 15.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:19:46.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:19:27
2025-12-25T22:19:46.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:19:46.566 [DEBUG] [Thread-19488] [transport.py] [_log()] starting thread (client mode): 0xb6b23760
2025-12-25T22:19:46.566 [DEBUG] [Thread-19488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:19:46.586 [DEBUG] [Thread-19488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:19:46.586 [INFO] [Thread-19488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:19:46.587 [DEBUG] [Thread-19488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] client lang: <none>
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] server lang: <none>
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] kex follows: False
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] Compression: none
2025-12-25T22:19:46.588 [DEBUG] [Thread-19488] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:19:46.599 [DEBUG] [Thread-19488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:19:46.600 [DEBUG] [Thread-19488] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:19:46.600 [DEBUG] [Thread-19488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:19:46.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:19:46.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:19:46.602 [DEBUG] [Thread-19488] [transport.py] [_log()] userauth is OK
2025-12-25T22:19:46.603 [DEBUG] [Thread-19488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:19:46.603 [DEBUG] [Thread-19488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:19:46.603 [DEBUG] [Thread-19488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:19:46.603 [DEBUG] [Thread-19488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:19:46.622 [INFO] [Thread-19488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:19:46.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:19:47.234 [DEBUG] [Thread-19488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:19:47.234 [DEBUG] [Thread-19488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:19:47.235 [DEBUG] [Thread-19488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:19:47.275 [DEBUG] [Thread-19488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:19:47.275 [DEBUG] [Thread-19488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:19:47.279 [DEBUG] [Thread-19488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:19:47.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:19:47.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:19:47.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:19:47.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:19:47.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:19:47.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:19:47.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:19:47.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:19:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:19:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.846933 -999.00  +15.30   3.30     77  +11.40 1 1 1 1 1     0    0 3.36 -25.86 ZNESW 4.5 3.3 191.4 8.6 16.3 -22.0 16.2 -21.5 16.0 -20.2 16.2 -20.8
2025-12-25T22:19:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:19:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:19:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.846933
2025-12-25T22:19:47.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:19:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:19:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:19:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:19:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:19:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:19:27', tmtdew=4.4, humidity=74.99, cloud=0.0, wind=10.54, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:19:28', seeing=1.15, atlas_timestamp='2025-12-25T20:19:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:17:00')
2025-12-25T22:19:47.304 [DEBUG] [Thread-19488] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:19:47.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:19:47.397 [DEBUG] [Thread-19491] [transport.py] [_log()] starting thread (client mode): 0xb6b7e4a0
2025-12-25T22:19:47.397 [DEBUG] [Thread-19491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:19:47.412 [DEBUG] [Thread-19491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:19:47.413 [INFO] [Thread-19491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:19:47.420 [DEBUG] [Thread-19491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:19:47.421 [DEBUG] [Thread-19491] [transport.py] [_log()] client lang: <none>
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] server lang: <none>
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] kex follows: False
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:19:47.422 [DEBUG] [Thread-19491] [transport.py] [_log()] Compression: none
2025-12-25T22:19:47.423 [DEBUG] [Thread-19491] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:19:47.483 [DEBUG] [Thread-19491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:19:47.483 [DEBUG] [Thread-19491] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:19:47.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:19:47.485 [DEBUG] [Thread-19491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:19:47.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:19:47.539 [DEBUG] [Thread-19491] [transport.py] [_log()] userauth is OK
2025-12-25T22:19:47.539 [DEBUG] [Thread-19491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:19:47.540 [DEBUG] [Thread-19491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:19:47.540 [DEBUG] [Thread-19491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:19:47.540 [DEBUG] [Thread-19491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:19:47.565 [INFO] [Thread-19491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:19:47.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-25T22:19:47.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:19:48.409 [DEBUG] [Thread-19491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:19:48.409 [DEBUG] [Thread-19491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:19:48.457 [DEBUG] [Thread-19491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:19:48.457 [DEBUG] [Thread-19491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:19:48.466 [DEBUG] [Thread-19491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:19:48.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:19:48.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:19:48.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:19:48.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:19:48.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:19:48.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:19:48.505 [DEBUG] [Thread-19491] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:19:55.104 [DEBUG] [Thread-19493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:57.428 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:19:57.429 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:10.152 [DEBUG] [Thread-19494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:18.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:20:18.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:20:18.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-25T22:20:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 19, 59), 4.44, 75.05, 0.0, 8.66, 15.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:20:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:19:59
2025-12-25T22:20:19.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:20:19.487 [DEBUG] [Thread-19495] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T22:20:19.487 [DEBUG] [Thread-19495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:20:19.508 [DEBUG] [Thread-19495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:20:19.508 [INFO] [Thread-19495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:20:19.511 [DEBUG] [Thread-19495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] client lang: <none>
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] server lang: <none>
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] kex follows: False
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:20:19.512 [DEBUG] [Thread-19495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:20:19.513 [DEBUG] [Thread-19495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:20:19.513 [DEBUG] [Thread-19495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:20:19.513 [DEBUG] [Thread-19495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:20:19.513 [DEBUG] [Thread-19495] [transport.py] [_log()] Compression: none
2025-12-25T22:20:19.513 [DEBUG] [Thread-19495] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:20:19.530 [DEBUG] [Thread-19495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:20:19.531 [DEBUG] [Thread-19495] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:20:19.531 [DEBUG] [Thread-19495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:20:19.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:20:19.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:20:19.533 [DEBUG] [Thread-19495] [transport.py] [_log()] userauth is OK
2025-12-25T22:20:19.533 [DEBUG] [Thread-19495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:20:19.534 [DEBUG] [Thread-19495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:20:19.534 [DEBUG] [Thread-19495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:20:19.534 [DEBUG] [Thread-19495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:20:19.558 [INFO] [Thread-19495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:20:19.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:20:20.180 [DEBUG] [Thread-19495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:20:20.181 [DEBUG] [Thread-19495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:20:20.181 [DEBUG] [Thread-19495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:20:20.222 [DEBUG] [Thread-19495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:20:20.222 [DEBUG] [Thread-19495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:20:20.224 [DEBUG] [Thread-19495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:20:20.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:20:20.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:20:20.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:20:20.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:20:20.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:20:20.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:20:20.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:20:20.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:20:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:20:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.846933 -999.00  +15.30   3.30     77  +11.40 1 1 1 1 1     0    0 3.36 -25.86 ZNESW 4.5 3.3 191.4 8.6 16.3 -22.0 16.2 -21.5 16.0 -20.2 16.2 -20.8
2025-12-25T22:20:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:20:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:20:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.846933
2025-12-25T22:20:20.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:20:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:20:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:20:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:20:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:20:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:19:59', tmtdew=4.44, humidity=75.05, cloud=0.0, wind=8.66, 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-25T22:20:00', seeing=1.15, atlas_timestamp='2025-12-25T20:19:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:17:00')
2025-12-25T22:20:20.245 [DEBUG] [Thread-19495] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:20:20.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-25T22:20:20.340 [DEBUG] [Thread-19498] [transport.py] [_log()] starting thread (client mode): 0xb6bb9960
2025-12-25T22:20:20.340 [DEBUG] [Thread-19498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:20:20.356 [DEBUG] [Thread-19498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:20:20.356 [INFO] [Thread-19498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:20:20.364 [DEBUG] [Thread-19498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:20:20.364 [DEBUG] [Thread-19498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:20:20.364 [DEBUG] [Thread-19498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:20:20.364 [DEBUG] [Thread-19498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:20.364 [DEBUG] [Thread-19498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] client lang: <none>
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] server lang: <none>
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] kex follows: False
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] Compression: none
2025-12-25T22:20:20.365 [DEBUG] [Thread-19498] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:20:20.423 [DEBUG] [Thread-19498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:20:20.423 [DEBUG] [Thread-19498] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:20:20.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:20:20.424 [DEBUG] [Thread-19498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:20:20.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:20:20.479 [DEBUG] [Thread-19498] [transport.py] [_log()] userauth is OK
2025-12-25T22:20:20.479 [DEBUG] [Thread-19498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:20:20.479 [DEBUG] [Thread-19498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:20:20.479 [DEBUG] [Thread-19498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:20:20.479 [DEBUG] [Thread-19498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:20:20.503 [INFO] [Thread-19498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:20:20.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-25T22:20:20.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:20:21.351 [DEBUG] [Thread-19498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:20:21.351 [DEBUG] [Thread-19498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:20:21.400 [DEBUG] [Thread-19498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:20:21.400 [DEBUG] [Thread-19498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:20:21.410 [DEBUG] [Thread-19498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:20:21.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:20: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')
2025-12-25T22:20:21.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-25T22:20:21.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:20:21.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:20:21.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:20:21.444 [DEBUG] [Thread-19498] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:20:25.189 [DEBUG] [Thread-19500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:30.840 [DEBUG] [Thread-19501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:40.238 [DEBUG] [Thread-19502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:20:51.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:20:51.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-25T22:20:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 20, 31), 4.45, 75.0, 0.0, 7.41, 15.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:20:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:20:31
2025-12-25T22:20:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:20:52.443 [DEBUG] [Thread-19503] [transport.py] [_log()] starting thread (client mode): 0xb6b22560
2025-12-25T22:20:52.443 [DEBUG] [Thread-19503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:20:52.465 [DEBUG] [Thread-19503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:20:52.465 [INFO] [Thread-19503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] client lang: <none>
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] server lang: <none>
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] kex follows: False
2025-12-25T22:20:52.468 [DEBUG] [Thread-19503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:20:52.469 [DEBUG] [Thread-19503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:20:52.469 [DEBUG] [Thread-19503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:20:52.469 [DEBUG] [Thread-19503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:20:52.469 [DEBUG] [Thread-19503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:20:52.469 [DEBUG] [Thread-19503] [transport.py] [_log()] Compression: none
2025-12-25T22:20:52.469 [DEBUG] [Thread-19503] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:20:52.478 [DEBUG] [Thread-19503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:20:52.478 [DEBUG] [Thread-19503] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:20:52.478 [DEBUG] [Thread-19503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:20:52.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:20:52.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:20:52.480 [DEBUG] [Thread-19503] [transport.py] [_log()] userauth is OK
2025-12-25T22:20:52.480 [DEBUG] [Thread-19503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:20:52.480 [DEBUG] [Thread-19503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:20:52.480 [DEBUG] [Thread-19503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:20:52.480 [DEBUG] [Thread-19503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:20:52.516 [INFO] [Thread-19503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:20:52.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:20:53.180 [DEBUG] [Thread-19503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:20:53.180 [DEBUG] [Thread-19503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:20:53.181 [DEBUG] [Thread-19503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:20:53.221 [DEBUG] [Thread-19503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:20:53.221 [DEBUG] [Thread-19503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:20:53.224 [DEBUG] [Thread-19503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:20:53.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:20:53.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:20:53.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:20:53.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:20:53.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:20:53.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:20:53.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:20:53.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:20:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:20:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.847280 -999.00  +15.30   6.01     77  +11.40 1 1 1 1 1     0    0 3.39 -24.74 ZNESW 5.2 6.0 203.5 13.0 16.3 -21.9 16.2 -21.4 16.0 -20.0 16.2 -21.0
2025-12-25T22:20:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:20:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:20:53.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.847280
2025-12-25T22:20:53.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:20:53.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:20:53.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:20:53.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:20:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:20:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:20:31', tmtdew=4.45, humidity=75.0, cloud=0.0, wind=7.41, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:20:32', seeing=0.97, atlas_timestamp='2025-12-25T20:20:04.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:17:00')
2025-12-25T22:20:53.249 [DEBUG] [Thread-19503] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:20:53.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-25T22:20:53.354 [DEBUG] [Thread-19506] [transport.py] [_log()] starting thread (client mode): 0xb6bf7730
2025-12-25T22:20:53.354 [DEBUG] [Thread-19506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:20:53.369 [DEBUG] [Thread-19506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:20:53.369 [INFO] [Thread-19506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:20:53.377 [DEBUG] [Thread-19506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:20:53.377 [DEBUG] [Thread-19506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:20:53.377 [DEBUG] [Thread-19506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] client lang: <none>
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] server lang: <none>
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] kex follows: False
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] Compression: none
2025-12-25T22:20:53.378 [DEBUG] [Thread-19506] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:20:53.435 [DEBUG] [Thread-19506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:20:53.435 [DEBUG] [Thread-19506] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:20:53.436 [DEBUG] [Thread-19506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:20:53.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:20:53.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:20:53.491 [DEBUG] [Thread-19506] [transport.py] [_log()] userauth is OK
2025-12-25T22:20:53.491 [DEBUG] [Thread-19506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:20:53.491 [DEBUG] [Thread-19506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:20:53.492 [DEBUG] [Thread-19506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:20:53.492 [DEBUG] [Thread-19506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:20:53.516 [INFO] [Thread-19506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:20:53.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:20:53.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:20:54.342 [DEBUG] [Thread-19506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:20:54.343 [DEBUG] [Thread-19506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:20:54.390 [DEBUG] [Thread-19506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:20:54.390 [DEBUG] [Thread-19506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:20:54.399 [DEBUG] [Thread-19506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:20:54.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:20:54.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-25T22:20:54.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:20:54.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:20:54.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:20:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:20:54.435 [DEBUG] [Thread-19506] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:20:55.273 [DEBUG] [Thread-19508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:57.628 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:20:57.630 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:10.327 [DEBUG] [Thread-19509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:24.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:21:24.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:21:24.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-25T22:21:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 21, 4), 4.43, 75.09, 0.0, 6.72, 15.16, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:21:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:21:04
2025-12-25T22:21:25.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:21:25.357 [DEBUG] [Thread-19510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:25.434 [DEBUG] [Thread-19511] [transport.py] [_log()] starting thread (client mode): 0xb6baa0e0
2025-12-25T22:21:25.434 [DEBUG] [Thread-19511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:21:25.455 [DEBUG] [Thread-19511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:21:25.455 [INFO] [Thread-19511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:25.458 [DEBUG] [Thread-19511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] client lang: <none>
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] server lang: <none>
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] kex follows: False
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] Compression: none
2025-12-25T22:21:25.459 [DEBUG] [Thread-19511] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:21:25.476 [DEBUG] [Thread-19511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:21:25.476 [DEBUG] [Thread-19511] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:21:25.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:21:25.477 [DEBUG] [Thread-19511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:21:25.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:21:25.479 [DEBUG] [Thread-19511] [transport.py] [_log()] userauth is OK
2025-12-25T22:21:25.479 [DEBUG] [Thread-19511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:21:25.479 [DEBUG] [Thread-19511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:21:25.479 [DEBUG] [Thread-19511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:21:25.479 [DEBUG] [Thread-19511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:21:25.502 [INFO] [Thread-19511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:21:25.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:21:26.175 [DEBUG] [Thread-19511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:21:26.176 [DEBUG] [Thread-19511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:21:26.176 [DEBUG] [Thread-19511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:21:26.217 [DEBUG] [Thread-19511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:21:26.217 [DEBUG] [Thread-19511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:21:26.219 [DEBUG] [Thread-19511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:21:26.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:21:26.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:21:26.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:21:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:21:26.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:21:26.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:21:26.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.847628 -999.00  +15.30   5.31     77  +11.40 1 1 1 1 1     0    0 3.43 -24.64 ZNESW 9.4 5.3 180.8 10.4 16.3 -22.0 16.2 -21.5 16.0 -20.0 16.2 -21.1
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.847628
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:21:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:21:04', tmtdew=4.43, humidity=75.09, cloud=0.0, wind=6.72, 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-25T22:21:04', seeing=1.22, atlas_timestamp='2025-12-25T20:20:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.08224999999999838, 0.12124999999999986, 0.16025000000000134, 0.13649999999999984, 0.06049999999999933, 0.1017500000000009, 0.11999999999999922, 0.13125000000000142, 0.08449999999999847, 0.0990000000000002, 0.14424999999999955, 0.1014999999999997, 0.11299999999999955, 0.10874999999999879, 0.11399999999999899, 0.10149999999999793, 0.0677500000000002, 0.1169999999999991, 0.1169999999999991, 0.08074999999999832, 0.1039999999999992, 0.16274999999999906, 0.10575000000000045, 0.11374999999999957, 0.08899999999999864, 0.08700000000000152, 0.1687499999999993, 0.21749999999999936, 0.1999999999999993, 0.18400000000000105, 0.20500000000000185, 0.13400000000000034, 0.15775000000000006], zp_timestamp='2025-12-25T20:17:00')
2025-12-25T22:21:26.238 [DEBUG] [Thread-19511] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:21:26.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:21:26.326 [DEBUG] [Thread-19514] [transport.py] [_log()] starting thread (client mode): 0xb6bf6110
2025-12-25T22:21:26.327 [DEBUG] [Thread-19514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:21:26.341 [DEBUG] [Thread-19514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:21:26.341 [INFO] [Thread-19514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:21:26.349 [DEBUG] [Thread-19514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:21:26.349 [DEBUG] [Thread-19514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:21:26.349 [DEBUG] [Thread-19514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] client lang: <none>
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] server lang: <none>
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] kex follows: False
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:21:26.350 [DEBUG] [Thread-19514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:21:26.351 [DEBUG] [Thread-19514] [transport.py] [_log()] Compression: none
2025-12-25T22:21:26.351 [DEBUG] [Thread-19514] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:21:26.407 [DEBUG] [Thread-19514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:21:26.407 [DEBUG] [Thread-19514] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:21:26.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:21:26.408 [DEBUG] [Thread-19514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:21:26.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:21:26.462 [DEBUG] [Thread-19514] [transport.py] [_log()] userauth is OK
2025-12-25T22:21:26.463 [DEBUG] [Thread-19514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:21:26.463 [DEBUG] [Thread-19514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:21:26.463 [DEBUG] [Thread-19514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:21:26.463 [DEBUG] [Thread-19514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:21:26.482 [INFO] [Thread-19514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:21:26.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:21:26.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:21:27.307 [DEBUG] [Thread-19514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:21:27.307 [DEBUG] [Thread-19514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:21:27.355 [DEBUG] [Thread-19514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:21:27.355 [DEBUG] [Thread-19514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:21:27.364 [DEBUG] [Thread-19514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:21:27.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:21:27.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-25T22:21:27.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-25T22:21:27.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:21:27.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:21:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:21:27.401 [DEBUG] [Thread-19514] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:21:30.895 [DEBUG] [Thread-19516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:40.389 [DEBUG] [Thread-19517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:55.435 [DEBUG] [Thread-19518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:21:57.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:21:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:21:57.831 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:57.832 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:21:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 21, 36), 4.39, 75.07, 0.0, 6.09, 15.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:21:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:21:36
2025-12-25T22:21:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:21:58.383 [DEBUG] [Thread-19519] [transport.py] [_log()] starting thread (client mode): 0xb6bf6f50
2025-12-25T22:21:58.383 [DEBUG] [Thread-19519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:21:58.403 [DEBUG] [Thread-19519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:21:58.403 [INFO] [Thread-19519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:21:58.406 [DEBUG] [Thread-19519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:21:58.406 [DEBUG] [Thread-19519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] client lang: <none>
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] server lang: <none>
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] kex follows: False
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:21:58.407 [DEBUG] [Thread-19519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:21:58.408 [DEBUG] [Thread-19519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:21:58.408 [DEBUG] [Thread-19519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:21:58.408 [DEBUG] [Thread-19519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:21:58.408 [DEBUG] [Thread-19519] [transport.py] [_log()] Compression: none
2025-12-25T22:21:58.408 [DEBUG] [Thread-19519] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:21:58.426 [DEBUG] [Thread-19519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:21:58.427 [DEBUG] [Thread-19519] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:21:58.428 [DEBUG] [Thread-19519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:21:58.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:21:58.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:21:58.430 [DEBUG] [Thread-19519] [transport.py] [_log()] userauth is OK
2025-12-25T22:21:58.430 [DEBUG] [Thread-19519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:21:58.430 [DEBUG] [Thread-19519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:21:58.430 [DEBUG] [Thread-19519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:21:58.431 [DEBUG] [Thread-19519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:21:58.454 [INFO] [Thread-19519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:21:58.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:21:59.043 [DEBUG] [Thread-19519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:21:59.043 [DEBUG] [Thread-19519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:21:59.043 [DEBUG] [Thread-19519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:21:59.084 [DEBUG] [Thread-19519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:21:59.085 [DEBUG] [Thread-19519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:21:59.086 [DEBUG] [Thread-19519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:21:59.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:21:59.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:21:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:21:59.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:21:59.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:21:59.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:21:59.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.847975 -999.00  +15.30   4.59     77  +11.40 1 1 1 1 1     0    0 3.39 -24.14 ZNESW 4.5 4.6 217.3 10.8 16.2 -22.0 16.1 -21.6 15.9 -20.1 16.2 -21.1
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.847975
2025-12-25T22:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:21:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:21:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:21:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:21:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:21:59.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:21:36', tmtdew=4.39, humidity=75.07, cloud=0.0, wind=6.09, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:21:36', seeing=1.42, atlas_timestamp='2025-12-25T20:21:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:20:00')
2025-12-25T22:21:59.104 [DEBUG] [Thread-19519] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:21:59.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-25T22:21:59.202 [DEBUG] [Thread-19522] [transport.py] [_log()] starting thread (client mode): 0xb6b7fe80
2025-12-25T22:21:59.202 [DEBUG] [Thread-19522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:21:59.217 [DEBUG] [Thread-19522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:21:59.217 [INFO] [Thread-19522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:21:59.224 [DEBUG] [Thread-19522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:21:59.224 [DEBUG] [Thread-19522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] client lang: <none>
2025-12-25T22:21:59.225 [DEBUG] [Thread-19522] [transport.py] [_log()] server lang: <none>
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] kex follows: False
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] Compression: none
2025-12-25T22:21:59.226 [DEBUG] [Thread-19522] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:21:59.282 [DEBUG] [Thread-19522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:21:59.283 [DEBUG] [Thread-19522] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:21:59.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:21:59.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:21:59.284 [DEBUG] [Thread-19522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:21:59.338 [DEBUG] [Thread-19522] [transport.py] [_log()] userauth is OK
2025-12-25T22:21:59.338 [DEBUG] [Thread-19522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:21:59.338 [DEBUG] [Thread-19522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:21:59.338 [DEBUG] [Thread-19522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:21:59.338 [DEBUG] [Thread-19522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:21:59.361 [INFO] [Thread-19522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:21:59.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-25T22:21:59.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:22:00.203 [DEBUG] [Thread-19522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:22:00.204 [DEBUG] [Thread-19522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:22:00.252 [DEBUG] [Thread-19522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:22:00.252 [DEBUG] [Thread-19522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:22:00.260 [DEBUG] [Thread-19522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:22:00.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:22:00.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')
2025-12-25T22:22:00.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-25T22:22:00.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:22:00.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:22:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:22:00.295 [DEBUG] [Thread-19522] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:22:10.465 [DEBUG] [Thread-19524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:22:25.514 [DEBUG] [Thread-19525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:22:30.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:22:30.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:22:30.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-25T22:22:30.949 [DEBUG] [Thread-19526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:22:31.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 22, 8), 4.36, 75.17, 0.0, 7.31, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:22:31.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:22:08
2025-12-25T22:22:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:22:31.344 [DEBUG] [Thread-19527] [transport.py] [_log()] starting thread (client mode): 0xb6bf5bd0
2025-12-25T22:22:31.344 [DEBUG] [Thread-19527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:22:31.363 [DEBUG] [Thread-19527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:22:31.364 [INFO] [Thread-19527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] client lang: <none>
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] server lang: <none>
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] kex follows: False
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:22:31.367 [DEBUG] [Thread-19527] [transport.py] [_log()] Compression: none
2025-12-25T22:22:31.368 [DEBUG] [Thread-19527] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:22:31.384 [DEBUG] [Thread-19527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:22:31.384 [DEBUG] [Thread-19527] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:22:31.384 [DEBUG] [Thread-19527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:22:31.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:22:31.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:22:31.384 [DEBUG] [Thread-19527] [transport.py] [_log()] userauth is OK
2025-12-25T22:22:31.384 [DEBUG] [Thread-19527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:22:31.384 [DEBUG] [Thread-19527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:22:31.385 [DEBUG] [Thread-19527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:22:31.385 [DEBUG] [Thread-19527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:22:31.393 [INFO] [Thread-19527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:22:31.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:22:32.022 [DEBUG] [Thread-19527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:22:32.022 [DEBUG] [Thread-19527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:22:32.022 [DEBUG] [Thread-19527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:22:32.063 [DEBUG] [Thread-19527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:22:32.063 [DEBUG] [Thread-19527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:22:32.065 [DEBUG] [Thread-19527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:22:32.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:22:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:22:32.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:22:32.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:22:32.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:22:32.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:22:32.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.848322 -999.00  +15.30   5.23     77  +11.40 1 1 1 1 1     0    0 3.46 -21.18 ZNESW 7.7 5.2 191.4 8.9 16.2 -22.0 16.1 -21.5 15.9 -20.1 16.2 -21.1
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.848322
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:22:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:22:08', tmtdew=4.36, humidity=75.17, cloud=0.0, wind=7.31, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:22:08', seeing=1.39, atlas_timestamp='2025-12-25T20:21:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:20:00')
2025-12-25T22:22:32.084 [DEBUG] [Thread-19527] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:22:32.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-25T22:22:32.168 [DEBUG] [Thread-19530] [transport.py] [_log()] starting thread (client mode): 0xb95b3a90
2025-12-25T22:22:32.168 [DEBUG] [Thread-19530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:22:32.183 [DEBUG] [Thread-19530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:22:32.183 [INFO] [Thread-19530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:22:32.190 [DEBUG] [Thread-19530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:22:32.190 [DEBUG] [Thread-19530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] client lang: <none>
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] server lang: <none>
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] kex follows: False
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] Compression: none
2025-12-25T22:22:32.191 [DEBUG] [Thread-19530] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:22:32.249 [DEBUG] [Thread-19530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:22:32.249 [DEBUG] [Thread-19530] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:22:32.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:22:32.249 [DEBUG] [Thread-19530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:22:32.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:22:32.306 [DEBUG] [Thread-19530] [transport.py] [_log()] userauth is OK
2025-12-25T22:22:32.306 [DEBUG] [Thread-19530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:22:32.306 [DEBUG] [Thread-19530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:22:32.306 [DEBUG] [Thread-19530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:22:32.306 [DEBUG] [Thread-19530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:22:32.324 [INFO] [Thread-19530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:22:32.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-25T22:22:32.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:22:33.158 [DEBUG] [Thread-19530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:22:33.158 [DEBUG] [Thread-19530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:22:33.205 [DEBUG] [Thread-19530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:22:33.205 [DEBUG] [Thread-19530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:22:33.214 [DEBUG] [Thread-19530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:22:33.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:22:33.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:22:33.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-25T22:22:33.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:22:33.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:22:33.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:22:33.250 [DEBUG] [Thread-19530] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:22:40.551 [DEBUG] [Thread-19532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:22:55.602 [DEBUG] [Thread-19533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:22:58.030 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:22:58.031 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:23:03.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:23:03.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-25T22:23:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 22, 40), 4.38, 75.1, 0.0, 13.04, 15.04, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:23:03.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:22:40
2025-12-25T22:23:04.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:23:04.264 [DEBUG] [Thread-19534] [transport.py] [_log()] starting thread (client mode): 0xb6b77df0
2025-12-25T22:23:04.264 [DEBUG] [Thread-19534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:23:04.283 [DEBUG] [Thread-19534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:23:04.283 [INFO] [Thread-19534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:23:04.286 [DEBUG] [Thread-19534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] client lang: <none>
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] server lang: <none>
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] kex follows: False
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] Compression: none
2025-12-25T22:23:04.287 [DEBUG] [Thread-19534] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:23:04.304 [DEBUG] [Thread-19534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:23:04.305 [DEBUG] [Thread-19534] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:23:04.305 [DEBUG] [Thread-19534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:23:04.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:23:04.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:23:04.349 [DEBUG] [Thread-19534] [transport.py] [_log()] userauth is OK
2025-12-25T22:23:04.350 [DEBUG] [Thread-19534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:23:04.350 [DEBUG] [Thread-19534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:23:04.350 [DEBUG] [Thread-19534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:23:04.350 [DEBUG] [Thread-19534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:23:04.382 [INFO] [Thread-19534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:23:04.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:23:05.059 [DEBUG] [Thread-19534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:23:05.059 [DEBUG] [Thread-19534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:23:05.060 [DEBUG] [Thread-19534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:23:05.100 [DEBUG] [Thread-19534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:23:05.100 [DEBUG] [Thread-19534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:23:05.104 [DEBUG] [Thread-19534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:23:05.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:23:05.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:23:05.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:23:05.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:23:05.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:23:05.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:23:05.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:23:05.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:23:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:23:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.849017 -999.00  +15.30  14.24     77  +11.30 1 1 1 1 1     0    0 3.50 -19.17 ZNESW 8.3 14.2 212.2 16.3 16.2 -22.0 16.1 -21.8 15.9 -20.1 16.2 -21.0
2025-12-25T22:23:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:23:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:23:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.849017
2025-12-25T22:23:05.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:23:05.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:23:05.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:23:05.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:23:05.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:23:05.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:22:40', tmtdew=4.38, humidity=75.1, cloud=0.0, wind=13.04, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:22:40', seeing=1.25, atlas_timestamp='2025-12-25T20:22:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:20:00')
2025-12-25T22:23:05.132 [DEBUG] [Thread-19534] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:23:05.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:23:05.227 [DEBUG] [Thread-19537] [transport.py] [_log()] starting thread (client mode): 0xb6baa470
2025-12-25T22:23:05.227 [DEBUG] [Thread-19537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:23:05.242 [DEBUG] [Thread-19537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:23:05.243 [INFO] [Thread-19537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:23:05.250 [DEBUG] [Thread-19537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] client lang: <none>
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] server lang: <none>
2025-12-25T22:23:05.251 [DEBUG] [Thread-19537] [transport.py] [_log()] kex follows: False
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] Compression: none
2025-12-25T22:23:05.252 [DEBUG] [Thread-19537] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:23:05.310 [DEBUG] [Thread-19537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:23:05.310 [DEBUG] [Thread-19537] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:23:05.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:23:05.311 [DEBUG] [Thread-19537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:23:05.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:23:05.367 [DEBUG] [Thread-19537] [transport.py] [_log()] userauth is OK
2025-12-25T22:23:05.367 [DEBUG] [Thread-19537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:23:05.367 [DEBUG] [Thread-19537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:23:05.367 [DEBUG] [Thread-19537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:23:05.367 [DEBUG] [Thread-19537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:23:05.386 [INFO] [Thread-19537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:23:05.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-25T22:23:05.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:23:06.212 [DEBUG] [Thread-19537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:23:06.212 [DEBUG] [Thread-19537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:23:06.260 [DEBUG] [Thread-19537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:23:06.260 [DEBUG] [Thread-19537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:23:06.270 [DEBUG] [Thread-19537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:23:06.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:23:06.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-25T22:23:06.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:23:06.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:23:06.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:23:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:23:06.306 [DEBUG] [Thread-19537] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:23:10.634 [DEBUG] [Thread-19539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:25.673 [DEBUG] [Thread-19540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:31.017 [DEBUG] [Thread-19541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:23:36.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:23:36.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-25T22:23:37.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 23, 12), 4.39, 75.04, 0.0, 12.81, 15.01, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:23:37.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:23:12
2025-12-25T22:23:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:23:37.314 [DEBUG] [Thread-19542] [transport.py] [_log()] starting thread (client mode): 0xb6b76920
2025-12-25T22:23:37.314 [DEBUG] [Thread-19542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:23:37.334 [DEBUG] [Thread-19542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:23:37.335 [INFO] [Thread-19542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:23:37.337 [DEBUG] [Thread-19542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] client lang: <none>
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] server lang: <none>
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] kex follows: False
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] Compression: none
2025-12-25T22:23:37.338 [DEBUG] [Thread-19542] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:23:37.352 [DEBUG] [Thread-19542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:23:37.352 [DEBUG] [Thread-19542] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:23:37.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:23:37.353 [DEBUG] [Thread-19542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:23:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:23:37.355 [DEBUG] [Thread-19542] [transport.py] [_log()] userauth is OK
2025-12-25T22:23:37.355 [DEBUG] [Thread-19542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:23:37.356 [DEBUG] [Thread-19542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:23:37.356 [DEBUG] [Thread-19542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:23:37.356 [DEBUG] [Thread-19542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:23:37.380 [INFO] [Thread-19542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:23:37.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:23:38.000 [DEBUG] [Thread-19542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:23:38.000 [DEBUG] [Thread-19542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:23:38.000 [DEBUG] [Thread-19542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:23:38.041 [DEBUG] [Thread-19542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:23:38.041 [DEBUG] [Thread-19542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:23:38.044 [DEBUG] [Thread-19542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:23:38.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:23:38.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:23:38.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:23:38.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:23:38.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:23:38.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:23:38.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:23:38.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:23:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:23:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.849364 -999.00  +15.30  15.64     76  +11.30 1 1 1 1 1     0    0 3.58 -18.32 ZNESW 7.7 15.6 218.0 20.0 16.2 -22.0 16.1 -21.6 15.9 -20.0 16.2 -21.0
2025-12-25T22:23:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:23:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:23:38.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.849364
2025-12-25T22:23:38.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:23:38.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:23:38.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:23:38.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:23:38.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:23:38.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:23:12', tmtdew=4.39, humidity=75.04, cloud=0.0, wind=12.81, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:23:12', seeing=1.22, atlas_timestamp='2025-12-25T20:23:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:20:00')
2025-12-25T22:23:38.072 [DEBUG] [Thread-19542] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:23:38.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:23:38.177 [DEBUG] [Thread-19545] [transport.py] [_log()] starting thread (client mode): 0xb6bf54e0
2025-12-25T22:23:38.177 [DEBUG] [Thread-19545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:23:38.197 [DEBUG] [Thread-19545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:23:38.197 [INFO] [Thread-19545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:23:38.204 [DEBUG] [Thread-19545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] client lang: <none>
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] server lang: <none>
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] kex follows: False
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:23:38.205 [DEBUG] [Thread-19545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:23:38.206 [DEBUG] [Thread-19545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:23:38.206 [DEBUG] [Thread-19545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:23:38.206 [DEBUG] [Thread-19545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:23:38.206 [DEBUG] [Thread-19545] [transport.py] [_log()] Compression: none
2025-12-25T22:23:38.206 [DEBUG] [Thread-19545] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:23:38.266 [DEBUG] [Thread-19545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:23:38.266 [DEBUG] [Thread-19545] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:23:38.267 [DEBUG] [Thread-19545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:23:38.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:23:38.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:23:38.329 [DEBUG] [Thread-19545] [transport.py] [_log()] userauth is OK
2025-12-25T22:23:38.329 [DEBUG] [Thread-19545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:23:38.329 [DEBUG] [Thread-19545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:23:38.329 [DEBUG] [Thread-19545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:23:38.329 [DEBUG] [Thread-19545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:23:38.348 [INFO] [Thread-19545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:23:38.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-25T22:23:38.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:23:39.202 [DEBUG] [Thread-19545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:23:39.202 [DEBUG] [Thread-19545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:23:39.250 [DEBUG] [Thread-19545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:23:39.251 [DEBUG] [Thread-19545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:23:39.259 [DEBUG] [Thread-19545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:23:39.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:23:39.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-25T22:23:39.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-25T22:23:39.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:23:39.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:23:39.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:23:39.293 [DEBUG] [Thread-19545] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:23:40.710 [DEBUG] [Thread-19547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:55.759 [DEBUG] [Thread-19548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:58.232 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:23:58.233 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:09.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:24:09.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:24:09.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-25T22:24:10.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 23, 44), 4.42, 74.62, 0.0, 10.85, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:24:10.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:23:44
2025-12-25T22:24:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:24:10.294 [DEBUG] [Thread-19549] [transport.py] [_log()] starting thread (client mode): 0xb6bb5f00
2025-12-25T22:24:10.294 [DEBUG] [Thread-19549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:24:10.313 [DEBUG] [Thread-19549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:24:10.314 [INFO] [Thread-19549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:10.317 [DEBUG] [Thread-19549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] client lang: <none>
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] server lang: <none>
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] kex follows: False
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] Compression: none
2025-12-25T22:24:10.318 [DEBUG] [Thread-19549] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:24:10.335 [DEBUG] [Thread-19549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:24:10.336 [DEBUG] [Thread-19549] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:24:10.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:24:10.337 [DEBUG] [Thread-19549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:24:10.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:24:10.339 [DEBUG] [Thread-19549] [transport.py] [_log()] userauth is OK
2025-12-25T22:24:10.339 [DEBUG] [Thread-19549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:24:10.339 [DEBUG] [Thread-19549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:24:10.339 [DEBUG] [Thread-19549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:24:10.339 [DEBUG] [Thread-19549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:24:10.375 [INFO] [Thread-19549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:24:10.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:24:10.795 [DEBUG] [Thread-19551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:11.030 [DEBUG] [Thread-19549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:24:11.030 [DEBUG] [Thread-19549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:24:11.031 [DEBUG] [Thread-19549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:24:11.071 [DEBUG] [Thread-19549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:24:11.071 [DEBUG] [Thread-19549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:24:11.075 [DEBUG] [Thread-19549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:24:11.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:24:11.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:24:11.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:24:11.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:24:11.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:24:11.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:24:11.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:24:11.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:24:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:24:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.849711 -999.00  +15.30  10.64     77  +11.30 1 1 1 1 1     0    0 3.46 -17.88 ZNESW 9.0 10.6 214.6 13.9 16.2 -22.0 16.1 -21.6 15.9 -20.0 16.2 -21.1
2025-12-25T22:24:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:24:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:24:11.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.849711
2025-12-25T22:24:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:24:11.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:24:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:24:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:24:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:24:11.101 [DEBUG] [Thread-19549] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:24:11.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:23:44', tmtdew=4.42, humidity=74.62, cloud=0.0, wind=10.85, 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-25T22:23:44', seeing=1.22, atlas_timestamp='2025-12-25T20:23:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:20:00')
2025-12-25T22:24:11.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-25T22:24:11.199 [DEBUG] [Thread-19553] [transport.py] [_log()] starting thread (client mode): 0xb6bb7df0
2025-12-25T22:24:11.199 [DEBUG] [Thread-19553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:24:11.214 [DEBUG] [Thread-19553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:24:11.214 [INFO] [Thread-19553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:24:11.221 [DEBUG] [Thread-19553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:24:11.221 [DEBUG] [Thread-19553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] client lang: <none>
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] server lang: <none>
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] kex follows: False
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] Compression: none
2025-12-25T22:24:11.222 [DEBUG] [Thread-19553] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:24:11.280 [DEBUG] [Thread-19553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:24:11.280 [DEBUG] [Thread-19553] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:24:11.280 [DEBUG] [Thread-19553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:24:11.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:24:11.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:24:11.338 [DEBUG] [Thread-19553] [transport.py] [_log()] userauth is OK
2025-12-25T22:24:11.338 [DEBUG] [Thread-19553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:24:11.338 [DEBUG] [Thread-19553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:24:11.338 [DEBUG] [Thread-19553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:24:11.338 [DEBUG] [Thread-19553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:24:11.352 [INFO] [Thread-19553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:24:11.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:24:11.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:24:12.169 [DEBUG] [Thread-19553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:24:12.170 [DEBUG] [Thread-19553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:24:12.217 [DEBUG] [Thread-19553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:24:12.217 [DEBUG] [Thread-19553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:24:12.227 [DEBUG] [Thread-19553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:24:12.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:24:12.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:24:12.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-25T22:24:12.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:24:12.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:24:12.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:24:12.264 [DEBUG] [Thread-19553] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:24:25.826 [DEBUG] [Thread-19555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:31.069 [DEBUG] [Thread-19556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:40.872 [DEBUG] [Thread-19557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:42.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:24:42.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:24:42.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-25T22:24:42.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 24, 16), 4.43, 74.59, 0.0, 11.31, 15.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:24:42.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:24:16
2025-12-25T22:24:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:24:43.251 [DEBUG] [Thread-19558] [transport.py] [_log()] starting thread (client mode): 0xb6b77ac0
2025-12-25T22:24:43.251 [DEBUG] [Thread-19558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:24:43.270 [DEBUG] [Thread-19558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:24:43.270 [INFO] [Thread-19558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] client lang: <none>
2025-12-25T22:24:43.273 [DEBUG] [Thread-19558] [transport.py] [_log()] server lang: <none>
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] kex follows: False
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] Compression: none
2025-12-25T22:24:43.274 [DEBUG] [Thread-19558] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:24:43.289 [DEBUG] [Thread-19558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:24:43.289 [DEBUG] [Thread-19558] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:24:43.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:24:43.290 [DEBUG] [Thread-19558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:24:43.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:24:43.292 [DEBUG] [Thread-19558] [transport.py] [_log()] userauth is OK
2025-12-25T22:24:43.293 [DEBUG] [Thread-19558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:24:43.293 [DEBUG] [Thread-19558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:24:43.293 [DEBUG] [Thread-19558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:24:43.293 [DEBUG] [Thread-19558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:24:43.317 [INFO] [Thread-19558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:24:43.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:24:43.936 [DEBUG] [Thread-19558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:24:43.936 [DEBUG] [Thread-19558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:24:43.936 [DEBUG] [Thread-19558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:24:43.977 [DEBUG] [Thread-19558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:24:43.977 [DEBUG] [Thread-19558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:24:43.980 [DEBUG] [Thread-19558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:24:43.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:24:43.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:24:43.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:24:43.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:24:43.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:24:43.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:24:43.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.850058 -999.00  +15.30   9.11     77  +11.30 1 1 1 1 1     0    0 3.57 -17.64 ZNESW 8.2 9.1 206.7 15.1 16.2 -22.0 16.1 -21.6 15.8 -20.0 16.2 -21.1
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.850058
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:24:43.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:24:16', tmtdew=4.43, humidity=74.59, cloud=0.0, wind=11.31, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:24:17', seeing=1.62, atlas_timestamp='2025-12-25T20:24:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:20:00')
2025-12-25T22:24:43.997 [DEBUG] [Thread-19558] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:24:44.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-25T22:24:44.081 [DEBUG] [Thread-19561] [transport.py] [_log()] starting thread (client mode): 0xb95b0250
2025-12-25T22:24:44.081 [DEBUG] [Thread-19561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:24:44.095 [DEBUG] [Thread-19561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:24:44.095 [INFO] [Thread-19561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] client lang: <none>
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] server lang: <none>
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] kex follows: False
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:24:44.102 [DEBUG] [Thread-19561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:24:44.103 [DEBUG] [Thread-19561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:24:44.103 [DEBUG] [Thread-19561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:24:44.103 [DEBUG] [Thread-19561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:24:44.103 [DEBUG] [Thread-19561] [transport.py] [_log()] Compression: none
2025-12-25T22:24:44.103 [DEBUG] [Thread-19561] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:24:44.160 [DEBUG] [Thread-19561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:24:44.160 [DEBUG] [Thread-19561] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:24:44.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:24:44.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:24:44.161 [DEBUG] [Thread-19561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:24:44.217 [DEBUG] [Thread-19561] [transport.py] [_log()] userauth is OK
2025-12-25T22:24:44.217 [DEBUG] [Thread-19561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:24:44.217 [DEBUG] [Thread-19561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:24:44.218 [DEBUG] [Thread-19561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:24:44.218 [DEBUG] [Thread-19561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:24:44.236 [INFO] [Thread-19561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:24:44.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-25T22:24:44.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:24:45.089 [DEBUG] [Thread-19561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:24:45.090 [DEBUG] [Thread-19561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:24:45.137 [DEBUG] [Thread-19561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:24:45.137 [DEBUG] [Thread-19561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:24:45.147 [DEBUG] [Thread-19561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:24:45.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:24:45.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-25T22:24:45.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-25T22:24:45.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:24:45.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:24:45.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:24:45.183 [DEBUG] [Thread-19561] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:24:55.902 [DEBUG] [Thread-19563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:58.435 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:24:58.436 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:10.951 [DEBUG] [Thread-19564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:13.143 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:25:15.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:25:15.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-25T22:25:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 24, 48), 4.49, 74.55, 0.0, 13.55, 15.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:25:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:24:48
2025-12-25T22:25:16.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:25:16.169 [DEBUG] [Thread-19565] [transport.py] [_log()] starting thread (client mode): 0xb6bb5150
2025-12-25T22:25:16.170 [DEBUG] [Thread-19565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:25:16.190 [DEBUG] [Thread-19565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:25:16.190 [INFO] [Thread-19565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:25:16.193 [DEBUG] [Thread-19565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:25:16.193 [DEBUG] [Thread-19565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:25:16.193 [DEBUG] [Thread-19565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] client lang: <none>
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] server lang: <none>
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] kex follows: False
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] Compression: none
2025-12-25T22:25:16.194 [DEBUG] [Thread-19565] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:25:16.209 [DEBUG] [Thread-19565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:25:16.209 [DEBUG] [Thread-19565] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:25:16.209 [DEBUG] [Thread-19565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:25:16.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:25:16.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:25:16.210 [DEBUG] [Thread-19565] [transport.py] [_log()] userauth is OK
2025-12-25T22:25:16.210 [DEBUG] [Thread-19565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:25:16.210 [DEBUG] [Thread-19565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:25:16.210 [DEBUG] [Thread-19565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:25:16.210 [DEBUG] [Thread-19565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:25:16.226 [INFO] [Thread-19565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:25:16.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:25:17.251 [DEBUG] [Thread-19565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:25:17.251 [DEBUG] [Thread-19565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:25:17.252 [DEBUG] [Thread-19565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:25:17.292 [DEBUG] [Thread-19565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:25:17.292 [DEBUG] [Thread-19565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:25:17.296 [DEBUG] [Thread-19565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:25:17.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:25:17.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:25:17.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:25:17.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:25:17.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:25:17.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:25:17.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:25:17.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:25:17.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:25:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.850405 -999.00  +15.30   5.73     76  +11.30 1 1 1 1 1     0    0 3.54 -16.03 ZNESW 5.5 5.7 231.2 15.0 16.2 -22.0 16.1 -21.4 15.9 -20.1 16.2 -21.1
2025-12-25T22:25:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:25:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:25:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.850405
2025-12-25T22:25:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:25:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:25:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:25:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:25:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:25:17.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:24:48', tmtdew=4.49, humidity=74.55, cloud=0.0, wind=13.55, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:24:49', seeing=1.2, atlas_timestamp='2025-12-25T20:24:34.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:23:00')
2025-12-25T22:25:17.322 [DEBUG] [Thread-19565] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:25:17.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-25T22:25:17.417 [DEBUG] [Thread-19568] [transport.py] [_log()] starting thread (client mode): 0xb6baa5f0
2025-12-25T22:25:17.417 [DEBUG] [Thread-19568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:25:17.432 [DEBUG] [Thread-19568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:25:17.432 [INFO] [Thread-19568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:25:17.439 [DEBUG] [Thread-19568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] client lang: <none>
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] server lang: <none>
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] kex follows: False
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] Compression: none
2025-12-25T22:25:17.440 [DEBUG] [Thread-19568] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:25:17.498 [DEBUG] [Thread-19568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:25:17.499 [DEBUG] [Thread-19568] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:25:17.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:25:17.500 [DEBUG] [Thread-19568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:25:17.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:25:17.555 [DEBUG] [Thread-19568] [transport.py] [_log()] userauth is OK
2025-12-25T22:25:17.555 [DEBUG] [Thread-19568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:25:17.555 [DEBUG] [Thread-19568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:25:17.555 [DEBUG] [Thread-19568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:25:17.555 [DEBUG] [Thread-19568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:25:17.574 [INFO] [Thread-19568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:25:17.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-25T22:25:17.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:25:18.400 [DEBUG] [Thread-19568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:25:18.401 [DEBUG] [Thread-19568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:25:18.450 [DEBUG] [Thread-19568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:25:18.450 [DEBUG] [Thread-19568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:25:18.460 [DEBUG] [Thread-19568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:25:18.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:25:18.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-25T22:25: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-25T22:25:18.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:25:18.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:25:18.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:25:18.498 [DEBUG] [Thread-19568] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:25:25.981 [DEBUG] [Thread-19570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:31.126 [DEBUG] [Thread-19571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:41.041 [DEBUG] [Thread-19572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:48.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:25:48.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:25:48.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-25T22:25:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 25, 20), 4.49, 74.54, 0.0, 13.91, 15.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:25:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:25:20
2025-12-25T22:25:49.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:25:49.514 [DEBUG] [Thread-19573] [transport.py] [_log()] starting thread (client mode): 0xb6b771f0
2025-12-25T22:25:49.514 [DEBUG] [Thread-19573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:25:49.534 [DEBUG] [Thread-19573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:25:49.534 [INFO] [Thread-19573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:25:49.537 [DEBUG] [Thread-19573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] client lang: <none>
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] server lang: <none>
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] kex follows: False
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] Compression: none
2025-12-25T22:25:49.538 [DEBUG] [Thread-19573] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:25:49.556 [DEBUG] [Thread-19573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:25:49.556 [DEBUG] [Thread-19573] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:25:49.556 [DEBUG] [Thread-19573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:25:49.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:25:49.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:25:49.557 [DEBUG] [Thread-19573] [transport.py] [_log()] userauth is OK
2025-12-25T22:25:49.557 [DEBUG] [Thread-19573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:25:49.557 [DEBUG] [Thread-19573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:25:49.557 [DEBUG] [Thread-19573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:25:49.557 [DEBUG] [Thread-19573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:25:49.583 [INFO] [Thread-19573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:25:49.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:25:50.240 [DEBUG] [Thread-19573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:25:50.240 [DEBUG] [Thread-19573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:25:50.240 [DEBUG] [Thread-19573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:25:50.282 [DEBUG] [Thread-19573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:25:50.282 [DEBUG] [Thread-19573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:25:50.284 [DEBUG] [Thread-19573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:25:50.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:25:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:25:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:25:50.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:25:50.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:25:50.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:25:50.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:25:50.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.850753 -999.00  +15.30   3.77     76  +11.30 1 1 1 1 1     0    0 3.55 -16.43 ZNESW 6.1 3.8 176.7 10.4 16.2 -22.0 16.1 -21.5 15.9 -20.1 16.2 -20.9
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.850753
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:25:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:25:20', tmtdew=4.49, humidity=74.54, cloud=0.0, wind=13.91, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:25:21', seeing=1.2, atlas_timestamp='2025-12-25T20:25:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:23:00')
2025-12-25T22:25:50.305 [DEBUG] [Thread-19573] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:25:50.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-25T22:25:50.390 [DEBUG] [Thread-19576] [transport.py] [_log()] starting thread (client mode): 0xb6b75f30
2025-12-25T22:25:50.390 [DEBUG] [Thread-19576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:25:50.405 [DEBUG] [Thread-19576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:25:50.405 [INFO] [Thread-19576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:25:50.412 [DEBUG] [Thread-19576] [transport.py] [_log()] client lang: <none>
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] server lang: <none>
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] kex follows: False
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] Compression: none
2025-12-25T22:25:50.413 [DEBUG] [Thread-19576] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:25:50.468 [DEBUG] [Thread-19576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:25:50.468 [DEBUG] [Thread-19576] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:25:50.468 [DEBUG] [Thread-19576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:25:50.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:25:50.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:25:50.525 [DEBUG] [Thread-19576] [transport.py] [_log()] userauth is OK
2025-12-25T22:25:50.525 [DEBUG] [Thread-19576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:25:50.525 [DEBUG] [Thread-19576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:25:50.526 [DEBUG] [Thread-19576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:25:50.526 [DEBUG] [Thread-19576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:25:50.540 [INFO] [Thread-19576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:25:50.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-25T22:25:50.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:25:51.376 [DEBUG] [Thread-19576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:25:51.376 [DEBUG] [Thread-19576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:25:51.424 [DEBUG] [Thread-19576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:25:51.424 [DEBUG] [Thread-19576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:25:51.433 [DEBUG] [Thread-19576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:25:51.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:25: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-25T22:25:51.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:25:51.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:25:51.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:25:51.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:25:51.470 [DEBUG] [Thread-19576] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:25:56.074 [DEBUG] [Thread-19578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:58.636 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:25:58.637 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:11.126 [DEBUG] [Thread-19579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:21.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:26:21.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:26:21.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-25T22:26:22.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 25, 52), 4.53, 74.35, 0.0, 10.87, 15.09, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:26:22.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:25:52
2025-12-25T22:26:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:26:22.447 [DEBUG] [Thread-19580] [transport.py] [_log()] starting thread (client mode): 0xb6bb6a10
2025-12-25T22:26:22.447 [DEBUG] [Thread-19580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:26:22.468 [DEBUG] [Thread-19580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:26:22.468 [INFO] [Thread-19580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] client lang: <none>
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] server lang: <none>
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] kex follows: False
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] Compression: none
2025-12-25T22:26:22.471 [DEBUG] [Thread-19580] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:26:22.491 [DEBUG] [Thread-19580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:26:22.491 [DEBUG] [Thread-19580] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:26:22.492 [DEBUG] [Thread-19580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:26:22.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:26:22.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:26:22.533 [DEBUG] [Thread-19580] [transport.py] [_log()] userauth is OK
2025-12-25T22:26:22.533 [DEBUG] [Thread-19580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:26:22.533 [DEBUG] [Thread-19580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:26:22.533 [DEBUG] [Thread-19580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:26:22.534 [DEBUG] [Thread-19580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:26:22.572 [INFO] [Thread-19580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:26:22.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:26:23.222 [DEBUG] [Thread-19580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:26:23.222 [DEBUG] [Thread-19580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:26:23.223 [DEBUG] [Thread-19580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:26:23.262 [DEBUG] [Thread-19580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:26:23.262 [DEBUG] [Thread-19580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:26:23.264 [DEBUG] [Thread-19580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:26:23.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:26:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:26:23.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:26:23.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:26:23.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:26:23.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:26:23.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.851447 -999.00  +15.30  10.05     76  +11.20 1 1 1 1 1     0    0 3.66 -13.24 ZNESW 11.0 10.1 211.0 12.5 16.2 -22.0 16.1 -21.6 15.9 -20.1 16.1 -21.0
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.851447
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:26:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:25:52', tmtdew=4.53, humidity=74.35, cloud=0.0, wind=10.87, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:25:53', seeing=1.42, atlas_timestamp='2025-12-25T20:26:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:23:00')
2025-12-25T22:26:23.282 [DEBUG] [Thread-19580] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:26:23.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-25T22:26:23.366 [DEBUG] [Thread-19583] [transport.py] [_log()] starting thread (client mode): 0xb6bb5a80
2025-12-25T22:26:23.366 [DEBUG] [Thread-19583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:26:23.381 [DEBUG] [Thread-19583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:26:23.381 [INFO] [Thread-19583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] client lang: <none>
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] server lang: <none>
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] kex follows: False
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] Compression: none
2025-12-25T22:26:23.389 [DEBUG] [Thread-19583] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:26:23.448 [DEBUG] [Thread-19583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:26:23.448 [DEBUG] [Thread-19583] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:26:23.448 [DEBUG] [Thread-19583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:26:23.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:26:23.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:26:23.505 [DEBUG] [Thread-19583] [transport.py] [_log()] userauth is OK
2025-12-25T22:26:23.505 [DEBUG] [Thread-19583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:26:23.505 [DEBUG] [Thread-19583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:26:23.505 [DEBUG] [Thread-19583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:26:23.505 [DEBUG] [Thread-19583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:26:23.519 [INFO] [Thread-19583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:26:23.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-25T22:26:23.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:26:24.380 [DEBUG] [Thread-19583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:26:24.380 [DEBUG] [Thread-19583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:26:24.427 [DEBUG] [Thread-19583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:26:24.427 [DEBUG] [Thread-19583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:26:24.435 [DEBUG] [Thread-19583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:26:24.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:26:24.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:26:24.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-25T22:26:24.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:26:24.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:26:24.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:26:24.466 [DEBUG] [Thread-19583] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:26:26.162 [DEBUG] [Thread-19585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:31.219 [DEBUG] [Thread-19586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:41.217 [DEBUG] [Thread-19587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:54.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:26:54.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:26:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:26:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 26, 24), 4.54, 74.3, 0.0, 11.7, 15.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:26:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:26:24
2025-12-25T22:26:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:26:55.443 [DEBUG] [Thread-19588] [transport.py] [_log()] starting thread (client mode): 0xb95b02e0
2025-12-25T22:26:55.443 [DEBUG] [Thread-19588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:26:55.464 [DEBUG] [Thread-19588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:26:55.464 [INFO] [Thread-19588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:26:55.467 [DEBUG] [Thread-19588] [transport.py] [_log()] client lang: <none>
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] server lang: <none>
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] kex follows: False
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] Compression: none
2025-12-25T22:26:55.468 [DEBUG] [Thread-19588] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:26:55.478 [DEBUG] [Thread-19588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:26:55.478 [DEBUG] [Thread-19588] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:26:55.479 [DEBUG] [Thread-19588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:26:55.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:26:55.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:26:55.481 [DEBUG] [Thread-19588] [transport.py] [_log()] userauth is OK
2025-12-25T22:26:55.481 [DEBUG] [Thread-19588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:26:55.481 [DEBUG] [Thread-19588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:26:55.481 [DEBUG] [Thread-19588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:26:55.481 [DEBUG] [Thread-19588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:26:55.498 [INFO] [Thread-19588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:26:55.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:26:56.074 [DEBUG] [Thread-19588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:26:56.075 [DEBUG] [Thread-19588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:26:56.075 [DEBUG] [Thread-19588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:26:56.115 [DEBUG] [Thread-19588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:26:56.115 [DEBUG] [Thread-19588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:26:56.118 [DEBUG] [Thread-19588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:26:56.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:26:56.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:26:56.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:26:56.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:26:56.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:26:56.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:26:56.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:26:56.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:26:56.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:26:56.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.851794 -999.00  +15.30   8.65     76  +11.30 1 1 1 1 1     0    0 3.64 -13.14 ZNESW 10.0 8.7 202.6 13.1 16.2 -21.9 16.1 -21.4 15.9 -20.0 16.1 -21.1
2025-12-25T22:26:56.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:26:56.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:26:56.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.851794
2025-12-25T22:26:56.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:26:56.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:26:56.147 [DEBUG] [Thread-19588] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:26:56.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:26:56.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:26:56.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:26:56.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:26:24', tmtdew=4.54, humidity=74.3, cloud=0.0, wind=11.7, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:26:25', seeing=1.61, atlas_timestamp='2025-12-25T20:26:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:23:00')
2025-12-25T22:26:56.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-25T22:26:56.251 [DEBUG] [Thread-19591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:56.253 [DEBUG] [Thread-19592] [transport.py] [_log()] starting thread (client mode): 0xb6b60a90
2025-12-25T22:26:56.253 [DEBUG] [Thread-19592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:26:56.268 [DEBUG] [Thread-19592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:26:56.268 [INFO] [Thread-19592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:26:56.275 [DEBUG] [Thread-19592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:26:56.275 [DEBUG] [Thread-19592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:26:56.275 [DEBUG] [Thread-19592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:26:56.275 [DEBUG] [Thread-19592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:56.275 [DEBUG] [Thread-19592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] client lang: <none>
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] server lang: <none>
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] kex follows: False
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:26:56.276 [DEBUG] [Thread-19592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:26:56.277 [DEBUG] [Thread-19592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:26:56.277 [DEBUG] [Thread-19592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:26:56.277 [DEBUG] [Thread-19592] [transport.py] [_log()] Compression: none
2025-12-25T22:26:56.277 [DEBUG] [Thread-19592] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:26:56.334 [DEBUG] [Thread-19592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:26:56.335 [DEBUG] [Thread-19592] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:26:56.335 [DEBUG] [Thread-19592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:26:56.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:26:56.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:26:56.394 [DEBUG] [Thread-19592] [transport.py] [_log()] userauth is OK
2025-12-25T22:26:56.394 [DEBUG] [Thread-19592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:26:56.394 [DEBUG] [Thread-19592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:26:56.394 [DEBUG] [Thread-19592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:26:56.394 [DEBUG] [Thread-19592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:26:56.413 [INFO] [Thread-19592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:26:56.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:26:56.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:26:57.249 [DEBUG] [Thread-19592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:26:57.250 [DEBUG] [Thread-19592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:26:57.298 [DEBUG] [Thread-19592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:26:57.298 [DEBUG] [Thread-19592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:26:57.307 [DEBUG] [Thread-19592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:26:57.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:26:57.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-25T22:26:57.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-25T22:26:57.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:26:57.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:26:57.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:26:57.344 [DEBUG] [Thread-19592] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:26:58.840 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:26:58.841 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:11.286 [DEBUG] [Thread-19594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:26.321 [DEBUG] [Thread-19595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:27.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:27:27.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:27:27.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-25T22:27:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 26, 56), 4.61, 74.22, 0.0, 13.89, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:27:28.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:26:56
2025-12-25T22:27:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:27:28.332 [DEBUG] [Thread-19596] [transport.py] [_log()] starting thread (client mode): 0xb6b77b20
2025-12-25T22:27:28.332 [DEBUG] [Thread-19596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:27:28.354 [DEBUG] [Thread-19596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:27:28.354 [INFO] [Thread-19596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:27:28.357 [DEBUG] [Thread-19596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:27:28.357 [DEBUG] [Thread-19596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] client lang: <none>
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] server lang: <none>
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] kex follows: False
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:27:28.358 [DEBUG] [Thread-19596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:27:28.359 [DEBUG] [Thread-19596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:27:28.359 [DEBUG] [Thread-19596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:27:28.359 [DEBUG] [Thread-19596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:27:28.359 [DEBUG] [Thread-19596] [transport.py] [_log()] Compression: none
2025-12-25T22:27:28.359 [DEBUG] [Thread-19596] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:27:28.380 [DEBUG] [Thread-19596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:27:28.380 [DEBUG] [Thread-19596] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:27:28.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:27:28.381 [DEBUG] [Thread-19596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:27:28.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:27:28.384 [DEBUG] [Thread-19596] [transport.py] [_log()] userauth is OK
2025-12-25T22:27:28.384 [DEBUG] [Thread-19596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:27:28.384 [DEBUG] [Thread-19596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:27:28.384 [DEBUG] [Thread-19596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:27:28.384 [DEBUG] [Thread-19596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:27:28.419 [INFO] [Thread-19596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:27:28.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:27:29.090 [DEBUG] [Thread-19596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:27:29.091 [DEBUG] [Thread-19596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:27:29.091 [DEBUG] [Thread-19596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:27:29.132 [DEBUG] [Thread-19596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:27:29.132 [DEBUG] [Thread-19596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:27:29.135 [DEBUG] [Thread-19596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:27:29.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:27:29.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:27:29.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:27:29.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:27:29.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:27:29.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:27:29.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:27:29.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:27:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:27:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.852142 -999.00  +15.30   5.65     76  +11.20 1 1 1 1 1     0    0 3.66 -12.22 ZNESW 11.0 5.7 192.9 12.2 16.2 -22.0 16.1 -21.4 15.8 -20.0 16.1 -21.0
2025-12-25T22:27:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:27:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:27:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.852142
2025-12-25T22:27:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:27:29.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:27:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:27:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:27:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:27:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:26:56', tmtdew=4.61, humidity=74.22, cloud=0.0, wind=13.89, 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-25T22:26:57', seeing=1.06, atlas_timestamp='2025-12-25T20:27:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.07225000000000037, 0.12925000000000075, 0.1797500000000003, 0.10449999999999982, 0.08750000000000036, 0.151250000000001, 0.09299999999999997, 0.1542500000000011, 0.08549999999999969, 0.07900000000000063, 0.14925000000000033, 0.09500000000000064, 0.14400000000000013, 0.10524999999999984, 0.1509999999999998, 0.10149999999999793, 0.08525000000000027, 0.12349999999999994, 0.07599999999999874, 0.08924999999999983, 0.129999999999999, 0.1767499999999984, 0.12325000000000053, 0.10975000000000001, 0.11099999999999888, 0.125, 0.18875000000000064, 0.19299999999999962, 0.22000000000000064, 0.17600000000000016, 0.24450000000000216, 0.1850000000000005, 0.16274999999999906], zp_timestamp='2025-12-25T20:23:00')
2025-12-25T22:27:29.159 [DEBUG] [Thread-19596] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:27:29.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-25T22:27:29.250 [DEBUG] [Thread-19599] [transport.py] [_log()] starting thread (client mode): 0xb6b02b90
2025-12-25T22:27:29.250 [DEBUG] [Thread-19599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:27:29.265 [DEBUG] [Thread-19599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:27:29.265 [INFO] [Thread-19599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:27:29.272 [DEBUG] [Thread-19599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:27:29.272 [DEBUG] [Thread-19599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:27:29.272 [DEBUG] [Thread-19599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:27:29.272 [DEBUG] [Thread-19599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] client lang: <none>
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] server lang: <none>
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] kex follows: False
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:27:29.273 [DEBUG] [Thread-19599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:27:29.274 [DEBUG] [Thread-19599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:27:29.274 [DEBUG] [Thread-19599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:27:29.274 [DEBUG] [Thread-19599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:27:29.274 [DEBUG] [Thread-19599] [transport.py] [_log()] Compression: none
2025-12-25T22:27:29.274 [DEBUG] [Thread-19599] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:27:29.329 [DEBUG] [Thread-19599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:27:29.330 [DEBUG] [Thread-19599] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:27:29.331 [DEBUG] [Thread-19599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:27:29.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:27:29.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:27:29.385 [DEBUG] [Thread-19599] [transport.py] [_log()] userauth is OK
2025-12-25T22:27:29.386 [DEBUG] [Thread-19599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:27:29.386 [DEBUG] [Thread-19599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:27:29.386 [DEBUG] [Thread-19599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:27:29.386 [DEBUG] [Thread-19599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:27:29.406 [INFO] [Thread-19599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:27:29.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:27:29.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:27:30.221 [DEBUG] [Thread-19599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:27:30.221 [DEBUG] [Thread-19599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:27:30.268 [DEBUG] [Thread-19599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:27:30.268 [DEBUG] [Thread-19599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:27:30.276 [DEBUG] [Thread-19599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:27:30.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:27:30.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-25T22:27:30.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-25T22:27:30.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:27:30.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:27:30.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:27:30.308 [DEBUG] [Thread-19599] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:27:31.276 [DEBUG] [Thread-19601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:41.355 [DEBUG] [Thread-19602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:56.404 [DEBUG] [Thread-19603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:59.040 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:27:59.041 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:28:00.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:28:00.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:28:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 27, 28), 4.63, 74.11, 0.0, 11.7, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:28:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:27:28
2025-12-25T22:28:01.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:28:01.296 [DEBUG] [Thread-19604] [transport.py] [_log()] starting thread (client mode): 0xb95b32e0
2025-12-25T22:28:01.296 [DEBUG] [Thread-19604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:28:01.316 [DEBUG] [Thread-19604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:28:01.316 [INFO] [Thread-19604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] client lang: <none>
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] server lang: <none>
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] kex follows: False
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] Compression: none
2025-12-25T22:28:01.320 [DEBUG] [Thread-19604] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:28:01.338 [DEBUG] [Thread-19604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:28:01.339 [DEBUG] [Thread-19604] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:28:01.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:28:01.340 [DEBUG] [Thread-19604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:28:01.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:28:01.342 [DEBUG] [Thread-19604] [transport.py] [_log()] userauth is OK
2025-12-25T22:28:01.342 [DEBUG] [Thread-19604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:28:01.343 [DEBUG] [Thread-19604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:28:01.343 [DEBUG] [Thread-19604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:28:01.343 [DEBUG] [Thread-19604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:28:01.378 [INFO] [Thread-19604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:28:01.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:28:02.047 [DEBUG] [Thread-19604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:28:02.047 [DEBUG] [Thread-19604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:28:02.047 [DEBUG] [Thread-19604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:28:02.088 [DEBUG] [Thread-19604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:28:02.088 [DEBUG] [Thread-19604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:28:02.090 [DEBUG] [Thread-19604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:28:02.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:28:02.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:28:02.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:28:02.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:28:02.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:28:02.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:28:02.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:28:02.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.852489 -999.00  +15.30   6.23     76  +11.20 1 1 1 1 1     0    0 3.72 -11.42 ZNESW 7.1 6.2 223.0 15.4 16.2 -22.1 16.1 -21.4 15.8 -20.0 16.1 -21.1
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.852489
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:28:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:27:28', tmtdew=4.63, humidity=74.11, cloud=0.0, wind=11.7, 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-25T22:27:29', seeing=1.06, atlas_timestamp='2025-12-25T20:27:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.05025000000000013, 0.0782500000000006, 0.151250000000001, 0.1064999999999987, 0.07900000000000063, 0.1042500000000004, 0.07199999999999918, 0.14725000000000144, 0.07249999999999979, 0.06099999999999994, 0.1322499999999991, 0.04299999999999926, 0.11500000000000021, 0.08924999999999805, 0.1039999999999992, 0.06400000000000006, 0.06225000000000058, 0.07750000000000057, 0.06949999999999967, 0.07124999999999915, 0.08499999999999908, 0.12074999999999925, 0.1022500000000015, 0.10724999999999874, 0.05599999999999916, 0.06550000000000011, 0.18124999999999858, 0.15649999999999942, 0.19750000000000156, 0.1930000000000014, 0.18600000000000172, 0.13750000000000107, 0.09574999999999889], zp_timestamp='2025-12-25T20:26:00')
2025-12-25T22:28:02.109 [DEBUG] [Thread-19604] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:28: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-25T22:28:02.193 [DEBUG] [Thread-19607] [transport.py] [_log()] starting thread (client mode): 0xb6bf4640
2025-12-25T22:28:02.193 [DEBUG] [Thread-19607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:28:02.208 [DEBUG] [Thread-19607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:28:02.208 [INFO] [Thread-19607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:28:02.215 [DEBUG] [Thread-19607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] client lang: <none>
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] server lang: <none>
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] kex follows: False
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] Compression: none
2025-12-25T22:28:02.216 [DEBUG] [Thread-19607] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:28:02.276 [DEBUG] [Thread-19607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:28:02.276 [DEBUG] [Thread-19607] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:28:02.276 [DEBUG] [Thread-19607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:28:02.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:28:02.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:28:02.333 [DEBUG] [Thread-19607] [transport.py] [_log()] userauth is OK
2025-12-25T22:28:02.333 [DEBUG] [Thread-19607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:28:02.333 [DEBUG] [Thread-19607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:28:02.333 [DEBUG] [Thread-19607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:28:02.333 [DEBUG] [Thread-19607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:28:02.350 [INFO] [Thread-19607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:28:02.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-25T22:28:02.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:28:03.775 [DEBUG] [Thread-19607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:28:03.775 [DEBUG] [Thread-19607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:28:03.823 [DEBUG] [Thread-19607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:28:03.823 [DEBUG] [Thread-19607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:28:03.832 [DEBUG] [Thread-19607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:28:03.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:28: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-25T22:28:03.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-25T22:28:03.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:28:03.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:28:03.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:28:03.869 [DEBUG] [Thread-19607] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:28:11.439 [DEBUG] [Thread-19609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:26.489 [DEBUG] [Thread-19610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:31.333 [DEBUG] [Thread-19611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:33.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:28:33.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:28:33.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-25T22:28:34.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 28, 1), 4.64, 73.56, 0.0, 12.72, 15.14, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:28:34.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:28:01
2025-12-25T22:28:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:28:34.950 [DEBUG] [Thread-19612] [transport.py] [_log()] starting thread (client mode): 0xb95b0f40
2025-12-25T22:28:34.950 [DEBUG] [Thread-19612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:28:34.968 [DEBUG] [Thread-19612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:28:34.968 [INFO] [Thread-19612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:28:34.971 [DEBUG] [Thread-19612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:28:34.971 [DEBUG] [Thread-19612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:28:34.971 [DEBUG] [Thread-19612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:28:34.971 [DEBUG] [Thread-19612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:34.971 [DEBUG] [Thread-19612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:34.971 [DEBUG] [Thread-19612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] client lang: <none>
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] server lang: <none>
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] kex follows: False
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] Compression: none
2025-12-25T22:28:34.972 [DEBUG] [Thread-19612] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:28:34.987 [DEBUG] [Thread-19612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:28:34.987 [DEBUG] [Thread-19612] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:28:34.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:28:34.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:28:34.987 [DEBUG] [Thread-19612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:28:34.988 [DEBUG] [Thread-19612] [transport.py] [_log()] userauth is OK
2025-12-25T22:28:34.988 [DEBUG] [Thread-19612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:28:34.988 [DEBUG] [Thread-19612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:28:34.988 [DEBUG] [Thread-19612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:28:34.988 [DEBUG] [Thread-19612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:28:35.004 [INFO] [Thread-19612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:28:35.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:28:35.612 [DEBUG] [Thread-19612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:28:35.612 [DEBUG] [Thread-19612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:28:35.612 [DEBUG] [Thread-19612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:28:35.653 [DEBUG] [Thread-19612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:28:35.653 [DEBUG] [Thread-19612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:28:35.655 [DEBUG] [Thread-19612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:28:35.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:28:35.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:28:35.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:28:35.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:28:35.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:28:35.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:28:35.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.852836 -999.00  +15.30   8.76     76  +11.20 1 1 1 1 1     0    0 3.75 -10.48 ZNESW 10.9 8.8 213.2 12.5 16.2 -22.1 -999.0 -999.0 15.8 -20.2 16.1 -21.1
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.852836
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:28:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:28:01', tmtdew=4.64, humidity=73.56, cloud=0.0, wind=12.72, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:28:33', seeing=1.18, atlas_timestamp='2025-12-25T20:28:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.05025000000000013, 0.0782500000000006, 0.151250000000001, 0.1064999999999987, 0.07900000000000063, 0.1042500000000004, 0.07199999999999918, 0.14725000000000144, 0.07249999999999979, 0.06099999999999994, 0.1322499999999991, 0.04299999999999926, 0.11500000000000021, 0.08924999999999805, 0.1039999999999992, 0.06400000000000006, 0.06225000000000058, 0.07750000000000057, 0.06949999999999967, 0.07124999999999915, 0.08499999999999908, 0.12074999999999925, 0.1022500000000015, 0.10724999999999874, 0.05599999999999916, 0.06550000000000011, 0.18124999999999858, 0.15649999999999942, 0.19750000000000156, 0.1930000000000014, 0.18600000000000172, 0.13750000000000107, 0.09574999999999889], zp_timestamp='2025-12-25T20:26:00')
2025-12-25T22:28:35.674 [DEBUG] [Thread-19612] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:28:35.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-25T22:28:35.757 [DEBUG] [Thread-19615] [transport.py] [_log()] starting thread (client mode): 0xb6b7e500
2025-12-25T22:28:35.757 [DEBUG] [Thread-19615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:28:35.771 [DEBUG] [Thread-19615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:28:35.771 [INFO] [Thread-19615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:28:35.778 [DEBUG] [Thread-19615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] client lang: <none>
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] server lang: <none>
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] kex follows: False
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:28:35.779 [DEBUG] [Thread-19615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:28:35.780 [DEBUG] [Thread-19615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:28:35.780 [DEBUG] [Thread-19615] [transport.py] [_log()] Compression: none
2025-12-25T22:28:35.780 [DEBUG] [Thread-19615] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:28:35.837 [DEBUG] [Thread-19615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:28:35.837 [DEBUG] [Thread-19615] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:28:35.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:28:35.838 [DEBUG] [Thread-19615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:28:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:28:35.893 [DEBUG] [Thread-19615] [transport.py] [_log()] userauth is OK
2025-12-25T22:28:35.893 [DEBUG] [Thread-19615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:28:35.893 [DEBUG] [Thread-19615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:28:35.893 [DEBUG] [Thread-19615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:28:35.893 [DEBUG] [Thread-19615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:28:35.915 [INFO] [Thread-19615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:28:35.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:28:35.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:28:36.746 [DEBUG] [Thread-19615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:28:36.746 [DEBUG] [Thread-19615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:28:36.794 [DEBUG] [Thread-19615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:28:36.794 [DEBUG] [Thread-19615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:28:36.802 [DEBUG] [Thread-19615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:28:36.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:28:36.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-25T22:28:36.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-25T22:28:36.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:28:36.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:28:36.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:28:36.833 [DEBUG] [Thread-19615] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:28:41.519 [DEBUG] [Thread-19617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:56.570 [DEBUG] [Thread-19618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:59.243 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:28:59.244 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:06.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:29:06.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:29:06.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-25T22:29:07.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 28, 33), 4.64, 73.54, 0.0, 12.42, 15.11, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:29:07.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:28:33
2025-12-25T22:29:07.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:29:07.884 [DEBUG] [Thread-19619] [transport.py] [_log()] starting thread (client mode): 0xb6b746a0
2025-12-25T22:29:07.884 [DEBUG] [Thread-19619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:29:07.904 [DEBUG] [Thread-19619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:29:07.904 [INFO] [Thread-19619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:29:07.907 [DEBUG] [Thread-19619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] client lang: <none>
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] server lang: <none>
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] kex follows: False
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] Compression: none
2025-12-25T22:29:07.908 [DEBUG] [Thread-19619] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:29:07.926 [DEBUG] [Thread-19619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:29:07.926 [DEBUG] [Thread-19619] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:29:07.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:29:07.927 [DEBUG] [Thread-19619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:29:07.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:29:07.929 [DEBUG] [Thread-19619] [transport.py] [_log()] userauth is OK
2025-12-25T22:29:07.930 [DEBUG] [Thread-19619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:29:07.930 [DEBUG] [Thread-19619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:29:07.930 [DEBUG] [Thread-19619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:29:07.930 [DEBUG] [Thread-19619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:29:07.949 [INFO] [Thread-19619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:29:07.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:29:08.542 [DEBUG] [Thread-19619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:29:08.543 [DEBUG] [Thread-19619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:29:08.543 [DEBUG] [Thread-19619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:29:08.584 [DEBUG] [Thread-19619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:29:08.584 [DEBUG] [Thread-19619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:29:08.587 [DEBUG] [Thread-19619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:29:08.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:29:08.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:29:08.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:29:08.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:29:08.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:29:08.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:29:08.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:29:08.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:29:08.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:29:08.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.853183 -999.00  +15.30   3.90     77  +11.30 1 1 1 1 1     0    0 3.79 -10.48 ZNESW 9.0 3.9 195.3 13.2 16.1 -22.0 16.0 -21.5 15.8 -20.2 16.1 -21.3
2025-12-25T22:29:08.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:29:08.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:29:08.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.853183
2025-12-25T22:29:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:29:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:29:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:29:08.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:29:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:29:08.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:28:33', tmtdew=4.64, humidity=73.54, cloud=0.0, wind=12.42, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:29:05', seeing=1.53, atlas_timestamp='2025-12-25T20:28:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.05025000000000013, 0.0782500000000006, 0.151250000000001, 0.1064999999999987, 0.07900000000000063, 0.1042500000000004, 0.07199999999999918, 0.14725000000000144, 0.07249999999999979, 0.06099999999999994, 0.1322499999999991, 0.04299999999999926, 0.11500000000000021, 0.08924999999999805, 0.1039999999999992, 0.06400000000000006, 0.06225000000000058, 0.07750000000000057, 0.06949999999999967, 0.07124999999999915, 0.08499999999999908, 0.12074999999999925, 0.1022500000000015, 0.10724999999999874, 0.05599999999999916, 0.06550000000000011, 0.18124999999999858, 0.15649999999999942, 0.19750000000000156, 0.1930000000000014, 0.18600000000000172, 0.13750000000000107, 0.09574999999999889], zp_timestamp='2025-12-25T20:26:00')
2025-12-25T22:29:08.606 [DEBUG] [Thread-19619] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:29:08.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-25T22:29:08.699 [DEBUG] [Thread-19622] [transport.py] [_log()] starting thread (client mode): 0xb6b75c60
2025-12-25T22:29:08.699 [DEBUG] [Thread-19622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:29:08.714 [DEBUG] [Thread-19622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:29:08.714 [INFO] [Thread-19622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:29:08.722 [DEBUG] [Thread-19622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] client lang: <none>
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] server lang: <none>
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] kex follows: False
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] Compression: none
2025-12-25T22:29:08.723 [DEBUG] [Thread-19622] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:29:08.781 [DEBUG] [Thread-19622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:29:08.782 [DEBUG] [Thread-19622] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:29:08.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:29:08.783 [DEBUG] [Thread-19622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:29:08.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:29:08.838 [DEBUG] [Thread-19622] [transport.py] [_log()] userauth is OK
2025-12-25T22:29:08.838 [DEBUG] [Thread-19622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:29:08.838 [DEBUG] [Thread-19622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:29:08.838 [DEBUG] [Thread-19622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:29:08.838 [DEBUG] [Thread-19622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:29:08.857 [INFO] [Thread-19622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:29:08.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-25T22:29:08.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:29:09.660 [DEBUG] [Thread-19622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:29:09.661 [DEBUG] [Thread-19622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:29:09.708 [DEBUG] [Thread-19622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:29:09.708 [DEBUG] [Thread-19622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:29:09.717 [DEBUG] [Thread-19622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:29:09.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:29:09.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-25T22:29:09.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-25T22:29:09.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:29:09.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:29:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:29:09.755 [DEBUG] [Thread-19622] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:29:11.605 [DEBUG] [Thread-19624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:26.657 [DEBUG] [Thread-19625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:31.402 [DEBUG] [Thread-19626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:39.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:29:39.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:29:39.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:29:40.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 29, 5), 4.65, 73.47, 0.0, 12.74, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:29:40.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:29:05
2025-12-25T22:29:40.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:29:40.822 [DEBUG] [Thread-19627] [transport.py] [_log()] starting thread (client mode): 0xb6babc10
2025-12-25T22:29:40.822 [DEBUG] [Thread-19627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:29:40.842 [DEBUG] [Thread-19627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:29:40.842 [INFO] [Thread-19627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] client lang: <none>
2025-12-25T22:29:40.843 [DEBUG] [Thread-19627] [transport.py] [_log()] server lang: <none>
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] kex follows: False
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] Compression: none
2025-12-25T22:29:40.844 [DEBUG] [Thread-19627] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:29:40.850 [DEBUG] [Thread-19627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:29:40.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:29:40.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] userauth is OK
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:29:40.851 [DEBUG] [Thread-19627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:29:40.878 [INFO] [Thread-19627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:29:40.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:29:41.499 [DEBUG] [Thread-19627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:29:41.499 [DEBUG] [Thread-19627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:29:41.499 [DEBUG] [Thread-19627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:29:41.539 [DEBUG] [Thread-19627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:29:41.540 [DEBUG] [Thread-19627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:29:41.542 [DEBUG] [Thread-19627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:29:41.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:29:41.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:29:41.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:29:41.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:29:41.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:29:41.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.853183 -999.00  +15.30   3.90     77  +11.30 1 1 1 1 1     0    0 3.79 -10.48 ZNESW 9.0 3.9 195.3 13.2 16.1 -22.0 16.0 -21.5 15.8 -20.2 16.1 -21.3
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:29:41.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.853183
2025-12-25T22:29:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:29:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:29:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:29:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:29:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:29:41.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:29:05', tmtdew=4.65, humidity=73.47, cloud=0.0, wind=12.74, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:29:37', seeing=1.73, atlas_timestamp='2025-12-25T20:28:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.05025000000000013, 0.0782500000000006, 0.151250000000001, 0.1064999999999987, 0.07900000000000063, 0.1042500000000004, 0.07199999999999918, 0.14725000000000144, 0.07249999999999979, 0.06099999999999994, 0.1322499999999991, 0.04299999999999926, 0.11500000000000021, 0.08924999999999805, 0.1039999999999992, 0.06400000000000006, 0.06225000000000058, 0.07750000000000057, 0.06949999999999967, 0.07124999999999915, 0.08499999999999908, 0.12074999999999925, 0.1022500000000015, 0.10724999999999874, 0.05599999999999916, 0.06550000000000011, 0.18124999999999858, 0.15649999999999942, 0.19750000000000156, 0.1930000000000014, 0.18600000000000172, 0.13750000000000107, 0.09574999999999889], zp_timestamp='2025-12-25T20:26:00')
2025-12-25T22:29:41.560 [DEBUG] [Thread-19627] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:29:41.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-25T22:29:41.643 [DEBUG] [Thread-19630] [transport.py] [_log()] starting thread (client mode): 0xb6b00e20
2025-12-25T22:29:41.643 [DEBUG] [Thread-19630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:29:41.659 [DEBUG] [Thread-19630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:29:41.659 [INFO] [Thread-19630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] client lang: <none>
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] server lang: <none>
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] kex follows: False
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:29:41.666 [DEBUG] [Thread-19630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:29:41.667 [DEBUG] [Thread-19630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:29:41.667 [DEBUG] [Thread-19630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:29:41.667 [DEBUG] [Thread-19630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:29:41.667 [DEBUG] [Thread-19630] [transport.py] [_log()] Compression: none
2025-12-25T22:29:41.667 [DEBUG] [Thread-19630] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:29:41.692 [DEBUG] [Thread-19632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:41.723 [DEBUG] [Thread-19630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:29:41.724 [DEBUG] [Thread-19630] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:29:41.724 [DEBUG] [Thread-19630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:29:41.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:29:41.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:29:41.781 [DEBUG] [Thread-19630] [transport.py] [_log()] userauth is OK
2025-12-25T22:29:41.781 [DEBUG] [Thread-19630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:29:41.781 [DEBUG] [Thread-19630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:29:41.781 [DEBUG] [Thread-19630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:29:41.781 [DEBUG] [Thread-19630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:29:41.795 [INFO] [Thread-19630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:29:41.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-25T22:29:41.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:29:42.619 [DEBUG] [Thread-19630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:29:42.619 [DEBUG] [Thread-19630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:29:42.666 [DEBUG] [Thread-19630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:29:42.666 [DEBUG] [Thread-19630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:29:42.675 [DEBUG] [Thread-19630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:29:42.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:29:42.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-25T22:29:42.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-25T22:29:42.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:29:42.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:29:42.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:29:42.707 [DEBUG] [Thread-19630] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:29:56.734 [DEBUG] [Thread-19633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:59.444 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:29:59.445 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:11.770 [DEBUG] [Thread-19634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:12.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:30:12.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:30:12.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-25T22:30:13.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 30, 9), 4.63, 73.87, 0.0, 12.46, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:30:13.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:30:09
2025-12-25T22:30:13.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:30:13.698 [DEBUG] [Thread-19635] [transport.py] [_log()] starting thread (client mode): 0xb6b23b50
2025-12-25T22:30:13.698 [DEBUG] [Thread-19635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:30:13.719 [DEBUG] [Thread-19635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:30:13.719 [INFO] [Thread-19635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:30:13.720 [DEBUG] [Thread-19635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:30:13.720 [DEBUG] [Thread-19635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:30:13.720 [DEBUG] [Thread-19635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] client lang: <none>
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] server lang: <none>
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] kex follows: False
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] Compression: none
2025-12-25T22:30:13.721 [DEBUG] [Thread-19635] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:30:13.738 [DEBUG] [Thread-19635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:30:13.739 [DEBUG] [Thread-19635] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:30:13.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:30:13.740 [DEBUG] [Thread-19635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:30:13.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:30:13.742 [DEBUG] [Thread-19635] [transport.py] [_log()] userauth is OK
2025-12-25T22:30:13.742 [DEBUG] [Thread-19635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:30:13.742 [DEBUG] [Thread-19635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:30:13.742 [DEBUG] [Thread-19635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:30:13.742 [DEBUG] [Thread-19635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:30:13.767 [INFO] [Thread-19635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:30:13.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:30:14.438 [DEBUG] [Thread-19635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:30:14.439 [DEBUG] [Thread-19635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:30:14.439 [DEBUG] [Thread-19635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:30:14.480 [DEBUG] [Thread-19635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:30:14.480 [DEBUG] [Thread-19635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:30:14.483 [DEBUG] [Thread-19635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:30:14.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:30:14.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:30:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:30:14.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:30:14.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:30:14.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:30:14.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:30:14.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:30:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:30:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.853883 -999.00  +15.10   9.48     78  +11.30 1 1 1 1 1     0    0 3.69 -10.02 ZNESW 9.1 9.5 242.2 16.0 16.1 -22.1 16.0 -21.7 15.8 -20.3 16.0 -21.2
2025-12-25T22:30:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:30:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:30:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.853883
2025-12-25T22:30:14.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:30:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:30:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:30:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:30:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:30:14.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:30:09', tmtdew=4.63, humidity=73.87, cloud=0.0, wind=12.46, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:30:10', seeing=1.41, atlas_timestamp='2025-12-25T20:29:35.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.05025000000000013, 0.0782500000000006, 0.151250000000001, 0.1064999999999987, 0.07900000000000063, 0.1042500000000004, 0.07199999999999918, 0.14725000000000144, 0.07249999999999979, 0.06099999999999994, 0.1322499999999991, 0.04299999999999926, 0.11500000000000021, 0.08924999999999805, 0.1039999999999992, 0.06400000000000006, 0.06225000000000058, 0.07750000000000057, 0.06949999999999967, 0.07124999999999915, 0.08499999999999908, 0.12074999999999925, 0.1022500000000015, 0.10724999999999874, 0.05599999999999916, 0.06550000000000011, 0.18124999999999858, 0.15649999999999942, 0.19750000000000156, 0.1930000000000014, 0.18600000000000172, 0.13750000000000107, 0.09574999999999889], zp_timestamp='2025-12-25T20:26:00')
2025-12-25T22:30:14.511 [DEBUG] [Thread-19635] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:30:14.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-25T22:30:14.603 [DEBUG] [Thread-19638] [transport.py] [_log()] starting thread (client mode): 0xb6b20910
2025-12-25T22:30:14.603 [DEBUG] [Thread-19638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:30:14.618 [DEBUG] [Thread-19638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:30:14.618 [INFO] [Thread-19638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] client lang: <none>
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] server lang: <none>
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] kex follows: False
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:30:14.626 [DEBUG] [Thread-19638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:30:14.627 [DEBUG] [Thread-19638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:30:14.627 [DEBUG] [Thread-19638] [transport.py] [_log()] Compression: none
2025-12-25T22:30:14.627 [DEBUG] [Thread-19638] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:30:14.685 [DEBUG] [Thread-19638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:30:14.686 [DEBUG] [Thread-19638] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:30:14.687 [DEBUG] [Thread-19638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:30:14.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:30:14.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:30:14.741 [DEBUG] [Thread-19638] [transport.py] [_log()] userauth is OK
2025-12-25T22:30:14.742 [DEBUG] [Thread-19638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:30:14.742 [DEBUG] [Thread-19638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:30:14.742 [DEBUG] [Thread-19638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:30:14.742 [DEBUG] [Thread-19638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:30:14.762 [INFO] [Thread-19638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:30:14.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-25T22:30:14.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:30:15.610 [DEBUG] [Thread-19638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:30:15.610 [DEBUG] [Thread-19638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:30:15.658 [DEBUG] [Thread-19638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:30:15.658 [DEBUG] [Thread-19638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:30:15.666 [DEBUG] [Thread-19638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:30:15.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:30:15.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:30:15.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-25T22:30:15.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:30:15.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:30:15.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:30:15.700 [DEBUG] [Thread-19638] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:30:26.800 [DEBUG] [Thread-19640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:31.466 [DEBUG] [Thread-19641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:41.853 [DEBUG] [Thread-19642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:45.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:30:45.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:30:45.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-25T22:30:46.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 30, 41), 4.6, 74.01, 0.0, 12.28, 15.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:30:46.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:30:41
2025-12-25T22:30:46.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:30:46.697 [DEBUG] [Thread-19643] [transport.py] [_log()] starting thread (client mode): 0xb6b02b90
2025-12-25T22:30:46.698 [DEBUG] [Thread-19643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:30:46.718 [DEBUG] [Thread-19643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:30:46.718 [INFO] [Thread-19643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:30:46.721 [DEBUG] [Thread-19643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:30:46.721 [DEBUG] [Thread-19643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:30:46.721 [DEBUG] [Thread-19643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:30:46.721 [DEBUG] [Thread-19643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:46.721 [DEBUG] [Thread-19643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] client lang: <none>
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] server lang: <none>
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] kex follows: False
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:30:46.722 [DEBUG] [Thread-19643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:30:46.723 [DEBUG] [Thread-19643] [transport.py] [_log()] Compression: none
2025-12-25T22:30:46.723 [DEBUG] [Thread-19643] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:30:46.740 [DEBUG] [Thread-19643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:30:46.741 [DEBUG] [Thread-19643] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:30:46.741 [DEBUG] [Thread-19643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:30:46.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:30:46.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:30:46.743 [DEBUG] [Thread-19643] [transport.py] [_log()] userauth is OK
2025-12-25T22:30:46.743 [DEBUG] [Thread-19643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:30:46.744 [DEBUG] [Thread-19643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:30:46.744 [DEBUG] [Thread-19643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:30:46.744 [DEBUG] [Thread-19643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:30:46.768 [INFO] [Thread-19643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:30:46.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:30:47.758 [DEBUG] [Thread-19643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:30:47.759 [DEBUG] [Thread-19643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:30:47.759 [DEBUG] [Thread-19643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:30:47.800 [DEBUG] [Thread-19643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:30:47.800 [DEBUG] [Thread-19643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:30:47.804 [DEBUG] [Thread-19643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:30:47.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:30:47.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:30:47.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:30:47.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:30:47.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:30:47.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:30:47.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:30:47.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:30:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:30:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.854225 -999.00  +15.10   4.67     77  +11.30 1 1 1 1 1     0    0 3.71 -10.56 ZNESW 7.8 4.7 212.0 9.1 16.1 -22.1 16.0 -21.7 15.8 -20.3 16.0 -21.1
2025-12-25T22:30:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:30:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:30:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.854225
2025-12-25T22:30:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:30:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:30:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:30:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:30:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:30:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:30:41', tmtdew=4.6, humidity=74.01, cloud=0.0, wind=12.28, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:30:42', seeing=1.41, atlas_timestamp='2025-12-25T20:30:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:29:00')
2025-12-25T22:30:47.832 [DEBUG] [Thread-19643] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:30:47.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-25T22:30:47.925 [DEBUG] [Thread-19646] [transport.py] [_log()] starting thread (client mode): 0xb6b76890
2025-12-25T22:30:47.925 [DEBUG] [Thread-19646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:30:47.940 [DEBUG] [Thread-19646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:30:47.940 [INFO] [Thread-19646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:30:47.953 [DEBUG] [Thread-19646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:30:47.953 [DEBUG] [Thread-19646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:30:47.953 [DEBUG] [Thread-19646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:30:47.953 [DEBUG] [Thread-19646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] client lang: <none>
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] server lang: <none>
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] kex follows: False
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] Compression: none
2025-12-25T22:30:47.954 [DEBUG] [Thread-19646] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:30:48.008 [DEBUG] [Thread-19646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:30:48.008 [DEBUG] [Thread-19646] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:30:48.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:30:48.010 [DEBUG] [Thread-19646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:30:48.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:30:48.069 [DEBUG] [Thread-19646] [transport.py] [_log()] userauth is OK
2025-12-25T22:30:48.069 [DEBUG] [Thread-19646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:30:48.069 [DEBUG] [Thread-19646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:30:48.069 [DEBUG] [Thread-19646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:30:48.070 [DEBUG] [Thread-19646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:30:48.093 [INFO] [Thread-19646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:30:48.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:30:48.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:30:48.906 [DEBUG] [Thread-19646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:30:48.907 [DEBUG] [Thread-19646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:30:48.955 [DEBUG] [Thread-19646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:30:48.955 [DEBUG] [Thread-19646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:30:48.964 [DEBUG] [Thread-19646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:30:48.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:30:48.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-25T22:30:48.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-25T22:30:48.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:30:48.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:30:48.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:30:48.999 [DEBUG] [Thread-19646] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:30:56.889 [DEBUG] [Thread-19648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:59.642 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:30:59.643 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:11.949 [DEBUG] [Thread-19649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:14.321 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:18.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:31:18.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:31:19.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-25T22:31:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 31, 13), 4.56, 74.21, 0.0, 11.93, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:31:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:31:13
2025-12-25T22:31:19.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:31:19.964 [DEBUG] [Thread-19650] [transport.py] [_log()] starting thread (client mode): 0xb6b74b80
2025-12-25T22:31:19.964 [DEBUG] [Thread-19650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:31:19.983 [DEBUG] [Thread-19650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:31:19.984 [INFO] [Thread-19650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:19.987 [DEBUG] [Thread-19650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] client lang: <none>
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] server lang: <none>
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] kex follows: False
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] Compression: none
2025-12-25T22:31:19.988 [DEBUG] [Thread-19650] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:31:20.010 [DEBUG] [Thread-19650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:31:20.011 [DEBUG] [Thread-19650] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:31:20.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:31:20.012 [DEBUG] [Thread-19650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:31:20.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:31:20.014 [DEBUG] [Thread-19650] [transport.py] [_log()] userauth is OK
2025-12-25T22:31:20.014 [DEBUG] [Thread-19650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:31:20.014 [DEBUG] [Thread-19650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:31:20.014 [DEBUG] [Thread-19650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:31:20.014 [DEBUG] [Thread-19650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:31:20.039 [INFO] [Thread-19650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:31:20.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:31:20.676 [DEBUG] [Thread-19650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:31:20.676 [DEBUG] [Thread-19650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:31:20.676 [DEBUG] [Thread-19650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:31:20.717 [DEBUG] [Thread-19650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:31:20.717 [DEBUG] [Thread-19650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:31:20.725 [DEBUG] [Thread-19650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:31:20.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:31:20.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:31:20.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:31:20.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:31:20.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:31:20.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:31:20.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.854572 -999.00  +15.10   4.31     77  +11.30 1 1 1 1 1     0    0 3.71 -11.56 ZNESW 6.8 4.3 224.6 8.8 16.1 -22.1 15.9 -21.6 15.7 -20.3 16.0 -21.3
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.854572
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:31:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:31:13', tmtdew=4.56, humidity=74.21, cloud=0.0, wind=11.93, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:31:14', seeing=1.3, atlas_timestamp='2025-12-25T20:30:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:29:00')
2025-12-25T22:31:20.748 [DEBUG] [Thread-19650] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:31:20.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-25T22:31:20.831 [DEBUG] [Thread-19653] [transport.py] [_log()] starting thread (client mode): 0xb6bb9900
2025-12-25T22:31:20.831 [DEBUG] [Thread-19653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:31:20.846 [DEBUG] [Thread-19653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:31:20.846 [INFO] [Thread-19653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:31:20.853 [DEBUG] [Thread-19653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] client lang: <none>
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] server lang: <none>
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] kex follows: False
2025-12-25T22:31:20.854 [DEBUG] [Thread-19653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:31:20.855 [DEBUG] [Thread-19653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:31:20.855 [DEBUG] [Thread-19653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:31:20.855 [DEBUG] [Thread-19653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:31:20.855 [DEBUG] [Thread-19653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:31:20.855 [DEBUG] [Thread-19653] [transport.py] [_log()] Compression: none
2025-12-25T22:31:20.855 [DEBUG] [Thread-19653] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:31:20.912 [DEBUG] [Thread-19653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:31:20.913 [DEBUG] [Thread-19653] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:31:20.913 [DEBUG] [Thread-19653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:31:20.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:31:20.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:31:20.971 [DEBUG] [Thread-19653] [transport.py] [_log()] userauth is OK
2025-12-25T22:31:20.971 [DEBUG] [Thread-19653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:31:20.971 [DEBUG] [Thread-19653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:31:20.971 [DEBUG] [Thread-19653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:31:20.972 [DEBUG] [Thread-19653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:31:20.994 [INFO] [Thread-19653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:31:20.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-25T22:31:20.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:31:21.819 [DEBUG] [Thread-19653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:31:21.820 [DEBUG] [Thread-19653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:31:21.868 [DEBUG] [Thread-19653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:31:21.868 [DEBUG] [Thread-19653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:31:21.876 [DEBUG] [Thread-19653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:31:21.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:31:21.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-25T22:31:21.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-25T22:31:21.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:31:21.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:31:21.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:31:21.909 [DEBUG] [Thread-19653] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:31:26.983 [DEBUG] [Thread-19655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:31.523 [DEBUG] [Thread-19656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:42.026 [DEBUG] [Thread-19657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:31:51.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:31:51.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-25T22:31:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 31, 45), 4.45, 74.76, 0.0, 10.9, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:31:52.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:31:45
2025-12-25T22:31:52.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:31:52.893 [DEBUG] [Thread-19658] [transport.py] [_log()] starting thread (client mode): 0xb6bf6e30
2025-12-25T22:31:52.893 [DEBUG] [Thread-19658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:31:52.915 [DEBUG] [Thread-19658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:31:52.915 [INFO] [Thread-19658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:31:52.918 [DEBUG] [Thread-19658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] client lang: <none>
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] server lang: <none>
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] kex follows: False
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] Compression: none
2025-12-25T22:31:52.919 [DEBUG] [Thread-19658] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:31:52.936 [DEBUG] [Thread-19658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:31:52.937 [DEBUG] [Thread-19658] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:31:52.938 [DEBUG] [Thread-19658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:31:52.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:31:52.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:31:52.940 [DEBUG] [Thread-19658] [transport.py] [_log()] userauth is OK
2025-12-25T22:31:52.940 [DEBUG] [Thread-19658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:31:52.940 [DEBUG] [Thread-19658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:31:52.940 [DEBUG] [Thread-19658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:31:52.940 [DEBUG] [Thread-19658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:31:52.977 [INFO] [Thread-19658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:31:52.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:31:53.614 [DEBUG] [Thread-19658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:31:53.614 [DEBUG] [Thread-19658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:31:53.615 [DEBUG] [Thread-19658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:31:53.655 [DEBUG] [Thread-19658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:31:53.655 [DEBUG] [Thread-19658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:31:53.658 [DEBUG] [Thread-19658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:31:53.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:31:53.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:31:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:31:53.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:31:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:31:53.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:31:53.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:31:53.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:31:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:31:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.854919 -999.00  +15.10   4.20     77  +11.30 1 1 1 1 1     0    0 3.71 -11.21 ZNESW 4.3 4.2 241.7 11.2 16.1 -22.1 15.9 -21.5 15.7 -20.3 16.0 -21.3
2025-12-25T22:31:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:31:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:31:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.854919
2025-12-25T22:31:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:31:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:31:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:31:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:31:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:31:53.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:31:45', tmtdew=4.45, humidity=74.76, cloud=0.0, wind=10.9, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:31:46', seeing=1.3, atlas_timestamp='2025-12-25T20:31:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:29:00')
2025-12-25T22:31:53.685 [DEBUG] [Thread-19658] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:31:53.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-25T22:31:53.781 [DEBUG] [Thread-19661] [transport.py] [_log()] starting thread (client mode): 0xb6bb6770
2025-12-25T22:31:53.781 [DEBUG] [Thread-19661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:31:53.796 [DEBUG] [Thread-19661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:31:53.796 [INFO] [Thread-19661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:31:53.803 [DEBUG] [Thread-19661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] client lang: <none>
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] server lang: <none>
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] kex follows: False
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:31:53.804 [DEBUG] [Thread-19661] [transport.py] [_log()] Compression: none
2025-12-25T22:31:53.805 [DEBUG] [Thread-19661] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:31:53.865 [DEBUG] [Thread-19661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:31:53.866 [DEBUG] [Thread-19661] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:31:53.866 [DEBUG] [Thread-19661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:31:53.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:31:53.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:31:53.922 [DEBUG] [Thread-19661] [transport.py] [_log()] userauth is OK
2025-12-25T22:31:53.922 [DEBUG] [Thread-19661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:31:53.922 [DEBUG] [Thread-19661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:31:53.923 [DEBUG] [Thread-19661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:31:53.923 [DEBUG] [Thread-19661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:31:53.942 [INFO] [Thread-19661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:31:53.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-25T22:31:53.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:31:54.743 [DEBUG] [Thread-19661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:31:54.743 [DEBUG] [Thread-19661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:31:54.791 [DEBUG] [Thread-19661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:31:54.791 [DEBUG] [Thread-19661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:31:54.801 [DEBUG] [Thread-19661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:31:54.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:31:54.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-25T22:31:54.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:31:54.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:31:54.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:31:54.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:31:54.842 [DEBUG] [Thread-19661] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:31:57.056 [DEBUG] [Thread-19663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:59.840 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:31:59.841 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:32:12.105 [DEBUG] [Thread-19664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:32:24.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:32:24.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:32:24.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:32:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 32, 17), 4.41, 74.92, 0.0, 10.22, 15.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:32:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:32:17
2025-12-25T22:32:25.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:32:25.838 [DEBUG] [Thread-19665] [transport.py] [_log()] starting thread (client mode): 0xb6b03fa0
2025-12-25T22:32:25.838 [DEBUG] [Thread-19665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:32:25.848 [DEBUG] [Thread-19665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:32:25.848 [INFO] [Thread-19665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] client lang: <none>
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] server lang: <none>
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] kex follows: False
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:32:25.850 [DEBUG] [Thread-19665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:32:25.851 [DEBUG] [Thread-19665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:32:25.851 [DEBUG] [Thread-19665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:32:25.851 [DEBUG] [Thread-19665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:32:25.851 [DEBUG] [Thread-19665] [transport.py] [_log()] Compression: none
2025-12-25T22:32:25.851 [DEBUG] [Thread-19665] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:32:25.862 [DEBUG] [Thread-19665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:32:25.862 [DEBUG] [Thread-19665] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:32:25.863 [DEBUG] [Thread-19665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:32:25.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:32:25.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:32:25.864 [DEBUG] [Thread-19665] [transport.py] [_log()] userauth is OK
2025-12-25T22:32:25.864 [DEBUG] [Thread-19665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:32:25.864 [DEBUG] [Thread-19665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:32:25.864 [DEBUG] [Thread-19665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:32:25.864 [DEBUG] [Thread-19665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:32:25.883 [INFO] [Thread-19665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:32:25.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:32:26.485 [DEBUG] [Thread-19665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:32:26.485 [DEBUG] [Thread-19665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:32:26.486 [DEBUG] [Thread-19665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:32:26.526 [DEBUG] [Thread-19665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:32:26.526 [DEBUG] [Thread-19665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:32:26.530 [DEBUG] [Thread-19665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:32:26.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:32:26.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:32:26.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:32:26.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:32:26.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:32:26.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:32:26.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:32:26.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:32:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:32:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.855266 -999.00  +15.10   8.52     78  +11.30 1 1 1 1 1     0    0 3.65 -11.97 ZNESW 4.5 8.5 232.4 10.4 16.0 -22.0 15.9 -21.6 15.7 -20.2 16.0 -21.3
2025-12-25T22:32:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:32:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:32:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.855266
2025-12-25T22:32:26.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:32:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:32:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:32:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:32:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:32:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:32:17', tmtdew=4.41, humidity=74.92, cloud=0.0, wind=10.22, 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-25T22:32:18', seeing=0.95, atlas_timestamp='2025-12-25T20:31:34.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:29:00')
2025-12-25T22:32:26.556 [DEBUG] [Thread-19665] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:32:26.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-25T22:32:26.645 [DEBUG] [Thread-19668] [transport.py] [_log()] starting thread (client mode): 0xb6b231c0
2025-12-25T22:32:26.646 [DEBUG] [Thread-19668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:32:26.660 [DEBUG] [Thread-19668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:32:26.661 [INFO] [Thread-19668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:32:26.668 [DEBUG] [Thread-19668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:26.669 [DEBUG] [Thread-19668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] client lang: <none>
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] server lang: <none>
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] kex follows: False
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:32:26.670 [DEBUG] [Thread-19668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:32:26.671 [DEBUG] [Thread-19668] [transport.py] [_log()] Compression: none
2025-12-25T22:32:26.671 [DEBUG] [Thread-19668] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:32:26.734 [DEBUG] [Thread-19668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:32:26.735 [DEBUG] [Thread-19668] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:32:26.735 [DEBUG] [Thread-19668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:32:26.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:32:26.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:32:26.793 [DEBUG] [Thread-19668] [transport.py] [_log()] userauth is OK
2025-12-25T22:32:26.793 [DEBUG] [Thread-19668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:32:26.794 [DEBUG] [Thread-19668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:32:26.794 [DEBUG] [Thread-19668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:32:26.794 [DEBUG] [Thread-19668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:32:26.813 [INFO] [Thread-19668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:32:26.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-25T22:32:26.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:32:27.137 [DEBUG] [Thread-19670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:32:27.629 [DEBUG] [Thread-19668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:32:27.629 [DEBUG] [Thread-19668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:32:27.680 [DEBUG] [Thread-19668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:32:27.680 [DEBUG] [Thread-19668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:32:27.693 [DEBUG] [Thread-19668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:32:27.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:32:27.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-25T22:32:27.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-25T22:32:27.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:32:27.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:32:27.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:32:27.730 [DEBUG] [Thread-19668] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:32:31.580 [DEBUG] [Thread-19671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:32:42.190 [DEBUG] [Thread-19672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:32:57.221 [DEBUG] [Thread-19673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:32:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:32:57.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:32:57.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-25T22:32:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 32, 49), 4.4, 74.99, 0.0, 10.55, 14.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:32:58.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:32:49
2025-12-25T22:32:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:32:58.762 [DEBUG] [Thread-19674] [transport.py] [_log()] starting thread (client mode): 0xb6bf5c30
2025-12-25T22:32:58.762 [DEBUG] [Thread-19674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:32:58.783 [DEBUG] [Thread-19674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:32:58.783 [INFO] [Thread-19674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] client lang: <none>
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] server lang: <none>
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] kex follows: False
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] Compression: none
2025-12-25T22:32:58.787 [DEBUG] [Thread-19674] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:32:58.803 [DEBUG] [Thread-19674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:32:58.803 [DEBUG] [Thread-19674] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:32:58.803 [DEBUG] [Thread-19674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:32:58.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:32:58.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:32:58.804 [DEBUG] [Thread-19674] [transport.py] [_log()] userauth is OK
2025-12-25T22:32:58.804 [DEBUG] [Thread-19674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:32:58.804 [DEBUG] [Thread-19674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:32:58.804 [DEBUG] [Thread-19674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:32:58.804 [DEBUG] [Thread-19674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:32:58.818 [INFO] [Thread-19674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:32:58.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:32:59.467 [DEBUG] [Thread-19674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:32:59.468 [DEBUG] [Thread-19674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:32:59.468 [DEBUG] [Thread-19674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:32:59.509 [DEBUG] [Thread-19674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:32:59.509 [DEBUG] [Thread-19674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:32:59.511 [DEBUG] [Thread-19674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:32:59.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:32:59.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:32:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:32:59.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:32:59.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:32:59.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:32:59.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:32:59.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.855614 -999.00  +15.10   5.89     78  +11.30 1 1 1 1 1     0    0 3.59 -12.70 ZNESW 7.4 5.9 222.3 10.9 16.1 -22.1 15.9 -21.6 15.7 -20.3 16.0 -21.2
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.855614
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:32:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:32:49', tmtdew=4.4, humidity=74.99, cloud=0.0, wind=10.55, temperature=14.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:32:50', seeing=1.17, atlas_timestamp='2025-12-25T20:32:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:29:00')
2025-12-25T22:32:59.531 [DEBUG] [Thread-19674] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:32:59.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-25T22:32:59.615 [DEBUG] [Thread-19677] [transport.py] [_log()] starting thread (client mode): 0xb6b7ed10
2025-12-25T22:32:59.615 [DEBUG] [Thread-19677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:32:59.630 [DEBUG] [Thread-19677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:32:59.630 [INFO] [Thread-19677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] client lang: <none>
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] server lang: <none>
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] kex follows: False
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] Compression: none
2025-12-25T22:32:59.638 [DEBUG] [Thread-19677] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:32:59.695 [DEBUG] [Thread-19677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:32:59.695 [DEBUG] [Thread-19677] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:32:59.695 [DEBUG] [Thread-19677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:32:59.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:32:59.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:32:59.752 [DEBUG] [Thread-19677] [transport.py] [_log()] userauth is OK
2025-12-25T22:32:59.752 [DEBUG] [Thread-19677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:32:59.752 [DEBUG] [Thread-19677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:32:59.752 [DEBUG] [Thread-19677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:32:59.753 [DEBUG] [Thread-19677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:32:59.767 [INFO] [Thread-19677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:32:59.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-25T22:32:59.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:33:00.044 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:33:00.045 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:33:00.612 [DEBUG] [Thread-19677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:33:00.612 [DEBUG] [Thread-19677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:33:00.660 [DEBUG] [Thread-19677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:33:00.661 [DEBUG] [Thread-19677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:33:00.670 [DEBUG] [Thread-19677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:33:00.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:33:00.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-25T22:33:00.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-25T22:33:00.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:33:00.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:33:00.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:33:00.706 [DEBUG] [Thread-19677] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:33:12.252 [DEBUG] [Thread-19679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:33:27.303 [DEBUG] [Thread-19680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:33:30.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:33:30.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:33: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-25T22:33:31.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 33, 22), 4.39, 75.04, 0.0, 10.76, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:33:31.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:33:22
2025-12-25T22:33:31.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:33:31.631 [DEBUG] [Thread-19681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:33:31.699 [DEBUG] [Thread-19682] [transport.py] [_log()] starting thread (client mode): 0xb6b23dc0
2025-12-25T22:33:31.699 [DEBUG] [Thread-19682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:33:31.719 [DEBUG] [Thread-19682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:33:31.720 [INFO] [Thread-19682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] client lang: <none>
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] server lang: <none>
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] kex follows: False
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] Compression: none
2025-12-25T22:33:31.723 [DEBUG] [Thread-19682] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:33:31.741 [DEBUG] [Thread-19682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:33:31.742 [DEBUG] [Thread-19682] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:33:31.742 [DEBUG] [Thread-19682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:33:31.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:33:31.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:33:31.785 [DEBUG] [Thread-19682] [transport.py] [_log()] userauth is OK
2025-12-25T22:33:31.785 [DEBUG] [Thread-19682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:33:31.785 [DEBUG] [Thread-19682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:33:31.786 [DEBUG] [Thread-19682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:33:31.786 [DEBUG] [Thread-19682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:33:31.806 [INFO] [Thread-19682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:33:31.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:33:32.607 [DEBUG] [Thread-19682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:33:32.607 [DEBUG] [Thread-19682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:33:32.607 [DEBUG] [Thread-19682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:33:32.648 [DEBUG] [Thread-19682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:33:32.648 [DEBUG] [Thread-19682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:33:32.652 [DEBUG] [Thread-19682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:33:32.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:33:32.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:33:32.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:33:32.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:33:32.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:33:32.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:33:32.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:33:32.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:33:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:33:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.856308 -999.00  +15.10   4.37     78  +11.30 1 1 1 1 1     0    0 3.68 -11.88 ZNESW 3.5 4.4 205.2 7.7 16.0 -22.1 15.9 -21.8 15.7 -20.4 15.9 -21.2
2025-12-25T22:33:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:33:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:33:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.856308
2025-12-25T22:33:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:33:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:33:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:33:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:33:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:33:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:33:22', tmtdew=4.39, humidity=75.04, cloud=0.0, wind=10.76, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:33:22', seeing=1.12, atlas_timestamp='2025-12-25T20:33:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:29:00')
2025-12-25T22:33:32.677 [DEBUG] [Thread-19682] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:33:32.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-25T22:33:32.768 [DEBUG] [Thread-19685] [transport.py] [_log()] starting thread (client mode): 0xb6bb9ff0
2025-12-25T22:33:32.768 [DEBUG] [Thread-19685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:33:32.783 [DEBUG] [Thread-19685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:33:32.783 [INFO] [Thread-19685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:33:32.790 [DEBUG] [Thread-19685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:33:32.790 [DEBUG] [Thread-19685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] client lang: <none>
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] server lang: <none>
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] kex follows: False
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] Compression: none
2025-12-25T22:33:32.791 [DEBUG] [Thread-19685] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:33:32.849 [DEBUG] [Thread-19685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:33:32.849 [DEBUG] [Thread-19685] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:33:32.850 [DEBUG] [Thread-19685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:33:32.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:33:32.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:33:32.905 [DEBUG] [Thread-19685] [transport.py] [_log()] userauth is OK
2025-12-25T22:33:32.905 [DEBUG] [Thread-19685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:33:32.905 [DEBUG] [Thread-19685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:33:32.905 [DEBUG] [Thread-19685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:33:32.905 [DEBUG] [Thread-19685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:33:32.924 [INFO] [Thread-19685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:33:32.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-25T22:33:32.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:33:33.739 [DEBUG] [Thread-19685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:33:33.739 [DEBUG] [Thread-19685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:33:33.786 [DEBUG] [Thread-19685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:33:33.786 [DEBUG] [Thread-19685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:33:33.795 [DEBUG] [Thread-19685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:33:33.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:33:33.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-25T22:33:33.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:33:33.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:33:33.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:33:33.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:33:33.827 [DEBUG] [Thread-19685] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:33:42.332 [DEBUG] [Thread-19687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:33:57.383 [DEBUG] [Thread-19688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:00.242 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:00.244 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:03.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:34:03.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:34:03.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-25T22:34:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 33, 54), 4.31, 75.17, 0.0, 9.63, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:34:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:33:54
2025-12-25T22:34:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:34:04.796 [DEBUG] [Thread-19689] [transport.py] [_log()] starting thread (client mode): 0xb6bbabf0
2025-12-25T22:34:04.796 [DEBUG] [Thread-19689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:34:04.810 [DEBUG] [Thread-19689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:34:04.810 [INFO] [Thread-19689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] client lang: <none>
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] server lang: <none>
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] kex follows: False
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] Compression: none
2025-12-25T22:34:04.814 [DEBUG] [Thread-19689] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:34:04.830 [DEBUG] [Thread-19689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:34:04.831 [DEBUG] [Thread-19689] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:34:04.831 [DEBUG] [Thread-19689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:34:04.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:34:04.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:34:04.833 [DEBUG] [Thread-19689] [transport.py] [_log()] userauth is OK
2025-12-25T22:34:04.833 [DEBUG] [Thread-19689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:34:04.833 [DEBUG] [Thread-19689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:34:04.833 [DEBUG] [Thread-19689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:34:04.833 [DEBUG] [Thread-19689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:34:04.857 [INFO] [Thread-19689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:34:04.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:34:05.512 [DEBUG] [Thread-19689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:34:05.512 [DEBUG] [Thread-19689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:34:05.513 [DEBUG] [Thread-19689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:34:05.554 [DEBUG] [Thread-19689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:34:05.554 [DEBUG] [Thread-19689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:34:05.557 [DEBUG] [Thread-19689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:34:05.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:34:05.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:34:05.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:34:05.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:34:05.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:34:05.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:34:05.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:34:05.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:34:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:34:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.856656 -999.00  +15.10   7.29     78  +11.40 1 1 1 1 1     0    0 3.61 -11.64 ZNESW 5.1 7.3 215.6 9.0 16.0 -22.2 15.9 -21.7 15.6 -20.3 15.9 -21.3
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.856656
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:34:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:33:54', tmtdew=4.31, humidity=75.17, cloud=0.0, wind=9.63, 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-25T22:33:54', seeing=1.12, atlas_timestamp='2025-12-25T20:33:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:32:00')
2025-12-25T22:34:05.577 [DEBUG] [Thread-19689] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:34:05.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-25T22:34:05.673 [DEBUG] [Thread-19692] [transport.py] [_log()] starting thread (client mode): 0xb6bb8250
2025-12-25T22:34:05.673 [DEBUG] [Thread-19692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:34:05.690 [DEBUG] [Thread-19692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:34:05.691 [INFO] [Thread-19692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:34:05.698 [DEBUG] [Thread-19692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] client lang: <none>
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] server lang: <none>
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] kex follows: False
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] Compression: none
2025-12-25T22:34:05.699 [DEBUG] [Thread-19692] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:34:05.761 [DEBUG] [Thread-19692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:34:05.761 [DEBUG] [Thread-19692] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:34:05.762 [DEBUG] [Thread-19692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:34:05.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:34:05.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:34:05.817 [DEBUG] [Thread-19692] [transport.py] [_log()] userauth is OK
2025-12-25T22:34:05.817 [DEBUG] [Thread-19692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:34:05.817 [DEBUG] [Thread-19692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:34:05.817 [DEBUG] [Thread-19692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:34:05.817 [DEBUG] [Thread-19692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:34:05.842 [INFO] [Thread-19692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:34: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-25T22:34:05.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:34:06.692 [DEBUG] [Thread-19692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:34:06.693 [DEBUG] [Thread-19692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:34:06.741 [DEBUG] [Thread-19692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:34:06.741 [DEBUG] [Thread-19692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:34:06.751 [DEBUG] [Thread-19692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:34:06.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:34: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-25T22:34: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-25T22:34:06.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:34:06.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:34:06.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:34:06.786 [DEBUG] [Thread-19692] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:34:12.420 [DEBUG] [Thread-19694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:27.455 [DEBUG] [Thread-19695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:31.692 [DEBUG] [Thread-19696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:34:36.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:34:36.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-25T22:34:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 34, 26), 4.29, 75.29, 0.0, 10.78, 14.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:34:26
2025-12-25T22:34:37.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:34:37.770 [DEBUG] [Thread-19697] [transport.py] [_log()] starting thread (client mode): 0xb410eaa0
2025-12-25T22:34:37.770 [DEBUG] [Thread-19697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:34:37.790 [DEBUG] [Thread-19697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:34:37.790 [INFO] [Thread-19697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:34:37.793 [DEBUG] [Thread-19697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] client lang: <none>
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] server lang: <none>
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] kex follows: False
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:34:37.794 [DEBUG] [Thread-19697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:34:37.795 [DEBUG] [Thread-19697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:34:37.795 [DEBUG] [Thread-19697] [transport.py] [_log()] Compression: none
2025-12-25T22:34:37.795 [DEBUG] [Thread-19697] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:34:37.812 [DEBUG] [Thread-19697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:34:37.813 [DEBUG] [Thread-19697] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:34:37.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:34:37.814 [DEBUG] [Thread-19697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:34:37.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:34:37.816 [DEBUG] [Thread-19697] [transport.py] [_log()] userauth is OK
2025-12-25T22:34:37.816 [DEBUG] [Thread-19697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:34:37.816 [DEBUG] [Thread-19697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:34:37.816 [DEBUG] [Thread-19697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:34:37.816 [DEBUG] [Thread-19697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:34:37.841 [INFO] [Thread-19697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:34:37.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:34:38.646 [DEBUG] [Thread-19697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:34:38.647 [DEBUG] [Thread-19697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:34:38.647 [DEBUG] [Thread-19697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:34:38.688 [DEBUG] [Thread-19697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:34:38.688 [DEBUG] [Thread-19697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:34:38.691 [DEBUG] [Thread-19697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:34:38.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:34:38.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:34:38.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:34:38.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:34:38.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:34:38.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:34:38.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:34:38.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:34:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:34:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.857003 -999.00  +15.10   8.86     78  +11.40 1 1 1 1 1     0    0 3.64 -12.13 ZNESW 8.9 8.9 218.4 9.5 16.0 -22.2 15.8 -21.7 15.7 -20.3 16.0 -21.4
2025-12-25T22:34:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:34:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:34:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.857003
2025-12-25T22:34:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:34:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:34:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:34:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:34:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:34:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:34:26', tmtdew=4.29, humidity=75.29, cloud=0.0, wind=10.78, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:34:26', seeing=1.13, atlas_timestamp='2025-12-25T20:34:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:32:00')
2025-12-25T22:34:38.718 [DEBUG] [Thread-19697] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:34:38.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:34:38.812 [DEBUG] [Thread-19700] [transport.py] [_log()] starting thread (client mode): 0xb6b76050
2025-12-25T22:34:38.813 [DEBUG] [Thread-19700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:34:38.828 [DEBUG] [Thread-19700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:34:38.828 [INFO] [Thread-19700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:34:38.835 [DEBUG] [Thread-19700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:34:38.835 [DEBUG] [Thread-19700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:34:38.835 [DEBUG] [Thread-19700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:34:38.835 [DEBUG] [Thread-19700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:38.835 [DEBUG] [Thread-19700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] client lang: <none>
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] server lang: <none>
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] kex follows: False
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] Compression: none
2025-12-25T22:34:38.836 [DEBUG] [Thread-19700] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:34:38.892 [DEBUG] [Thread-19700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:34:38.893 [DEBUG] [Thread-19700] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:34:38.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:34:38.894 [DEBUG] [Thread-19700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:34:38.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:34:38.949 [DEBUG] [Thread-19700] [transport.py] [_log()] userauth is OK
2025-12-25T22:34:38.949 [DEBUG] [Thread-19700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:34:38.949 [DEBUG] [Thread-19700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:34:38.949 [DEBUG] [Thread-19700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:34:38.949 [DEBUG] [Thread-19700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:34:38.968 [INFO] [Thread-19700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:34:38.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-25T22:34:38.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:34:39.808 [DEBUG] [Thread-19700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:34:39.808 [DEBUG] [Thread-19700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:34:39.857 [DEBUG] [Thread-19700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:34:39.857 [DEBUG] [Thread-19700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:34:39.866 [DEBUG] [Thread-19700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:34:39.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:34:39.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-25T22:34:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:34:39.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:34:39.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:34:39.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:34:39.903 [DEBUG] [Thread-19700] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:34:42.490 [DEBUG] [Thread-19702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:34:57.535 [DEBUG] [Thread-19703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:00.445 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:00.446 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:35:09.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:35:09.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:35:10.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 34, 58), 4.28, 75.84, 0.0, 10.53, 14.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:35:10.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:34:58
2025-12-25T22:35:10.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:35:10.900 [DEBUG] [Thread-19704] [transport.py] [_log()] starting thread (client mode): 0xb410ec80
2025-12-25T22:35:10.900 [DEBUG] [Thread-19704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:35:10.920 [DEBUG] [Thread-19704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:35:10.921 [INFO] [Thread-19704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] client lang: <none>
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] server lang: <none>
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] kex follows: False
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] Compression: none
2025-12-25T22:35:10.924 [DEBUG] [Thread-19704] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:35:10.942 [DEBUG] [Thread-19704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:35:10.942 [DEBUG] [Thread-19704] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:35:10.943 [DEBUG] [Thread-19704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:35:10.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:35:10.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:35:10.945 [DEBUG] [Thread-19704] [transport.py] [_log()] userauth is OK
2025-12-25T22:35:10.945 [DEBUG] [Thread-19704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:35:10.945 [DEBUG] [Thread-19704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:35:10.945 [DEBUG] [Thread-19704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:35:10.945 [DEBUG] [Thread-19704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:35:10.970 [INFO] [Thread-19704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:35:10.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:35:12.275 [DEBUG] [Thread-19704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:35:12.276 [DEBUG] [Thread-19704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:35:12.276 [DEBUG] [Thread-19704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:35:12.317 [DEBUG] [Thread-19704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:35:12.317 [DEBUG] [Thread-19704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:35:12.321 [DEBUG] [Thread-19704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:35:12.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:35:12.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:35:12.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:35:12.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:35:12.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:35:12.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:35:12.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:35:12.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:35:12.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:35:12.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.857355 -999.00  +15.10   6.70     78  +11.40 1 1 1 1 1     0    0 3.57 -12.05 ZNESW 5.8 6.7 213.8 10.7 16.0 -22.1 15.9 -21.6 15.6 -20.2 15.9 -21.2
2025-12-25T22:35:12.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:35:12.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:35:12.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.857355
2025-12-25T22:35:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:35:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:35:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:35:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:35:12.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:35:12.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:34:58', tmtdew=4.28, humidity=75.84, cloud=0.0, wind=10.53, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:34:58', seeing=1.06, atlas_timestamp='2025-12-25T20:34:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:32:00')
2025-12-25T22:35:12.345 [DEBUG] [Thread-19704] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:35:12.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-25T22:35:12.438 [DEBUG] [Thread-19707] [transport.py] [_log()] starting thread (client mode): 0xb410d5a0
2025-12-25T22:35:12.438 [DEBUG] [Thread-19707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:35:12.453 [DEBUG] [Thread-19707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:35:12.453 [INFO] [Thread-19707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] client lang: <none>
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] server lang: <none>
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] kex follows: False
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:35:12.461 [DEBUG] [Thread-19707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:35:12.462 [DEBUG] [Thread-19707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:35:12.462 [DEBUG] [Thread-19707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:35:12.462 [DEBUG] [Thread-19707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:35:12.462 [DEBUG] [Thread-19707] [transport.py] [_log()] Compression: none
2025-12-25T22:35:12.462 [DEBUG] [Thread-19707] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:35:12.520 [DEBUG] [Thread-19707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:35:12.521 [DEBUG] [Thread-19707] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:35:12.521 [DEBUG] [Thread-19707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:35:12.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:35:12.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:35:12.566 [DEBUG] [Thread-19709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:12.577 [DEBUG] [Thread-19707] [transport.py] [_log()] userauth is OK
2025-12-25T22:35:12.577 [DEBUG] [Thread-19707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:35:12.577 [DEBUG] [Thread-19707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:35:12.577 [DEBUG] [Thread-19707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:35:12.577 [DEBUG] [Thread-19707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:35:12.596 [INFO] [Thread-19707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:35:12.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:35:12.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:35:13.426 [DEBUG] [Thread-19707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:35:13.426 [DEBUG] [Thread-19707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:35:13.473 [DEBUG] [Thread-19707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:35:13.473 [DEBUG] [Thread-19707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:35:13.484 [DEBUG] [Thread-19707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:35:13.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:35:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:35:13.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-25T22:35:13.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:35:13.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:35:13.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:35:13.521 [DEBUG] [Thread-19707] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:35:27.626 [DEBUG] [Thread-19710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:31.748 [DEBUG] [Thread-19711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:42.660 [DEBUG] [Thread-19712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:35:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:35:43.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:35:43.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-25T22:35:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 35, 30), 4.23, 76.07, 0.0, 9.69, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:35:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:35:30
2025-12-25T22:35:44.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:35:44.519 [DEBUG] [Thread-19713] [transport.py] [_log()] starting thread (client mode): 0xb410cf70
2025-12-25T22:35:44.519 [DEBUG] [Thread-19713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:35:44.539 [DEBUG] [Thread-19713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:35:44.539 [INFO] [Thread-19713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] client lang: <none>
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] server lang: <none>
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] kex follows: False
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:35:44.542 [DEBUG] [Thread-19713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:35:44.543 [DEBUG] [Thread-19713] [transport.py] [_log()] Compression: none
2025-12-25T22:35:44.543 [DEBUG] [Thread-19713] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:35:44.559 [DEBUG] [Thread-19713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:35:44.560 [DEBUG] [Thread-19713] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:35:44.560 [DEBUG] [Thread-19713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:35:44.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:35:44.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:35:44.562 [DEBUG] [Thread-19713] [transport.py] [_log()] userauth is OK
2025-12-25T22:35:44.563 [DEBUG] [Thread-19713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:35:44.563 [DEBUG] [Thread-19713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:35:44.563 [DEBUG] [Thread-19713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:35:44.563 [DEBUG] [Thread-19713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:35:44.599 [INFO] [Thread-19713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:35:44.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:35:45.229 [DEBUG] [Thread-19713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:35:45.230 [DEBUG] [Thread-19713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:35:45.230 [DEBUG] [Thread-19713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:35:45.270 [DEBUG] [Thread-19713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:35:45.270 [DEBUG] [Thread-19713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:35:45.274 [DEBUG] [Thread-19713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:35:45.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:35:45.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:35:45.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:35:45.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:35:45.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:35:45.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:35:45.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:35:45.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:35:45.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:35:45.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.857697 -999.00  +15.10   3.07     78  +11.40 1 1 1 1 1     0    0 3.61 -11.54 ZNESW 3.6 3.1 243.5 8.0 15.9 -22.0 15.9 -21.6 15.7 -20.3 15.9 -21.2
2025-12-25T22:35:45.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:35:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:35:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.857697
2025-12-25T22:35:45.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:35:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:35:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:35:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:35:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:35:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:35:30', tmtdew=4.23, humidity=76.07, cloud=0.0, wind=9.69, 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-25T22:35:30', seeing=1.16, atlas_timestamp='2025-12-25T20:35:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:32:00')
2025-12-25T22:35:45.300 [DEBUG] [Thread-19713] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:35:45.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-25T22:35:45.394 [DEBUG] [Thread-19716] [transport.py] [_log()] starting thread (client mode): 0xb6bb8a30
2025-12-25T22:35:45.394 [DEBUG] [Thread-19716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:35:45.409 [DEBUG] [Thread-19716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:35:45.409 [INFO] [Thread-19716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:35:45.416 [DEBUG] [Thread-19716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:35:45.416 [DEBUG] [Thread-19716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:35:45.416 [DEBUG] [Thread-19716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:35:45.416 [DEBUG] [Thread-19716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] client lang: <none>
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] server lang: <none>
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] kex follows: False
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] Compression: none
2025-12-25T22:35:45.417 [DEBUG] [Thread-19716] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:35:45.473 [DEBUG] [Thread-19716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:35:45.473 [DEBUG] [Thread-19716] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:35:45.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:35:45.474 [DEBUG] [Thread-19716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:35:45.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:35:45.530 [DEBUG] [Thread-19716] [transport.py] [_log()] userauth is OK
2025-12-25T22:35:45.530 [DEBUG] [Thread-19716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:35:45.530 [DEBUG] [Thread-19716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:35:45.530 [DEBUG] [Thread-19716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:35:45.531 [DEBUG] [Thread-19716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:35:45.553 [INFO] [Thread-19716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:35:45.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-25T22:35:45.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:35:46.391 [DEBUG] [Thread-19716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:35:46.391 [DEBUG] [Thread-19716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:35:46.439 [DEBUG] [Thread-19716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:35:46.439 [DEBUG] [Thread-19716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:35:46.449 [DEBUG] [Thread-19716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:35:46.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:35:46.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-25T22:35:46.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-25T22:35:46.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:35:46.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:35:46.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:35:46.485 [DEBUG] [Thread-19716] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:35:57.694 [DEBUG] [Thread-19718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:00.646 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:00.647 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:12.738 [DEBUG] [Thread-19719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:36:16.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:36:16.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:36:17.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 36, 2), 4.22, 76.1, 0.0, 10.15, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:36:17.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:36:02
2025-12-25T22:36:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:36:17.474 [DEBUG] [Thread-19720] [transport.py] [_log()] starting thread (client mode): 0xb6bb8ac0
2025-12-25T22:36:17.474 [DEBUG] [Thread-19720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:36:17.495 [DEBUG] [Thread-19720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:36:17.495 [INFO] [Thread-19720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:36:17.498 [DEBUG] [Thread-19720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:36:17.498 [DEBUG] [Thread-19720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] client lang: <none>
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] server lang: <none>
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] kex follows: False
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:36:17.499 [DEBUG] [Thread-19720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:36:17.500 [DEBUG] [Thread-19720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:36:17.500 [DEBUG] [Thread-19720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:36:17.500 [DEBUG] [Thread-19720] [transport.py] [_log()] Compression: none
2025-12-25T22:36:17.500 [DEBUG] [Thread-19720] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:36:17.517 [DEBUG] [Thread-19720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:36:17.518 [DEBUG] [Thread-19720] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:36:17.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:36:17.519 [DEBUG] [Thread-19720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:36:17.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:36:17.521 [DEBUG] [Thread-19720] [transport.py] [_log()] userauth is OK
2025-12-25T22:36:17.522 [DEBUG] [Thread-19720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:36:17.522 [DEBUG] [Thread-19720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:36:17.522 [DEBUG] [Thread-19720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:36:17.522 [DEBUG] [Thread-19720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:36:17.536 [INFO] [Thread-19720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:36:17.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:36:18.179 [DEBUG] [Thread-19720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:36:18.179 [DEBUG] [Thread-19720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:36:18.179 [DEBUG] [Thread-19720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:36:18.220 [DEBUG] [Thread-19720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:36:18.220 [DEBUG] [Thread-19720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:36:18.223 [DEBUG] [Thread-19720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:36:18.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:36:18.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:36:18.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:36:18.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:36:18.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:36:18.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:36:18.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:36:18.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:36:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:36:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.858044 -999.00  +15.10   3.83     78  +11.40 1 1 1 1 1     0    0 3.54 -13.12 ZNESW 4.6 3.8 250.3 7.1 16.0 -22.1 15.8 -21.6 15.6 -20.2 15.9 -21.3
2025-12-25T22:36:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:36:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:36:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.858044
2025-12-25T22:36:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:36:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:36:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:36:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:36:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:36:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:36:02', tmtdew=4.22, humidity=76.1, cloud=0.0, wind=10.15, 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-25T22:36:02', seeing=1.05, atlas_timestamp='2025-12-25T20:35:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.0727499999999992, 0.11125000000000007, 0.12424999999999997, 0.06850000000000023, 0.09100000000000108, 0.1777500000000014, 0.08949999999999925, 0.08825000000000038, 0.12849999999999895, 0.05799999999999983, 0.1802500000000009, 0.06700000000000017, 0.1424999999999983, 0.10774999999999935, 0.13949999999999818, 0.10099999999999909, 0.07874999999999943, 0.09200000000000053, 0.0909999999999993, 0.09375, 0.0909999999999993, 0.1817499999999992, 0.12725000000000009, 0.11875000000000036, 0.0754999999999999, 0.1255000000000006, 0.15275000000000105, 0.16650000000000098, 0.20749999999999957, 0.22300000000000075, 0.2090000000000014, 0.12750000000000128, 0.14324999999999832], zp_timestamp='2025-12-25T20:32:00')
2025-12-25T22:36:18.250 [DEBUG] [Thread-19720] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:36:18.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-25T22:36:18.343 [DEBUG] [Thread-19723] [transport.py] [_log()] starting thread (client mode): 0xb410eec0
2025-12-25T22:36:18.343 [DEBUG] [Thread-19723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:36:18.358 [DEBUG] [Thread-19723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:36:18.358 [INFO] [Thread-19723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] client lang: <none>
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] server lang: <none>
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] kex follows: False
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:36:18.366 [DEBUG] [Thread-19723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:36:18.367 [DEBUG] [Thread-19723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:36:18.367 [DEBUG] [Thread-19723] [transport.py] [_log()] Compression: none
2025-12-25T22:36:18.367 [DEBUG] [Thread-19723] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:36:18.425 [DEBUG] [Thread-19723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:36:18.426 [DEBUG] [Thread-19723] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:36:18.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:36:18.427 [DEBUG] [Thread-19723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:36:18.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:36:18.481 [DEBUG] [Thread-19723] [transport.py] [_log()] userauth is OK
2025-12-25T22:36:18.482 [DEBUG] [Thread-19723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:36:18.482 [DEBUG] [Thread-19723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:36:18.482 [DEBUG] [Thread-19723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:36:18.482 [DEBUG] [Thread-19723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:36:18.501 [INFO] [Thread-19723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:36:18.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-25T22:36:18.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:36:19.327 [DEBUG] [Thread-19723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:36:19.327 [DEBUG] [Thread-19723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:36:19.374 [DEBUG] [Thread-19723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:36:19.375 [DEBUG] [Thread-19723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:36:19.383 [DEBUG] [Thread-19723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:36:19.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:36:19.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-25T22:36:19.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-25T22:36:19.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:36:19.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:36:19.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:36:19.419 [DEBUG] [Thread-19723] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:36:27.772 [DEBUG] [Thread-19725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:31.806 [DEBUG] [Thread-19726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:42.825 [DEBUG] [Thread-19727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:36:49.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:36:49.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:36:49.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-25T22:36:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 36, 34), 4.11, 76.18, 0.0, 9.23, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:36:50.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:36:34
2025-12-25T22:36:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:36:50.472 [DEBUG] [Thread-19728] [transport.py] [_log()] starting thread (client mode): 0xb410c670
2025-12-25T22:36:50.472 [DEBUG] [Thread-19728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:36:50.492 [DEBUG] [Thread-19728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:36:50.492 [INFO] [Thread-19728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] client lang: <none>
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] server lang: <none>
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] kex follows: False
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] Compression: none
2025-12-25T22:36:50.496 [DEBUG] [Thread-19728] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:36:50.512 [DEBUG] [Thread-19728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:36:50.512 [DEBUG] [Thread-19728] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:36:50.512 [DEBUG] [Thread-19728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:36:50.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:36:50.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:36:50.513 [DEBUG] [Thread-19728] [transport.py] [_log()] userauth is OK
2025-12-25T22:36:50.513 [DEBUG] [Thread-19728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:36:50.513 [DEBUG] [Thread-19728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:36:50.513 [DEBUG] [Thread-19728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:36:50.513 [DEBUG] [Thread-19728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:36:50.540 [INFO] [Thread-19728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:36:50.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:36:51.204 [DEBUG] [Thread-19728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:36:51.204 [DEBUG] [Thread-19728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:36:51.204 [DEBUG] [Thread-19728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:36:51.245 [DEBUG] [Thread-19728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:36:51.245 [DEBUG] [Thread-19728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:36:51.247 [DEBUG] [Thread-19728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:36:51.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:36:51.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:36:51.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:36:51.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:36:51.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:36:51.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:36:51.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.858739 -999.00  +15.10   6.80     79  +11.50 1 1 1 1 1     0    0 3.47 -14.67 ZNESW 7.5 6.8 215.8 9.7 15.9 -22.0 15.8 -21.7 15.6 -20.2 15.8 -21.2
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.858739
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:36:51.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:36:34', tmtdew=4.11, humidity=76.18, cloud=0.0, wind=9.23, 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-25T22:36:35', seeing=1.09, atlas_timestamp='2025-12-25T20:36:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:35:00')
2025-12-25T22:36:51.267 [DEBUG] [Thread-19728] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:36:51.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-25T22:36:51.352 [DEBUG] [Thread-19731] [transport.py] [_log()] starting thread (client mode): 0xb6b22470
2025-12-25T22:36:51.352 [DEBUG] [Thread-19731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:36:51.367 [DEBUG] [Thread-19731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:36:51.367 [INFO] [Thread-19731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:36:51.374 [DEBUG] [Thread-19731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] client lang: <none>
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] server lang: <none>
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] kex follows: False
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] Compression: none
2025-12-25T22:36:51.375 [DEBUG] [Thread-19731] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:36:51.430 [DEBUG] [Thread-19731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:36:51.430 [DEBUG] [Thread-19731] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:36:51.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:36:51.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:36:51.430 [DEBUG] [Thread-19731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:36:51.487 [DEBUG] [Thread-19731] [transport.py] [_log()] userauth is OK
2025-12-25T22:36:51.487 [DEBUG] [Thread-19731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:36:51.487 [DEBUG] [Thread-19731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:36:51.487 [DEBUG] [Thread-19731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:36:51.487 [DEBUG] [Thread-19731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:36:51.501 [INFO] [Thread-19731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:36:51.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-25T22:36:51.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:36:52.336 [DEBUG] [Thread-19731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:36:52.336 [DEBUG] [Thread-19731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:36:52.384 [DEBUG] [Thread-19731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:36:52.384 [DEBUG] [Thread-19731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:36:52.392 [DEBUG] [Thread-19731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:36:52.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:36:52.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-25T22:36:52.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-25T22:36:52.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:36:52.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:36:52.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:36:52.424 [DEBUG] [Thread-19731] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:36:57.857 [DEBUG] [Thread-19733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:00.846 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:00.847 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:12.904 [DEBUG] [Thread-19734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:15.250 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:37:22.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:37:22.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-25T22:37:23.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 37, 6), 4.1, 76.22, 0.0, 9.49, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:37:23.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:37:06
2025-12-25T22:37:23.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:37:23.399 [DEBUG] [Thread-19735] [transport.py] [_log()] starting thread (client mode): 0xb6b234c0
2025-12-25T22:37:23.399 [DEBUG] [Thread-19735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:37:23.419 [DEBUG] [Thread-19735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:37:23.419 [INFO] [Thread-19735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:37:23.422 [DEBUG] [Thread-19735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:37:23.422 [DEBUG] [Thread-19735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:37:23.422 [DEBUG] [Thread-19735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:37:23.422 [DEBUG] [Thread-19735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:23.422 [DEBUG] [Thread-19735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] client lang: <none>
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] server lang: <none>
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] kex follows: False
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:37:23.423 [DEBUG] [Thread-19735] [transport.py] [_log()] Compression: none
2025-12-25T22:37:23.424 [DEBUG] [Thread-19735] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:37:23.443 [DEBUG] [Thread-19735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:37:23.443 [DEBUG] [Thread-19735] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:37:23.444 [DEBUG] [Thread-19735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:37:23.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:37:23.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:37:23.485 [DEBUG] [Thread-19735] [transport.py] [_log()] userauth is OK
2025-12-25T22:37:23.485 [DEBUG] [Thread-19735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:37:23.485 [DEBUG] [Thread-19735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:37:23.485 [DEBUG] [Thread-19735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:37:23.485 [DEBUG] [Thread-19735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:37:23.506 [INFO] [Thread-19735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:37:23.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:37:24.170 [DEBUG] [Thread-19735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:37:24.170 [DEBUG] [Thread-19735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:37:24.170 [DEBUG] [Thread-19735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:37:24.211 [DEBUG] [Thread-19735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:37:24.211 [DEBUG] [Thread-19735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:37:24.214 [DEBUG] [Thread-19735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:37:24.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:37:24.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:37:24.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:37:24.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:37:24.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:37:24.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:37:24.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:37:24.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:37:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:37:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.859086 -999.00  +15.10   4.54     79  +11.50 1 1 1 1 1     0    0 3.45 -14.49 ZNESW 6.3 4.5 240.8 9.1 15.9 -22.3 15.8 -21.8 15.6 -20.3 15.9 -21.3
2025-12-25T22:37:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:37:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:37:24.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.859086
2025-12-25T22:37:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:37:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:37:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:37:24.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:37:24.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:37:24.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:37:06', tmtdew=4.1, humidity=76.22, cloud=0.0, wind=9.49, 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-25T22:37:07', seeing=1.09, atlas_timestamp='2025-12-25T20:37:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:35:00')
2025-12-25T22:37:24.243 [DEBUG] [Thread-19735] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:37:24.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-25T22:37:24.336 [DEBUG] [Thread-19738] [transport.py] [_log()] starting thread (client mode): 0xb410f160
2025-12-25T22:37:24.336 [DEBUG] [Thread-19738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:37:24.350 [DEBUG] [Thread-19738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:37:24.350 [INFO] [Thread-19738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:37:24.358 [DEBUG] [Thread-19738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:37:24.358 [DEBUG] [Thread-19738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:37:24.358 [DEBUG] [Thread-19738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:37:24.358 [DEBUG] [Thread-19738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] client lang: <none>
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] server lang: <none>
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] kex follows: False
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:37:24.359 [DEBUG] [Thread-19738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:37:24.360 [DEBUG] [Thread-19738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:37:24.360 [DEBUG] [Thread-19738] [transport.py] [_log()] Compression: none
2025-12-25T22:37:24.360 [DEBUG] [Thread-19738] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:37:24.418 [DEBUG] [Thread-19738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:37:24.418 [DEBUG] [Thread-19738] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:37:24.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:37:24.419 [DEBUG] [Thread-19738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:37:24.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:37:24.473 [DEBUG] [Thread-19738] [transport.py] [_log()] userauth is OK
2025-12-25T22:37:24.474 [DEBUG] [Thread-19738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:37:24.474 [DEBUG] [Thread-19738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:37:24.474 [DEBUG] [Thread-19738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:37:24.474 [DEBUG] [Thread-19738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:37:24.493 [INFO] [Thread-19738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:37:24.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:37:24.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:37:25.304 [DEBUG] [Thread-19738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:37:25.304 [DEBUG] [Thread-19738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:37:25.352 [DEBUG] [Thread-19738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:37:25.352 [DEBUG] [Thread-19738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:37:25.360 [DEBUG] [Thread-19738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:37:25.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:37:25.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:37:25.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:37:25.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:37:25.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:37:25.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:37:25.396 [DEBUG] [Thread-19738] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:37:27.935 [DEBUG] [Thread-19740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:31.867 [DEBUG] [Thread-19741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:42.972 [DEBUG] [Thread-19742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:55.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:37:55.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:37:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:37:56.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 37, 38), 4.1, 76.22, 0.0, 10.2, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:37:56.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:37:38
2025-12-25T22:37:56.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:37:56.381 [DEBUG] [Thread-19743] [transport.py] [_log()] starting thread (client mode): 0xb6bb9390
2025-12-25T22:37:56.381 [DEBUG] [Thread-19743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:37:56.403 [DEBUG] [Thread-19743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:37:56.403 [INFO] [Thread-19743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:37:56.406 [DEBUG] [Thread-19743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:37:56.406 [DEBUG] [Thread-19743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:37:56.406 [DEBUG] [Thread-19743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] client lang: <none>
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] server lang: <none>
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] kex follows: False
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:37:56.407 [DEBUG] [Thread-19743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:37:56.408 [DEBUG] [Thread-19743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:37:56.408 [DEBUG] [Thread-19743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:37:56.408 [DEBUG] [Thread-19743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:37:56.408 [DEBUG] [Thread-19743] [transport.py] [_log()] Compression: none
2025-12-25T22:37:56.408 [DEBUG] [Thread-19743] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:37:56.426 [DEBUG] [Thread-19743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:37:56.426 [DEBUG] [Thread-19743] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:37:56.427 [DEBUG] [Thread-19743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:37:56.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:37:56.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:37:56.429 [DEBUG] [Thread-19743] [transport.py] [_log()] userauth is OK
2025-12-25T22:37:56.429 [DEBUG] [Thread-19743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:37:56.429 [DEBUG] [Thread-19743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:37:56.429 [DEBUG] [Thread-19743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:37:56.429 [DEBUG] [Thread-19743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:37:56.466 [INFO] [Thread-19743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:37:56.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:37:57.095 [DEBUG] [Thread-19743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:37:57.095 [DEBUG] [Thread-19743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:37:57.096 [DEBUG] [Thread-19743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:37:57.136 [DEBUG] [Thread-19743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:37:57.136 [DEBUG] [Thread-19743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:37:57.140 [DEBUG] [Thread-19743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:37:57.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:37:57.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:37:57.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:37:57.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:37:57.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:37:57.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:37:57.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:37:57.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:37:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:37:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.859433 -999.00  +15.10   6.44     79  +11.50 1 1 1 1 1     0    0 3.44 -15.17 ZNESW 4.9 6.4 194.2 7.9 15.9 -22.1 15.7 -21.8 15.6 -20.2 15.9 -21.3
2025-12-25T22:37:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:37:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:37:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.859433
2025-12-25T22:37:57.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:37:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:37:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:37:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:37:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:37:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:37:38', tmtdew=4.1, humidity=76.22, cloud=0.0, wind=10.2, 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-25T22:37:39', seeing=1.16, atlas_timestamp='2025-12-25T20:37:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:35:00')
2025-12-25T22:37:57.168 [DEBUG] [Thread-19743] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:37:57.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:37:57.261 [DEBUG] [Thread-19746] [transport.py] [_log()] starting thread (client mode): 0xb6bb87c0
2025-12-25T22:37:57.261 [DEBUG] [Thread-19746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:37:57.275 [DEBUG] [Thread-19746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:37:57.275 [INFO] [Thread-19746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] client lang: <none>
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] server lang: <none>
2025-12-25T22:37:57.283 [DEBUG] [Thread-19746] [transport.py] [_log()] kex follows: False
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] Compression: none
2025-12-25T22:37:57.284 [DEBUG] [Thread-19746] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:37:57.342 [DEBUG] [Thread-19746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:37:57.342 [DEBUG] [Thread-19746] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:37:57.342 [DEBUG] [Thread-19746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:37:57.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:37:57.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:37:57.399 [DEBUG] [Thread-19746] [transport.py] [_log()] userauth is OK
2025-12-25T22:37:57.399 [DEBUG] [Thread-19746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:37:57.399 [DEBUG] [Thread-19746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:37:57.399 [DEBUG] [Thread-19746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:37:57.399 [DEBUG] [Thread-19746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:37:57.415 [INFO] [Thread-19746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:37:57.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-25T22:37:57.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:37:58.008 [DEBUG] [Thread-19748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:37:58.238 [DEBUG] [Thread-19746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:37:58.238 [DEBUG] [Thread-19746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:37:58.286 [DEBUG] [Thread-19746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:37:58.286 [DEBUG] [Thread-19746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:37:58.295 [DEBUG] [Thread-19746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:37:58.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:37:58.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:37:58.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:37:58.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:37:58.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:37:58.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:37:58.332 [DEBUG] [Thread-19746] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:38:01.049 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:01.050 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:13.055 [DEBUG] [Thread-19749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:28.088 [DEBUG] [Thread-19750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:38:28.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:38:28.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-25T22:38:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 38, 10), 4.07, 76.33, 0.0, 10.68, 14.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:38:29.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:38:10
2025-12-25T22:38:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:38:29.324 [DEBUG] [Thread-19751] [transport.py] [_log()] starting thread (client mode): 0xb6bb8ac0
2025-12-25T22:38:29.324 [DEBUG] [Thread-19751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:38:29.344 [DEBUG] [Thread-19751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:38:29.344 [INFO] [Thread-19751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:38:29.346 [DEBUG] [Thread-19751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] client lang: <none>
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] server lang: <none>
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] kex follows: False
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] Compression: none
2025-12-25T22:38:29.347 [DEBUG] [Thread-19751] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:38:29.368 [DEBUG] [Thread-19751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:38:29.368 [DEBUG] [Thread-19751] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:38:29.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:38:29.369 [DEBUG] [Thread-19751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:38:29.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:38:29.371 [DEBUG] [Thread-19751] [transport.py] [_log()] userauth is OK
2025-12-25T22:38:29.371 [DEBUG] [Thread-19751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:38:29.371 [DEBUG] [Thread-19751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:38:29.371 [DEBUG] [Thread-19751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:38:29.371 [DEBUG] [Thread-19751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:38:29.405 [INFO] [Thread-19751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:38:29.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:38:29.982 [DEBUG] [Thread-19751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:38:29.982 [DEBUG] [Thread-19751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:38:29.982 [DEBUG] [Thread-19751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:38:30.023 [DEBUG] [Thread-19751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:38:30.023 [DEBUG] [Thread-19751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:38:30.026 [DEBUG] [Thread-19751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:38:30.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:38:30.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:38:30.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:38:30.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:38:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:38:30.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:38:30.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:38:30.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:38:30.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:38:30.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.859780 -999.00  +15.10   4.15     79  +11.50 1 1 1 1 1     0    0 3.42 -16.48 ZNESW 3.8 4.2 222.8 7.3 15.9 -22.1 15.8 -21.5 15.6 -20.3 15.8 -21.4
2025-12-25T22:38:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:38:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:38:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.859780
2025-12-25T22:38:30.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:38:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:38:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:38:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:38:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:38:30.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:38:10', tmtdew=4.07, humidity=76.33, cloud=0.0, wind=10.68, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:38:11', seeing=1.45, atlas_timestamp='2025-12-25T20:38:04.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:35:00')
2025-12-25T22:38:30.045 [DEBUG] [Thread-19751] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:38:30.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-25T22:38:30.135 [DEBUG] [Thread-19754] [transport.py] [_log()] starting thread (client mode): 0xb6b7fdf0
2025-12-25T22:38:30.135 [DEBUG] [Thread-19754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:38:30.149 [DEBUG] [Thread-19754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:38:30.149 [INFO] [Thread-19754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:38:30.156 [DEBUG] [Thread-19754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:38:30.157 [DEBUG] [Thread-19754] [transport.py] [_log()] client lang: <none>
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] server lang: <none>
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] kex follows: False
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] Compression: none
2025-12-25T22:38:30.158 [DEBUG] [Thread-19754] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:38:30.216 [DEBUG] [Thread-19754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:38:30.216 [DEBUG] [Thread-19754] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:38:30.217 [DEBUG] [Thread-19754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:38:30.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:38:30.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:38:30.277 [DEBUG] [Thread-19754] [transport.py] [_log()] userauth is OK
2025-12-25T22:38:30.278 [DEBUG] [Thread-19754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:38:30.278 [DEBUG] [Thread-19754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:38:30.278 [DEBUG] [Thread-19754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:38:30.278 [DEBUG] [Thread-19754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:38:30.298 [INFO] [Thread-19754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:38:30.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-25T22:38:30.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:38:31.119 [DEBUG] [Thread-19754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:38:31.120 [DEBUG] [Thread-19754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:38:31.168 [DEBUG] [Thread-19754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:38:31.169 [DEBUG] [Thread-19754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:38:31.181 [DEBUG] [Thread-19754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:38:31.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:38:31.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-25T22:38:31.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-25T22:38:31.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:38:31.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:38:31.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:38:31.224 [DEBUG] [Thread-19754] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:38:31.923 [DEBUG] [Thread-19756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:43.126 [DEBUG] [Thread-19757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:48.763 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:51.922 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:56.985 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:38:58.176 [DEBUG] [Thread-19758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:39:01.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:39:01.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-25T22:39:01.250 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:01.251 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 38, 42), 4.05, 76.95, 0.0, 8.17, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:39:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:38:42
2025-12-25T22:39:02.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:39:02.211 [DEBUG] [Thread-19759] [transport.py] [_log()] starting thread (client mode): 0xb6bba4d0
2025-12-25T22:39:02.211 [DEBUG] [Thread-19759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:39:02.227 [DEBUG] [Thread-19759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:39:02.228 [INFO] [Thread-19759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:39:02.230 [DEBUG] [Thread-19759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] client lang: <none>
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] server lang: <none>
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] kex follows: False
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] Compression: none
2025-12-25T22:39:02.231 [DEBUG] [Thread-19759] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:39:02.245 [DEBUG] [Thread-19759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:39:02.245 [DEBUG] [Thread-19759] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:39:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:39:02.245 [DEBUG] [Thread-19759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:39:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:39:02.288 [DEBUG] [Thread-19759] [transport.py] [_log()] userauth is OK
2025-12-25T22:39:02.288 [DEBUG] [Thread-19759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:39:02.288 [DEBUG] [Thread-19759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:39:02.288 [DEBUG] [Thread-19759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:39:02.288 [DEBUG] [Thread-19759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:39:02.315 [INFO] [Thread-19759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:39:02.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:39:02.397 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:02.960 [DEBUG] [Thread-19759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:39:02.960 [DEBUG] [Thread-19759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:39:02.961 [DEBUG] [Thread-19759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:39:03.001 [DEBUG] [Thread-19759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:39:03.001 [DEBUG] [Thread-19759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:39:03.004 [DEBUG] [Thread-19759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:39:03.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:39:03.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:39:03.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:39:03.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:39:03.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:39:03.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:39:03.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:39:03.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:39:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:39:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.860127 -999.00  +15.10   2.17     79  +11.50 1 1 1 1 1     0    0 3.37 -18.74 ZNESW 2.2 2.2 246.8 7.7 15.9 -22.3 15.7 -21.7 15.6 -20.3 15.8 -21.5
2025-12-25T22:39:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:39:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:39:03.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.860127
2025-12-25T22:39:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:39:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:39:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:39:03.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:39:03.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:39:03.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:38:42', tmtdew=4.05, humidity=76.95, cloud=0.0, wind=8.17, 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-25T22:38:43', seeing=1.34, atlas_timestamp='2025-12-25T20:38:34.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:35:00')
2025-12-25T22:39:03.030 [DEBUG] [Thread-19759] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:39:03.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-25T22:39:03.123 [DEBUG] [Thread-19762] [transport.py] [_log()] starting thread (client mode): 0xb6b23df0
2025-12-25T22:39:03.124 [DEBUG] [Thread-19762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:39:03.139 [DEBUG] [Thread-19762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:39:03.139 [INFO] [Thread-19762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:39:03.147 [DEBUG] [Thread-19762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:39:03.147 [DEBUG] [Thread-19762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:39:03.147 [DEBUG] [Thread-19762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] client lang: <none>
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] server lang: <none>
2025-12-25T22:39:03.148 [DEBUG] [Thread-19762] [transport.py] [_log()] kex follows: False
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] Compression: none
2025-12-25T22:39:03.149 [DEBUG] [Thread-19762] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:39:03.208 [DEBUG] [Thread-19762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:39:03.208 [DEBUG] [Thread-19762] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:39:03.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:39:03.209 [DEBUG] [Thread-19762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:39:03.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:39:03.264 [DEBUG] [Thread-19762] [transport.py] [_log()] userauth is OK
2025-12-25T22:39:03.264 [DEBUG] [Thread-19762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:39:03.264 [DEBUG] [Thread-19762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:39:03.264 [DEBUG] [Thread-19762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:39:03.264 [DEBUG] [Thread-19762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:39:03.284 [INFO] [Thread-19762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:39:03.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:39:03.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:39:04.125 [DEBUG] [Thread-19762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:39:04.125 [DEBUG] [Thread-19762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:39:04.173 [DEBUG] [Thread-19762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:39:04.173 [DEBUG] [Thread-19762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:39:04.183 [DEBUG] [Thread-19762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:39:04.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:39:04.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:39:04.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-25T22:39:04.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:39:04.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:39:04.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:39:04.219 [DEBUG] [Thread-19762] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:39:13.209 [DEBUG] [Thread-19764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:21.953 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:26.440 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:28.254 [DEBUG] [Thread-19765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:31.992 [DEBUG] [Thread-19766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:39:34.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:39: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-25T22:39:34.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 39, 14), 4.05, 76.98, 0.0, 9.03, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:39:34.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:39:14
2025-12-25T22:39:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:39:35.185 [DEBUG] [Thread-19767] [transport.py] [_log()] starting thread (client mode): 0xb95b32e0
2025-12-25T22:39:35.185 [DEBUG] [Thread-19767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:39:35.195 [DEBUG] [Thread-19767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:39:35.196 [INFO] [Thread-19767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] client lang: <none>
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] server lang: <none>
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] kex follows: False
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] Compression: none
2025-12-25T22:39:35.197 [DEBUG] [Thread-19767] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:39:35.208 [DEBUG] [Thread-19767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:39:35.209 [DEBUG] [Thread-19767] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:39:35.209 [DEBUG] [Thread-19767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:39:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:39:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:39:35.211 [DEBUG] [Thread-19767] [transport.py] [_log()] userauth is OK
2025-12-25T22:39:35.212 [DEBUG] [Thread-19767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:39:35.212 [DEBUG] [Thread-19767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:39:35.212 [DEBUG] [Thread-19767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:39:35.212 [DEBUG] [Thread-19767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:39:35.238 [INFO] [Thread-19767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:39:35.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:39:35.711 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:35.823 [DEBUG] [Thread-19767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:39:35.823 [DEBUG] [Thread-19767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:39:35.823 [DEBUG] [Thread-19767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:39:35.864 [DEBUG] [Thread-19767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:39:35.864 [DEBUG] [Thread-19767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:39:35.865 [DEBUG] [Thread-19767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:39:35.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:39:35.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:39:35.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:39:35.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:39:35.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:39:35.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:39:35.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:39:35.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:39:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:39:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.860475 -999.00  +15.10   3.07     79  +11.50 1 1 1 1 1     0    0 3.23 -20.65 ZNESW 4.5 3.1 189.6 5.2 15.9 -22.1 15.7 -21.7 15.6 -20.3 15.8 -21.3
2025-12-25T22:39:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:39:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:39:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.860475
2025-12-25T22:39:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:39:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:39:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:39:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:39:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:39:35.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:39:14', tmtdew=4.05, humidity=76.98, cloud=0.0, wind=9.03, 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-25T22:39:15', seeing=1.36, atlas_timestamp='2025-12-25T20:39:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:35:00')
2025-12-25T22:39:35.881 [DEBUG] [Thread-19767] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:39:35.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-25T22:39:35.974 [DEBUG] [Thread-19770] [transport.py] [_log()] starting thread (client mode): 0xb95b34c0
2025-12-25T22:39:35.974 [DEBUG] [Thread-19770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:39:35.989 [DEBUG] [Thread-19770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:39:35.989 [INFO] [Thread-19770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] client lang: <none>
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] server lang: <none>
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] kex follows: False
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:39:35.997 [DEBUG] [Thread-19770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:39:35.998 [DEBUG] [Thread-19770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:39:35.998 [DEBUG] [Thread-19770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:39:35.998 [DEBUG] [Thread-19770] [transport.py] [_log()] Compression: none
2025-12-25T22:39:35.998 [DEBUG] [Thread-19770] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:39:36.057 [DEBUG] [Thread-19770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:39:36.058 [DEBUG] [Thread-19770] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:39:36.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:39:36.059 [DEBUG] [Thread-19770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:39:36.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:39:36.113 [DEBUG] [Thread-19770] [transport.py] [_log()] userauth is OK
2025-12-25T22:39:36.113 [DEBUG] [Thread-19770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:39:36.113 [DEBUG] [Thread-19770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:39:36.114 [DEBUG] [Thread-19770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:39:36.114 [DEBUG] [Thread-19770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:39:36.132 [INFO] [Thread-19770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:39:36.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-25T22:39:36.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:39:36.953 [DEBUG] [Thread-19770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:39:36.953 [DEBUG] [Thread-19770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:39:37.001 [DEBUG] [Thread-19770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:39:37.001 [DEBUG] [Thread-19770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:39:37.011 [DEBUG] [Thread-19770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:39:37.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:39:37.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-25T22:39:37.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-25T22:39:37.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:39:37.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:39:37.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:39:37.047 [DEBUG] [Thread-19770] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:39:40.091 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:43.285 [DEBUG] [Thread-19772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:46.811 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:51.256 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:39:58.335 [DEBUG] [Thread-19773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:01.450 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:01.452 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:40:07.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:40:07.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-25T22:40:07.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 39, 46), 4.0, 76.97, 0.0, 8.72, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:40:07.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:39:46
2025-12-25T22:40:07.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:40:08.091 [DEBUG] [Thread-19774] [transport.py] [_log()] starting thread (client mode): 0xb6b214b0
2025-12-25T22:40:08.091 [DEBUG] [Thread-19774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:40:08.111 [DEBUG] [Thread-19774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:40:08.111 [INFO] [Thread-19774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] client lang: <none>
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] server lang: <none>
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] kex follows: False
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] Compression: none
2025-12-25T22:40:08.114 [DEBUG] [Thread-19774] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:40:08.129 [DEBUG] [Thread-19774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:40:08.130 [DEBUG] [Thread-19774] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:40:08.130 [DEBUG] [Thread-19774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:40:08.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:40:08.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:40:08.131 [DEBUG] [Thread-19774] [transport.py] [_log()] userauth is OK
2025-12-25T22:40:08.131 [DEBUG] [Thread-19774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:40:08.131 [DEBUG] [Thread-19774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:40:08.131 [DEBUG] [Thread-19774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:40:08.131 [DEBUG] [Thread-19774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:40:08.149 [INFO] [Thread-19774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:40:08.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:40:11.262 [DEBUG] [Thread-19774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:40:11.262 [DEBUG] [Thread-19774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:40:11.262 [DEBUG] [Thread-19774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:40:11.303 [DEBUG] [Thread-19774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:40:11.303 [DEBUG] [Thread-19774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:40:11.306 [DEBUG] [Thread-19774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:40:11.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:40:11.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:40:11.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:40:11.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:40:11.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:40:11.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:40:11.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:40:11.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:40:11.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:40:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.861169 -999.00  +15.10   4.77     79  +11.50 1 1 1 1 1     0    0 3.11 -23.78 ZNESW 5.1 4.8 231.6 6.3 15.9 -22.2 15.7 -21.7 15.5 -20.4 15.8 -21.3
2025-12-25T22:40:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:40:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:40:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.861169
2025-12-25T22:40:11.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:40:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:40:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:40:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:40:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:40:11.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:39:46', tmtdew=4.0, humidity=76.97, cloud=0.0, wind=8.72, 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-25T22:39:47', seeing=1.49, atlas_timestamp='2025-12-25T20:40:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:39:00')
2025-12-25T22:40:11.393 [DEBUG] [Thread-19774] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:40:11.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-25T22:40:11.494 [DEBUG] [Thread-19777] [transport.py] [_log()] starting thread (client mode): 0xb6b22c50
2025-12-25T22:40:11.494 [DEBUG] [Thread-19777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:40:11.509 [DEBUG] [Thread-19777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:40:11.509 [INFO] [Thread-19777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:40:11.516 [DEBUG] [Thread-19777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:11.517 [DEBUG] [Thread-19777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] client lang: <none>
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] server lang: <none>
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] kex follows: False
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:40:11.518 [DEBUG] [Thread-19777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:40:11.519 [DEBUG] [Thread-19777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:40:11.519 [DEBUG] [Thread-19777] [transport.py] [_log()] Compression: none
2025-12-25T22:40:11.519 [DEBUG] [Thread-19777] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:40:11.575 [DEBUG] [Thread-19777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:40:11.576 [DEBUG] [Thread-19777] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:40:11.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:40:11.577 [DEBUG] [Thread-19777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:40:11.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:40:11.633 [DEBUG] [Thread-19777] [transport.py] [_log()] userauth is OK
2025-12-25T22:40:11.633 [DEBUG] [Thread-19777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:40:11.633 [DEBUG] [Thread-19777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:40:11.634 [DEBUG] [Thread-19777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:40:11.634 [DEBUG] [Thread-19777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:40:11.652 [INFO] [Thread-19777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:40:11.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-25T22:40:11.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:40:12.487 [DEBUG] [Thread-19777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:40:12.488 [DEBUG] [Thread-19777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:40:12.535 [DEBUG] [Thread-19777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:40:12.535 [DEBUG] [Thread-19777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:40:12.544 [DEBUG] [Thread-19777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:40:12.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:40:12.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:40:12.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-25T22:40:12.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:40:12.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:40:12.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:40:12.581 [DEBUG] [Thread-19777] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:40:13.365 [DEBUG] [Thread-19779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:28.423 [DEBUG] [Thread-19780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:32.060 [DEBUG] [Thread-19781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:42.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:40:42.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:40:42.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:40:43.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 40, 18), 4.02, 76.87, 0.0, 7.98, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:40:43.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:40:18
2025-12-25T22:40:43.457 [DEBUG] [Thread-19782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:43.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:40:43.617 [DEBUG] [Thread-19783] [transport.py] [_log()] starting thread (client mode): 0xb6b23910
2025-12-25T22:40:43.617 [DEBUG] [Thread-19783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:40:43.638 [DEBUG] [Thread-19783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:40:43.639 [INFO] [Thread-19783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] client lang: <none>
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] server lang: <none>
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] kex follows: False
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] Compression: none
2025-12-25T22:40:43.642 [DEBUG] [Thread-19783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:40:43.658 [DEBUG] [Thread-19783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:40:43.658 [DEBUG] [Thread-19783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:40:43.658 [DEBUG] [Thread-19783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:40:43.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:40:43.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:40:43.659 [DEBUG] [Thread-19783] [transport.py] [_log()] userauth is OK
2025-12-25T22:40:43.659 [DEBUG] [Thread-19783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:40:43.659 [DEBUG] [Thread-19783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:40:43.659 [DEBUG] [Thread-19783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:40:43.659 [DEBUG] [Thread-19783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:40:43.669 [INFO] [Thread-19783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:40:43.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:40:44.294 [DEBUG] [Thread-19783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:40:44.294 [DEBUG] [Thread-19783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:40:44.294 [DEBUG] [Thread-19783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:40:44.335 [DEBUG] [Thread-19783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:40:44.335 [DEBUG] [Thread-19783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:40:44.337 [DEBUG] [Thread-19783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:40:44.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:40:44.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:40:44.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:40:44.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:40:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:40:44.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:40:44.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.861169 -999.00  +15.10   4.77     79  +11.50 1 1 1 1 1     0    0 3.11 -23.78 ZNESW 5.1 4.8 231.6 6.3 15.9 -22.2 15.7 -21.7 15.5 -20.4 15.8 -21.3
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.861169
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:40:44.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:40:18', tmtdew=4.02, humidity=76.87, cloud=0.0, wind=7.98, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:40:19', seeing=1.41, atlas_timestamp='2025-12-25T20:40:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:39:00')
2025-12-25T22:40:44.357 [DEBUG] [Thread-19783] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:40:44.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-25T22:40:44.438 [DEBUG] [Thread-19786] [transport.py] [_log()] starting thread (client mode): 0xb6bb7e50
2025-12-25T22:40:44.438 [DEBUG] [Thread-19786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:40:44.453 [DEBUG] [Thread-19786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:40:44.453 [INFO] [Thread-19786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:40:44.460 [DEBUG] [Thread-19786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:40:44.460 [DEBUG] [Thread-19786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:40:44.460 [DEBUG] [Thread-19786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:40:44.460 [DEBUG] [Thread-19786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] client lang: <none>
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] server lang: <none>
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] kex follows: False
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] Compression: none
2025-12-25T22:40:44.461 [DEBUG] [Thread-19786] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:40:44.519 [DEBUG] [Thread-19786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:40:44.519 [DEBUG] [Thread-19786] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:40:44.519 [DEBUG] [Thread-19786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:40:44.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:40:44.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:40:44.576 [DEBUG] [Thread-19786] [transport.py] [_log()] userauth is OK
2025-12-25T22:40:44.576 [DEBUG] [Thread-19786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:40:44.576 [DEBUG] [Thread-19786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:40:44.576 [DEBUG] [Thread-19786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:40:44.576 [DEBUG] [Thread-19786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:40:44.589 [INFO] [Thread-19786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:40:44.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-25T22:40:44.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:40:45.412 [DEBUG] [Thread-19786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:40:45.412 [DEBUG] [Thread-19786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:40:45.459 [DEBUG] [Thread-19786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:40:45.459 [DEBUG] [Thread-19786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:40:45.467 [DEBUG] [Thread-19786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:40:45.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:40:45.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-25T22:40:45.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-25T22:40:45.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:40:45.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:40:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:40:45.498 [DEBUG] [Thread-19786] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:40:58.485 [DEBUG] [Thread-19788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:40:59.871 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:01.653 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:01.655 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:04.047 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:13.540 [DEBUG] [Thread-19789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:41:15.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:41:15.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-25T22:41:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 40, 51), 4.0, 76.93, 0.0, 11.03, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:41:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:40:51
2025-12-25T22:41:16.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:41:16.508 [DEBUG] [Thread-19790] [transport.py] [_log()] starting thread (client mode): 0xb95b3d30
2025-12-25T22:41:16.508 [DEBUG] [Thread-19790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:41:16.535 [DEBUG] [Thread-19790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:41:16.535 [INFO] [Thread-19790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] client lang: <none>
2025-12-25T22:41:16.539 [DEBUG] [Thread-19790] [transport.py] [_log()] server lang: <none>
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] kex follows: False
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] Compression: none
2025-12-25T22:41:16.540 [DEBUG] [Thread-19790] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:41:16.556 [DEBUG] [Thread-19790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:41:16.557 [DEBUG] [Thread-19790] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:41:16.557 [DEBUG] [Thread-19790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:41:16.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:41:16.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:41:16.559 [DEBUG] [Thread-19790] [transport.py] [_log()] userauth is OK
2025-12-25T22:41:16.559 [DEBUG] [Thread-19790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:41:16.559 [DEBUG] [Thread-19790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:41:16.559 [DEBUG] [Thread-19790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:41:16.559 [DEBUG] [Thread-19790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:41:16.582 [INFO] [Thread-19790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:41:16.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:41:17.246 [DEBUG] [Thread-19790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:41:17.246 [DEBUG] [Thread-19790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:41:17.247 [DEBUG] [Thread-19790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:41:17.287 [DEBUG] [Thread-19790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:41:17.287 [DEBUG] [Thread-19790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:41:17.289 [DEBUG] [Thread-19790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:41:17.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:41:17.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:41:17.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:41:17.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:41:17.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:41:17.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:41:17.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:41:17.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:41:17.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:41:17.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.861516 -999.00  +15.10   4.84     79  +11.50 1 1 1 1 1     0    0 3.07 -25.29 ZNESW 6.2 4.8 249.4 7.2 15.9 -22.4 15.8 -21.8 15.5 -20.3 15.8 -21.5
2025-12-25T22:41:17.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:41:17.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:41:17.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.861516
2025-12-25T22:41:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:41:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:41:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:41:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:41:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:41:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:40:51', tmtdew=4.0, humidity=76.93, cloud=0.0, wind=11.03, 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-25T22:40:51', seeing=1.41, atlas_timestamp='2025-12-25T20:40:34.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:39:00')
2025-12-25T22:41:17.314 [DEBUG] [Thread-19790] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:41:17.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-25T22:41:17.408 [DEBUG] [Thread-19793] [transport.py] [_log()] starting thread (client mode): 0xb6b74b80
2025-12-25T22:41:17.408 [DEBUG] [Thread-19793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:41:17.423 [DEBUG] [Thread-19793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:41:17.423 [INFO] [Thread-19793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] client lang: <none>
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] server lang: <none>
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] kex follows: False
2025-12-25T22:41:17.431 [DEBUG] [Thread-19793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:41:17.432 [DEBUG] [Thread-19793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:41:17.432 [DEBUG] [Thread-19793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:41:17.432 [DEBUG] [Thread-19793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:41:17.432 [DEBUG] [Thread-19793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:41:17.432 [DEBUG] [Thread-19793] [transport.py] [_log()] Compression: none
2025-12-25T22:41:17.432 [DEBUG] [Thread-19793] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:41:17.489 [DEBUG] [Thread-19793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:41:17.489 [DEBUG] [Thread-19793] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:41:17.490 [DEBUG] [Thread-19793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:41:17.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:41:17.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:41:17.545 [DEBUG] [Thread-19793] [transport.py] [_log()] userauth is OK
2025-12-25T22:41:17.546 [DEBUG] [Thread-19793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:41:17.546 [DEBUG] [Thread-19793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:41:17.546 [DEBUG] [Thread-19793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:41:17.546 [DEBUG] [Thread-19793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:41:17.564 [INFO] [Thread-19793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:41:17.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-25T22:41:17.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:41:18.421 [DEBUG] [Thread-19793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:41:18.422 [DEBUG] [Thread-19793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:41:18.470 [DEBUG] [Thread-19793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:41:18.470 [DEBUG] [Thread-19793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:41:18.478 [DEBUG] [Thread-19793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:41:18.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:41:18.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-25T22:41:18.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-25T22:41:18.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:41:18.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:41:18.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:41:18.512 [DEBUG] [Thread-19793] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:41:28.569 [DEBUG] [Thread-19795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:32.137 [DEBUG] [Thread-19796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:43.621 [DEBUG] [Thread-19797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:41:48.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:41:48.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:41:48.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-25T22:41:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 41, 23), 4.0, 76.95, 0.0, 11.63, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:41:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:41:23
2025-12-25T22:41:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:41:49.534 [DEBUG] [Thread-19798] [transport.py] [_log()] starting thread (client mode): 0xb410dd80
2025-12-25T22:41:49.534 [DEBUG] [Thread-19798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:41:49.555 [DEBUG] [Thread-19798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:41:49.555 [INFO] [Thread-19798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] client lang: <none>
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] server lang: <none>
2025-12-25T22:41:49.558 [DEBUG] [Thread-19798] [transport.py] [_log()] kex follows: False
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] Compression: none
2025-12-25T22:41:49.559 [DEBUG] [Thread-19798] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:41:49.576 [DEBUG] [Thread-19798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:41:49.577 [DEBUG] [Thread-19798] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:41:49.577 [DEBUG] [Thread-19798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:41:49.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:41:49.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:41:49.579 [DEBUG] [Thread-19798] [transport.py] [_log()] userauth is OK
2025-12-25T22:41:49.579 [DEBUG] [Thread-19798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:41:49.580 [DEBUG] [Thread-19798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:41:49.580 [DEBUG] [Thread-19798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:41:49.580 [DEBUG] [Thread-19798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:41:49.603 [INFO] [Thread-19798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:41:49.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:41:50.238 [DEBUG] [Thread-19798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:41:50.239 [DEBUG] [Thread-19798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:41:50.239 [DEBUG] [Thread-19798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:41:50.280 [DEBUG] [Thread-19798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:41:50.280 [DEBUG] [Thread-19798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:41:50.283 [DEBUG] [Thread-19798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:41:50.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:41:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:41:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:41:50.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:41:50.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:41:50.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:41:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:41:50.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:41:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:41:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.861864 -999.00  +15.00   5.00     79  +11.50 1 1 1 1 1     0    0 3.12 -24.83 ZNESW 5.0 5.0 239.6 7.5 15.8 -22.3 15.8 -21.7 15.5 -20.3 15.8 -21.3
2025-12-25T22:41:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:41:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:41:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.861864
2025-12-25T22:41:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:41:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:41:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:41:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:41:50.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:41:50.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:41:23', tmtdew=4.0, humidity=76.95, cloud=0.0, wind=11.63, 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-25T22:41:23', seeing=1.28, atlas_timestamp='2025-12-25T20:41:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:39:00')
2025-12-25T22:41:50.312 [DEBUG] [Thread-19798] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:41:50.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-25T22:41:50.407 [DEBUG] [Thread-19801] [transport.py] [_log()] starting thread (client mode): 0xb6b20490
2025-12-25T22:41:50.407 [DEBUG] [Thread-19801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:41:50.422 [DEBUG] [Thread-19801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:41:50.422 [INFO] [Thread-19801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:41:50.429 [DEBUG] [Thread-19801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] client lang: <none>
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] server lang: <none>
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] kex follows: False
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] Compression: none
2025-12-25T22:41:50.430 [DEBUG] [Thread-19801] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:41:50.487 [DEBUG] [Thread-19801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:41:50.488 [DEBUG] [Thread-19801] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:41:50.488 [DEBUG] [Thread-19801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:41:50.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:41:50.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:41:50.543 [DEBUG] [Thread-19801] [transport.py] [_log()] userauth is OK
2025-12-25T22:41:50.543 [DEBUG] [Thread-19801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:41:50.543 [DEBUG] [Thread-19801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:41:50.543 [DEBUG] [Thread-19801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:41:50.543 [DEBUG] [Thread-19801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:41:50.556 [INFO] [Thread-19801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:41:50.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-25T22:41:50.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:41:51.420 [DEBUG] [Thread-19801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:41:51.420 [DEBUG] [Thread-19801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:41:51.472 [DEBUG] [Thread-19801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:41:51.472 [DEBUG] [Thread-19801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:41:51.482 [DEBUG] [Thread-19801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:41:51.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:41:51.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-25T22:41:51.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:41:51.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:41:51.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:41:51.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:41:51.519 [DEBUG] [Thread-19801] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:41:58.658 [DEBUG] [Thread-19803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:01.856 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:01.857 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:13.704 [DEBUG] [Thread-19804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:21.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:42:21.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:42:21.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-25T22:42:22.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 41, 55), 4.03, 76.78, 0.0, 7.96, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:42:22.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:41:55
2025-12-25T22:42:22.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:42:22.512 [DEBUG] [Thread-19805] [transport.py] [_log()] starting thread (client mode): 0xb6bb6260
2025-12-25T22:42:22.512 [DEBUG] [Thread-19805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:42:22.532 [DEBUG] [Thread-19805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:42:22.532 [INFO] [Thread-19805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:42:22.535 [DEBUG] [Thread-19805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:42:22.535 [DEBUG] [Thread-19805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] client lang: <none>
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] server lang: <none>
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] kex follows: False
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] Compression: none
2025-12-25T22:42:22.536 [DEBUG] [Thread-19805] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:42:22.548 [DEBUG] [Thread-19805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:42:22.548 [DEBUG] [Thread-19805] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:42:22.549 [DEBUG] [Thread-19805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:42:22.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:42:22.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:42:22.550 [DEBUG] [Thread-19805] [transport.py] [_log()] userauth is OK
2025-12-25T22:42:22.551 [DEBUG] [Thread-19805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:42:22.551 [DEBUG] [Thread-19805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:42:22.551 [DEBUG] [Thread-19805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:42:22.551 [DEBUG] [Thread-19805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:42:22.569 [INFO] [Thread-19805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:42:22.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:42:23.190 [DEBUG] [Thread-19805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:42:23.190 [DEBUG] [Thread-19805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:42:23.190 [DEBUG] [Thread-19805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:42:23.232 [DEBUG] [Thread-19805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:42:23.232 [DEBUG] [Thread-19805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:42:23.236 [DEBUG] [Thread-19805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:42:23.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:42:23.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:42:23.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:42:23.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:42:23.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:42:23.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:42:23.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:42:23.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:42:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:42:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.862211 -999.00  +15.00   5.79     79  +11.40 1 1 1 1 1     0    0 3.11 -23.59 ZNESW 6.0 5.8 232.5 7.2 15.9 -22.4 15.7 -21.5 15.5 -20.2 15.8 -21.5
2025-12-25T22:42:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:42:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:42:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.862211
2025-12-25T22:42:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:42:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:42:23.260 [DEBUG] [Thread-19805] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:42:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:42:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:42:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:42:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:41:55', tmtdew=4.03, humidity=76.78, cloud=0.0, wind=7.96, 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-25T22:41:55', seeing=1.23, atlas_timestamp='2025-12-25T20:41:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.098749999999999, 0.07675000000000054, 0.14825000000000088, 0.11549999999999905, 0.09350000000000058, 0.14725000000000144, 0.13349999999999973, 0.11875000000000213, 0.11949999999999861, 0.07399999999999984, 0.15124999999999922, 0.06700000000000017, 0.1479999999999997, 0.12725000000000009, 0.1529999999999987, 0.12149999999999928, 0.09975000000000023, 0.1169999999999991, 0.09699999999999953, 0.08924999999999983, 0.118999999999998, 0.16274999999999906, 0.1172500000000003, 0.10824999999999996, 0.12099999999999866, 0.12950000000000017, 0.14675000000000082, 0.17199999999999882, 0.2469999999999999, 0.2295000000000016, 0.18599999999999994, 0.16000000000000014, 0.1687499999999993], zp_timestamp='2025-12-25T20:39:00')
2025-12-25T22:42:23.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-25T22:42:23.355 [DEBUG] [Thread-19808] [transport.py] [_log()] starting thread (client mode): 0xb6b20e80
2025-12-25T22:42:23.355 [DEBUG] [Thread-19808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:42:23.370 [DEBUG] [Thread-19808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:42:23.370 [INFO] [Thread-19808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] client lang: <none>
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] server lang: <none>
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] kex follows: False
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:42:23.378 [DEBUG] [Thread-19808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:42:23.379 [DEBUG] [Thread-19808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:42:23.379 [DEBUG] [Thread-19808] [transport.py] [_log()] Compression: none
2025-12-25T22:42:23.379 [DEBUG] [Thread-19808] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:42:23.436 [DEBUG] [Thread-19808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:42:23.437 [DEBUG] [Thread-19808] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:42:23.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:42:23.438 [DEBUG] [Thread-19808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:42:23.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:42:23.497 [DEBUG] [Thread-19808] [transport.py] [_log()] userauth is OK
2025-12-25T22:42:23.497 [DEBUG] [Thread-19808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:42:23.497 [DEBUG] [Thread-19808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:42:23.497 [DEBUG] [Thread-19808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:42:23.497 [DEBUG] [Thread-19808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:42:23.516 [INFO] [Thread-19808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:42:23.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:42:23.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:42:24.359 [DEBUG] [Thread-19808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:42:24.359 [DEBUG] [Thread-19808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:42:24.407 [DEBUG] [Thread-19808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:42:24.407 [DEBUG] [Thread-19808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:42:24.416 [DEBUG] [Thread-19808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:42:24.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:42:24.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:42:24.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-25T22:42:24.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:42:24.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:42:24.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:42:24.453 [DEBUG] [Thread-19808] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:42:28.740 [DEBUG] [Thread-19810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:32.195 [DEBUG] [Thread-19811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:43.778 [DEBUG] [Thread-19812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:42:54.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:42:54.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:42:54.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:42:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 42, 27), 4.03, 76.8, 0.0, 10.38, 14.66, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:42:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:42:27
2025-12-25T22:42:55.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:42:55.455 [DEBUG] [Thread-19813] [transport.py] [_log()] starting thread (client mode): 0xb95b1c30
2025-12-25T22:42:55.455 [DEBUG] [Thread-19813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:42:55.477 [DEBUG] [Thread-19813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:42:55.477 [INFO] [Thread-19813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:55.480 [DEBUG] [Thread-19813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] client lang: <none>
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] server lang: <none>
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] kex follows: False
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] Compression: none
2025-12-25T22:42:55.481 [DEBUG] [Thread-19813] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:42:55.498 [DEBUG] [Thread-19813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:42:55.499 [DEBUG] [Thread-19813] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:42:55.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:42:55.499 [DEBUG] [Thread-19813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:42:55.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:42:55.501 [DEBUG] [Thread-19813] [transport.py] [_log()] userauth is OK
2025-12-25T22:42:55.501 [DEBUG] [Thread-19813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:42:55.502 [DEBUG] [Thread-19813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:42:55.502 [DEBUG] [Thread-19813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:42:55.502 [DEBUG] [Thread-19813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:42:55.528 [INFO] [Thread-19813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:42:55.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:42:56.148 [DEBUG] [Thread-19813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:42:56.148 [DEBUG] [Thread-19813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:42:56.149 [DEBUG] [Thread-19813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:42:56.189 [DEBUG] [Thread-19813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:42:56.189 [DEBUG] [Thread-19813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:42:56.193 [DEBUG] [Thread-19813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:42:56.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:42:56.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:42:56.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:42:56.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:42:56.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:42:56.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:42:56.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:42:56.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:42:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:42:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.862558 -999.00  +15.00   9.21     78  +11.30 1 1 1 1 1     0    0 3.06 -24.53 ZNESW 8.4 9.2 195.8 10.6 15.8 -22.3 15.7 -21.8 15.5 -20.1 15.8 -21.2
2025-12-25T22:42:56.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:42:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:42:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.862558
2025-12-25T22:42:56.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:42:56.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:42:56.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:42:56.221 [DEBUG] [Thread-19813] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:42:56.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:42:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:42:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:42:27', tmtdew=4.03, humidity=76.8, cloud=0.0, wind=10.38, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:42:27', seeing=1.65, atlas_timestamp='2025-12-25T20:42:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.06974999999999909, 0.1382500000000011, 0.18375000000000163, 0.11299999999999955, 0.07150000000000034, 0.18925000000000125, 0.14599999999999902, 0.14825000000000088, 0.13599999999999923, 0.08699999999999974, 0.16024999999999956, 0.08099999999999952, 0.17199999999999882, 0.13374999999999915, 0.1399999999999988, 0.16049999999999898, 0.09525000000000006, 0.10849999999999937, 0.09299999999999997, 0.11474999999999902, 0.1059999999999981, 0.17574999999999896, 0.1542500000000011, 0.13375000000000092, 0.11799999999999855, 0.13150000000000084, 0.17074999999999996, 0.21450000000000102, 0.15300000000000047, 0.20500000000000185, 0.2220000000000013, 0.1880000000000006, 0.15775000000000006], zp_timestamp='2025-12-25T20:41:00')
2025-12-25T22:42:56.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-25T22:42:56.315 [DEBUG] [Thread-19816] [transport.py] [_log()] starting thread (client mode): 0xb6bba020
2025-12-25T22:42:56.315 [DEBUG] [Thread-19816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:42:56.329 [DEBUG] [Thread-19816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:42:56.330 [INFO] [Thread-19816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:42:56.337 [DEBUG] [Thread-19816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:42:56.337 [DEBUG] [Thread-19816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:42:56.337 [DEBUG] [Thread-19816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] client lang: <none>
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] server lang: <none>
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] kex follows: False
2025-12-25T22:42:56.338 [DEBUG] [Thread-19816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:42:56.339 [DEBUG] [Thread-19816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:42:56.339 [DEBUG] [Thread-19816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:42:56.339 [DEBUG] [Thread-19816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:42:56.339 [DEBUG] [Thread-19816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:42:56.339 [DEBUG] [Thread-19816] [transport.py] [_log()] Compression: none
2025-12-25T22:42:56.339 [DEBUG] [Thread-19816] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:42:56.394 [DEBUG] [Thread-19816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:42:56.395 [DEBUG] [Thread-19816] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:42:56.395 [DEBUG] [Thread-19816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:42:56.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:42:56.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:42:56.450 [DEBUG] [Thread-19816] [transport.py] [_log()] userauth is OK
2025-12-25T22:42:56.450 [DEBUG] [Thread-19816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:42:56.451 [DEBUG] [Thread-19816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:42:56.451 [DEBUG] [Thread-19816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:42:56.451 [DEBUG] [Thread-19816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:42:56.470 [INFO] [Thread-19816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:42:56.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-25T22:42:56.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:42:57.311 [DEBUG] [Thread-19816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:42:57.311 [DEBUG] [Thread-19816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:42:57.360 [DEBUG] [Thread-19816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:42:57.360 [DEBUG] [Thread-19816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:42:57.370 [DEBUG] [Thread-19816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:42:57.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:42:57.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-25T22:42:57.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-25T22:42:57.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:42:57.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:42:57.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:42:57.406 [DEBUG] [Thread-19816] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:42:58.808 [DEBUG] [Thread-19818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:02.058 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:02.059 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:13.862 [DEBUG] [Thread-19819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:43:27.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:43:27.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-25T22:43:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 42, 59), 4.03, 76.8, 0.0, 8.01, 14.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:43:28.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:42:59
2025-12-25T22:43:28.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:43:28.426 [DEBUG] [Thread-19820] [transport.py] [_log()] starting thread (client mode): 0xb6b20e80
2025-12-25T22:43:28.426 [DEBUG] [Thread-19820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:43:28.446 [DEBUG] [Thread-19820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:43:28.446 [INFO] [Thread-19820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:43:28.449 [DEBUG] [Thread-19820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:43:28.449 [DEBUG] [Thread-19820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:43:28.449 [DEBUG] [Thread-19820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:43:28.449 [DEBUG] [Thread-19820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:43:28.449 [DEBUG] [Thread-19820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:43:28.449 [DEBUG] [Thread-19820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] client lang: <none>
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] server lang: <none>
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] kex follows: False
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] Compression: none
2025-12-25T22:43:28.450 [DEBUG] [Thread-19820] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:43:28.467 [DEBUG] [Thread-19820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:43:28.467 [DEBUG] [Thread-19820] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:43:28.468 [DEBUG] [Thread-19820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:43:28.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:43:28.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:43:28.469 [DEBUG] [Thread-19820] [transport.py] [_log()] userauth is OK
2025-12-25T22:43:28.470 [DEBUG] [Thread-19820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:43:28.470 [DEBUG] [Thread-19820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:43:28.470 [DEBUG] [Thread-19820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:43:28.470 [DEBUG] [Thread-19820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:43:28.487 [INFO] [Thread-19820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:43:28.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:43:28.896 [DEBUG] [Thread-19822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:29.146 [DEBUG] [Thread-19820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:43:29.147 [DEBUG] [Thread-19820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:43:29.147 [DEBUG] [Thread-19820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:43:29.188 [DEBUG] [Thread-19820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:43:29.188 [DEBUG] [Thread-19820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:43:29.191 [DEBUG] [Thread-19820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:43:29.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:43:29.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:43:29.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:43:29.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:43:29.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:43:29.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:43:29.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:43:29.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:43:29.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:43:29.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.862905 -999.00  +15.10   3.89     78  +11.30 1 1 1 1 1     0    0 3.09 -23.99 ZNESW 6.8 3.9 237.3 9.2 15.8 -21.9 15.8 -21.5 15.5 -20.2 15.8 -21.1
2025-12-25T22:43:29.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:43:29.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:43:29.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.862905
2025-12-25T22:43:29.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:43:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:43:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:43:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:43:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:43:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:42:59', tmtdew=4.03, humidity=76.8, cloud=0.0, wind=8.01, temperature=14.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:42:59', seeing=1.56, atlas_timestamp='2025-12-25T20:42:34.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.06974999999999909, 0.1382500000000011, 0.18375000000000163, 0.11299999999999955, 0.07150000000000034, 0.18925000000000125, 0.14599999999999902, 0.14825000000000088, 0.13599999999999923, 0.08699999999999974, 0.16024999999999956, 0.08099999999999952, 0.17199999999999882, 0.13374999999999915, 0.1399999999999988, 0.16049999999999898, 0.09525000000000006, 0.10849999999999937, 0.09299999999999997, 0.11474999999999902, 0.1059999999999981, 0.17574999999999896, 0.1542500000000011, 0.13375000000000092, 0.11799999999999855, 0.13150000000000084, 0.17074999999999996, 0.21450000000000102, 0.15300000000000047, 0.20500000000000185, 0.2220000000000013, 0.1880000000000006, 0.15775000000000006], zp_timestamp='2025-12-25T20:41:00')
2025-12-25T22:43:29.219 [DEBUG] [Thread-19820] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:43:29.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-25T22:43:29.312 [DEBUG] [Thread-19824] [transport.py] [_log()] starting thread (client mode): 0xb6b03730
2025-12-25T22:43:29.312 [DEBUG] [Thread-19824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:43:29.327 [DEBUG] [Thread-19824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:43:29.327 [INFO] [Thread-19824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] client lang: <none>
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] server lang: <none>
2025-12-25T22:43:29.335 [DEBUG] [Thread-19824] [transport.py] [_log()] kex follows: False
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] Compression: none
2025-12-25T22:43:29.336 [DEBUG] [Thread-19824] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:43:29.398 [DEBUG] [Thread-19824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:43:29.399 [DEBUG] [Thread-19824] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:43:29.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:43:29.400 [DEBUG] [Thread-19824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:43:29.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:43:29.456 [DEBUG] [Thread-19824] [transport.py] [_log()] userauth is OK
2025-12-25T22:43:29.457 [DEBUG] [Thread-19824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:43:29.457 [DEBUG] [Thread-19824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:43:29.457 [DEBUG] [Thread-19824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:43:29.457 [DEBUG] [Thread-19824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:43:29.482 [INFO] [Thread-19824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:43:29.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:43:29.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:43:30.313 [DEBUG] [Thread-19824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:43:30.313 [DEBUG] [Thread-19824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:43:30.361 [DEBUG] [Thread-19824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:43:30.361 [DEBUG] [Thread-19824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:43:30.370 [DEBUG] [Thread-19824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:43:30.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:43: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-25T22:43:30.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-25T22:43:30.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:43:30.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:43:30.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:43:30.402 [DEBUG] [Thread-19824] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:43:32.247 [DEBUG] [Thread-19826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:43.930 [DEBUG] [Thread-19827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:43:58.990 [DEBUG] [Thread-19828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:00.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:44:00.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:44:00.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-25T22:44:01.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 43, 31), 4.03, 76.78, 0.0, 10.43, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:44:01.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:43:31
2025-12-25T22:44:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:44:01.457 [DEBUG] [Thread-19829] [transport.py] [_log()] starting thread (client mode): 0xb6bf7df0
2025-12-25T22:44:01.457 [DEBUG] [Thread-19829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:44:01.477 [DEBUG] [Thread-19829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:44:01.478 [INFO] [Thread-19829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:44:01.479 [DEBUG] [Thread-19829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:44:01.479 [DEBUG] [Thread-19829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:44:01.479 [DEBUG] [Thread-19829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:44:01.479 [DEBUG] [Thread-19829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] client lang: <none>
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] server lang: <none>
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] kex follows: False
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] Compression: none
2025-12-25T22:44:01.480 [DEBUG] [Thread-19829] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:44:01.491 [DEBUG] [Thread-19829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:44:01.492 [DEBUG] [Thread-19829] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:44:01.492 [DEBUG] [Thread-19829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:44:01.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:44:01.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:44:01.493 [DEBUG] [Thread-19829] [transport.py] [_log()] userauth is OK
2025-12-25T22:44:01.493 [DEBUG] [Thread-19829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:44:01.493 [DEBUG] [Thread-19829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:44:01.493 [DEBUG] [Thread-19829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:44:01.493 [DEBUG] [Thread-19829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:44:01.503 [INFO] [Thread-19829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:44:01.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:44:02.261 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:02.262 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:02.271 [DEBUG] [Thread-19829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:44:02.271 [DEBUG] [Thread-19829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:44:02.271 [DEBUG] [Thread-19829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:44:02.311 [DEBUG] [Thread-19829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:44:02.311 [DEBUG] [Thread-19829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:44:02.314 [DEBUG] [Thread-19829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:44:02.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:44:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:44:02.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:44:02.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:44:02.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:44:02.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:44:02.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.863600 -999.00  +15.10   6.39     78  +11.40 1 1 1 1 1     0    0 3.14 -20.73 ZNESW 5.4 6.4 220.6 10.5 15.8 -22.4 15.8 -21.7 15.5 -20.2 15.8 -21.5
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.863600
2025-12-25T22:44:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:44:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:44:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:44:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:44:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:44:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:43:31', tmtdew=4.03, humidity=76.78, cloud=0.0, wind=10.43, 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-25T22:43:31', seeing=1.79, atlas_timestamp='2025-12-25T20:43:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.06974999999999909, 0.1382500000000011, 0.18375000000000163, 0.11299999999999955, 0.07150000000000034, 0.18925000000000125, 0.14599999999999902, 0.14825000000000088, 0.13599999999999923, 0.08699999999999974, 0.16024999999999956, 0.08099999999999952, 0.17199999999999882, 0.13374999999999915, 0.1399999999999988, 0.16049999999999898, 0.09525000000000006, 0.10849999999999937, 0.09299999999999997, 0.11474999999999902, 0.1059999999999981, 0.17574999999999896, 0.1542500000000011, 0.13375000000000092, 0.11799999999999855, 0.13150000000000084, 0.17074999999999996, 0.21450000000000102, 0.15300000000000047, 0.20500000000000185, 0.2220000000000013, 0.1880000000000006, 0.15775000000000006], zp_timestamp='2025-12-25T20:41:00')
2025-12-25T22:44:02.337 [DEBUG] [Thread-19829] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:44:02.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-25T22:44:02.434 [DEBUG] [Thread-19832] [transport.py] [_log()] starting thread (client mode): 0xb6baa350
2025-12-25T22:44:02.434 [DEBUG] [Thread-19832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:44:02.448 [DEBUG] [Thread-19832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:44:02.448 [INFO] [Thread-19832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] client lang: <none>
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] server lang: <none>
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] kex follows: False
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:44:02.456 [DEBUG] [Thread-19832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:44:02.457 [DEBUG] [Thread-19832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:44:02.457 [DEBUG] [Thread-19832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:44:02.457 [DEBUG] [Thread-19832] [transport.py] [_log()] Compression: none
2025-12-25T22:44:02.457 [DEBUG] [Thread-19832] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:44:02.518 [DEBUG] [Thread-19832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:44:02.518 [DEBUG] [Thread-19832] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:44:02.518 [DEBUG] [Thread-19832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:44:02.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:44:02.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:44:02.582 [DEBUG] [Thread-19832] [transport.py] [_log()] userauth is OK
2025-12-25T22:44:02.582 [DEBUG] [Thread-19832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:44:02.582 [DEBUG] [Thread-19832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:44:02.582 [DEBUG] [Thread-19832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:44:02.582 [DEBUG] [Thread-19832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:44:02.600 [INFO] [Thread-19832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:44:02.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-25T22:44:02.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:44:03.494 [DEBUG] [Thread-19832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:44:03.494 [DEBUG] [Thread-19832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:44:03.541 [DEBUG] [Thread-19832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:44:03.541 [DEBUG] [Thread-19832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:44:03.550 [DEBUG] [Thread-19832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:44:03.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:44:03.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:44:03.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-25T22:44:03.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:44:03.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:44:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:44:03.581 [DEBUG] [Thread-19832] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:44:14.021 [DEBUG] [Thread-19834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:29.076 [DEBUG] [Thread-19835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:32.319 [DEBUG] [Thread-19836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:44:33.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:44:33.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-25T22:44:34.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 44, 3), 4.07, 76.62, 0.0, 10.62, 14.68, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:44:34.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:44:03
2025-12-25T22:44:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:44:34.598 [DEBUG] [Thread-19837] [transport.py] [_log()] starting thread (client mode): 0xb6b7ca00
2025-12-25T22:44:34.598 [DEBUG] [Thread-19837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:44:34.618 [DEBUG] [Thread-19837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:44:34.618 [INFO] [Thread-19837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:34.621 [DEBUG] [Thread-19837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] client lang: <none>
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] server lang: <none>
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] kex follows: False
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] Compression: none
2025-12-25T22:44:34.622 [DEBUG] [Thread-19837] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:44:34.639 [DEBUG] [Thread-19837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:44:34.639 [DEBUG] [Thread-19837] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:44:34.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:44:34.640 [DEBUG] [Thread-19837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:44:34.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:44:34.643 [DEBUG] [Thread-19837] [transport.py] [_log()] userauth is OK
2025-12-25T22:44:34.643 [DEBUG] [Thread-19837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:44:34.643 [DEBUG] [Thread-19837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:44:34.643 [DEBUG] [Thread-19837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:44:34.643 [DEBUG] [Thread-19837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:44:34.666 [INFO] [Thread-19837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:44:34.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:44:35.314 [DEBUG] [Thread-19837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:44:35.315 [DEBUG] [Thread-19837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:44:35.315 [DEBUG] [Thread-19837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:44:35.356 [DEBUG] [Thread-19837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:44:35.356 [DEBUG] [Thread-19837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:44:35.359 [DEBUG] [Thread-19837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:44:35.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:44:35.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:44:35.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:44:35.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:44:35.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:44:35.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:44:35.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:44:35.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:44:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:44:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.863947 -999.00  +15.00   4.85     78  +11.30 1 1 1 1 1     0    0 3.23 -19.81 ZNESW 9.9 4.8 208.4 9.2 15.8 -22.2 15.7 -21.6 15.5 -20.2 15.8 -21.2
2025-12-25T22:44:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:44:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:44:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.863947
2025-12-25T22:44:35.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:44:35.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:44:35.383 [DEBUG] [Thread-19837] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:44:35.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:44:35.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:44:35.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:44:35.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:44:03', tmtdew=4.07, humidity=76.62, cloud=0.0, wind=10.62, 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-25T22:44:04', seeing=1.79, atlas_timestamp='2025-12-25T20:44:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.06974999999999909, 0.1382500000000011, 0.18375000000000163, 0.11299999999999955, 0.07150000000000034, 0.18925000000000125, 0.14599999999999902, 0.14825000000000088, 0.13599999999999923, 0.08699999999999974, 0.16024999999999956, 0.08099999999999952, 0.17199999999999882, 0.13374999999999915, 0.1399999999999988, 0.16049999999999898, 0.09525000000000006, 0.10849999999999937, 0.09299999999999997, 0.11474999999999902, 0.1059999999999981, 0.17574999999999896, 0.1542500000000011, 0.13375000000000092, 0.11799999999999855, 0.13150000000000084, 0.17074999999999996, 0.21450000000000102, 0.15300000000000047, 0.20500000000000185, 0.2220000000000013, 0.1880000000000006, 0.15775000000000006], zp_timestamp='2025-12-25T20:41:00')
2025-12-25T22:44:35.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-25T22:44:35.483 [DEBUG] [Thread-19840] [transport.py] [_log()] starting thread (client mode): 0xb6b76dd0
2025-12-25T22:44:35.483 [DEBUG] [Thread-19840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:44:35.497 [DEBUG] [Thread-19840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:44:35.497 [INFO] [Thread-19840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:44:35.504 [DEBUG] [Thread-19840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:44:35.504 [DEBUG] [Thread-19840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:44:35.504 [DEBUG] [Thread-19840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:44:35.504 [DEBUG] [Thread-19840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:35.504 [DEBUG] [Thread-19840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] client lang: <none>
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] server lang: <none>
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] kex follows: False
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] Compression: none
2025-12-25T22:44:35.505 [DEBUG] [Thread-19840] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:44:35.561 [DEBUG] [Thread-19840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:44:35.561 [DEBUG] [Thread-19840] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:44:35.562 [DEBUG] [Thread-19840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:44:35.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:44:35.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:44:35.617 [DEBUG] [Thread-19840] [transport.py] [_log()] userauth is OK
2025-12-25T22:44:35.617 [DEBUG] [Thread-19840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:44:35.618 [DEBUG] [Thread-19840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:44:35.618 [DEBUG] [Thread-19840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:44:35.618 [DEBUG] [Thread-19840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:44:35.641 [INFO] [Thread-19840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:44:35.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-25T22:44:35.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:44:36.445 [DEBUG] [Thread-19840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:44:36.445 [DEBUG] [Thread-19840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:44:36.492 [DEBUG] [Thread-19840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:44:36.492 [DEBUG] [Thread-19840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:44:36.501 [DEBUG] [Thread-19840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:44:36.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:44:36.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-25T22:44:36.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-25T22:44:36.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:44:36.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:44:36.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:44:36.532 [DEBUG] [Thread-19840] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:44:44.108 [DEBUG] [Thread-19842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:44:59.160 [DEBUG] [Thread-19843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:02.463 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:02.464 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:45:06.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:45:06.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-25T22:45:07.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 44, 35), 4.17, 76.12, 0.0, 9.71, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:45:07.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:44:35
2025-12-25T22:45:07.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:45:07.536 [DEBUG] [Thread-19844] [transport.py] [_log()] starting thread (client mode): 0xb6b76800
2025-12-25T22:45:07.536 [DEBUG] [Thread-19844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:45:07.552 [DEBUG] [Thread-19844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:45:07.552 [INFO] [Thread-19844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] client lang: <none>
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] server lang: <none>
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] kex follows: False
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:45:07.555 [DEBUG] [Thread-19844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:45:07.556 [DEBUG] [Thread-19844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:45:07.556 [DEBUG] [Thread-19844] [transport.py] [_log()] Compression: none
2025-12-25T22:45:07.556 [DEBUG] [Thread-19844] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:45:07.570 [DEBUG] [Thread-19844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:45:07.571 [DEBUG] [Thread-19844] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:45:07.571 [DEBUG] [Thread-19844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:45:07.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:45:07.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:45:07.573 [DEBUG] [Thread-19844] [transport.py] [_log()] userauth is OK
2025-12-25T22:45:07.574 [DEBUG] [Thread-19844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:45:07.574 [DEBUG] [Thread-19844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:45:07.574 [DEBUG] [Thread-19844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:45:07.574 [DEBUG] [Thread-19844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:45:07.592 [INFO] [Thread-19844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:45:07.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:45:10.038 [DEBUG] [Thread-19844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:45:10.038 [DEBUG] [Thread-19844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:45:10.038 [DEBUG] [Thread-19844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:45:10.080 [DEBUG] [Thread-19844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:45:10.080 [DEBUG] [Thread-19844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:45:10.082 [DEBUG] [Thread-19844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:45:10.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:45:10.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:45:10.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:45:10.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:45:10.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:45:10.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:45:10.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:45:10.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:45:10.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:45:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.864300 -999.00  +14.90   6.90     78  +11.30 1 1 1 1 1     0    0 3.17 -21.18 ZNESW 9.7 6.9 231.8 13.0 15.8 -22.2 15.7 -21.6 15.5 -20.2 15.8 -21.2
2025-12-25T22:45:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:45:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:45:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.864300
2025-12-25T22:45:10.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:45:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:45:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:45:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:45:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:45:10.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:44:35', tmtdew=4.17, humidity=76.12, cloud=0.0, wind=9.71, 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-25T22:44:36', seeing=1.84, atlas_timestamp='2025-12-25T20:44:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.06974999999999909, 0.1382500000000011, 0.18375000000000163, 0.11299999999999955, 0.07150000000000034, 0.18925000000000125, 0.14599999999999902, 0.14825000000000088, 0.13599999999999923, 0.08699999999999974, 0.16024999999999956, 0.08099999999999952, 0.17199999999999882, 0.13374999999999915, 0.1399999999999988, 0.16049999999999898, 0.09525000000000006, 0.10849999999999937, 0.09299999999999997, 0.11474999999999902, 0.1059999999999981, 0.17574999999999896, 0.1542500000000011, 0.13375000000000092, 0.11799999999999855, 0.13150000000000084, 0.17074999999999996, 0.21450000000000102, 0.15300000000000047, 0.20500000000000185, 0.2220000000000013, 0.1880000000000006, 0.15775000000000006], zp_timestamp='2025-12-25T20:41:00')
2025-12-25T22:45:10.137 [DEBUG] [Thread-19844] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:45:10.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-25T22:45:10.230 [DEBUG] [Thread-19847] [transport.py] [_log()] starting thread (client mode): 0xb6b77f70
2025-12-25T22:45:10.230 [DEBUG] [Thread-19847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:45:10.246 [DEBUG] [Thread-19847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:45:10.246 [INFO] [Thread-19847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:10.253 [DEBUG] [Thread-19847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] client lang: <none>
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] server lang: <none>
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] kex follows: False
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] Compression: none
2025-12-25T22:45:10.254 [DEBUG] [Thread-19847] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:45:10.310 [DEBUG] [Thread-19847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:45:10.311 [DEBUG] [Thread-19847] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:45:10.311 [DEBUG] [Thread-19847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:45:10.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:45:10.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:45:10.366 [DEBUG] [Thread-19847] [transport.py] [_log()] userauth is OK
2025-12-25T22:45:10.366 [DEBUG] [Thread-19847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:45:10.366 [DEBUG] [Thread-19847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:45:10.366 [DEBUG] [Thread-19847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:45:10.366 [DEBUG] [Thread-19847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:45:10.384 [INFO] [Thread-19847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:45:10.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:45:10.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:45:11.231 [DEBUG] [Thread-19847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:45:11.231 [DEBUG] [Thread-19847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:45:11.279 [DEBUG] [Thread-19847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:45:11.279 [DEBUG] [Thread-19847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:45:11.288 [DEBUG] [Thread-19847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:45:11.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:45:11.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-25T22:45:11.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-25T22:45:11.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:45:11.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:45:11.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:45:11.326 [DEBUG] [Thread-19847] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:45:14.195 [DEBUG] [Thread-19849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:29.244 [DEBUG] [Thread-19850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:32.385 [DEBUG] [Thread-19851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:45:41.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:45:41.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:45:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 45, 7), 4.18, 76.07, 0.0, 10.2, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:45:42.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:45:07
2025-12-25T22:45:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:45:42.384 [DEBUG] [Thread-19852] [transport.py] [_log()] starting thread (client mode): 0xb6b7ca00
2025-12-25T22:45:42.385 [DEBUG] [Thread-19852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:45:42.404 [DEBUG] [Thread-19852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:45:42.404 [INFO] [Thread-19852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:42.407 [DEBUG] [Thread-19852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] client lang: <none>
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] server lang: <none>
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] kex follows: False
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] Compression: none
2025-12-25T22:45:42.408 [DEBUG] [Thread-19852] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:45:42.425 [DEBUG] [Thread-19852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:45:42.425 [DEBUG] [Thread-19852] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:45:42.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:45:42.426 [DEBUG] [Thread-19852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:45:42.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:45:42.429 [DEBUG] [Thread-19852] [transport.py] [_log()] userauth is OK
2025-12-25T22:45:42.429 [DEBUG] [Thread-19852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:45:42.429 [DEBUG] [Thread-19852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:45:42.429 [DEBUG] [Thread-19852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:45:42.429 [DEBUG] [Thread-19852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:45:42.454 [INFO] [Thread-19852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:45:42.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:45:43.042 [DEBUG] [Thread-19852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:45:43.042 [DEBUG] [Thread-19852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:45:43.043 [DEBUG] [Thread-19852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:45:43.083 [DEBUG] [Thread-19852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:45:43.083 [DEBUG] [Thread-19852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:45:43.086 [DEBUG] [Thread-19852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:45:43.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:45:43.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:45:43.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:45:43.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:45:43.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:45:43.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:45:43.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:45:43.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:45:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:45:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.864641 -999.00  +14.90   7.89     78  +11.20 1 1 1 1 1     0    0 3.05 -24.12 ZNESW 6.3 7.9 246.8 10.4 15.8 -22.2 15.7 -21.6 15.5 -20.2 15.7 -21.3
2025-12-25T22:45:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:45:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:45:43.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.864641
2025-12-25T22:45:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:45:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:45:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:45:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:45:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:45:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:45:07', tmtdew=4.18, humidity=76.07, cloud=0.0, wind=10.2, 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-25T22:45:40', seeing=1.38, atlas_timestamp='2025-12-25T20:45:04.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.06974999999999909, 0.1382500000000011, 0.18375000000000163, 0.11299999999999955, 0.07150000000000034, 0.18925000000000125, 0.14599999999999902, 0.14825000000000088, 0.13599999999999923, 0.08699999999999974, 0.16024999999999956, 0.08099999999999952, 0.17199999999999882, 0.13374999999999915, 0.1399999999999988, 0.16049999999999898, 0.09525000000000006, 0.10849999999999937, 0.09299999999999997, 0.11474999999999902, 0.1059999999999981, 0.17574999999999896, 0.1542500000000011, 0.13375000000000092, 0.11799999999999855, 0.13150000000000084, 0.17074999999999996, 0.21450000000000102, 0.15300000000000047, 0.20500000000000185, 0.2220000000000013, 0.1880000000000006, 0.15775000000000006], zp_timestamp='2025-12-25T20:41:00')
2025-12-25T22:45:43.114 [DEBUG] [Thread-19852] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:45:43.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-25T22:45:43.207 [DEBUG] [Thread-19855] [transport.py] [_log()] starting thread (client mode): 0xb6bab010
2025-12-25T22:45:43.208 [DEBUG] [Thread-19855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:45:43.223 [DEBUG] [Thread-19855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:45:43.223 [INFO] [Thread-19855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:45:43.231 [DEBUG] [Thread-19855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] client lang: <none>
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] server lang: <none>
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] kex follows: False
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] Compression: none
2025-12-25T22:45:43.232 [DEBUG] [Thread-19855] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:45:43.288 [DEBUG] [Thread-19855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:45:43.288 [DEBUG] [Thread-19855] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:45:43.289 [DEBUG] [Thread-19855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:45:43.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:45:43.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:45:43.344 [DEBUG] [Thread-19855] [transport.py] [_log()] userauth is OK
2025-12-25T22:45:43.344 [DEBUG] [Thread-19855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:45:43.344 [DEBUG] [Thread-19855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:45:43.344 [DEBUG] [Thread-19855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:45:43.344 [DEBUG] [Thread-19855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:45:43.364 [INFO] [Thread-19855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:45:43.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-25T22:45:43.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:45:44.206 [DEBUG] [Thread-19855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:45:44.206 [DEBUG] [Thread-19855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:45:44.254 [DEBUG] [Thread-19855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:45:44.254 [DEBUG] [Thread-19855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:45:44.263 [DEBUG] [Thread-19855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:45:44.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:45:44.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-25T22:45:44.275 [DEBUG] [Thread-19857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:45:44.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:45:44.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:45:44.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:45:44.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:45:44.299 [DEBUG] [Thread-19855] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:45:59.325 [DEBUG] [Thread-19858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:02.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:02.668 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:46:14.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:46:14.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-25T22:46:14.356 [DEBUG] [Thread-19859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:15.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 46, 11), 4.24, 76.02, 0.0, 11.03, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:46:15.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:46:11
2025-12-25T22:46:15.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:46:15.300 [DEBUG] [Thread-19860] [transport.py] [_log()] starting thread (client mode): 0xb6bb6920
2025-12-25T22:46:15.300 [DEBUG] [Thread-19860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:46:15.320 [DEBUG] [Thread-19860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:46:15.321 [INFO] [Thread-19860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] client lang: <none>
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] server lang: <none>
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] kex follows: False
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] Compression: none
2025-12-25T22:46:15.323 [DEBUG] [Thread-19860] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:46:15.339 [DEBUG] [Thread-19860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:46:15.340 [DEBUG] [Thread-19860] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:46:15.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:46:15.341 [DEBUG] [Thread-19860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:46:15.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:46:15.343 [DEBUG] [Thread-19860] [transport.py] [_log()] userauth is OK
2025-12-25T22:46:15.343 [DEBUG] [Thread-19860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:46:15.343 [DEBUG] [Thread-19860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:46:15.344 [DEBUG] [Thread-19860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:46:15.344 [DEBUG] [Thread-19860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:46:15.362 [INFO] [Thread-19860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:46:15.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:46:15.998 [DEBUG] [Thread-19860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:46:15.998 [DEBUG] [Thread-19860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:46:15.999 [DEBUG] [Thread-19860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:46:16.040 [DEBUG] [Thread-19860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:46:16.040 [DEBUG] [Thread-19860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:46:16.043 [DEBUG] [Thread-19860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:46:16.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:46:16.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:46:16.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:46:16.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:46:16.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:46:16.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:46:16.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:46:16.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:46:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:46:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.864988 -999.00  +15.00   4.88     78  +11.20 1 1 1 1 1     0    0 3.10 -21.98 ZNESW 5.0 4.9 245.6 10.4 15.8 -22.2 15.7 -21.5 15.4 -20.1 15.7 -21.3
2025-12-25T22:46:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:46:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:46:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.864988
2025-12-25T22:46:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:46:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:46:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:46:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:46:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:46:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:46:11', tmtdew=4.24, humidity=76.02, cloud=0.0, wind=11.03, 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-25T22:46:12', seeing=1.18, atlas_timestamp='2025-12-25T20:45:34.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:44:00')
2025-12-25T22:46:16.076 [DEBUG] [Thread-19860] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:46:16.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-25T22:46:16.169 [DEBUG] [Thread-19863] [transport.py] [_log()] starting thread (client mode): 0xb6ba95a0
2025-12-25T22:46:16.169 [DEBUG] [Thread-19863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:46:16.185 [DEBUG] [Thread-19863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:46:16.185 [INFO] [Thread-19863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] client lang: <none>
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] server lang: <none>
2025-12-25T22:46:16.193 [DEBUG] [Thread-19863] [transport.py] [_log()] kex follows: False
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] Compression: none
2025-12-25T22:46:16.194 [DEBUG] [Thread-19863] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:46:16.252 [DEBUG] [Thread-19863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:46:16.253 [DEBUG] [Thread-19863] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:46:16.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:46:16.254 [DEBUG] [Thread-19863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:46:16.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:46:16.309 [DEBUG] [Thread-19863] [transport.py] [_log()] userauth is OK
2025-12-25T22:46:16.309 [DEBUG] [Thread-19863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:46:16.309 [DEBUG] [Thread-19863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:46:16.309 [DEBUG] [Thread-19863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:46:16.309 [DEBUG] [Thread-19863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:46:16.328 [INFO] [Thread-19863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:46:16.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-25T22:46:16.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:46:17.206 [DEBUG] [Thread-19863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:46:17.206 [DEBUG] [Thread-19863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:46:17.254 [DEBUG] [Thread-19863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:46:17.254 [DEBUG] [Thread-19863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:46:17.263 [DEBUG] [Thread-19863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:46:17.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:46: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')
2025-12-25T22:46:17.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-25T22:46:17.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:46:17.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:46:17.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:46:17.299 [DEBUG] [Thread-19863] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:46:29.387 [DEBUG] [Thread-19865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:32.443 [DEBUG] [Thread-19866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:44.435 [DEBUG] [Thread-19867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:46:47.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:46:47.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:46:47.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-25T22:46:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 46, 43), 4.27, 75.37, 0.0, 15.51, 14.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:46:48.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:46:43
2025-12-25T22:46:48.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:46:48.309 [DEBUG] [Thread-19868] [transport.py] [_log()] starting thread (client mode): 0xb6ba9a80
2025-12-25T22:46:48.309 [DEBUG] [Thread-19868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:46:48.329 [DEBUG] [Thread-19868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:46:48.329 [INFO] [Thread-19868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:46:48.332 [DEBUG] [Thread-19868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] client lang: <none>
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] server lang: <none>
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] kex follows: False
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] Compression: none
2025-12-25T22:46:48.333 [DEBUG] [Thread-19868] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:46:48.347 [DEBUG] [Thread-19868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:46:48.348 [DEBUG] [Thread-19868] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:46:48.348 [DEBUG] [Thread-19868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:46:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:46:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:46:48.348 [DEBUG] [Thread-19868] [transport.py] [_log()] userauth is OK
2025-12-25T22:46:48.348 [DEBUG] [Thread-19868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:46:48.348 [DEBUG] [Thread-19868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:46:48.348 [DEBUG] [Thread-19868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:46:48.349 [DEBUG] [Thread-19868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:46:48.364 [INFO] [Thread-19868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:46:48.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:46:49.027 [DEBUG] [Thread-19868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:46:49.027 [DEBUG] [Thread-19868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:46:49.027 [DEBUG] [Thread-19868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:46:49.067 [DEBUG] [Thread-19868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:46:49.068 [DEBUG] [Thread-19868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:46:49.070 [DEBUG] [Thread-19868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:46:49.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:46:49.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:46:49.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:46:49.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:46:49.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:46:49.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:46:49.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.865336 -999.00  +15.00   8.40     78  +11.20 1 1 1 1 1     0    0 3.05 -23.01 ZNESW 12.5 8.4 243.0 13.7 15.8 -22.3 15.7 -21.7 15.4 -20.2 15.8 -21.4
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.865336
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:46:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:46:43', tmtdew=4.27, humidity=75.37, cloud=0.0, wind=15.51, temperature=14.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:46:44', seeing=1.97, atlas_timestamp='2025-12-25T20:46:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:44:00')
2025-12-25T22:46:49.095 [DEBUG] [Thread-19868] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:46:49.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-25T22:46:49.186 [DEBUG] [Thread-19871] [transport.py] [_log()] starting thread (client mode): 0xb6bb5ff0
2025-12-25T22:46:49.186 [DEBUG] [Thread-19871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:46:49.201 [DEBUG] [Thread-19871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:46:49.201 [INFO] [Thread-19871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] client lang: <none>
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] server lang: <none>
2025-12-25T22:46:49.210 [DEBUG] [Thread-19871] [transport.py] [_log()] kex follows: False
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] Compression: none
2025-12-25T22:46:49.211 [DEBUG] [Thread-19871] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:46:49.269 [DEBUG] [Thread-19871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:46:49.269 [DEBUG] [Thread-19871] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:46:49.270 [DEBUG] [Thread-19871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:46:49.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:46:49.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:46:49.325 [DEBUG] [Thread-19871] [transport.py] [_log()] userauth is OK
2025-12-25T22:46:49.325 [DEBUG] [Thread-19871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:46:49.326 [DEBUG] [Thread-19871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:46:49.326 [DEBUG] [Thread-19871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:46:49.326 [DEBUG] [Thread-19871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:46:49.344 [INFO] [Thread-19871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:46:49.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-25T22:46:49.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:46:50.177 [DEBUG] [Thread-19871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:46:50.177 [DEBUG] [Thread-19871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:46:50.225 [DEBUG] [Thread-19871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:46:50.225 [DEBUG] [Thread-19871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:46:50.234 [DEBUG] [Thread-19871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:46:50.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:46:50.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:46:50.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-25T22:46:50.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:46:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:46:50.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:46:50.271 [DEBUG] [Thread-19871] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:46:59.464 [DEBUG] [Thread-19873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:02.869 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:02.870 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:14.515 [DEBUG] [Thread-19874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:47:20.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:47: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-25T22:47:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 47, 15), 4.33, 75.09, 0.0, 13.55, 14.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:47:20.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:47:15
2025-12-25T22:47:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:47:21.253 [DEBUG] [Thread-19875] [transport.py] [_log()] starting thread (client mode): 0xb6bf7070
2025-12-25T22:47:21.253 [DEBUG] [Thread-19875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:47:21.272 [DEBUG] [Thread-19875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:47:21.272 [INFO] [Thread-19875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] client lang: <none>
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] server lang: <none>
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] kex follows: False
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:47:21.276 [DEBUG] [Thread-19875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:47:21.277 [DEBUG] [Thread-19875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:47:21.277 [DEBUG] [Thread-19875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:47:21.277 [DEBUG] [Thread-19875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:47:21.277 [DEBUG] [Thread-19875] [transport.py] [_log()] Compression: none
2025-12-25T22:47:21.277 [DEBUG] [Thread-19875] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:47:21.293 [DEBUG] [Thread-19875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:47:21.294 [DEBUG] [Thread-19875] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:47:21.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:47:21.294 [DEBUG] [Thread-19875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:47:21.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:47:21.296 [DEBUG] [Thread-19875] [transport.py] [_log()] userauth is OK
2025-12-25T22:47:21.296 [DEBUG] [Thread-19875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:47:21.296 [DEBUG] [Thread-19875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:47:21.297 [DEBUG] [Thread-19875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:47:21.297 [DEBUG] [Thread-19875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:47:21.313 [INFO] [Thread-19875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:47:21.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:47:21.946 [DEBUG] [Thread-19875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:47:21.946 [DEBUG] [Thread-19875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:47:21.946 [DEBUG] [Thread-19875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:47:21.988 [DEBUG] [Thread-19875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:47:21.988 [DEBUG] [Thread-19875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:47:21.990 [DEBUG] [Thread-19875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:47:22.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:47:22.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:47:22.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:47:22.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:47:22.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:47:22.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:47:22.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:47:22.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:47:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:47:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.866036 -999.00  +15.10  10.83     77  +11.30 1 1 1 1 1     0    0 3.17 -20.90 ZNESW 10.7 10.8 248.9 16.3 15.8 -22.2 15.7 -21.5 15.5 -20.1 15.7 -21.2
2025-12-25T22:47:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:47:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:47:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.866036
2025-12-25T22:47:22.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:47:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:47:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:47:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:47:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:47:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:47:15', tmtdew=4.33, humidity=75.09, cloud=0.0, wind=13.55, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:47:16', seeing=0.96, atlas_timestamp='2025-12-25T20:47:05.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:44:00')
2025-12-25T22:47:22.015 [DEBUG] [Thread-19875] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:47:22.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-25T22:47:22.107 [DEBUG] [Thread-19878] [transport.py] [_log()] starting thread (client mode): 0xb6bf4550
2025-12-25T22:47:22.107 [DEBUG] [Thread-19878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:47:22.121 [DEBUG] [Thread-19878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:47:22.121 [INFO] [Thread-19878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] client lang: <none>
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] server lang: <none>
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] kex follows: False
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] Compression: none
2025-12-25T22:47:22.129 [DEBUG] [Thread-19878] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:47:22.187 [DEBUG] [Thread-19878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:47:22.187 [DEBUG] [Thread-19878] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:47:22.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:47:22.188 [DEBUG] [Thread-19878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:47:22.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:47:22.243 [DEBUG] [Thread-19878] [transport.py] [_log()] userauth is OK
2025-12-25T22:47:22.244 [DEBUG] [Thread-19878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:47:22.244 [DEBUG] [Thread-19878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:47:22.244 [DEBUG] [Thread-19878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:47:22.244 [DEBUG] [Thread-19878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:47:22.262 [INFO] [Thread-19878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:47:22.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-25T22:47:22.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:47:23.126 [DEBUG] [Thread-19878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:47:23.126 [DEBUG] [Thread-19878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:47:23.174 [DEBUG] [Thread-19878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:47:23.174 [DEBUG] [Thread-19878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:47:23.183 [DEBUG] [Thread-19878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:47:23.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:47:23.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-25T22:47:23.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-25T22:47:23.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:47:23.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:47:23.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:47:23.220 [DEBUG] [Thread-19878] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:47:29.545 [DEBUG] [Thread-19880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:32.498 [DEBUG] [Thread-19881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:44.594 [DEBUG] [Thread-19882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:47:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:47:53.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:47:53.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-25T22:47:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 47, 48), 4.47, 74.39, 0.0, 16.46, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:47:53.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:47:48
2025-12-25T22:47:54.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:47:54.248 [DEBUG] [Thread-19883] [transport.py] [_log()] starting thread (client mode): 0xb6bf5150
2025-12-25T22:47:54.248 [DEBUG] [Thread-19883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:47:54.268 [DEBUG] [Thread-19883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:47:54.268 [INFO] [Thread-19883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] client lang: <none>
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] server lang: <none>
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] kex follows: False
2025-12-25T22:47:54.271 [DEBUG] [Thread-19883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:47:54.272 [DEBUG] [Thread-19883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:47:54.272 [DEBUG] [Thread-19883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:47:54.272 [DEBUG] [Thread-19883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:47:54.272 [DEBUG] [Thread-19883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:47:54.272 [DEBUG] [Thread-19883] [transport.py] [_log()] Compression: none
2025-12-25T22:47:54.272 [DEBUG] [Thread-19883] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:47:54.286 [DEBUG] [Thread-19883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:47:54.286 [DEBUG] [Thread-19883] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:47:54.286 [DEBUG] [Thread-19883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:47:54.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:47:54.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:47:54.287 [DEBUG] [Thread-19883] [transport.py] [_log()] userauth is OK
2025-12-25T22:47:54.287 [DEBUG] [Thread-19883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:47:54.287 [DEBUG] [Thread-19883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:47:54.287 [DEBUG] [Thread-19883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:47:54.287 [DEBUG] [Thread-19883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:47:54.298 [INFO] [Thread-19883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:47:54.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:47:54.950 [DEBUG] [Thread-19883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:47:54.950 [DEBUG] [Thread-19883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:47:54.950 [DEBUG] [Thread-19883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:47:54.991 [DEBUG] [Thread-19883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:47:54.991 [DEBUG] [Thread-19883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:47:54.994 [DEBUG] [Thread-19883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:47:55.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:47:55.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:47:55.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:47:55.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:47:55.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:47:55.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:47:55.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:47:55.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:47:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:47:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.866377 -999.00  +15.00   7.29     78  +11.20 1 1 1 1 1     0    0 3.18 -19.96 ZNESW 9.0 7.3 242.1 11.6 15.8 -22.2 15.7 -21.7 15.4 -20.2 -999.0 -999.0
2025-12-25T22:47:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:47:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:47:55.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.866377
2025-12-25T22:47:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:47:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:47:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:47:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:47:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:47:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:47:48', tmtdew=4.47, humidity=74.39, cloud=0.0, wind=16.46, 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-25T22:47:48', seeing=0.96, atlas_timestamp='2025-12-25T20:47:34.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:44:00')
2025-12-25T22:47:55.012 [DEBUG] [Thread-19883] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:47:55.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-25T22:47:55.096 [DEBUG] [Thread-19886] [transport.py] [_log()] starting thread (client mode): 0xb6ba95a0
2025-12-25T22:47:55.096 [DEBUG] [Thread-19886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:47:55.111 [DEBUG] [Thread-19886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:47:55.111 [INFO] [Thread-19886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] client lang: <none>
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] server lang: <none>
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] kex follows: False
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] Compression: none
2025-12-25T22:47:55.119 [DEBUG] [Thread-19886] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:47:55.177 [DEBUG] [Thread-19886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:47:55.178 [DEBUG] [Thread-19886] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:47:55.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:47:55.178 [DEBUG] [Thread-19886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:47:55.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:47:55.234 [DEBUG] [Thread-19886] [transport.py] [_log()] userauth is OK
2025-12-25T22:47:55.235 [DEBUG] [Thread-19886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:47:55.235 [DEBUG] [Thread-19886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:47:55.235 [DEBUG] [Thread-19886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:47:55.235 [DEBUG] [Thread-19886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:47:55.249 [INFO] [Thread-19886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:47:55.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-25T22:47:55.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:47:56.125 [DEBUG] [Thread-19886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:47:56.126 [DEBUG] [Thread-19886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:47:56.173 [DEBUG] [Thread-19886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:47:56.173 [DEBUG] [Thread-19886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:47:56.182 [DEBUG] [Thread-19886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:47:56.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:47:56.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-25T22:47:56.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:47:56.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:47:56.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:47:56.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:47:56.213 [DEBUG] [Thread-19886] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:47:59.627 [DEBUG] [Thread-19888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:03.069 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:03.071 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:14.680 [DEBUG] [Thread-19889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:26.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:48:26.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:48:26.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:48:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 48, 20), 4.49, 74.28, 0.0, 14.2, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:48:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:48:20
2025-12-25T22:48:27.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:48:27.190 [DEBUG] [Thread-19890] [transport.py] [_log()] starting thread (client mode): 0xb6bf4c10
2025-12-25T22:48:27.190 [DEBUG] [Thread-19890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:48:27.210 [DEBUG] [Thread-19890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:48:27.210 [INFO] [Thread-19890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] client lang: <none>
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] server lang: <none>
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] kex follows: False
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] Compression: none
2025-12-25T22:48:27.214 [DEBUG] [Thread-19890] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:48:27.234 [DEBUG] [Thread-19890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:48:27.234 [DEBUG] [Thread-19890] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:48:27.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:48:27.235 [DEBUG] [Thread-19890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:48:27.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:48:27.237 [DEBUG] [Thread-19890] [transport.py] [_log()] userauth is OK
2025-12-25T22:48:27.238 [DEBUG] [Thread-19890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:48:27.238 [DEBUG] [Thread-19890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:48:27.238 [DEBUG] [Thread-19890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:48:27.238 [DEBUG] [Thread-19890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:48:27.262 [INFO] [Thread-19890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:48:27.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:48:27.910 [DEBUG] [Thread-19890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:48:27.911 [DEBUG] [Thread-19890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:48:27.911 [DEBUG] [Thread-19890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:48:27.952 [DEBUG] [Thread-19890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:48:27.952 [DEBUG] [Thread-19890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:48:27.956 [DEBUG] [Thread-19890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:48:27.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:48:27.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:48:27.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:48:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:48:27.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:48:27.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:48:27.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:48:27.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:48:27.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:48:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.866725 -999.00  +15.00  10.32     78  +11.20 1 1 1 1 1     0    0 3.21 -17.91 ZNESW 8.1 10.3 253.4 11.1 15.7 -22.1 15.7 -21.6 15.4 -20.3 15.7 -21.2
2025-12-25T22:48:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:48:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:48:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.866725
2025-12-25T22:48:27.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:48:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:48:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:48:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:48:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:48:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:48:20', tmtdew=4.49, humidity=74.28, cloud=0.0, wind=14.2, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:48:20', seeing=0.96, atlas_timestamp='2025-12-25T20:48:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:44:00')
2025-12-25T22:48:27.986 [DEBUG] [Thread-19890] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:48:28.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-25T22:48:28.082 [DEBUG] [Thread-19893] [transport.py] [_log()] starting thread (client mode): 0xb6bb6500
2025-12-25T22:48:28.082 [DEBUG] [Thread-19893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:48:28.097 [DEBUG] [Thread-19893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:48:28.097 [INFO] [Thread-19893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:48:28.105 [DEBUG] [Thread-19893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:48:28.105 [DEBUG] [Thread-19893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:48:28.106 [DEBUG] [Thread-19893] [transport.py] [_log()] client lang: <none>
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] server lang: <none>
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] kex follows: False
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:48:28.107 [DEBUG] [Thread-19893] [transport.py] [_log()] Compression: none
2025-12-25T22:48:28.108 [DEBUG] [Thread-19893] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:48:28.173 [DEBUG] [Thread-19893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:48:28.174 [DEBUG] [Thread-19893] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:48:28.174 [DEBUG] [Thread-19893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:48:28.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:48:28.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:48:28.232 [DEBUG] [Thread-19893] [transport.py] [_log()] userauth is OK
2025-12-25T22:48:28.233 [DEBUG] [Thread-19893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:48:28.233 [DEBUG] [Thread-19893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:48:28.233 [DEBUG] [Thread-19893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:48:28.233 [DEBUG] [Thread-19893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:48:28.253 [INFO] [Thread-19893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:48:28.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-25T22:48:28.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:48:29.114 [DEBUG] [Thread-19893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:48:29.115 [DEBUG] [Thread-19893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:48:29.161 [DEBUG] [Thread-19893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:48:29.161 [DEBUG] [Thread-19893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:48:29.169 [DEBUG] [Thread-19893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:48:29.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:48:29.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-25T22:48:29.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:48:29.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:48:29.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:48:29.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:48:29.203 [DEBUG] [Thread-19893] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:48:29.716 [DEBUG] [Thread-19895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:29.982 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:32.550 [DEBUG] [Thread-19896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:44.768 [DEBUG] [Thread-19897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:59.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:48:59.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:48:59.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-25T22:48:59.800 [DEBUG] [Thread-19898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:48:59.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 48, 52), 4.51, 74.19, 0.0, 12.81, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:48:59.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:48:52
2025-12-25T22:49:00.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:49:00.223 [DEBUG] [Thread-19899] [transport.py] [_log()] starting thread (client mode): 0xb6b23a60
2025-12-25T22:49:00.223 [DEBUG] [Thread-19899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:49:00.243 [DEBUG] [Thread-19899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:49:00.243 [INFO] [Thread-19899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:49:00.246 [DEBUG] [Thread-19899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] client lang: <none>
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] server lang: <none>
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] kex follows: False
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:49:00.247 [DEBUG] [Thread-19899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:49:00.248 [DEBUG] [Thread-19899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:49:00.248 [DEBUG] [Thread-19899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:49:00.248 [DEBUG] [Thread-19899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:49:00.248 [DEBUG] [Thread-19899] [transport.py] [_log()] Compression: none
2025-12-25T22:49:00.248 [DEBUG] [Thread-19899] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:49:00.266 [DEBUG] [Thread-19899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:49:00.266 [DEBUG] [Thread-19899] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:49:00.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:49:00.267 [DEBUG] [Thread-19899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:49:00.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:49:00.270 [DEBUG] [Thread-19899] [transport.py] [_log()] userauth is OK
2025-12-25T22:49:00.270 [DEBUG] [Thread-19899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:49:00.270 [DEBUG] [Thread-19899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:49:00.270 [DEBUG] [Thread-19899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:49:00.270 [DEBUG] [Thread-19899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:49:00.289 [INFO] [Thread-19899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:49:00.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:49:00.922 [DEBUG] [Thread-19899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:49:00.922 [DEBUG] [Thread-19899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:49:00.922 [DEBUG] [Thread-19899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:49:00.963 [DEBUG] [Thread-19899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:49:00.963 [DEBUG] [Thread-19899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:49:00.967 [DEBUG] [Thread-19899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:49:00.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:49:00.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:49:00.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:49:00.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:49:00.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:49:00.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:49:00.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:49:00.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:49:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:49:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.867072 -999.00  +15.00   7.53     78  +11.30 1 1 1 1 1     0    0 3.17 -18.13 ZNESW 9.3 7.5 241.0 9.6 15.7 -22.4 15.7 -21.8 15.5 -20.4 15.7 -21.2
2025-12-25T22:49:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:49:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:49:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.867072
2025-12-25T22:49:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:49:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:49:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:49:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:49:00.994 [DEBUG] [Thread-19899] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:49:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:49:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:48:52', tmtdew=4.51, humidity=74.19, cloud=0.0, wind=12.81, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:48:52', seeing=1.24, atlas_timestamp='2025-12-25T20:48:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:47:00')
2025-12-25T22:49: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-25T22:49:01.099 [DEBUG] [Thread-19902] [transport.py] [_log()] starting thread (client mode): 0xb6bb5a20
2025-12-25T22:49:01.099 [DEBUG] [Thread-19902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:49:01.114 [DEBUG] [Thread-19902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:49:01.114 [INFO] [Thread-19902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] client lang: <none>
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] server lang: <none>
2025-12-25T22:49:01.122 [DEBUG] [Thread-19902] [transport.py] [_log()] kex follows: False
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] Compression: none
2025-12-25T22:49:01.123 [DEBUG] [Thread-19902] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:49:01.179 [DEBUG] [Thread-19902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:49:01.179 [DEBUG] [Thread-19902] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:49:01.179 [DEBUG] [Thread-19902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:49:01.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:49:01.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:49:01.241 [DEBUG] [Thread-19902] [transport.py] [_log()] userauth is OK
2025-12-25T22:49:01.241 [DEBUG] [Thread-19902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:49:01.241 [DEBUG] [Thread-19902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:49:01.241 [DEBUG] [Thread-19902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:49:01.241 [DEBUG] [Thread-19902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:49:01.256 [INFO] [Thread-19902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:49:01.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-25T22:49:01.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:49:02.202 [DEBUG] [Thread-19902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:49:02.202 [DEBUG] [Thread-19902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:49:02.250 [DEBUG] [Thread-19902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:49:02.250 [DEBUG] [Thread-19902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:49:02.259 [DEBUG] [Thread-19902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:49:02.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:49:02.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')
2025-12-25T22:49:02.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-25T22:49:02.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:49:02.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:49:02.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:49:02.296 [DEBUG] [Thread-19902] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:49:03.274 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:49:03.275 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:49:14.831 [DEBUG] [Thread-19904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:49:29.879 [DEBUG] [Thread-19905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:49:32.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:49:32.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:49:32.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-25T22:49:32.603 [DEBUG] [Thread-19906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:49:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 49, 24), 4.52, 74.16, 0.0, 11.42, 14.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:49:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:49:24
2025-12-25T22:49:33.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:49:33.296 [DEBUG] [Thread-19907] [transport.py] [_log()] starting thread (client mode): 0xb6bb7340
2025-12-25T22:49:33.296 [DEBUG] [Thread-19907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:49:33.316 [DEBUG] [Thread-19907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:49:33.316 [INFO] [Thread-19907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] client lang: <none>
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] server lang: <none>
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] kex follows: False
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] Compression: none
2025-12-25T22:49:33.319 [DEBUG] [Thread-19907] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:49:33.336 [DEBUG] [Thread-19907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:49:33.336 [DEBUG] [Thread-19907] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:49:33.337 [DEBUG] [Thread-19907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:49:33.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:49:33.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:49:33.338 [DEBUG] [Thread-19907] [transport.py] [_log()] userauth is OK
2025-12-25T22:49:33.338 [DEBUG] [Thread-19907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:49:33.339 [DEBUG] [Thread-19907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:49:33.339 [DEBUG] [Thread-19907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:49:33.339 [DEBUG] [Thread-19907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:49:33.353 [INFO] [Thread-19907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:49:33.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:49:33.922 [DEBUG] [Thread-19907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:49:33.922 [DEBUG] [Thread-19907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:49:33.922 [DEBUG] [Thread-19907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:49:33.963 [DEBUG] [Thread-19907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:49:33.963 [DEBUG] [Thread-19907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:49:33.967 [DEBUG] [Thread-19907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:49:33.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:49:33.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:49:33.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:49:33.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:49:33.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:49:33.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:49:33.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:49:33.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:49:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:49:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.867425 -999.00  +14.90   7.90     78  +11.30 1 1 1 1 1     0    0 3.29 -19.07 ZNESW 8.3 7.9 260.4 12.1 15.7 -22.4 15.6 -21.7 15.4 -20.2 15.7 -21.5
2025-12-25T22:49:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:49:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:49:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.867425
2025-12-25T22:49:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:49:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:49:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:49:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:49:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:49:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:49:24', tmtdew=4.52, humidity=74.16, cloud=0.0, wind=11.42, temperature=14.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:49:24', seeing=1.49, atlas_timestamp='2025-12-25T20:49:05.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:47:00')
2025-12-25T22:49:33.990 [DEBUG] [Thread-19907] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:49:34.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-25T22:49:34.084 [DEBUG] [Thread-19910] [transport.py] [_log()] starting thread (client mode): 0xb6b03bb0
2025-12-25T22:49:34.084 [DEBUG] [Thread-19910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:49:34.099 [DEBUG] [Thread-19910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:49:34.099 [INFO] [Thread-19910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] client lang: <none>
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] server lang: <none>
2025-12-25T22:49:34.107 [DEBUG] [Thread-19910] [transport.py] [_log()] kex follows: False
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] Compression: none
2025-12-25T22:49:34.108 [DEBUG] [Thread-19910] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:49:34.166 [DEBUG] [Thread-19910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:49:34.166 [DEBUG] [Thread-19910] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:49:34.167 [DEBUG] [Thread-19910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:49:34.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:49:34.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:49:34.223 [DEBUG] [Thread-19910] [transport.py] [_log()] userauth is OK
2025-12-25T22:49:34.224 [DEBUG] [Thread-19910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:49:34.224 [DEBUG] [Thread-19910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:49:34.225 [DEBUG] [Thread-19910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:49:34.225 [DEBUG] [Thread-19910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:49:34.244 [INFO] [Thread-19910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:49:34.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-25T22:49:34.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:49:35.074 [DEBUG] [Thread-19910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:49:35.074 [DEBUG] [Thread-19910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:49:35.122 [DEBUG] [Thread-19910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:49:35.122 [DEBUG] [Thread-19910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:49:35.132 [DEBUG] [Thread-19910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:49:35.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:49:35.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')
2025-12-25T22:49:35.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:49:35.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:49:35.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:49:35.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:49:35.174 [DEBUG] [Thread-19910] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:49:44.915 [DEBUG] [Thread-19912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:49:59.954 [DEBUG] [Thread-19913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:03.477 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:03.478 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:50:05.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:50:05.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-25T22:50:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 49, 56), 4.54, 74.08, 0.0, 12.99, 14.91, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:50:05.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:49:56
2025-12-25T22:50:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:50:06.196 [DEBUG] [Thread-19914] [transport.py] [_log()] starting thread (client mode): 0xb6bb69e0
2025-12-25T22:50:06.196 [DEBUG] [Thread-19914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:50:06.216 [DEBUG] [Thread-19914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:50:06.216 [INFO] [Thread-19914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] client lang: <none>
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] server lang: <none>
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] kex follows: False
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] Compression: none
2025-12-25T22:50:06.219 [DEBUG] [Thread-19914] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:50:06.237 [DEBUG] [Thread-19914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:50:06.238 [DEBUG] [Thread-19914] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:50:06.238 [DEBUG] [Thread-19914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:50:06.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:50:06.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:50:06.240 [DEBUG] [Thread-19914] [transport.py] [_log()] userauth is OK
2025-12-25T22:50:06.240 [DEBUG] [Thread-19914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:50:06.240 [DEBUG] [Thread-19914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:50:06.241 [DEBUG] [Thread-19914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:50:06.241 [DEBUG] [Thread-19914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:50:06.260 [INFO] [Thread-19914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:50:06.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:50:14.148 [DEBUG] [Thread-19914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:50:14.149 [DEBUG] [Thread-19914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:50:14.150 [DEBUG] [Thread-19914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:50:14.190 [DEBUG] [Thread-19914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:50:14.190 [DEBUG] [Thread-19914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:50:14.193 [DEBUG] [Thread-19914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:50:14.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:50:14.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:50:14.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:50:14.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:50:14.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:50:14.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:50:14.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:50:14.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:50:14.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:50:14.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.867425 -999.00  +14.90   7.90     78  +11.30 1 1 1 1 1     0    0 3.29 -19.07 ZNESW 8.3 7.9 260.4 12.1 15.7 -22.4 15.6 -21.7 15.4 -20.2 15.7 -21.5
2025-12-25T22:50:14.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:50:14.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:50:14.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.867425
2025-12-25T22:50:14.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:50:14.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:50:14.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:50:14.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:50:14.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:50:14.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:49:56', tmtdew=4.54, humidity=74.08, cloud=0.0, wind=12.99, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:49:56', seeing=1.31, atlas_timestamp='2025-12-25T20:49:05.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:47:00')
2025-12-25T22:50:14.313 [DEBUG] [Thread-19914] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:50:14.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-25T22:50:14.407 [DEBUG] [Thread-19917] [transport.py] [_log()] starting thread (client mode): 0xb6b76140
2025-12-25T22:50:14.407 [DEBUG] [Thread-19917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:50:14.421 [DEBUG] [Thread-19917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:50:14.421 [INFO] [Thread-19917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] client lang: <none>
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] server lang: <none>
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] kex follows: False
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:50:14.429 [DEBUG] [Thread-19917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:50:14.430 [DEBUG] [Thread-19917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:50:14.430 [DEBUG] [Thread-19917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:50:14.430 [DEBUG] [Thread-19917] [transport.py] [_log()] Compression: none
2025-12-25T22:50:14.430 [DEBUG] [Thread-19917] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:50:14.486 [DEBUG] [Thread-19917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:50:14.487 [DEBUG] [Thread-19917] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:50:14.488 [DEBUG] [Thread-19917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:50:14.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:50:14.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:50:14.542 [DEBUG] [Thread-19917] [transport.py] [_log()] userauth is OK
2025-12-25T22:50:14.543 [DEBUG] [Thread-19917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:50:14.543 [DEBUG] [Thread-19917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:50:14.543 [DEBUG] [Thread-19917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:50:14.543 [DEBUG] [Thread-19917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:50:14.561 [INFO] [Thread-19917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:50:14.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-25T22:50:14.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:50:14.989 [DEBUG] [Thread-19919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:15.382 [DEBUG] [Thread-19917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:50:15.382 [DEBUG] [Thread-19917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:50:15.430 [DEBUG] [Thread-19917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:50:15.431 [DEBUG] [Thread-19917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:50:15.440 [DEBUG] [Thread-19917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:50:15.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:50:15.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-25T22:50:15.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-25T22:50:15.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:50:15.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:50:15.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:50:15.474 [DEBUG] [Thread-19917] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:50:30.040 [DEBUG] [Thread-19920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:32.658 [DEBUG] [Thread-19921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:45.070 [DEBUG] [Thread-19922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:45.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:50:45.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:50:45.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-25T22:50:46.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 50, 28), 4.5, 74.28, 0.0, 13.83, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:50:46.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:50:28
2025-12-25T22:50:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:50:46.468 [DEBUG] [Thread-19923] [transport.py] [_log()] starting thread (client mode): 0xb6b77460
2025-12-25T22:50:46.468 [DEBUG] [Thread-19923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:50:46.488 [DEBUG] [Thread-19923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:50:46.488 [INFO] [Thread-19923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:50:46.492 [DEBUG] [Thread-19923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:50:46.492 [DEBUG] [Thread-19923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:50:46.492 [DEBUG] [Thread-19923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:50:46.492 [DEBUG] [Thread-19923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:46.492 [DEBUG] [Thread-19923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] client lang: <none>
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] server lang: <none>
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] kex follows: False
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:50:46.493 [DEBUG] [Thread-19923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:50:46.494 [DEBUG] [Thread-19923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:50:46.494 [DEBUG] [Thread-19923] [transport.py] [_log()] Compression: none
2025-12-25T22:50:46.494 [DEBUG] [Thread-19923] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:50:46.513 [DEBUG] [Thread-19923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:50:46.514 [DEBUG] [Thread-19923] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:50:46.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:50:46.515 [DEBUG] [Thread-19923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:50:46.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:50:46.517 [DEBUG] [Thread-19923] [transport.py] [_log()] userauth is OK
2025-12-25T22:50:46.517 [DEBUG] [Thread-19923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:50:46.518 [DEBUG] [Thread-19923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:50:46.518 [DEBUG] [Thread-19923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:50:46.518 [DEBUG] [Thread-19923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:50:46.543 [INFO] [Thread-19923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:50:46.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:50:47.198 [DEBUG] [Thread-19923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:50:47.199 [DEBUG] [Thread-19923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:50:47.199 [DEBUG] [Thread-19923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:50:47.240 [DEBUG] [Thread-19923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:50:47.240 [DEBUG] [Thread-19923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:50:47.244 [DEBUG] [Thread-19923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:50:47.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:50:47.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:50:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:50:47.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:50:47.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:50:47.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:50:47.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:50:47.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:50:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:50:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.867772 -999.00  +14.90  10.23     78  +11.20 1 1 1 1 1     0    0 3.17 -19.81 ZNESW 9.2 10.2 255.6 12.1 15.8 -22.4 15.7 -21.7 15.4 -20.3 15.6 -21.5
2025-12-25T22:50:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:50:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:50:47.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.867772
2025-12-25T22:50:47.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:50:47.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:50:47.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:50:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:50:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:50:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:50:28', tmtdew=4.5, humidity=74.28, cloud=0.0, wind=13.83, 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-25T22:50:28', seeing=1.4, atlas_timestamp='2025-12-25T20:49:35.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:47:00')
2025-12-25T22:50:47.270 [DEBUG] [Thread-19923] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:50:47.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-25T22:50:47.363 [DEBUG] [Thread-19926] [transport.py] [_log()] starting thread (client mode): 0xb6bf7fd0
2025-12-25T22:50:47.363 [DEBUG] [Thread-19926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:50:47.377 [DEBUG] [Thread-19926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:50:47.377 [INFO] [Thread-19926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] client lang: <none>
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] server lang: <none>
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] kex follows: False
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] Compression: none
2025-12-25T22:50:47.385 [DEBUG] [Thread-19926] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:50:47.442 [DEBUG] [Thread-19926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:50:47.443 [DEBUG] [Thread-19926] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:50:47.443 [DEBUG] [Thread-19926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:50:47.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:50:47.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:50:47.499 [DEBUG] [Thread-19926] [transport.py] [_log()] userauth is OK
2025-12-25T22:50:47.500 [DEBUG] [Thread-19926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:50:47.500 [DEBUG] [Thread-19926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:50:47.500 [DEBUG] [Thread-19926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:50:47.500 [DEBUG] [Thread-19926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:50:47.520 [INFO] [Thread-19926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:50:47.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-25T22:50:47.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:50:47.979 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:50:48.354 [DEBUG] [Thread-19926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:50:48.354 [DEBUG] [Thread-19926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:50:48.402 [DEBUG] [Thread-19926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:50:48.402 [DEBUG] [Thread-19926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:50:48.410 [DEBUG] [Thread-19926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:50:48.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:50:48.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-25T22:50:48.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-25T22:50:48.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:50:48.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:50:48.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:50:48.445 [DEBUG] [Thread-19926] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:51:00.106 [DEBUG] [Thread-19928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:03.679 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:03.680 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:04.863 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:15.154 [DEBUG] [Thread-19929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:18.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:51:18.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:51:18.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-25T22:51:19.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 50, 28), 4.5, 74.28, 0.0, 13.83, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:51:19.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:50:28
2025-12-25T22:51:19.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:51:19.433 [DEBUG] [Thread-19930] [transport.py] [_log()] starting thread (client mode): 0xb6bab760
2025-12-25T22:51:19.433 [DEBUG] [Thread-19930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:51:19.456 [DEBUG] [Thread-19930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:51:19.456 [INFO] [Thread-19930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:51:19.459 [DEBUG] [Thread-19930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:51:19.459 [DEBUG] [Thread-19930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] client lang: <none>
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] server lang: <none>
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] kex follows: False
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] Compression: none
2025-12-25T22:51:19.460 [DEBUG] [Thread-19930] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:51:19.477 [DEBUG] [Thread-19930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:51:19.478 [DEBUG] [Thread-19930] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:51:19.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:51:19.479 [DEBUG] [Thread-19930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:51:19.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:51:19.481 [DEBUG] [Thread-19930] [transport.py] [_log()] userauth is OK
2025-12-25T22:51:19.482 [DEBUG] [Thread-19930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:51:19.482 [DEBUG] [Thread-19930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:51:19.482 [DEBUG] [Thread-19930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:51:19.482 [DEBUG] [Thread-19930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:51:19.500 [INFO] [Thread-19930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:51:19.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:51:20.313 [DEBUG] [Thread-19930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:51:20.313 [DEBUG] [Thread-19930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:51:20.313 [DEBUG] [Thread-19930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:51:20.354 [DEBUG] [Thread-19930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:51:20.354 [DEBUG] [Thread-19930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:51:20.357 [DEBUG] [Thread-19930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:51:20.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:51:20.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:51:20.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:51:20.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:51:20.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:51:20.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:51:20.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:51:20.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:51:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:51:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.868466 -999.00  +14.80   9.99     79  +11.20 1 1 1 1 1     0    0 3.20 -18.46 ZNESW 7.6 10.0 266.2 13.6 15.7 -22.4 15.6 -21.9 15.4 -20.3 15.6 -21.4
2025-12-25T22:51:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:51:20.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:51:20.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.868466
2025-12-25T22:51:20.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:51:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:51:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:51:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:51:20.382 [DEBUG] [Thread-19930] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:51:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:51:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:50:28', tmtdew=4.5, humidity=74.28, cloud=0.0, wind=13.83, 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-25T22:51:00', seeing=1.26, atlas_timestamp='2025-12-25T20:50:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.07874999999999943, 0.08425000000000082, 0.14575000000000138, 0.06649999999999956, 0.08050000000000068, 0.09074999999999989, 0.13899999999999935, 0.13375000000000092, 0.13299999999999912, 0.04899999999999949, 0.12424999999999997, 0.07499999999999929, 0.15649999999999942, 0.12124999999999986, 0.10350000000000037, 0.12399999999999878, 0.05824999999999925, 0.07850000000000001, 0.07949999999999946, 0.06424999999999947, 0.129999999999999, 0.1587499999999995, 0.11575000000000024, 0.10074999999999967, 0.06949999999999967, 0.0835000000000008, 0.13375000000000092, 0.16849999999999987, 0.18850000000000122, 0.16550000000000153, 0.1750000000000007, 0.14100000000000001, 0.15174999999999983], zp_timestamp='2025-12-25T20:47:00')
2025-12-25T22:51:20.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-25T22:51:20.485 [DEBUG] [Thread-19933] [transport.py] [_log()] starting thread (client mode): 0xb6ba95a0
2025-12-25T22:51:20.485 [DEBUG] [Thread-19933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:51:20.500 [DEBUG] [Thread-19933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:51:20.500 [INFO] [Thread-19933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:51:20.508 [DEBUG] [Thread-19933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:51:20.508 [DEBUG] [Thread-19933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:51:20.508 [DEBUG] [Thread-19933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:51:20.508 [DEBUG] [Thread-19933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] client lang: <none>
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] server lang: <none>
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] kex follows: False
2025-12-25T22:51:20.509 [DEBUG] [Thread-19933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:51:20.510 [DEBUG] [Thread-19933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:51:20.510 [DEBUG] [Thread-19933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:51:20.510 [DEBUG] [Thread-19933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:51:20.510 [DEBUG] [Thread-19933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:51:20.510 [DEBUG] [Thread-19933] [transport.py] [_log()] Compression: none
2025-12-25T22:51:20.510 [DEBUG] [Thread-19933] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:51:20.569 [DEBUG] [Thread-19933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:51:20.569 [DEBUG] [Thread-19933] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:51:20.570 [DEBUG] [Thread-19933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:51:20.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:51:20.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:51:20.628 [DEBUG] [Thread-19933] [transport.py] [_log()] userauth is OK
2025-12-25T22:51:20.628 [DEBUG] [Thread-19933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:51:20.629 [DEBUG] [Thread-19933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:51:20.629 [DEBUG] [Thread-19933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:51:20.629 [DEBUG] [Thread-19933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:51:20.651 [INFO] [Thread-19933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:51:20.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-25T22:51:20.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:51:21.515 [DEBUG] [Thread-19933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:51:21.515 [DEBUG] [Thread-19933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:51:21.562 [DEBUG] [Thread-19933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:51:21.563 [DEBUG] [Thread-19933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:51:21.571 [DEBUG] [Thread-19933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:51:21.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:51:21.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-25T22:51:21.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-25T22:51:21.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:51:21.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:51:21.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:51:21.606 [DEBUG] [Thread-19933] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:51:30.189 [DEBUG] [Thread-19935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:32.715 [DEBUG] [Thread-19936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:45.244 [DEBUG] [Thread-19937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:51:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:51:51.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:51:51.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-25T22:51:52.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 51, 32), 4.45, 74.51, 0.0, 14.33, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:51:52.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:51:32
2025-12-25T22:51:52.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:51:52.665 [DEBUG] [Thread-19938] [transport.py] [_log()] starting thread (client mode): 0xb95b1420
2025-12-25T22:51:52.665 [DEBUG] [Thread-19938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:51:52.685 [DEBUG] [Thread-19938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:51:52.685 [INFO] [Thread-19938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] client lang: <none>
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] server lang: <none>
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] kex follows: False
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:51:52.688 [DEBUG] [Thread-19938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:51:52.689 [DEBUG] [Thread-19938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:51:52.689 [DEBUG] [Thread-19938] [transport.py] [_log()] Compression: none
2025-12-25T22:51:52.689 [DEBUG] [Thread-19938] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:51:52.696 [DEBUG] [Thread-19938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:51:52.696 [DEBUG] [Thread-19938] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:51:52.696 [DEBUG] [Thread-19938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:51:52.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:51:52.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:51:52.697 [DEBUG] [Thread-19938] [transport.py] [_log()] userauth is OK
2025-12-25T22:51:52.697 [DEBUG] [Thread-19938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:51:52.697 [DEBUG] [Thread-19938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:51:52.697 [DEBUG] [Thread-19938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:51:52.697 [DEBUG] [Thread-19938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:51:52.710 [INFO] [Thread-19938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:51:52.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:51:53.366 [DEBUG] [Thread-19938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:51:53.366 [DEBUG] [Thread-19938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:51:53.366 [DEBUG] [Thread-19938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:51:53.406 [DEBUG] [Thread-19938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:51:53.406 [DEBUG] [Thread-19938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:51:53.409 [DEBUG] [Thread-19938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:51:53.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:51:53.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:51:53.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:51:53.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:51:53.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:51:53.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:51:53.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:51:53.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.868814 -999.00  +14.80  11.61     79  +11.20 1 1 1 1 1     0    0 3.20 -19.51 ZNESW 13.0 11.6 255.4 14.0 15.7 -22.5 15.6 -21.8 15.4 -20.3 15.6 -21.5
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.868814
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:51:53.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:51:32', tmtdew=4.45, humidity=74.51, cloud=0.0, wind=14.33, 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-25T22:51:32', seeing=1.26, atlas_timestamp='2025-12-25T20:51:05.530', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:50:00')
2025-12-25T22:51:53.429 [DEBUG] [Thread-19938] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:51:53.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-25T22:51:53.517 [DEBUG] [Thread-19941] [transport.py] [_log()] starting thread (client mode): 0xb6b778e0
2025-12-25T22:51:53.518 [DEBUG] [Thread-19941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:51:53.532 [DEBUG] [Thread-19941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:51:53.532 [INFO] [Thread-19941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:51:53.539 [DEBUG] [Thread-19941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:51:53.539 [DEBUG] [Thread-19941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] client lang: <none>
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] server lang: <none>
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] kex follows: False
2025-12-25T22:51:53.540 [DEBUG] [Thread-19941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:51:53.541 [DEBUG] [Thread-19941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:51:53.541 [DEBUG] [Thread-19941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:51:53.541 [DEBUG] [Thread-19941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:51:53.541 [DEBUG] [Thread-19941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:51:53.541 [DEBUG] [Thread-19941] [transport.py] [_log()] Compression: none
2025-12-25T22:51:53.541 [DEBUG] [Thread-19941] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:51:53.595 [DEBUG] [Thread-19941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:51:53.596 [DEBUG] [Thread-19941] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:51:53.596 [DEBUG] [Thread-19941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:51:53.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:51:53.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:51:53.652 [DEBUG] [Thread-19941] [transport.py] [_log()] userauth is OK
2025-12-25T22:51:53.652 [DEBUG] [Thread-19941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:51:53.652 [DEBUG] [Thread-19941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:51:53.652 [DEBUG] [Thread-19941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:51:53.652 [DEBUG] [Thread-19941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:51:53.670 [INFO] [Thread-19941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:51:53.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T22:51:53.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:51:54.527 [DEBUG] [Thread-19941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:51:54.527 [DEBUG] [Thread-19941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:51:54.574 [DEBUG] [Thread-19941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:51:54.575 [DEBUG] [Thread-19941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:51:54.583 [DEBUG] [Thread-19941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:51:54.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:51:54.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-25T22:51:54.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-25T22:51:54.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:51:54.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:51:54.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:51:54.616 [DEBUG] [Thread-19941] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:52:00.277 [DEBUG] [Thread-19943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:03.881 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:03.883 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:15.328 [DEBUG] [Thread-19944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:24.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:52:24.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:52:24.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-25T22:52:25.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 52, 4), 4.43, 74.61, 0.0, 14.12, 14.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:52:25.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:52:04
2025-12-25T22:52:25.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:52:25.628 [DEBUG] [Thread-19945] [transport.py] [_log()] starting thread (client mode): 0xb6b76350
2025-12-25T22:52:25.629 [DEBUG] [Thread-19945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:52:25.649 [DEBUG] [Thread-19945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:52:25.649 [INFO] [Thread-19945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:52:25.652 [DEBUG] [Thread-19945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:52:25.652 [DEBUG] [Thread-19945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:52:25.652 [DEBUG] [Thread-19945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:52:25.652 [DEBUG] [Thread-19945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] client lang: <none>
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] server lang: <none>
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] kex follows: False
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] Compression: none
2025-12-25T22:52:25.653 [DEBUG] [Thread-19945] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:52:25.670 [DEBUG] [Thread-19945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:52:25.671 [DEBUG] [Thread-19945] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:52:25.671 [DEBUG] [Thread-19945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:52:25.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:52:25.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:52:25.673 [DEBUG] [Thread-19945] [transport.py] [_log()] userauth is OK
2025-12-25T22:52:25.673 [DEBUG] [Thread-19945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:52:25.673 [DEBUG] [Thread-19945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:52:25.674 [DEBUG] [Thread-19945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:52:25.674 [DEBUG] [Thread-19945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:52:25.692 [INFO] [Thread-19945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:52:25.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:52:26.533 [DEBUG] [Thread-19945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:52:26.533 [DEBUG] [Thread-19945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:52:26.534 [DEBUG] [Thread-19945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:52:26.574 [DEBUG] [Thread-19945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:52:26.574 [DEBUG] [Thread-19945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:52:26.577 [DEBUG] [Thread-19945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:52:26.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:52:26.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:52:26.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:52:26.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:52:26.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:52:26.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:52:26.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.869161 -999.00  +14.80  14.04     79  +11.20 1 1 1 1 1     0    0 3.28 -18.18 ZNESW 12.1 14.0 241.4 15.9 15.7 -22.4 15.6 -21.8 15.4 -20.3 15.6 -21.2
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.869161
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:52:26.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:52:04', tmtdew=4.43, humidity=74.61, cloud=0.0, wind=14.12, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:52:05', seeing=1.6, atlas_timestamp='2025-12-25T20:51:35.510', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:50:00')
2025-12-25T22:52:26.595 [DEBUG] [Thread-19945] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:52: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-25T22:52:26.685 [DEBUG] [Thread-19948] [transport.py] [_log()] starting thread (client mode): 0xb95b1420
2025-12-25T22:52:26.685 [DEBUG] [Thread-19948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:52:26.700 [DEBUG] [Thread-19948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:52:26.700 [INFO] [Thread-19948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] client lang: <none>
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] server lang: <none>
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] kex follows: False
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] Compression: none
2025-12-25T22:52:26.708 [DEBUG] [Thread-19948] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:52:26.763 [DEBUG] [Thread-19948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:52:26.764 [DEBUG] [Thread-19948] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:52:26.764 [DEBUG] [Thread-19948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:52:26.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:52:26.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:52:26.820 [DEBUG] [Thread-19948] [transport.py] [_log()] userauth is OK
2025-12-25T22:52:26.821 [DEBUG] [Thread-19948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:52:26.821 [DEBUG] [Thread-19948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:52:26.821 [DEBUG] [Thread-19948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:52:26.821 [DEBUG] [Thread-19948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:52:26.835 [INFO] [Thread-19948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:52:26.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-25T22:52:26.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:52:27.714 [DEBUG] [Thread-19948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:52:27.714 [DEBUG] [Thread-19948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:52:27.761 [DEBUG] [Thread-19948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:52:27.761 [DEBUG] [Thread-19948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:52:27.769 [DEBUG] [Thread-19948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:52:27.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:52:27.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:52:27.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-25T22:52:27.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:52:27.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:52:27.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:52:27.800 [DEBUG] [Thread-19948] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:52:30.360 [DEBUG] [Thread-19950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:32.772 [DEBUG] [Thread-19951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:40.982 [DEBUG] [Thread-17686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:45.397 [DEBUG] [Thread-19952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:52:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:52:57.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:52:57.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-25T22:52:58.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 52, 36), 4.4, 74.74, 0.0, 16.8, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:52:58.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:52:36
2025-12-25T22:52:58.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:52:58.804 [DEBUG] [Thread-19953] [transport.py] [_log()] starting thread (client mode): 0xb6ba98a0
2025-12-25T22:52:58.805 [DEBUG] [Thread-19953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:52:58.824 [DEBUG] [Thread-19953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:52:58.825 [INFO] [Thread-19953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:52:58.827 [DEBUG] [Thread-19953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] client lang: <none>
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] server lang: <none>
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] kex follows: False
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] Compression: none
2025-12-25T22:52:58.828 [DEBUG] [Thread-19953] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:52:58.845 [DEBUG] [Thread-19953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:52:58.845 [DEBUG] [Thread-19953] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:52:58.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:52:58.846 [DEBUG] [Thread-19953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:52:58.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:52:58.849 [DEBUG] [Thread-19953] [transport.py] [_log()] userauth is OK
2025-12-25T22:52:58.849 [DEBUG] [Thread-19953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:52:58.849 [DEBUG] [Thread-19953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:52:58.849 [DEBUG] [Thread-19953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:52:58.849 [DEBUG] [Thread-19953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:52:58.874 [INFO] [Thread-19953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:52:58.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:52:59.503 [DEBUG] [Thread-19953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:52:59.504 [DEBUG] [Thread-19953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:52:59.504 [DEBUG] [Thread-19953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:52:59.545 [DEBUG] [Thread-19953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:52:59.546 [DEBUG] [Thread-19953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:52:59.549 [DEBUG] [Thread-19953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:52:59.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:52:59.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:52:59.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:52:59.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:52:59.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:52:59.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:52:59.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:52:59.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:52:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:52:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.869508 -999.00  +14.80   7.39     79  +11.20 1 1 1 1 1     0    0 3.32 -17.59 ZNESW 9.3 7.4 242.9 15.2 15.7 -22.4 15.6 -21.8 15.3 -20.2 15.6 -21.6
2025-12-25T22:52:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:52:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:52:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.869508
2025-12-25T22:52:59.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:52:59.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:52:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:52:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:52:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:52:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:52:36', tmtdew=4.4, humidity=74.74, cloud=0.0, wind=16.8, 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-25T22:52:37', seeing=1.56, atlas_timestamp='2025-12-25T20:52:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:50:00')
2025-12-25T22:52:59.577 [DEBUG] [Thread-19953] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:52:59.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:52:59.676 [DEBUG] [Thread-19956] [transport.py] [_log()] starting thread (client mode): 0xb6b77d90
2025-12-25T22:52:59.676 [DEBUG] [Thread-19956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:52:59.691 [DEBUG] [Thread-19956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:52:59.691 [INFO] [Thread-19956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:52:59.698 [DEBUG] [Thread-19956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:52:59.699 [DEBUG] [Thread-19956] [transport.py] [_log()] client lang: <none>
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] server lang: <none>
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] kex follows: False
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] Compression: none
2025-12-25T22:52:59.700 [DEBUG] [Thread-19956] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:52:59.758 [DEBUG] [Thread-19956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:52:59.758 [DEBUG] [Thread-19956] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:52:59.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:52:59.759 [DEBUG] [Thread-19956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:52:59.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:52:59.814 [DEBUG] [Thread-19956] [transport.py] [_log()] userauth is OK
2025-12-25T22:52:59.814 [DEBUG] [Thread-19956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:52:59.814 [DEBUG] [Thread-19956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:52:59.815 [DEBUG] [Thread-19956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:52:59.815 [DEBUG] [Thread-19956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:52:59.834 [INFO] [Thread-19956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:52:59.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-25T22:52:59.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:53:00.440 [DEBUG] [Thread-19958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:53:00.681 [DEBUG] [Thread-19956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:53:00.681 [DEBUG] [Thread-19956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:53:00.729 [DEBUG] [Thread-19956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:53:00.729 [DEBUG] [Thread-19956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:53:00.738 [DEBUG] [Thread-19956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:53:00.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:53:00.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:53:00.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-25T22:53:00.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:53:00.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:53:00.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:53:00.991 [DEBUG] [Thread-19956] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:53:04.086 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:53:04.087 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:53:15.485 [DEBUG] [Thread-19959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:53:30.531 [DEBUG] [Thread-19960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:53:30.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:53:30.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:53:30.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 53, 8), 4.41, 74.69, 0.0, 15.03, 14.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:53:31.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:53:08
2025-12-25T22:53:31.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:53:31.982 [DEBUG] [Thread-19961] [transport.py] [_log()] starting thread (client mode): 0xb6bb7fa0
2025-12-25T22:53:31.983 [DEBUG] [Thread-19961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:53:32.004 [DEBUG] [Thread-19961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:53:32.004 [INFO] [Thread-19961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] client lang: <none>
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] server lang: <none>
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] kex follows: False
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] Compression: none
2025-12-25T22:53:32.008 [DEBUG] [Thread-19961] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:53:32.030 [DEBUG] [Thread-19961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:53:32.031 [DEBUG] [Thread-19961] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:53:32.032 [DEBUG] [Thread-19961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:53:32.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:53:32.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:53:32.034 [DEBUG] [Thread-19961] [transport.py] [_log()] userauth is OK
2025-12-25T22:53:32.034 [DEBUG] [Thread-19961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:53:32.034 [DEBUG] [Thread-19961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:53:32.035 [DEBUG] [Thread-19961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:53:32.035 [DEBUG] [Thread-19961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:53:32.060 [INFO] [Thread-19961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:53:32.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:53:32.829 [DEBUG] [Thread-19963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:53:32.901 [DEBUG] [Thread-19961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:53:32.901 [DEBUG] [Thread-19961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:53:32.901 [DEBUG] [Thread-19961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:53:32.942 [DEBUG] [Thread-19961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:53:32.942 [DEBUG] [Thread-19961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:53:32.946 [DEBUG] [Thread-19961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:53:32.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:53:32.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:53:32.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:53:32.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:53:32.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:53:32.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:53:32.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:53:32.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:53:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:53:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.870202 -999.00  +14.90  11.74     78  +11.10 1 1 1 1 1     0    0 3.25 -16.15 ZNESW 10.2 11.7 253.6 13.8 15.7 -22.5 15.6 -21.9 15.3 -20.3 15.6 -21.5
2025-12-25T22:53:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:53:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:53:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.870202
2025-12-25T22:53:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:53:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:53:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:53:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:53:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:53:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:53:08', tmtdew=4.41, humidity=74.69, cloud=0.0, wind=15.03, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:53:09', seeing=1.44, atlas_timestamp='2025-12-25T20:53:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:50:00')
2025-12-25T22:53:32.974 [DEBUG] [Thread-19961] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:53:33.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-25T22:53:33.068 [DEBUG] [Thread-19965] [transport.py] [_log()] starting thread (client mode): 0xb6bf4a60
2025-12-25T22:53:33.068 [DEBUG] [Thread-19965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:53:33.086 [DEBUG] [Thread-19965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:53:33.086 [INFO] [Thread-19965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:53:33.093 [DEBUG] [Thread-19965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] client lang: <none>
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] server lang: <none>
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] kex follows: False
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:53:33.094 [DEBUG] [Thread-19965] [transport.py] [_log()] Compression: none
2025-12-25T22:53:33.095 [DEBUG] [Thread-19965] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:53:33.154 [DEBUG] [Thread-19965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:53:33.155 [DEBUG] [Thread-19965] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:53:33.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:53:33.156 [DEBUG] [Thread-19965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:53:33.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:53:33.211 [DEBUG] [Thread-19965] [transport.py] [_log()] userauth is OK
2025-12-25T22:53:33.211 [DEBUG] [Thread-19965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:53:33.211 [DEBUG] [Thread-19965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:53:33.212 [DEBUG] [Thread-19965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:53:33.212 [DEBUG] [Thread-19965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:53:33.231 [INFO] [Thread-19965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:53:33.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-25T22:53:33.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:53:34.062 [DEBUG] [Thread-19965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:53:34.063 [DEBUG] [Thread-19965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:53:34.111 [DEBUG] [Thread-19965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:53:34.111 [DEBUG] [Thread-19965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:53:34.121 [DEBUG] [Thread-19965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:53:34.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:53:34.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:53:34.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-25T22:53:34.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:53:34.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:53:34.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:53:34.157 [DEBUG] [Thread-19965] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:53:45.562 [DEBUG] [Thread-19967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:00.606 [DEBUG] [Thread-19968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:04.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:54:04.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:54:04.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:54:04.283 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:04.284 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:04.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 53, 40), 4.45, 74.72, 0.0, 15.88, 14.86, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:54:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:53:40
2025-12-25T22:54:05.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:54:05.183 [DEBUG] [Thread-19969] [transport.py] [_log()] starting thread (client mode): 0xb410d5a0
2025-12-25T22:54:05.183 [DEBUG] [Thread-19969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:54:05.203 [DEBUG] [Thread-19969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:54:05.203 [INFO] [Thread-19969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:54:05.206 [DEBUG] [Thread-19969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] client lang: <none>
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] server lang: <none>
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] kex follows: False
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] Compression: none
2025-12-25T22:54:05.207 [DEBUG] [Thread-19969] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:54:05.223 [DEBUG] [Thread-19969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:54:05.224 [DEBUG] [Thread-19969] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:54:05.224 [DEBUG] [Thread-19969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:54:05.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:54:05.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:54:05.226 [DEBUG] [Thread-19969] [transport.py] [_log()] userauth is OK
2025-12-25T22:54:05.226 [DEBUG] [Thread-19969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:54:05.226 [DEBUG] [Thread-19969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:54:05.226 [DEBUG] [Thread-19969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:54:05.226 [DEBUG] [Thread-19969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:54:05.250 [INFO] [Thread-19969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:54:05.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:54:05.880 [DEBUG] [Thread-19969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:54:05.880 [DEBUG] [Thread-19969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:54:05.881 [DEBUG] [Thread-19969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:54:05.922 [DEBUG] [Thread-19969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:54:05.922 [DEBUG] [Thread-19969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:54:05.925 [DEBUG] [Thread-19969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:54:05.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:54:05.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:54:05.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:54:05.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:54:05.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:54:05.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:54:05.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.870550 -999.00  +14.90   8.78     78  +11.20 1 1 1 1 1     0    0 3.29 -14.73 ZNESW 8.3 8.8 239.2 12.5 15.7 -22.5 15.6 -22.0 15.3 -20.4 15.6 -21.5
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.870550
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:54:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:53:40', tmtdew=4.45, humidity=74.72, cloud=0.0, wind=15.88, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:53:41', seeing=1.61, atlas_timestamp='2025-12-25T20:53:35.520', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:50:00')
2025-12-25T22:54:05.944 [DEBUG] [Thread-19969] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:54:06.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-25T22:54:06.028 [DEBUG] [Thread-19972] [transport.py] [_log()] starting thread (client mode): 0xb6b74df0
2025-12-25T22:54:06.028 [DEBUG] [Thread-19972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:54:06.042 [DEBUG] [Thread-19972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:54:06.042 [INFO] [Thread-19972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:54:06.050 [DEBUG] [Thread-19972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] client lang: <none>
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] server lang: <none>
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] kex follows: False
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] Compression: none
2025-12-25T22:54:06.051 [DEBUG] [Thread-19972] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:54:06.110 [DEBUG] [Thread-19972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:54:06.111 [DEBUG] [Thread-19972] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:54:06.112 [DEBUG] [Thread-19972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:54:06.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:54:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:54:06.170 [DEBUG] [Thread-19972] [transport.py] [_log()] userauth is OK
2025-12-25T22:54:06.171 [DEBUG] [Thread-19972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:54:06.171 [DEBUG] [Thread-19972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:54:06.171 [DEBUG] [Thread-19972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:54:06.171 [DEBUG] [Thread-19972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:54:06.191 [INFO] [Thread-19972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:54:06.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-25T22:54:06.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:54:07.000 [DEBUG] [Thread-19972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:54:07.000 [DEBUG] [Thread-19972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:54:07.048 [DEBUG] [Thread-19972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:54:07.048 [DEBUG] [Thread-19972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:54:07.057 [DEBUG] [Thread-19972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:54:07.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:54:07.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-25T22:54:07.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:54:07.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:54:07.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:54:07.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:54:07.093 [DEBUG] [Thread-19972] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:54:15.640 [DEBUG] [Thread-19974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:30.692 [DEBUG] [Thread-19975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:32.886 [DEBUG] [Thread-19976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:54:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:54:37.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:54:37.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T22:54:37.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 54, 12), 4.46, 74.68, 0.0, 15.56, 14.85, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:54:37.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:54:12
2025-12-25T22:54:37.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:54:38.113 [DEBUG] [Thread-19977] [transport.py] [_log()] starting thread (client mode): 0xb6b01c90
2025-12-25T22:54:38.113 [DEBUG] [Thread-19977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:54:38.132 [DEBUG] [Thread-19977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:54:38.133 [INFO] [Thread-19977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:54:38.135 [DEBUG] [Thread-19977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:54:38.135 [DEBUG] [Thread-19977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:54:38.135 [DEBUG] [Thread-19977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:54:38.135 [DEBUG] [Thread-19977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:38.135 [DEBUG] [Thread-19977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] client lang: <none>
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] server lang: <none>
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] kex follows: False
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] Compression: none
2025-12-25T22:54:38.136 [DEBUG] [Thread-19977] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:54:38.148 [DEBUG] [Thread-19977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:54:38.148 [DEBUG] [Thread-19977] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:54:38.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:54:38.149 [DEBUG] [Thread-19977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:54:38.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:54:38.152 [DEBUG] [Thread-19977] [transport.py] [_log()] userauth is OK
2025-12-25T22:54:38.152 [DEBUG] [Thread-19977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:54:38.152 [DEBUG] [Thread-19977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:54:38.153 [DEBUG] [Thread-19977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:54:38.153 [DEBUG] [Thread-19977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:54:38.168 [INFO] [Thread-19977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:54:38.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:54:38.966 [DEBUG] [Thread-19977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:54:38.966 [DEBUG] [Thread-19977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:54:38.966 [DEBUG] [Thread-19977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:54:39.007 [DEBUG] [Thread-19977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:54:39.007 [DEBUG] [Thread-19977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:54:39.011 [DEBUG] [Thread-19977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:54:39.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:54:39.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:54:39.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:54:39.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:54:39.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:54:39.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:54:39.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:54:39.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:54:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:54:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.870897 -999.00  +14.80  10.76     79  +11.20 1 1 1 1 1     0    0 3.28 -15.08 ZNESW 13.9 10.8 248.0 16.3 15.7 -22.6 15.6 -22.0 15.3 -20.3 15.6 -21.7
2025-12-25T22:54:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:54:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:54:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.870897
2025-12-25T22:54:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:54:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:54:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:54:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:54:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:54:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:54:12', tmtdew=4.46, humidity=74.68, cloud=0.0, wind=15.56, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T22:54:13', seeing=1.44, atlas_timestamp='2025-12-25T20:54:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:50:00')
2025-12-25T22:54:39.038 [DEBUG] [Thread-19977] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:54:39.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-25T22:54:39.138 [DEBUG] [Thread-19980] [transport.py] [_log()] starting thread (client mode): 0xb6b77d90
2025-12-25T22:54:39.138 [DEBUG] [Thread-19980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:54:39.152 [DEBUG] [Thread-19980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:54:39.152 [INFO] [Thread-19980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:54:39.159 [DEBUG] [Thread-19980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:54:39.159 [DEBUG] [Thread-19980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:54:39.159 [DEBUG] [Thread-19980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] client lang: <none>
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] server lang: <none>
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] kex follows: False
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] Compression: none
2025-12-25T22:54:39.160 [DEBUG] [Thread-19980] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:54:39.219 [DEBUG] [Thread-19980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:54:39.220 [DEBUG] [Thread-19980] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:54:39.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:54:39.230 [DEBUG] [Thread-19980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:54:39.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:54:39.275 [DEBUG] [Thread-19980] [transport.py] [_log()] userauth is OK
2025-12-25T22:54:39.275 [DEBUG] [Thread-19980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:54:39.275 [DEBUG] [Thread-19980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:54:39.276 [DEBUG] [Thread-19980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:54:39.276 [DEBUG] [Thread-19980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:54:39.298 [INFO] [Thread-19980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:54:39.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-25T22:54:39.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:54:40.184 [DEBUG] [Thread-19980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:54:40.184 [DEBUG] [Thread-19980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:54:40.232 [DEBUG] [Thread-19980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:54:40.232 [DEBUG] [Thread-19980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:54:40.241 [DEBUG] [Thread-19980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:54:40.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:54:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T22:54:40.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T22:54:40.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:54:40.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:54:40.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:54:40.283 [DEBUG] [Thread-19980] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:54:45.727 [DEBUG] [Thread-19982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:00.767 [DEBUG] [Thread-19983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:04.505 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:04.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:55:10.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:55:10.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-25T22:55:11.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 54, 44), 4.4, 74.72, 0.0, 15.46, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:55:11.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:54:44
2025-12-25T22:55:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:55:11.308 [DEBUG] [Thread-19984] [transport.py] [_log()] starting thread (client mode): 0xb410cac0
2025-12-25T22:55:11.308 [DEBUG] [Thread-19984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:55:11.327 [DEBUG] [Thread-19984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:55:11.327 [INFO] [Thread-19984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] client lang: <none>
2025-12-25T22:55:11.331 [DEBUG] [Thread-19984] [transport.py] [_log()] server lang: <none>
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] kex follows: False
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] Compression: none
2025-12-25T22:55:11.332 [DEBUG] [Thread-19984] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:55:11.342 [DEBUG] [Thread-19984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:55:11.343 [DEBUG] [Thread-19984] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:55:11.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:55:11.345 [DEBUG] [Thread-19984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:55:11.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:55:11.347 [DEBUG] [Thread-19984] [transport.py] [_log()] userauth is OK
2025-12-25T22:55:11.347 [DEBUG] [Thread-19984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:55:11.347 [DEBUG] [Thread-19984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:55:11.348 [DEBUG] [Thread-19984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:55:11.348 [DEBUG] [Thread-19984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:55:11.378 [INFO] [Thread-19984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:55:11.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:55:15.799 [DEBUG] [Thread-19986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:16.251 [DEBUG] [Thread-19984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:55:16.251 [DEBUG] [Thread-19984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:55:16.252 [DEBUG] [Thread-19984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:55:16.292 [DEBUG] [Thread-19984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:55:16.293 [DEBUG] [Thread-19984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:55:16.296 [DEBUG] [Thread-19984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:55:16.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:55:16.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:55:16.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:55:16.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:55:16.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:55:16.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:55:16.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:55:16.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:55:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:55:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.871244 -999.00  +14.70   9.78     79  +11.20 1 1 1 1 1     0    0 3.21 -16.27 ZNESW 10.5 9.8 245.8 14.6 15.6 -22.6 15.6 -22.1 15.3 -20.5 -999.0 -999.0
2025-12-25T22:55:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:55:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:55:16.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.871244
2025-12-25T22:55:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:55:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:55:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:55:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:55:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:55:16.340 [DEBUG] [Thread-19984] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:55:16.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:54:44', tmtdew=4.4, humidity=74.72, cloud=0.0, wind=15.46, 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-25T22:54:45', seeing=1.44, atlas_timestamp='2025-12-25T20:54:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:53:00')
2025-12-25T22:55:16.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-25T22:55:16.440 [DEBUG] [Thread-19988] [transport.py] [_log()] starting thread (client mode): 0xb6baa6b0
2025-12-25T22:55:16.440 [DEBUG] [Thread-19988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:55:16.454 [DEBUG] [Thread-19988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:55:16.455 [INFO] [Thread-19988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:55:16.462 [DEBUG] [Thread-19988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:55:16.462 [DEBUG] [Thread-19988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:55:16.462 [DEBUG] [Thread-19988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:55:16.462 [DEBUG] [Thread-19988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] client lang: <none>
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] server lang: <none>
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] kex follows: False
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] Compression: none
2025-12-25T22:55:16.463 [DEBUG] [Thread-19988] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:55:16.521 [DEBUG] [Thread-19988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:55:16.521 [DEBUG] [Thread-19988] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:55:16.522 [DEBUG] [Thread-19988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:55:16.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:55:16.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:55:16.581 [DEBUG] [Thread-19988] [transport.py] [_log()] userauth is OK
2025-12-25T22:55:16.581 [DEBUG] [Thread-19988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:55:16.581 [DEBUG] [Thread-19988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:55:16.581 [DEBUG] [Thread-19988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:55:16.581 [DEBUG] [Thread-19988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:55:16.600 [INFO] [Thread-19988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:55:16.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-25T22:55:16.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:55:17.456 [DEBUG] [Thread-19988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:55:17.456 [DEBUG] [Thread-19988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:55:17.503 [DEBUG] [Thread-19988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:55:17.504 [DEBUG] [Thread-19988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:55:17.512 [DEBUG] [Thread-19988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:55:17.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:55:17.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-25T22:55: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-25T22:55:17.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:55:17.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:55:17.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:55:17.543 [DEBUG] [Thread-19988] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:55:30.834 [DEBUG] [Thread-19990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:32.944 [DEBUG] [Thread-19991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:45.884 [DEBUG] [Thread-19992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:55:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:55:47.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:55:47.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-25T22:55:48.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 55, 16), 4.37, 74.86, 0.0, 14.68, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:55:48.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:55:16
2025-12-25T22:55:48.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:55:48.550 [DEBUG] [Thread-19993] [transport.py] [_log()] starting thread (client mode): 0xb6bba110
2025-12-25T22:55:48.550 [DEBUG] [Thread-19993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:55:48.570 [DEBUG] [Thread-19993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:55:48.570 [INFO] [Thread-19993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:55:48.573 [DEBUG] [Thread-19993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:55:48.573 [DEBUG] [Thread-19993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:55:48.573 [DEBUG] [Thread-19993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] client lang: <none>
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] server lang: <none>
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] kex follows: False
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] Compression: none
2025-12-25T22:55:48.574 [DEBUG] [Thread-19993] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:55:48.591 [DEBUG] [Thread-19993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:55:48.592 [DEBUG] [Thread-19993] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:55:48.592 [DEBUG] [Thread-19993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:55:48.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:55:48.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:55:48.594 [DEBUG] [Thread-19993] [transport.py] [_log()] userauth is OK
2025-12-25T22:55:48.594 [DEBUG] [Thread-19993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:55:48.595 [DEBUG] [Thread-19993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:55:48.595 [DEBUG] [Thread-19993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:55:48.595 [DEBUG] [Thread-19993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:55:48.619 [INFO] [Thread-19993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:55:48.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:55:49.280 [DEBUG] [Thread-19993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:55:49.280 [DEBUG] [Thread-19993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:55:49.280 [DEBUG] [Thread-19993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:55:49.321 [DEBUG] [Thread-19993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:55:49.321 [DEBUG] [Thread-19993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:55:49.324 [DEBUG] [Thread-19993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:55:49.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:55:49.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:55:49.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:55:49.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:55:49.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:55:49.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:55:49.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:55:49.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:55:49.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:55:49.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.871591 -999.00  +14.70   7.75     79  +11.20 1 1 1 1 1     0    0 3.22 -16.62 ZNESW 13.4 7.8 244.0 12.2 15.6 -22.6 15.6 -22.0 15.2 -20.4 15.5 -21.6
2025-12-25T22:55:49.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:55:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:55:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.871591
2025-12-25T22:55:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:55:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:55:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:55:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:55:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:55:49.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:55:16', tmtdew=4.37, humidity=74.86, cloud=0.0, wind=14.68, 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-25T22:55:17', seeing=1.34, atlas_timestamp='2025-12-25T20:55:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[-0.036749999999999616, -0.003249999999999531, -0.018749999999998934, -0.03750000000000142, -0.05550000000000033, 0.0182500000000001, 0.009499999999999176, 0.011250000000000426, -0.020500000000000185, -0.06599999999999895, -0.024250000000000327, -0.01699999999999946, -0.04049999999999976, 0.021250000000000213, 0.019999999999999574, -0.002500000000001279, -0.034750000000000725, -0.11050000000000004, -0.04200000000000159, 0.0072499999999990905, -0.008500000000001506, -0.008250000000002089, 0.03125, 0.03575000000000017, -0.04400000000000048, -0.11849999999999916, 0.006750000000000256, 0.1070000000000011, 0.006999999999999673, -0.0034999999999989484, 0.09800000000000075, 0.10400000000000098, 0.02874999999999872], zp_timestamp='2025-12-25T20:53:00')
2025-12-25T22:55:49.350 [DEBUG] [Thread-19993] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:55:49.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-25T22:56:00.914 [DEBUG] [Thread-19996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:56:04.708 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:56:04.709 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:56:15.959 [DEBUG] [Thread-19997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:56:30.993 [DEBUG] [Thread-19998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:56:33.012 [DEBUG] [Thread-19999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:56:46.031 [DEBUG] [Thread-20000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:01.068 [DEBUG] [Thread-20001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:04.908 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:04.909 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:16.096 [DEBUG] [Thread-20002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:31.132 [DEBUG] [Thread-20003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:33.068 [DEBUG] [Thread-20004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:57:46.163 [DEBUG] [Thread-20005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:01.199 [DEBUG] [Thread-20006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:02.069 [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-25T22:58:05.111 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:05.112 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:16.229 [DEBUG] [Thread-20007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:31.258 [DEBUG] [Thread-20008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:58:32.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:58:32.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-25T22:58:32.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 57, 57), 4.22, 75.62, 0.0, 16.14, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:58:32.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:57:57
2025-12-25T22:58:32.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:58:33.067 [DEBUG] [Thread-20009] [transport.py] [_log()] starting thread (client mode): 0xb6bba470
2025-12-25T22:58:33.067 [DEBUG] [Thread-20009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:58:33.085 [DEBUG] [Thread-20009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:58:33.085 [INFO] [Thread-20009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:58:33.088 [DEBUG] [Thread-20009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] client lang: <none>
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] server lang: <none>
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] kex follows: False
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] Compression: none
2025-12-25T22:58:33.089 [DEBUG] [Thread-20009] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:58:33.104 [DEBUG] [Thread-20009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:58:33.104 [DEBUG] [Thread-20009] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:58:33.104 [DEBUG] [Thread-20009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:58:33.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:58:33.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:58:33.105 [DEBUG] [Thread-20009] [transport.py] [_log()] userauth is OK
2025-12-25T22:58:33.106 [DEBUG] [Thread-20009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:58:33.106 [DEBUG] [Thread-20009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:58:33.106 [DEBUG] [Thread-20009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:58:33.106 [DEBUG] [Thread-20009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:58:33.124 [INFO] [Thread-20009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:58:33.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:58:33.131 [DEBUG] [Thread-20011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:58:33.803 [DEBUG] [Thread-20009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:58:33.803 [DEBUG] [Thread-20009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:58:33.804 [DEBUG] [Thread-20009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:58:33.844 [DEBUG] [Thread-20009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:58:33.844 [DEBUG] [Thread-20009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:58:33.847 [DEBUG] [Thread-20009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:58:33.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:58:33.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:58:33.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:58:33.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:58:33.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:58:33.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:58:33.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.873675 -999.00  +14.60  10.61     79  +11.20 1 1 1 1 1     0    0 3.32 -12.26 ZNESW 14.7 10.6 256.6 14.2 15.6 -22.7 15.4 -22.0 15.2 -20.6 15.4 -21.5
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.873675
2025-12-25T22:58:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:58:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:58:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:58:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:58:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:58:33.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:57:57', tmtdew=4.22, humidity=75.62, cloud=0.0, wind=16.14, 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-25T22:58:30', seeing=1.52, atlas_timestamp='2025-12-25T20:58:05.520', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.08825000000000038, 0.16225000000000023, 0.10149999999999793, 0.07450000000000045, 0.12125000000000163, 0.08349999999999902, 0.11325000000000074, 0.13549999999999862, 0.07699999999999996, 0.1462500000000002, 0.057000000000000384, 0.14400000000000013, 0.12025000000000041, 0.1095000000000006, 0.10350000000000037, 0.08024999999999949, 0.1225000000000005, 0.09149999999999991, 0.09375, 0.1609999999999996, 0.13124999999999787, 0.1567500000000006, 0.12325000000000053, 0.0669999999999984, 0.0840000000000014, 0.17324999999999946, 0.2104999999999997, 0.25450000000000017, 0.19350000000000023, 0.22800000000000153, 0.15750000000000064, 0.1557499999999994], zp_timestamp='2025-12-25T20:56:00')
2025-12-25T22:58:33.865 [DEBUG] [Thread-20009] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:58:33.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-25T22:58:33.951 [DEBUG] [Thread-20013] [transport.py] [_log()] starting thread (client mode): 0xb6bb4280
2025-12-25T22:58:33.951 [DEBUG] [Thread-20013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:58:33.969 [DEBUG] [Thread-20013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:58:33.969 [INFO] [Thread-20013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:58:33.982 [DEBUG] [Thread-20013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] client lang: <none>
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] server lang: <none>
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] kex follows: False
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:58:33.983 [DEBUG] [Thread-20013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:58:33.984 [DEBUG] [Thread-20013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:58:33.984 [DEBUG] [Thread-20013] [transport.py] [_log()] Compression: none
2025-12-25T22:58:33.984 [DEBUG] [Thread-20013] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:58:34.041 [DEBUG] [Thread-20013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:58:34.041 [DEBUG] [Thread-20013] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:58:34.042 [DEBUG] [Thread-20013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:58:34.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:58:34.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:58:34.104 [DEBUG] [Thread-20013] [transport.py] [_log()] userauth is OK
2025-12-25T22:58:34.104 [DEBUG] [Thread-20013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:58:34.104 [DEBUG] [Thread-20013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:58:34.104 [DEBUG] [Thread-20013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:58:34.104 [DEBUG] [Thread-20013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:58:34.126 [INFO] [Thread-20013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:58:34.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-25T22:58:34.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:58:34.985 [DEBUG] [Thread-20013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:58:34.985 [DEBUG] [Thread-20013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:58:35.037 [DEBUG] [Thread-20013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:58:35.037 [DEBUG] [Thread-20013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:58:35.050 [DEBUG] [Thread-20013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:58:35.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:58:35.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-25T22:58:35.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-25T22:58:35.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:58:35.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:58:35.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:58:35.103 [DEBUG] [Thread-20013] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:58:46.292 [DEBUG] [Thread-20015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:01.341 [DEBUG] [Thread-20016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:05.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:59:05.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:59:05.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-25T22:59:05.314 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:05.314 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 59, 1), 4.23, 75.56, 0.0, 14.96, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:59:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:59:01
2025-12-25T22:59:05.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:59:06.137 [DEBUG] [Thread-20017] [transport.py] [_log()] starting thread (client mode): 0xb410fd90
2025-12-25T22:59:06.137 [DEBUG] [Thread-20017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:59:06.156 [DEBUG] [Thread-20017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:59:06.157 [INFO] [Thread-20017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] client lang: <none>
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] server lang: <none>
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] kex follows: False
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] Compression: none
2025-12-25T22:59:06.160 [DEBUG] [Thread-20017] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:59:06.178 [DEBUG] [Thread-20017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:59:06.178 [DEBUG] [Thread-20017] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:59:06.178 [DEBUG] [Thread-20017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:59:06.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:59:06.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:59:06.179 [DEBUG] [Thread-20017] [transport.py] [_log()] userauth is OK
2025-12-25T22:59:06.179 [DEBUG] [Thread-20017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:59:06.179 [DEBUG] [Thread-20017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:59:06.179 [DEBUG] [Thread-20017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:59:06.179 [DEBUG] [Thread-20017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:59:06.188 [INFO] [Thread-20017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:59:06.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:59:06.825 [DEBUG] [Thread-20017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:59:06.825 [DEBUG] [Thread-20017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:59:06.826 [DEBUG] [Thread-20017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:59:06.866 [DEBUG] [Thread-20017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:59:06.866 [DEBUG] [Thread-20017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:59:06.870 [DEBUG] [Thread-20017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:59:06.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:59:06.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:59:06.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:59:06.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:59:06.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:59:06.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:59:06.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:59:06.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:59:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:59:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.874022 -999.00  +14.60  10.85     79  +11.10 1 1 1 1 1     0    0 3.26 -11.61 ZNESW 12.3 10.8 253.5 13.4 15.5 -22.5 15.4 -21.9 15.2 -20.4 15.4 -21.7
2025-12-25T22:59:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:59:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:59:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.874022
2025-12-25T22:59:06.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:59:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:59:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:59:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:59:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:59:06.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:59:01', tmtdew=4.23, humidity=75.56, cloud=0.0, wind=14.96, 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-25T22:59:02', seeing=1.69, atlas_timestamp='2025-12-25T20:58:35.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.08825000000000038, 0.16225000000000023, 0.10149999999999793, 0.07450000000000045, 0.12125000000000163, 0.08349999999999902, 0.11325000000000074, 0.13549999999999862, 0.07699999999999996, 0.1462500000000002, 0.057000000000000384, 0.14400000000000013, 0.12025000000000041, 0.1095000000000006, 0.10350000000000037, 0.08024999999999949, 0.1225000000000005, 0.09149999999999991, 0.09375, 0.1609999999999996, 0.13124999999999787, 0.1567500000000006, 0.12325000000000053, 0.0669999999999984, 0.0840000000000014, 0.17324999999999946, 0.2104999999999997, 0.25450000000000017, 0.19350000000000023, 0.22800000000000153, 0.15750000000000064, 0.1557499999999994], zp_timestamp='2025-12-25T20:56:00')
2025-12-25T22:59:06.899 [DEBUG] [Thread-20017] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:59:06.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-25T22:59:07.005 [DEBUG] [Thread-20020] [transport.py] [_log()] starting thread (client mode): 0xb410e8f0
2025-12-25T22:59:07.005 [DEBUG] [Thread-20020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:59:07.021 [DEBUG] [Thread-20020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:59:07.021 [INFO] [Thread-20020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:59:07.029 [DEBUG] [Thread-20020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:59:07.029 [DEBUG] [Thread-20020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:59:07.029 [DEBUG] [Thread-20020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:59:07.029 [DEBUG] [Thread-20020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:07.029 [DEBUG] [Thread-20020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] client lang: <none>
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] server lang: <none>
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] kex follows: False
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] Compression: none
2025-12-25T22:59:07.030 [DEBUG] [Thread-20020] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:59:07.087 [DEBUG] [Thread-20020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:59:07.088 [DEBUG] [Thread-20020] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:59:07.088 [DEBUG] [Thread-20020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:59:07.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:59:07.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:59:07.143 [DEBUG] [Thread-20020] [transport.py] [_log()] userauth is OK
2025-12-25T22:59:07.144 [DEBUG] [Thread-20020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:59:07.144 [DEBUG] [Thread-20020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:59:07.144 [DEBUG] [Thread-20020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:59:07.144 [DEBUG] [Thread-20020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:59:07.164 [INFO] [Thread-20020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:59:07.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-25T22:59:07.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:59:08.012 [DEBUG] [Thread-20020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:59:08.012 [DEBUG] [Thread-20020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:59:08.061 [DEBUG] [Thread-20020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:59:08.061 [DEBUG] [Thread-20020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:59:08.070 [DEBUG] [Thread-20020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:59:08.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:59:08.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-25T22:59:08.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-25T22:59:08.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:59:08.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:59:08.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:59:08.106 [DEBUG] [Thread-20020] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:59:16.370 [DEBUG] [Thread-20022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:31.423 [DEBUG] [Thread-20023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:33.187 [DEBUG] [Thread-20024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T22:59:38.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T22:59:38.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T22:59:38.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-25T22:59:38.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 22, 59, 33), 4.56, 74.15, 0.0, 15.67, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-25T22:59:38.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 22:59:33
2025-12-25T22:59:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T22:59:39.138 [DEBUG] [Thread-20025] [transport.py] [_log()] starting thread (client mode): 0xb6bb9150
2025-12-25T22:59:39.138 [DEBUG] [Thread-20025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:59:39.157 [DEBUG] [Thread-20025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T22:59:39.157 [INFO] [Thread-20025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] client lang: <none>
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] server lang: <none>
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] kex follows: False
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] Compression: none
2025-12-25T22:59:39.158 [DEBUG] [Thread-20025] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:59:39.166 [DEBUG] [Thread-20025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:59:39.166 [DEBUG] [Thread-20025] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:59:39.166 [DEBUG] [Thread-20025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T22:59:39.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T22:59:39.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:59:39.167 [DEBUG] [Thread-20025] [transport.py] [_log()] userauth is OK
2025-12-25T22:59:39.167 [DEBUG] [Thread-20025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:59:39.167 [DEBUG] [Thread-20025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:59:39.167 [DEBUG] [Thread-20025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T22:59:39.167 [DEBUG] [Thread-20025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:59:39.179 [INFO] [Thread-20025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:59:39.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:59:39.747 [DEBUG] [Thread-20025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:59:39.747 [DEBUG] [Thread-20025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:59:39.747 [DEBUG] [Thread-20025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T22:59:39.788 [DEBUG] [Thread-20025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:59:39.788 [DEBUG] [Thread-20025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:59:39.790 [DEBUG] [Thread-20025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:59:39.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:59:39.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T22:59:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T22:59:39.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T22:59:39.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:59:39.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T22:59:39.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.874369 -999.00  +14.70  10.56     79  +11.10 1 1 1 1 1     0    0 3.27 -12.24 ZNESW 4.7 10.6 247.6 15.5 15.5 -22.4 15.4 -21.9 15.1 -20.4 15.4 -21.7
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.874369
2025-12-25T22:59:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T22:59:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T22:59:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T22:59:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T22:59:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T22:59:39.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T22:59:33', tmtdew=4.56, humidity=74.15, cloud=0.0, wind=15.67, 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-25T22:59:34', seeing=1.42, atlas_timestamp='2025-12-25T20:59:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.08825000000000038, 0.16225000000000023, 0.10149999999999793, 0.07450000000000045, 0.12125000000000163, 0.08349999999999902, 0.11325000000000074, 0.13549999999999862, 0.07699999999999996, 0.1462500000000002, 0.057000000000000384, 0.14400000000000013, 0.12025000000000041, 0.1095000000000006, 0.10350000000000037, 0.08024999999999949, 0.1225000000000005, 0.09149999999999991, 0.09375, 0.1609999999999996, 0.13124999999999787, 0.1567500000000006, 0.12325000000000053, 0.0669999999999984, 0.0840000000000014, 0.17324999999999946, 0.2104999999999997, 0.25450000000000017, 0.19350000000000023, 0.22800000000000153, 0.15750000000000064, 0.1557499999999994], zp_timestamp='2025-12-25T20:56:00')
2025-12-25T22:59:39.813 [DEBUG] [Thread-20025] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:59:39.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T22:59:39.898 [DEBUG] [Thread-20028] [transport.py] [_log()] starting thread (client mode): 0xb6bb97b0
2025-12-25T22:59:39.898 [DEBUG] [Thread-20028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T22:59:39.913 [DEBUG] [Thread-20028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T22:59:39.913 [INFO] [Thread-20028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] client lang: <none>
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] server lang: <none>
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] kex follows: False
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] Compression: none
2025-12-25T22:59:39.921 [DEBUG] [Thread-20028] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T22:59:39.979 [DEBUG] [Thread-20028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T22:59:39.979 [DEBUG] [Thread-20028] [transport.py] [_log()] Switch to new keys ...
2025-12-25T22:59:39.979 [DEBUG] [Thread-20028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T22:59:39.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T22:59:39.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T22:59:40.036 [DEBUG] [Thread-20028] [transport.py] [_log()] userauth is OK
2025-12-25T22:59:40.036 [DEBUG] [Thread-20028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T22:59:40.036 [DEBUG] [Thread-20028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T22:59:40.036 [DEBUG] [Thread-20028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T22:59:40.036 [DEBUG] [Thread-20028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T22:59:40.050 [INFO] [Thread-20028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T22:59:40.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-25T22:59:40.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T22:59:40.859 [DEBUG] [Thread-20028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T22:59:40.859 [DEBUG] [Thread-20028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T22:59:40.906 [DEBUG] [Thread-20028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T22:59:40.906 [DEBUG] [Thread-20028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T22:59:40.915 [DEBUG] [Thread-20028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T22:59:40.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T22:59:40.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-25T22:59:40.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-25T22:59:40.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T22:59:40.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T22:59:40.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T22:59:40.947 [DEBUG] [Thread-20028] [transport.py] [_log()] EOF in transport thread
2025-12-25T22:59:46.456 [DEBUG] [Thread-20030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:01.511 [DEBUG] [Thread-20031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:05.513 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:05.514 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:00:10.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:00:10.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-25T23:00:11.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 0, 5), 4.27, 75.59, 0.0, 14.38, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:00:11.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:00:05
2025-12-25T23:00:11.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:00:11.939 [DEBUG] [Thread-20032] [transport.py] [_log()] starting thread (client mode): 0xb6bba410
2025-12-25T23:00:11.939 [DEBUG] [Thread-20032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:00:11.959 [DEBUG] [Thread-20032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:00:11.959 [INFO] [Thread-20032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:00:11.962 [DEBUG] [Thread-20032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:00:11.962 [DEBUG] [Thread-20032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] client lang: <none>
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] server lang: <none>
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] kex follows: False
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] Compression: none
2025-12-25T23:00:11.963 [DEBUG] [Thread-20032] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:00:11.981 [DEBUG] [Thread-20032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:00:11.981 [DEBUG] [Thread-20032] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:00:11.982 [DEBUG] [Thread-20032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:00:11.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:00:11.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:00:12.025 [DEBUG] [Thread-20032] [transport.py] [_log()] userauth is OK
2025-12-25T23:00:12.025 [DEBUG] [Thread-20032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:00:12.025 [DEBUG] [Thread-20032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:00:12.026 [DEBUG] [Thread-20032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:00:12.026 [DEBUG] [Thread-20032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:00:12.046 [INFO] [Thread-20032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:00:12.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:00:16.541 [DEBUG] [Thread-20034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:18.654 [DEBUG] [Thread-20032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:00:18.654 [DEBUG] [Thread-20032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:00:18.654 [DEBUG] [Thread-20032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:00:18.695 [DEBUG] [Thread-20032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:00:18.696 [DEBUG] [Thread-20032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:00:18.699 [DEBUG] [Thread-20032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:00:18.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:00:18.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:00:18.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:00:18.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:00:18.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:00:18.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:00:18.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:00:18.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:00:18.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:00:18.824 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-25T23:00:18.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:00:05', tmtdew=4.27, humidity=75.59, cloud=0.0, wind=14.38, 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-25T23:00:06', seeing=1.63, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.07075000000000031, 0.08825000000000038, 0.16225000000000023, 0.10149999999999793, 0.07450000000000045, 0.12125000000000163, 0.08349999999999902, 0.11325000000000074, 0.13549999999999862, 0.07699999999999996, 0.1462500000000002, 0.057000000000000384, 0.14400000000000013, 0.12025000000000041, 0.1095000000000006, 0.10350000000000037, 0.08024999999999949, 0.1225000000000005, 0.09149999999999991, 0.09375, 0.1609999999999996, 0.13124999999999787, 0.1567500000000006, 0.12325000000000053, 0.0669999999999984, 0.0840000000000014, 0.17324999999999946, 0.2104999999999997, 0.25450000000000017, 0.19350000000000023, 0.22800000000000153, 0.15750000000000064, 0.1557499999999994], zp_timestamp='2025-12-25T20:56:00')
2025-12-25T23:00:18.825 [DEBUG] [Thread-20032] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:00:18.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-25T23:00:18.908 [DEBUG] [Thread-20036] [transport.py] [_log()] starting thread (client mode): 0xb410d3c0
2025-12-25T23:00:18.908 [DEBUG] [Thread-20036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:00:18.923 [DEBUG] [Thread-20036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:00:18.923 [INFO] [Thread-20036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] client lang: <none>
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] server lang: <none>
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] kex follows: False
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] Compression: none
2025-12-25T23:00:18.933 [DEBUG] [Thread-20036] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:00:18.990 [DEBUG] [Thread-20036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:00:18.990 [DEBUG] [Thread-20036] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:00:18.990 [DEBUG] [Thread-20036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:00:18.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:00:18.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:00:19.048 [DEBUG] [Thread-20036] [transport.py] [_log()] userauth is OK
2025-12-25T23:00:19.048 [DEBUG] [Thread-20036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:00:19.048 [DEBUG] [Thread-20036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:00:19.048 [DEBUG] [Thread-20036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:00:19.048 [DEBUG] [Thread-20036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:00:19.061 [INFO] [Thread-20036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:00:19.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-25T23:00:19.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:00:19.909 [DEBUG] [Thread-20036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:00:19.909 [DEBUG] [Thread-20036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:00:19.957 [DEBUG] [Thread-20036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:00:19.957 [DEBUG] [Thread-20036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:00:19.965 [DEBUG] [Thread-20036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:00:19.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:00:19.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:00:19.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-25T23:00:19.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:00:19.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:00:19.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:00:19.997 [DEBUG] [Thread-20036] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:00:31.573 [DEBUG] [Thread-20038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:33.260 [DEBUG] [Thread-20039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:46.626 [DEBUG] [Thread-20040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:00:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:00:50.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:00:50.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-25T23:00:50.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 0, 37), 4.33, 74.83, 0.0, 13.38, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:00:50.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:00:37
2025-12-25T23:00:50.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:00:50.967 [DEBUG] [Thread-20041] [transport.py] [_log()] starting thread (client mode): 0xb6b7d3c0
2025-12-25T23:00:50.967 [DEBUG] [Thread-20041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:00:50.987 [DEBUG] [Thread-20041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:00:50.988 [INFO] [Thread-20041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] client lang: <none>
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] server lang: <none>
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] kex follows: False
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] Compression: none
2025-12-25T23:00:50.991 [DEBUG] [Thread-20041] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:00:51.009 [DEBUG] [Thread-20041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:00:51.010 [DEBUG] [Thread-20041] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:00:51.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:00:51.011 [DEBUG] [Thread-20041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:00:51.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:00:51.013 [DEBUG] [Thread-20041] [transport.py] [_log()] userauth is OK
2025-12-25T23:00:51.013 [DEBUG] [Thread-20041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:00:51.013 [DEBUG] [Thread-20041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:00:51.013 [DEBUG] [Thread-20041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:00:51.014 [DEBUG] [Thread-20041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:00:51.031 [INFO] [Thread-20041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:00:51.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:00:51.675 [DEBUG] [Thread-20041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:00:51.675 [DEBUG] [Thread-20041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:00:51.676 [DEBUG] [Thread-20041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:00:51.716 [DEBUG] [Thread-20041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:00:51.716 [DEBUG] [Thread-20041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:00:51.720 [DEBUG] [Thread-20041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:00:51.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:00:51.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:00:51.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:00:51.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:00:51.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:00:51.744 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:00:51.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:00:51.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:00:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:00:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.875063 -999.00  +14.70   7.61     78  +11.10 1 1 1 1 1     0    0 3.34 -10.92 ZNESW 9.8 7.6 234.4 9.9 15.5 -22.5 15.4 -22.0 15.2 -20.5 15.4 -21.4
2025-12-25T23:00:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:00:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:00:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.875063
2025-12-25T23:00:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:00:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:00:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:00:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:00:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:00:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:00:37', tmtdew=4.33, humidity=74.83, cloud=0.0, wind=13.38, 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-25T23:00:38', seeing=1.41, atlas_timestamp='2025-12-25T21:00:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.08825000000000038, 0.16225000000000023, 0.10149999999999793, 0.07450000000000045, 0.12125000000000163, 0.08349999999999902, 0.11325000000000074, 0.13549999999999862, 0.07699999999999996, 0.1462500000000002, 0.057000000000000384, 0.14400000000000013, 0.12025000000000041, 0.1095000000000006, 0.10350000000000037, 0.08024999999999949, 0.1225000000000005, 0.09149999999999991, 0.09375, 0.1609999999999996, 0.13124999999999787, 0.1567500000000006, 0.12325000000000053, 0.0669999999999984, 0.0840000000000014, 0.17324999999999946, 0.2104999999999997, 0.25450000000000017, 0.19350000000000023, 0.22800000000000153, 0.15750000000000064, 0.1557499999999994], zp_timestamp='2025-12-25T20:56:00')
2025-12-25T23:00:51.747 [DEBUG] [Thread-20041] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:00:51.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-25T23:00:51.842 [DEBUG] [Thread-20044] [transport.py] [_log()] starting thread (client mode): 0xb6bb93c0
2025-12-25T23:00:51.842 [DEBUG] [Thread-20044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:00:51.856 [DEBUG] [Thread-20044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:00:51.856 [INFO] [Thread-20044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:51.864 [DEBUG] [Thread-20044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] client lang: <none>
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] server lang: <none>
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] kex follows: False
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] Compression: none
2025-12-25T23:00:51.865 [DEBUG] [Thread-20044] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:00:51.920 [DEBUG] [Thread-20044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:00:51.921 [DEBUG] [Thread-20044] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:00:51.921 [DEBUG] [Thread-20044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:00:51.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:00:51.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:00:51.977 [DEBUG] [Thread-20044] [transport.py] [_log()] userauth is OK
2025-12-25T23:00:51.977 [DEBUG] [Thread-20044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:00:51.977 [DEBUG] [Thread-20044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:00:51.977 [DEBUG] [Thread-20044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:00:51.977 [DEBUG] [Thread-20044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:00:51.996 [INFO] [Thread-20044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:00:51.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-25T23:00:51.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:00:52.829 [DEBUG] [Thread-20044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:00:52.829 [DEBUG] [Thread-20044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:00:52.876 [DEBUG] [Thread-20044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:00:52.877 [DEBUG] [Thread-20044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:00:52.885 [DEBUG] [Thread-20044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:00:52.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:00: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')
2025-12-25T23:00:52.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-25T23:00:52.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:00:52.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:00:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:00:52.919 [DEBUG] [Thread-20044] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:01:01.656 [DEBUG] [Thread-20046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:05.711 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:05.712 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:06.347 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:16.704 [DEBUG] [Thread-20047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:22.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:01:22.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:01:22.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-25T23:01:23.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 1, 9), 4.35, 74.71, 0.0, 12.88, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:01:23.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:01:09
2025-12-25T23:01:23.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:01:23.893 [DEBUG] [Thread-20048] [transport.py] [_log()] starting thread (client mode): 0xb6bb9a20
2025-12-25T23:01:23.893 [DEBUG] [Thread-20048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:01:23.913 [DEBUG] [Thread-20048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:01:23.913 [INFO] [Thread-20048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:01:23.916 [DEBUG] [Thread-20048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] client lang: <none>
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] server lang: <none>
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] kex follows: False
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] Compression: none
2025-12-25T23:01:23.917 [DEBUG] [Thread-20048] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:01:23.926 [DEBUG] [Thread-20048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:01:23.927 [DEBUG] [Thread-20048] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:01:23.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:01:23.927 [DEBUG] [Thread-20048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:01:23.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:01:23.929 [DEBUG] [Thread-20048] [transport.py] [_log()] userauth is OK
2025-12-25T23:01:23.930 [DEBUG] [Thread-20048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:01:23.930 [DEBUG] [Thread-20048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:01:23.930 [DEBUG] [Thread-20048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:01:23.930 [DEBUG] [Thread-20048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:01:23.948 [INFO] [Thread-20048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:01:23.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:01:24.739 [DEBUG] [Thread-20048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:01:24.739 [DEBUG] [Thread-20048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:01:24.739 [DEBUG] [Thread-20048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:01:24.780 [DEBUG] [Thread-20048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:01:24.780 [DEBUG] [Thread-20048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:01:24.783 [DEBUG] [Thread-20048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:01:24.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:01:24.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:01:24.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:01:24.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:01:24.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:01:24.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:01:24.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:01:24.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:01:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:01:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.875411 -999.00  +14.70   7.55     78  +11.00 1 1 1 1 1     0    0 3.38 -10.40 ZNESW 8.6 7.5 221.5 12.2 15.5 -22.5 15.4 -22.0 15.2 -20.6 15.4 -21.6
2025-12-25T23:01:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:01:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:01:24.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.875411
2025-12-25T23:01:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:01:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:01:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:01:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:01:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:01:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:01:09', tmtdew=4.35, humidity=74.71, cloud=0.0, wind=12.88, 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-25T23:01:10', seeing=1.42, atlas_timestamp='2025-12-25T21:00:35.510', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T20:59:00')
2025-12-25T23:01:24.813 [DEBUG] [Thread-20048] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:01:24.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-25T23:01:24.908 [DEBUG] [Thread-20051] [transport.py] [_log()] starting thread (client mode): 0xb6bb95d0
2025-12-25T23:01:24.908 [DEBUG] [Thread-20051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:01:24.922 [DEBUG] [Thread-20051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:01:24.922 [INFO] [Thread-20051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:01:24.930 [DEBUG] [Thread-20051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:01:24.930 [DEBUG] [Thread-20051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:01:24.930 [DEBUG] [Thread-20051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:01:24.930 [DEBUG] [Thread-20051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:24.930 [DEBUG] [Thread-20051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:24.930 [DEBUG] [Thread-20051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] client lang: <none>
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] server lang: <none>
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] kex follows: False
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] Compression: none
2025-12-25T23:01:24.931 [DEBUG] [Thread-20051] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:01:24.990 [DEBUG] [Thread-20051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:01:24.990 [DEBUG] [Thread-20051] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:01:24.991 [DEBUG] [Thread-20051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:01:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:01:24.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:01:25.045 [DEBUG] [Thread-20051] [transport.py] [_log()] userauth is OK
2025-12-25T23:01:25.045 [DEBUG] [Thread-20051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:01:25.045 [DEBUG] [Thread-20051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:01:25.045 [DEBUG] [Thread-20051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:01:25.045 [DEBUG] [Thread-20051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:01:25.059 [INFO] [Thread-20051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:01:25.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-25T23:01:25.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:01:25.907 [DEBUG] [Thread-20051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:01:25.908 [DEBUG] [Thread-20051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:01:25.956 [DEBUG] [Thread-20051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:01:25.956 [DEBUG] [Thread-20051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:01:25.965 [DEBUG] [Thread-20051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:01:25.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:01:25.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-25T23:01:25.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:01:25.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:01:25.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:01:25.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:01:26.002 [DEBUG] [Thread-20051] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:01:31.739 [DEBUG] [Thread-20053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:33.337 [DEBUG] [Thread-20054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:46.785 [DEBUG] [Thread-20055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:01:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:01:56.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:01:56.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-25T23:01:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 1, 41), 4.48, 74.56, 0.0, 14.5, 14.82, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:01:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:01:41
2025-12-25T23:01:56.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:01:56.992 [DEBUG] [Thread-20056] [transport.py] [_log()] starting thread (client mode): 0xb6bbab90
2025-12-25T23:01:56.992 [DEBUG] [Thread-20056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:01:57.012 [DEBUG] [Thread-20056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:01:57.012 [INFO] [Thread-20056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] client lang: <none>
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] server lang: <none>
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] kex follows: False
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:01:57.015 [DEBUG] [Thread-20056] [transport.py] [_log()] Compression: none
2025-12-25T23:01:57.016 [DEBUG] [Thread-20056] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:01:57.033 [DEBUG] [Thread-20056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:01:57.034 [DEBUG] [Thread-20056] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:01:57.035 [DEBUG] [Thread-20056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:01:57.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:01:57.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:01:57.037 [DEBUG] [Thread-20056] [transport.py] [_log()] userauth is OK
2025-12-25T23:01:57.037 [DEBUG] [Thread-20056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:01:57.037 [DEBUG] [Thread-20056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:01:57.037 [DEBUG] [Thread-20056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:01:57.037 [DEBUG] [Thread-20056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:01:57.062 [INFO] [Thread-20056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:01:57.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:01:57.677 [DEBUG] [Thread-20056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:01:57.678 [DEBUG] [Thread-20056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:01:57.678 [DEBUG] [Thread-20056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:01:57.719 [DEBUG] [Thread-20056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:01:57.719 [DEBUG] [Thread-20056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:01:57.723 [DEBUG] [Thread-20056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:01:57.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:01:57.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:01:57.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:01:57.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:01:57.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:01:57.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:01:57.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:01:57.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:01:57.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:01:57.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.875758 -999.00  +14.80   9.11     78  +11.00 1 1 1 1 1     0    0 3.35 -8.80 ZNESW 9.4 9.1 257.4 14.6 15.5 -22.4 15.4 -22.2 15.2 -20.5 15.4 -21.6
2025-12-25T23:01:57.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:01:57.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:01:57.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.875758
2025-12-25T23:01:57.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:01:57.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:01:57.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:01:57.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:01:57.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:01:57.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:01:41', tmtdew=4.48, humidity=74.56, cloud=0.0, wind=14.5, 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-25T23:01:42', seeing=1.42, atlas_timestamp='2025-12-25T21:01:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T20:59:00')
2025-12-25T23:01:57.750 [DEBUG] [Thread-20056] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:01:57.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-25T23:01:57.857 [DEBUG] [Thread-20059] [transport.py] [_log()] starting thread (client mode): 0xb6b7c3d0
2025-12-25T23:01:57.857 [DEBUG] [Thread-20059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:01:57.873 [DEBUG] [Thread-20059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:01:57.873 [INFO] [Thread-20059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:57.881 [DEBUG] [Thread-20059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] client lang: <none>
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] server lang: <none>
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] kex follows: False
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:01:57.882 [DEBUG] [Thread-20059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:01:57.883 [DEBUG] [Thread-20059] [transport.py] [_log()] Compression: none
2025-12-25T23:01:57.883 [DEBUG] [Thread-20059] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:01:57.939 [DEBUG] [Thread-20059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:01:57.939 [DEBUG] [Thread-20059] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:01:57.940 [DEBUG] [Thread-20059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:01:57.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:01:57.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:01:57.998 [DEBUG] [Thread-20059] [transport.py] [_log()] userauth is OK
2025-12-25T23:01:57.998 [DEBUG] [Thread-20059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:01:57.998 [DEBUG] [Thread-20059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:01:57.999 [DEBUG] [Thread-20059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:01:57.999 [DEBUG] [Thread-20059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:01:58.018 [INFO] [Thread-20059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:01:58.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-25T23:01:58.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:01:58.926 [DEBUG] [Thread-20059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:01:58.926 [DEBUG] [Thread-20059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:01:58.974 [DEBUG] [Thread-20059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:01:58.974 [DEBUG] [Thread-20059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:01:58.983 [DEBUG] [Thread-20059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:01:58.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:01:58.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-25T23:01:59.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:01:59.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:01:59.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:01:59.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:01:59.017 [DEBUG] [Thread-20059] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:02:01.822 [DEBUG] [Thread-20061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:02:05.911 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:02:05.912 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:02:16.880 [DEBUG] [Thread-20062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:02:29.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:02:29.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:02:29.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:02:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 2, 13), 4.53, 74.35, 0.0, 15.56, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:02:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:02:13
2025-12-25T23:02:29.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:02:30.035 [DEBUG] [Thread-20063] [transport.py] [_log()] starting thread (client mode): 0xb6b005e0
2025-12-25T23:02:30.035 [DEBUG] [Thread-20063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:02:30.055 [DEBUG] [Thread-20063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:02:30.055 [INFO] [Thread-20063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:02:30.058 [DEBUG] [Thread-20063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] client lang: <none>
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] server lang: <none>
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] kex follows: False
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] Compression: none
2025-12-25T23:02:30.059 [DEBUG] [Thread-20063] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:02:30.076 [DEBUG] [Thread-20063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:02:30.076 [DEBUG] [Thread-20063] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:02:30.077 [DEBUG] [Thread-20063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:02:30.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:02:30.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:02:30.120 [DEBUG] [Thread-20063] [transport.py] [_log()] userauth is OK
2025-12-25T23:02:30.121 [DEBUG] [Thread-20063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:02:30.121 [DEBUG] [Thread-20063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:02:30.121 [DEBUG] [Thread-20063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:02:30.121 [DEBUG] [Thread-20063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:02:30.152 [INFO] [Thread-20063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:02:30.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:02:30.982 [DEBUG] [Thread-20063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:02:30.982 [DEBUG] [Thread-20063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:02:30.983 [DEBUG] [Thread-20063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:02:31.023 [DEBUG] [Thread-20063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:02:31.023 [DEBUG] [Thread-20063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:02:31.025 [DEBUG] [Thread-20063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:02:31.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:02:31.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:02:31.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:02:31.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:02:31.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:02:31.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:02:31.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:02:31.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:02:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:02:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.876105 -999.00  +14.80   9.10     78  +11.00 1 1 1 1 1     0    0 3.40 -6.78 ZNESW 9.2 9.1 240.0 13.6 15.5 -22.7 15.4 -22.1 15.2 -20.8 15.4 -21.7
2025-12-25T23:02:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:02:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:02:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.876105
2025-12-25T23:02:31.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:02:31.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:02:31.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:02:31.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:02:31.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:02:31.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:02:13', tmtdew=4.53, humidity=74.35, cloud=0.0, wind=15.56, 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-25T23:02:14', seeing=1.71, atlas_timestamp='2025-12-25T21:01:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T20:59:00')
2025-12-25T23:02:31.047 [DEBUG] [Thread-20063] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:02:31.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-25T23:02:31.142 [DEBUG] [Thread-20066] [transport.py] [_log()] starting thread (client mode): 0xb6b028f0
2025-12-25T23:02:31.142 [DEBUG] [Thread-20066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:02:31.158 [DEBUG] [Thread-20066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:02:31.158 [INFO] [Thread-20066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] client lang: <none>
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] server lang: <none>
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] kex follows: False
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:02:31.166 [DEBUG] [Thread-20066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:02:31.167 [DEBUG] [Thread-20066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:02:31.167 [DEBUG] [Thread-20066] [transport.py] [_log()] Compression: none
2025-12-25T23:02:31.167 [DEBUG] [Thread-20066] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:02:31.228 [DEBUG] [Thread-20066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:02:31.229 [DEBUG] [Thread-20066] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:02:31.229 [DEBUG] [Thread-20066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:02:31.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:02:31.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:02:31.286 [DEBUG] [Thread-20066] [transport.py] [_log()] userauth is OK
2025-12-25T23:02:31.286 [DEBUG] [Thread-20066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:02:31.286 [DEBUG] [Thread-20066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:02:31.286 [DEBUG] [Thread-20066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:02:31.286 [DEBUG] [Thread-20066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:02:31.305 [INFO] [Thread-20066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:02:31.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-25T23:02:31.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:02:31.909 [DEBUG] [Thread-20068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:02:32.174 [DEBUG] [Thread-20066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:02:32.174 [DEBUG] [Thread-20066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:02:32.221 [DEBUG] [Thread-20066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:02:32.222 [DEBUG] [Thread-20066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:02:32.230 [DEBUG] [Thread-20066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:02:32.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:02:32.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-25T23:02:32.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:02:32.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:02:32.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:02:32.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:02:32.264 [DEBUG] [Thread-20066] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:02:33.401 [DEBUG] [Thread-20069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:02:46.959 [DEBUG] [Thread-20070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:01.986 [DEBUG] [Thread-20071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:02.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:03:02.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:03: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-25T23:03:02.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 2, 46), 4.6, 74.26, 0.0, 14.98, 14.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:03:02.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:02:46
2025-12-25T23:03:03.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:03:03.250 [DEBUG] [Thread-20072] [transport.py] [_log()] starting thread (client mode): 0xb410c940
2025-12-25T23:03:03.250 [DEBUG] [Thread-20072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:03:03.271 [DEBUG] [Thread-20072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:03:03.271 [INFO] [Thread-20072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] client lang: <none>
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] server lang: <none>
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] kex follows: False
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] Compression: none
2025-12-25T23:03:03.274 [DEBUG] [Thread-20072] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:03:03.292 [DEBUG] [Thread-20072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:03:03.292 [DEBUG] [Thread-20072] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:03:03.293 [DEBUG] [Thread-20072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:03:03.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:03:03.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:03:03.295 [DEBUG] [Thread-20072] [transport.py] [_log()] userauth is OK
2025-12-25T23:03:03.295 [DEBUG] [Thread-20072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:03:03.295 [DEBUG] [Thread-20072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:03:03.295 [DEBUG] [Thread-20072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:03:03.295 [DEBUG] [Thread-20072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:03:03.330 [INFO] [Thread-20072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:03:03.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:03:03.981 [DEBUG] [Thread-20072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:03:03.982 [DEBUG] [Thread-20072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:03:03.982 [DEBUG] [Thread-20072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:03:04.023 [DEBUG] [Thread-20072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:03:04.023 [DEBUG] [Thread-20072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:03:04.026 [DEBUG] [Thread-20072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:03:04.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:03:04.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:03:04.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:03:04.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:03:04.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:03:04.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:03:04.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:03:04.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:03:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:03:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.876452 -999.00  +14.80   6.59     78  +11.00 1 1 1 1 1     0    0 3.46 -5.21 ZNESW 9.6 6.6 240.9 13.0 15.5 -22.6 15.4 -22.1 15.1 -20.7 15.4 -21.7
2025-12-25T23:03:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:03:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:03:04.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.876452
2025-12-25T23:03:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:03:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:03:04.048 [DEBUG] [Thread-20072] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:03:04.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:03:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:03:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:03:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:02:46', tmtdew=4.6, humidity=74.26, cloud=0.0, wind=14.98, 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-25T23:02:46', seeing=1.34, atlas_timestamp='2025-12-25T21:02:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T20:59:00')
2025-12-25T23:03:04.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-25T23:03:04.154 [DEBUG] [Thread-20075] [transport.py] [_log()] starting thread (client mode): 0xb410f250
2025-12-25T23:03:04.154 [DEBUG] [Thread-20075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:03:04.170 [DEBUG] [Thread-20075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:03:04.170 [INFO] [Thread-20075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:03:04.177 [DEBUG] [Thread-20075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:03:04.177 [DEBUG] [Thread-20075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] client lang: <none>
2025-12-25T23:03:04.178 [DEBUG] [Thread-20075] [transport.py] [_log()] server lang: <none>
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] kex follows: False
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] Compression: none
2025-12-25T23:03:04.179 [DEBUG] [Thread-20075] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:03:04.234 [DEBUG] [Thread-20075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:03:04.234 [DEBUG] [Thread-20075] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:03:04.235 [DEBUG] [Thread-20075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:03:04.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:03:04.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:03:04.290 [DEBUG] [Thread-20075] [transport.py] [_log()] userauth is OK
2025-12-25T23:03:04.290 [DEBUG] [Thread-20075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:03:04.290 [DEBUG] [Thread-20075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:03:04.290 [DEBUG] [Thread-20075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:03:04.291 [DEBUG] [Thread-20075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:03:04.308 [INFO] [Thread-20075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:03:04.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-25T23:03:04.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:03:05.183 [DEBUG] [Thread-20075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:03:05.183 [DEBUG] [Thread-20075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:03:05.231 [DEBUG] [Thread-20075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:03:05.231 [DEBUG] [Thread-20075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:03:05.240 [DEBUG] [Thread-20075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:03:05.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:03:05.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:03:05.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-25T23:03:05.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:03:05.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:03:05.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:03:05.274 [DEBUG] [Thread-20075] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:03:06.113 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:06.114 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:17.023 [DEBUG] [Thread-20077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:32.077 [DEBUG] [Thread-20078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:33.457 [DEBUG] [Thread-20079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:03:35.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:03:35.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:03:35.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-25T23:03:35.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 3, 18), 4.62, 74.15, 0.0, 14.66, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:03:35.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:03:18
2025-12-25T23:03:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:03:36.295 [DEBUG] [Thread-20080] [transport.py] [_log()] starting thread (client mode): 0xb6bbab30
2025-12-25T23:03:36.296 [DEBUG] [Thread-20080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:03:36.316 [DEBUG] [Thread-20080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:03:36.316 [INFO] [Thread-20080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:03:36.319 [DEBUG] [Thread-20080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:03:36.319 [DEBUG] [Thread-20080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:03:36.319 [DEBUG] [Thread-20080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:03:36.319 [DEBUG] [Thread-20080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] client lang: <none>
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] server lang: <none>
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] kex follows: False
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] Compression: none
2025-12-25T23:03:36.320 [DEBUG] [Thread-20080] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:03:36.334 [DEBUG] [Thread-20080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:03:36.335 [DEBUG] [Thread-20080] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:03:36.335 [DEBUG] [Thread-20080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:03:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:03:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:03:36.336 [DEBUG] [Thread-20080] [transport.py] [_log()] userauth is OK
2025-12-25T23:03:36.336 [DEBUG] [Thread-20080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:03:36.336 [DEBUG] [Thread-20080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:03:36.336 [DEBUG] [Thread-20080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:03:36.336 [DEBUG] [Thread-20080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:03:36.349 [INFO] [Thread-20080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:03:36.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:03:37.167 [DEBUG] [Thread-20080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:03:37.167 [DEBUG] [Thread-20080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:03:37.167 [DEBUG] [Thread-20080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:03:37.208 [DEBUG] [Thread-20080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:03:37.208 [DEBUG] [Thread-20080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:03:37.211 [DEBUG] [Thread-20080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:03:37.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:03:37.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:03:37.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:03:37.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:03:37.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:03:37.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:03:37.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:03:37.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:03:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:03:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.877147 -999.00  +14.90   8.34     77  +11.00 1 1 1 1 1     0    0 3.56 -2.79 ZNESW 6.6 8.3 232.2 12.8 15.5 -22.6 15.4 -22.1 15.2 -20.7 15.4 -21.5
2025-12-25T23:03:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:03:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:03:37.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.877147
2025-12-25T23:03:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:03:37.236 [DEBUG] [Thread-20080] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:03:37.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:03:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:03:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:03:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:03:37.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:03:18', tmtdew=4.62, humidity=74.15, cloud=0.0, wind=14.66, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:03:18', seeing=1.52, atlas_timestamp='2025-12-25T21:03:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T20:59:00')
2025-12-25T23:03:37.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-25T23:03:37.339 [DEBUG] [Thread-20083] [transport.py] [_log()] starting thread (client mode): 0xb6bb8cd0
2025-12-25T23:03:37.339 [DEBUG] [Thread-20083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:03:37.355 [DEBUG] [Thread-20083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:03:37.355 [INFO] [Thread-20083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] client lang: <none>
2025-12-25T23:03:37.362 [DEBUG] [Thread-20083] [transport.py] [_log()] server lang: <none>
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] kex follows: False
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] Compression: none
2025-12-25T23:03:37.363 [DEBUG] [Thread-20083] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:03:37.423 [DEBUG] [Thread-20083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:03:37.423 [DEBUG] [Thread-20083] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:03:37.424 [DEBUG] [Thread-20083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:03:37.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:03:37.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:03:37.479 [DEBUG] [Thread-20083] [transport.py] [_log()] userauth is OK
2025-12-25T23:03:37.480 [DEBUG] [Thread-20083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:03:37.480 [DEBUG] [Thread-20083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:03:37.480 [DEBUG] [Thread-20083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:03:37.480 [DEBUG] [Thread-20083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:03:37.498 [INFO] [Thread-20083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:03:37.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-25T23:03:37.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:03:38.354 [DEBUG] [Thread-20083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:03:38.355 [DEBUG] [Thread-20083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:03:38.403 [DEBUG] [Thread-20083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:03:38.403 [DEBUG] [Thread-20083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:03:38.413 [DEBUG] [Thread-20083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:03:38.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:03:38.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-25T23:03:38.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-25T23:03:38.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:03:38.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:03:38.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:03:38.450 [DEBUG] [Thread-20083] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:03:47.106 [DEBUG] [Thread-20085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:02.155 [DEBUG] [Thread-20086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:06.318 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:06.319 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:08.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:04:08.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:04:08.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-25T23:04:09.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 3, 50), 4.72, 73.41, 0.0, 13.32, 14.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:04:09.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:03:50
2025-12-25T23:04:09.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:04:09.470 [DEBUG] [Thread-20087] [transport.py] [_log()] starting thread (client mode): 0xb410d1b0
2025-12-25T23:04:09.470 [DEBUG] [Thread-20087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:04:09.491 [DEBUG] [Thread-20087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:04:09.491 [INFO] [Thread-20087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] client lang: <none>
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] server lang: <none>
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] kex follows: False
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] Compression: none
2025-12-25T23:04:09.494 [DEBUG] [Thread-20087] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:04:09.509 [DEBUG] [Thread-20087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:04:09.509 [DEBUG] [Thread-20087] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:04:09.509 [DEBUG] [Thread-20087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:04:09.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:04:09.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:04:09.510 [DEBUG] [Thread-20087] [transport.py] [_log()] userauth is OK
2025-12-25T23:04:09.510 [DEBUG] [Thread-20087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:04:09.510 [DEBUG] [Thread-20087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:04:09.510 [DEBUG] [Thread-20087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:04:09.510 [DEBUG] [Thread-20087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:04:09.526 [INFO] [Thread-20087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:04:09.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:04:10.190 [DEBUG] [Thread-20087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:04:10.190 [DEBUG] [Thread-20087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:04:10.190 [DEBUG] [Thread-20087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:04:10.230 [DEBUG] [Thread-20087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:04:10.230 [DEBUG] [Thread-20087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:04:10.233 [DEBUG] [Thread-20087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:04:10.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:04:10.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:04:10.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:04:10.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:04:10.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:04:10.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:04:10.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:04:10.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.877494 -999.00  +14.90   6.58     77  +10.90 1 1 1 1 1     0    0 3.63 -0.67 ZNESW 9.5 6.6 241.3 9.2 15.5 -22.6 15.4 -22.1 15.2 -20.6 15.4 -21.7
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.877494
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:04:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:03:50', tmtdew=4.72, humidity=73.41, cloud=0.0, wind=13.32, 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-25T23:03:50', seeing=1.2, atlas_timestamp='2025-12-25T21:03:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T21:03:00')
2025-12-25T23:04:10.249 [DEBUG] [Thread-20087] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:04:10.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-25T23:04:10.347 [DEBUG] [Thread-20090] [transport.py] [_log()] starting thread (client mode): 0xb6ba80d0
2025-12-25T23:04:10.347 [DEBUG] [Thread-20090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:04:10.362 [DEBUG] [Thread-20090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:04:10.362 [INFO] [Thread-20090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] client lang: <none>
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] server lang: <none>
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] kex follows: False
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:04:10.370 [DEBUG] [Thread-20090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:04:10.371 [DEBUG] [Thread-20090] [transport.py] [_log()] Compression: none
2025-12-25T23:04:10.371 [DEBUG] [Thread-20090] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:04:10.426 [DEBUG] [Thread-20090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:04:10.426 [DEBUG] [Thread-20090] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:04:10.426 [DEBUG] [Thread-20090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:04:10.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:04:10.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:04:10.483 [DEBUG] [Thread-20090] [transport.py] [_log()] userauth is OK
2025-12-25T23:04:10.483 [DEBUG] [Thread-20090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:04:10.484 [DEBUG] [Thread-20090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:04:10.484 [DEBUG] [Thread-20090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:04:10.484 [DEBUG] [Thread-20090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:04:10.500 [INFO] [Thread-20090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:04:10.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-25T23:04:10.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:04:11.343 [DEBUG] [Thread-20090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:04:11.343 [DEBUG] [Thread-20090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:04:11.390 [DEBUG] [Thread-20090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:04:11.390 [DEBUG] [Thread-20090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:04:11.398 [DEBUG] [Thread-20090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:04:11.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:04:11.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:04: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') -> 00000000
2025-12-25T23:04:11.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:04:11.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:04:11.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:04:11.429 [DEBUG] [Thread-20090] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:04:17.188 [DEBUG] [Thread-20092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:32.248 [DEBUG] [Thread-20093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:33.524 [DEBUG] [Thread-20094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:04:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:04:41.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:04:41.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-25T23:04:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 4, 22), 4.72, 73.4, 0.0, 13.23, 15.0, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:04:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:04:22
2025-12-25T23:04:42.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:04:42.468 [DEBUG] [Thread-20095] [transport.py] [_log()] starting thread (client mode): 0xb6bf5570
2025-12-25T23:04:42.468 [DEBUG] [Thread-20095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:04:42.487 [DEBUG] [Thread-20095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:04:42.488 [INFO] [Thread-20095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] client lang: <none>
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] server lang: <none>
2025-12-25T23:04:42.491 [DEBUG] [Thread-20095] [transport.py] [_log()] kex follows: False
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] Compression: none
2025-12-25T23:04:42.492 [DEBUG] [Thread-20095] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:04:42.512 [DEBUG] [Thread-20095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:04:42.513 [DEBUG] [Thread-20095] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:04:42.513 [DEBUG] [Thread-20095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:04:42.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:04:42.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:04:42.515 [DEBUG] [Thread-20095] [transport.py] [_log()] userauth is OK
2025-12-25T23:04:42.515 [DEBUG] [Thread-20095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:04:42.516 [DEBUG] [Thread-20095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:04:42.516 [DEBUG] [Thread-20095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:04:42.516 [DEBUG] [Thread-20095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:04:42.551 [INFO] [Thread-20095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:04:42.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:04:43.183 [DEBUG] [Thread-20095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:04:43.183 [DEBUG] [Thread-20095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:04:43.184 [DEBUG] [Thread-20095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:04:43.224 [DEBUG] [Thread-20095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:04:43.224 [DEBUG] [Thread-20095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:04:43.228 [DEBUG] [Thread-20095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:04:43.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:04:43.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:04:43.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:04:43.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:04:43.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:04:43.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:04:43.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:04:43.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:04:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:04:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.877841 -999.00  +15.00   6.62     76  +10.90 1 1 1 1 1     0    0 3.73 1.80 ZNESW 7.1 6.6 229.6 9.8 15.5 -22.6 15.4 -22.2 15.2 -20.5 15.4 -21.7
2025-12-25T23:04:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:04:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:04:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.877841
2025-12-25T23:04:43.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:04:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:04:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:04:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:04:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:04:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:04:22', tmtdew=4.72, humidity=73.4, cloud=0.0, wind=13.23, 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-25T23:04:22', seeing=1.39, atlas_timestamp='2025-12-25T21:04:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T21:03:00')
2025-12-25T23:04:43.255 [DEBUG] [Thread-20095] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:04:43.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-25T23:04:43.362 [DEBUG] [Thread-20098] [transport.py] [_log()] starting thread (client mode): 0xb6bba3b0
2025-12-25T23:04:43.363 [DEBUG] [Thread-20098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:04:43.378 [DEBUG] [Thread-20098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:04:43.379 [INFO] [Thread-20098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:04:43.386 [DEBUG] [Thread-20098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] client lang: <none>
2025-12-25T23:04:43.387 [DEBUG] [Thread-20098] [transport.py] [_log()] server lang: <none>
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] kex follows: False
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] Compression: none
2025-12-25T23:04:43.388 [DEBUG] [Thread-20098] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:04:43.445 [DEBUG] [Thread-20098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:04:43.445 [DEBUG] [Thread-20098] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:04:43.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:04:43.446 [DEBUG] [Thread-20098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:04:43.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:04:43.504 [DEBUG] [Thread-20098] [transport.py] [_log()] userauth is OK
2025-12-25T23:04:43.504 [DEBUG] [Thread-20098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:04:43.505 [DEBUG] [Thread-20098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:04:43.505 [DEBUG] [Thread-20098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:04:43.505 [DEBUG] [Thread-20098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:04:43.523 [INFO] [Thread-20098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:04:43.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-25T23:04:43.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:04:44.338 [DEBUG] [Thread-20098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:04:44.339 [DEBUG] [Thread-20098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:04:44.386 [DEBUG] [Thread-20098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:04:44.386 [DEBUG] [Thread-20098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:04:44.396 [DEBUG] [Thread-20098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:04:44.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:04:44.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:04:44.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-25T23:04:44.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:04:44.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:04:44.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:04:44.432 [DEBUG] [Thread-20098] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:04:47.280 [DEBUG] [Thread-20100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:02.333 [DEBUG] [Thread-20101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:06.521 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:06.522 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:05:14.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:05:14.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-25T23:05:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 4, 54), 4.86, 72.75, 0.0, 14.24, 15.1, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:05:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:04:54
2025-12-25T23:05:15.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:05:15.463 [DEBUG] [Thread-20102] [transport.py] [_log()] starting thread (client mode): 0xb6bba920
2025-12-25T23:05:15.463 [DEBUG] [Thread-20102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:05:15.484 [DEBUG] [Thread-20102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:05:15.484 [INFO] [Thread-20102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:05:15.486 [DEBUG] [Thread-20102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:15.487 [DEBUG] [Thread-20102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] client lang: <none>
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] server lang: <none>
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] kex follows: False
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:05:15.488 [DEBUG] [Thread-20102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:05:15.489 [DEBUG] [Thread-20102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:05:15.489 [DEBUG] [Thread-20102] [transport.py] [_log()] Compression: none
2025-12-25T23:05:15.489 [DEBUG] [Thread-20102] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:05:15.507 [DEBUG] [Thread-20102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:05:15.507 [DEBUG] [Thread-20102] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:05:15.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:05:15.509 [DEBUG] [Thread-20102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:05:15.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:05:15.510 [DEBUG] [Thread-20102] [transport.py] [_log()] userauth is OK
2025-12-25T23:05:15.510 [DEBUG] [Thread-20102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:05:15.511 [DEBUG] [Thread-20102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:05:15.511 [DEBUG] [Thread-20102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:05:15.511 [DEBUG] [Thread-20102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:05:15.534 [INFO] [Thread-20102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:05:15.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:05:16.178 [DEBUG] [Thread-20102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:05:16.179 [DEBUG] [Thread-20102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:05:16.179 [DEBUG] [Thread-20102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:05:16.219 [DEBUG] [Thread-20102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:05:16.219 [DEBUG] [Thread-20102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:05:16.223 [DEBUG] [Thread-20102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:05:16.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:05:16.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:05:16.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:05:16.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:05:16.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:05:16.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:05:16.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:05:16.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:05:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:05:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.878188 -999.00  +15.10   4.73     76  +10.90 1 1 1 1 1     0    0 3.78 4.43 ZNESW 7.4 4.7 211.5 12.2 15.5 -22.5 15.4 -22.0 15.2 -20.5 15.4 -21.5
2025-12-25T23:05:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:05:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:05:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.878188
2025-12-25T23:05:16.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:05:16.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:05:16.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:05:16.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:05:16.248 [DEBUG] [Thread-20102] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:05:16.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:05:16.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:04:54', tmtdew=4.86, humidity=72.75, cloud=0.0, wind=14.24, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:04:54', seeing=1.46, atlas_timestamp='2025-12-25T21:04:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T21:03:00')
2025-12-25T23:05:16.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-25T23:05:16.354 [DEBUG] [Thread-20105] [transport.py] [_log()] starting thread (client mode): 0xb6bba800
2025-12-25T23:05:16.354 [DEBUG] [Thread-20105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:05:16.369 [DEBUG] [Thread-20105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:05:16.369 [INFO] [Thread-20105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:05:16.377 [DEBUG] [Thread-20105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:05:16.377 [DEBUG] [Thread-20105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:05:16.377 [DEBUG] [Thread-20105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] client lang: <none>
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] server lang: <none>
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] kex follows: False
2025-12-25T23:05:16.378 [DEBUG] [Thread-20105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:05:16.379 [DEBUG] [Thread-20105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:05:16.379 [DEBUG] [Thread-20105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:05:16.379 [DEBUG] [Thread-20105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:05:16.379 [DEBUG] [Thread-20105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:05:16.379 [DEBUG] [Thread-20105] [transport.py] [_log()] Compression: none
2025-12-25T23:05:16.379 [DEBUG] [Thread-20105] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:05:16.440 [DEBUG] [Thread-20105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:05:16.441 [DEBUG] [Thread-20105] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:05:16.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:05:16.442 [DEBUG] [Thread-20105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:05:16.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:05:16.496 [DEBUG] [Thread-20105] [transport.py] [_log()] userauth is OK
2025-12-25T23:05:16.497 [DEBUG] [Thread-20105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:05:16.497 [DEBUG] [Thread-20105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:05:16.497 [DEBUG] [Thread-20105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:05:16.497 [DEBUG] [Thread-20105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:05:16.516 [INFO] [Thread-20105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:05:16.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:05:16.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:05:17.368 [DEBUG] [Thread-20107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:17.386 [DEBUG] [Thread-20105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:05:17.386 [DEBUG] [Thread-20105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:05:17.434 [DEBUG] [Thread-20105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:05:17.434 [DEBUG] [Thread-20105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:05:17.443 [DEBUG] [Thread-20105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:05:17.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:05:17.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:05:17.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:05:17.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:05:17.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:05:17.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:05:17.481 [DEBUG] [Thread-20105] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:05:32.411 [DEBUG] [Thread-20108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:33.575 [DEBUG] [Thread-20109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:47.443 [DEBUG] [Thread-20110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:05:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:05:47.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:05:47.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-25T23:05:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 5, 26), 4.91, 72.5, 0.0, 15.95, 15.05, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:05:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:05:26
2025-12-25T23:05:48.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:05:48.521 [DEBUG] [Thread-20111] [transport.py] [_log()] starting thread (client mode): 0xb6bf7ca0
2025-12-25T23:05:48.521 [DEBUG] [Thread-20111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:05:48.542 [DEBUG] [Thread-20111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:05:48.542 [INFO] [Thread-20111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:05:48.545 [DEBUG] [Thread-20111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:05:48.545 [DEBUG] [Thread-20111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:05:48.545 [DEBUG] [Thread-20111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] client lang: <none>
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] server lang: <none>
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] kex follows: False
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] Compression: none
2025-12-25T23:05:48.546 [DEBUG] [Thread-20111] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:05:48.563 [DEBUG] [Thread-20111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:05:48.564 [DEBUG] [Thread-20111] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:05:48.565 [DEBUG] [Thread-20111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:05:48.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:05:48.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:05:48.566 [DEBUG] [Thread-20111] [transport.py] [_log()] userauth is OK
2025-12-25T23:05:48.567 [DEBUG] [Thread-20111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:05:48.567 [DEBUG] [Thread-20111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:05:48.567 [DEBUG] [Thread-20111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:05:48.567 [DEBUG] [Thread-20111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:05:48.591 [INFO] [Thread-20111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:05:48.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:05:49.237 [DEBUG] [Thread-20111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:05:49.237 [DEBUG] [Thread-20111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:05:49.238 [DEBUG] [Thread-20111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:05:49.278 [DEBUG] [Thread-20111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:05:49.278 [DEBUG] [Thread-20111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:05:49.281 [DEBUG] [Thread-20111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:05:49.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:05:49.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:05:49.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:05:49.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:05:49.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:05:49.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:05:49.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.878535 -999.00  +15.10   5.89     75  +10.90 1 1 1 1 1     0    0 3.85 7.32 ZNESW 2.1 5.9 221.0 11.7 15.6 -22.7 15.4 -22.2 15.2 -20.5 15.4 -21.6
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.878535
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:05:49.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:05:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:05:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:05:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:05:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:05:26', tmtdew=4.91, humidity=72.5, cloud=0.0, wind=15.95, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:05:26', seeing=1.46, atlas_timestamp='2025-12-25T21:05:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T21:03:00')
2025-12-25T23:05:49.301 [DEBUG] [Thread-20111] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:05:49.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:05:49.409 [DEBUG] [Thread-20114] [transport.py] [_log()] starting thread (client mode): 0xb6bf4250
2025-12-25T23:05:49.409 [DEBUG] [Thread-20114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:05:49.423 [DEBUG] [Thread-20114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:05:49.424 [INFO] [Thread-20114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:05:49.431 [DEBUG] [Thread-20114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:05:49.432 [DEBUG] [Thread-20114] [transport.py] [_log()] client lang: <none>
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] server lang: <none>
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] kex follows: False
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:05:49.433 [DEBUG] [Thread-20114] [transport.py] [_log()] Compression: none
2025-12-25T23:05:49.434 [DEBUG] [Thread-20114] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:05:49.488 [DEBUG] [Thread-20114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:05:49.488 [DEBUG] [Thread-20114] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:05:49.489 [DEBUG] [Thread-20114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:05:49.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:05:49.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:05:49.549 [DEBUG] [Thread-20114] [transport.py] [_log()] userauth is OK
2025-12-25T23:05:49.549 [DEBUG] [Thread-20114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:05:49.549 [DEBUG] [Thread-20114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:05:49.549 [DEBUG] [Thread-20114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:05:49.549 [DEBUG] [Thread-20114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:05:49.568 [INFO] [Thread-20114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:05:49.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-25T23:05:49.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:05:50.388 [DEBUG] [Thread-20114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:05:50.389 [DEBUG] [Thread-20114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:05:50.435 [DEBUG] [Thread-20114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:05:50.436 [DEBUG] [Thread-20114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:05:50.444 [DEBUG] [Thread-20114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:05:50.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:05: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')
2025-12-25T23:05:50.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-25T23:05:50.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:05:50.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:05:50.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:05:50.478 [DEBUG] [Thread-20114] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:06:02.480 [DEBUG] [Thread-20116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:06.724 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:06.725 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:17.529 [DEBUG] [Thread-20117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:20.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:06:20.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:06:20.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-25T23:06:21.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 5, 58), 5.04, 71.85, 0.0, 13.52, 15.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:06:21.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:05:58
2025-12-25T23:06:21.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:06:21.510 [DEBUG] [Thread-20118] [transport.py] [_log()] starting thread (client mode): 0xb6bf7ca0
2025-12-25T23:06:21.510 [DEBUG] [Thread-20118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:06:21.529 [DEBUG] [Thread-20118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:06:21.529 [INFO] [Thread-20118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:06:21.532 [DEBUG] [Thread-20118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:06:21.532 [DEBUG] [Thread-20118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] client lang: <none>
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] server lang: <none>
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] kex follows: False
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] Compression: none
2025-12-25T23:06:21.533 [DEBUG] [Thread-20118] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:06:21.541 [DEBUG] [Thread-20118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:06:21.541 [DEBUG] [Thread-20118] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:06:21.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:06:21.541 [DEBUG] [Thread-20118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:06:21.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:06:21.542 [DEBUG] [Thread-20118] [transport.py] [_log()] userauth is OK
2025-12-25T23:06:21.543 [DEBUG] [Thread-20118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:06:21.543 [DEBUG] [Thread-20118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:06:21.543 [DEBUG] [Thread-20118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:06:21.543 [DEBUG] [Thread-20118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:06:21.560 [INFO] [Thread-20118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:06:21.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:06:22.202 [DEBUG] [Thread-20118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:06:22.202 [DEBUG] [Thread-20118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:06:22.203 [DEBUG] [Thread-20118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:06:22.243 [DEBUG] [Thread-20118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:06:22.243 [DEBUG] [Thread-20118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:06:22.245 [DEBUG] [Thread-20118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:06:22.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:06:22.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:06:22.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:06:22.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:06:22.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:06:22.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:06:22.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:06:22.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:06:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:06:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.878883 -999.00  +15.10   7.43     75  +10.90 1 1 1 1 1     0    0 4.04 10.55 ZNESW 6.0 7.4 233.3 12.7 15.5 -22.7 15.4 -22.2 15.2 -20.7 15.4 -21.6
2025-12-25T23:06:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:06:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:06:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.878883
2025-12-25T23:06:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:06:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:06:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:06:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:06:22.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:06:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:05:58', tmtdew=5.04, humidity=71.85, cloud=0.0, wind=13.52, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:05:59', seeing=1.42, atlas_timestamp='2025-12-25T21:05:35.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T21:03:00')
2025-12-25T23:06:22.270 [DEBUG] [Thread-20118] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:06:22.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-25T23:06:22.377 [DEBUG] [Thread-20121] [transport.py] [_log()] starting thread (client mode): 0xb6bf4d90
2025-12-25T23:06:22.377 [DEBUG] [Thread-20121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:06:22.392 [DEBUG] [Thread-20121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:06:22.392 [INFO] [Thread-20121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] client lang: <none>
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] server lang: <none>
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] kex follows: False
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:06:22.400 [DEBUG] [Thread-20121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:06:22.401 [DEBUG] [Thread-20121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:06:22.401 [DEBUG] [Thread-20121] [transport.py] [_log()] Compression: none
2025-12-25T23:06:22.401 [DEBUG] [Thread-20121] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:06:22.458 [DEBUG] [Thread-20121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:06:22.458 [DEBUG] [Thread-20121] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:06:22.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:06:22.460 [DEBUG] [Thread-20121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:06:22.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:06:22.524 [DEBUG] [Thread-20121] [transport.py] [_log()] userauth is OK
2025-12-25T23:06:22.524 [DEBUG] [Thread-20121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:06:22.524 [DEBUG] [Thread-20121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:06:22.525 [DEBUG] [Thread-20121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:06:22.525 [DEBUG] [Thread-20121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:06:22.544 [INFO] [Thread-20121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:06:22.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-25T23:06:22.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:06:23.388 [DEBUG] [Thread-20121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:06:23.389 [DEBUG] [Thread-20121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:06:23.437 [DEBUG] [Thread-20121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:06:23.437 [DEBUG] [Thread-20121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:06:23.446 [DEBUG] [Thread-20121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:06:23.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:06:23.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:06: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-25T23:06:23.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:06:23.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:06:23.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:06:23.487 [DEBUG] [Thread-20121] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:06:32.562 [DEBUG] [Thread-20123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:33.644 [DEBUG] [Thread-20124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:47.602 [DEBUG] [Thread-20125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:06:53.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:06:53.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:06:53.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:06:54.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 6, 30), 5.11, 71.54, 0.0, 12.07, 15.18, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:06:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:06:30
2025-12-25T23:06:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:06:54.532 [DEBUG] [Thread-20126] [transport.py] [_log()] starting thread (client mode): 0xb6bf5720
2025-12-25T23:06:54.533 [DEBUG] [Thread-20126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:06:54.553 [DEBUG] [Thread-20126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:06:54.553 [INFO] [Thread-20126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] client lang: <none>
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] server lang: <none>
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] kex follows: False
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:06:54.556 [DEBUG] [Thread-20126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:06:54.557 [DEBUG] [Thread-20126] [transport.py] [_log()] Compression: none
2025-12-25T23:06:54.557 [DEBUG] [Thread-20126] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:06:54.573 [DEBUG] [Thread-20126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:06:54.573 [DEBUG] [Thread-20126] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:06:54.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:06:54.574 [DEBUG] [Thread-20126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:06:54.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:06:54.576 [DEBUG] [Thread-20126] [transport.py] [_log()] userauth is OK
2025-12-25T23:06:54.576 [DEBUG] [Thread-20126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:06:54.576 [DEBUG] [Thread-20126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:06:54.576 [DEBUG] [Thread-20126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:06:54.577 [DEBUG] [Thread-20126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:06:54.600 [INFO] [Thread-20126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:06:54.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:06:55.214 [DEBUG] [Thread-20126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:06:55.214 [DEBUG] [Thread-20126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:06:55.214 [DEBUG] [Thread-20126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:06:55.255 [DEBUG] [Thread-20126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:06:55.255 [DEBUG] [Thread-20126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:06:55.259 [DEBUG] [Thread-20126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:06:55.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:06:55.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:06:55.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:06:55.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:06:55.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:06:55.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:06:55.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:06:55.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.879577 -999.00  +15.10   5.36     75  +10.80 1 1 1 1 1     0    0 4.15 14.30 ZNESW 10.8 5.4 264.0 13.4 15.6 -22.7 15.5 -22.2 15.2 -20.7 15.5 -21.6
2025-12-25T23:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:06:55.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.879577
2025-12-25T23:06:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:06:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:06:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:06:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:06:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:06:55.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:06:30', tmtdew=5.11, humidity=71.54, cloud=0.0, wind=12.07, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:06:31', seeing=1.3, atlas_timestamp='2025-12-25T21:06:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.06325000000000003, 0.11824999999999974, 0.1437500000000007, 0.09399999999999942, 0.0710000000000015, 0.12325000000000053, 0.13699999999999868, 0.11825000000000152, 0.12650000000000006, 0.051000000000000156, 0.1302500000000002, 0.06649999999999956, 0.11800000000000033, 0.09924999999999962, 0.11550000000000082, 0.12899999999999956, 0.09024999999999928, 0.08750000000000036, 0.10449999999999982, 0.09574999999999889, 0.13399999999999856, 0.18874999999999886, 0.1567500000000006, 0.11175000000000068, 0.08000000000000007, 0.11050000000000004, 0.15024999999999977, 0.1905000000000001, 0.23300000000000054, 0.20250000000000057, 0.2010000000000005, 0.15399999999999991, 0.12774999999999892], zp_timestamp='2025-12-25T21:03:00')
2025-12-25T23:06:55.288 [DEBUG] [Thread-20126] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:06:55.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-25T23:06:55.396 [DEBUG] [Thread-20129] [transport.py] [_log()] starting thread (client mode): 0xb95b34f0
2025-12-25T23:06:55.397 [DEBUG] [Thread-20129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:06:55.411 [DEBUG] [Thread-20129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:06:55.412 [INFO] [Thread-20129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] client lang: <none>
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] server lang: <none>
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] kex follows: False
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] Compression: none
2025-12-25T23:06:55.419 [DEBUG] [Thread-20129] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:06:55.476 [DEBUG] [Thread-20129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:06:55.477 [DEBUG] [Thread-20129] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:06:55.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:06:55.477 [DEBUG] [Thread-20129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:06:55.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:06:55.535 [DEBUG] [Thread-20129] [transport.py] [_log()] userauth is OK
2025-12-25T23:06:55.535 [DEBUG] [Thread-20129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:06:55.535 [DEBUG] [Thread-20129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:06:55.535 [DEBUG] [Thread-20129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:06:55.536 [DEBUG] [Thread-20129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:06:55.560 [INFO] [Thread-20129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:06:55.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:06:55.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:06:56.452 [DEBUG] [Thread-20129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:06:56.453 [DEBUG] [Thread-20129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:06:56.500 [DEBUG] [Thread-20129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:06:56.500 [DEBUG] [Thread-20129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:06:56.509 [DEBUG] [Thread-20129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:06:56.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:06:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:06:56.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:06:56.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:06:56.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:06:56.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:06:56.546 [DEBUG] [Thread-20129] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:07:02.634 [DEBUG] [Thread-20131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:06.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:06.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:17.684 [DEBUG] [Thread-20132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:07:26.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:07:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:07:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 7, 2), 5.14, 71.4, 0.0, 13.85, 15.17, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:07:27.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:07:02
2025-12-25T23:07:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:07:27.598 [DEBUG] [Thread-20133] [transport.py] [_log()] starting thread (client mode): 0xb6bf58d0
2025-12-25T23:07:27.599 [DEBUG] [Thread-20133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:07:27.614 [DEBUG] [Thread-20133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:07:27.614 [INFO] [Thread-20133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] client lang: <none>
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] server lang: <none>
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] kex follows: False
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] Compression: none
2025-12-25T23:07:27.617 [DEBUG] [Thread-20133] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:07:27.634 [DEBUG] [Thread-20133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:07:27.634 [DEBUG] [Thread-20133] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:07:27.635 [DEBUG] [Thread-20133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:07:27.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:07:27.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:07:27.635 [DEBUG] [Thread-20133] [transport.py] [_log()] userauth is OK
2025-12-25T23:07:27.635 [DEBUG] [Thread-20133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:07:27.635 [DEBUG] [Thread-20133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:07:27.635 [DEBUG] [Thread-20133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:07:27.636 [DEBUG] [Thread-20133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:07:27.645 [INFO] [Thread-20133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:07:27.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:07:28.224 [DEBUG] [Thread-20133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:07:28.224 [DEBUG] [Thread-20133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:07:28.224 [DEBUG] [Thread-20133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:07:28.266 [DEBUG] [Thread-20133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:07:28.266 [DEBUG] [Thread-20133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:07:28.268 [DEBUG] [Thread-20133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:07:28.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:07:28.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:07:28.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:07:28.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:07:28.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:07:28.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:07:28.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.879919 -999.00  +15.10   8.18     74  +10.60 1 1 1 1 1     0    0 4.29 19.09 ZNESW 11.2 8.2 233.7 12.3 15.6 -22.4 15.5 -22.2 15.2 -20.5 15.5 -21.5
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.879919
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:07:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:07:02', tmtdew=5.14, humidity=71.4, cloud=0.0, wind=13.85, 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-25T23:07:03', seeing=1.37, atlas_timestamp='2025-12-25T21:07:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:05:00')
2025-12-25T23:07:28.286 [DEBUG] [Thread-20133] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:07:28.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-25T23:07:28.373 [DEBUG] [Thread-20136] [transport.py] [_log()] starting thread (client mode): 0xb6bf7bb0
2025-12-25T23:07:28.373 [DEBUG] [Thread-20136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:07:28.389 [DEBUG] [Thread-20136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:07:28.389 [INFO] [Thread-20136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] client lang: <none>
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] server lang: <none>
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] kex follows: False
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] Compression: none
2025-12-25T23:07:28.396 [DEBUG] [Thread-20136] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:07:28.456 [DEBUG] [Thread-20136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:07:28.456 [DEBUG] [Thread-20136] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:07:28.456 [DEBUG] [Thread-20136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:07:28.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:07:28.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:07:28.513 [DEBUG] [Thread-20136] [transport.py] [_log()] userauth is OK
2025-12-25T23:07:28.513 [DEBUG] [Thread-20136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:07:28.513 [DEBUG] [Thread-20136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:07:28.513 [DEBUG] [Thread-20136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:07:28.513 [DEBUG] [Thread-20136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:07:28.527 [INFO] [Thread-20136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:07:28.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-25T23:07:28.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:07:29.377 [DEBUG] [Thread-20136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:07:29.377 [DEBUG] [Thread-20136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:07:29.424 [DEBUG] [Thread-20136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:07:29.424 [DEBUG] [Thread-20136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:07:29.432 [DEBUG] [Thread-20136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:07:29.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:07: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')
2025-12-25T23:07:29.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-25T23:07:29.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:07:29.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:07:29.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:07:29.464 [DEBUG] [Thread-20136] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:07:32.719 [DEBUG] [Thread-20138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:33.702 [DEBUG] [Thread-20139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:47.771 [DEBUG] [Thread-20140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:07:59.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:07:59.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:07:59.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-25T23:08:00.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 7, 34), 5.31, 70.3, 0.0, 12.7, 15.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:08:00.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:07:34
2025-12-25T23:08:00.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:08:00.475 [DEBUG] [Thread-20141] [transport.py] [_log()] starting thread (client mode): 0xb6bba860
2025-12-25T23:08:00.475 [DEBUG] [Thread-20141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:08:00.494 [DEBUG] [Thread-20141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:08:00.494 [INFO] [Thread-20141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] client lang: <none>
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] server lang: <none>
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] kex follows: False
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] Compression: none
2025-12-25T23:08:00.497 [DEBUG] [Thread-20141] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:08:00.514 [DEBUG] [Thread-20141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:08:00.514 [DEBUG] [Thread-20141] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:08:00.515 [DEBUG] [Thread-20141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:08:00.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:08:00.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:08:00.517 [DEBUG] [Thread-20141] [transport.py] [_log()] userauth is OK
2025-12-25T23:08:00.517 [DEBUG] [Thread-20141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:08:00.517 [DEBUG] [Thread-20141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:08:00.517 [DEBUG] [Thread-20141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:08:00.517 [DEBUG] [Thread-20141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:08:00.543 [INFO] [Thread-20141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:08:00.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:08:01.167 [DEBUG] [Thread-20141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:08:01.168 [DEBUG] [Thread-20141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:08:01.168 [DEBUG] [Thread-20141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:08:01.209 [DEBUG] [Thread-20141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:08:01.209 [DEBUG] [Thread-20141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:08:01.212 [DEBUG] [Thread-20141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:08:01.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:08:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:08:01.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:08:01.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:08:01.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:08:01.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:08:01.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:08:01.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:08:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:08:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.880272 -999.00  +15.20  10.56     74  +10.60 1 1 1 1 1     0    0 4.43 21.15 ZNESW 6.1 10.6 233.4 13.7 15.6 -22.6 15.5 -22.0 15.2 -20.4 15.5 -21.6
2025-12-25T23:08:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:08:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:08:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.880272
2025-12-25T23:08:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:08:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:08:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:08:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:08:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:08:01.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:07:34', tmtdew=5.31, humidity=70.3, cloud=0.0, wind=12.7, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:07:35', seeing=1.37, atlas_timestamp='2025-12-25T21:07:35.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:05:00')
2025-12-25T23:08:01.242 [DEBUG] [Thread-20141] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:08:01.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:08:01.348 [DEBUG] [Thread-20144] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-25T23:08:01.349 [DEBUG] [Thread-20144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:08:01.363 [DEBUG] [Thread-20144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:08:01.363 [INFO] [Thread-20144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:08:01.371 [DEBUG] [Thread-20144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] client lang: <none>
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] server lang: <none>
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] kex follows: False
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] Compression: none
2025-12-25T23:08:01.372 [DEBUG] [Thread-20144] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:08:01.429 [DEBUG] [Thread-20144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:08:01.429 [DEBUG] [Thread-20144] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:08:01.430 [DEBUG] [Thread-20144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:08:01.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:08:01.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:08:01.486 [DEBUG] [Thread-20144] [transport.py] [_log()] userauth is OK
2025-12-25T23:08:01.486 [DEBUG] [Thread-20144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:08:01.487 [DEBUG] [Thread-20144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:08:01.487 [DEBUG] [Thread-20144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:08:01.487 [DEBUG] [Thread-20144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:08:01.506 [INFO] [Thread-20144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:08:01.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-25T23:08:01.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:08:02.382 [DEBUG] [Thread-20144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:08:02.383 [DEBUG] [Thread-20144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:08:02.432 [DEBUG] [Thread-20144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:08:02.432 [DEBUG] [Thread-20144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:08:02.444 [DEBUG] [Thread-20144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:08:02.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:08: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-25T23:08:02.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-25T23:08:02.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:08:02.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:08:02.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:08:02.484 [DEBUG] [Thread-20144] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:08:02.806 [DEBUG] [Thread-20146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:08:07.133 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:08:07.134 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:08:17.856 [DEBUG] [Thread-20147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:08:32.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:08:32.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:08:32.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:08:32.893 [DEBUG] [Thread-20148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:08:33.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 8, 6), 5.38, 70.01, 0.0, 13.39, 15.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:08:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:08:06
2025-12-25T23:08:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:08:33.494 [DEBUG] [Thread-20149] [transport.py] [_log()] starting thread (client mode): 0xb6bf6440
2025-12-25T23:08:33.494 [DEBUG] [Thread-20149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:08:33.509 [DEBUG] [Thread-20149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:08:33.510 [INFO] [Thread-20149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] client lang: <none>
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] server lang: <none>
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] kex follows: False
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:08:33.513 [DEBUG] [Thread-20149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:08:33.514 [DEBUG] [Thread-20149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:08:33.514 [DEBUG] [Thread-20149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:08:33.514 [DEBUG] [Thread-20149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:08:33.514 [DEBUG] [Thread-20149] [transport.py] [_log()] Compression: none
2025-12-25T23:08:33.514 [DEBUG] [Thread-20149] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:08:33.530 [DEBUG] [Thread-20149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:08:33.531 [DEBUG] [Thread-20149] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:08:33.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:08:33.532 [DEBUG] [Thread-20149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:08:33.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:08:33.535 [DEBUG] [Thread-20149] [transport.py] [_log()] userauth is OK
2025-12-25T23:08:33.535 [DEBUG] [Thread-20149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:08:33.535 [DEBUG] [Thread-20149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:08:33.535 [DEBUG] [Thread-20149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:08:33.535 [DEBUG] [Thread-20149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:08:33.573 [INFO] [Thread-20149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:08:33.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:08:33.777 [DEBUG] [Thread-20151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:08:34.200 [DEBUG] [Thread-20149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:08:34.201 [DEBUG] [Thread-20149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:08:34.201 [DEBUG] [Thread-20149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:08:34.241 [DEBUG] [Thread-20149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:08:34.241 [DEBUG] [Thread-20149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:08:34.244 [DEBUG] [Thread-20149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:08:34.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:08:34.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:08:34.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:08:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:08:34.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:08:34.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:08:34.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:08:34.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:08:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:08:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.880619 -999.00  +15.30   8.24     73  +10.60 1 1 1 1 1     0    0 4.55 25.94 ZNESW 5.2 8.2 204.4 11.1 15.7 -22.5 15.6 -22.1 15.3 -20.5 15.5 -21.4
2025-12-25T23:08:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:08:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:08:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.880619
2025-12-25T23:08:34.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:08:34.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:08:34.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:08:34.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:08:34.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:08:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:08:06', tmtdew=5.38, humidity=70.01, cloud=0.0, wind=13.39, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:08:07', seeing=1.16, atlas_timestamp='2025-12-25T21:08:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:05:00')
2025-12-25T23:08:34.272 [DEBUG] [Thread-20149] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:08:34.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-25T23:08:34.363 [DEBUG] [Thread-20153] [transport.py] [_log()] starting thread (client mode): 0xb6bb8b20
2025-12-25T23:08:34.363 [DEBUG] [Thread-20153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:08:34.379 [DEBUG] [Thread-20153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:08:34.379 [INFO] [Thread-20153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:08:34.386 [DEBUG] [Thread-20153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:08:34.387 [DEBUG] [Thread-20153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] client lang: <none>
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] server lang: <none>
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] kex follows: False
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:08:34.388 [DEBUG] [Thread-20153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:08:34.389 [DEBUG] [Thread-20153] [transport.py] [_log()] Compression: none
2025-12-25T23:08:34.389 [DEBUG] [Thread-20153] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:08:34.446 [DEBUG] [Thread-20153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:08:34.447 [DEBUG] [Thread-20153] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:08:34.447 [DEBUG] [Thread-20153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:08:34.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:08:34.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:08:34.502 [DEBUG] [Thread-20153] [transport.py] [_log()] userauth is OK
2025-12-25T23:08:34.502 [DEBUG] [Thread-20153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:08:34.503 [DEBUG] [Thread-20153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:08:34.503 [DEBUG] [Thread-20153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:08:34.503 [DEBUG] [Thread-20153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:08:34.522 [INFO] [Thread-20153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:08:34.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-25T23:08:34.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:08:35.368 [DEBUG] [Thread-20153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:08:35.369 [DEBUG] [Thread-20153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:08:35.415 [DEBUG] [Thread-20153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:08:35.415 [DEBUG] [Thread-20153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:08:35.423 [DEBUG] [Thread-20153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:08:35.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:08: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')
2025-12-25T23:08:35.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-25T23:08:35.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:08:35.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:08:35.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:08:35.455 [DEBUG] [Thread-20153] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:08:47.919 [DEBUG] [Thread-20155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:02.957 [DEBUG] [Thread-20156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:09:05.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:09:05.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-25T23:09:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 8, 38), 5.56, 69.36, 0.0, 13.0, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:09:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:08:38
2025-12-25T23:09:06.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:09:06.473 [DEBUG] [Thread-20157] [transport.py] [_log()] starting thread (client mode): 0xb6b228f0
2025-12-25T23:09:06.473 [DEBUG] [Thread-20157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:09:06.488 [DEBUG] [Thread-20157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:09:06.488 [INFO] [Thread-20157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:09:06.490 [DEBUG] [Thread-20157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:09:06.490 [DEBUG] [Thread-20157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:09:06.490 [DEBUG] [Thread-20157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] client lang: <none>
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] server lang: <none>
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] kex follows: False
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] Compression: none
2025-12-25T23:09:06.491 [DEBUG] [Thread-20157] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:09:06.510 [DEBUG] [Thread-20157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:09:06.511 [DEBUG] [Thread-20157] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:09:06.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:09:06.511 [DEBUG] [Thread-20157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:09:06.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:09:06.514 [DEBUG] [Thread-20157] [transport.py] [_log()] userauth is OK
2025-12-25T23:09:06.514 [DEBUG] [Thread-20157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:09:06.514 [DEBUG] [Thread-20157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:09:06.514 [DEBUG] [Thread-20157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:09:06.514 [DEBUG] [Thread-20157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:09:06.532 [INFO] [Thread-20157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:09:06.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:09:07.126 [DEBUG] [Thread-20157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:09:07.126 [DEBUG] [Thread-20157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:09:07.126 [DEBUG] [Thread-20157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:09:07.167 [DEBUG] [Thread-20157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:09:07.167 [DEBUG] [Thread-20157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:09:07.170 [DEBUG] [Thread-20157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:09:07.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:09:07.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:09:07.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:09:07.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:09:07.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:09:07.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:09:07.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:09:07.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:09:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:09:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.880966 -999.00  +15.30   9.67     73  +10.60 1 1 1 1 1     0    0 4.78 31.77 ZNESW 11.1 9.7 215.8 11.4 15.7 -22.5 15.5 -22.0 15.3 -20.5 15.6 -21.5
2025-12-25T23:09:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:09:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:09:07.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.880966
2025-12-25T23:09:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:09:07.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:09:07.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:09:07.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:09:07.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:09:07.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:08:38', tmtdew=5.56, humidity=69.36, cloud=0.0, wind=13.0, 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-25T23:08:39', seeing=1.27, atlas_timestamp='2025-12-25T21:08:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:05:00')
2025-12-25T23:09:07.195 [DEBUG] [Thread-20157] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:09:07.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-25T23:09:07.293 [DEBUG] [Thread-20160] [transport.py] [_log()] starting thread (client mode): 0xb6b7fa30
2025-12-25T23:09:07.293 [DEBUG] [Thread-20160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:09:07.308 [DEBUG] [Thread-20160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:09:07.308 [INFO] [Thread-20160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:09:07.316 [DEBUG] [Thread-20160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:09:07.316 [DEBUG] [Thread-20160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:09:07.316 [DEBUG] [Thread-20160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:09:07.316 [DEBUG] [Thread-20160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:07.316 [DEBUG] [Thread-20160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:07.316 [DEBUG] [Thread-20160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] client lang: <none>
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] server lang: <none>
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] kex follows: False
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] Compression: none
2025-12-25T23:09:07.317 [DEBUG] [Thread-20160] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:09:07.335 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:07.336 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:07.375 [DEBUG] [Thread-20160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:09:07.376 [DEBUG] [Thread-20160] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:09:07.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:09:07.377 [DEBUG] [Thread-20160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:09:07.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:09:07.442 [DEBUG] [Thread-20160] [transport.py] [_log()] userauth is OK
2025-12-25T23:09:07.442 [DEBUG] [Thread-20160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:09:07.442 [DEBUG] [Thread-20160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:09:07.442 [DEBUG] [Thread-20160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:09:07.442 [DEBUG] [Thread-20160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:09:07.468 [INFO] [Thread-20160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:09:07.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:09:07.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:09:08.370 [DEBUG] [Thread-20160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:09:08.370 [DEBUG] [Thread-20160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:09:08.419 [DEBUG] [Thread-20160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:09:08.419 [DEBUG] [Thread-20160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:09:08.428 [DEBUG] [Thread-20160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:09:08.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:09:08.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-25T23:09:08.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:09:08.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:09:08.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:09:08.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:09:08.465 [DEBUG] [Thread-20160] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:09:17.993 [DEBUG] [Thread-20162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:33.040 [DEBUG] [Thread-20163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:33.834 [DEBUG] [Thread-20164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:09:38.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:09:38.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:09:38.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-25T23:09:39.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 9, 10), 5.61, 69.14, 0.0, 12.76, 15.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:09:39.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:09:10
2025-12-25T23:09:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:09:39.454 [DEBUG] [Thread-20165] [transport.py] [_log()] starting thread (client mode): 0xb6b20490
2025-12-25T23:09:39.454 [DEBUG] [Thread-20165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:09:39.475 [DEBUG] [Thread-20165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:09:39.475 [INFO] [Thread-20165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:09:39.476 [DEBUG] [Thread-20165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] client lang: <none>
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] server lang: <none>
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] kex follows: False
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:09:39.477 [DEBUG] [Thread-20165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:09:39.478 [DEBUG] [Thread-20165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:09:39.478 [DEBUG] [Thread-20165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:09:39.478 [DEBUG] [Thread-20165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:09:39.478 [DEBUG] [Thread-20165] [transport.py] [_log()] Compression: none
2025-12-25T23:09:39.478 [DEBUG] [Thread-20165] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:09:39.488 [DEBUG] [Thread-20165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:09:39.489 [DEBUG] [Thread-20165] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:09:39.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:09:39.490 [DEBUG] [Thread-20165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:09:39.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:09:39.492 [DEBUG] [Thread-20165] [transport.py] [_log()] userauth is OK
2025-12-25T23:09:39.493 [DEBUG] [Thread-20165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:09:39.493 [DEBUG] [Thread-20165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:09:39.493 [DEBUG] [Thread-20165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:09:39.493 [DEBUG] [Thread-20165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:09:39.517 [INFO] [Thread-20165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:09:39.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:09:40.150 [DEBUG] [Thread-20165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:09:40.150 [DEBUG] [Thread-20165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:09:40.150 [DEBUG] [Thread-20165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:09:40.191 [DEBUG] [Thread-20165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:09:40.191 [DEBUG] [Thread-20165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:09:40.195 [DEBUG] [Thread-20165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:09:40.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:09:40.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:09:40.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:09:40.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:09:40.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:09:40.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:09:40.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:09:40.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:09:40.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:09:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.881313 -999.00  +15.40   6.28     73  +10.60 1 1 1 1 1     0    0 5.09 41.32 ZNESW 6.7 6.3 213.0 14.4 15.7 -22.3 15.6 -21.9 15.3 -20.5 15.6 -21.4
2025-12-25T23:09:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:09:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:09:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.881313
2025-12-25T23:09:40.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:09:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:09:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:09:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:09:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:09:40.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:09:10', tmtdew=5.61, humidity=69.14, cloud=0.0, wind=12.76, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:09:11', seeing=1.22, atlas_timestamp='2025-12-25T21:09:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:05:00')
2025-12-25T23:09:40.220 [DEBUG] [Thread-20165] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:09: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-25T23:09:40.314 [DEBUG] [Thread-20168] [transport.py] [_log()] starting thread (client mode): 0xb6b03d90
2025-12-25T23:09:40.314 [DEBUG] [Thread-20168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:09:40.329 [DEBUG] [Thread-20168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:09:40.329 [INFO] [Thread-20168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] client lang: <none>
2025-12-25T23:09:40.337 [DEBUG] [Thread-20168] [transport.py] [_log()] server lang: <none>
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] kex follows: False
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] Compression: none
2025-12-25T23:09:40.338 [DEBUG] [Thread-20168] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:09:40.395 [DEBUG] [Thread-20168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:09:40.396 [DEBUG] [Thread-20168] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:09:40.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:09:40.397 [DEBUG] [Thread-20168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:09:40.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:09:40.455 [DEBUG] [Thread-20168] [transport.py] [_log()] userauth is OK
2025-12-25T23:09:40.455 [DEBUG] [Thread-20168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:09:40.456 [DEBUG] [Thread-20168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:09:40.456 [DEBUG] [Thread-20168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:09:40.456 [DEBUG] [Thread-20168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:09:40.475 [INFO] [Thread-20168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:09:40.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-25T23:09:40.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:09:41.326 [DEBUG] [Thread-20168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:09:41.326 [DEBUG] [Thread-20168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:09:41.377 [DEBUG] [Thread-20168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:09:41.378 [DEBUG] [Thread-20168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:09:41.386 [DEBUG] [Thread-20168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:09:41.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:09:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:09:41.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-25T23:09:41.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:09:41.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:09:41.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:09:41.425 [DEBUG] [Thread-20168] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:09:48.075 [DEBUG] [Thread-20170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:03.123 [DEBUG] [Thread-20171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:07.538 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:07.540 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:10:11.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:10:11.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-25T23:10:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 9, 42), 5.73, 68.53, 0.0, 13.76, 15.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:10:12.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:09:42
2025-12-25T23:10:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:10:12.414 [DEBUG] [Thread-20172] [transport.py] [_log()] starting thread (client mode): 0xb6b77a90
2025-12-25T23:10:12.414 [DEBUG] [Thread-20172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:10:12.433 [DEBUG] [Thread-20172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:10:12.434 [INFO] [Thread-20172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:10:12.435 [DEBUG] [Thread-20172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] client lang: <none>
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] server lang: <none>
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] kex follows: False
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:10:12.436 [DEBUG] [Thread-20172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:10:12.437 [DEBUG] [Thread-20172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:10:12.437 [DEBUG] [Thread-20172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:10:12.437 [DEBUG] [Thread-20172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:10:12.437 [DEBUG] [Thread-20172] [transport.py] [_log()] Compression: none
2025-12-25T23:10:12.437 [DEBUG] [Thread-20172] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:10:12.452 [DEBUG] [Thread-20172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:10:12.453 [DEBUG] [Thread-20172] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:10:12.454 [DEBUG] [Thread-20172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:10:12.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:10:12.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:10:12.456 [DEBUG] [Thread-20172] [transport.py] [_log()] userauth is OK
2025-12-25T23:10:12.456 [DEBUG] [Thread-20172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:10:12.457 [DEBUG] [Thread-20172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:10:12.457 [DEBUG] [Thread-20172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:10:12.457 [DEBUG] [Thread-20172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:10:12.484 [INFO] [Thread-20172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:10:12.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:10:13.078 [DEBUG] [Thread-20172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:10:13.078 [DEBUG] [Thread-20172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:10:13.079 [DEBUG] [Thread-20172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:10:13.119 [DEBUG] [Thread-20172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:10:13.120 [DEBUG] [Thread-20172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:10:13.123 [DEBUG] [Thread-20172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:10:13.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:10:13.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:10:13.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:10:13.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:10:13.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:10:13.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:10:13.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:10:13.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:10:13.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:10:13.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.882007 -999.00  +15.30   9.26     74  +10.70 1 1 1 1 1     0    0 5.38 50.08 ZNESW 6.5 9.3 217.1 10.4 15.7 -22.8 15.6 -22.2 15.3 -21.0 15.6 -21.7
2025-12-25T23:10:13.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:10:13.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:10:13.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.882007
2025-12-25T23:10:13.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:10:13.155 [DEBUG] [Thread-20172] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:10:13.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:10:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:10:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:10:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:10:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:09:42', tmtdew=5.73, humidity=68.53, cloud=0.0, wind=13.76, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:09:43', seeing=1.22, atlas_timestamp='2025-12-25T21:10:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:08:00')
2025-12-25T23:10:13.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:10:13.240 [DEBUG] [Thread-20174] [transport.py] [_log()] starting thread (client mode): 0xb6b753f0
2025-12-25T23:10:13.240 [DEBUG] [Thread-20174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:10:13.255 [DEBUG] [Thread-20174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:10:13.255 [INFO] [Thread-20174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:10:13.263 [DEBUG] [Thread-20174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:10:13.263 [DEBUG] [Thread-20174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] client lang: <none>
2025-12-25T23:10:13.264 [DEBUG] [Thread-20174] [transport.py] [_log()] server lang: <none>
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] kex follows: False
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] Compression: none
2025-12-25T23:10:13.265 [DEBUG] [Thread-20174] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:10:13.321 [DEBUG] [Thread-20174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:10:13.322 [DEBUG] [Thread-20174] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:10:13.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:10:13.323 [DEBUG] [Thread-20174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:10:13.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:10:13.378 [DEBUG] [Thread-20174] [transport.py] [_log()] userauth is OK
2025-12-25T23:10:13.379 [DEBUG] [Thread-20174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:10:13.379 [DEBUG] [Thread-20174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:10:13.379 [DEBUG] [Thread-20174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:10:13.379 [DEBUG] [Thread-20174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:10:13.398 [INFO] [Thread-20174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:10:13.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-25T23:10:13.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:10:14.290 [DEBUG] [Thread-20174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:10:14.290 [DEBUG] [Thread-20174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:10:14.339 [DEBUG] [Thread-20174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:10:14.339 [DEBUG] [Thread-20174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:10:14.348 [DEBUG] [Thread-20174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:10:14.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:10:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:10:14.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-25T23:10:14.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:10:14.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:10:14.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:10:14.383 [DEBUG] [Thread-20174] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:10:18.154 [DEBUG] [Thread-20176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:33.207 [DEBUG] [Thread-20177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:33.899 [DEBUG] [Thread-20178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:10:44.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:10:44.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:10:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:10:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 10, 14), 5.79, 68.24, 0.0, 13.36, 15.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:10:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:10:14
2025-12-25T23:10:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:10:45.441 [DEBUG] [Thread-20179] [transport.py] [_log()] starting thread (client mode): 0xb4105180
2025-12-25T23:10:45.442 [DEBUG] [Thread-20179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:10:45.461 [DEBUG] [Thread-20179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:10:45.461 [INFO] [Thread-20179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] client lang: <none>
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] server lang: <none>
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] kex follows: False
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:10:45.465 [DEBUG] [Thread-20179] [transport.py] [_log()] Compression: none
2025-12-25T23:10:45.466 [DEBUG] [Thread-20179] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:10:45.482 [DEBUG] [Thread-20179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:10:45.482 [DEBUG] [Thread-20179] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:10:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:10:45.482 [DEBUG] [Thread-20179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:10:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:10:45.483 [DEBUG] [Thread-20179] [transport.py] [_log()] userauth is OK
2025-12-25T23:10:45.483 [DEBUG] [Thread-20179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:10:45.483 [DEBUG] [Thread-20179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:10:45.483 [DEBUG] [Thread-20179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:10:45.483 [DEBUG] [Thread-20179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:10:45.496 [INFO] [Thread-20179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:10:45.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:10:46.134 [DEBUG] [Thread-20179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:10:46.134 [DEBUG] [Thread-20179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:10:46.135 [DEBUG] [Thread-20179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:10:46.175 [DEBUG] [Thread-20179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:10:46.176 [DEBUG] [Thread-20179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:10:46.179 [DEBUG] [Thread-20179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:10:46.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:10:46.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:10:46.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:10:46.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:10:46.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:10:46.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:10:46.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:10:46.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:10:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:10:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.882007 -999.00  +15.30   9.26     74  +10.70 1 1 1 1 1     0    0 5.38 50.08 ZNESW 6.5 9.3 217.1 10.4 15.7 -22.8 15.6 -22.2 15.3 -21.0 15.6 -21.7
2025-12-25T23:10:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:10:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:10:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.882007
2025-12-25T23:10:46.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:10:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:10:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:10:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:10:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:10:46.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:10:14', tmtdew=5.79, humidity=68.24, cloud=0.0, wind=13.36, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:10:15', seeing=1.12, atlas_timestamp='2025-12-25T21:10:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:08:00')
2025-12-25T23:10:46.205 [DEBUG] [Thread-20179] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:10:46.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-25T23:10:46.295 [DEBUG] [Thread-20182] [transport.py] [_log()] starting thread (client mode): 0xb4107cd0
2025-12-25T23:10:46.295 [DEBUG] [Thread-20182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:10:46.310 [DEBUG] [Thread-20182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:10:46.310 [INFO] [Thread-20182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:46.318 [DEBUG] [Thread-20182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] client lang: <none>
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] server lang: <none>
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] kex follows: False
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] Compression: none
2025-12-25T23:10:46.319 [DEBUG] [Thread-20182] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:10:46.377 [DEBUG] [Thread-20182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:10:46.378 [DEBUG] [Thread-20182] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:10:46.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:10:46.379 [DEBUG] [Thread-20182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:10:46.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:10:46.432 [DEBUG] [Thread-20182] [transport.py] [_log()] userauth is OK
2025-12-25T23:10:46.432 [DEBUG] [Thread-20182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:10:46.433 [DEBUG] [Thread-20182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:10:46.433 [DEBUG] [Thread-20182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:10:46.433 [DEBUG] [Thread-20182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:10:46.452 [INFO] [Thread-20182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:10:46.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-25T23:10:46.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:10:47.332 [DEBUG] [Thread-20182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:10:47.332 [DEBUG] [Thread-20182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:10:47.380 [DEBUG] [Thread-20182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:10:47.380 [DEBUG] [Thread-20182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:10:47.389 [DEBUG] [Thread-20182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:10:47.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:10:47.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-25T23:10: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') -> 00000000
2025-12-25T23:10:47.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:10:47.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:10:47.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:10:47.427 [DEBUG] [Thread-20182] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:10:48.237 [DEBUG] [Thread-20184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:03.277 [DEBUG] [Thread-20185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:07.747 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:07.748 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:07.863 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:15.699 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:11:17.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:11:17.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:11:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 10, 46), 5.78, 68.58, 0.0, 10.68, 15.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:11:18.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:10:46
2025-12-25T23:11:18.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:11:18.310 [DEBUG] [Thread-20186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:18.451 [DEBUG] [Thread-20187] [transport.py] [_log()] starting thread (client mode): 0xb4106170
2025-12-25T23:11:18.451 [DEBUG] [Thread-20187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:11:18.471 [DEBUG] [Thread-20187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:11:18.471 [INFO] [Thread-20187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] client lang: <none>
2025-12-25T23:11:18.475 [DEBUG] [Thread-20187] [transport.py] [_log()] server lang: <none>
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] kex follows: False
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] Compression: none
2025-12-25T23:11:18.476 [DEBUG] [Thread-20187] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:11:18.495 [DEBUG] [Thread-20187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:11:18.496 [DEBUG] [Thread-20187] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:11:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:11:18.497 [DEBUG] [Thread-20187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:11:18.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:11:18.541 [DEBUG] [Thread-20187] [transport.py] [_log()] userauth is OK
2025-12-25T23:11:18.541 [DEBUG] [Thread-20187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:11:18.541 [DEBUG] [Thread-20187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:11:18.541 [DEBUG] [Thread-20187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:11:18.542 [DEBUG] [Thread-20187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:11:18.573 [INFO] [Thread-20187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:11:18.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:11:19.168 [DEBUG] [Thread-20187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:11:19.168 [DEBUG] [Thread-20187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:11:19.168 [DEBUG] [Thread-20187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:11:19.210 [DEBUG] [Thread-20187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:11:19.210 [DEBUG] [Thread-20187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:11:19.212 [DEBUG] [Thread-20187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:11:19.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:11:19.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:11:19.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:11:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:11:19.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:11:19.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:11:19.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.882350 -999.00  +15.30   5.24     74  +10.70 1 1 1 1 1     0    0 5.46 52.05 ZNESW 8.4 5.2 200.6 9.4 15.7 -22.7 15.6 -22.3 15.3 -20.7 15.6 -21.9
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.882350
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:11:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:10:46', tmtdew=5.78, humidity=68.58, cloud=0.0, wind=10.68, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:10:47', seeing=1.44, atlas_timestamp='2025-12-25T21:10:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:08:00')
2025-12-25T23:11:19.229 [DEBUG] [Thread-20187] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:11:19.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-25T23:11:19.315 [DEBUG] [Thread-20190] [transport.py] [_log()] starting thread (client mode): 0xb4104d30
2025-12-25T23:11:19.315 [DEBUG] [Thread-20190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:11:19.330 [DEBUG] [Thread-20190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:11:19.330 [INFO] [Thread-20190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] client lang: <none>
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] server lang: <none>
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] kex follows: False
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] Compression: none
2025-12-25T23:11:19.338 [DEBUG] [Thread-20190] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:11:19.394 [DEBUG] [Thread-20190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:11:19.394 [DEBUG] [Thread-20190] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:11:19.394 [DEBUG] [Thread-20190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:11:19.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:11:19.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:11:19.451 [DEBUG] [Thread-20190] [transport.py] [_log()] userauth is OK
2025-12-25T23:11:19.451 [DEBUG] [Thread-20190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:11:19.451 [DEBUG] [Thread-20190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:11:19.451 [DEBUG] [Thread-20190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:11:19.451 [DEBUG] [Thread-20190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:11:19.465 [INFO] [Thread-20190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:11:19.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-25T23:11:19.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:11:19.819 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:20.293 [DEBUG] [Thread-20190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:11:20.294 [DEBUG] [Thread-20190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:11:20.344 [DEBUG] [Thread-20190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:11:20.344 [DEBUG] [Thread-20190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:11:20.352 [DEBUG] [Thread-20190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:11:20.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:11:20.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:11:20.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-25T23:11:20.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:11:20.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:11:20.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:11:20.384 [DEBUG] [Thread-20190] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:11:33.341 [DEBUG] [Thread-20192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:33.955 [DEBUG] [Thread-20193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:48.397 [DEBUG] [Thread-20194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:11:50.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:11:50.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:11:50.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:11:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 11, 19), 5.81, 68.45, 0.0, 10.73, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:11:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:11:19
2025-12-25T23:11:51.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:11:51.377 [DEBUG] [Thread-20195] [transport.py] [_log()] starting thread (client mode): 0xb957b010
2025-12-25T23:11:51.377 [DEBUG] [Thread-20195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:11:51.398 [DEBUG] [Thread-20195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:11:51.398 [INFO] [Thread-20195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:11:51.400 [DEBUG] [Thread-20195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] client lang: <none>
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] server lang: <none>
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] kex follows: False
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] Compression: none
2025-12-25T23:11:51.401 [DEBUG] [Thread-20195] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:11:51.419 [DEBUG] [Thread-20195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:11:51.419 [DEBUG] [Thread-20195] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:11:51.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:11:51.420 [DEBUG] [Thread-20195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:11:51.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:11:51.422 [DEBUG] [Thread-20195] [transport.py] [_log()] userauth is OK
2025-12-25T23:11:51.423 [DEBUG] [Thread-20195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:11:51.423 [DEBUG] [Thread-20195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:11:51.423 [DEBUG] [Thread-20195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:11:51.423 [DEBUG] [Thread-20195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:11:51.456 [INFO] [Thread-20195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:11:51.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:11:52.110 [DEBUG] [Thread-20195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:11:52.110 [DEBUG] [Thread-20195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:11:52.111 [DEBUG] [Thread-20195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:11:52.151 [DEBUG] [Thread-20195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:11:52.151 [DEBUG] [Thread-20195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:11:52.154 [DEBUG] [Thread-20195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:11:52.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:11:52.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:11:52.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:11:52.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:11:52.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:11:52.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:11:52.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.882702 -999.00  +15.30   8.38     74  +10.70 1 1 1 1 1     0    0 5.56 57.91 ZNESW 5.1 8.4 213.8 11.5 15.7 -22.7 15.6 -22.4 15.3 -20.9 15.6 -21.7
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.882702
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:11:52.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:11:52.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:11:19', tmtdew=5.81, humidity=68.45, cloud=0.0, wind=10.73, 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-25T23:11:19', seeing=1.26, atlas_timestamp='2025-12-25T21:11:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:08:00')
2025-12-25T23:11:52.171 [DEBUG] [Thread-20195] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:11: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-25T23:11:52.257 [DEBUG] [Thread-20198] [transport.py] [_log()] starting thread (client mode): 0xb9578d60
2025-12-25T23:11:52.257 [DEBUG] [Thread-20198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:11:52.272 [DEBUG] [Thread-20198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:11:52.272 [INFO] [Thread-20198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] client lang: <none>
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] server lang: <none>
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] kex follows: False
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] Compression: none
2025-12-25T23:11:52.281 [DEBUG] [Thread-20198] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:11:52.338 [DEBUG] [Thread-20198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:11:52.338 [DEBUG] [Thread-20198] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:11:52.338 [DEBUG] [Thread-20198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:11:52.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:11:52.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:11:52.395 [DEBUG] [Thread-20198] [transport.py] [_log()] userauth is OK
2025-12-25T23:11:52.395 [DEBUG] [Thread-20198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:11:52.395 [DEBUG] [Thread-20198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:11:52.395 [DEBUG] [Thread-20198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:11:52.395 [DEBUG] [Thread-20198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:11:52.409 [INFO] [Thread-20198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:11:52.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-25T23:11:52.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:11:53.263 [DEBUG] [Thread-20198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:11:53.263 [DEBUG] [Thread-20198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:11:53.310 [DEBUG] [Thread-20198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:11:53.310 [DEBUG] [Thread-20198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:11:53.318 [DEBUG] [Thread-20198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:11:53.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:11:53.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:11:53.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-25T23:11:53.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:11:53.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:11:53.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:11:53.350 [DEBUG] [Thread-20198] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:12:03.425 [DEBUG] [Thread-20200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:07.949 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:07.950 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:18.478 [DEBUG] [Thread-20201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:23.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:12:23.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:12:23.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-25T23:12:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 11, 51), 5.74, 68.56, 0.0, 11.4, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:12:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:11:51
2025-12-25T23:12:24.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:12:24.394 [DEBUG] [Thread-20202] [transport.py] [_log()] starting thread (client mode): 0xb9579390
2025-12-25T23:12:24.394 [DEBUG] [Thread-20202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:12:24.413 [DEBUG] [Thread-20202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:12:24.413 [INFO] [Thread-20202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:12:24.416 [DEBUG] [Thread-20202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:12:24.416 [DEBUG] [Thread-20202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:12:24.416 [DEBUG] [Thread-20202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:12:24.416 [DEBUG] [Thread-20202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] client lang: <none>
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] server lang: <none>
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] kex follows: False
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] Compression: none
2025-12-25T23:12:24.417 [DEBUG] [Thread-20202] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:12:24.432 [DEBUG] [Thread-20202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:12:24.433 [DEBUG] [Thread-20202] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:12:24.433 [DEBUG] [Thread-20202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:12:24.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:12:24.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:12:24.434 [DEBUG] [Thread-20202] [transport.py] [_log()] userauth is OK
2025-12-25T23:12:24.434 [DEBUG] [Thread-20202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:12:24.434 [DEBUG] [Thread-20202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:12:24.434 [DEBUG] [Thread-20202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:12:24.434 [DEBUG] [Thread-20202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:12:24.443 [INFO] [Thread-20202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:12:24.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:12:25.086 [DEBUG] [Thread-20202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:12:25.086 [DEBUG] [Thread-20202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:12:25.086 [DEBUG] [Thread-20202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:12:25.127 [DEBUG] [Thread-20202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:12:25.127 [DEBUG] [Thread-20202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:12:25.130 [DEBUG] [Thread-20202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:12:25.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:12:25.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:12:25.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:12:25.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:12:25.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:12:25.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:12:25.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.883049 -999.00  +15.20   7.01     74  +10.70 1 1 1 1 1     0    0 5.69 58.96 ZNESW 5.5 7.0 211.0 10.7 15.7 -22.7 15.6 -22.2 15.3 -21.0 15.6 -21.8
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.883049
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:12:25.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:12:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:12:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:12:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:11:51', tmtdew=5.74, humidity=68.56, cloud=0.0, wind=11.4, 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-25T23:11:51', seeing=1.27, atlas_timestamp='2025-12-25T21:11:35.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:08:00')
2025-12-25T23:12:25.149 [DEBUG] [Thread-20202] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:12:25.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-25T23:12:25.234 [DEBUG] [Thread-20205] [transport.py] [_log()] starting thread (client mode): 0xb9579ab0
2025-12-25T23:12:25.235 [DEBUG] [Thread-20205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:12:25.249 [DEBUG] [Thread-20205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:12:25.249 [INFO] [Thread-20205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] client lang: <none>
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] server lang: <none>
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] kex follows: False
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] Compression: none
2025-12-25T23:12:25.257 [DEBUG] [Thread-20205] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:12:25.313 [DEBUG] [Thread-20205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:12:25.313 [DEBUG] [Thread-20205] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:12:25.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:12:25.313 [DEBUG] [Thread-20205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:12:25.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:12:25.370 [DEBUG] [Thread-20205] [transport.py] [_log()] userauth is OK
2025-12-25T23:12:25.370 [DEBUG] [Thread-20205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:12:25.370 [DEBUG] [Thread-20205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:12:25.370 [DEBUG] [Thread-20205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:12:25.370 [DEBUG] [Thread-20205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:12:25.386 [INFO] [Thread-20205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:12:25.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-25T23:12:25.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:12:26.283 [DEBUG] [Thread-20205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:12:26.284 [DEBUG] [Thread-20205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:12:26.332 [DEBUG] [Thread-20205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:12:26.333 [DEBUG] [Thread-20205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:12:26.342 [DEBUG] [Thread-20205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:12:26.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:12:26.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-25T23:12:26.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-25T23:12:26.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:12:26.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:12:26.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:12:26.378 [DEBUG] [Thread-20205] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:12:33.516 [DEBUG] [Thread-20207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:34.020 [DEBUG] [Thread-20208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:48.561 [DEBUG] [Thread-20209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:12:56.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:12:56.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:12: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-25T23:12:57.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 12, 23), 5.75, 68.51, 0.0, 11.73, 15.48, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:12:57.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:12:23
2025-12-25T23:12:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:12:57.444 [DEBUG] [Thread-20210] [transport.py] [_log()] starting thread (client mode): 0xb957a020
2025-12-25T23:12:57.445 [DEBUG] [Thread-20210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:12:57.465 [DEBUG] [Thread-20210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:12:57.465 [INFO] [Thread-20210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:12:57.467 [DEBUG] [Thread-20210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] client lang: <none>
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] server lang: <none>
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] kex follows: False
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] Compression: none
2025-12-25T23:12:57.468 [DEBUG] [Thread-20210] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:12:57.485 [DEBUG] [Thread-20210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:12:57.485 [DEBUG] [Thread-20210] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:12:57.486 [DEBUG] [Thread-20210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:12:57.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:12:57.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:12:57.487 [DEBUG] [Thread-20210] [transport.py] [_log()] userauth is OK
2025-12-25T23:12:57.487 [DEBUG] [Thread-20210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:12:57.487 [DEBUG] [Thread-20210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:12:57.487 [DEBUG] [Thread-20210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:12:57.487 [DEBUG] [Thread-20210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:12:57.505 [INFO] [Thread-20210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:12:57.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:12:58.134 [DEBUG] [Thread-20210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:12:58.134 [DEBUG] [Thread-20210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:12:58.134 [DEBUG] [Thread-20210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:12:58.175 [DEBUG] [Thread-20210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:12:58.175 [DEBUG] [Thread-20210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:12:58.179 [DEBUG] [Thread-20210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:12:58.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:12:58.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:12:58.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:12:58.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:12:58.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:12:58.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:12:58.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.883397 -999.00  +15.20   5.08     74  +10.70 1 1 1 1 1     0    0 5.90 67.95 ZNESW 5.3 5.1 213.0 11.8 15.7 -22.7 15.6 -22.4 15.3 -20.9 15.6 -21.9
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.883397
2025-12-25T23:12:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:12:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:12:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:12:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:12:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:12:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:12:23', tmtdew=5.75, humidity=68.51, cloud=0.0, wind=11.73, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:12:55', seeing=1.18, atlas_timestamp='2025-12-25T21:12:05.501', atlas_cloud=1, atlas_rain=1, zp_data=[0.07574999999999932, 0.09725000000000072, 0.1772500000000008, 0.05999999999999872, 0.07450000000000045, 0.15174999999999983, 0.12399999999999878, 0.10375000000000156, 0.1479999999999997, 0.06750000000000078, 0.1432500000000001, 0.0730000000000004, 0.13700000000000045, 0.14724999999999966, 0.11249999999999893, 0.11999999999999922, 0.08624999999999972, 0.07649999999999935, 0.08799999999999919, 0.07674999999999876, 0.1479999999999997, 0.12824999999999775, 0.19625000000000092, 0.11075000000000124, 0.11149999999999949, 0.10050000000000026, 0.1582499999999989, 0.20800000000000018, 0.2240000000000002, 0.18200000000000038, 0.1750000000000007, 0.18200000000000038, 0.15775000000000006], zp_timestamp='2025-12-25T21:08:00')
2025-12-25T23:12:58.203 [DEBUG] [Thread-20210] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:12:58.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-25T23:12:58.299 [DEBUG] [Thread-20213] [transport.py] [_log()] starting thread (client mode): 0xb957b010
2025-12-25T23:12:58.299 [DEBUG] [Thread-20213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:12:58.318 [DEBUG] [Thread-20213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:12:58.318 [INFO] [Thread-20213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:12:58.330 [DEBUG] [Thread-20213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:12:58.330 [DEBUG] [Thread-20213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] client lang: <none>
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] server lang: <none>
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] kex follows: False
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:12:58.331 [DEBUG] [Thread-20213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:12:58.332 [DEBUG] [Thread-20213] [transport.py] [_log()] Compression: none
2025-12-25T23:12:58.332 [DEBUG] [Thread-20213] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:12:58.390 [DEBUG] [Thread-20213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:12:58.390 [DEBUG] [Thread-20213] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:12:58.391 [DEBUG] [Thread-20213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:12:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:12:58.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:12:58.446 [DEBUG] [Thread-20213] [transport.py] [_log()] userauth is OK
2025-12-25T23:12:58.446 [DEBUG] [Thread-20213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:12:58.447 [DEBUG] [Thread-20213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:12:58.447 [DEBUG] [Thread-20213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:12:58.447 [DEBUG] [Thread-20213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:12:58.466 [INFO] [Thread-20213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:12:58.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-25T23:12:58.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:12:59.316 [DEBUG] [Thread-20213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:12:59.316 [DEBUG] [Thread-20213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:12:59.364 [DEBUG] [Thread-20213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:12:59.365 [DEBUG] [Thread-20213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:12:59.373 [DEBUG] [Thread-20213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:12:59.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:12:59.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-25T23:12:59.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-25T23:12:59.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:12:59.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:12:59.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:12:59.409 [DEBUG] [Thread-20213] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:13:03.599 [DEBUG] [Thread-20215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:13:08.154 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:13:08.155 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:13:18.644 [DEBUG] [Thread-20216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:13:29.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:13:29.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:13:29.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-25T23:13:30.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 12, 55), 5.68, 68.59, 0.0, 13.48, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:13:30.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:12:55
2025-12-25T23:13:30.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:13:30.447 [DEBUG] [Thread-20217] [transport.py] [_log()] starting thread (client mode): 0xb9579f90
2025-12-25T23:13:30.447 [DEBUG] [Thread-20217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:13:30.467 [DEBUG] [Thread-20217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:13:30.467 [INFO] [Thread-20217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] client lang: <none>
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] server lang: <none>
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] kex follows: False
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:13:30.470 [DEBUG] [Thread-20217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:13:30.471 [DEBUG] [Thread-20217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:13:30.471 [DEBUG] [Thread-20217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:13:30.471 [DEBUG] [Thread-20217] [transport.py] [_log()] Compression: none
2025-12-25T23:13:30.471 [DEBUG] [Thread-20217] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:13:30.486 [DEBUG] [Thread-20217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:13:30.486 [DEBUG] [Thread-20217] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:13:30.487 [DEBUG] [Thread-20217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:13:30.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:13:30.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:13:30.488 [DEBUG] [Thread-20217] [transport.py] [_log()] userauth is OK
2025-12-25T23:13:30.489 [DEBUG] [Thread-20217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:13:30.489 [DEBUG] [Thread-20217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:13:30.489 [DEBUG] [Thread-20217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:13:30.489 [DEBUG] [Thread-20217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:13:30.524 [INFO] [Thread-20217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:13:30.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:13:31.164 [DEBUG] [Thread-20217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:13:31.164 [DEBUG] [Thread-20217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:13:31.165 [DEBUG] [Thread-20217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:13:31.205 [DEBUG] [Thread-20217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:13:31.205 [DEBUG] [Thread-20217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:13:31.209 [DEBUG] [Thread-20217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:13:31.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:13:31.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:13:31.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:13:31.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:13:31.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:13:31.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:13:31.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:13:31.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:13:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:13:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.883744 -999.00  +15.20   7.47     74  +10.70 1 1 1 1 1     0    0 6.25 74.31 ZNESW 4.6 7.5 229.1 12.5 15.7 -22.6 15.6 -22.2 15.3 -20.9 15.6 -21.8
2025-12-25T23:13:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:13:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:13:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.883744
2025-12-25T23:13:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:13:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:13:31.236 [DEBUG] [Thread-20217] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:13:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:13:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:13:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:13:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:12:55', tmtdew=5.68, humidity=68.59, cloud=0.0, wind=13.48, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:13:28', seeing=1.26, atlas_timestamp='2025-12-25T21:12:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.0782500000000006, 0.12524999999999942, 0.10050000000000026, 0.05349999999999966, 0.14825000000000088, 0.10449999999999982, 0.07375000000000043, 0.13649999999999984, 0.0710000000000015, 0.12024999999999864, 0.0754999999999999, 0.14300000000000068, 0.15124999999999922, 0.12199999999999989, 0.12599999999999945, 0.11325000000000074, 0.0990000000000002, 0.12149999999999928, 0.0962499999999995, 0.16799999999999926, 0.1457499999999996, 0.17225000000000001, 0.12374999999999936, 0.129999999999999, 0.08450000000000024, 0.1667500000000004, 0.19149999999999956, 0.2625000000000002, 0.22500000000000142, 0.20700000000000074, 0.16650000000000098, 0.15674999999999883], zp_timestamp='2025-12-25T21:12:00')
2025-12-25T23:13:31.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-25T23:13:31.336 [DEBUG] [Thread-20220] [transport.py] [_log()] starting thread (client mode): 0xb9578f40
2025-12-25T23:13:31.336 [DEBUG] [Thread-20220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:13:31.351 [DEBUG] [Thread-20220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:13:31.351 [INFO] [Thread-20220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:13:31.359 [DEBUG] [Thread-20220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] client lang: <none>
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] server lang: <none>
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] kex follows: False
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:13:31.360 [DEBUG] [Thread-20220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:13:31.361 [DEBUG] [Thread-20220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:13:31.361 [DEBUG] [Thread-20220] [transport.py] [_log()] Compression: none
2025-12-25T23:13:31.361 [DEBUG] [Thread-20220] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:13:31.421 [DEBUG] [Thread-20220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:13:31.422 [DEBUG] [Thread-20220] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:13:31.422 [DEBUG] [Thread-20220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:13:31.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:13:31.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:13:31.477 [DEBUG] [Thread-20220] [transport.py] [_log()] userauth is OK
2025-12-25T23:13:31.478 [DEBUG] [Thread-20220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:13:31.478 [DEBUG] [Thread-20220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:13:31.478 [DEBUG] [Thread-20220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:13:31.478 [DEBUG] [Thread-20220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:13:31.497 [INFO] [Thread-20220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:13:31.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:13:31.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:13:32.340 [DEBUG] [Thread-20220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:13:32.340 [DEBUG] [Thread-20220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:13:32.388 [DEBUG] [Thread-20220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:13:32.388 [DEBUG] [Thread-20220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:13:32.397 [DEBUG] [Thread-20220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:13:32.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:13:32.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-25T23:13: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') -> 00000000
2025-12-25T23:13:32.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:13:32.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:13:32.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:13:32.435 [DEBUG] [Thread-20220] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:13:33.675 [DEBUG] [Thread-20222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:13:34.075 [DEBUG] [Thread-20223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:13:48.721 [DEBUG] [Thread-20224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:02.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:14:02.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:14:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:14:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 13, 59), 5.64, 68.78, 0.0, 11.86, 15.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:14:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:13:59
2025-12-25T23:14:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:14:03.412 [DEBUG] [Thread-20225] [transport.py] [_log()] starting thread (client mode): 0xb957b130
2025-12-25T23:14:03.413 [DEBUG] [Thread-20225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:14:03.432 [DEBUG] [Thread-20225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:14:03.432 [INFO] [Thread-20225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] client lang: <none>
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] server lang: <none>
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] kex follows: False
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] Compression: none
2025-12-25T23:14:03.436 [DEBUG] [Thread-20225] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:14:03.454 [DEBUG] [Thread-20225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:14:03.455 [DEBUG] [Thread-20225] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:14:03.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:14:03.456 [DEBUG] [Thread-20225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:14:03.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:14:03.458 [DEBUG] [Thread-20225] [transport.py] [_log()] userauth is OK
2025-12-25T23:14:03.458 [DEBUG] [Thread-20225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:14:03.458 [DEBUG] [Thread-20225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:14:03.458 [DEBUG] [Thread-20225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:14:03.458 [DEBUG] [Thread-20225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:14:03.494 [INFO] [Thread-20225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:14:03.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:14:03.752 [DEBUG] [Thread-20227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:04.099 [DEBUG] [Thread-20225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:14:04.100 [DEBUG] [Thread-20225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:14:04.100 [DEBUG] [Thread-20225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:14:04.141 [DEBUG] [Thread-20225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:14:04.141 [DEBUG] [Thread-20225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:14:04.145 [DEBUG] [Thread-20225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:14:04.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:14:04.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:14:04.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:14:04.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:14:04.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:14:04.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:14:04.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:14:04.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:14:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:14:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.884438 -999.00  +15.20   5.34     74  +10.70 1 1 1 1 1     0    0 6.52 82.23 ZNESW 5.4 5.3 226.2 10.6 15.7 -22.7 15.6 -22.3 15.3 -20.9 15.6 -21.9
2025-12-25T23:14:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:14:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:14:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.884438
2025-12-25T23:14:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:14:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:14:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:14:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:14:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:14:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:13:59', tmtdew=5.64, humidity=68.78, cloud=0.0, wind=11.86, 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-25T23:14:00', seeing=1.29, atlas_timestamp='2025-12-25T21:13:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.0782500000000006, 0.12524999999999942, 0.10050000000000026, 0.05349999999999966, 0.14825000000000088, 0.10449999999999982, 0.07375000000000043, 0.13649999999999984, 0.0710000000000015, 0.12024999999999864, 0.0754999999999999, 0.14300000000000068, 0.15124999999999922, 0.12199999999999989, 0.12599999999999945, 0.11325000000000074, 0.0990000000000002, 0.12149999999999928, 0.0962499999999995, 0.16799999999999926, 0.1457499999999996, 0.17225000000000001, 0.12374999999999936, 0.129999999999999, 0.08450000000000024, 0.1667500000000004, 0.19149999999999956, 0.2625000000000002, 0.22500000000000142, 0.20700000000000074, 0.16650000000000098, 0.15674999999999883], zp_timestamp='2025-12-25T21:12:00')
2025-12-25T23:14:04.172 [DEBUG] [Thread-20225] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:14:04.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-25T23:14:04.268 [DEBUG] [Thread-20229] [transport.py] [_log()] starting thread (client mode): 0xb9578610
2025-12-25T23:14:04.268 [DEBUG] [Thread-20229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:14:04.283 [DEBUG] [Thread-20229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:14:04.283 [INFO] [Thread-20229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:14:04.290 [DEBUG] [Thread-20229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:14:04.290 [DEBUG] [Thread-20229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:14:04.290 [DEBUG] [Thread-20229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:14:04.290 [DEBUG] [Thread-20229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:04.290 [DEBUG] [Thread-20229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] client lang: <none>
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] server lang: <none>
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] kex follows: False
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] Compression: none
2025-12-25T23:14:04.291 [DEBUG] [Thread-20229] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:14:04.353 [DEBUG] [Thread-20229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:14:04.354 [DEBUG] [Thread-20229] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:14:04.354 [DEBUG] [Thread-20229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:14:04.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:14:04.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:14:04.412 [DEBUG] [Thread-20229] [transport.py] [_log()] userauth is OK
2025-12-25T23:14:04.413 [DEBUG] [Thread-20229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:14:04.413 [DEBUG] [Thread-20229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:14:04.413 [DEBUG] [Thread-20229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:14:04.413 [DEBUG] [Thread-20229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:14:04.431 [INFO] [Thread-20229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:14:04.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-25T23:14:04.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:14:05.321 [DEBUG] [Thread-20229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:14:05.322 [DEBUG] [Thread-20229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:14:05.370 [DEBUG] [Thread-20229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:14:05.370 [DEBUG] [Thread-20229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:14:05.379 [DEBUG] [Thread-20229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:14:05.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:14:05.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-25T23:14:05.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-25T23:14:05.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:14:05.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:14:05.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:14:05.415 [DEBUG] [Thread-20229] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:14:08.354 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:08.355 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:18.789 [DEBUG] [Thread-20231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:33.845 [DEBUG] [Thread-20232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:34.130 [DEBUG] [Thread-20233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:14:35.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:14:35.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:14:35.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-25T23:14:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 14, 31), 5.61, 68.89, 0.0, 10.11, 15.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:14:36.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:14:31
2025-12-25T23:14:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:14:36.436 [DEBUG] [Thread-20234] [transport.py] [_log()] starting thread (client mode): 0xb957a0e0
2025-12-25T23:14:36.437 [DEBUG] [Thread-20234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:14:36.456 [DEBUG] [Thread-20234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:14:36.457 [INFO] [Thread-20234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] client lang: <none>
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] server lang: <none>
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] kex follows: False
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] Compression: none
2025-12-25T23:14:36.460 [DEBUG] [Thread-20234] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:14:36.468 [DEBUG] [Thread-20234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:14:36.468 [DEBUG] [Thread-20234] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:14:36.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:14:36.468 [DEBUG] [Thread-20234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:14:36.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:14:36.469 [DEBUG] [Thread-20234] [transport.py] [_log()] userauth is OK
2025-12-25T23:14:36.469 [DEBUG] [Thread-20234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:14:36.469 [DEBUG] [Thread-20234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:14:36.469 [DEBUG] [Thread-20234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:14:36.469 [DEBUG] [Thread-20234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:14:36.483 [INFO] [Thread-20234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:14:36.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:14:37.095 [DEBUG] [Thread-20234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:14:37.095 [DEBUG] [Thread-20234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:14:37.096 [DEBUG] [Thread-20234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:14:37.136 [DEBUG] [Thread-20234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:14:37.137 [DEBUG] [Thread-20234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:14:37.139 [DEBUG] [Thread-20234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:14:37.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:14:37.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:14:37.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:14:37.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:14:37.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:14:37.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.884785 -999.00  +15.20   5.14     74  +10.70 1 1 1 1 1     0    0 6.19 72.55 ZNESW 6.1 5.1 254.8 12.2 15.7 -22.7 15.6 -22.2 15.3 -20.8 15.7 -21.7
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:14:37.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.884785
2025-12-25T23:14:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:14:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:14:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:14:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:14:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:14:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:14:31', tmtdew=5.61, humidity=68.89, cloud=0.0, wind=10.11, 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-25T23:14:32', seeing=0.99, atlas_timestamp='2025-12-25T21:14:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.0782500000000006, 0.12524999999999942, 0.10050000000000026, 0.05349999999999966, 0.14825000000000088, 0.10449999999999982, 0.07375000000000043, 0.13649999999999984, 0.0710000000000015, 0.12024999999999864, 0.0754999999999999, 0.14300000000000068, 0.15124999999999922, 0.12199999999999989, 0.12599999999999945, 0.11325000000000074, 0.0990000000000002, 0.12149999999999928, 0.0962499999999995, 0.16799999999999926, 0.1457499999999996, 0.17225000000000001, 0.12374999999999936, 0.129999999999999, 0.08450000000000024, 0.1667500000000004, 0.19149999999999956, 0.2625000000000002, 0.22500000000000142, 0.20700000000000074, 0.16650000000000098, 0.15674999999999883], zp_timestamp='2025-12-25T21:12:00')
2025-12-25T23:14:37.157 [DEBUG] [Thread-20234] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:14:37.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-25T23:14:37.242 [DEBUG] [Thread-20237] [transport.py] [_log()] starting thread (client mode): 0xb957a620
2025-12-25T23:14:37.242 [DEBUG] [Thread-20237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:14:37.257 [DEBUG] [Thread-20237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:14:37.257 [INFO] [Thread-20237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] client lang: <none>
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] server lang: <none>
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] kex follows: False
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] Compression: none
2025-12-25T23:14:37.265 [DEBUG] [Thread-20237] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:14:37.325 [DEBUG] [Thread-20237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:14:37.325 [DEBUG] [Thread-20237] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:14:37.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:14:37.325 [DEBUG] [Thread-20237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:14:37.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:14:37.383 [DEBUG] [Thread-20237] [transport.py] [_log()] userauth is OK
2025-12-25T23:14:37.383 [DEBUG] [Thread-20237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:14:37.383 [DEBUG] [Thread-20237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:14:37.383 [DEBUG] [Thread-20237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:14:37.383 [DEBUG] [Thread-20237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:14:37.398 [INFO] [Thread-20237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:14:37.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:14:37.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:14:38.292 [DEBUG] [Thread-20237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:14:38.292 [DEBUG] [Thread-20237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:14:38.341 [DEBUG] [Thread-20237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:14:38.341 [DEBUG] [Thread-20237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:14:38.349 [DEBUG] [Thread-20237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:14:38.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:14:38.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-25T23:14: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-25T23:14:38.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:14:38.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:14:38.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:14:38.380 [DEBUG] [Thread-20237] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:14:48.877 [DEBUG] [Thread-20239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:03.931 [DEBUG] [Thread-20240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:08.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:15:08.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:15:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:15:08.554 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:08.555 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:09.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 15, 3), 5.61, 68.89, 0.0, 11.38, 15.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:15:09.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:15:03
2025-12-25T23:15:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:15:09.366 [DEBUG] [Thread-20241] [transport.py] [_log()] starting thread (client mode): 0xb9578e20
2025-12-25T23:15:09.366 [DEBUG] [Thread-20241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:15:09.385 [DEBUG] [Thread-20241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:15:09.385 [INFO] [Thread-20241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:15:09.389 [DEBUG] [Thread-20241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:15:09.389 [DEBUG] [Thread-20241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:15:09.389 [DEBUG] [Thread-20241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] client lang: <none>
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] server lang: <none>
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] kex follows: False
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] Compression: none
2025-12-25T23:15:09.390 [DEBUG] [Thread-20241] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:15:09.404 [DEBUG] [Thread-20241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:15:09.404 [DEBUG] [Thread-20241] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:15:09.405 [DEBUG] [Thread-20241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:15:09.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:15:09.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:15:09.407 [DEBUG] [Thread-20241] [transport.py] [_log()] userauth is OK
2025-12-25T23:15:09.407 [DEBUG] [Thread-20241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:15:09.407 [DEBUG] [Thread-20241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:15:09.407 [DEBUG] [Thread-20241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:15:09.407 [DEBUG] [Thread-20241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:15:09.443 [INFO] [Thread-20241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:15:09.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:15:11.105 [DEBUG] [Thread-20241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:15:11.105 [DEBUG] [Thread-20241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:15:11.105 [DEBUG] [Thread-20241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:15:11.146 [DEBUG] [Thread-20241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:15:11.147 [DEBUG] [Thread-20241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:15:11.149 [DEBUG] [Thread-20241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:15:11.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:15:11.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:15:11.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:15:11.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:15:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:15:11.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:15:11.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:15:11.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.885133 -999.00  +15.20   7.06     74  +10.70 1 1 1 1 1     0    0 6.29 74.92 ZNESW 5.8 7.1 229.1 11.5 15.7 -22.6 15.6 -22.2 15.3 -20.8 15.6 -21.6
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.885133
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:15:11.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:15:11.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:15:03', tmtdew=5.61, humidity=68.89, cloud=0.0, wind=11.38, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:15:04', seeing=1.11, atlas_timestamp='2025-12-25T21:14:35.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.0782500000000006, 0.12524999999999942, 0.10050000000000026, 0.05349999999999966, 0.14825000000000088, 0.10449999999999982, 0.07375000000000043, 0.13649999999999984, 0.0710000000000015, 0.12024999999999864, 0.0754999999999999, 0.14300000000000068, 0.15124999999999922, 0.12199999999999989, 0.12599999999999945, 0.11325000000000074, 0.0990000000000002, 0.12149999999999928, 0.0962499999999995, 0.16799999999999926, 0.1457499999999996, 0.17225000000000001, 0.12374999999999936, 0.129999999999999, 0.08450000000000024, 0.1667500000000004, 0.19149999999999956, 0.2625000000000002, 0.22500000000000142, 0.20700000000000074, 0.16650000000000098, 0.15674999999999883], zp_timestamp='2025-12-25T21:12:00')
2025-12-25T23:15:11.173 [DEBUG] [Thread-20241] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:15:11.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-25T23:15:11.267 [DEBUG] [Thread-20244] [transport.py] [_log()] starting thread (client mode): 0xb9578e80
2025-12-25T23:15:11.267 [DEBUG] [Thread-20244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:15:11.282 [DEBUG] [Thread-20244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:15:11.282 [INFO] [Thread-20244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:15:11.289 [DEBUG] [Thread-20244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:15:11.290 [DEBUG] [Thread-20244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] client lang: <none>
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] server lang: <none>
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] kex follows: False
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:15:11.291 [DEBUG] [Thread-20244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:15:11.292 [DEBUG] [Thread-20244] [transport.py] [_log()] Compression: none
2025-12-25T23:15:11.292 [DEBUG] [Thread-20244] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:15:11.348 [DEBUG] [Thread-20244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:15:11.349 [DEBUG] [Thread-20244] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:15:11.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:15:11.350 [DEBUG] [Thread-20244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:15:11.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:15:11.405 [DEBUG] [Thread-20244] [transport.py] [_log()] userauth is OK
2025-12-25T23:15:11.405 [DEBUG] [Thread-20244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:15:11.405 [DEBUG] [Thread-20244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:15:11.405 [DEBUG] [Thread-20244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:15:11.405 [DEBUG] [Thread-20244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:15:11.426 [INFO] [Thread-20244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:15:11.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-25T23:15:11.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:15:12.255 [DEBUG] [Thread-20244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:15:12.255 [DEBUG] [Thread-20244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:15:12.303 [DEBUG] [Thread-20244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:15:12.303 [DEBUG] [Thread-20244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:15:12.313 [DEBUG] [Thread-20244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:15:12.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:15:12.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-25T23:15:12.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:15:12.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:15:12.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:15:12.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:15:12.352 [DEBUG] [Thread-20244] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:15:18.961 [DEBUG] [Thread-20246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:34.000 [DEBUG] [Thread-20247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:34.197 [DEBUG] [Thread-20248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:15:42.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:15:42.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:15:42.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-25T23:15:43.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 15, 35), 5.53, 69.53, 0.0, 13.2, 15.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:15:43.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:15:35
2025-12-25T23:15:43.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:15:43.333 [DEBUG] [Thread-20249] [transport.py] [_log()] starting thread (client mode): 0xb95791e0
2025-12-25T23:15:43.333 [DEBUG] [Thread-20249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:15:43.354 [DEBUG] [Thread-20249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:15:43.354 [INFO] [Thread-20249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:15:43.357 [DEBUG] [Thread-20249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:15:43.357 [DEBUG] [Thread-20249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] client lang: <none>
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] server lang: <none>
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] kex follows: False
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:15:43.358 [DEBUG] [Thread-20249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:15:43.359 [DEBUG] [Thread-20249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:15:43.359 [DEBUG] [Thread-20249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:15:43.359 [DEBUG] [Thread-20249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:15:43.359 [DEBUG] [Thread-20249] [transport.py] [_log()] Compression: none
2025-12-25T23:15:43.359 [DEBUG] [Thread-20249] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:15:43.378 [DEBUG] [Thread-20249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:15:43.378 [DEBUG] [Thread-20249] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:15:43.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:15:43.379 [DEBUG] [Thread-20249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:15:43.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:15:43.382 [DEBUG] [Thread-20249] [transport.py] [_log()] userauth is OK
2025-12-25T23:15:43.382 [DEBUG] [Thread-20249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:15:43.382 [DEBUG] [Thread-20249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:15:43.382 [DEBUG] [Thread-20249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:15:43.382 [DEBUG] [Thread-20249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:15:43.400 [INFO] [Thread-20249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:15:43.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:15:43.981 [DEBUG] [Thread-20249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:15:43.981 [DEBUG] [Thread-20249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:15:43.982 [DEBUG] [Thread-20249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:15:44.022 [DEBUG] [Thread-20249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:15:44.022 [DEBUG] [Thread-20249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:15:44.025 [DEBUG] [Thread-20249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:15:44.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:15:44.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:15:44.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:15:44.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:15:44.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:15:44.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:15:44.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:15:44.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:15:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:15:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.885480 -999.00  +15.30   6.82     74  +10.70 1 1 1 1 1     0    0 6.04 67.16 ZNESW 8.1 6.8 204.0 9.2 15.7 -22.7 15.6 -22.3 15.3 -20.8 15.6 -21.7
2025-12-25T23:15:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:15:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:15:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.885480
2025-12-25T23:15:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:15:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:15:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:15:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:15:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:15:44.050 [DEBUG] [Thread-20249] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:15:44.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:15:35', tmtdew=5.53, humidity=69.53, cloud=0.0, wind=13.2, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:15:36', seeing=1.19, atlas_timestamp='2025-12-25T21:15:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.06874999999999964, 0.0782500000000006, 0.12524999999999942, 0.10050000000000026, 0.05349999999999966, 0.14825000000000088, 0.10449999999999982, 0.07375000000000043, 0.13649999999999984, 0.0710000000000015, 0.12024999999999864, 0.0754999999999999, 0.14300000000000068, 0.15124999999999922, 0.12199999999999989, 0.12599999999999945, 0.11325000000000074, 0.0990000000000002, 0.12149999999999928, 0.0962499999999995, 0.16799999999999926, 0.1457499999999996, 0.17225000000000001, 0.12374999999999936, 0.129999999999999, 0.08450000000000024, 0.1667500000000004, 0.19149999999999956, 0.2625000000000002, 0.22500000000000142, 0.20700000000000074, 0.16650000000000098, 0.15674999999999883], zp_timestamp='2025-12-25T21:12:00')
2025-12-25T23:15:44.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-25T23:15:44.145 [DEBUG] [Thread-20252] [transport.py] [_log()] starting thread (client mode): 0xb957aa10
2025-12-25T23:15:44.145 [DEBUG] [Thread-20252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:15:44.164 [DEBUG] [Thread-20252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:15:44.164 [INFO] [Thread-20252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:15:44.173 [DEBUG] [Thread-20252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:15:44.174 [DEBUG] [Thread-20252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] client lang: <none>
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] server lang: <none>
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] kex follows: False
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:15:44.175 [DEBUG] [Thread-20252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:15:44.176 [DEBUG] [Thread-20252] [transport.py] [_log()] Compression: none
2025-12-25T23:15:44.176 [DEBUG] [Thread-20252] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:15:44.233 [DEBUG] [Thread-20252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:15:44.233 [DEBUG] [Thread-20252] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:15:44.233 [DEBUG] [Thread-20252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:15:44.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:15:44.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:15:44.292 [DEBUG] [Thread-20252] [transport.py] [_log()] userauth is OK
2025-12-25T23:15:44.292 [DEBUG] [Thread-20252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:15:44.292 [DEBUG] [Thread-20252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:15:44.292 [DEBUG] [Thread-20252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:15:44.292 [DEBUG] [Thread-20252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:15:44.314 [INFO] [Thread-20252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:15:44.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-25T23:15:44.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:15:45.239 [DEBUG] [Thread-20252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:15:45.239 [DEBUG] [Thread-20252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:15:45.287 [DEBUG] [Thread-20252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:15:45.288 [DEBUG] [Thread-20252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:15:45.297 [DEBUG] [Thread-20252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:15:45.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:15:45.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-25T23:15:45.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-25T23:15:45.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:15:45.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:15:45.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:15:45.335 [DEBUG] [Thread-20252] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:15:49.033 [DEBUG] [Thread-20254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:04.085 [DEBUG] [Thread-20255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:08.758 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:08.759 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:16:15.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:16:15.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-25T23:16:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 16, 7), 5.53, 69.54, 0.0, 12.37, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:16:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:16:07
2025-12-25T23:16:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:16:16.322 [DEBUG] [Thread-20256] [transport.py] [_log()] starting thread (client mode): 0xb9579180
2025-12-25T23:16:16.322 [DEBUG] [Thread-20256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:16:16.342 [DEBUG] [Thread-20256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:16:16.342 [INFO] [Thread-20256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:16:16.345 [DEBUG] [Thread-20256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] client lang: <none>
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] server lang: <none>
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] kex follows: False
2025-12-25T23:16:16.346 [DEBUG] [Thread-20256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:16:16.347 [DEBUG] [Thread-20256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:16:16.347 [DEBUG] [Thread-20256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:16:16.347 [DEBUG] [Thread-20256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:16:16.347 [DEBUG] [Thread-20256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:16:16.347 [DEBUG] [Thread-20256] [transport.py] [_log()] Compression: none
2025-12-25T23:16:16.347 [DEBUG] [Thread-20256] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:16:16.364 [DEBUG] [Thread-20256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:16:16.365 [DEBUG] [Thread-20256] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:16:16.365 [DEBUG] [Thread-20256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:16:16.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:16:16.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:16:16.367 [DEBUG] [Thread-20256] [transport.py] [_log()] userauth is OK
2025-12-25T23:16:16.367 [DEBUG] [Thread-20256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:16:16.368 [DEBUG] [Thread-20256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:16:16.368 [DEBUG] [Thread-20256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:16:16.368 [DEBUG] [Thread-20256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:16:16.384 [INFO] [Thread-20256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:16:16.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:16:17.043 [DEBUG] [Thread-20256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:16:17.043 [DEBUG] [Thread-20256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:16:17.044 [DEBUG] [Thread-20256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:16:17.084 [DEBUG] [Thread-20256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:16:17.084 [DEBUG] [Thread-20256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:16:17.088 [DEBUG] [Thread-20256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:16:17.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:16:17.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:16:17.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:16:17.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:16:17.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:16:17.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:16:17.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:16:17.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:16:17.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:16:17.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.885827 -999.00  +15.30   3.65     74  +10.70 1 1 1 1 1     0    0 6.12 68.18 ZNESW 6.9 3.6 221.1 12.0 15.7 -22.6 15.6 -22.2 15.3 -20.7 15.6 -21.7
2025-12-25T23:16:17.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:16:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:16:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.885827
2025-12-25T23:16:17.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:16:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:16:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:16:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:16:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:16:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:16:07', tmtdew=5.53, humidity=69.54, cloud=0.0, wind=12.37, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:16:08', seeing=1.19, atlas_timestamp='2025-12-25T21:15:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:14:00')
2025-12-25T23:16:17.117 [DEBUG] [Thread-20256] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:16:17.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:16:17.211 [DEBUG] [Thread-20259] [transport.py] [_log()] starting thread (client mode): 0xb9579ed0
2025-12-25T23:16:17.211 [DEBUG] [Thread-20259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:16:17.225 [DEBUG] [Thread-20259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:16:17.225 [INFO] [Thread-20259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] client lang: <none>
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] server lang: <none>
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] kex follows: False
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:16:17.233 [DEBUG] [Thread-20259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:16:17.234 [DEBUG] [Thread-20259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:16:17.234 [DEBUG] [Thread-20259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:16:17.234 [DEBUG] [Thread-20259] [transport.py] [_log()] Compression: none
2025-12-25T23:16:17.234 [DEBUG] [Thread-20259] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:16:17.291 [DEBUG] [Thread-20259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:16:17.292 [DEBUG] [Thread-20259] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:16:17.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:16:17.292 [DEBUG] [Thread-20259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:16:17.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:16:17.347 [DEBUG] [Thread-20259] [transport.py] [_log()] userauth is OK
2025-12-25T23:16:17.348 [DEBUG] [Thread-20259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:16:17.348 [DEBUG] [Thread-20259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:16:17.348 [DEBUG] [Thread-20259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:16:17.348 [DEBUG] [Thread-20259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:16:17.367 [INFO] [Thread-20259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:16:17.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:16:17.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:16:18.195 [DEBUG] [Thread-20259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:16:18.195 [DEBUG] [Thread-20259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:16:18.243 [DEBUG] [Thread-20259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:16:18.243 [DEBUG] [Thread-20259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:16:18.253 [DEBUG] [Thread-20259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:16:18.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:16:18.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-25T23:16:18.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:16:18.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:16:18.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:16:18.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:16:18.291 [DEBUG] [Thread-20259] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:16:19.123 [DEBUG] [Thread-20261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:34.171 [DEBUG] [Thread-20262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:34.254 [DEBUG] [Thread-20263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:16:48.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:16:48.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:16:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 16, 39), 5.64, 68.98, 0.0, 13.45, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:16:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:16:39
2025-12-25T23:16:49.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:16:49.198 [DEBUG] [Thread-20264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:16:49.291 [DEBUG] [Thread-20265] [transport.py] [_log()] starting thread (client mode): 0xb4104250
2025-12-25T23:16:49.292 [DEBUG] [Thread-20265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:16:49.311 [DEBUG] [Thread-20265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:16:49.312 [INFO] [Thread-20265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] client lang: <none>
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] server lang: <none>
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] kex follows: False
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] Compression: none
2025-12-25T23:16:49.315 [DEBUG] [Thread-20265] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:16:49.331 [DEBUG] [Thread-20265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:16:49.332 [DEBUG] [Thread-20265] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:16:49.332 [DEBUG] [Thread-20265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:16:49.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:16:49.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:16:49.334 [DEBUG] [Thread-20265] [transport.py] [_log()] userauth is OK
2025-12-25T23:16:49.334 [DEBUG] [Thread-20265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:16:49.334 [DEBUG] [Thread-20265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:16:49.335 [DEBUG] [Thread-20265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:16:49.335 [DEBUG] [Thread-20265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:16:49.358 [INFO] [Thread-20265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:16:49.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:16:49.981 [DEBUG] [Thread-20265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:16:49.981 [DEBUG] [Thread-20265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:16:49.982 [DEBUG] [Thread-20265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:16:50.022 [DEBUG] [Thread-20265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:16:50.022 [DEBUG] [Thread-20265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:16:50.024 [DEBUG] [Thread-20265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:16:50.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:16:50.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:16:50.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:16:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:16:50.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:16:50.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:16:50.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.886174 -999.00  +15.30   7.70     73  +10.50 1 1 1 1 1     0    0 6.22 71.97 ZNESW 7.8 7.7 210.8 13.6 15.7 -22.4 15.6 -22.1 15.3 -20.7 15.6 -21.5
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.886174
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:16:50.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:16:39', tmtdew=5.64, humidity=68.98, cloud=0.0, wind=13.45, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:16:40', seeing=1.15, atlas_timestamp='2025-12-25T21:16:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:14:00')
2025-12-25T23:16:50.043 [DEBUG] [Thread-20265] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:16:50.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-25T23:16:50.123 [DEBUG] [Thread-20268] [transport.py] [_log()] starting thread (client mode): 0xb4105990
2025-12-25T23:16:50.123 [DEBUG] [Thread-20268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:16:50.138 [DEBUG] [Thread-20268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:16:50.138 [INFO] [Thread-20268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:16:50.145 [DEBUG] [Thread-20268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:16:50.145 [DEBUG] [Thread-20268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] client lang: <none>
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] server lang: <none>
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] kex follows: False
2025-12-25T23:16:50.146 [DEBUG] [Thread-20268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:16:50.147 [DEBUG] [Thread-20268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:16:50.147 [DEBUG] [Thread-20268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:16:50.147 [DEBUG] [Thread-20268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:16:50.147 [DEBUG] [Thread-20268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:16:50.147 [DEBUG] [Thread-20268] [transport.py] [_log()] Compression: none
2025-12-25T23:16:50.147 [DEBUG] [Thread-20268] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:16:50.207 [DEBUG] [Thread-20268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:16:50.208 [DEBUG] [Thread-20268] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:16:50.209 [DEBUG] [Thread-20268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:16:50.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:16:50.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:16:50.263 [DEBUG] [Thread-20268] [transport.py] [_log()] userauth is OK
2025-12-25T23:16:50.263 [DEBUG] [Thread-20268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:16:50.264 [DEBUG] [Thread-20268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:16:50.264 [DEBUG] [Thread-20268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:16:50.264 [DEBUG] [Thread-20268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:16:50.283 [INFO] [Thread-20268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:16:50.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:16:50.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:16:51.143 [DEBUG] [Thread-20268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:16:51.143 [DEBUG] [Thread-20268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:16:51.191 [DEBUG] [Thread-20268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:16:51.191 [DEBUG] [Thread-20268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:16:51.200 [DEBUG] [Thread-20268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:16:51.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:16:51.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-25T23:16:51.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:16:51.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:16:51.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:16:51.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:16:51.238 [DEBUG] [Thread-20268] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:17:04.230 [DEBUG] [Thread-20270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:08.961 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:08.962 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:19.279 [DEBUG] [Thread-20271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:21.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:17:21.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:17:21.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-25T23:17:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 17, 12), 5.65, 68.94, 0.0, 13.3, 15.42, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:17:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:17:12
2025-12-25T23:17:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:17:22.245 [DEBUG] [Thread-20272] [transport.py] [_log()] starting thread (client mode): 0xb9578550
2025-12-25T23:17:22.245 [DEBUG] [Thread-20272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:17:22.266 [DEBUG] [Thread-20272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:17:22.266 [INFO] [Thread-20272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:22.269 [DEBUG] [Thread-20272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] client lang: <none>
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] server lang: <none>
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] kex follows: False
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] Compression: none
2025-12-25T23:17:22.270 [DEBUG] [Thread-20272] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:17:22.285 [DEBUG] [Thread-20272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:17:22.285 [DEBUG] [Thread-20272] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:17:22.285 [DEBUG] [Thread-20272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:17:22.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:17:22.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:17:22.286 [DEBUG] [Thread-20272] [transport.py] [_log()] userauth is OK
2025-12-25T23:17:22.286 [DEBUG] [Thread-20272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:17:22.286 [DEBUG] [Thread-20272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:17:22.286 [DEBUG] [Thread-20272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:17:22.286 [DEBUG] [Thread-20272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:17:22.301 [INFO] [Thread-20272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:17:22.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:17:22.935 [DEBUG] [Thread-20272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:17:22.936 [DEBUG] [Thread-20272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:17:22.945 [DEBUG] [Thread-20272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:17:22.978 [DEBUG] [Thread-20272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:17:22.978 [DEBUG] [Thread-20272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:17:22.981 [DEBUG] [Thread-20272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:17:22.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:17:22.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:17:22.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:17:22.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:17:23.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:17:23.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:17:23.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:17:23.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:17:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:17:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.886869 -999.00  +15.40   4.98     72  +10.40 1 1 1 1 1     0    0 6.65 83.68 ZNESW 5.5 5.0 204.5 10.5 15.8 -22.5 15.6 -22.2 15.4 -20.7 15.7 -21.6
2025-12-25T23:17:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:17:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:17:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.886869
2025-12-25T23:17:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:17:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:17:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:17:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:17:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:17:23.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:17:12', tmtdew=5.65, humidity=68.94, cloud=0.0, wind=13.3, 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-25T23:17:12', seeing=1.15, atlas_timestamp='2025-12-25T21:17:05.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:14:00')
2025-12-25T23:17:23.008 [DEBUG] [Thread-20272] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:17:23.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-25T23:17:23.100 [DEBUG] [Thread-20275] [transport.py] [_log()] starting thread (client mode): 0xb957b130
2025-12-25T23:17:23.100 [DEBUG] [Thread-20275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:17:23.115 [DEBUG] [Thread-20275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:17:23.115 [INFO] [Thread-20275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:17:23.122 [DEBUG] [Thread-20275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:17:23.123 [DEBUG] [Thread-20275] [transport.py] [_log()] client lang: <none>
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] server lang: <none>
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] kex follows: False
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:17:23.124 [DEBUG] [Thread-20275] [transport.py] [_log()] Compression: none
2025-12-25T23:17:23.125 [DEBUG] [Thread-20275] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:17:23.186 [DEBUG] [Thread-20275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:17:23.186 [DEBUG] [Thread-20275] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:17:23.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:17:23.187 [DEBUG] [Thread-20275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:17:23.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:17:23.244 [DEBUG] [Thread-20275] [transport.py] [_log()] userauth is OK
2025-12-25T23:17:23.244 [DEBUG] [Thread-20275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:17:23.244 [DEBUG] [Thread-20275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:17:23.245 [DEBUG] [Thread-20275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:17:23.245 [DEBUG] [Thread-20275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:17:23.264 [INFO] [Thread-20275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:17:23.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-25T23:17:23.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:17:24.126 [DEBUG] [Thread-20275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:17:24.126 [DEBUG] [Thread-20275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:17:24.175 [DEBUG] [Thread-20275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:17:24.175 [DEBUG] [Thread-20275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:17:24.185 [DEBUG] [Thread-20275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:17:24.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:17:24.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-25T23:17:24.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:17:24.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:17:24.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:17:24.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:17:24.220 [DEBUG] [Thread-20275] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:17:34.312 [DEBUG] [Thread-20277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:34.329 [DEBUG] [Thread-20278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:49.354 [DEBUG] [Thread-20279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:17:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:17:54.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:17:54.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-25T23:17:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 17, 44), 5.77, 68.34, 0.0, 13.82, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:17:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:17:44
2025-12-25T23:17:55.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:17:55.250 [DEBUG] [Thread-20280] [transport.py] [_log()] starting thread (client mode): 0xb4106080
2025-12-25T23:17:55.250 [DEBUG] [Thread-20280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:17:55.271 [DEBUG] [Thread-20280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:17:55.271 [INFO] [Thread-20280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] client lang: <none>
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] server lang: <none>
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] kex follows: False
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] Compression: none
2025-12-25T23:17:55.275 [DEBUG] [Thread-20280] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:17:55.290 [DEBUG] [Thread-20280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:17:55.290 [DEBUG] [Thread-20280] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:17:55.290 [DEBUG] [Thread-20280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:17:55.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:17:55.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:17:55.291 [DEBUG] [Thread-20280] [transport.py] [_log()] userauth is OK
2025-12-25T23:17:55.291 [DEBUG] [Thread-20280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:17:55.291 [DEBUG] [Thread-20280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:17:55.291 [DEBUG] [Thread-20280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:17:55.291 [DEBUG] [Thread-20280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:17:55.306 [INFO] [Thread-20280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:17:55.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:17:55.925 [DEBUG] [Thread-20280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:17:55.926 [DEBUG] [Thread-20280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:17:55.927 [DEBUG] [Thread-20280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:17:55.967 [DEBUG] [Thread-20280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:17:55.967 [DEBUG] [Thread-20280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:17:55.970 [DEBUG] [Thread-20280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:17:55.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:17:55.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:17:55.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:17:55.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:17:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:17:55.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:17:55.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:17:55.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:17:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:17:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.887216 -999.00  +15.40   5.59     72  +10.50 1 1 1 1 1     0    0 6.81 90.12 ZNESW 4.5 5.6 190.1 10.6 15.7 -22.7 15.6 -22.2 15.4 -20.6 15.7 -21.8
2025-12-25T23:17:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:17:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:17:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.887216
2025-12-25T23:17:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:17:55.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:17:44', tmtdew=5.77, humidity=68.34, cloud=0.0, wind=13.82, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:17:44', seeing=1.04, atlas_timestamp='2025-12-25T21:17:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:14:00')
2025-12-25T23:17:55.992 [DEBUG] [Thread-20280] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:17:56.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-25T23:17:56.088 [DEBUG] [Thread-20283] [transport.py] [_log()] starting thread (client mode): 0xb4106920
2025-12-25T23:17:56.088 [DEBUG] [Thread-20283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:17:56.104 [DEBUG] [Thread-20283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:17:56.104 [INFO] [Thread-20283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] client lang: <none>
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] server lang: <none>
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] kex follows: False
2025-12-25T23:17:56.112 [DEBUG] [Thread-20283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:17:56.113 [DEBUG] [Thread-20283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:17:56.113 [DEBUG] [Thread-20283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:17:56.113 [DEBUG] [Thread-20283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:17:56.113 [DEBUG] [Thread-20283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:17:56.113 [DEBUG] [Thread-20283] [transport.py] [_log()] Compression: none
2025-12-25T23:17:56.113 [DEBUG] [Thread-20283] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:17:56.170 [DEBUG] [Thread-20283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:17:56.171 [DEBUG] [Thread-20283] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:17:56.171 [DEBUG] [Thread-20283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:17:56.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:17:56.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:17:56.226 [DEBUG] [Thread-20283] [transport.py] [_log()] userauth is OK
2025-12-25T23:17:56.226 [DEBUG] [Thread-20283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:17:56.227 [DEBUG] [Thread-20283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:17:56.227 [DEBUG] [Thread-20283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:17:56.227 [DEBUG] [Thread-20283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:17:56.246 [INFO] [Thread-20283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:17:56.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-25T23:17:56.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:17:57.082 [DEBUG] [Thread-20283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:17:57.082 [DEBUG] [Thread-20283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:17:57.131 [DEBUG] [Thread-20283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:17:57.132 [DEBUG] [Thread-20283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:17:57.141 [DEBUG] [Thread-20283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:17:57.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:17:57.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-25T23:17:57.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-25T23:17:57.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:17:57.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:17:57.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:17:57.179 [DEBUG] [Thread-20283] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:18:01.009 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:04.388 [DEBUG] [Thread-20285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:09.161 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:09.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:19.434 [DEBUG] [Thread-20286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:18:27.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:18:27.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-25T23:18:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 18, 16), 5.85, 68.0, 0.0, 13.53, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:18:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:18:16
2025-12-25T23:18:28.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:18:28.191 [DEBUG] [Thread-20287] [transport.py] [_log()] starting thread (client mode): 0xb4105b10
2025-12-25T23:18:28.191 [DEBUG] [Thread-20287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:18:28.210 [DEBUG] [Thread-20287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:18:28.210 [INFO] [Thread-20287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:18:28.213 [DEBUG] [Thread-20287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] client lang: <none>
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] server lang: <none>
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] kex follows: False
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:18:28.214 [DEBUG] [Thread-20287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:18:28.215 [DEBUG] [Thread-20287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:18:28.215 [DEBUG] [Thread-20287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:18:28.215 [DEBUG] [Thread-20287] [transport.py] [_log()] Compression: none
2025-12-25T23:18:28.215 [DEBUG] [Thread-20287] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:18:28.230 [DEBUG] [Thread-20287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:18:28.230 [DEBUG] [Thread-20287] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:18:28.231 [DEBUG] [Thread-20287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:18:28.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:18:28.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:18:28.233 [DEBUG] [Thread-20287] [transport.py] [_log()] userauth is OK
2025-12-25T23:18:28.233 [DEBUG] [Thread-20287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:18:28.233 [DEBUG] [Thread-20287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:18:28.233 [DEBUG] [Thread-20287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:18:28.233 [DEBUG] [Thread-20287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:18:28.255 [INFO] [Thread-20287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:18:28.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:18:28.885 [DEBUG] [Thread-20287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:18:28.885 [DEBUG] [Thread-20287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:18:28.885 [DEBUG] [Thread-20287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:18:28.927 [DEBUG] [Thread-20287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:18:28.927 [DEBUG] [Thread-20287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:18:28.928 [DEBUG] [Thread-20287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:18:28.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:18:28.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:18:28.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:18:28.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:18:28.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:18:28.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:18:28.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.887563 -999.00  +15.40   4.59     72  +10.50 1 1 1 1 1     0    0 6.66 81.41 ZNESW 7.0 4.6 215.1 9.8 15.7 -22.6 15.6 -22.3 15.4 -20.7 15.7 -21.6
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.887563
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:18:28.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:18:16', tmtdew=5.85, humidity=68.0, cloud=0.0, wind=13.53, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:18:16', seeing=1.0, atlas_timestamp='2025-12-25T21:18:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:14:00')
2025-12-25T23:18:28.946 [DEBUG] [Thread-20287] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:18:29.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-25T23:18:29.032 [DEBUG] [Thread-20290] [transport.py] [_log()] starting thread (client mode): 0xb4104940
2025-12-25T23:18:29.032 [DEBUG] [Thread-20290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:18:29.047 [DEBUG] [Thread-20290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:18:29.047 [INFO] [Thread-20290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] client lang: <none>
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] server lang: <none>
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] kex follows: False
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] Compression: none
2025-12-25T23:18:29.055 [DEBUG] [Thread-20290] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:18:29.112 [DEBUG] [Thread-20290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:18:29.113 [DEBUG] [Thread-20290] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:18:29.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:18:29.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:18:29.113 [DEBUG] [Thread-20290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:18:29.170 [DEBUG] [Thread-20290] [transport.py] [_log()] userauth is OK
2025-12-25T23:18:29.170 [DEBUG] [Thread-20290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:18:29.170 [DEBUG] [Thread-20290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:18:29.170 [DEBUG] [Thread-20290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:18:29.170 [DEBUG] [Thread-20290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:18:29.184 [INFO] [Thread-20290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:18:29.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-25T23:18:29.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:18:30.052 [DEBUG] [Thread-20290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:18:30.052 [DEBUG] [Thread-20290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:18:30.101 [DEBUG] [Thread-20290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:18:30.101 [DEBUG] [Thread-20290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:18:30.109 [DEBUG] [Thread-20290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:18:30.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:18:30.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-25T23:18:30.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:18:30.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:18:30.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:18:30.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:18:30.142 [DEBUG] [Thread-20290] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:18:34.381 [DEBUG] [Thread-20292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:34.463 [DEBUG] [Thread-20293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:18:49.503 [DEBUG] [Thread-20294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:00.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:19:00.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:19:00.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-25T23:19:00.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 18, 48), 5.86, 67.75, 0.0, 13.76, 15.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:19:00.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:18:48
2025-12-25T23:19:00.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:19:01.134 [DEBUG] [Thread-20295] [transport.py] [_log()] starting thread (client mode): 0xb95794e0
2025-12-25T23:19:01.134 [DEBUG] [Thread-20295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:19:01.154 [DEBUG] [Thread-20295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:19:01.155 [INFO] [Thread-20295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] client lang: <none>
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] server lang: <none>
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] kex follows: False
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:19:01.156 [DEBUG] [Thread-20295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:19:01.157 [DEBUG] [Thread-20295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:19:01.157 [DEBUG] [Thread-20295] [transport.py] [_log()] Compression: none
2025-12-25T23:19:01.157 [DEBUG] [Thread-20295] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:19:01.165 [DEBUG] [Thread-20295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:19:01.165 [DEBUG] [Thread-20295] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:19:01.166 [DEBUG] [Thread-20295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:19:01.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:19:01.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:19:01.167 [DEBUG] [Thread-20295] [transport.py] [_log()] userauth is OK
2025-12-25T23:19:01.167 [DEBUG] [Thread-20295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:19:01.167 [DEBUG] [Thread-20295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:19:01.167 [DEBUG] [Thread-20295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:19:01.167 [DEBUG] [Thread-20295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:19:01.180 [INFO] [Thread-20295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:19:01.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:19:01.750 [DEBUG] [Thread-20295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:19:01.750 [DEBUG] [Thread-20295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:19:01.750 [DEBUG] [Thread-20295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:19:01.792 [DEBUG] [Thread-20295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:19:01.792 [DEBUG] [Thread-20295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:19:01.794 [DEBUG] [Thread-20295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:19:01.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:19:01.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:19:01.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:19:01.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:19:01.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:19:01.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:19:01.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:19:01.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:19:01.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:19:01.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.887910 -999.00  +15.40   5.23     72  +10.50 1 1 1 1 1     0    0 6.39 76.09 ZNESW 5.8 5.2 198.2 9.9 15.8 -22.7 15.7 -22.1 15.4 -20.8 15.7 -21.6
2025-12-25T23:19:01.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:19:01.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:19:01.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.887910
2025-12-25T23:19:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:19:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:19:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:19:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:19:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:19:01.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:18:48', tmtdew=5.86, humidity=67.75, cloud=0.0, wind=13.76, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:18:48', seeing=1.01, atlas_timestamp='2025-12-25T21:18:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:17:00')
2025-12-25T23:19:01.819 [DEBUG] [Thread-20295] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:19:01.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-25T23:19:01.910 [DEBUG] [Thread-20298] [transport.py] [_log()] starting thread (client mode): 0xb9578d30
2025-12-25T23:19:01.910 [DEBUG] [Thread-20298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:19:01.925 [DEBUG] [Thread-20298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:19:01.925 [INFO] [Thread-20298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:19:01.933 [DEBUG] [Thread-20298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:19:01.933 [DEBUG] [Thread-20298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:19:01.933 [DEBUG] [Thread-20298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:19:01.933 [DEBUG] [Thread-20298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:19:01.933 [DEBUG] [Thread-20298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:19:01.933 [DEBUG] [Thread-20298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] client lang: <none>
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] server lang: <none>
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] kex follows: False
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:19:01.934 [DEBUG] [Thread-20298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:19:01.935 [DEBUG] [Thread-20298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:19:01.935 [DEBUG] [Thread-20298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:19:01.935 [DEBUG] [Thread-20298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:19:01.935 [DEBUG] [Thread-20298] [transport.py] [_log()] Compression: none
2025-12-25T23:19:01.935 [DEBUG] [Thread-20298] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:19:01.994 [DEBUG] [Thread-20298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:19:01.994 [DEBUG] [Thread-20298] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:19:01.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:19:01.996 [DEBUG] [Thread-20298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:19:01.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:19:02.053 [DEBUG] [Thread-20298] [transport.py] [_log()] userauth is OK
2025-12-25T23:19:02.053 [DEBUG] [Thread-20298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:19:02.053 [DEBUG] [Thread-20298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:19:02.053 [DEBUG] [Thread-20298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:19:02.053 [DEBUG] [Thread-20298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:19:02.072 [INFO] [Thread-20298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:19:02.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-25T23:19:02.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:19:02.932 [DEBUG] [Thread-20298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:19:02.933 [DEBUG] [Thread-20298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:19:02.981 [DEBUG] [Thread-20298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:19:02.982 [DEBUG] [Thread-20298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:19:02.991 [DEBUG] [Thread-20298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:19:03.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:19:03.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-25T23:19:03.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-25T23:19:03.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:19:03.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:19:03.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:19:03.027 [DEBUG] [Thread-20298] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:19:04.533 [DEBUG] [Thread-20300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:09.371 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:09.372 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:19.580 [DEBUG] [Thread-20301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:19:33.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:19:33.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-25T23:19:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 19, 20), 5.87, 67.7, 0.0, 14.06, 15.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:19:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:19:20
2025-12-25T23:19:33.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:19:34.036 [DEBUG] [Thread-20302] [transport.py] [_log()] starting thread (client mode): 0xb9579ed0
2025-12-25T23:19:34.036 [DEBUG] [Thread-20302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:19:34.055 [DEBUG] [Thread-20302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:19:34.055 [INFO] [Thread-20302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] client lang: <none>
2025-12-25T23:19:34.057 [DEBUG] [Thread-20302] [transport.py] [_log()] server lang: <none>
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] kex follows: False
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] Compression: none
2025-12-25T23:19:34.058 [DEBUG] [Thread-20302] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:19:34.068 [DEBUG] [Thread-20302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:19:34.068 [DEBUG] [Thread-20302] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:19:34.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:19:34.070 [DEBUG] [Thread-20302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:19:34.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:19:34.071 [DEBUG] [Thread-20302] [transport.py] [_log()] userauth is OK
2025-12-25T23:19:34.072 [DEBUG] [Thread-20302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:19:34.072 [DEBUG] [Thread-20302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:19:34.072 [DEBUG] [Thread-20302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:19:34.072 [DEBUG] [Thread-20302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:19:34.108 [INFO] [Thread-20302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:19:34.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:19:34.447 [DEBUG] [Thread-20304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:34.611 [DEBUG] [Thread-20305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:19:34.693 [DEBUG] [Thread-20302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:19:34.693 [DEBUG] [Thread-20302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:19:34.694 [DEBUG] [Thread-20302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:19:34.734 [DEBUG] [Thread-20302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:19:34.734 [DEBUG] [Thread-20302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:19:34.736 [DEBUG] [Thread-20302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:19:34.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:19:34.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:19:34.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:19:34.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:19:34.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:19:34.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:19:34.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:19:34.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:19:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:19:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.888258 -999.00  +15.30  12.58     73  +10.60 1 1 1 1 1     0    0 6.45 74.89 ZNESW 8.7 12.6 219.2 16.2 15.7 -22.6 15.6 -22.2 15.4 -20.9 15.6 -21.8
2025-12-25T23:19:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:19:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:19:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.888258
2025-12-25T23:19:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:19:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:19:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:19:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:19:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:19:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:19:20', tmtdew=5.87, humidity=67.7, cloud=0.0, wind=14.06, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:19:21', seeing=1.2, atlas_timestamp='2025-12-25T21:19:05.491', atlas_cloud=1, atlas_rain=1, zp_data=[0.09774999999999956, 0.09675000000000011, 0.1542500000000011, 0.10549999999999926, 0.05450000000000088, 0.07125000000000092, 0.11249999999999893, 0.09675000000000011, 0.10749999999999993, 0.05799999999999983, 0.14424999999999955, 0.08300000000000018, 0.14899999999999913, 0.12374999999999936, 0.13100000000000023, 0.10050000000000026, 0.11025000000000063, 0.09699999999999953, 0.11099999999999888, 0.1112499999999983, 0.16399999999999793, 0.16974999999999874, 0.16625000000000156, 0.14175000000000004, 0.12799999999999834, 0.09549999999999947, 0.1557499999999994, 0.1875, 0.2530000000000001, 0.22800000000000153, 0.1830000000000016, 0.1844999999999999, 0.14924999999999855], zp_timestamp='2025-12-25T21:17:00')
2025-12-25T23:19:34.768 [DEBUG] [Thread-20302] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:19:34.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-25T23:19:49.642 [DEBUG] [Thread-20307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:04.683 [DEBUG] [Thread-20308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:09.570 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:09.572 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:19.721 [DEBUG] [Thread-20309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:34.511 [DEBUG] [Thread-20310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:34.753 [DEBUG] [Thread-20311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:20:49.790 [DEBUG] [Thread-20312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:04.828 [DEBUG] [Thread-20313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:09.770 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:09.771 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:19.858 [DEBUG] [Thread-20314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:34.566 [DEBUG] [Thread-20315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:34.896 [DEBUG] [Thread-20316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:21:47.477 [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-25T23:21:49.925 [DEBUG] [Thread-20317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:04.962 [DEBUG] [Thread-20318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:09.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:09.975 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:17.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:22:17.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:22:17.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:22:18.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 22), 5.73, 68.31, 0.0, 13.89, 15.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:22:18.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:22:00
2025-12-25T23:22:18.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:22:18.494 [DEBUG] [Thread-20319] [transport.py] [_log()] starting thread (client mode): 0xb95788e0
2025-12-25T23:22:18.494 [DEBUG] [Thread-20319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:22:18.513 [DEBUG] [Thread-20319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:22:18.513 [INFO] [Thread-20319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] client lang: <none>
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] server lang: <none>
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] kex follows: False
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:22:18.517 [DEBUG] [Thread-20319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:22:18.518 [DEBUG] [Thread-20319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:22:18.518 [DEBUG] [Thread-20319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:22:18.518 [DEBUG] [Thread-20319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:22:18.518 [DEBUG] [Thread-20319] [transport.py] [_log()] Compression: none
2025-12-25T23:22:18.518 [DEBUG] [Thread-20319] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:22:18.534 [DEBUG] [Thread-20319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:22:18.535 [DEBUG] [Thread-20319] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:22:18.535 [DEBUG] [Thread-20319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:22:18.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:22:18.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:22:18.537 [DEBUG] [Thread-20319] [transport.py] [_log()] userauth is OK
2025-12-25T23:22:18.537 [DEBUG] [Thread-20319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:22:18.537 [DEBUG] [Thread-20319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:22:18.537 [DEBUG] [Thread-20319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:22:18.537 [DEBUG] [Thread-20319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:22:18.559 [INFO] [Thread-20319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:22:18.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:22:19.201 [DEBUG] [Thread-20319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:22:19.201 [DEBUG] [Thread-20319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:22:19.202 [DEBUG] [Thread-20319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:22:19.243 [DEBUG] [Thread-20319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:22:19.243 [DEBUG] [Thread-20319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:22:19.246 [DEBUG] [Thread-20319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:22:19.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:22:19.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:22:19.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:22:19.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:22:19.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:22:19.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:22:19.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:22:19.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:22:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:22:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.889994 -999.00  +15.30   6.13     72  +10.40 1 1 1 1 1     0    0 6.58 75.95 ZNESW 9.6 6.1 219.6 10.3 15.7 -22.4 15.6 -22.0 15.4 -20.4 15.7 -21.5
2025-12-25T23:22:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.889994
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:22:19.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:22:00', tmtdew=5.73, humidity=68.31, cloud=0.0, wind=13.89, 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-25T23:22:01', seeing=1.13, atlas_timestamp='2025-12-25T21:21:35.482', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:20:00')
2025-12-25T23:22:19.267 [DEBUG] [Thread-20319] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:22:19.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-25T23:22:19.358 [DEBUG] [Thread-20322] [transport.py] [_log()] starting thread (client mode): 0xb41061d0
2025-12-25T23:22:19.358 [DEBUG] [Thread-20322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:22:19.371 [DEBUG] [Thread-20322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:22:19.371 [INFO] [Thread-20322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] client lang: <none>
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] server lang: <none>
2025-12-25T23:22:19.379 [DEBUG] [Thread-20322] [transport.py] [_log()] kex follows: False
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] Compression: none
2025-12-25T23:22:19.380 [DEBUG] [Thread-20322] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:22:19.436 [DEBUG] [Thread-20322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:22:19.436 [DEBUG] [Thread-20322] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:22:19.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:22:19.437 [DEBUG] [Thread-20322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:22:19.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:22:19.493 [DEBUG] [Thread-20322] [transport.py] [_log()] userauth is OK
2025-12-25T23:22:19.493 [DEBUG] [Thread-20322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:22:19.493 [DEBUG] [Thread-20322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:22:19.493 [DEBUG] [Thread-20322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:22:19.493 [DEBUG] [Thread-20322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:22:19.512 [INFO] [Thread-20322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:22:19.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-25T23:22:19.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:22:19.998 [DEBUG] [Thread-20324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:20.330 [DEBUG] [Thread-20322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:22:20.331 [DEBUG] [Thread-20322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:22:20.380 [DEBUG] [Thread-20322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:22:20.380 [DEBUG] [Thread-20322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:22:20.391 [DEBUG] [Thread-20322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:22:20.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:22:20.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-25T23:22:20.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:22:20.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:22:20.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:22:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:22:20.432 [DEBUG] [Thread-20322] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:22:34.628 [DEBUG] [Thread-20325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:35.051 [DEBUG] [Thread-20326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:50.083 [DEBUG] [Thread-20327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:22:50.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:22:50.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:22:50.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-25T23:22:51.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 22, 33), 5.76, 68.18, 0.0, 14.7, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:22:51.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:22:33
2025-12-25T23:22:51.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:22:51.424 [DEBUG] [Thread-20328] [transport.py] [_log()] starting thread (client mode): 0xb4106080
2025-12-25T23:22:51.424 [DEBUG] [Thread-20328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:22:51.439 [DEBUG] [Thread-20328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:22:51.439 [INFO] [Thread-20328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] client lang: <none>
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] server lang: <none>
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] kex follows: False
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:22:51.441 [DEBUG] [Thread-20328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:22:51.442 [DEBUG] [Thread-20328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:22:51.442 [DEBUG] [Thread-20328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:22:51.442 [DEBUG] [Thread-20328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:22:51.442 [DEBUG] [Thread-20328] [transport.py] [_log()] Compression: none
2025-12-25T23:22:51.442 [DEBUG] [Thread-20328] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:22:51.457 [DEBUG] [Thread-20328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:22:51.458 [DEBUG] [Thread-20328] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:22:51.458 [DEBUG] [Thread-20328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:22:51.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:22:51.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:22:51.460 [DEBUG] [Thread-20328] [transport.py] [_log()] userauth is OK
2025-12-25T23:22:51.460 [DEBUG] [Thread-20328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:22:51.460 [DEBUG] [Thread-20328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:22:51.460 [DEBUG] [Thread-20328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:22:51.461 [DEBUG] [Thread-20328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:22:51.479 [INFO] [Thread-20328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:22:51.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:22:52.269 [DEBUG] [Thread-20328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:22:52.269 [DEBUG] [Thread-20328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:22:52.270 [DEBUG] [Thread-20328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:22:52.311 [DEBUG] [Thread-20328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:22:52.312 [DEBUG] [Thread-20328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:22:52.314 [DEBUG] [Thread-20328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:22:52.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:22:52.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:22:52.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:22:52.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:22:52.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:22:52.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:22:52.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:22:52.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:22:52.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:22:52.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.890341 -999.00  +15.30   4.56     72  +10.50 1 1 1 1 1     0    0 6.82 80.11 ZNESW 4.0 4.6 252.4 14.8 15.8 -22.5 15.7 -22.0 15.4 -20.5 15.6 -21.4
2025-12-25T23:22:52.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:22:52.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:22:52.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.890341
2025-12-25T23:22:52.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:22:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:22:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:22:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:22:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:22:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:22:33', tmtdew=5.76, humidity=68.18, cloud=0.0, wind=14.7, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:22:33', seeing=1.01, atlas_timestamp='2025-12-25T21:22:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:20:00')
2025-12-25T23:22:52.341 [DEBUG] [Thread-20328] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:22:52.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-25T23:22:52.434 [DEBUG] [Thread-20331] [transport.py] [_log()] starting thread (client mode): 0xb4107d30
2025-12-25T23:22:52.434 [DEBUG] [Thread-20331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:22:52.449 [DEBUG] [Thread-20331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:22:52.449 [INFO] [Thread-20331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:22:52.456 [DEBUG] [Thread-20331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] client lang: <none>
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] server lang: <none>
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] kex follows: False
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] Compression: none
2025-12-25T23:22:52.457 [DEBUG] [Thread-20331] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:22:52.516 [DEBUG] [Thread-20331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:22:52.517 [DEBUG] [Thread-20331] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:22:52.517 [DEBUG] [Thread-20331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:22:52.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:22:52.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:22:52.572 [DEBUG] [Thread-20331] [transport.py] [_log()] userauth is OK
2025-12-25T23:22:52.572 [DEBUG] [Thread-20331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:22:52.573 [DEBUG] [Thread-20331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:22:52.573 [DEBUG] [Thread-20331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:22:52.573 [DEBUG] [Thread-20331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:22:52.591 [INFO] [Thread-20331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:22:52.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-25T23:22:52.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:22:53.400 [DEBUG] [Thread-20331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:22:53.400 [DEBUG] [Thread-20331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:22:53.448 [DEBUG] [Thread-20331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:22:53.448 [DEBUG] [Thread-20331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:22:53.457 [DEBUG] [Thread-20331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:22:53.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:22:53.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-25T23:22:53.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-25T23:22:53.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:22:53.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:22:53.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:22:53.495 [DEBUG] [Thread-20331] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:23:05.114 [DEBUG] [Thread-20333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:10.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:10.183 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:20.164 [DEBUG] [Thread-20334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:23:23.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:23:23.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-25T23:23:24.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 23, 5), 5.78, 68.06, 0.0, 14.43, 15.35, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:23:24.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:23:05
2025-12-25T23:23:24.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:23:24.487 [DEBUG] [Thread-20335] [transport.py] [_log()] starting thread (client mode): 0xb955a7d0
2025-12-25T23:23:24.487 [DEBUG] [Thread-20335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:23:24.506 [DEBUG] [Thread-20335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:23:24.506 [INFO] [Thread-20335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:23:24.509 [DEBUG] [Thread-20335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:23:24.509 [DEBUG] [Thread-20335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] client lang: <none>
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] server lang: <none>
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] kex follows: False
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:23:24.510 [DEBUG] [Thread-20335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:23:24.511 [DEBUG] [Thread-20335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:23:24.511 [DEBUG] [Thread-20335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:23:24.511 [DEBUG] [Thread-20335] [transport.py] [_log()] Compression: none
2025-12-25T23:23:24.511 [DEBUG] [Thread-20335] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:23:24.532 [DEBUG] [Thread-20335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:23:24.532 [DEBUG] [Thread-20335] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:23:24.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:23:24.534 [DEBUG] [Thread-20335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:23:24.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:23:24.535 [DEBUG] [Thread-20335] [transport.py] [_log()] userauth is OK
2025-12-25T23:23:24.536 [DEBUG] [Thread-20335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:23:24.536 [DEBUG] [Thread-20335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:23:24.536 [DEBUG] [Thread-20335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:23:24.536 [DEBUG] [Thread-20335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:23:24.560 [INFO] [Thread-20335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:23:24.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:23:25.147 [DEBUG] [Thread-20335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:23:25.147 [DEBUG] [Thread-20335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:23:25.148 [DEBUG] [Thread-20335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:23:25.188 [DEBUG] [Thread-20335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:23:25.188 [DEBUG] [Thread-20335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:23:25.192 [DEBUG] [Thread-20335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:23:25.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:23:25.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:23:25.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:23:25.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:23:25.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:23:25.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:23:25.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:23:25.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:23:25.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:23:25.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.891035 -999.00  +15.30   5.41     73  +10.50 1 1 1 1 1     0    0 6.82 82.20 ZNESW 7.0 5.4 229.5 10.8 15.8 -22.5 15.6 -21.9 15.4 -20.5 15.7 -21.6
2025-12-25T23:23:25.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:23:25.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:23:25.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.891035
2025-12-25T23:23:25.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:23:25.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:23:25.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:23:25.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:23:25.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:23:25.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:23:05', tmtdew=5.78, humidity=68.06, cloud=0.0, wind=14.43, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:23:05', seeing=1.01, atlas_timestamp='2025-12-25T21:23:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:20:00')
2025-12-25T23:23:25.219 [DEBUG] [Thread-20335] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:23:25.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-25T23:23:25.328 [DEBUG] [Thread-20338] [transport.py] [_log()] starting thread (client mode): 0xb4105e40
2025-12-25T23:23:25.328 [DEBUG] [Thread-20338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:23:25.344 [DEBUG] [Thread-20338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:23:25.344 [INFO] [Thread-20338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:23:25.352 [DEBUG] [Thread-20338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:23:25.352 [DEBUG] [Thread-20338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:23:25.352 [DEBUG] [Thread-20338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] client lang: <none>
2025-12-25T23:23:25.353 [DEBUG] [Thread-20338] [transport.py] [_log()] server lang: <none>
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] kex follows: False
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] Compression: none
2025-12-25T23:23:25.354 [DEBUG] [Thread-20338] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:23:25.417 [DEBUG] [Thread-20338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:23:25.418 [DEBUG] [Thread-20338] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:23:25.419 [DEBUG] [Thread-20338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:23:25.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:23:25.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:23:25.477 [DEBUG] [Thread-20338] [transport.py] [_log()] userauth is OK
2025-12-25T23:23:25.477 [DEBUG] [Thread-20338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:23:25.477 [DEBUG] [Thread-20338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:23:25.477 [DEBUG] [Thread-20338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:23:25.477 [DEBUG] [Thread-20338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:23:25.500 [INFO] [Thread-20338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:23:25.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-25T23:23:25.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:23:26.353 [DEBUG] [Thread-20338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:23:26.353 [DEBUG] [Thread-20338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:23:26.401 [DEBUG] [Thread-20338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:23:26.402 [DEBUG] [Thread-20338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:23:26.412 [DEBUG] [Thread-20338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:23:26.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:23:26.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-25T23:23:26.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-25T23:23:26.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:23:26.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:23:26.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:23:26.450 [DEBUG] [Thread-20338] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:23:34.693 [DEBUG] [Thread-20340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:35.204 [DEBUG] [Thread-20341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:50.259 [DEBUG] [Thread-20342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:23:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:23:56.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:23:56.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-25T23:23:57.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 23, 37), 5.88, 68.35, 0.0, 14.15, 15.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:23:57.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:23:37
2025-12-25T23:23:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:23:57.450 [DEBUG] [Thread-20343] [transport.py] [_log()] starting thread (client mode): 0xb9558580
2025-12-25T23:23:57.450 [DEBUG] [Thread-20343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:23:57.471 [DEBUG] [Thread-20343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:23:57.471 [INFO] [Thread-20343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:23:57.473 [DEBUG] [Thread-20343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] client lang: <none>
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] server lang: <none>
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] kex follows: False
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:23:57.474 [DEBUG] [Thread-20343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:23:57.475 [DEBUG] [Thread-20343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:23:57.475 [DEBUG] [Thread-20343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:23:57.475 [DEBUG] [Thread-20343] [transport.py] [_log()] Compression: none
2025-12-25T23:23:57.475 [DEBUG] [Thread-20343] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:23:57.489 [DEBUG] [Thread-20343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:23:57.490 [DEBUG] [Thread-20343] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:23:57.490 [DEBUG] [Thread-20343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:23:57.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:23:57.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:23:57.491 [DEBUG] [Thread-20343] [transport.py] [_log()] userauth is OK
2025-12-25T23:23:57.491 [DEBUG] [Thread-20343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:23:57.491 [DEBUG] [Thread-20343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:23:57.491 [DEBUG] [Thread-20343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:23:57.491 [DEBUG] [Thread-20343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:23:57.506 [INFO] [Thread-20343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:23:57.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:23:58.130 [DEBUG] [Thread-20343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:23:58.130 [DEBUG] [Thread-20343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:23:58.130 [DEBUG] [Thread-20343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:23:58.171 [DEBUG] [Thread-20343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:23:58.171 [DEBUG] [Thread-20343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:23:58.175 [DEBUG] [Thread-20343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:23:58.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:23:58.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:23:58.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:23:58.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:23:58.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:23:58.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:23:58.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:23:58.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:23:58.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:23:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.891382 -999.00  +15.30   3.95     73  +10.50 1 1 1 1 1     0    0 6.67 76.24 ZNESW 5.9 4.0 197.3 10.3 15.7 -22.3 15.6 -21.9 15.4 -20.4 15.7 -21.6
2025-12-25T23:23:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:23:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:23:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.891382
2025-12-25T23:23:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:23:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:23:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:23:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:23:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:23:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:23:37', tmtdew=5.88, humidity=68.35, cloud=0.0, wind=14.15, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:23:37', seeing=1.34, atlas_timestamp='2025-12-25T21:23:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:20:00')
2025-12-25T23:23:58.203 [DEBUG] [Thread-20343] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:23:58.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-25T23:23:58.306 [DEBUG] [Thread-20346] [transport.py] [_log()] starting thread (client mode): 0xb955bd90
2025-12-25T23:23:58.306 [DEBUG] [Thread-20346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:23:58.321 [DEBUG] [Thread-20346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:23:58.322 [INFO] [Thread-20346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:23:58.331 [DEBUG] [Thread-20346] [transport.py] [_log()] client lang: <none>
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] server lang: <none>
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] kex follows: False
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] Compression: none
2025-12-25T23:23:58.332 [DEBUG] [Thread-20346] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:23:58.388 [DEBUG] [Thread-20346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:23:58.389 [DEBUG] [Thread-20346] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:23:58.389 [DEBUG] [Thread-20346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:23:58.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:23:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:23:58.444 [DEBUG] [Thread-20346] [transport.py] [_log()] userauth is OK
2025-12-25T23:23:58.445 [DEBUG] [Thread-20346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:23:58.445 [DEBUG] [Thread-20346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:23:58.445 [DEBUG] [Thread-20346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:23:58.445 [DEBUG] [Thread-20346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:23:58.464 [INFO] [Thread-20346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:23:58.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-25T23:23:58.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:23:59.260 [DEBUG] [Thread-20346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:23:59.260 [DEBUG] [Thread-20346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:23:59.308 [DEBUG] [Thread-20346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:23:59.308 [DEBUG] [Thread-20346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:23:59.317 [DEBUG] [Thread-20346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:23:59.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:23:59.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-25T23:23:59.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:23:59.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:23:59.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:23:59.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:23:59.356 [DEBUG] [Thread-20346] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:24:05.294 [DEBUG] [Thread-20348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:10.385 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:10.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:20.353 [DEBUG] [Thread-20349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:24:29.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:24:29.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-25T23:24:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 24, 9), 5.88, 68.36, 0.0, 14.7, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:24:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:24:09
2025-12-25T23:24:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:24:30.346 [DEBUG] [Thread-20350] [transport.py] [_log()] starting thread (client mode): 0xb955b970
2025-12-25T23:24:30.346 [DEBUG] [Thread-20350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:24:30.367 [DEBUG] [Thread-20350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:24:30.367 [INFO] [Thread-20350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:24:30.370 [DEBUG] [Thread-20350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] client lang: <none>
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] server lang: <none>
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] kex follows: False
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] Compression: none
2025-12-25T23:24:30.371 [DEBUG] [Thread-20350] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:24:30.391 [DEBUG] [Thread-20350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:24:30.392 [DEBUG] [Thread-20350] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:24:30.392 [DEBUG] [Thread-20350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:24:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:24:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:24:30.394 [DEBUG] [Thread-20350] [transport.py] [_log()] userauth is OK
2025-12-25T23:24:30.395 [DEBUG] [Thread-20350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:24:30.395 [DEBUG] [Thread-20350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:24:30.395 [DEBUG] [Thread-20350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:24:30.395 [DEBUG] [Thread-20350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:24:30.430 [INFO] [Thread-20350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:24:30.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:24:31.051 [DEBUG] [Thread-20350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:24:31.051 [DEBUG] [Thread-20350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:24:31.052 [DEBUG] [Thread-20350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:24:31.092 [DEBUG] [Thread-20350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:24:31.092 [DEBUG] [Thread-20350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:24:31.096 [DEBUG] [Thread-20350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:24:31.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:24:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:24:31.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:24:31.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:24:31.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:24:31.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:24:31.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:24:31.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:24:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:24:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.891730 -999.00  +15.30   6.53     73  +10.50 1 1 1 1 1     0    0 6.56 73.87 ZNESW 5.6 6.5 227.9 11.7 15.8 -22.3 15.6 -21.9 15.4 -20.5 15.7 -21.5
2025-12-25T23:24:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:24:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:24:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.891730
2025-12-25T23:24:31.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:24:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:24:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:24:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:24:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:24:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:24:09', tmtdew=5.88, humidity=68.36, cloud=0.0, wind=14.7, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:24:09', seeing=1.38, atlas_timestamp='2025-12-25T21:24:05.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:20:00')
2025-12-25T23:24:31.122 [DEBUG] [Thread-20350] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:24:31.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:24:31.222 [DEBUG] [Thread-20353] [transport.py] [_log()] starting thread (client mode): 0xb955b640
2025-12-25T23:24:31.223 [DEBUG] [Thread-20353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:24:31.237 [DEBUG] [Thread-20353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:24:31.237 [INFO] [Thread-20353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:24:31.244 [DEBUG] [Thread-20353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:24:31.245 [DEBUG] [Thread-20353] [transport.py] [_log()] client lang: <none>
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] server lang: <none>
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] kex follows: False
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] Compression: none
2025-12-25T23:24:31.246 [DEBUG] [Thread-20353] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:24:31.305 [DEBUG] [Thread-20353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:24:31.306 [DEBUG] [Thread-20353] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:24:31.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:24:31.307 [DEBUG] [Thread-20353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:24:31.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:24:31.364 [DEBUG] [Thread-20353] [transport.py] [_log()] userauth is OK
2025-12-25T23:24:31.365 [DEBUG] [Thread-20353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:24:31.365 [DEBUG] [Thread-20353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:24:31.365 [DEBUG] [Thread-20353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:24:31.365 [DEBUG] [Thread-20353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:24:31.385 [INFO] [Thread-20353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:24:31.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:24:31.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:24:32.250 [DEBUG] [Thread-20353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:24:32.250 [DEBUG] [Thread-20353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:24:32.302 [DEBUG] [Thread-20353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:24:32.302 [DEBUG] [Thread-20353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:24:32.317 [DEBUG] [Thread-20353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:24:32.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:24:32.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:24:32.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-25T23:24:32.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:24:32.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:24:32.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:24:32.362 [DEBUG] [Thread-20353] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:24:34.763 [DEBUG] [Thread-20355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:35.386 [DEBUG] [Thread-20356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:42.059 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:24:50.436 [DEBUG] [Thread-20357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:02.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:25:02.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:25:02.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-25T23:25:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 24, 41), 5.85, 67.8, 0.0, 11.84, 15.38, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:25:03.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:24:41
2025-12-25T23:25:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:25:03.409 [DEBUG] [Thread-20358] [transport.py] [_log()] starting thread (client mode): 0xb955bf40
2025-12-25T23:25:03.409 [DEBUG] [Thread-20358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:25:03.429 [DEBUG] [Thread-20358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:25:03.429 [INFO] [Thread-20358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] client lang: <none>
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] server lang: <none>
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] kex follows: False
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:25:03.432 [DEBUG] [Thread-20358] [transport.py] [_log()] Compression: none
2025-12-25T23:25:03.433 [DEBUG] [Thread-20358] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:25:03.447 [DEBUG] [Thread-20358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:25:03.448 [DEBUG] [Thread-20358] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:25:03.448 [DEBUG] [Thread-20358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:25:03.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:25:03.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:25:03.449 [DEBUG] [Thread-20358] [transport.py] [_log()] userauth is OK
2025-12-25T23:25:03.449 [DEBUG] [Thread-20358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:25:03.449 [DEBUG] [Thread-20358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:25:03.449 [DEBUG] [Thread-20358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:25:03.449 [DEBUG] [Thread-20358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:25:03.461 [INFO] [Thread-20358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:25:03.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:25:05.465 [DEBUG] [Thread-20360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:10.586 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:10.587 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:11.691 [DEBUG] [Thread-20358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:25:11.691 [DEBUG] [Thread-20358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:25:11.692 [DEBUG] [Thread-20358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:25:11.732 [DEBUG] [Thread-20358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:25:11.732 [DEBUG] [Thread-20358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:25:11.736 [DEBUG] [Thread-20358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:25:11.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:25:11.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:25:11.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:25:11.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:25:11.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:25:11.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:25:11.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:25:11.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:25:11.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:25:11.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.892077 -999.00  +15.30   5.79     72  +10.40 1 1 1 1 1     0    0 6.70 77.16 ZNESW 4.6 5.8 250.0 8.7 15.7 -22.4 15.6 -21.9 15.4 -20.5 15.7 -21.4
2025-12-25T23:25:11.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:25:11.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:25:11.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.892077
2025-12-25T23:25:11.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:25:11.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:25:11.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:25:11.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:25:11.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:25:11.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:24:41', tmtdew=5.85, humidity=67.8, cloud=0.0, wind=11.84, 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-25T23:24:41', seeing=1.38, atlas_timestamp='2025-12-25T21:24:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:24:00')
2025-12-25T23:25:11.855 [DEBUG] [Thread-20358] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:25:11.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-25T23:25:11.951 [DEBUG] [Thread-20362] [transport.py] [_log()] starting thread (client mode): 0xb955a890
2025-12-25T23:25:11.951 [DEBUG] [Thread-20362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:25:11.967 [DEBUG] [Thread-20362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:25:11.967 [INFO] [Thread-20362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:25:11.974 [DEBUG] [Thread-20362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] client lang: <none>
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] server lang: <none>
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] kex follows: False
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:25:11.975 [DEBUG] [Thread-20362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:25:11.976 [DEBUG] [Thread-20362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:25:11.976 [DEBUG] [Thread-20362] [transport.py] [_log()] Compression: none
2025-12-25T23:25:11.976 [DEBUG] [Thread-20362] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:25:12.033 [DEBUG] [Thread-20362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:25:12.034 [DEBUG] [Thread-20362] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:25:12.034 [DEBUG] [Thread-20362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:25:12.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:25:12.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:25:12.092 [DEBUG] [Thread-20362] [transport.py] [_log()] userauth is OK
2025-12-25T23:25:12.092 [DEBUG] [Thread-20362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:25:12.093 [DEBUG] [Thread-20362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:25:12.093 [DEBUG] [Thread-20362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:25:12.093 [DEBUG] [Thread-20362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:25:12.111 [INFO] [Thread-20362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:25:12.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-25T23:25:12.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:25:12.957 [DEBUG] [Thread-20362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:25:12.958 [DEBUG] [Thread-20362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:25:13.006 [DEBUG] [Thread-20362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:25:13.007 [DEBUG] [Thread-20362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:25:13.016 [DEBUG] [Thread-20362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:25:13.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:25:13.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:25:13.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-25T23:25:13.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:25:13.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:25:13.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:25:13.052 [DEBUG] [Thread-20362] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:25:20.499 [DEBUG] [Thread-20364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:34.819 [DEBUG] [Thread-20365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:35.550 [DEBUG] [Thread-20366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:25:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:25:43.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:25:43.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-25T23:25:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 25, 13), 5.85, 67.76, 0.0, 11.96, 15.33, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:25:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:25:13
2025-12-25T23:25:43.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:25:44.075 [DEBUG] [Thread-20367] [transport.py] [_log()] starting thread (client mode): 0xb9559de0
2025-12-25T23:25:44.075 [DEBUG] [Thread-20367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:25:44.095 [DEBUG] [Thread-20367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:25:44.096 [INFO] [Thread-20367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:25:44.098 [DEBUG] [Thread-20367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] client lang: <none>
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] server lang: <none>
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] kex follows: False
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] Compression: none
2025-12-25T23:25:44.099 [DEBUG] [Thread-20367] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:25:44.117 [DEBUG] [Thread-20367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:25:44.118 [DEBUG] [Thread-20367] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:25:44.118 [DEBUG] [Thread-20367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:25:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:25:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:25:44.119 [DEBUG] [Thread-20367] [transport.py] [_log()] userauth is OK
2025-12-25T23:25:44.119 [DEBUG] [Thread-20367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:25:44.119 [DEBUG] [Thread-20367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:25:44.119 [DEBUG] [Thread-20367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:25:44.119 [DEBUG] [Thread-20367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:25:44.128 [INFO] [Thread-20367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:25:44.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:25:44.736 [DEBUG] [Thread-20367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:25:44.736 [DEBUG] [Thread-20367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:25:44.736 [DEBUG] [Thread-20367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:25:44.778 [DEBUG] [Thread-20367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:25:44.778 [DEBUG] [Thread-20367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:25:44.780 [DEBUG] [Thread-20367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:25:44.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:25:44.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:25:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:25:44.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:25:44.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:25:44.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:25:44.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:25:44.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:25:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:25:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.892424 -999.00  +15.30   3.41     73  +10.40 1 1 1 1 1     0    0 6.85 77.88 ZNESW 6.5 3.4 206.7 9.0 15.7 -22.2 15.6 -21.9 15.4 -20.5 15.7 -21.5
2025-12-25T23:25:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:25:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:25:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.892424
2025-12-25T23:25:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:25:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:25:44.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:25:44.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:25:44.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:25:44.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:25:13', tmtdew=5.85, humidity=67.76, cloud=0.0, wind=11.96, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:25:13', seeing=1.22, atlas_timestamp='2025-12-25T21:25:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:24:00')
2025-12-25T23:25:44.805 [DEBUG] [Thread-20367] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:25:44.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:25:44.901 [DEBUG] [Thread-20370] [transport.py] [_log()] starting thread (client mode): 0xb955a320
2025-12-25T23:25:44.901 [DEBUG] [Thread-20370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:25:44.917 [DEBUG] [Thread-20370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:25:44.917 [INFO] [Thread-20370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] client lang: <none>
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] server lang: <none>
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] kex follows: False
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:25:44.925 [DEBUG] [Thread-20370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:25:44.926 [DEBUG] [Thread-20370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:25:44.926 [DEBUG] [Thread-20370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:25:44.926 [DEBUG] [Thread-20370] [transport.py] [_log()] Compression: none
2025-12-25T23:25:44.926 [DEBUG] [Thread-20370] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:25:44.984 [DEBUG] [Thread-20370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:25:44.984 [DEBUG] [Thread-20370] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:25:44.985 [DEBUG] [Thread-20370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:25:44.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:25:44.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:25:45.040 [DEBUG] [Thread-20370] [transport.py] [_log()] userauth is OK
2025-12-25T23:25:45.041 [DEBUG] [Thread-20370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:25:45.041 [DEBUG] [Thread-20370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:25:45.041 [DEBUG] [Thread-20370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:25:45.041 [DEBUG] [Thread-20370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:25:45.060 [INFO] [Thread-20370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:25:45.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-25T23:25:45.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:25:45.877 [DEBUG] [Thread-20370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:25:45.878 [DEBUG] [Thread-20370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:25:45.925 [DEBUG] [Thread-20370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:25:45.926 [DEBUG] [Thread-20370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:25:45.934 [DEBUG] [Thread-20370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:25:45.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:25: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-25T23:25:45.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-25T23:25:45.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:25:45.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:25:45.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:25:45.966 [DEBUG] [Thread-20370] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:25:50.583 [DEBUG] [Thread-20372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:05.640 [DEBUG] [Thread-20373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:10.785 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:10.787 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:15.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:26:15.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:26:15.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-25T23:26:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 25, 45), 5.84, 68.33, 0.0, 10.64, 15.32, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:26:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:25:45
2025-12-25T23:26:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:26:16.969 [DEBUG] [Thread-20374] [transport.py] [_log()] starting thread (client mode): 0xb955abf0
2025-12-25T23:26:16.969 [DEBUG] [Thread-20374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:26:16.988 [DEBUG] [Thread-20374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:26:16.988 [INFO] [Thread-20374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] client lang: <none>
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] server lang: <none>
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] kex follows: False
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:26:16.991 [DEBUG] [Thread-20374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:26:16.992 [DEBUG] [Thread-20374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:26:16.992 [DEBUG] [Thread-20374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:26:16.992 [DEBUG] [Thread-20374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:26:16.992 [DEBUG] [Thread-20374] [transport.py] [_log()] Compression: none
2025-12-25T23:26:16.992 [DEBUG] [Thread-20374] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:26:17.008 [DEBUG] [Thread-20374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:26:17.008 [DEBUG] [Thread-20374] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:26:17.009 [DEBUG] [Thread-20374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:26:17.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:26:17.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:26:17.012 [DEBUG] [Thread-20374] [transport.py] [_log()] userauth is OK
2025-12-25T23:26:17.012 [DEBUG] [Thread-20374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:26:17.012 [DEBUG] [Thread-20374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:26:17.012 [DEBUG] [Thread-20374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:26:17.012 [DEBUG] [Thread-20374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:26:17.032 [INFO] [Thread-20374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:26:17.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:26:17.680 [DEBUG] [Thread-20374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:26:17.680 [DEBUG] [Thread-20374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:26:17.680 [DEBUG] [Thread-20374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:26:17.721 [DEBUG] [Thread-20374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:26:17.721 [DEBUG] [Thread-20374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:26:17.724 [DEBUG] [Thread-20374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:26:17.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:26:17.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:26:17.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:26:17.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:26:17.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:26:17.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:26:17.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.892771 -999.00  +15.20   8.27     73  +10.40 1 1 1 1 1     0    0 6.70 75.00 ZNESW 7.3 8.3 223.2 12.6 15.7 -22.2 15.6 -21.8 15.4 -20.2 15.6 -21.5
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.892771
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:26:17.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:26:17.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:26:17.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:25:45', tmtdew=5.84, humidity=68.33, cloud=0.0, wind=10.64, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:25:45', seeing=1.4, atlas_timestamp='2025-12-25T21:25:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:24:00')
2025-12-25T23:26:17.736 [DEBUG] [Thread-20374] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:26:17.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-25T23:26:17.822 [DEBUG] [Thread-20377] [transport.py] [_log()] starting thread (client mode): 0xb955a2f0
2025-12-25T23:26:17.822 [DEBUG] [Thread-20377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:26:17.837 [DEBUG] [Thread-20377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:26:17.837 [INFO] [Thread-20377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:26:17.844 [DEBUG] [Thread-20377] [transport.py] [_log()] client lang: <none>
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] server lang: <none>
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] kex follows: False
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] Compression: none
2025-12-25T23:26:17.845 [DEBUG] [Thread-20377] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:26:17.903 [DEBUG] [Thread-20377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:26:17.903 [DEBUG] [Thread-20377] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:26:17.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:26:17.903 [DEBUG] [Thread-20377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:26:17.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:26:17.960 [DEBUG] [Thread-20377] [transport.py] [_log()] userauth is OK
2025-12-25T23:26:17.960 [DEBUG] [Thread-20377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:26:17.960 [DEBUG] [Thread-20377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:26:17.960 [DEBUG] [Thread-20377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:26:17.960 [DEBUG] [Thread-20377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:26:17.974 [INFO] [Thread-20377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:26:17.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-25T23:26:17.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:26:18.832 [DEBUG] [Thread-20377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:26:18.832 [DEBUG] [Thread-20377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:26:18.882 [DEBUG] [Thread-20377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:26:18.882 [DEBUG] [Thread-20377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:26:18.890 [DEBUG] [Thread-20377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:26:18.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:26:18.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-25T23:26:18.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-25T23:26:18.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:26:18.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:26:18.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:26:18.923 [DEBUG] [Thread-20377] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:26:20.673 [DEBUG] [Thread-20379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:34.887 [DEBUG] [Thread-20380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:35.712 [DEBUG] [Thread-20381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:26:48.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:26:48.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-25T23:26:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 26, 17), 5.83, 68.35, 0.0, 10.55, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:26:49.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:26:17
2025-12-25T23:26:49.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:26:49.939 [DEBUG] [Thread-20382] [transport.py] [_log()] starting thread (client mode): 0xb955b100
2025-12-25T23:26:49.939 [DEBUG] [Thread-20382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:26:49.960 [DEBUG] [Thread-20382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:26:49.960 [INFO] [Thread-20382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] client lang: <none>
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] server lang: <none>
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] kex follows: False
2025-12-25T23:26:49.963 [DEBUG] [Thread-20382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:26:49.964 [DEBUG] [Thread-20382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:26:49.964 [DEBUG] [Thread-20382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:26:49.964 [DEBUG] [Thread-20382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:26:49.964 [DEBUG] [Thread-20382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:26:49.964 [DEBUG] [Thread-20382] [transport.py] [_log()] Compression: none
2025-12-25T23:26:49.964 [DEBUG] [Thread-20382] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:26:49.981 [DEBUG] [Thread-20382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:26:49.982 [DEBUG] [Thread-20382] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:26:49.982 [DEBUG] [Thread-20382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:26:49.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:26:49.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:26:50.025 [DEBUG] [Thread-20382] [transport.py] [_log()] userauth is OK
2025-12-25T23:26:50.025 [DEBUG] [Thread-20382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:26:50.025 [DEBUG] [Thread-20382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:26:50.025 [DEBUG] [Thread-20382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:26:50.025 [DEBUG] [Thread-20382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:26:50.058 [INFO] [Thread-20382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:26:50.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:26:50.711 [DEBUG] [Thread-20382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:26:50.711 [DEBUG] [Thread-20382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:26:50.711 [DEBUG] [Thread-20382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:26:50.746 [DEBUG] [Thread-20384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:26:50.752 [DEBUG] [Thread-20382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:26:50.752 [DEBUG] [Thread-20382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:26:50.754 [DEBUG] [Thread-20382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:26:50.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:26:50.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:26:50.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:26:50.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:26:50.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:26:50.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:26:50.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.893466 -999.00  +15.20   8.09     73  +10.50 1 1 1 1 1     0    0 6.65 71.76 ZNESW 9.1 8.1 197.6 12.5 15.7 -22.3 15.6 -21.8 15.3 -20.3 15.7 -21.3
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.893466
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:26:50.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:26:17', tmtdew=5.83, humidity=68.35, cloud=0.0, wind=10.55, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:26:17', seeing=1.19, atlas_timestamp='2025-12-25T21:26:35.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:24:00')
2025-12-25T23:26:50.772 [DEBUG] [Thread-20382] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:26:50.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-25T23:26:50.855 [DEBUG] [Thread-20386] [transport.py] [_log()] starting thread (client mode): 0xb4104580
2025-12-25T23:26:50.856 [DEBUG] [Thread-20386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:26:50.870 [DEBUG] [Thread-20386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:26:50.870 [INFO] [Thread-20386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] client lang: <none>
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] server lang: <none>
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] kex follows: False
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] Compression: none
2025-12-25T23:26:50.878 [DEBUG] [Thread-20386] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:26:50.935 [DEBUG] [Thread-20386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:26:50.936 [DEBUG] [Thread-20386] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:26:50.936 [DEBUG] [Thread-20386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:26:50.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:26:50.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:26:50.992 [DEBUG] [Thread-20386] [transport.py] [_log()] userauth is OK
2025-12-25T23:26:50.992 [DEBUG] [Thread-20386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:26:50.992 [DEBUG] [Thread-20386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:26:50.992 [DEBUG] [Thread-20386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:26:50.992 [DEBUG] [Thread-20386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:26:51.009 [INFO] [Thread-20386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:26:51.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-25T23:26:51.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:26:51.854 [DEBUG] [Thread-20386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:26:51.855 [DEBUG] [Thread-20386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:26:51.902 [DEBUG] [Thread-20386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:26:51.902 [DEBUG] [Thread-20386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:26:51.911 [DEBUG] [Thread-20386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:26:51.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:26:51.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:26:51.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:26:51.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:26:51.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:26:51.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:26:51.943 [DEBUG] [Thread-20386] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:27:05.778 [DEBUG] [Thread-20388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:10.987 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:10.989 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:20.832 [DEBUG] [Thread-20389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:27:21.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:27:21.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-25T23:27:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 26, 49), 5.86, 68.43, 0.0, 10.04, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:27:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:26:49
2025-12-25T23:27:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:27:22.981 [DEBUG] [Thread-20390] [transport.py] [_log()] starting thread (client mode): 0xb4105de0
2025-12-25T23:27:22.981 [DEBUG] [Thread-20390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:27:23.000 [DEBUG] [Thread-20390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:27:23.000 [INFO] [Thread-20390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] client lang: <none>
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] server lang: <none>
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] kex follows: False
2025-12-25T23:27:23.003 [DEBUG] [Thread-20390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:27:23.004 [DEBUG] [Thread-20390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:27:23.004 [DEBUG] [Thread-20390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:27:23.004 [DEBUG] [Thread-20390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:27:23.004 [DEBUG] [Thread-20390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:27:23.004 [DEBUG] [Thread-20390] [transport.py] [_log()] Compression: none
2025-12-25T23:27:23.004 [DEBUG] [Thread-20390] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:27:23.019 [DEBUG] [Thread-20390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:27:23.019 [DEBUG] [Thread-20390] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:27:23.019 [DEBUG] [Thread-20390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:27:23.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:27:23.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:27:23.020 [DEBUG] [Thread-20390] [transport.py] [_log()] userauth is OK
2025-12-25T23:27:23.020 [DEBUG] [Thread-20390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:27:23.020 [DEBUG] [Thread-20390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:27:23.020 [DEBUG] [Thread-20390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:27:23.020 [DEBUG] [Thread-20390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:27:23.031 [INFO] [Thread-20390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:27:23.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:27:23.630 [DEBUG] [Thread-20390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:27:23.630 [DEBUG] [Thread-20390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:27:23.630 [DEBUG] [Thread-20390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:27:23.670 [DEBUG] [Thread-20390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:27:23.670 [DEBUG] [Thread-20390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:27:23.673 [DEBUG] [Thread-20390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:27:23.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:27:23.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:27:23.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:27:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:27:23.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:27:23.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:27:23.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:27:23.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.893813 -999.00  +15.20   9.38     72  +10.40 1 1 1 1 1     0    0 6.51 68.71 ZNESW 8.3 9.4 199.9 13.1 15.7 -22.3 15.6 -21.9 15.4 -20.3 15.7 -21.2
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.893813
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:27:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:26:49', tmtdew=5.86, humidity=68.43, cloud=0.0, wind=10.04, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:26:50', seeing=1.19, atlas_timestamp='2025-12-25T21:27:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:24:00')
2025-12-25T23:27:23.687 [DEBUG] [Thread-20390] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:27:23.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-25T23:27:23.774 [DEBUG] [Thread-20393] [transport.py] [_log()] starting thread (client mode): 0xb4106c80
2025-12-25T23:27:23.774 [DEBUG] [Thread-20393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:27:23.788 [DEBUG] [Thread-20393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:27:23.789 [INFO] [Thread-20393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] client lang: <none>
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] server lang: <none>
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] kex follows: False
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] Compression: none
2025-12-25T23:27:23.796 [DEBUG] [Thread-20393] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:27:23.854 [DEBUG] [Thread-20393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:27:23.855 [DEBUG] [Thread-20393] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:27:23.855 [DEBUG] [Thread-20393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:27:23.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:27:23.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:27:23.913 [DEBUG] [Thread-20393] [transport.py] [_log()] userauth is OK
2025-12-25T23:27:23.913 [DEBUG] [Thread-20393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:27:23.913 [DEBUG] [Thread-20393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:27:23.913 [DEBUG] [Thread-20393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:27:23.913 [DEBUG] [Thread-20393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:27:23.926 [INFO] [Thread-20393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:27:23.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:27:23.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:27:24.769 [DEBUG] [Thread-20393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:27:24.770 [DEBUG] [Thread-20393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:27:24.818 [DEBUG] [Thread-20393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:27:24.819 [DEBUG] [Thread-20393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:27:24.828 [DEBUG] [Thread-20393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:27:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:27:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:27: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-25T23:27:24.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:27:24.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:27:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:27:24.866 [DEBUG] [Thread-20393] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:27:34.956 [DEBUG] [Thread-20395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:35.864 [DEBUG] [Thread-20396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:50.902 [DEBUG] [Thread-20397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:27:54.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:27:54.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:27: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-25T23:27:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 27, 21), 5.87, 68.41, 0.0, 11.5, 15.27, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:27:55.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:27:21
2025-12-25T23:27:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:27:55.894 [DEBUG] [Thread-20398] [transport.py] [_log()] starting thread (client mode): 0xb955bd60
2025-12-25T23:27:55.895 [DEBUG] [Thread-20398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:27:55.914 [DEBUG] [Thread-20398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:27:55.914 [INFO] [Thread-20398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:27:55.918 [DEBUG] [Thread-20398] [transport.py] [_log()] client lang: <none>
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] server lang: <none>
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] kex follows: False
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] Compression: none
2025-12-25T23:27:55.919 [DEBUG] [Thread-20398] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:27:55.934 [DEBUG] [Thread-20398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:27:55.934 [DEBUG] [Thread-20398] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:27:55.934 [DEBUG] [Thread-20398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:27:55.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:27:55.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:27:55.935 [DEBUG] [Thread-20398] [transport.py] [_log()] userauth is OK
2025-12-25T23:27:55.935 [DEBUG] [Thread-20398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:27:55.935 [DEBUG] [Thread-20398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:27:55.935 [DEBUG] [Thread-20398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:27:55.935 [DEBUG] [Thread-20398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:27:55.950 [INFO] [Thread-20398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:27:55.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:27:56.585 [DEBUG] [Thread-20398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:27:56.586 [DEBUG] [Thread-20398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:27:56.586 [DEBUG] [Thread-20398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:27:56.627 [DEBUG] [Thread-20398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:27:56.627 [DEBUG] [Thread-20398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:27:56.630 [DEBUG] [Thread-20398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:27:56.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:27:56.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:27:56.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:27:56.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:27:56.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:27:56.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:27:56.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:27:56.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:27:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:27:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.894160 -999.00  +15.20   4.93     72  +10.40 1 1 1 1 1     0    0 6.53 66.32 ZNESW 7.4 4.9 196.3 14.2 15.8 -22.6 15.6 -22.1 15.4 -20.6 15.6 -21.6
2025-12-25T23:27:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:27:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:27:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.894160
2025-12-25T23:27:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:27:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:27:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:27:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:27:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:27:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:27:21', tmtdew=5.87, humidity=68.41, cloud=0.0, wind=11.5, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:27:54', seeing=2.0, atlas_timestamp='2025-12-25T21:27:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.07075000000000031, 0.10224999999999973, 0.17425000000000068, 0.07449999999999868, 0.09299999999999997, 0.1332500000000003, 0.13899999999999935, 0.08474999999999966, 0.12449999999999939, 0.06799999999999962, 0.12924999999999898, 0.07899999999999885, 0.11749999999999972, 0.12074999999999925, 0.14599999999999902, 0.09750000000000014, 0.08924999999999983, 0.11800000000000033, 0.10799999999999876, 0.06624999999999837, 0.14999999999999858, 0.14874999999999794, 0.15625, 0.12674999999999947, 0.13099999999999845, 0.12950000000000017, 0.1427499999999995, 0.20650000000000013, 0.1460000000000008, 0.18700000000000117, 0.19900000000000162, 0.17600000000000016, 0.13974999999999937], zp_timestamp='2025-12-25T21:24:00')
2025-12-25T23:27:56.662 [DEBUG] [Thread-20398] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:27: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-25T23:27:56.755 [DEBUG] [Thread-20401] [transport.py] [_log()] starting thread (client mode): 0xb9559300
2025-12-25T23:27:56.755 [DEBUG] [Thread-20401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:27:56.770 [DEBUG] [Thread-20401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:27:56.770 [INFO] [Thread-20401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:27:56.778 [DEBUG] [Thread-20401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:27:56.778 [DEBUG] [Thread-20401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:27:56.778 [DEBUG] [Thread-20401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:27:56.778 [DEBUG] [Thread-20401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:56.778 [DEBUG] [Thread-20401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:27:56.778 [DEBUG] [Thread-20401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] client lang: <none>
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] server lang: <none>
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] kex follows: False
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:27:56.779 [DEBUG] [Thread-20401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:27:56.780 [DEBUG] [Thread-20401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:27:56.780 [DEBUG] [Thread-20401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:27:56.780 [DEBUG] [Thread-20401] [transport.py] [_log()] Compression: none
2025-12-25T23:27:56.780 [DEBUG] [Thread-20401] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:27:56.836 [DEBUG] [Thread-20401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:27:56.836 [DEBUG] [Thread-20401] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:27:56.837 [DEBUG] [Thread-20401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:27:56.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:27:56.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:27:56.892 [DEBUG] [Thread-20401] [transport.py] [_log()] userauth is OK
2025-12-25T23:27:56.892 [DEBUG] [Thread-20401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:27:56.893 [DEBUG] [Thread-20401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:27:56.893 [DEBUG] [Thread-20401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:27:56.893 [DEBUG] [Thread-20401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:27:56.912 [INFO] [Thread-20401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:27:56.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-25T23:27:56.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:27:57.742 [DEBUG] [Thread-20401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:27:57.742 [DEBUG] [Thread-20401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:27:57.789 [DEBUG] [Thread-20401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:27:57.790 [DEBUG] [Thread-20401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:27:57.798 [DEBUG] [Thread-20401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:27:57.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:27:57.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-25T23:27:57.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-25T23:27:57.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:27:57.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:27:57.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:27:57.832 [DEBUG] [Thread-20401] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:28:05.933 [DEBUG] [Thread-20403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:28:11.199 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:28:11.200 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:28:20.980 [DEBUG] [Thread-20404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:28:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:28:27.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:28:27.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:28:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 27, 53), 5.77, 68.63, 0.0, 14.59, 15.28, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:28:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:27:53
2025-12-25T23:28:28.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:28:28.860 [DEBUG] [Thread-20405] [transport.py] [_log()] starting thread (client mode): 0xb9559f90
2025-12-25T23:28:28.860 [DEBUG] [Thread-20405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:28:28.879 [DEBUG] [Thread-20405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:28:28.879 [INFO] [Thread-20405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:28:28.882 [DEBUG] [Thread-20405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:28:28.882 [DEBUG] [Thread-20405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:28:28.882 [DEBUG] [Thread-20405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:28:28.882 [DEBUG] [Thread-20405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:28:28.882 [DEBUG] [Thread-20405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] client lang: <none>
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] server lang: <none>
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] kex follows: False
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] Compression: none
2025-12-25T23:28:28.883 [DEBUG] [Thread-20405] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:28:28.901 [DEBUG] [Thread-20405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:28:28.901 [DEBUG] [Thread-20405] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:28:28.902 [DEBUG] [Thread-20405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:28:28.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:28:28.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:28:28.904 [DEBUG] [Thread-20405] [transport.py] [_log()] userauth is OK
2025-12-25T23:28:28.904 [DEBUG] [Thread-20405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:28:28.904 [DEBUG] [Thread-20405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:28:28.904 [DEBUG] [Thread-20405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:28:28.904 [DEBUG] [Thread-20405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:28:28.941 [INFO] [Thread-20405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:28:28.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:28:29.597 [DEBUG] [Thread-20405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:28:29.597 [DEBUG] [Thread-20405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:28:29.598 [DEBUG] [Thread-20405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:28:29.638 [DEBUG] [Thread-20405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:28:29.638 [DEBUG] [Thread-20405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:28:29.642 [DEBUG] [Thread-20405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:28:29.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:28:29.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:28:29.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:28:29.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:28:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:28:29.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:28:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:28:29.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:28:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:28:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.894507 -999.00  +15.20  10.57     73  +10.50 1 1 1 1 1     0    0 6.25 58.51 ZNESW 10.5 10.6 188.8 13.1 15.7 -22.7 15.6 -22.4 15.3 -20.8 15.7 -21.7
2025-12-25T23:28:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:28:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:28:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.894507
2025-12-25T23:28:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:28:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:28:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:28:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:28:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:28:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:27:53', tmtdew=5.77, humidity=68.63, cloud=0.0, wind=14.59, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:28:26', seeing=1.78, atlas_timestamp='2025-12-25T21:28:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.0702499999999997, 0.13525000000000098, 0.0804999999999989, 0.08249999999999957, 0.11825000000000152, 0.10999999999999943, 0.08525000000000205, 0.10500000000000043, 0.04800000000000004, 0.13824999999999932, 0.05400000000000027, 0.12950000000000017, 0.11624999999999908, 0.1120000000000001, 0.06299999999999883, 0.11624999999999908, 0.11500000000000021, 0.10799999999999876, 0.11774999999999913, 0.1479999999999979, 0.1532499999999999, 0.151250000000001, 0.11175000000000068, 0.14399999999999835, 0.10350000000000037, 0.12975000000000136, 0.1745000000000001, 0.21499999999999986, 0.17350000000000065, 0.18700000000000117, 0.1590000000000007, 0.14674999999999905], zp_timestamp='2025-12-25T21:27:00')
2025-12-25T23:28:29.669 [DEBUG] [Thread-20405] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:28:29.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-25T23:28:29.768 [DEBUG] [Thread-20408] [transport.py] [_log()] starting thread (client mode): 0xb4107580
2025-12-25T23:28:29.768 [DEBUG] [Thread-20408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:28:29.783 [DEBUG] [Thread-20408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:28:29.783 [INFO] [Thread-20408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:28:29.791 [DEBUG] [Thread-20408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:28:29.791 [DEBUG] [Thread-20408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] client lang: <none>
2025-12-25T23:28:29.792 [DEBUG] [Thread-20408] [transport.py] [_log()] server lang: <none>
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] kex follows: False
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:28:29.793 [DEBUG] [Thread-20408] [transport.py] [_log()] Compression: none
2025-12-25T23:28:29.794 [DEBUG] [Thread-20408] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:28:29.849 [DEBUG] [Thread-20408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:28:29.849 [DEBUG] [Thread-20408] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:28:29.850 [DEBUG] [Thread-20408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:28:29.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:28:29.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:28:29.904 [DEBUG] [Thread-20408] [transport.py] [_log()] userauth is OK
2025-12-25T23:28:29.905 [DEBUG] [Thread-20408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:28:29.905 [DEBUG] [Thread-20408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:28:29.906 [DEBUG] [Thread-20408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:28:29.906 [DEBUG] [Thread-20408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:28:29.924 [INFO] [Thread-20408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:28:29.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-25T23:28:29.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:28:30.744 [DEBUG] [Thread-20408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:28:30.744 [DEBUG] [Thread-20408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:28:30.792 [DEBUG] [Thread-20408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:28:30.792 [DEBUG] [Thread-20408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:28:30.802 [DEBUG] [Thread-20408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:28:30.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:28:30.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:28:30.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-25T23:28:30.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:28:30.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:28:30.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:28:30.839 [DEBUG] [Thread-20408] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:28:35.024 [DEBUG] [Thread-20410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:28:36.014 [DEBUG] [Thread-20411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:28:51.065 [DEBUG] [Thread-20412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:00.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:29:00.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:29:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:29:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 28, 57), 5.56, 69.31, 0.0, 14.8, 15.12, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:29:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:28:57
2025-12-25T23:29:01.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:29:01.842 [DEBUG] [Thread-20413] [transport.py] [_log()] starting thread (client mode): 0xb4105420
2025-12-25T23:29:01.842 [DEBUG] [Thread-20413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:29:01.861 [DEBUG] [Thread-20413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:29:01.861 [INFO] [Thread-20413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:29:01.864 [DEBUG] [Thread-20413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:29:01.864 [DEBUG] [Thread-20413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:29:01.864 [DEBUG] [Thread-20413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] client lang: <none>
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] server lang: <none>
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] kex follows: False
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:29:01.865 [DEBUG] [Thread-20413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:29:01.866 [DEBUG] [Thread-20413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:29:01.866 [DEBUG] [Thread-20413] [transport.py] [_log()] Compression: none
2025-12-25T23:29:01.866 [DEBUG] [Thread-20413] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:29:01.884 [DEBUG] [Thread-20413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:29:01.884 [DEBUG] [Thread-20413] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:29:01.885 [DEBUG] [Thread-20413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:29:01.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:29:01.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:29:01.887 [DEBUG] [Thread-20413] [transport.py] [_log()] userauth is OK
2025-12-25T23:29:01.887 [DEBUG] [Thread-20413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:29:01.887 [DEBUG] [Thread-20413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:29:01.887 [DEBUG] [Thread-20413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:29:01.887 [DEBUG] [Thread-20413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:29:01.905 [INFO] [Thread-20413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:29:01.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:29:02.524 [DEBUG] [Thread-20413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:29:02.524 [DEBUG] [Thread-20413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:29:02.525 [DEBUG] [Thread-20413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:29:02.565 [DEBUG] [Thread-20413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:29:02.565 [DEBUG] [Thread-20413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:29:02.569 [DEBUG] [Thread-20413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:29:02.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:29:02.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:29:02.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:29:02.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:29:02.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:29:02.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:29:02.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:29:02.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:29:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:29:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.894855 -999.00  +15.10  10.52     74  +10.60 1 1 1 1 1     0    0 6.15 53.30 ZNESW 11.6 10.5 187.0 13.1 15.7 -22.8 15.6 -22.7 15.3 -20.9 15.6 -21.9
2025-12-25T23:29:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:29:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:29:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.894855
2025-12-25T23:29:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:29:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:29:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:29:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:29:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:29:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:28:57', tmtdew=5.56, humidity=69.31, cloud=0.0, wind=14.8, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:28:58', seeing=1.94, atlas_timestamp='2025-12-25T21:28:35.472', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.0702499999999997, 0.13525000000000098, 0.0804999999999989, 0.08249999999999957, 0.11825000000000152, 0.10999999999999943, 0.08525000000000205, 0.10500000000000043, 0.04800000000000004, 0.13824999999999932, 0.05400000000000027, 0.12950000000000017, 0.11624999999999908, 0.1120000000000001, 0.06299999999999883, 0.11624999999999908, 0.11500000000000021, 0.10799999999999876, 0.11774999999999913, 0.1479999999999979, 0.1532499999999999, 0.151250000000001, 0.11175000000000068, 0.14399999999999835, 0.10350000000000037, 0.12975000000000136, 0.1745000000000001, 0.21499999999999986, 0.17350000000000065, 0.18700000000000117, 0.1590000000000007, 0.14674999999999905], zp_timestamp='2025-12-25T21:27:00')
2025-12-25T23:29:02.593 [DEBUG] [Thread-20413] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:29:02.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-25T23:29:02.686 [DEBUG] [Thread-20416] [transport.py] [_log()] starting thread (client mode): 0xb4104760
2025-12-25T23:29:02.687 [DEBUG] [Thread-20416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:29:02.701 [DEBUG] [Thread-20416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:29:02.701 [INFO] [Thread-20416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] client lang: <none>
2025-12-25T23:29:02.709 [DEBUG] [Thread-20416] [transport.py] [_log()] server lang: <none>
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] kex follows: False
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] Compression: none
2025-12-25T23:29:02.710 [DEBUG] [Thread-20416] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:29:02.769 [DEBUG] [Thread-20416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:29:02.769 [DEBUG] [Thread-20416] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:29:02.770 [DEBUG] [Thread-20416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:29:02.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:29:02.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:29:02.828 [DEBUG] [Thread-20416] [transport.py] [_log()] userauth is OK
2025-12-25T23:29:02.829 [DEBUG] [Thread-20416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:29:02.829 [DEBUG] [Thread-20416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:29:02.829 [DEBUG] [Thread-20416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:29:02.829 [DEBUG] [Thread-20416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:29:02.847 [INFO] [Thread-20416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:29:02.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-25T23:29:02.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:29:03.691 [DEBUG] [Thread-20416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:29:03.692 [DEBUG] [Thread-20416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:29:03.740 [DEBUG] [Thread-20416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:29:03.740 [DEBUG] [Thread-20416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:29:03.749 [DEBUG] [Thread-20416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:29:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:29:03.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-25T23:29:03.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-25T23:29:03.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:29:03.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:29:03.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:29:03.793 [DEBUG] [Thread-20416] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:29:06.094 [DEBUG] [Thread-20418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:11.399 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:11.400 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:21.147 [DEBUG] [Thread-20419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:33.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:29:33.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:29:33.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:29:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 29, 30), 5.39, 70.09, 0.0, 12.97, 15.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:29:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:29:30
2025-12-25T23:29:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:29:34.835 [DEBUG] [Thread-20420] [transport.py] [_log()] starting thread (client mode): 0xb9559480
2025-12-25T23:29:34.835 [DEBUG] [Thread-20420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:29:34.851 [DEBUG] [Thread-20420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:29:34.851 [INFO] [Thread-20420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] client lang: <none>
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] server lang: <none>
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] kex follows: False
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:29:34.854 [DEBUG] [Thread-20420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:29:34.855 [DEBUG] [Thread-20420] [transport.py] [_log()] Compression: none
2025-12-25T23:29:34.855 [DEBUG] [Thread-20420] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:29:34.870 [DEBUG] [Thread-20420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:29:34.870 [DEBUG] [Thread-20420] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:29:34.870 [DEBUG] [Thread-20420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:29:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:29:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:29:34.871 [DEBUG] [Thread-20420] [transport.py] [_log()] userauth is OK
2025-12-25T23:29:34.871 [DEBUG] [Thread-20420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:29:34.871 [DEBUG] [Thread-20420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:29:34.871 [DEBUG] [Thread-20420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:29:34.871 [DEBUG] [Thread-20420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:29:34.880 [INFO] [Thread-20420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:29:34.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:29:35.075 [DEBUG] [Thread-20422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:35.482 [DEBUG] [Thread-20420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:29:35.482 [DEBUG] [Thread-20420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:29:35.483 [DEBUG] [Thread-20420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:29:35.523 [DEBUG] [Thread-20420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:29:35.523 [DEBUG] [Thread-20420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:29:35.528 [DEBUG] [Thread-20420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:29:35.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:29:35.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:29:35.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:29:35.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:29:35.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:29:35.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:29:35.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:29:35.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.895202 -999.00  +15.10  12.35     75  +10.90 1 1 1 1 1     0    0 6.02 47.46 ZNESW 13.5 12.3 182.2 15.9 15.7 -22.8 15.5 -22.4 15.3 -20.8 15.6 -21.9
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.895202
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:29:35.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:29:30', tmtdew=5.39, humidity=70.09, cloud=0.0, wind=12.97, 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-25T23:29:30', seeing=1.94, atlas_timestamp='2025-12-25T21:29:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.0702499999999997, 0.13525000000000098, 0.0804999999999989, 0.08249999999999957, 0.11825000000000152, 0.10999999999999943, 0.08525000000000205, 0.10500000000000043, 0.04800000000000004, 0.13824999999999932, 0.05400000000000027, 0.12950000000000017, 0.11624999999999908, 0.1120000000000001, 0.06299999999999883, 0.11624999999999908, 0.11500000000000021, 0.10799999999999876, 0.11774999999999913, 0.1479999999999979, 0.1532499999999999, 0.151250000000001, 0.11175000000000068, 0.14399999999999835, 0.10350000000000037, 0.12975000000000136, 0.1745000000000001, 0.21499999999999986, 0.17350000000000065, 0.18700000000000117, 0.1590000000000007, 0.14674999999999905], zp_timestamp='2025-12-25T21:27:00')
2025-12-25T23:29:35.544 [DEBUG] [Thread-20420] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:29:35.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-25T23:29:35.629 [DEBUG] [Thread-20424] [transport.py] [_log()] starting thread (client mode): 0xb955b070
2025-12-25T23:29:35.629 [DEBUG] [Thread-20424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:29:35.644 [DEBUG] [Thread-20424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:29:35.644 [INFO] [Thread-20424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] client lang: <none>
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] server lang: <none>
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] kex follows: False
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] Compression: none
2025-12-25T23:29:35.654 [DEBUG] [Thread-20424] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:29:35.711 [DEBUG] [Thread-20424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:29:35.711 [DEBUG] [Thread-20424] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:29:35.711 [DEBUG] [Thread-20424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:29:35.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:29:35.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:29:35.769 [DEBUG] [Thread-20424] [transport.py] [_log()] userauth is OK
2025-12-25T23:29:35.769 [DEBUG] [Thread-20424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:29:35.769 [DEBUG] [Thread-20424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:29:35.769 [DEBUG] [Thread-20424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:29:35.769 [DEBUG] [Thread-20424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:29:35.782 [INFO] [Thread-20424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:29:35.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-25T23:29:35.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:29:36.175 [DEBUG] [Thread-20426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:29:36.588 [DEBUG] [Thread-20424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:29:36.588 [DEBUG] [Thread-20424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:29:36.636 [DEBUG] [Thread-20424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:29:36.636 [DEBUG] [Thread-20424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:29:36.645 [DEBUG] [Thread-20424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:29:36.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:29:36.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-25T23:29:36.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-25T23:29:36.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:29:36.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:29:36.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:29:36.677 [DEBUG] [Thread-20424] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:29:51.216 [DEBUG] [Thread-20427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:06.250 [DEBUG] [Thread-20428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:30:06.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:30:06.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:30:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 30, 2), 5.34, 70.3, 0.0, 13.13, 14.97, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:30:07.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:30:02
2025-12-25T23:30:07.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:30:07.664 [DEBUG] [Thread-20429] [transport.py] [_log()] starting thread (client mode): 0xb955bbb0
2025-12-25T23:30:07.664 [DEBUG] [Thread-20429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:30:07.684 [DEBUG] [Thread-20429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:30:07.684 [INFO] [Thread-20429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] client lang: <none>
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] server lang: <none>
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] kex follows: False
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] Compression: none
2025-12-25T23:30:07.687 [DEBUG] [Thread-20429] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:30:07.695 [DEBUG] [Thread-20429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:30:07.695 [DEBUG] [Thread-20429] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:30:07.696 [DEBUG] [Thread-20429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:30:07.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:30:07.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:30:07.698 [DEBUG] [Thread-20429] [transport.py] [_log()] userauth is OK
2025-12-25T23:30:07.698 [DEBUG] [Thread-20429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:30:07.698 [DEBUG] [Thread-20429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:30:07.698 [DEBUG] [Thread-20429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:30:07.698 [DEBUG] [Thread-20429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:30:07.715 [INFO] [Thread-20429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:30:07.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:30:10.637 [DEBUG] [Thread-20429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:30:10.638 [DEBUG] [Thread-20429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:30:10.638 [DEBUG] [Thread-20429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:30:10.678 [DEBUG] [Thread-20429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:30:10.679 [DEBUG] [Thread-20429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:30:10.681 [DEBUG] [Thread-20429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:30:10.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:30:10.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:30:10.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:30:10.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:30:10.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:30:10.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:30:10.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:30:10.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:30:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:30:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.895896 -999.00  +14.90   7.33     76  +10.80 1 1 1 1 1     0    0 5.65 36.83 ZNESW 8.0 7.3 182.0 11.3 15.6 -22.6 15.4 -22.3 15.2 -20.7 15.6 -21.7
2025-12-25T23:30:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:30:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:30:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.895896
2025-12-25T23:30:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:30:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:30:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:30:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:30:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:30:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:30:02', tmtdew=5.34, humidity=70.3, cloud=0.0, wind=13.13, 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-25T23:30:02', seeing=1.44, atlas_timestamp='2025-12-25T21:30:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.0702499999999997, 0.13525000000000098, 0.0804999999999989, 0.08249999999999957, 0.11825000000000152, 0.10999999999999943, 0.08525000000000205, 0.10500000000000043, 0.04800000000000004, 0.13824999999999932, 0.05400000000000027, 0.12950000000000017, 0.11624999999999908, 0.1120000000000001, 0.06299999999999883, 0.11624999999999908, 0.11500000000000021, 0.10799999999999876, 0.11774999999999913, 0.1479999999999979, 0.1532499999999999, 0.151250000000001, 0.11175000000000068, 0.14399999999999835, 0.10350000000000037, 0.12975000000000136, 0.1745000000000001, 0.21499999999999986, 0.17350000000000065, 0.18700000000000117, 0.1590000000000007, 0.14674999999999905], zp_timestamp='2025-12-25T21:27:00')
2025-12-25T23:30:10.707 [DEBUG] [Thread-20429] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:30:10.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-25T23:30:10.800 [DEBUG] [Thread-20432] [transport.py] [_log()] starting thread (client mode): 0xb4105c00
2025-12-25T23:30:10.800 [DEBUG] [Thread-20432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:30:10.815 [DEBUG] [Thread-20432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:30:10.815 [INFO] [Thread-20432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] client lang: <none>
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] server lang: <none>
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] kex follows: False
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:30:10.823 [DEBUG] [Thread-20432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:30:10.824 [DEBUG] [Thread-20432] [transport.py] [_log()] Compression: none
2025-12-25T23:30:10.824 [DEBUG] [Thread-20432] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:30:10.880 [DEBUG] [Thread-20432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:30:10.880 [DEBUG] [Thread-20432] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:30:10.881 [DEBUG] [Thread-20432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:30:10.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:30:10.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:30:10.936 [DEBUG] [Thread-20432] [transport.py] [_log()] userauth is OK
2025-12-25T23:30:10.936 [DEBUG] [Thread-20432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:30:10.936 [DEBUG] [Thread-20432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:30:10.936 [DEBUG] [Thread-20432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:30:10.936 [DEBUG] [Thread-20432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:30:10.955 [INFO] [Thread-20432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:30:10.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-25T23:30:10.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:30:11.600 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:11.601 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:11.789 [DEBUG] [Thread-20432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:30:11.789 [DEBUG] [Thread-20432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:30:11.837 [DEBUG] [Thread-20432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:30:11.837 [DEBUG] [Thread-20432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:30:11.845 [DEBUG] [Thread-20432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:30:11.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:30:11.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:30:11.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-25T23:30:11.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:30:11.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:30:11.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:30:11.877 [DEBUG] [Thread-20432] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:30:21.283 [DEBUG] [Thread-20434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:35.126 [DEBUG] [Thread-20435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:36.332 [DEBUG] [Thread-20436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:30:41.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:30:41.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:30:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:30:42.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 30, 34), 4.89, 72.27, 0.0, 12.49, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:30:42.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:30:34
2025-12-25T23:30:42.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:30:42.883 [DEBUG] [Thread-20437] [transport.py] [_log()] starting thread (client mode): 0xb4104d60
2025-12-25T23:30:42.883 [DEBUG] [Thread-20437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:30:42.903 [DEBUG] [Thread-20437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:30:42.903 [INFO] [Thread-20437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:30:42.906 [DEBUG] [Thread-20437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:30:42.906 [DEBUG] [Thread-20437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:30:42.906 [DEBUG] [Thread-20437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:30:42.906 [DEBUG] [Thread-20437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:42.906 [DEBUG] [Thread-20437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:42.906 [DEBUG] [Thread-20437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] client lang: <none>
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] server lang: <none>
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] kex follows: False
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] Compression: none
2025-12-25T23:30:42.907 [DEBUG] [Thread-20437] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:30:42.925 [DEBUG] [Thread-20437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:30:42.925 [DEBUG] [Thread-20437] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:30:42.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:30:42.926 [DEBUG] [Thread-20437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:30:42.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:30:42.969 [DEBUG] [Thread-20437] [transport.py] [_log()] userauth is OK
2025-12-25T23:30:42.969 [DEBUG] [Thread-20437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:30:42.969 [DEBUG] [Thread-20437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:30:42.969 [DEBUG] [Thread-20437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:30:42.970 [DEBUG] [Thread-20437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:30:42.995 [INFO] [Thread-20437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:30:42.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:30:43.604 [DEBUG] [Thread-20437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:30:43.604 [DEBUG] [Thread-20437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:30:43.604 [DEBUG] [Thread-20437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:30:43.645 [DEBUG] [Thread-20437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:30:43.645 [DEBUG] [Thread-20437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:30:43.649 [DEBUG] [Thread-20437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:30:43.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:30:43.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:30:43.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:30:43.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:30:43.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:30:43.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:30:43.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:30:43.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:30:43.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:30:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.895896 -999.00  +14.90   7.33     76  +10.80 1 1 1 1 1     0    0 5.65 36.83 ZNESW 8.0 7.3 182.0 11.3 15.6 -22.6 15.4 -22.3 15.2 -20.7 15.6 -21.7
2025-12-25T23:30:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:30:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:30:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.895896
2025-12-25T23:30:43.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:30:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:30:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:30:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:30:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:30:43.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:30:34', tmtdew=4.89, humidity=72.27, cloud=0.0, wind=12.49, 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-25T23:30:34', seeing=1.53, atlas_timestamp='2025-12-25T21:30:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08474999999999966, 0.0702499999999997, 0.13525000000000098, 0.0804999999999989, 0.08249999999999957, 0.11825000000000152, 0.10999999999999943, 0.08525000000000205, 0.10500000000000043, 0.04800000000000004, 0.13824999999999932, 0.05400000000000027, 0.12950000000000017, 0.11624999999999908, 0.1120000000000001, 0.06299999999999883, 0.11624999999999908, 0.11500000000000021, 0.10799999999999876, 0.11774999999999913, 0.1479999999999979, 0.1532499999999999, 0.151250000000001, 0.11175000000000068, 0.14399999999999835, 0.10350000000000037, 0.12975000000000136, 0.1745000000000001, 0.21499999999999986, 0.17350000000000065, 0.18700000000000117, 0.1590000000000007, 0.14674999999999905], zp_timestamp='2025-12-25T21:27:00')
2025-12-25T23:30:43.676 [DEBUG] [Thread-20437] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:30:43.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-25T23:30:43.783 [DEBUG] [Thread-20440] [transport.py] [_log()] starting thread (client mode): 0xb957b220
2025-12-25T23:30:43.783 [DEBUG] [Thread-20440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:30:43.803 [DEBUG] [Thread-20440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:30:43.803 [INFO] [Thread-20440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] client lang: <none>
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] server lang: <none>
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] kex follows: False
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] Compression: none
2025-12-25T23:30:43.811 [DEBUG] [Thread-20440] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:30:43.868 [DEBUG] [Thread-20440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:30:43.868 [DEBUG] [Thread-20440] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:30:43.868 [DEBUG] [Thread-20440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:30:43.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:30:43.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:30:43.925 [DEBUG] [Thread-20440] [transport.py] [_log()] userauth is OK
2025-12-25T23:30:43.925 [DEBUG] [Thread-20440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:30:43.925 [DEBUG] [Thread-20440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:30:43.925 [DEBUG] [Thread-20440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:30:43.925 [DEBUG] [Thread-20440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:30:43.944 [INFO] [Thread-20440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:30:43.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-25T23:30:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:30:44.770 [DEBUG] [Thread-20440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:30:44.770 [DEBUG] [Thread-20440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:30:44.818 [DEBUG] [Thread-20440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:30:44.818 [DEBUG] [Thread-20440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:30:44.828 [DEBUG] [Thread-20440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:30:44.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:30:44.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-25T23:30:44.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-25T23:30:44.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:30:44.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:30:44.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:30:44.866 [DEBUG] [Thread-20440] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:30:51.361 [DEBUG] [Thread-20442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:06.401 [DEBUG] [Thread-20443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:11.804 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:11.805 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:31:14.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:31:14.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-25T23:31:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 31, 6), 4.84, 72.55, 0.0, 13.39, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:31:15.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:31:06
2025-12-25T23:31:15.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:31:15.889 [DEBUG] [Thread-20444] [transport.py] [_log()] starting thread (client mode): 0xb957add0
2025-12-25T23:31:15.889 [DEBUG] [Thread-20444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:31:15.909 [DEBUG] [Thread-20444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:31:15.909 [INFO] [Thread-20444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] client lang: <none>
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] server lang: <none>
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] kex follows: False
2025-12-25T23:31:15.912 [DEBUG] [Thread-20444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:31:15.913 [DEBUG] [Thread-20444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:31:15.913 [DEBUG] [Thread-20444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:31:15.913 [DEBUG] [Thread-20444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:31:15.913 [DEBUG] [Thread-20444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:31:15.913 [DEBUG] [Thread-20444] [transport.py] [_log()] Compression: none
2025-12-25T23:31:15.913 [DEBUG] [Thread-20444] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:31:15.930 [DEBUG] [Thread-20444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:31:15.930 [DEBUG] [Thread-20444] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:31:15.931 [DEBUG] [Thread-20444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:31:15.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:31:15.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:31:15.933 [DEBUG] [Thread-20444] [transport.py] [_log()] userauth is OK
2025-12-25T23:31:15.933 [DEBUG] [Thread-20444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:31:15.933 [DEBUG] [Thread-20444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:31:15.933 [DEBUG] [Thread-20444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:31:15.933 [DEBUG] [Thread-20444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:31:15.957 [INFO] [Thread-20444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:31:15.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:31:16.695 [DEBUG] [Thread-20444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:31:16.696 [DEBUG] [Thread-20444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:31:16.696 [DEBUG] [Thread-20444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:31:16.737 [DEBUG] [Thread-20444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:31:16.737 [DEBUG] [Thread-20444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:31:16.741 [DEBUG] [Thread-20444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:31:16.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:31:16.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:31:16.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:31:16.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:31:16.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:31:16.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:31:16.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:31:16.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:31:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:31:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.896243 -999.00  +14.90   7.07     76  +10.80 1 1 1 1 1     0    0 5.43 29.29 ZNESW 10.5 7.1 202.1 9.7 15.6 -22.8 15.4 -22.2 15.2 -20.8 -999.0 -999.0
2025-12-25T23:31:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:31:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:31:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.896243
2025-12-25T23:31:16.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:31:16.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:31:16.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:31:16.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:31:16.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:31:16.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:31:06', tmtdew=4.84, humidity=72.55, cloud=0.0, wind=13.39, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:31:06', seeing=1.71, atlas_timestamp='2025-12-25T21:30:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:29:00')
2025-12-25T23:31:16.768 [DEBUG] [Thread-20444] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:31:16.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-25T23:31:16.860 [DEBUG] [Thread-20447] [transport.py] [_log()] starting thread (client mode): 0xb4106ec0
2025-12-25T23:31:16.861 [DEBUG] [Thread-20447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:31:16.875 [DEBUG] [Thread-20447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:31:16.876 [INFO] [Thread-20447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:31:16.884 [DEBUG] [Thread-20447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:31:16.884 [DEBUG] [Thread-20447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] client lang: <none>
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] server lang: <none>
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] kex follows: False
2025-12-25T23:31:16.885 [DEBUG] [Thread-20447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:31:16.886 [DEBUG] [Thread-20447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:31:16.886 [DEBUG] [Thread-20447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:31:16.886 [DEBUG] [Thread-20447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:31:16.886 [DEBUG] [Thread-20447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:31:16.886 [DEBUG] [Thread-20447] [transport.py] [_log()] Compression: none
2025-12-25T23:31:16.886 [DEBUG] [Thread-20447] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:31:16.941 [DEBUG] [Thread-20447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:31:16.942 [DEBUG] [Thread-20447] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:31:16.942 [DEBUG] [Thread-20447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:31:16.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:31:16.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:31:17.000 [DEBUG] [Thread-20447] [transport.py] [_log()] userauth is OK
2025-12-25T23:31:17.001 [DEBUG] [Thread-20447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:31:17.001 [DEBUG] [Thread-20447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:31:17.001 [DEBUG] [Thread-20447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:31:17.001 [DEBUG] [Thread-20447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:31:17.020 [INFO] [Thread-20447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:31:17.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-25T23:31:17.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:31:17.872 [DEBUG] [Thread-20447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:31:17.873 [DEBUG] [Thread-20447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:31:17.921 [DEBUG] [Thread-20447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:31:17.922 [DEBUG] [Thread-20447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:31:17.931 [DEBUG] [Thread-20447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:31:17.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:31:17.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:31: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-25T23:31:17.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:31:17.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:31:17.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:31:17.969 [DEBUG] [Thread-20447] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:31:21.436 [DEBUG] [Thread-20449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:23.428 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:32.169 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:35.178 [DEBUG] [Thread-20450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:36.294 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:36.491 [DEBUG] [Thread-20451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:31:47.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:31:47.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:31:47.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-25T23:31:48.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 31, 38), 4.8, 72.97, 0.0, 10.73, 14.55, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:31:48.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:31:38
2025-12-25T23:31:48.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:31:49.005 [DEBUG] [Thread-20452] [transport.py] [_log()] starting thread (client mode): 0xb955bfd0
2025-12-25T23:31:49.006 [DEBUG] [Thread-20452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:31:49.026 [DEBUG] [Thread-20452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:31:49.026 [INFO] [Thread-20452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:31:49.029 [DEBUG] [Thread-20452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:31:49.029 [DEBUG] [Thread-20452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:31:49.029 [DEBUG] [Thread-20452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] client lang: <none>
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] server lang: <none>
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] kex follows: False
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] Compression: none
2025-12-25T23:31:49.030 [DEBUG] [Thread-20452] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:31:49.047 [DEBUG] [Thread-20452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:31:49.047 [DEBUG] [Thread-20452] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:31:49.047 [DEBUG] [Thread-20452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:31:49.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:31:49.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:31:49.049 [DEBUG] [Thread-20452] [transport.py] [_log()] userauth is OK
2025-12-25T23:31:49.049 [DEBUG] [Thread-20452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:31:49.049 [DEBUG] [Thread-20452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:31:49.049 [DEBUG] [Thread-20452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:31:49.049 [DEBUG] [Thread-20452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:31:49.072 [INFO] [Thread-20452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:31:49.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:31:49.711 [DEBUG] [Thread-20452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:31:49.711 [DEBUG] [Thread-20452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:31:49.712 [DEBUG] [Thread-20452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:31:49.752 [DEBUG] [Thread-20452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:31:49.752 [DEBUG] [Thread-20452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:31:49.756 [DEBUG] [Thread-20452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:31:49.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:31:49.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:31:49.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:31:49.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:31:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:31:49.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:31:49.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:31:49.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:31:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:31:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.896591 -999.00  +14.80   4.05     76  +10.80 1 1 1 1 1     0    0 5.30 22.93 ZNESW 5.2 4.0 271.7 10.8 15.5 -22.7 15.4 -22.2 15.3 -20.7 15.6 -21.7
2025-12-25T23:31:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:31:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:31:49.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.896591
2025-12-25T23:31:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:31:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:31:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:31:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:31:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:31:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:31:38', tmtdew=4.8, humidity=72.97, cloud=0.0, wind=10.73, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:31:38', seeing=1.77, atlas_timestamp='2025-12-25T21:31:05.462', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:29:00')
2025-12-25T23:31:49.782 [DEBUG] [Thread-20452] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:31: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-25T23:31:49.875 [DEBUG] [Thread-20455] [transport.py] [_log()] starting thread (client mode): 0xb4104df0
2025-12-25T23:31:49.876 [DEBUG] [Thread-20455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:31:49.890 [DEBUG] [Thread-20455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:31:49.890 [INFO] [Thread-20455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:31:49.898 [DEBUG] [Thread-20455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:31:49.898 [DEBUG] [Thread-20455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:31:49.898 [DEBUG] [Thread-20455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:31:49.898 [DEBUG] [Thread-20455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:49.898 [DEBUG] [Thread-20455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:31:49.898 [DEBUG] [Thread-20455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] client lang: <none>
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] server lang: <none>
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] kex follows: False
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] Compression: none
2025-12-25T23:31:49.899 [DEBUG] [Thread-20455] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:31:49.956 [DEBUG] [Thread-20455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:31:49.957 [DEBUG] [Thread-20455] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:31:49.957 [DEBUG] [Thread-20455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:31:49.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:31:49.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:31:50.017 [DEBUG] [Thread-20455] [transport.py] [_log()] userauth is OK
2025-12-25T23:31:50.017 [DEBUG] [Thread-20455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:31:50.017 [DEBUG] [Thread-20455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:31:50.017 [DEBUG] [Thread-20455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:31:50.018 [DEBUG] [Thread-20455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:31:50.037 [INFO] [Thread-20455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:31:50.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-25T23:31:50.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:31:50.865 [DEBUG] [Thread-20455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:31:50.865 [DEBUG] [Thread-20455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:31:50.913 [DEBUG] [Thread-20455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:31:50.913 [DEBUG] [Thread-20455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:31:50.922 [DEBUG] [Thread-20455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:31:50.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:31:50.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:31:50.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-25T23:31:50.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:31:50.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:31:50.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:31:50.958 [DEBUG] [Thread-20455] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:31:51.531 [DEBUG] [Thread-20457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:06.593 [DEBUG] [Thread-20458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:12.005 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:12.005 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:20.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:32:20.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:32:20.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-25T23:32:21.619 [DEBUG] [Thread-20459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 32, 10), 4.87, 72.65, 0.0, 10.94, 14.59, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:32:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:32:10
2025-12-25T23:32:21.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:32:21.959 [DEBUG] [Thread-20460] [transport.py] [_log()] starting thread (client mode): 0xb4106b60
2025-12-25T23:32:21.959 [DEBUG] [Thread-20460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:32:21.979 [DEBUG] [Thread-20460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:32:21.979 [INFO] [Thread-20460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] client lang: <none>
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] server lang: <none>
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] kex follows: False
2025-12-25T23:32:21.982 [DEBUG] [Thread-20460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:32:21.983 [DEBUG] [Thread-20460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:32:21.983 [DEBUG] [Thread-20460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:32:21.983 [DEBUG] [Thread-20460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:32:21.983 [DEBUG] [Thread-20460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:32:21.983 [DEBUG] [Thread-20460] [transport.py] [_log()] Compression: none
2025-12-25T23:32:21.983 [DEBUG] [Thread-20460] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:32:21.994 [DEBUG] [Thread-20460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:32:21.994 [DEBUG] [Thread-20460] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:32:21.995 [DEBUG] [Thread-20460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:32:21.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:32:21.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:32:21.995 [DEBUG] [Thread-20460] [transport.py] [_log()] userauth is OK
2025-12-25T23:32:21.995 [DEBUG] [Thread-20460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:32:21.995 [DEBUG] [Thread-20460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:32:21.995 [DEBUG] [Thread-20460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:32:21.995 [DEBUG] [Thread-20460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:32:22.004 [INFO] [Thread-20460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:32:22.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:32:22.767 [DEBUG] [Thread-20460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:32:22.767 [DEBUG] [Thread-20460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:32:22.768 [DEBUG] [Thread-20460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:32:22.808 [DEBUG] [Thread-20460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:32:22.808 [DEBUG] [Thread-20460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:32:22.811 [DEBUG] [Thread-20460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:32:22.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:32:22.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:32:22.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:32:22.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:32:22.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:32:22.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:32:22.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:32:22.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:32:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:32:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.896938 -999.00  +14.80   5.61     76  +10.80 1 1 1 1 1     0    0 5.09 16.66 ZNESW 5.2 5.6 214.7 11.3 15.5 -22.6 15.4 -22.2 15.2 -20.7 15.5 -21.8
2025-12-25T23:32:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:32:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:32:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.896938
2025-12-25T23:32:22.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:32:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:32:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:32:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:32:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:32:22.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:32:10', tmtdew=4.87, humidity=72.65, cloud=0.0, wind=10.94, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:32:10', seeing=1.37, atlas_timestamp='2025-12-25T21:31:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:29:00')
2025-12-25T23:32:22.837 [DEBUG] [Thread-20460] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:32:22.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-25T23:32:22.931 [DEBUG] [Thread-20463] [transport.py] [_log()] starting thread (client mode): 0xd88c71f0
2025-12-25T23:32:22.931 [DEBUG] [Thread-20463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:32:22.949 [DEBUG] [Thread-20463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:32:22.949 [INFO] [Thread-20463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:32:22.956 [DEBUG] [Thread-20463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:32:22.956 [DEBUG] [Thread-20463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] client lang: <none>
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] server lang: <none>
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] kex follows: False
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] Compression: none
2025-12-25T23:32:22.957 [DEBUG] [Thread-20463] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:32:23.017 [DEBUG] [Thread-20463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:32:23.018 [DEBUG] [Thread-20463] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:32:23.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:32:23.019 [DEBUG] [Thread-20463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:32:23.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:32:23.077 [DEBUG] [Thread-20463] [transport.py] [_log()] userauth is OK
2025-12-25T23:32:23.078 [DEBUG] [Thread-20463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:32:23.078 [DEBUG] [Thread-20463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:32:23.078 [DEBUG] [Thread-20463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:32:23.078 [DEBUG] [Thread-20463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:32:23.098 [INFO] [Thread-20463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:32:23.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-25T23:32:23.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:32:23.942 [DEBUG] [Thread-20463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:32:23.942 [DEBUG] [Thread-20463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:32:23.990 [DEBUG] [Thread-20463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:32:23.990 [DEBUG] [Thread-20463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:32:23.999 [DEBUG] [Thread-20463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:32:24.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:32: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')
2025-12-25T23:32:24.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-25T23:32:24.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:32:24.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:32:24.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:32:24.033 [DEBUG] [Thread-20463] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:32:35.235 [DEBUG] [Thread-20465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:36.655 [DEBUG] [Thread-20466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:51.701 [DEBUG] [Thread-20467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:32:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:32:54.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:32:54.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-25T23:32:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 32, 42), 4.9, 72.52, 0.0, 11.81, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:32:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:32:42
2025-12-25T23:32:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:32:55.032 [DEBUG] [Thread-20468] [transport.py] [_log()] starting thread (client mode): 0xb957a110
2025-12-25T23:32:55.032 [DEBUG] [Thread-20468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:32:55.052 [DEBUG] [Thread-20468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:32:55.052 [INFO] [Thread-20468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:32:55.055 [DEBUG] [Thread-20468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] client lang: <none>
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] server lang: <none>
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] kex follows: False
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] Compression: none
2025-12-25T23:32:55.056 [DEBUG] [Thread-20468] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:32:55.074 [DEBUG] [Thread-20468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:32:55.075 [DEBUG] [Thread-20468] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:32:55.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:32:55.076 [DEBUG] [Thread-20468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:32:55.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:32:55.078 [DEBUG] [Thread-20468] [transport.py] [_log()] userauth is OK
2025-12-25T23:32:55.078 [DEBUG] [Thread-20468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:32:55.078 [DEBUG] [Thread-20468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:32:55.078 [DEBUG] [Thread-20468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:32:55.078 [DEBUG] [Thread-20468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:32:55.095 [INFO] [Thread-20468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:32:55.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:32:55.683 [DEBUG] [Thread-20468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:32:55.684 [DEBUG] [Thread-20468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:32:55.684 [DEBUG] [Thread-20468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:32:55.725 [DEBUG] [Thread-20468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:32:55.725 [DEBUG] [Thread-20468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:32:55.728 [DEBUG] [Thread-20468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:32:55.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:32:55.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:32:55.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:32:55.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:32:55.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:32:55.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:32:55.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:32:55.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.897285 -999.00  +14.80   8.04     76  +10.70 1 1 1 1 1     0    0 4.98 11.54 ZNESW 8.0 8.0 204.8 9.9 15.5 -22.6 15.4 -22.1 15.2 -20.5 15.5 -21.8
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.897285
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:32:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:32:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:32:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:32:42', tmtdew=4.9, humidity=72.52, cloud=0.0, wind=11.81, 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-25T23:32:42', seeing=1.75, atlas_timestamp='2025-12-25T21:32:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:29:00')
2025-12-25T23:32:55.752 [DEBUG] [Thread-20468] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:32:55.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-25T23:32:55.849 [DEBUG] [Thread-20471] [transport.py] [_log()] starting thread (client mode): 0xb4105660
2025-12-25T23:32:55.849 [DEBUG] [Thread-20471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:32:55.864 [DEBUG] [Thread-20471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:32:55.864 [INFO] [Thread-20471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:32:55.872 [DEBUG] [Thread-20471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] client lang: <none>
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] server lang: <none>
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] kex follows: False
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:32:55.873 [DEBUG] [Thread-20471] [transport.py] [_log()] Compression: none
2025-12-25T23:32:55.874 [DEBUG] [Thread-20471] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:32:55.934 [DEBUG] [Thread-20471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:32:55.934 [DEBUG] [Thread-20471] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:32:55.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:32:55.936 [DEBUG] [Thread-20471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:32:55.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:32:55.993 [DEBUG] [Thread-20471] [transport.py] [_log()] userauth is OK
2025-12-25T23:32:55.994 [DEBUG] [Thread-20471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:32:55.994 [DEBUG] [Thread-20471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:32:55.994 [DEBUG] [Thread-20471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:32:55.994 [DEBUG] [Thread-20471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:32:56.012 [INFO] [Thread-20471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:32: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-25T23:32:56.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:32:56.859 [DEBUG] [Thread-20471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:32:56.860 [DEBUG] [Thread-20471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:32:56.907 [DEBUG] [Thread-20471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:32:56.908 [DEBUG] [Thread-20471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:32:56.917 [DEBUG] [Thread-20471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:32:56.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:32:56.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:32:56.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-25T23:32:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:32:56.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:32:56.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:32:56.956 [DEBUG] [Thread-20471] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:33:06.733 [DEBUG] [Thread-20473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:33:12.206 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:33:12.207 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:33:21.787 [DEBUG] [Thread-20474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:33:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:33:26.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:33:26.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-25T23:33:27.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 33, 14), 4.86, 72.7, 0.0, 12.46, 14.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:33:27.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:33:14
2025-12-25T23:33:27.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:33:28.013 [DEBUG] [Thread-20475] [transport.py] [_log()] starting thread (client mode): 0xb957b070
2025-12-25T23:33:28.014 [DEBUG] [Thread-20475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:33:28.035 [DEBUG] [Thread-20475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:33:28.035 [INFO] [Thread-20475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] client lang: <none>
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] server lang: <none>
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] kex follows: False
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] Compression: none
2025-12-25T23:33:28.039 [DEBUG] [Thread-20475] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:33:28.053 [DEBUG] [Thread-20475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:33:28.054 [DEBUG] [Thread-20475] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:33:28.054 [DEBUG] [Thread-20475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:33:28.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:33:28.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:33:28.054 [DEBUG] [Thread-20475] [transport.py] [_log()] userauth is OK
2025-12-25T23:33:28.054 [DEBUG] [Thread-20475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:33:28.054 [DEBUG] [Thread-20475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:33:28.054 [DEBUG] [Thread-20475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:33:28.055 [DEBUG] [Thread-20475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:33:28.063 [INFO] [Thread-20475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:33:28.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:33:28.929 [DEBUG] [Thread-20475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:33:28.929 [DEBUG] [Thread-20475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:33:28.929 [DEBUG] [Thread-20475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:33:28.970 [DEBUG] [Thread-20475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:33:28.970 [DEBUG] [Thread-20475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:33:28.972 [DEBUG] [Thread-20475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:33:28.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:33:28.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:33:28.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:33:28.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:33:28.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:33:28.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:33:28.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.897632 -999.00  +14.80   8.85     76  +10.70 1 1 1 1 1     0    0 4.76 6.80 ZNESW 9.3 8.8 197.4 10.1 15.5 -22.8 15.4 -22.5 15.2 -20.8 15.4 -21.9
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.897632
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:33:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:33:14', tmtdew=4.86, humidity=72.7, cloud=0.0, wind=12.46, 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-25T23:33:14', seeing=1.56, atlas_timestamp='2025-12-25T21:32:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:29:00')
2025-12-25T23:33:28.992 [DEBUG] [Thread-20475] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:33:29.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-25T23:33:29.077 [DEBUG] [Thread-20478] [transport.py] [_log()] starting thread (client mode): 0xb4106c50
2025-12-25T23:33:29.077 [DEBUG] [Thread-20478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:33:29.091 [DEBUG] [Thread-20478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:33:29.091 [INFO] [Thread-20478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] client lang: <none>
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] server lang: <none>
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] kex follows: False
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] Compression: none
2025-12-25T23:33:29.099 [DEBUG] [Thread-20478] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:33:29.159 [DEBUG] [Thread-20478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:33:29.159 [DEBUG] [Thread-20478] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:33:29.159 [DEBUG] [Thread-20478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:33:29.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:33:29.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:33:29.216 [DEBUG] [Thread-20478] [transport.py] [_log()] userauth is OK
2025-12-25T23:33:29.216 [DEBUG] [Thread-20478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:33:29.216 [DEBUG] [Thread-20478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:33:29.216 [DEBUG] [Thread-20478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:33:29.216 [DEBUG] [Thread-20478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:33:29.230 [INFO] [Thread-20478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:33:29.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-25T23:33:29.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:33:30.120 [DEBUG] [Thread-20478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:33:30.120 [DEBUG] [Thread-20478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:33:30.168 [DEBUG] [Thread-20478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:33:30.168 [DEBUG] [Thread-20478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:33:30.177 [DEBUG] [Thread-20478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:33:30.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:33:30.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-25T23:33:30.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-25T23:33:30.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:33:30.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:33:30.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:33:30.209 [DEBUG] [Thread-20478] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:33:35.294 [DEBUG] [Thread-20480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:33:36.824 [DEBUG] [Thread-20481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:33:51.900 [DEBUG] [Thread-20482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:00.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:34:00.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:34:00.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-25T23:34:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 33, 46), 4.85, 72.98, 0.0, 12.42, 14.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:34:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:33:46
2025-12-25T23:34:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:34:01.224 [DEBUG] [Thread-20483] [transport.py] [_log()] starting thread (client mode): 0xb957ae60
2025-12-25T23:34:01.224 [DEBUG] [Thread-20483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:34:01.244 [DEBUG] [Thread-20483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:34:01.244 [INFO] [Thread-20483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] client lang: <none>
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] server lang: <none>
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] kex follows: False
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] Compression: none
2025-12-25T23:34:01.247 [DEBUG] [Thread-20483] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:34:01.261 [DEBUG] [Thread-20483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:34:01.261 [DEBUG] [Thread-20483] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:34:01.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:34:01.261 [DEBUG] [Thread-20483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:34:01.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:34:01.262 [DEBUG] [Thread-20483] [transport.py] [_log()] userauth is OK
2025-12-25T23:34:01.262 [DEBUG] [Thread-20483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:34:01.262 [DEBUG] [Thread-20483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:34:01.262 [DEBUG] [Thread-20483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:34:01.262 [DEBUG] [Thread-20483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:34:01.278 [INFO] [Thread-20483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:34:01.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:34:01.902 [DEBUG] [Thread-20483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:34:01.902 [DEBUG] [Thread-20483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:34:01.902 [DEBUG] [Thread-20483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:34:01.942 [DEBUG] [Thread-20483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:34:01.942 [DEBUG] [Thread-20483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:34:01.945 [DEBUG] [Thread-20483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:34:01.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:34:01.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:34:01.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:34:01.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:34:01.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:34:01.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:34:01.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.898327 -999.00  +14.80  12.28     76  +10.70 1 1 1 1 1     0    0 4.40 -2.59 ZNESW 11.4 12.3 180.4 14.0 15.5 -23.1 15.3 -23.1 15.2 -21.1 15.4 -22.1
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.898327
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:34:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:33:46', tmtdew=4.85, humidity=72.98, cloud=0.0, wind=12.42, 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-25T23:33:47', seeing=1.56, atlas_timestamp='2025-12-25T21:33:35.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:29:00')
2025-12-25T23:34:01.965 [DEBUG] [Thread-20483] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:34:02.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-25T23:34:02.046 [DEBUG] [Thread-20486] [transport.py] [_log()] starting thread (client mode): 0xb9579930
2025-12-25T23:34:02.046 [DEBUG] [Thread-20486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:34:02.060 [DEBUG] [Thread-20486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:34:02.060 [INFO] [Thread-20486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] client lang: <none>
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] server lang: <none>
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] kex follows: False
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] Compression: none
2025-12-25T23:34:02.068 [DEBUG] [Thread-20486] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:34:02.125 [DEBUG] [Thread-20486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:34:02.125 [DEBUG] [Thread-20486] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:34:02.126 [DEBUG] [Thread-20486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:34:02.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:34:02.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:34:02.181 [DEBUG] [Thread-20486] [transport.py] [_log()] userauth is OK
2025-12-25T23:34:02.181 [DEBUG] [Thread-20486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:34:02.181 [DEBUG] [Thread-20486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:34:02.181 [DEBUG] [Thread-20486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:34:02.181 [DEBUG] [Thread-20486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:34:02.199 [INFO] [Thread-20486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:34:02.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-25T23:34:02.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:34:03.100 [DEBUG] [Thread-20486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:34:03.101 [DEBUG] [Thread-20486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:34:03.149 [DEBUG] [Thread-20486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:34:03.149 [DEBUG] [Thread-20486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:34:03.158 [DEBUG] [Thread-20486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:34:03.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:34:03.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-25T23:34:03.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-25T23:34:03.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:34:03.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:34:03.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:34:03.194 [DEBUG] [Thread-20486] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:34:06.933 [DEBUG] [Thread-20488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:12.410 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:12.411 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:21.981 [DEBUG] [Thread-20489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:33.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:34:33.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:34:33.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-25T23:34:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 34, 18), 4.82, 73.1, 0.0, 11.87, 14.6, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:34:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:34:18
2025-12-25T23:34:34.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:34:34.207 [DEBUG] [Thread-20490] [transport.py] [_log()] starting thread (client mode): 0xb95793f0
2025-12-25T23:34:34.207 [DEBUG] [Thread-20490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:34:34.227 [DEBUG] [Thread-20490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:34:34.227 [INFO] [Thread-20490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] client lang: <none>
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] server lang: <none>
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] kex follows: False
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] Compression: none
2025-12-25T23:34:34.229 [DEBUG] [Thread-20490] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:34:34.242 [DEBUG] [Thread-20490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:34:34.242 [DEBUG] [Thread-20490] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:34:34.242 [DEBUG] [Thread-20490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:34:34.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:34:34.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:34:34.244 [DEBUG] [Thread-20490] [transport.py] [_log()] userauth is OK
2025-12-25T23:34:34.244 [DEBUG] [Thread-20490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:34:34.244 [DEBUG] [Thread-20490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:34:34.244 [DEBUG] [Thread-20490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:34:34.244 [DEBUG] [Thread-20490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:34:34.263 [INFO] [Thread-20490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:34:34.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:34:34.935 [DEBUG] [Thread-20490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:34:34.936 [DEBUG] [Thread-20490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:34:34.936 [DEBUG] [Thread-20490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:34:34.977 [DEBUG] [Thread-20490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:34:34.977 [DEBUG] [Thread-20490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:34:34.981 [DEBUG] [Thread-20490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:34:34.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:34:34.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:34:34.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:34:34.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:34:35.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:34:35.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:34:35.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:34:35.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:34:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:34:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.898674 -999.00  +14.70  10.22     77  +10.70 1 1 1 1 1     0    0 4.32 -6.51 ZNESW 12.2 10.2 179.4 15.4 15.5 -23.1 15.3 -22.8 15.1 -21.0 15.4 -22.3
2025-12-25T23:34:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:34:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:34:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.898674
2025-12-25T23:34:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:34:35.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:34:35.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:34:35.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:34:35.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:34:35.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:34:18', tmtdew=4.82, humidity=73.1, cloud=0.0, wind=11.87, 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-25T23:34:19', seeing=1.46, atlas_timestamp='2025-12-25T21:34:05.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:32:00')
2025-12-25T23:34:35.007 [DEBUG] [Thread-20490] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:34:35.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-25T23:34:35.103 [DEBUG] [Thread-20493] [transport.py] [_log()] starting thread (client mode): 0xb957ae60
2025-12-25T23:34:35.104 [DEBUG] [Thread-20493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:34:35.123 [DEBUG] [Thread-20493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:34:35.123 [INFO] [Thread-20493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:34:35.131 [DEBUG] [Thread-20493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:34:35.131 [DEBUG] [Thread-20493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:34:35.131 [DEBUG] [Thread-20493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:34:35.131 [DEBUG] [Thread-20493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:35.131 [DEBUG] [Thread-20493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] client lang: <none>
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] server lang: <none>
2025-12-25T23:34:35.132 [DEBUG] [Thread-20493] [transport.py] [_log()] kex follows: False
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] Compression: none
2025-12-25T23:34:35.133 [DEBUG] [Thread-20493] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:34:35.189 [DEBUG] [Thread-20493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:34:35.190 [DEBUG] [Thread-20493] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:34:35.190 [DEBUG] [Thread-20493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:34:35.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:34:35.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:34:35.245 [DEBUG] [Thread-20493] [transport.py] [_log()] userauth is OK
2025-12-25T23:34:35.245 [DEBUG] [Thread-20493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:34:35.246 [DEBUG] [Thread-20493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:34:35.246 [DEBUG] [Thread-20493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:34:35.246 [DEBUG] [Thread-20493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:34:35.264 [INFO] [Thread-20493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:34:35.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-25T23:34:35.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:34:35.362 [DEBUG] [Thread-20495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:36.129 [DEBUG] [Thread-20493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:34:36.129 [DEBUG] [Thread-20493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:34:36.177 [DEBUG] [Thread-20493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:34:36.177 [DEBUG] [Thread-20493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:34:36.186 [DEBUG] [Thread-20493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:34:36.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:34:36.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-25T23:34:36.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-25T23:34:36.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:34:36.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:34:36.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:34:36.226 [DEBUG] [Thread-20493] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:34:37.011 [DEBUG] [Thread-20496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:34:52.050 [DEBUG] [Thread-20497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:35:06.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:35:06.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-25T23:35:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 34, 50), 4.63, 73.53, 0.0, 13.85, 14.45, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:35:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:34:50
2025-12-25T23:35:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:35:07.083 [DEBUG] [Thread-20498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:07.219 [DEBUG] [Thread-20499] [transport.py] [_log()] starting thread (client mode): 0xb4107d30
2025-12-25T23:35:07.219 [DEBUG] [Thread-20499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:35:07.239 [DEBUG] [Thread-20499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:35:07.239 [INFO] [Thread-20499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:35:07.242 [DEBUG] [Thread-20499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] client lang: <none>
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] server lang: <none>
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] kex follows: False
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] Compression: none
2025-12-25T23:35:07.243 [DEBUG] [Thread-20499] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:35:07.260 [DEBUG] [Thread-20499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:35:07.261 [DEBUG] [Thread-20499] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:35:07.261 [DEBUG] [Thread-20499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:35:07.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:35:07.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:35:07.264 [DEBUG] [Thread-20499] [transport.py] [_log()] userauth is OK
2025-12-25T23:35:07.264 [DEBUG] [Thread-20499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:35:07.264 [DEBUG] [Thread-20499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:35:07.264 [DEBUG] [Thread-20499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:35:07.264 [DEBUG] [Thread-20499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:35:07.290 [INFO] [Thread-20499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:35:07.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:35:09.356 [DEBUG] [Thread-20499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:35:09.356 [DEBUG] [Thread-20499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:35:09.357 [DEBUG] [Thread-20499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:35:09.397 [DEBUG] [Thread-20499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:35:09.397 [DEBUG] [Thread-20499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:35:09.400 [DEBUG] [Thread-20499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:35:09.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:35:09.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:35:09.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:35:09.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:35:09.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:35:09.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:35:09.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:35:09.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.899021 -999.00  +14.70   8.82     77  +10.70 1 1 1 1 1     0    0 4.28 -10.20 ZNESW 11.6 8.8 165.6 13.4 15.4 -23.1 15.2 -22.7 15.2 -21.1 15.4 -22.0
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.899021
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:35:09.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:34:50', tmtdew=4.63, humidity=73.53, cloud=0.0, wind=13.85, 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-25T23:34:51', seeing=1.39, atlas_timestamp='2025-12-25T21:34:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:32:00')
2025-12-25T23:35:09.419 [DEBUG] [Thread-20499] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:35:09.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-25T23:35:09.501 [DEBUG] [Thread-20502] [transport.py] [_log()] starting thread (client mode): 0xb6b29930
2025-12-25T23:35:09.501 [DEBUG] [Thread-20502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:35:09.516 [DEBUG] [Thread-20502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:35:09.516 [INFO] [Thread-20502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:35:09.524 [DEBUG] [Thread-20502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:35:09.524 [DEBUG] [Thread-20502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:35:09.524 [DEBUG] [Thread-20502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:35:09.524 [DEBUG] [Thread-20502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:09.524 [DEBUG] [Thread-20502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] client lang: <none>
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] server lang: <none>
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] kex follows: False
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] Compression: none
2025-12-25T23:35:09.525 [DEBUG] [Thread-20502] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:35:09.586 [DEBUG] [Thread-20502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:35:09.586 [DEBUG] [Thread-20502] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:35:09.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:35:09.587 [DEBUG] [Thread-20502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:35:09.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:35:09.645 [DEBUG] [Thread-20502] [transport.py] [_log()] userauth is OK
2025-12-25T23:35:09.645 [DEBUG] [Thread-20502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:35:09.645 [DEBUG] [Thread-20502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:35:09.645 [DEBUG] [Thread-20502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:35:09.646 [DEBUG] [Thread-20502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:35:09.664 [INFO] [Thread-20502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:35:09.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-25T23:35:09.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:35:10.488 [DEBUG] [Thread-20502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:35:10.488 [DEBUG] [Thread-20502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:35:10.536 [DEBUG] [Thread-20502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:35:10.537 [DEBUG] [Thread-20502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:35:10.546 [DEBUG] [Thread-20502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:35:10.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:35:10.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-25T23:35:10.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-25T23:35:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:35:10.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:35:10.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:35:10.584 [DEBUG] [Thread-20502] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:35:12.613 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:12.614 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:22.114 [DEBUG] [Thread-20504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:35.419 [DEBUG] [Thread-20505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:37.159 [DEBUG] [Thread-20506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:35:40.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:35:40.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:35:40.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-25T23:35:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 35, 22), 4.59, 73.71, 0.0, 13.99, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:35:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:35:22
2025-12-25T23:35:41.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:35:41.566 [DEBUG] [Thread-20507] [transport.py] [_log()] starting thread (client mode): 0xb6b288e0
2025-12-25T23:35:41.566 [DEBUG] [Thread-20507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:35:41.585 [DEBUG] [Thread-20507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:35:41.585 [INFO] [Thread-20507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:35:41.588 [DEBUG] [Thread-20507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] client lang: <none>
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] server lang: <none>
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] kex follows: False
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:35:41.589 [DEBUG] [Thread-20507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:35:41.590 [DEBUG] [Thread-20507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:35:41.590 [DEBUG] [Thread-20507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:35:41.590 [DEBUG] [Thread-20507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:35:41.590 [DEBUG] [Thread-20507] [transport.py] [_log()] Compression: none
2025-12-25T23:35:41.590 [DEBUG] [Thread-20507] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:35:41.611 [DEBUG] [Thread-20507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:35:41.612 [DEBUG] [Thread-20507] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:35:41.612 [DEBUG] [Thread-20507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:35:41.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:35:41.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:35:41.615 [DEBUG] [Thread-20507] [transport.py] [_log()] userauth is OK
2025-12-25T23:35:41.615 [DEBUG] [Thread-20507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:35:41.615 [DEBUG] [Thread-20507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:35:41.615 [DEBUG] [Thread-20507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:35:41.615 [DEBUG] [Thread-20507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:35:41.654 [INFO] [Thread-20507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:35:41.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:35:42.279 [DEBUG] [Thread-20507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:35:42.280 [DEBUG] [Thread-20507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:35:42.280 [DEBUG] [Thread-20507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:35:42.321 [DEBUG] [Thread-20507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:35:42.321 [DEBUG] [Thread-20507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:35:42.324 [DEBUG] [Thread-20507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:35:42.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:35:42.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:35:42.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:35:42.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:35:42.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:35:42.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:35:42.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:35:42.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:35:42.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:35:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.899368 -999.00  +14.60  10.87     78  +10.80 1 1 1 1 1     0    0 4.10 -14.07 ZNESW 8.7 10.9 173.2 13.6 15.4 -23.3 15.2 -23.2 15.1 -21.4 15.3 -22.2
2025-12-25T23:35:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:35:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:35:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.899368
2025-12-25T23:35:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:35:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:35:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:35:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:35:42.351 [DEBUG] [Thread-20507] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:35:42.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:35:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:35:22', tmtdew=4.59, humidity=73.71, cloud=0.0, wind=13.99, 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-25T23:35:23', seeing=1.35, atlas_timestamp='2025-12-25T21:35:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:32:00')
2025-12-25T23:35:42.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-25T23:35:42.445 [DEBUG] [Thread-20510] [transport.py] [_log()] starting thread (client mode): 0xb6b29bd0
2025-12-25T23:35:42.446 [DEBUG] [Thread-20510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:35:42.460 [DEBUG] [Thread-20510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:35:42.460 [INFO] [Thread-20510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:35:42.467 [DEBUG] [Thread-20510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] client lang: <none>
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] server lang: <none>
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] kex follows: False
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] Compression: none
2025-12-25T23:35:42.468 [DEBUG] [Thread-20510] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:35:42.525 [DEBUG] [Thread-20510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:35:42.526 [DEBUG] [Thread-20510] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:35:42.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:35:42.527 [DEBUG] [Thread-20510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:35:42.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:35:42.582 [DEBUG] [Thread-20510] [transport.py] [_log()] userauth is OK
2025-12-25T23:35:42.582 [DEBUG] [Thread-20510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:35:42.582 [DEBUG] [Thread-20510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:35:42.582 [DEBUG] [Thread-20510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:35:42.583 [DEBUG] [Thread-20510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:35:42.601 [INFO] [Thread-20510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:35:42.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-25T23:35:42.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:35:43.456 [DEBUG] [Thread-20510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:35:43.456 [DEBUG] [Thread-20510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:35:43.504 [DEBUG] [Thread-20510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:35:43.504 [DEBUG] [Thread-20510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:35:43.513 [DEBUG] [Thread-20510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:35:43.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:35:43.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-25T23:35:43.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-25T23:35:43.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:35:43.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:35:43.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:35:43.551 [DEBUG] [Thread-20510] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:35:52.197 [DEBUG] [Thread-20512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:07.246 [DEBUG] [Thread-20513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:12.815 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:12.817 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:36:13.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:36:13.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-25T23:36:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 35, 54), 4.47, 74.56, 0.0, 13.29, 14.39, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:36:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:35:54
2025-12-25T23:36:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:36:14.534 [DEBUG] [Thread-20514] [transport.py] [_log()] starting thread (client mode): 0xb6b28730
2025-12-25T23:36:14.534 [DEBUG] [Thread-20514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:36:14.553 [DEBUG] [Thread-20514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:36:14.553 [INFO] [Thread-20514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] client lang: <none>
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] server lang: <none>
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] kex follows: False
2025-12-25T23:36:14.557 [DEBUG] [Thread-20514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:36:14.558 [DEBUG] [Thread-20514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:36:14.558 [DEBUG] [Thread-20514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:36:14.558 [DEBUG] [Thread-20514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:36:14.558 [DEBUG] [Thread-20514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:36:14.558 [DEBUG] [Thread-20514] [transport.py] [_log()] Compression: none
2025-12-25T23:36:14.558 [DEBUG] [Thread-20514] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:36:14.566 [DEBUG] [Thread-20514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:36:14.566 [DEBUG] [Thread-20514] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:36:14.567 [DEBUG] [Thread-20514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:36:14.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:36:14.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:36:14.568 [DEBUG] [Thread-20514] [transport.py] [_log()] userauth is OK
2025-12-25T23:36:14.568 [DEBUG] [Thread-20514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:36:14.568 [DEBUG] [Thread-20514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:36:14.569 [DEBUG] [Thread-20514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:36:14.569 [DEBUG] [Thread-20514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:36:14.588 [INFO] [Thread-20514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:36:14.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:36:15.200 [DEBUG] [Thread-20514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:36:15.201 [DEBUG] [Thread-20514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:36:15.201 [DEBUG] [Thread-20514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:36:15.242 [DEBUG] [Thread-20514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:36:15.242 [DEBUG] [Thread-20514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:36:15.246 [DEBUG] [Thread-20514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:36:15.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:36:15.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:36:15.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:36:15.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:36:15.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:36:15.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:36:15.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:36:15.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:36:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:36:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.899715 -999.00  +14.60   8.42     78  +10.80 1 1 1 1 1     0    0 3.93 -19.27 ZNESW 8.1 8.4 183.0 11.4 15.4 -23.2 15.2 -22.8 15.1 -21.3 15.4 -22.3
2025-12-25T23:36:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:36:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:36:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.899715
2025-12-25T23:36:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:36:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:36:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:36:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:36:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:36:15.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:35:54', tmtdew=4.47, humidity=74.56, cloud=0.0, wind=13.29, 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-25T23:35:55', seeing=1.38, atlas_timestamp='2025-12-25T21:35:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:32:00')
2025-12-25T23:36:15.271 [DEBUG] [Thread-20514] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:36:15.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-25T23:36:15.367 [DEBUG] [Thread-20517] [transport.py] [_log()] starting thread (client mode): 0xb6b2b670
2025-12-25T23:36:15.367 [DEBUG] [Thread-20517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:36:15.386 [DEBUG] [Thread-20517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:36:15.386 [INFO] [Thread-20517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:36:15.393 [DEBUG] [Thread-20517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] client lang: <none>
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] server lang: <none>
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] kex follows: False
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:36:15.394 [DEBUG] [Thread-20517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:36:15.395 [DEBUG] [Thread-20517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:36:15.395 [DEBUG] [Thread-20517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:36:15.395 [DEBUG] [Thread-20517] [transport.py] [_log()] Compression: none
2025-12-25T23:36:15.395 [DEBUG] [Thread-20517] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:36:15.454 [DEBUG] [Thread-20517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:36:15.455 [DEBUG] [Thread-20517] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:36:15.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:36:15.456 [DEBUG] [Thread-20517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:36:15.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:36:15.509 [DEBUG] [Thread-20517] [transport.py] [_log()] userauth is OK
2025-12-25T23:36:15.510 [DEBUG] [Thread-20517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:36:15.510 [DEBUG] [Thread-20517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:36:15.510 [DEBUG] [Thread-20517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:36:15.510 [DEBUG] [Thread-20517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:36:15.535 [INFO] [Thread-20517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:36:15.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-25T23:36:15.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:36:16.361 [DEBUG] [Thread-20517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:36:16.362 [DEBUG] [Thread-20517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:36:16.409 [DEBUG] [Thread-20517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:36:16.409 [DEBUG] [Thread-20517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:36:16.418 [DEBUG] [Thread-20517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:36:16.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:36:16.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-25T23:36:16.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-25T23:36:16.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:36:16.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:36:16.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:36:16.455 [DEBUG] [Thread-20517] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:36:22.277 [DEBUG] [Thread-20519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:35.475 [DEBUG] [Thread-20520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:37.331 [DEBUG] [Thread-20521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:36:46.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:36:46.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:36:46.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-25T23:36:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 36, 26), 4.41, 74.88, 0.0, 13.32, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:36:47.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:36:26
2025-12-25T23:36:47.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:36:47.465 [DEBUG] [Thread-20522] [transport.py] [_log()] starting thread (client mode): 0xb6b2bd90
2025-12-25T23:36:47.465 [DEBUG] [Thread-20522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:36:47.487 [DEBUG] [Thread-20522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:36:47.487 [INFO] [Thread-20522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:36:47.489 [DEBUG] [Thread-20522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] client lang: <none>
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] server lang: <none>
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] kex follows: False
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] Compression: none
2025-12-25T23:36:47.490 [DEBUG] [Thread-20522] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:36:47.508 [DEBUG] [Thread-20522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:36:47.508 [DEBUG] [Thread-20522] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:36:47.509 [DEBUG] [Thread-20522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:36:47.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:36:47.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:36:47.510 [DEBUG] [Thread-20522] [transport.py] [_log()] userauth is OK
2025-12-25T23:36:47.510 [DEBUG] [Thread-20522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:36:47.510 [DEBUG] [Thread-20522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:36:47.510 [DEBUG] [Thread-20522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:36:47.510 [DEBUG] [Thread-20522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:36:47.519 [INFO] [Thread-20522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:36:47.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:36:48.168 [DEBUG] [Thread-20522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:36:48.168 [DEBUG] [Thread-20522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:36:48.168 [DEBUG] [Thread-20522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:36:48.210 [DEBUG] [Thread-20522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:36:48.210 [DEBUG] [Thread-20522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:36:48.212 [DEBUG] [Thread-20522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:36:48.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:36:48.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:36:48.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:36:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:36:48.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:36:48.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:36:48.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.900063 -999.00  +14.50  10.14     78  +10.80 1 1 1 1 1     0    0 3.88 -21.86 ZNESW 8.9 10.1 181.4 11.6 15.4 -23.4 15.2 -23.2 15.0 -21.2 15.3 -22.5
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.900063
2025-12-25T23:36:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:36:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:36:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:36:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:36:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:36:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:36:26', tmtdew=4.41, humidity=74.88, cloud=0.0, wind=13.32, 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-25T23:36:27', seeing=1.57, atlas_timestamp='2025-12-25T21:36:05.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.08024999999999949, 0.10325000000000095, 0.17025000000000112, 0.08549999999999969, 0.08249999999999957, 0.10125000000000028, 0.10299999999999976, 0.06925000000000026, 0.12650000000000006, 0.0600000000000005, 0.14724999999999966, 0.07199999999999918, 0.11749999999999972, 0.13974999999999937, 0.1379999999999999, 0.10849999999999937, 0.08225000000000016, 0.11749999999999972, 0.08499999999999908, 0.1007499999999979, 0.1789999999999985, 0.161249999999999, 0.15525000000000055, 0.1437500000000007, 0.09200000000000053, 0.12449999999999939, 0.17474999999999952, 0.16500000000000092, 0.25700000000000056, 0.23000000000000043, 0.1960000000000015, 0.17900000000000205, 0.13824999999999932], zp_timestamp='2025-12-25T21:32:00')
2025-12-25T23:36:48.231 [DEBUG] [Thread-20522] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:36:48.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:36:48.320 [DEBUG] [Thread-20525] [transport.py] [_log()] starting thread (client mode): 0xb6b2a5f0
2025-12-25T23:36:48.320 [DEBUG] [Thread-20525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:36:48.335 [DEBUG] [Thread-20525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:36:48.335 [INFO] [Thread-20525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:36:48.342 [DEBUG] [Thread-20525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:36:48.342 [DEBUG] [Thread-20525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:36:48.342 [DEBUG] [Thread-20525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:36:48.342 [DEBUG] [Thread-20525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] client lang: <none>
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] server lang: <none>
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] kex follows: False
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] Compression: none
2025-12-25T23:36:48.343 [DEBUG] [Thread-20525] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:36:48.404 [DEBUG] [Thread-20525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:36:48.404 [DEBUG] [Thread-20525] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:36:48.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:36:48.405 [DEBUG] [Thread-20525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:36:48.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:36:48.461 [DEBUG] [Thread-20525] [transport.py] [_log()] userauth is OK
2025-12-25T23:36:48.461 [DEBUG] [Thread-20525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:36:48.461 [DEBUG] [Thread-20525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:36:48.461 [DEBUG] [Thread-20525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:36:48.462 [DEBUG] [Thread-20525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:36:48.479 [INFO] [Thread-20525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:36:48.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-25T23:36:48.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:36:49.362 [DEBUG] [Thread-20525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:36:49.362 [DEBUG] [Thread-20525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:36:49.411 [DEBUG] [Thread-20525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:36:49.411 [DEBUG] [Thread-20525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:36:49.421 [DEBUG] [Thread-20525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:36:49.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:36:49.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-25T23:36: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') -> 00000000
2025-12-25T23:36:49.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:36:49.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:36:49.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:36:49.457 [DEBUG] [Thread-20525] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:36:52.364 [DEBUG] [Thread-20527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:07.412 [DEBUG] [Thread-20528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:13.020 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:13.021 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:19.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:37:19.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:37:19.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-25T23:37:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 36, 58), 4.22, 75.56, 0.0, 14.96, 14.24, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:37:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:36:58
2025-12-25T23:37:20.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:37:20.450 [DEBUG] [Thread-20529] [transport.py] [_log()] starting thread (client mode): 0xb957ace0
2025-12-25T23:37:20.450 [DEBUG] [Thread-20529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:37:20.472 [DEBUG] [Thread-20529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:37:20.472 [INFO] [Thread-20529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] client lang: <none>
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] server lang: <none>
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] kex follows: False
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:37:20.475 [DEBUG] [Thread-20529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:37:20.476 [DEBUG] [Thread-20529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:37:20.476 [DEBUG] [Thread-20529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:37:20.476 [DEBUG] [Thread-20529] [transport.py] [_log()] Compression: none
2025-12-25T23:37:20.476 [DEBUG] [Thread-20529] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:37:20.492 [DEBUG] [Thread-20529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:37:20.493 [DEBUG] [Thread-20529] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:37:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:37:20.494 [DEBUG] [Thread-20529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:37:20.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:37:20.496 [DEBUG] [Thread-20529] [transport.py] [_log()] userauth is OK
2025-12-25T23:37:20.496 [DEBUG] [Thread-20529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:37:20.496 [DEBUG] [Thread-20529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:37:20.496 [DEBUG] [Thread-20529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:37:20.496 [DEBUG] [Thread-20529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:37:20.533 [INFO] [Thread-20529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:37:20.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:37:21.201 [DEBUG] [Thread-20529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:37:21.201 [DEBUG] [Thread-20529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:37:21.201 [DEBUG] [Thread-20529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:37:21.242 [DEBUG] [Thread-20529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:37:21.242 [DEBUG] [Thread-20529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:37:21.245 [DEBUG] [Thread-20529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:37:21.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:37:21.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:37:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:37:21.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:37:21.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:37:21.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:37:21.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:37:21.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:37:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:37:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.900757 -999.00  +14.40   7.47     78  +10.80 1 1 1 1 1     0    0 3.45 -34.15 ZNESW 8.6 7.5 171.6 12.1 15.3 -23.4 15.1 -23.4 15.1 -21.4 15.3 -22.2
2025-12-25T23:37:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:37:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:37:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.900757
2025-12-25T23:37:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:37:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:37:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:37:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:37:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:37:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:36:58', tmtdew=4.22, humidity=75.56, cloud=0.0, wind=14.96, 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-25T23:36:59', seeing=1.76, atlas_timestamp='2025-12-25T21:37:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:35:00')
2025-12-25T23:37:21.270 [DEBUG] [Thread-20529] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:37:21.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-25T23:37:21.368 [DEBUG] [Thread-20532] [transport.py] [_log()] starting thread (client mode): 0xb95784f0
2025-12-25T23:37:21.368 [DEBUG] [Thread-20532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:37:21.385 [DEBUG] [Thread-20532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:37:21.385 [INFO] [Thread-20532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] client lang: <none>
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] server lang: <none>
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] kex follows: False
2025-12-25T23:37:21.393 [DEBUG] [Thread-20532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:37:21.394 [DEBUG] [Thread-20532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:37:21.394 [DEBUG] [Thread-20532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:37:21.394 [DEBUG] [Thread-20532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:37:21.394 [DEBUG] [Thread-20532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:37:21.394 [DEBUG] [Thread-20532] [transport.py] [_log()] Compression: none
2025-12-25T23:37:21.394 [DEBUG] [Thread-20532] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:37:21.458 [DEBUG] [Thread-20532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:37:21.458 [DEBUG] [Thread-20532] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:37:21.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:37:21.459 [DEBUG] [Thread-20532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:37:21.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:37:21.519 [DEBUG] [Thread-20532] [transport.py] [_log()] userauth is OK
2025-12-25T23:37:21.519 [DEBUG] [Thread-20532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:37:21.519 [DEBUG] [Thread-20532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:37:21.519 [DEBUG] [Thread-20532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:37:21.519 [DEBUG] [Thread-20532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:37:21.541 [INFO] [Thread-20532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:37:21.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-25T23:37:21.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:37:22.364 [DEBUG] [Thread-20532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:37:22.364 [DEBUG] [Thread-20532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:37:22.415 [DEBUG] [Thread-20532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:37:22.415 [DEBUG] [Thread-20532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:37:22.423 [DEBUG] [Thread-20532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:37:22.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:37:22.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-25T23:37: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') -> 00000000
2025-12-25T23:37:22.446 [DEBUG] [Thread-20534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:22.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:37:22.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:37:22.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:37:22.459 [DEBUG] [Thread-20532] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:37:35.539 [DEBUG] [Thread-20535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:37.499 [DEBUG] [Thread-20536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:37.521 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:37:52.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:37:52.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-25T23:37:52.534 [DEBUG] [Thread-20537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:37:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 37, 30), 4.18, 75.76, 0.0, 15.44, 14.19, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:37:53.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:37:30
2025-12-25T23:37:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:37:53.453 [DEBUG] [Thread-20538] [transport.py] [_log()] starting thread (client mode): 0xb957ba30
2025-12-25T23:37:53.453 [DEBUG] [Thread-20538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:37:53.473 [DEBUG] [Thread-20538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:37:53.473 [INFO] [Thread-20538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:37:53.476 [DEBUG] [Thread-20538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] client lang: <none>
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] server lang: <none>
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] kex follows: False
2025-12-25T23:37:53.477 [DEBUG] [Thread-20538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:37:53.478 [DEBUG] [Thread-20538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:37:53.478 [DEBUG] [Thread-20538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:37:53.478 [DEBUG] [Thread-20538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:37:53.478 [DEBUG] [Thread-20538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:37:53.478 [DEBUG] [Thread-20538] [transport.py] [_log()] Compression: none
2025-12-25T23:37:53.478 [DEBUG] [Thread-20538] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:37:53.497 [DEBUG] [Thread-20538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:37:53.498 [DEBUG] [Thread-20538] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:37:53.498 [DEBUG] [Thread-20538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:37:53.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:37:53.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:37:53.501 [DEBUG] [Thread-20538] [transport.py] [_log()] userauth is OK
2025-12-25T23:37:53.501 [DEBUG] [Thread-20538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:37:53.501 [DEBUG] [Thread-20538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:37:53.501 [DEBUG] [Thread-20538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:37:53.501 [DEBUG] [Thread-20538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:37:53.535 [INFO] [Thread-20538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:37:53.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:37:54.187 [DEBUG] [Thread-20538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:37:54.187 [DEBUG] [Thread-20538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:37:54.188 [DEBUG] [Thread-20538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:37:54.228 [DEBUG] [Thread-20538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:37:54.228 [DEBUG] [Thread-20538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:37:54.232 [DEBUG] [Thread-20538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:37:54.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:37:54.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:37:54.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:37:54.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:37:54.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:37:54.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:37:54.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:37:54.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:37:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:37:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.901104 -999.00  +14.40   7.57     78  +10.80 1 1 1 1 1     0    0 3.24 -40.82 ZNESW 9.0 7.6 174.4 13.6 15.3 -23.3 15.1 -22.9 15.0 -21.5 15.3 -22.6
2025-12-25T23:37:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:37:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:37:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.901104
2025-12-25T23:37:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:37:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:37:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:37:54.258 [DEBUG] [Thread-20538] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:37:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:37:54.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:37:54.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:37:30', tmtdew=4.18, humidity=75.76, cloud=0.0, wind=15.44, 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-25T23:37:31', seeing=1.76, atlas_timestamp='2025-12-25T21:37:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:35:00')
2025-12-25T23:37: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-25T23:37:54.362 [DEBUG] [Thread-20541] [transport.py] [_log()] starting thread (client mode): 0xb6b28c40
2025-12-25T23:37:54.362 [DEBUG] [Thread-20541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:37:54.377 [DEBUG] [Thread-20541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:37:54.378 [INFO] [Thread-20541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:37:54.385 [DEBUG] [Thread-20541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:37:54.385 [DEBUG] [Thread-20541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:37:54.385 [DEBUG] [Thread-20541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:37:54.385 [DEBUG] [Thread-20541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] client lang: <none>
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] server lang: <none>
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] kex follows: False
2025-12-25T23:37:54.386 [DEBUG] [Thread-20541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:37:54.387 [DEBUG] [Thread-20541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:37:54.387 [DEBUG] [Thread-20541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:37:54.387 [DEBUG] [Thread-20541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:37:54.387 [DEBUG] [Thread-20541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:37:54.387 [DEBUG] [Thread-20541] [transport.py] [_log()] Compression: none
2025-12-25T23:37:54.387 [DEBUG] [Thread-20541] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:37:54.445 [DEBUG] [Thread-20541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:37:54.446 [DEBUG] [Thread-20541] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:37:54.447 [DEBUG] [Thread-20541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:37:54.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:37:54.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:37:54.502 [DEBUG] [Thread-20541] [transport.py] [_log()] userauth is OK
2025-12-25T23:37:54.502 [DEBUG] [Thread-20541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:37:54.503 [DEBUG] [Thread-20541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:37:54.503 [DEBUG] [Thread-20541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:37:54.503 [DEBUG] [Thread-20541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:37:54.523 [INFO] [Thread-20541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:37:54.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-25T23:37:54.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:37:55.365 [DEBUG] [Thread-20541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:37:55.365 [DEBUG] [Thread-20541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:37:55.413 [DEBUG] [Thread-20541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:37:55.413 [DEBUG] [Thread-20541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:37:55.422 [DEBUG] [Thread-20541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:37:55.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:37: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-25T23:37: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') -> 00000000
2025-12-25T23:37:55.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:37:55.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:37:55.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:37:55.457 [DEBUG] [Thread-20541] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:38:07.563 [DEBUG] [Thread-20543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:13.221 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:13.222 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:22.621 [DEBUG] [Thread-20544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:25.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:38:25.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:38:25.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-25T23:38:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 38, 2), 4.15, 75.89, 0.0, 15.97, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:38:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:38:02
2025-12-25T23:38:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:38:26.464 [DEBUG] [Thread-20545] [transport.py] [_log()] starting thread (client mode): 0xb6b2aef0
2025-12-25T23:38:26.464 [DEBUG] [Thread-20545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:38:26.484 [DEBUG] [Thread-20545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:38:26.485 [INFO] [Thread-20545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:38:26.488 [DEBUG] [Thread-20545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] client lang: <none>
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] server lang: <none>
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] kex follows: False
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:38:26.489 [DEBUG] [Thread-20545] [transport.py] [_log()] Compression: none
2025-12-25T23:38:26.490 [DEBUG] [Thread-20545] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:38:26.508 [DEBUG] [Thread-20545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:38:26.508 [DEBUG] [Thread-20545] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:38:26.509 [DEBUG] [Thread-20545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:38:26.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:38:26.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:38:26.511 [DEBUG] [Thread-20545] [transport.py] [_log()] userauth is OK
2025-12-25T23:38:26.511 [DEBUG] [Thread-20545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:38:26.511 [DEBUG] [Thread-20545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:38:26.511 [DEBUG] [Thread-20545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:38:26.511 [DEBUG] [Thread-20545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:38:26.545 [INFO] [Thread-20545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:38:26.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:38:27.205 [DEBUG] [Thread-20545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:38:27.205 [DEBUG] [Thread-20545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:38:27.206 [DEBUG] [Thread-20545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:38:27.246 [DEBUG] [Thread-20545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:38:27.246 [DEBUG] [Thread-20545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:38:27.250 [DEBUG] [Thread-20545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:38:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:38:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:38:27.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:38:27.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:38:27.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:38:27.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:38:27.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:38:27.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:38:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:38:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.901452 -999.00  +14.40   9.70     79  +10.80 1 1 1 1 1     0    0 3.06 -45.42 ZNESW 10.8 9.7 174.6 11.6 15.2 -23.4 15.1 -23.2 15.0 -21.5 15.2 -22.6
2025-12-25T23:38:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:38:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:38:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.901452
2025-12-25T23:38:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:38:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:38:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:38:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:38:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:38:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:38:02', tmtdew=4.15, humidity=75.89, cloud=0.0, wind=15.97, 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-25T23:38:03', seeing=1.77, atlas_timestamp='2025-12-25T21:38:05.453', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:35:00')
2025-12-25T23:38:27.277 [DEBUG] [Thread-20545] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:38:27.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-25T23:38:27.373 [DEBUG] [Thread-20548] [transport.py] [_log()] starting thread (client mode): 0xb6b2b5e0
2025-12-25T23:38:27.374 [DEBUG] [Thread-20548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:38:27.388 [DEBUG] [Thread-20548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:38:27.389 [INFO] [Thread-20548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:38:27.396 [DEBUG] [Thread-20548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:38:27.396 [DEBUG] [Thread-20548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:38:27.396 [DEBUG] [Thread-20548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:38:27.396 [DEBUG] [Thread-20548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:38:27.396 [DEBUG] [Thread-20548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] client lang: <none>
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] server lang: <none>
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] kex follows: False
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] Compression: none
2025-12-25T23:38:27.397 [DEBUG] [Thread-20548] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:38:27.453 [DEBUG] [Thread-20548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:38:27.454 [DEBUG] [Thread-20548] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:38:27.455 [DEBUG] [Thread-20548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:38:27.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:38:27.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:38:27.510 [DEBUG] [Thread-20548] [transport.py] [_log()] userauth is OK
2025-12-25T23:38:27.510 [DEBUG] [Thread-20548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:38:27.510 [DEBUG] [Thread-20548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:38:27.510 [DEBUG] [Thread-20548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:38:27.511 [DEBUG] [Thread-20548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:38:27.530 [INFO] [Thread-20548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:38:27.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-25T23:38:27.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:38:28.401 [DEBUG] [Thread-20548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:38:28.401 [DEBUG] [Thread-20548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:38:28.449 [DEBUG] [Thread-20548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:38:28.449 [DEBUG] [Thread-20548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:38:28.458 [DEBUG] [Thread-20548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:38:28.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:38:28.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-25T23:38:28.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-25T23:38:28.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:38:28.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:38:28.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:38:28.496 [DEBUG] [Thread-20548] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:38:35.598 [DEBUG] [Thread-20550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:37.655 [DEBUG] [Thread-20551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:52.700 [DEBUG] [Thread-20552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:38:58.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:38:58.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:38:58.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-25T23:38:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 38, 35), 3.91, 77.12, 0.0, 16.13, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:38:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:38:35
2025-12-25T23:38:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:38:59.500 [DEBUG] [Thread-20553] [transport.py] [_log()] starting thread (client mode): 0xb957a110
2025-12-25T23:38:59.500 [DEBUG] [Thread-20553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:38:59.516 [DEBUG] [Thread-20553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:38:59.516 [INFO] [Thread-20553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] client lang: <none>
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] server lang: <none>
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] kex follows: False
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] Compression: none
2025-12-25T23:38:59.519 [DEBUG] [Thread-20553] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:38:59.533 [DEBUG] [Thread-20553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:38:59.533 [DEBUG] [Thread-20553] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:38:59.533 [DEBUG] [Thread-20553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:38:59.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:38:59.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:38:59.535 [DEBUG] [Thread-20553] [transport.py] [_log()] userauth is OK
2025-12-25T23:38:59.535 [DEBUG] [Thread-20553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:38:59.535 [DEBUG] [Thread-20553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:38:59.535 [DEBUG] [Thread-20553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:38:59.535 [DEBUG] [Thread-20553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:38:59.546 [INFO] [Thread-20553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:38:59.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:39:00.219 [DEBUG] [Thread-20553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:39:00.219 [DEBUG] [Thread-20553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:39:00.219 [DEBUG] [Thread-20553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:39:00.260 [DEBUG] [Thread-20553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:39:00.260 [DEBUG] [Thread-20553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:39:00.264 [DEBUG] [Thread-20553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:39:00.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:39:00.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:39:00.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:39:00.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:39:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:39:00.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:39:00.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:39:00.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:39:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:39:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.901799 -999.00  +14.30   9.33     79  +10.90 1 1 1 1 1     0    0 2.97 -47.70 ZNESW 10.1 9.3 172.6 14.9 15.2 -23.5 15.1 -23.5 14.9 -21.4 15.2 -22.4
2025-12-25T23:39:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:39:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:39:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.901799
2025-12-25T23:39:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:39:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:39:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:39:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:39:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:39:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:38:35', tmtdew=3.91, humidity=77.12, cloud=0.0, wind=16.13, 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-25T23:38:35', seeing=1.77, atlas_timestamp='2025-12-25T21:38:35.434', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:35:00')
2025-12-25T23:39:00.292 [DEBUG] [Thread-20553] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:39:00.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-25T23:39:00.387 [DEBUG] [Thread-20556] [transport.py] [_log()] starting thread (client mode): 0xb6b2b070
2025-12-25T23:39:00.387 [DEBUG] [Thread-20556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:39:00.402 [DEBUG] [Thread-20556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:39:00.402 [INFO] [Thread-20556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:39:00.410 [DEBUG] [Thread-20556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:39:00.410 [DEBUG] [Thread-20556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:39:00.410 [DEBUG] [Thread-20556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] client lang: <none>
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] server lang: <none>
2025-12-25T23:39:00.411 [DEBUG] [Thread-20556] [transport.py] [_log()] kex follows: False
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] Compression: none
2025-12-25T23:39:00.412 [DEBUG] [Thread-20556] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:39:00.471 [DEBUG] [Thread-20556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:39:00.471 [DEBUG] [Thread-20556] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:39:00.472 [DEBUG] [Thread-20556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:39:00.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:39:00.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:39:00.530 [DEBUG] [Thread-20556] [transport.py] [_log()] userauth is OK
2025-12-25T23:39:00.530 [DEBUG] [Thread-20556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:39:00.531 [DEBUG] [Thread-20556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:39:00.531 [DEBUG] [Thread-20556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:39:00.531 [DEBUG] [Thread-20556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:39:00.551 [INFO] [Thread-20556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:39:00.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-25T23:39:00.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:39:01.398 [DEBUG] [Thread-20556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:39:01.398 [DEBUG] [Thread-20556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:39:01.446 [DEBUG] [Thread-20556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:39:01.446 [DEBUG] [Thread-20556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:39:01.455 [DEBUG] [Thread-20556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:39:01.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:39:01.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-25T23:39:01.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:39:01.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:39:01.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:39:01.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:39:01.491 [DEBUG] [Thread-20556] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:39:07.735 [DEBUG] [Thread-20558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:39:13.423 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:39:13.424 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:39:22.771 [DEBUG] [Thread-20559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:39:31.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:39:31.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:39:31.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-25T23:39:32.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 39, 7), 3.88, 77.27, 0.0, 16.15, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:39:32.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:39:07
2025-12-25T23:39:32.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:39:32.460 [DEBUG] [Thread-20560] [transport.py] [_log()] starting thread (client mode): 0xb9578820
2025-12-25T23:39:32.460 [DEBUG] [Thread-20560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:39:32.475 [DEBUG] [Thread-20560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:39:32.475 [INFO] [Thread-20560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] client lang: <none>
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] server lang: <none>
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] kex follows: False
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] Compression: none
2025-12-25T23:39:32.476 [DEBUG] [Thread-20560] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:39:32.483 [DEBUG] [Thread-20560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:39:32.484 [DEBUG] [Thread-20560] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:39:32.484 [DEBUG] [Thread-20560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:39:32.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:39:32.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:39:32.485 [DEBUG] [Thread-20560] [transport.py] [_log()] userauth is OK
2025-12-25T23:39:32.485 [DEBUG] [Thread-20560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:39:32.485 [DEBUG] [Thread-20560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:39:32.485 [DEBUG] [Thread-20560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:39:32.485 [DEBUG] [Thread-20560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:39:32.500 [INFO] [Thread-20560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:39:32.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:39:33.109 [DEBUG] [Thread-20560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:39:33.109 [DEBUG] [Thread-20560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:39:33.109 [DEBUG] [Thread-20560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:39:33.150 [DEBUG] [Thread-20560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:39:33.150 [DEBUG] [Thread-20560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:39:33.154 [DEBUG] [Thread-20560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:39:33.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:39:33.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:39:33.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:39:33.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:39:33.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:39:33.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:39:33.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:39:33.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:39:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:39:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.902146 -999.00  +14.30  14.24     80  +10.90 1 1 1 2 1     0    0 2.77 -51.58 ZNESW 11.3 14.2 175.8 15.9 15.2 -23.5 15.0 -23.1 14.9 -21.6 15.2 -22.4
2025-12-25T23:39:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:39:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:39:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.902146
2025-12-25T23:39:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:39:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:39:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:39:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:39:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:39:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:39:07', tmtdew=3.88, humidity=77.27, cloud=0.0, wind=16.15, 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-25T23:39:07', seeing=1.61, atlas_timestamp='2025-12-25T21:39:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:35:00')
2025-12-25T23:39:33.193 [DEBUG] [Thread-20560] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:39:33.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-25T23:39:33.285 [DEBUG] [Thread-20563] [transport.py] [_log()] starting thread (client mode): 0xb957b7f0
2025-12-25T23:39:33.285 [DEBUG] [Thread-20563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:39:33.301 [DEBUG] [Thread-20563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:39:33.301 [INFO] [Thread-20563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:39:33.308 [DEBUG] [Thread-20563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] client lang: <none>
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] server lang: <none>
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] kex follows: False
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] Compression: none
2025-12-25T23:39:33.309 [DEBUG] [Thread-20563] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:39:33.365 [DEBUG] [Thread-20563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:39:33.365 [DEBUG] [Thread-20563] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:39:33.365 [DEBUG] [Thread-20563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:39:33.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:39:33.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:39:33.423 [DEBUG] [Thread-20563] [transport.py] [_log()] userauth is OK
2025-12-25T23:39:33.423 [DEBUG] [Thread-20563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:39:33.423 [DEBUG] [Thread-20563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:39:33.423 [DEBUG] [Thread-20563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:39:33.423 [DEBUG] [Thread-20563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:39:33.444 [INFO] [Thread-20563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:39:33.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:39:33.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:39:34.346 [DEBUG] [Thread-20563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:39:34.347 [DEBUG] [Thread-20563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:39:34.395 [DEBUG] [Thread-20563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:39:34.395 [DEBUG] [Thread-20563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:39:34.405 [DEBUG] [Thread-20563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:39:34.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:39:34.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-25T23:39:34.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-25T23:39:34.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:39:34.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:39:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:39:34.441 [DEBUG] [Thread-20563] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:39:35.664 [DEBUG] [Thread-20565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:39:37.807 [DEBUG] [Thread-20566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:39:52.857 [DEBUG] [Thread-20567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:40:04.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:40:04.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-25T23:40:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 39, 39), 3.87, 77.3, 0.0, 18.74, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:40:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:39:39
2025-12-25T23:40:05.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:40:05.451 [DEBUG] [Thread-20568] [transport.py] [_log()] starting thread (client mode): 0xb955a200
2025-12-25T23:40:05.451 [DEBUG] [Thread-20568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:40:05.471 [DEBUG] [Thread-20568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:40:05.471 [INFO] [Thread-20568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:40:05.474 [DEBUG] [Thread-20568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:40:05.474 [DEBUG] [Thread-20568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:40:05.474 [DEBUG] [Thread-20568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:40:05.474 [DEBUG] [Thread-20568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:05.474 [DEBUG] [Thread-20568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] client lang: <none>
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] server lang: <none>
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] kex follows: False
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] Compression: none
2025-12-25T23:40:05.475 [DEBUG] [Thread-20568] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:40:05.489 [DEBUG] [Thread-20568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:40:05.489 [DEBUG] [Thread-20568] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:40:05.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:40:05.490 [DEBUG] [Thread-20568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:40:05.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:40:05.492 [DEBUG] [Thread-20568] [transport.py] [_log()] userauth is OK
2025-12-25T23:40:05.492 [DEBUG] [Thread-20568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:40:05.492 [DEBUG] [Thread-20568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:40:05.492 [DEBUG] [Thread-20568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:40:05.492 [DEBUG] [Thread-20568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:40:05.513 [INFO] [Thread-20568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:40:05.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:40:07.894 [DEBUG] [Thread-20570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:13.317 [DEBUG] [Thread-20568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:40:13.317 [DEBUG] [Thread-20568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:40:13.317 [DEBUG] [Thread-20568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:40:13.357 [DEBUG] [Thread-20568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:40:13.357 [DEBUG] [Thread-20568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:40:13.360 [DEBUG] [Thread-20568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:40:13.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:40:13.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:40:13.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:40:13.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:40:13.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:40:13.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:40:13.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.902146 -999.00  +14.30  14.24     80  +10.90 1 1 1 2 1     0    0 2.77 -51.58 ZNESW 11.3 14.2 175.8 15.9 15.2 -23.5 15.0 -23.1 14.9 -21.6 15.2 -22.4
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.902146
2025-12-25T23:40:13.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:40:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:39:39', tmtdew=3.87, humidity=77.3, cloud=0.0, wind=18.74, 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-25T23:39:39', seeing=1.3, atlas_timestamp='2025-12-25T21:39:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:37:00')
2025-12-25T23:40:13.378 [DEBUG] [Thread-20568] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:40:13.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-25T23:40:13.461 [DEBUG] [Thread-20572] [transport.py] [_log()] starting thread (client mode): 0xb955aa40
2025-12-25T23:40:13.461 [DEBUG] [Thread-20572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:40:13.478 [DEBUG] [Thread-20572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:40:13.478 [INFO] [Thread-20572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:40:13.485 [DEBUG] [Thread-20572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:40:13.485 [DEBUG] [Thread-20572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:40:13.485 [DEBUG] [Thread-20572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:40:13.485 [DEBUG] [Thread-20572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:13.485 [DEBUG] [Thread-20572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:13.485 [DEBUG] [Thread-20572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] client lang: <none>
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] server lang: <none>
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] kex follows: False
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] Compression: none
2025-12-25T23:40:13.486 [DEBUG] [Thread-20572] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:40:13.540 [DEBUG] [Thread-20572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:40:13.541 [DEBUG] [Thread-20572] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:40:13.541 [DEBUG] [Thread-20572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:40:13.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:40:13.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:40:13.598 [DEBUG] [Thread-20572] [transport.py] [_log()] userauth is OK
2025-12-25T23:40:13.598 [DEBUG] [Thread-20572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:40:13.598 [DEBUG] [Thread-20572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:40:13.598 [DEBUG] [Thread-20572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:40:13.598 [DEBUG] [Thread-20572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:40:13.612 [INFO] [Thread-20572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:40:13.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-25T23:40:13.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:40:13.624 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:13.625 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:14.462 [DEBUG] [Thread-20572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:40:14.463 [DEBUG] [Thread-20572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:40:14.510 [DEBUG] [Thread-20572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:40:14.511 [DEBUG] [Thread-20572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:40:14.524 [DEBUG] [Thread-20572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:40:14.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:40:14.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:40:14.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-25T23:40:14.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:40:14.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:40:14.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:40:14.561 [DEBUG] [Thread-20572] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:40:22.928 [DEBUG] [Thread-20574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:35.732 [DEBUG] [Thread-20575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:38.003 [DEBUG] [Thread-20576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:40:44.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:40:44.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:40:44.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-25T23:40:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 40, 11), 3.85, 77.39, 0.0, 17.93, 13.99, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:40:45.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:40:11
2025-12-25T23:40:45.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:40:45.625 [DEBUG] [Thread-20577] [transport.py] [_log()] starting thread (client mode): 0xb955b790
2025-12-25T23:40:45.626 [DEBUG] [Thread-20577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:40:45.645 [DEBUG] [Thread-20577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:40:45.645 [INFO] [Thread-20577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:45.648 [DEBUG] [Thread-20577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] client lang: <none>
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] server lang: <none>
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] kex follows: False
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] Compression: none
2025-12-25T23:40:45.649 [DEBUG] [Thread-20577] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:40:45.664 [DEBUG] [Thread-20577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:40:45.664 [DEBUG] [Thread-20577] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:40:45.664 [DEBUG] [Thread-20577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:40:45.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:40:45.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:40:45.665 [DEBUG] [Thread-20577] [transport.py] [_log()] userauth is OK
2025-12-25T23:40:45.665 [DEBUG] [Thread-20577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:40:45.665 [DEBUG] [Thread-20577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:40:45.665 [DEBUG] [Thread-20577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:40:45.665 [DEBUG] [Thread-20577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:40:45.674 [INFO] [Thread-20577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:40:45.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:40:46.313 [DEBUG] [Thread-20577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:40:46.313 [DEBUG] [Thread-20577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:40:46.314 [DEBUG] [Thread-20577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:40:46.354 [DEBUG] [Thread-20577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:40:46.354 [DEBUG] [Thread-20577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:40:46.356 [DEBUG] [Thread-20577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:40:46.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:40:46.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:40:46.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:40:46.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:40:46.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:40:46.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:40:46.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:40:46.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:40:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:40:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.902493 -999.00  +14.20  10.05     80  +10.90 1 1 1 2 1     0    0 2.51 -57.92 ZNESW 15.8 10.1 166.2 15.1 15.1 -23.4 15.0 -23.0 14.8 -21.4 15.2 -22.6
2025-12-25T23:40:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:40:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:40:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.902493
2025-12-25T23:40:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:40:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:40:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:40:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:40:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:40:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:40:11', tmtdew=3.85, humidity=77.39, cloud=0.0, wind=17.93, 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-25T23:40:43', seeing=1.73, atlas_timestamp='2025-12-25T21:39:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:37:00')
2025-12-25T23:40:46.381 [DEBUG] [Thread-20577] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:40:46.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:40:46.472 [DEBUG] [Thread-20580] [transport.py] [_log()] starting thread (client mode): 0xb957b850
2025-12-25T23:40:46.472 [DEBUG] [Thread-20580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:40:46.488 [DEBUG] [Thread-20580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:40:46.489 [INFO] [Thread-20580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:40:46.496 [DEBUG] [Thread-20580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:40:46.496 [DEBUG] [Thread-20580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:40:46.496 [DEBUG] [Thread-20580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:40:46.496 [DEBUG] [Thread-20580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] client lang: <none>
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] server lang: <none>
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] kex follows: False
2025-12-25T23:40:46.497 [DEBUG] [Thread-20580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:40:46.498 [DEBUG] [Thread-20580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:40:46.498 [DEBUG] [Thread-20580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:40:46.498 [DEBUG] [Thread-20580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:40:46.498 [DEBUG] [Thread-20580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:40:46.498 [DEBUG] [Thread-20580] [transport.py] [_log()] Compression: none
2025-12-25T23:40:46.498 [DEBUG] [Thread-20580] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:40:46.555 [DEBUG] [Thread-20580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:40:46.555 [DEBUG] [Thread-20580] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:40:46.556 [DEBUG] [Thread-20580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:40:46.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:40:46.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:40:46.610 [DEBUG] [Thread-20580] [transport.py] [_log()] userauth is OK
2025-12-25T23:40:46.610 [DEBUG] [Thread-20580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:40:46.610 [DEBUG] [Thread-20580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:40:46.611 [DEBUG] [Thread-20580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:40:46.611 [DEBUG] [Thread-20580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:40:46.637 [INFO] [Thread-20580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:40: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-25T23:40:46.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:40:47.476 [DEBUG] [Thread-20580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:40:47.476 [DEBUG] [Thread-20580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:40:47.523 [DEBUG] [Thread-20580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:40:47.524 [DEBUG] [Thread-20580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:40:47.532 [DEBUG] [Thread-20580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:40:47.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:40:47.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-25T23:40:47.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-25T23:40:47.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:40:47.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:40:47.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:40:47.567 [DEBUG] [Thread-20580] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:40:53.031 [DEBUG] [Thread-20582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:08.092 [DEBUG] [Thread-20583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:13.829 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:13.831 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:17.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:41:17.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:41:17.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:41:18.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 40, 43), 3.79, 77.97, 0.0, 16.32, 13.95, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:41:18.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:40:43
2025-12-25T23:41:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:41:18.629 [DEBUG] [Thread-20584] [transport.py] [_log()] starting thread (client mode): 0xb957a650
2025-12-25T23:41:18.629 [DEBUG] [Thread-20584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:41:18.649 [DEBUG] [Thread-20584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:41:18.649 [INFO] [Thread-20584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:41:18.652 [DEBUG] [Thread-20584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] client lang: <none>
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] server lang: <none>
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] kex follows: False
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] Compression: none
2025-12-25T23:41:18.653 [DEBUG] [Thread-20584] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:41:18.661 [DEBUG] [Thread-20584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:41:18.661 [DEBUG] [Thread-20584] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:41:18.661 [DEBUG] [Thread-20584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:41:18.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:41:18.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:41:18.662 [DEBUG] [Thread-20584] [transport.py] [_log()] userauth is OK
2025-12-25T23:41:18.662 [DEBUG] [Thread-20584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:41:18.662 [DEBUG] [Thread-20584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:41:18.662 [DEBUG] [Thread-20584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:41:18.662 [DEBUG] [Thread-20584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:41:18.675 [INFO] [Thread-20584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:41:18.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:41:19.508 [DEBUG] [Thread-20584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:41:19.508 [DEBUG] [Thread-20584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:41:19.508 [DEBUG] [Thread-20584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:41:19.550 [DEBUG] [Thread-20584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:41:19.550 [DEBUG] [Thread-20584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:41:19.552 [DEBUG] [Thread-20584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:41:19.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:41:19.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:41:19.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:41:19.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:41:19.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:41:19.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:41:19.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:41:19.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.903188 -999.00  +14.10  11.58     80  +10.80 1 1 1 2 1     0    0 2.40 -62.37 ZNESW 13.2 11.6 160.4 16.0 15.1 -23.6 15.0 -23.1 14.9 -21.6 15.1 -22.6
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.903188
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:41:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:40:43', tmtdew=3.79, humidity=77.97, cloud=0.0, wind=16.32, temperature=13.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:41:15', seeing=1.73, atlas_timestamp='2025-12-25T21:40:35.443', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:37:00')
2025-12-25T23:41:19.572 [DEBUG] [Thread-20584] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:41:19.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-25T23:41:19.657 [DEBUG] [Thread-20587] [transport.py] [_log()] starting thread (client mode): 0xb957a980
2025-12-25T23:41:19.657 [DEBUG] [Thread-20587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:41:19.672 [DEBUG] [Thread-20587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:41:19.673 [INFO] [Thread-20587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] client lang: <none>
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] server lang: <none>
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] kex follows: False
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] Compression: none
2025-12-25T23:41:19.680 [DEBUG] [Thread-20587] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:41:19.740 [DEBUG] [Thread-20587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:41:19.740 [DEBUG] [Thread-20587] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:41:19.741 [DEBUG] [Thread-20587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:41:19.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:41:19.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:41:19.799 [DEBUG] [Thread-20587] [transport.py] [_log()] userauth is OK
2025-12-25T23:41:19.799 [DEBUG] [Thread-20587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:41:19.799 [DEBUG] [Thread-20587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:41:19.799 [DEBUG] [Thread-20587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:41:19.799 [DEBUG] [Thread-20587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:41:19.813 [INFO] [Thread-20587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:41:19.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:41:19.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:41:20.651 [DEBUG] [Thread-20587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:41:20.651 [DEBUG] [Thread-20587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:41:20.699 [DEBUG] [Thread-20587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:41:20.699 [DEBUG] [Thread-20587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:41:20.707 [DEBUG] [Thread-20587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:41:20.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:41:20.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:41: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-25T23:41:20.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:41:20.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:41:20.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:41:20.739 [DEBUG] [Thread-20587] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:41:23.125 [DEBUG] [Thread-20589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:35.790 [DEBUG] [Thread-20590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:38.166 [DEBUG] [Thread-20591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:41:50.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:41: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-25T23:41:51.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 41, 47), 3.7, 78.18, 0.0, 17.8, 13.87, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:41:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:41:47
2025-12-25T23:41:51.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:41:51.761 [DEBUG] [Thread-20592] [transport.py] [_log()] starting thread (client mode): 0xb955b2e0
2025-12-25T23:41:51.761 [DEBUG] [Thread-20592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:41:51.781 [DEBUG] [Thread-20592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:41:51.782 [INFO] [Thread-20592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] client lang: <none>
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] server lang: <none>
2025-12-25T23:41:51.785 [DEBUG] [Thread-20592] [transport.py] [_log()] kex follows: False
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] Compression: none
2025-12-25T23:41:51.786 [DEBUG] [Thread-20592] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:41:51.806 [DEBUG] [Thread-20592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:41:51.806 [DEBUG] [Thread-20592] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:41:51.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:41:51.807 [DEBUG] [Thread-20592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:41:51.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:41:51.809 [DEBUG] [Thread-20592] [transport.py] [_log()] userauth is OK
2025-12-25T23:41:51.810 [DEBUG] [Thread-20592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:41:51.810 [DEBUG] [Thread-20592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:41:51.810 [DEBUG] [Thread-20592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:41:51.810 [DEBUG] [Thread-20592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:41:51.834 [INFO] [Thread-20592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:41:51.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:41:52.481 [DEBUG] [Thread-20592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:41:52.481 [DEBUG] [Thread-20592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:41:52.482 [DEBUG] [Thread-20592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:41:52.522 [DEBUG] [Thread-20592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:41:52.522 [DEBUG] [Thread-20592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:41:52.525 [DEBUG] [Thread-20592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:41:52.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:41:52.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:41:52.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:41:52.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:41:52.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:41:52.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:41:52.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:41:52.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:41:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:41:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.903535 -999.00  +14.10  10.72     80  +10.80 1 1 1 2 1     0    0 2.04 -74.06 ZNESW 10.9 10.7 174.0 15.1 15.1 -23.8 15.0 -23.5 14.8 -21.6 15.1 -22.7
2025-12-25T23:41:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:41:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:41:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.903535
2025-12-25T23:41:52.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:41:52.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:41:52.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:41:52.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:41:52.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:41:52.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:41:47', tmtdew=3.7, humidity=78.18, cloud=0.0, wind=17.8, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:41:47', seeing=2.08, atlas_timestamp='2025-12-25T21:41:05.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:37:00')
2025-12-25T23:41:52.550 [DEBUG] [Thread-20592] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:41:52.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-25T23:41:52.646 [DEBUG] [Thread-20595] [transport.py] [_log()] starting thread (client mode): 0xb957a0e0
2025-12-25T23:41:52.646 [DEBUG] [Thread-20595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:41:52.661 [DEBUG] [Thread-20595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:41:52.661 [INFO] [Thread-20595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:52.668 [DEBUG] [Thread-20595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] client lang: <none>
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] server lang: <none>
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] kex follows: False
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] Compression: none
2025-12-25T23:41:52.669 [DEBUG] [Thread-20595] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:41:52.727 [DEBUG] [Thread-20595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:41:52.727 [DEBUG] [Thread-20595] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:41:52.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:41:52.728 [DEBUG] [Thread-20595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:41:52.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:41:52.784 [DEBUG] [Thread-20595] [transport.py] [_log()] userauth is OK
2025-12-25T23:41:52.784 [DEBUG] [Thread-20595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:41:52.784 [DEBUG] [Thread-20595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:41:52.784 [DEBUG] [Thread-20595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:41:52.784 [DEBUG] [Thread-20595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:41:52.803 [INFO] [Thread-20595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:41:52.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-25T23:41:52.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:41:53.200 [DEBUG] [Thread-20597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:41:53.635 [DEBUG] [Thread-20595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:41:53.636 [DEBUG] [Thread-20595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:41:53.684 [DEBUG] [Thread-20595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:41:53.684 [DEBUG] [Thread-20595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:41:53.694 [DEBUG] [Thread-20595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:41:53.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:41:53.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:41: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-25T23:41:53.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:41:53.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:41:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:41:53.729 [DEBUG] [Thread-20595] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:42:08.245 [DEBUG] [Thread-20598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:14.084 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:14.085 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:23.279 [DEBUG] [Thread-20599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:42:23.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:42:23.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-25T23:42:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 42, 19), 3.68, 78.23, 0.0, 18.17, 13.84, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:42:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:42:19
2025-12-25T23:42:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:42:24.710 [DEBUG] [Thread-20600] [transport.py] [_log()] starting thread (client mode): 0xb955a440
2025-12-25T23:42:24.710 [DEBUG] [Thread-20600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:42:24.730 [DEBUG] [Thread-20600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:42:24.730 [INFO] [Thread-20600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] client lang: <none>
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] server lang: <none>
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] kex follows: False
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:42:24.733 [DEBUG] [Thread-20600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:42:24.734 [DEBUG] [Thread-20600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:42:24.734 [DEBUG] [Thread-20600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:42:24.734 [DEBUG] [Thread-20600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:42:24.734 [DEBUG] [Thread-20600] [transport.py] [_log()] Compression: none
2025-12-25T23:42:24.734 [DEBUG] [Thread-20600] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:42:24.751 [DEBUG] [Thread-20600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:42:24.751 [DEBUG] [Thread-20600] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:42:24.752 [DEBUG] [Thread-20600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:42:24.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:42:24.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:42:24.754 [DEBUG] [Thread-20600] [transport.py] [_log()] userauth is OK
2025-12-25T23:42:24.754 [DEBUG] [Thread-20600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:42:24.754 [DEBUG] [Thread-20600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:42:24.754 [DEBUG] [Thread-20600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:42:24.754 [DEBUG] [Thread-20600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:42:24.772 [INFO] [Thread-20600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:42:24.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:42:25.595 [DEBUG] [Thread-20600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:42:25.595 [DEBUG] [Thread-20600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:42:25.595 [DEBUG] [Thread-20600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:42:25.635 [DEBUG] [Thread-20600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:42:25.635 [DEBUG] [Thread-20600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:42:25.638 [DEBUG] [Thread-20600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:42:25.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:42:25.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:42:25.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:42:25.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:42:25.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:42:25.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:42:25.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:42:25.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:42:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:42:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.903882 -999.00  +14.10  10.45     80  +10.80 1 1 1 2 1     0    0 2.15 -68.79 ZNESW 13.2 10.4 176.4 14.7 15.1 -23.8 14.9 -23.7 14.8 -21.7 15.1 -23.1
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.903882
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:42:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:42:19', tmtdew=3.68, humidity=78.23, cloud=0.0, wind=18.17, temperature=13.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:42:20', seeing=1.67, atlas_timestamp='2025-12-25T21:41:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:37:00')
2025-12-25T23:42:25.661 [DEBUG] [Thread-20600] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:42:25.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-25T23:42:25.760 [DEBUG] [Thread-20603] [transport.py] [_log()] starting thread (client mode): 0xb9558160
2025-12-25T23:42:25.760 [DEBUG] [Thread-20603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:42:25.774 [DEBUG] [Thread-20603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:42:25.774 [INFO] [Thread-20603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:42:25.781 [DEBUG] [Thread-20603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:42:25.781 [DEBUG] [Thread-20603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:42:25.782 [DEBUG] [Thread-20603] [transport.py] [_log()] client lang: <none>
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] server lang: <none>
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] kex follows: False
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] Compression: none
2025-12-25T23:42:25.783 [DEBUG] [Thread-20603] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:42:25.839 [DEBUG] [Thread-20603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:42:25.840 [DEBUG] [Thread-20603] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:42:25.841 [DEBUG] [Thread-20603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:42:25.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:42:25.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:42:25.895 [DEBUG] [Thread-20603] [transport.py] [_log()] userauth is OK
2025-12-25T23:42:25.895 [DEBUG] [Thread-20603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:42:25.896 [DEBUG] [Thread-20603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:42:25.896 [DEBUG] [Thread-20603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:42:25.896 [DEBUG] [Thread-20603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:42:25.915 [INFO] [Thread-20603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:42:25.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-25T23:42:25.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:42:26.783 [DEBUG] [Thread-20603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:42:26.783 [DEBUG] [Thread-20603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:42:26.831 [DEBUG] [Thread-20603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:42:26.831 [DEBUG] [Thread-20603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:42:26.840 [DEBUG] [Thread-20603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:42:26.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:42:26.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-25T23:42:26.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-25T23:42:26.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:42:26.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:42:26.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:42:26.877 [DEBUG] [Thread-20603] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:42:35.843 [DEBUG] [Thread-20605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:38.307 [DEBUG] [Thread-20606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:53.340 [DEBUG] [Thread-20607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:42:56.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:42:56.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:42:56.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-25T23:42:57.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 42, 51), 3.61, 78.35, 0.0, 17.54, 13.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:42:57.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:42:51
2025-12-25T23:42:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:42:57.885 [DEBUG] [Thread-20608] [transport.py] [_log()] starting thread (client mode): 0xb41050c0
2025-12-25T23:42:57.885 [DEBUG] [Thread-20608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:42:57.899 [DEBUG] [Thread-20608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:42:57.899 [INFO] [Thread-20608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:42:57.901 [DEBUG] [Thread-20608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:42:57.901 [DEBUG] [Thread-20608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] client lang: <none>
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] server lang: <none>
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] kex follows: False
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] Compression: none
2025-12-25T23:42:57.902 [DEBUG] [Thread-20608] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:42:57.921 [DEBUG] [Thread-20608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:42:57.922 [DEBUG] [Thread-20608] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:42:57.923 [DEBUG] [Thread-20608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:42:57.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:42:57.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:42:57.926 [DEBUG] [Thread-20608] [transport.py] [_log()] userauth is OK
2025-12-25T23:42:57.926 [DEBUG] [Thread-20608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:42:57.926 [DEBUG] [Thread-20608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:42:57.926 [DEBUG] [Thread-20608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:42:57.926 [DEBUG] [Thread-20608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:42:57.959 [INFO] [Thread-20608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:42:57.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:42:58.612 [DEBUG] [Thread-20608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:42:58.612 [DEBUG] [Thread-20608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:42:58.612 [DEBUG] [Thread-20608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:42:58.653 [DEBUG] [Thread-20608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:42:58.653 [DEBUG] [Thread-20608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:42:58.655 [DEBUG] [Thread-20608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:42:58.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:42:58.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:42:58.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:42:58.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:42:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:42:58.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:42:58.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.904229 -999.00  +14.00  20.16     81  +10.80 1 1 1 2 1     0    0 1.85 -78.73 ZNESW 19.5 20.2 180.6 23.0 15.0 -24.0 14.8 -24.1 14.8 -22.1 15.0 -23.1
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.904229
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:42:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:42:51', tmtdew=3.61, humidity=78.35, cloud=0.0, wind=17.54, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:42:52', seeing=1.65, atlas_timestamp='2025-12-25T21:42:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.08675000000000033, 0.0702499999999997, 0.18625000000000114, 0.0884999999999998, 0.05749999999999922, 0.0912500000000005, 0.08799999999999919, 0.1332500000000003, 0.14999999999999858, 0.04100000000000037, 0.1322499999999991, 0.09149999999999991, 0.14199999999999946, 0.1532499999999999, 0.12399999999999878, 0.10899999999999999, 0.056250000000000355, 0.09450000000000003, 0.08699999999999974, 0.10824999999999818, 0.15449999999999875, 0.19674999999999798, 0.1592500000000001, 0.1277500000000007, 0.12799999999999834, 0.13450000000000095, 0.15575000000000117, 0.22850000000000037, 0.25450000000000017, 0.22000000000000242, 0.1880000000000006, 0.14550000000000196, 0.13574999999999804], zp_timestamp='2025-12-25T21:37:00')
2025-12-25T23:42:58.674 [DEBUG] [Thread-20608] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:42:58.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-25T23:42:58.756 [DEBUG] [Thread-20611] [transport.py] [_log()] starting thread (client mode): 0xb41059c0
2025-12-25T23:42:58.756 [DEBUG] [Thread-20611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:42:58.771 [DEBUG] [Thread-20611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:42:58.771 [INFO] [Thread-20611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] client lang: <none>
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] server lang: <none>
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] kex follows: False
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:42:58.779 [DEBUG] [Thread-20611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:42:58.780 [DEBUG] [Thread-20611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:42:58.780 [DEBUG] [Thread-20611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:42:58.780 [DEBUG] [Thread-20611] [transport.py] [_log()] Compression: none
2025-12-25T23:42:58.780 [DEBUG] [Thread-20611] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:42:58.840 [DEBUG] [Thread-20611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:42:58.840 [DEBUG] [Thread-20611] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:42:58.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:42:58.841 [DEBUG] [Thread-20611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:42:58.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:42:58.899 [DEBUG] [Thread-20611] [transport.py] [_log()] userauth is OK
2025-12-25T23:42:58.899 [DEBUG] [Thread-20611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:42:58.899 [DEBUG] [Thread-20611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:42:58.899 [DEBUG] [Thread-20611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:42:58.900 [DEBUG] [Thread-20611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:42:58.918 [INFO] [Thread-20611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:42:58.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:42:58.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:42:59.817 [DEBUG] [Thread-20611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:42:59.817 [DEBUG] [Thread-20611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:42:59.865 [DEBUG] [Thread-20611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:42:59.865 [DEBUG] [Thread-20611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:42:59.874 [DEBUG] [Thread-20611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:42:59.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:42: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')
2025-12-25T23:42:59.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:42:59.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:42:59.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:42:59.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:42:59.912 [DEBUG] [Thread-20611] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:43:08.374 [DEBUG] [Thread-20613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:14.284 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:14.285 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:23.423 [DEBUG] [Thread-20614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:29.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:43:29.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:43:29.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-25T23:43:30.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 43, 23), 3.59, 78.47, 0.0, 16.78, 13.76, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:43:30.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:43:23
2025-12-25T23:43:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:43:30.910 [DEBUG] [Thread-20615] [transport.py] [_log()] starting thread (client mode): 0xb9558c40
2025-12-25T23:43:30.910 [DEBUG] [Thread-20615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:43:30.932 [DEBUG] [Thread-20615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:43:30.932 [INFO] [Thread-20615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] client lang: <none>
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] server lang: <none>
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] kex follows: False
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] Compression: none
2025-12-25T23:43:30.935 [DEBUG] [Thread-20615] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:43:30.946 [DEBUG] [Thread-20615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:43:30.947 [DEBUG] [Thread-20615] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:43:30.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:43:30.948 [DEBUG] [Thread-20615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:43:30.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:43:30.950 [DEBUG] [Thread-20615] [transport.py] [_log()] userauth is OK
2025-12-25T23:43:30.950 [DEBUG] [Thread-20615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:43:30.950 [DEBUG] [Thread-20615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:43:30.951 [DEBUG] [Thread-20615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:43:30.951 [DEBUG] [Thread-20615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:43:30.970 [INFO] [Thread-20615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:43:30.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:43:31.790 [DEBUG] [Thread-20615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:43:31.791 [DEBUG] [Thread-20615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:43:31.791 [DEBUG] [Thread-20615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:43:31.832 [DEBUG] [Thread-20615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:43:31.832 [DEBUG] [Thread-20615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:43:31.836 [DEBUG] [Thread-20615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:43:31.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:43:31.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:43:31.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:43:31.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:43:31.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:43:31.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:43:31.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:43:31.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:43:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:43:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.904576 -999.00  +14.00  12.25     81  +10.80 1 1 1 2 1     0    0 1.87 -77.78 ZNESW 10.2 12.2 169.2 19.2 15.0 -23.9 14.8 -23.7 14.7 -21.8 15.0 -22.9
2025-12-25T23:43:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:43:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:43:31.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.904576
2025-12-25T23:43:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:43:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:43:31.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:43:31.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:43:31.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:43:31.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:43:23', tmtdew=3.59, humidity=78.47, cloud=0.0, wind=16.78, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:43:24', seeing=1.79, atlas_timestamp='2025-12-25T21:42:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.08824999999999861, 0.0912500000000005, 0.2032500000000006, 0.06550000000000011, 0.08949999999999925, 0.11325000000000074, 0.1014999999999997, 0.13525000000000098, 0.1014999999999997, 0.06950000000000145, 0.1662499999999998, 0.11749999999999972, 0.17300000000000004, 0.17024999999999935, 0.11899999999999977, 0.13299999999999912, 0.08924999999999983, 0.10650000000000048, 0.09299999999999997, 0.10124999999999851, 0.13949999999999818, 0.1822499999999998, 0.19525000000000148, 0.15775000000000006, 0.12899999999999956, 0.12049999999999983, 0.23825000000000074, 0.2060000000000013, 0.24300000000000033, 0.19000000000000128, 0.198500000000001, 0.22050000000000125, 0.15374999999999872], zp_timestamp='2025-12-25T21:41:00')
2025-12-25T23:43:31.864 [DEBUG] [Thread-20615] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:43:31.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-25T23:43:31.959 [DEBUG] [Thread-20618] [transport.py] [_log()] starting thread (client mode): 0xb957bb20
2025-12-25T23:43:31.959 [DEBUG] [Thread-20618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:43:31.976 [DEBUG] [Thread-20618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:43:31.977 [INFO] [Thread-20618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:43:31.986 [DEBUG] [Thread-20618] [transport.py] [_log()] client lang: <none>
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] server lang: <none>
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] kex follows: False
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] Compression: none
2025-12-25T23:43:31.987 [DEBUG] [Thread-20618] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:43:32.042 [DEBUG] [Thread-20618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:43:32.042 [DEBUG] [Thread-20618] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:43:32.043 [DEBUG] [Thread-20618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:43:32.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:43:32.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:43:32.100 [DEBUG] [Thread-20618] [transport.py] [_log()] userauth is OK
2025-12-25T23:43:32.100 [DEBUG] [Thread-20618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:43:32.100 [DEBUG] [Thread-20618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:43:32.100 [DEBUG] [Thread-20618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:43:32.100 [DEBUG] [Thread-20618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:43:32.118 [INFO] [Thread-20618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:43:32.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-25T23:43:32.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:43:32.963 [DEBUG] [Thread-20618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:43:32.964 [DEBUG] [Thread-20618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:43:33.012 [DEBUG] [Thread-20618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:43:33.013 [DEBUG] [Thread-20618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:43:33.022 [DEBUG] [Thread-20618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:43:33.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:43:33.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-25T23:43:33.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-25T23:43:33.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:43:33.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:43:33.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:43:33.059 [DEBUG] [Thread-20618] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:43:35.922 [DEBUG] [Thread-20620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:38.461 [DEBUG] [Thread-20621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:38.655 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:43:53.521 [DEBUG] [Thread-20622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:44:03.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:44:03.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-25T23:44:03.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 43, 55), 3.58, 79.0, 0.0, 16.07, 13.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:44:03.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:43:55
2025-12-25T23:44:03.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:44:04.027 [DEBUG] [Thread-20623] [transport.py] [_log()] starting thread (client mode): 0xb9559360
2025-12-25T23:44:04.027 [DEBUG] [Thread-20623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:44:04.047 [DEBUG] [Thread-20623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:44:04.047 [INFO] [Thread-20623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] client lang: <none>
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] server lang: <none>
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] kex follows: False
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] Compression: none
2025-12-25T23:44:04.050 [DEBUG] [Thread-20623] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:44:04.067 [DEBUG] [Thread-20623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:44:04.067 [DEBUG] [Thread-20623] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:44:04.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:44:04.068 [DEBUG] [Thread-20623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:44:04.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:44:04.071 [DEBUG] [Thread-20623] [transport.py] [_log()] userauth is OK
2025-12-25T23:44:04.071 [DEBUG] [Thread-20623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:44:04.071 [DEBUG] [Thread-20623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:44:04.071 [DEBUG] [Thread-20623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:44:04.071 [DEBUG] [Thread-20623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:44:04.096 [INFO] [Thread-20623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:44:04.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:44:04.745 [DEBUG] [Thread-20623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:44:04.745 [DEBUG] [Thread-20623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:44:04.746 [DEBUG] [Thread-20623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:44:04.786 [DEBUG] [Thread-20623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:44:04.786 [DEBUG] [Thread-20623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:44:04.790 [DEBUG] [Thread-20623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:44:04.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:44:04.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:44:04.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:44:04.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:44:04.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:44:04.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:44:04.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:44:04.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:44:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:44:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.905271 -999.00  +13.90  17.35     81  +10.80 1 1 1 2 1     0    0 1.19 -95.77 ZNESW 15.1 17.4 174.6 18.6 14.9 -23.9 14.8 -23.9 14.6 -21.9 14.9 -22.9
2025-12-25T23:44:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:44:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:44:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.905271
2025-12-25T23:44:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:44:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:44:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:44:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:44:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:44:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:43:55', tmtdew=3.58, humidity=79.0, cloud=0.0, wind=16.07, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:43:56', seeing=1.79, atlas_timestamp='2025-12-25T21:43:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.08824999999999861, 0.0912500000000005, 0.2032500000000006, 0.06550000000000011, 0.08949999999999925, 0.11325000000000074, 0.1014999999999997, 0.13525000000000098, 0.1014999999999997, 0.06950000000000145, 0.1662499999999998, 0.11749999999999972, 0.17300000000000004, 0.17024999999999935, 0.11899999999999977, 0.13299999999999912, 0.08924999999999983, 0.10650000000000048, 0.09299999999999997, 0.10124999999999851, 0.13949999999999818, 0.1822499999999998, 0.19525000000000148, 0.15775000000000006, 0.12899999999999956, 0.12049999999999983, 0.23825000000000074, 0.2060000000000013, 0.24300000000000033, 0.19000000000000128, 0.198500000000001, 0.22050000000000125, 0.15374999999999872], zp_timestamp='2025-12-25T21:41:00')
2025-12-25T23:44:04.817 [DEBUG] [Thread-20623] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:44:04.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-25T23:44:04.911 [DEBUG] [Thread-20626] [transport.py] [_log()] starting thread (client mode): 0xb955a9b0
2025-12-25T23:44:04.911 [DEBUG] [Thread-20626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:44:04.927 [DEBUG] [Thread-20626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:44:04.927 [INFO] [Thread-20626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] client lang: <none>
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] server lang: <none>
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] kex follows: False
2025-12-25T23:44:04.935 [DEBUG] [Thread-20626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:44:04.936 [DEBUG] [Thread-20626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:44:04.936 [DEBUG] [Thread-20626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:44:04.936 [DEBUG] [Thread-20626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:44:04.936 [DEBUG] [Thread-20626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:44:04.936 [DEBUG] [Thread-20626] [transport.py] [_log()] Compression: none
2025-12-25T23:44:04.936 [DEBUG] [Thread-20626] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:44:04.998 [DEBUG] [Thread-20626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:44:04.998 [DEBUG] [Thread-20626] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:44:04.999 [DEBUG] [Thread-20626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:44:04.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:44:05.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:44:05.057 [DEBUG] [Thread-20626] [transport.py] [_log()] userauth is OK
2025-12-25T23:44:05.057 [DEBUG] [Thread-20626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:44:05.057 [DEBUG] [Thread-20626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:44:05.057 [DEBUG] [Thread-20626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:44:05.058 [DEBUG] [Thread-20626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:44:05.079 [INFO] [Thread-20626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:44:05.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-25T23:44:05.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:44:05.932 [DEBUG] [Thread-20626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:44:05.932 [DEBUG] [Thread-20626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:44:05.980 [DEBUG] [Thread-20626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:44:05.980 [DEBUG] [Thread-20626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:44:05.990 [DEBUG] [Thread-20626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:44:06.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:44:06.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:44:06.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-25T23:44:06.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:44:06.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:44:06.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:44:06.032 [DEBUG] [Thread-20626] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:44:08.553 [DEBUG] [Thread-20628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:14.510 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:14.511 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:23.602 [DEBUG] [Thread-20629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:35.974 [DEBUG] [Thread-20630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:36.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:44:36.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:44:36.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-25T23:44:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 44, 27), 3.57, 79.08, 0.0, 16.53, 13.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:44:36.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:44:27
2025-12-25T23:44:36.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:44:37.083 [DEBUG] [Thread-20631] [transport.py] [_log()] starting thread (client mode): 0xb4106b90
2025-12-25T23:44:37.083 [DEBUG] [Thread-20631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:44:37.102 [DEBUG] [Thread-20631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:44:37.102 [INFO] [Thread-20631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:44:37.105 [DEBUG] [Thread-20631] [transport.py] [_log()] client lang: <none>
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] server lang: <none>
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] kex follows: False
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] Compression: none
2025-12-25T23:44:37.106 [DEBUG] [Thread-20631] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:44:37.121 [DEBUG] [Thread-20631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:44:37.121 [DEBUG] [Thread-20631] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:44:37.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:44:37.121 [DEBUG] [Thread-20631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:44:37.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:44:37.122 [DEBUG] [Thread-20631] [transport.py] [_log()] userauth is OK
2025-12-25T23:44:37.122 [DEBUG] [Thread-20631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:44:37.122 [DEBUG] [Thread-20631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:44:37.122 [DEBUG] [Thread-20631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:44:37.122 [DEBUG] [Thread-20631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:44:37.131 [INFO] [Thread-20631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:44:37.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:44:37.764 [DEBUG] [Thread-20631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:44:37.764 [DEBUG] [Thread-20631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:44:37.764 [DEBUG] [Thread-20631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:44:37.806 [DEBUG] [Thread-20631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:44:37.806 [DEBUG] [Thread-20631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:44:37.808 [DEBUG] [Thread-20631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:44:37.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:44:37.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:44:37.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:44:37.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:44:37.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:44:37.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:44:37.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.905618 -999.00  +13.90  15.96     81  +10.80 1 1 1 2 1     0    0 1.34 -92.27 ZNESW 15.1 16.0 181.2 17.0 14.9 -23.9 14.8 -24.1 14.6 -22.0 14.9 -23.0
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.905618
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:44:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:44:27', tmtdew=3.57, humidity=79.08, cloud=0.0, wind=16.53, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:44:28', seeing=1.62, atlas_timestamp='2025-12-25T21:44:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.08824999999999861, 0.0912500000000005, 0.2032500000000006, 0.06550000000000011, 0.08949999999999925, 0.11325000000000074, 0.1014999999999997, 0.13525000000000098, 0.1014999999999997, 0.06950000000000145, 0.1662499999999998, 0.11749999999999972, 0.17300000000000004, 0.17024999999999935, 0.11899999999999977, 0.13299999999999912, 0.08924999999999983, 0.10650000000000048, 0.09299999999999997, 0.10124999999999851, 0.13949999999999818, 0.1822499999999998, 0.19525000000000148, 0.15775000000000006, 0.12899999999999956, 0.12049999999999983, 0.23825000000000074, 0.2060000000000013, 0.24300000000000033, 0.19000000000000128, 0.198500000000001, 0.22050000000000125, 0.15374999999999872], zp_timestamp='2025-12-25T21:41:00')
2025-12-25T23:44:37.829 [DEBUG] [Thread-20631] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:44:37.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:44:37.919 [DEBUG] [Thread-20634] [transport.py] [_log()] starting thread (client mode): 0xb4106e90
2025-12-25T23:44:37.919 [DEBUG] [Thread-20634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:44:37.934 [DEBUG] [Thread-20634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:44:37.934 [INFO] [Thread-20634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] client lang: <none>
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] server lang: <none>
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] kex follows: False
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] Compression: none
2025-12-25T23:44:37.942 [DEBUG] [Thread-20634] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:44:37.997 [DEBUG] [Thread-20634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:44:37.997 [DEBUG] [Thread-20634] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:44:37.997 [DEBUG] [Thread-20634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:44:37.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:44:37.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:44:38.054 [DEBUG] [Thread-20634] [transport.py] [_log()] userauth is OK
2025-12-25T23:44:38.054 [DEBUG] [Thread-20634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:44:38.054 [DEBUG] [Thread-20634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:44:38.054 [DEBUG] [Thread-20634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:44:38.054 [DEBUG] [Thread-20634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:44:38.069 [INFO] [Thread-20634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:44:38.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-25T23:44:38.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:44:38.629 [DEBUG] [Thread-20636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:44:38.937 [DEBUG] [Thread-20634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:44:38.937 [DEBUG] [Thread-20634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:44:38.986 [DEBUG] [Thread-20634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:44:38.986 [DEBUG] [Thread-20634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:44:38.995 [DEBUG] [Thread-20634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:44:39.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:44:39.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-25T23:44:39.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-25T23:44:39.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:44:39.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:44:39.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:44:39.033 [DEBUG] [Thread-20634] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:44:53.668 [DEBUG] [Thread-20637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:08.698 [DEBUG] [Thread-20638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:45:09.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:45:09.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-25T23:45:09.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 44, 59), 3.57, 79.08, 0.0, 16.37, 13.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:45:09.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:44:59
2025-12-25T23:45:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:45:10.032 [DEBUG] [Thread-20639] [transport.py] [_log()] starting thread (client mode): 0xb4107220
2025-12-25T23:45:10.032 [DEBUG] [Thread-20639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:45:10.047 [DEBUG] [Thread-20639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:45:10.047 [INFO] [Thread-20639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] client lang: <none>
2025-12-25T23:45:10.050 [DEBUG] [Thread-20639] [transport.py] [_log()] server lang: <none>
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] kex follows: False
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] Compression: none
2025-12-25T23:45:10.051 [DEBUG] [Thread-20639] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:45:10.069 [DEBUG] [Thread-20639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:45:10.070 [DEBUG] [Thread-20639] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:45:10.071 [DEBUG] [Thread-20639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:45:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:45:10.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:45:10.074 [DEBUG] [Thread-20639] [transport.py] [_log()] userauth is OK
2025-12-25T23:45:10.074 [DEBUG] [Thread-20639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:45:10.075 [DEBUG] [Thread-20639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:45:10.075 [DEBUG] [Thread-20639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:45:10.075 [DEBUG] [Thread-20639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:45:10.103 [INFO] [Thread-20639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:45:10.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:45:10.684 [DEBUG] [Thread-20639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:45:10.684 [DEBUG] [Thread-20639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:45:10.684 [DEBUG] [Thread-20639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:45:10.725 [DEBUG] [Thread-20639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:45:10.725 [DEBUG] [Thread-20639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:45:10.729 [DEBUG] [Thread-20639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:45:10.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:45:10.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:45:10.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:45:10.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:45:10.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:45:10.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:45:10.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:45:10.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:45:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:45:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.905965 -999.00  +13.90  13.11     81  +10.80 1 1 1 2 1     0    0 1.37 -90.16 ZNESW 13.0 13.1 182.8 17.9 14.9 -23.8 14.7 -23.8 14.6 -22.0 14.9 -23.2
2025-12-25T23:45:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:45:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:45:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.905965
2025-12-25T23:45:10.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:45:10.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:45:10.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:45:10.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:45:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:45:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:44:59', tmtdew=3.57, humidity=79.08, cloud=0.0, wind=16.37, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:45:01', seeing=1.64, atlas_timestamp='2025-12-25T21:44:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.08824999999999861, 0.0912500000000005, 0.2032500000000006, 0.06550000000000011, 0.08949999999999925, 0.11325000000000074, 0.1014999999999997, 0.13525000000000098, 0.1014999999999997, 0.06950000000000145, 0.1662499999999998, 0.11749999999999972, 0.17300000000000004, 0.17024999999999935, 0.11899999999999977, 0.13299999999999912, 0.08924999999999983, 0.10650000000000048, 0.09299999999999997, 0.10124999999999851, 0.13949999999999818, 0.1822499999999998, 0.19525000000000148, 0.15775000000000006, 0.12899999999999956, 0.12049999999999983, 0.23825000000000074, 0.2060000000000013, 0.24300000000000033, 0.19000000000000128, 0.198500000000001, 0.22050000000000125, 0.15374999999999872], zp_timestamp='2025-12-25T21:41:00')
2025-12-25T23:45:10.755 [DEBUG] [Thread-20639] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:45:10.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-25T23:45:10.851 [DEBUG] [Thread-20642] [transport.py] [_log()] starting thread (client mode): 0xb9559c30
2025-12-25T23:45:10.851 [DEBUG] [Thread-20642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:45:10.865 [DEBUG] [Thread-20642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:45:10.865 [INFO] [Thread-20642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] client lang: <none>
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] server lang: <none>
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] kex follows: False
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:45:10.873 [DEBUG] [Thread-20642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:45:10.874 [DEBUG] [Thread-20642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:45:10.874 [DEBUG] [Thread-20642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:45:10.874 [DEBUG] [Thread-20642] [transport.py] [_log()] Compression: none
2025-12-25T23:45:10.874 [DEBUG] [Thread-20642] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:45:10.930 [DEBUG] [Thread-20642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:45:10.931 [DEBUG] [Thread-20642] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:45:10.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:45:10.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:45:10.932 [DEBUG] [Thread-20642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:45:10.992 [DEBUG] [Thread-20642] [transport.py] [_log()] userauth is OK
2025-12-25T23:45:10.992 [DEBUG] [Thread-20642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:45:10.992 [DEBUG] [Thread-20642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:45:10.992 [DEBUG] [Thread-20642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:45:10.992 [DEBUG] [Thread-20642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:45:11.012 [INFO] [Thread-20642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:45:11.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:45:11.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:45:11.827 [DEBUG] [Thread-20642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:45:11.827 [DEBUG] [Thread-20642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:45:11.875 [DEBUG] [Thread-20642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:45:11.875 [DEBUG] [Thread-20642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:45:11.884 [DEBUG] [Thread-20642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:45:11.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:45:11.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-25T23:45:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:45:11.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:45:11.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:45:11.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:45:11.921 [DEBUG] [Thread-20642] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:45:14.711 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:14.711 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:23.729 [DEBUG] [Thread-20644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:36.028 [DEBUG] [Thread-20645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:38.783 [DEBUG] [Thread-20646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:45:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:45:41.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:45:41.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-25T23:45:42.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 45, 33), 3.74, 78.13, 0.0, 17.78, 13.98, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:45:42.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:45:33
2025-12-25T23:45:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:45:42.918 [DEBUG] [Thread-20647] [transport.py] [_log()] starting thread (client mode): 0xb955af20
2025-12-25T23:45:42.918 [DEBUG] [Thread-20647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:45:42.938 [DEBUG] [Thread-20647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:45:42.938 [INFO] [Thread-20647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:45:42.939 [DEBUG] [Thread-20647] [transport.py] [_log()] client lang: <none>
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] server lang: <none>
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] kex follows: False
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] Compression: none
2025-12-25T23:45:42.940 [DEBUG] [Thread-20647] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:45:42.950 [DEBUG] [Thread-20647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:45:42.950 [DEBUG] [Thread-20647] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:45:42.951 [DEBUG] [Thread-20647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:45:42.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:45:42.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:45:42.952 [DEBUG] [Thread-20647] [transport.py] [_log()] userauth is OK
2025-12-25T23:45:42.952 [DEBUG] [Thread-20647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:45:42.952 [DEBUG] [Thread-20647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:45:42.953 [DEBUG] [Thread-20647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:45:42.953 [DEBUG] [Thread-20647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:45:42.977 [INFO] [Thread-20647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:45:42.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:45:43.613 [DEBUG] [Thread-20647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:45:43.613 [DEBUG] [Thread-20647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:45:43.614 [DEBUG] [Thread-20647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:45:43.654 [DEBUG] [Thread-20647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:45:43.654 [DEBUG] [Thread-20647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:45:43.658 [DEBUG] [Thread-20647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:45:43.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:45:43.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:45:43.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:45:43.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:45:43.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:45:43.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:45:43.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:45:43.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:45:43.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:45:43.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.906312 -999.00  +13.90  12.38     81  +10.80 1 1 1 2 1     0    0 1.30 -90.88 ZNESW 8.9 12.4 170.4 15.5 14.8 -23.8 14.7 -23.7 14.6 -21.9 14.8 -23.0
2025-12-25T23:45:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:45:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:45:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.906312
2025-12-25T23:45:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:45:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:45:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:45:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:45:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:45:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:45:33', tmtdew=3.74, humidity=78.13, cloud=0.0, wind=17.78, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:45:33', seeing=1.64, atlas_timestamp='2025-12-25T21:45:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.08824999999999861, 0.0912500000000005, 0.2032500000000006, 0.06550000000000011, 0.08949999999999925, 0.11325000000000074, 0.1014999999999997, 0.13525000000000098, 0.1014999999999997, 0.06950000000000145, 0.1662499999999998, 0.11749999999999972, 0.17300000000000004, 0.17024999999999935, 0.11899999999999977, 0.13299999999999912, 0.08924999999999983, 0.10650000000000048, 0.09299999999999997, 0.10124999999999851, 0.13949999999999818, 0.1822499999999998, 0.19525000000000148, 0.15775000000000006, 0.12899999999999956, 0.12049999999999983, 0.23825000000000074, 0.2060000000000013, 0.24300000000000033, 0.19000000000000128, 0.198500000000001, 0.22050000000000125, 0.15374999999999872], zp_timestamp='2025-12-25T21:41:00')
2025-12-25T23:45:43.686 [DEBUG] [Thread-20647] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:45:43.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-25T23:45:43.781 [DEBUG] [Thread-20650] [transport.py] [_log()] starting thread (client mode): 0xb955ae90
2025-12-25T23:45:43.782 [DEBUG] [Thread-20650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:45:43.796 [DEBUG] [Thread-20650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:45:43.796 [INFO] [Thread-20650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:43.803 [DEBUG] [Thread-20650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] client lang: <none>
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] server lang: <none>
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] kex follows: False
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] Compression: none
2025-12-25T23:45:43.804 [DEBUG] [Thread-20650] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:45:43.861 [DEBUG] [Thread-20650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:45:43.861 [DEBUG] [Thread-20650] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:45:43.861 [DEBUG] [Thread-20650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:45:43.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:45:43.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:45:43.918 [DEBUG] [Thread-20650] [transport.py] [_log()] userauth is OK
2025-12-25T23:45:43.919 [DEBUG] [Thread-20650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:45:43.919 [DEBUG] [Thread-20650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:45:43.919 [DEBUG] [Thread-20650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:45:43.919 [DEBUG] [Thread-20650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:45:43.946 [INFO] [Thread-20650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:45:43.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-25T23:45:43.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:45:44.811 [DEBUG] [Thread-20650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:45:44.811 [DEBUG] [Thread-20650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:45:44.859 [DEBUG] [Thread-20650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:45:44.859 [DEBUG] [Thread-20650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:45:44.869 [DEBUG] [Thread-20650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:45:44.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:45:44.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-25T23:45:44.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-25T23:45:44.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:45:44.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:45:44.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:45:44.906 [DEBUG] [Thread-20650] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:45:53.817 [DEBUG] [Thread-20652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46:08.855 [DEBUG] [Thread-20653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46:14.927 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46:14.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:46:14.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:46:14.929 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46: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-25T23:46:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 46, 5), 3.55, 79.17, 0.0, 16.37, 13.81, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:46:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:46:05
2025-12-25T23:46:15.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:46:15.904 [DEBUG] [Thread-20654] [transport.py] [_log()] starting thread (client mode): 0xb4107220
2025-12-25T23:46:15.904 [DEBUG] [Thread-20654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:46:15.923 [DEBUG] [Thread-20654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:46:15.923 [INFO] [Thread-20654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] client lang: <none>
2025-12-25T23:46:15.926 [DEBUG] [Thread-20654] [transport.py] [_log()] server lang: <none>
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] kex follows: False
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] Compression: none
2025-12-25T23:46:15.927 [DEBUG] [Thread-20654] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:46:15.944 [DEBUG] [Thread-20654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:46:15.945 [DEBUG] [Thread-20654] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:46:15.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:46:15.946 [DEBUG] [Thread-20654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:46:15.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:46:15.948 [DEBUG] [Thread-20654] [transport.py] [_log()] userauth is OK
2025-12-25T23:46:15.948 [DEBUG] [Thread-20654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:46:15.948 [DEBUG] [Thread-20654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:46:15.948 [DEBUG] [Thread-20654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:46:15.948 [DEBUG] [Thread-20654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:46:15.973 [INFO] [Thread-20654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:46:15.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:46:16.584 [DEBUG] [Thread-20654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:46:16.584 [DEBUG] [Thread-20654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:46:16.585 [DEBUG] [Thread-20654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:46:16.625 [DEBUG] [Thread-20654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:46:16.626 [DEBUG] [Thread-20654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:46:16.629 [DEBUG] [Thread-20654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:46:16.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:46:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:46:16.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:46:16.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:46:16.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:46:16.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:46:16.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:46:16.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:46:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:46:16.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.906660 -999.00  +13.90  14.77     81  +10.80 1 1 1 2 1     0    0 1.28 -91.28 ZNESW 11.9 14.8 180.6 18.7 14.8 -23.7 14.7 -23.7 14.5 -21.8 14.8 -23.1
2025-12-25T23:46:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:46:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:46:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.906660
2025-12-25T23:46:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:46:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:46:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:46:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:46:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:46:16.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:46:05', tmtdew=3.55, humidity=79.17, cloud=0.0, wind=16.37, 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-25T23:46:07', seeing=1.58, atlas_timestamp='2025-12-25T21:45:35.424', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:45:00')
2025-12-25T23:46:16.660 [DEBUG] [Thread-20654] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:46:16.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-25T23:46:16.754 [DEBUG] [Thread-20657] [transport.py] [_log()] starting thread (client mode): 0xb4107f10
2025-12-25T23:46:16.754 [DEBUG] [Thread-20657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:46:16.775 [DEBUG] [Thread-20657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:46:16.775 [INFO] [Thread-20657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:46:16.782 [DEBUG] [Thread-20657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:46:16.782 [DEBUG] [Thread-20657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:46:16.782 [DEBUG] [Thread-20657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] client lang: <none>
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] server lang: <none>
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] kex follows: False
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:46:16.783 [DEBUG] [Thread-20657] [transport.py] [_log()] Compression: none
2025-12-25T23:46:16.784 [DEBUG] [Thread-20657] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:46:16.847 [DEBUG] [Thread-20657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:46:16.848 [DEBUG] [Thread-20657] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:46:16.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:46:16.849 [DEBUG] [Thread-20657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:46:16.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:46:16.904 [DEBUG] [Thread-20657] [transport.py] [_log()] userauth is OK
2025-12-25T23:46:16.905 [DEBUG] [Thread-20657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:46:16.905 [DEBUG] [Thread-20657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:46:16.905 [DEBUG] [Thread-20657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:46:16.905 [DEBUG] [Thread-20657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:46:16.924 [INFO] [Thread-20657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:46:16.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-25T23:46:16.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:46:17.769 [DEBUG] [Thread-20657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:46:17.769 [DEBUG] [Thread-20657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:46:17.817 [DEBUG] [Thread-20657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:46:17.817 [DEBUG] [Thread-20657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:46:17.826 [DEBUG] [Thread-20657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:46:17.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:46: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')
2025-12-25T23:46:17.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-25T23:46:17.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:46:17.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:46:17.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:46:17.864 [DEBUG] [Thread-20657] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:46:23.887 [DEBUG] [Thread-20659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46:36.079 [DEBUG] [Thread-20660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46:38.938 [DEBUG] [Thread-20661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:46:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:46:47.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:46:47.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-25T23:46:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 46, 38), 3.55, 79.18, 0.0, 18.23, 13.69, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:46:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:46:38
2025-12-25T23:46:48.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:46:48.854 [DEBUG] [Thread-20662] [transport.py] [_log()] starting thread (client mode): 0xb955b850
2025-12-25T23:46:48.855 [DEBUG] [Thread-20662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:46:48.874 [DEBUG] [Thread-20662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:46:48.874 [INFO] [Thread-20662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] client lang: <none>
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] server lang: <none>
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] kex follows: False
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] Compression: none
2025-12-25T23:46:48.878 [DEBUG] [Thread-20662] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:46:48.893 [DEBUG] [Thread-20662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:46:48.894 [DEBUG] [Thread-20662] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:46:48.894 [DEBUG] [Thread-20662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:46:48.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:46:48.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:46:48.895 [DEBUG] [Thread-20662] [transport.py] [_log()] userauth is OK
2025-12-25T23:46:48.896 [DEBUG] [Thread-20662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:46:48.896 [DEBUG] [Thread-20662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:46:48.896 [DEBUG] [Thread-20662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:46:48.896 [DEBUG] [Thread-20662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:46:48.916 [INFO] [Thread-20662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:46:48.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:46:49.536 [DEBUG] [Thread-20662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:46:49.536 [DEBUG] [Thread-20662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:46:49.537 [DEBUG] [Thread-20662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:46:49.578 [DEBUG] [Thread-20662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:46:49.578 [DEBUG] [Thread-20662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:46:49.581 [DEBUG] [Thread-20662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:46:49.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:46:49.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:46:49.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:46:49.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:46:49.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:46:49.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:46:49.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:46:49.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:46:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:46:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.907007 -999.00  +13.80  15.35     82  +10.80 1 1 1 2 1     0    0 1.26 -92.38 ZNESW 11.6 15.3 175.6 18.0 14.8 -23.6 14.6 -23.6 14.6 -21.8 14.8 -22.9
2025-12-25T23:46:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:46:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:46:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.907007
2025-12-25T23:46:49.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:46:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:46:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:46:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:46:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:46:49.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:46:38', tmtdew=3.55, humidity=79.18, cloud=0.0, wind=18.23, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:46:39', seeing=1.92, atlas_timestamp='2025-12-25T21:46:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:45:00')
2025-12-25T23:46:49.608 [DEBUG] [Thread-20662] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:46:49.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:46:49.704 [DEBUG] [Thread-20665] [transport.py] [_log()] starting thread (client mode): 0xb955bfd0
2025-12-25T23:46:49.704 [DEBUG] [Thread-20665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:46:49.720 [DEBUG] [Thread-20665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:46:49.720 [INFO] [Thread-20665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:49.728 [DEBUG] [Thread-20665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] client lang: <none>
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] server lang: <none>
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] kex follows: False
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] Compression: none
2025-12-25T23:46:49.729 [DEBUG] [Thread-20665] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:46:49.786 [DEBUG] [Thread-20665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:46:49.786 [DEBUG] [Thread-20665] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:46:49.787 [DEBUG] [Thread-20665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:46:49.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:46:49.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:46:49.842 [DEBUG] [Thread-20665] [transport.py] [_log()] userauth is OK
2025-12-25T23:46:49.843 [DEBUG] [Thread-20665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:46:49.843 [DEBUG] [Thread-20665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:46:49.843 [DEBUG] [Thread-20665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:46:49.843 [DEBUG] [Thread-20665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:46:49.862 [INFO] [Thread-20665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:46:49.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:46:49.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:46:50.687 [DEBUG] [Thread-20665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:46:50.688 [DEBUG] [Thread-20665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:46:50.736 [DEBUG] [Thread-20665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:46:50.736 [DEBUG] [Thread-20665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:46:50.745 [DEBUG] [Thread-20665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:46:50.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:46:50.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-25T23:46:50.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-25T23:46:50.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:46:50.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:46:50.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:46:50.782 [DEBUG] [Thread-20665] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:46:53.974 [DEBUG] [Thread-20667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:09.030 [DEBUG] [Thread-20668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:15.130 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:15.132 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:47:20.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:47:20.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-25T23:47:21.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 47, 10), 3.53, 79.28, 0.0, 20.66, 13.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:47:21.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:47:10
2025-12-25T23:47:21.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:47:21.764 [DEBUG] [Thread-20669] [transport.py] [_log()] starting thread (client mode): 0xb955b940
2025-12-25T23:47:21.764 [DEBUG] [Thread-20669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:47:21.786 [DEBUG] [Thread-20669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:47:21.786 [INFO] [Thread-20669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:47:21.789 [DEBUG] [Thread-20669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] client lang: <none>
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] server lang: <none>
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] kex follows: False
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] Compression: none
2025-12-25T23:47:21.790 [DEBUG] [Thread-20669] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:47:21.807 [DEBUG] [Thread-20669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:47:21.808 [DEBUG] [Thread-20669] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:47:21.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:47:21.809 [DEBUG] [Thread-20669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:47:21.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:47:21.811 [DEBUG] [Thread-20669] [transport.py] [_log()] userauth is OK
2025-12-25T23:47:21.811 [DEBUG] [Thread-20669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:47:21.811 [DEBUG] [Thread-20669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:47:21.812 [DEBUG] [Thread-20669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:47:21.812 [DEBUG] [Thread-20669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:47:21.836 [INFO] [Thread-20669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:47:21.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:47:22.507 [DEBUG] [Thread-20669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:47:22.507 [DEBUG] [Thread-20669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:47:22.507 [DEBUG] [Thread-20669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:47:22.548 [DEBUG] [Thread-20669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:47:22.548 [DEBUG] [Thread-20669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:47:22.552 [DEBUG] [Thread-20669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:47:22.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:47:22.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:47:22.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:47:22.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:47:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:47:22.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:47:22.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:47:22.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:47:22.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:47:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.907701 -999.00  +13.80  12.56     81  +10.80 1 1 1 2 1     0    0 1.26 -89.60 ZNESW 14.8 12.6 164.0 15.8 14.8 -23.5 14.6 -22.9 14.5 -21.5 14.8 -22.9
2025-12-25T23:47:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:47:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:47:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.907701
2025-12-25T23:47:22.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:47:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:47:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:47:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:47:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:47:22.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:47:10', tmtdew=3.53, humidity=79.28, cloud=0.0, wind=20.66, 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-25T23:47:11', seeing=1.92, atlas_timestamp='2025-12-25T21:47:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:45:00')
2025-12-25T23:47:22.579 [DEBUG] [Thread-20669] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:47:22.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-25T23:47:22.683 [DEBUG] [Thread-20672] [transport.py] [_log()] starting thread (client mode): 0xb955a2f0
2025-12-25T23:47:22.684 [DEBUG] [Thread-20672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:47:22.698 [DEBUG] [Thread-20672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:47:22.698 [INFO] [Thread-20672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:22.706 [DEBUG] [Thread-20672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] client lang: <none>
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] server lang: <none>
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] kex follows: False
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] Compression: none
2025-12-25T23:47:22.707 [DEBUG] [Thread-20672] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:47:22.764 [DEBUG] [Thread-20672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:47:22.764 [DEBUG] [Thread-20672] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:47:22.765 [DEBUG] [Thread-20672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:47:22.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:47:22.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:47:22.820 [DEBUG] [Thread-20672] [transport.py] [_log()] userauth is OK
2025-12-25T23:47:22.820 [DEBUG] [Thread-20672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:47:22.821 [DEBUG] [Thread-20672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:47:22.821 [DEBUG] [Thread-20672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:47:22.821 [DEBUG] [Thread-20672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:47:22.839 [INFO] [Thread-20672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:47:22.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-25T23:47:22.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:47:23.651 [DEBUG] [Thread-20672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:47:23.651 [DEBUG] [Thread-20672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:47:23.699 [DEBUG] [Thread-20672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:47:23.700 [DEBUG] [Thread-20672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:47:23.709 [DEBUG] [Thread-20672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:47:23.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:47:23.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-25T23:47:23.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-25T23:47:23.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:47:23.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:47:23.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:47:23.746 [DEBUG] [Thread-20672] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:47:24.059 [DEBUG] [Thread-20674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:36.138 [DEBUG] [Thread-20675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:39.113 [DEBUG] [Thread-20676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:53.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:47:53.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:47:53.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:47:54.144 [DEBUG] [Thread-20677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:47:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 47, 42), 3.51, 79.38, 0.0, 18.51, 13.72, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:47:54.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:47:42
2025-12-25T23:47:54.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:47:54.749 [DEBUG] [Thread-20678] [transport.py] [_log()] starting thread (client mode): 0xb4105420
2025-12-25T23:47:54.749 [DEBUG] [Thread-20678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:47:54.769 [DEBUG] [Thread-20678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:47:54.769 [INFO] [Thread-20678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:47:54.772 [DEBUG] [Thread-20678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:47:54.772 [DEBUG] [Thread-20678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] client lang: <none>
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] server lang: <none>
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] kex follows: False
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] Compression: none
2025-12-25T23:47:54.773 [DEBUG] [Thread-20678] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:47:54.790 [DEBUG] [Thread-20678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:47:54.790 [DEBUG] [Thread-20678] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:47:54.791 [DEBUG] [Thread-20678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:47:54.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:47:54.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:47:54.793 [DEBUG] [Thread-20678] [transport.py] [_log()] userauth is OK
2025-12-25T23:47:54.793 [DEBUG] [Thread-20678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:47:54.793 [DEBUG] [Thread-20678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:47:54.793 [DEBUG] [Thread-20678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:47:54.793 [DEBUG] [Thread-20678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:47:54.818 [INFO] [Thread-20678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:47:54.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:47:55.479 [DEBUG] [Thread-20678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:47:55.479 [DEBUG] [Thread-20678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:47:55.479 [DEBUG] [Thread-20678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:47:55.519 [DEBUG] [Thread-20678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:47:55.520 [DEBUG] [Thread-20678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:47:55.522 [DEBUG] [Thread-20678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:47:55.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:47:55.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:47:55.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:47:55.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:47:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:47:55.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:47:55.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:47:55.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:47:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:47:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.908048 -999.00  +13.80  14.86     82  +10.80 1 1 1 2 1     0    0 1.11 -91.92 ZNESW 13.1 14.9 160.8 18.1 14.8 -23.4 14.6 -22.9 14.5 -21.6 14.8 -22.7
2025-12-25T23:47:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:47:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:47:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.908048
2025-12-25T23:47:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:47:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:47:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:47:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:47:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:47:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:47:42', tmtdew=3.51, humidity=79.38, cloud=0.0, wind=18.51, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:47:43', seeing=2.54, atlas_timestamp='2025-12-25T21:47:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:45:00')
2025-12-25T23:47:55.546 [DEBUG] [Thread-20678] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:47:55.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-25T23:47:55.653 [DEBUG] [Thread-20681] [transport.py] [_log()] starting thread (client mode): 0xb955bb80
2025-12-25T23:47:55.653 [DEBUG] [Thread-20681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:47:55.670 [DEBUG] [Thread-20681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:47:55.670 [INFO] [Thread-20681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] client lang: <none>
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] server lang: <none>
2025-12-25T23:47:55.681 [DEBUG] [Thread-20681] [transport.py] [_log()] kex follows: False
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] Compression: none
2025-12-25T23:47:55.682 [DEBUG] [Thread-20681] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:47:55.738 [DEBUG] [Thread-20681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:47:55.739 [DEBUG] [Thread-20681] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:47:55.740 [DEBUG] [Thread-20681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:47:55.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:47:55.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:47:55.801 [DEBUG] [Thread-20681] [transport.py] [_log()] userauth is OK
2025-12-25T23:47:55.801 [DEBUG] [Thread-20681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:47:55.801 [DEBUG] [Thread-20681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:47:55.801 [DEBUG] [Thread-20681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:47:55.801 [DEBUG] [Thread-20681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:47:55.818 [INFO] [Thread-20681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:47:55.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-25T23:47:55.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:47:56.641 [DEBUG] [Thread-20681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:47:56.642 [DEBUG] [Thread-20681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:47:56.692 [DEBUG] [Thread-20681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:47:56.693 [DEBUG] [Thread-20681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:47:56.704 [DEBUG] [Thread-20681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:47:56.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:47:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:47:56.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:47:56.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:47:56.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:47:56.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:47:56.746 [DEBUG] [Thread-20681] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:48:09.177 [DEBUG] [Thread-20683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:15.342 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:15.343 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:24.225 [DEBUG] [Thread-20684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:26.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:48:26.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:48:26.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-25T23:48:27.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 48, 14), 3.5, 79.45, 0.0, 19.92, 13.71, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:48:27.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:48:14
2025-12-25T23:48:27.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:48:27.777 [DEBUG] [Thread-20685] [transport.py] [_log()] starting thread (client mode): 0xb955bfd0
2025-12-25T23:48:27.777 [DEBUG] [Thread-20685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:48:27.798 [DEBUG] [Thread-20685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:48:27.798 [INFO] [Thread-20685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] client lang: <none>
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] server lang: <none>
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] kex follows: False
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] Compression: none
2025-12-25T23:48:27.800 [DEBUG] [Thread-20685] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:48:27.814 [DEBUG] [Thread-20685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:48:27.814 [DEBUG] [Thread-20685] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:48:27.814 [DEBUG] [Thread-20685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:48:27.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:48:27.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:48:27.815 [DEBUG] [Thread-20685] [transport.py] [_log()] userauth is OK
2025-12-25T23:48:27.815 [DEBUG] [Thread-20685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:48:27.815 [DEBUG] [Thread-20685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:48:27.815 [DEBUG] [Thread-20685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:48:27.815 [DEBUG] [Thread-20685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:48:27.826 [INFO] [Thread-20685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:48:27.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:48:28.493 [DEBUG] [Thread-20685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:48:28.493 [DEBUG] [Thread-20685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:48:28.493 [DEBUG] [Thread-20685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:48:28.534 [DEBUG] [Thread-20685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:48:28.535 [DEBUG] [Thread-20685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:48:28.537 [DEBUG] [Thread-20685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:48:28.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:48:28.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:48:28.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:48:28.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:48:28.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:48:28.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:48:28.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.908396 -999.00  +13.70  16.33     82  +10.80 1 1 1 2 1     0    0 1.06 -92.52 ZNESW 15.8 16.3 163.0 19.4 14.7 -23.4 14.6 -22.8 14.4 -21.6 14.7 -22.7
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.908396
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:48:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:48:14', tmtdew=3.5, humidity=79.45, cloud=0.0, wind=19.92, 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-25T23:48:15', seeing=2.47, atlas_timestamp='2025-12-25T21:48:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:45:00')
2025-12-25T23:48:28.556 [DEBUG] [Thread-20685] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:48:28.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-25T23:48:28.643 [DEBUG] [Thread-20688] [transport.py] [_log()] starting thread (client mode): 0xb9558c70
2025-12-25T23:48:28.643 [DEBUG] [Thread-20688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:48:28.660 [DEBUG] [Thread-20688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:48:28.660 [INFO] [Thread-20688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:48:28.671 [DEBUG] [Thread-20688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:48:28.671 [DEBUG] [Thread-20688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] client lang: <none>
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] server lang: <none>
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] kex follows: False
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] Compression: none
2025-12-25T23:48:28.672 [DEBUG] [Thread-20688] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:48:28.734 [DEBUG] [Thread-20688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:48:28.734 [DEBUG] [Thread-20688] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:48:28.735 [DEBUG] [Thread-20688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:48:28.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:48:28.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:48:28.797 [DEBUG] [Thread-20688] [transport.py] [_log()] userauth is OK
2025-12-25T23:48:28.797 [DEBUG] [Thread-20688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:48:28.797 [DEBUG] [Thread-20688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:48:28.797 [DEBUG] [Thread-20688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:48:28.797 [DEBUG] [Thread-20688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:48:28.813 [INFO] [Thread-20688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:48:28.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-25T23:48:28.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:48:29.663 [DEBUG] [Thread-20688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:48:29.663 [DEBUG] [Thread-20688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:48:29.715 [DEBUG] [Thread-20688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:48:29.715 [DEBUG] [Thread-20688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:48:29.727 [DEBUG] [Thread-20688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:48:29.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:48:29.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-25T23:48: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') -> 00000000
2025-12-25T23:48:29.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:48:29.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:48:29.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:48:29.772 [DEBUG] [Thread-20688] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:48:36.194 [DEBUG] [Thread-20690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:39.256 [DEBUG] [Thread-20691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:54.305 [DEBUG] [Thread-20692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:48:59.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:48:59.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:48:59.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-25T23:49:00.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 48, 46), 3.43, 79.55, 0.0, 19.87, 13.64, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:49:00.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:48:46
2025-12-25T23:49:00.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:49:00.759 [DEBUG] [Thread-20693] [transport.py] [_log()] starting thread (client mode): 0xb41056c0
2025-12-25T23:49:00.759 [DEBUG] [Thread-20693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:49:00.778 [DEBUG] [Thread-20693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:49:00.778 [INFO] [Thread-20693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] client lang: <none>
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] server lang: <none>
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] kex follows: False
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:49:00.780 [DEBUG] [Thread-20693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:49:00.781 [DEBUG] [Thread-20693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:49:00.781 [DEBUG] [Thread-20693] [transport.py] [_log()] Compression: none
2025-12-25T23:49:00.781 [DEBUG] [Thread-20693] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:49:00.796 [DEBUG] [Thread-20693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:49:00.797 [DEBUG] [Thread-20693] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:49:00.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:49:00.798 [DEBUG] [Thread-20693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:49:00.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:49:00.802 [DEBUG] [Thread-20693] [transport.py] [_log()] userauth is OK
2025-12-25T23:49:00.802 [DEBUG] [Thread-20693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:49:00.802 [DEBUG] [Thread-20693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:49:00.802 [DEBUG] [Thread-20693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:49:00.802 [DEBUG] [Thread-20693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:49:00.827 [INFO] [Thread-20693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:49:00.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:49:01.417 [DEBUG] [Thread-20693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:49:01.417 [DEBUG] [Thread-20693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:49:01.417 [DEBUG] [Thread-20693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:49:01.458 [DEBUG] [Thread-20693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:49:01.458 [DEBUG] [Thread-20693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:49:01.459 [DEBUG] [Thread-20693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:49:01.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:49:01.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:49:01.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:49:01.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:49:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:49:01.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:49:01.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:49:01.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.908743 -999.00  +13.70  10.58     82  +10.80 1 1 1 2 1     0    0 1.24 -88.16 ZNESW 9.4 10.6 169.8 16.2 14.7 -23.4 14.5 -23.1 14.4 -21.5 14.7 -22.6
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.908743
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:49:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:48:46', tmtdew=3.43, humidity=79.55, cloud=0.0, wind=19.87, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:48:47', seeing=2.42, atlas_timestamp='2025-12-25T21:48:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:45:00')
2025-12-25T23:49:01.475 [DEBUG] [Thread-20693] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:49:01.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-25T23:49:01.558 [DEBUG] [Thread-20696] [transport.py] [_log()] starting thread (client mode): 0xb6b29bd0
2025-12-25T23:49:01.558 [DEBUG] [Thread-20696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:49:01.575 [DEBUG] [Thread-20696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:49:01.575 [INFO] [Thread-20696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:49:01.584 [DEBUG] [Thread-20696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:49:01.584 [DEBUG] [Thread-20696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] client lang: <none>
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] server lang: <none>
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] kex follows: False
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:49:01.585 [DEBUG] [Thread-20696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:49:01.586 [DEBUG] [Thread-20696] [transport.py] [_log()] Compression: none
2025-12-25T23:49:01.586 [DEBUG] [Thread-20696] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:49:01.645 [DEBUG] [Thread-20696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:49:01.646 [DEBUG] [Thread-20696] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:49:01.647 [DEBUG] [Thread-20696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:49:01.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:49:01.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:49:01.704 [DEBUG] [Thread-20696] [transport.py] [_log()] userauth is OK
2025-12-25T23:49:01.705 [DEBUG] [Thread-20696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:49:01.705 [DEBUG] [Thread-20696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:49:01.705 [DEBUG] [Thread-20696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:49:01.705 [DEBUG] [Thread-20696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:49:01.731 [INFO] [Thread-20696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:49:01.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-25T23:49:01.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:49:02.624 [DEBUG] [Thread-20696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:49:02.625 [DEBUG] [Thread-20696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:49:02.674 [DEBUG] [Thread-20696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:49:02.674 [DEBUG] [Thread-20696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:49:02.692 [DEBUG] [Thread-20696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:49:02.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:49:02.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:49:02.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-25T23:49:02.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:49:02.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:49:02.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:49:02.739 [DEBUG] [Thread-20696] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:49:09.337 [DEBUG] [Thread-20698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:15.543 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:15.545 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:24.375 [DEBUG] [Thread-20699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:49:32.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:49:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:49:33.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 49, 19), 3.42, 79.58, 0.0, 19.46, 13.62, 0, 0, 0, 2, 0, 0),)
2025-12-25T23:49:33.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:49:19
2025-12-25T23:49:33.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:49:33.718 [DEBUG] [Thread-20700] [transport.py] [_log()] starting thread (client mode): 0xb4107ca0
2025-12-25T23:49:33.718 [DEBUG] [Thread-20700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:49:33.731 [DEBUG] [Thread-20700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:49:33.731 [INFO] [Thread-20700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] client lang: <none>
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] server lang: <none>
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] kex follows: False
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] Compression: none
2025-12-25T23:49:33.733 [DEBUG] [Thread-20700] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:49:33.740 [DEBUG] [Thread-20700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:49:33.741 [DEBUG] [Thread-20700] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:49:33.741 [DEBUG] [Thread-20700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:49:33.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:49:33.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:49:33.742 [DEBUG] [Thread-20700] [transport.py] [_log()] userauth is OK
2025-12-25T23:49:33.742 [DEBUG] [Thread-20700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:49:33.742 [DEBUG] [Thread-20700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:49:33.742 [DEBUG] [Thread-20700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:49:33.742 [DEBUG] [Thread-20700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:49:33.759 [INFO] [Thread-20700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:49:33.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:49:34.381 [DEBUG] [Thread-20700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:49:34.383 [DEBUG] [Thread-20700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:49:34.383 [DEBUG] [Thread-20700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:49:34.423 [DEBUG] [Thread-20700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:49:34.423 [DEBUG] [Thread-20700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:49:34.425 [DEBUG] [Thread-20700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:49:34.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:49:34.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:49:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:49:34.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:49:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:49:34.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:49:34.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:49:34.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:49:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:49:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.909090 -999.00  +13.70   7.32     82  +10.80 1 1 1 2 1     0    0 1.10 -88.73 ZNESW 8.9 7.3 172.6 13.4 14.7 -23.3 14.5 -22.9 14.4 -21.5 14.7 -22.6
2025-12-25T23:49:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:49:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:49:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.909090
2025-12-25T23:49:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:49:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:49:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:49:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:49:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:49:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:49:19', tmtdew=3.42, humidity=79.58, cloud=0.0, wind=19.46, 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-25T23:49:19', seeing=1.86, atlas_timestamp='2025-12-25T21:49:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:48:00')
2025-12-25T23:49:34.444 [DEBUG] [Thread-20700] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:49:34.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-25T23:49:34.537 [DEBUG] [Thread-20703] [transport.py] [_log()] starting thread (client mode): 0xb9559de0
2025-12-25T23:49:34.537 [DEBUG] [Thread-20703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:49:34.551 [DEBUG] [Thread-20703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:49:34.551 [INFO] [Thread-20703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:49:34.559 [DEBUG] [Thread-20703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:49:34.559 [DEBUG] [Thread-20703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:49:34.559 [DEBUG] [Thread-20703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] client lang: <none>
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] server lang: <none>
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] kex follows: False
2025-12-25T23:49:34.560 [DEBUG] [Thread-20703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:49:34.561 [DEBUG] [Thread-20703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:49:34.561 [DEBUG] [Thread-20703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:49:34.561 [DEBUG] [Thread-20703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:49:34.561 [DEBUG] [Thread-20703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:49:34.561 [DEBUG] [Thread-20703] [transport.py] [_log()] Compression: none
2025-12-25T23:49:34.561 [DEBUG] [Thread-20703] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:49:34.618 [DEBUG] [Thread-20703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:49:34.618 [DEBUG] [Thread-20703] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:49:34.619 [DEBUG] [Thread-20703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:49:34.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:49:34.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:49:34.677 [DEBUG] [Thread-20703] [transport.py] [_log()] userauth is OK
2025-12-25T23:49:34.678 [DEBUG] [Thread-20703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:49:34.678 [DEBUG] [Thread-20703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:49:34.678 [DEBUG] [Thread-20703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:49:34.678 [DEBUG] [Thread-20703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:49:34.697 [INFO] [Thread-20703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:49:34.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-25T23:49:34.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:49:35.532 [DEBUG] [Thread-20703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:49:35.532 [DEBUG] [Thread-20703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:49:35.581 [DEBUG] [Thread-20703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:49:35.581 [DEBUG] [Thread-20703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:49:35.589 [DEBUG] [Thread-20703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:49:35.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:49: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')
2025-12-25T23:49:35.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:49:35.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:49:35.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:49:35.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:49:35.624 [DEBUG] [Thread-20703] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:49:36.270 [DEBUG] [Thread-20705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:39.409 [DEBUG] [Thread-20706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:39.886 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:48.541 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:52.667 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:49:54.456 [DEBUG] [Thread-20707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:50:05.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:50:05.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-25T23:50:06.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 49, 51), 3.36, 80.13, 0.0, 18.26, 13.64, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:50:06.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:49:51
2025-12-25T23:50:06.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:50:06.618 [DEBUG] [Thread-20708] [transport.py] [_log()] starting thread (client mode): 0xb4106e60
2025-12-25T23:50:06.618 [DEBUG] [Thread-20708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:50:06.638 [DEBUG] [Thread-20708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:50:06.639 [INFO] [Thread-20708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:50:06.642 [DEBUG] [Thread-20708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] client lang: <none>
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] server lang: <none>
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] kex follows: False
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] Compression: none
2025-12-25T23:50:06.643 [DEBUG] [Thread-20708] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:50:06.662 [DEBUG] [Thread-20708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:50:06.662 [DEBUG] [Thread-20708] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:50:06.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:50:06.663 [DEBUG] [Thread-20708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:50:06.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:50:06.665 [DEBUG] [Thread-20708] [transport.py] [_log()] userauth is OK
2025-12-25T23:50:06.666 [DEBUG] [Thread-20708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:50:06.666 [DEBUG] [Thread-20708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:50:06.666 [DEBUG] [Thread-20708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:50:06.666 [DEBUG] [Thread-20708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:50:06.689 [INFO] [Thread-20708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:50:06.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:50:09.491 [DEBUG] [Thread-20710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:12.251 [DEBUG] [Thread-20708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:50:12.251 [DEBUG] [Thread-20708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:50:12.252 [DEBUG] [Thread-20708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:50:12.292 [DEBUG] [Thread-20708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:50:12.292 [DEBUG] [Thread-20708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:50:12.295 [DEBUG] [Thread-20708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:50:12.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:50:12.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:50:12.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:50:12.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:50:12.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:50:12.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:50:12.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:50:12.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:50:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:50:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.909090 -999.00  +13.70   7.32     82  +10.80 1 1 1 2 1     0    0 1.10 -88.73 ZNESW 8.9 7.3 172.6 13.4 14.7 -23.3 14.5 -22.9 14.4 -21.5 14.7 -22.6
2025-12-25T23:50:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:50:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:50:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.909090
2025-12-25T23:50:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:50:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:50:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:50:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:50:12.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:50:12.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:49:51', tmtdew=3.36, humidity=80.13, cloud=0.0, wind=18.26, temperature=13.64, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:49:51', seeing=1.86, atlas_timestamp='2025-12-25T21:49:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.11624999999999908, 0.10825000000000173, 0.20725000000000016, 0.1324999999999985, 0.10749999999999993, 0.1532499999999999, 0.1039999999999992, 0.2242500000000014, 0.1684999999999981, 0.09699999999999953, 0.17875000000000085, 0.15700000000000003, 0.15899999999999892, 0.1592500000000001, 0.14899999999999913, 0.12899999999999956, 0.12175000000000047, 0.14500000000000135, 0.09699999999999953, 0.1352499999999992, 0.1869999999999994, 0.2182499999999976, 0.21325000000000038, 0.16474999999999973, 0.16299999999999848, 0.16600000000000037, 0.21175000000000033, 0.22850000000000037, 0.3094999999999999, 0.23650000000000126, 0.24600000000000044, 0.22100000000000009, 0.207749999999999], zp_timestamp='2025-12-25T21:48:00')
2025-12-25T23:50:12.321 [DEBUG] [Thread-20708] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:50:12.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-25T23:50:15.764 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:15.765 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:24.524 [DEBUG] [Thread-20712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:36.331 [DEBUG] [Thread-20713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:39.567 [DEBUG] [Thread-20714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:50:54.607 [DEBUG] [Thread-20715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:09.638 [DEBUG] [Thread-20716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:15.966 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:15.967 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:24.668 [DEBUG] [Thread-20717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:36.399 [DEBUG] [Thread-20718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:39.705 [DEBUG] [Thread-20719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:51:54.739 [DEBUG] [Thread-20720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:09.774 [DEBUG] [Thread-20721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:16.169 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:16.171 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:24.810 [DEBUG] [Thread-20722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:26.581 [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-25T23:52:36.477 [DEBUG] [Thread-20723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:39.841 [DEBUG] [Thread-20724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:54.879 [DEBUG] [Thread-20725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:52:56.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:52:56.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:52:56.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-25T23:52:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 52, 31), 3.31, 80.13, 0.0, 13.02, 13.57, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:52:57.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:52:31
2025-12-25T23:52:57.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:52:57.608 [DEBUG] [Thread-20726] [transport.py] [_log()] starting thread (client mode): 0xb9559b70
2025-12-25T23:52:57.608 [DEBUG] [Thread-20726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:52:57.627 [DEBUG] [Thread-20726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:52:57.627 [INFO] [Thread-20726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] client lang: <none>
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] server lang: <none>
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] kex follows: False
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] Compression: none
2025-12-25T23:52:57.630 [DEBUG] [Thread-20726] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:52:57.648 [DEBUG] [Thread-20726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:52:57.648 [DEBUG] [Thread-20726] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:52:57.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:52:57.649 [DEBUG] [Thread-20726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:52:57.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:52:57.651 [DEBUG] [Thread-20726] [transport.py] [_log()] userauth is OK
2025-12-25T23:52:57.652 [DEBUG] [Thread-20726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:52:57.652 [DEBUG] [Thread-20726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:52:57.652 [DEBUG] [Thread-20726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:52:57.652 [DEBUG] [Thread-20726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:52:57.670 [INFO] [Thread-20726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:52:57.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:52:58.305 [DEBUG] [Thread-20726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:52:58.305 [DEBUG] [Thread-20726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:52:58.306 [DEBUG] [Thread-20726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:52:58.346 [DEBUG] [Thread-20726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:52:58.346 [DEBUG] [Thread-20726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:52:58.349 [DEBUG] [Thread-20726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:52:58.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:52:58.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:52:58.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:52:58.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:52:58.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:52:58.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:52:58.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:52:58.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:52:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:52:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.911173 -999.00  +13.70  11.33     82  +10.80 1 1 1 2 1     0    0 0.77 -93.61 ZNESW 10.8 11.3 175.4 15.4 14.6 -23.3 14.4 -23.1 14.3 -21.5 14.6 -22.5
2025-12-25T23:52:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:52:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:52:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.911173
2025-12-25T23:52:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:52:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:52:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:52:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:52:58.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:52:58.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:52:31', tmtdew=3.31, humidity=80.13, cloud=0.0, wind=13.02, temperature=13.57, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:52:32', seeing=2.55, atlas_timestamp='2025-12-25T21:52:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:51:00')
2025-12-25T23:52:58.375 [DEBUG] [Thread-20726] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:52:58.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-25T23:52:58.469 [DEBUG] [Thread-20729] [transport.py] [_log()] starting thread (client mode): 0xb6b295d0
2025-12-25T23:52:58.469 [DEBUG] [Thread-20729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:52:58.487 [DEBUG] [Thread-20729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:52:58.487 [INFO] [Thread-20729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:52:58.495 [DEBUG] [Thread-20729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] client lang: <none>
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] server lang: <none>
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] kex follows: False
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] Compression: none
2025-12-25T23:52:58.496 [DEBUG] [Thread-20729] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:52:58.554 [DEBUG] [Thread-20729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:52:58.555 [DEBUG] [Thread-20729] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:52:58.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:52:58.556 [DEBUG] [Thread-20729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:52:58.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:52:58.614 [DEBUG] [Thread-20729] [transport.py] [_log()] userauth is OK
2025-12-25T23:52:58.614 [DEBUG] [Thread-20729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:52:58.615 [DEBUG] [Thread-20729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:52:58.615 [DEBUG] [Thread-20729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:52:58.615 [DEBUG] [Thread-20729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:52:58.633 [INFO] [Thread-20729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:52: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-25T23:52:58.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:52:59.498 [DEBUG] [Thread-20729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:52:59.498 [DEBUG] [Thread-20729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:52:59.546 [DEBUG] [Thread-20729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:52:59.546 [DEBUG] [Thread-20729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:52:59.555 [DEBUG] [Thread-20729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:52:59.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:52:59.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:52:59.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-25T23:52:59.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:52:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:52:59.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:52:59.593 [DEBUG] [Thread-20729] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:53:09.910 [DEBUG] [Thread-20731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:53:16.375 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:53:16.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:53:24.976 [DEBUG] [Thread-20732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:53:29.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:53:29.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:53:29.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-25T23:53:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 53, 3), 3.32, 80.1, 0.0, 13.53, 13.54, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:53:30.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:53:03
2025-12-25T23:53:30.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:53:30.594 [DEBUG] [Thread-20733] [transport.py] [_log()] starting thread (client mode): 0xb6b29c60
2025-12-25T23:53:30.594 [DEBUG] [Thread-20733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:53:30.614 [DEBUG] [Thread-20733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:53:30.614 [INFO] [Thread-20733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:53:30.615 [DEBUG] [Thread-20733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:53:30.615 [DEBUG] [Thread-20733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:53:30.615 [DEBUG] [Thread-20733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:53:30.615 [DEBUG] [Thread-20733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] client lang: <none>
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] server lang: <none>
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] kex follows: False
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] Compression: none
2025-12-25T23:53:30.616 [DEBUG] [Thread-20733] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:53:30.626 [DEBUG] [Thread-20733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:53:30.627 [DEBUG] [Thread-20733] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:53:30.627 [DEBUG] [Thread-20733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:53:30.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:53:30.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:53:30.629 [DEBUG] [Thread-20733] [transport.py] [_log()] userauth is OK
2025-12-25T23:53:30.629 [DEBUG] [Thread-20733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:53:30.629 [DEBUG] [Thread-20733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:53:30.629 [DEBUG] [Thread-20733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:53:30.629 [DEBUG] [Thread-20733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:53:30.666 [INFO] [Thread-20733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:53:30.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:53:31.313 [DEBUG] [Thread-20733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:53:31.313 [DEBUG] [Thread-20733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:53:31.313 [DEBUG] [Thread-20733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:53:31.354 [DEBUG] [Thread-20733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:53:31.354 [DEBUG] [Thread-20733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:53:31.357 [DEBUG] [Thread-20733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:53:31.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:53:31.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:53:31.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:53:31.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:53:31.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:53:31.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:53:31.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:53:31.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:53:31.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:53:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.911521 -999.00  +13.70  10.29     82  +10.80 1 1 1 2 1     0    0 0.77 -93.60 ZNESW 11.1 10.3 178.6 13.5 14.6 -23.2 14.4 -23.1 14.3 -21.3 14.6 -22.4
2025-12-25T23:53:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:53:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:53:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.911521
2025-12-25T23:53:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:53:31.379 [DEBUG] [Thread-20733] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:53:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:53:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:53:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:53:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:53:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:53:03', tmtdew=3.32, humidity=80.1, cloud=0.0, wind=13.53, temperature=13.54, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:53:04', seeing=2.15, atlas_timestamp='2025-12-25T21:52:35.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:51:00')
2025-12-25T23:53:31.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-25T23:53:31.480 [DEBUG] [Thread-20736] [transport.py] [_log()] starting thread (client mode): 0xb9579c90
2025-12-25T23:53:31.480 [DEBUG] [Thread-20736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:53:31.496 [DEBUG] [Thread-20736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:53:31.496 [INFO] [Thread-20736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:53:31.508 [DEBUG] [Thread-20736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] client lang: <none>
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] server lang: <none>
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] kex follows: False
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] Compression: none
2025-12-25T23:53:31.509 [DEBUG] [Thread-20736] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:53:31.566 [DEBUG] [Thread-20736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:53:31.567 [DEBUG] [Thread-20736] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:53:31.567 [DEBUG] [Thread-20736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:53:31.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:53:31.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:53:31.624 [DEBUG] [Thread-20736] [transport.py] [_log()] userauth is OK
2025-12-25T23:53:31.625 [DEBUG] [Thread-20736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:53:31.625 [DEBUG] [Thread-20736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:53:31.625 [DEBUG] [Thread-20736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:53:31.625 [DEBUG] [Thread-20736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:53:31.643 [INFO] [Thread-20736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:53:31.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:53:31.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:53:32.517 [DEBUG] [Thread-20736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:53:32.517 [DEBUG] [Thread-20736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:53:32.567 [DEBUG] [Thread-20736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:53:32.568 [DEBUG] [Thread-20736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:53:32.581 [DEBUG] [Thread-20736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:53:32.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:53:32.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:53:32.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:53:32.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:53:32.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:53:32.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:53:32.630 [DEBUG] [Thread-20736] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:53:36.528 [DEBUG] [Thread-20738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:53:40.004 [DEBUG] [Thread-20739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:53:55.042 [DEBUG] [Thread-20740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:02.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:54:02.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:54:02.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-25T23:54:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 53, 35), 3.36, 80.11, 0.0, 13.39, 13.61, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:54:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:53:35
2025-12-25T23:54:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:54:03.632 [DEBUG] [Thread-20741] [transport.py] [_log()] starting thread (client mode): 0xb4104c10
2025-12-25T23:54:03.632 [DEBUG] [Thread-20741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:54:03.653 [DEBUG] [Thread-20741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:54:03.653 [INFO] [Thread-20741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:54:03.654 [DEBUG] [Thread-20741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:54:03.654 [DEBUG] [Thread-20741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:54:03.654 [DEBUG] [Thread-20741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] client lang: <none>
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] server lang: <none>
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] kex follows: False
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] Compression: none
2025-12-25T23:54:03.655 [DEBUG] [Thread-20741] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:54:03.668 [DEBUG] [Thread-20741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:54:03.669 [DEBUG] [Thread-20741] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:54:03.669 [DEBUG] [Thread-20741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:54:03.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:54:03.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:54:03.671 [DEBUG] [Thread-20741] [transport.py] [_log()] userauth is OK
2025-12-25T23:54:03.671 [DEBUG] [Thread-20741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:54:03.672 [DEBUG] [Thread-20741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:54:03.672 [DEBUG] [Thread-20741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:54:03.672 [DEBUG] [Thread-20741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:54:03.691 [INFO] [Thread-20741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:54:03.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:54:04.350 [DEBUG] [Thread-20741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:54:04.350 [DEBUG] [Thread-20741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:54:04.351 [DEBUG] [Thread-20741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:54:04.391 [DEBUG] [Thread-20741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:54:04.391 [DEBUG] [Thread-20741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:54:04.394 [DEBUG] [Thread-20741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:54:04.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:54:04.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:54:04.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:54:04.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:54:04.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:54:04.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:54:04.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:54:04.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:54:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:54:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.912215 -999.00  +13.70   7.26     82  +10.80 1 1 1 2 1     0    0 0.61 -96.05 ZNESW 8.7 7.3 184.8 11.8 14.6 -23.3 14.4 -23.1 -999.0 -999.0 14.6 -22.5
2025-12-25T23:54:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:54:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:54:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.912215
2025-12-25T23:54:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:54:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:54:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:54:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:54:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:54:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:53:35', tmtdew=3.36, humidity=80.11, cloud=0.0, wind=13.39, temperature=13.61, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:53:36', seeing=2.15, atlas_timestamp='2025-12-25T21:53:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:51:00')
2025-12-25T23:54:04.421 [DEBUG] [Thread-20741] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:54:04.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-25T23:54:04.514 [DEBUG] [Thread-20744] [transport.py] [_log()] starting thread (client mode): 0xb6b2a5f0
2025-12-25T23:54:04.514 [DEBUG] [Thread-20744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:54:04.529 [DEBUG] [Thread-20744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:54:04.529 [INFO] [Thread-20744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:54:04.537 [DEBUG] [Thread-20744] [transport.py] [_log()] client lang: <none>
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] server lang: <none>
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] kex follows: False
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] Compression: none
2025-12-25T23:54:04.538 [DEBUG] [Thread-20744] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:54:04.597 [DEBUG] [Thread-20744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:54:04.597 [DEBUG] [Thread-20744] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:54:04.598 [DEBUG] [Thread-20744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:54:04.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:54:04.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:54:04.656 [DEBUG] [Thread-20744] [transport.py] [_log()] userauth is OK
2025-12-25T23:54:04.657 [DEBUG] [Thread-20744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:54:04.657 [DEBUG] [Thread-20744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:54:04.657 [DEBUG] [Thread-20744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:54:04.657 [DEBUG] [Thread-20744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:54:04.682 [INFO] [Thread-20744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:54:04.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:54:04.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:54:05.605 [DEBUG] [Thread-20744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:54:05.605 [DEBUG] [Thread-20744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:54:05.652 [DEBUG] [Thread-20744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:54:05.653 [DEBUG] [Thread-20744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:54:05.661 [DEBUG] [Thread-20744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:54:05.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:54:05.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:54:05.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-25T23:54:05.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:54:05.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:54:05.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:54:05.695 [DEBUG] [Thread-20744] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:54:10.075 [DEBUG] [Thread-20746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:16.578 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:16.579 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:25.124 [DEBUG] [Thread-20747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:35.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:54:35.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:54:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:54:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 54, 7), 3.36, 80.11, 0.0, 12.85, 13.62, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:54:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:54:07
2025-12-25T23:54:36.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:54:36.596 [DEBUG] [Thread-20748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:36.692 [DEBUG] [Thread-20749] [transport.py] [_log()] starting thread (client mode): 0xb6b28820
2025-12-25T23:54:36.692 [DEBUG] [Thread-20749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:54:36.712 [DEBUG] [Thread-20749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:54:36.712 [INFO] [Thread-20749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] client lang: <none>
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] server lang: <none>
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] kex follows: False
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] Compression: none
2025-12-25T23:54:36.714 [DEBUG] [Thread-20749] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:54:36.732 [DEBUG] [Thread-20749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:54:36.732 [DEBUG] [Thread-20749] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:54:36.733 [DEBUG] [Thread-20749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:54:36.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:54:36.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:54:36.735 [DEBUG] [Thread-20749] [transport.py] [_log()] userauth is OK
2025-12-25T23:54:36.735 [DEBUG] [Thread-20749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:54:36.735 [DEBUG] [Thread-20749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:54:36.736 [DEBUG] [Thread-20749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:54:36.736 [DEBUG] [Thread-20749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:54:36.760 [INFO] [Thread-20749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:54:36.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:54:37.408 [DEBUG] [Thread-20749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:54:37.408 [DEBUG] [Thread-20749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:54:37.408 [DEBUG] [Thread-20749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:54:37.449 [DEBUG] [Thread-20749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:54:37.449 [DEBUG] [Thread-20749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:54:37.453 [DEBUG] [Thread-20749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:54:37.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:54:37.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:54:37.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:54:37.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:54:37.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:54:37.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:54:37.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:54:37.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:54:37.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:54:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.912562 -999.00  +13.70   6.93     82  +10.80 1 1 1 2 1     0    0 0.46 -100.01 ZNESW 8.0 6.9 179.4 11.3 14.6 -23.3 14.4 -22.8 14.3 -21.3 14.5 -22.4
2025-12-25T23:54:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:54:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:54:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.912562
2025-12-25T23:54:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:54:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:54:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:54:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:54:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:54:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:54:07', tmtdew=3.36, humidity=80.11, cloud=0.0, wind=12.85, temperature=13.62, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:54:08', seeing=2.15, atlas_timestamp='2025-12-25T21:54:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:51:00')
2025-12-25T23:54:37.479 [DEBUG] [Thread-20749] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:54:37.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-25T23:54:37.573 [DEBUG] [Thread-20752] [transport.py] [_log()] starting thread (client mode): 0xb955b010
2025-12-25T23:54:37.573 [DEBUG] [Thread-20752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:54:37.588 [DEBUG] [Thread-20752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:54:37.588 [INFO] [Thread-20752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] client lang: <none>
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] server lang: <none>
2025-12-25T23:54:37.596 [DEBUG] [Thread-20752] [transport.py] [_log()] kex follows: False
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] Compression: none
2025-12-25T23:54:37.597 [DEBUG] [Thread-20752] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:54:37.655 [DEBUG] [Thread-20752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:54:37.655 [DEBUG] [Thread-20752] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:54:37.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:54:37.656 [DEBUG] [Thread-20752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:54:37.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:54:37.712 [DEBUG] [Thread-20752] [transport.py] [_log()] userauth is OK
2025-12-25T23:54:37.713 [DEBUG] [Thread-20752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:54:37.713 [DEBUG] [Thread-20752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:54:37.713 [DEBUG] [Thread-20752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:54:37.713 [DEBUG] [Thread-20752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:54:37.734 [INFO] [Thread-20752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:54:37.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-25T23:54:37.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:54:38.581 [DEBUG] [Thread-20752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:54:38.581 [DEBUG] [Thread-20752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:54:38.629 [DEBUG] [Thread-20752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:54:38.629 [DEBUG] [Thread-20752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:54:38.638 [DEBUG] [Thread-20752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:54:38.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:54:38.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:54:38.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:54:38.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:54:38.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:54:38.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:54:38.675 [DEBUG] [Thread-20752] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:54:40.163 [DEBUG] [Thread-20754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:54:55.223 [DEBUG] [Thread-20755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:08.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:55:08.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:55:08.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-25T23:55:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 54, 39), 3.37, 80.05, 0.0, 13.23, 13.59, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:55:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:54:39
2025-12-25T23:55:09.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:55:09.679 [DEBUG] [Thread-20756] [transport.py] [_log()] starting thread (client mode): 0xb4105cf0
2025-12-25T23:55:09.679 [DEBUG] [Thread-20756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:55:09.695 [DEBUG] [Thread-20756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:55:09.695 [INFO] [Thread-20756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:55:09.698 [DEBUG] [Thread-20756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:55:09.698 [DEBUG] [Thread-20756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:55:09.698 [DEBUG] [Thread-20756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:55:09.698 [DEBUG] [Thread-20756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:09.698 [DEBUG] [Thread-20756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:09.698 [DEBUG] [Thread-20756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] client lang: <none>
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] server lang: <none>
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] kex follows: False
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] Compression: none
2025-12-25T23:55:09.699 [DEBUG] [Thread-20756] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:55:09.717 [DEBUG] [Thread-20756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:55:09.718 [DEBUG] [Thread-20756] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:55:09.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:55:09.720 [DEBUG] [Thread-20756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:55:09.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:55:09.761 [DEBUG] [Thread-20756] [transport.py] [_log()] userauth is OK
2025-12-25T23:55:09.761 [DEBUG] [Thread-20756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:55:09.762 [DEBUG] [Thread-20756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:55:09.762 [DEBUG] [Thread-20756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:55:09.762 [DEBUG] [Thread-20756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:55:09.781 [INFO] [Thread-20756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:55:09.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:55:10.255 [DEBUG] [Thread-20758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:14.911 [DEBUG] [Thread-20756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:55:14.911 [DEBUG] [Thread-20756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:55:14.912 [DEBUG] [Thread-20756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:55:14.952 [DEBUG] [Thread-20756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:55:14.952 [DEBUG] [Thread-20756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:55:14.955 [DEBUG] [Thread-20756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:55:15.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:55:15.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:55:15.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:55:15.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:55:15.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:55:15.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:55:15.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:55:15.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:55:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:55:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.912909 -999.00  +13.70   6.59     82  +10.80 1 1 1 2 1     0    0 0.58 -96.10 ZNESW 6.3 6.6 188.0 9.8 14.6 -23.2 14.4 -22.9 14.3 -21.4 14.5 -22.4
2025-12-25T23:55:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:55:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:55:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.912909
2025-12-25T23:55:15.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:55:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:55:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:55:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:55:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:55:15.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:54:39', tmtdew=3.37, humidity=80.05, cloud=0.0, wind=13.23, temperature=13.59, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:54:40', seeing=2.15, atlas_timestamp='2025-12-25T21:54:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:53:00')
2025-12-25T23:55:15.059 [DEBUG] [Thread-20756] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:55:15.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-25T23:55:15.154 [DEBUG] [Thread-20760] [transport.py] [_log()] starting thread (client mode): 0xb9579b10
2025-12-25T23:55:15.154 [DEBUG] [Thread-20760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:55:15.169 [DEBUG] [Thread-20760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:55:15.169 [INFO] [Thread-20760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:55:15.178 [DEBUG] [Thread-20760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:55:15.178 [DEBUG] [Thread-20760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] client lang: <none>
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] server lang: <none>
2025-12-25T23:55:15.179 [DEBUG] [Thread-20760] [transport.py] [_log()] kex follows: False
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] Compression: none
2025-12-25T23:55:15.180 [DEBUG] [Thread-20760] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:55:15.239 [DEBUG] [Thread-20760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:55:15.240 [DEBUG] [Thread-20760] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:55:15.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:55:15.241 [DEBUG] [Thread-20760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:55:15.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:55:15.298 [DEBUG] [Thread-20760] [transport.py] [_log()] userauth is OK
2025-12-25T23:55:15.299 [DEBUG] [Thread-20760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:55:15.299 [DEBUG] [Thread-20760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:55:15.299 [DEBUG] [Thread-20760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:55:15.299 [DEBUG] [Thread-20760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:55:15.317 [INFO] [Thread-20760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:55:15.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-25T23:55:15.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:55:16.145 [DEBUG] [Thread-20760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:55:16.145 [DEBUG] [Thread-20760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:55:16.193 [DEBUG] [Thread-20760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:55:16.194 [DEBUG] [Thread-20760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:55:16.203 [DEBUG] [Thread-20760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:55:16.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:55:16.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-25T23:55:16.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:55:16.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:55:16.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:55:16.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:55:16.240 [DEBUG] [Thread-20760] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:55:16.782 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:16.783 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:25.293 [DEBUG] [Thread-20762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:36.648 [DEBUG] [Thread-20763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:40.340 [DEBUG] [Thread-20764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:46.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:55:46.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:55:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:55:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 55, 11), 3.37, 80.1, 0.0, 13.9, 13.59, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:55:46.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:55:11
2025-12-25T23:55:47.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:55:47.257 [DEBUG] [Thread-20765] [transport.py] [_log()] starting thread (client mode): 0xb6b29a20
2025-12-25T23:55:47.257 [DEBUG] [Thread-20765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:55:47.278 [DEBUG] [Thread-20765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:55:47.278 [INFO] [Thread-20765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:55:47.281 [DEBUG] [Thread-20765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:55:47.281 [DEBUG] [Thread-20765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:55:47.281 [DEBUG] [Thread-20765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:55:47.281 [DEBUG] [Thread-20765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:47.281 [DEBUG] [Thread-20765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] client lang: <none>
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] server lang: <none>
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] kex follows: False
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] Compression: none
2025-12-25T23:55:47.282 [DEBUG] [Thread-20765] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:55:47.299 [DEBUG] [Thread-20765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:55:47.300 [DEBUG] [Thread-20765] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:55:47.301 [DEBUG] [Thread-20765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:55:47.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:55:47.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:55:47.303 [DEBUG] [Thread-20765] [transport.py] [_log()] userauth is OK
2025-12-25T23:55:47.303 [DEBUG] [Thread-20765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:55:47.304 [DEBUG] [Thread-20765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:55:47.304 [DEBUG] [Thread-20765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:55:47.304 [DEBUG] [Thread-20765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:55:47.327 [INFO] [Thread-20765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:55:47.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:55:47.986 [DEBUG] [Thread-20765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:55:47.987 [DEBUG] [Thread-20765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:55:47.987 [DEBUG] [Thread-20765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:55:48.028 [DEBUG] [Thread-20765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:55:48.028 [DEBUG] [Thread-20765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:55:48.032 [DEBUG] [Thread-20765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:55:48.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:55:48.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:55:48.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:55:48.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:55:48.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:55:48.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:55:48.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:55:48.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:55:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:55:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.913256 -999.00  +13.70   9.00     82  +10.80 1 1 1 2 1     0    0 0.67 -93.19 ZNESW 8.9 9.0 185.4 12.1 14.5 -23.3 14.4 -23.2 14.3 -21.4 14.5 -22.4
2025-12-25T23:55:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:55:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:55:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.913256
2025-12-25T23:55:48.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:55:48.056 [DEBUG] [Thread-20765] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:55:48.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:55:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:55:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:55:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:55:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:55:11', tmtdew=3.37, humidity=80.1, cloud=0.0, wind=13.9, temperature=13.59, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:55:44', seeing=2.15, atlas_timestamp='2025-12-25T21:55:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:53:00')
2025-12-25T23:55:48.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-25T23:55:48.149 [DEBUG] [Thread-20768] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-25T23:55:48.149 [DEBUG] [Thread-20768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:55:48.164 [DEBUG] [Thread-20768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:55:48.165 [INFO] [Thread-20768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:55:48.172 [DEBUG] [Thread-20768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:55:48.173 [DEBUG] [Thread-20768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] client lang: <none>
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] server lang: <none>
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] kex follows: False
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] Compression: none
2025-12-25T23:55:48.174 [DEBUG] [Thread-20768] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:55:48.230 [DEBUG] [Thread-20768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:55:48.230 [DEBUG] [Thread-20768] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:55:48.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:55:48.231 [DEBUG] [Thread-20768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:55:48.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:55:48.285 [DEBUG] [Thread-20768] [transport.py] [_log()] userauth is OK
2025-12-25T23:55:48.285 [DEBUG] [Thread-20768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:55:48.285 [DEBUG] [Thread-20768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:55:48.285 [DEBUG] [Thread-20768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:55:48.285 [DEBUG] [Thread-20768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:55:48.299 [INFO] [Thread-20768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:55:48.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-25T23:55:48.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:55:49.145 [DEBUG] [Thread-20768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:55:49.145 [DEBUG] [Thread-20768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:55:49.193 [DEBUG] [Thread-20768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:55:49.193 [DEBUG] [Thread-20768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:55:49.202 [DEBUG] [Thread-20768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:55:49.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:55:49.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-25T23:55:49.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-25T23:55:49.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:55:49.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:55:49.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:55:49.239 [DEBUG] [Thread-20768] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:55:53.995 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:55:55.371 [DEBUG] [Thread-20770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:10.432 [DEBUG] [Thread-20771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:16.983 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:16.984 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:56:19.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:56:19.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:56:19.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 56, 16), 3.31, 80.13, 0.0, 13.6, 13.51, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:56:19.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:56:16
2025-12-25T23:56:20.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:56:20.281 [DEBUG] [Thread-20772] [transport.py] [_log()] starting thread (client mode): 0xb6b28220
2025-12-25T23:56:20.281 [DEBUG] [Thread-20772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:56:20.304 [DEBUG] [Thread-20772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:56:20.304 [INFO] [Thread-20772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] client lang: <none>
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] server lang: <none>
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] kex follows: False
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] Compression: none
2025-12-25T23:56:20.307 [DEBUG] [Thread-20772] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:56:20.323 [DEBUG] [Thread-20772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:56:20.323 [DEBUG] [Thread-20772] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:56:20.323 [DEBUG] [Thread-20772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:56:20.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:56:20.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:56:20.324 [DEBUG] [Thread-20772] [transport.py] [_log()] userauth is OK
2025-12-25T23:56:20.324 [DEBUG] [Thread-20772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:56:20.324 [DEBUG] [Thread-20772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:56:20.324 [DEBUG] [Thread-20772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:56:20.324 [DEBUG] [Thread-20772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:56:20.351 [INFO] [Thread-20772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:56:20.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:56:21.088 [DEBUG] [Thread-20772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:56:21.088 [DEBUG] [Thread-20772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:56:21.088 [DEBUG] [Thread-20772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:56:21.129 [DEBUG] [Thread-20772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:56:21.129 [DEBUG] [Thread-20772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:56:21.131 [DEBUG] [Thread-20772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:56:21.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:56:21.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:56:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:56:21.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:56:21.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:56:21.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:56:21.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.913604 -999.00  +13.70  11.16     83  +10.90 1 1 1 2 1     0    0 0.85 -85.05 ZNESW 10.6 11.2 180.4 15.5 14.5 -23.3 14.3 -23.3 14.3 -21.5 14.5 -22.4
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.913604
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:56:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:56:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:56:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:56:16', tmtdew=3.31, humidity=80.13, cloud=0.0, wind=13.6, temperature=13.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:16', seeing=2.15, atlas_timestamp='2025-12-25T21:55:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:53:00')
2025-12-25T23:56:21.150 [DEBUG] [Thread-20772] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:56:21.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-25T23:56:21.235 [DEBUG] [Thread-20775] [transport.py] [_log()] starting thread (client mode): 0xb6b290c0
2025-12-25T23:56:21.235 [DEBUG] [Thread-20775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:56:21.250 [DEBUG] [Thread-20775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:56:21.250 [INFO] [Thread-20775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] client lang: <none>
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] server lang: <none>
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] kex follows: False
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:56:21.258 [DEBUG] [Thread-20775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:56:21.259 [DEBUG] [Thread-20775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:56:21.259 [DEBUG] [Thread-20775] [transport.py] [_log()] Compression: none
2025-12-25T23:56:21.259 [DEBUG] [Thread-20775] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:56:21.316 [DEBUG] [Thread-20775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:56:21.316 [DEBUG] [Thread-20775] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:56:21.316 [DEBUG] [Thread-20775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:56:21.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:56:21.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:56:21.373 [DEBUG] [Thread-20775] [transport.py] [_log()] userauth is OK
2025-12-25T23:56:21.373 [DEBUG] [Thread-20775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:56:21.373 [DEBUG] [Thread-20775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:56:21.373 [DEBUG] [Thread-20775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:56:21.373 [DEBUG] [Thread-20775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:56:21.386 [INFO] [Thread-20775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:56:21.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-25T23:56:21.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:56:22.210 [DEBUG] [Thread-20775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:56:22.210 [DEBUG] [Thread-20775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:56:22.258 [DEBUG] [Thread-20775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:56:22.258 [DEBUG] [Thread-20775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:56:22.267 [DEBUG] [Thread-20775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:56:22.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:56:22.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:56:22.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-25T23:56:22.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:56:22.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:56:22.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:56:22.302 [DEBUG] [Thread-20775] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:56:25.467 [DEBUG] [Thread-20777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:36.705 [DEBUG] [Thread-20778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:40.520 [DEBUG] [Thread-20779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:56:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:56:52.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:56:52.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-25T23:56:53.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 56, 48), 3.28, 80.76, 0.0, 13.99, 13.49, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:56:53.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:56:48
2025-12-25T23:56:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:56:53.288 [DEBUG] [Thread-20780] [transport.py] [_log()] starting thread (client mode): 0xb9559540
2025-12-25T23:56:53.288 [DEBUG] [Thread-20780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:56:53.308 [DEBUG] [Thread-20780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:56:53.308 [INFO] [Thread-20780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:53.311 [DEBUG] [Thread-20780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] client lang: <none>
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] server lang: <none>
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] kex follows: False
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] Compression: none
2025-12-25T23:56:53.312 [DEBUG] [Thread-20780] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:56:53.328 [DEBUG] [Thread-20780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:56:53.328 [DEBUG] [Thread-20780] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:56:53.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:56:53.329 [DEBUG] [Thread-20780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:56:53.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:56:53.330 [DEBUG] [Thread-20780] [transport.py] [_log()] userauth is OK
2025-12-25T23:56:53.330 [DEBUG] [Thread-20780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:56:53.330 [DEBUG] [Thread-20780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:56:53.331 [DEBUG] [Thread-20780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:56:53.331 [DEBUG] [Thread-20780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:56:53.368 [INFO] [Thread-20780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:56:53.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:56:53.991 [DEBUG] [Thread-20780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:56:53.992 [DEBUG] [Thread-20780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:56:53.992 [DEBUG] [Thread-20780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:56:54.033 [DEBUG] [Thread-20780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:56:54.033 [DEBUG] [Thread-20780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:56:54.036 [DEBUG] [Thread-20780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:56:54.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:56:54.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:56:54.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:56:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:56:54.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:56:54.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:56:54.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:56:54.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:56:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:56:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.913951 -999.00  +13.60  10.73     83  +10.90 1 1 1 2 1     0    0 0.75 -89.10 ZNESW 11.4 10.7 178.0 13.2 14.5 -23.3 14.3 -22.9 14.2 -21.3 14.5 -22.4
2025-12-25T23:56:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:56:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:56:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.913951
2025-12-25T23:56:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:56:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:56:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:56:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:56:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:56:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:56:48', tmtdew=3.28, humidity=80.76, cloud=0.0, wind=13.99, temperature=13.49, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp='2025-12-25T21:56:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:53:00')
2025-12-25T23:56:54.057 [DEBUG] [Thread-20780] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:56:54.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-25T23:56:54.151 [DEBUG] [Thread-20783] [transport.py] [_log()] starting thread (client mode): 0xb955b460
2025-12-25T23:56:54.151 [DEBUG] [Thread-20783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:56:54.169 [DEBUG] [Thread-20783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:56:54.169 [INFO] [Thread-20783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:56:54.176 [DEBUG] [Thread-20783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] client lang: <none>
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] server lang: <none>
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] kex follows: False
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] Compression: none
2025-12-25T23:56:54.177 [DEBUG] [Thread-20783] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:56:54.235 [DEBUG] [Thread-20783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:56:54.236 [DEBUG] [Thread-20783] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:56:54.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:56:54.236 [DEBUG] [Thread-20783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:56:54.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:56:54.293 [DEBUG] [Thread-20783] [transport.py] [_log()] userauth is OK
2025-12-25T23:56:54.293 [DEBUG] [Thread-20783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:56:54.293 [DEBUG] [Thread-20783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:56:54.293 [DEBUG] [Thread-20783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:56:54.293 [DEBUG] [Thread-20783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:56:54.313 [INFO] [Thread-20783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:56:54.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-25T23:56:54.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:56:55.135 [DEBUG] [Thread-20783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:56:55.135 [DEBUG] [Thread-20783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:56:55.183 [DEBUG] [Thread-20783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:56:55.183 [DEBUG] [Thread-20783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:56:55.191 [DEBUG] [Thread-20783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:56:55.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:56:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:56: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') -> 00000000
2025-12-25T23:56:55.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:56:55.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:56:55.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:56:55.226 [DEBUG] [Thread-20783] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:56:55.552 [DEBUG] [Thread-20785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:10.589 [DEBUG] [Thread-20786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:17.184 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:17.185 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:57:25.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:57:25.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:57:25.623 [DEBUG] [Thread-20787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 57, 20), 3.28, 80.78, 0.0, 13.85, 13.51, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:57:25.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:57:20
2025-12-25T23:57:26.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:57:26.232 [DEBUG] [Thread-20788] [transport.py] [_log()] starting thread (client mode): 0xb6b60ca0
2025-12-25T23:57:26.232 [DEBUG] [Thread-20788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:57:26.252 [DEBUG] [Thread-20788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:57:26.252 [INFO] [Thread-20788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] client lang: <none>
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] server lang: <none>
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] kex follows: False
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:57:26.255 [DEBUG] [Thread-20788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:57:26.256 [DEBUG] [Thread-20788] [transport.py] [_log()] Compression: none
2025-12-25T23:57:26.256 [DEBUG] [Thread-20788] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:57:26.275 [DEBUG] [Thread-20788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:57:26.275 [DEBUG] [Thread-20788] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:57:26.276 [DEBUG] [Thread-20788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:57:26.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:57:26.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:57:26.317 [DEBUG] [Thread-20788] [transport.py] [_log()] userauth is OK
2025-12-25T23:57:26.318 [DEBUG] [Thread-20788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:57:26.318 [DEBUG] [Thread-20788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:57:26.318 [DEBUG] [Thread-20788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:57:26.318 [DEBUG] [Thread-20788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:57:26.350 [INFO] [Thread-20788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:57:26.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:57:27.017 [DEBUG] [Thread-20788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:57:27.018 [DEBUG] [Thread-20788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:57:27.018 [DEBUG] [Thread-20788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:57:27.059 [DEBUG] [Thread-20788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:57:27.059 [DEBUG] [Thread-20788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:57:27.063 [DEBUG] [Thread-20788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:57:27.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:57:27.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:57:27.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:57:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:57:27.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:57:27.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:57:27.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:57:27.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:57:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:57:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.914646 -999.00  +13.60   8.69     83  +10.80 1 1 1 2 1     0    0 0.63 -87.35 ZNESW 9.2 8.7 172.0 14.6 14.5 -23.2 14.3 -22.9 14.2 -21.4 -999.0 -999.0
2025-12-25T23:57:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:57:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:57:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.914646
2025-12-25T23:57:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:57:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:57:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:57:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:57:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:57:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:57:20', tmtdew=3.28, humidity=80.78, cloud=0.0, wind=13.85, temperature=13.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp='2025-12-25T21:57:05.414', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:53:00')
2025-12-25T23:57:27.091 [DEBUG] [Thread-20788] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:57:27.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-25T23:57:27.185 [DEBUG] [Thread-20791] [transport.py] [_log()] starting thread (client mode): 0xb6b63310
2025-12-25T23:57:27.185 [DEBUG] [Thread-20791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:57:27.202 [DEBUG] [Thread-20791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:57:27.202 [INFO] [Thread-20791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:57:27.211 [DEBUG] [Thread-20791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:57:27.212 [DEBUG] [Thread-20791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:57:27.212 [DEBUG] [Thread-20791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:57:27.212 [DEBUG] [Thread-20791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:57:27.212 [DEBUG] [Thread-20791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:57:27.212 [DEBUG] [Thread-20791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:57:27.212 [DEBUG] [Thread-20791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] client lang: <none>
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] server lang: <none>
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] kex follows: False
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:57:27.213 [DEBUG] [Thread-20791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:57:27.214 [DEBUG] [Thread-20791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:57:27.214 [DEBUG] [Thread-20791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:57:27.214 [DEBUG] [Thread-20791] [transport.py] [_log()] Compression: none
2025-12-25T23:57:27.214 [DEBUG] [Thread-20791] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:57:27.268 [DEBUG] [Thread-20791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:57:27.268 [DEBUG] [Thread-20791] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:57:27.269 [DEBUG] [Thread-20791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:57:27.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:57:27.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:57:27.328 [DEBUG] [Thread-20791] [transport.py] [_log()] userauth is OK
2025-12-25T23:57:27.328 [DEBUG] [Thread-20791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:57:27.328 [DEBUG] [Thread-20791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:57:27.328 [DEBUG] [Thread-20791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:57:27.328 [DEBUG] [Thread-20791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:57:27.347 [INFO] [Thread-20791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:57:27.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-25T23:57:27.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:57:28.195 [DEBUG] [Thread-20791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:57:28.195 [DEBUG] [Thread-20791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:57:28.244 [DEBUG] [Thread-20791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:57:28.245 [DEBUG] [Thread-20791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:57:28.255 [DEBUG] [Thread-20791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:57:28.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:57:28.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-25T23:57:28.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-25T23:57:28.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:57:28.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:57:28.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:57:28.291 [DEBUG] [Thread-20791] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:57:36.756 [DEBUG] [Thread-20793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:40.654 [DEBUG] [Thread-20794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:55.697 [DEBUG] [Thread-20795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:57:58.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:57:58.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:57:58.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-25T23:57:59.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 57, 52), 3.26, 80.86, 0.0, 15.44, 13.51, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:57:59.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:57:52
2025-12-25T23:57:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:57:59.279 [DEBUG] [Thread-20796] [transport.py] [_log()] starting thread (client mode): 0xb6b62200
2025-12-25T23:57:59.279 [DEBUG] [Thread-20796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:57:59.299 [DEBUG] [Thread-20796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:57:59.299 [INFO] [Thread-20796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:57:59.302 [DEBUG] [Thread-20796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:57:59.302 [DEBUG] [Thread-20796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] client lang: <none>
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] server lang: <none>
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] kex follows: False
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:57:59.303 [DEBUG] [Thread-20796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:57:59.304 [DEBUG] [Thread-20796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:57:59.304 [DEBUG] [Thread-20796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:57:59.304 [DEBUG] [Thread-20796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:57:59.304 [DEBUG] [Thread-20796] [transport.py] [_log()] Compression: none
2025-12-25T23:57:59.304 [DEBUG] [Thread-20796] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:57:59.324 [DEBUG] [Thread-20796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:57:59.325 [DEBUG] [Thread-20796] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:57:59.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:57:59.326 [DEBUG] [Thread-20796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:57:59.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:57:59.328 [DEBUG] [Thread-20796] [transport.py] [_log()] userauth is OK
2025-12-25T23:57:59.328 [DEBUG] [Thread-20796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:57:59.329 [DEBUG] [Thread-20796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:57:59.329 [DEBUG] [Thread-20796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:57:59.329 [DEBUG] [Thread-20796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:57:59.352 [INFO] [Thread-20796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:57:59.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:57:59.970 [DEBUG] [Thread-20796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:57:59.970 [DEBUG] [Thread-20796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:57:59.971 [DEBUG] [Thread-20796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:58:00.011 [DEBUG] [Thread-20796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:58:00.011 [DEBUG] [Thread-20796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:58:00.014 [DEBUG] [Thread-20796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:58:00.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:58:00.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:58:00.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:58:00.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:58:00.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:58:00.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:58:00.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:58:00.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:58:00.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:58:00.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.914993 -999.00  +13.60  11.74     83  +10.80 1 1 1 2 1     0    0 0.74 -84.57 ZNESW 9.8 11.7 181.8 14.0 14.5 -23.4 14.3 -23.2 14.2 -21.5 14.4 -22.6
2025-12-25T23:58:00.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:58:00.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:58:00.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.914993
2025-12-25T23:58:00.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:58:00.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:58:00.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:58:00.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:58:00.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:58:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:57:52', tmtdew=3.26, humidity=80.86, cloud=0.0, wind=15.44, temperature=13.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp='2025-12-25T21:57:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.12024999999999864, 0.14775000000000027, 0.2422500000000003, 0.11299999999999955, 0.0754999999999999, 0.16775000000000162, 0.10999999999999943, 0.21424999999999983, 0.16999999999999993, 0.0990000000000002, 0.20374999999999943, 0.11500000000000021, 0.15199999999999925, 0.17324999999999946, 0.18399999999999928, 0.15899999999999892, 0.12124999999999986, 0.14949999999999974, 0.1039999999999992, 0.1792499999999997, 0.20449999999999946, 0.22674999999999912, 0.23625000000000007, 0.19775000000000098, 0.16299999999999848, 0.16050000000000075, 0.21374999999999922, 0.20749999999999957, 0.35999999999999943, 0.28550000000000075, 0.29100000000000126, 0.2685000000000013, 0.23724999999999952], zp_timestamp='2025-12-25T21:53:00')
2025-12-25T23:58:00.041 [DEBUG] [Thread-20796] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:58:00.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-25T23:58:00.136 [DEBUG] [Thread-20799] [transport.py] [_log()] starting thread (client mode): 0xb95783a0
2025-12-25T23:58:00.136 [DEBUG] [Thread-20799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:58:00.150 [DEBUG] [Thread-20799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:58:00.150 [INFO] [Thread-20799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] client lang: <none>
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] server lang: <none>
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] kex follows: False
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:58:00.159 [DEBUG] [Thread-20799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:58:00.160 [DEBUG] [Thread-20799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:58:00.160 [DEBUG] [Thread-20799] [transport.py] [_log()] Compression: none
2025-12-25T23:58:00.160 [DEBUG] [Thread-20799] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:58:00.224 [DEBUG] [Thread-20799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:58:00.225 [DEBUG] [Thread-20799] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:58:00.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:58:00.226 [DEBUG] [Thread-20799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:58:00.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:58:00.283 [DEBUG] [Thread-20799] [transport.py] [_log()] userauth is OK
2025-12-25T23:58:00.283 [DEBUG] [Thread-20799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:58:00.284 [DEBUG] [Thread-20799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:58:00.284 [DEBUG] [Thread-20799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:58:00.284 [DEBUG] [Thread-20799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:58:00.303 [INFO] [Thread-20799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:58:00.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-25T23:58:00.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:58:01.124 [DEBUG] [Thread-20799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:58:01.124 [DEBUG] [Thread-20799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:58:01.173 [DEBUG] [Thread-20799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:58:01.173 [DEBUG] [Thread-20799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:58:01.182 [DEBUG] [Thread-20799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:58:01.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:58:01.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-25T23:58:01.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-25T23:58:01.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:58:01.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:58:01.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:58:01.222 [DEBUG] [Thread-20799] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:58:10.732 [DEBUG] [Thread-20801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:58:17.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:58:17.388 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:58:25.777 [DEBUG] [Thread-20802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:58:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:58:31.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:58:31.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:58:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 58, 24), 3.26, 80.91, 0.0, 15.19, 13.51, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:58:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:58:24
2025-12-25T23:58:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:58:32.173 [DEBUG] [Thread-20803] [transport.py] [_log()] starting thread (client mode): 0xb6b62020
2025-12-25T23:58:32.174 [DEBUG] [Thread-20803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:58:32.194 [DEBUG] [Thread-20803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:58:32.194 [INFO] [Thread-20803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] client lang: <none>
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] server lang: <none>
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] kex follows: False
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:58:32.197 [DEBUG] [Thread-20803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:58:32.198 [DEBUG] [Thread-20803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:58:32.198 [DEBUG] [Thread-20803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:58:32.198 [DEBUG] [Thread-20803] [transport.py] [_log()] Compression: none
2025-12-25T23:58:32.198 [DEBUG] [Thread-20803] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:58:32.215 [DEBUG] [Thread-20803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:58:32.216 [DEBUG] [Thread-20803] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:58:32.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:58:32.217 [DEBUG] [Thread-20803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:58:32.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:58:32.219 [DEBUG] [Thread-20803] [transport.py] [_log()] userauth is OK
2025-12-25T23:58:32.220 [DEBUG] [Thread-20803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:58:32.220 [DEBUG] [Thread-20803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:58:32.220 [DEBUG] [Thread-20803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:58:32.220 [DEBUG] [Thread-20803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:58:32.234 [INFO] [Thread-20803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:58:32.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:58:32.879 [DEBUG] [Thread-20803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:58:32.879 [DEBUG] [Thread-20803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:58:32.879 [DEBUG] [Thread-20803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:58:32.920 [DEBUG] [Thread-20803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:58:32.920 [DEBUG] [Thread-20803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:58:32.923 [DEBUG] [Thread-20803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:58:32.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:58:32.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:58:32.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:58:32.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:58:32.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:58:32.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:58:32.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:58:32.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:58:32.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:58:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.915340 -999.00  +13.50  11.30     83  +10.80 1 1 1 2 1     0    0 0.89 -79.49 ZNESW 10.5 11.3 185.0 17.0 14.4 -23.4 14.3 -23.2 14.2 -21.3 14.4 -22.5
2025-12-25T23:58:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:58:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:58:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.915340
2025-12-25T23:58:32.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:58:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:58:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:58:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:58:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:58:32.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:58:24', tmtdew=3.26, humidity=80.91, cloud=0.0, wind=15.19, temperature=13.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp='2025-12-25T21:58:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.13124999999999964, 0.0762500000000017, 0.23824999999999896, 0.15149999999999864, 0.09549999999999947, 0.13725000000000165, 0.15899999999999892, 0.23575000000000124, 0.17050000000000054, 0.07600000000000051, 0.17425000000000068, 0.16799999999999926, 0.1739999999999995, 0.1867499999999982, 0.18349999999999866, 0.1769999999999996, 0.1352499999999992, 0.16500000000000092, 0.1225000000000005, 0.1742499999999989, 0.20199999999999818, 0.2412499999999973, 0.25725000000000087, 0.20725000000000016, 0.1509999999999998, 0.2110000000000003, 0.19875000000000043, 0.20449999999999946, 0.29000000000000004, 0.2510000000000012, 0.26000000000000156, 0.3020000000000005, 0.23574999999999946], zp_timestamp='2025-12-25T21:57:00')
2025-12-25T23:58:32.949 [DEBUG] [Thread-20803] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:58:33.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-25T23:58:33.058 [DEBUG] [Thread-20806] [transport.py] [_log()] starting thread (client mode): 0xb6b60340
2025-12-25T23:58:33.058 [DEBUG] [Thread-20806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:58:33.073 [DEBUG] [Thread-20806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:58:33.073 [INFO] [Thread-20806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:58:33.081 [DEBUG] [Thread-20806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:58:33.081 [DEBUG] [Thread-20806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] client lang: <none>
2025-12-25T23:58:33.082 [DEBUG] [Thread-20806] [transport.py] [_log()] server lang: <none>
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] kex follows: False
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:58:33.083 [DEBUG] [Thread-20806] [transport.py] [_log()] Compression: none
2025-12-25T23:58:33.084 [DEBUG] [Thread-20806] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:58:33.137 [DEBUG] [Thread-20806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:58:33.138 [DEBUG] [Thread-20806] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:58:33.147 [DEBUG] [Thread-20806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:58:33.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:58:33.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:58:33.194 [DEBUG] [Thread-20806] [transport.py] [_log()] userauth is OK
2025-12-25T23:58:33.195 [DEBUG] [Thread-20806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:58:33.195 [DEBUG] [Thread-20806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:58:33.195 [DEBUG] [Thread-20806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:58:33.195 [DEBUG] [Thread-20806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:58:33.214 [INFO] [Thread-20806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:58: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-25T23:58:33.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:58:34.006 [DEBUG] [Thread-20806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:58:34.006 [DEBUG] [Thread-20806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:58:34.054 [DEBUG] [Thread-20806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:58:34.054 [DEBUG] [Thread-20806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:58:34.063 [DEBUG] [Thread-20806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:58:34.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:58:34.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-25T23:58:34.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-25T23:58:34.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:58:34.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:58:34.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:58:34.100 [DEBUG] [Thread-20806] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:58:36.815 [DEBUG] [Thread-20808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:58:40.814 [DEBUG] [Thread-20809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:58:55.873 [DEBUG] [Thread-20810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:04.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:59:04.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:59:04.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-25T23:59:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 58, 56), 3.19, 80.98, 0.0, 15.69, 13.44, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:59:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:58:56
2025-12-25T23:59:04.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:59:05.055 [DEBUG] [Thread-20811] [transport.py] [_log()] starting thread (client mode): 0xb955af20
2025-12-25T23:59:05.055 [DEBUG] [Thread-20811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:59:05.076 [DEBUG] [Thread-20811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:59:05.076 [INFO] [Thread-20811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] client lang: <none>
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] server lang: <none>
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] kex follows: False
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] Compression: none
2025-12-25T23:59:05.079 [DEBUG] [Thread-20811] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:59:05.097 [DEBUG] [Thread-20811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:59:05.097 [DEBUG] [Thread-20811] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:59:05.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:59:05.098 [DEBUG] [Thread-20811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:59:05.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:59:05.100 [DEBUG] [Thread-20811] [transport.py] [_log()] userauth is OK
2025-12-25T23:59:05.101 [DEBUG] [Thread-20811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:59:05.101 [DEBUG] [Thread-20811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:59:05.101 [DEBUG] [Thread-20811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:59:05.101 [DEBUG] [Thread-20811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:59:05.138 [INFO] [Thread-20811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:59:05.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:59:05.772 [DEBUG] [Thread-20811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:59:05.773 [DEBUG] [Thread-20811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:59:05.773 [DEBUG] [Thread-20811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:59:05.814 [DEBUG] [Thread-20811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:59:05.814 [DEBUG] [Thread-20811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:59:05.817 [DEBUG] [Thread-20811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:59:05.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:59:05.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:59:05.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:59:05.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:59:05.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:59:05.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:59:05.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:59:05.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:59:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:59:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.915687 -999.00  +13.50  11.12     83  +10.80 1 1 1 2 1     0    0 0.79 -78.38 ZNESW 12.1 11.1 176.6 13.8 14.4 -23.3 14.3 -23.0 14.1 -21.3 14.4 -22.5
2025-12-25T23:59:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:59:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:59:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.915687
2025-12-25T23:59:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:59:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:59:05.840 [DEBUG] [Thread-20811] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:59:05.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:59:05.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:59:05.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:59:05.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:58:56', tmtdew=3.19, humidity=80.98, cloud=0.0, wind=15.69, temperature=13.44, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp='2025-12-25T21:58:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.13124999999999964, 0.0762500000000017, 0.23824999999999896, 0.15149999999999864, 0.09549999999999947, 0.13725000000000165, 0.15899999999999892, 0.23575000000000124, 0.17050000000000054, 0.07600000000000051, 0.17425000000000068, 0.16799999999999926, 0.1739999999999995, 0.1867499999999982, 0.18349999999999866, 0.1769999999999996, 0.1352499999999992, 0.16500000000000092, 0.1225000000000005, 0.1742499999999989, 0.20199999999999818, 0.2412499999999973, 0.25725000000000087, 0.20725000000000016, 0.1509999999999998, 0.2110000000000003, 0.19875000000000043, 0.20449999999999946, 0.29000000000000004, 0.2510000000000012, 0.26000000000000156, 0.3020000000000005, 0.23574999999999946], zp_timestamp='2025-12-25T21:57:00')
2025-12-25T23:59:05.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-25T23:59:05.932 [DEBUG] [Thread-20814] [transport.py] [_log()] starting thread (client mode): 0xb955bfd0
2025-12-25T23:59:05.932 [DEBUG] [Thread-20814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:59:05.947 [DEBUG] [Thread-20814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:59:05.947 [INFO] [Thread-20814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:59:05.955 [DEBUG] [Thread-20814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:59:05.955 [DEBUG] [Thread-20814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:59:05.955 [DEBUG] [Thread-20814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:59:05.955 [DEBUG] [Thread-20814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:05.955 [DEBUG] [Thread-20814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:05.955 [DEBUG] [Thread-20814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] client lang: <none>
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] server lang: <none>
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] kex follows: False
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:59:05.956 [DEBUG] [Thread-20814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:59:05.957 [DEBUG] [Thread-20814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:59:05.957 [DEBUG] [Thread-20814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:59:05.957 [DEBUG] [Thread-20814] [transport.py] [_log()] Compression: none
2025-12-25T23:59:05.957 [DEBUG] [Thread-20814] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:59:06.014 [DEBUG] [Thread-20814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:59:06.015 [DEBUG] [Thread-20814] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:59:06.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:59:06.017 [DEBUG] [Thread-20814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:59:06.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:59:06.074 [DEBUG] [Thread-20814] [transport.py] [_log()] userauth is OK
2025-12-25T23:59:06.074 [DEBUG] [Thread-20814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:59:06.075 [DEBUG] [Thread-20814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:59:06.075 [DEBUG] [Thread-20814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:59:06.075 [DEBUG] [Thread-20814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:59:06.094 [INFO] [Thread-20814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:59:06.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-25T23:59:06.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:59:06.940 [DEBUG] [Thread-20814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:59:06.941 [DEBUG] [Thread-20814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:59:06.989 [DEBUG] [Thread-20814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:59:06.989 [DEBUG] [Thread-20814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:59:06.998 [DEBUG] [Thread-20814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:59:07.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:59:07.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-25T23:59:07.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-25T23:59:07.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:59:07.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:59:07.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:59:07.036 [DEBUG] [Thread-20814] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:59:10.906 [DEBUG] [Thread-20816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:17.590 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:17.591 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:25.958 [DEBUG] [Thread-20817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:36.883 [DEBUG] [Thread-20818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:37.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-25T23:59:37.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-25T23:59:37.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-25T23:59:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 59, 28), 3.18, 81.04, 0.0, 15.09, 13.42, 0, 1, 0, 2, 0, 0),)
2025-12-25T23:59:37.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:59:28
2025-12-25T23:59:37.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-25T23:59:38.040 [DEBUG] [Thread-20819] [transport.py] [_log()] starting thread (client mode): 0xb6b2a8c0
2025-12-25T23:59:38.040 [DEBUG] [Thread-20819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:59:38.060 [DEBUG] [Thread-20819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-25T23:59:38.060 [INFO] [Thread-20819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] client lang: <none>
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] server lang: <none>
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] kex follows: False
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] Compression: none
2025-12-25T23:59:38.063 [DEBUG] [Thread-20819] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:59:38.082 [DEBUG] [Thread-20819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:59:38.082 [DEBUG] [Thread-20819] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:59:38.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-25T23:59:38.083 [DEBUG] [Thread-20819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-25T23:59:38.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:59:38.085 [DEBUG] [Thread-20819] [transport.py] [_log()] userauth is OK
2025-12-25T23:59:38.085 [DEBUG] [Thread-20819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:59:38.086 [DEBUG] [Thread-20819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:59:38.086 [DEBUG] [Thread-20819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-25T23:59:38.086 [DEBUG] [Thread-20819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:59:38.109 [INFO] [Thread-20819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:59:38.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:59:38.713 [DEBUG] [Thread-20819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:59:38.713 [DEBUG] [Thread-20819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:59:38.713 [DEBUG] [Thread-20819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-25T23:59:38.754 [DEBUG] [Thread-20819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:59:38.754 [DEBUG] [Thread-20819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:59:38.758 [DEBUG] [Thread-20819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:59:38.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:59:38.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-25T23:59:38.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-25T23:59:38.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-25T23:59:38.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:59:38.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-25T23:59:38.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:59:38.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:59:38.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-25T23:59:38.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.916034 -999.00  +13.50  10.48     83  +10.80 1 1 1 2 1     0    0 0.91 -76.93 ZNESW 9.8 10.5 184.4 13.5 14.4 -23.2 14.2 -23.0 14.1 -21.3 14.4 -22.3
2025-12-25T23:59:38.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-25T23:59:38.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-25T23:59:38.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.916034
2025-12-25T23:59:38.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-25T23:59:38.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-25T23:59:38.781 [DEBUG] [Thread-20819] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:59:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-25T23:59:38.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-25T23:59:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-25T23:59:38.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:59:28', tmtdew=3.18, humidity=81.04, cloud=0.0, wind=15.09, temperature=13.42, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp='2025-12-25T21:59:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.13124999999999964, 0.0762500000000017, 0.23824999999999896, 0.15149999999999864, 0.09549999999999947, 0.13725000000000165, 0.15899999999999892, 0.23575000000000124, 0.17050000000000054, 0.07600000000000051, 0.17425000000000068, 0.16799999999999926, 0.1739999999999995, 0.1867499999999982, 0.18349999999999866, 0.1769999999999996, 0.1352499999999992, 0.16500000000000092, 0.1225000000000005, 0.1742499999999989, 0.20199999999999818, 0.2412499999999973, 0.25725000000000087, 0.20725000000000016, 0.1509999999999998, 0.2110000000000003, 0.19875000000000043, 0.20449999999999946, 0.29000000000000004, 0.2510000000000012, 0.26000000000000156, 0.3020000000000005, 0.23574999999999946], zp_timestamp='2025-12-25T21:57:00')
2025-12-25T23:59:38.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-25T23:59:38.890 [DEBUG] [Thread-20822] [transport.py] [_log()] starting thread (client mode): 0xb6b605e0
2025-12-25T23:59:38.890 [DEBUG] [Thread-20822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-25T23:59:38.905 [DEBUG] [Thread-20822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-25T23:59:38.905 [INFO] [Thread-20822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-25T23:59:38.912 [DEBUG] [Thread-20822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-25T23:59:38.912 [DEBUG] [Thread-20822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-25T23:59:38.912 [DEBUG] [Thread-20822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-25T23:59:38.912 [DEBUG] [Thread-20822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] client lang: <none>
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] server lang: <none>
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] kex follows: False
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] Compression: none
2025-12-25T23:59:38.913 [DEBUG] [Thread-20822] [transport.py] [_log()] === End of kex handshake ===
2025-12-25T23:59:38.974 [DEBUG] [Thread-20822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-25T23:59:38.975 [DEBUG] [Thread-20822] [transport.py] [_log()] Switch to new keys ...
2025-12-25T23:59:38.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-25T23:59:38.977 [DEBUG] [Thread-20822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-25T23:59:38.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-25T23:59:39.034 [DEBUG] [Thread-20822] [transport.py] [_log()] userauth is OK
2025-12-25T23:59:39.034 [DEBUG] [Thread-20822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-25T23:59:39.034 [DEBUG] [Thread-20822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-25T23:59:39.034 [DEBUG] [Thread-20822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-25T23:59:39.034 [DEBUG] [Thread-20822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-25T23:59:39.056 [INFO] [Thread-20822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-25T23:59:39.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-25T23:59:39.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-25T23:59:39.883 [DEBUG] [Thread-20822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-25T23:59:39.884 [DEBUG] [Thread-20822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-25T23:59:39.932 [DEBUG] [Thread-20822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-25T23:59:39.932 [DEBUG] [Thread-20822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-25T23:59:39.942 [DEBUG] [Thread-20822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-25T23:59:39.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-25T23:59:39.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-25T23:59:39.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-25T23:59:39.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-25T23:59:39.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-25T23:59:39.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-25T23:59:39.983 [DEBUG] [Thread-20822] [transport.py] [_log()] EOF in transport thread
2025-12-25T23:59:40.993 [DEBUG] [Thread-20824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-25T23:59:56.055 [DEBUG] [Thread-20825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:09.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:00:09.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:00:09.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-26T00:00:10.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 25, 23, 59, 28), 3.13, 81.04, 0.0, 15.09, 13.42, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:00:10.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-25 23:59:28
2025-12-26T00:00:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:00:10.989 [DEBUG] [Thread-20826] [transport.py] [_log()] starting thread (client mode): 0xb6b63610
2025-12-26T00:00:10.989 [DEBUG] [Thread-20826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:00:11.003 [DEBUG] [Thread-20826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:00:11.003 [INFO] [Thread-20826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] client lang: <none>
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] server lang: <none>
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] kex follows: False
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] Compression: none
2025-12-26T00:00:11.006 [DEBUG] [Thread-20826] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:00:11.018 [DEBUG] [Thread-20826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:00:11.018 [DEBUG] [Thread-20826] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:00:11.018 [DEBUG] [Thread-20826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:00:11.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:00:11.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:00:11.019 [DEBUG] [Thread-20826] [transport.py] [_log()] userauth is OK
2025-12-26T00:00:11.019 [DEBUG] [Thread-20826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:00:11.019 [DEBUG] [Thread-20826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:00:11.019 [DEBUG] [Thread-20826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:00:11.019 [DEBUG] [Thread-20826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:00:11.046 [INFO] [Thread-20826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:00:11.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:00:11.087 [DEBUG] [Thread-20828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:13.594 [DEBUG] [Thread-20826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:00:13.594 [DEBUG] [Thread-20826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:00:13.594 [DEBUG] [Thread-20826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:00:13.634 [DEBUG] [Thread-20826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:00:13.634 [DEBUG] [Thread-20826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:00:13.637 [DEBUG] [Thread-20826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:00:13.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:00:13.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:00:13.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:00:13.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:00:13.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:00:13.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:00:13.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:00:13.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:00:13.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:00:13.746 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-26T00:00:13.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-25T23:59:28', tmtdew=3.13, humidity=81.04, cloud=0.0, wind=15.09, temperature=13.42, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-25T23:56:48', seeing=2.15, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[0.13124999999999964, 0.0762500000000017, 0.23824999999999896, 0.15149999999999864, 0.09549999999999947, 0.13725000000000165, 0.15899999999999892, 0.23575000000000124, 0.17050000000000054, 0.07600000000000051, 0.17425000000000068, 0.16799999999999926, 0.1739999999999995, 0.1867499999999982, 0.18349999999999866, 0.1769999999999996, 0.1352499999999992, 0.16500000000000092, 0.1225000000000005, 0.1742499999999989, 0.20199999999999818, 0.2412499999999973, 0.25725000000000087, 0.20725000000000016, 0.1509999999999998, 0.2110000000000003, 0.19875000000000043, 0.20449999999999946, 0.29000000000000004, 0.2510000000000012, 0.26000000000000156, 0.3020000000000005, 0.23574999999999946], zp_timestamp='2025-12-25T21:57:00')
2025-12-26T00:00:13.748 [DEBUG] [Thread-20826] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:00:13.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-26T00:00:13.831 [DEBUG] [Thread-20830] [transport.py] [_log()] starting thread (client mode): 0xb957bf10
2025-12-26T00:00:13.831 [DEBUG] [Thread-20830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:00:13.845 [DEBUG] [Thread-20830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:00:13.845 [INFO] [Thread-20830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] client lang: <none>
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] server lang: <none>
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] kex follows: False
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] Compression: none
2025-12-26T00:00:13.853 [DEBUG] [Thread-20830] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:00:13.911 [DEBUG] [Thread-20830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:00:13.911 [DEBUG] [Thread-20830] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:00:13.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:00:13.911 [DEBUG] [Thread-20830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:00:13.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:00:13.968 [DEBUG] [Thread-20830] [transport.py] [_log()] userauth is OK
2025-12-26T00:00:13.968 [DEBUG] [Thread-20830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:00:13.968 [DEBUG] [Thread-20830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:00:13.968 [DEBUG] [Thread-20830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:00:13.968 [DEBUG] [Thread-20830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:00:13.981 [INFO] [Thread-20830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:00:13.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:00:13.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:00:14.790 [DEBUG] [Thread-20830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:00:14.790 [DEBUG] [Thread-20830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:00:14.838 [DEBUG] [Thread-20830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:00:14.838 [DEBUG] [Thread-20830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:00:14.847 [DEBUG] [Thread-20830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:00:14.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:00:14.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')
2025-12-26T00:00:14.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:00:14.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:00:14.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:00:14.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:00:14.878 [DEBUG] [Thread-20830] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:00:17.793 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:17.795 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:26.114 [DEBUG] [Thread-20832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:36.961 [DEBUG] [Thread-20833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:41.166 [DEBUG] [Thread-20834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:00:44.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:00:44.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:00:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:00:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 0, 32), 3.11, 81.16, 0.0, 14.56, 13.41, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:00:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:00:32
2025-12-26T00:00:45.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:00:45.879 [DEBUG] [Thread-20835] [transport.py] [_log()] starting thread (client mode): 0xb6b633a0
2025-12-26T00:00:45.879 [DEBUG] [Thread-20835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:00:45.899 [DEBUG] [Thread-20835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:00:45.899 [INFO] [Thread-20835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] client lang: <none>
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] server lang: <none>
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] kex follows: False
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] Compression: none
2025-12-26T00:00:45.901 [DEBUG] [Thread-20835] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:00:45.910 [DEBUG] [Thread-20835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:00:45.910 [DEBUG] [Thread-20835] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:00:45.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:00:45.911 [DEBUG] [Thread-20835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:00:45.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:00:45.912 [DEBUG] [Thread-20835] [transport.py] [_log()] userauth is OK
2025-12-26T00:00:45.913 [DEBUG] [Thread-20835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:00:45.913 [DEBUG] [Thread-20835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:00:45.913 [DEBUG] [Thread-20835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:00:45.913 [DEBUG] [Thread-20835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:00:45.933 [INFO] [Thread-20835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:00:45.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:00:46.549 [DEBUG] [Thread-20835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:00:46.549 [DEBUG] [Thread-20835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:00:46.549 [DEBUG] [Thread-20835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:00:46.590 [DEBUG] [Thread-20835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:00:46.590 [DEBUG] [Thread-20835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:00:46.593 [DEBUG] [Thread-20835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:00:46.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:00:46.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:00:46.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:00:46.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:00:46.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:00:46.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:00:46.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:00:46.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:00:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:00:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.916382 -999.00  +13.50   8.27     83  +10.80 1 1 1 2 1     0    0 0.96 -71.24 ZNESW 8.6 8.3 189.2 11.7 14.4 -23.2 14.3 -22.9 14.2 -21.3 14.4 -22.5
2025-12-26T00:00:46.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.916382
2025-12-26T00:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:00:32', tmtdew=3.11, humidity=81.16, cloud=0.0, wind=14.56, temperature=13.41, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:00:33', seeing=1.68, atlas_timestamp='2025-12-25T21:59:35.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.13124999999999964, 0.0762500000000017, 0.23824999999999896, 0.15149999999999864, 0.09549999999999947, 0.13725000000000165, 0.15899999999999892, 0.23575000000000124, 0.17050000000000054, 0.07600000000000051, 0.17425000000000068, 0.16799999999999926, 0.1739999999999995, 0.1867499999999982, 0.18349999999999866, 0.1769999999999996, 0.1352499999999992, 0.16500000000000092, 0.1225000000000005, 0.1742499999999989, 0.20199999999999818, 0.2412499999999973, 0.25725000000000087, 0.20725000000000016, 0.1509999999999998, 0.2110000000000003, 0.19875000000000043, 0.20449999999999946, 0.29000000000000004, 0.2510000000000012, 0.26000000000000156, 0.3020000000000005, 0.23574999999999946], zp_timestamp='2025-12-25T21:57:00')
2025-12-26T00:00:46.621 [DEBUG] [Thread-20835] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:00:46.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-26T00:00:46.711 [DEBUG] [Thread-20838] [transport.py] [_log()] starting thread (client mode): 0xb6b60be0
2025-12-26T00:00:46.711 [DEBUG] [Thread-20838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:00:46.730 [DEBUG] [Thread-20838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:00:46.730 [INFO] [Thread-20838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] client lang: <none>
2025-12-26T00:00:46.738 [DEBUG] [Thread-20838] [transport.py] [_log()] server lang: <none>
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] kex follows: False
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] Compression: none
2025-12-26T00:00:46.739 [DEBUG] [Thread-20838] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:00:46.796 [DEBUG] [Thread-20838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:00:46.797 [DEBUG] [Thread-20838] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:00:46.798 [DEBUG] [Thread-20838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:00:46.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:00:46.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:00:46.852 [DEBUG] [Thread-20838] [transport.py] [_log()] userauth is OK
2025-12-26T00:00:46.853 [DEBUG] [Thread-20838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:00:46.853 [DEBUG] [Thread-20838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:00:46.854 [DEBUG] [Thread-20838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:00:46.854 [DEBUG] [Thread-20838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:00:46.873 [INFO] [Thread-20838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:00:46.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-26T00:00:46.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:00:47.704 [DEBUG] [Thread-20838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:00:47.704 [DEBUG] [Thread-20838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:00:47.752 [DEBUG] [Thread-20838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:00:47.752 [DEBUG] [Thread-20838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:00:47.762 [DEBUG] [Thread-20838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:00:47.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:00:47.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-26T00:00:47.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:00:47.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:00:47.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:00:47.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:00:47.798 [DEBUG] [Thread-20838] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:00:56.199 [DEBUG] [Thread-20840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:11.262 [DEBUG] [Thread-20841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:17.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:01:17.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:01:17.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-26T00:01:17.997 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:17.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:18.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 1, 4), 3.12, 81.11, 0.0, 14.2, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:01:18.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:01:04
2025-12-26T00:01:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:01:18.791 [DEBUG] [Thread-20842] [transport.py] [_log()] starting thread (client mode): 0xb6b63df0
2025-12-26T00:01:18.791 [DEBUG] [Thread-20842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:01:18.812 [DEBUG] [Thread-20842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:01:18.812 [INFO] [Thread-20842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:01:18.815 [DEBUG] [Thread-20842] [transport.py] [_log()] client lang: <none>
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] server lang: <none>
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] kex follows: False
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] Compression: none
2025-12-26T00:01:18.816 [DEBUG] [Thread-20842] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:01:18.833 [DEBUG] [Thread-20842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:01:18.834 [DEBUG] [Thread-20842] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:01:18.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:01:18.835 [DEBUG] [Thread-20842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:01:18.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:01:18.836 [DEBUG] [Thread-20842] [transport.py] [_log()] userauth is OK
2025-12-26T00:01:18.836 [DEBUG] [Thread-20842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:01:18.837 [DEBUG] [Thread-20842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:01:18.837 [DEBUG] [Thread-20842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:01:18.837 [DEBUG] [Thread-20842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:01:18.857 [INFO] [Thread-20842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:01:18.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:01:19.604 [DEBUG] [Thread-20842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:01:19.604 [DEBUG] [Thread-20842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:01:19.604 [DEBUG] [Thread-20842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:01:19.645 [DEBUG] [Thread-20842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:01:19.645 [DEBUG] [Thread-20842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:01:19.649 [DEBUG] [Thread-20842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:01:19.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:01:19.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:01:19.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:01:19.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:01:19.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:01:19.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:01:19.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:01:19.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:01:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:01:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.917076 -999.00  +13.50   7.30     83  +10.80 1 1 1 2 1     0    0 1.17 -65.47 ZNESW 8.0 7.3 188.0 9.6 14.4 -23.1 14.2 -22.7 14.1 -21.3 14.4 -22.4
2025-12-26T00:01:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:01:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:01:19.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.917076
2025-12-26T00:01:19.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:01:19.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:01:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:01:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:01:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:01:19.675 [DEBUG] [Thread-20842] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:01:19.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:01:04', tmtdew=3.12, humidity=81.11, cloud=0.0, wind=14.2, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:01:05', seeing=1.74, atlas_timestamp='2025-12-25T22:00:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T21:59:00')
2025-12-26T00:01:19.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-26T00:01:19.766 [DEBUG] [Thread-20845] [transport.py] [_log()] starting thread (client mode): 0xb957bd00
2025-12-26T00:01:19.766 [DEBUG] [Thread-20845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:01:19.781 [DEBUG] [Thread-20845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:01:19.782 [INFO] [Thread-20845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:01:19.789 [DEBUG] [Thread-20845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] client lang: <none>
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] server lang: <none>
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] kex follows: False
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] Compression: none
2025-12-26T00:01:19.790 [DEBUG] [Thread-20845] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:01:19.848 [DEBUG] [Thread-20845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:01:19.849 [DEBUG] [Thread-20845] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:01:19.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:01:19.850 [DEBUG] [Thread-20845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:01:19.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:01:19.904 [DEBUG] [Thread-20845] [transport.py] [_log()] userauth is OK
2025-12-26T00:01:19.904 [DEBUG] [Thread-20845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:01:19.904 [DEBUG] [Thread-20845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:01:19.904 [DEBUG] [Thread-20845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:01:19.904 [DEBUG] [Thread-20845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:01:19.924 [INFO] [Thread-20845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:01:19.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-26T00:01:19.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:01:20.795 [DEBUG] [Thread-20845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:01:20.796 [DEBUG] [Thread-20845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:01:20.844 [DEBUG] [Thread-20845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:01:20.844 [DEBUG] [Thread-20845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:01:20.852 [DEBUG] [Thread-20845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:01:20.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:01:20.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-26T00:01:20.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:01:20.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:01:20.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:01:20.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:01:20.891 [DEBUG] [Thread-20845] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:01:26.297 [DEBUG] [Thread-20847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:37.034 [DEBUG] [Thread-20848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:41.355 [DEBUG] [Thread-20849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:01:50.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:01:50.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-26T00:01:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 1, 36), 3.09, 81.24, 0.0, 11.52, 13.41, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:01:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:01:36
2025-12-26T00:01:51.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:01:51.884 [DEBUG] [Thread-20850] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-26T00:01:51.884 [DEBUG] [Thread-20850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:01:51.904 [DEBUG] [Thread-20850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:01:51.904 [INFO] [Thread-20850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:01:51.907 [DEBUG] [Thread-20850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] client lang: <none>
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] server lang: <none>
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] kex follows: False
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:01:51.908 [DEBUG] [Thread-20850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:01:51.909 [DEBUG] [Thread-20850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:01:51.909 [DEBUG] [Thread-20850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:01:51.909 [DEBUG] [Thread-20850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:01:51.909 [DEBUG] [Thread-20850] [transport.py] [_log()] Compression: none
2025-12-26T00:01:51.909 [DEBUG] [Thread-20850] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:01:51.926 [DEBUG] [Thread-20850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:01:51.927 [DEBUG] [Thread-20850] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:01:51.927 [DEBUG] [Thread-20850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:01:51.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:01:51.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:01:51.929 [DEBUG] [Thread-20850] [transport.py] [_log()] userauth is OK
2025-12-26T00:01:51.929 [DEBUG] [Thread-20850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:01:51.930 [DEBUG] [Thread-20850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:01:51.930 [DEBUG] [Thread-20850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:01:51.930 [DEBUG] [Thread-20850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:01:51.949 [INFO] [Thread-20850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:01:51.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:01:52.599 [DEBUG] [Thread-20850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:01:52.599 [DEBUG] [Thread-20850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:01:52.599 [DEBUG] [Thread-20850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:01:52.640 [DEBUG] [Thread-20850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:01:52.640 [DEBUG] [Thread-20850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:01:52.643 [DEBUG] [Thread-20850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:01:52.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:01:52.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:01:52.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:01:52.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:01:52.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:01:52.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:01:52.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:01:52.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:01:52.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:01:52.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.917423 -999.00  +13.50   7.70     83  +10.80 1 1 1 2 1     0    0 1.22 -63.95 ZNESW 8.6 7.7 185.4 11.2 14.4 -23.2 14.2 -23.2 14.1 -21.2 14.3 -22.6
2025-12-26T00:01:52.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:01:52.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:01:52.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.917423
2025-12-26T00:01:52.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:01:52.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:01:52.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:01:52.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:01:52.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:01:52.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:01:36', tmtdew=3.09, humidity=81.24, cloud=0.0, wind=11.52, temperature=13.41, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:01:37', seeing=2.0, atlas_timestamp='2025-12-25T22:01:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T21:59:00')
2025-12-26T00:01:52.667 [DEBUG] [Thread-20850] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:01:52.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-26T00:01:52.752 [DEBUG] [Thread-20853] [transport.py] [_log()] starting thread (client mode): 0xb6b60370
2025-12-26T00:01:52.752 [DEBUG] [Thread-20853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:01:52.768 [DEBUG] [Thread-20853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:01:52.769 [INFO] [Thread-20853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] client lang: <none>
2025-12-26T00:01:52.776 [DEBUG] [Thread-20853] [transport.py] [_log()] server lang: <none>
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] kex follows: False
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] Compression: none
2025-12-26T00:01:52.777 [DEBUG] [Thread-20853] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:01:52.839 [DEBUG] [Thread-20853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:01:52.839 [DEBUG] [Thread-20853] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:01:52.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:01:52.840 [DEBUG] [Thread-20853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:01:52.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:01:52.895 [DEBUG] [Thread-20853] [transport.py] [_log()] userauth is OK
2025-12-26T00:01:52.896 [DEBUG] [Thread-20853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:01:52.896 [DEBUG] [Thread-20853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:01:52.896 [DEBUG] [Thread-20853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:01:52.896 [DEBUG] [Thread-20853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:01:52.914 [INFO] [Thread-20853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:01:52.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-26T00:01:52.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:01:53.708 [DEBUG] [Thread-20853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:01:53.708 [DEBUG] [Thread-20853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:01:53.756 [DEBUG] [Thread-20853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:01:53.756 [DEBUG] [Thread-20853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:01:53.766 [DEBUG] [Thread-20853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:01:53.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:01: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')
2025-12-26T00:01:53.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-26T00:01:53.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:01:53.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:01:53.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:01:53.802 [DEBUG] [Thread-20853] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:01:54.989 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:01:56.394 [DEBUG] [Thread-20855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:11.441 [DEBUG] [Thread-20856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:18.200 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:18.201 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:02:23.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:02:23.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-26T00:02:24.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 2, 8), 3.09, 81.26, 0.0, 12.85, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:02:24.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:02:08
2025-12-26T00:02:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:02:24.802 [DEBUG] [Thread-20857] [transport.py] [_log()] starting thread (client mode): 0xb6b28430
2025-12-26T00:02:24.802 [DEBUG] [Thread-20857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:02:24.822 [DEBUG] [Thread-20857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:02:24.822 [INFO] [Thread-20857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:02:24.823 [DEBUG] [Thread-20857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:02:24.823 [DEBUG] [Thread-20857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] client lang: <none>
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] server lang: <none>
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] kex follows: False
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:02:24.824 [DEBUG] [Thread-20857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:02:24.825 [DEBUG] [Thread-20857] [transport.py] [_log()] Compression: none
2025-12-26T00:02:24.825 [DEBUG] [Thread-20857] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:02:24.834 [DEBUG] [Thread-20857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:02:24.835 [DEBUG] [Thread-20857] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:02:24.836 [DEBUG] [Thread-20857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:02:24.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:02:24.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:02:24.838 [DEBUG] [Thread-20857] [transport.py] [_log()] userauth is OK
2025-12-26T00:02:24.838 [DEBUG] [Thread-20857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:02:24.839 [DEBUG] [Thread-20857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:02:24.839 [DEBUG] [Thread-20857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:02:24.839 [DEBUG] [Thread-20857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:02:24.864 [INFO] [Thread-20857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:02:24.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:02:25.673 [DEBUG] [Thread-20857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:02:25.674 [DEBUG] [Thread-20857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:02:25.674 [DEBUG] [Thread-20857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:02:25.715 [DEBUG] [Thread-20857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:02:25.715 [DEBUG] [Thread-20857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:02:25.718 [DEBUG] [Thread-20857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:02:25.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:02:25.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:02:25.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:02:25.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:02:25.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:02:25.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:02:25.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:02:25.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:02:25.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:02:25.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.917770 -999.00  +13.50   8.58     83  +10.80 1 1 1 2 1     0    0 1.23 -60.13 ZNESW 8.2 8.6 191.4 11.6 14.3 -23.1 14.2 -22.5 14.1 -21.3 14.3 -22.4
2025-12-26T00:02:25.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:02:25.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:02:25.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.917770
2025-12-26T00:02:25.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:02:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:02:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:02:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:02:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:02:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:02:08', tmtdew=3.09, humidity=81.26, cloud=0.0, wind=12.85, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:02:09', seeing=1.47, atlas_timestamp='2025-12-25T22:01:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T21:59:00')
2025-12-26T00:02:25.739 [DEBUG] [Thread-20857] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:02:25.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-26T00:02:25.835 [DEBUG] [Thread-20860] [transport.py] [_log()] starting thread (client mode): 0xb6b29ed0
2025-12-26T00:02:25.835 [DEBUG] [Thread-20860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:02:25.853 [DEBUG] [Thread-20860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:02:25.854 [INFO] [Thread-20860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:02:25.861 [DEBUG] [Thread-20860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:02:25.861 [DEBUG] [Thread-20860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:02:25.861 [DEBUG] [Thread-20860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:02:25.861 [DEBUG] [Thread-20860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:25.861 [DEBUG] [Thread-20860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:25.861 [DEBUG] [Thread-20860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] client lang: <none>
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] server lang: <none>
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] kex follows: False
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] Compression: none
2025-12-26T00:02:25.862 [DEBUG] [Thread-20860] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:02:25.918 [DEBUG] [Thread-20860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:02:25.919 [DEBUG] [Thread-20860] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:02:25.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:02:25.920 [DEBUG] [Thread-20860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:02:25.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:02:25.975 [DEBUG] [Thread-20860] [transport.py] [_log()] userauth is OK
2025-12-26T00:02:25.975 [DEBUG] [Thread-20860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:02:25.975 [DEBUG] [Thread-20860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:02:25.975 [DEBUG] [Thread-20860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:02:25.975 [DEBUG] [Thread-20860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:02:26.000 [INFO] [Thread-20860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:02:26.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:02:26.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:02:26.473 [DEBUG] [Thread-20862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:26.831 [DEBUG] [Thread-20860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:02:26.832 [DEBUG] [Thread-20860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:02:26.880 [DEBUG] [Thread-20860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:02:26.880 [DEBUG] [Thread-20860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:02:26.889 [DEBUG] [Thread-20860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:02:26.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:02:26.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-26T00:02:26.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:02:26.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:02:26.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:02:26.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:02:26.926 [DEBUG] [Thread-20860] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:02:37.111 [DEBUG] [Thread-20863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:41.526 [DEBUG] [Thread-20864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:56.554 [DEBUG] [Thread-20865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:02:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:02:56.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:02:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:02:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 2, 40), 3.07, 81.83, 0.0, 12.49, 13.34, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:02:57.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:02:40
2025-12-26T00:02:57.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:02:57.942 [DEBUG] [Thread-20866] [transport.py] [_log()] starting thread (client mode): 0xb6b61f90
2025-12-26T00:02:57.942 [DEBUG] [Thread-20866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:02:57.963 [DEBUG] [Thread-20866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:02:57.963 [INFO] [Thread-20866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:02:57.966 [DEBUG] [Thread-20866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] client lang: <none>
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] server lang: <none>
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] kex follows: False
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] Compression: none
2025-12-26T00:02:57.967 [DEBUG] [Thread-20866] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:02:57.983 [DEBUG] [Thread-20866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:02:57.984 [DEBUG] [Thread-20866] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:02:57.984 [DEBUG] [Thread-20866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:02:57.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:02:57.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:02:57.987 [DEBUG] [Thread-20866] [transport.py] [_log()] userauth is OK
2025-12-26T00:02:57.987 [DEBUG] [Thread-20866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:02:57.987 [DEBUG] [Thread-20866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:02:57.987 [DEBUG] [Thread-20866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:02:57.987 [DEBUG] [Thread-20866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:02:58.011 [INFO] [Thread-20866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:02:58.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:02:58.609 [DEBUG] [Thread-20866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:02:58.609 [DEBUG] [Thread-20866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:02:58.609 [DEBUG] [Thread-20866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:02:58.650 [DEBUG] [Thread-20866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:02:58.650 [DEBUG] [Thread-20866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:02:58.654 [DEBUG] [Thread-20866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:02:58.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:02:58.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:02:58.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:02:58.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:02:58.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:02:58.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:02:58.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:02:58.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:02:58.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:02:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.918118 -999.00  +13.50   8.04     83  +10.80 1 1 1 2 1     0    0 1.33 -56.83 ZNESW 7.1 8.0 191.8 13.2 14.3 -23.1 14.2 -22.7 14.1 -21.2 14.3 -22.4
2025-12-26T00:02:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:02:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:02:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.918118
2025-12-26T00:02:58.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:02:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:02:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:02:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:02:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:02:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:02:40', tmtdew=3.07, humidity=81.83, cloud=0.0, wind=12.49, temperature=13.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:02:41', seeing=1.99, atlas_timestamp='2025-12-25T22:02:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T21:59:00')
2025-12-26T00:02:58.681 [DEBUG] [Thread-20866] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:02:58.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-26T00:02:58.773 [DEBUG] [Thread-20869] [transport.py] [_log()] starting thread (client mode): 0xb6b63700
2025-12-26T00:02:58.773 [DEBUG] [Thread-20869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:02:58.788 [DEBUG] [Thread-20869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:02:58.788 [INFO] [Thread-20869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:02:58.795 [DEBUG] [Thread-20869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] client lang: <none>
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] server lang: <none>
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] kex follows: False
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] Compression: none
2025-12-26T00:02:58.796 [DEBUG] [Thread-20869] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:02:58.855 [DEBUG] [Thread-20869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:02:58.855 [DEBUG] [Thread-20869] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:02:58.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:02:58.856 [DEBUG] [Thread-20869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:02:58.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:02:58.911 [DEBUG] [Thread-20869] [transport.py] [_log()] userauth is OK
2025-12-26T00:02:58.911 [DEBUG] [Thread-20869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:02:58.911 [DEBUG] [Thread-20869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:02:58.911 [DEBUG] [Thread-20869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:02:58.911 [DEBUG] [Thread-20869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:02:58.929 [INFO] [Thread-20869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:02:58.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:02:58.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:02:59.766 [DEBUG] [Thread-20869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:02:59.766 [DEBUG] [Thread-20869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:02:59.814 [DEBUG] [Thread-20869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:02:59.814 [DEBUG] [Thread-20869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:02:59.824 [DEBUG] [Thread-20869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:02:59.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:02: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')
2025-12-26T00:02: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') -> 00000000
2025-12-26T00:02:59.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:02:59.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:02:59.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:02:59.859 [DEBUG] [Thread-20869] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:03:11.595 [DEBUG] [Thread-20871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:03:18.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:03:18.408 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:03:26.647 [DEBUG] [Thread-20872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:03:29.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:03:29.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:03:29.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-26T00:03:30.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 3, 12), 3.06, 81.93, 0.0, 13.13, 13.39, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:03:30.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:03:12
2025-12-26T00:03:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:03:30.869 [DEBUG] [Thread-20873] [transport.py] [_log()] starting thread (client mode): 0xb6b2aa70
2025-12-26T00:03:30.869 [DEBUG] [Thread-20873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:03:30.889 [DEBUG] [Thread-20873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:03:30.889 [INFO] [Thread-20873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] client lang: <none>
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] server lang: <none>
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] kex follows: False
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] Compression: none
2025-12-26T00:03:30.892 [DEBUG] [Thread-20873] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:03:30.907 [DEBUG] [Thread-20873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:03:30.907 [DEBUG] [Thread-20873] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:03:30.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:03:30.907 [DEBUG] [Thread-20873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:03:30.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:03:30.908 [DEBUG] [Thread-20873] [transport.py] [_log()] userauth is OK
2025-12-26T00:03:30.908 [DEBUG] [Thread-20873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:03:30.908 [DEBUG] [Thread-20873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:03:30.908 [DEBUG] [Thread-20873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:03:30.908 [DEBUG] [Thread-20873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:03:30.923 [INFO] [Thread-20873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:03:30.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:03:31.735 [DEBUG] [Thread-20873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:03:31.735 [DEBUG] [Thread-20873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:03:31.736 [DEBUG] [Thread-20873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:03:31.776 [DEBUG] [Thread-20873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:03:31.776 [DEBUG] [Thread-20873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:03:31.779 [DEBUG] [Thread-20873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:03:31.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:03:31.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:03:31.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:03:31.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:03:31.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:03:31.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:03:31.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.918812 -999.00  +13.50   6.54     83  +10.80 1 1 1 2 1     0    0 1.22 -59.80 ZNESW 6.8 6.5 181.2 14.1 14.3 -23.0 14.2 -22.6 14.1 -21.1 14.3 -22.1
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.918812
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:03:31.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:03:31.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:03:12', tmtdew=3.06, humidity=81.93, cloud=0.0, wind=13.13, temperature=13.39, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:03:13', seeing=1.99, atlas_timestamp='2025-12-25T22:03:05.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T21:59:00')
2025-12-26T00:03:31.797 [DEBUG] [Thread-20873] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:03:31.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-26T00:03:31.882 [DEBUG] [Thread-20876] [transport.py] [_log()] starting thread (client mode): 0xb6b29030
2025-12-26T00:03:31.882 [DEBUG] [Thread-20876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:03:31.897 [DEBUG] [Thread-20876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:03:31.898 [INFO] [Thread-20876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:03:31.905 [DEBUG] [Thread-20876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] client lang: <none>
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] server lang: <none>
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] kex follows: False
2025-12-26T00:03:31.906 [DEBUG] [Thread-20876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:03:31.907 [DEBUG] [Thread-20876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:03:31.907 [DEBUG] [Thread-20876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:03:31.907 [DEBUG] [Thread-20876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:03:31.907 [DEBUG] [Thread-20876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:03:31.907 [DEBUG] [Thread-20876] [transport.py] [_log()] Compression: none
2025-12-26T00:03:31.907 [DEBUG] [Thread-20876] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:03:31.963 [DEBUG] [Thread-20876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:03:31.963 [DEBUG] [Thread-20876] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:03:31.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:03:31.964 [DEBUG] [Thread-20876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:03:31.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:03:32.018 [DEBUG] [Thread-20876] [transport.py] [_log()] userauth is OK
2025-12-26T00:03:32.018 [DEBUG] [Thread-20876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:03:32.019 [DEBUG] [Thread-20876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:03:32.019 [DEBUG] [Thread-20876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:03:32.019 [DEBUG] [Thread-20876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:03:32.037 [INFO] [Thread-20876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:03:32.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:03:32.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:03:32.895 [DEBUG] [Thread-20876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:03:32.896 [DEBUG] [Thread-20876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:03:32.944 [DEBUG] [Thread-20876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:03:32.944 [DEBUG] [Thread-20876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:03:32.954 [DEBUG] [Thread-20876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:03:32.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:03:32.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-26T00:03:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:03:32.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:03:32.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:03:32.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:03:32.991 [DEBUG] [Thread-20876] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:03:37.200 [DEBUG] [Thread-20878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:03:41.681 [DEBUG] [Thread-20879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:03:56.730 [DEBUG] [Thread-20880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:04:02.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:04:02.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-26T00:04:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 3, 45), 3.05, 81.44, 0.0, 14.63, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:04:03.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:03:45
2025-12-26T00:04:03.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:04:03.987 [DEBUG] [Thread-20881] [transport.py] [_log()] starting thread (client mode): 0xb6b61f60
2025-12-26T00:04:03.987 [DEBUG] [Thread-20881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:04:04.006 [DEBUG] [Thread-20881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:04:04.006 [INFO] [Thread-20881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:04:04.009 [DEBUG] [Thread-20881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:04:04.009 [DEBUG] [Thread-20881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:04:04.009 [DEBUG] [Thread-20881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] client lang: <none>
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] server lang: <none>
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] kex follows: False
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] Compression: none
2025-12-26T00:04:04.010 [DEBUG] [Thread-20881] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:04:04.029 [DEBUG] [Thread-20881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:04:04.030 [DEBUG] [Thread-20881] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:04:04.030 [DEBUG] [Thread-20881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:04:04.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:04:04.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:04:04.032 [DEBUG] [Thread-20881] [transport.py] [_log()] userauth is OK
2025-12-26T00:04:04.032 [DEBUG] [Thread-20881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:04:04.032 [DEBUG] [Thread-20881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:04:04.033 [DEBUG] [Thread-20881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:04:04.033 [DEBUG] [Thread-20881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:04:04.067 [INFO] [Thread-20881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:04:04.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:04:04.730 [DEBUG] [Thread-20881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:04:04.730 [DEBUG] [Thread-20881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:04:04.730 [DEBUG] [Thread-20881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:04:04.771 [DEBUG] [Thread-20881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:04:04.771 [DEBUG] [Thread-20881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:04:04.773 [DEBUG] [Thread-20881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:04:04.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:04:04.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:04:04.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:04:04.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:04:04.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:04:04.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:04:04.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.919159 -999.00  +13.50   8.65     83  +10.80 1 1 1 2 1     0    0 1.27 -57.50 ZNESW 6.7 8.7 194.0 9.9 14.3 -23.0 14.2 -22.6 14.0 -21.1 14.3 -22.2
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.919159
2025-12-26T00:04:04.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:04:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:04:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:04:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:04:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:04:04.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:03:45', tmtdew=3.05, humidity=81.44, cloud=0.0, wind=14.63, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:03:45', seeing=2.67, atlas_timestamp='2025-12-25T22:03:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T21:59:00')
2025-12-26T00:04:04.790 [DEBUG] [Thread-20881] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:04:04.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:04:04.875 [DEBUG] [Thread-20884] [transport.py] [_log()] starting thread (client mode): 0xb4105270
2025-12-26T00:04:04.875 [DEBUG] [Thread-20884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:04:04.889 [DEBUG] [Thread-20884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:04:04.889 [INFO] [Thread-20884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] client lang: <none>
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] server lang: <none>
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] kex follows: False
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] Compression: none
2025-12-26T00:04:04.896 [DEBUG] [Thread-20884] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:04:04.952 [DEBUG] [Thread-20884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:04:04.952 [DEBUG] [Thread-20884] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:04:04.952 [DEBUG] [Thread-20884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:04:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:04:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:04:05.009 [DEBUG] [Thread-20884] [transport.py] [_log()] userauth is OK
2025-12-26T00:04:05.009 [DEBUG] [Thread-20884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:04:05.009 [DEBUG] [Thread-20884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:04:05.009 [DEBUG] [Thread-20884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:04:05.009 [DEBUG] [Thread-20884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:04:05.023 [INFO] [Thread-20884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:04:05.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-26T00:04:05.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:04:05.849 [DEBUG] [Thread-20884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:04:05.849 [DEBUG] [Thread-20884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:04:05.896 [DEBUG] [Thread-20884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:04:05.896 [DEBUG] [Thread-20884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:04:05.904 [DEBUG] [Thread-20884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:04:05.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:04: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-26T00:04: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-26T00:04:05.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:04:05.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:04:05.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:04:05.936 [DEBUG] [Thread-20884] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:04:11.766 [DEBUG] [Thread-20886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:18.607 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:18.608 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:26.816 [DEBUG] [Thread-20887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:04:35.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:04:35.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-26T00:04:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 4, 16), 3.05, 81.46, 0.0, 14.65, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:04:36.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:04:16
2025-12-26T00:04:36.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:04:36.914 [DEBUG] [Thread-20888] [transport.py] [_log()] starting thread (client mode): 0xb6b2bf40
2025-12-26T00:04:36.915 [DEBUG] [Thread-20888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:04:36.925 [DEBUG] [Thread-20888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:04:36.925 [INFO] [Thread-20888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] client lang: <none>
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] server lang: <none>
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] kex follows: False
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:04:36.928 [DEBUG] [Thread-20888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:04:36.929 [DEBUG] [Thread-20888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:04:36.929 [DEBUG] [Thread-20888] [transport.py] [_log()] Compression: none
2025-12-26T00:04:36.929 [DEBUG] [Thread-20888] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:04:36.947 [DEBUG] [Thread-20888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:04:36.948 [DEBUG] [Thread-20888] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:04:36.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:04:36.948 [DEBUG] [Thread-20888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:04:36.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:04:36.949 [DEBUG] [Thread-20888] [transport.py] [_log()] userauth is OK
2025-12-26T00:04:36.949 [DEBUG] [Thread-20888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:04:36.949 [DEBUG] [Thread-20888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:04:36.950 [DEBUG] [Thread-20888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:04:36.950 [DEBUG] [Thread-20888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:04:36.963 [INFO] [Thread-20888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:04:36.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:04:37.268 [DEBUG] [Thread-20890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:37.755 [DEBUG] [Thread-20888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:04:37.755 [DEBUG] [Thread-20888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:04:37.755 [DEBUG] [Thread-20888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:04:37.796 [DEBUG] [Thread-20888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:04:37.796 [DEBUG] [Thread-20888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:04:37.800 [DEBUG] [Thread-20888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:04:37.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:04:37.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:04:37.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:04:37.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:04:37.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:04:37.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:04:37.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:04:37.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:04:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:04:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.919507 -999.00  +13.50   9.31     83  +10.80 1 1 1 2 1     0    0 1.49 -50.98 ZNESW 6.7 9.3 183.8 12.7 14.3 -22.9 14.2 -22.9 14.1 -21.2 14.3 -22.2
2025-12-26T00:04:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:04:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:04:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.919507
2025-12-26T00:04:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:04:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:04:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:04:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:04:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:04:37.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:04:16', tmtdew=3.05, humidity=81.46, cloud=0.0, wind=14.65, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:04:17', seeing=1.58, atlas_timestamp='2025-12-25T22:04:05.405', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T22:03:00')
2025-12-26T00:04:37.827 [DEBUG] [Thread-20888] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:04: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-26T00:04:37.938 [DEBUG] [Thread-20892] [transport.py] [_log()] starting thread (client mode): 0xb6b62e30
2025-12-26T00:04:37.938 [DEBUG] [Thread-20892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:04:37.953 [DEBUG] [Thread-20892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:04:37.953 [INFO] [Thread-20892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:04:37.960 [DEBUG] [Thread-20892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] client lang: <none>
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] server lang: <none>
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] kex follows: False
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:04:37.961 [DEBUG] [Thread-20892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:04:37.962 [DEBUG] [Thread-20892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:04:37.962 [DEBUG] [Thread-20892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:04:37.962 [DEBUG] [Thread-20892] [transport.py] [_log()] Compression: none
2025-12-26T00:04:37.962 [DEBUG] [Thread-20892] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:04:38.021 [DEBUG] [Thread-20892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:04:38.022 [DEBUG] [Thread-20892] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:04:38.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:04:38.023 [DEBUG] [Thread-20892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:04:38.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:04:38.077 [DEBUG] [Thread-20892] [transport.py] [_log()] userauth is OK
2025-12-26T00:04:38.078 [DEBUG] [Thread-20892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:04:38.078 [DEBUG] [Thread-20892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:04:38.078 [DEBUG] [Thread-20892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:04:38.078 [DEBUG] [Thread-20892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:04:38.102 [INFO] [Thread-20892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:04:38.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-26T00:04:38.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:04:38.945 [DEBUG] [Thread-20892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:04:38.945 [DEBUG] [Thread-20892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:04:38.993 [DEBUG] [Thread-20892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:04:38.993 [DEBUG] [Thread-20892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:04:39.002 [DEBUG] [Thread-20892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:04:39.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:04:39.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:04:39.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:04:39.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:04:39.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:04:39.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:04:39.038 [DEBUG] [Thread-20892] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:04:41.853 [DEBUG] [Thread-20894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:04:56.910 [DEBUG] [Thread-20895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:09.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:05:09.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:05:09.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-26T00:05:09.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 4, 49), 3.04, 81.51, 0.0, 15.79, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:05:09.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:04:49
2025-12-26T00:05:09.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:05:10.025 [DEBUG] [Thread-20896] [transport.py] [_log()] starting thread (client mode): 0xb955a1a0
2025-12-26T00:05:10.025 [DEBUG] [Thread-20896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:05:10.045 [DEBUG] [Thread-20896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:05:10.045 [INFO] [Thread-20896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:05:10.048 [DEBUG] [Thread-20896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] client lang: <none>
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] server lang: <none>
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] kex follows: False
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] Compression: none
2025-12-26T00:05:10.049 [DEBUG] [Thread-20896] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:05:10.069 [DEBUG] [Thread-20896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:05:10.069 [DEBUG] [Thread-20896] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:05:10.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:05:10.070 [DEBUG] [Thread-20896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:05:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:05:10.072 [DEBUG] [Thread-20896] [transport.py] [_log()] userauth is OK
2025-12-26T00:05:10.073 [DEBUG] [Thread-20896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:05:10.073 [DEBUG] [Thread-20896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:05:10.073 [DEBUG] [Thread-20896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:05:10.073 [DEBUG] [Thread-20896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:05:10.097 [INFO] [Thread-20896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:05:10.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:05:11.950 [DEBUG] [Thread-20898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:15.381 [DEBUG] [Thread-20896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:05:15.381 [DEBUG] [Thread-20896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:05:15.381 [DEBUG] [Thread-20896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:05:15.422 [DEBUG] [Thread-20896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:05:15.422 [DEBUG] [Thread-20896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:05:15.426 [DEBUG] [Thread-20896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:05:15.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:05:15.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:05:15.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:05:15.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:05:15.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:05:15.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:05:15.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:05:15.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:05:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:05:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.919853 -999.00  +13.50  10.48     83  +10.80 1 1 1 2 1     0    0 1.64 -44.15 ZNESW 6.7 10.5 187.0 12.3 14.3 -23.0 14.2 -22.9 14.0 -21.2 14.3 -22.2
2025-12-26T00:05:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:05:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:05:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.919853
2025-12-26T00:05:15.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:05:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:05:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:05:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:05:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:05:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:04:49', tmtdew=3.04, humidity=81.51, cloud=0.0, wind=15.79, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:04:49', seeing=1.53, atlas_timestamp='2025-12-25T22:04:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T22:03:00')
2025-12-26T00:05:15.447 [DEBUG] [Thread-20896] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:05:15.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-26T00:05:15.536 [DEBUG] [Thread-20900] [transport.py] [_log()] starting thread (client mode): 0xb9558700
2025-12-26T00:05:15.536 [DEBUG] [Thread-20900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:05:15.550 [DEBUG] [Thread-20900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:05:15.550 [INFO] [Thread-20900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] client lang: <none>
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] server lang: <none>
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] kex follows: False
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:05:15.558 [DEBUG] [Thread-20900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:05:15.559 [DEBUG] [Thread-20900] [transport.py] [_log()] Compression: none
2025-12-26T00:05:15.559 [DEBUG] [Thread-20900] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:05:15.620 [DEBUG] [Thread-20900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:05:15.620 [DEBUG] [Thread-20900] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:05:15.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:05:15.621 [DEBUG] [Thread-20900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:05:15.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:05:15.676 [DEBUG] [Thread-20900] [transport.py] [_log()] userauth is OK
2025-12-26T00:05:15.677 [DEBUG] [Thread-20900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:05:15.677 [DEBUG] [Thread-20900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:05:15.677 [DEBUG] [Thread-20900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:05:15.677 [DEBUG] [Thread-20900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:05:15.696 [INFO] [Thread-20900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:05:15.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-26T00:05:15.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:05:16.517 [DEBUG] [Thread-20900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:05:16.518 [DEBUG] [Thread-20900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:05:16.566 [DEBUG] [Thread-20900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:05:16.566 [DEBUG] [Thread-20900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:05:16.575 [DEBUG] [Thread-20900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:05:16.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:05:16.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:05:16.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-26T00:05:16.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:05:16.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:05:16.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:05:16.611 [DEBUG] [Thread-20900] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:05:18.808 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:18.809 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:26.983 [DEBUG] [Thread-20902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:37.332 [DEBUG] [Thread-20903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:42.028 [DEBUG] [Thread-20904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:05:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:05:46.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:05:46.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-26T00:05:47.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 5, 21), 3.04, 81.54, 0.0, 14.28, 13.36, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:05:47.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:05:21
2025-12-26T00:05:47.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:05:47.582 [DEBUG] [Thread-20905] [transport.py] [_log()] starting thread (client mode): 0xb957b2e0
2025-12-26T00:05:47.582 [DEBUG] [Thread-20905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:05:47.602 [DEBUG] [Thread-20905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:05:47.602 [INFO] [Thread-20905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:05:47.605 [DEBUG] [Thread-20905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:05:47.605 [DEBUG] [Thread-20905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:05:47.605 [DEBUG] [Thread-20905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:05:47.605 [DEBUG] [Thread-20905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:47.605 [DEBUG] [Thread-20905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:47.605 [DEBUG] [Thread-20905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] client lang: <none>
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] server lang: <none>
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] kex follows: False
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] Compression: none
2025-12-26T00:05:47.606 [DEBUG] [Thread-20905] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:05:47.624 [DEBUG] [Thread-20905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:05:47.624 [DEBUG] [Thread-20905] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:05:47.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:05:47.625 [DEBUG] [Thread-20905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:05:47.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:05:47.628 [DEBUG] [Thread-20905] [transport.py] [_log()] userauth is OK
2025-12-26T00:05:47.628 [DEBUG] [Thread-20905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:05:47.628 [DEBUG] [Thread-20905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:05:47.628 [DEBUG] [Thread-20905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:05:47.628 [DEBUG] [Thread-20905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:05:47.649 [INFO] [Thread-20905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:05:47.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:05:48.302 [DEBUG] [Thread-20905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:05:48.302 [DEBUG] [Thread-20905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:05:48.302 [DEBUG] [Thread-20905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:05:48.343 [DEBUG] [Thread-20905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:05:48.344 [DEBUG] [Thread-20905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:05:48.346 [DEBUG] [Thread-20905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:05:48.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:05:48.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:05:48.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:05:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:05:48.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:05:48.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:05:48.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:05:48.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:05:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:05:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.920200 -999.00  +13.50   7.21     83  +10.80 1 1 1 2 1     0    0 1.70 -42.40 ZNESW 6.9 7.2 180.5 9.8 14.3 -22.9 14.1 -22.6 14.0 -21.1 14.3 -22.2
2025-12-26T00:05:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:05:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:05:48.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.920200
2025-12-26T00:05:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:05:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:05:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:05:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:05:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:05:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:05:21', tmtdew=3.04, humidity=81.54, cloud=0.0, wind=14.28, temperature=13.36, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:05:21', seeing=1.63, atlas_timestamp='2025-12-25T22:05:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T22:03:00')
2025-12-26T00:05:48.363 [DEBUG] [Thread-20905] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:05:48.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-26T00:05:48.445 [DEBUG] [Thread-20908] [transport.py] [_log()] starting thread (client mode): 0xb6b28910
2025-12-26T00:05:48.445 [DEBUG] [Thread-20908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:05:48.460 [DEBUG] [Thread-20908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:05:48.460 [INFO] [Thread-20908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:05:48.467 [DEBUG] [Thread-20908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] client lang: <none>
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] server lang: <none>
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] kex follows: False
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:05:48.468 [DEBUG] [Thread-20908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:05:48.469 [DEBUG] [Thread-20908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:05:48.469 [DEBUG] [Thread-20908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:05:48.469 [DEBUG] [Thread-20908] [transport.py] [_log()] Compression: none
2025-12-26T00:05:48.469 [DEBUG] [Thread-20908] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:05:48.527 [DEBUG] [Thread-20908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:05:48.528 [DEBUG] [Thread-20908] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:05:48.528 [DEBUG] [Thread-20908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:05:48.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:05:48.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:05:48.584 [DEBUG] [Thread-20908] [transport.py] [_log()] userauth is OK
2025-12-26T00:05:48.584 [DEBUG] [Thread-20908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:05:48.584 [DEBUG] [Thread-20908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:05:48.584 [DEBUG] [Thread-20908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:05:48.584 [DEBUG] [Thread-20908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:05:48.602 [INFO] [Thread-20908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:05:48.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-26T00:05:48.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:05:49.428 [DEBUG] [Thread-20908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:05:49.428 [DEBUG] [Thread-20908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:05:49.476 [DEBUG] [Thread-20908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:05:49.476 [DEBUG] [Thread-20908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:05:49.486 [DEBUG] [Thread-20908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:05:49.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:05:49.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:05:49.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-26T00:05:49.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:05:49.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:05:49.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:05:49.522 [DEBUG] [Thread-20908] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:05:57.066 [DEBUG] [Thread-20910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:12.113 [DEBUG] [Thread-20911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:19.012 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:19.013 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:19.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:06:19.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:06:19.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:06:20.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 5, 53), 2.99, 82.03, 0.0, 14.45, 13.27, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:06:20.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:05:53
2025-12-26T00:06:20.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:06:20.511 [DEBUG] [Thread-20912] [transport.py] [_log()] starting thread (client mode): 0xb955a1a0
2025-12-26T00:06:20.511 [DEBUG] [Thread-20912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:06:20.530 [DEBUG] [Thread-20912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:06:20.531 [INFO] [Thread-20912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] client lang: <none>
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] server lang: <none>
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] kex follows: False
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] Compression: none
2025-12-26T00:06:20.534 [DEBUG] [Thread-20912] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:06:20.551 [DEBUG] [Thread-20912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:06:20.552 [DEBUG] [Thread-20912] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:06:20.552 [DEBUG] [Thread-20912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:06:20.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:06:20.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:06:20.554 [DEBUG] [Thread-20912] [transport.py] [_log()] userauth is OK
2025-12-26T00:06:20.554 [DEBUG] [Thread-20912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:06:20.554 [DEBUG] [Thread-20912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:06:20.555 [DEBUG] [Thread-20912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:06:20.555 [DEBUG] [Thread-20912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:06:20.579 [INFO] [Thread-20912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:06:20.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:06:21.254 [DEBUG] [Thread-20912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:06:21.254 [DEBUG] [Thread-20912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:06:21.255 [DEBUG] [Thread-20912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:06:21.296 [DEBUG] [Thread-20912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:06:21.296 [DEBUG] [Thread-20912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:06:21.299 [DEBUG] [Thread-20912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:06:21.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:06:21.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:06:21.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:06:21.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:06:21.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:06:21.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:06:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:06:21.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:06:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:06:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.920548 -999.00  +13.50   9.72     83  +10.80 1 1 1 2 1     0    0 1.68 -41.24 ZNESW 9.2 9.7 181.0 11.6 14.3 -22.9 14.2 -22.6 14.0 -21.1 14.3 -22.3
2025-12-26T00:06:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:06:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:06:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.920548
2025-12-26T00:06:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:06:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:06:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:06:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:06:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:06:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:05:53', tmtdew=2.99, humidity=82.03, cloud=0.0, wind=14.45, temperature=13.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:05:53', seeing=1.48, atlas_timestamp='2025-12-25T22:05:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T22:03:00')
2025-12-26T00:06:21.322 [DEBUG] [Thread-20912] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:06:21.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-26T00:06:21.416 [DEBUG] [Thread-20915] [transport.py] [_log()] starting thread (client mode): 0xb9559f30
2025-12-26T00:06:21.416 [DEBUG] [Thread-20915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:06:21.431 [DEBUG] [Thread-20915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:06:21.431 [INFO] [Thread-20915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:06:21.439 [DEBUG] [Thread-20915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:06:21.439 [DEBUG] [Thread-20915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:06:21.439 [DEBUG] [Thread-20915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:06:21.439 [DEBUG] [Thread-20915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:21.439 [DEBUG] [Thread-20915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:21.439 [DEBUG] [Thread-20915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] client lang: <none>
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] server lang: <none>
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] kex follows: False
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:06:21.440 [DEBUG] [Thread-20915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:06:21.441 [DEBUG] [Thread-20915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:06:21.441 [DEBUG] [Thread-20915] [transport.py] [_log()] Compression: none
2025-12-26T00:06:21.441 [DEBUG] [Thread-20915] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:06:21.495 [DEBUG] [Thread-20915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:06:21.496 [DEBUG] [Thread-20915] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:06:21.496 [DEBUG] [Thread-20915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:06:21.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:06:21.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:06:21.552 [DEBUG] [Thread-20915] [transport.py] [_log()] userauth is OK
2025-12-26T00:06:21.552 [DEBUG] [Thread-20915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:06:21.552 [DEBUG] [Thread-20915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:06:21.552 [DEBUG] [Thread-20915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:06:21.552 [DEBUG] [Thread-20915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:06:21.571 [INFO] [Thread-20915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:06: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-26T00:06:21.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:06:22.412 [DEBUG] [Thread-20915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:06:22.412 [DEBUG] [Thread-20915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:06:22.460 [DEBUG] [Thread-20915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:06:22.460 [DEBUG] [Thread-20915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:06:22.470 [DEBUG] [Thread-20915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:06:22.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:06: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-26T00:06:22.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:06:22.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:06:22.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:06:22.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:06:22.507 [DEBUG] [Thread-20915] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:06:27.148 [DEBUG] [Thread-20917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:37.393 [DEBUG] [Thread-20918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:42.196 [DEBUG] [Thread-20919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:06:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:06:52.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:06:52.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-26T00:06:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 6, 25), 2.98, 82.06, 0.0, 15.46, 13.24, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:06:53.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:06:25
2025-12-26T00:06:53.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:06:53.518 [DEBUG] [Thread-20920] [transport.py] [_log()] starting thread (client mode): 0xb957a350
2025-12-26T00:06:53.519 [DEBUG] [Thread-20920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:06:53.541 [DEBUG] [Thread-20920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:06:53.542 [INFO] [Thread-20920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:06:53.544 [DEBUG] [Thread-20920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] client lang: <none>
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] server lang: <none>
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] kex follows: False
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] Compression: none
2025-12-26T00:06:53.545 [DEBUG] [Thread-20920] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:06:53.563 [DEBUG] [Thread-20920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:06:53.564 [DEBUG] [Thread-20920] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:06:53.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:06:53.565 [DEBUG] [Thread-20920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:06:53.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:06:53.567 [DEBUG] [Thread-20920] [transport.py] [_log()] userauth is OK
2025-12-26T00:06:53.567 [DEBUG] [Thread-20920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:06:53.568 [DEBUG] [Thread-20920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:06:53.568 [DEBUG] [Thread-20920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:06:53.568 [DEBUG] [Thread-20920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:06:53.604 [INFO] [Thread-20920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:06:53.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:06:54.241 [DEBUG] [Thread-20920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:06:54.242 [DEBUG] [Thread-20920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:06:54.242 [DEBUG] [Thread-20920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:06:54.283 [DEBUG] [Thread-20920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:06:54.283 [DEBUG] [Thread-20920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:06:54.286 [DEBUG] [Thread-20920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:06:54.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:06:54.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:06:54.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:06:54.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:06:54.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:06:54.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:06:54.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:06:54.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:06:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:06:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.921243 -999.00  +13.50   7.63     83  +10.80 1 1 1 2 1     0    0 1.67 -43.03 ZNESW 9.9 7.6 175.2 9.5 14.3 -22.9 14.2 -22.7 14.0 -21.0 14.2 -21.9
2025-12-26T00:06:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:06:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:06:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.921243
2025-12-26T00:06:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:06:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:06:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:06:54.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:06:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:06:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:06:25', tmtdew=2.98, humidity=82.06, cloud=0.0, wind=15.46, temperature=13.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:06:25', seeing=1.48, atlas_timestamp='2025-12-25T22:06:35.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.1797500000000003, 0.16125000000000078, 0.292250000000001, 0.12099999999999866, 0.11850000000000094, 0.17525000000000013, 0.21699999999999875, 0.27025000000000077, 0.18249999999999922, 0.05799999999999983, 0.1922499999999996, 0.2010000000000005, 0.1869999999999994, 0.17825000000000024, 0.19099999999999895, 0.22250000000000014, 0.1352499999999992, 0.1634999999999991, 0.1064999999999987, 0.18124999999999858, 0.24499999999999922, 0.26674999999999827, 0.25675000000000026, 0.23874999999999957, 0.16199999999999903, 0.24150000000000027, 0.26374999999999993, 0.27749999999999986, 0.3280000000000003, 0.2630000000000008, 0.26700000000000124, 0.3280000000000012, 0.23774999999999835], zp_timestamp='2025-12-25T22:03:00')
2025-12-26T00:06:54.314 [DEBUG] [Thread-20920] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:06:54.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-26T00:06:54.407 [DEBUG] [Thread-20923] [transport.py] [_log()] starting thread (client mode): 0xb9559480
2025-12-26T00:06:54.407 [DEBUG] [Thread-20923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:06:54.422 [DEBUG] [Thread-20923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:06:54.422 [INFO] [Thread-20923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] client lang: <none>
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] server lang: <none>
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] kex follows: False
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] Compression: none
2025-12-26T00:06:54.430 [DEBUG] [Thread-20923] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:06:54.487 [DEBUG] [Thread-20923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:06:54.488 [DEBUG] [Thread-20923] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:06:54.488 [DEBUG] [Thread-20923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:06:54.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:06:54.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:06:54.544 [DEBUG] [Thread-20923] [transport.py] [_log()] userauth is OK
2025-12-26T00:06:54.544 [DEBUG] [Thread-20923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:06:54.545 [DEBUG] [Thread-20923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:06:54.545 [DEBUG] [Thread-20923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:06:54.545 [DEBUG] [Thread-20923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:06:54.564 [INFO] [Thread-20923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:06:54.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:06:54.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:06:55.366 [DEBUG] [Thread-20923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:06:55.366 [DEBUG] [Thread-20923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:06:55.417 [DEBUG] [Thread-20923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:06:55.417 [DEBUG] [Thread-20923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:06:55.427 [DEBUG] [Thread-20923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:06:55.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:06: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-26T00:06: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-26T00:06:55.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:06:55.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:06:55.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:06:55.469 [DEBUG] [Thread-20923] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:06:57.228 [DEBUG] [Thread-20925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:12.277 [DEBUG] [Thread-20926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:19.214 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:19.215 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:07:25.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:07:25.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-26T00:07:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 6, 57), 2.98, 82.06, 0.0, 13.25, 13.23, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:07:26.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:06:57
2025-12-26T00:07:26.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:07:26.510 [DEBUG] [Thread-20927] [transport.py] [_log()] starting thread (client mode): 0xb6b62800
2025-12-26T00:07:26.511 [DEBUG] [Thread-20927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:07:26.531 [DEBUG] [Thread-20927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:07:26.531 [INFO] [Thread-20927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:07:26.534 [DEBUG] [Thread-20927] [transport.py] [_log()] client lang: <none>
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] server lang: <none>
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] kex follows: False
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] Compression: none
2025-12-26T00:07:26.535 [DEBUG] [Thread-20927] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:07:26.551 [DEBUG] [Thread-20927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:07:26.551 [DEBUG] [Thread-20927] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:07:26.551 [DEBUG] [Thread-20927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:07:26.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:07:26.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:07:26.552 [DEBUG] [Thread-20927] [transport.py] [_log()] userauth is OK
2025-12-26T00:07:26.552 [DEBUG] [Thread-20927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:07:26.552 [DEBUG] [Thread-20927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:07:26.552 [DEBUG] [Thread-20927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:07:26.552 [DEBUG] [Thread-20927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:07:26.561 [INFO] [Thread-20927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:07:26.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:07:27.211 [DEBUG] [Thread-20927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:07:27.211 [DEBUG] [Thread-20927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:07:27.211 [DEBUG] [Thread-20927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:07:27.252 [DEBUG] [Thread-20927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:07:27.253 [DEBUG] [Thread-20927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:07:27.255 [DEBUG] [Thread-20927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:07:27.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:07:27.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:07:27.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:07:27.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:07:27.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:07:27.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:07:27.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.921590 -999.00  +13.50   9.64     83  +10.80 1 1 1 2 1     0    0 1.63 -43.18 ZNESW 9.4 9.6 170.6 13.8 14.3 -22.9 14.1 -22.5 14.0 -21.0 14.2 -22.0
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.921590
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:07:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:06:57', tmtdew=2.98, humidity=82.06, cloud=0.0, wind=13.25, temperature=13.23, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:06:57', seeing=1.59, atlas_timestamp='2025-12-25T22:07:05.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:05:00')
2025-12-26T00:07:27.273 [DEBUG] [Thread-20927] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:07:27.308 [DEBUG] [Thread-20930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:27.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-26T00:07:27.362 [DEBUG] [Thread-20931] [transport.py] [_log()] starting thread (client mode): 0xb6b29720
2025-12-26T00:07:27.362 [DEBUG] [Thread-20931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:07:27.377 [DEBUG] [Thread-20931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:07:27.377 [INFO] [Thread-20931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] client lang: <none>
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] server lang: <none>
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] kex follows: False
2025-12-26T00:07:27.384 [DEBUG] [Thread-20931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:07:27.385 [DEBUG] [Thread-20931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:07:27.385 [DEBUG] [Thread-20931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:07:27.385 [DEBUG] [Thread-20931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:07:27.385 [DEBUG] [Thread-20931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:07:27.385 [DEBUG] [Thread-20931] [transport.py] [_log()] Compression: none
2025-12-26T00:07:27.385 [DEBUG] [Thread-20931] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:07:27.444 [DEBUG] [Thread-20931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:07:27.444 [DEBUG] [Thread-20931] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:07:27.445 [DEBUG] [Thread-20931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:07:27.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:07:27.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:07:27.500 [DEBUG] [Thread-20931] [transport.py] [_log()] userauth is OK
2025-12-26T00:07:27.500 [DEBUG] [Thread-20931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:07:27.500 [DEBUG] [Thread-20931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:07:27.500 [DEBUG] [Thread-20931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:07:27.500 [DEBUG] [Thread-20931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:07:27.519 [INFO] [Thread-20931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:07:27.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-26T00:07:27.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:07:28.391 [DEBUG] [Thread-20931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:07:28.391 [DEBUG] [Thread-20931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:07:28.439 [DEBUG] [Thread-20931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:07:28.440 [DEBUG] [Thread-20931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:07:28.449 [DEBUG] [Thread-20931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:07:28.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:07:28.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-26T00:07:28.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-26T00:07:28.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:07:28.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:07:28.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:07:28.486 [DEBUG] [Thread-20931] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:07:37.467 [DEBUG] [Thread-20933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:42.351 [DEBUG] [Thread-20934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:56.416 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:57.387 [DEBUG] [Thread-20935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:07:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:07:58.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:07:58.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-26T00:07:59.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 7, 29), 2.98, 82.08, 0.0, 12.99, 13.26, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:07:59.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:07:29
2025-12-26T00:07:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:07:59.480 [DEBUG] [Thread-20936] [transport.py] [_log()] starting thread (client mode): 0xb4104580
2025-12-26T00:07:59.480 [DEBUG] [Thread-20936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:07:59.501 [DEBUG] [Thread-20936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:07:59.501 [INFO] [Thread-20936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] client lang: <none>
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] server lang: <none>
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] kex follows: False
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] Compression: none
2025-12-26T00:07:59.504 [DEBUG] [Thread-20936] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:07:59.521 [DEBUG] [Thread-20936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:07:59.522 [DEBUG] [Thread-20936] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:07:59.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:07:59.523 [DEBUG] [Thread-20936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:07:59.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:07:59.525 [DEBUG] [Thread-20936] [transport.py] [_log()] userauth is OK
2025-12-26T00:07:59.525 [DEBUG] [Thread-20936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:07:59.525 [DEBUG] [Thread-20936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:07:59.525 [DEBUG] [Thread-20936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:07:59.526 [DEBUG] [Thread-20936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:07:59.545 [INFO] [Thread-20936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:07:59.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:08:00.153 [DEBUG] [Thread-20936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:08:00.153 [DEBUG] [Thread-20936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:08:00.154 [DEBUG] [Thread-20936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:08:00.194 [DEBUG] [Thread-20936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:08:00.194 [DEBUG] [Thread-20936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:08:00.198 [DEBUG] [Thread-20936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:08:00.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:08:00.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:08:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:08:00.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:08:00.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:08:00.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:08:00.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:08:00.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:08:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:08:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.921937 -999.00  +13.50   7.97     84  +10.80 1 1 1 2 1     0    0 1.59 -43.46 ZNESW 7.9 8.0 181.8 13.8 14.3 -22.9 14.1 -22.4 13.9 -20.9 14.2 -22.0
2025-12-26T00:08:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:08:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:08:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.921937
2025-12-26T00:08:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:08:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:08:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:08:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:08:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:08:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:07:29', tmtdew=2.98, humidity=82.08, cloud=0.0, wind=12.99, temperature=13.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:07:29', seeing=1.59, atlas_timestamp='2025-12-25T22:07:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:05:00')
2025-12-26T00:08:00.224 [DEBUG] [Thread-20936] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:08:00.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-26T00:08:00.317 [DEBUG] [Thread-20939] [transport.py] [_log()] starting thread (client mode): 0xb4104940
2025-12-26T00:08:00.317 [DEBUG] [Thread-20939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:08:00.331 [DEBUG] [Thread-20939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:08:00.332 [INFO] [Thread-20939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] client lang: <none>
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] server lang: <none>
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] kex follows: False
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] Compression: none
2025-12-26T00:08:00.339 [DEBUG] [Thread-20939] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:08:00.394 [DEBUG] [Thread-20939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:08:00.394 [DEBUG] [Thread-20939] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:08:00.394 [DEBUG] [Thread-20939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:08:00.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:08:00.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:08:00.451 [DEBUG] [Thread-20939] [transport.py] [_log()] userauth is OK
2025-12-26T00:08:00.451 [DEBUG] [Thread-20939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:08:00.451 [DEBUG] [Thread-20939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:08:00.451 [DEBUG] [Thread-20939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:08:00.451 [DEBUG] [Thread-20939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:08:00.469 [INFO] [Thread-20939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:08:00.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-26T00:08:00.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:08:01.312 [DEBUG] [Thread-20939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:08:01.312 [DEBUG] [Thread-20939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:08:01.359 [DEBUG] [Thread-20939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:08:01.359 [DEBUG] [Thread-20939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:08:01.367 [DEBUG] [Thread-20939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:08:01.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:08:01.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-26T00:08:01.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-26T00:08:01.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:08:01.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:08:01.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:08:01.399 [DEBUG] [Thread-20939] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:08:04.861 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:09.068 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:12.421 [DEBUG] [Thread-20941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:19.419 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:19.420 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:27.473 [DEBUG] [Thread-20942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:31.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:08:31.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:08:31.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-26T00:08:32.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 8, 1), 2.97, 82.11, 0.0, 13.34, 13.27, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:08:32.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:08:01
2025-12-26T00:08:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:08:32.380 [DEBUG] [Thread-20943] [transport.py] [_log()] starting thread (client mode): 0xb95d6e60
2025-12-26T00:08:32.380 [DEBUG] [Thread-20943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:08:32.401 [DEBUG] [Thread-20943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:08:32.402 [INFO] [Thread-20943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:08:32.405 [DEBUG] [Thread-20943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:08:32.405 [DEBUG] [Thread-20943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:08:32.405 [DEBUG] [Thread-20943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:08:32.405 [DEBUG] [Thread-20943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] client lang: <none>
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] server lang: <none>
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] kex follows: False
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:08:32.406 [DEBUG] [Thread-20943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:08:32.407 [DEBUG] [Thread-20943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:08:32.407 [DEBUG] [Thread-20943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:08:32.407 [DEBUG] [Thread-20943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:08:32.407 [DEBUG] [Thread-20943] [transport.py] [_log()] Compression: none
2025-12-26T00:08:32.407 [DEBUG] [Thread-20943] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:08:32.427 [DEBUG] [Thread-20943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:08:32.428 [DEBUG] [Thread-20943] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:08:32.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:08:32.429 [DEBUG] [Thread-20943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:08:32.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:08:32.431 [DEBUG] [Thread-20943] [transport.py] [_log()] userauth is OK
2025-12-26T00:08:32.432 [DEBUG] [Thread-20943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:08:32.432 [DEBUG] [Thread-20943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:08:32.432 [DEBUG] [Thread-20943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:08:32.432 [DEBUG] [Thread-20943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:08:32.467 [INFO] [Thread-20943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:08:32.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:08:33.112 [DEBUG] [Thread-20943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:08:33.112 [DEBUG] [Thread-20943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:08:33.113 [DEBUG] [Thread-20943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:08:33.153 [DEBUG] [Thread-20943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:08:33.153 [DEBUG] [Thread-20943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:08:33.157 [DEBUG] [Thread-20943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:08:33.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:08:33.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:08:33.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:08:33.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:08:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:08:33.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:08:33.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:08:33.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:08:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:08:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.922284 -999.00  +13.50   8.40     84  +10.80 1 1 1 2 1     0    0 1.72 -40.18 ZNESW 9.1 8.4 175.6 10.6 14.3 -22.8 14.1 -22.7 13.9 -20.8 14.2 -22.1
2025-12-26T00:08:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:08:33.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:08:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.922284
2025-12-26T00:08:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:08:33.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:08:33.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:08:33.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:08:33.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:08:33.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:08:01', tmtdew=2.97, humidity=82.11, cloud=0.0, wind=13.34, temperature=13.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:08:01', seeing=1.44, atlas_timestamp='2025-12-25T22:08:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:05:00')
2025-12-26T00:08:33.183 [DEBUG] [Thread-20943] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:08:33.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-26T00:08:33.277 [DEBUG] [Thread-20946] [transport.py] [_log()] starting thread (client mode): 0xb6b628c0
2025-12-26T00:08:33.277 [DEBUG] [Thread-20946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:08:33.292 [DEBUG] [Thread-20946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:08:33.292 [INFO] [Thread-20946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:08:33.300 [DEBUG] [Thread-20946] [transport.py] [_log()] client lang: <none>
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] server lang: <none>
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] kex follows: False
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] Compression: none
2025-12-26T00:08:33.301 [DEBUG] [Thread-20946] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:08:33.359 [DEBUG] [Thread-20946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:08:33.359 [DEBUG] [Thread-20946] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:08:33.360 [DEBUG] [Thread-20946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:08:33.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:08:33.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:08:33.415 [DEBUG] [Thread-20946] [transport.py] [_log()] userauth is OK
2025-12-26T00:08:33.416 [DEBUG] [Thread-20946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:08:33.416 [DEBUG] [Thread-20946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:08:33.416 [DEBUG] [Thread-20946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:08:33.416 [DEBUG] [Thread-20946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:08:33.435 [INFO] [Thread-20946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:08:33.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:08:33.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:08:34.253 [DEBUG] [Thread-20946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:08:34.253 [DEBUG] [Thread-20946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:08:34.301 [DEBUG] [Thread-20946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:08:34.302 [DEBUG] [Thread-20946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:08:34.310 [DEBUG] [Thread-20946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:08:34.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:08:34.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:08:34.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:08:34.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:08:34.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:08:34.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:08:34.341 [DEBUG] [Thread-20946] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:08:37.529 [DEBUG] [Thread-20948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:42.504 [DEBUG] [Thread-20949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:08:57.554 [DEBUG] [Thread-20950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:04.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:09:04.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:09:04.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:09:05.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 8, 33), 3.13, 81.32, 0.0, 16.06, 13.55, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:09:05.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:08:33
2025-12-26T00:09:05.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:09:05.349 [DEBUG] [Thread-20951] [transport.py] [_log()] starting thread (client mode): 0xb6b63370
2025-12-26T00:09:05.349 [DEBUG] [Thread-20951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:09:05.370 [DEBUG] [Thread-20951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:09:05.370 [INFO] [Thread-20951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:09:05.373 [DEBUG] [Thread-20951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:09:05.373 [DEBUG] [Thread-20951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:09:05.373 [DEBUG] [Thread-20951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] client lang: <none>
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] server lang: <none>
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] kex follows: False
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] Compression: none
2025-12-26T00:09:05.374 [DEBUG] [Thread-20951] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:09:05.390 [DEBUG] [Thread-20951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:09:05.390 [DEBUG] [Thread-20951] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:09:05.391 [DEBUG] [Thread-20951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:09:05.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:09:05.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:09:05.393 [DEBUG] [Thread-20951] [transport.py] [_log()] userauth is OK
2025-12-26T00:09:05.393 [DEBUG] [Thread-20951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:09:05.393 [DEBUG] [Thread-20951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:09:05.393 [DEBUG] [Thread-20951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:09:05.393 [DEBUG] [Thread-20951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:09:05.417 [INFO] [Thread-20951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:09:05.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:09:06.042 [DEBUG] [Thread-20951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:09:06.042 [DEBUG] [Thread-20951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:09:06.042 [DEBUG] [Thread-20951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:09:06.083 [DEBUG] [Thread-20951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:09:06.084 [DEBUG] [Thread-20951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:09:06.086 [DEBUG] [Thread-20951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:09:06.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:09:06.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:09:06.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:09:06.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:09:06.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:09:06.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:09:06.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:09:06.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:09:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:09:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.922631 -999.00  +13.40  10.02     84  +10.80 1 1 1 2 1     0    0 1.71 -38.26 ZNESW 8.1 10.0 171.2 11.7 14.3 -22.8 14.1 -22.2 13.9 -20.8 14.2 -22.1
2025-12-26T00:09:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:09:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:09:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.922631
2025-12-26T00:09:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:09:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:09:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:09:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:09:06.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:09:06.109 [DEBUG] [Thread-20951] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:09:06.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:08:33', tmtdew=3.13, humidity=81.32, cloud=0.0, wind=16.06, temperature=13.55, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:08:34', seeing=1.73, atlas_timestamp='2025-12-25T22:08:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:05:00')
2025-12-26T00:09:06.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-26T00:09:06.203 [DEBUG] [Thread-20954] [transport.py] [_log()] starting thread (client mode): 0xb6b61ea0
2025-12-26T00:09:06.203 [DEBUG] [Thread-20954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:09:06.221 [DEBUG] [Thread-20954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:09:06.222 [INFO] [Thread-20954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] client lang: <none>
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] server lang: <none>
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] kex follows: False
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:09:06.232 [DEBUG] [Thread-20954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:09:06.233 [DEBUG] [Thread-20954] [transport.py] [_log()] Compression: none
2025-12-26T00:09:06.233 [DEBUG] [Thread-20954] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:09:06.289 [DEBUG] [Thread-20954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:09:06.290 [DEBUG] [Thread-20954] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:09:06.290 [DEBUG] [Thread-20954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:09:06.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:09:06.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:09:06.346 [DEBUG] [Thread-20954] [transport.py] [_log()] userauth is OK
2025-12-26T00:09:06.346 [DEBUG] [Thread-20954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:09:06.346 [DEBUG] [Thread-20954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:09:06.346 [DEBUG] [Thread-20954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:09:06.346 [DEBUG] [Thread-20954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:09:06.364 [INFO] [Thread-20954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:09:06.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-26T00:09:06.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:09:07.201 [DEBUG] [Thread-20954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:09:07.201 [DEBUG] [Thread-20954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:09:07.249 [DEBUG] [Thread-20954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:09:07.250 [DEBUG] [Thread-20954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:09:07.258 [DEBUG] [Thread-20954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:09:07.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:09:07.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:09:07.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-26T00:09:07.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:09:07.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:09:07.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:09:07.292 [DEBUG] [Thread-20954] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:09:12.588 [DEBUG] [Thread-20956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:19.615 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:19.616 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:27.643 [DEBUG] [Thread-20957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:09:37.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:09:37.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-26T00:09:37.582 [DEBUG] [Thread-20958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:37.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 9, 5), 3.01, 82.19, 0.0, 11.66, 13.24, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:09:37.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:09:05
2025-12-26T00:09:38.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:09:38.284 [DEBUG] [Thread-20959] [transport.py] [_log()] starting thread (client mode): 0xb6b29720
2025-12-26T00:09:38.284 [DEBUG] [Thread-20959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:09:38.302 [DEBUG] [Thread-20959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:09:38.302 [INFO] [Thread-20959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] client lang: <none>
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] server lang: <none>
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] kex follows: False
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] Compression: none
2025-12-26T00:09:38.304 [DEBUG] [Thread-20959] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:09:38.320 [DEBUG] [Thread-20959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:09:38.321 [DEBUG] [Thread-20959] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:09:38.321 [DEBUG] [Thread-20959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:09:38.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:09:38.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:09:38.322 [DEBUG] [Thread-20959] [transport.py] [_log()] userauth is OK
2025-12-26T00:09:38.322 [DEBUG] [Thread-20959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:09:38.322 [DEBUG] [Thread-20959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:09:38.322 [DEBUG] [Thread-20959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:09:38.322 [DEBUG] [Thread-20959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:09:38.335 [INFO] [Thread-20959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:09:38.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:09:38.894 [DEBUG] [Thread-20959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:09:38.894 [DEBUG] [Thread-20959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:09:38.894 [DEBUG] [Thread-20959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:09:38.936 [DEBUG] [Thread-20959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:09:38.936 [DEBUG] [Thread-20959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:09:38.938 [DEBUG] [Thread-20959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:09:38.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:09:38.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:09:38.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:09:38.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:09:38.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:09:38.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:09:38.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.922979 -999.00  +13.40   6.47     84  +10.80 1 1 1 2 1     0    0 1.77 -35.92 ZNESW 7.7 6.5 175.6 10.0 14.2 -22.8 14.1 -22.2 13.9 -20.9 14.2 -22.1
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.922979
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:09:38.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:09:05', tmtdew=3.01, humidity=82.19, cloud=0.0, wind=11.66, temperature=13.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:09:06', seeing=1.51, atlas_timestamp='2025-12-25T22:09:05.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:05:00')
2025-12-26T00:09:38.956 [DEBUG] [Thread-20959] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:09:39.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-26T00:09:39.041 [DEBUG] [Thread-20962] [transport.py] [_log()] starting thread (client mode): 0xb9578ac0
2025-12-26T00:09:39.042 [DEBUG] [Thread-20962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:09:39.060 [DEBUG] [Thread-20962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:09:39.060 [INFO] [Thread-20962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:09:39.070 [DEBUG] [Thread-20962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:09:39.070 [DEBUG] [Thread-20962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:09:39.070 [DEBUG] [Thread-20962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:09:39.070 [DEBUG] [Thread-20962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:39.070 [DEBUG] [Thread-20962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] client lang: <none>
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] server lang: <none>
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] kex follows: False
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] Compression: none
2025-12-26T00:09:39.071 [DEBUG] [Thread-20962] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:09:39.126 [DEBUG] [Thread-20962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:09:39.126 [DEBUG] [Thread-20962] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:09:39.126 [DEBUG] [Thread-20962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:09:39.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:09:39.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:09:39.182 [DEBUG] [Thread-20962] [transport.py] [_log()] userauth is OK
2025-12-26T00:09:39.182 [DEBUG] [Thread-20962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:09:39.182 [DEBUG] [Thread-20962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:09:39.182 [DEBUG] [Thread-20962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:09:39.182 [DEBUG] [Thread-20962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:09:39.197 [INFO] [Thread-20962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:09:39.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:09:39.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:09:40.068 [DEBUG] [Thread-20962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:09:40.068 [DEBUG] [Thread-20962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:09:40.115 [DEBUG] [Thread-20962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:09:40.116 [DEBUG] [Thread-20962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:09:40.126 [DEBUG] [Thread-20962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:09:40.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:09:40.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-26T00:09:40.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:09:40.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:09:40.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:09:40.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:09:40.161 [DEBUG] [Thread-20962] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:09:42.677 [DEBUG] [Thread-20964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:09:57.728 [DEBUG] [Thread-20965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:10.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:10:10.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:10: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-26T00:10:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 9, 37), 3.01, 82.19, 0.0, 13.85, 13.26, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:10:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:09:37
2025-12-26T00:10:11.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:10:11.217 [DEBUG] [Thread-20966] [transport.py] [_log()] starting thread (client mode): 0xb95d7220
2025-12-26T00:10:11.217 [DEBUG] [Thread-20966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:10:11.233 [DEBUG] [Thread-20966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:10:11.233 [INFO] [Thread-20966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:11.236 [DEBUG] [Thread-20966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] client lang: <none>
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] server lang: <none>
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] kex follows: False
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] Compression: none
2025-12-26T00:10:11.237 [DEBUG] [Thread-20966] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:10:11.256 [DEBUG] [Thread-20966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:10:11.256 [DEBUG] [Thread-20966] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:10:11.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:10:11.256 [DEBUG] [Thread-20966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:10:11.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:10:11.257 [DEBUG] [Thread-20966] [transport.py] [_log()] userauth is OK
2025-12-26T00:10:11.257 [DEBUG] [Thread-20966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:10:11.257 [DEBUG] [Thread-20966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:10:11.257 [DEBUG] [Thread-20966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:10:11.257 [DEBUG] [Thread-20966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:10:11.269 [INFO] [Thread-20966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:10:11.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:10:12.759 [DEBUG] [Thread-20968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:19.816 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:19.817 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:21.483 [DEBUG] [Thread-20966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:10:21.483 [DEBUG] [Thread-20966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:10:21.484 [DEBUG] [Thread-20966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:10:21.524 [DEBUG] [Thread-20966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:10:21.524 [DEBUG] [Thread-20966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:10:21.527 [DEBUG] [Thread-20966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:10:21.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:10:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:10:21.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:10:21.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:10:21.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:10:21.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:10:21.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:10:21.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:10:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:10:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.923673 -999.00  +13.40  11.21     84  +10.80 1 1 1 2 1     0    0 1.76 -34.47 ZNESW 9.1 11.2 179.6 12.9 14.2 -22.8 14.1 -22.7 13.9 -20.8 14.2 -22.0
2025-12-26T00:10:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:10:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:10:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.923673
2025-12-26T00:10:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:10:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:10:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:10:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:10:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:10:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:09:37', tmtdew=3.01, humidity=82.19, cloud=0.0, wind=13.85, temperature=13.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:09:38', seeing=1.47, atlas_timestamp='2025-12-25T22:10:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:05:00')
2025-12-26T00:10:21.553 [DEBUG] [Thread-20966] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:10:21.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-26T00:10:21.646 [DEBUG] [Thread-20970] [transport.py] [_log()] starting thread (client mode): 0xb95d7400
2025-12-26T00:10:21.646 [DEBUG] [Thread-20970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:10:21.660 [DEBUG] [Thread-20970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:10:21.660 [INFO] [Thread-20970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:10:21.668 [DEBUG] [Thread-20970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:10:21.668 [DEBUG] [Thread-20970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:10:21.669 [DEBUG] [Thread-20970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] client lang: <none>
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] server lang: <none>
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] kex follows: False
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] Compression: none
2025-12-26T00:10:21.670 [DEBUG] [Thread-20970] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:10:21.726 [DEBUG] [Thread-20970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:10:21.727 [DEBUG] [Thread-20970] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:10:21.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:10:21.728 [DEBUG] [Thread-20970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:10:21.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:10:21.782 [DEBUG] [Thread-20970] [transport.py] [_log()] userauth is OK
2025-12-26T00:10:21.783 [DEBUG] [Thread-20970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:10:21.783 [DEBUG] [Thread-20970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:10:21.783 [DEBUG] [Thread-20970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:10:21.783 [DEBUG] [Thread-20970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:10:21.808 [INFO] [Thread-20970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:10:21.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-26T00:10:21.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:10:22.631 [DEBUG] [Thread-20970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:10:22.632 [DEBUG] [Thread-20970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:10:22.680 [DEBUG] [Thread-20970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:10:22.680 [DEBUG] [Thread-20970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:10:22.689 [DEBUG] [Thread-20970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:10:22.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:10:22.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-26T00:10:22.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-26T00:10:22.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:10:22.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:10:22.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:10:22.726 [DEBUG] [Thread-20970] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:10:27.795 [DEBUG] [Thread-20972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:37.649 [DEBUG] [Thread-20973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:42.837 [DEBUG] [Thread-20974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:10:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:10:52.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:10:52.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-26T00:10:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 10, 41), 3.0, 81.74, 0.0, 13.71, 13.26, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:10:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:10:41
2025-12-26T00:10:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:10:53.724 [DEBUG] [Thread-20975] [transport.py] [_log()] starting thread (client mode): 0xb95d5090
2025-12-26T00:10:53.724 [DEBUG] [Thread-20975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:10:53.745 [DEBUG] [Thread-20975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:10:53.745 [INFO] [Thread-20975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:53.748 [DEBUG] [Thread-20975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] client lang: <none>
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] server lang: <none>
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] kex follows: False
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] Compression: none
2025-12-26T00:10:53.749 [DEBUG] [Thread-20975] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:10:53.766 [DEBUG] [Thread-20975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:10:53.766 [DEBUG] [Thread-20975] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:10:53.767 [DEBUG] [Thread-20975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:10:53.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:10:53.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:10:53.768 [DEBUG] [Thread-20975] [transport.py] [_log()] userauth is OK
2025-12-26T00:10:53.768 [DEBUG] [Thread-20975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:10:53.769 [DEBUG] [Thread-20975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:10:53.769 [DEBUG] [Thread-20975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:10:53.769 [DEBUG] [Thread-20975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:10:53.793 [INFO] [Thread-20975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:10:53.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:10:54.454 [DEBUG] [Thread-20975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:10:54.454 [DEBUG] [Thread-20975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:10:54.454 [DEBUG] [Thread-20975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:10:54.495 [DEBUG] [Thread-20975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:10:54.495 [DEBUG] [Thread-20975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:10:54.498 [DEBUG] [Thread-20975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:10:54.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:10:54.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:10:54.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:10:54.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:10:54.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:10:54.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:10:54.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:10:54.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:10:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:10:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.923673 -999.00  +13.40  11.21     84  +10.80 1 1 1 2 1     0    0 1.76 -34.47 ZNESW 9.1 11.2 179.6 12.9 14.2 -22.8 14.1 -22.7 13.9 -20.8 14.2 -22.0
2025-12-26T00:10:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:10:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:10:54.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.923673
2025-12-26T00:10:54.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:10:54.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:10:54.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:10:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:10:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:10:54.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:10:41', tmtdew=3.0, humidity=81.74, cloud=0.0, wind=13.71, temperature=13.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:10:42', seeing=1.49, atlas_timestamp='2025-12-25T22:10:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:08:00')
2025-12-26T00:10:54.526 [DEBUG] [Thread-20975] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:10:54.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-26T00:10:54.621 [DEBUG] [Thread-20978] [transport.py] [_log()] starting thread (client mode): 0xb95d76d0
2025-12-26T00:10:54.621 [DEBUG] [Thread-20978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:10:54.636 [DEBUG] [Thread-20978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:10:54.636 [INFO] [Thread-20978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:10:54.643 [DEBUG] [Thread-20978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:10:54.644 [DEBUG] [Thread-20978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] client lang: <none>
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] server lang: <none>
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] kex follows: False
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:10:54.645 [DEBUG] [Thread-20978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:10:54.646 [DEBUG] [Thread-20978] [transport.py] [_log()] Compression: none
2025-12-26T00:10:54.646 [DEBUG] [Thread-20978] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:10:54.702 [DEBUG] [Thread-20978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:10:54.702 [DEBUG] [Thread-20978] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:10:54.703 [DEBUG] [Thread-20978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:10:54.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:10:54.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:10:54.758 [DEBUG] [Thread-20978] [transport.py] [_log()] userauth is OK
2025-12-26T00:10:54.758 [DEBUG] [Thread-20978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:10:54.759 [DEBUG] [Thread-20978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:10:54.759 [DEBUG] [Thread-20978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:10:54.759 [DEBUG] [Thread-20978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:10:54.783 [INFO] [Thread-20978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:10:54.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:10:54.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:10:55.591 [DEBUG] [Thread-20978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:10:55.591 [DEBUG] [Thread-20978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:10:55.641 [DEBUG] [Thread-20978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:10:55.641 [DEBUG] [Thread-20978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:10:55.650 [DEBUG] [Thread-20978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:10:55.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:10:55.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:10:55.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:10:55.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:10:55.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:10:55.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:10:55.684 [DEBUG] [Thread-20978] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:10:57.869 [DEBUG] [Thread-20980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:12.932 [DEBUG] [Thread-20981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:20.018 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:20.018 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:11:25.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:11:25.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-26T00:11:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 11, 13), 3.0, 81.74, 0.0, 13.5, 13.26, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:11:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:11:13
2025-12-26T00:11:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:11:26.705 [DEBUG] [Thread-20982] [transport.py] [_log()] starting thread (client mode): 0xb95d4a60
2025-12-26T00:11:26.705 [DEBUG] [Thread-20982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:11:26.725 [DEBUG] [Thread-20982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:11:26.725 [INFO] [Thread-20982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:11:26.728 [DEBUG] [Thread-20982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:11:26.728 [DEBUG] [Thread-20982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:11:26.728 [DEBUG] [Thread-20982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:11:26.728 [DEBUG] [Thread-20982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:11:26.728 [DEBUG] [Thread-20982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] client lang: <none>
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] server lang: <none>
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] kex follows: False
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] Compression: none
2025-12-26T00:11:26.729 [DEBUG] [Thread-20982] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:11:26.747 [DEBUG] [Thread-20982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:11:26.747 [DEBUG] [Thread-20982] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:11:26.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:11:26.749 [DEBUG] [Thread-20982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:11:26.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:11:26.750 [DEBUG] [Thread-20982] [transport.py] [_log()] userauth is OK
2025-12-26T00:11:26.751 [DEBUG] [Thread-20982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:11:26.751 [DEBUG] [Thread-20982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:11:26.751 [DEBUG] [Thread-20982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:11:26.751 [DEBUG] [Thread-20982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:11:26.776 [INFO] [Thread-20982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:11:26.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:11:27.551 [DEBUG] [Thread-20982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:11:27.551 [DEBUG] [Thread-20982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:11:27.552 [DEBUG] [Thread-20982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:11:27.592 [DEBUG] [Thread-20982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:11:27.592 [DEBUG] [Thread-20982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:11:27.595 [DEBUG] [Thread-20982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:11:27.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:11:27.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:11:27.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:11:27.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:11:27.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:11:27.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:11:27.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:11:27.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:11:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:11:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.924020 -999.00  +13.40   7.88     84  +10.80 1 1 1 2 1     0    0 1.93 -29.75 ZNESW 10.2 7.9 182.5 10.6 14.2 -22.8 14.1 -22.5 13.9 -20.7 14.2 -21.9
2025-12-26T00:11:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:11:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:11:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.924020
2025-12-26T00:11:27.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:11:27.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:11:27.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:11:27.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:11:27.623 [DEBUG] [Thread-20982] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:11:27.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:11:27.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:11:13', tmtdew=3.0, humidity=81.74, cloud=0.0, wind=13.5, temperature=13.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:11:14', seeing=1.49, atlas_timestamp='2025-12-25T22:10:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:08:00')
2025-12-26T00:11:27.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-26T00:11:27.728 [DEBUG] [Thread-20985] [transport.py] [_log()] starting thread (client mode): 0xb9559930
2025-12-26T00:11:27.728 [DEBUG] [Thread-20985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:11:27.744 [DEBUG] [Thread-20985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:11:27.744 [INFO] [Thread-20985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:11:27.752 [DEBUG] [Thread-20985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] client lang: <none>
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] server lang: <none>
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] kex follows: False
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:11:27.753 [DEBUG] [Thread-20985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:11:27.754 [DEBUG] [Thread-20985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:11:27.754 [DEBUG] [Thread-20985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:11:27.754 [DEBUG] [Thread-20985] [transport.py] [_log()] Compression: none
2025-12-26T00:11:27.754 [DEBUG] [Thread-20985] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:11:27.811 [DEBUG] [Thread-20985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:11:27.812 [DEBUG] [Thread-20985] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:11:27.813 [DEBUG] [Thread-20985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:11:27.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:11:27.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:11:27.870 [DEBUG] [Thread-20985] [transport.py] [_log()] userauth is OK
2025-12-26T00:11:27.870 [DEBUG] [Thread-20985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:11:27.871 [DEBUG] [Thread-20985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:11:27.871 [DEBUG] [Thread-20985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:11:27.871 [DEBUG] [Thread-20985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:11:27.890 [INFO] [Thread-20985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:11:27.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-26T00:11:27.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:11:27.964 [DEBUG] [Thread-20987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:28.734 [DEBUG] [Thread-20985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:11:28.734 [DEBUG] [Thread-20985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:11:28.782 [DEBUG] [Thread-20985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:11:28.782 [DEBUG] [Thread-20985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:11:28.791 [DEBUG] [Thread-20985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:11:28.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:11:28.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:11:28.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:11:28.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:11:28.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:11:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:11:28.828 [DEBUG] [Thread-20985] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:11:37.709 [DEBUG] [Thread-20988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:43.030 [DEBUG] [Thread-20989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:58.061 [DEBUG] [Thread-20990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:11:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:11:58.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:11:58.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-26T00:11:59.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 11, 45), 3.01, 81.66, 0.0, 12.65, 13.26, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:11:59.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:11:45
2025-12-26T00:11:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:11:59.871 [DEBUG] [Thread-20991] [transport.py] [_log()] starting thread (client mode): 0xb95d4430
2025-12-26T00:11:59.872 [DEBUG] [Thread-20991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:11:59.893 [DEBUG] [Thread-20991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:11:59.893 [INFO] [Thread-20991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] client lang: <none>
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] server lang: <none>
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] kex follows: False
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] Compression: none
2025-12-26T00:11:59.896 [DEBUG] [Thread-20991] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:11:59.911 [DEBUG] [Thread-20991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:11:59.911 [DEBUG] [Thread-20991] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:11:59.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:11:59.911 [DEBUG] [Thread-20991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:11:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:11:59.912 [DEBUG] [Thread-20991] [transport.py] [_log()] userauth is OK
2025-12-26T00:11:59.912 [DEBUG] [Thread-20991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:11:59.912 [DEBUG] [Thread-20991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:11:59.912 [DEBUG] [Thread-20991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:11:59.912 [DEBUG] [Thread-20991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:11:59.922 [INFO] [Thread-20991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:11:59.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:12:00.572 [DEBUG] [Thread-20991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:12:00.572 [DEBUG] [Thread-20991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:12:00.572 [DEBUG] [Thread-20991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:12:00.614 [DEBUG] [Thread-20991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:12:00.614 [DEBUG] [Thread-20991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:12:00.616 [DEBUG] [Thread-20991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:12:00.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:12:00.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:12:00.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:12:00.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:12:00.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:12:00.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:12:00.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.924368 -999.00  +13.40   6.43     84  +10.80 1 1 1 2 1     0    0 1.93 -29.10 ZNESW 5.5 6.4 183.0 11.2 14.2 -22.8 14.1 -22.4 13.9 -20.7 14.2 -22.0
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.924368
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:12:00.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:11:45', tmtdew=3.01, humidity=81.66, cloud=0.0, wind=12.65, temperature=13.26, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:11:46', seeing=1.53, atlas_timestamp='2025-12-25T22:11:05.395', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:08:00')
2025-12-26T00:12:00.636 [DEBUG] [Thread-20991] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:12:00.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-26T00:12:00.721 [DEBUG] [Thread-20994] [transport.py] [_log()] starting thread (client mode): 0xb95d6b90
2025-12-26T00:12:00.721 [DEBUG] [Thread-20994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:12:00.736 [DEBUG] [Thread-20994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:12:00.736 [INFO] [Thread-20994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:12:00.743 [DEBUG] [Thread-20994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] client lang: <none>
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] server lang: <none>
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] kex follows: False
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] Compression: none
2025-12-26T00:12:00.744 [DEBUG] [Thread-20994] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:12:00.800 [DEBUG] [Thread-20994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:12:00.800 [DEBUG] [Thread-20994] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:12:00.800 [DEBUG] [Thread-20994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:12:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:12:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:12:00.857 [DEBUG] [Thread-20994] [transport.py] [_log()] userauth is OK
2025-12-26T00:12:00.857 [DEBUG] [Thread-20994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:12:00.857 [DEBUG] [Thread-20994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:12:00.857 [DEBUG] [Thread-20994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:12:00.857 [DEBUG] [Thread-20994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:12:00.872 [INFO] [Thread-20994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:12:00.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:12:00.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:12:01.706 [DEBUG] [Thread-20994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:12:01.706 [DEBUG] [Thread-20994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:12:01.754 [DEBUG] [Thread-20994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:12:01.754 [DEBUG] [Thread-20994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:12:01.764 [DEBUG] [Thread-20994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:12:01.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:12:01.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:12:01.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-26T00:12:01.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:12:01.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:12:01.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:12:01.800 [DEBUG] [Thread-20994] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:12:13.092 [DEBUG] [Thread-20996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:12:20.219 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:12:20.219 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:12:28.143 [DEBUG] [Thread-20997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:12:31.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:12:31.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:12:31.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-26T00:12:32.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 12, 17), 3.01, 81.66, 0.0, 12.62, 13.28, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:12:32.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:12:17
2025-12-26T00:12:32.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:12:32.770 [DEBUG] [Thread-20998] [transport.py] [_log()] starting thread (client mode): 0xb95d5060
2025-12-26T00:12:32.770 [DEBUG] [Thread-20998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:12:32.789 [DEBUG] [Thread-20998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:12:32.789 [INFO] [Thread-20998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:12:32.792 [DEBUG] [Thread-20998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:12:32.792 [DEBUG] [Thread-20998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] client lang: <none>
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] server lang: <none>
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] kex follows: False
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:12:32.793 [DEBUG] [Thread-20998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:12:32.794 [DEBUG] [Thread-20998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:12:32.794 [DEBUG] [Thread-20998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:12:32.794 [DEBUG] [Thread-20998] [transport.py] [_log()] Compression: none
2025-12-26T00:12:32.794 [DEBUG] [Thread-20998] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:12:32.811 [DEBUG] [Thread-20998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:12:32.812 [DEBUG] [Thread-20998] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:12:32.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:12:32.814 [DEBUG] [Thread-20998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:12:32.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:12:32.817 [DEBUG] [Thread-20998] [transport.py] [_log()] userauth is OK
2025-12-26T00:12:32.817 [DEBUG] [Thread-20998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:12:32.817 [DEBUG] [Thread-20998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:12:32.818 [DEBUG] [Thread-20998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:12:32.818 [DEBUG] [Thread-20998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:12:32.842 [INFO] [Thread-20998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:12:32.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:12:33.621 [DEBUG] [Thread-20998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:12:33.621 [DEBUG] [Thread-20998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:12:33.621 [DEBUG] [Thread-20998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:12:33.662 [DEBUG] [Thread-20998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:12:33.662 [DEBUG] [Thread-20998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:12:33.664 [DEBUG] [Thread-20998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:12:33.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:12:33.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:12:33.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:12:33.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:12:33.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:12:33.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:12:33.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:12:33.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:12:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:12:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.924715 -999.00  +13.40   7.72     83  +10.70 1 1 1 2 1     0    0 1.88 -28.46 ZNESW 8.9 7.7 187.0 10.8 14.2 -22.7 14.1 -22.5 13.9 -20.8 14.2 -21.9
2025-12-26T00:12:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:12:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:12:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.924715
2025-12-26T00:12:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:12:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:12:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:12:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:12:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:12:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:12:17', tmtdew=3.01, humidity=81.66, cloud=0.0, wind=12.62, temperature=13.28, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:12:18', seeing=1.61, atlas_timestamp='2025-12-25T22:11:35.376', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:08:00')
2025-12-26T00:12:33.690 [DEBUG] [Thread-20998] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:12:33.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:12:33.782 [DEBUG] [Thread-21001] [transport.py] [_log()] starting thread (client mode): 0xb95d70d0
2025-12-26T00:12:33.782 [DEBUG] [Thread-21001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:12:33.796 [DEBUG] [Thread-21001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:12:33.796 [INFO] [Thread-21001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] client lang: <none>
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] server lang: <none>
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] kex follows: False
2025-12-26T00:12:33.804 [DEBUG] [Thread-21001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:12:33.805 [DEBUG] [Thread-21001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:12:33.805 [DEBUG] [Thread-21001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:12:33.805 [DEBUG] [Thread-21001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:12:33.805 [DEBUG] [Thread-21001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:12:33.805 [DEBUG] [Thread-21001] [transport.py] [_log()] Compression: none
2025-12-26T00:12:33.805 [DEBUG] [Thread-21001] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:12:33.860 [DEBUG] [Thread-21001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:12:33.861 [DEBUG] [Thread-21001] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:12:33.861 [DEBUG] [Thread-21001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:12:33.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:12:33.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:12:33.917 [DEBUG] [Thread-21001] [transport.py] [_log()] userauth is OK
2025-12-26T00:12:33.917 [DEBUG] [Thread-21001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:12:33.917 [DEBUG] [Thread-21001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:12:33.917 [DEBUG] [Thread-21001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:12:33.918 [DEBUG] [Thread-21001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:12:33.940 [INFO] [Thread-21001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:12:33.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-26T00:12:33.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:12:34.750 [DEBUG] [Thread-21001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:12:34.750 [DEBUG] [Thread-21001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:12:34.797 [DEBUG] [Thread-21001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:12:34.797 [DEBUG] [Thread-21001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:12:34.805 [DEBUG] [Thread-21001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:12:34.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:12:34.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-26T00:12:34.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-26T00:12:34.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:12:34.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:12:34.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:12:34.838 [DEBUG] [Thread-21001] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:12:37.762 [DEBUG] [Thread-21003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:12:43.175 [DEBUG] [Thread-21004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:12:58.225 [DEBUG] [Thread-21005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:13:04.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:13:04.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-26T00:13:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 12, 49), 3.08, 81.56, 0.0, 13.71, 13.33, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:13:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:12:49
2025-12-26T00:13:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:13:05.846 [DEBUG] [Thread-21006] [transport.py] [_log()] starting thread (client mode): 0xb955a6e0
2025-12-26T00:13:05.846 [DEBUG] [Thread-21006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:13:05.867 [DEBUG] [Thread-21006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:13:05.867 [INFO] [Thread-21006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:13:05.871 [DEBUG] [Thread-21006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:13:05.871 [DEBUG] [Thread-21006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:13:05.871 [DEBUG] [Thread-21006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:13:05.871 [DEBUG] [Thread-21006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] client lang: <none>
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] server lang: <none>
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] kex follows: False
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:13:05.872 [DEBUG] [Thread-21006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:13:05.873 [DEBUG] [Thread-21006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:13:05.873 [DEBUG] [Thread-21006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:13:05.873 [DEBUG] [Thread-21006] [transport.py] [_log()] Compression: none
2025-12-26T00:13:05.873 [DEBUG] [Thread-21006] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:13:05.893 [DEBUG] [Thread-21006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:13:05.894 [DEBUG] [Thread-21006] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:13:05.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:13:05.895 [DEBUG] [Thread-21006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:13:05.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:13:05.897 [DEBUG] [Thread-21006] [transport.py] [_log()] userauth is OK
2025-12-26T00:13:05.897 [DEBUG] [Thread-21006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:13:05.897 [DEBUG] [Thread-21006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:13:05.897 [DEBUG] [Thread-21006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:13:05.897 [DEBUG] [Thread-21006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:13:05.918 [INFO] [Thread-21006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:13:05.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:13:06.544 [DEBUG] [Thread-21006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:13:06.544 [DEBUG] [Thread-21006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:13:06.544 [DEBUG] [Thread-21006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:13:06.585 [DEBUG] [Thread-21006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:13:06.585 [DEBUG] [Thread-21006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:13:06.589 [DEBUG] [Thread-21006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:13:06.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:13:06.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:13:06.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:13:06.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:13:06.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:13:06.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:13:06.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:13:06.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:13:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:13:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.925409 -999.00  +13.50   7.58     83  +10.70 1 1 1 2 1     0    0 1.96 -26.14 ZNESW 9.5 7.6 174.4 13.6 14.2 -22.7 14.1 -22.5 13.9 -20.8 14.2 -22.0
2025-12-26T00:13:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:13:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:13:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.925409
2025-12-26T00:13:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:13:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:13:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:13:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:13:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:13:06.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:12:49', tmtdew=3.08, humidity=81.56, cloud=0.0, wind=13.71, temperature=13.33, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:12:50', seeing=1.72, atlas_timestamp='2025-12-25T22:12:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.16574999999999918, 0.13824999999999932, 0.322750000000001, 0.10249999999999915, 0.08450000000000024, 0.16125000000000078, 0.21199999999999974, 0.34325000000000117, 0.20550000000000068, 0.06500000000000128, 0.17825000000000024, 0.15549999999999997, 0.16300000000000026, 0.19874999999999865, 0.2259999999999991, 0.2419999999999991, 0.1592500000000001, 0.17149999999999999, 0.13099999999999845, 0.18024999999999913, 0.22799999999999798, 0.2807499999999976, 0.27475000000000094, 0.23274999999999935, 0.16799999999999926, 0.25849999999999973, 0.2157499999999999, 0.2240000000000002, 0.2890000000000006, 0.2560000000000011, 0.2530000000000019, 0.3200000000000012, 0.2647499999999994], zp_timestamp='2025-12-25T22:08:00')
2025-12-26T00:13:06.616 [DEBUG] [Thread-21006] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:13:06.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:13:06.711 [DEBUG] [Thread-21009] [transport.py] [_log()] starting thread (client mode): 0xb955a890
2025-12-26T00:13:06.711 [DEBUG] [Thread-21009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:13:06.726 [DEBUG] [Thread-21009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:13:06.726 [INFO] [Thread-21009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] client lang: <none>
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] server lang: <none>
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] kex follows: False
2025-12-26T00:13:06.734 [DEBUG] [Thread-21009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:13:06.735 [DEBUG] [Thread-21009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:13:06.735 [DEBUG] [Thread-21009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:13:06.735 [DEBUG] [Thread-21009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:13:06.735 [DEBUG] [Thread-21009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:13:06.735 [DEBUG] [Thread-21009] [transport.py] [_log()] Compression: none
2025-12-26T00:13:06.735 [DEBUG] [Thread-21009] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:13:06.793 [DEBUG] [Thread-21009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:13:06.794 [DEBUG] [Thread-21009] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:13:06.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:13:06.795 [DEBUG] [Thread-21009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:13:06.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:13:06.853 [DEBUG] [Thread-21009] [transport.py] [_log()] userauth is OK
2025-12-26T00:13:06.853 [DEBUG] [Thread-21009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:13:06.853 [DEBUG] [Thread-21009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:13:06.853 [DEBUG] [Thread-21009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:13:06.853 [DEBUG] [Thread-21009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:13:06.873 [INFO] [Thread-21009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:13:06.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-26T00:13:06.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:13:07.711 [DEBUG] [Thread-21009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:13:07.711 [DEBUG] [Thread-21009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:13:07.759 [DEBUG] [Thread-21009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:13:07.759 [DEBUG] [Thread-21009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:13:07.769 [DEBUG] [Thread-21009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:13:07.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:13:07.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:13:07.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-26T00:13:07.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:13:07.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:13:07.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:13:07.806 [DEBUG] [Thread-21009] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:13:13.262 [DEBUG] [Thread-21011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:20.420 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:20.421 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:28.308 [DEBUG] [Thread-21012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:37.818 [DEBUG] [Thread-21013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:13:37.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:13:37.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-26T00:13:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 13, 21), 3.09, 81.51, 0.0, 13.38, 13.28, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:13:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:13:21
2025-12-26T00:13:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:13:38.775 [DEBUG] [Thread-21014] [transport.py] [_log()] starting thread (client mode): 0xb95d4640
2025-12-26T00:13:38.775 [DEBUG] [Thread-21014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:13:38.795 [DEBUG] [Thread-21014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:13:38.795 [INFO] [Thread-21014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:13:38.798 [DEBUG] [Thread-21014] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:13:38.798 [DEBUG] [Thread-21014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:13:38.798 [DEBUG] [Thread-21014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] client lang: <none>
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] server lang: <none>
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] kex follows: False
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] Compression: none
2025-12-26T00:13:38.799 [DEBUG] [Thread-21014] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:13:38.817 [DEBUG] [Thread-21014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:13:38.817 [DEBUG] [Thread-21014] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:13:38.818 [DEBUG] [Thread-21014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:13:38.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:13:38.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:13:38.820 [DEBUG] [Thread-21014] [transport.py] [_log()] userauth is OK
2025-12-26T00:13:38.820 [DEBUG] [Thread-21014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:13:38.820 [DEBUG] [Thread-21014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:13:38.820 [DEBUG] [Thread-21014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:13:38.820 [DEBUG] [Thread-21014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:13:38.844 [INFO] [Thread-21014] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:13:38.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:13:39.635 [DEBUG] [Thread-21014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:13:39.635 [DEBUG] [Thread-21014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:13:39.636 [DEBUG] [Thread-21014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:13:39.676 [DEBUG] [Thread-21014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:13:39.676 [DEBUG] [Thread-21014] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:13:39.679 [DEBUG] [Thread-21014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:13:39.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:13:39.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:13:39.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:13:39.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:13:39.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:13:39.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:13:39.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:13:39.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:13:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:13:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.925756 -999.00  +13.50   7.24     83  +10.70 1 1 1 2 1     0    0 2.07 -22.85 ZNESW 10.0 7.2 185.6 13.0 14.2 -22.8 14.1 -22.3 13.9 -20.8 14.2 -22.0
2025-12-26T00:13:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:13:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:13:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.925756
2025-12-26T00:13:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:13:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:13:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:13:39.706 [DEBUG] [Thread-21014] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:13:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:13:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:13:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:13:21', tmtdew=3.09, humidity=81.51, cloud=0.0, wind=13.38, temperature=13.28, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:13:22', seeing=1.47, atlas_timestamp='2025-12-25T22:13:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.10474999999999923, 0.2967500000000012, 0.1164999999999985, 0.09750000000000014, 0.2012500000000017, 0.20999999999999908, 0.35824999999999996, 0.21950000000000003, 0.07349999999999923, 0.17774999999999963, 0.14000000000000057, 0.129999999999999, 0.17774999999999963, 0.2370000000000001, 0.2729999999999997, 0.18125000000000036, 0.15249999999999986, 0.09949999999999903, 0.20924999999999905, 0.20749999999999957, 0.28275000000000006, 0.2772500000000022, 0.22574999999999967, 0.19599999999999973, 0.22000000000000064, 0.20175000000000054, 0.2345000000000006, 0.3019999999999996, 0.2950000000000008, 0.2425000000000015, 0.3030000000000008, 0.33674999999999944], zp_timestamp='2025-12-25T22:11:00')
2025-12-26T00:13:39.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-26T00:13:39.802 [DEBUG] [Thread-21017] [transport.py] [_log()] starting thread (client mode): 0xb95d7d00
2025-12-26T00:13:39.802 [DEBUG] [Thread-21017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:13:39.822 [DEBUG] [Thread-21017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:13:39.822 [INFO] [Thread-21017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:13:39.829 [DEBUG] [Thread-21017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] client lang: <none>
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] server lang: <none>
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] kex follows: False
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:13:39.830 [DEBUG] [Thread-21017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:13:39.831 [DEBUG] [Thread-21017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:13:39.831 [DEBUG] [Thread-21017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:13:39.831 [DEBUG] [Thread-21017] [transport.py] [_log()] Compression: none
2025-12-26T00:13:39.831 [DEBUG] [Thread-21017] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:13:39.889 [DEBUG] [Thread-21017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:13:39.889 [DEBUG] [Thread-21017] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:13:39.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:13:39.891 [DEBUG] [Thread-21017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:13:39.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:13:39.945 [DEBUG] [Thread-21017] [transport.py] [_log()] userauth is OK
2025-12-26T00:13:39.945 [DEBUG] [Thread-21017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:13:39.946 [DEBUG] [Thread-21017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:13:39.946 [DEBUG] [Thread-21017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:13:39.946 [DEBUG] [Thread-21017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:13:39.965 [INFO] [Thread-21017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:13:39.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-26T00:13:39.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:13:40.785 [DEBUG] [Thread-21017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:13:40.786 [DEBUG] [Thread-21017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:13:40.834 [DEBUG] [Thread-21017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:13:40.834 [DEBUG] [Thread-21017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:13:40.843 [DEBUG] [Thread-21017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:13:40.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:13:40.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:13:40.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:13:40.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:13:40.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:13:40.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:13:40.880 [DEBUG] [Thread-21017] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:13:43.346 [DEBUG] [Thread-21019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:13:58.402 [DEBUG] [Thread-21020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:10.341 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:10.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:14:10.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:14:10.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-26T00:14:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 13, 54), 3.04, 81.54, 0.0, 15.95, 13.34, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:14:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:13:54
2025-12-26T00:14:11.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:14:11.854 [DEBUG] [Thread-21021] [transport.py] [_log()] starting thread (client mode): 0xb95d5720
2025-12-26T00:14:11.854 [DEBUG] [Thread-21021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:14:11.875 [DEBUG] [Thread-21021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:14:11.876 [INFO] [Thread-21021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] client lang: <none>
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] server lang: <none>
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] kex follows: False
2025-12-26T00:14:11.877 [DEBUG] [Thread-21021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:14:11.878 [DEBUG] [Thread-21021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:14:11.878 [DEBUG] [Thread-21021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:14:11.878 [DEBUG] [Thread-21021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:14:11.878 [DEBUG] [Thread-21021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:14:11.878 [DEBUG] [Thread-21021] [transport.py] [_log()] Compression: none
2025-12-26T00:14:11.878 [DEBUG] [Thread-21021] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:14:11.886 [DEBUG] [Thread-21021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:14:11.887 [DEBUG] [Thread-21021] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:14:11.887 [DEBUG] [Thread-21021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:14:11.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:14:11.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:14:11.889 [DEBUG] [Thread-21021] [transport.py] [_log()] userauth is OK
2025-12-26T00:14:11.889 [DEBUG] [Thread-21021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:14:11.889 [DEBUG] [Thread-21021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:14:11.889 [DEBUG] [Thread-21021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:14:11.889 [DEBUG] [Thread-21021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:14:11.901 [INFO] [Thread-21021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:14:11.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:14:12.545 [DEBUG] [Thread-21021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:14:12.545 [DEBUG] [Thread-21021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:14:12.546 [DEBUG] [Thread-21021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:14:12.586 [DEBUG] [Thread-21021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:14:12.586 [DEBUG] [Thread-21021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:14:12.590 [DEBUG] [Thread-21021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:14:12.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:14:12.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:14:12.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:14:12.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:14:12.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:14:12.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:14:12.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:14:12.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:14:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:14:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.926104 -999.00  +13.40   9.89     83  +10.70 1 1 1 2 1     0    0 2.07 -22.98 ZNESW 8.6 9.9 176.6 13.0 14.2 -22.7 14.0 -22.1 13.9 -20.6 14.1 -21.9
2025-12-26T00:14:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:14:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:14:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.926104
2025-12-26T00:14:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:14:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:14:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:14:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:14:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:14:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:13:54', tmtdew=3.04, humidity=81.54, cloud=0.0, wind=15.95, temperature=13.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:13:54', seeing=1.6, atlas_timestamp='2025-12-25T22:13:35.386', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.10474999999999923, 0.2967500000000012, 0.1164999999999985, 0.09750000000000014, 0.2012500000000017, 0.20999999999999908, 0.35824999999999996, 0.21950000000000003, 0.07349999999999923, 0.17774999999999963, 0.14000000000000057, 0.129999999999999, 0.17774999999999963, 0.2370000000000001, 0.2729999999999997, 0.18125000000000036, 0.15249999999999986, 0.09949999999999903, 0.20924999999999905, 0.20749999999999957, 0.28275000000000006, 0.2772500000000022, 0.22574999999999967, 0.19599999999999973, 0.22000000000000064, 0.20175000000000054, 0.2345000000000006, 0.3019999999999996, 0.2950000000000008, 0.2425000000000015, 0.3030000000000008, 0.33674999999999944], zp_timestamp='2025-12-25T22:11:00')
2025-12-26T00:14:12.621 [DEBUG] [Thread-21021] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:14:12.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:14:12.715 [DEBUG] [Thread-21024] [transport.py] [_log()] starting thread (client mode): 0xb6b2ba00
2025-12-26T00:14:12.715 [DEBUG] [Thread-21024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:14:12.730 [DEBUG] [Thread-21024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:14:12.731 [INFO] [Thread-21024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:14:12.738 [DEBUG] [Thread-21024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:14:12.738 [DEBUG] [Thread-21024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:14:12.738 [DEBUG] [Thread-21024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:14:12.738 [DEBUG] [Thread-21024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:12.738 [DEBUG] [Thread-21024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:12.738 [DEBUG] [Thread-21024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] client lang: <none>
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] server lang: <none>
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] kex follows: False
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] Compression: none
2025-12-26T00:14:12.739 [DEBUG] [Thread-21024] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:14:12.797 [DEBUG] [Thread-21024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:14:12.797 [DEBUG] [Thread-21024] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:14:12.798 [DEBUG] [Thread-21024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:14:12.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:14:12.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:14:12.853 [DEBUG] [Thread-21024] [transport.py] [_log()] userauth is OK
2025-12-26T00:14:12.853 [DEBUG] [Thread-21024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:14:12.853 [DEBUG] [Thread-21024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:14:12.853 [DEBUG] [Thread-21024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:14:12.854 [DEBUG] [Thread-21024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:14:12.872 [INFO] [Thread-21024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:14:12.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-26T00:14:12.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:14:13.436 [DEBUG] [Thread-21026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:13.697 [DEBUG] [Thread-21024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:14:13.698 [DEBUG] [Thread-21024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:14:13.746 [DEBUG] [Thread-21024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:14:13.746 [DEBUG] [Thread-21024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:14:13.755 [DEBUG] [Thread-21024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:14:13.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:14:13.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:14:13.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:14:13.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:14:13.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:14:13.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:14:13.791 [DEBUG] [Thread-21024] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:14:20.622 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:20.623 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:28.494 [DEBUG] [Thread-21027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:37.896 [DEBUG] [Thread-21028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:43.524 [DEBUG] [Thread-21029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:14:43.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:14:43.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:14:43.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-26T00:14:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 14, 26), 3.04, 81.51, 0.0, 14.47, 13.31, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:14:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:14:26
2025-12-26T00:14:44.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:14:44.800 [DEBUG] [Thread-21030] [transport.py] [_log()] starting thread (client mode): 0xb95d4940
2025-12-26T00:14:44.801 [DEBUG] [Thread-21030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:14:44.820 [DEBUG] [Thread-21030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:14:44.820 [INFO] [Thread-21030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:14:44.823 [DEBUG] [Thread-21030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] client lang: <none>
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] server lang: <none>
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] kex follows: False
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] Compression: none
2025-12-26T00:14:44.824 [DEBUG] [Thread-21030] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:14:44.834 [DEBUG] [Thread-21030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:14:44.834 [DEBUG] [Thread-21030] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:14:44.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:14:44.835 [DEBUG] [Thread-21030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:14:44.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:14:44.837 [DEBUG] [Thread-21030] [transport.py] [_log()] userauth is OK
2025-12-26T00:14:44.837 [DEBUG] [Thread-21030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:14:44.837 [DEBUG] [Thread-21030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:14:44.837 [DEBUG] [Thread-21030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:14:44.837 [DEBUG] [Thread-21030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:14:44.861 [INFO] [Thread-21030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:14:44.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:14:45.676 [DEBUG] [Thread-21030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:14:45.676 [DEBUG] [Thread-21030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:14:45.676 [DEBUG] [Thread-21030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:14:45.716 [DEBUG] [Thread-21030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:14:45.717 [DEBUG] [Thread-21030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:14:45.719 [DEBUG] [Thread-21030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:14:45.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:14:45.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:14:45.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:14:45.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:14:45.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:14:45.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:14:45.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:14:45.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:14:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:14:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.926451 -999.00  +13.40   7.78     83  +10.70 1 1 1 2 1     0    0 2.10 -21.26 ZNESW 8.2 7.8 191.4 12.2 14.2 -22.8 14.1 -22.6 13.9 -20.7 14.2 -22.1
2025-12-26T00:14:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:14:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:14:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.926451
2025-12-26T00:14:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:14:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:14:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:14:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:14:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:14:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:14:26', tmtdew=3.04, humidity=81.51, cloud=0.0, wind=14.47, temperature=13.31, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:14:26', seeing=1.38, atlas_timestamp='2025-12-25T22:14:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.10474999999999923, 0.2967500000000012, 0.1164999999999985, 0.09750000000000014, 0.2012500000000017, 0.20999999999999908, 0.35824999999999996, 0.21950000000000003, 0.07349999999999923, 0.17774999999999963, 0.14000000000000057, 0.129999999999999, 0.17774999999999963, 0.2370000000000001, 0.2729999999999997, 0.18125000000000036, 0.15249999999999986, 0.09949999999999903, 0.20924999999999905, 0.20749999999999957, 0.28275000000000006, 0.2772500000000022, 0.22574999999999967, 0.19599999999999973, 0.22000000000000064, 0.20175000000000054, 0.2345000000000006, 0.3019999999999996, 0.2950000000000008, 0.2425000000000015, 0.3030000000000008, 0.33674999999999944], zp_timestamp='2025-12-25T22:11:00')
2025-12-26T00:14:45.741 [DEBUG] [Thread-21030] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:14:45.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-26T00:14:45.829 [DEBUG] [Thread-21033] [transport.py] [_log()] starting thread (client mode): 0xb95d5690
2025-12-26T00:14:45.829 [DEBUG] [Thread-21033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:14:45.844 [DEBUG] [Thread-21033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:14:45.844 [INFO] [Thread-21033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:14:45.851 [DEBUG] [Thread-21033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] client lang: <none>
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] server lang: <none>
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] kex follows: False
2025-12-26T00:14:45.852 [DEBUG] [Thread-21033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:14:45.853 [DEBUG] [Thread-21033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:14:45.853 [DEBUG] [Thread-21033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:14:45.853 [DEBUG] [Thread-21033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:14:45.853 [DEBUG] [Thread-21033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:14:45.853 [DEBUG] [Thread-21033] [transport.py] [_log()] Compression: none
2025-12-26T00:14:45.853 [DEBUG] [Thread-21033] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:14:45.907 [DEBUG] [Thread-21033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:14:45.908 [DEBUG] [Thread-21033] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:14:45.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:14:45.909 [DEBUG] [Thread-21033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:14:45.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:14:45.964 [DEBUG] [Thread-21033] [transport.py] [_log()] userauth is OK
2025-12-26T00:14:45.964 [DEBUG] [Thread-21033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:14:45.964 [DEBUG] [Thread-21033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:14:45.964 [DEBUG] [Thread-21033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:14:45.964 [DEBUG] [Thread-21033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:14:45.986 [INFO] [Thread-21033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:14:45.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-26T00:14:45.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:14:46.826 [DEBUG] [Thread-21033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:14:46.827 [DEBUG] [Thread-21033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:14:46.874 [DEBUG] [Thread-21033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:14:46.874 [DEBUG] [Thread-21033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:14:46.883 [DEBUG] [Thread-21033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:14:46.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:14: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-26T00:14: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-26T00:14:46.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:14:46.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:14:46.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:14:46.917 [DEBUG] [Thread-21033] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:14:58.558 [DEBUG] [Thread-21035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:13.606 [DEBUG] [Thread-21036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:16.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:15:16.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:15:16.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-26T00:15:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 14, 58), 3.05, 81.49, 0.0, 12.85, 13.34, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:15:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:14:58
2025-12-26T00:15:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:15:17.893 [DEBUG] [Thread-21037] [transport.py] [_log()] starting thread (client mode): 0xb4106020
2025-12-26T00:15:17.893 [DEBUG] [Thread-21037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:15:17.906 [DEBUG] [Thread-21037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:15:17.906 [INFO] [Thread-21037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:15:17.907 [DEBUG] [Thread-21037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] client lang: <none>
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] server lang: <none>
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] kex follows: False
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] Compression: none
2025-12-26T00:15:17.908 [DEBUG] [Thread-21037] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:15:17.917 [DEBUG] [Thread-21037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:15:17.918 [DEBUG] [Thread-21037] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:15:17.918 [DEBUG] [Thread-21037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:15:17.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:15:17.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:15:17.920 [DEBUG] [Thread-21037] [transport.py] [_log()] userauth is OK
2025-12-26T00:15:17.920 [DEBUG] [Thread-21037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:15:17.920 [DEBUG] [Thread-21037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:15:17.920 [DEBUG] [Thread-21037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:15:17.920 [DEBUG] [Thread-21037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:15:17.947 [INFO] [Thread-21037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:15:17.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:15:18.537 [DEBUG] [Thread-21037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:15:18.538 [DEBUG] [Thread-21037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:15:18.538 [DEBUG] [Thread-21037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:15:18.579 [DEBUG] [Thread-21037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:15:18.579 [DEBUG] [Thread-21037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:15:18.583 [DEBUG] [Thread-21037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:15:18.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:15:18.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:15:18.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:15:18.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:15:18.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:15:18.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:15:18.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:15:18.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:15:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:15:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.926798 -999.00  +13.40   8.48     83  +10.70 1 1 1 2 1     0    0 2.23 -19.58 ZNESW 10.1 8.5 186.0 11.4 14.2 -22.8 14.0 -22.3 13.9 -20.7 14.2 -21.9
2025-12-26T00:15:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:15:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:15:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.926798
2025-12-26T00:15:18.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:15:18.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:15:18.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:15:18.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:15:18.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:15:18.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:14:58', tmtdew=3.05, humidity=81.49, cloud=0.0, wind=12.85, temperature=13.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:14:58', seeing=1.38, atlas_timestamp='2025-12-25T22:14:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.10474999999999923, 0.2967500000000012, 0.1164999999999985, 0.09750000000000014, 0.2012500000000017, 0.20999999999999908, 0.35824999999999996, 0.21950000000000003, 0.07349999999999923, 0.17774999999999963, 0.14000000000000057, 0.129999999999999, 0.17774999999999963, 0.2370000000000001, 0.2729999999999997, 0.18125000000000036, 0.15249999999999986, 0.09949999999999903, 0.20924999999999905, 0.20749999999999957, 0.28275000000000006, 0.2772500000000022, 0.22574999999999967, 0.19599999999999973, 0.22000000000000064, 0.20175000000000054, 0.2345000000000006, 0.3019999999999996, 0.2950000000000008, 0.2425000000000015, 0.3030000000000008, 0.33674999999999944], zp_timestamp='2025-12-25T22:11:00')
2025-12-26T00:15:18.611 [DEBUG] [Thread-21037] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:15:18.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:15:18.706 [DEBUG] [Thread-21040] [transport.py] [_log()] starting thread (client mode): 0xb95d6bf0
2025-12-26T00:15:18.706 [DEBUG] [Thread-21040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:15:18.720 [DEBUG] [Thread-21040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:15:18.721 [INFO] [Thread-21040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:15:18.729 [DEBUG] [Thread-21040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:15:18.729 [DEBUG] [Thread-21040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:15:18.729 [DEBUG] [Thread-21040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:15:18.729 [DEBUG] [Thread-21040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:15:18.729 [DEBUG] [Thread-21040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:15:18.729 [DEBUG] [Thread-21040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] client lang: <none>
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] server lang: <none>
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] kex follows: False
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:15:18.730 [DEBUG] [Thread-21040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:15:18.731 [DEBUG] [Thread-21040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:15:18.731 [DEBUG] [Thread-21040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:15:18.731 [DEBUG] [Thread-21040] [transport.py] [_log()] Compression: none
2025-12-26T00:15:18.731 [DEBUG] [Thread-21040] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:15:18.789 [DEBUG] [Thread-21040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:15:18.790 [DEBUG] [Thread-21040] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:15:18.791 [DEBUG] [Thread-21040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:15:18.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:15:18.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:15:18.852 [DEBUG] [Thread-21040] [transport.py] [_log()] userauth is OK
2025-12-26T00:15:18.853 [DEBUG] [Thread-21040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:15:18.853 [DEBUG] [Thread-21040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:15:18.853 [DEBUG] [Thread-21040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:15:18.853 [DEBUG] [Thread-21040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:15:18.872 [INFO] [Thread-21040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:15:18.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:15:18.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:15:19.757 [DEBUG] [Thread-21040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:15:19.758 [DEBUG] [Thread-21040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:15:19.807 [DEBUG] [Thread-21040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:15:19.808 [DEBUG] [Thread-21040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:15:19.819 [DEBUG] [Thread-21040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:15:19.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:15:19.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-26T00:15:19.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:15:19.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:15:19.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:15:19.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:15:19.854 [DEBUG] [Thread-21040] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:15:20.819 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:20.820 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:28.639 [DEBUG] [Thread-21042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:37.977 [DEBUG] [Thread-21043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:43.696 [DEBUG] [Thread-21044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:15:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:15:49.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:15:49.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:15:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 15, 30), 3.05, 81.46, 0.0, 14.17, 13.31, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:15:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:15:30
2025-12-26T00:15:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:15:50.909 [DEBUG] [Thread-21045] [transport.py] [_log()] starting thread (client mode): 0xb6b28670
2025-12-26T00:15:50.909 [DEBUG] [Thread-21045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:15:50.928 [DEBUG] [Thread-21045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:15:50.928 [INFO] [Thread-21045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] client lang: <none>
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] server lang: <none>
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] kex follows: False
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] Compression: none
2025-12-26T00:15:50.931 [DEBUG] [Thread-21045] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:15:50.938 [DEBUG] [Thread-21045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:15:50.939 [DEBUG] [Thread-21045] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:15:50.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:15:50.939 [DEBUG] [Thread-21045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:15:50.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:15:50.940 [DEBUG] [Thread-21045] [transport.py] [_log()] userauth is OK
2025-12-26T00:15:50.940 [DEBUG] [Thread-21045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:15:50.940 [DEBUG] [Thread-21045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:15:50.940 [DEBUG] [Thread-21045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:15:50.940 [DEBUG] [Thread-21045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:15:50.950 [INFO] [Thread-21045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:15:50.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:15:51.580 [DEBUG] [Thread-21045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:15:51.580 [DEBUG] [Thread-21045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:15:51.580 [DEBUG] [Thread-21045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:15:51.621 [DEBUG] [Thread-21045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:15:51.621 [DEBUG] [Thread-21045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:15:51.623 [DEBUG] [Thread-21045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:15:51.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:15:51.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:15:51.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:15:51.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:15:51.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:15:51.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:15:51.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:15:51.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.927492 -999.00  +13.40  10.76     84  +10.70 1 1 1 2 1     0    0 2.18 -17.66 ZNESW 10.0 10.8 190.4 14.0 14.2 -22.8 14.0 -22.5 13.9 -20.8 14.1 -21.9
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.927492
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:15:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:15:30', tmtdew=3.05, humidity=81.46, cloud=0.0, wind=14.17, temperature=13.31, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:15:30', seeing=1.43, atlas_timestamp='2025-12-25T22:15:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.10474999999999923, 0.2967500000000012, 0.1164999999999985, 0.09750000000000014, 0.2012500000000017, 0.20999999999999908, 0.35824999999999996, 0.21950000000000003, 0.07349999999999923, 0.17774999999999963, 0.14000000000000057, 0.129999999999999, 0.17774999999999963, 0.2370000000000001, 0.2729999999999997, 0.18125000000000036, 0.15249999999999986, 0.09949999999999903, 0.20924999999999905, 0.20749999999999957, 0.28275000000000006, 0.2772500000000022, 0.22574999999999967, 0.19599999999999973, 0.22000000000000064, 0.20175000000000054, 0.2345000000000006, 0.3019999999999996, 0.2950000000000008, 0.2425000000000015, 0.3030000000000008, 0.33674999999999944], zp_timestamp='2025-12-25T22:11:00')
2025-12-26T00:15:51.639 [DEBUG] [Thread-21045] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:15:51.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-26T00:15:58.728 [DEBUG] [Thread-21048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:13.771 [DEBUG] [Thread-21049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:21.023 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:21.024 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:28.807 [DEBUG] [Thread-21050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:38.049 [DEBUG] [Thread-21051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:43.837 [DEBUG] [Thread-21052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:16:58.876 [DEBUG] [Thread-21053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:13.905 [DEBUG] [Thread-21054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:21.221 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:21.223 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:28.939 [DEBUG] [Thread-21055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:38.128 [DEBUG] [Thread-21056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:43.975 [DEBUG] [Thread-21057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:17:59.008 [DEBUG] [Thread-21058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:06.677 [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-26T00:18:14.044 [DEBUG] [Thread-21059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:21.422 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:21.424 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:29.078 [DEBUG] [Thread-21060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:36.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:18:36.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:18:36.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-26T00:18:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 18, 10), 2.94, 82.28, 0.0, 16.71, 13.19, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:18:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:18:10
2025-12-26T00:18:37.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:18:37.689 [DEBUG] [Thread-21061] [transport.py] [_log()] starting thread (client mode): 0xb6b2ad10
2025-12-26T00:18:37.689 [DEBUG] [Thread-21061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:18:37.709 [DEBUG] [Thread-21061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:18:37.709 [INFO] [Thread-21061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:18:37.712 [DEBUG] [Thread-21061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] client lang: <none>
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] server lang: <none>
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] kex follows: False
2025-12-26T00:18:37.713 [DEBUG] [Thread-21061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:18:37.714 [DEBUG] [Thread-21061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:18:37.714 [DEBUG] [Thread-21061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:18:37.714 [DEBUG] [Thread-21061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:18:37.714 [DEBUG] [Thread-21061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:18:37.714 [DEBUG] [Thread-21061] [transport.py] [_log()] Compression: none
2025-12-26T00:18:37.714 [DEBUG] [Thread-21061] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:18:37.724 [DEBUG] [Thread-21061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:18:37.725 [DEBUG] [Thread-21061] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:18:37.725 [DEBUG] [Thread-21061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:18:37.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:18:37.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:18:37.727 [DEBUG] [Thread-21061] [transport.py] [_log()] userauth is OK
2025-12-26T00:18:37.727 [DEBUG] [Thread-21061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:18:37.728 [DEBUG] [Thread-21061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:18:37.728 [DEBUG] [Thread-21061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:18:37.728 [DEBUG] [Thread-21061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:18:37.752 [INFO] [Thread-21061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:18:37.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:18:38.209 [DEBUG] [Thread-21063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:38.529 [DEBUG] [Thread-21061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:18:38.529 [DEBUG] [Thread-21061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:18:38.529 [DEBUG] [Thread-21061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:18:38.570 [DEBUG] [Thread-21061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:18:38.570 [DEBUG] [Thread-21061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:18:38.573 [DEBUG] [Thread-21061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:18:38.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:18:38.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:18:38.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:18:38.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:18:38.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:18:38.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:18:38.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:18:38.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:18:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:18:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.929228 -999.00  +13.30   9.73     84  +10.80 1 1 1 2 1     0    0 2.30 -15.79 ZNESW 13.2 9.7 199.9 14.9 14.1 -22.7 14.0 -22.4 13.8 -20.7 14.1 -22.0
2025-12-26T00:18:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:18:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:18:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.929228
2025-12-26T00:18:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:18:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:18:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:18:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:18:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:18:38.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:18:10', tmtdew=2.94, humidity=82.28, cloud=0.0, wind=16.71, temperature=13.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:18:11', seeing=1.68, atlas_timestamp='2025-12-25T22:18:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:15:00')
2025-12-26T00:18:38.595 [DEBUG] [Thread-21061] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:18:38.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:18:38.689 [DEBUG] [Thread-21065] [transport.py] [_log()] starting thread (client mode): 0xb6b62350
2025-12-26T00:18:38.689 [DEBUG] [Thread-21065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:18:38.703 [DEBUG] [Thread-21065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:18:38.703 [INFO] [Thread-21065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] client lang: <none>
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] server lang: <none>
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] kex follows: False
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:18:38.711 [DEBUG] [Thread-21065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:18:38.712 [DEBUG] [Thread-21065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:18:38.712 [DEBUG] [Thread-21065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:18:38.712 [DEBUG] [Thread-21065] [transport.py] [_log()] Compression: none
2025-12-26T00:18:38.712 [DEBUG] [Thread-21065] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:18:38.768 [DEBUG] [Thread-21065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:18:38.769 [DEBUG] [Thread-21065] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:18:38.770 [DEBUG] [Thread-21065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:18:38.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:18:38.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:18:38.825 [DEBUG] [Thread-21065] [transport.py] [_log()] userauth is OK
2025-12-26T00:18:38.825 [DEBUG] [Thread-21065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:18:38.825 [DEBUG] [Thread-21065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:18:38.825 [DEBUG] [Thread-21065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:18:38.825 [DEBUG] [Thread-21065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:18:38.844 [INFO] [Thread-21065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:18:38.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-26T00:18:38.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:18:39.671 [DEBUG] [Thread-21065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:18:39.671 [DEBUG] [Thread-21065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:18:39.719 [DEBUG] [Thread-21065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:18:39.719 [DEBUG] [Thread-21065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:18:39.729 [DEBUG] [Thread-21065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:18:39.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:18:39.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:18:39.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-26T00:18:39.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:18:39.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:18:39.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:18:39.766 [DEBUG] [Thread-21065] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:18:44.109 [DEBUG] [Thread-21067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:18:59.182 [DEBUG] [Thread-21068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:19:09.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:19:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:19:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 18, 42), 2.94, 82.26, 0.0, 16.62, 13.18, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:19:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:18:42
2025-12-26T00:19:10.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:19:10.820 [DEBUG] [Thread-21069] [transport.py] [_log()] starting thread (client mode): 0xb6b28760
2025-12-26T00:19:10.820 [DEBUG] [Thread-21069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:19:10.840 [DEBUG] [Thread-21069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:19:10.840 [INFO] [Thread-21069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] client lang: <none>
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] server lang: <none>
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] kex follows: False
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] Compression: none
2025-12-26T00:19:10.843 [DEBUG] [Thread-21069] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:19:10.858 [DEBUG] [Thread-21069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:19:10.858 [DEBUG] [Thread-21069] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:19:10.859 [DEBUG] [Thread-21069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:19:10.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:19:10.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:19:10.859 [DEBUG] [Thread-21069] [transport.py] [_log()] userauth is OK
2025-12-26T00:19:10.860 [DEBUG] [Thread-21069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:19:10.860 [DEBUG] [Thread-21069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:19:10.860 [DEBUG] [Thread-21069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:19:10.860 [DEBUG] [Thread-21069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:19:10.871 [INFO] [Thread-21069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:19:10.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:19:11.539 [DEBUG] [Thread-21069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:19:11.539 [DEBUG] [Thread-21069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:19:11.539 [DEBUG] [Thread-21069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:19:11.581 [DEBUG] [Thread-21069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:19:11.582 [DEBUG] [Thread-21069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:19:11.584 [DEBUG] [Thread-21069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:19:11.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:19:11.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:19:11.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:19:11.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:19:11.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:19:11.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:19:11.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.929576 -999.00  +13.30  13.07     84  +10.80 1 1 1 2 1     0    0 2.20 -16.87 ZNESW 12.6 13.1 192.0 16.5 14.1 -22.7 14.0 -22.3 13.8 -20.7 14.1 -22.0
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.929576
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:19:11.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:18:42', tmtdew=2.94, humidity=82.26, cloud=0.0, wind=16.62, temperature=13.18, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:18:43', seeing=1.68, atlas_timestamp='2025-12-25T22:18:35.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:15:00')
2025-12-26T00:19:11.604 [DEBUG] [Thread-21069] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:19:11.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-26T00:19:11.684 [DEBUG] [Thread-21072] [transport.py] [_log()] starting thread (client mode): 0xb6b2a680
2025-12-26T00:19:11.684 [DEBUG] [Thread-21072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:19:11.700 [DEBUG] [Thread-21072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:19:11.700 [INFO] [Thread-21072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] client lang: <none>
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] server lang: <none>
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] kex follows: False
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] Compression: none
2025-12-26T00:19:11.708 [DEBUG] [Thread-21072] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:19:11.765 [DEBUG] [Thread-21072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:19:11.765 [DEBUG] [Thread-21072] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:19:11.766 [DEBUG] [Thread-21072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:19:11.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:19:11.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:19:11.821 [DEBUG] [Thread-21072] [transport.py] [_log()] userauth is OK
2025-12-26T00:19:11.821 [DEBUG] [Thread-21072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:19:11.821 [DEBUG] [Thread-21072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:19:11.821 [DEBUG] [Thread-21072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:19:11.822 [DEBUG] [Thread-21072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:19:11.839 [INFO] [Thread-21072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:19:11.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-26T00:19:11.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:19:12.651 [DEBUG] [Thread-21072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:19:12.651 [DEBUG] [Thread-21072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:19:12.699 [DEBUG] [Thread-21072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:19:12.699 [DEBUG] [Thread-21072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:19:12.709 [DEBUG] [Thread-21072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:19:12.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:19:12.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-26T00:19:12.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-26T00:19:12.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:19:12.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:19:12.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:19:12.745 [DEBUG] [Thread-21072] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:19:14.211 [DEBUG] [Thread-21074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:21.627 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:21.629 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:29.263 [DEBUG] [Thread-21075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:38.293 [DEBUG] [Thread-21076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:42.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:19:42.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:19:42.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-26T00:19:43.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 19, 14), 2.93, 82.31, 0.0, 17.72, 13.13, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:19:43.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:19:14
2025-12-26T00:19:43.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:19:43.757 [DEBUG] [Thread-21077] [transport.py] [_log()] starting thread (client mode): 0xb955a6e0
2025-12-26T00:19:43.757 [DEBUG] [Thread-21077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:19:43.777 [DEBUG] [Thread-21077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:19:43.778 [INFO] [Thread-21077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:43.781 [DEBUG] [Thread-21077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] client lang: <none>
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] server lang: <none>
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] kex follows: False
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] Compression: none
2025-12-26T00:19:43.782 [DEBUG] [Thread-21077] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:19:43.801 [DEBUG] [Thread-21077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:19:43.802 [DEBUG] [Thread-21077] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:19:43.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:19:43.804 [DEBUG] [Thread-21077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:19:43.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:19:43.806 [DEBUG] [Thread-21077] [transport.py] [_log()] userauth is OK
2025-12-26T00:19:43.806 [DEBUG] [Thread-21077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:19:43.806 [DEBUG] [Thread-21077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:19:43.806 [DEBUG] [Thread-21077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:19:43.806 [DEBUG] [Thread-21077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:19:43.831 [INFO] [Thread-21077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:19:43.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:19:44.300 [DEBUG] [Thread-21079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:19:44.601 [DEBUG] [Thread-21077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:19:44.602 [DEBUG] [Thread-21077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:19:44.602 [DEBUG] [Thread-21077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:19:44.643 [DEBUG] [Thread-21077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:19:44.643 [DEBUG] [Thread-21077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:19:44.645 [DEBUG] [Thread-21077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:19:44.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:19:44.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:19:44.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:19:44.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:19:44.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:19:44.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:19:44.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.929923 -999.00  +13.30   9.22     84  +10.70 1 1 1 2 1     0    0 2.19 -16.16 ZNESW 11.4 9.2 195.3 16.2 14.1 -22.7 14.0 -22.3 13.8 -20.7 14.1 -21.9
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.929923
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:19:44.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:19:14', tmtdew=2.93, humidity=82.31, cloud=0.0, wind=17.72, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:19:15', seeing=1.67, atlas_timestamp='2025-12-25T22:19:05.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:17:00')
2025-12-26T00:19:44.663 [DEBUG] [Thread-21077] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:19:44.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-26T00:19:44.745 [DEBUG] [Thread-21081] [transport.py] [_log()] starting thread (client mode): 0xb95d4f40
2025-12-26T00:19:44.745 [DEBUG] [Thread-21081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:19:44.765 [DEBUG] [Thread-21081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:19:44.765 [INFO] [Thread-21081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:19:44.772 [DEBUG] [Thread-21081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:19:44.772 [DEBUG] [Thread-21081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:19:44.772 [DEBUG] [Thread-21081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:19:44.772 [DEBUG] [Thread-21081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] client lang: <none>
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] server lang: <none>
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] kex follows: False
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] Compression: none
2025-12-26T00:19:44.773 [DEBUG] [Thread-21081] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:19:44.827 [DEBUG] [Thread-21081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:19:44.827 [DEBUG] [Thread-21081] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:19:44.827 [DEBUG] [Thread-21081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:19:44.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:19:44.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:19:44.884 [DEBUG] [Thread-21081] [transport.py] [_log()] userauth is OK
2025-12-26T00:19:44.885 [DEBUG] [Thread-21081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:19:44.885 [DEBUG] [Thread-21081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:19:44.885 [DEBUG] [Thread-21081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:19:44.885 [DEBUG] [Thread-21081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:19:44.899 [INFO] [Thread-21081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:19:44.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-26T00:19:44.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:19:45.758 [DEBUG] [Thread-21081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:19:45.758 [DEBUG] [Thread-21081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:19:45.805 [DEBUG] [Thread-21081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:19:45.805 [DEBUG] [Thread-21081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:19:45.813 [DEBUG] [Thread-21081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:19:45.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:19:45.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')
2025-12-26T00:19:45.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:19:45.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:19:45.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:19:45.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:19:45.845 [DEBUG] [Thread-21081] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:19:59.335 [DEBUG] [Thread-21083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:11.833 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:14.389 [DEBUG] [Thread-21084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:15.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:20:15.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:20:15.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-26T00:20:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 19, 46), 2.91, 82.41, 0.0, 15.35, 13.13, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:20:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:19:46
2025-12-26T00:20:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:20:16.849 [DEBUG] [Thread-21085] [transport.py] [_log()] starting thread (client mode): 0xb9558520
2025-12-26T00:20:16.849 [DEBUG] [Thread-21085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:20:16.869 [DEBUG] [Thread-21085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:20:16.869 [INFO] [Thread-21085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:20:16.872 [DEBUG] [Thread-21085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] client lang: <none>
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] server lang: <none>
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] kex follows: False
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] Compression: none
2025-12-26T00:20:16.873 [DEBUG] [Thread-21085] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:20:16.890 [DEBUG] [Thread-21085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:20:16.891 [DEBUG] [Thread-21085] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:20:16.892 [DEBUG] [Thread-21085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:20:16.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:20:16.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:20:16.894 [DEBUG] [Thread-21085] [transport.py] [_log()] userauth is OK
2025-12-26T00:20:16.895 [DEBUG] [Thread-21085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:20:16.895 [DEBUG] [Thread-21085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:20:16.895 [DEBUG] [Thread-21085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:20:16.895 [DEBUG] [Thread-21085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:20:16.930 [INFO] [Thread-21085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:20:16.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:20:17.588 [DEBUG] [Thread-21085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:20:17.589 [DEBUG] [Thread-21085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:20:17.589 [DEBUG] [Thread-21085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:20:17.630 [DEBUG] [Thread-21085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:20:17.630 [DEBUG] [Thread-21085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:20:17.634 [DEBUG] [Thread-21085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:20:17.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:20:17.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:20:17.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:20:17.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:20:17.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:20:17.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:20:17.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:20:17.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:20:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:20:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.930270 -999.00  +13.20  14.10     85  +10.80 1 1 1 2 1     0    0 2.17 -16.89 ZNESW 16.8 14.1 192.6 17.3 14.1 -22.7 13.9 -22.7 13.7 -20.6 14.1 -22.0
2025-12-26T00:20:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:20:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:20:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.930270
2025-12-26T00:20:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:20:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:20:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:20:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:20:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:20:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:19:46', tmtdew=2.91, humidity=82.41, cloud=0.0, wind=15.35, temperature=13.13, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:19:47', seeing=1.45, atlas_timestamp='2025-12-25T22:19:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:17:00')
2025-12-26T00:20:17.663 [DEBUG] [Thread-21085] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:20:17.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-26T00:20:17.759 [DEBUG] [Thread-21088] [transport.py] [_log()] starting thread (client mode): 0xb957ad70
2025-12-26T00:20:17.759 [DEBUG] [Thread-21088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:20:17.774 [DEBUG] [Thread-21088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:20:17.774 [INFO] [Thread-21088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:20:17.781 [DEBUG] [Thread-21088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] client lang: <none>
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] server lang: <none>
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] kex follows: False
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] Compression: none
2025-12-26T00:20:17.782 [DEBUG] [Thread-21088] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:20:17.845 [DEBUG] [Thread-21088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:20:17.846 [DEBUG] [Thread-21088] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:20:17.847 [DEBUG] [Thread-21088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:20:17.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:20:17.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:20:17.902 [DEBUG] [Thread-21088] [transport.py] [_log()] userauth is OK
2025-12-26T00:20:17.902 [DEBUG] [Thread-21088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:20:17.902 [DEBUG] [Thread-21088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:20:17.902 [DEBUG] [Thread-21088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:20:17.902 [DEBUG] [Thread-21088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:20:17.921 [INFO] [Thread-21088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:20:17.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-26T00:20:17.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:20:18.755 [DEBUG] [Thread-21088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:20:18.755 [DEBUG] [Thread-21088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:20:18.803 [DEBUG] [Thread-21088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:20:18.804 [DEBUG] [Thread-21088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:20:18.814 [DEBUG] [Thread-21088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:20:18.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:20:18.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:20:18.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-26T00:20:18.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:20:18.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:20:18.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:20:18.850 [DEBUG] [Thread-21088] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:20:21.830 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:21.831 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:29.419 [DEBUG] [Thread-21090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:38.378 [DEBUG] [Thread-21091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:44.465 [DEBUG] [Thread-21092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:20:48.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:20:48.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:20: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-26T00:20:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 20, 19), 2.9, 82.51, 0.0, 14.42, 13.16, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:20:49.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:20:19
2025-12-26T00:20:49.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:20:49.887 [DEBUG] [Thread-21093] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-26T00:20:49.887 [DEBUG] [Thread-21093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:20:49.907 [DEBUG] [Thread-21093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:20:49.907 [INFO] [Thread-21093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] client lang: <none>
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] server lang: <none>
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] kex follows: False
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] Compression: none
2025-12-26T00:20:49.911 [DEBUG] [Thread-21093] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:20:49.928 [DEBUG] [Thread-21093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:20:49.929 [DEBUG] [Thread-21093] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:20:49.929 [DEBUG] [Thread-21093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:20:49.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:20:49.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:20:49.930 [DEBUG] [Thread-21093] [transport.py] [_log()] userauth is OK
2025-12-26T00:20:49.930 [DEBUG] [Thread-21093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:20:49.931 [DEBUG] [Thread-21093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:20:49.931 [DEBUG] [Thread-21093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:20:49.931 [DEBUG] [Thread-21093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:20:49.950 [INFO] [Thread-21093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:20:49.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:20:50.598 [DEBUG] [Thread-21093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:20:50.598 [DEBUG] [Thread-21093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:20:50.599 [DEBUG] [Thread-21093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:20:50.639 [DEBUG] [Thread-21093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:20:50.639 [DEBUG] [Thread-21093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:20:50.643 [DEBUG] [Thread-21093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:20:50.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:20:50.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:20:50.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:20:50.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:20:50.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:20:50.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:20:50.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:20:50.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:20:50.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:20:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.930617 -999.00  +13.20  13.83     85  +10.80 1 1 1 2 1     0    0 2.16 -17.05 ZNESW 8.6 13.8 212.4 17.0 14.1 -22.6 13.9 -22.2 13.8 -20.7 14.1 -21.9
2025-12-26T00:20:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:20:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:20:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.930617
2025-12-26T00:20:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:20:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:20:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:20:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:20:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:20:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:20:19', tmtdew=2.9, humidity=82.51, cloud=0.0, wind=14.42, temperature=13.16, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:20:19', seeing=1.53, atlas_timestamp='2025-12-25T22:20:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:17:00')
2025-12-26T00:20:50.669 [DEBUG] [Thread-21093] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:20:50.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-26T00:20:50.765 [DEBUG] [Thread-21096] [transport.py] [_log()] starting thread (client mode): 0xb6b62b60
2025-12-26T00:20:50.765 [DEBUG] [Thread-21096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:20:50.783 [DEBUG] [Thread-21096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:20:50.783 [INFO] [Thread-21096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:20:50.791 [DEBUG] [Thread-21096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] client lang: <none>
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] server lang: <none>
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] kex follows: False
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:20:50.792 [DEBUG] [Thread-21096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:20:50.793 [DEBUG] [Thread-21096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:20:50.793 [DEBUG] [Thread-21096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:20:50.793 [DEBUG] [Thread-21096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:20:50.793 [DEBUG] [Thread-21096] [transport.py] [_log()] Compression: none
2025-12-26T00:20:50.793 [DEBUG] [Thread-21096] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:20:50.854 [DEBUG] [Thread-21096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:20:50.854 [DEBUG] [Thread-21096] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:20:50.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:20:50.855 [DEBUG] [Thread-21096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:20:50.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:20:50.910 [DEBUG] [Thread-21096] [transport.py] [_log()] userauth is OK
2025-12-26T00:20:50.911 [DEBUG] [Thread-21096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:20:50.911 [DEBUG] [Thread-21096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:20:50.911 [DEBUG] [Thread-21096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:20:50.911 [DEBUG] [Thread-21096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:20:50.933 [INFO] [Thread-21096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:20:50.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-26T00:20:50.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:20:51.782 [DEBUG] [Thread-21096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:20:51.782 [DEBUG] [Thread-21096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:20:51.829 [DEBUG] [Thread-21096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:20:51.829 [DEBUG] [Thread-21096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:20:51.838 [DEBUG] [Thread-21096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:20:51.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:20:51.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:20: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-26T00:20:51.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:20:51.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:20:51.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:20:51.878 [DEBUG] [Thread-21096] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:20:59.499 [DEBUG] [Thread-21098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:14.545 [DEBUG] [Thread-21099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:21.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:21:21.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:21:21.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:21:22.032 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:22.033 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 20, 51), 2.83, 83.11, 0.0, 17.38, 13.08, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:21:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:20:51
2025-12-26T00:21:22.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:21:22.887 [DEBUG] [Thread-21100] [transport.py] [_log()] starting thread (client mode): 0xb6b612d0
2025-12-26T00:21:22.887 [DEBUG] [Thread-21100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:21:22.908 [DEBUG] [Thread-21100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:21:22.909 [INFO] [Thread-21100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:21:22.912 [DEBUG] [Thread-21100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:21:22.912 [DEBUG] [Thread-21100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:21:22.912 [DEBUG] [Thread-21100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:21:22.912 [DEBUG] [Thread-21100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:22.912 [DEBUG] [Thread-21100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:22.912 [DEBUG] [Thread-21100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] client lang: <none>
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] server lang: <none>
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] kex follows: False
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] Compression: none
2025-12-26T00:21:22.913 [DEBUG] [Thread-21100] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:21:22.932 [DEBUG] [Thread-21100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:21:22.932 [DEBUG] [Thread-21100] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:21:22.933 [DEBUG] [Thread-21100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:21:22.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:21:22.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:21:22.935 [DEBUG] [Thread-21100] [transport.py] [_log()] userauth is OK
2025-12-26T00:21:22.935 [DEBUG] [Thread-21100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:21:22.936 [DEBUG] [Thread-21100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:21:22.936 [DEBUG] [Thread-21100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:21:22.936 [DEBUG] [Thread-21100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:21:22.971 [INFO] [Thread-21100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:21:22.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:21:23.623 [DEBUG] [Thread-21100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:21:23.623 [DEBUG] [Thread-21100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:21:23.624 [DEBUG] [Thread-21100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:21:23.663 [DEBUG] [Thread-21100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:21:23.664 [DEBUG] [Thread-21100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:21:23.666 [DEBUG] [Thread-21100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:21:23.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:21:23.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:21:23.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:21:23.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:21:23.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:21:23.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:21:23.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:21:23.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.930964 -999.00  +13.20  14.14     85  +10.80 1 1 1 2 1     0    0 2.14 -18.58 ZNESW 13.5 14.1 205.4 17.0 14.1 -22.7 13.9 -22.3 13.8 -20.7 14.0 -21.7
2025-12-26T00:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:21:23.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.930964
2025-12-26T00:21:23.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:21:23.687 [DEBUG] [Thread-21100] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:21:23.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:21:23.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:21:23.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:21:23.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:21:23.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:20:51', tmtdew=2.83, humidity=83.11, cloud=0.0, wind=17.38, temperature=13.08, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:20:51', seeing=1.23, atlas_timestamp='2025-12-25T22:20:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:17:00')
2025-12-26T00:21:23.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:21:23.788 [DEBUG] [Thread-21103] [transport.py] [_log()] starting thread (client mode): 0xb6b616c0
2025-12-26T00:21:23.788 [DEBUG] [Thread-21103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:21:23.803 [DEBUG] [Thread-21103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:21:23.803 [INFO] [Thread-21103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] client lang: <none>
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] server lang: <none>
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] kex follows: False
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] Compression: none
2025-12-26T00:21:23.813 [DEBUG] [Thread-21103] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:21:23.869 [DEBUG] [Thread-21103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:21:23.869 [DEBUG] [Thread-21103] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:21:23.869 [DEBUG] [Thread-21103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:21:23.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:21:23.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:21:23.925 [DEBUG] [Thread-21103] [transport.py] [_log()] userauth is OK
2025-12-26T00:21:23.925 [DEBUG] [Thread-21103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:21:23.926 [DEBUG] [Thread-21103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:21:23.926 [DEBUG] [Thread-21103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:21:23.926 [DEBUG] [Thread-21103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:21:23.939 [INFO] [Thread-21103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:21:23.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-26T00:21:23.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:21:24.754 [DEBUG] [Thread-21103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:21:24.754 [DEBUG] [Thread-21103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:21:24.801 [DEBUG] [Thread-21103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:21:24.801 [DEBUG] [Thread-21103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:21:24.810 [DEBUG] [Thread-21103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:21:24.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:21:24.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-26T00:21:24.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:21:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:21:24.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:21:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:21:24.848 [DEBUG] [Thread-21103] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:21:29.584 [DEBUG] [Thread-21105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:38.445 [DEBUG] [Thread-21106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:44.643 [DEBUG] [Thread-21107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:21:54.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:21:54.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:21:54.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-26T00:21:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 21, 23), 2.82, 83.14, 0.0, 17.03, 13.11, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:21:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:21:23
2025-12-26T00:21:55.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:21:55.876 [DEBUG] [Thread-21108] [transport.py] [_log()] starting thread (client mode): 0xb957af80
2025-12-26T00:21:55.877 [DEBUG] [Thread-21108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:21:55.896 [DEBUG] [Thread-21108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:21:55.896 [INFO] [Thread-21108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] client lang: <none>
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] server lang: <none>
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] kex follows: False
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] Compression: none
2025-12-26T00:21:55.898 [DEBUG] [Thread-21108] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:21:55.914 [DEBUG] [Thread-21108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:21:55.914 [DEBUG] [Thread-21108] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:21:55.914 [DEBUG] [Thread-21108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:21:55.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:21:55.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:21:55.915 [DEBUG] [Thread-21108] [transport.py] [_log()] userauth is OK
2025-12-26T00:21:55.915 [DEBUG] [Thread-21108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:21:55.915 [DEBUG] [Thread-21108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:21:55.915 [DEBUG] [Thread-21108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:21:55.915 [DEBUG] [Thread-21108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:21:55.928 [INFO] [Thread-21108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:21:55.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:21:56.574 [DEBUG] [Thread-21108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:21:56.574 [DEBUG] [Thread-21108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:21:56.574 [DEBUG] [Thread-21108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:21:56.615 [DEBUG] [Thread-21108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:21:56.615 [DEBUG] [Thread-21108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:21:56.617 [DEBUG] [Thread-21108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:21:56.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:21:56.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:21:56.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:21:56.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:21:56.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:21:56.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:21:56.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:21:56.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:21:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:21:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.931659 -999.00  +13.20  11.04     85  +10.80 1 1 1 2 1     0    0 2.07 -18.42 ZNESW 8.3 11.0 195.8 17.6 14.0 -22.5 13.9 -22.2 13.7 -20.6 14.0 -21.7
2025-12-26T00:21:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:21:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:21:56.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.931659
2025-12-26T00:21:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:21:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:21:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:21:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:21:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:21:56.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:21:23', tmtdew=2.82, humidity=83.14, cloud=0.0, wind=17.03, temperature=13.11, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:21:23', seeing=1.16, atlas_timestamp='2025-12-25T22:21:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.1457499999999996, 0.1382500000000011, 0.22724999999999973, 0.09149999999999991, 0.05250000000000021, 0.1542500000000011, 0.23399999999999999, 0.3292500000000018, 0.18549999999999933, 0.07200000000000095, 0.1532499999999999, 0.1639999999999997, 0.1454999999999984, 0.17624999999999957, 0.19699999999999918, 0.21749999999999936, 0.13625000000000043, 0.13449999999999918, 0.08549999999999969, 0.15424999999999756, 0.20899999999999785, 0.25574999999999903, 0.2552500000000002, 0.19674999999999976, 0.16299999999999848, 0.2104999999999997, 0.20374999999999943, 0.22550000000000026, 0.31649999999999956, 0.21500000000000163, 0.26750000000000185, 0.2895000000000012, 0.2612500000000004], zp_timestamp='2025-12-25T22:17:00')
2025-12-26T00:21:56.637 [DEBUG] [Thread-21108] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:21:56.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-26T00:21:56.720 [DEBUG] [Thread-21111] [transport.py] [_log()] starting thread (client mode): 0xb957bc40
2025-12-26T00:21:56.720 [DEBUG] [Thread-21111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:21:56.735 [DEBUG] [Thread-21111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:21:56.735 [INFO] [Thread-21111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] client lang: <none>
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] server lang: <none>
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] kex follows: False
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:21:56.742 [DEBUG] [Thread-21111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:21:56.743 [DEBUG] [Thread-21111] [transport.py] [_log()] Compression: none
2025-12-26T00:21:56.743 [DEBUG] [Thread-21111] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:21:56.800 [DEBUG] [Thread-21111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:21:56.800 [DEBUG] [Thread-21111] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:21:56.801 [DEBUG] [Thread-21111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:21:56.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:21:56.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:21:56.857 [DEBUG] [Thread-21111] [transport.py] [_log()] userauth is OK
2025-12-26T00:21:56.857 [DEBUG] [Thread-21111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:21:56.857 [DEBUG] [Thread-21111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:21:56.857 [DEBUG] [Thread-21111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:21:56.857 [DEBUG] [Thread-21111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:21:56.871 [INFO] [Thread-21111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:21:56.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:21:56.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:21:57.752 [DEBUG] [Thread-21111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:21:57.752 [DEBUG] [Thread-21111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:21:57.801 [DEBUG] [Thread-21111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:21:57.801 [DEBUG] [Thread-21111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:21:57.813 [DEBUG] [Thread-21111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:21:57.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:21:57.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-26T00:21:57.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-26T00:21:57.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:21:57.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:21:57.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:21:57.856 [DEBUG] [Thread-21111] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:21:59.672 [DEBUG] [Thread-21113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:14.723 [DEBUG] [Thread-21114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:22.233 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:22.234 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:27.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:22:27.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:22:27.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:22:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 21, 55), 2.81, 83.19, 0.0, 18.53, 13.04, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:22:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:21:55
2025-12-26T00:22:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:22:28.899 [DEBUG] [Thread-21115] [transport.py] [_log()] starting thread (client mode): 0xb95d5f90
2025-12-26T00:22:28.899 [DEBUG] [Thread-21115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:22:28.920 [DEBUG] [Thread-21115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:22:28.920 [INFO] [Thread-21115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] client lang: <none>
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] server lang: <none>
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] kex follows: False
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] Compression: none
2025-12-26T00:22:28.923 [DEBUG] [Thread-21115] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:22:28.938 [DEBUG] [Thread-21115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:22:28.938 [DEBUG] [Thread-21115] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:22:28.938 [DEBUG] [Thread-21115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:22:28.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:22:28.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:22:28.939 [DEBUG] [Thread-21115] [transport.py] [_log()] userauth is OK
2025-12-26T00:22:28.939 [DEBUG] [Thread-21115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:22:28.939 [DEBUG] [Thread-21115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:22:28.939 [DEBUG] [Thread-21115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:22:28.939 [DEBUG] [Thread-21115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:22:28.954 [INFO] [Thread-21115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:22:28.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:22:29.552 [DEBUG] [Thread-21115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:22:29.552 [DEBUG] [Thread-21115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:22:29.552 [DEBUG] [Thread-21115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:22:29.593 [DEBUG] [Thread-21115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:22:29.593 [DEBUG] [Thread-21115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:22:29.596 [DEBUG] [Thread-21115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:22:29.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:22:29.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:22:29.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:22:29.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:22:29.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:22:29.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:22:29.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:22:29.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:22:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:22:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.932006 -999.00  +13.20  13.56     85  +10.80 1 1 1 2 1     0    0 2.16 -17.75 ZNESW 13.3 13.6 191.6 16.0 14.0 -22.6 13.8 -22.1 13.7 -20.7 14.0 -21.9
2025-12-26T00:22:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:22:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:22:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.932006
2025-12-26T00:22:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:22:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:22:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:22:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:22:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:22:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:21:55', tmtdew=2.81, humidity=83.19, cloud=0.0, wind=18.53, temperature=13.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:22:27', seeing=1.22, atlas_timestamp='2025-12-25T22:22:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.15974999999999895, 0.11824999999999974, 0.260250000000001, 0.10099999999999909, 0.0705000000000009, 0.16225000000000023, 0.20849999999999902, 0.3282500000000006, 0.22549999999999848, 0.07399999999999984, 0.17275000000000063, 0.1379999999999999, 0.1850000000000005, 0.1582499999999989, 0.18249999999999922, 0.25150000000000006, 0.13625000000000043, 0.14150000000000063, 0.11599999999999966, 0.15724999999999945, 0.19399999999999906, 0.24774999999999991, 0.27674999999999983, 0.22625000000000028, 0.18299999999999983, 0.1844999999999999, 0.1957500000000003, 0.2400000000000002, 0.3250000000000002, 0.20950000000000202, 0.25900000000000034, 0.3460000000000001, 0.2157499999999999], zp_timestamp='2025-12-25T22:21:00')
2025-12-26T00:22:29.617 [DEBUG] [Thread-21115] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:22:29.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-26T00:22:29.700 [DEBUG] [Thread-21118] [transport.py] [_log()] starting thread (client mode): 0xb95d4f40
2025-12-26T00:22:29.701 [DEBUG] [Thread-21118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:22:29.719 [DEBUG] [Thread-21118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:22:29.719 [INFO] [Thread-21118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] client lang: <none>
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] server lang: <none>
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] kex follows: False
2025-12-26T00:22:29.729 [DEBUG] [Thread-21118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:22:29.730 [DEBUG] [Thread-21118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:22:29.730 [DEBUG] [Thread-21118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:22:29.730 [DEBUG] [Thread-21118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:22:29.730 [DEBUG] [Thread-21118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:22:29.730 [DEBUG] [Thread-21118] [transport.py] [_log()] Compression: none
2025-12-26T00:22:29.730 [DEBUG] [Thread-21118] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:22:29.750 [DEBUG] [Thread-21120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:29.786 [DEBUG] [Thread-21118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:22:29.786 [DEBUG] [Thread-21118] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:22:29.786 [DEBUG] [Thread-21118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:22:29.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:22:29.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:22:29.846 [DEBUG] [Thread-21118] [transport.py] [_log()] userauth is OK
2025-12-26T00:22:29.846 [DEBUG] [Thread-21118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:22:29.846 [DEBUG] [Thread-21118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:22:29.846 [DEBUG] [Thread-21118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:22:29.847 [DEBUG] [Thread-21118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:22:29.865 [INFO] [Thread-21118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:22:29.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-26T00:22:29.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:22:30.705 [DEBUG] [Thread-21118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:22:30.705 [DEBUG] [Thread-21118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:22:30.753 [DEBUG] [Thread-21118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:22:30.753 [DEBUG] [Thread-21118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:22:30.762 [DEBUG] [Thread-21118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:22:30.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:22:30.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-26T00:22:30.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-26T00:22:30.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:22:30.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:22:30.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:22:30.799 [DEBUG] [Thread-21118] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:22:38.534 [DEBUG] [Thread-21121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:44.804 [DEBUG] [Thread-21122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:22:59.842 [DEBUG] [Thread-21123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:00.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:23:00.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:23:00.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:23:01.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 22, 27), 2.81, 83.22, 0.0, 17.54, 13.06, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:23:01.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:22:27
2025-12-26T00:23:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:23:01.905 [DEBUG] [Thread-21124] [transport.py] [_log()] starting thread (client mode): 0xb95d7370
2025-12-26T00:23:01.905 [DEBUG] [Thread-21124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:23:01.925 [DEBUG] [Thread-21124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:23:01.925 [INFO] [Thread-21124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] client lang: <none>
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] server lang: <none>
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] kex follows: False
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] Compression: none
2025-12-26T00:23:01.928 [DEBUG] [Thread-21124] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:23:01.946 [DEBUG] [Thread-21124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:23:01.946 [DEBUG] [Thread-21124] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:23:01.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:23:01.947 [DEBUG] [Thread-21124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:23:01.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:23:01.947 [DEBUG] [Thread-21124] [transport.py] [_log()] userauth is OK
2025-12-26T00:23:01.947 [DEBUG] [Thread-21124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:23:01.947 [DEBUG] [Thread-21124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:23:01.947 [DEBUG] [Thread-21124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:23:01.947 [DEBUG] [Thread-21124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:23:01.963 [INFO] [Thread-21124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:23:01.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:23:02.602 [DEBUG] [Thread-21124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:23:02.602 [DEBUG] [Thread-21124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:23:02.602 [DEBUG] [Thread-21124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:23:02.643 [DEBUG] [Thread-21124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:23:02.643 [DEBUG] [Thread-21124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:23:02.645 [DEBUG] [Thread-21124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:23:02.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:23:02.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:23:02.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:23:02.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:23:02.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:23:02.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.932353 -999.00  +13.20  10.52     85  +10.80 1 1 1 2 1     0    0 2.12 -17.50 ZNESW 9.1 10.5 193.4 14.1 14.0 -22.6 13.8 -22.2 13.7 -20.7 13.9 -21.7
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:23:02.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.932353
2025-12-26T00:23:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:23:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:23:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:23:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:23:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:23:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:22:27', tmtdew=2.81, humidity=83.22, cloud=0.0, wind=17.54, temperature=13.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:23:00', seeing=1.36, atlas_timestamp='2025-12-25T22:22:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.15974999999999895, 0.11824999999999974, 0.260250000000001, 0.10099999999999909, 0.0705000000000009, 0.16225000000000023, 0.20849999999999902, 0.3282500000000006, 0.22549999999999848, 0.07399999999999984, 0.17275000000000063, 0.1379999999999999, 0.1850000000000005, 0.1582499999999989, 0.18249999999999922, 0.25150000000000006, 0.13625000000000043, 0.14150000000000063, 0.11599999999999966, 0.15724999999999945, 0.19399999999999906, 0.24774999999999991, 0.27674999999999983, 0.22625000000000028, 0.18299999999999983, 0.1844999999999999, 0.1957500000000003, 0.2400000000000002, 0.3250000000000002, 0.20950000000000202, 0.25900000000000034, 0.3460000000000001, 0.2157499999999999], zp_timestamp='2025-12-25T22:21:00')
2025-12-26T00:23:02.664 [DEBUG] [Thread-21124] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:23:02.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-26T00:23:02.749 [DEBUG] [Thread-21127] [transport.py] [_log()] starting thread (client mode): 0xb95d40a0
2025-12-26T00:23:02.749 [DEBUG] [Thread-21127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:23:02.763 [DEBUG] [Thread-21127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:23:02.764 [INFO] [Thread-21127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] client lang: <none>
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] server lang: <none>
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] kex follows: False
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:23:02.771 [DEBUG] [Thread-21127] [transport.py] [_log()] Compression: none
2025-12-26T00:23:02.772 [DEBUG] [Thread-21127] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:23:02.833 [DEBUG] [Thread-21127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:23:02.833 [DEBUG] [Thread-21127] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:23:02.833 [DEBUG] [Thread-21127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:23:02.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:23:02.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:23:02.890 [DEBUG] [Thread-21127] [transport.py] [_log()] userauth is OK
2025-12-26T00:23:02.890 [DEBUG] [Thread-21127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:23:02.890 [DEBUG] [Thread-21127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:23:02.890 [DEBUG] [Thread-21127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:23:02.890 [DEBUG] [Thread-21127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:23:02.905 [INFO] [Thread-21127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:23:02.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-26T00:23:02.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:23:03.730 [DEBUG] [Thread-21127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:23:03.730 [DEBUG] [Thread-21127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:23:03.778 [DEBUG] [Thread-21127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:23:03.778 [DEBUG] [Thread-21127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:23:03.786 [DEBUG] [Thread-21127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:23:03.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:23:03.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:23:03.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:23:03.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:23:03.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:23:03.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:23:03.818 [DEBUG] [Thread-21127] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:23:14.875 [DEBUG] [Thread-21129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:22.437 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:22.438 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:29.924 [DEBUG] [Thread-21130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:23:33.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:23:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:23:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 22, 59), 2.81, 83.22, 0.0, 15.49, 13.06, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:23:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:22:59
2025-12-26T00:23:34.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:23:34.857 [DEBUG] [Thread-21131] [transport.py] [_log()] starting thread (client mode): 0xb6b63730
2025-12-26T00:23:34.857 [DEBUG] [Thread-21131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:23:34.876 [DEBUG] [Thread-21131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:23:34.876 [INFO] [Thread-21131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:23:34.879 [DEBUG] [Thread-21131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] client lang: <none>
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] server lang: <none>
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] kex follows: False
2025-12-26T00:23:34.880 [DEBUG] [Thread-21131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:23:34.881 [DEBUG] [Thread-21131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:23:34.881 [DEBUG] [Thread-21131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:23:34.881 [DEBUG] [Thread-21131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:23:34.881 [DEBUG] [Thread-21131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:23:34.881 [DEBUG] [Thread-21131] [transport.py] [_log()] Compression: none
2025-12-26T00:23:34.881 [DEBUG] [Thread-21131] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:23:34.897 [DEBUG] [Thread-21131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:23:34.898 [DEBUG] [Thread-21131] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:23:34.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:23:34.899 [DEBUG] [Thread-21131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:23:34.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:23:34.901 [DEBUG] [Thread-21131] [transport.py] [_log()] userauth is OK
2025-12-26T00:23:34.901 [DEBUG] [Thread-21131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:23:34.901 [DEBUG] [Thread-21131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:23:34.901 [DEBUG] [Thread-21131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:23:34.901 [DEBUG] [Thread-21131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:23:34.924 [INFO] [Thread-21131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:23:34.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:23:35.542 [DEBUG] [Thread-21131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:23:35.542 [DEBUG] [Thread-21131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:23:35.543 [DEBUG] [Thread-21131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:23:35.584 [DEBUG] [Thread-21131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:23:35.584 [DEBUG] [Thread-21131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:23:35.587 [DEBUG] [Thread-21131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:23:35.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:23:35.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:23:35.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:23:35.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:23:35.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:23:35.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:23:35.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:23:35.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.932701 -999.00  +13.20  10.02     85  +10.80 1 1 1 2 1     0    0 2.06 -17.86 ZNESW 11.3 10.0 202.6 14.8 14.0 -22.6 13.8 -22.2 13.7 -20.7 14.0 -21.7
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.932701
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:23:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:22:59', tmtdew=2.81, humidity=83.22, cloud=0.0, wind=15.49, temperature=13.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:23:32', seeing=1.33, atlas_timestamp='2025-12-25T22:23:05.366', atlas_cloud=1, atlas_rain=1, zp_data=[0.15974999999999895, 0.11824999999999974, 0.260250000000001, 0.10099999999999909, 0.0705000000000009, 0.16225000000000023, 0.20849999999999902, 0.3282500000000006, 0.22549999999999848, 0.07399999999999984, 0.17275000000000063, 0.1379999999999999, 0.1850000000000005, 0.1582499999999989, 0.18249999999999922, 0.25150000000000006, 0.13625000000000043, 0.14150000000000063, 0.11599999999999966, 0.15724999999999945, 0.19399999999999906, 0.24774999999999991, 0.27674999999999983, 0.22625000000000028, 0.18299999999999983, 0.1844999999999999, 0.1957500000000003, 0.2400000000000002, 0.3250000000000002, 0.20950000000000202, 0.25900000000000034, 0.3460000000000001, 0.2157499999999999], zp_timestamp='2025-12-25T22:21:00')
2025-12-26T00:23:35.608 [DEBUG] [Thread-21131] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:23:35.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-26T00:23:35.698 [DEBUG] [Thread-21134] [transport.py] [_log()] starting thread (client mode): 0xb6b630d0
2025-12-26T00:23:35.698 [DEBUG] [Thread-21134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:23:35.712 [DEBUG] [Thread-21134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:23:35.712 [INFO] [Thread-21134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] client lang: <none>
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] server lang: <none>
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] kex follows: False
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:23:35.720 [DEBUG] [Thread-21134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:23:35.721 [DEBUG] [Thread-21134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:23:35.721 [DEBUG] [Thread-21134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:23:35.721 [DEBUG] [Thread-21134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:23:35.721 [DEBUG] [Thread-21134] [transport.py] [_log()] Compression: none
2025-12-26T00:23:35.721 [DEBUG] [Thread-21134] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:23:35.779 [DEBUG] [Thread-21134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:23:35.779 [DEBUG] [Thread-21134] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:23:35.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:23:35.781 [DEBUG] [Thread-21134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:23:35.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:23:35.835 [DEBUG] [Thread-21134] [transport.py] [_log()] userauth is OK
2025-12-26T00:23:35.835 [DEBUG] [Thread-21134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:23:35.835 [DEBUG] [Thread-21134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:23:35.835 [DEBUG] [Thread-21134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:23:35.836 [DEBUG] [Thread-21134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:23:35.858 [INFO] [Thread-21134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:23:35.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-26T00:23:35.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:23:36.674 [DEBUG] [Thread-21134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:23:36.674 [DEBUG] [Thread-21134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:23:36.722 [DEBUG] [Thread-21134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:23:36.722 [DEBUG] [Thread-21134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:23:36.731 [DEBUG] [Thread-21134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:23:36.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:23:36.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-26T00:23:36.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-26T00:23:36.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:23:36.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:23:36.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:23:36.767 [DEBUG] [Thread-21134] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:23:38.613 [DEBUG] [Thread-21136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:44.955 [DEBUG] [Thread-21137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:23:59.998 [DEBUG] [Thread-21138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:24:06.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:24:06.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:24: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-26T00:24:07.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 24, 4), 2.79, 83.31, 0.0, 17.5, 13.06, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:24:07.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:24:04
2025-12-26T00:24:07.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:24:07.758 [DEBUG] [Thread-21139] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-26T00:24:07.758 [DEBUG] [Thread-21139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:24:07.777 [DEBUG] [Thread-21139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:24:07.777 [INFO] [Thread-21139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] client lang: <none>
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] server lang: <none>
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] kex follows: False
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] Compression: none
2025-12-26T00:24:07.781 [DEBUG] [Thread-21139] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:24:07.799 [DEBUG] [Thread-21139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:24:07.800 [DEBUG] [Thread-21139] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:24:07.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:24:07.800 [DEBUG] [Thread-21139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:24:07.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:24:07.802 [DEBUG] [Thread-21139] [transport.py] [_log()] userauth is OK
2025-12-26T00:24:07.803 [DEBUG] [Thread-21139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:24:07.803 [DEBUG] [Thread-21139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:24:07.803 [DEBUG] [Thread-21139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:24:07.803 [DEBUG] [Thread-21139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:24:07.824 [INFO] [Thread-21139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:24:07.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:24:08.373 [DEBUG] [Thread-21139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:24:08.373 [DEBUG] [Thread-21139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:24:08.373 [DEBUG] [Thread-21139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:24:08.414 [DEBUG] [Thread-21139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:24:08.414 [DEBUG] [Thread-21139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:24:08.418 [DEBUG] [Thread-21139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:24:08.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:24:08.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:24:08.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:24:08.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:24:08.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:24:08.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:24:08.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:24:08.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:24:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:24:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.933048 -999.00  +13.20  15.36     85  +10.80 1 1 1 2 1     0    0 2.12 -17.92 ZNESW 10.1 15.4 199.0 18.7 14.0 -22.7 13.8 -22.4 13.7 -20.5 14.0 -21.8
2025-12-26T00:24:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:24:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:24:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.933048
2025-12-26T00:24:08.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:24:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:24:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:24:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:24:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:24:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:24:04', tmtdew=2.79, humidity=83.31, cloud=0.0, wind=17.5, temperature=13.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:24:04', seeing=1.35, atlas_timestamp='2025-12-25T22:23:35.347', atlas_cloud=1, atlas_rain=1, zp_data=[0.15974999999999895, 0.11824999999999974, 0.260250000000001, 0.10099999999999909, 0.0705000000000009, 0.16225000000000023, 0.20849999999999902, 0.3282500000000006, 0.22549999999999848, 0.07399999999999984, 0.17275000000000063, 0.1379999999999999, 0.1850000000000005, 0.1582499999999989, 0.18249999999999922, 0.25150000000000006, 0.13625000000000043, 0.14150000000000063, 0.11599999999999966, 0.15724999999999945, 0.19399999999999906, 0.24774999999999991, 0.27674999999999983, 0.22625000000000028, 0.18299999999999983, 0.1844999999999999, 0.1957500000000003, 0.2400000000000002, 0.3250000000000002, 0.20950000000000202, 0.25900000000000034, 0.3460000000000001, 0.2157499999999999], zp_timestamp='2025-12-25T22:21:00')
2025-12-26T00:24:08.445 [DEBUG] [Thread-21139] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:24: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-26T00:24:08.539 [DEBUG] [Thread-21142] [transport.py] [_log()] starting thread (client mode): 0xb95b2770
2025-12-26T00:24:08.539 [DEBUG] [Thread-21142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:24:08.557 [DEBUG] [Thread-21142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:24:08.557 [INFO] [Thread-21142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:24:08.568 [DEBUG] [Thread-21142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:24:08.569 [DEBUG] [Thread-21142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:24:08.569 [DEBUG] [Thread-21142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:24:08.569 [DEBUG] [Thread-21142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:08.569 [DEBUG] [Thread-21142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:08.569 [DEBUG] [Thread-21142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:08.569 [DEBUG] [Thread-21142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] client lang: <none>
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] server lang: <none>
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] kex follows: False
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] Compression: none
2025-12-26T00:24:08.570 [DEBUG] [Thread-21142] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:24:08.628 [DEBUG] [Thread-21142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:24:08.628 [DEBUG] [Thread-21142] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:24:08.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:24:08.629 [DEBUG] [Thread-21142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:24:08.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:24:08.683 [DEBUG] [Thread-21142] [transport.py] [_log()] userauth is OK
2025-12-26T00:24:08.684 [DEBUG] [Thread-21142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:24:08.684 [DEBUG] [Thread-21142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:24:08.684 [DEBUG] [Thread-21142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:24:08.684 [DEBUG] [Thread-21142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:24:08.703 [INFO] [Thread-21142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:24:08.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-26T00:24:08.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:24:09.524 [DEBUG] [Thread-21142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:24:09.524 [DEBUG] [Thread-21142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:24:09.572 [DEBUG] [Thread-21142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:24:09.572 [DEBUG] [Thread-21142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:24:09.581 [DEBUG] [Thread-21142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:24:09.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:24: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-26T00:24:09.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-26T00:24:09.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:24:09.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:24:09.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:24:09.617 [DEBUG] [Thread-21142] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:24:15.033 [DEBUG] [Thread-21144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:24:22.641 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:24:22.642 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:24:30.081 [DEBUG] [Thread-21145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:24:38.665 [DEBUG] [Thread-21146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:24:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:24:39.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:24:39.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:24:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 24, 36), 2.79, 83.29, 0.0, 15.32, 13.04, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:24:40.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:24:36
2025-12-26T00:24:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:24:40.593 [DEBUG] [Thread-21147] [transport.py] [_log()] starting thread (client mode): 0xb95b1960
2025-12-26T00:24:40.593 [DEBUG] [Thread-21147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:24:40.613 [DEBUG] [Thread-21147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:24:40.613 [INFO] [Thread-21147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:24:40.616 [DEBUG] [Thread-21147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:24:40.616 [DEBUG] [Thread-21147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] client lang: <none>
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] server lang: <none>
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] kex follows: False
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] Compression: none
2025-12-26T00:24:40.617 [DEBUG] [Thread-21147] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:24:40.634 [DEBUG] [Thread-21147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:24:40.634 [DEBUG] [Thread-21147] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:24:40.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:24:40.635 [DEBUG] [Thread-21147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:24:40.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:24:40.638 [DEBUG] [Thread-21147] [transport.py] [_log()] userauth is OK
2025-12-26T00:24:40.639 [DEBUG] [Thread-21147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:24:40.639 [DEBUG] [Thread-21147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:24:40.639 [DEBUG] [Thread-21147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:24:40.639 [DEBUG] [Thread-21147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:24:40.654 [INFO] [Thread-21147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:24:40.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:24:41.203 [DEBUG] [Thread-21147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:24:41.203 [DEBUG] [Thread-21147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:24:41.204 [DEBUG] [Thread-21147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:24:41.244 [DEBUG] [Thread-21147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:24:41.244 [DEBUG] [Thread-21147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:24:41.247 [DEBUG] [Thread-21147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:24:41.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:24:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:24:41.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:24:41.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:24:41.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:24:41.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:24:41.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:24:41.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:24:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:24:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.933395 -999.00  +13.20  13.62     85  +10.80 1 1 1 2 1     0    0 2.13 -17.23 ZNESW 8.5 13.6 193.2 17.8 14.0 -22.7 13.8 -22.1 13.7 -20.6 13.9 -22.0
2025-12-26T00:24:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:24:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:24:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.933395
2025-12-26T00:24:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:24:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:24:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:24:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:24:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:24:41.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:24:36', tmtdew=2.79, humidity=83.29, cloud=0.0, wind=15.32, temperature=13.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:24:36', seeing=1.35, atlas_timestamp='2025-12-25T22:24:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.15974999999999895, 0.11824999999999974, 0.260250000000001, 0.10099999999999909, 0.0705000000000009, 0.16225000000000023, 0.20849999999999902, 0.3282500000000006, 0.22549999999999848, 0.07399999999999984, 0.17275000000000063, 0.1379999999999999, 0.1850000000000005, 0.1582499999999989, 0.18249999999999922, 0.25150000000000006, 0.13625000000000043, 0.14150000000000063, 0.11599999999999966, 0.15724999999999945, 0.19399999999999906, 0.24774999999999991, 0.27674999999999983, 0.22625000000000028, 0.18299999999999983, 0.1844999999999999, 0.1957500000000003, 0.2400000000000002, 0.3250000000000002, 0.20950000000000202, 0.25900000000000034, 0.3460000000000001, 0.2157499999999999], zp_timestamp='2025-12-25T22:21:00')
2025-12-26T00:24:41.277 [DEBUG] [Thread-21147] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:24:41.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-26T00:24:41.373 [DEBUG] [Thread-21150] [transport.py] [_log()] starting thread (client mode): 0xb95b0850
2025-12-26T00:24:41.373 [DEBUG] [Thread-21150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:24:41.389 [DEBUG] [Thread-21150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:24:41.389 [INFO] [Thread-21150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:24:41.397 [DEBUG] [Thread-21150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:24:41.397 [DEBUG] [Thread-21150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:24:41.397 [DEBUG] [Thread-21150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:24:41.397 [DEBUG] [Thread-21150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:41.397 [DEBUG] [Thread-21150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] client lang: <none>
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] server lang: <none>
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] kex follows: False
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:24:41.398 [DEBUG] [Thread-21150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:24:41.399 [DEBUG] [Thread-21150] [transport.py] [_log()] Compression: none
2025-12-26T00:24:41.399 [DEBUG] [Thread-21150] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:24:41.455 [DEBUG] [Thread-21150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:24:41.455 [DEBUG] [Thread-21150] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:24:41.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:24:41.457 [DEBUG] [Thread-21150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:24:41.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:24:41.511 [DEBUG] [Thread-21150] [transport.py] [_log()] userauth is OK
2025-12-26T00:24:41.511 [DEBUG] [Thread-21150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:24:41.511 [DEBUG] [Thread-21150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:24:41.512 [DEBUG] [Thread-21150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:24:41.512 [DEBUG] [Thread-21150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:24:41.530 [INFO] [Thread-21150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:24:41.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-26T00:24:41.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:24:42.367 [DEBUG] [Thread-21150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:24:42.367 [DEBUG] [Thread-21150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:24:42.415 [DEBUG] [Thread-21150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:24:42.415 [DEBUG] [Thread-21150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:24:42.425 [DEBUG] [Thread-21150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:24:42.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:24:42.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-26T00:24: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') -> 00000000
2025-12-26T00:24:42.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:24:42.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:24:42.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:24:42.461 [DEBUG] [Thread-21150] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:24:45.117 [DEBUG] [Thread-21152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:00.166 [DEBUG] [Thread-21153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:12.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:25:12.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:25:12.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-26T00:25:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 25, 8), 2.8, 83.27, 0.0, 16.5, 13.03, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:25:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:25:08
2025-12-26T00:25:13.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:25:13.444 [DEBUG] [Thread-21154] [transport.py] [_log()] starting thread (client mode): 0xb95b3970
2025-12-26T00:25:13.445 [DEBUG] [Thread-21154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:25:13.460 [DEBUG] [Thread-21154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:25:13.460 [INFO] [Thread-21154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:25:13.463 [DEBUG] [Thread-21154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:25:13.463 [DEBUG] [Thread-21154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:25:13.463 [DEBUG] [Thread-21154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:25:13.463 [DEBUG] [Thread-21154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] client lang: <none>
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] server lang: <none>
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] kex follows: False
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] Compression: none
2025-12-26T00:25:13.464 [DEBUG] [Thread-21154] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:25:13.480 [DEBUG] [Thread-21154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:25:13.481 [DEBUG] [Thread-21154] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:25:13.481 [DEBUG] [Thread-21154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:25:13.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:25:13.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:25:13.483 [DEBUG] [Thread-21154] [transport.py] [_log()] userauth is OK
2025-12-26T00:25:13.483 [DEBUG] [Thread-21154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:25:13.483 [DEBUG] [Thread-21154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:25:13.483 [DEBUG] [Thread-21154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:25:13.483 [DEBUG] [Thread-21154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:25:13.506 [INFO] [Thread-21154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:25:13.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:25:14.105 [DEBUG] [Thread-21154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:25:14.105 [DEBUG] [Thread-21154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:25:14.106 [DEBUG] [Thread-21154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:25:14.146 [DEBUG] [Thread-21154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:25:14.146 [DEBUG] [Thread-21154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:25:14.149 [DEBUG] [Thread-21154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:25:14.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:25:14.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:25:14.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:25:14.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:25:14.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:25:14.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:25:14.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:25:14.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:25:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:25:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.934089 -999.00  +13.20   8.86     85  +10.70 1 1 1 2 1     0    0 2.13 -16.79 ZNESW 8.4 8.9 187.9 18.4 14.0 -22.7 13.8 -22.3 13.7 -20.7 14.0 -22.0
2025-12-26T00:25:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:25:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:25:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.934089
2025-12-26T00:25:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:25:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:25:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:25:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:25:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:25:14.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:25:08', tmtdew=2.8, humidity=83.27, cloud=0.0, wind=16.5, temperature=13.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:25:08', seeing=1.32, atlas_timestamp='2025-12-25T22:25:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.15974999999999895, 0.11824999999999974, 0.260250000000001, 0.10099999999999909, 0.0705000000000009, 0.16225000000000023, 0.20849999999999902, 0.3282500000000006, 0.22549999999999848, 0.07399999999999984, 0.17275000000000063, 0.1379999999999999, 0.1850000000000005, 0.1582499999999989, 0.18249999999999922, 0.25150000000000006, 0.13625000000000043, 0.14150000000000063, 0.11599999999999966, 0.15724999999999945, 0.19399999999999906, 0.24774999999999991, 0.27674999999999983, 0.22625000000000028, 0.18299999999999983, 0.1844999999999999, 0.1957500000000003, 0.2400000000000002, 0.3250000000000002, 0.20950000000000202, 0.25900000000000034, 0.3460000000000001, 0.2157499999999999], zp_timestamp='2025-12-25T22:21:00')
2025-12-26T00:25:14.184 [DEBUG] [Thread-21154] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:25:14.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:25:14.269 [DEBUG] [Thread-21157] [transport.py] [_log()] starting thread (client mode): 0xb95b1d50
2025-12-26T00:25:14.270 [DEBUG] [Thread-21157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:25:14.287 [DEBUG] [Thread-21157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:25:14.287 [INFO] [Thread-21157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:25:14.295 [DEBUG] [Thread-21157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:25:14.295 [DEBUG] [Thread-21157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:25:14.295 [DEBUG] [Thread-21157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:25:14.296 [DEBUG] [Thread-21157] [transport.py] [_log()] client lang: <none>
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] server lang: <none>
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] kex follows: False
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:25:14.297 [DEBUG] [Thread-21157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:25:14.298 [DEBUG] [Thread-21157] [transport.py] [_log()] Compression: none
2025-12-26T00:25:14.298 [DEBUG] [Thread-21157] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:25:14.356 [DEBUG] [Thread-21157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:25:14.357 [DEBUG] [Thread-21157] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:25:14.357 [DEBUG] [Thread-21157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:25:14.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:25:14.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:25:14.416 [DEBUG] [Thread-21157] [transport.py] [_log()] userauth is OK
2025-12-26T00:25:14.416 [DEBUG] [Thread-21157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:25:14.416 [DEBUG] [Thread-21157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:25:14.416 [DEBUG] [Thread-21157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:25:14.416 [DEBUG] [Thread-21157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:25:14.440 [INFO] [Thread-21157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:25:14.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-26T00:25:14.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:25:15.194 [DEBUG] [Thread-21159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:15.225 [DEBUG] [Thread-21157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:25:15.225 [DEBUG] [Thread-21157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:25:15.273 [DEBUG] [Thread-21157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:25:15.273 [DEBUG] [Thread-21157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:25:15.282 [DEBUG] [Thread-21157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:25:15.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:25:15.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-26T00:25:15.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-26T00:25:15.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:25:15.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:25:15.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:25:15.317 [DEBUG] [Thread-21157] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:25:22.840 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:22.841 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:30.241 [DEBUG] [Thread-21160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:38.718 [DEBUG] [Thread-21161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:45.274 [DEBUG] [Thread-21162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:25:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:25:45.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:25:45.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-26T00:25:46.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 25, 40), 2.79, 83.29, 0.0, 13.06, 13.04, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:25:46.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:25:40
2025-12-26T00:25:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:25:46.317 [DEBUG] [Thread-21163] [transport.py] [_log()] starting thread (client mode): 0xb95b0c70
2025-12-26T00:25:46.318 [DEBUG] [Thread-21163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:25:46.338 [DEBUG] [Thread-21163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:25:46.339 [INFO] [Thread-21163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:25:46.341 [DEBUG] [Thread-21163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:25:46.341 [DEBUG] [Thread-21163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] client lang: <none>
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] server lang: <none>
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] kex follows: False
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] Compression: none
2025-12-26T00:25:46.342 [DEBUG] [Thread-21163] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:25:46.362 [DEBUG] [Thread-21163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:25:46.362 [DEBUG] [Thread-21163] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:25:46.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:25:46.363 [DEBUG] [Thread-21163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:25:46.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:25:46.365 [DEBUG] [Thread-21163] [transport.py] [_log()] userauth is OK
2025-12-26T00:25:46.366 [DEBUG] [Thread-21163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:25:46.366 [DEBUG] [Thread-21163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:25:46.366 [DEBUG] [Thread-21163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:25:46.366 [DEBUG] [Thread-21163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:25:46.390 [INFO] [Thread-21163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:25:46.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:25:47.000 [DEBUG] [Thread-21163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:25:47.000 [DEBUG] [Thread-21163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:25:47.001 [DEBUG] [Thread-21163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:25:47.041 [DEBUG] [Thread-21163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:25:47.041 [DEBUG] [Thread-21163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:25:47.045 [DEBUG] [Thread-21163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:25:47.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:25:47.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:25:47.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:25:47.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:25:47.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:25:47.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:25:47.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:25:47.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:25:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:25:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.934089 -999.00  +13.20   8.86     85  +10.70 1 1 1 2 1     0    0 2.13 -16.79 ZNESW 8.4 8.9 187.9 18.4 14.0 -22.7 13.8 -22.3 13.7 -20.7 14.0 -22.0
2025-12-26T00:25:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:25:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:25:47.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.934089
2025-12-26T00:25:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:25:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:25:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:25:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:25:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:25:47.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:25:40', tmtdew=2.79, humidity=83.29, cloud=0.0, wind=13.06, temperature=13.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:25:40', seeing=1.29, atlas_timestamp='2025-12-25T22:25:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:23:00')
2025-12-26T00:25:47.071 [DEBUG] [Thread-21163] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:25:47.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-26T00:25:47.165 [DEBUG] [Thread-21166] [transport.py] [_log()] starting thread (client mode): 0xb957ad70
2025-12-26T00:25:47.165 [DEBUG] [Thread-21166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:25:47.180 [DEBUG] [Thread-21166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:25:47.180 [INFO] [Thread-21166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] client lang: <none>
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] server lang: <none>
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] kex follows: False
2025-12-26T00:25:47.188 [DEBUG] [Thread-21166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:25:47.189 [DEBUG] [Thread-21166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:25:47.189 [DEBUG] [Thread-21166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:25:47.189 [DEBUG] [Thread-21166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:25:47.189 [DEBUG] [Thread-21166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:25:47.189 [DEBUG] [Thread-21166] [transport.py] [_log()] Compression: none
2025-12-26T00:25:47.189 [DEBUG] [Thread-21166] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:25:47.252 [DEBUG] [Thread-21166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:25:47.252 [DEBUG] [Thread-21166] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:25:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:25:47.253 [DEBUG] [Thread-21166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:25:47.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:25:47.312 [DEBUG] [Thread-21166] [transport.py] [_log()] userauth is OK
2025-12-26T00:25:47.312 [DEBUG] [Thread-21166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:25:47.312 [DEBUG] [Thread-21166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:25:47.312 [DEBUG] [Thread-21166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:25:47.312 [DEBUG] [Thread-21166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:25:47.330 [INFO] [Thread-21166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:25:47.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-26T00:25:47.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:25:48.161 [DEBUG] [Thread-21166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:25:48.162 [DEBUG] [Thread-21166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:25:48.209 [DEBUG] [Thread-21166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:25:48.210 [DEBUG] [Thread-21166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:25:48.219 [DEBUG] [Thread-21166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:25:48.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:25:48.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-26T00:25:48.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-26T00:25:48.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:25:48.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:25:48.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:25:48.254 [DEBUG] [Thread-21166] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:26:00.309 [DEBUG] [Thread-21168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:12.951 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:15.370 [DEBUG] [Thread-21169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:18.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:26:18.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:26:18.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-26T00:26:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 26, 12), 2.78, 83.37, 0.0, 14.66, 13.03, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:26:19.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:26:12
2025-12-26T00:26:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:26:19.312 [DEBUG] [Thread-21170] [transport.py] [_log()] starting thread (client mode): 0xb957b2e0
2025-12-26T00:26:19.312 [DEBUG] [Thread-21170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:26:19.333 [DEBUG] [Thread-21170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:26:19.333 [INFO] [Thread-21170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] client lang: <none>
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] server lang: <none>
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] kex follows: False
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] Compression: none
2025-12-26T00:26:19.336 [DEBUG] [Thread-21170] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:26:19.351 [DEBUG] [Thread-21170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:26:19.351 [DEBUG] [Thread-21170] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:26:19.351 [DEBUG] [Thread-21170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:26:19.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:26:19.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:26:19.352 [DEBUG] [Thread-21170] [transport.py] [_log()] userauth is OK
2025-12-26T00:26:19.352 [DEBUG] [Thread-21170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:26:19.352 [DEBUG] [Thread-21170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:26:19.352 [DEBUG] [Thread-21170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:26:19.352 [DEBUG] [Thread-21170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:26:19.361 [INFO] [Thread-21170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:26:19.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:26:20.137 [DEBUG] [Thread-21170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:26:20.138 [DEBUG] [Thread-21170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:26:20.138 [DEBUG] [Thread-21170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:26:20.178 [DEBUG] [Thread-21170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:26:20.178 [DEBUG] [Thread-21170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:26:20.180 [DEBUG] [Thread-21170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:26:20.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:26:20.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:26:20.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:26:20.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:26:20.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:26:20.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:26:20.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.934437 -999.00  +13.20  11.08     85  +10.80 1 1 1 2 1     0    0 2.12 -16.40 ZNESW 10.0 11.1 196.0 13.5 13.9 -22.6 13.8 -22.2 13.7 -20.7 13.9 -21.9
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.934437
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:26:20.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:26:12', tmtdew=2.78, humidity=83.37, cloud=0.0, wind=14.66, temperature=13.03, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:26:13', seeing=1.22, atlas_timestamp='2025-12-25T22:25:35.357', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:23:00')
2025-12-26T00:26:20.200 [DEBUG] [Thread-21170] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:26:20.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:26:20.283 [DEBUG] [Thread-21173] [transport.py] [_log()] starting thread (client mode): 0xb95b0a60
2025-12-26T00:26:20.283 [DEBUG] [Thread-21173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:26:20.298 [DEBUG] [Thread-21173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:26:20.298 [INFO] [Thread-21173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] client lang: <none>
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] server lang: <none>
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] kex follows: False
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] Compression: none
2025-12-26T00:26:20.305 [DEBUG] [Thread-21173] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:26:20.362 [DEBUG] [Thread-21173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:26:20.362 [DEBUG] [Thread-21173] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:26:20.363 [DEBUG] [Thread-21173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:26:20.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:26:20.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:26:20.419 [DEBUG] [Thread-21173] [transport.py] [_log()] userauth is OK
2025-12-26T00:26:20.419 [DEBUG] [Thread-21173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:26:20.419 [DEBUG] [Thread-21173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:26:20.419 [DEBUG] [Thread-21173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:26:20.419 [DEBUG] [Thread-21173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:26:20.433 [INFO] [Thread-21173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:26:20.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:26:20.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:26:21.251 [DEBUG] [Thread-21173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:26:21.251 [DEBUG] [Thread-21173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:26:21.300 [DEBUG] [Thread-21173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:26:21.300 [DEBUG] [Thread-21173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:26:21.313 [DEBUG] [Thread-21173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:26:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:26: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-26T00:26: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-26T00:26:21.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:26:21.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:26:21.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:26:21.344 [DEBUG] [Thread-21173] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:26:23.042 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:23.043 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:30.402 [DEBUG] [Thread-21175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:38.795 [DEBUG] [Thread-21176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:45.466 [DEBUG] [Thread-21177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:26:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:26:51.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:26:51.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-26T00:26:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 26, 45), 2.73, 83.34, 0.0, 14.56, 12.98, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:26:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:26:45
2025-12-26T00:26:52.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:26:52.356 [DEBUG] [Thread-21178] [transport.py] [_log()] starting thread (client mode): 0xb6b62da0
2025-12-26T00:26:52.356 [DEBUG] [Thread-21178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:26:52.377 [DEBUG] [Thread-21178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:26:52.377 [INFO] [Thread-21178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] client lang: <none>
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] server lang: <none>
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] kex follows: False
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:26:52.381 [DEBUG] [Thread-21178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:26:52.382 [DEBUG] [Thread-21178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:26:52.382 [DEBUG] [Thread-21178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:26:52.382 [DEBUG] [Thread-21178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:26:52.382 [DEBUG] [Thread-21178] [transport.py] [_log()] Compression: none
2025-12-26T00:26:52.382 [DEBUG] [Thread-21178] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:26:52.400 [DEBUG] [Thread-21178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:26:52.400 [DEBUG] [Thread-21178] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:26:52.401 [DEBUG] [Thread-21178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:26:52.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:26:52.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:26:52.403 [DEBUG] [Thread-21178] [transport.py] [_log()] userauth is OK
2025-12-26T00:26:52.403 [DEBUG] [Thread-21178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:26:52.404 [DEBUG] [Thread-21178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:26:52.404 [DEBUG] [Thread-21178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:26:52.404 [DEBUG] [Thread-21178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:26:52.420 [INFO] [Thread-21178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:26:52.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:26:53.070 [DEBUG] [Thread-21178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:26:53.070 [DEBUG] [Thread-21178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:26:53.071 [DEBUG] [Thread-21178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:26:53.111 [DEBUG] [Thread-21178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:26:53.111 [DEBUG] [Thread-21178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:26:53.114 [DEBUG] [Thread-21178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:26:53.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:26:53.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:26:53.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:26:53.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:26:53.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:26:53.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:26:53.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:26:53.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:26:53.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:26:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.934784 -999.00  +13.10  10.84     85  +10.70 1 1 1 2 1     0    0 2.17 -15.99 ZNESW 9.7 10.8 194.3 12.6 13.9 -22.7 13.8 -22.0 13.7 -20.6 13.9 -21.7
2025-12-26T00:26:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:26:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:26:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.934784
2025-12-26T00:26:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:26:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:26:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:26:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:26:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:26:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:26:45', tmtdew=2.73, humidity=83.34, cloud=0.0, wind=14.56, temperature=12.98, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:26:46', seeing=1.22, atlas_timestamp='2025-12-25T22:26:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:23:00')
2025-12-26T00:26:53.140 [DEBUG] [Thread-21178] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:26:53.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-26T00:26:53.234 [DEBUG] [Thread-21181] [transport.py] [_log()] starting thread (client mode): 0xb6b60be0
2025-12-26T00:26:53.234 [DEBUG] [Thread-21181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:26:53.249 [DEBUG] [Thread-21181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:26:53.249 [INFO] [Thread-21181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:26:53.256 [DEBUG] [Thread-21181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] client lang: <none>
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] server lang: <none>
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] kex follows: False
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] Compression: none
2025-12-26T00:26:53.257 [DEBUG] [Thread-21181] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:26:53.315 [DEBUG] [Thread-21181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:26:53.316 [DEBUG] [Thread-21181] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:26:53.316 [DEBUG] [Thread-21181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:26:53.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:26:53.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:26:53.372 [DEBUG] [Thread-21181] [transport.py] [_log()] userauth is OK
2025-12-26T00:26:53.372 [DEBUG] [Thread-21181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:26:53.372 [DEBUG] [Thread-21181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:26:53.372 [DEBUG] [Thread-21181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:26:53.372 [DEBUG] [Thread-21181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:26:53.396 [INFO] [Thread-21181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:26:53.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-26T00:26:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:26:54.232 [DEBUG] [Thread-21181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:26:54.232 [DEBUG] [Thread-21181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:26:54.280 [DEBUG] [Thread-21181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:26:54.281 [DEBUG] [Thread-21181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:26:54.290 [DEBUG] [Thread-21181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:26:54.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:26:54.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-26T00:26:54.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-26T00:26:54.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:26:54.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:26:54.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:26:54.326 [DEBUG] [Thread-21181] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:27:00.501 [DEBUG] [Thread-21183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:15.544 [DEBUG] [Thread-21184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:23.253 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:23.254 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:27:24.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:27:24.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-26T00:27:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 27, 17), 2.73, 83.39, 0.0, 13.46, 12.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:27:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:27:17
2025-12-26T00:27:25.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:27:25.329 [DEBUG] [Thread-21185] [transport.py] [_log()] starting thread (client mode): 0xb6b63ee0
2025-12-26T00:27:25.329 [DEBUG] [Thread-21185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:27:25.349 [DEBUG] [Thread-21185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:27:25.350 [INFO] [Thread-21185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:27:25.352 [DEBUG] [Thread-21185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] client lang: <none>
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] server lang: <none>
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] kex follows: False
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] Compression: none
2025-12-26T00:27:25.353 [DEBUG] [Thread-21185] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:27:25.372 [DEBUG] [Thread-21185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:27:25.373 [DEBUG] [Thread-21185] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:27:25.373 [DEBUG] [Thread-21185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:27:25.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:27:25.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:27:25.375 [DEBUG] [Thread-21185] [transport.py] [_log()] userauth is OK
2025-12-26T00:27:25.376 [DEBUG] [Thread-21185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:27:25.376 [DEBUG] [Thread-21185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:27:25.376 [DEBUG] [Thread-21185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:27:25.376 [DEBUG] [Thread-21185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:27:25.401 [INFO] [Thread-21185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:27:25.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:27:26.172 [DEBUG] [Thread-21185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:27:26.172 [DEBUG] [Thread-21185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:27:26.172 [DEBUG] [Thread-21185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:27:26.213 [DEBUG] [Thread-21185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:27:26.214 [DEBUG] [Thread-21185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:27:26.216 [DEBUG] [Thread-21185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:27:26.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:27:26.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:27:26.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:27:26.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:27:26.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:27:26.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:27:26.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:27:26.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:27:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:27:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.935131 -999.00  +13.10  12.46     85  +10.70 1 1 1 2 1     0    0 2.13 -17.33 ZNESW 7.7 12.5 197.0 14.2 13.9 -22.6 13.8 -22.4 13.6 -20.6 13.9 -21.8
2025-12-26T00:27:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:27:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:27:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.935131
2025-12-26T00:27:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:27:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:27:26.245 [DEBUG] [Thread-21185] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:27:26.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:27:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:27:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:27:26.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:27:17', tmtdew=2.73, humidity=83.39, cloud=0.0, wind=13.46, temperature=12.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:27:18', seeing=1.21, atlas_timestamp='2025-12-25T22:26:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:23:00')
2025-12-26T00:27:26.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-26T00:27:26.342 [DEBUG] [Thread-21188] [transport.py] [_log()] starting thread (client mode): 0xb957a4a0
2025-12-26T00:27:26.342 [DEBUG] [Thread-21188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:27:26.356 [DEBUG] [Thread-21188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:27:26.356 [INFO] [Thread-21188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:27:26.364 [DEBUG] [Thread-21188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:27:26.364 [DEBUG] [Thread-21188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:27:26.364 [DEBUG] [Thread-21188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:27:26.364 [DEBUG] [Thread-21188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:26.364 [DEBUG] [Thread-21188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:26.364 [DEBUG] [Thread-21188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] client lang: <none>
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] server lang: <none>
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] kex follows: False
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:27:26.365 [DEBUG] [Thread-21188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:27:26.366 [DEBUG] [Thread-21188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:27:26.366 [DEBUG] [Thread-21188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:27:26.366 [DEBUG] [Thread-21188] [transport.py] [_log()] Compression: none
2025-12-26T00:27:26.367 [DEBUG] [Thread-21188] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:27:26.424 [DEBUG] [Thread-21188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:27:26.424 [DEBUG] [Thread-21188] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:27:26.425 [DEBUG] [Thread-21188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:27:26.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:27:26.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:27:26.479 [DEBUG] [Thread-21188] [transport.py] [_log()] userauth is OK
2025-12-26T00:27:26.480 [DEBUG] [Thread-21188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:27:26.480 [DEBUG] [Thread-21188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:27:26.480 [DEBUG] [Thread-21188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:27:26.480 [DEBUG] [Thread-21188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:27:26.500 [INFO] [Thread-21188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:27:26.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-26T00:27:26.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:27:27.309 [DEBUG] [Thread-21188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:27:27.309 [DEBUG] [Thread-21188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:27:27.358 [DEBUG] [Thread-21188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:27:27.358 [DEBUG] [Thread-21188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:27:27.367 [DEBUG] [Thread-21188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:27:27.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:27:27.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-26T00:27:27.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-26T00:27:27.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:27:27.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:27:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:27:27.402 [DEBUG] [Thread-21188] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:27:30.580 [DEBUG] [Thread-21190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:38.303 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:38.869 [DEBUG] [Thread-21191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:41.424 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:45.634 [DEBUG] [Thread-21192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:46.466 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:51.841 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:27:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:27:57.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:27:57.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-26T00:27:58.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 27, 49), 2.72, 83.44, 0.0, 15.0, 12.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:27:58.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:27:49
2025-12-26T00:27:58.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:27:58.458 [DEBUG] [Thread-21193] [transport.py] [_log()] starting thread (client mode): 0xb957ab30
2025-12-26T00:27:58.458 [DEBUG] [Thread-21193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:27:58.478 [DEBUG] [Thread-21193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:27:58.478 [INFO] [Thread-21193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] client lang: <none>
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] server lang: <none>
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] kex follows: False
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:27:58.481 [DEBUG] [Thread-21193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:27:58.482 [DEBUG] [Thread-21193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:27:58.482 [DEBUG] [Thread-21193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:27:58.482 [DEBUG] [Thread-21193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:27:58.482 [DEBUG] [Thread-21193] [transport.py] [_log()] Compression: none
2025-12-26T00:27:58.482 [DEBUG] [Thread-21193] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:27:58.498 [DEBUG] [Thread-21193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:27:58.498 [DEBUG] [Thread-21193] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:27:58.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:27:58.499 [DEBUG] [Thread-21193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:27:58.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:27:58.500 [DEBUG] [Thread-21193] [transport.py] [_log()] userauth is OK
2025-12-26T00:27:58.501 [DEBUG] [Thread-21193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:27:58.501 [DEBUG] [Thread-21193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:27:58.501 [DEBUG] [Thread-21193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:27:58.501 [DEBUG] [Thread-21193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:27:58.521 [INFO] [Thread-21193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:27:58.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:27:59.191 [DEBUG] [Thread-21193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:27:59.191 [DEBUG] [Thread-21193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:27:59.192 [DEBUG] [Thread-21193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:27:59.232 [DEBUG] [Thread-21193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:27:59.232 [DEBUG] [Thread-21193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:27:59.236 [DEBUG] [Thread-21193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:27:59.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:27:59.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:27:59.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:27:59.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:27:59.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:27:59.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:27:59.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:27:59.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:27:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:27:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.935478 -999.00  +13.10   9.40     85  +10.70 1 1 1 2 1     0    0 2.09 -17.85 ZNESW 11.2 9.4 199.3 13.8 13.9 -22.6 13.8 -22.4 13.6 -20.6 13.9 -21.7
2025-12-26T00:27:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:27:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:27:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.935478
2025-12-26T00:27:59.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:27:59.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:27:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:27:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:27:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:27:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:27:49', tmtdew=2.72, humidity=83.44, cloud=0.0, wind=15.0, temperature=12.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:27:50', seeing=1.2, atlas_timestamp='2025-12-25T22:27:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:23:00')
2025-12-26T00:27:59.261 [DEBUG] [Thread-21193] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:27:59.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-26T00:27:59.351 [DEBUG] [Thread-21196] [transport.py] [_log()] starting thread (client mode): 0xb6b63820
2025-12-26T00:27:59.352 [DEBUG] [Thread-21196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:27:59.366 [DEBUG] [Thread-21196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:27:59.366 [INFO] [Thread-21196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:27:59.373 [DEBUG] [Thread-21196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:27:59.373 [DEBUG] [Thread-21196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:27:59.373 [DEBUG] [Thread-21196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] client lang: <none>
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] server lang: <none>
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] kex follows: False
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] Compression: none
2025-12-26T00:27:59.374 [DEBUG] [Thread-21196] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:27:59.432 [DEBUG] [Thread-21196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:27:59.432 [DEBUG] [Thread-21196] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:27:59.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:27:59.433 [DEBUG] [Thread-21196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:27:59.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:27:59.488 [DEBUG] [Thread-21196] [transport.py] [_log()] userauth is OK
2025-12-26T00:27:59.489 [DEBUG] [Thread-21196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:27:59.489 [DEBUG] [Thread-21196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:27:59.489 [DEBUG] [Thread-21196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:27:59.489 [DEBUG] [Thread-21196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:27:59.507 [INFO] [Thread-21196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:27:59.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-26T00:27:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:28:00.302 [DEBUG] [Thread-21196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:28:00.302 [DEBUG] [Thread-21196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:28:00.350 [DEBUG] [Thread-21196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:28:00.350 [DEBUG] [Thread-21196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:28:00.359 [DEBUG] [Thread-21196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:28:00.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:28:00.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:28:00.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-26T00:28:00.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:28:00.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:28:00.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:28:00.401 [DEBUG] [Thread-21196] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:28:00.670 [DEBUG] [Thread-21198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:11.446 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:15.720 [DEBUG] [Thread-21199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:15.842 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:23.454 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:23.455 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:30.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:28:30.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:28:30.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:28:30.747 [DEBUG] [Thread-21200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 28, 21), 2.71, 83.47, 0.0, 15.77, 12.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:28:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:28:21
2025-12-26T00:28:31.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:28:31.394 [DEBUG] [Thread-21201] [transport.py] [_log()] starting thread (client mode): 0xb9578be0
2025-12-26T00:28:31.394 [DEBUG] [Thread-21201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:28:31.414 [DEBUG] [Thread-21201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:28:31.415 [INFO] [Thread-21201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:28:31.416 [DEBUG] [Thread-21201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:28:31.416 [DEBUG] [Thread-21201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:28:31.416 [DEBUG] [Thread-21201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:28:31.416 [DEBUG] [Thread-21201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:28:31.416 [DEBUG] [Thread-21201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] client lang: <none>
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] server lang: <none>
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] kex follows: False
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] Compression: none
2025-12-26T00:28:31.417 [DEBUG] [Thread-21201] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:28:31.428 [DEBUG] [Thread-21201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:28:31.428 [DEBUG] [Thread-21201] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:28:31.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:28:31.430 [DEBUG] [Thread-21201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:28:31.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:28:31.432 [DEBUG] [Thread-21201] [transport.py] [_log()] userauth is OK
2025-12-26T00:28:31.432 [DEBUG] [Thread-21201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:28:31.432 [DEBUG] [Thread-21201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:28:31.433 [DEBUG] [Thread-21201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:28:31.433 [DEBUG] [Thread-21201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:28:31.460 [INFO] [Thread-21201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:28:31.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:28:32.170 [DEBUG] [Thread-21201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:28:32.170 [DEBUG] [Thread-21201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:28:32.171 [DEBUG] [Thread-21201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:28:32.211 [DEBUG] [Thread-21201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:28:32.211 [DEBUG] [Thread-21201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:28:32.215 [DEBUG] [Thread-21201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:28:32.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:28:32.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:28:32.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:28:32.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:28:32.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:28:32.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:28:32.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:28:32.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:28:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:28:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.935825 -999.00  +13.10  13.31     85  +10.70 1 1 1 2 1     0    0 2.10 -15.45 ZNESW 14.1 13.3 195.2 16.7 13.9 -22.5 13.8 -22.3 13.6 -20.5 13.9 -21.8
2025-12-26T00:28:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:28:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:28:32.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.935825
2025-12-26T00:28:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:28:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:28:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:28:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:28:32.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:28:32.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:28:21', tmtdew=2.71, humidity=83.47, cloud=0.0, wind=15.77, temperature=12.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:28:22', seeing=1.29, atlas_timestamp='2025-12-25T22:27:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:27:00')
2025-12-26T00:28:32.242 [DEBUG] [Thread-21201] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:28:32.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-26T00:28:32.331 [DEBUG] [Thread-21204] [transport.py] [_log()] starting thread (client mode): 0xb957afb0
2025-12-26T00:28:32.331 [DEBUG] [Thread-21204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:28:32.346 [DEBUG] [Thread-21204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:28:32.346 [INFO] [Thread-21204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:28:32.353 [DEBUG] [Thread-21204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:28:32.354 [DEBUG] [Thread-21204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] client lang: <none>
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] server lang: <none>
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] kex follows: False
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:28:32.355 [DEBUG] [Thread-21204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:28:32.356 [DEBUG] [Thread-21204] [transport.py] [_log()] Compression: none
2025-12-26T00:28:32.356 [DEBUG] [Thread-21204] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:28:32.415 [DEBUG] [Thread-21204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:28:32.415 [DEBUG] [Thread-21204] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:28:32.415 [DEBUG] [Thread-21204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:28:32.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:28:32.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:28:32.472 [DEBUG] [Thread-21204] [transport.py] [_log()] userauth is OK
2025-12-26T00:28:32.473 [DEBUG] [Thread-21204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:28:32.473 [DEBUG] [Thread-21204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:28:32.473 [DEBUG] [Thread-21204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:28:32.473 [DEBUG] [Thread-21204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:28:32.495 [INFO] [Thread-21204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:28:32.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-26T00:28:32.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:28:33.286 [DEBUG] [Thread-21204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:28:33.286 [DEBUG] [Thread-21204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:28:33.334 [DEBUG] [Thread-21204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:28:33.335 [DEBUG] [Thread-21204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:28:33.344 [DEBUG] [Thread-21204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:28:33.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:28:33.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-26T00:28:33.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-26T00:28:33.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:28:33.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:28:33.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:28:33.381 [DEBUG] [Thread-21204] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:28:35.292 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:38.926 [DEBUG] [Thread-21206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:39.701 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:45.778 [DEBUG] [Thread-21207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:46.629 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:28:51.018 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:00.822 [DEBUG] [Thread-21208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:29:03.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:29:03.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:29:04.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 28, 53), 2.71, 83.47, 0.0, 15.65, 12.93, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:29:04.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:28:53
2025-12-26T00:29:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:29:04.347 [DEBUG] [Thread-21209] [transport.py] [_log()] starting thread (client mode): 0xb9578ee0
2025-12-26T00:29:04.347 [DEBUG] [Thread-21209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:29:04.368 [DEBUG] [Thread-21209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:29:04.368 [INFO] [Thread-21209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:29:04.371 [DEBUG] [Thread-21209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:29:04.371 [DEBUG] [Thread-21209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] client lang: <none>
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] server lang: <none>
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] kex follows: False
2025-12-26T00:29:04.372 [DEBUG] [Thread-21209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:29:04.373 [DEBUG] [Thread-21209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:29:04.373 [DEBUG] [Thread-21209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:29:04.373 [DEBUG] [Thread-21209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:29:04.373 [DEBUG] [Thread-21209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:29:04.373 [DEBUG] [Thread-21209] [transport.py] [_log()] Compression: none
2025-12-26T00:29:04.373 [DEBUG] [Thread-21209] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:29:04.395 [DEBUG] [Thread-21209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:29:04.395 [DEBUG] [Thread-21209] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:29:04.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:29:04.396 [DEBUG] [Thread-21209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:29:04.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:29:04.398 [DEBUG] [Thread-21209] [transport.py] [_log()] userauth is OK
2025-12-26T00:29:04.399 [DEBUG] [Thread-21209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:29:04.399 [DEBUG] [Thread-21209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:29:04.399 [DEBUG] [Thread-21209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:29:04.399 [DEBUG] [Thread-21209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:29:04.424 [INFO] [Thread-21209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:29:04.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:29:05.078 [DEBUG] [Thread-21209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:29:05.079 [DEBUG] [Thread-21209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:29:05.080 [DEBUG] [Thread-21209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:29:05.120 [DEBUG] [Thread-21209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:29:05.120 [DEBUG] [Thread-21209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:29:05.123 [DEBUG] [Thread-21209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:29:05.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:29:05.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:29:05.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:29:05.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:29:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:29:05.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:29:05.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:29:05.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:29:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:29:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.936520 -999.00  +13.10  13.44     85  +10.70 1 1 1 2 1     0    0 2.09 -16.26 ZNESW 14.0 13.4 189.8 16.2 13.8 -22.6 13.7 -22.4 13.6 -20.5 13.8 -21.5
2025-12-26T00:29:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:29:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:29:05.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.936520
2025-12-26T00:29:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:29:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:29:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:29:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:29:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:29:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:28:53', tmtdew=2.71, humidity=83.47, cloud=0.0, wind=15.65, temperature=12.93, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:28:54', seeing=1.55, atlas_timestamp='2025-12-25T22:28:35.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:27:00')
2025-12-26T00:29:05.151 [DEBUG] [Thread-21209] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:29:05.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:29:05.245 [DEBUG] [Thread-21212] [transport.py] [_log()] starting thread (client mode): 0xb6b62020
2025-12-26T00:29:05.245 [DEBUG] [Thread-21212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:29:05.259 [DEBUG] [Thread-21212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:29:05.259 [INFO] [Thread-21212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] client lang: <none>
2025-12-26T00:29:05.267 [DEBUG] [Thread-21212] [transport.py] [_log()] server lang: <none>
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] kex follows: False
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] Compression: none
2025-12-26T00:29:05.268 [DEBUG] [Thread-21212] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:29:05.328 [DEBUG] [Thread-21212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:29:05.328 [DEBUG] [Thread-21212] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:29:05.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:29:05.329 [DEBUG] [Thread-21212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:29:05.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:29:05.384 [DEBUG] [Thread-21212] [transport.py] [_log()] userauth is OK
2025-12-26T00:29:05.385 [DEBUG] [Thread-21212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:29:05.385 [DEBUG] [Thread-21212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:29:05.385 [DEBUG] [Thread-21212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:29:05.385 [DEBUG] [Thread-21212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:29:05.405 [INFO] [Thread-21212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:29:05.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-26T00:29:05.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:29:06.211 [DEBUG] [Thread-21212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:29:06.212 [DEBUG] [Thread-21212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:29:06.260 [DEBUG] [Thread-21212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:29:06.260 [DEBUG] [Thread-21212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:29:06.269 [DEBUG] [Thread-21212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:29:06.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:29:06.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-26T00:29:06.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:29:06.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:29:06.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:29:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:29:06.306 [DEBUG] [Thread-21212] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:29:15.861 [DEBUG] [Thread-21214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:23.655 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:23.657 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:30.909 [DEBUG] [Thread-21215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:29:36.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:29:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:29:37.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 29, 25), 2.7, 83.51, 0.0, 15.55, 12.89, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:29:37.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:29:25
2025-12-26T00:29:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:29:37.318 [DEBUG] [Thread-21216] [transport.py] [_log()] starting thread (client mode): 0xb6b63610
2025-12-26T00:29:37.318 [DEBUG] [Thread-21216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:29:37.333 [DEBUG] [Thread-21216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:29:37.333 [INFO] [Thread-21216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:29:37.336 [DEBUG] [Thread-21216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:29:37.336 [DEBUG] [Thread-21216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:29:37.336 [DEBUG] [Thread-21216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] client lang: <none>
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] server lang: <none>
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] kex follows: False
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] Compression: none
2025-12-26T00:29:37.337 [DEBUG] [Thread-21216] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:29:37.353 [DEBUG] [Thread-21216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:29:37.354 [DEBUG] [Thread-21216] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:29:37.354 [DEBUG] [Thread-21216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:29:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:29:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:29:37.355 [DEBUG] [Thread-21216] [transport.py] [_log()] userauth is OK
2025-12-26T00:29:37.355 [DEBUG] [Thread-21216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:29:37.355 [DEBUG] [Thread-21216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:29:37.355 [DEBUG] [Thread-21216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:29:37.355 [DEBUG] [Thread-21216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:29:37.370 [INFO] [Thread-21216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:29:37.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:29:38.188 [DEBUG] [Thread-21216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:29:38.189 [DEBUG] [Thread-21216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:29:38.189 [DEBUG] [Thread-21216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:29:38.230 [DEBUG] [Thread-21216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:29:38.230 [DEBUG] [Thread-21216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:29:38.233 [DEBUG] [Thread-21216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:29:38.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:29:38.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:29:38.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:29:38.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:29:38.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:29:38.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:29:38.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:29:38.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:29:38.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:29:38.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.936867 -999.00  +13.10  14.90     85  +10.70 1 1 1 2 1     0    0 2.08 -16.35 ZNESW 12.7 14.9 196.0 17.8 13.9 -22.6 13.7 -22.3 13.6 -20.6 13.8 -21.7
2025-12-26T00:29:38.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:29:38.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:29:38.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.936867
2025-12-26T00:29:38.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:29:38.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:29:38.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:29:38.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:29:38.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:29:38.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:29:25', tmtdew=2.7, humidity=83.51, cloud=0.0, wind=15.55, temperature=12.89, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:29:26', seeing=1.11, atlas_timestamp='2025-12-25T22:29:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:27:00')
2025-12-26T00:29:38.259 [DEBUG] [Thread-21216] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:29:38.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-26T00:29:38.359 [DEBUG] [Thread-21219] [transport.py] [_log()] starting thread (client mode): 0xb6b62aa0
2025-12-26T00:29:38.359 [DEBUG] [Thread-21219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:29:38.373 [DEBUG] [Thread-21219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:29:38.374 [INFO] [Thread-21219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:29:38.381 [DEBUG] [Thread-21219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] client lang: <none>
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] server lang: <none>
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] kex follows: False
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] Compression: none
2025-12-26T00:29:38.382 [DEBUG] [Thread-21219] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:29:38.439 [DEBUG] [Thread-21219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:29:38.439 [DEBUG] [Thread-21219] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:29:38.439 [DEBUG] [Thread-21219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:29:38.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:29:38.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:29:38.495 [DEBUG] [Thread-21219] [transport.py] [_log()] userauth is OK
2025-12-26T00:29:38.495 [DEBUG] [Thread-21219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:29:38.495 [DEBUG] [Thread-21219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:29:38.496 [DEBUG] [Thread-21219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:29:38.496 [DEBUG] [Thread-21219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:29:38.514 [INFO] [Thread-21219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:29:38.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-26T00:29:38.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:29:38.994 [DEBUG] [Thread-21221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:29:39.368 [DEBUG] [Thread-21219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:29:39.368 [DEBUG] [Thread-21219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:29:39.416 [DEBUG] [Thread-21219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:29:39.416 [DEBUG] [Thread-21219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:29:39.425 [DEBUG] [Thread-21219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:29:39.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:29:39.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-26T00:29:39.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-26T00:29:39.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:29:39.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:29:39.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:29:39.459 [DEBUG] [Thread-21219] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:29:45.938 [DEBUG] [Thread-21222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:00.088 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:01.000 [DEBUG] [Thread-21223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:04.210 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:09.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:30:09.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:30:09.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-26T00:30:10.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 29, 57), 2.69, 83.61, 0.0, 19.22, 12.94, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:30:10.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:29:57
2025-12-26T00:30:10.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:30:10.468 [DEBUG] [Thread-21224] [transport.py] [_log()] starting thread (client mode): 0xb957b100
2025-12-26T00:30:10.468 [DEBUG] [Thread-21224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:30:10.489 [DEBUG] [Thread-21224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:30:10.489 [INFO] [Thread-21224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] client lang: <none>
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] server lang: <none>
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] kex follows: False
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:30:10.492 [DEBUG] [Thread-21224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:30:10.493 [DEBUG] [Thread-21224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:30:10.493 [DEBUG] [Thread-21224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:30:10.493 [DEBUG] [Thread-21224] [transport.py] [_log()] Compression: none
2025-12-26T00:30:10.493 [DEBUG] [Thread-21224] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:30:10.500 [DEBUG] [Thread-21224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:30:10.500 [DEBUG] [Thread-21224] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:30:10.500 [DEBUG] [Thread-21224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:30:10.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:30:10.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:30:10.501 [DEBUG] [Thread-21224] [transport.py] [_log()] userauth is OK
2025-12-26T00:30:10.501 [DEBUG] [Thread-21224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:30:10.501 [DEBUG] [Thread-21224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:30:10.501 [DEBUG] [Thread-21224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:30:10.501 [DEBUG] [Thread-21224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:30:10.520 [INFO] [Thread-21224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:30:10.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:30:16.029 [DEBUG] [Thread-21226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:16.132 [DEBUG] [Thread-21224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:30:16.132 [DEBUG] [Thread-21224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:30:16.132 [DEBUG] [Thread-21224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:30:16.173 [DEBUG] [Thread-21224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:30:16.174 [DEBUG] [Thread-21224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:30:16.176 [DEBUG] [Thread-21224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:30:16.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:30:16.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:30:16.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:30:16.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:30:16.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:30:16.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:30:16.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:30:16.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.937214 -999.00  +13.10  14.18     85  +10.70 1 1 1 2 1     0    0 2.08 -16.03 ZNESW 13.5 14.2 192.0 17.6 13.9 -22.7 13.7 -22.3 13.6 -20.6 13.8 -21.7
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.937214
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:30:16.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:29:57', tmtdew=2.69, humidity=83.61, cloud=0.0, wind=19.22, temperature=12.94, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:29:58', seeing=1.22, atlas_timestamp='2025-12-25T22:29:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:27:00')
2025-12-26T00:30:16.298 [DEBUG] [Thread-21224] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:30:16.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-26T00:30:16.401 [DEBUG] [Thread-21228] [transport.py] [_log()] starting thread (client mode): 0xb6b29c60
2025-12-26T00:30:16.401 [DEBUG] [Thread-21228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:30:16.416 [DEBUG] [Thread-21228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:30:16.416 [INFO] [Thread-21228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:30:16.423 [DEBUG] [Thread-21228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] client lang: <none>
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] server lang: <none>
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] kex follows: False
2025-12-26T00:30:16.424 [DEBUG] [Thread-21228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:30:16.425 [DEBUG] [Thread-21228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:30:16.425 [DEBUG] [Thread-21228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:30:16.425 [DEBUG] [Thread-21228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:30:16.425 [DEBUG] [Thread-21228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:30:16.425 [DEBUG] [Thread-21228] [transport.py] [_log()] Compression: none
2025-12-26T00:30:16.425 [DEBUG] [Thread-21228] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:30:16.480 [DEBUG] [Thread-21228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:30:16.481 [DEBUG] [Thread-21228] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:30:16.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:30:16.482 [DEBUG] [Thread-21228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:30:16.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:30:16.536 [DEBUG] [Thread-21228] [transport.py] [_log()] userauth is OK
2025-12-26T00:30:16.537 [DEBUG] [Thread-21228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:30:16.537 [DEBUG] [Thread-21228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:30:16.537 [DEBUG] [Thread-21228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:30:16.537 [DEBUG] [Thread-21228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:30:16.555 [INFO] [Thread-21228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:30:16.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-26T00:30:16.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:30:17.430 [DEBUG] [Thread-21228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:30:17.430 [DEBUG] [Thread-21228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:30:17.478 [DEBUG] [Thread-21228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:30:17.478 [DEBUG] [Thread-21228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:30:17.487 [DEBUG] [Thread-21228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:30:17.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:30:17.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-26T00:30:17.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-26T00:30:17.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:30:17.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:30:17.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:30:17.523 [DEBUG] [Thread-21228] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:30:23.860 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:23.862 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:31.063 [DEBUG] [Thread-21230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:39.059 [DEBUG] [Thread-21231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:46.116 [DEBUG] [Thread-21232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:30:47.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:30:47.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:30: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-26T00:30:48.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 30, 29), 2.68, 83.64, 0.0, 17.84, 12.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:30:48.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:30:29
2025-12-26T00:30:48.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:30:48.519 [DEBUG] [Thread-21233] [transport.py] [_log()] starting thread (client mode): 0xb6b61ea0
2025-12-26T00:30:48.519 [DEBUG] [Thread-21233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:30:48.540 [DEBUG] [Thread-21233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:30:48.541 [INFO] [Thread-21233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] client lang: <none>
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] server lang: <none>
2025-12-26T00:30:48.544 [DEBUG] [Thread-21233] [transport.py] [_log()] kex follows: False
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] Compression: none
2025-12-26T00:30:48.545 [DEBUG] [Thread-21233] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:30:48.562 [DEBUG] [Thread-21233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:30:48.563 [DEBUG] [Thread-21233] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:30:48.563 [DEBUG] [Thread-21233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:30:48.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:30:48.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:30:48.565 [DEBUG] [Thread-21233] [transport.py] [_log()] userauth is OK
2025-12-26T00:30:48.565 [DEBUG] [Thread-21233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:30:48.565 [DEBUG] [Thread-21233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:30:48.565 [DEBUG] [Thread-21233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:30:48.565 [DEBUG] [Thread-21233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:30:48.588 [INFO] [Thread-21233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:30:48.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:30:49.578 [DEBUG] [Thread-21233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:30:49.579 [DEBUG] [Thread-21233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:30:49.579 [DEBUG] [Thread-21233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:30:49.619 [DEBUG] [Thread-21233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:30:49.620 [DEBUG] [Thread-21233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:30:49.622 [DEBUG] [Thread-21233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:30:49.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:30:49.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:30:49.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:30:49.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:30:49.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:30:49.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:30:49.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:30:49.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:30:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:30:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.937561 -999.00  +13.00  10.89     86  +10.70 1 1 1 2 1     0    0 1.98 -18.23 ZNESW 12.6 10.9 200.0 19.7 13.8 -22.7 13.7 -22.5 13.5 -20.6 13.8 -21.8
2025-12-26T00:30:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:30:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:30:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.937561
2025-12-26T00:30:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:30:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:30:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:30:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:30:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:30:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:30:29', tmtdew=2.68, humidity=83.64, cloud=0.0, wind=17.84, temperature=12.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:30:30', seeing=1.27, atlas_timestamp='2025-12-25T22:30:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.11025000000000063, 0.292250000000001, 0.15700000000000003, 0.05250000000000021, 0.15625, 0.23599999999999888, 0.3182500000000008, 0.24549999999999983, 0.06600000000000072, 0.12875000000000014, 0.09849999999999959, 0.15000000000000036, 0.14424999999999955, 0.19699999999999918, 0.2414999999999985, 0.15525000000000055, 0.13349999999999973, 0.09899999999999842, 0.166249999999998, 0.2159999999999993, 0.270249999999999, 0.29125000000000156, 0.2287499999999998, 0.1659999999999986, 0.19950000000000045, 0.1822499999999998, 0.23150000000000048, 0.2995000000000001, 0.29850000000000065, 0.2760000000000016, 0.32700000000000085, 0.22424999999999962], zp_timestamp='2025-12-25T22:27:00')
2025-12-26T00:30:49.642 [DEBUG] [Thread-21233] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:30:49.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-26T00:30:49.724 [DEBUG] [Thread-21236] [transport.py] [_log()] starting thread (client mode): 0xb6b60f40
2025-12-26T00:30:49.724 [DEBUG] [Thread-21236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:30:49.742 [DEBUG] [Thread-21236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:30:49.742 [INFO] [Thread-21236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] client lang: <none>
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] server lang: <none>
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] kex follows: False
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:30:49.749 [DEBUG] [Thread-21236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:30:49.750 [DEBUG] [Thread-21236] [transport.py] [_log()] Compression: none
2025-12-26T00:30:49.750 [DEBUG] [Thread-21236] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:30:49.806 [DEBUG] [Thread-21236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:30:49.807 [DEBUG] [Thread-21236] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:30:49.807 [DEBUG] [Thread-21236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:30:49.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:30:49.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:30:49.864 [DEBUG] [Thread-21236] [transport.py] [_log()] userauth is OK
2025-12-26T00:30:49.864 [DEBUG] [Thread-21236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:30:49.864 [DEBUG] [Thread-21236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:30:49.864 [DEBUG] [Thread-21236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:30:49.864 [DEBUG] [Thread-21236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:30:49.878 [INFO] [Thread-21236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:30:49.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-26T00:30:49.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:30:50.716 [DEBUG] [Thread-21236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:30:50.716 [DEBUG] [Thread-21236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:30:50.763 [DEBUG] [Thread-21236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:30:50.763 [DEBUG] [Thread-21236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:30:50.771 [DEBUG] [Thread-21236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:30:50.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:30:50.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-26T00:30:50.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:30:50.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:30:50.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:30:50.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:30:50.804 [DEBUG] [Thread-21236] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:31:01.149 [DEBUG] [Thread-21238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:16.200 [DEBUG] [Thread-21239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:20.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:31:20.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:31:20.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-26T00:31:21.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 31, 2), 2.69, 83.59, 0.0, 19.06, 12.93, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:31:21.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:31:02
2025-12-26T00:31:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:31:21.790 [DEBUG] [Thread-21240] [transport.py] [_log()] starting thread (client mode): 0xb6b62a10
2025-12-26T00:31:21.790 [DEBUG] [Thread-21240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:31:21.811 [DEBUG] [Thread-21240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:31:21.811 [INFO] [Thread-21240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:21.814 [DEBUG] [Thread-21240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] client lang: <none>
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] server lang: <none>
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] kex follows: False
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] Compression: none
2025-12-26T00:31:21.815 [DEBUG] [Thread-21240] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:31:21.832 [DEBUG] [Thread-21240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:31:21.832 [DEBUG] [Thread-21240] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:31:21.833 [DEBUG] [Thread-21240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:31:21.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:31:21.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:31:21.835 [DEBUG] [Thread-21240] [transport.py] [_log()] userauth is OK
2025-12-26T00:31:21.835 [DEBUG] [Thread-21240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:31:21.835 [DEBUG] [Thread-21240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:31:21.835 [DEBUG] [Thread-21240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:31:21.835 [DEBUG] [Thread-21240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:31:21.852 [INFO] [Thread-21240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:31:21.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:31:22.604 [DEBUG] [Thread-21240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:31:22.605 [DEBUG] [Thread-21240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:31:22.605 [DEBUG] [Thread-21240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:31:22.646 [DEBUG] [Thread-21240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:31:22.646 [DEBUG] [Thread-21240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:31:22.650 [DEBUG] [Thread-21240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:31:22.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:31:22.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:31:22.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:31:22.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:31:22.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:31:22.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:31:22.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:31:22.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:31:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:31:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.937909 -999.00  +13.00  15.26     86  +10.70 1 1 1 2 1     0    0 1.98 -19.77 ZNESW 19.1 15.3 201.4 17.4 13.8 -22.7 13.7 -22.7 13.5 -20.6 13.8 -21.7
2025-12-26T00:31:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:31:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:31:22.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.937909
2025-12-26T00:31:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:31:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:31:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:31:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:31:22.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:31:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:31:02', tmtdew=2.69, humidity=83.59, cloud=0.0, wind=19.06, temperature=12.93, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:31:02', seeing=1.27, atlas_timestamp='2025-12-25T22:30:35.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:30:00')
2025-12-26T00:31:22.678 [DEBUG] [Thread-21240] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:31:22.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-26T00:31:22.771 [DEBUG] [Thread-21243] [transport.py] [_log()] starting thread (client mode): 0xb9559d80
2025-12-26T00:31:22.771 [DEBUG] [Thread-21243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:31:22.788 [DEBUG] [Thread-21243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:31:22.788 [INFO] [Thread-21243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:31:22.795 [DEBUG] [Thread-21243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:22.796 [DEBUG] [Thread-21243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] client lang: <none>
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] server lang: <none>
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] kex follows: False
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:31:22.797 [DEBUG] [Thread-21243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:31:22.798 [DEBUG] [Thread-21243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:31:22.798 [DEBUG] [Thread-21243] [transport.py] [_log()] Compression: none
2025-12-26T00:31:22.798 [DEBUG] [Thread-21243] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:31:22.853 [DEBUG] [Thread-21243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:31:22.853 [DEBUG] [Thread-21243] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:31:22.854 [DEBUG] [Thread-21243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:31:22.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:31:22.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:31:22.908 [DEBUG] [Thread-21243] [transport.py] [_log()] userauth is OK
2025-12-26T00:31:22.908 [DEBUG] [Thread-21243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:31:22.908 [DEBUG] [Thread-21243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:31:22.909 [DEBUG] [Thread-21243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:31:22.909 [DEBUG] [Thread-21243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:31:22.928 [INFO] [Thread-21243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:31:22.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-26T00:31:22.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:31:23.751 [DEBUG] [Thread-21243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:31:23.752 [DEBUG] [Thread-21243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:31:23.801 [DEBUG] [Thread-21243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:31:23.801 [DEBUG] [Thread-21243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:31:23.810 [DEBUG] [Thread-21243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:31:23.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:31:23.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-26T00:31:23.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-26T00:31:23.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:31:23.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:31:23.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:31:23.847 [DEBUG] [Thread-21243] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:31:24.064 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:24.065 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:31.236 [DEBUG] [Thread-21245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:39.115 [DEBUG] [Thread-21246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:46.281 [DEBUG] [Thread-21247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:31:53.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:31:53.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:31:53.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-26T00:31:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 31, 34), 2.57, 84.19, 0.0, 14.75, 12.8, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:31:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:31:34
2025-12-26T00:31:54.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:31:54.836 [DEBUG] [Thread-21248] [transport.py] [_log()] starting thread (client mode): 0xb95b0ac0
2025-12-26T00:31:54.837 [DEBUG] [Thread-21248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:31:54.859 [DEBUG] [Thread-21248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:31:54.859 [INFO] [Thread-21248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] client lang: <none>
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] server lang: <none>
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] kex follows: False
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:31:54.863 [DEBUG] [Thread-21248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:31:54.864 [DEBUG] [Thread-21248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:31:54.864 [DEBUG] [Thread-21248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:31:54.864 [DEBUG] [Thread-21248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:31:54.864 [DEBUG] [Thread-21248] [transport.py] [_log()] Compression: none
2025-12-26T00:31:54.864 [DEBUG] [Thread-21248] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:31:54.880 [DEBUG] [Thread-21248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:31:54.881 [DEBUG] [Thread-21248] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:31:54.881 [DEBUG] [Thread-21248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:31:54.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:31:54.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:31:54.883 [DEBUG] [Thread-21248] [transport.py] [_log()] userauth is OK
2025-12-26T00:31:54.883 [DEBUG] [Thread-21248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:31:54.884 [DEBUG] [Thread-21248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:31:54.884 [DEBUG] [Thread-21248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:31:54.884 [DEBUG] [Thread-21248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:31:54.908 [INFO] [Thread-21248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:31:54.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:31:55.570 [DEBUG] [Thread-21248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:31:55.570 [DEBUG] [Thread-21248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:31:55.571 [DEBUG] [Thread-21248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:31:55.611 [DEBUG] [Thread-21248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:31:55.611 [DEBUG] [Thread-21248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:31:55.614 [DEBUG] [Thread-21248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:31:55.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:31:55.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:31:55.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:31:55.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:31:55.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:31:55.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:31:55.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:31:55.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.938603 -999.00  +12.90  11.84     86  +10.70 1 1 1 2 1     0    0 1.94 -20.02 ZNESW 15.3 11.8 199.8 17.5 13.8 -22.7 13.6 -22.3 13.5 -20.6 13.8 -21.7
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.938603
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:31:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:31:34', tmtdew=2.57, humidity=84.19, cloud=0.0, wind=14.75, temperature=12.8, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:31:34', seeing=1.4, atlas_timestamp='2025-12-25T22:31:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:30:00')
2025-12-26T00:31:55.638 [DEBUG] [Thread-21248] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:31:55.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-26T00:31:55.734 [DEBUG] [Thread-21251] [transport.py] [_log()] starting thread (client mode): 0xb6b617e0
2025-12-26T00:31:55.734 [DEBUG] [Thread-21251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:31:55.749 [DEBUG] [Thread-21251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:31:55.749 [INFO] [Thread-21251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:31:55.756 [DEBUG] [Thread-21251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:31:55.757 [DEBUG] [Thread-21251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] client lang: <none>
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] server lang: <none>
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] kex follows: False
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:31:55.758 [DEBUG] [Thread-21251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:31:55.759 [DEBUG] [Thread-21251] [transport.py] [_log()] Compression: none
2025-12-26T00:31:55.759 [DEBUG] [Thread-21251] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:31:55.816 [DEBUG] [Thread-21251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:31:55.816 [DEBUG] [Thread-21251] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:31:55.817 [DEBUG] [Thread-21251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:31:55.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:31:55.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:31:55.872 [DEBUG] [Thread-21251] [transport.py] [_log()] userauth is OK
2025-12-26T00:31:55.873 [DEBUG] [Thread-21251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:31:55.873 [DEBUG] [Thread-21251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:31:55.873 [DEBUG] [Thread-21251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:31:55.873 [DEBUG] [Thread-21251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:31:55.891 [INFO] [Thread-21251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:31:55.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-26T00:31:55.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:31:56.756 [DEBUG] [Thread-21251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:31:56.756 [DEBUG] [Thread-21251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:31:56.804 [DEBUG] [Thread-21251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:31:56.804 [DEBUG] [Thread-21251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:31:56.813 [DEBUG] [Thread-21251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:31:56.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:31:56.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')
2025-12-26T00:31:56.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:31:56.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:31:56.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:31:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:31:56.849 [DEBUG] [Thread-21251] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:32:01.314 [DEBUG] [Thread-21253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:16.352 [DEBUG] [Thread-21254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:24.267 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:24.268 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:26.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:32:26.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:32:26.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-26T00:32:27.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 32, 6), 2.55, 84.29, 0.0, 14.03, 12.81, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:32:27.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:32:06
2025-12-26T00:32:27.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:32:27.836 [DEBUG] [Thread-21255] [transport.py] [_log()] starting thread (client mode): 0xb9578400
2025-12-26T00:32:27.837 [DEBUG] [Thread-21255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:32:27.856 [DEBUG] [Thread-21255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:32:27.856 [INFO] [Thread-21255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:32:27.859 [DEBUG] [Thread-21255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] client lang: <none>
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] server lang: <none>
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] kex follows: False
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] Compression: none
2025-12-26T00:32:27.860 [DEBUG] [Thread-21255] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:32:27.876 [DEBUG] [Thread-21255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:32:27.877 [DEBUG] [Thread-21255] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:32:27.877 [DEBUG] [Thread-21255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:32:27.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:32:27.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:32:27.879 [DEBUG] [Thread-21255] [transport.py] [_log()] userauth is OK
2025-12-26T00:32:27.879 [DEBUG] [Thread-21255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:32:27.880 [DEBUG] [Thread-21255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:32:27.880 [DEBUG] [Thread-21255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:32:27.880 [DEBUG] [Thread-21255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:32:27.904 [INFO] [Thread-21255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:32:27.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:32:28.518 [DEBUG] [Thread-21255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:32:28.518 [DEBUG] [Thread-21255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:32:28.519 [DEBUG] [Thread-21255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:32:28.560 [DEBUG] [Thread-21255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:32:28.560 [DEBUG] [Thread-21255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:32:28.562 [DEBUG] [Thread-21255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:32:28.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:32:28.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:32:28.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:32:28.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:32:28.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:32:28.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:32:28.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:32:28.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:32:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:32:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.938950 -999.00  +12.90  13.15     86  +10.70 1 1 1 2 1     0    0 1.89 -21.33 ZNESW 9.1 13.2 202.4 16.6 13.7 -22.6 13.6 -22.1 13.4 -20.7 13.8 -21.8
2025-12-26T00:32:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:32:28.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:32:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.938950
2025-12-26T00:32:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:32:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:32:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:32:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:32:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:32:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:32:06', tmtdew=2.55, humidity=84.29, cloud=0.0, wind=14.03, temperature=12.81, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:32:06', seeing=1.4, atlas_timestamp='2025-12-25T22:32:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:30:00')
2025-12-26T00:32:28.580 [DEBUG] [Thread-21255] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:32:28.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-26T00:32:28.681 [DEBUG] [Thread-21258] [transport.py] [_log()] starting thread (client mode): 0xb95d5810
2025-12-26T00:32:28.681 [DEBUG] [Thread-21258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:32:28.696 [DEBUG] [Thread-21258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:32:28.696 [INFO] [Thread-21258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:32:28.703 [DEBUG] [Thread-21258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] client lang: <none>
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] server lang: <none>
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] kex follows: False
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] Compression: none
2025-12-26T00:32:28.704 [DEBUG] [Thread-21258] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:32:28.768 [DEBUG] [Thread-21258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:32:28.769 [DEBUG] [Thread-21258] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:32:28.769 [DEBUG] [Thread-21258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:32:28.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:32:28.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:32:28.824 [DEBUG] [Thread-21258] [transport.py] [_log()] userauth is OK
2025-12-26T00:32:28.825 [DEBUG] [Thread-21258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:32:28.825 [DEBUG] [Thread-21258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:32:28.825 [DEBUG] [Thread-21258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:32:28.825 [DEBUG] [Thread-21258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:32:28.846 [INFO] [Thread-21258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:32: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-26T00:32:28.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:32:29.668 [DEBUG] [Thread-21258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:32:29.669 [DEBUG] [Thread-21258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:32:29.717 [DEBUG] [Thread-21258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:32:29.717 [DEBUG] [Thread-21258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:32:29.726 [DEBUG] [Thread-21258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:32:29.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:32:29.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-26T00:32:29.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-26T00:32:29.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:32:29.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:32:29.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:32:29.765 [DEBUG] [Thread-21258] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:32:31.390 [DEBUG] [Thread-21260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:39.173 [DEBUG] [Thread-21261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:46.448 [DEBUG] [Thread-21262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:32:59.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:32:59.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:32: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-26T00:33:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 32, 38), 2.55, 84.32, 0.0, 13.04, 12.8, 0, 1, 2, 2, 0, 0),)
2025-12-26T00:33:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:32:38
2025-12-26T00:33:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:33:00.774 [DEBUG] [Thread-21263] [transport.py] [_log()] starting thread (client mode): 0xb955bf70
2025-12-26T00:33:00.774 [DEBUG] [Thread-21263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:33:00.794 [DEBUG] [Thread-21263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:33:00.794 [INFO] [Thread-21263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:33:00.797 [DEBUG] [Thread-21263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:33:00.797 [DEBUG] [Thread-21263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:33:00.797 [DEBUG] [Thread-21263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:33:00.797 [DEBUG] [Thread-21263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] client lang: <none>
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] server lang: <none>
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] kex follows: False
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] Compression: none
2025-12-26T00:33:00.798 [DEBUG] [Thread-21263] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:33:00.816 [DEBUG] [Thread-21263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:33:00.816 [DEBUG] [Thread-21263] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:33:00.817 [DEBUG] [Thread-21263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:33:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:33:00.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:33:00.819 [DEBUG] [Thread-21263] [transport.py] [_log()] userauth is OK
2025-12-26T00:33:00.819 [DEBUG] [Thread-21263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:33:00.819 [DEBUG] [Thread-21263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:33:00.819 [DEBUG] [Thread-21263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:33:00.819 [DEBUG] [Thread-21263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:33:00.855 [INFO] [Thread-21263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:33:00.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:33:01.481 [DEBUG] [Thread-21265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:33:01.487 [DEBUG] [Thread-21263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:33:01.487 [DEBUG] [Thread-21263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:33:01.488 [DEBUG] [Thread-21263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:33:01.528 [DEBUG] [Thread-21263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:33:01.528 [DEBUG] [Thread-21263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:33:01.532 [DEBUG] [Thread-21263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:33:01.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:33:01.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:33:01.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:33:01.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:33:01.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:33:01.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:33:01.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:33:01.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:33:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:33:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.939297 -999.00  +12.90  11.87     86  +10.60 1 1 1 2 1     0    0 1.80 -22.27 ZNESW 13.5 11.9 201.2 15.4 13.8 -22.7 13.6 -22.2 13.4 -20.5 13.8 -21.9
2025-12-26T00:33:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:33:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:33:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.939297
2025-12-26T00:33:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:33:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:33:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:33:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:33:01.558 [DEBUG] [Thread-21263] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:33:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:33:01.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:32:38', tmtdew=2.55, humidity=84.32, cloud=0.0, wind=13.04, temperature=12.8, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:32:38', seeing=1.2, atlas_timestamp='2025-12-25T22:32:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:30:00')
2025-12-26T00:33:01.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-26T00:33:01.651 [DEBUG] [Thread-21267] [transport.py] [_log()] starting thread (client mode): 0xb9558ee0
2025-12-26T00:33:01.651 [DEBUG] [Thread-21267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:33:01.665 [DEBUG] [Thread-21267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:33:01.665 [INFO] [Thread-21267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] client lang: <none>
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] server lang: <none>
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] kex follows: False
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:33:01.673 [DEBUG] [Thread-21267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:33:01.674 [DEBUG] [Thread-21267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:33:01.674 [DEBUG] [Thread-21267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:33:01.674 [DEBUG] [Thread-21267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:33:01.674 [DEBUG] [Thread-21267] [transport.py] [_log()] Compression: none
2025-12-26T00:33:01.674 [DEBUG] [Thread-21267] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:33:01.737 [DEBUG] [Thread-21267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:33:01.738 [DEBUG] [Thread-21267] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:33:01.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:33:01.739 [DEBUG] [Thread-21267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:33:01.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:33:01.797 [DEBUG] [Thread-21267] [transport.py] [_log()] userauth is OK
2025-12-26T00:33:01.797 [DEBUG] [Thread-21267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:33:01.798 [DEBUG] [Thread-21267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:33:01.798 [DEBUG] [Thread-21267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:33:01.798 [DEBUG] [Thread-21267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:33:01.815 [INFO] [Thread-21267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:33:01.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-26T00:33:01.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:33:02.662 [DEBUG] [Thread-21267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:33:02.662 [DEBUG] [Thread-21267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:33:02.710 [DEBUG] [Thread-21267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:33:02.710 [DEBUG] [Thread-21267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:33:02.721 [DEBUG] [Thread-21267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:33:02.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:33:02.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:33: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') -> 00000000
2025-12-26T00:33:02.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:33:02.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:33:02.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:33:02.758 [DEBUG] [Thread-21267] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:33:16.518 [DEBUG] [Thread-21269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:33:24.476 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:33:24.477 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:33:31.573 [DEBUG] [Thread-21270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:33:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:33:32.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:33: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-26T00:33:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 33, 10), 2.54, 84.34, 0.0, 14.72, 12.78, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:33:33.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:33:10
2025-12-26T00:33:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:33:33.760 [DEBUG] [Thread-21271] [transport.py] [_log()] starting thread (client mode): 0xb957bb50
2025-12-26T00:33:33.761 [DEBUG] [Thread-21271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:33:33.781 [DEBUG] [Thread-21271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:33:33.781 [INFO] [Thread-21271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:33:33.784 [DEBUG] [Thread-21271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:33:33.784 [DEBUG] [Thread-21271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:33:33.784 [DEBUG] [Thread-21271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:33:33.784 [DEBUG] [Thread-21271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] client lang: <none>
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] server lang: <none>
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] kex follows: False
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:33:33.785 [DEBUG] [Thread-21271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:33:33.786 [DEBUG] [Thread-21271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:33:33.786 [DEBUG] [Thread-21271] [transport.py] [_log()] Compression: none
2025-12-26T00:33:33.786 [DEBUG] [Thread-21271] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:33:33.804 [DEBUG] [Thread-21271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:33:33.804 [DEBUG] [Thread-21271] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:33:33.805 [DEBUG] [Thread-21271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:33:33.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:33:33.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:33:33.806 [DEBUG] [Thread-21271] [transport.py] [_log()] userauth is OK
2025-12-26T00:33:33.806 [DEBUG] [Thread-21271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:33:33.807 [DEBUG] [Thread-21271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:33:33.807 [DEBUG] [Thread-21271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:33:33.807 [DEBUG] [Thread-21271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:33:33.830 [INFO] [Thread-21271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:33:33.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:33:34.479 [DEBUG] [Thread-21271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:33:34.479 [DEBUG] [Thread-21271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:33:34.480 [DEBUG] [Thread-21271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:33:34.520 [DEBUG] [Thread-21271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:33:34.520 [DEBUG] [Thread-21271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:33:34.524 [DEBUG] [Thread-21271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:33:34.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:33:34.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:33:34.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:33:34.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:33:34.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:33:34.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:33:34.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:33:34.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:33:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:33:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.939645 -999.00  +12.90   8.24     86  +10.60 1 1 1 2 1     0    0 1.81 -23.09 ZNESW 11.2 8.2 190.1 17.8 13.7 -22.7 13.6 -22.2 13.4 -20.6 13.8 -21.8
2025-12-26T00:33:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:33:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:33:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.939645
2025-12-26T00:33:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:33:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:33:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:33:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:33:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:33:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:33:10', tmtdew=2.54, humidity=84.34, cloud=0.0, wind=14.72, temperature=12.78, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:33:10', seeing=1.2, atlas_timestamp='2025-12-25T22:33:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:30:00')
2025-12-26T00:33:34.550 [DEBUG] [Thread-21271] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:33:34.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-26T00:33:34.642 [DEBUG] [Thread-21274] [transport.py] [_log()] starting thread (client mode): 0xb95d4e50
2025-12-26T00:33:34.643 [DEBUG] [Thread-21274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:33:34.663 [DEBUG] [Thread-21274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:33:34.663 [INFO] [Thread-21274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:33:34.671 [DEBUG] [Thread-21274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:33:34.671 [DEBUG] [Thread-21274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:33:34.671 [DEBUG] [Thread-21274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:33:34.671 [DEBUG] [Thread-21274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] client lang: <none>
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] server lang: <none>
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] kex follows: False
2025-12-26T00:33:34.672 [DEBUG] [Thread-21274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:33:34.673 [DEBUG] [Thread-21274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:33:34.673 [DEBUG] [Thread-21274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:33:34.673 [DEBUG] [Thread-21274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:33:34.673 [DEBUG] [Thread-21274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:33:34.673 [DEBUG] [Thread-21274] [transport.py] [_log()] Compression: none
2025-12-26T00:33:34.673 [DEBUG] [Thread-21274] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:33:34.729 [DEBUG] [Thread-21274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:33:34.729 [DEBUG] [Thread-21274] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:33:34.730 [DEBUG] [Thread-21274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:33:34.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:33:34.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:33:34.785 [DEBUG] [Thread-21274] [transport.py] [_log()] userauth is OK
2025-12-26T00:33:34.785 [DEBUG] [Thread-21274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:33:34.785 [DEBUG] [Thread-21274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:33:34.785 [DEBUG] [Thread-21274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:33:34.785 [DEBUG] [Thread-21274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:33:34.804 [INFO] [Thread-21274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:33:34.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-26T00:33:34.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:33:35.626 [DEBUG] [Thread-21274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:33:35.626 [DEBUG] [Thread-21274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:33:35.674 [DEBUG] [Thread-21274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:33:35.674 [DEBUG] [Thread-21274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:33:35.683 [DEBUG] [Thread-21274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:33:35.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:33:35.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-26T00:33: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-26T00:33:35.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:33:35.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:33:35.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:33:35.716 [DEBUG] [Thread-21274] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:33:39.253 [DEBUG] [Thread-21276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:33:46.605 [DEBUG] [Thread-21277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:01.654 [DEBUG] [Thread-21278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:05.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:34:05.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:34:05.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:34:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 33, 42), 2.49, 84.37, 0.0, 16.34, 12.73, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:34:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:33:42
2025-12-26T00:34:06.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:34:06.732 [DEBUG] [Thread-21279] [transport.py] [_log()] starting thread (client mode): 0xb95d5120
2025-12-26T00:34:06.732 [DEBUG] [Thread-21279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:34:06.752 [DEBUG] [Thread-21279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:34:06.752 [INFO] [Thread-21279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] client lang: <none>
2025-12-26T00:34:06.755 [DEBUG] [Thread-21279] [transport.py] [_log()] server lang: <none>
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] kex follows: False
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] Compression: none
2025-12-26T00:34:06.756 [DEBUG] [Thread-21279] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:34:06.775 [DEBUG] [Thread-21279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:34:06.775 [DEBUG] [Thread-21279] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:34:06.776 [DEBUG] [Thread-21279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:34:06.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:34:06.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:34:06.777 [DEBUG] [Thread-21279] [transport.py] [_log()] userauth is OK
2025-12-26T00:34:06.777 [DEBUG] [Thread-21279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:34:06.777 [DEBUG] [Thread-21279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:34:06.777 [DEBUG] [Thread-21279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:34:06.777 [DEBUG] [Thread-21279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:34:06.796 [INFO] [Thread-21279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:34:06.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:34:07.464 [DEBUG] [Thread-21279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:34:07.464 [DEBUG] [Thread-21279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:34:07.464 [DEBUG] [Thread-21279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:34:07.505 [DEBUG] [Thread-21279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:34:07.505 [DEBUG] [Thread-21279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:34:07.507 [DEBUG] [Thread-21279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:34:07.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:34:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:34:07.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:34:07.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:34:07.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:34:07.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:34:07.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:34:07.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:34:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:34:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.939992 -999.00  +12.90  12.79     86  +10.60 1 1 1 2 1     0    0 1.80 -21.89 ZNESW 14.7 12.8 196.6 16.3 13.7 -22.7 13.6 -22.0 13.4 -20.6 13.7 -22.0
2025-12-26T00:34:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.939992
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:34:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:33:42', tmtdew=2.49, humidity=84.37, cloud=0.0, wind=16.34, temperature=12.73, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:33:43', seeing=1.27, atlas_timestamp='2025-12-25T22:33:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:30:00')
2025-12-26T00:34:07.526 [DEBUG] [Thread-21279] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:34:07.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:34:07.612 [DEBUG] [Thread-21282] [transport.py] [_log()] starting thread (client mode): 0xb95d70a0
2025-12-26T00:34:07.612 [DEBUG] [Thread-21282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:34:07.627 [DEBUG] [Thread-21282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:34:07.627 [INFO] [Thread-21282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:34:07.634 [DEBUG] [Thread-21282] [transport.py] [_log()] client lang: <none>
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] server lang: <none>
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] kex follows: False
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] Compression: none
2025-12-26T00:34:07.635 [DEBUG] [Thread-21282] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:34:07.691 [DEBUG] [Thread-21282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:34:07.691 [DEBUG] [Thread-21282] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:34:07.700 [DEBUG] [Thread-21282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:34:07.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:34:07.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:34:07.748 [DEBUG] [Thread-21282] [transport.py] [_log()] userauth is OK
2025-12-26T00:34:07.748 [DEBUG] [Thread-21282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:34:07.748 [DEBUG] [Thread-21282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:34:07.748 [DEBUG] [Thread-21282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:34:07.748 [DEBUG] [Thread-21282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:34:07.761 [INFO] [Thread-21282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:34:07.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-26T00:34:07.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:34:08.621 [DEBUG] [Thread-21282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:34:08.621 [DEBUG] [Thread-21282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:34:08.668 [DEBUG] [Thread-21282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:34:08.668 [DEBUG] [Thread-21282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:34:08.677 [DEBUG] [Thread-21282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:34:08.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:34: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-26T00:34: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-26T00:34:08.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:34:08.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:34:08.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:34:08.708 [DEBUG] [Thread-21282] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:34:16.684 [DEBUG] [Thread-21284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:24.687 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:24.688 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:31.735 [DEBUG] [Thread-21285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:38.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:34:38.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:34:38.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-26T00:34:39.323 [DEBUG] [Thread-21286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:34:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 34, 14), 2.49, 84.36, 0.0, 15.9, 12.68, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:34:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:34:14
2025-12-26T00:34:39.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:34:39.722 [DEBUG] [Thread-21287] [transport.py] [_log()] starting thread (client mode): 0xb95d48b0
2025-12-26T00:34:39.722 [DEBUG] [Thread-21287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:34:39.737 [DEBUG] [Thread-21287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:34:39.737 [INFO] [Thread-21287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:34:39.740 [DEBUG] [Thread-21287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:34:39.740 [DEBUG] [Thread-21287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] client lang: <none>
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] server lang: <none>
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] kex follows: False
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] Compression: none
2025-12-26T00:34:39.741 [DEBUG] [Thread-21287] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:34:39.759 [DEBUG] [Thread-21287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:34:39.760 [DEBUG] [Thread-21287] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:34:39.760 [DEBUG] [Thread-21287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:34:39.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:34:39.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:34:39.763 [DEBUG] [Thread-21287] [transport.py] [_log()] userauth is OK
2025-12-26T00:34:39.763 [DEBUG] [Thread-21287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:34:39.763 [DEBUG] [Thread-21287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:34:39.763 [DEBUG] [Thread-21287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:34:39.763 [DEBUG] [Thread-21287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:34:39.787 [INFO] [Thread-21287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:34:39.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:34:40.429 [DEBUG] [Thread-21287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:34:40.430 [DEBUG] [Thread-21287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:34:40.430 [DEBUG] [Thread-21287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:34:40.471 [DEBUG] [Thread-21287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:34:40.471 [DEBUG] [Thread-21287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:34:40.474 [DEBUG] [Thread-21287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:34:40.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:34:40.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:34:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:34:40.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:34:40.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:34:40.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:34:40.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:34:40.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:34:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:34:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.940339 -999.00  +12.90   8.79     86  +10.60 1 1 1 2 1     0    0 1.82 -21.50 ZNESW 11.5 8.8 195.2 15.4 13.7 -22.7 13.6 -22.5 13.4 -20.8 13.7 -21.9
2025-12-26T00:34:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:34:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:34:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.940339
2025-12-26T00:34:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:34:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:34:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:34:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:34:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:34:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:34:14', tmtdew=2.49, humidity=84.36, cloud=0.0, wind=15.9, temperature=12.68, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:34:15', seeing=1.53, atlas_timestamp='2025-12-25T22:34:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:33:00')
2025-12-26T00:34:40.503 [DEBUG] [Thread-21287] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:34: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-26T00:34:40.596 [DEBUG] [Thread-21290] [transport.py] [_log()] starting thread (client mode): 0xb6b61c00
2025-12-26T00:34:40.597 [DEBUG] [Thread-21290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:34:40.612 [DEBUG] [Thread-21290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:34:40.612 [INFO] [Thread-21290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:34:40.620 [DEBUG] [Thread-21290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:34:40.620 [DEBUG] [Thread-21290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:34:40.620 [DEBUG] [Thread-21290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:34:40.620 [DEBUG] [Thread-21290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] client lang: <none>
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] server lang: <none>
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] kex follows: False
2025-12-26T00:34:40.621 [DEBUG] [Thread-21290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:34:40.622 [DEBUG] [Thread-21290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:34:40.622 [DEBUG] [Thread-21290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:34:40.622 [DEBUG] [Thread-21290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:34:40.622 [DEBUG] [Thread-21290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:34:40.622 [DEBUG] [Thread-21290] [transport.py] [_log()] Compression: none
2025-12-26T00:34:40.622 [DEBUG] [Thread-21290] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:34:40.681 [DEBUG] [Thread-21290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:34:40.682 [DEBUG] [Thread-21290] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:34:40.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:34:40.684 [DEBUG] [Thread-21290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:34:40.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:34:40.741 [DEBUG] [Thread-21290] [transport.py] [_log()] userauth is OK
2025-12-26T00:34:40.741 [DEBUG] [Thread-21290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:34:40.742 [DEBUG] [Thread-21290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:34:40.742 [DEBUG] [Thread-21290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:34:40.742 [DEBUG] [Thread-21290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:34:40.761 [INFO] [Thread-21290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:34:40.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-26T00:34:40.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:34:41.619 [DEBUG] [Thread-21290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:34:41.619 [DEBUG] [Thread-21290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:34:41.666 [DEBUG] [Thread-21290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:34:41.667 [DEBUG] [Thread-21290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:34:41.675 [DEBUG] [Thread-21290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:34:41.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:34:41.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-26T00:34:41.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-26T00:34:41.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:34:41.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:34:41.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:34:41.708 [DEBUG] [Thread-21290] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:34:46.768 [DEBUG] [Thread-21292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:01.809 [DEBUG] [Thread-21293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:35:11.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:35:11.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-26T00:35:12.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 34, 46), 2.54, 84.37, 0.0, 17.77, 12.68, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:35:12.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:34:46
2025-12-26T00:35:12.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:35:12.720 [DEBUG] [Thread-21294] [transport.py] [_log()] starting thread (client mode): 0xb6b615d0
2025-12-26T00:35:12.720 [DEBUG] [Thread-21294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:35:12.742 [DEBUG] [Thread-21294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:35:12.742 [INFO] [Thread-21294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:35:12.745 [DEBUG] [Thread-21294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:35:12.745 [DEBUG] [Thread-21294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:35:12.745 [DEBUG] [Thread-21294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] client lang: <none>
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] server lang: <none>
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] kex follows: False
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] Compression: none
2025-12-26T00:35:12.746 [DEBUG] [Thread-21294] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:35:12.764 [DEBUG] [Thread-21294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:35:12.764 [DEBUG] [Thread-21294] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:35:12.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:35:12.765 [DEBUG] [Thread-21294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:35:12.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:35:12.766 [DEBUG] [Thread-21294] [transport.py] [_log()] userauth is OK
2025-12-26T00:35:12.767 [DEBUG] [Thread-21294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:35:12.767 [DEBUG] [Thread-21294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:35:12.767 [DEBUG] [Thread-21294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:35:12.767 [DEBUG] [Thread-21294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:35:12.781 [INFO] [Thread-21294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:35:12.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:35:16.263 [DEBUG] [Thread-21294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:35:16.264 [DEBUG] [Thread-21294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:35:16.264 [DEBUG] [Thread-21294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:35:16.305 [DEBUG] [Thread-21294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:35:16.305 [DEBUG] [Thread-21294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:35:16.309 [DEBUG] [Thread-21294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:35:16.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:35:16.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:35:16.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:35:16.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:35:16.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:35:16.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:35:16.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:35:16.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:35:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:35:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.940339 -999.00  +12.90   8.79     86  +10.60 1 1 1 2 1     0    0 1.82 -21.50 ZNESW 11.5 8.8 195.2 15.4 13.7 -22.7 13.6 -22.5 13.4 -20.8 13.7 -21.9
2025-12-26T00:35:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:35:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:35:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.940339
2025-12-26T00:35:16.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:35:16.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:35:16.435 [DEBUG] [Thread-21294] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:35:16.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:35:16.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:35:16.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:35:16.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:34:46', tmtdew=2.54, humidity=84.37, cloud=0.0, wind=17.77, temperature=12.68, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:34:47', seeing=1.56, atlas_timestamp='2025-12-25T22:34:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:33:00')
2025-12-26T00:35:16.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-26T00:35:16.531 [DEBUG] [Thread-21297] [transport.py] [_log()] starting thread (client mode): 0xb6b62230
2025-12-26T00:35:16.531 [DEBUG] [Thread-21297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:35:16.550 [DEBUG] [Thread-21297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:35:16.550 [INFO] [Thread-21297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:35:16.558 [DEBUG] [Thread-21297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:35:16.559 [DEBUG] [Thread-21297] [transport.py] [_log()] client lang: <none>
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] server lang: <none>
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] kex follows: False
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] Compression: none
2025-12-26T00:35:16.560 [DEBUG] [Thread-21297] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:35:16.622 [DEBUG] [Thread-21297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:35:16.623 [DEBUG] [Thread-21297] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:35:16.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:35:16.624 [DEBUG] [Thread-21297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:35:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:35:16.681 [DEBUG] [Thread-21297] [transport.py] [_log()] userauth is OK
2025-12-26T00:35:16.681 [DEBUG] [Thread-21297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:35:16.681 [DEBUG] [Thread-21297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:35:16.681 [DEBUG] [Thread-21297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:35:16.681 [DEBUG] [Thread-21297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:35:16.699 [INFO] [Thread-21297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:35:16.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-26T00:35:16.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:35:16.846 [DEBUG] [Thread-21299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:17.528 [DEBUG] [Thread-21297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:35:17.528 [DEBUG] [Thread-21297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:35:17.576 [DEBUG] [Thread-21297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:35:17.576 [DEBUG] [Thread-21297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:35:17.585 [DEBUG] [Thread-21297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:35:17.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:35:17.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-26T00:35:17.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-26T00:35:17.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:35:17.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:35:17.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:35:17.622 [DEBUG] [Thread-21297] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:35:24.886 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:24.887 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:31.905 [DEBUG] [Thread-21300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:39.380 [DEBUG] [Thread-21301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:46.941 [DEBUG] [Thread-21302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:35:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:35:47.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:35:47.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-26T00:35:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 35, 18), 2.53, 84.42, 0.0, 18.19, 12.7, 0, 1, 0, 2, 0, 0),)
2025-12-26T00:35:48.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:35:18
2025-12-26T00:35:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:35:48.652 [DEBUG] [Thread-21303] [transport.py] [_log()] starting thread (client mode): 0xb955b0a0
2025-12-26T00:35:48.652 [DEBUG] [Thread-21303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:35:48.672 [DEBUG] [Thread-21303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:35:48.672 [INFO] [Thread-21303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:35:48.676 [DEBUG] [Thread-21303] [transport.py] [_log()] client lang: <none>
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] server lang: <none>
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] kex follows: False
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:35:48.677 [DEBUG] [Thread-21303] [transport.py] [_log()] Compression: none
2025-12-26T00:35:48.678 [DEBUG] [Thread-21303] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:35:48.695 [DEBUG] [Thread-21303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:35:48.695 [DEBUG] [Thread-21303] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:35:48.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:35:48.696 [DEBUG] [Thread-21303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:35:48.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:35:48.697 [DEBUG] [Thread-21303] [transport.py] [_log()] userauth is OK
2025-12-26T00:35:48.698 [DEBUG] [Thread-21303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:35:48.698 [DEBUG] [Thread-21303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:35:48.698 [DEBUG] [Thread-21303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:35:48.698 [DEBUG] [Thread-21303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:35:48.719 [INFO] [Thread-21303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:35:48.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:35:49.329 [DEBUG] [Thread-21303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:35:49.330 [DEBUG] [Thread-21303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:35:49.330 [DEBUG] [Thread-21303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:35:49.371 [DEBUG] [Thread-21303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:35:49.371 [DEBUG] [Thread-21303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:35:49.375 [DEBUG] [Thread-21303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:35:49.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:35:49.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:35:49.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:35:49.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:35:49.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:35:49.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:35:49.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:35:49.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:35:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:35:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.941034 -999.00  +12.80   9.58     86  +10.60 1 1 1 2 1     0    0 1.90 -21.96 ZNESW 8.6 9.6 196.6 17.2 13.7 -22.9 13.6 -22.4 13.4 -20.6 13.7 -21.9
2025-12-26T00:35:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:35:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:35:49.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.941034
2025-12-26T00:35:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:35:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:35:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:35:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:35:49.402 [DEBUG] [Thread-21303] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:35:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:35:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:35:18', tmtdew=2.53, humidity=84.42, cloud=0.0, wind=18.19, temperature=12.7, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:35:19', seeing=1.71, atlas_timestamp='2025-12-25T22:35:05.338', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:33:00')
2025-12-26T00:35:49.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-26T00:35:49.492 [DEBUG] [Thread-21306] [transport.py] [_log()] starting thread (client mode): 0xb955a4a0
2025-12-26T00:35:49.492 [DEBUG] [Thread-21306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:35:49.507 [DEBUG] [Thread-21306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:35:49.507 [INFO] [Thread-21306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:35:49.514 [DEBUG] [Thread-21306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] client lang: <none>
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] server lang: <none>
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] kex follows: False
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:35:49.515 [DEBUG] [Thread-21306] [transport.py] [_log()] Compression: none
2025-12-26T00:35:49.516 [DEBUG] [Thread-21306] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:35:49.572 [DEBUG] [Thread-21306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:35:49.572 [DEBUG] [Thread-21306] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:35:49.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:35:49.573 [DEBUG] [Thread-21306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:35:49.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:35:49.629 [DEBUG] [Thread-21306] [transport.py] [_log()] userauth is OK
2025-12-26T00:35:49.629 [DEBUG] [Thread-21306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:35:49.629 [DEBUG] [Thread-21306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:35:49.629 [DEBUG] [Thread-21306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:35:49.629 [DEBUG] [Thread-21306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:35:49.647 [INFO] [Thread-21306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:35:49.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-26T00:35:49.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:35:50.461 [DEBUG] [Thread-21306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:35:50.461 [DEBUG] [Thread-21306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:35:50.509 [DEBUG] [Thread-21306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:35:50.509 [DEBUG] [Thread-21306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:35:50.518 [DEBUG] [Thread-21306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:35:50.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:35:50.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:35:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:35:50.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:35:50.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:35:50.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:35:50.556 [DEBUG] [Thread-21306] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:36:01.972 [DEBUG] [Thread-21308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:17.021 [DEBUG] [Thread-21309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:20.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:36:20.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:36:20.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-26T00:36:21.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 35, 50), 2.47, 84.99, 0.0, 15.74, 12.66, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:36:21.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:35:50
2025-12-26T00:36:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:36:21.566 [DEBUG] [Thread-21310] [transport.py] [_log()] starting thread (client mode): 0xb955a500
2025-12-26T00:36:21.567 [DEBUG] [Thread-21310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:36:21.586 [DEBUG] [Thread-21310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:36:21.586 [INFO] [Thread-21310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:36:21.589 [DEBUG] [Thread-21310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] client lang: <none>
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] server lang: <none>
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] kex follows: False
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] Compression: none
2025-12-26T00:36:21.590 [DEBUG] [Thread-21310] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:36:21.605 [DEBUG] [Thread-21310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:36:21.606 [DEBUG] [Thread-21310] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:36:21.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:36:21.607 [DEBUG] [Thread-21310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:36:21.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:36:21.608 [DEBUG] [Thread-21310] [transport.py] [_log()] userauth is OK
2025-12-26T00:36:21.608 [DEBUG] [Thread-21310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:36:21.608 [DEBUG] [Thread-21310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:36:21.608 [DEBUG] [Thread-21310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:36:21.608 [DEBUG] [Thread-21310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:36:21.623 [INFO] [Thread-21310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:36:21.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:36:22.408 [DEBUG] [Thread-21310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:36:22.408 [DEBUG] [Thread-21310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:36:22.408 [DEBUG] [Thread-21310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:36:22.449 [DEBUG] [Thread-21310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:36:22.449 [DEBUG] [Thread-21310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:36:22.452 [DEBUG] [Thread-21310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:36:22.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:36:22.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:36:22.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:36:22.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:36:22.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:36:22.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:36:22.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:36:22.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:36:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:36:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.941381 -999.00  +12.80  11.75     86  +10.60 1 1 1 2 1     0    0 1.90 -20.62 ZNESW 15.2 11.8 187.0 16.1 13.7 -22.7 13.5 -22.7 13.4 -20.8 13.7 -21.7
2025-12-26T00:36:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:36:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:36:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.941381
2025-12-26T00:36:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:36:22.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:36:22.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:36:22.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:36:22.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:36:22.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:35:50', tmtdew=2.47, humidity=84.99, cloud=0.0, wind=15.74, temperature=12.66, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:35:51', seeing=1.46, atlas_timestamp='2025-12-25T22:35:35.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:33:00')
2025-12-26T00:36:22.476 [DEBUG] [Thread-21310] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:36:22.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-26T00:36:22.566 [DEBUG] [Thread-21313] [transport.py] [_log()] starting thread (client mode): 0xb955a710
2025-12-26T00:36:22.567 [DEBUG] [Thread-21313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:36:22.581 [DEBUG] [Thread-21313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:36:22.581 [INFO] [Thread-21313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:36:22.588 [DEBUG] [Thread-21313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:36:22.588 [DEBUG] [Thread-21313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] client lang: <none>
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] server lang: <none>
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] kex follows: False
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] Compression: none
2025-12-26T00:36:22.589 [DEBUG] [Thread-21313] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:36:22.651 [DEBUG] [Thread-21313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:36:22.652 [DEBUG] [Thread-21313] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:36:22.653 [DEBUG] [Thread-21313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:36:22.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:36:22.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:36:22.714 [DEBUG] [Thread-21313] [transport.py] [_log()] userauth is OK
2025-12-26T00:36:22.714 [DEBUG] [Thread-21313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:36:22.714 [DEBUG] [Thread-21313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:36:22.714 [DEBUG] [Thread-21313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:36:22.714 [DEBUG] [Thread-21313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:36:22.733 [INFO] [Thread-21313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:36:22.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:36:22.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:36:23.574 [DEBUG] [Thread-21313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:36:23.574 [DEBUG] [Thread-21313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:36:23.621 [DEBUG] [Thread-21313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:36:23.621 [DEBUG] [Thread-21313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:36:23.629 [DEBUG] [Thread-21313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:36:23.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:36:23.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-26T00:36:23.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-26T00:36:23.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:36:23.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:36:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:36:23.660 [DEBUG] [Thread-21313] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:36:25.089 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:25.089 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:32.057 [DEBUG] [Thread-21315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:39.455 [DEBUG] [Thread-21316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:47.103 [DEBUG] [Thread-21317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:36:53.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:36:53.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:36:53.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-26T00:36:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 36, 22), 2.46, 85.01, 0.0, 15.0, 12.65, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:36:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:36:22
2025-12-26T00:36:54.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:36:54.669 [DEBUG] [Thread-21318] [transport.py] [_log()] starting thread (client mode): 0xb6b63df0
2025-12-26T00:36:54.669 [DEBUG] [Thread-21318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:36:54.689 [DEBUG] [Thread-21318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:36:54.689 [INFO] [Thread-21318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] client lang: <none>
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] server lang: <none>
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] kex follows: False
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] Compression: none
2025-12-26T00:36:54.693 [DEBUG] [Thread-21318] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:36:54.710 [DEBUG] [Thread-21318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:36:54.711 [DEBUG] [Thread-21318] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:36:54.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:36:54.712 [DEBUG] [Thread-21318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:36:54.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:36:54.714 [DEBUG] [Thread-21318] [transport.py] [_log()] userauth is OK
2025-12-26T00:36:54.715 [DEBUG] [Thread-21318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:36:54.715 [DEBUG] [Thread-21318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:36:54.715 [DEBUG] [Thread-21318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:36:54.715 [DEBUG] [Thread-21318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:36:54.738 [INFO] [Thread-21318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:36:54.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:36:55.360 [DEBUG] [Thread-21318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:36:55.360 [DEBUG] [Thread-21318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:36:55.361 [DEBUG] [Thread-21318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:36:55.402 [DEBUG] [Thread-21318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:36:55.402 [DEBUG] [Thread-21318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:36:55.405 [DEBUG] [Thread-21318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:36:55.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:36:55.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:36:55.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:36:55.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:36:55.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:36:55.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:36:55.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:36:55.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:36:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:36:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.941728 -999.00  +12.80  11.94     86  +10.50 1 1 1 2 1     0    0 1.85 -20.07 ZNESW 9.6 11.9 197.4 17.2 13.7 -22.7 13.5 -22.7 13.3 -20.7 13.6 -21.9
2025-12-26T00:36:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:36:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:36:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.941728
2025-12-26T00:36:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:36:55.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:36:55.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:36:55.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:36:55.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:36:55.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:36:22', tmtdew=2.46, humidity=85.01, cloud=0.0, wind=15.0, temperature=12.65, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:36:23', seeing=1.18, atlas_timestamp='2025-12-25T22:36:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.15674999999999883, 0.1302500000000002, 0.2712500000000002, 0.12099999999999866, 0.06850000000000023, 0.15025000000000155, 0.20500000000000007, 0.35025000000000084, 0.23499999999999943, 0.07000000000000028, 0.15625, 0.09950000000000081, 0.14100000000000001, 0.1532499999999999, 0.23249999999999993, 0.26149999999999984, 0.1352499999999992, 0.14949999999999974, 0.1039999999999992, 0.1742499999999989, 0.21099999999999852, 0.2547499999999996, 0.29375000000000107, 0.2317499999999999, 0.1899999999999995, 0.24649999999999928, 0.21924999999999883, 0.2535000000000007, 0.274, 0.2870000000000008, 0.24400000000000155, 0.2950000000000008, 0.23024999999999807], zp_timestamp='2025-12-25T22:33:00')
2025-12-26T00:36:55.428 [DEBUG] [Thread-21318] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:36:55.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-26T00:36:55.530 [DEBUG] [Thread-21321] [transport.py] [_log()] starting thread (client mode): 0xb9559180
2025-12-26T00:36:55.530 [DEBUG] [Thread-21321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:36:55.545 [DEBUG] [Thread-21321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:36:55.545 [INFO] [Thread-21321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] client lang: <none>
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] server lang: <none>
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] kex follows: False
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] Compression: none
2025-12-26T00:36:55.552 [DEBUG] [Thread-21321] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:36:55.610 [DEBUG] [Thread-21321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:36:55.610 [DEBUG] [Thread-21321] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:36:55.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:36:55.611 [DEBUG] [Thread-21321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:36:55.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:36:55.668 [DEBUG] [Thread-21321] [transport.py] [_log()] userauth is OK
2025-12-26T00:36:55.668 [DEBUG] [Thread-21321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:36:55.668 [DEBUG] [Thread-21321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:36:55.668 [DEBUG] [Thread-21321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:36:55.668 [DEBUG] [Thread-21321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:36:55.686 [INFO] [Thread-21321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:36:55.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-26T00:36:55.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:36:56.509 [DEBUG] [Thread-21321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:36:56.509 [DEBUG] [Thread-21321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:36:56.556 [DEBUG] [Thread-21321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:36:56.556 [DEBUG] [Thread-21321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:36:56.565 [DEBUG] [Thread-21321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:36:56.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:36:56.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:36:56.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:36:56.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:36:56.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:36:56.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:36:56.597 [DEBUG] [Thread-21321] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:37:02.137 [DEBUG] [Thread-21323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:17.188 [DEBUG] [Thread-21324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:25.290 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:25.291 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:37:26.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:37:26.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-26T00:37:27.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 36, 54), 2.47, 84.99, 0.0, 16.85, 12.61, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:37:27.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:36:54
2025-12-26T00:37:27.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:37:27.606 [DEBUG] [Thread-21325] [transport.py] [_log()] starting thread (client mode): 0xb95d60e0
2025-12-26T00:37:27.606 [DEBUG] [Thread-21325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:37:27.626 [DEBUG] [Thread-21325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:37:27.626 [INFO] [Thread-21325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] client lang: <none>
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] server lang: <none>
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] kex follows: False
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] Compression: none
2025-12-26T00:37:27.630 [DEBUG] [Thread-21325] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:37:27.644 [DEBUG] [Thread-21325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:37:27.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:37:27.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] userauth is OK
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:37:27.645 [DEBUG] [Thread-21325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:37:27.654 [INFO] [Thread-21325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:37:27.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:37:28.469 [DEBUG] [Thread-21325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:37:28.469 [DEBUG] [Thread-21325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:37:28.470 [DEBUG] [Thread-21325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:37:28.511 [DEBUG] [Thread-21325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:37:28.511 [DEBUG] [Thread-21325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:37:28.513 [DEBUG] [Thread-21325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:37:28.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:37:28.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:37:28.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:37:28.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:37:28.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:37:28.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:37:28.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:37:28.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.942075 -999.00  +12.80  13.43     86  +10.50 1 1 1 2 1     0    0 1.86 -20.33 ZNESW 9.6 13.4 191.0 17.2 13.6 -22.7 13.5 -22.4 13.3 -20.6 13.6 -22.0
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.942075
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:37:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:36:54', tmtdew=2.47, humidity=84.99, cloud=0.0, wind=16.85, temperature=12.61, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:36:55', seeing=1.18, atlas_timestamp='2025-12-25T22:36:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.19074999999999953, 0.1252500000000012, 0.2942499999999999, 0.11249999999999893, 0.07949999999999946, 0.18875000000000064, 0.23299999999999876, 0.3572500000000005, 0.2619999999999987, 0.08750000000000036, 0.15625, 0.15300000000000047, 0.15899999999999892, 0.19725000000000037, 0.23399999999999999, 0.3309999999999995, 0.16525000000000034, 0.16549999999999976, 0.11399999999999899, 0.20924999999999905, 0.22649999999999793, 0.2892499999999991, 0.3022500000000008, 0.2547499999999996, 0.19899999999999984, 0.22199999999999953, 0.22274999999999956, 0.2245000000000008, 0.2810000000000006, 0.30350000000000144, 0.2270000000000003, 0.35100000000000087, 0.23974999999999902], zp_timestamp='2025-12-25T22:35:00')
2025-12-26T00:37:28.533 [DEBUG] [Thread-21325] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:37:28.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-26T00:37:28.614 [DEBUG] [Thread-21328] [transport.py] [_log()] starting thread (client mode): 0xb6b61f60
2025-12-26T00:37:28.614 [DEBUG] [Thread-21328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:37:28.629 [DEBUG] [Thread-21328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:37:28.629 [INFO] [Thread-21328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] client lang: <none>
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] server lang: <none>
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] kex follows: False
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] Compression: none
2025-12-26T00:37:28.637 [DEBUG] [Thread-21328] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:37:28.695 [DEBUG] [Thread-21328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:37:28.695 [DEBUG] [Thread-21328] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:37:28.695 [DEBUG] [Thread-21328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:37:28.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:37:28.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:37:28.752 [DEBUG] [Thread-21328] [transport.py] [_log()] userauth is OK
2025-12-26T00:37:28.753 [DEBUG] [Thread-21328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:37:28.753 [DEBUG] [Thread-21328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:37:28.753 [DEBUG] [Thread-21328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:37:28.753 [DEBUG] [Thread-21328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:37:28.768 [INFO] [Thread-21328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:37:28.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-26T00:37:28.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:37:29.586 [DEBUG] [Thread-21328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:37:29.586 [DEBUG] [Thread-21328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:37:29.634 [DEBUG] [Thread-21328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:37:29.634 [DEBUG] [Thread-21328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:37:29.644 [DEBUG] [Thread-21328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:37:29.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:37:29.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:37:29.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-26T00:37:29.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:37:29.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:37:29.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:37:29.682 [DEBUG] [Thread-21328] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:37:32.220 [DEBUG] [Thread-21330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:39.532 [DEBUG] [Thread-21331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:47.282 [DEBUG] [Thread-21332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:37:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:37:59.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:37:59.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-26T00:38:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 37, 26), 2.46, 85.01, 0.0, 17.08, 12.6, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:38:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:37:26
2025-12-26T00:38:00.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:38:00.756 [DEBUG] [Thread-21333] [transport.py] [_log()] starting thread (client mode): 0xb9558e80
2025-12-26T00:38:00.756 [DEBUG] [Thread-21333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:38:00.776 [DEBUG] [Thread-21333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:38:00.776 [INFO] [Thread-21333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] client lang: <none>
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] server lang: <none>
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] kex follows: False
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] Compression: none
2025-12-26T00:38:00.780 [DEBUG] [Thread-21333] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:38:00.794 [DEBUG] [Thread-21333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:38:00.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:38:00.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] userauth is OK
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:38:00.795 [DEBUG] [Thread-21333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:38:00.804 [INFO] [Thread-21333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:38:00.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:38:01.422 [DEBUG] [Thread-21333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:38:01.422 [DEBUG] [Thread-21333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:38:01.422 [DEBUG] [Thread-21333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:38:01.462 [DEBUG] [Thread-21333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:38:01.462 [DEBUG] [Thread-21333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:38:01.464 [DEBUG] [Thread-21333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:38:01.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:38:01.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:38:01.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:38:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:38:01.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:38:01.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:38:01.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.942422 -999.00  +12.80  11.51     86  +10.50 1 1 1 2 1     0    0 1.92 -19.68 ZNESW 12.2 11.5 192.0 17.2 13.6 -22.7 13.5 -22.3 13.3 -20.7 13.6 -22.0
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.942422
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:38:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:38:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:38:01.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:37:26', tmtdew=2.46, humidity=85.01, cloud=0.0, wind=17.08, temperature=12.6, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:37:59', seeing=1.18, atlas_timestamp='2025-12-25T22:37:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.19074999999999953, 0.1252500000000012, 0.2942499999999999, 0.11249999999999893, 0.07949999999999946, 0.18875000000000064, 0.23299999999999876, 0.3572500000000005, 0.2619999999999987, 0.08750000000000036, 0.15625, 0.15300000000000047, 0.15899999999999892, 0.19725000000000037, 0.23399999999999999, 0.3309999999999995, 0.16525000000000034, 0.16549999999999976, 0.11399999999999899, 0.20924999999999905, 0.22649999999999793, 0.2892499999999991, 0.3022500000000008, 0.2547499999999996, 0.19899999999999984, 0.22199999999999953, 0.22274999999999956, 0.2245000000000008, 0.2810000000000006, 0.30350000000000144, 0.2270000000000003, 0.35100000000000087, 0.23974999999999902], zp_timestamp='2025-12-25T22:35:00')
2025-12-26T00:38:01.483 [DEBUG] [Thread-21333] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:38:01.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-26T00:38:01.569 [DEBUG] [Thread-21336] [transport.py] [_log()] starting thread (client mode): 0xb41047c0
2025-12-26T00:38:01.569 [DEBUG] [Thread-21336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:38:01.583 [DEBUG] [Thread-21336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:38:01.583 [INFO] [Thread-21336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:38:01.590 [DEBUG] [Thread-21336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:38:01.590 [DEBUG] [Thread-21336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:38:01.590 [DEBUG] [Thread-21336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:38:01.590 [DEBUG] [Thread-21336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:01.590 [DEBUG] [Thread-21336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] client lang: <none>
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] server lang: <none>
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] kex follows: False
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] Compression: none
2025-12-26T00:38:01.591 [DEBUG] [Thread-21336] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:38:01.646 [DEBUG] [Thread-21336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:38:01.646 [DEBUG] [Thread-21336] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:38:01.646 [DEBUG] [Thread-21336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:38:01.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:38:01.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:38:01.703 [DEBUG] [Thread-21336] [transport.py] [_log()] userauth is OK
2025-12-26T00:38:01.703 [DEBUG] [Thread-21336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:38:01.703 [DEBUG] [Thread-21336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:38:01.703 [DEBUG] [Thread-21336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:38:01.703 [DEBUG] [Thread-21336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:38:01.717 [INFO] [Thread-21336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:38:01.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-26T00:38:01.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:38:02.313 [DEBUG] [Thread-21338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:38:02.562 [DEBUG] [Thread-21336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:38:02.562 [DEBUG] [Thread-21336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:38:02.610 [DEBUG] [Thread-21336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:38:02.610 [DEBUG] [Thread-21336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:38:02.619 [DEBUG] [Thread-21336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:38:02.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:38:02.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-26T00:38:02.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-26T00:38:02.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:38:02.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:38:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:38:02.651 [DEBUG] [Thread-21336] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:38:17.355 [DEBUG] [Thread-21339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:38:25.501 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:38:25.502 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:38:32.389 [DEBUG] [Thread-21340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:38:32.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:38:32.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:38:32.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-26T00:38:33.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 37, 58), 2.46, 85.04, 0.0, 17.96, 12.58, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:38:33.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:37:58
2025-12-26T00:38:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:38:33.683 [DEBUG] [Thread-21341] [transport.py] [_log()] starting thread (client mode): 0xb95d5c90
2025-12-26T00:38:33.683 [DEBUG] [Thread-21341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:38:33.704 [DEBUG] [Thread-21341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:38:33.704 [INFO] [Thread-21341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] client lang: <none>
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] server lang: <none>
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] kex follows: False
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:38:33.707 [DEBUG] [Thread-21341] [transport.py] [_log()] Compression: none
2025-12-26T00:38:33.708 [DEBUG] [Thread-21341] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:38:33.724 [DEBUG] [Thread-21341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:38:33.724 [DEBUG] [Thread-21341] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:38:33.724 [DEBUG] [Thread-21341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:38:33.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:38:33.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:38:33.726 [DEBUG] [Thread-21341] [transport.py] [_log()] userauth is OK
2025-12-26T00:38:33.726 [DEBUG] [Thread-21341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:38:33.727 [DEBUG] [Thread-21341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:38:33.727 [DEBUG] [Thread-21341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:38:33.727 [DEBUG] [Thread-21341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:38:33.748 [INFO] [Thread-21341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:38:33.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:38:34.543 [DEBUG] [Thread-21341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:38:34.544 [DEBUG] [Thread-21341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:38:34.544 [DEBUG] [Thread-21341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:38:34.585 [DEBUG] [Thread-21341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:38:34.585 [DEBUG] [Thread-21341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:38:34.589 [DEBUG] [Thread-21341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:38:34.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:38:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:38:34.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:38:34.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:38:34.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:38:34.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:38:34.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:38:34.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:38:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:38:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.943117 -999.00  +12.70  12.90     86  +10.50 1 1 1 2 1     0    0 1.75 -21.94 ZNESW 9.7 12.9 190.2 17.4 13.6 -22.8 13.4 -22.6 13.3 -20.8 13.6 -22.1
2025-12-26T00:38:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:38:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:38:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.943117
2025-12-26T00:38:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:38:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:38:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:38:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:38:34.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:38:34.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:37:58', tmtdew=2.46, humidity=85.04, cloud=0.0, wind=17.96, temperature=12.58, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:38:31', seeing=1.18, atlas_timestamp='2025-12-25T22:38:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.19074999999999953, 0.1252500000000012, 0.2942499999999999, 0.11249999999999893, 0.07949999999999946, 0.18875000000000064, 0.23299999999999876, 0.3572500000000005, 0.2619999999999987, 0.08750000000000036, 0.15625, 0.15300000000000047, 0.15899999999999892, 0.19725000000000037, 0.23399999999999999, 0.3309999999999995, 0.16525000000000034, 0.16549999999999976, 0.11399999999999899, 0.20924999999999905, 0.22649999999999793, 0.2892499999999991, 0.3022500000000008, 0.2547499999999996, 0.19899999999999984, 0.22199999999999953, 0.22274999999999956, 0.2245000000000008, 0.2810000000000006, 0.30350000000000144, 0.2270000000000003, 0.35100000000000087, 0.23974999999999902], zp_timestamp='2025-12-25T22:35:00')
2025-12-26T00:38:34.615 [DEBUG] [Thread-21341] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:38:34.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-26T00:38:34.725 [DEBUG] [Thread-21344] [transport.py] [_log()] starting thread (client mode): 0xb95d6830
2025-12-26T00:38:34.725 [DEBUG] [Thread-21344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:38:34.741 [DEBUG] [Thread-21344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:38:34.741 [INFO] [Thread-21344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:38:34.748 [DEBUG] [Thread-21344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] client lang: <none>
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] server lang: <none>
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] kex follows: False
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] Compression: none
2025-12-26T00:38:34.749 [DEBUG] [Thread-21344] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:38:34.807 [DEBUG] [Thread-21344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:38:34.808 [DEBUG] [Thread-21344] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:38:34.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:38:34.809 [DEBUG] [Thread-21344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:38:34.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:38:34.864 [DEBUG] [Thread-21344] [transport.py] [_log()] userauth is OK
2025-12-26T00:38:34.865 [DEBUG] [Thread-21344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:38:34.865 [DEBUG] [Thread-21344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:38:34.865 [DEBUG] [Thread-21344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:38:34.865 [DEBUG] [Thread-21344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:38:34.885 [INFO] [Thread-21344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:38:34.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-26T00:38:34.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:38:35.710 [DEBUG] [Thread-21344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:38:35.710 [DEBUG] [Thread-21344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:38:35.759 [DEBUG] [Thread-21344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:38:35.759 [DEBUG] [Thread-21344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:38:35.768 [DEBUG] [Thread-21344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:38:35.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:38:35.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:38:35.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-26T00:38:35.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:38:35.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:38:35.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:38:35.802 [DEBUG] [Thread-21344] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:38:39.614 [DEBUG] [Thread-21346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:38:47.417 [DEBUG] [Thread-21347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:02.468 [DEBUG] [Thread-21348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:05.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:39:05.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:39:05.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:39:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 39, 3), 2.46, 85.04, 0.0, 16.13, 12.55, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:39:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:39:03
2025-12-26T00:39:06.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:39:06.801 [DEBUG] [Thread-21349] [transport.py] [_log()] starting thread (client mode): 0xb957ba90
2025-12-26T00:39:06.801 [DEBUG] [Thread-21349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:39:06.822 [DEBUG] [Thread-21349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:39:06.822 [INFO] [Thread-21349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:39:06.825 [DEBUG] [Thread-21349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] client lang: <none>
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] server lang: <none>
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] kex follows: False
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] Compression: none
2025-12-26T00:39:06.826 [DEBUG] [Thread-21349] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:39:06.843 [DEBUG] [Thread-21349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:39:06.844 [DEBUG] [Thread-21349] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:39:06.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:39:06.845 [DEBUG] [Thread-21349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:39:06.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:39:06.847 [DEBUG] [Thread-21349] [transport.py] [_log()] userauth is OK
2025-12-26T00:39:06.847 [DEBUG] [Thread-21349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:39:06.847 [DEBUG] [Thread-21349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:39:06.847 [DEBUG] [Thread-21349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:39:06.847 [DEBUG] [Thread-21349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:39:06.872 [INFO] [Thread-21349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:39:06.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:39:07.562 [DEBUG] [Thread-21349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:39:07.562 [DEBUG] [Thread-21349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:39:07.563 [DEBUG] [Thread-21349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:39:07.603 [DEBUG] [Thread-21349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:39:07.604 [DEBUG] [Thread-21349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:39:07.607 [DEBUG] [Thread-21349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:39:07.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:39:07.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:39:07.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:39:07.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:39:07.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:39:07.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:39:07.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:39:07.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:39:07.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:39:07.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.943464 -999.00  +12.70  12.18     86  +10.40 1 1 1 2 1     0    0 1.77 -21.74 ZNESW 13.2 12.2 187.9 19.7 13.6 -23.0 13.4 -22.6 13.2 -20.8 13.6 -22.1
2025-12-26T00:39:07.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:39:07.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:39:07.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.943464
2025-12-26T00:39:07.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:39:07.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:39:07.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:39:07.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:39:07.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:39:07.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:39:03', tmtdew=2.46, humidity=85.04, cloud=0.0, wind=16.13, temperature=12.55, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:39:03', seeing=1.18, atlas_timestamp='2025-12-25T22:38:35.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.19074999999999953, 0.1252500000000012, 0.2942499999999999, 0.11249999999999893, 0.07949999999999946, 0.18875000000000064, 0.23299999999999876, 0.3572500000000005, 0.2619999999999987, 0.08750000000000036, 0.15625, 0.15300000000000047, 0.15899999999999892, 0.19725000000000037, 0.23399999999999999, 0.3309999999999995, 0.16525000000000034, 0.16549999999999976, 0.11399999999999899, 0.20924999999999905, 0.22649999999999793, 0.2892499999999991, 0.3022500000000008, 0.2547499999999996, 0.19899999999999984, 0.22199999999999953, 0.22274999999999956, 0.2245000000000008, 0.2810000000000006, 0.30350000000000144, 0.2270000000000003, 0.35100000000000087, 0.23974999999999902], zp_timestamp='2025-12-25T22:35:00')
2025-12-26T00:39:07.636 [DEBUG] [Thread-21349] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:39:07.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-26T00:39:07.727 [DEBUG] [Thread-21352] [transport.py] [_log()] starting thread (client mode): 0xb95d67a0
2025-12-26T00:39:07.727 [DEBUG] [Thread-21352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:39:07.741 [DEBUG] [Thread-21352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:39:07.742 [INFO] [Thread-21352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:39:07.749 [DEBUG] [Thread-21352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] client lang: <none>
2025-12-26T00:39:07.750 [DEBUG] [Thread-21352] [transport.py] [_log()] server lang: <none>
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] kex follows: False
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] Compression: none
2025-12-26T00:39:07.751 [DEBUG] [Thread-21352] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:39:07.809 [DEBUG] [Thread-21352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:39:07.809 [DEBUG] [Thread-21352] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:39:07.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:39:07.810 [DEBUG] [Thread-21352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:39:07.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:39:07.864 [DEBUG] [Thread-21352] [transport.py] [_log()] userauth is OK
2025-12-26T00:39:07.865 [DEBUG] [Thread-21352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:39:07.865 [DEBUG] [Thread-21352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:39:07.865 [DEBUG] [Thread-21352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:39:07.865 [DEBUG] [Thread-21352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:39:07.884 [INFO] [Thread-21352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:39:07.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-26T00:39:07.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:39:08.696 [DEBUG] [Thread-21352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:39:08.696 [DEBUG] [Thread-21352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:39:08.744 [DEBUG] [Thread-21352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:39:08.744 [DEBUG] [Thread-21352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:39:08.753 [DEBUG] [Thread-21352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:39:08.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:39:08.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-26T00:39: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') -> 00000000
2025-12-26T00:39:08.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:39:08.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:39:08.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:39:08.790 [DEBUG] [Thread-21352] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:39:17.502 [DEBUG] [Thread-21354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:25.702 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:25.703 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:32.548 [DEBUG] [Thread-21355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:38.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:39:38.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:39:38.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-26T00:39:39.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 39, 35), 2.41, 85.04, 0.0, 16.71, 12.51, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:39:39.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:39:35
2025-12-26T00:39:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:39:39.688 [DEBUG] [Thread-21356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:39:39.806 [DEBUG] [Thread-21357] [transport.py] [_log()] starting thread (client mode): 0xb9579810
2025-12-26T00:39:39.807 [DEBUG] [Thread-21357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:39:39.827 [DEBUG] [Thread-21357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:39:39.827 [INFO] [Thread-21357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] client lang: <none>
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] server lang: <none>
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] kex follows: False
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:39:39.830 [DEBUG] [Thread-21357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:39:39.831 [DEBUG] [Thread-21357] [transport.py] [_log()] Compression: none
2025-12-26T00:39:39.831 [DEBUG] [Thread-21357] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:39:39.847 [DEBUG] [Thread-21357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:39:39.848 [DEBUG] [Thread-21357] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:39:39.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:39:39.849 [DEBUG] [Thread-21357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:39:39.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:39:39.851 [DEBUG] [Thread-21357] [transport.py] [_log()] userauth is OK
2025-12-26T00:39:39.851 [DEBUG] [Thread-21357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:39:39.851 [DEBUG] [Thread-21357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:39:39.851 [DEBUG] [Thread-21357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:39:39.852 [DEBUG] [Thread-21357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:39:39.870 [INFO] [Thread-21357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:39:39.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:39:40.664 [DEBUG] [Thread-21357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:39:40.664 [DEBUG] [Thread-21357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:39:40.664 [DEBUG] [Thread-21357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:39:40.705 [DEBUG] [Thread-21357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:39:40.705 [DEBUG] [Thread-21357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:39:40.707 [DEBUG] [Thread-21357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:39:40.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:39:40.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:39:40.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:39:40.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:39:40.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:39:40.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:39:40.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:39:40.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:39:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:39:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.943811 -999.00  +12.70   7.71     86  +10.40 1 1 1 2 1     0    0 1.76 -23.30 ZNESW 8.4 7.7 195.6 14.2 13.5 -22.8 13.3 -22.7 13.2 -20.7 13.5 -22.1
2025-12-26T00:39:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:39:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:39:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.943811
2025-12-26T00:39:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:39:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:39:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:39:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:39:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:39:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:39:35', tmtdew=2.41, humidity=85.04, cloud=0.0, wind=16.71, temperature=12.51, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:39:35', seeing=1.18, atlas_timestamp='2025-12-25T22:39:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.19074999999999953, 0.1252500000000012, 0.2942499999999999, 0.11249999999999893, 0.07949999999999946, 0.18875000000000064, 0.23299999999999876, 0.3572500000000005, 0.2619999999999987, 0.08750000000000036, 0.15625, 0.15300000000000047, 0.15899999999999892, 0.19725000000000037, 0.23399999999999999, 0.3309999999999995, 0.16525000000000034, 0.16549999999999976, 0.11399999999999899, 0.20924999999999905, 0.22649999999999793, 0.2892499999999991, 0.3022500000000008, 0.2547499999999996, 0.19899999999999984, 0.22199999999999953, 0.22274999999999956, 0.2245000000000008, 0.2810000000000006, 0.30350000000000144, 0.2270000000000003, 0.35100000000000087, 0.23974999999999902], zp_timestamp='2025-12-25T22:35:00')
2025-12-26T00:39:40.733 [DEBUG] [Thread-21357] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:39:40.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:39:40.825 [DEBUG] [Thread-21360] [transport.py] [_log()] starting thread (client mode): 0xb957a380
2025-12-26T00:39:40.825 [DEBUG] [Thread-21360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:39:40.840 [DEBUG] [Thread-21360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:39:40.840 [INFO] [Thread-21360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] client lang: <none>
2025-12-26T00:39:40.848 [DEBUG] [Thread-21360] [transport.py] [_log()] server lang: <none>
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] kex follows: False
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] Compression: none
2025-12-26T00:39:40.849 [DEBUG] [Thread-21360] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:39:40.908 [DEBUG] [Thread-21360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:39:40.909 [DEBUG] [Thread-21360] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:39:40.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:39:40.910 [DEBUG] [Thread-21360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:39:40.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:39:40.964 [DEBUG] [Thread-21360] [transport.py] [_log()] userauth is OK
2025-12-26T00:39:40.964 [DEBUG] [Thread-21360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:39:40.965 [DEBUG] [Thread-21360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:39:40.965 [DEBUG] [Thread-21360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:39:40.965 [DEBUG] [Thread-21360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:39:40.983 [INFO] [Thread-21360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:39:40.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-26T00:39:40.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:39:41.816 [DEBUG] [Thread-21360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:39:41.817 [DEBUG] [Thread-21360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:39:41.865 [DEBUG] [Thread-21360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:39:41.865 [DEBUG] [Thread-21360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:39:41.874 [DEBUG] [Thread-21360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:39:41.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:39:41.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:39:41.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:39:41.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:39:41.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:39:41.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:39:41.911 [DEBUG] [Thread-21360] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:39:47.584 [DEBUG] [Thread-21362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:02.639 [DEBUG] [Thread-21363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:05.567 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:40:11.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:40:11.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-26T00:40:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 40, 7), 2.4, 85.09, 0.0, 17.89, 12.48, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:40:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:40:07
2025-12-26T00:40:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:40:12.928 [DEBUG] [Thread-21364] [transport.py] [_log()] starting thread (client mode): 0xb957a4a0
2025-12-26T00:40:12.929 [DEBUG] [Thread-21364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:40:12.948 [DEBUG] [Thread-21364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:40:12.948 [INFO] [Thread-21364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] client lang: <none>
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] server lang: <none>
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] kex follows: False
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] Compression: none
2025-12-26T00:40:12.951 [DEBUG] [Thread-21364] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:40:12.969 [DEBUG] [Thread-21364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:40:12.969 [DEBUG] [Thread-21364] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:40:12.970 [DEBUG] [Thread-21364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:40:12.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:40:12.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:40:12.971 [DEBUG] [Thread-21364] [transport.py] [_log()] userauth is OK
2025-12-26T00:40:12.971 [DEBUG] [Thread-21364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:40:12.972 [DEBUG] [Thread-21364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:40:12.972 [DEBUG] [Thread-21364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:40:12.972 [DEBUG] [Thread-21364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:40:12.991 [INFO] [Thread-21364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:40:12.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:40:17.669 [DEBUG] [Thread-21366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:18.673 [DEBUG] [Thread-21364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:40:18.674 [DEBUG] [Thread-21364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:40:18.674 [DEBUG] [Thread-21364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:40:18.714 [DEBUG] [Thread-21364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:40:18.714 [DEBUG] [Thread-21364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:40:18.717 [DEBUG] [Thread-21364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:40:18.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:40:18.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:40:18.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:40:18.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:40:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:40:18.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:40:18.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:40:18.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:40:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:40:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.944158 -999.00  +12.60  12.59     86  +10.40 1 1 1 2 1     0    0 1.74 -22.97 ZNESW 8.7 12.6 177.6 15.8 13.6 -22.7 13.4 -22.4 13.3 -20.7 13.5 -21.8
2025-12-26T00:40:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:40:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:40:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.944158
2025-12-26T00:40:18.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:40:18.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:40:18.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:40:18.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:40:18.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:40:18.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:40:07', tmtdew=2.4, humidity=85.09, cloud=0.0, wind=17.89, temperature=12.48, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:39:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.19074999999999953, 0.1252500000000012, 0.2942499999999999, 0.11249999999999893, 0.07949999999999946, 0.18875000000000064, 0.23299999999999876, 0.3572500000000005, 0.2619999999999987, 0.08750000000000036, 0.15625, 0.15300000000000047, 0.15899999999999892, 0.19725000000000037, 0.23399999999999999, 0.3309999999999995, 0.16525000000000034, 0.16549999999999976, 0.11399999999999899, 0.20924999999999905, 0.22649999999999793, 0.2892499999999991, 0.3022500000000008, 0.2547499999999996, 0.19899999999999984, 0.22199999999999953, 0.22274999999999956, 0.2245000000000008, 0.2810000000000006, 0.30350000000000144, 0.2270000000000003, 0.35100000000000087, 0.23974999999999902], zp_timestamp='2025-12-25T22:35:00')
2025-12-26T00:40:18.875 [DEBUG] [Thread-21364] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:40:18.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-26T00:40:19.006 [DEBUG] [Thread-21368] [transport.py] [_log()] starting thread (client mode): 0xb95d42e0
2025-12-26T00:40:19.006 [DEBUG] [Thread-21368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:40:19.022 [DEBUG] [Thread-21368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:40:19.022 [INFO] [Thread-21368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:40:19.029 [DEBUG] [Thread-21368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:40:19.030 [DEBUG] [Thread-21368] [transport.py] [_log()] client lang: <none>
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] server lang: <none>
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] kex follows: False
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:40:19.031 [DEBUG] [Thread-21368] [transport.py] [_log()] Compression: none
2025-12-26T00:40:19.032 [DEBUG] [Thread-21368] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:40:19.087 [DEBUG] [Thread-21368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:40:19.088 [DEBUG] [Thread-21368] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:40:19.088 [DEBUG] [Thread-21368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:40:19.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:40:19.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:40:19.144 [DEBUG] [Thread-21368] [transport.py] [_log()] userauth is OK
2025-12-26T00:40:19.144 [DEBUG] [Thread-21368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:40:19.145 [DEBUG] [Thread-21368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:40:19.145 [DEBUG] [Thread-21368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:40:19.145 [DEBUG] [Thread-21368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:40:19.169 [INFO] [Thread-21368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:40:19.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-26T00:40:19.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:40:20.038 [DEBUG] [Thread-21368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:40:20.039 [DEBUG] [Thread-21368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:40:20.087 [DEBUG] [Thread-21368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:40:20.088 [DEBUG] [Thread-21368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:40:20.096 [DEBUG] [Thread-21368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:40:20.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:40:20.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-26T00:40:20.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-26T00:40:20.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:40:20.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:40:20.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:40:20.133 [DEBUG] [Thread-21368] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:40:25.906 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:25.907 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:32.704 [DEBUG] [Thread-21370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:39.759 [DEBUG] [Thread-21371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:47.765 [DEBUG] [Thread-21372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:40:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:40:50.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:40:50.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-26T00:40:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 40, 39), 2.4, 85.06, 0.0, 17.63, 12.41, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:40:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:40:39
2025-12-26T00:40:50.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:40:51.114 [DEBUG] [Thread-21373] [transport.py] [_log()] starting thread (client mode): 0xb95b3460
2025-12-26T00:40:51.114 [DEBUG] [Thread-21373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:40:51.134 [DEBUG] [Thread-21373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:40:51.134 [INFO] [Thread-21373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:40:51.136 [DEBUG] [Thread-21373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:40:51.136 [DEBUG] [Thread-21373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:40:51.136 [DEBUG] [Thread-21373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:40:51.136 [DEBUG] [Thread-21373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:51.136 [DEBUG] [Thread-21373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:51.136 [DEBUG] [Thread-21373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] client lang: <none>
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] server lang: <none>
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] kex follows: False
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] Compression: none
2025-12-26T00:40:51.137 [DEBUG] [Thread-21373] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:40:51.145 [DEBUG] [Thread-21373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:40:51.145 [DEBUG] [Thread-21373] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:40:51.146 [DEBUG] [Thread-21373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:40:51.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:40:51.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:40:51.148 [DEBUG] [Thread-21373] [transport.py] [_log()] userauth is OK
2025-12-26T00:40:51.148 [DEBUG] [Thread-21373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:40:51.148 [DEBUG] [Thread-21373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:40:51.148 [DEBUG] [Thread-21373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:40:51.148 [DEBUG] [Thread-21373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:40:51.185 [INFO] [Thread-21373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:40:51.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:40:51.844 [DEBUG] [Thread-21373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:40:51.845 [DEBUG] [Thread-21373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:40:51.845 [DEBUG] [Thread-21373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:40:51.885 [DEBUG] [Thread-21373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:40:51.885 [DEBUG] [Thread-21373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:40:51.888 [DEBUG] [Thread-21373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:40:51.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:40:51.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:40:51.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:40:51.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:40:51.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:40:51.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:40:51.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:40:51.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:40:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:40:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.944506 -999.00  +12.60   8.06     86  +10.40 1 1 1 2 1     0    0 1.71 -22.69 ZNESW 8.6 8.1 194.0 18.0 13.6 -22.8 13.4 -22.2 13.2 -20.7 13.5 -22.1
2025-12-26T00:40:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:40:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:40:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.944506
2025-12-26T00:40:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:40:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:40:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:40:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:40:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:40:51.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:40:39', tmtdew=2.4, humidity=85.06, cloud=0.0, wind=17.63, temperature=12.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:40:05.318', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:39:00')
2025-12-26T00:40:51.915 [DEBUG] [Thread-21373] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:40:51.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-26T00:40:52.008 [DEBUG] [Thread-21376] [transport.py] [_log()] starting thread (client mode): 0xb95b0820
2025-12-26T00:40:52.008 [DEBUG] [Thread-21376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:40:52.023 [DEBUG] [Thread-21376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:40:52.023 [INFO] [Thread-21376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:40:52.030 [DEBUG] [Thread-21376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] client lang: <none>
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] server lang: <none>
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] kex follows: False
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] Compression: none
2025-12-26T00:40:52.031 [DEBUG] [Thread-21376] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:40:52.088 [DEBUG] [Thread-21376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:40:52.089 [DEBUG] [Thread-21376] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:40:52.089 [DEBUG] [Thread-21376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:40:52.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:40:52.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:40:52.147 [DEBUG] [Thread-21376] [transport.py] [_log()] userauth is OK
2025-12-26T00:40:52.148 [DEBUG] [Thread-21376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:40:52.148 [DEBUG] [Thread-21376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:40:52.148 [DEBUG] [Thread-21376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:40:52.148 [DEBUG] [Thread-21376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:40:52.167 [INFO] [Thread-21376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:40:52.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:40:52.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:40:53.019 [DEBUG] [Thread-21376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:40:53.019 [DEBUG] [Thread-21376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:40:53.067 [DEBUG] [Thread-21376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:40:53.067 [DEBUG] [Thread-21376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:40:53.077 [DEBUG] [Thread-21376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:40:53.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:40:53.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-26T00:40:53.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-26T00:40:53.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:40:53.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:40:53.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:40:53.114 [DEBUG] [Thread-21376] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:41:02.805 [DEBUG] [Thread-21378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:17.866 [DEBUG] [Thread-21379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:41:23.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:41:23.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:41:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 41, 11), 2.39, 85.12, 0.0, 16.99, 12.41, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:41:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:41:11
2025-12-26T00:41:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:41:24.136 [DEBUG] [Thread-21380] [transport.py] [_log()] starting thread (client mode): 0xb95b37f0
2025-12-26T00:41:24.136 [DEBUG] [Thread-21380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:41:24.157 [DEBUG] [Thread-21380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:41:24.157 [INFO] [Thread-21380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] client lang: <none>
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] server lang: <none>
2025-12-26T00:41:24.161 [DEBUG] [Thread-21380] [transport.py] [_log()] kex follows: False
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] Compression: none
2025-12-26T00:41:24.162 [DEBUG] [Thread-21380] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:41:24.179 [DEBUG] [Thread-21380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:41:24.180 [DEBUG] [Thread-21380] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:41:24.181 [DEBUG] [Thread-21380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:41:24.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:41:24.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:41:24.184 [DEBUG] [Thread-21380] [transport.py] [_log()] userauth is OK
2025-12-26T00:41:24.185 [DEBUG] [Thread-21380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:41:24.185 [DEBUG] [Thread-21380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:41:24.185 [DEBUG] [Thread-21380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:41:24.185 [DEBUG] [Thread-21380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:41:24.212 [INFO] [Thread-21380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:41:24.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:41:24.893 [DEBUG] [Thread-21380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:41:24.893 [DEBUG] [Thread-21380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:41:24.894 [DEBUG] [Thread-21380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:41:24.934 [DEBUG] [Thread-21380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:41:24.935 [DEBUG] [Thread-21380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:41:24.938 [DEBUG] [Thread-21380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:41:24.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:41:24.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:41:24.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:41:24.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:41:24.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:41:24.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:41:24.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:41:24.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:41:24.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:41:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.944853 -999.00  +12.60  10.99     86  +10.40 1 1 1 2 1     0    0 1.75 -22.04 ZNESW 9.9 11.0 187.4 13.6 13.5 -22.7 13.3 -22.7 13.2 -20.7 13.5 -21.8
2025-12-26T00:41:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:41:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:41:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.944853
2025-12-26T00:41:24.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:41:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:41:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:41:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:41:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:41:24.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:41:11', tmtdew=2.39, humidity=85.12, cloud=0.0, wind=16.99, temperature=12.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:40:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:39:00')
2025-12-26T00:41:24.961 [DEBUG] [Thread-21380] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:41:25.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-26T00:41:25.056 [DEBUG] [Thread-21383] [transport.py] [_log()] starting thread (client mode): 0xb6b63e80
2025-12-26T00:41:25.057 [DEBUG] [Thread-21383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:41:25.075 [DEBUG] [Thread-21383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:41:25.076 [INFO] [Thread-21383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] client lang: <none>
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] server lang: <none>
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] kex follows: False
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:41:25.084 [DEBUG] [Thread-21383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:41:25.085 [DEBUG] [Thread-21383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:41:25.085 [DEBUG] [Thread-21383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:41:25.085 [DEBUG] [Thread-21383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:41:25.085 [DEBUG] [Thread-21383] [transport.py] [_log()] Compression: none
2025-12-26T00:41:25.085 [DEBUG] [Thread-21383] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:41:25.146 [DEBUG] [Thread-21383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:41:25.146 [DEBUG] [Thread-21383] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:41:25.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:41:25.147 [DEBUG] [Thread-21383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:41:25.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:41:25.204 [DEBUG] [Thread-21383] [transport.py] [_log()] userauth is OK
2025-12-26T00:41:25.204 [DEBUG] [Thread-21383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:41:25.205 [DEBUG] [Thread-21383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:41:25.205 [DEBUG] [Thread-21383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:41:25.205 [DEBUG] [Thread-21383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:41:25.224 [INFO] [Thread-21383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:41:25.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-26T00:41:25.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:41:26.043 [DEBUG] [Thread-21383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:41:26.043 [DEBUG] [Thread-21383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:41:26.091 [DEBUG] [Thread-21383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:41:26.091 [DEBUG] [Thread-21383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:41:26.100 [DEBUG] [Thread-21383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:41:26.108 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:26.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:41:26.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-26T00:41:26.110 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:26.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-26T00:41:26.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:41:26.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:41:26.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:41:26.137 [DEBUG] [Thread-21383] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:41:32.898 [DEBUG] [Thread-21385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:39.833 [DEBUG] [Thread-21386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:47.958 [DEBUG] [Thread-21387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:41:56.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:41:56.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:41:56.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-26T00:41:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 41, 43), 2.38, 85.17, 0.0, 20.03, 12.43, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:41:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:41:43
2025-12-26T00:41:57.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:41:57.188 [DEBUG] [Thread-21388] [transport.py] [_log()] starting thread (client mode): 0xb95798d0
2025-12-26T00:41:57.188 [DEBUG] [Thread-21388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:41:57.208 [DEBUG] [Thread-21388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:41:57.208 [INFO] [Thread-21388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] client lang: <none>
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] server lang: <none>
2025-12-26T00:41:57.211 [DEBUG] [Thread-21388] [transport.py] [_log()] kex follows: False
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] Compression: none
2025-12-26T00:41:57.212 [DEBUG] [Thread-21388] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:41:57.229 [DEBUG] [Thread-21388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:41:57.229 [DEBUG] [Thread-21388] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:41:57.230 [DEBUG] [Thread-21388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:41:57.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:41:57.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:41:57.230 [DEBUG] [Thread-21388] [transport.py] [_log()] userauth is OK
2025-12-26T00:41:57.230 [DEBUG] [Thread-21388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:41:57.231 [DEBUG] [Thread-21388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:41:57.231 [DEBUG] [Thread-21388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:41:57.231 [DEBUG] [Thread-21388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:41:57.257 [INFO] [Thread-21388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:41:57.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:41:57.895 [DEBUG] [Thread-21388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:41:57.895 [DEBUG] [Thread-21388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:41:57.895 [DEBUG] [Thread-21388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:41:57.937 [DEBUG] [Thread-21388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:41:57.937 [DEBUG] [Thread-21388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:41:57.939 [DEBUG] [Thread-21388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:41:57.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:41:57.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:41:57.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:41:57.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:41:57.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:41:57.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:41:57.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:41:57.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:41:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:41:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.945547 -999.00  +12.60  12.01     86  +10.40 1 1 1 2 1     0    0 1.53 -25.73 ZNESW 14.9 12.0 182.0 14.5 13.5 -22.8 13.3 -22.5 13.2 -20.7 13.4 -21.8
2025-12-26T00:41:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:41:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:41:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.945547
2025-12-26T00:41:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:41:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:41:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:41:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:41:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:41:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:41:43', tmtdew=2.38, humidity=85.17, cloud=0.0, wind=20.03, temperature=12.43, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:41:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:39:00')
2025-12-26T00:41:57.960 [DEBUG] [Thread-21388] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:41:58.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-26T00:41:58.047 [DEBUG] [Thread-21391] [transport.py] [_log()] starting thread (client mode): 0xb957b250
2025-12-26T00:41:58.047 [DEBUG] [Thread-21391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:41:58.062 [DEBUG] [Thread-21391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:41:58.062 [INFO] [Thread-21391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] client lang: <none>
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] server lang: <none>
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] kex follows: False
2025-12-26T00:41:58.072 [DEBUG] [Thread-21391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:41:58.073 [DEBUG] [Thread-21391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:41:58.073 [DEBUG] [Thread-21391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:41:58.073 [DEBUG] [Thread-21391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:41:58.073 [DEBUG] [Thread-21391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:41:58.073 [DEBUG] [Thread-21391] [transport.py] [_log()] Compression: none
2025-12-26T00:41:58.073 [DEBUG] [Thread-21391] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:41:58.130 [DEBUG] [Thread-21391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:41:58.130 [DEBUG] [Thread-21391] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:41:58.130 [DEBUG] [Thread-21391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:41:58.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:41:58.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:41:58.187 [DEBUG] [Thread-21391] [transport.py] [_log()] userauth is OK
2025-12-26T00:41:58.187 [DEBUG] [Thread-21391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:41:58.188 [DEBUG] [Thread-21391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:41:58.188 [DEBUG] [Thread-21391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:41:58.188 [DEBUG] [Thread-21391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:41:58.205 [INFO] [Thread-21391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:41:58.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-26T00:41:58.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:41:59.016 [DEBUG] [Thread-21391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:41:59.016 [DEBUG] [Thread-21391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:41:59.063 [DEBUG] [Thread-21391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:41:59.063 [DEBUG] [Thread-21391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:41:59.072 [DEBUG] [Thread-21391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:41:59.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:41:59.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-26T00:41:59.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-26T00:41:59.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:41:59.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:41:59.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:41:59.104 [DEBUG] [Thread-21391] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:42:02.990 [DEBUG] [Thread-21393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:42:18.043 [DEBUG] [Thread-21394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:42:26.314 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:42:26.315 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:42:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:42:29.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:42:29.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-26T00:42:29.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 42, 15), 2.38, 85.17, 0.0, 19.74, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:42:29.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:42:15
2025-12-26T00:42:29.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:42:30.102 [DEBUG] [Thread-21395] [transport.py] [_log()] starting thread (client mode): 0xb95b3700
2025-12-26T00:42:30.102 [DEBUG] [Thread-21395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:42:30.123 [DEBUG] [Thread-21395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:42:30.123 [INFO] [Thread-21395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:42:30.126 [DEBUG] [Thread-21395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] client lang: <none>
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] server lang: <none>
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] kex follows: False
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] Compression: none
2025-12-26T00:42:30.127 [DEBUG] [Thread-21395] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:42:30.144 [DEBUG] [Thread-21395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:42:30.144 [DEBUG] [Thread-21395] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:42:30.145 [DEBUG] [Thread-21395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:42:30.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:42:30.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:42:30.147 [DEBUG] [Thread-21395] [transport.py] [_log()] userauth is OK
2025-12-26T00:42:30.147 [DEBUG] [Thread-21395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:42:30.147 [DEBUG] [Thread-21395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:42:30.147 [DEBUG] [Thread-21395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:42:30.147 [DEBUG] [Thread-21395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:42:30.171 [INFO] [Thread-21395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:42:30.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:42:30.767 [DEBUG] [Thread-21395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:42:30.767 [DEBUG] [Thread-21395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:42:30.768 [DEBUG] [Thread-21395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:42:30.808 [DEBUG] [Thread-21395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:42:30.808 [DEBUG] [Thread-21395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:42:30.811 [DEBUG] [Thread-21395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:42:30.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:42:30.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:42:30.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:42:30.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:42:30.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:42:30.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:42:30.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:42:30.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:42:30.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:42:30.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.945895 -999.00  +12.60   9.98     86  +10.40 1 1 1 2 1     0    0 1.67 -24.60 ZNESW 10.2 10.0 188.0 15.9 13.4 -22.7 13.3 -22.2 13.2 -20.7 13.4 -21.8
2025-12-26T00:42:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:42:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:42:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.945895
2025-12-26T00:42:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:42:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:42:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:42:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:42:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:42:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:42:15', tmtdew=2.38, humidity=85.17, cloud=0.0, wind=19.74, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:42:05.328', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:39:00')
2025-12-26T00:42:30.839 [DEBUG] [Thread-21395] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:42:30.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-26T00:42:30.934 [DEBUG] [Thread-21398] [transport.py] [_log()] starting thread (client mode): 0xb9579960
2025-12-26T00:42:30.934 [DEBUG] [Thread-21398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:42:30.948 [DEBUG] [Thread-21398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:42:30.948 [INFO] [Thread-21398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:42:30.956 [DEBUG] [Thread-21398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:42:30.956 [DEBUG] [Thread-21398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:42:30.957 [DEBUG] [Thread-21398] [transport.py] [_log()] client lang: <none>
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] server lang: <none>
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] kex follows: False
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] Compression: none
2025-12-26T00:42:30.958 [DEBUG] [Thread-21398] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:42:31.015 [DEBUG] [Thread-21398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:42:31.016 [DEBUG] [Thread-21398] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:42:31.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:42:31.017 [DEBUG] [Thread-21398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:42:31.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:42:31.072 [DEBUG] [Thread-21398] [transport.py] [_log()] userauth is OK
2025-12-26T00:42:31.072 [DEBUG] [Thread-21398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:42:31.072 [DEBUG] [Thread-21398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:42:31.072 [DEBUG] [Thread-21398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:42:31.072 [DEBUG] [Thread-21398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:42:31.095 [INFO] [Thread-21398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:42:31.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-26T00:42:31.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:42:31.903 [DEBUG] [Thread-21398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:42:31.904 [DEBUG] [Thread-21398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:42:31.953 [DEBUG] [Thread-21398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:42:31.953 [DEBUG] [Thread-21398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:42:31.962 [DEBUG] [Thread-21398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:42:31.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:42:31.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-26T00:42:31.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-26T00:42:31.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:42:31.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:42:31.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:42:31.999 [DEBUG] [Thread-21398] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:42:33.074 [DEBUG] [Thread-21400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:42:39.888 [DEBUG] [Thread-21401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:42:48.122 [DEBUG] [Thread-21402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:43:02.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:43:02.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-26T00:43:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 42, 47), 2.37, 85.22, 0.0, 17.84, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:43:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:42:47
2025-12-26T00:43:02.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:43:03.001 [DEBUG] [Thread-21403] [transport.py] [_log()] starting thread (client mode): 0xb95b2950
2025-12-26T00:43:03.002 [DEBUG] [Thread-21403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:43:03.021 [DEBUG] [Thread-21403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:43:03.021 [INFO] [Thread-21403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:43:03.024 [DEBUG] [Thread-21403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] client lang: <none>
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] server lang: <none>
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] kex follows: False
2025-12-26T00:43:03.025 [DEBUG] [Thread-21403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:43:03.026 [DEBUG] [Thread-21403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:43:03.026 [DEBUG] [Thread-21403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:43:03.026 [DEBUG] [Thread-21403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:43:03.026 [DEBUG] [Thread-21403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:43:03.026 [DEBUG] [Thread-21403] [transport.py] [_log()] Compression: none
2025-12-26T00:43:03.026 [DEBUG] [Thread-21403] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:43:03.035 [DEBUG] [Thread-21403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:43:03.036 [DEBUG] [Thread-21403] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:43:03.037 [DEBUG] [Thread-21403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:43:03.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:43:03.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:43:03.039 [DEBUG] [Thread-21403] [transport.py] [_log()] userauth is OK
2025-12-26T00:43:03.039 [DEBUG] [Thread-21403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:43:03.040 [DEBUG] [Thread-21403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:43:03.040 [DEBUG] [Thread-21403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:43:03.040 [DEBUG] [Thread-21403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:43:03.080 [INFO] [Thread-21403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:43:03.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:43:03.158 [DEBUG] [Thread-21405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:03.742 [DEBUG] [Thread-21403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:43:03.742 [DEBUG] [Thread-21403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:43:03.743 [DEBUG] [Thread-21403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:43:03.783 [DEBUG] [Thread-21403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:43:03.783 [DEBUG] [Thread-21403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:43:03.786 [DEBUG] [Thread-21403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:43:03.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:43:03.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:43:03.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:43:03.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:43:03.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:43:03.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:43:03.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:43:03.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:43:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:43:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.946242 -999.00  +12.60  12.34     86  +10.40 1 1 1 2 1     0    0 1.71 -22.87 ZNESW 11.7 12.3 176.2 14.5 13.4 -22.6 13.3 -22.6 13.2 -20.6 13.4 -21.8
2025-12-26T00:43:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:43:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:43:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.946242
2025-12-26T00:43:03.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:43:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:43:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:43:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:43:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:43:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:42:47', tmtdew=2.37, humidity=85.22, cloud=0.0, wind=17.84, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:42:35.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:39:00')
2025-12-26T00:43:03.815 [DEBUG] [Thread-21403] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:43:03.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-26T00:43:03.910 [DEBUG] [Thread-21407] [transport.py] [_log()] starting thread (client mode): 0xb95b2230
2025-12-26T00:43:03.911 [DEBUG] [Thread-21407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:43:03.925 [DEBUG] [Thread-21407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:43:03.925 [INFO] [Thread-21407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:43:03.933 [DEBUG] [Thread-21407] [transport.py] [_log()] client lang: <none>
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] server lang: <none>
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] kex follows: False
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] Compression: none
2025-12-26T00:43:03.934 [DEBUG] [Thread-21407] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:43:03.992 [DEBUG] [Thread-21407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:43:03.992 [DEBUG] [Thread-21407] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:43:03.993 [DEBUG] [Thread-21407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:43:03.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:43:03.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:43:04.048 [DEBUG] [Thread-21407] [transport.py] [_log()] userauth is OK
2025-12-26T00:43:04.048 [DEBUG] [Thread-21407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:43:04.048 [DEBUG] [Thread-21407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:43:04.048 [DEBUG] [Thread-21407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:43:04.048 [DEBUG] [Thread-21407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:43:04.067 [INFO] [Thread-21407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:43:04.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-26T00:43:04.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:43:04.867 [DEBUG] [Thread-21407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:43:04.867 [DEBUG] [Thread-21407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:43:04.915 [DEBUG] [Thread-21407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:43:04.915 [DEBUG] [Thread-21407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:43:04.924 [DEBUG] [Thread-21407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:43:04.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:43:04.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:43:04.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:43:04.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:43:04.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:43:04.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:43:04.961 [DEBUG] [Thread-21407] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:43:18.189 [DEBUG] [Thread-21409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:26.515 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:26.516 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:33.228 [DEBUG] [Thread-21410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:43:34.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:43:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:43:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 43, 19), 2.36, 85.29, 0.0, 17.82, 12.41, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:43:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:43:19
2025-12-26T00:43:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:43:35.963 [DEBUG] [Thread-21411] [transport.py] [_log()] starting thread (client mode): 0xb6b637c0
2025-12-26T00:43:35.963 [DEBUG] [Thread-21411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:43:35.984 [DEBUG] [Thread-21411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:43:35.985 [INFO] [Thread-21411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] client lang: <none>
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] server lang: <none>
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] kex follows: False
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] Compression: none
2025-12-26T00:43:35.988 [DEBUG] [Thread-21411] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:43:36.005 [DEBUG] [Thread-21411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:43:36.006 [DEBUG] [Thread-21411] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:43:36.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:43:36.007 [DEBUG] [Thread-21411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:43:36.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:43:36.009 [DEBUG] [Thread-21411] [transport.py] [_log()] userauth is OK
2025-12-26T00:43:36.009 [DEBUG] [Thread-21411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:43:36.009 [DEBUG] [Thread-21411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:43:36.009 [DEBUG] [Thread-21411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:43:36.009 [DEBUG] [Thread-21411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:43:36.034 [INFO] [Thread-21411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:43:36.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:43:36.629 [DEBUG] [Thread-21411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:43:36.630 [DEBUG] [Thread-21411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:43:36.630 [DEBUG] [Thread-21411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:43:36.670 [DEBUG] [Thread-21411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:43:36.671 [DEBUG] [Thread-21411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:43:36.673 [DEBUG] [Thread-21411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:43:36.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:43:36.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:43:36.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:43:36.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:43:36.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:43:36.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:43:36.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:43:36.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:43:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:43:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.946589 -999.00  +12.50  11.79     86  +10.40 1 1 1 2 1     0    0 1.65 -22.47 ZNESW 12.8 11.8 187.4 18.5 13.4 -22.8 13.2 -22.4 13.2 -20.8 13.4 -22.1
2025-12-26T00:43:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:43:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:43:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.946589
2025-12-26T00:43:36.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:43:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:43:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:43:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:43:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:43:36.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:43:19', tmtdew=2.36, humidity=85.29, cloud=0.0, wind=17.82, temperature=12.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:43:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:42:00')
2025-12-26T00:43:36.699 [DEBUG] [Thread-21411] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:43:36.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-26T00:43:36.793 [DEBUG] [Thread-21414] [transport.py] [_log()] starting thread (client mode): 0xb9591180
2025-12-26T00:43:36.793 [DEBUG] [Thread-21414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:43:36.808 [DEBUG] [Thread-21414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:43:36.808 [INFO] [Thread-21414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] client lang: <none>
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] server lang: <none>
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] kex follows: False
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] Compression: none
2025-12-26T00:43:36.816 [DEBUG] [Thread-21414] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:43:36.880 [DEBUG] [Thread-21414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:43:36.881 [DEBUG] [Thread-21414] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:43:36.881 [DEBUG] [Thread-21414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:43:36.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:43:36.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:43:36.936 [DEBUG] [Thread-21414] [transport.py] [_log()] userauth is OK
2025-12-26T00:43:36.936 [DEBUG] [Thread-21414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:43:36.936 [DEBUG] [Thread-21414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:43:36.937 [DEBUG] [Thread-21414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:43:36.937 [DEBUG] [Thread-21414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:43:36.956 [INFO] [Thread-21414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:43:36.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-26T00:43:36.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:43:37.774 [DEBUG] [Thread-21414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:43:37.774 [DEBUG] [Thread-21414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:43:37.822 [DEBUG] [Thread-21414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:43:37.822 [DEBUG] [Thread-21414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:43:37.831 [DEBUG] [Thread-21414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:43:37.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:43: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-26T00:43: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-26T00:43:37.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:43:37.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:43:37.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:43:37.868 [DEBUG] [Thread-21414] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:43:39.964 [DEBUG] [Thread-21416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:43:48.265 [DEBUG] [Thread-21417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:03.308 [DEBUG] [Thread-21418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:44:07.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:44:07.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-26T00:44:08.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 43, 51), 2.36, 85.8, 0.0, 19.14, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:44:08.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:43:51
2025-12-26T00:44:08.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:44:08.858 [DEBUG] [Thread-21419] [transport.py] [_log()] starting thread (client mode): 0xb9591000
2025-12-26T00:44:08.858 [DEBUG] [Thread-21419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:44:08.878 [DEBUG] [Thread-21419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:44:08.878 [INFO] [Thread-21419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] client lang: <none>
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] server lang: <none>
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] kex follows: False
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] Compression: none
2025-12-26T00:44:08.881 [DEBUG] [Thread-21419] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:44:08.900 [DEBUG] [Thread-21419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:44:08.900 [DEBUG] [Thread-21419] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:44:08.901 [DEBUG] [Thread-21419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:44:08.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:44:08.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:44:08.903 [DEBUG] [Thread-21419] [transport.py] [_log()] userauth is OK
2025-12-26T00:44:08.903 [DEBUG] [Thread-21419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:44:08.903 [DEBUG] [Thread-21419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:44:08.903 [DEBUG] [Thread-21419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:44:08.903 [DEBUG] [Thread-21419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:44:08.938 [INFO] [Thread-21419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:44:08.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:44:09.574 [DEBUG] [Thread-21419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:44:09.575 [DEBUG] [Thread-21419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:44:09.575 [DEBUG] [Thread-21419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:44:09.616 [DEBUG] [Thread-21419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:44:09.616 [DEBUG] [Thread-21419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:44:09.620 [DEBUG] [Thread-21419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:44:09.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:44:09.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:44:09.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:44:09.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:44:09.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:44:09.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:44:09.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:44:09.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:44:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:44:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.946936 -999.00  +12.50  13.47     86  +10.40 1 1 1 2 1     0    0 1.65 -22.59 ZNESW 13.6 13.5 185.9 16.1 13.4 -22.6 13.3 -22.3 13.1 -20.6 13.4 -21.8
2025-12-26T00:44:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:44:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:44:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.946936
2025-12-26T00:44:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:44:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:44:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:44:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:44:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:44:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:43:51', tmtdew=2.36, humidity=85.8, cloud=0.0, wind=19.14, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:43:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:42:00')
2025-12-26T00:44:09.648 [DEBUG] [Thread-21419] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:44:09.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:44:09.741 [DEBUG] [Thread-21422] [transport.py] [_log()] starting thread (client mode): 0xb95b2ef0
2025-12-26T00:44:09.741 [DEBUG] [Thread-21422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:44:09.756 [DEBUG] [Thread-21422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:44:09.756 [INFO] [Thread-21422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:44:09.763 [DEBUG] [Thread-21422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] client lang: <none>
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] server lang: <none>
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] kex follows: False
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:44:09.764 [DEBUG] [Thread-21422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:44:09.765 [DEBUG] [Thread-21422] [transport.py] [_log()] Compression: none
2025-12-26T00:44:09.765 [DEBUG] [Thread-21422] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:44:09.824 [DEBUG] [Thread-21422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:44:09.825 [DEBUG] [Thread-21422] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:44:09.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:44:09.826 [DEBUG] [Thread-21422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:44:09.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:44:09.880 [DEBUG] [Thread-21422] [transport.py] [_log()] userauth is OK
2025-12-26T00:44:09.880 [DEBUG] [Thread-21422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:44:09.880 [DEBUG] [Thread-21422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:44:09.880 [DEBUG] [Thread-21422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:44:09.881 [DEBUG] [Thread-21422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:44:09.898 [INFO] [Thread-21422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:44:09.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-26T00:44:09.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:44:10.729 [DEBUG] [Thread-21422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:44:10.729 [DEBUG] [Thread-21422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:44:10.777 [DEBUG] [Thread-21422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:44:10.777 [DEBUG] [Thread-21422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:44:10.786 [DEBUG] [Thread-21422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:44:10.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:44:10.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-26T00:44: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') -> 00000000
2025-12-26T00:44:10.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:44:10.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:44:10.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:44:10.822 [DEBUG] [Thread-21422] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:44:18.345 [DEBUG] [Thread-21424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:26.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:26.720 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:33.398 [DEBUG] [Thread-21425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:40.022 [DEBUG] [Thread-21426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:44:40.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:44:40.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:44:40.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-26T00:44:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 44, 23), 2.36, 85.77, 0.0, 18.79, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:44:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:44:23
2025-12-26T00:44:41.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:44:41.819 [DEBUG] [Thread-21427] [transport.py] [_log()] starting thread (client mode): 0xb9592170
2025-12-26T00:44:41.819 [DEBUG] [Thread-21427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:44:41.840 [DEBUG] [Thread-21427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:44:41.840 [INFO] [Thread-21427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] client lang: <none>
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] server lang: <none>
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] kex follows: False
2025-12-26T00:44:41.843 [DEBUG] [Thread-21427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:44:41.844 [DEBUG] [Thread-21427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:44:41.844 [DEBUG] [Thread-21427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:44:41.844 [DEBUG] [Thread-21427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:44:41.844 [DEBUG] [Thread-21427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:44:41.844 [DEBUG] [Thread-21427] [transport.py] [_log()] Compression: none
2025-12-26T00:44:41.844 [DEBUG] [Thread-21427] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:44:41.861 [DEBUG] [Thread-21427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:44:41.862 [DEBUG] [Thread-21427] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:44:41.863 [DEBUG] [Thread-21427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:44:41.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:44:41.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:44:41.905 [DEBUG] [Thread-21427] [transport.py] [_log()] userauth is OK
2025-12-26T00:44:41.906 [DEBUG] [Thread-21427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:44:41.906 [DEBUG] [Thread-21427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:44:41.906 [DEBUG] [Thread-21427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:44:41.906 [DEBUG] [Thread-21427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:44:41.926 [INFO] [Thread-21427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:44:41.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:44:42.520 [DEBUG] [Thread-21427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:44:42.520 [DEBUG] [Thread-21427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:44:42.521 [DEBUG] [Thread-21427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:44:42.561 [DEBUG] [Thread-21427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:44:42.561 [DEBUG] [Thread-21427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:44:42.565 [DEBUG] [Thread-21427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:44:42.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:44:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:44:42.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:44:42.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:44:42.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:44:42.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:44:42.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:44:42.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:44:42.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:44:42.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.947283 -999.00  +12.50  13.73     86  +10.40 1 1 1 2 1     0    0 1.52 -24.16 ZNESW 12.7 13.7 182.4 18.1 13.4 -22.8 13.2 -22.5 13.1 -20.7 13.4 -21.9
2025-12-26T00:44:42.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:44:42.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:44:42.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.947283
2025-12-26T00:44:42.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:44:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:44:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:44:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:44:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:44:42.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:44:23', tmtdew=2.36, humidity=85.77, cloud=0.0, wind=18.79, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:44:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:42:00')
2025-12-26T00:44:42.591 [DEBUG] [Thread-21427] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:44:42.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-26T00:44:42.685 [DEBUG] [Thread-21430] [transport.py] [_log()] starting thread (client mode): 0xb9591240
2025-12-26T00:44:42.685 [DEBUG] [Thread-21430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:44:42.700 [DEBUG] [Thread-21430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:44:42.701 [INFO] [Thread-21430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:44:42.708 [DEBUG] [Thread-21430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:44:42.708 [DEBUG] [Thread-21430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] client lang: <none>
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] server lang: <none>
2025-12-26T00:44:42.709 [DEBUG] [Thread-21430] [transport.py] [_log()] kex follows: False
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] Compression: none
2025-12-26T00:44:42.710 [DEBUG] [Thread-21430] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:44:42.767 [DEBUG] [Thread-21430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:44:42.768 [DEBUG] [Thread-21430] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:44:42.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:44:42.769 [DEBUG] [Thread-21430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:44:42.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:44:42.824 [DEBUG] [Thread-21430] [transport.py] [_log()] userauth is OK
2025-12-26T00:44:42.824 [DEBUG] [Thread-21430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:44:42.825 [DEBUG] [Thread-21430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:44:42.825 [DEBUG] [Thread-21430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:44:42.825 [DEBUG] [Thread-21430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:44:42.844 [INFO] [Thread-21430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:44:42.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-26T00:44:42.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:44:43.657 [DEBUG] [Thread-21430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:44:43.657 [DEBUG] [Thread-21430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:44:43.705 [DEBUG] [Thread-21430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:44:43.705 [DEBUG] [Thread-21430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:44:43.714 [DEBUG] [Thread-21430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:44:43.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:44:43.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-26T00:44:43.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-26T00:44:43.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:44:43.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:44:43.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:44:43.747 [DEBUG] [Thread-21430] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:44:48.426 [DEBUG] [Thread-21432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:03.465 [DEBUG] [Thread-21433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:13.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:45:13.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:45:13.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-26T00:45:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 44, 55), 2.31, 85.8, 0.0, 18.62, 12.38, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:45:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:44:55
2025-12-26T00:45:14.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:45:14.798 [DEBUG] [Thread-21434] [transport.py] [_log()] starting thread (client mode): 0xb9591480
2025-12-26T00:45:14.799 [DEBUG] [Thread-21434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:45:14.819 [DEBUG] [Thread-21434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:45:14.819 [INFO] [Thread-21434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:45:14.822 [DEBUG] [Thread-21434] [transport.py] [_log()] client lang: <none>
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] server lang: <none>
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] kex follows: False
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] Compression: none
2025-12-26T00:45:14.823 [DEBUG] [Thread-21434] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:45:14.837 [DEBUG] [Thread-21434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:45:14.837 [DEBUG] [Thread-21434] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:45:14.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:45:14.837 [DEBUG] [Thread-21434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:45:14.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:45:14.838 [DEBUG] [Thread-21434] [transport.py] [_log()] userauth is OK
2025-12-26T00:45:14.838 [DEBUG] [Thread-21434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:45:14.838 [DEBUG] [Thread-21434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:45:14.838 [DEBUG] [Thread-21434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:45:14.838 [DEBUG] [Thread-21434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:45:14.854 [INFO] [Thread-21434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:45:14.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:45:16.874 [DEBUG] [Thread-21434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:45:16.874 [DEBUG] [Thread-21434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:45:16.874 [DEBUG] [Thread-21434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:45:16.916 [DEBUG] [Thread-21434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:45:16.916 [DEBUG] [Thread-21434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:45:16.918 [DEBUG] [Thread-21434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:45:16.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:45:16.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:45:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:45:16.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:45:16.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:45:16.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:45:16.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:45:16.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:45:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:45:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.947283 -999.00  +12.50  13.73     86  +10.40 1 1 1 2 1     0    0 1.52 -24.16 ZNESW 12.7 13.7 182.4 18.1 13.4 -22.8 13.2 -22.5 13.1 -20.7 13.4 -21.9
2025-12-26T00:45:16.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:45:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:45:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.947283
2025-12-26T00:45:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:45:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:45:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:45:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:45:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:45:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:44:55', tmtdew=2.31, humidity=85.8, cloud=0.0, wind=18.62, temperature=12.38, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:44:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:42:00')
2025-12-26T00:45:16.943 [DEBUG] [Thread-21434] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:45:17.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-26T00:45:17.037 [DEBUG] [Thread-21437] [transport.py] [_log()] starting thread (client mode): 0xb957b250
2025-12-26T00:45:17.037 [DEBUG] [Thread-21437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:45:17.052 [DEBUG] [Thread-21437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:45:17.052 [INFO] [Thread-21437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:45:17.059 [DEBUG] [Thread-21437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] client lang: <none>
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] server lang: <none>
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] kex follows: False
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] Compression: none
2025-12-26T00:45:17.060 [DEBUG] [Thread-21437] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:45:17.118 [DEBUG] [Thread-21437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:45:17.119 [DEBUG] [Thread-21437] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:45:17.119 [DEBUG] [Thread-21437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:45:17.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:45:17.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:45:17.176 [DEBUG] [Thread-21437] [transport.py] [_log()] userauth is OK
2025-12-26T00:45:17.176 [DEBUG] [Thread-21437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:45:17.176 [DEBUG] [Thread-21437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:45:17.177 [DEBUG] [Thread-21437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:45:17.177 [DEBUG] [Thread-21437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:45:17.200 [INFO] [Thread-21437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:45:17.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-26T00:45:17.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:45:18.034 [DEBUG] [Thread-21437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:45:18.035 [DEBUG] [Thread-21437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:45:18.083 [DEBUG] [Thread-21437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:45:18.083 [DEBUG] [Thread-21437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:45:18.092 [DEBUG] [Thread-21437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:45:18.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:45:18.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-26T00:45:18.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:45:18.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:45:18.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:45:18.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:45:18.129 [DEBUG] [Thread-21437] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:45:18.497 [DEBUG] [Thread-21439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:26.919 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:26.921 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:33.562 [DEBUG] [Thread-21440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:40.080 [DEBUG] [Thread-21441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:48.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:45:48.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:45:48.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-26T00:45:48.599 [DEBUG] [Thread-21442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:45:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 45, 27), 2.3, 85.84, 0.0, 20.03, 12.36, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:45:48.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:45:27
2025-12-26T00:45:48.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:45:49.159 [DEBUG] [Thread-21443] [transport.py] [_log()] starting thread (client mode): 0xb95b0af0
2025-12-26T00:45:49.159 [DEBUG] [Thread-21443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:45:49.185 [DEBUG] [Thread-21443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:45:49.185 [INFO] [Thread-21443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:45:49.188 [DEBUG] [Thread-21443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:45:49.188 [DEBUG] [Thread-21443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] client lang: <none>
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] server lang: <none>
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] kex follows: False
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] Compression: none
2025-12-26T00:45:49.189 [DEBUG] [Thread-21443] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:45:49.208 [DEBUG] [Thread-21443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:45:49.208 [DEBUG] [Thread-21443] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:45:49.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:45:49.209 [DEBUG] [Thread-21443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:45:49.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:45:49.211 [DEBUG] [Thread-21443] [transport.py] [_log()] userauth is OK
2025-12-26T00:45:49.211 [DEBUG] [Thread-21443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:45:49.211 [DEBUG] [Thread-21443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:45:49.211 [DEBUG] [Thread-21443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:45:49.212 [DEBUG] [Thread-21443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:45:49.247 [INFO] [Thread-21443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:45:49.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:45:49.899 [DEBUG] [Thread-21443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:45:49.899 [DEBUG] [Thread-21443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:45:49.899 [DEBUG] [Thread-21443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:45:49.940 [DEBUG] [Thread-21443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:45:49.940 [DEBUG] [Thread-21443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:45:49.942 [DEBUG] [Thread-21443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:45:49.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:45:49.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:45:49.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:45:49.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:45:49.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:45:49.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:45:49.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:45:49.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:45:49.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:45:49.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.947978 -999.00  +12.50  11.88     86  +10.40 1 1 1 2 1     0    0 1.63 -24.89 ZNESW 13.7 11.9 181.8 16.4 13.3 -22.8 13.2 -22.2 13.0 -20.7 13.4 -21.8
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.947978
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:45:49.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:45:27', tmtdew=2.3, humidity=85.84, cloud=0.0, wind=20.03, temperature=12.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:45:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.18674999999999997, 0.11775000000000091, 0.3382500000000004, 0.13349999999999973, 0.10100000000000087, 0.12375000000000114, 0.23550000000000004, 0.3862500000000004, 0.27749999999999986, 0.07450000000000045, 0.1692499999999999, 0.1850000000000005, 0.15399999999999991, 0.18125000000000036, 0.2494999999999994, 0.33000000000000007, 0.16225000000000023, 0.1609999999999996, 0.1169999999999991, 0.2232499999999984, 0.238999999999999, 0.2787499999999987, 0.2947500000000005, 0.29625000000000057, 0.18549999999999933, 0.261000000000001, 0.24375000000000036, 0.24549999999999983, 0.3410000000000002, 0.2785000000000011, 0.2654999999999994, 0.3515000000000006, 0.2837499999999995], zp_timestamp='2025-12-25T22:42:00')
2025-12-26T00:45:49.960 [DEBUG] [Thread-21443] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:45:50.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-26T00:45:50.043 [DEBUG] [Thread-21446] [transport.py] [_log()] starting thread (client mode): 0xb9593970
2025-12-26T00:45:50.043 [DEBUG] [Thread-21446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:45:50.058 [DEBUG] [Thread-21446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:45:50.058 [INFO] [Thread-21446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] client lang: <none>
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] server lang: <none>
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] kex follows: False
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] Compression: none
2025-12-26T00:45:50.066 [DEBUG] [Thread-21446] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:45:50.125 [DEBUG] [Thread-21446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:45:50.125 [DEBUG] [Thread-21446] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:45:50.125 [DEBUG] [Thread-21446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:45:50.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:45:50.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:45:50.183 [DEBUG] [Thread-21446] [transport.py] [_log()] userauth is OK
2025-12-26T00:45:50.183 [DEBUG] [Thread-21446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:45:50.183 [DEBUG] [Thread-21446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:45:50.183 [DEBUG] [Thread-21446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:45:50.183 [DEBUG] [Thread-21446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:45:50.200 [INFO] [Thread-21446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:45:50.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-26T00:45:50.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:45:51.033 [DEBUG] [Thread-21446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:45:51.033 [DEBUG] [Thread-21446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:45:51.081 [DEBUG] [Thread-21446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:45:51.081 [DEBUG] [Thread-21446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:45:51.089 [DEBUG] [Thread-21446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:45:51.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:45:51.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:45:51.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-26T00:45:51.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:45:51.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:45:51.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:45:51.121 [DEBUG] [Thread-21446] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:46:03.630 [DEBUG] [Thread-21448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:18.685 [DEBUG] [Thread-21449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:21.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:46:21.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:46:21.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-26T00:46:21.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 45, 59), 2.3, 85.85, 0.0, 17.66, 12.33, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:46:21.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:45:59
2025-12-26T00:46:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:46:22.128 [DEBUG] [Thread-21450] [transport.py] [_log()] starting thread (client mode): 0xb9590640
2025-12-26T00:46:22.129 [DEBUG] [Thread-21450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:46:22.147 [DEBUG] [Thread-21450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:46:22.147 [INFO] [Thread-21450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] client lang: <none>
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] server lang: <none>
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] kex follows: False
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] Compression: none
2025-12-26T00:46:22.151 [DEBUG] [Thread-21450] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:46:22.169 [DEBUG] [Thread-21450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:46:22.169 [DEBUG] [Thread-21450] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:46:22.170 [DEBUG] [Thread-21450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:46:22.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:46:22.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:46:22.172 [DEBUG] [Thread-21450] [transport.py] [_log()] userauth is OK
2025-12-26T00:46:22.172 [DEBUG] [Thread-21450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:46:22.172 [DEBUG] [Thread-21450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:46:22.172 [DEBUG] [Thread-21450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:46:22.172 [DEBUG] [Thread-21450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:46:22.190 [INFO] [Thread-21450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:46:22.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:46:22.930 [DEBUG] [Thread-21450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:46:22.930 [DEBUG] [Thread-21450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:46:22.930 [DEBUG] [Thread-21450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:46:22.971 [DEBUG] [Thread-21450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:46:22.971 [DEBUG] [Thread-21450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:46:22.973 [DEBUG] [Thread-21450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:46:22.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:46:22.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:46:22.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:46:22.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:46:22.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:46:22.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:46:22.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:46:22.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:46:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:46:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.948325 -999.00  +12.50  13.65     87  +10.40 1 1 1 2 1     0    0 1.57 -24.83 ZNESW 13.6 13.7 181.4 18.3 13.4 -22.8 13.2 -22.5 13.1 -20.6 13.4 -21.8
2025-12-26T00:46:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:46:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:46:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.948325
2025-12-26T00:46:22.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:46:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:46:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:46:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:46:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:46:22.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:45:59', tmtdew=2.3, humidity=85.85, cloud=0.0, wind=17.66, temperature=12.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:45:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:45:00')
2025-12-26T00:46:22.999 [DEBUG] [Thread-21450] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:46:23.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-26T00:46:23.099 [DEBUG] [Thread-21453] [transport.py] [_log()] starting thread (client mode): 0xb9591120
2025-12-26T00:46:23.099 [DEBUG] [Thread-21453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:46:23.117 [DEBUG] [Thread-21453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:46:23.118 [INFO] [Thread-21453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:46:23.125 [DEBUG] [Thread-21453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:46:23.125 [DEBUG] [Thread-21453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:46:23.125 [DEBUG] [Thread-21453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:46:23.125 [DEBUG] [Thread-21453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:23.125 [DEBUG] [Thread-21453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:23.125 [DEBUG] [Thread-21453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] client lang: <none>
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] server lang: <none>
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] kex follows: False
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] Compression: none
2025-12-26T00:46:23.126 [DEBUG] [Thread-21453] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:46:23.184 [DEBUG] [Thread-21453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:46:23.184 [DEBUG] [Thread-21453] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:46:23.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:46:23.185 [DEBUG] [Thread-21453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:46:23.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:46:23.240 [DEBUG] [Thread-21453] [transport.py] [_log()] userauth is OK
2025-12-26T00:46:23.240 [DEBUG] [Thread-21453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:46:23.240 [DEBUG] [Thread-21453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:46:23.240 [DEBUG] [Thread-21453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:46:23.240 [DEBUG] [Thread-21453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:46:23.259 [INFO] [Thread-21453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:46:23.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-26T00:46:23.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:46:24.061 [DEBUG] [Thread-21453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:46:24.062 [DEBUG] [Thread-21453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:46:24.110 [DEBUG] [Thread-21453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:46:24.110 [DEBUG] [Thread-21453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:46:24.120 [DEBUG] [Thread-21453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:46:24.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:46:24.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-26T00:46: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') -> 00000000
2025-12-26T00:46:24.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:46:24.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:46:24.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:46:24.156 [DEBUG] [Thread-21453] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:46:27.122 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:27.123 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:33.719 [DEBUG] [Thread-21455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:40.160 [DEBUG] [Thread-21456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:48.759 [DEBUG] [Thread-21457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:46:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:46:54.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:46:54.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-26T00:46:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 46, 31), 2.29, 85.9, 0.0, 17.26, 12.36, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:46:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:46:31
2025-12-26T00:46:55.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:46:55.167 [DEBUG] [Thread-21458] [transport.py] [_log()] starting thread (client mode): 0xb95921a0
2025-12-26T00:46:55.167 [DEBUG] [Thread-21458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:46:55.187 [DEBUG] [Thread-21458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:46:55.187 [INFO] [Thread-21458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] client lang: <none>
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] server lang: <none>
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] kex follows: False
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] Compression: none
2025-12-26T00:46:55.191 [DEBUG] [Thread-21458] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:46:55.209 [DEBUG] [Thread-21458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:46:55.209 [DEBUG] [Thread-21458] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:46:55.210 [DEBUG] [Thread-21458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:46:55.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:46:55.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:46:55.253 [DEBUG] [Thread-21458] [transport.py] [_log()] userauth is OK
2025-12-26T00:46:55.253 [DEBUG] [Thread-21458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:46:55.254 [DEBUG] [Thread-21458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:46:55.254 [DEBUG] [Thread-21458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:46:55.254 [DEBUG] [Thread-21458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:46:55.285 [INFO] [Thread-21458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:46:55.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:46:55.932 [DEBUG] [Thread-21458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:46:55.933 [DEBUG] [Thread-21458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:46:55.933 [DEBUG] [Thread-21458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:46:55.974 [DEBUG] [Thread-21458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:46:55.974 [DEBUG] [Thread-21458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:46:55.978 [DEBUG] [Thread-21458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:46:55.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:46:55.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:46:55.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:46:55.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:46:55.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:46:56.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:46:56.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:46:56.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:46:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:46:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.948672 -999.00  +12.50  16.26     87  +10.40 1 1 1 2 1     0    0 1.57 -22.66 ZNESW 14.8 16.3 193.2 19.1 13.3 -22.8 13.2 -22.4 13.0 -20.7 13.4 -22.0
2025-12-26T00:46:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:46:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:46:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.948672
2025-12-26T00:46:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:46:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:46:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:46:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:46:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:46:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:46:31', tmtdew=2.29, humidity=85.9, cloud=0.0, wind=17.26, temperature=12.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:46:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:45:00')
2025-12-26T00:46:56.004 [DEBUG] [Thread-21458] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:46:56.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-26T00:46:56.098 [DEBUG] [Thread-21461] [transport.py] [_log()] starting thread (client mode): 0xb9593550
2025-12-26T00:46:56.098 [DEBUG] [Thread-21461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:46:56.112 [DEBUG] [Thread-21461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:46:56.113 [INFO] [Thread-21461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:46:56.120 [DEBUG] [Thread-21461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:46:56.120 [DEBUG] [Thread-21461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:46:56.120 [DEBUG] [Thread-21461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:46:56.120 [DEBUG] [Thread-21461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:56.120 [DEBUG] [Thread-21461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] client lang: <none>
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] server lang: <none>
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] kex follows: False
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:46:56.121 [DEBUG] [Thread-21461] [transport.py] [_log()] Compression: none
2025-12-26T00:46:56.122 [DEBUG] [Thread-21461] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:46:56.180 [DEBUG] [Thread-21461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:46:56.180 [DEBUG] [Thread-21461] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:46:56.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:46:56.181 [DEBUG] [Thread-21461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:46:56.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:46:56.236 [DEBUG] [Thread-21461] [transport.py] [_log()] userauth is OK
2025-12-26T00:46:56.236 [DEBUG] [Thread-21461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:46:56.236 [DEBUG] [Thread-21461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:46:56.236 [DEBUG] [Thread-21461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:46:56.237 [DEBUG] [Thread-21461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:46:56.255 [INFO] [Thread-21461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:46:56.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-26T00:46:56.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:46:57.091 [DEBUG] [Thread-21461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:46:57.091 [DEBUG] [Thread-21461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:46:57.142 [DEBUG] [Thread-21461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:46:57.142 [DEBUG] [Thread-21461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:46:57.154 [DEBUG] [Thread-21461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:46:57.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:46:57.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-26T00:46:57.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:46:57.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:46:57.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:46:57.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:46:57.189 [DEBUG] [Thread-21461] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:47:03.795 [DEBUG] [Thread-21463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:47:18.856 [DEBUG] [Thread-21464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:47:27.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:47:27.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:47:27.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-26T00:47:27.322 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:47:27.323 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:47:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 47, 5), 2.29, 85.9, 0.0, 16.99, 12.36, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:47:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:47:05
2025-12-26T00:47:28.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:47:28.172 [DEBUG] [Thread-21465] [transport.py] [_log()] starting thread (client mode): 0xb9590370
2025-12-26T00:47:28.172 [DEBUG] [Thread-21465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:47:28.193 [DEBUG] [Thread-21465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:47:28.193 [INFO] [Thread-21465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:47:28.196 [DEBUG] [Thread-21465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] client lang: <none>
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] server lang: <none>
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] kex follows: False
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] Compression: none
2025-12-26T00:47:28.197 [DEBUG] [Thread-21465] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:47:28.215 [DEBUG] [Thread-21465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:47:28.216 [DEBUG] [Thread-21465] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:47:28.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:47:28.217 [DEBUG] [Thread-21465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:47:28.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:47:28.219 [DEBUG] [Thread-21465] [transport.py] [_log()] userauth is OK
2025-12-26T00:47:28.219 [DEBUG] [Thread-21465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:47:28.219 [DEBUG] [Thread-21465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:47:28.219 [DEBUG] [Thread-21465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:47:28.219 [DEBUG] [Thread-21465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:47:28.254 [INFO] [Thread-21465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:47:28.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:47:29.018 [DEBUG] [Thread-21465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:47:29.018 [DEBUG] [Thread-21465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:47:29.018 [DEBUG] [Thread-21465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:47:29.060 [DEBUG] [Thread-21465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:47:29.060 [DEBUG] [Thread-21465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:47:29.063 [DEBUG] [Thread-21465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:47:29.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:47:29.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:47:29.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:47:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:47:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:47:29.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:47:29.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:47:29.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:47:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:47:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.949019 -999.00  +12.50  16.96     87  +10.40 1 1 1 2 1     0    0 1.56 -22.70 ZNESW 16.3 17.0 190.0 21.2 13.3 -22.7 13.1 -22.3 13.0 -20.7 13.3 -21.9
2025-12-26T00:47:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:47:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:47:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.949019
2025-12-26T00:47:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:47:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:47:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:47:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:47:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:47:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:47:05', tmtdew=2.29, humidity=85.9, cloud=0.0, wind=16.99, temperature=12.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:46:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:45:00')
2025-12-26T00:47:29.097 [DEBUG] [Thread-21465] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:47:29.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-26T00:47:29.200 [DEBUG] [Thread-21468] [transport.py] [_log()] starting thread (client mode): 0xb9591d80
2025-12-26T00:47:29.200 [DEBUG] [Thread-21468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:47:29.218 [DEBUG] [Thread-21468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:47:29.218 [INFO] [Thread-21468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:47:29.225 [DEBUG] [Thread-21468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] client lang: <none>
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] server lang: <none>
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] kex follows: False
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:47:29.226 [DEBUG] [Thread-21468] [transport.py] [_log()] Compression: none
2025-12-26T00:47:29.227 [DEBUG] [Thread-21468] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:47:29.283 [DEBUG] [Thread-21468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:47:29.284 [DEBUG] [Thread-21468] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:47:29.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:47:29.285 [DEBUG] [Thread-21468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:47:29.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:47:29.341 [DEBUG] [Thread-21468] [transport.py] [_log()] userauth is OK
2025-12-26T00:47:29.342 [DEBUG] [Thread-21468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:47:29.342 [DEBUG] [Thread-21468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:47:29.342 [DEBUG] [Thread-21468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:47:29.342 [DEBUG] [Thread-21468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:47:29.369 [INFO] [Thread-21468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:47:29.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-26T00:47:29.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:47:30.182 [DEBUG] [Thread-21468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:47:30.183 [DEBUG] [Thread-21468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:47:30.234 [DEBUG] [Thread-21468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:47:30.234 [DEBUG] [Thread-21468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:47:30.245 [DEBUG] [Thread-21468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:47:30.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:47:30.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-26T00:47:30.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-26T00:47:30.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:47:30.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:47:30.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:47:30.284 [DEBUG] [Thread-21468] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:47:33.893 [DEBUG] [Thread-21470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:47:40.218 [DEBUG] [Thread-21471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:47:48.948 [DEBUG] [Thread-21472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:00.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:48:00.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:48:00.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-26T00:48:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 47, 37), 2.28, 85.44, 0.0, 16.64, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:48:01.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:47:37
2025-12-26T00:48:01.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:48:01.291 [DEBUG] [Thread-21473] [transport.py] [_log()] starting thread (client mode): 0xb9591e40
2025-12-26T00:48:01.292 [DEBUG] [Thread-21473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:48:01.312 [DEBUG] [Thread-21473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:48:01.312 [INFO] [Thread-21473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] client lang: <none>
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] server lang: <none>
2025-12-26T00:48:01.316 [DEBUG] [Thread-21473] [transport.py] [_log()] kex follows: False
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] Compression: none
2025-12-26T00:48:01.317 [DEBUG] [Thread-21473] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:48:01.337 [DEBUG] [Thread-21473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:48:01.338 [DEBUG] [Thread-21473] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:48:01.338 [DEBUG] [Thread-21473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:48:01.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:48:01.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:48:01.341 [DEBUG] [Thread-21473] [transport.py] [_log()] userauth is OK
2025-12-26T00:48:01.341 [DEBUG] [Thread-21473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:48:01.342 [DEBUG] [Thread-21473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:48:01.342 [DEBUG] [Thread-21473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:48:01.342 [DEBUG] [Thread-21473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:48:01.378 [INFO] [Thread-21473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:48:01.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:48:01.994 [DEBUG] [Thread-21473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:48:01.994 [DEBUG] [Thread-21473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:48:01.995 [DEBUG] [Thread-21473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:48:02.035 [DEBUG] [Thread-21473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:48:02.035 [DEBUG] [Thread-21473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:48:02.038 [DEBUG] [Thread-21473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:48:02.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:48:02.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:48:02.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:48:02.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:48:02.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:48:02.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:48:02.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:48:02.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:48:02.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:48:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.949367 -999.00  +12.50  15.18     87  +10.40 1 1 1 2 1     0    0 1.66 -20.67 ZNESW 15.3 15.2 189.0 17.6 13.3 -22.8 13.2 -22.5 13.0 -20.6 13.3 -21.9
2025-12-26T00:48:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:48:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:48:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.949367
2025-12-26T00:48:02.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:48:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:48:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:48:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:48:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:48:02.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:47:37', tmtdew=2.28, humidity=85.44, cloud=0.0, wind=16.64, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:47:05.309', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:45:00')
2025-12-26T00:48:02.060 [DEBUG] [Thread-21473] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:48:02.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-26T00:48:02.158 [DEBUG] [Thread-21476] [transport.py] [_log()] starting thread (client mode): 0xb95925c0
2025-12-26T00:48:02.158 [DEBUG] [Thread-21476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:48:02.174 [DEBUG] [Thread-21476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:48:02.174 [INFO] [Thread-21476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:48:02.181 [DEBUG] [Thread-21476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] client lang: <none>
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] server lang: <none>
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] kex follows: False
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] Compression: none
2025-12-26T00:48:02.182 [DEBUG] [Thread-21476] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:48:02.239 [DEBUG] [Thread-21476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:48:02.240 [DEBUG] [Thread-21476] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:48:02.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:48:02.241 [DEBUG] [Thread-21476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:48:02.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:48:02.295 [DEBUG] [Thread-21476] [transport.py] [_log()] userauth is OK
2025-12-26T00:48:02.296 [DEBUG] [Thread-21476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:48:02.296 [DEBUG] [Thread-21476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:48:02.296 [DEBUG] [Thread-21476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:48:02.296 [DEBUG] [Thread-21476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:48:02.315 [INFO] [Thread-21476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:48:02.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-26T00:48:02.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:48:03.155 [DEBUG] [Thread-21476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:48:03.155 [DEBUG] [Thread-21476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:48:03.203 [DEBUG] [Thread-21476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:48:03.203 [DEBUG] [Thread-21476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:48:03.212 [DEBUG] [Thread-21476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:48:03.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:48:03.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:48:03.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-26T00:48:03.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:48:03.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:48:03.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:48:03.249 [DEBUG] [Thread-21476] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:48:03.978 [DEBUG] [Thread-21478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:19.031 [DEBUG] [Thread-21479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:27.520 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:27.521 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:33.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:48:33.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:48:33.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:48:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 48, 9), 2.28, 85.45, 0.0, 16.69, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:48:33.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:48:09
2025-12-26T00:48:34.060 [DEBUG] [Thread-21480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:34.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:48:34.257 [DEBUG] [Thread-21481] [transport.py] [_log()] starting thread (client mode): 0xb9590490
2025-12-26T00:48:34.257 [DEBUG] [Thread-21481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:48:34.277 [DEBUG] [Thread-21481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:48:34.277 [INFO] [Thread-21481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] client lang: <none>
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] server lang: <none>
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] kex follows: False
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] Compression: none
2025-12-26T00:48:34.279 [DEBUG] [Thread-21481] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:48:34.295 [DEBUG] [Thread-21481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:48:34.296 [DEBUG] [Thread-21481] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:48:34.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:48:34.296 [DEBUG] [Thread-21481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:48:34.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:48:34.298 [DEBUG] [Thread-21481] [transport.py] [_log()] userauth is OK
2025-12-26T00:48:34.298 [DEBUG] [Thread-21481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:48:34.298 [DEBUG] [Thread-21481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:48:34.298 [DEBUG] [Thread-21481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:48:34.298 [DEBUG] [Thread-21481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:48:34.322 [INFO] [Thread-21481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:48:34.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:48:35.059 [DEBUG] [Thread-21481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:48:35.059 [DEBUG] [Thread-21481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:48:35.060 [DEBUG] [Thread-21481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:48:35.100 [DEBUG] [Thread-21481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:48:35.100 [DEBUG] [Thread-21481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:48:35.103 [DEBUG] [Thread-21481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:48:35.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:48:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:48:35.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:48:35.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:48:35.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:48:35.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:48:35.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:48:35.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:48:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:48:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.950061 -999.00  +12.50  18.35     87  +10.30 1 1 1 2 1     0    0 1.51 -24.70 ZNESW 15.3 18.4 197.0 21.7 13.3 -22.8 13.2 -22.2 13.0 -20.7 13.3 -21.9
2025-12-26T00:48:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:48:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:48:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.950061
2025-12-26T00:48:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:48:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:48:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:48:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:48:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:48:35.129 [DEBUG] [Thread-21481] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:48:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:48:09', tmtdew=2.28, humidity=85.45, cloud=0.0, wind=16.69, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:48:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:45:00')
2025-12-26T00:48:35.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-26T00:48:35.223 [DEBUG] [Thread-21484] [transport.py] [_log()] starting thread (client mode): 0xb9591e70
2025-12-26T00:48:35.223 [DEBUG] [Thread-21484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:48:35.237 [DEBUG] [Thread-21484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:48:35.237 [INFO] [Thread-21484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:48:35.244 [DEBUG] [Thread-21484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:48:35.244 [DEBUG] [Thread-21484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] client lang: <none>
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] server lang: <none>
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] kex follows: False
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:48:35.245 [DEBUG] [Thread-21484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:48:35.246 [DEBUG] [Thread-21484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:48:35.246 [DEBUG] [Thread-21484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:48:35.246 [DEBUG] [Thread-21484] [transport.py] [_log()] Compression: none
2025-12-26T00:48:35.246 [DEBUG] [Thread-21484] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:48:35.303 [DEBUG] [Thread-21484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:48:35.303 [DEBUG] [Thread-21484] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:48:35.304 [DEBUG] [Thread-21484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:48:35.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:48:35.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:48:35.359 [DEBUG] [Thread-21484] [transport.py] [_log()] userauth is OK
2025-12-26T00:48:35.360 [DEBUG] [Thread-21484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:48:35.360 [DEBUG] [Thread-21484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:48:35.360 [DEBUG] [Thread-21484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:48:35.360 [DEBUG] [Thread-21484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:48:35.378 [INFO] [Thread-21484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:48:35.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-26T00:48:35.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:48:36.230 [DEBUG] [Thread-21484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:48:36.230 [DEBUG] [Thread-21484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:48:36.280 [DEBUG] [Thread-21484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:48:36.281 [DEBUG] [Thread-21484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:48:36.292 [DEBUG] [Thread-21484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:48:36.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:48:36.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-26T00:48:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:48:36.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:48:36.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:48:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:48:36.339 [DEBUG] [Thread-21484] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:48:40.297 [DEBUG] [Thread-21486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:48:49.088 [DEBUG] [Thread-21487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:04.140 [DEBUG] [Thread-21488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:49:06.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:49:06.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-26T00:49:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 48, 41), 2.34, 85.39, 0.0, 15.55, 12.36, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:49:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:48:41
2025-12-26T00:49:07.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:49:07.386 [DEBUG] [Thread-21489] [transport.py] [_log()] starting thread (client mode): 0xb95b1ae0
2025-12-26T00:49:07.386 [DEBUG] [Thread-21489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:49:07.406 [DEBUG] [Thread-21489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:49:07.406 [INFO] [Thread-21489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:49:07.409 [DEBUG] [Thread-21489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:49:07.409 [DEBUG] [Thread-21489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:49:07.409 [DEBUG] [Thread-21489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:49:07.409 [DEBUG] [Thread-21489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:07.409 [DEBUG] [Thread-21489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:07.409 [DEBUG] [Thread-21489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] client lang: <none>
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] server lang: <none>
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] kex follows: False
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] Compression: none
2025-12-26T00:49:07.410 [DEBUG] [Thread-21489] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:49:07.426 [DEBUG] [Thread-21489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:49:07.426 [DEBUG] [Thread-21489] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:49:07.426 [DEBUG] [Thread-21489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:49:07.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:49:07.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:49:07.427 [DEBUG] [Thread-21489] [transport.py] [_log()] userauth is OK
2025-12-26T00:49:07.427 [DEBUG] [Thread-21489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:49:07.427 [DEBUG] [Thread-21489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:49:07.427 [DEBUG] [Thread-21489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:49:07.427 [DEBUG] [Thread-21489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:49:07.437 [INFO] [Thread-21489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:49:07.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:49:08.053 [DEBUG] [Thread-21489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:49:08.053 [DEBUG] [Thread-21489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:49:08.053 [DEBUG] [Thread-21489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:49:08.094 [DEBUG] [Thread-21489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:49:08.094 [DEBUG] [Thread-21489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:49:08.097 [DEBUG] [Thread-21489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:49:08.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:49:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:49:08.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:49:08.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:49:08.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:49:08.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:49:08.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.950408 -999.00  +12.50  11.54     87  +10.30 1 1 1 2 1     0    0 1.58 -23.20 ZNESW 13.5 11.5 196.0 17.2 13.3 -22.6 13.1 -22.1 13.0 -20.5 13.3 -21.6
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.950408
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:49:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:48:41', tmtdew=2.34, humidity=85.39, cloud=0.0, wind=15.55, temperature=12.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:48:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:45:00')
2025-12-26T00:49:08.117 [DEBUG] [Thread-21489] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:49:08.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:49:08.200 [DEBUG] [Thread-21492] [transport.py] [_log()] starting thread (client mode): 0xb95b3130
2025-12-26T00:49:08.200 [DEBUG] [Thread-21492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:49:08.214 [DEBUG] [Thread-21492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:49:08.214 [INFO] [Thread-21492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] client lang: <none>
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] server lang: <none>
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] kex follows: False
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:49:08.221 [DEBUG] [Thread-21492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:49:08.222 [DEBUG] [Thread-21492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:49:08.222 [DEBUG] [Thread-21492] [transport.py] [_log()] Compression: none
2025-12-26T00:49:08.222 [DEBUG] [Thread-21492] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:49:08.278 [DEBUG] [Thread-21492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:49:08.279 [DEBUG] [Thread-21492] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:49:08.279 [DEBUG] [Thread-21492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:49:08.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:49:08.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:49:08.336 [DEBUG] [Thread-21492] [transport.py] [_log()] userauth is OK
2025-12-26T00:49:08.336 [DEBUG] [Thread-21492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:49:08.336 [DEBUG] [Thread-21492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:49:08.336 [DEBUG] [Thread-21492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:49:08.336 [DEBUG] [Thread-21492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:49:08.350 [INFO] [Thread-21492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:49:08.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-26T00:49:08.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:49:09.177 [DEBUG] [Thread-21492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:49:09.177 [DEBUG] [Thread-21492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:49:09.225 [DEBUG] [Thread-21492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:49:09.225 [DEBUG] [Thread-21492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:49:09.234 [DEBUG] [Thread-21492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:49:09.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:49:09.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-26T00:49:09.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-26T00:49:09.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:49:09.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:49:09.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:49:09.265 [DEBUG] [Thread-21492] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:49:19.171 [DEBUG] [Thread-21494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:27.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:27.720 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:34.224 [DEBUG] [Thread-21495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:49:39.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:49:39.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-26T00:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 49, 13), 2.34, 85.4, 0.0, 16.8, 12.35, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:49:39.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:49:13
2025-12-26T00:49:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:49:40.251 [DEBUG] [Thread-21496] [transport.py] [_log()] starting thread (client mode): 0xb95b2500
2025-12-26T00:49:40.251 [DEBUG] [Thread-21496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:49:40.271 [DEBUG] [Thread-21496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:49:40.272 [INFO] [Thread-21496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:40.275 [DEBUG] [Thread-21496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] client lang: <none>
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] server lang: <none>
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] kex follows: False
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:49:40.276 [DEBUG] [Thread-21496] [transport.py] [_log()] Compression: none
2025-12-26T00:49:40.277 [DEBUG] [Thread-21496] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:49:40.295 [DEBUG] [Thread-21496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:49:40.296 [DEBUG] [Thread-21496] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:49:40.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:49:40.298 [DEBUG] [Thread-21496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:49:40.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:49:40.300 [DEBUG] [Thread-21496] [transport.py] [_log()] userauth is OK
2025-12-26T00:49:40.300 [DEBUG] [Thread-21496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:49:40.301 [DEBUG] [Thread-21496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:49:40.301 [DEBUG] [Thread-21496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:49:40.301 [DEBUG] [Thread-21496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:49:40.325 [INFO] [Thread-21496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:49:40.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:49:40.382 [DEBUG] [Thread-21498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:49:41.041 [DEBUG] [Thread-21496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:49:41.041 [DEBUG] [Thread-21496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:49:41.041 [DEBUG] [Thread-21496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:49:41.082 [DEBUG] [Thread-21496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:49:41.083 [DEBUG] [Thread-21496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:49:41.086 [DEBUG] [Thread-21496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:49:41.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:49:41.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:49:41.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:49:41.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:49:41.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:49:41.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:49:41.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:49:41.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:49:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:49:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.950755 -999.00  +12.50  14.93     86  +10.30 1 1 1 2 1     0    0 1.73 -19.56 ZNESW 12.9 14.9 198.6 21.8 13.3 -22.7 13.1 -22.1 13.0 -20.6 13.3 -21.8
2025-12-26T00:49:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:49:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:49:41.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.950755
2025-12-26T00:49:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:49:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:49:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:49:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:49:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:49:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:49:13', tmtdew=2.34, humidity=85.4, cloud=0.0, wind=16.8, temperature=12.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:49:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:47:00')
2025-12-26T00:49:41.115 [DEBUG] [Thread-21496] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:49:41.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-26T00:49:41.209 [DEBUG] [Thread-21500] [transport.py] [_log()] starting thread (client mode): 0xb95b3f70
2025-12-26T00:49:41.209 [DEBUG] [Thread-21500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:49:41.223 [DEBUG] [Thread-21500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:49:41.223 [INFO] [Thread-21500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] client lang: <none>
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] server lang: <none>
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] kex follows: False
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:49:41.231 [DEBUG] [Thread-21500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:49:41.232 [DEBUG] [Thread-21500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:49:41.232 [DEBUG] [Thread-21500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:49:41.232 [DEBUG] [Thread-21500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:49:41.232 [DEBUG] [Thread-21500] [transport.py] [_log()] Compression: none
2025-12-26T00:49:41.232 [DEBUG] [Thread-21500] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:49:41.291 [DEBUG] [Thread-21500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:49:41.291 [DEBUG] [Thread-21500] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:49:41.292 [DEBUG] [Thread-21500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:49:41.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:49:41.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:49:41.347 [DEBUG] [Thread-21500] [transport.py] [_log()] userauth is OK
2025-12-26T00:49:41.347 [DEBUG] [Thread-21500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:49:41.347 [DEBUG] [Thread-21500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:49:41.347 [DEBUG] [Thread-21500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:49:41.347 [DEBUG] [Thread-21500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:49:41.363 [INFO] [Thread-21500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:49:41.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-26T00:49:41.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:49:42.195 [DEBUG] [Thread-21500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:49:42.195 [DEBUG] [Thread-21500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:49:42.242 [DEBUG] [Thread-21500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:49:42.243 [DEBUG] [Thread-21500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:49:42.251 [DEBUG] [Thread-21500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:49:42.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:49:42.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-26T00:49:42.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:49:42.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:49:42.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:49:42.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:49:42.288 [DEBUG] [Thread-21500] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:49:49.257 [DEBUG] [Thread-21502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:04.299 [DEBUG] [Thread-21503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:07.007 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:12.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:50:12.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:50:12.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-26T00:50:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 49, 45), 2.33, 85.44, 0.0, 15.32, 12.36, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:50:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:49:45
2025-12-26T00:50:13.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:50:13.281 [DEBUG] [Thread-21504] [transport.py] [_log()] starting thread (client mode): 0xb9590070
2025-12-26T00:50:13.281 [DEBUG] [Thread-21504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:50:13.301 [DEBUG] [Thread-21504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:50:13.301 [INFO] [Thread-21504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:50:13.304 [DEBUG] [Thread-21504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:50:13.304 [DEBUG] [Thread-21504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:50:13.304 [DEBUG] [Thread-21504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] client lang: <none>
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] server lang: <none>
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] kex follows: False
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:50:13.305 [DEBUG] [Thread-21504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:50:13.306 [DEBUG] [Thread-21504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:50:13.306 [DEBUG] [Thread-21504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:50:13.306 [DEBUG] [Thread-21504] [transport.py] [_log()] Compression: none
2025-12-26T00:50:13.306 [DEBUG] [Thread-21504] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:50:13.316 [DEBUG] [Thread-21504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:50:13.316 [DEBUG] [Thread-21504] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:50:13.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:50:13.318 [DEBUG] [Thread-21504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:50:13.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:50:13.320 [DEBUG] [Thread-21504] [transport.py] [_log()] userauth is OK
2025-12-26T00:50:13.320 [DEBUG] [Thread-21504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:50:13.320 [DEBUG] [Thread-21504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:50:13.320 [DEBUG] [Thread-21504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:50:13.320 [DEBUG] [Thread-21504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:50:13.340 [INFO] [Thread-21504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:50:13.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:50:15.925 [DEBUG] [Thread-21504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:50:15.925 [DEBUG] [Thread-21504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:50:15.925 [DEBUG] [Thread-21504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:50:15.966 [DEBUG] [Thread-21504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:50:15.966 [DEBUG] [Thread-21504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:50:15.970 [DEBUG] [Thread-21504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:50:16.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:50:16.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:50:16.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:50:16.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:50:16.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:50:16.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:50:16.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:50:16.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.951103 -999.00  +12.50  13.72     86  +10.30 1 1 1 2 1     0    0 1.75 -17.09 ZNESW 15.5 13.7 195.4 17.2 13.3 -22.7 13.2 -22.2 12.9 -20.6 13.3 -21.9
2025-12-26T00:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:50:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.951103
2025-12-26T00:50:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:50:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:50:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:50:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:50:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:50:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:49:45', tmtdew=2.33, humidity=85.44, cloud=0.0, wind=15.32, temperature=12.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:49:35.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:47:00')
2025-12-26T00:50:16.050 [DEBUG] [Thread-21504] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:50:16.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-26T00:50:16.144 [DEBUG] [Thread-21507] [transport.py] [_log()] starting thread (client mode): 0xb95b3610
2025-12-26T00:50:16.145 [DEBUG] [Thread-21507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:50:16.159 [DEBUG] [Thread-21507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:50:16.160 [INFO] [Thread-21507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:50:16.167 [DEBUG] [Thread-21507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:50:16.167 [DEBUG] [Thread-21507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:50:16.168 [DEBUG] [Thread-21507] [transport.py] [_log()] client lang: <none>
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] server lang: <none>
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] kex follows: False
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:50:16.169 [DEBUG] [Thread-21507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:50:16.170 [DEBUG] [Thread-21507] [transport.py] [_log()] Compression: none
2025-12-26T00:50:16.170 [DEBUG] [Thread-21507] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:50:16.232 [DEBUG] [Thread-21507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:50:16.232 [DEBUG] [Thread-21507] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:50:16.233 [DEBUG] [Thread-21507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:50:16.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:50:16.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:50:16.291 [DEBUG] [Thread-21507] [transport.py] [_log()] userauth is OK
2025-12-26T00:50:16.291 [DEBUG] [Thread-21507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:50:16.291 [DEBUG] [Thread-21507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:50:16.291 [DEBUG] [Thread-21507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:50:16.291 [DEBUG] [Thread-21507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:50:16.313 [INFO] [Thread-21507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:50:16.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-26T00:50:16.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:50:17.136 [DEBUG] [Thread-21507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:50:17.136 [DEBUG] [Thread-21507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:50:17.185 [DEBUG] [Thread-21507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:50:17.185 [DEBUG] [Thread-21507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:50:17.195 [DEBUG] [Thread-21507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:50:17.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:50:17.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-26T00:50:17.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-26T00:50:17.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:50:17.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:50:17.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:50:17.236 [DEBUG] [Thread-21507] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:50:19.331 [DEBUG] [Thread-21509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:27.925 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:27.925 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:34.369 [DEBUG] [Thread-21510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:40.438 [DEBUG] [Thread-21511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:47.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:50:47.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:50:47.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-26T00:50:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 50, 17), 2.34, 85.4, 0.0, 16.73, 12.35, 1, 1, 0, 2, 0, 0),)
2025-12-26T00:50:47.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:50:17
2025-12-26T00:50:48.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:50:48.249 [DEBUG] [Thread-21512] [transport.py] [_log()] starting thread (client mode): 0xb95b3dc0
2025-12-26T00:50:48.249 [DEBUG] [Thread-21512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:50:48.268 [DEBUG] [Thread-21512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:50:48.268 [INFO] [Thread-21512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] client lang: <none>
2025-12-26T00:50:48.271 [DEBUG] [Thread-21512] [transport.py] [_log()] server lang: <none>
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] kex follows: False
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] Compression: none
2025-12-26T00:50:48.272 [DEBUG] [Thread-21512] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:50:48.287 [DEBUG] [Thread-21512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:50:48.287 [DEBUG] [Thread-21512] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:50:48.288 [DEBUG] [Thread-21512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:50:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:50:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:50:48.288 [DEBUG] [Thread-21512] [transport.py] [_log()] userauth is OK
2025-12-26T00:50:48.288 [DEBUG] [Thread-21512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:50:48.289 [DEBUG] [Thread-21512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:50:48.289 [DEBUG] [Thread-21512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:50:48.289 [DEBUG] [Thread-21512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:50:48.303 [INFO] [Thread-21512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:50:48.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:50:48.956 [DEBUG] [Thread-21512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:50:48.956 [DEBUG] [Thread-21512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:50:48.957 [DEBUG] [Thread-21512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:50:48.996 [DEBUG] [Thread-21512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:50:48.997 [DEBUG] [Thread-21512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:50:48.999 [DEBUG] [Thread-21512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:50:49.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:50:49.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:50:49.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:50:49.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:50:49.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:50:49.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:50:49.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:50:49.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.951450 -999.00  +12.50   9.81     86  +10.30 1 1 1 2 1     0    0 1.78 -16.17 ZNESW 6.6 9.8 213.6 16.2 13.2 -22.6 13.1 -22.2 13.0 -20.6 13.2 -21.6
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.951450
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:50:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:50:49.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:50:17', tmtdew=2.34, humidity=85.4, cloud=0.0, wind=16.73, temperature=12.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:50:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:47:00')
2025-12-26T00:50:49.022 [DEBUG] [Thread-21512] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:50:49.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-26T00:50:49.111 [DEBUG] [Thread-21515] [transport.py] [_log()] starting thread (client mode): 0xb6b63820
2025-12-26T00:50:49.111 [DEBUG] [Thread-21515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:50:49.126 [DEBUG] [Thread-21515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:50:49.126 [INFO] [Thread-21515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:50:49.133 [DEBUG] [Thread-21515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] client lang: <none>
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] server lang: <none>
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] kex follows: False
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] Compression: none
2025-12-26T00:50:49.134 [DEBUG] [Thread-21515] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:50:49.189 [DEBUG] [Thread-21515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:50:49.190 [DEBUG] [Thread-21515] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:50:49.190 [DEBUG] [Thread-21515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:50:49.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:50:49.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:50:49.247 [DEBUG] [Thread-21515] [transport.py] [_log()] userauth is OK
2025-12-26T00:50:49.247 [DEBUG] [Thread-21515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:50:49.247 [DEBUG] [Thread-21515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:50:49.247 [DEBUG] [Thread-21515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:50:49.247 [DEBUG] [Thread-21515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:50:49.266 [INFO] [Thread-21515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:50:49.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-26T00:50:49.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:50:49.403 [DEBUG] [Thread-21517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:50:50.082 [DEBUG] [Thread-21515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:50:50.082 [DEBUG] [Thread-21515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:50:50.129 [DEBUG] [Thread-21515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:50:50.129 [DEBUG] [Thread-21515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:50:50.138 [DEBUG] [Thread-21515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:50:50.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:50:50.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-26T00:50: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') -> 00000000
2025-12-26T00:50:50.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:50:50.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:50:50.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:50:50.171 [DEBUG] [Thread-21515] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:51:04.458 [DEBUG] [Thread-21518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:19.490 [DEBUG] [Thread-21519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:51:20.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:51:20.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-26T00:51:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 50, 49), 2.34, 85.39, 0.0, 18.46, 12.31, 1, 1, 2, 2, 0, 0),)
2025-12-26T00:51:20.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:50:49
2025-12-26T00:51:21.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:51:21.186 [DEBUG] [Thread-21520] [transport.py] [_log()] starting thread (client mode): 0xb95907f0
2025-12-26T00:51:21.186 [DEBUG] [Thread-21520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:51:21.207 [DEBUG] [Thread-21520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:51:21.208 [INFO] [Thread-21520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:51:21.211 [DEBUG] [Thread-21520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:51:21.211 [DEBUG] [Thread-21520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:51:21.211 [DEBUG] [Thread-21520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] client lang: <none>
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] server lang: <none>
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] kex follows: False
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:51:21.212 [DEBUG] [Thread-21520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:51:21.213 [DEBUG] [Thread-21520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:51:21.213 [DEBUG] [Thread-21520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:51:21.213 [DEBUG] [Thread-21520] [transport.py] [_log()] Compression: none
2025-12-26T00:51:21.213 [DEBUG] [Thread-21520] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:51:21.231 [DEBUG] [Thread-21520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:51:21.232 [DEBUG] [Thread-21520] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:51:21.232 [DEBUG] [Thread-21520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:51:21.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:51:21.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:51:21.234 [DEBUG] [Thread-21520] [transport.py] [_log()] userauth is OK
2025-12-26T00:51:21.234 [DEBUG] [Thread-21520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:51:21.234 [DEBUG] [Thread-21520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:51:21.234 [DEBUG] [Thread-21520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:51:21.234 [DEBUG] [Thread-21520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:51:21.259 [INFO] [Thread-21520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:51:21.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:51:21.904 [DEBUG] [Thread-21520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:51:21.904 [DEBUG] [Thread-21520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:51:21.905 [DEBUG] [Thread-21520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:51:21.945 [DEBUG] [Thread-21520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:51:21.945 [DEBUG] [Thread-21520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:51:21.947 [DEBUG] [Thread-21520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:51:21.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:51:21.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:51:21.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:51:21.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:51:21.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:51:21.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:51:21.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.951797 -999.00  +12.50   8.86     86  +10.30 1 1 1 2 1     0    0 1.76 -15.28 ZNESW 11.5 8.9 209.6 17.0 13.2 -22.7 13.1 -22.1 13.0 -20.5 13.2 -21.5
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.951797
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:51:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:50:49', tmtdew=2.34, humidity=85.39, cloud=0.0, wind=18.46, temperature=12.31, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:50:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:47:00')
2025-12-26T00:51:21.966 [DEBUG] [Thread-21520] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:51:22.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-26T00:51:22.049 [DEBUG] [Thread-21523] [transport.py] [_log()] starting thread (client mode): 0xb9591c90
2025-12-26T00:51:22.050 [DEBUG] [Thread-21523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:51:22.064 [DEBUG] [Thread-21523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:51:22.064 [INFO] [Thread-21523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] client lang: <none>
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] server lang: <none>
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] kex follows: False
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] Compression: none
2025-12-26T00:51:22.072 [DEBUG] [Thread-21523] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:51:22.134 [DEBUG] [Thread-21523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:51:22.135 [DEBUG] [Thread-21523] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:51:22.135 [DEBUG] [Thread-21523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:51:22.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:51:22.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:51:22.195 [DEBUG] [Thread-21523] [transport.py] [_log()] userauth is OK
2025-12-26T00:51:22.195 [DEBUG] [Thread-21523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:51:22.195 [DEBUG] [Thread-21523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:51:22.195 [DEBUG] [Thread-21523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:51:22.195 [DEBUG] [Thread-21523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:51:22.213 [INFO] [Thread-21523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:51:22.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-26T00:51:22.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:51:23.045 [DEBUG] [Thread-21523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:51:23.045 [DEBUG] [Thread-21523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:51:23.092 [DEBUG] [Thread-21523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:51:23.092 [DEBUG] [Thread-21523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:51:23.100 [DEBUG] [Thread-21523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:51:23.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:51:23.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-26T00:51:23.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-26T00:51:23.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:51:23.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:51:23.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:51:23.132 [DEBUG] [Thread-21523] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:51:28.123 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:28.124 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:34.525 [DEBUG] [Thread-21525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:40.512 [DEBUG] [Thread-21526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:49.580 [DEBUG] [Thread-21527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:51:53.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:51:53.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:51:53.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-26T00:51:53.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 51, 21), 1.56, 90.25, 0.0, 18.44, 8.05, 1, 2, 2, 2, 0, 0),)
2025-12-26T00:51:53.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:51:21
2025-12-26T00:51:54.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:51:54.150 [DEBUG] [Thread-21528] [transport.py] [_log()] starting thread (client mode): 0xb6b2b640
2025-12-26T00:51:54.150 [DEBUG] [Thread-21528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:51:54.170 [DEBUG] [Thread-21528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:51:54.170 [INFO] [Thread-21528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:51:54.173 [DEBUG] [Thread-21528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] client lang: <none>
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] server lang: <none>
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] kex follows: False
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] Compression: none
2025-12-26T00:51:54.174 [DEBUG] [Thread-21528] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:51:54.189 [DEBUG] [Thread-21528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:51:54.190 [DEBUG] [Thread-21528] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:51:54.190 [DEBUG] [Thread-21528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:51:54.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:51:54.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:51:54.191 [DEBUG] [Thread-21528] [transport.py] [_log()] userauth is OK
2025-12-26T00:51:54.191 [DEBUG] [Thread-21528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:51:54.191 [DEBUG] [Thread-21528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:51:54.191 [DEBUG] [Thread-21528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:51:54.191 [DEBUG] [Thread-21528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:51:54.211 [INFO] [Thread-21528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:51:54.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:51:54.845 [DEBUG] [Thread-21528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:51:54.845 [DEBUG] [Thread-21528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:51:54.845 [DEBUG] [Thread-21528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:51:54.886 [DEBUG] [Thread-21528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:51:54.886 [DEBUG] [Thread-21528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:51:54.888 [DEBUG] [Thread-21528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:51:54.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:51:54.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:51:54.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:51:54.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:51:54.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:51:54.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:51:54.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.952491 -999.00  +12.50  11.74     86  +10.30 1 1 1 2 1     0    0 1.80 -14.63 ZNESW 11.3 11.7 209.0 16.2 13.2 -22.7 13.1 -22.2 13.0 -20.6 13.3 -21.8
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.952491
2025-12-26T00:51:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:51:54.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:51:54.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:51:54.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:51:54.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:51:54.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:51:21', tmtdew=1.56, humidity=90.25, cloud=0.0, wind=18.44, temperature=8.05, tmtdew_warn=1, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:51:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.23775000000000013, 0.12325000000000053, 0.33725000000000094, 0.17049999999999876, 0.1305000000000014, 0.16825000000000045, 0.3089999999999993, 0.46225000000000094, 0.30249999999999844, 0.09450000000000003, 0.1822499999999998, 0.19500000000000028, 0.15700000000000003, 0.20324999999999882, 0.2759999999999998, 0.3819999999999997, 0.15724999999999945, 0.18950000000000067, 0.10699999999999932, 0.21924999999999883, 0.2594999999999992, 0.31274999999999764, 0.3487500000000008, 0.2967499999999994, 0.21249999999999858, 0.23150000000000048, 0.3017500000000002, 0.2605000000000004, 0.2970000000000006, 0.3600000000000012, 0.3150000000000013, 0.39500000000000046, 0.23274999999999935], zp_timestamp='2025-12-25T22:47:00')
2025-12-26T00:51:54.907 [DEBUG] [Thread-21528] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:51:54.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:51:54.991 [DEBUG] [Thread-21531] [transport.py] [_log()] starting thread (client mode): 0xb6b2a8f0
2025-12-26T00:51:54.991 [DEBUG] [Thread-21531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:51:55.006 [DEBUG] [Thread-21531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:51:55.006 [INFO] [Thread-21531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] client lang: <none>
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] server lang: <none>
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] kex follows: False
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] Compression: none
2025-12-26T00:51:55.014 [DEBUG] [Thread-21531] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:51:55.070 [DEBUG] [Thread-21531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:51:55.070 [DEBUG] [Thread-21531] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:51:55.070 [DEBUG] [Thread-21531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:51:55.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:51:55.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:51:55.127 [DEBUG] [Thread-21531] [transport.py] [_log()] userauth is OK
2025-12-26T00:51:55.127 [DEBUG] [Thread-21531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:51:55.127 [DEBUG] [Thread-21531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:51:55.127 [DEBUG] [Thread-21531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:51:55.127 [DEBUG] [Thread-21531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:51:55.142 [INFO] [Thread-21531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:51:55.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-26T00:51:55.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:51:55.970 [DEBUG] [Thread-21531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:51:55.970 [DEBUG] [Thread-21531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:51:56.018 [DEBUG] [Thread-21531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:51:56.018 [DEBUG] [Thread-21531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:51:56.026 [DEBUG] [Thread-21531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:51:56.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:51:56.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-26T00:51:56.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-26T00:51:56.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:51:56.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:51:56.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:51:56.058 [DEBUG] [Thread-21531] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:52:04.616 [DEBUG] [Thread-21533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:19.666 [DEBUG] [Thread-21534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:52:26.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:52:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T00:52:26.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 51, 53), 1.56, 90.27, 0.0, 15.67, 8.09, 1, 2, 2, 2, 0, 0),)
2025-12-26T00:52:26.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:51:53
2025-12-26T00:52:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:52:27.118 [DEBUG] [Thread-21535] [transport.py] [_log()] starting thread (client mode): 0xb6b29960
2025-12-26T00:52:27.118 [DEBUG] [Thread-21535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:52:27.139 [DEBUG] [Thread-21535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:52:27.139 [INFO] [Thread-21535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] client lang: <none>
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] server lang: <none>
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] kex follows: False
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] Compression: none
2025-12-26T00:52:27.142 [DEBUG] [Thread-21535] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:52:27.159 [DEBUG] [Thread-21535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:52:27.159 [DEBUG] [Thread-21535] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:52:27.159 [DEBUG] [Thread-21535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:52:27.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:52:27.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:52:27.160 [DEBUG] [Thread-21535] [transport.py] [_log()] userauth is OK
2025-12-26T00:52:27.160 [DEBUG] [Thread-21535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:52:27.160 [DEBUG] [Thread-21535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:52:27.160 [DEBUG] [Thread-21535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:52:27.160 [DEBUG] [Thread-21535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:52:27.174 [INFO] [Thread-21535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:52:27.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:52:27.836 [DEBUG] [Thread-21535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:52:27.836 [DEBUG] [Thread-21535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:52:27.836 [DEBUG] [Thread-21535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:52:27.877 [DEBUG] [Thread-21535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:52:27.877 [DEBUG] [Thread-21535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:52:27.879 [DEBUG] [Thread-21535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:52:27.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:52:27.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:52:27.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:52:27.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:52:27.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:52:27.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:52:27.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.952839 -999.00  +12.50   9.98     86  +10.30 1 1 1 2 1     0    0 1.88 -13.42 ZNESW 13.4 10.0 199.4 15.9 13.3 -22.7 13.1 -22.3 12.9 -20.8 13.2 -21.8
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.952839
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:52:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:51:53', tmtdew=1.56, humidity=90.27, cloud=0.0, wind=15.67, temperature=8.09, tmtdew_warn=1, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:52:05.290', atlas_cloud=1, atlas_rain=1, zp_data=[0.2582500000000003, 0.12725000000000009, 0.33025000000000126, 0.1875, 0.1404999999999994, 0.2032500000000006, 0.3490000000000002, 0.566250000000001, 0.25450000000000017, 0.09550000000000125, 0.16525000000000034, 0.2004999999999999, 0.20500000000000007, 0.21325000000000038, 0.3049999999999997, 0.4029999999999987, 0.17225000000000001, 0.18299999999999983, 0.11950000000000038, 0.2627499999999987, 0.23999999999999844, 0.35274999999999856, 0.3302499999999995, 0.32474999999999987, 0.19349999999999845, 0.24649999999999928, 0.25075000000000003, 0.23599999999999888, 0.3250000000000002, 0.41900000000000137, 0.33800000000000097, 0.43400000000000105, 0.316749999999999], zp_timestamp='2025-12-25T22:51:00')
2025-12-26T00:52:27.898 [DEBUG] [Thread-21535] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:52: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-26T00:52:27.980 [DEBUG] [Thread-21538] [transport.py] [_log()] starting thread (client mode): 0xb6b28fd0
2025-12-26T00:52:27.980 [DEBUG] [Thread-21538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:52:27.995 [DEBUG] [Thread-21538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:52:27.995 [INFO] [Thread-21538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:52:28.004 [DEBUG] [Thread-21538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:52:28.004 [DEBUG] [Thread-21538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:52:28.004 [DEBUG] [Thread-21538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:52:28.004 [DEBUG] [Thread-21538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] client lang: <none>
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] server lang: <none>
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] kex follows: False
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] Compression: none
2025-12-26T00:52:28.005 [DEBUG] [Thread-21538] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:52:28.060 [DEBUG] [Thread-21538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:52:28.060 [DEBUG] [Thread-21538] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:52:28.060 [DEBUG] [Thread-21538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:52:28.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:52:28.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:52:28.117 [DEBUG] [Thread-21538] [transport.py] [_log()] userauth is OK
2025-12-26T00:52:28.117 [DEBUG] [Thread-21538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:52:28.117 [DEBUG] [Thread-21538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:52:28.117 [DEBUG] [Thread-21538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:52:28.117 [DEBUG] [Thread-21538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:52:28.131 [INFO] [Thread-21538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:52:28.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-26T00:52:28.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:52:28.325 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:28.326 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:28.948 [DEBUG] [Thread-21538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:52:28.948 [DEBUG] [Thread-21538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:52:28.996 [DEBUG] [Thread-21538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:52:28.996 [DEBUG] [Thread-21538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:52:29.006 [DEBUG] [Thread-21538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:52:29.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:52:29.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:52:29.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:52:29.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:52:29.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:52:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:52:29.043 [DEBUG] [Thread-21538] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:52:34.700 [DEBUG] [Thread-21540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:40.610 [DEBUG] [Thread-21541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:49.754 [DEBUG] [Thread-21542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:52:59.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:52:59.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:52:59.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-26T00:52:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 52, 25), 1.56, 90.27, 0.0, 15.93, 8.1, 1, 2, 0, 2, 0, 0),)
2025-12-26T00:52:59.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:52:25
2025-12-26T00:52:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:53:00.135 [DEBUG] [Thread-21543] [transport.py] [_log()] starting thread (client mode): 0xb6b28970
2025-12-26T00:53:00.135 [DEBUG] [Thread-21543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:53:00.155 [DEBUG] [Thread-21543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:53:00.155 [INFO] [Thread-21543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] client lang: <none>
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] server lang: <none>
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] kex follows: False
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:53:00.158 [DEBUG] [Thread-21543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:53:00.159 [DEBUG] [Thread-21543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:53:00.159 [DEBUG] [Thread-21543] [transport.py] [_log()] Compression: none
2025-12-26T00:53:00.159 [DEBUG] [Thread-21543] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:53:00.174 [DEBUG] [Thread-21543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:53:00.174 [DEBUG] [Thread-21543] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:53:00.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:53:00.174 [DEBUG] [Thread-21543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:53:00.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:53:00.175 [DEBUG] [Thread-21543] [transport.py] [_log()] userauth is OK
2025-12-26T00:53:00.175 [DEBUG] [Thread-21543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:53:00.175 [DEBUG] [Thread-21543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:53:00.175 [DEBUG] [Thread-21543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:53:00.175 [DEBUG] [Thread-21543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:53:00.190 [INFO] [Thread-21543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:53:00.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:53:00.810 [DEBUG] [Thread-21543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:53:00.810 [DEBUG] [Thread-21543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:53:00.810 [DEBUG] [Thread-21543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:53:00.850 [DEBUG] [Thread-21543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:53:00.850 [DEBUG] [Thread-21543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:53:00.853 [DEBUG] [Thread-21543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:53:00.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:53:00.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:53:00.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:53:00.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:53:00.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:53:00.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:53:00.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.953186 -999.00  +12.50  13.83     86  +10.30 1 1 1 2 1     0    0 1.87 -12.87 ZNESW 16.1 13.8 201.8 17.5 13.3 -22.8 13.1 -22.4 12.9 -20.8 13.3 -21.7
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.953186
2025-12-26T00:53:00.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:53:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:53:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:53:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:53:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:53:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:52:25', tmtdew=1.56, humidity=90.27, cloud=0.0, wind=15.93, temperature=8.1, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:52:35.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.2582500000000003, 0.12725000000000009, 0.33025000000000126, 0.1875, 0.1404999999999994, 0.2032500000000006, 0.3490000000000002, 0.566250000000001, 0.25450000000000017, 0.09550000000000125, 0.16525000000000034, 0.2004999999999999, 0.20500000000000007, 0.21325000000000038, 0.3049999999999997, 0.4029999999999987, 0.17225000000000001, 0.18299999999999983, 0.11950000000000038, 0.2627499999999987, 0.23999999999999844, 0.35274999999999856, 0.3302499999999995, 0.32474999999999987, 0.19349999999999845, 0.24649999999999928, 0.25075000000000003, 0.23599999999999888, 0.3250000000000002, 0.41900000000000137, 0.33800000000000097, 0.43400000000000105, 0.316749999999999], zp_timestamp='2025-12-25T22:51:00')
2025-12-26T00:53:00.870 [DEBUG] [Thread-21543] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:53:00.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-26T00:53:00.956 [DEBUG] [Thread-21546] [transport.py] [_log()] starting thread (client mode): 0xb6b29030
2025-12-26T00:53:00.956 [DEBUG] [Thread-21546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:53:00.970 [DEBUG] [Thread-21546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:53:00.970 [INFO] [Thread-21546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] client lang: <none>
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] server lang: <none>
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] kex follows: False
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] Compression: none
2025-12-26T00:53:00.977 [DEBUG] [Thread-21546] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:53:01.034 [DEBUG] [Thread-21546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:53:01.034 [DEBUG] [Thread-21546] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:53:01.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:53:01.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:53:01.035 [DEBUG] [Thread-21546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:53:01.091 [DEBUG] [Thread-21546] [transport.py] [_log()] userauth is OK
2025-12-26T00:53:01.091 [DEBUG] [Thread-21546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:53:01.091 [DEBUG] [Thread-21546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:53:01.091 [DEBUG] [Thread-21546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:53:01.091 [DEBUG] [Thread-21546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:53:01.105 [INFO] [Thread-21546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:53:01.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:53:01.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:53:01.963 [DEBUG] [Thread-21546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:53:01.963 [DEBUG] [Thread-21546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:53:02.011 [DEBUG] [Thread-21546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:53:02.011 [DEBUG] [Thread-21546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:53:02.019 [DEBUG] [Thread-21546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:53:02.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:53:02.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T00:53:02.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-26T00:53:02.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:53:02.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:53:02.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:53:02.050 [DEBUG] [Thread-21546] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:53:04.786 [DEBUG] [Thread-21548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:53:19.835 [DEBUG] [Thread-21549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:53:28.525 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:53:28.526 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:53:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:53:32.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:53:32.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-26T00:53:32.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 52, 57), 1.56, 90.25, 0.0, 16.87, 8.09, 1, 2, 0, 2, 0, 0),)
2025-12-26T00:53:32.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:52:57
2025-12-26T00:53:32.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:53:33.068 [DEBUG] [Thread-21550] [transport.py] [_log()] starting thread (client mode): 0xb6b29990
2025-12-26T00:53:33.068 [DEBUG] [Thread-21550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:53:33.088 [DEBUG] [Thread-21550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:53:33.088 [INFO] [Thread-21550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] client lang: <none>
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] server lang: <none>
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] kex follows: False
2025-12-26T00:53:33.092 [DEBUG] [Thread-21550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:53:33.093 [DEBUG] [Thread-21550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:53:33.093 [DEBUG] [Thread-21550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:53:33.093 [DEBUG] [Thread-21550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:53:33.093 [DEBUG] [Thread-21550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:53:33.093 [DEBUG] [Thread-21550] [transport.py] [_log()] Compression: none
2025-12-26T00:53:33.093 [DEBUG] [Thread-21550] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:53:33.109 [DEBUG] [Thread-21550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:53:33.110 [DEBUG] [Thread-21550] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:53:33.110 [DEBUG] [Thread-21550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:53:33.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:53:33.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:53:33.113 [DEBUG] [Thread-21550] [transport.py] [_log()] userauth is OK
2025-12-26T00:53:33.113 [DEBUG] [Thread-21550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:53:33.113 [DEBUG] [Thread-21550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:53:33.113 [DEBUG] [Thread-21550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:53:33.113 [DEBUG] [Thread-21550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:53:33.138 [INFO] [Thread-21550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:53:33.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:53:33.777 [DEBUG] [Thread-21550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:53:33.778 [DEBUG] [Thread-21550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:53:33.778 [DEBUG] [Thread-21550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:53:33.819 [DEBUG] [Thread-21550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:53:33.819 [DEBUG] [Thread-21550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:53:33.822 [DEBUG] [Thread-21550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:53:33.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:53:33.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:53:33.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:53:33.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:53:33.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:53:33.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:53:33.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:53:33.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:53:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:53:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.953533 -999.00  +12.50   9.73     86  +10.40 1 1 1 2 1     0    0 1.85 -12.74 ZNESW 12.1 9.7 211.4 17.7 13.2 -22.8 13.1 -22.3 12.9 -20.8 13.2 -21.8
2025-12-26T00:53:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:53:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:53:33.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.953533
2025-12-26T00:53:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:53:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:53:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:53:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:53:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:53:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:52:57', tmtdew=1.56, humidity=90.25, cloud=0.0, wind=16.87, temperature=8.09, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:53:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.2582500000000003, 0.12725000000000009, 0.33025000000000126, 0.1875, 0.1404999999999994, 0.2032500000000006, 0.3490000000000002, 0.566250000000001, 0.25450000000000017, 0.09550000000000125, 0.16525000000000034, 0.2004999999999999, 0.20500000000000007, 0.21325000000000038, 0.3049999999999997, 0.4029999999999987, 0.17225000000000001, 0.18299999999999983, 0.11950000000000038, 0.2627499999999987, 0.23999999999999844, 0.35274999999999856, 0.3302499999999995, 0.32474999999999987, 0.19349999999999845, 0.24649999999999928, 0.25075000000000003, 0.23599999999999888, 0.3250000000000002, 0.41900000000000137, 0.33800000000000097, 0.43400000000000105, 0.316749999999999], zp_timestamp='2025-12-25T22:51:00')
2025-12-26T00:53:33.850 [DEBUG] [Thread-21550] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:53:33.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-26T00:53:33.954 [DEBUG] [Thread-21553] [transport.py] [_log()] starting thread (client mode): 0xb41075e0
2025-12-26T00:53:33.954 [DEBUG] [Thread-21553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:53:33.969 [DEBUG] [Thread-21553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:53:33.970 [INFO] [Thread-21553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:33.977 [DEBUG] [Thread-21553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] client lang: <none>
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] server lang: <none>
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] kex follows: False
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] Compression: none
2025-12-26T00:53:33.978 [DEBUG] [Thread-21553] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:53:34.033 [DEBUG] [Thread-21553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:53:34.034 [DEBUG] [Thread-21553] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:53:34.034 [DEBUG] [Thread-21553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:53:34.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:53:34.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:53:34.090 [DEBUG] [Thread-21553] [transport.py] [_log()] userauth is OK
2025-12-26T00:53:34.090 [DEBUG] [Thread-21553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:53:34.091 [DEBUG] [Thread-21553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:53:34.091 [DEBUG] [Thread-21553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:53:34.091 [DEBUG] [Thread-21553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:53:34.115 [INFO] [Thread-21553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:53:34.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:53:34.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:53:34.870 [DEBUG] [Thread-21555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:53:34.918 [DEBUG] [Thread-21553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:53:34.919 [DEBUG] [Thread-21553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:53:34.967 [DEBUG] [Thread-21553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:53:34.967 [DEBUG] [Thread-21553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:53:34.977 [DEBUG] [Thread-21553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:53:34.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:53:34.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-26T00:53:34.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-26T00:53:35.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:53:35.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:53:35.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:53:35.013 [DEBUG] [Thread-21553] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:53:40.680 [DEBUG] [Thread-21556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:53:49.921 [DEBUG] [Thread-21557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:04.957 [DEBUG] [Thread-21558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:05.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:54:05.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:54:05.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-26T00:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 54, 1), 1.56, 90.26, 0.0, 16.96, 8.1, 1, 2, 2, 2, 0, 0),)
2025-12-26T00:54:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:54:01
2025-12-26T00:54:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:54:05.996 [DEBUG] [Thread-21559] [transport.py] [_log()] starting thread (client mode): 0xb6b2ad70
2025-12-26T00:54:05.997 [DEBUG] [Thread-21559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:54:06.013 [DEBUG] [Thread-21559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:54:06.013 [INFO] [Thread-21559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:54:06.015 [DEBUG] [Thread-21559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] client lang: <none>
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] server lang: <none>
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] kex follows: False
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] Compression: none
2025-12-26T00:54:06.016 [DEBUG] [Thread-21559] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:54:06.028 [DEBUG] [Thread-21559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:54:06.028 [DEBUG] [Thread-21559] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:54:06.029 [DEBUG] [Thread-21559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:54:06.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:54:06.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:54:06.031 [DEBUG] [Thread-21559] [transport.py] [_log()] userauth is OK
2025-12-26T00:54:06.031 [DEBUG] [Thread-21559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:54:06.031 [DEBUG] [Thread-21559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:54:06.031 [DEBUG] [Thread-21559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:54:06.031 [DEBUG] [Thread-21559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:54:06.055 [INFO] [Thread-21559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:54:06.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:54:06.700 [DEBUG] [Thread-21559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:54:06.700 [DEBUG] [Thread-21559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:54:06.701 [DEBUG] [Thread-21559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:54:06.741 [DEBUG] [Thread-21559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:54:06.741 [DEBUG] [Thread-21559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:54:06.745 [DEBUG] [Thread-21559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:54:06.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:54:06.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:54:06.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:54:06.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:54:06.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:54:06.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:54:06.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:54:06.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:54:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:54:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.953880 -999.00  +12.50  11.66     86  +10.30 1 1 1 2 1     0    0 1.92 -11.05 ZNESW 13.2 11.7 196.4 16.2 13.2 -22.8 13.1 -22.5 12.9 -20.7 13.2 -21.7
2025-12-26T00:54:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:54:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:54:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.953880
2025-12-26T00:54:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:54:06.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:54:06.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:54:06.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:54:06.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:54:06.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:54:01', tmtdew=1.56, humidity=90.26, cloud=0.0, wind=16.96, temperature=8.1, tmtdew_warn=1, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:53:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.2582500000000003, 0.12725000000000009, 0.33025000000000126, 0.1875, 0.1404999999999994, 0.2032500000000006, 0.3490000000000002, 0.566250000000001, 0.25450000000000017, 0.09550000000000125, 0.16525000000000034, 0.2004999999999999, 0.20500000000000007, 0.21325000000000038, 0.3049999999999997, 0.4029999999999987, 0.17225000000000001, 0.18299999999999983, 0.11950000000000038, 0.2627499999999987, 0.23999999999999844, 0.35274999999999856, 0.3302499999999995, 0.32474999999999987, 0.19349999999999845, 0.24649999999999928, 0.25075000000000003, 0.23599999999999888, 0.3250000000000002, 0.41900000000000137, 0.33800000000000097, 0.43400000000000105, 0.316749999999999], zp_timestamp='2025-12-25T22:51:00')
2025-12-26T00:54:06.773 [DEBUG] [Thread-21559] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:54:06.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-26T00:54:06.867 [DEBUG] [Thread-21562] [transport.py] [_log()] starting thread (client mode): 0xb95d62c0
2025-12-26T00:54:06.867 [DEBUG] [Thread-21562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:54:06.882 [DEBUG] [Thread-21562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:54:06.882 [INFO] [Thread-21562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:54:06.889 [DEBUG] [Thread-21562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:54:06.889 [DEBUG] [Thread-21562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] client lang: <none>
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] server lang: <none>
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] kex follows: False
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] Compression: none
2025-12-26T00:54:06.890 [DEBUG] [Thread-21562] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:54:06.948 [DEBUG] [Thread-21562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:54:06.948 [DEBUG] [Thread-21562] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:54:06.949 [DEBUG] [Thread-21562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:54:06.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:54:06.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:54:07.004 [DEBUG] [Thread-21562] [transport.py] [_log()] userauth is OK
2025-12-26T00:54:07.005 [DEBUG] [Thread-21562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:54:07.005 [DEBUG] [Thread-21562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:54:07.005 [DEBUG] [Thread-21562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:54:07.005 [DEBUG] [Thread-21562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:54:07.023 [INFO] [Thread-21562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:54:07.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-26T00:54:07.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:54:07.866 [DEBUG] [Thread-21562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:54:07.866 [DEBUG] [Thread-21562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:54:07.914 [DEBUG] [Thread-21562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:54:07.914 [DEBUG] [Thread-21562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:54:07.923 [DEBUG] [Thread-21562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:54:07.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:54:07.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-26T00:54:07.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:54:07.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:54:07.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:54:07.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:54:07.960 [DEBUG] [Thread-21562] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:54:19.991 [DEBUG] [Thread-21564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:28.727 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:28.728 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:35.030 [DEBUG] [Thread-21565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:54:37.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:54:37.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-26T00:54:38.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 54, 33), 1.53, 90.27, 0.0, 17.84, 8.05, 1, 2, 2, 2, 0, 0),)
2025-12-26T00:54:38.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:54:33
2025-12-26T00:54:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:54:38.970 [DEBUG] [Thread-21566] [transport.py] [_log()] starting thread (client mode): 0xb957bc10
2025-12-26T00:54:38.970 [DEBUG] [Thread-21566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:54:38.983 [DEBUG] [Thread-21566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:54:38.983 [INFO] [Thread-21566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] client lang: <none>
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] server lang: <none>
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] kex follows: False
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] Compression: none
2025-12-26T00:54:38.986 [DEBUG] [Thread-21566] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:54:38.994 [DEBUG] [Thread-21566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:54:38.994 [DEBUG] [Thread-21566] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:54:38.994 [DEBUG] [Thread-21566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:54:38.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:54:38.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:54:38.995 [DEBUG] [Thread-21566] [transport.py] [_log()] userauth is OK
2025-12-26T00:54:38.996 [DEBUG] [Thread-21566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:54:38.996 [DEBUG] [Thread-21566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:54:38.996 [DEBUG] [Thread-21566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:54:38.996 [DEBUG] [Thread-21566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:54:39.016 [INFO] [Thread-21566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:54:39.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:54:39.614 [DEBUG] [Thread-21566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:54:39.615 [DEBUG] [Thread-21566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:54:39.615 [DEBUG] [Thread-21566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:54:39.656 [DEBUG] [Thread-21566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:54:39.656 [DEBUG] [Thread-21566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:54:39.662 [DEBUG] [Thread-21566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:54:39.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:54:39.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:54:39.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:54:39.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:54:39.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:54:39.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:54:39.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:54:39.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:54:39.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:54:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.954228 -999.00  +12.50  11.69     86  +10.30 1 1 1 2 1     0    0 1.88 -10.74 ZNESW 10.2 11.7 203.4 15.4 13.2 -23.0 13.1 -22.4 12.9 -20.8 13.2 -22.0
2025-12-26T00:54:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:54:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:54:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.954228
2025-12-26T00:54:39.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:54:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:54:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:54:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:54:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:54:39.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:54:33', tmtdew=1.53, humidity=90.27, cloud=0.0, wind=17.84, temperature=8.05, tmtdew_warn=1, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:54:05.299', atlas_cloud=1, atlas_rain=1, zp_data=[0.2582500000000003, 0.12725000000000009, 0.33025000000000126, 0.1875, 0.1404999999999994, 0.2032500000000006, 0.3490000000000002, 0.566250000000001, 0.25450000000000017, 0.09550000000000125, 0.16525000000000034, 0.2004999999999999, 0.20500000000000007, 0.21325000000000038, 0.3049999999999997, 0.4029999999999987, 0.17225000000000001, 0.18299999999999983, 0.11950000000000038, 0.2627499999999987, 0.23999999999999844, 0.35274999999999856, 0.3302499999999995, 0.32474999999999987, 0.19349999999999845, 0.24649999999999928, 0.25075000000000003, 0.23599999999999888, 0.3250000000000002, 0.41900000000000137, 0.33800000000000097, 0.43400000000000105, 0.316749999999999], zp_timestamp='2025-12-25T22:51:00')
2025-12-26T00:54:39.687 [DEBUG] [Thread-21566] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:54:39.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T00:54:39.783 [DEBUG] [Thread-21569] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-26T00:54:39.783 [DEBUG] [Thread-21569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:54:39.797 [DEBUG] [Thread-21569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:54:39.797 [INFO] [Thread-21569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:54:39.805 [DEBUG] [Thread-21569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:54:39.805 [DEBUG] [Thread-21569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] client lang: <none>
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] server lang: <none>
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] kex follows: False
2025-12-26T00:54:39.806 [DEBUG] [Thread-21569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:54:39.807 [DEBUG] [Thread-21569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:54:39.807 [DEBUG] [Thread-21569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:54:39.807 [DEBUG] [Thread-21569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:54:39.807 [DEBUG] [Thread-21569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:54:39.807 [DEBUG] [Thread-21569] [transport.py] [_log()] Compression: none
2025-12-26T00:54:39.807 [DEBUG] [Thread-21569] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:54:39.863 [DEBUG] [Thread-21569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:54:39.864 [DEBUG] [Thread-21569] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:54:39.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:54:39.865 [DEBUG] [Thread-21569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:54:39.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:54:39.923 [DEBUG] [Thread-21569] [transport.py] [_log()] userauth is OK
2025-12-26T00:54:39.923 [DEBUG] [Thread-21569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:54:39.923 [DEBUG] [Thread-21569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:54:39.924 [DEBUG] [Thread-21569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:54:39.924 [DEBUG] [Thread-21569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:54:39.942 [INFO] [Thread-21569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:54:39.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-26T00:54:39.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:54:40.756 [DEBUG] [Thread-21571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:54:40.780 [DEBUG] [Thread-21569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:54:40.780 [DEBUG] [Thread-21569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:54:40.828 [DEBUG] [Thread-21569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:54:40.828 [DEBUG] [Thread-21569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:54:40.837 [DEBUG] [Thread-21569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:54:40.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:54:40.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-26T00:54:40.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:54:40.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:54:40.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:54:40.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:54:40.874 [DEBUG] [Thread-21569] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:54:50.062 [DEBUG] [Thread-21572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:05.122 [DEBUG] [Thread-21573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:10.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:55:10.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:55:10.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-26T00:55:11.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 55, 6), 1.52, 90.29, 0.0, 16.78, 8.07, 1, 2, 2, 2, 0, 0),)
2025-12-26T00:55:11.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:55:06
2025-12-26T00:55:11.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:55:11.887 [DEBUG] [Thread-21574] [transport.py] [_log()] starting thread (client mode): 0xb6b60460
2025-12-26T00:55:11.887 [DEBUG] [Thread-21574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:55:11.907 [DEBUG] [Thread-21574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:55:11.907 [INFO] [Thread-21574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:55:11.908 [DEBUG] [Thread-21574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] client lang: <none>
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] server lang: <none>
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] kex follows: False
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] Compression: none
2025-12-26T00:55:11.909 [DEBUG] [Thread-21574] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:55:11.922 [DEBUG] [Thread-21574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:55:11.922 [DEBUG] [Thread-21574] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:55:11.923 [DEBUG] [Thread-21574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:55:11.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:55:11.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:55:11.925 [DEBUG] [Thread-21574] [transport.py] [_log()] userauth is OK
2025-12-26T00:55:11.925 [DEBUG] [Thread-21574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:55:11.925 [DEBUG] [Thread-21574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:55:11.925 [DEBUG] [Thread-21574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:55:11.925 [DEBUG] [Thread-21574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:55:11.940 [INFO] [Thread-21574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:55:11.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:55:12.566 [DEBUG] [Thread-21574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:55:12.566 [DEBUG] [Thread-21574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:55:12.566 [DEBUG] [Thread-21574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:55:12.607 [DEBUG] [Thread-21574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:55:12.607 [DEBUG] [Thread-21574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:55:12.610 [DEBUG] [Thread-21574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:55:12.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:55:12.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:55:12.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:55:12.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:55:12.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:55:12.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:55:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:55:12.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:55:12.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:55:12.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.954922 -999.00  +12.50  12.94     86  +10.30 1 1 1 2 1     0    0 1.90 -9.68 ZNESW 10.0 12.9 199.6 15.7 13.2 -22.9 13.0 -22.7 12.9 -20.8 13.2 -21.9
2025-12-26T00:55:12.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:55:12.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:55:12.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.954922
2025-12-26T00:55:12.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:55:12.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:55:12.633 [DEBUG] [Thread-21574] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:55:12.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:55:12.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:55:12.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:55:12.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:55:06', tmtdew=1.52, humidity=90.29, cloud=0.0, wind=16.78, temperature=8.07, tmtdew_warn=1, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:55:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.2582500000000003, 0.12725000000000009, 0.33025000000000126, 0.1875, 0.1404999999999994, 0.2032500000000006, 0.3490000000000002, 0.566250000000001, 0.25450000000000017, 0.09550000000000125, 0.16525000000000034, 0.2004999999999999, 0.20500000000000007, 0.21325000000000038, 0.3049999999999997, 0.4029999999999987, 0.17225000000000001, 0.18299999999999983, 0.11950000000000038, 0.2627499999999987, 0.23999999999999844, 0.35274999999999856, 0.3302499999999995, 0.32474999999999987, 0.19349999999999845, 0.24649999999999928, 0.25075000000000003, 0.23599999999999888, 0.3250000000000002, 0.41900000000000137, 0.33800000000000097, 0.43400000000000105, 0.316749999999999], zp_timestamp='2025-12-25T22:51:00')
2025-12-26T00:55:12.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-26T00:55:12.724 [DEBUG] [Thread-21577] [transport.py] [_log()] starting thread (client mode): 0xb6b28dc0
2025-12-26T00:55:12.724 [DEBUG] [Thread-21577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:55:12.739 [DEBUG] [Thread-21577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:55:12.739 [INFO] [Thread-21577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:55:12.746 [DEBUG] [Thread-21577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] client lang: <none>
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] server lang: <none>
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] kex follows: False
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:55:12.747 [DEBUG] [Thread-21577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:55:12.748 [DEBUG] [Thread-21577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:55:12.748 [DEBUG] [Thread-21577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:55:12.748 [DEBUG] [Thread-21577] [transport.py] [_log()] Compression: none
2025-12-26T00:55:12.748 [DEBUG] [Thread-21577] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:55:12.805 [DEBUG] [Thread-21577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:55:12.805 [DEBUG] [Thread-21577] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:55:12.806 [DEBUG] [Thread-21577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:55:12.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:55:12.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:55:12.864 [DEBUG] [Thread-21577] [transport.py] [_log()] userauth is OK
2025-12-26T00:55:12.864 [DEBUG] [Thread-21577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:55:12.865 [DEBUG] [Thread-21577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:55:12.865 [DEBUG] [Thread-21577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:55:12.865 [DEBUG] [Thread-21577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:55:12.884 [INFO] [Thread-21577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:55:12.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-26T00:55:12.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:55:13.712 [DEBUG] [Thread-21577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:55:13.713 [DEBUG] [Thread-21577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:55:13.760 [DEBUG] [Thread-21577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:55:13.760 [DEBUG] [Thread-21577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:55:13.770 [DEBUG] [Thread-21577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:55:13.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:55:13.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-26T00:55:13.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:55:13.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:55:13.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:55:13.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:55:13.807 [DEBUG] [Thread-21577] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:55:20.153 [DEBUG] [Thread-21579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:28.928 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:28.930 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:35.204 [DEBUG] [Thread-21580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:40.828 [DEBUG] [Thread-21581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:55:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:55:43.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:55:43.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-26T00:55:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 55, 38), 1.56, 90.26, 0.0, 17.42, 8.03, 1, 2, 0, 2, 0, 0),)
2025-12-26T00:55:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:55:38
2025-12-26T00:55:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:55:44.798 [DEBUG] [Thread-21582] [transport.py] [_log()] starting thread (client mode): 0xb95b3220
2025-12-26T00:55:44.798 [DEBUG] [Thread-21582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:55:44.818 [DEBUG] [Thread-21582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:55:44.818 [INFO] [Thread-21582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] client lang: <none>
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] server lang: <none>
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] kex follows: False
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:55:44.821 [DEBUG] [Thread-21582] [transport.py] [_log()] Compression: none
2025-12-26T00:55:44.822 [DEBUG] [Thread-21582] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:55:44.839 [DEBUG] [Thread-21582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:55:44.840 [DEBUG] [Thread-21582] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:55:44.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:55:44.841 [DEBUG] [Thread-21582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:55:44.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:55:44.842 [DEBUG] [Thread-21582] [transport.py] [_log()] userauth is OK
2025-12-26T00:55:44.842 [DEBUG] [Thread-21582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:55:44.843 [DEBUG] [Thread-21582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:55:44.843 [DEBUG] [Thread-21582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:55:44.843 [DEBUG] [Thread-21582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:55:44.877 [INFO] [Thread-21582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:55:44.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:55:45.535 [DEBUG] [Thread-21582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:55:45.535 [DEBUG] [Thread-21582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:55:45.535 [DEBUG] [Thread-21582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:55:45.576 [DEBUG] [Thread-21582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:55:45.576 [DEBUG] [Thread-21582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:55:45.579 [DEBUG] [Thread-21582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:55:45.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:55:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:55:45.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:55:45.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:55:45.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:55:45.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:55:45.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:55:45.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:55:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:55:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.954922 -999.00  +12.50  12.94     86  +10.30 1 1 1 2 1     0    0 1.90 -9.68 ZNESW 10.0 12.9 199.6 15.7 13.2 -22.9 13.0 -22.7 12.9 -20.8 13.2 -21.9
2025-12-26T00:55:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:55:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:55:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.954922
2025-12-26T00:55:45.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:55:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:55:38', tmtdew=1.56, humidity=90.26, cloud=0.0, wind=17.42, temperature=8.03, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:55:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:54:00')
2025-12-26T00:55:45.602 [DEBUG] [Thread-21582] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:55:45.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-26T00:55:45.697 [DEBUG] [Thread-21585] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-26T00:55:45.697 [DEBUG] [Thread-21585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:55:45.712 [DEBUG] [Thread-21585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:55:45.712 [INFO] [Thread-21585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:55:45.720 [DEBUG] [Thread-21585] [transport.py] [_log()] client lang: <none>
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] server lang: <none>
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] kex follows: False
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] Compression: none
2025-12-26T00:55:45.721 [DEBUG] [Thread-21585] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:55:45.777 [DEBUG] [Thread-21585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:55:45.778 [DEBUG] [Thread-21585] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:55:45.778 [DEBUG] [Thread-21585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:55:45.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:55:45.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:55:45.834 [DEBUG] [Thread-21585] [transport.py] [_log()] userauth is OK
2025-12-26T00:55:45.834 [DEBUG] [Thread-21585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:55:45.834 [DEBUG] [Thread-21585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:55:45.834 [DEBUG] [Thread-21585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:55:45.834 [DEBUG] [Thread-21585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:55:45.859 [INFO] [Thread-21585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:55:45.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-26T00:55:45.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:55:46.699 [DEBUG] [Thread-21585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:55:46.699 [DEBUG] [Thread-21585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:55:46.747 [DEBUG] [Thread-21585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:55:46.748 [DEBUG] [Thread-21585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:55:46.757 [DEBUG] [Thread-21585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:55:46.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:55:46.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-26T00:55:46.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T00:55:46.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:55:46.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:55:46.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:55:46.792 [DEBUG] [Thread-21585] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:55:50.237 [DEBUG] [Thread-21587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:05.303 [DEBUG] [Thread-21588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:16.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:56:16.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:56:16.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-26T00:56:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 56, 10), 1.56, 90.25, 0.0, 17.42, 8.02, 1, 2, 0, 2, 0, 0),)
2025-12-26T00:56:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:56:10
2025-12-26T00:56:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:56:17.837 [DEBUG] [Thread-21589] [transport.py] [_log()] starting thread (client mode): 0xb95b25c0
2025-12-26T00:56:17.837 [DEBUG] [Thread-21589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:56:17.857 [DEBUG] [Thread-21589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:56:17.857 [INFO] [Thread-21589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] client lang: <none>
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] server lang: <none>
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] kex follows: False
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] Compression: none
2025-12-26T00:56:17.861 [DEBUG] [Thread-21589] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:56:17.876 [DEBUG] [Thread-21589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:56:17.877 [DEBUG] [Thread-21589] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:56:17.877 [DEBUG] [Thread-21589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:56:17.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:56:17.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:56:17.878 [DEBUG] [Thread-21589] [transport.py] [_log()] userauth is OK
2025-12-26T00:56:17.878 [DEBUG] [Thread-21589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:56:17.878 [DEBUG] [Thread-21589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:56:17.878 [DEBUG] [Thread-21589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:56:17.878 [DEBUG] [Thread-21589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:56:17.894 [INFO] [Thread-21589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:56:17.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:56:18.532 [DEBUG] [Thread-21589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:56:18.532 [DEBUG] [Thread-21589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:56:18.532 [DEBUG] [Thread-21589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:56:18.573 [DEBUG] [Thread-21589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:56:18.573 [DEBUG] [Thread-21589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:56:18.576 [DEBUG] [Thread-21589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:56:18.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:56:18.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:56:18.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:56:18.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:56:18.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:56:18.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:56:18.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:56:18.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.955269 -999.00  +12.40  11.44     86  +10.30 1 1 1 2 1     0    0 1.98 -8.75 ZNESW 14.7 11.4 202.8 18.4 13.2 -22.9 13.1 -22.8 12.9 -20.8 13.2 -22.0
2025-12-26T00:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:56:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.955269
2025-12-26T00:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:56:18.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:56:10', tmtdew=1.56, humidity=90.25, cloud=0.0, wind=17.42, temperature=8.02, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:55:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:54:00')
2025-12-26T00:56:18.595 [DEBUG] [Thread-21589] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:56:18.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-26T00:56:18.678 [DEBUG] [Thread-21592] [transport.py] [_log()] starting thread (client mode): 0xb95b0430
2025-12-26T00:56:18.678 [DEBUG] [Thread-21592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:56:18.692 [DEBUG] [Thread-21592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:56:18.692 [INFO] [Thread-21592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] client lang: <none>
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] server lang: <none>
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] kex follows: False
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] Compression: none
2025-12-26T00:56:18.700 [DEBUG] [Thread-21592] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:56:18.757 [DEBUG] [Thread-21592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:56:18.757 [DEBUG] [Thread-21592] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:56:18.757 [DEBUG] [Thread-21592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:56:18.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:56:18.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:56:18.815 [DEBUG] [Thread-21592] [transport.py] [_log()] userauth is OK
2025-12-26T00:56:18.815 [DEBUG] [Thread-21592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:56:18.815 [DEBUG] [Thread-21592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:56:18.815 [DEBUG] [Thread-21592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:56:18.815 [DEBUG] [Thread-21592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:56:18.829 [INFO] [Thread-21592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:56:18.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T00:56:18.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:56:19.655 [DEBUG] [Thread-21592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:56:19.655 [DEBUG] [Thread-21592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:56:19.703 [DEBUG] [Thread-21592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:56:19.703 [DEBUG] [Thread-21592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:56:19.712 [DEBUG] [Thread-21592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:56:19.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:56:19.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-26T00:56:19.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-26T00:56:19.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:56:19.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:56:19.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:56:19.744 [DEBUG] [Thread-21592] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:56:20.334 [DEBUG] [Thread-21594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:29.130 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:29.131 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:35.377 [DEBUG] [Thread-21595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:40.913 [DEBUG] [Thread-21596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:49.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:56:49.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:56:49.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-26T00:56:50.407 [DEBUG] [Thread-21597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:56:50.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 56, 42), 1.52, 90.63, 0.0, 17.06, 7.98, 1, 2, 0, 2, 0, 0),)
2025-12-26T00:56:50.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:56:42
2025-12-26T00:56:50.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:56:50.714 [DEBUG] [Thread-21598] [transport.py] [_log()] starting thread (client mode): 0xb9558670
2025-12-26T00:56:50.714 [DEBUG] [Thread-21598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:56:50.735 [DEBUG] [Thread-21598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:56:50.735 [INFO] [Thread-21598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:56:50.738 [DEBUG] [Thread-21598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:56:50.738 [DEBUG] [Thread-21598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:56:50.738 [DEBUG] [Thread-21598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:56:50.738 [DEBUG] [Thread-21598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] client lang: <none>
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] server lang: <none>
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] kex follows: False
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:56:50.739 [DEBUG] [Thread-21598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:56:50.740 [DEBUG] [Thread-21598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:56:50.740 [DEBUG] [Thread-21598] [transport.py] [_log()] Compression: none
2025-12-26T00:56:50.740 [DEBUG] [Thread-21598] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:56:50.759 [DEBUG] [Thread-21598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:56:50.759 [DEBUG] [Thread-21598] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:56:50.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:56:50.760 [DEBUG] [Thread-21598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:56:50.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:56:50.762 [DEBUG] [Thread-21598] [transport.py] [_log()] userauth is OK
2025-12-26T00:56:50.762 [DEBUG] [Thread-21598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:56:50.762 [DEBUG] [Thread-21598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:56:50.762 [DEBUG] [Thread-21598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:56:50.762 [DEBUG] [Thread-21598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:56:50.785 [INFO] [Thread-21598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:56:50.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:56:51.412 [DEBUG] [Thread-21598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:56:51.412 [DEBUG] [Thread-21598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:56:51.412 [DEBUG] [Thread-21598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:56:51.453 [DEBUG] [Thread-21598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:56:51.453 [DEBUG] [Thread-21598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:56:51.457 [DEBUG] [Thread-21598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:56:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:56:51.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:56:51.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:56:51.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:56:51.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:56:51.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:56:51.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:56:51.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:56:51.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:56:51.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.955616 -999.00  +12.40  10.41     87  +10.30 1 1 1 2 1     0    0 1.96 -8.88 ZNESW 13.5 10.4 203.6 17.9 13.2 -22.9 13.1 -22.6 12.9 -20.9 13.2 -22.0
2025-12-26T00:56:51.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:56:51.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:56:51.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.955616
2025-12-26T00:56:51.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:56:51.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:56:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:56:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:56:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:56:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:56:42', tmtdew=1.52, humidity=90.63, cloud=0.0, wind=17.06, temperature=7.98, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:56:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:54:00')
2025-12-26T00:56:51.483 [DEBUG] [Thread-21598] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:56:51.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-26T00:57:05.437 [DEBUG] [Thread-21601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:57:20.482 [DEBUG] [Thread-21602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:57:29.334 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:57:29.335 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:57:35.513 [DEBUG] [Thread-21603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:57:40.980 [DEBUG] [Thread-21604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:57:50.546 [DEBUG] [Thread-21605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:05.583 [DEBUG] [Thread-21606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:20.615 [DEBUG] [Thread-21607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:29.537 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:29.538 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:35.645 [DEBUG] [Thread-21608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:41.063 [DEBUG] [Thread-21609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:58:50.679 [DEBUG] [Thread-21610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:04.277 [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-26T00:59:05.707 [DEBUG] [Thread-21611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:20.744 [DEBUG] [Thread-21612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:29.738 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:29.739 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T00:59:34.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T00:59:34.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-26T00:59:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 59, 24), 1.46, 90.79, 0.0, 16.16, 7.94, 2, 2, 0, 2, 0, 0),)
2025-12-26T00:59:35.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:59:24
2025-12-26T00:59:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T00:59:35.342 [DEBUG] [Thread-21613] [transport.py] [_log()] starting thread (client mode): 0xb6b632b0
2025-12-26T00:59:35.342 [DEBUG] [Thread-21613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:59:35.362 [DEBUG] [Thread-21613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T00:59:35.362 [INFO] [Thread-21613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] client lang: <none>
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] server lang: <none>
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] kex follows: False
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] Compression: none
2025-12-26T00:59:35.365 [DEBUG] [Thread-21613] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:59:35.377 [DEBUG] [Thread-21613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T00:59:35.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T00:59:35.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] userauth is OK
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T00:59:35.378 [DEBUG] [Thread-21613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:59:35.388 [INFO] [Thread-21613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:59:35.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:59:35.772 [DEBUG] [Thread-21615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:36.030 [DEBUG] [Thread-21613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:59:36.031 [DEBUG] [Thread-21613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:59:36.031 [DEBUG] [Thread-21613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T00:59:36.071 [DEBUG] [Thread-21613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:59:36.072 [DEBUG] [Thread-21613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:59:36.076 [DEBUG] [Thread-21613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:59:36.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:59:36.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T00:59:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T00:59:36.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T00:59:36.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:59:36.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T00:59:36.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:59:36.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:59:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T00:59:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.957700 -999.00  +12.30   9.50     87  +10.30 1 1 1 2 1     0    0 1.85 -9.86 ZNESW 7.4 9.5 200.4 16.3 13.1 -22.9 12.9 -22.4 12.8 -20.8 13.1 -22.0
2025-12-26T00:59:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T00:59:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T00:59:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.957700
2025-12-26T00:59:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T00:59:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T00:59:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T00:59:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T00:59:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T00:59:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:59:24', tmtdew=1.46, humidity=90.79, cloud=0.0, wind=16.16, temperature=7.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:59:05.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:57:00')
2025-12-26T00:59:36.105 [DEBUG] [Thread-21613] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:59:36.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-26T00:59:36.209 [DEBUG] [Thread-21617] [transport.py] [_log()] starting thread (client mode): 0xb6b28b50
2025-12-26T00:59:36.209 [DEBUG] [Thread-21617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T00:59:36.225 [DEBUG] [Thread-21617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T00:59:36.225 [INFO] [Thread-21617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T00:59:36.232 [DEBUG] [Thread-21617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] client lang: <none>
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] server lang: <none>
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] kex follows: False
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] Compression: none
2025-12-26T00:59:36.233 [DEBUG] [Thread-21617] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T00:59:36.291 [DEBUG] [Thread-21617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T00:59:36.292 [DEBUG] [Thread-21617] [transport.py] [_log()] Switch to new keys ...
2025-12-26T00:59:36.292 [DEBUG] [Thread-21617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T00:59:36.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T00:59:36.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T00:59:36.351 [DEBUG] [Thread-21617] [transport.py] [_log()] userauth is OK
2025-12-26T00:59:36.351 [DEBUG] [Thread-21617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T00:59:36.352 [DEBUG] [Thread-21617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T00:59:36.352 [DEBUG] [Thread-21617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T00:59:36.352 [DEBUG] [Thread-21617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T00:59:36.370 [INFO] [Thread-21617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T00:59:36.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-26T00:59:36.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T00:59:37.175 [DEBUG] [Thread-21617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T00:59:37.175 [DEBUG] [Thread-21617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T00:59:37.223 [DEBUG] [Thread-21617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T00:59:37.223 [DEBUG] [Thread-21617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T00:59:37.232 [DEBUG] [Thread-21617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T00:59:37.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T00:59:37.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-26T00:59:37.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-26T00:59:37.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T00:59:37.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T00:59:37.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T00:59:37.269 [DEBUG] [Thread-21617] [transport.py] [_log()] EOF in transport thread
2025-12-26T00:59:41.126 [DEBUG] [Thread-21619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T00:59:50.807 [DEBUG] [Thread-21620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:05.868 [DEBUG] [Thread-21621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:00:07.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:00:07.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-26T01:00:08.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 0, 59, 56), 1.48, 90.85, 0.0, 15.09, 7.99, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:00:08.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 00:59:56
2025-12-26T01:00:08.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:00:08.299 [DEBUG] [Thread-21622] [transport.py] [_log()] starting thread (client mode): 0xb6b28070
2025-12-26T01:00:08.299 [DEBUG] [Thread-21622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:00:08.319 [DEBUG] [Thread-21622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:00:08.319 [INFO] [Thread-21622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:00:08.322 [DEBUG] [Thread-21622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] client lang: <none>
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] server lang: <none>
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] kex follows: False
2025-12-26T01:00:08.323 [DEBUG] [Thread-21622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:00:08.324 [DEBUG] [Thread-21622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:00:08.324 [DEBUG] [Thread-21622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:00:08.324 [DEBUG] [Thread-21622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:00:08.324 [DEBUG] [Thread-21622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:00:08.324 [DEBUG] [Thread-21622] [transport.py] [_log()] Compression: none
2025-12-26T01:00:08.324 [DEBUG] [Thread-21622] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:00:08.341 [DEBUG] [Thread-21622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:00:08.341 [DEBUG] [Thread-21622] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:00:08.342 [DEBUG] [Thread-21622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:00:08.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:00:08.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:00:08.385 [DEBUG] [Thread-21622] [transport.py] [_log()] userauth is OK
2025-12-26T01:00:08.385 [DEBUG] [Thread-21622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:00:08.385 [DEBUG] [Thread-21622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:00:08.385 [DEBUG] [Thread-21622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:00:08.386 [DEBUG] [Thread-21622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:00:08.422 [INFO] [Thread-21622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:00:08.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:00:08.488 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:17.604 [DEBUG] [Thread-21622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:00:17.604 [DEBUG] [Thread-21622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:00:17.604 [DEBUG] [Thread-21622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:00:17.645 [DEBUG] [Thread-21622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:00:17.645 [DEBUG] [Thread-21622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:00:17.649 [DEBUG] [Thread-21622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:00:17.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:00:17.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:00:17.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:00:17.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:00:17.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:00:17.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:00:17.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:00:17.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:00:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:00:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.958047 -999.00  +12.30   9.78     87  +10.30 1 1 1 2 1     0    0 1.81 -10.83 ZNESW 11.8 9.8 186.6 15.1 13.1 -22.9 12.9 -22.5 12.8 -20.8 13.1 -21.9
2025-12-26T01:00:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:00:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:00:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.958047
2025-12-26T01:00:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:00:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:00:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:00:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:00:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:00:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T00:59:56', tmtdew=1.48, humidity=90.85, cloud=0.0, wind=15.09, temperature=7.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T22:59:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:57:00')
2025-12-26T01:00:17.909 [DEBUG] [Thread-21622] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:00:17.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-26T01:00:18.004 [DEBUG] [Thread-21625] [transport.py] [_log()] starting thread (client mode): 0xb6b62fe0
2025-12-26T01:00:18.004 [DEBUG] [Thread-21625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:00:18.019 [DEBUG] [Thread-21625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:00:18.019 [INFO] [Thread-21625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:00:18.026 [DEBUG] [Thread-21625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:00:18.026 [DEBUG] [Thread-21625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:00:18.026 [DEBUG] [Thread-21625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:00:18.026 [DEBUG] [Thread-21625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] client lang: <none>
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] server lang: <none>
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] kex follows: False
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] Compression: none
2025-12-26T01:00:18.027 [DEBUG] [Thread-21625] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:00:18.084 [DEBUG] [Thread-21625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:00:18.084 [DEBUG] [Thread-21625] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:00:18.085 [DEBUG] [Thread-21625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:00:18.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:00:18.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:00:18.141 [DEBUG] [Thread-21625] [transport.py] [_log()] userauth is OK
2025-12-26T01:00:18.141 [DEBUG] [Thread-21625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:00:18.141 [DEBUG] [Thread-21625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:00:18.141 [DEBUG] [Thread-21625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:00:18.141 [DEBUG] [Thread-21625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:00:18.159 [INFO] [Thread-21625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:00:18.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-26T01:00:18.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:00:18.989 [DEBUG] [Thread-21625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:00:18.990 [DEBUG] [Thread-21625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:00:19.038 [DEBUG] [Thread-21625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:00:19.038 [DEBUG] [Thread-21625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:00:19.047 [DEBUG] [Thread-21625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:00:19.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:00:19.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-26T01:00:19.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-26T01:00:19.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:00:19.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:00:19.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:00:19.084 [DEBUG] [Thread-21625] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:00:19.097 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:20.909 [DEBUG] [Thread-21627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:23.192 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:29.939 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:29.939 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:35.955 [DEBUG] [Thread-21628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:41.201 [DEBUG] [Thread-21629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:49.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:00:49.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:00:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:00:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 0, 28), 1.48, 90.87, 0.0, 15.19, 7.98, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:00:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:00:28
2025-12-26T01:00:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:00:50.164 [DEBUG] [Thread-21630] [transport.py] [_log()] starting thread (client mode): 0xb9558520
2025-12-26T01:00:50.164 [DEBUG] [Thread-21630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:00:50.184 [DEBUG] [Thread-21630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:00:50.184 [INFO] [Thread-21630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:00:50.187 [DEBUG] [Thread-21630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:00:50.187 [DEBUG] [Thread-21630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:00:50.187 [DEBUG] [Thread-21630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:00:50.187 [DEBUG] [Thread-21630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:50.187 [DEBUG] [Thread-21630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:50.187 [DEBUG] [Thread-21630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] client lang: <none>
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] server lang: <none>
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] kex follows: False
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] Compression: none
2025-12-26T01:00:50.188 [DEBUG] [Thread-21630] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:00:50.203 [DEBUG] [Thread-21630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:00:50.203 [DEBUG] [Thread-21630] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:00:50.203 [DEBUG] [Thread-21630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:00:50.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:00:50.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:00:50.204 [DEBUG] [Thread-21630] [transport.py] [_log()] userauth is OK
2025-12-26T01:00:50.204 [DEBUG] [Thread-21630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:00:50.204 [DEBUG] [Thread-21630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:00:50.204 [DEBUG] [Thread-21630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:00:50.204 [DEBUG] [Thread-21630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:00:50.219 [INFO] [Thread-21630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:00:50.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:00:50.842 [DEBUG] [Thread-21630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:00:50.842 [DEBUG] [Thread-21630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:00:50.842 [DEBUG] [Thread-21630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:00:50.884 [DEBUG] [Thread-21630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:00:50.884 [DEBUG] [Thread-21630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:00:50.886 [DEBUG] [Thread-21630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:00:50.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:00:50.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:00:50.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:00:50.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:00:50.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:00:50.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:00:50.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.958394 -999.00  +12.30  10.20     87  +10.30 1 1 1 2 1     0    0 1.83 -10.71 ZNESW 10.3 10.2 188.5 15.7 13.1 -22.9 12.9 -22.5 12.8 -20.7 13.1 -21.8
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.958394
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:00:50.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:00:28', tmtdew=1.48, humidity=90.87, cloud=0.0, wind=15.19, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:00:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:57:00')
2025-12-26T01:00:50.904 [DEBUG] [Thread-21630] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:00:50.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:00:50.983 [DEBUG] [Thread-21633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:00:50.989 [DEBUG] [Thread-21634] [transport.py] [_log()] starting thread (client mode): 0xb9579a20
2025-12-26T01:00:50.989 [DEBUG] [Thread-21634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:00:51.003 [DEBUG] [Thread-21634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:00:51.003 [INFO] [Thread-21634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] client lang: <none>
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] server lang: <none>
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] kex follows: False
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] Compression: none
2025-12-26T01:00:51.011 [DEBUG] [Thread-21634] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:00:51.073 [DEBUG] [Thread-21634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:00:51.073 [DEBUG] [Thread-21634] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:00:51.073 [DEBUG] [Thread-21634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:00:51.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:00:51.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:00:51.130 [DEBUG] [Thread-21634] [transport.py] [_log()] userauth is OK
2025-12-26T01:00:51.130 [DEBUG] [Thread-21634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:00:51.130 [DEBUG] [Thread-21634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:00:51.130 [DEBUG] [Thread-21634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:00:51.130 [DEBUG] [Thread-21634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:00:51.147 [INFO] [Thread-21634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:00:51.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-26T01:00:51.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:00:52.009 [DEBUG] [Thread-21634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:00:52.009 [DEBUG] [Thread-21634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:00:52.056 [DEBUG] [Thread-21634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:00:52.056 [DEBUG] [Thread-21634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:00:52.065 [DEBUG] [Thread-21634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:00:52.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:00:52.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:00:52.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-26T01:00:52.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:00:52.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:00:52.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:00:52.097 [DEBUG] [Thread-21634] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:01:06.022 [DEBUG] [Thread-21636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:21.061 [DEBUG] [Thread-21637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:22.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:01:22.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:01:22.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-26T01:01:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 0, 28), 1.48, 90.87, 0.0, 15.19, 7.98, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:01:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:00:28
2025-12-26T01:01:22.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:01:23.112 [DEBUG] [Thread-21638] [transport.py] [_log()] starting thread (client mode): 0xb955a0b0
2025-12-26T01:01:23.112 [DEBUG] [Thread-21638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:01:23.132 [DEBUG] [Thread-21638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:01:23.132 [INFO] [Thread-21638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:01:23.135 [DEBUG] [Thread-21638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] client lang: <none>
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] server lang: <none>
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] kex follows: False
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] Compression: none
2025-12-26T01:01:23.136 [DEBUG] [Thread-21638] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:01:23.155 [DEBUG] [Thread-21638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:01:23.155 [DEBUG] [Thread-21638] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:01:23.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:01:23.156 [DEBUG] [Thread-21638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:01:23.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:01:23.158 [DEBUG] [Thread-21638] [transport.py] [_log()] userauth is OK
2025-12-26T01:01:23.158 [DEBUG] [Thread-21638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:01:23.158 [DEBUG] [Thread-21638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:01:23.158 [DEBUG] [Thread-21638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:01:23.158 [DEBUG] [Thread-21638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:01:23.182 [INFO] [Thread-21638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:01:23.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:01:23.972 [DEBUG] [Thread-21638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:01:23.973 [DEBUG] [Thread-21638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:01:23.973 [DEBUG] [Thread-21638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:01:24.012 [DEBUG] [Thread-21638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:01:24.012 [DEBUG] [Thread-21638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:01:24.015 [DEBUG] [Thread-21638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:01:24.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:01:24.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:01:24.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:01:24.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:01:24.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:01:24.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:01:24.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:01:24.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:01:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:01:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.958741 -999.00  +12.30  13.27     87  +10.30 1 1 1 2 1     0    0 1.83 -11.62 ZNESW 13.0 13.3 197.6 15.1 13.1 -22.8 12.9 -22.3 12.8 -20.8 13.1 -21.8
2025-12-26T01:01:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:01:24.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.958741
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:01:24.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:00:28', tmtdew=1.48, humidity=90.87, cloud=0.0, wind=15.19, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:00:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.2522500000000001, 0.14025000000000176, 0.3592500000000012, 0.1634999999999991, 0.13449999999999918, 0.2422500000000003, 0.38899999999999935, 0.48375000000000057, 0.30349999999999966, 0.13100000000000023, 0.18975000000000009, 0.2010000000000005, 0.19099999999999895, 0.22025000000000006, 0.28749999999999964, 0.43599999999999994, 0.1947499999999991, 0.2234999999999996, 0.11999999999999922, 0.24824999999999875, 0.27749999999999986, 0.3257499999999993, 0.354750000000001, 0.32975000000000065, 0.22699999999999854, 0.30100000000000016, 0.29224999999999923, 0.25950000000000095, 0.35000000000000053, 0.4250000000000007, 0.34300000000000086, 0.38700000000000045, 0.2527499999999989], zp_timestamp='2025-12-25T22:57:00')
2025-12-26T01:01:24.034 [DEBUG] [Thread-21638] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:01:24.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-26T01:01:24.122 [DEBUG] [Thread-21641] [transport.py] [_log()] starting thread (client mode): 0xb6b60610
2025-12-26T01:01:24.122 [DEBUG] [Thread-21641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:01:24.137 [DEBUG] [Thread-21641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:01:24.137 [INFO] [Thread-21641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:01:24.144 [DEBUG] [Thread-21641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:24.145 [DEBUG] [Thread-21641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] client lang: <none>
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] server lang: <none>
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] kex follows: False
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] Compression: none
2025-12-26T01:01:24.146 [DEBUG] [Thread-21641] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:01:24.207 [DEBUG] [Thread-21641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:01:24.207 [DEBUG] [Thread-21641] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:01:24.208 [DEBUG] [Thread-21641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:01:24.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:01:24.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:01:24.267 [DEBUG] [Thread-21641] [transport.py] [_log()] userauth is OK
2025-12-26T01:01:24.267 [DEBUG] [Thread-21641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:01:24.268 [DEBUG] [Thread-21641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:01:24.268 [DEBUG] [Thread-21641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:01:24.268 [DEBUG] [Thread-21641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:01:24.286 [INFO] [Thread-21641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:01:24.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-26T01:01:24.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:01:25.156 [DEBUG] [Thread-21641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:01:25.157 [DEBUG] [Thread-21641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:01:25.205 [DEBUG] [Thread-21641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:01:25.205 [DEBUG] [Thread-21641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:01:25.214 [DEBUG] [Thread-21641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:01:25.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:01:25.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-26T01:01:25.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-26T01:01:25.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:01:25.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:01:25.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:01:25.251 [DEBUG] [Thread-21641] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:01:30.149 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:30.150 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:36.089 [DEBUG] [Thread-21643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:41.289 [DEBUG] [Thread-21644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:51.151 [DEBUG] [Thread-21645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:01:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:01:55.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:01:55.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-26T01:01:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 1, 32), 1.44, 91.21, 0.0, 15.97, 7.98, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:01:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:01:32
2025-12-26T01:01:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:01:56.245 [DEBUG] [Thread-21646] [transport.py] [_log()] starting thread (client mode): 0xb6b2b640
2025-12-26T01:01:56.245 [DEBUG] [Thread-21646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:01:56.265 [DEBUG] [Thread-21646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:01:56.266 [INFO] [Thread-21646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:01:56.268 [DEBUG] [Thread-21646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] client lang: <none>
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] server lang: <none>
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] kex follows: False
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] Compression: none
2025-12-26T01:01:56.269 [DEBUG] [Thread-21646] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:01:56.287 [DEBUG] [Thread-21646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:01:56.287 [DEBUG] [Thread-21646] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:01:56.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:01:56.288 [DEBUG] [Thread-21646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:01:56.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:01:56.290 [DEBUG] [Thread-21646] [transport.py] [_log()] userauth is OK
2025-12-26T01:01:56.290 [DEBUG] [Thread-21646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:01:56.291 [DEBUG] [Thread-21646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:01:56.291 [DEBUG] [Thread-21646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:01:56.291 [DEBUG] [Thread-21646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:01:56.314 [INFO] [Thread-21646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:01:56.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:01:56.957 [DEBUG] [Thread-21646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:01:56.958 [DEBUG] [Thread-21646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:01:56.958 [DEBUG] [Thread-21646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:01:56.999 [DEBUG] [Thread-21646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:01:56.999 [DEBUG] [Thread-21646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:01:57.003 [DEBUG] [Thread-21646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:01:57.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:01:57.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:01:57.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:01:57.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:01:57.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:01:57.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:01:57.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:01:57.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:01:57.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:01:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.959088 -999.00  +12.30  11.53     87  +10.30 1 1 1 2 1     0    0 1.78 -12.43 ZNESW 11.7 11.5 191.2 17.0 13.1 -22.9 12.9 -22.4 12.8 -20.6 13.1 -22.0
2025-12-26T01:01:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:01:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:01:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.959088
2025-12-26T01:01:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:01:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:01:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:01:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:01:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:01:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:01:32', tmtdew=1.44, humidity=91.21, cloud=0.0, wind=15.97, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:01:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:00:00')
2025-12-26T01:01:57.031 [DEBUG] [Thread-21646] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:01:57.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-26T01:01:57.126 [DEBUG] [Thread-21649] [transport.py] [_log()] starting thread (client mode): 0xb955bac0
2025-12-26T01:01:57.126 [DEBUG] [Thread-21649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:01:57.140 [DEBUG] [Thread-21649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:01:57.141 [INFO] [Thread-21649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:01:57.148 [DEBUG] [Thread-21649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:01:57.148 [DEBUG] [Thread-21649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:01:57.148 [DEBUG] [Thread-21649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:01:57.148 [DEBUG] [Thread-21649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:57.148 [DEBUG] [Thread-21649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:01:57.148 [DEBUG] [Thread-21649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] client lang: <none>
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] server lang: <none>
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] kex follows: False
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] Compression: none
2025-12-26T01:01:57.149 [DEBUG] [Thread-21649] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:01:57.208 [DEBUG] [Thread-21649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:01:57.209 [DEBUG] [Thread-21649] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:01:57.209 [DEBUG] [Thread-21649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:01:57.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:01:57.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:01:57.264 [DEBUG] [Thread-21649] [transport.py] [_log()] userauth is OK
2025-12-26T01:01:57.264 [DEBUG] [Thread-21649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:01:57.265 [DEBUG] [Thread-21649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:01:57.265 [DEBUG] [Thread-21649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:01:57.265 [DEBUG] [Thread-21649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:01:57.283 [INFO] [Thread-21649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:01:57.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:01:57.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:01:58.111 [DEBUG] [Thread-21649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:01:58.111 [DEBUG] [Thread-21649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:01:58.159 [DEBUG] [Thread-21649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:01:58.159 [DEBUG] [Thread-21649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:01:58.168 [DEBUG] [Thread-21649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:01:58.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:01:58.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-26T01:01:58.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-26T01:01:58.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:01:58.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:01:58.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:01:58.205 [DEBUG] [Thread-21649] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:02:06.188 [DEBUG] [Thread-21651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:21.228 [DEBUG] [Thread-21652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:21.816 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:28.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:02:28.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:02:28.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-26T01:02:28.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 2, 4), 1.44, 91.24, 0.0, 16.13, 7.99, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:02:28.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:02:04
2025-12-26T01:02:29.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:02:29.209 [DEBUG] [Thread-21653] [transport.py] [_log()] starting thread (client mode): 0xb6b2aad0
2025-12-26T01:02:29.209 [DEBUG] [Thread-21653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:02:29.228 [DEBUG] [Thread-21653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:02:29.228 [INFO] [Thread-21653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] client lang: <none>
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] server lang: <none>
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] kex follows: False
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] Compression: none
2025-12-26T01:02:29.231 [DEBUG] [Thread-21653] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:02:29.250 [DEBUG] [Thread-21653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:02:29.251 [DEBUG] [Thread-21653] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:02:29.251 [DEBUG] [Thread-21653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:02:29.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:02:29.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:02:29.254 [DEBUG] [Thread-21653] [transport.py] [_log()] userauth is OK
2025-12-26T01:02:29.254 [DEBUG] [Thread-21653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:02:29.254 [DEBUG] [Thread-21653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:02:29.254 [DEBUG] [Thread-21653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:02:29.254 [DEBUG] [Thread-21653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:02:29.277 [INFO] [Thread-21653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:02:29.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:02:30.064 [DEBUG] [Thread-21653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:02:30.064 [DEBUG] [Thread-21653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:02:30.064 [DEBUG] [Thread-21653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:02:30.105 [DEBUG] [Thread-21653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:02:30.105 [DEBUG] [Thread-21653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:02:30.109 [DEBUG] [Thread-21653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:02:30.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:02:30.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:02:30.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:02:30.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:02:30.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:02:30.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:02:30.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:02:30.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:02:30.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:02:30.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.959783 -999.00  +12.30   6.12     87  +10.30 1 1 1 2 1     0    0 1.76 -14.04 ZNESW 7.9 6.1 200.2 13.6 13.1 -22.9 12.9 -22.3 12.8 -20.7 13.1 -21.8
2025-12-26T01:02:30.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:02:30.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:02:30.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.959783
2025-12-26T01:02:30.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:02:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:02:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:02:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:02:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:02:30.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:02:04', tmtdew=1.44, humidity=91.24, cloud=0.0, wind=16.13, temperature=7.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:02:05.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:00:00')
2025-12-26T01:02:30.135 [DEBUG] [Thread-21653] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:02:30.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-26T01:02:30.228 [DEBUG] [Thread-21656] [transport.py] [_log()] starting thread (client mode): 0xb95d4f40
2025-12-26T01:02:30.228 [DEBUG] [Thread-21656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:02:30.242 [DEBUG] [Thread-21656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:02:30.243 [INFO] [Thread-21656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:02:30.250 [DEBUG] [Thread-21656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:02:30.250 [DEBUG] [Thread-21656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] client lang: <none>
2025-12-26T01:02:30.251 [DEBUG] [Thread-21656] [transport.py] [_log()] server lang: <none>
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] kex follows: False
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] Compression: none
2025-12-26T01:02:30.252 [DEBUG] [Thread-21656] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:02:30.313 [DEBUG] [Thread-21656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:02:30.314 [DEBUG] [Thread-21656] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:02:30.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:02:30.315 [DEBUG] [Thread-21656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:02:30.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:02:30.355 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:30.356 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:30.369 [DEBUG] [Thread-21656] [transport.py] [_log()] userauth is OK
2025-12-26T01:02:30.370 [DEBUG] [Thread-21656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:02:30.370 [DEBUG] [Thread-21656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:02:30.370 [DEBUG] [Thread-21656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:02:30.370 [DEBUG] [Thread-21656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:02:30.388 [INFO] [Thread-21656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:02:30.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:02:30.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:02:31.204 [DEBUG] [Thread-21656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:02:31.204 [DEBUG] [Thread-21656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:02:31.253 [DEBUG] [Thread-21656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:02:31.253 [DEBUG] [Thread-21656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:02:31.264 [DEBUG] [Thread-21656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:02:31.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:02:31.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-26T01:02:31.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-26T01:02:31.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:02:31.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:02:31.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:02:31.309 [DEBUG] [Thread-21656] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:02:36.265 [DEBUG] [Thread-21658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:41.356 [DEBUG] [Thread-21659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:02:51.313 [DEBUG] [Thread-21660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:03:01.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:03:01.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-26T01:03:02.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 2, 36), 1.44, 90.87, 0.0, 15.39, 7.97, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:03:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:02:36
2025-12-26T01:03:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:03:02.326 [DEBUG] [Thread-21661] [transport.py] [_log()] starting thread (client mode): 0xb6b62950
2025-12-26T01:03:02.326 [DEBUG] [Thread-21661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:03:02.346 [DEBUG] [Thread-21661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:03:02.346 [INFO] [Thread-21661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] client lang: <none>
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] server lang: <none>
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] kex follows: False
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] Compression: none
2025-12-26T01:03:02.349 [DEBUG] [Thread-21661] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:03:02.366 [DEBUG] [Thread-21661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:03:02.366 [DEBUG] [Thread-21661] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:03:02.367 [DEBUG] [Thread-21661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:03:02.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:03:02.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:03:02.369 [DEBUG] [Thread-21661] [transport.py] [_log()] userauth is OK
2025-12-26T01:03:02.369 [DEBUG] [Thread-21661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:03:02.369 [DEBUG] [Thread-21661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:03:02.369 [DEBUG] [Thread-21661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:03:02.369 [DEBUG] [Thread-21661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:03:02.407 [INFO] [Thread-21661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:03:02.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:03:03.039 [DEBUG] [Thread-21661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:03:03.040 [DEBUG] [Thread-21661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:03:03.040 [DEBUG] [Thread-21661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:03:03.081 [DEBUG] [Thread-21661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:03:03.081 [DEBUG] [Thread-21661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:03:03.085 [DEBUG] [Thread-21661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:03:03.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:03:03.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:03:03.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:03:03.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:03:03.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:03:03.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:03:03.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:03:03.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:03:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:03:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.960130 -999.00  +12.30   9.81     87  +10.30 1 1 1 2 1     0    0 1.71 -13.92 ZNESW 8.6 9.8 200.9 13.1 13.1 -22.8 12.9 -22.5 12.8 -20.7 13.1 -22.0
2025-12-26T01:03:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:03:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:03:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.960130
2025-12-26T01:03:03.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:03:03.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:03:03.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:03:03.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:03:03.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:03:03.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:02:36', tmtdew=1.44, humidity=90.87, cloud=0.0, wind=15.39, temperature=7.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:02:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:00:00')
2025-12-26T01:03:03.112 [DEBUG] [Thread-21661] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:03:03.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-26T01:03:03.205 [DEBUG] [Thread-21664] [transport.py] [_log()] starting thread (client mode): 0xb9579630
2025-12-26T01:03:03.205 [DEBUG] [Thread-21664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:03:03.220 [DEBUG] [Thread-21664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:03:03.220 [INFO] [Thread-21664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:03:03.227 [DEBUG] [Thread-21664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:03:03.227 [DEBUG] [Thread-21664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:03:03.227 [DEBUG] [Thread-21664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:03:03.227 [DEBUG] [Thread-21664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] client lang: <none>
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] server lang: <none>
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] kex follows: False
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] Compression: none
2025-12-26T01:03:03.228 [DEBUG] [Thread-21664] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:03:03.287 [DEBUG] [Thread-21664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:03:03.287 [DEBUG] [Thread-21664] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:03:03.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:03:03.288 [DEBUG] [Thread-21664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:03:03.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:03:03.346 [DEBUG] [Thread-21664] [transport.py] [_log()] userauth is OK
2025-12-26T01:03:03.347 [DEBUG] [Thread-21664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:03:03.347 [DEBUG] [Thread-21664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:03:03.347 [DEBUG] [Thread-21664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:03:03.347 [DEBUG] [Thread-21664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:03:03.365 [INFO] [Thread-21664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:03:03.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-26T01:03:03.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:03:04.187 [DEBUG] [Thread-21664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:03:04.187 [DEBUG] [Thread-21664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:03:04.235 [DEBUG] [Thread-21664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:03:04.235 [DEBUG] [Thread-21664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:03:04.244 [DEBUG] [Thread-21664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:03:04.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:03:04.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-26T01:03: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') -> 00000000
2025-12-26T01:03:04.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:03:04.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:03:04.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:03:04.284 [DEBUG] [Thread-21664] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:03:06.353 [DEBUG] [Thread-21666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:21.407 [DEBUG] [Thread-21667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:30.561 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:30.563 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:34.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:03:34.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:03:34.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-26T01:03:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 3, 8), 1.44, 90.88, 0.0, 15.69, 7.97, 2, 2, 2, 2, 0, 0),)
2025-12-26T01:03:35.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:03:08
2025-12-26T01:03:35.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:03:35.304 [DEBUG] [Thread-21668] [transport.py] [_log()] starting thread (client mode): 0xb6b62950
2025-12-26T01:03:35.304 [DEBUG] [Thread-21668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:03:35.321 [DEBUG] [Thread-21668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:03:35.321 [INFO] [Thread-21668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:03:35.322 [DEBUG] [Thread-21668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:03:35.322 [DEBUG] [Thread-21668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:03:35.322 [DEBUG] [Thread-21668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] client lang: <none>
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] server lang: <none>
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] kex follows: False
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] Compression: none
2025-12-26T01:03:35.323 [DEBUG] [Thread-21668] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:03:35.339 [DEBUG] [Thread-21668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:03:35.339 [DEBUG] [Thread-21668] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:03:35.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:03:35.340 [DEBUG] [Thread-21668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:03:35.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:03:35.342 [DEBUG] [Thread-21668] [transport.py] [_log()] userauth is OK
2025-12-26T01:03:35.342 [DEBUG] [Thread-21668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:03:35.342 [DEBUG] [Thread-21668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:03:35.342 [DEBUG] [Thread-21668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:03:35.342 [DEBUG] [Thread-21668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:03:35.365 [INFO] [Thread-21668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:03:35.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:03:36.151 [DEBUG] [Thread-21668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:03:36.151 [DEBUG] [Thread-21668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:03:36.151 [DEBUG] [Thread-21668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:03:36.192 [DEBUG] [Thread-21668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:03:36.192 [DEBUG] [Thread-21668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:03:36.195 [DEBUG] [Thread-21668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:03:36.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:03:36.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:03:36.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:03:36.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:03:36.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:03:36.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:03:36.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:03:36.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:03:36.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:03:36.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.960477 -999.00  +12.30   9.99     87  +10.30 1 1 1 2 1     0    0 1.69 -13.36 ZNESW 9.8 10.0 213.8 13.5 13.1 -22.9 12.9 -22.4 12.8 -20.8 13.0 -21.8
2025-12-26T01:03:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:03:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:03:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.960477
2025-12-26T01:03:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:03:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:03:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:03:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:03:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:03:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:03:08', tmtdew=1.44, humidity=90.88, cloud=0.0, wind=15.69, temperature=7.97, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:03:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:00:00')
2025-12-26T01:03:36.219 [DEBUG] [Thread-21668] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:03:36.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-26T01:03:36.310 [DEBUG] [Thread-21671] [transport.py] [_log()] starting thread (client mode): 0xb9579960
2025-12-26T01:03:36.311 [DEBUG] [Thread-21671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:03:36.324 [DEBUG] [Thread-21671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:03:36.325 [INFO] [Thread-21671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:03:36.332 [DEBUG] [Thread-21671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:03:36.332 [DEBUG] [Thread-21671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:03:36.332 [DEBUG] [Thread-21671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:03:36.332 [DEBUG] [Thread-21671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:36.332 [DEBUG] [Thread-21671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:03:36.332 [DEBUG] [Thread-21671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] client lang: <none>
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] server lang: <none>
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] kex follows: False
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:03:36.333 [DEBUG] [Thread-21671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:03:36.334 [DEBUG] [Thread-21671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:03:36.334 [DEBUG] [Thread-21671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:03:36.334 [DEBUG] [Thread-21671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:03:36.334 [DEBUG] [Thread-21671] [transport.py] [_log()] Compression: none
2025-12-26T01:03:36.334 [DEBUG] [Thread-21671] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:03:36.390 [DEBUG] [Thread-21671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:03:36.390 [DEBUG] [Thread-21671] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:03:36.391 [DEBUG] [Thread-21671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:03:36.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:03:36.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:03:36.436 [DEBUG] [Thread-21673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:36.447 [DEBUG] [Thread-21671] [transport.py] [_log()] userauth is OK
2025-12-26T01:03:36.447 [DEBUG] [Thread-21671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:03:36.447 [DEBUG] [Thread-21671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:03:36.447 [DEBUG] [Thread-21671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:03:36.447 [DEBUG] [Thread-21671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:03:36.464 [INFO] [Thread-21671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:03:36.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-26T01:03:36.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:03:37.281 [DEBUG] [Thread-21671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:03:37.281 [DEBUG] [Thread-21671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:03:37.328 [DEBUG] [Thread-21671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:03:37.328 [DEBUG] [Thread-21671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:03:37.337 [DEBUG] [Thread-21671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:03:37.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:03:37.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')
2025-12-26T01:03:37.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:03:37.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:03:37.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:03:37.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:03:37.371 [DEBUG] [Thread-21671] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:03:41.413 [DEBUG] [Thread-21674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:03:51.495 [DEBUG] [Thread-21675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:06.527 [DEBUG] [Thread-21676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:07.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:04:07.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:04:07.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-26T01:04:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 3, 40), 1.44, 90.87, 0.0, 16.59, 7.93, 2, 2, 2, 2, 0, 0),)
2025-12-26T01:04:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:03:40
2025-12-26T01:04:08.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:04:08.435 [DEBUG] [Thread-21677] [transport.py] [_log()] starting thread (client mode): 0xb955ae60
2025-12-26T01:04:08.435 [DEBUG] [Thread-21677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:04:08.455 [DEBUG] [Thread-21677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:04:08.455 [INFO] [Thread-21677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:04:08.458 [DEBUG] [Thread-21677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:04:08.458 [DEBUG] [Thread-21677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] client lang: <none>
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] server lang: <none>
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] kex follows: False
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] Compression: none
2025-12-26T01:04:08.459 [DEBUG] [Thread-21677] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:04:08.475 [DEBUG] [Thread-21677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:04:08.475 [DEBUG] [Thread-21677] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:04:08.476 [DEBUG] [Thread-21677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:04:08.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:04:08.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:04:08.476 [DEBUG] [Thread-21677] [transport.py] [_log()] userauth is OK
2025-12-26T01:04:08.476 [DEBUG] [Thread-21677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:04:08.476 [DEBUG] [Thread-21677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:04:08.476 [DEBUG] [Thread-21677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:04:08.476 [DEBUG] [Thread-21677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:04:08.492 [INFO] [Thread-21677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:04:08.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:04:09.122 [DEBUG] [Thread-21677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:04:09.122 [DEBUG] [Thread-21677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:04:09.123 [DEBUG] [Thread-21677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:04:09.163 [DEBUG] [Thread-21677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:04:09.164 [DEBUG] [Thread-21677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:04:09.167 [DEBUG] [Thread-21677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:04:09.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:04:09.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:04:09.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:04:09.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:04:09.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:04:09.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:04:09.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:04:09.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:04:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:04:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.960825 -999.00  +12.30   7.51     87  +10.30 1 1 1 2 1     0    0 1.71 -14.27 ZNESW 7.5 7.5 237.0 13.5 13.0 -23.0 12.9 -22.8 12.7 -20.7 13.0 -22.0
2025-12-26T01:04:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:04:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:04:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.960825
2025-12-26T01:04:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:04:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:04:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:04:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:04:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:04:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:03:40', tmtdew=1.44, humidity=90.87, cloud=0.0, wind=16.59, temperature=7.93, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:03:35.280', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:00:00')
2025-12-26T01:04:09.195 [DEBUG] [Thread-21677] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:04:09.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-26T01:04:09.292 [DEBUG] [Thread-21680] [transport.py] [_log()] starting thread (client mode): 0xb6b295d0
2025-12-26T01:04:09.292 [DEBUG] [Thread-21680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:04:09.311 [DEBUG] [Thread-21680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:04:09.311 [INFO] [Thread-21680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] client lang: <none>
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] server lang: <none>
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] kex follows: False
2025-12-26T01:04:09.319 [DEBUG] [Thread-21680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:04:09.320 [DEBUG] [Thread-21680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:04:09.320 [DEBUG] [Thread-21680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:04:09.320 [DEBUG] [Thread-21680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:04:09.320 [DEBUG] [Thread-21680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:04:09.320 [DEBUG] [Thread-21680] [transport.py] [_log()] Compression: none
2025-12-26T01:04:09.320 [DEBUG] [Thread-21680] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:04:09.376 [DEBUG] [Thread-21680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:04:09.376 [DEBUG] [Thread-21680] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:04:09.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:04:09.377 [DEBUG] [Thread-21680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:04:09.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:04:09.432 [DEBUG] [Thread-21680] [transport.py] [_log()] userauth is OK
2025-12-26T01:04:09.433 [DEBUG] [Thread-21680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:04:09.433 [DEBUG] [Thread-21680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:04:09.433 [DEBUG] [Thread-21680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:04:09.433 [DEBUG] [Thread-21680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:04:09.453 [INFO] [Thread-21680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:04:09.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:04:09.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:04:10.260 [DEBUG] [Thread-21680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:04:10.260 [DEBUG] [Thread-21680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:04:10.308 [DEBUG] [Thread-21680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:04:10.308 [DEBUG] [Thread-21680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:04:10.318 [DEBUG] [Thread-21680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:04:10.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:04:10.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:04:10.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-26T01:04:10.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:04:10.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:04:10.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:04:10.354 [DEBUG] [Thread-21680] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:04:21.557 [DEBUG] [Thread-21682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:30.767 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:30.769 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:36.608 [DEBUG] [Thread-21683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:40.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:04:40.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:04:40.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-26T01:04:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 4, 12), 1.44, 90.88, 0.0, 16.48, 7.98, 2, 2, 2, 2, 0, 0),)
2025-12-26T01:04:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:04:12
2025-12-26T01:04:41.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:04:41.353 [DEBUG] [Thread-21684] [transport.py] [_log()] starting thread (client mode): 0xb957b460
2025-12-26T01:04:41.353 [DEBUG] [Thread-21684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:04:41.376 [DEBUG] [Thread-21684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:04:41.376 [INFO] [Thread-21684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] client lang: <none>
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] server lang: <none>
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] kex follows: False
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:04:41.380 [DEBUG] [Thread-21684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:04:41.381 [DEBUG] [Thread-21684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:04:41.381 [DEBUG] [Thread-21684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:04:41.381 [DEBUG] [Thread-21684] [transport.py] [_log()] Compression: none
2025-12-26T01:04:41.381 [DEBUG] [Thread-21684] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:04:41.397 [DEBUG] [Thread-21684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:04:41.398 [DEBUG] [Thread-21684] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:04:41.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:04:41.398 [DEBUG] [Thread-21684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:04:41.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:04:41.401 [DEBUG] [Thread-21684] [transport.py] [_log()] userauth is OK
2025-12-26T01:04:41.401 [DEBUG] [Thread-21684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:04:41.401 [DEBUG] [Thread-21684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:04:41.401 [DEBUG] [Thread-21684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:04:41.401 [DEBUG] [Thread-21684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:04:41.425 [INFO] [Thread-21684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:04:41.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:04:41.495 [DEBUG] [Thread-21686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:04:42.080 [DEBUG] [Thread-21684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:04:42.080 [DEBUG] [Thread-21684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:04:42.080 [DEBUG] [Thread-21684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:04:42.121 [DEBUG] [Thread-21684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:04:42.121 [DEBUG] [Thread-21684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:04:42.123 [DEBUG] [Thread-21684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:04:42.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:04:42.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:04:42.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:04:42.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:04:42.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:04:42.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:04:42.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:04:42.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:04:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:04:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.961172 -999.00  +12.30  14.03     87  +10.30 1 1 1 2 1     0    0 1.70 -13.92 ZNESW 11.8 14.0 204.2 14.9 13.1 -23.0 12.9 -22.6 12.8 -20.9 13.0 -22.1
2025-12-26T01:04:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:04:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:04:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.961172
2025-12-26T01:04:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:04:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:04:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:04:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:04:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:04:42.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:04:12', tmtdew=1.44, humidity=90.88, cloud=0.0, wind=16.48, temperature=7.98, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:04:05.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:03:00')
2025-12-26T01:04:42.142 [DEBUG] [Thread-21684] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:04:42.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:04:42.225 [DEBUG] [Thread-21688] [transport.py] [_log()] starting thread (client mode): 0xb95d75e0
2025-12-26T01:04:42.225 [DEBUG] [Thread-21688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:04:42.239 [DEBUG] [Thread-21688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:04:42.239 [INFO] [Thread-21688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:04:42.246 [DEBUG] [Thread-21688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:04:42.246 [DEBUG] [Thread-21688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:04:42.246 [DEBUG] [Thread-21688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:04:42.246 [DEBUG] [Thread-21688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:42.246 [DEBUG] [Thread-21688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] client lang: <none>
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] server lang: <none>
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] kex follows: False
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] Compression: none
2025-12-26T01:04:42.247 [DEBUG] [Thread-21688] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:04:42.303 [DEBUG] [Thread-21688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:04:42.303 [DEBUG] [Thread-21688] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:04:42.303 [DEBUG] [Thread-21688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:04:42.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:04:42.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:04:42.360 [DEBUG] [Thread-21688] [transport.py] [_log()] userauth is OK
2025-12-26T01:04:42.360 [DEBUG] [Thread-21688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:04:42.360 [DEBUG] [Thread-21688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:04:42.360 [DEBUG] [Thread-21688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:04:42.360 [DEBUG] [Thread-21688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:04:42.374 [INFO] [Thread-21688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:04:42.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-26T01:04:42.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:04:43.194 [DEBUG] [Thread-21688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:04:43.194 [DEBUG] [Thread-21688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:04:43.244 [DEBUG] [Thread-21688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:04:43.244 [DEBUG] [Thread-21688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:04:43.253 [DEBUG] [Thread-21688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:04:43.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:04:43.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-26T01:04:43.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-26T01:04:43.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:04:43.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:04:43.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:04:43.284 [DEBUG] [Thread-21688] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:04:51.640 [DEBUG] [Thread-21690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:06.693 [DEBUG] [Thread-21691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:13.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:05:13.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:05:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:05:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 4, 44), 1.44, 90.89, 0.0, 14.65, 7.94, 2, 2, 2, 2, 0, 0),)
2025-12-26T01:05:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:04:44
2025-12-26T01:05:14.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:05:14.291 [DEBUG] [Thread-21692] [transport.py] [_log()] starting thread (client mode): 0xb955bf10
2025-12-26T01:05:14.292 [DEBUG] [Thread-21692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:05:14.309 [DEBUG] [Thread-21692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:05:14.310 [INFO] [Thread-21692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] client lang: <none>
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] server lang: <none>
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] kex follows: False
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] Compression: none
2025-12-26T01:05:14.313 [DEBUG] [Thread-21692] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:05:14.332 [DEBUG] [Thread-21692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:05:14.333 [DEBUG] [Thread-21692] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:05:14.333 [DEBUG] [Thread-21692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:05:14.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:05:14.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:05:14.336 [DEBUG] [Thread-21692] [transport.py] [_log()] userauth is OK
2025-12-26T01:05:14.336 [DEBUG] [Thread-21692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:05:14.336 [DEBUG] [Thread-21692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:05:14.336 [DEBUG] [Thread-21692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:05:14.336 [DEBUG] [Thread-21692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:05:14.360 [INFO] [Thread-21692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:05:14.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:05:15.379 [DEBUG] [Thread-21692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:05:15.379 [DEBUG] [Thread-21692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:05:15.380 [DEBUG] [Thread-21692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:05:15.421 [DEBUG] [Thread-21692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:05:15.421 [DEBUG] [Thread-21692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:05:15.423 [DEBUG] [Thread-21692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:05:15.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:05:15.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:05:15.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:05:15.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:05:15.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:05:15.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:05:15.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:05:15.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.961518 -999.00  +12.30   6.15     87  +10.30 1 1 1 2 1     0    0 1.73 -13.58 ZNESW 11.2 6.2 225.9 14.9 13.1 -23.1 12.9 -22.5 12.8 -20.8 13.0 -22.0
2025-12-26T01:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.961518
2025-12-26T01:05:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:05:15.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:04:44', tmtdew=1.44, humidity=90.89, cloud=0.0, wind=14.65, temperature=7.94, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:04:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:03:00')
2025-12-26T01:05:15.443 [DEBUG] [Thread-21692] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:05:15.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:05:15.540 [DEBUG] [Thread-21695] [transport.py] [_log()] starting thread (client mode): 0xb955b0a0
2025-12-26T01:05:15.540 [DEBUG] [Thread-21695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:05:15.555 [DEBUG] [Thread-21695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:05:15.555 [INFO] [Thread-21695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:05:15.562 [DEBUG] [Thread-21695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:05:15.562 [DEBUG] [Thread-21695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:05:15.562 [DEBUG] [Thread-21695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:05:15.562 [DEBUG] [Thread-21695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:15.562 [DEBUG] [Thread-21695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] client lang: <none>
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] server lang: <none>
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] kex follows: False
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] Compression: none
2025-12-26T01:05:15.563 [DEBUG] [Thread-21695] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:05:15.621 [DEBUG] [Thread-21695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:05:15.622 [DEBUG] [Thread-21695] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:05:15.623 [DEBUG] [Thread-21695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:05:15.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:05:15.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:05:15.677 [DEBUG] [Thread-21695] [transport.py] [_log()] userauth is OK
2025-12-26T01:05:15.677 [DEBUG] [Thread-21695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:05:15.678 [DEBUG] [Thread-21695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:05:15.678 [DEBUG] [Thread-21695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:05:15.678 [DEBUG] [Thread-21695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:05:15.700 [INFO] [Thread-21695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:05:15.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:05:15.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:05:16.523 [DEBUG] [Thread-21695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:05:16.523 [DEBUG] [Thread-21695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:05:16.571 [DEBUG] [Thread-21695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:05:16.571 [DEBUG] [Thread-21695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:05:16.581 [DEBUG] [Thread-21695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:05:16.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:05:16.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-26T01:05:16.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-26T01:05:16.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:05:16.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:05:16.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:05:16.617 [DEBUG] [Thread-21695] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:05:21.728 [DEBUG] [Thread-21697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:30.973 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:30.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:36.767 [DEBUG] [Thread-21698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:41.573 [DEBUG] [Thread-21699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:05:46.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:05:46.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:05:46.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:05:47.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 5, 17), 1.44, 90.87, 0.0, 14.73, 7.93, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:05:47.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:05:17
2025-12-26T01:05:47.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:05:47.628 [DEBUG] [Thread-21700] [transport.py] [_log()] starting thread (client mode): 0xb9559840
2025-12-26T01:05:47.628 [DEBUG] [Thread-21700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:05:47.650 [DEBUG] [Thread-21700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:05:47.650 [INFO] [Thread-21700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:05:47.653 [DEBUG] [Thread-21700] [transport.py] [_log()] client lang: <none>
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] server lang: <none>
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] kex follows: False
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] Compression: none
2025-12-26T01:05:47.654 [DEBUG] [Thread-21700] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:05:47.671 [DEBUG] [Thread-21700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:05:47.672 [DEBUG] [Thread-21700] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:05:47.672 [DEBUG] [Thread-21700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:05:47.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:05:47.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:05:47.674 [DEBUG] [Thread-21700] [transport.py] [_log()] userauth is OK
2025-12-26T01:05:47.675 [DEBUG] [Thread-21700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:05:47.675 [DEBUG] [Thread-21700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:05:47.675 [DEBUG] [Thread-21700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:05:47.675 [DEBUG] [Thread-21700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:05:47.701 [INFO] [Thread-21700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:05:47.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:05:48.355 [DEBUG] [Thread-21700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:05:48.355 [DEBUG] [Thread-21700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:05:48.356 [DEBUG] [Thread-21700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:05:48.396 [DEBUG] [Thread-21700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:05:48.397 [DEBUG] [Thread-21700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:05:48.399 [DEBUG] [Thread-21700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:05:48.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:05:48.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:05:48.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:05:48.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:05:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:05:48.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:05:48.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.961518 -999.00  +12.30   6.15     87  +10.30 1 1 1 2 1     0    0 1.73 -13.58 ZNESW 11.2 6.2 225.9 14.9 13.1 -23.1 12.9 -22.5 12.8 -20.8 13.0 -22.0
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.961518
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:05:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:05:17', tmtdew=1.44, humidity=90.87, cloud=0.0, wind=14.73, temperature=7.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:04:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:03:00')
2025-12-26T01:05:48.419 [DEBUG] [Thread-21700] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:05:48.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-26T01:05:48.501 [DEBUG] [Thread-21703] [transport.py] [_log()] starting thread (client mode): 0xb95b1a50
2025-12-26T01:05:48.501 [DEBUG] [Thread-21703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:05:48.516 [DEBUG] [Thread-21703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:05:48.516 [INFO] [Thread-21703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:05:48.523 [DEBUG] [Thread-21703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] client lang: <none>
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] server lang: <none>
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] kex follows: False
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] Compression: none
2025-12-26T01:05:48.524 [DEBUG] [Thread-21703] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:05:48.586 [DEBUG] [Thread-21703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:05:48.587 [DEBUG] [Thread-21703] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:05:48.587 [DEBUG] [Thread-21703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:05:48.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:05:48.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:05:48.643 [DEBUG] [Thread-21703] [transport.py] [_log()] userauth is OK
2025-12-26T01:05:48.643 [DEBUG] [Thread-21703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:05:48.643 [DEBUG] [Thread-21703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:05:48.643 [DEBUG] [Thread-21703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:05:48.643 [DEBUG] [Thread-21703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:05:48.658 [INFO] [Thread-21703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:05:48.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-26T01:05:48.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:05:49.441 [DEBUG] [Thread-21703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:05:49.441 [DEBUG] [Thread-21703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:05:49.491 [DEBUG] [Thread-21703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:05:49.491 [DEBUG] [Thread-21703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:05:49.500 [DEBUG] [Thread-21703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:05:49.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:05:49.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-26T01:05:49.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-26T01:05:49.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:05:49.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:05:49.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:05:49.533 [DEBUG] [Thread-21703] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:05:51.800 [DEBUG] [Thread-21705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:06.853 [DEBUG] [Thread-21706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:06:19.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:06:19.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-26T01:06:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 5, 49), 1.45, 90.85, 0.0, 15.05, 7.94, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:06:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:05:49
2025-12-26T01:06:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:06:20.548 [DEBUG] [Thread-21707] [transport.py] [_log()] starting thread (client mode): 0xb9591840
2025-12-26T01:06:20.548 [DEBUG] [Thread-21707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:06:20.568 [DEBUG] [Thread-21707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:06:20.568 [INFO] [Thread-21707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] client lang: <none>
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] server lang: <none>
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] kex follows: False
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:06:20.571 [DEBUG] [Thread-21707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:06:20.572 [DEBUG] [Thread-21707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:06:20.572 [DEBUG] [Thread-21707] [transport.py] [_log()] Compression: none
2025-12-26T01:06:20.572 [DEBUG] [Thread-21707] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:06:20.589 [DEBUG] [Thread-21707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:06:20.590 [DEBUG] [Thread-21707] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:06:20.590 [DEBUG] [Thread-21707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:06:20.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:06:20.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:06:20.592 [DEBUG] [Thread-21707] [transport.py] [_log()] userauth is OK
2025-12-26T01:06:20.593 [DEBUG] [Thread-21707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:06:20.593 [DEBUG] [Thread-21707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:06:20.593 [DEBUG] [Thread-21707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:06:20.593 [DEBUG] [Thread-21707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:06:20.611 [INFO] [Thread-21707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:06:20.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:06:21.370 [DEBUG] [Thread-21707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:06:21.370 [DEBUG] [Thread-21707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:06:21.371 [DEBUG] [Thread-21707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:06:21.412 [DEBUG] [Thread-21707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:06:21.412 [DEBUG] [Thread-21707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:06:21.415 [DEBUG] [Thread-21707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:06:21.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:06:21.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:06:21.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:06:21.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:06:21.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:06:21.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:06:21.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:06:21.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:06:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:06:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.962213 -999.00  +12.30  10.14     87  +10.30 1 1 1 2 1     0    0 1.72 -12.85 ZNESW 8.5 10.1 208.2 13.8 13.0 -23.1 12.9 -22.7 12.8 -21.0 13.0 -22.1
2025-12-26T01:06:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:06:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:06:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.962213
2025-12-26T01:06:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:06:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:06:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:06:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:06:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:06:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:05:49', tmtdew=1.45, humidity=90.85, cloud=0.0, wind=15.05, temperature=7.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:05:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:03:00')
2025-12-26T01:06:21.439 [DEBUG] [Thread-21707] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:06:21.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-26T01:06:21.537 [DEBUG] [Thread-21710] [transport.py] [_log()] starting thread (client mode): 0xb95910f0
2025-12-26T01:06:21.537 [DEBUG] [Thread-21710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:06:21.556 [DEBUG] [Thread-21710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:06:21.556 [INFO] [Thread-21710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:06:21.569 [DEBUG] [Thread-21710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:06:21.569 [DEBUG] [Thread-21710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:06:21.569 [DEBUG] [Thread-21710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:06:21.569 [DEBUG] [Thread-21710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:21.569 [DEBUG] [Thread-21710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:21.569 [DEBUG] [Thread-21710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] client lang: <none>
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] server lang: <none>
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] kex follows: False
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:06:21.570 [DEBUG] [Thread-21710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:06:21.571 [DEBUG] [Thread-21710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:06:21.571 [DEBUG] [Thread-21710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:06:21.571 [DEBUG] [Thread-21710] [transport.py] [_log()] Compression: none
2025-12-26T01:06:21.571 [DEBUG] [Thread-21710] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:06:21.621 [DEBUG] [Thread-21710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:06:21.621 [DEBUG] [Thread-21710] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:06:21.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:06:21.621 [DEBUG] [Thread-21710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:06:21.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:06:21.682 [DEBUG] [Thread-21710] [transport.py] [_log()] userauth is OK
2025-12-26T01:06:21.682 [DEBUG] [Thread-21710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:06:21.682 [DEBUG] [Thread-21710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:06:21.682 [DEBUG] [Thread-21710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:06:21.682 [DEBUG] [Thread-21710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:06:21.698 [INFO] [Thread-21710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:06:21.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-26T01:06:21.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:06:21.891 [DEBUG] [Thread-21712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:22.536 [DEBUG] [Thread-21710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:06:22.536 [DEBUG] [Thread-21710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:06:22.588 [DEBUG] [Thread-21710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:06:22.588 [DEBUG] [Thread-21710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:06:22.600 [DEBUG] [Thread-21710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:06:22.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:06:22.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-26T01:06:22.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:06:22.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:06:22.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:06:22.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:06:22.643 [DEBUG] [Thread-21710] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:06:31.181 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:31.182 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:36.931 [DEBUG] [Thread-21713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:41.641 [DEBUG] [Thread-21714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:51.964 [DEBUG] [Thread-21715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:06:52.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:06:52.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:06:52.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-26T01:06:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 6, 21), 1.45, 90.85, 0.0, 16.78, 7.93, 2, 2, 0, 2, 0, 0),)
2025-12-26T01:06:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:06:21
2025-12-26T01:06:53.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:06:53.656 [DEBUG] [Thread-21716] [transport.py] [_log()] starting thread (client mode): 0xb95d4ca0
2025-12-26T01:06:53.656 [DEBUG] [Thread-21716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:06:53.675 [DEBUG] [Thread-21716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:06:53.675 [INFO] [Thread-21716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] client lang: <none>
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] server lang: <none>
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] kex follows: False
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:06:53.678 [DEBUG] [Thread-21716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:06:53.679 [DEBUG] [Thread-21716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:06:53.679 [DEBUG] [Thread-21716] [transport.py] [_log()] Compression: none
2025-12-26T01:06:53.679 [DEBUG] [Thread-21716] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:06:53.693 [DEBUG] [Thread-21716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:06:53.693 [DEBUG] [Thread-21716] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:06:53.693 [DEBUG] [Thread-21716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:06:53.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:06:53.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:06:53.694 [DEBUG] [Thread-21716] [transport.py] [_log()] userauth is OK
2025-12-26T01:06:53.694 [DEBUG] [Thread-21716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:06:53.694 [DEBUG] [Thread-21716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:06:53.695 [DEBUG] [Thread-21716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:06:53.695 [DEBUG] [Thread-21716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:06:53.707 [INFO] [Thread-21716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:06:53.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:06:54.340 [DEBUG] [Thread-21716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:06:54.340 [DEBUG] [Thread-21716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:06:54.341 [DEBUG] [Thread-21716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:06:54.382 [DEBUG] [Thread-21716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:06:54.382 [DEBUG] [Thread-21716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:06:54.384 [DEBUG] [Thread-21716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:06:54.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:06:54.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:06:54.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:06:54.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:06:54.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:06:54.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:06:54.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:06:54.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.962561 -999.00  +12.30   4.50     87  +10.30 1 1 1 2 1     0    0 1.71 -12.35 ZNESW 10.3 4.5 174.1 12.5 13.1 -23.2 12.9 -23.0 12.7 -20.9 13.0 -22.1
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.962561
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:06:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:06:21', tmtdew=1.45, humidity=90.85, cloud=0.0, wind=16.78, temperature=7.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:06:05.270', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:03:00')
2025-12-26T01:06:54.402 [DEBUG] [Thread-21716] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:06:54.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-26T01:06:54.486 [DEBUG] [Thread-21719] [transport.py] [_log()] starting thread (client mode): 0xb95b2fb0
2025-12-26T01:06:54.486 [DEBUG] [Thread-21719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:06:54.501 [DEBUG] [Thread-21719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:06:54.501 [INFO] [Thread-21719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:06:54.508 [DEBUG] [Thread-21719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:06:54.508 [DEBUG] [Thread-21719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:06:54.508 [DEBUG] [Thread-21719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:06:54.508 [DEBUG] [Thread-21719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:54.508 [DEBUG] [Thread-21719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:06:54.508 [DEBUG] [Thread-21719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] client lang: <none>
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] server lang: <none>
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] kex follows: False
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] Compression: none
2025-12-26T01:06:54.509 [DEBUG] [Thread-21719] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:06:54.566 [DEBUG] [Thread-21719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:06:54.566 [DEBUG] [Thread-21719] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:06:54.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:06:54.566 [DEBUG] [Thread-21719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:06:54.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:06:54.623 [DEBUG] [Thread-21719] [transport.py] [_log()] userauth is OK
2025-12-26T01:06:54.623 [DEBUG] [Thread-21719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:06:54.623 [DEBUG] [Thread-21719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:06:54.623 [DEBUG] [Thread-21719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:06:54.623 [DEBUG] [Thread-21719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:06:54.638 [INFO] [Thread-21719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:06:54.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-26T01:06:54.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:06:55.472 [DEBUG] [Thread-21719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:06:55.472 [DEBUG] [Thread-21719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:06:55.519 [DEBUG] [Thread-21719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:06:55.519 [DEBUG] [Thread-21719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:06:55.527 [DEBUG] [Thread-21719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:06:55.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:06:55.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-26T01:06:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:06:55.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:06:55.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:06:55.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:06:55.558 [DEBUG] [Thread-21719] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:07:06.998 [DEBUG] [Thread-21721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:22.044 [DEBUG] [Thread-21722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:07:25.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:07: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-26T01:07:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 6, 53), 2.16, 86.82, 0.0, 16.23, 12.08, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:07:26.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:06:53
2025-12-26T01:07:26.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:07:26.650 [DEBUG] [Thread-21723] [transport.py] [_log()] starting thread (client mode): 0xb957ae90
2025-12-26T01:07:26.650 [DEBUG] [Thread-21723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:07:26.670 [DEBUG] [Thread-21723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:07:26.670 [INFO] [Thread-21723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] client lang: <none>
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] server lang: <none>
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] kex follows: False
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:07:26.673 [DEBUG] [Thread-21723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:07:26.674 [DEBUG] [Thread-21723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:07:26.674 [DEBUG] [Thread-21723] [transport.py] [_log()] Compression: none
2025-12-26T01:07:26.674 [DEBUG] [Thread-21723] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:07:26.689 [DEBUG] [Thread-21723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:07:26.690 [DEBUG] [Thread-21723] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:07:26.690 [DEBUG] [Thread-21723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:07:26.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:07:26.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:07:26.691 [DEBUG] [Thread-21723] [transport.py] [_log()] userauth is OK
2025-12-26T01:07:26.691 [DEBUG] [Thread-21723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:07:26.691 [DEBUG] [Thread-21723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:07:26.691 [DEBUG] [Thread-21723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:07:26.691 [DEBUG] [Thread-21723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:07:26.702 [INFO] [Thread-21723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:07:26.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:07:27.419 [DEBUG] [Thread-21723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:07:27.419 [DEBUG] [Thread-21723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:07:27.419 [DEBUG] [Thread-21723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:07:27.459 [DEBUG] [Thread-21723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:07:27.459 [DEBUG] [Thread-21723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:07:27.461 [DEBUG] [Thread-21723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:07:27.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:07:27.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:07:27.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:07:27.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:07:27.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:07:27.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:07:27.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:07:27.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:07:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:07:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.962908 -999.00  +12.30  14.23     87  +10.30 1 1 1 2 1     0    0 1.75 -12.06 ZNESW 10.3 14.2 205.4 15.8 13.0 -23.1 12.9 -22.6 12.7 -20.9 13.0 -22.1
2025-12-26T01:07:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.962908
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:07:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:06:53', tmtdew=2.16, humidity=86.82, cloud=0.0, wind=16.23, temperature=12.08, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:06:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.3562499999999993, 0.16724999999999923, 0.4112500000000008, 0.17049999999999876, 0.17650000000000077, 0.24625000000000163, 0.48550000000000004, 0.6662500000000007, 0.37549999999999883, 0.10899999999999999, 0.18874999999999886, 0.23099999999999987, 0.18399999999999928, 0.25624999999999964, 0.3609999999999989, 0.5079999999999991, 0.1952499999999997, 0.21499999999999986, 0.1269999999999989, 0.27974999999999817, 0.2969999999999988, 0.3507499999999979, 0.40025000000000155, 0.39475000000000016, 0.2264999999999997, 0.27550000000000097, 0.30274999999999963, 0.2635000000000005, 0.3390000000000004, 0.35900000000000176, 0.33800000000000097, 0.3790000000000022, 0.2937499999999993], zp_timestamp='2025-12-25T23:03:00')
2025-12-26T01:07:27.481 [DEBUG] [Thread-21723] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:07:27.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:07:27.575 [DEBUG] [Thread-21726] [transport.py] [_log()] starting thread (client mode): 0xb9593340
2025-12-26T01:07:27.575 [DEBUG] [Thread-21726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:07:27.590 [DEBUG] [Thread-21726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:07:27.590 [INFO] [Thread-21726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] client lang: <none>
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] server lang: <none>
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] kex follows: False
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] Compression: none
2025-12-26T01:07:27.598 [DEBUG] [Thread-21726] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:07:27.656 [DEBUG] [Thread-21726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:07:27.656 [DEBUG] [Thread-21726] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:07:27.656 [DEBUG] [Thread-21726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:07:27.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:07:27.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:07:27.712 [DEBUG] [Thread-21726] [transport.py] [_log()] userauth is OK
2025-12-26T01:07:27.712 [DEBUG] [Thread-21726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:07:27.712 [DEBUG] [Thread-21726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:07:27.712 [DEBUG] [Thread-21726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:07:27.712 [DEBUG] [Thread-21726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:07:27.731 [INFO] [Thread-21726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:07:27.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-26T01:07:27.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:07:28.558 [DEBUG] [Thread-21726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:07:28.559 [DEBUG] [Thread-21726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:07:28.606 [DEBUG] [Thread-21726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:07:28.606 [DEBUG] [Thread-21726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:07:28.615 [DEBUG] [Thread-21726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:07:28.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:07:28.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-26T01:07:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:07:28.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:07:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:07:28.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:07:28.652 [DEBUG] [Thread-21726] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:07:31.386 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:31.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:37.075 [DEBUG] [Thread-21728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:41.727 [DEBUG] [Thread-21729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:52.136 [DEBUG] [Thread-21730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:07:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:07:58.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:07:58.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-26T01:07:59.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 7, 25), 2.17, 86.8, 0.0, 15.77, 12.07, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:07:59.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:07:25
2025-12-26T01:07:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:07:59.752 [DEBUG] [Thread-21731] [transport.py] [_log()] starting thread (client mode): 0xb95d5db0
2025-12-26T01:07:59.752 [DEBUG] [Thread-21731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:07:59.772 [DEBUG] [Thread-21731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:07:59.772 [INFO] [Thread-21731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:07:59.775 [DEBUG] [Thread-21731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] client lang: <none>
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] server lang: <none>
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] kex follows: False
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] Compression: none
2025-12-26T01:07:59.776 [DEBUG] [Thread-21731] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:07:59.791 [DEBUG] [Thread-21731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:07:59.792 [DEBUG] [Thread-21731] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:07:59.792 [DEBUG] [Thread-21731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:07:59.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:07:59.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:07:59.793 [DEBUG] [Thread-21731] [transport.py] [_log()] userauth is OK
2025-12-26T01:07:59.793 [DEBUG] [Thread-21731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:07:59.793 [DEBUG] [Thread-21731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:07:59.793 [DEBUG] [Thread-21731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:07:59.793 [DEBUG] [Thread-21731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:07:59.803 [INFO] [Thread-21731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:07:59.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:08:00.455 [DEBUG] [Thread-21731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:08:00.455 [DEBUG] [Thread-21731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:08:00.455 [DEBUG] [Thread-21731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:08:00.497 [DEBUG] [Thread-21731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:08:00.497 [DEBUG] [Thread-21731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:08:00.499 [DEBUG] [Thread-21731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:08:00.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:08:00.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:08:00.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:08:00.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:08:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:08:00.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:08:00.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.963255 -999.00  +12.30   9.18     87  +10.30 1 1 1 2 1     0    0 1.74 -12.88 ZNESW 11.4 9.2 210.5 13.7 13.0 -23.0 12.9 -22.5 12.7 -20.9 13.0 -22.0
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.963255
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:08:00.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:07:25', tmtdew=2.17, humidity=86.8, cloud=0.0, wind=15.77, temperature=12.07, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:07:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.4327500000000004, 0.16525000000000034, 0.3987500000000015, 0.20649999999999835, 0.21750000000000114, 0.3152500000000007, 0.7574999999999994, 0.8662500000000009, 0.410499999999999, 0.11800000000000033, 0.2182499999999994, 0.23300000000000054, 0.19399999999999906, 0.2627499999999987, 0.3879999999999999, 0.5939999999999994, 0.20224999999999937, 0.2245000000000008, 0.14100000000000001, 0.2852499999999978, 0.2865000000000002, 0.33424999999999905, 0.4242500000000007, 0.36275000000000013, 0.24450000000000038, 0.2965, 0.32474999999999987, 0.24799999999999933, 0.41000000000000014, 0.424500000000001, 0.3490000000000011, 0.4800000000000004, 0.2987499999999992], zp_timestamp='2025-12-25T23:06:00')
2025-12-26T01:08:00.516 [DEBUG] [Thread-21731] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:08:00.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:08:00.602 [DEBUG] [Thread-21734] [transport.py] [_log()] starting thread (client mode): 0xb955b0a0
2025-12-26T01:08:00.602 [DEBUG] [Thread-21734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:08:00.617 [DEBUG] [Thread-21734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:08:00.617 [INFO] [Thread-21734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:08:00.624 [DEBUG] [Thread-21734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:08:00.624 [DEBUG] [Thread-21734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] client lang: <none>
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] server lang: <none>
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] kex follows: False
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] Compression: none
2025-12-26T01:08:00.625 [DEBUG] [Thread-21734] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:08:00.683 [DEBUG] [Thread-21734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:08:00.683 [DEBUG] [Thread-21734] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:08:00.684 [DEBUG] [Thread-21734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:08:00.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:08:00.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:08:00.746 [DEBUG] [Thread-21734] [transport.py] [_log()] userauth is OK
2025-12-26T01:08:00.746 [DEBUG] [Thread-21734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:08:00.746 [DEBUG] [Thread-21734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:08:00.746 [DEBUG] [Thread-21734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:08:00.746 [DEBUG] [Thread-21734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:08:00.763 [INFO] [Thread-21734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:08:00.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-26T01:08:00.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:08:01.608 [DEBUG] [Thread-21734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:08:01.608 [DEBUG] [Thread-21734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:08:01.656 [DEBUG] [Thread-21734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:08:01.656 [DEBUG] [Thread-21734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:08:01.665 [DEBUG] [Thread-21734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:08:01.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:08:01.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-26T01:08:01.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-26T01:08:01.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:08:01.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:08:01.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:08:01.696 [DEBUG] [Thread-21734] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:08:07.168 [DEBUG] [Thread-21736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:08:22.219 [DEBUG] [Thread-21737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:08:31.591 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:08:31.592 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:08:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:08:31.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:08:31.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-26T01:08:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 7, 57), 2.11, 86.85, 0.0, 14.22, 12.03, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:08:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:07:57
2025-12-26T01:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:08:32.701 [DEBUG] [Thread-21738] [transport.py] [_log()] starting thread (client mode): 0xb9591720
2025-12-26T01:08:32.701 [DEBUG] [Thread-21738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:08:32.722 [DEBUG] [Thread-21738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:08:32.722 [INFO] [Thread-21738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:08:32.725 [DEBUG] [Thread-21738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:08:32.725 [DEBUG] [Thread-21738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:08:32.725 [DEBUG] [Thread-21738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:08:32.725 [DEBUG] [Thread-21738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:08:32.725 [DEBUG] [Thread-21738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] client lang: <none>
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] server lang: <none>
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] kex follows: False
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] Compression: none
2025-12-26T01:08:32.726 [DEBUG] [Thread-21738] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:08:32.743 [DEBUG] [Thread-21738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:08:32.743 [DEBUG] [Thread-21738] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:08:32.744 [DEBUG] [Thread-21738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:08:32.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:08:32.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:08:32.746 [DEBUG] [Thread-21738] [transport.py] [_log()] userauth is OK
2025-12-26T01:08:32.746 [DEBUG] [Thread-21738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:08:32.746 [DEBUG] [Thread-21738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:08:32.747 [DEBUG] [Thread-21738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:08:32.747 [DEBUG] [Thread-21738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:08:32.772 [INFO] [Thread-21738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:08:32.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:08:33.533 [DEBUG] [Thread-21738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:08:33.533 [DEBUG] [Thread-21738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:08:33.534 [DEBUG] [Thread-21738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:08:33.574 [DEBUG] [Thread-21738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:08:33.574 [DEBUG] [Thread-21738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:08:33.576 [DEBUG] [Thread-21738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:08:33.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:08:33.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:08:33.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:08:33.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:08:33.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:08:33.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:08:33.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.963949 -999.00  +12.20   9.84     87  +10.30 1 1 1 2 1     0    0 1.74 -11.36 ZNESW 10.6 9.8 212.3 13.8 13.0 -23.0 12.8 -22.6 12.6 -20.8 12.9 -21.9
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.963949
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:08:33.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:07:57', tmtdew=2.11, humidity=86.85, cloud=0.0, wind=14.22, temperature=12.03, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:08:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[0.4327500000000004, 0.16525000000000034, 0.3987500000000015, 0.20649999999999835, 0.21750000000000114, 0.3152500000000007, 0.7574999999999994, 0.8662500000000009, 0.410499999999999, 0.11800000000000033, 0.2182499999999994, 0.23300000000000054, 0.19399999999999906, 0.2627499999999987, 0.3879999999999999, 0.5939999999999994, 0.20224999999999937, 0.2245000000000008, 0.14100000000000001, 0.2852499999999978, 0.2865000000000002, 0.33424999999999905, 0.4242500000000007, 0.36275000000000013, 0.24450000000000038, 0.2965, 0.32474999999999987, 0.24799999999999933, 0.41000000000000014, 0.424500000000001, 0.3490000000000011, 0.4800000000000004, 0.2987499999999992], zp_timestamp='2025-12-25T23:06:00')
2025-12-26T01:08:33.605 [DEBUG] [Thread-21738] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:08:33.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-26T01:08:33.687 [DEBUG] [Thread-21741] [transport.py] [_log()] starting thread (client mode): 0xb95915a0
2025-12-26T01:08:33.687 [DEBUG] [Thread-21741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:08:33.701 [DEBUG] [Thread-21741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:08:33.701 [INFO] [Thread-21741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] client lang: <none>
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] server lang: <none>
2025-12-26T01:08:33.709 [DEBUG] [Thread-21741] [transport.py] [_log()] kex follows: False
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] Compression: none
2025-12-26T01:08:33.710 [DEBUG] [Thread-21741] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:08:33.765 [DEBUG] [Thread-21741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:08:33.766 [DEBUG] [Thread-21741] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:08:33.767 [DEBUG] [Thread-21741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:08:33.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:08:33.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:08:33.821 [DEBUG] [Thread-21741] [transport.py] [_log()] userauth is OK
2025-12-26T01:08:33.822 [DEBUG] [Thread-21741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:08:33.822 [DEBUG] [Thread-21741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:08:33.822 [DEBUG] [Thread-21741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:08:33.822 [DEBUG] [Thread-21741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:08:33.841 [INFO] [Thread-21741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:08:33.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-26T01:08:33.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:08:34.647 [DEBUG] [Thread-21741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:08:34.647 [DEBUG] [Thread-21741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:08:34.695 [DEBUG] [Thread-21741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:08:34.695 [DEBUG] [Thread-21741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:08:34.705 [DEBUG] [Thread-21741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:08:34.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:08:34.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-26T01:08:34.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-26T01:08:34.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:08:34.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:08:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:08:34.741 [DEBUG] [Thread-21741] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:08:37.249 [DEBUG] [Thread-21743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:08:41.803 [DEBUG] [Thread-21744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:08:52.297 [DEBUG] [Thread-21745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:09:04.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:09:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:09:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 9, 1), 2.08, 86.99, 0.0, 14.91, 12.07, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:09:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:09:01
2025-12-26T01:09:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:09:05.747 [DEBUG] [Thread-21746] [transport.py] [_log()] starting thread (client mode): 0xb95b1000
2025-12-26T01:09:05.747 [DEBUG] [Thread-21746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:09:05.767 [DEBUG] [Thread-21746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:09:05.767 [INFO] [Thread-21746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:09:05.771 [DEBUG] [Thread-21746] [transport.py] [_log()] client lang: <none>
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] server lang: <none>
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] kex follows: False
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] Compression: none
2025-12-26T01:09:05.772 [DEBUG] [Thread-21746] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:09:05.788 [DEBUG] [Thread-21746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:09:05.788 [DEBUG] [Thread-21746] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:09:05.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:09:05.790 [DEBUG] [Thread-21746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:09:05.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:09:05.833 [DEBUG] [Thread-21746] [transport.py] [_log()] userauth is OK
2025-12-26T01:09:05.833 [DEBUG] [Thread-21746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:09:05.833 [DEBUG] [Thread-21746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:09:05.833 [DEBUG] [Thread-21746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:09:05.834 [DEBUG] [Thread-21746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:09:05.864 [INFO] [Thread-21746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:09:05.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:09:06.522 [DEBUG] [Thread-21746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:09:06.523 [DEBUG] [Thread-21746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:09:06.523 [DEBUG] [Thread-21746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:09:06.564 [DEBUG] [Thread-21746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:09:06.564 [DEBUG] [Thread-21746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:09:06.568 [DEBUG] [Thread-21746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:09:06.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:09:06.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:09:06.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:09:06.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:09:06.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:09:06.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:09:06.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:09:06.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:09:06.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:09:06.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.964297 -999.00  +12.20  10.14     87  +10.30 1 1 1 2 1     0    0 1.75 -11.88 ZNESW 13.1 10.1 214.4 12.5 13.0 -23.1 12.9 -22.5 12.6 -20.8 12.9 -22.1
2025-12-26T01:09:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:09:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:09:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.964297
2025-12-26T01:09:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:09:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:09:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:09:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:09:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:09:06.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:09:01', tmtdew=2.08, humidity=86.99, cloud=0.0, wind=14.91, temperature=12.07, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:08:35.261', atlas_cloud=1, atlas_rain=1, zp_data=[0.4327500000000004, 0.16525000000000034, 0.3987500000000015, 0.20649999999999835, 0.21750000000000114, 0.3152500000000007, 0.7574999999999994, 0.8662500000000009, 0.410499999999999, 0.11800000000000033, 0.2182499999999994, 0.23300000000000054, 0.19399999999999906, 0.2627499999999987, 0.3879999999999999, 0.5939999999999994, 0.20224999999999937, 0.2245000000000008, 0.14100000000000001, 0.2852499999999978, 0.2865000000000002, 0.33424999999999905, 0.4242500000000007, 0.36275000000000013, 0.24450000000000038, 0.2965, 0.32474999999999987, 0.24799999999999933, 0.41000000000000014, 0.424500000000001, 0.3490000000000011, 0.4800000000000004, 0.2987499999999992], zp_timestamp='2025-12-25T23:06:00')
2025-12-26T01:09:06.596 [DEBUG] [Thread-21746] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:09:06.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-26T01:09:06.689 [DEBUG] [Thread-21749] [transport.py] [_log()] starting thread (client mode): 0xb95f2e90
2025-12-26T01:09:06.689 [DEBUG] [Thread-21749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:09:06.704 [DEBUG] [Thread-21749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:09:06.704 [INFO] [Thread-21749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] client lang: <none>
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] server lang: <none>
2025-12-26T01:09:06.712 [DEBUG] [Thread-21749] [transport.py] [_log()] kex follows: False
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] Compression: none
2025-12-26T01:09:06.713 [DEBUG] [Thread-21749] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:09:06.771 [DEBUG] [Thread-21749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:09:06.771 [DEBUG] [Thread-21749] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:09:06.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:09:06.772 [DEBUG] [Thread-21749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:09:06.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:09:06.826 [DEBUG] [Thread-21749] [transport.py] [_log()] userauth is OK
2025-12-26T01:09:06.827 [DEBUG] [Thread-21749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:09:06.827 [DEBUG] [Thread-21749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:09:06.827 [DEBUG] [Thread-21749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:09:06.827 [DEBUG] [Thread-21749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:09:06.846 [INFO] [Thread-21749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:09:06.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-26T01:09:06.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:09:07.335 [DEBUG] [Thread-21751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:07.724 [DEBUG] [Thread-21749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:09:07.724 [DEBUG] [Thread-21749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:09:07.772 [DEBUG] [Thread-21749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:09:07.772 [DEBUG] [Thread-21749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:09:07.781 [DEBUG] [Thread-21749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:09:07.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:09:07.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:09:07.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:09:07.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:09:07.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:09:07.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:09:07.818 [DEBUG] [Thread-21749] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:09:22.381 [DEBUG] [Thread-21752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:31.794 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:31.795 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:37.418 [DEBUG] [Thread-21753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:37.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:09:37.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:09:37.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-26T01:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 9, 33), 2.25, 86.07, 0.0, 19.37, 12.33, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:09:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:09:33
2025-12-26T01:09:38.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:09:38.807 [DEBUG] [Thread-21754] [transport.py] [_log()] starting thread (client mode): 0xb95f0ac0
2025-12-26T01:09:38.807 [DEBUG] [Thread-21754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:09:38.822 [DEBUG] [Thread-21754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:09:38.822 [INFO] [Thread-21754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:09:38.825 [DEBUG] [Thread-21754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:09:38.825 [DEBUG] [Thread-21754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:09:38.825 [DEBUG] [Thread-21754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:09:38.825 [DEBUG] [Thread-21754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:38.825 [DEBUG] [Thread-21754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] client lang: <none>
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] server lang: <none>
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] kex follows: False
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] Compression: none
2025-12-26T01:09:38.826 [DEBUG] [Thread-21754] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:09:38.844 [DEBUG] [Thread-21754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:09:38.844 [DEBUG] [Thread-21754] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:09:38.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:09:38.845 [DEBUG] [Thread-21754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:09:38.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:09:38.847 [DEBUG] [Thread-21754] [transport.py] [_log()] userauth is OK
2025-12-26T01:09:38.847 [DEBUG] [Thread-21754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:09:38.848 [DEBUG] [Thread-21754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:09:38.848 [DEBUG] [Thread-21754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:09:38.848 [DEBUG] [Thread-21754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:09:38.872 [INFO] [Thread-21754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:09:38.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:09:39.611 [DEBUG] [Thread-21754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:09:39.612 [DEBUG] [Thread-21754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:09:39.612 [DEBUG] [Thread-21754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:09:39.653 [DEBUG] [Thread-21754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:09:39.653 [DEBUG] [Thread-21754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:09:39.657 [DEBUG] [Thread-21754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:09:39.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:09:39.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:09:39.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:09:39.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:09:39.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:09:39.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:09:39.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:09:39.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:09:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:09:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.964644 -999.00  +12.20   7.79     88  +10.30 1 1 1 3 1     0    0 1.73 -11.84 ZNESW 9.7 7.8 192.1 14.8 13.0 -23.0 12.8 -22.6 12.7 -20.9 12.9 -21.8
2025-12-26T01:09:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:09:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:09:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.964644
2025-12-26T01:09:39.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:09:39.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:09:39.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:09:39.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:09:39.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:09:39.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:09:33', tmtdew=2.25, humidity=86.07, cloud=0.0, wind=19.37, temperature=12.33, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:09:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.4327500000000004, 0.16525000000000034, 0.3987500000000015, 0.20649999999999835, 0.21750000000000114, 0.3152500000000007, 0.7574999999999994, 0.8662500000000009, 0.410499999999999, 0.11800000000000033, 0.2182499999999994, 0.23300000000000054, 0.19399999999999906, 0.2627499999999987, 0.3879999999999999, 0.5939999999999994, 0.20224999999999937, 0.2245000000000008, 0.14100000000000001, 0.2852499999999978, 0.2865000000000002, 0.33424999999999905, 0.4242500000000007, 0.36275000000000013, 0.24450000000000038, 0.2965, 0.32474999999999987, 0.24799999999999933, 0.41000000000000014, 0.424500000000001, 0.3490000000000011, 0.4800000000000004, 0.2987499999999992], zp_timestamp='2025-12-25T23:06:00')
2025-12-26T01:09:39.685 [DEBUG] [Thread-21754] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:09:39.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-26T01:09:39.777 [DEBUG] [Thread-21757] [transport.py] [_log()] starting thread (client mode): 0xb95f13f0
2025-12-26T01:09:39.777 [DEBUG] [Thread-21757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:09:39.792 [DEBUG] [Thread-21757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:09:39.792 [INFO] [Thread-21757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:39.800 [DEBUG] [Thread-21757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] client lang: <none>
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] server lang: <none>
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] kex follows: False
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:09:39.801 [DEBUG] [Thread-21757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:09:39.802 [DEBUG] [Thread-21757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:09:39.802 [DEBUG] [Thread-21757] [transport.py] [_log()] Compression: none
2025-12-26T01:09:39.802 [DEBUG] [Thread-21757] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:09:39.865 [DEBUG] [Thread-21757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:09:39.865 [DEBUG] [Thread-21757] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:09:39.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:09:39.867 [DEBUG] [Thread-21757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:09:39.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:09:39.923 [DEBUG] [Thread-21757] [transport.py] [_log()] userauth is OK
2025-12-26T01:09:39.923 [DEBUG] [Thread-21757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:09:39.923 [DEBUG] [Thread-21757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:09:39.923 [DEBUG] [Thread-21757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:09:39.923 [DEBUG] [Thread-21757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:09:39.944 [INFO] [Thread-21757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:09:39.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-26T01:09:39.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:09:40.760 [DEBUG] [Thread-21757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:09:40.761 [DEBUG] [Thread-21757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:09:40.808 [DEBUG] [Thread-21757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:09:40.808 [DEBUG] [Thread-21757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:09:40.817 [DEBUG] [Thread-21757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:09:40.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:09:40.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:09:40.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-26T01:09:40.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:09:40.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:09:40.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:09:40.854 [DEBUG] [Thread-21757] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:09:41.892 [DEBUG] [Thread-21759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:09:52.453 [DEBUG] [Thread-21760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:07.508 [DEBUG] [Thread-21761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:10:10.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:10: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-26T01:10:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 10, 5), 2.07, 87.07, 0.0, 16.66, 12.02, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:10:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:10:05
2025-12-26T01:10:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:10:11.823 [DEBUG] [Thread-21762] [transport.py] [_log()] starting thread (client mode): 0xb95f1750
2025-12-26T01:10:11.823 [DEBUG] [Thread-21762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:10:11.846 [DEBUG] [Thread-21762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:10:11.846 [INFO] [Thread-21762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:10:11.850 [DEBUG] [Thread-21762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:10:11.850 [DEBUG] [Thread-21762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] client lang: <none>
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] server lang: <none>
2025-12-26T01:10:11.851 [DEBUG] [Thread-21762] [transport.py] [_log()] kex follows: False
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] Compression: none
2025-12-26T01:10:11.852 [DEBUG] [Thread-21762] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:10:11.870 [DEBUG] [Thread-21762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:10:11.871 [DEBUG] [Thread-21762] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:10:11.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:10:11.871 [DEBUG] [Thread-21762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:10:11.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:10:11.913 [DEBUG] [Thread-21762] [transport.py] [_log()] userauth is OK
2025-12-26T01:10:11.913 [DEBUG] [Thread-21762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:10:11.913 [DEBUG] [Thread-21762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:10:11.914 [DEBUG] [Thread-21762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:10:11.914 [DEBUG] [Thread-21762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:10:11.952 [INFO] [Thread-21762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:10:11.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:10:13.644 [DEBUG] [Thread-21762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:10:13.644 [DEBUG] [Thread-21762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:10:13.644 [DEBUG] [Thread-21762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:10:13.685 [DEBUG] [Thread-21762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:10:13.685 [DEBUG] [Thread-21762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:10:13.688 [DEBUG] [Thread-21762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:10:13.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:10:13.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:10:13.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:10:13.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:10:13.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:10:13.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:10:13.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:10:13.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:10:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:10:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.964991 -999.00  +12.30  12.51     87  +10.30 1 1 1 2 1     0    0 1.71 -11.44 ZNESW 5.3 12.5 203.4 15.6 13.0 -23.0 12.8 -22.5 12.7 -20.7 12.9 -22.0
2025-12-26T01:10:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:10:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:10:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.964991
2025-12-26T01:10:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:10:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:10:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:10:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:10:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:10:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:10:05', tmtdew=2.07, humidity=87.07, cloud=0.0, wind=16.66, temperature=12.02, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:09:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.4327500000000004, 0.16525000000000034, 0.3987500000000015, 0.20649999999999835, 0.21750000000000114, 0.3152500000000007, 0.7574999999999994, 0.8662500000000009, 0.410499999999999, 0.11800000000000033, 0.2182499999999994, 0.23300000000000054, 0.19399999999999906, 0.2627499999999987, 0.3879999999999999, 0.5939999999999994, 0.20224999999999937, 0.2245000000000008, 0.14100000000000001, 0.2852499999999978, 0.2865000000000002, 0.33424999999999905, 0.4242500000000007, 0.36275000000000013, 0.24450000000000038, 0.2965, 0.32474999999999987, 0.24799999999999933, 0.41000000000000014, 0.424500000000001, 0.3490000000000011, 0.4800000000000004, 0.2987499999999992], zp_timestamp='2025-12-25T23:06:00')
2025-12-26T01:10:13.713 [DEBUG] [Thread-21762] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:10:13.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:10:13.808 [DEBUG] [Thread-21765] [transport.py] [_log()] starting thread (client mode): 0xb95f1870
2025-12-26T01:10:13.808 [DEBUG] [Thread-21765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:10:13.823 [DEBUG] [Thread-21765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:10:13.823 [INFO] [Thread-21765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:10:13.830 [DEBUG] [Thread-21765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:10:13.830 [DEBUG] [Thread-21765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] client lang: <none>
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] server lang: <none>
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] kex follows: False
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] Compression: none
2025-12-26T01:10:13.831 [DEBUG] [Thread-21765] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:10:13.887 [DEBUG] [Thread-21765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:10:13.887 [DEBUG] [Thread-21765] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:10:13.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:10:13.888 [DEBUG] [Thread-21765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:10:13.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:10:13.944 [DEBUG] [Thread-21765] [transport.py] [_log()] userauth is OK
2025-12-26T01:10:13.944 [DEBUG] [Thread-21765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:10:13.944 [DEBUG] [Thread-21765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:10:13.944 [DEBUG] [Thread-21765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:10:13.944 [DEBUG] [Thread-21765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:10:13.963 [INFO] [Thread-21765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:10:13.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:10:13.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:10:14.797 [DEBUG] [Thread-21765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:10:14.797 [DEBUG] [Thread-21765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:10:14.845 [DEBUG] [Thread-21765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:10:14.845 [DEBUG] [Thread-21765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:10:14.854 [DEBUG] [Thread-21765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:10:14.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:10:14.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:10:14.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-26T01:10:14.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:10:14.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:10:14.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:10:14.890 [DEBUG] [Thread-21765] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:10:22.540 [DEBUG] [Thread-21767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:31.999 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:32.001 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:37.586 [DEBUG] [Thread-21768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:41.984 [DEBUG] [Thread-21769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:10:44.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:10:44.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:10:44.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-26T01:10:45.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 10, 37), 2.07, 87.09, 0.0, 16.89, 12.03, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:10:45.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:10:37
2025-12-26T01:10:45.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:10:45.854 [DEBUG] [Thread-21770] [transport.py] [_log()] starting thread (client mode): 0xb9592380
2025-12-26T01:10:45.854 [DEBUG] [Thread-21770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:10:45.874 [DEBUG] [Thread-21770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:10:45.874 [INFO] [Thread-21770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] client lang: <none>
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] server lang: <none>
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] kex follows: False
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] Compression: none
2025-12-26T01:10:45.877 [DEBUG] [Thread-21770] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:10:45.898 [DEBUG] [Thread-21770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:10:45.899 [DEBUG] [Thread-21770] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:10:45.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:10:45.899 [DEBUG] [Thread-21770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:10:45.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:10:45.902 [DEBUG] [Thread-21770] [transport.py] [_log()] userauth is OK
2025-12-26T01:10:45.902 [DEBUG] [Thread-21770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:10:45.902 [DEBUG] [Thread-21770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:10:45.902 [DEBUG] [Thread-21770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:10:45.903 [DEBUG] [Thread-21770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:10:45.926 [INFO] [Thread-21770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:10:45.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:10:46.553 [DEBUG] [Thread-21770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:10:46.554 [DEBUG] [Thread-21770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:10:46.554 [DEBUG] [Thread-21770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:10:46.595 [DEBUG] [Thread-21770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:10:46.596 [DEBUG] [Thread-21770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:10:46.598 [DEBUG] [Thread-21770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:10:46.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:10:46.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:10:46.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:10:46.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:10:46.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:10:46.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:10:46.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:10:46.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:10:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:10:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.965338 -999.00  +12.30   6.34     87  +10.30 1 1 1 2 1     0    0 1.71 -11.05 ZNESW 7.9 6.3 215.6 13.4 12.9 -23.0 12.8 -22.6 12.7 -20.8 12.9 -21.9
2025-12-26T01:10:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:10:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:10:46.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.965338
2025-12-26T01:10:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:10:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:10:46.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:10:46.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:10:46.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:10:46.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:10:37', tmtdew=2.07, humidity=87.09, cloud=0.0, wind=16.89, temperature=12.03, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:10:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:09:00')
2025-12-26T01:10:46.625 [DEBUG] [Thread-21770] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:10:46.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-26T01:10:46.719 [DEBUG] [Thread-21773] [transport.py] [_log()] starting thread (client mode): 0xb95f1b10
2025-12-26T01:10:46.719 [DEBUG] [Thread-21773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:10:46.734 [DEBUG] [Thread-21773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:10:46.734 [INFO] [Thread-21773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] client lang: <none>
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] server lang: <none>
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] kex follows: False
2025-12-26T01:10:46.741 [DEBUG] [Thread-21773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:10:46.742 [DEBUG] [Thread-21773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:10:46.742 [DEBUG] [Thread-21773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:10:46.742 [DEBUG] [Thread-21773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:10:46.742 [DEBUG] [Thread-21773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:10:46.742 [DEBUG] [Thread-21773] [transport.py] [_log()] Compression: none
2025-12-26T01:10:46.742 [DEBUG] [Thread-21773] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:10:46.800 [DEBUG] [Thread-21773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:10:46.801 [DEBUG] [Thread-21773] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:10:46.801 [DEBUG] [Thread-21773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:10:46.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:10:46.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:10:46.860 [DEBUG] [Thread-21773] [transport.py] [_log()] userauth is OK
2025-12-26T01:10:46.860 [DEBUG] [Thread-21773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:10:46.861 [DEBUG] [Thread-21773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:10:46.861 [DEBUG] [Thread-21773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:10:46.861 [DEBUG] [Thread-21773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:10:46.880 [INFO] [Thread-21773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:10:46.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-26T01:10:46.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:10:47.696 [DEBUG] [Thread-21773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:10:47.696 [DEBUG] [Thread-21773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:10:47.744 [DEBUG] [Thread-21773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:10:47.745 [DEBUG] [Thread-21773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:10:47.753 [DEBUG] [Thread-21773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:10:47.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:10:47.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-26T01:10:47.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-26T01:10:47.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:10:47.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:10:47.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:10:47.790 [DEBUG] [Thread-21773] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:10:52.618 [DEBUG] [Thread-21775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:07.680 [DEBUG] [Thread-21776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:17.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:11:17.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:11:17.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-26T01:11:18.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 11, 9), 2.05, 87.19, 0.0, 17.03, 12.05, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:11:18.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:11:09
2025-12-26T01:11:18.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:11:18.803 [DEBUG] [Thread-21777] [transport.py] [_log()] starting thread (client mode): 0xb95f0f70
2025-12-26T01:11:18.803 [DEBUG] [Thread-21777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:11:18.823 [DEBUG] [Thread-21777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:11:18.823 [INFO] [Thread-21777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] client lang: <none>
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] server lang: <none>
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] kex follows: False
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:11:18.826 [DEBUG] [Thread-21777] [transport.py] [_log()] Compression: none
2025-12-26T01:11:18.827 [DEBUG] [Thread-21777] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:11:18.845 [DEBUG] [Thread-21777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:11:18.845 [DEBUG] [Thread-21777] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:11:18.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:11:18.846 [DEBUG] [Thread-21777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:11:18.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:11:18.889 [DEBUG] [Thread-21777] [transport.py] [_log()] userauth is OK
2025-12-26T01:11:18.889 [DEBUG] [Thread-21777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:11:18.889 [DEBUG] [Thread-21777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:11:18.890 [DEBUG] [Thread-21777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:11:18.890 [DEBUG] [Thread-21777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:11:18.910 [INFO] [Thread-21777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:11:18.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:11:19.528 [DEBUG] [Thread-21777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:11:19.528 [DEBUG] [Thread-21777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:11:19.528 [DEBUG] [Thread-21777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:11:19.569 [DEBUG] [Thread-21777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:11:19.569 [DEBUG] [Thread-21777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:11:19.573 [DEBUG] [Thread-21777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:11:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:11:19.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:11:19.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:11:19.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:11:19.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:11:19.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:11:19.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:11:19.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:11:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:11:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.965685 -999.00  +12.30   5.31     87  +10.30 1 1 1 2 1     0    0 1.76 -10.39 ZNESW 7.7 5.3 205.6 13.2 12.9 -22.9 12.8 -22.5 12.7 -20.9 12.9 -22.0
2025-12-26T01:11:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:11:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:11:19.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.965685
2025-12-26T01:11:19.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:11:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:11:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:11:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:11:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:11:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:11:09', tmtdew=2.05, humidity=87.19, cloud=0.0, wind=17.03, temperature=12.05, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:10:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:09:00')
2025-12-26T01:11:19.597 [DEBUG] [Thread-21777] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:11: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-26T01:11:19.690 [DEBUG] [Thread-21780] [transport.py] [_log()] starting thread (client mode): 0xb95f20b0
2025-12-26T01:11:19.691 [DEBUG] [Thread-21780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:11:19.705 [DEBUG] [Thread-21780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:11:19.705 [INFO] [Thread-21780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:11:19.713 [DEBUG] [Thread-21780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:11:19.714 [DEBUG] [Thread-21780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] client lang: <none>
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] server lang: <none>
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] kex follows: False
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:11:19.715 [DEBUG] [Thread-21780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:11:19.716 [DEBUG] [Thread-21780] [transport.py] [_log()] Compression: none
2025-12-26T01:11:19.716 [DEBUG] [Thread-21780] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:11:19.773 [DEBUG] [Thread-21780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:11:19.774 [DEBUG] [Thread-21780] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:11:19.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:11:19.775 [DEBUG] [Thread-21780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:11:19.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:11:19.833 [DEBUG] [Thread-21780] [transport.py] [_log()] userauth is OK
2025-12-26T01:11:19.833 [DEBUG] [Thread-21780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:11:19.833 [DEBUG] [Thread-21780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:11:19.833 [DEBUG] [Thread-21780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:11:19.833 [DEBUG] [Thread-21780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:11:19.851 [INFO] [Thread-21780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:11:19.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:11:19.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:11:20.630 [DEBUG] [Thread-21780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:11:20.630 [DEBUG] [Thread-21780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:11:20.678 [DEBUG] [Thread-21780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:11:20.678 [DEBUG] [Thread-21780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:11:20.687 [DEBUG] [Thread-21780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:11:20.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:11:20.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:11:20.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-26T01:11:20.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:11:20.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:11:20.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:11:20.733 [DEBUG] [Thread-21780] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:11:22.711 [DEBUG] [Thread-21782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:32.205 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:32.206 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:37.777 [DEBUG] [Thread-21783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:42.049 [DEBUG] [Thread-21784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:11:50.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:11:50.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-26T01:11:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 11, 41), 2.05, 87.19, 0.0, 13.43, 12.08, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:11:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:11:41
2025-12-26T01:11:51.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:11:51.719 [DEBUG] [Thread-21785] [transport.py] [_log()] starting thread (client mode): 0xb9593dc0
2025-12-26T01:11:51.719 [DEBUG] [Thread-21785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:11:51.739 [DEBUG] [Thread-21785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:11:51.739 [INFO] [Thread-21785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] client lang: <none>
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] server lang: <none>
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] kex follows: False
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] Compression: none
2025-12-26T01:11:51.742 [DEBUG] [Thread-21785] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:11:51.758 [DEBUG] [Thread-21785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:11:51.758 [DEBUG] [Thread-21785] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:11:51.758 [DEBUG] [Thread-21785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:11:51.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:11:51.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:11:51.800 [DEBUG] [Thread-21785] [transport.py] [_log()] userauth is OK
2025-12-26T01:11:51.800 [DEBUG] [Thread-21785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:11:51.800 [DEBUG] [Thread-21785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:11:51.800 [DEBUG] [Thread-21785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:11:51.800 [DEBUG] [Thread-21785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:11:51.827 [INFO] [Thread-21785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:11:51.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:11:52.472 [DEBUG] [Thread-21785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:11:52.472 [DEBUG] [Thread-21785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:11:52.472 [DEBUG] [Thread-21785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:11:52.514 [DEBUG] [Thread-21785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:11:52.514 [DEBUG] [Thread-21785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:11:52.516 [DEBUG] [Thread-21785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:11:52.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:11:52.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:11:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:11:52.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:11:52.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:11:52.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:11:52.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:11:52.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:11:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:11:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.966380 -999.00  +12.30   8.23     87  +10.30 1 1 1 2 1     0    0 1.72 -10.14 ZNESW 6.6 8.2 219.5 16.6 13.0 -23.0 12.8 -22.4 12.6 -20.8 12.9 -22.0
2025-12-26T01:11:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:11:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:11:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.966380
2025-12-26T01:11:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:11:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:11:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:11:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:11:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:11:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:11:41', tmtdew=2.05, humidity=87.19, cloud=0.0, wind=13.43, temperature=12.08, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:11:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:09:00')
2025-12-26T01:11:52.537 [DEBUG] [Thread-21785] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:11:52.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-26T01:11:52.620 [DEBUG] [Thread-21788] [transport.py] [_log()] starting thread (client mode): 0xb95933a0
2025-12-26T01:11:52.620 [DEBUG] [Thread-21788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:11:52.635 [DEBUG] [Thread-21788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:11:52.635 [INFO] [Thread-21788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] client lang: <none>
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] server lang: <none>
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] kex follows: False
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:11:52.642 [DEBUG] [Thread-21788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:11:52.643 [DEBUG] [Thread-21788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:11:52.643 [DEBUG] [Thread-21788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:11:52.643 [DEBUG] [Thread-21788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:11:52.643 [DEBUG] [Thread-21788] [transport.py] [_log()] Compression: none
2025-12-26T01:11:52.643 [DEBUG] [Thread-21788] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:11:52.699 [DEBUG] [Thread-21788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:11:52.699 [DEBUG] [Thread-21788] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:11:52.699 [DEBUG] [Thread-21788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:11:52.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:11:52.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:11:52.757 [DEBUG] [Thread-21788] [transport.py] [_log()] userauth is OK
2025-12-26T01:11:52.757 [DEBUG] [Thread-21788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:11:52.757 [DEBUG] [Thread-21788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:11:52.757 [DEBUG] [Thread-21788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:11:52.757 [DEBUG] [Thread-21788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:11:52.774 [INFO] [Thread-21788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:11:52.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-26T01:11:52.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:11:52.811 [DEBUG] [Thread-21790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:11:53.568 [DEBUG] [Thread-21788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:11:53.568 [DEBUG] [Thread-21788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:11:53.615 [DEBUG] [Thread-21788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:11:53.615 [DEBUG] [Thread-21788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:11:53.623 [DEBUG] [Thread-21788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:11:53.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:11:53.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-26T01:11:53.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:11:53.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:11:53.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:11:53.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:11:53.655 [DEBUG] [Thread-21788] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:12:07.848 [DEBUG] [Thread-21791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:12:22.885 [DEBUG] [Thread-21792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:12:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:12:23.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:12:23.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-26T01:12:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 12, 13), 2.06, 87.15, 0.0, 13.87, 12.22, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:12:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:12:13
2025-12-26T01:12:24.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:12:24.654 [DEBUG] [Thread-21793] [transport.py] [_log()] starting thread (client mode): 0xb9591780
2025-12-26T01:12:24.654 [DEBUG] [Thread-21793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:12:24.666 [DEBUG] [Thread-21793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:12:24.666 [INFO] [Thread-21793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:12:24.668 [DEBUG] [Thread-21793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] client lang: <none>
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] server lang: <none>
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] kex follows: False
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] Compression: none
2025-12-26T01:12:24.669 [DEBUG] [Thread-21793] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:12:24.686 [DEBUG] [Thread-21793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:12:24.686 [DEBUG] [Thread-21793] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:12:24.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:12:24.687 [DEBUG] [Thread-21793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:12:24.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:12:24.689 [DEBUG] [Thread-21793] [transport.py] [_log()] userauth is OK
2025-12-26T01:12:24.689 [DEBUG] [Thread-21793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:12:24.689 [DEBUG] [Thread-21793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:12:24.689 [DEBUG] [Thread-21793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:12:24.689 [DEBUG] [Thread-21793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:12:24.707 [INFO] [Thread-21793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:12:24.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:12:25.308 [DEBUG] [Thread-21793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:12:25.309 [DEBUG] [Thread-21793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:12:25.309 [DEBUG] [Thread-21793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:12:25.350 [DEBUG] [Thread-21793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:12:25.350 [DEBUG] [Thread-21793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:12:25.353 [DEBUG] [Thread-21793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:12:25.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:12:25.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:12:25.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:12:25.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:12:25.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:12:25.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:12:25.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:12:25.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:12:25.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:12:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.966727 -999.00  +12.30   7.19     87  +10.30 1 1 1 2 1     0    0 1.77 -9.47 ZNESW 9.4 7.2 232.4 14.5 12.9 -22.9 12.8 -22.4 12.7 -20.9 12.9 -21.8
2025-12-26T01:12:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:12:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:12:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.966727
2025-12-26T01:12:25.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:12:25.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:12:25.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:12:25.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:12:25.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:12:25.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:12:13', tmtdew=2.06, humidity=87.15, cloud=0.0, wind=13.87, temperature=12.22, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:12:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:09:00')
2025-12-26T01:12:25.379 [DEBUG] [Thread-21793] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:12:25.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-26T01:12:32.410 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:12:32.411 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:12:37.927 [DEBUG] [Thread-21796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:12:42.135 [DEBUG] [Thread-21797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:12:52.987 [DEBUG] [Thread-21798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:08.023 [DEBUG] [Thread-21799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:23.054 [DEBUG] [Thread-21800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:32.611 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:32.613 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:38.088 [DEBUG] [Thread-21801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:42.213 [DEBUG] [Thread-21802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:13:53.119 [DEBUG] [Thread-21803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:08.153 [DEBUG] [Thread-21804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:23.182 [DEBUG] [Thread-21805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:32.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:32.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:38.165 [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-26T01:14:38.219 [DEBUG] [Thread-21806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:42.295 [DEBUG] [Thread-21807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:14:53.256 [DEBUG] [Thread-21808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:15:08.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:15:08.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:15:08.289 [DEBUG] [Thread-21809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 14, 53), 2.04, 87.25, 0.0, 16.9, 12.35, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:15:08.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:14:53
2025-12-26T01:15:09.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:15:09.238 [DEBUG] [Thread-21810] [transport.py] [_log()] starting thread (client mode): 0xb9590370
2025-12-26T01:15:09.238 [DEBUG] [Thread-21810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:15:09.258 [DEBUG] [Thread-21810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:15:09.258 [INFO] [Thread-21810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] client lang: <none>
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] server lang: <none>
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] kex follows: False
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] Compression: none
2025-12-26T01:15:09.259 [DEBUG] [Thread-21810] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:15:09.266 [DEBUG] [Thread-21810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:15:09.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:15:09.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] userauth is OK
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:15:09.267 [DEBUG] [Thread-21810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:15:09.277 [INFO] [Thread-21810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:15:09.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:15:09.994 [DEBUG] [Thread-21810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:15:09.994 [DEBUG] [Thread-21810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:15:09.994 [DEBUG] [Thread-21810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:15:10.034 [DEBUG] [Thread-21810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:15:10.034 [DEBUG] [Thread-21810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:15:10.036 [DEBUG] [Thread-21810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:15:10.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:15:10.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:15:10.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:15:10.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:15:10.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:15:10.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:15:10.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:15:10.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:15:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:15:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.968116 -999.00  +12.40   8.98     87  +10.40 1 1 1 2 1     0    0 1.79 -8.73 ZNESW 15.1 9.0 207.0 16.7 12.9 -23.0 12.8 -22.5 12.7 -20.8 12.9 -21.9
2025-12-26T01:15:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:15:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:15:10.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.968116
2025-12-26T01:15:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:15:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:15:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:15:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:15:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:15:10.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:14:53', tmtdew=2.04, humidity=87.25, cloud=0.0, wind=16.9, temperature=12.35, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:14:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:11:00')
2025-12-26T01:15:10.051 [DEBUG] [Thread-21810] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:15:10.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:15:10.136 [DEBUG] [Thread-21813] [transport.py] [_log()] starting thread (client mode): 0xb95f2830
2025-12-26T01:15:10.136 [DEBUG] [Thread-21813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:15:10.151 [DEBUG] [Thread-21813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:15:10.151 [INFO] [Thread-21813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] client lang: <none>
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] server lang: <none>
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] kex follows: False
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:15:10.158 [DEBUG] [Thread-21813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:15:10.159 [DEBUG] [Thread-21813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:15:10.159 [DEBUG] [Thread-21813] [transport.py] [_log()] Compression: none
2025-12-26T01:15:10.159 [DEBUG] [Thread-21813] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:15:10.214 [DEBUG] [Thread-21813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:15:10.214 [DEBUG] [Thread-21813] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:15:10.215 [DEBUG] [Thread-21813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:15:10.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:15:10.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:15:10.276 [DEBUG] [Thread-21813] [transport.py] [_log()] userauth is OK
2025-12-26T01:15:10.276 [DEBUG] [Thread-21813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:15:10.276 [DEBUG] [Thread-21813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:15:10.276 [DEBUG] [Thread-21813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:15:10.276 [DEBUG] [Thread-21813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:15:10.291 [INFO] [Thread-21813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:15:10.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-26T01:15:10.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:15:11.145 [DEBUG] [Thread-21813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:15:11.145 [DEBUG] [Thread-21813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:15:11.193 [DEBUG] [Thread-21813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:15:11.193 [DEBUG] [Thread-21813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:15:11.202 [DEBUG] [Thread-21813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:15:11.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:15:11.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-26T01:15:11.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-26T01:15:11.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:15:11.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:15:11.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:15:11.233 [DEBUG] [Thread-21813] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:15:12.699 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:15.895 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:20.977 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:23.321 [DEBUG] [Thread-21815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:26.402 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:33.015 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:33.016 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:38.377 [DEBUG] [Thread-21816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:41.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:15:41.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:15:41.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-26T01:15:41.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 15, 25), 2.07, 87.1, 0.0, 14.96, 12.4, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:15:41.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:15:25
2025-12-26T01:15:42.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:15:42.244 [DEBUG] [Thread-21817] [transport.py] [_log()] starting thread (client mode): 0xb95f0190
2025-12-26T01:15:42.244 [DEBUG] [Thread-21817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:15:42.263 [DEBUG] [Thread-21817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:15:42.264 [INFO] [Thread-21817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] client lang: <none>
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] server lang: <none>
2025-12-26T01:15:42.267 [DEBUG] [Thread-21817] [transport.py] [_log()] kex follows: False
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] Compression: none
2025-12-26T01:15:42.268 [DEBUG] [Thread-21817] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:15:42.277 [DEBUG] [Thread-21817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:15:42.278 [DEBUG] [Thread-21817] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:15:42.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:15:42.279 [DEBUG] [Thread-21817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:15:42.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:15:42.281 [DEBUG] [Thread-21817] [transport.py] [_log()] userauth is OK
2025-12-26T01:15:42.281 [DEBUG] [Thread-21817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:15:42.281 [DEBUG] [Thread-21817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:15:42.281 [DEBUG] [Thread-21817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:15:42.281 [DEBUG] [Thread-21817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:15:42.316 [INFO] [Thread-21817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:15:42.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:15:42.358 [DEBUG] [Thread-21819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:42.959 [DEBUG] [Thread-21817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:15:42.960 [DEBUG] [Thread-21817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:15:42.960 [DEBUG] [Thread-21817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:15:43.001 [DEBUG] [Thread-21817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:15:43.001 [DEBUG] [Thread-21817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:15:43.005 [DEBUG] [Thread-21817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:15:43.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:15:43.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:15:43.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:15:43.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:15:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:15:43.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:15:43.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:15:43.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:15:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:15:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.968810 -999.00  +12.50   8.18     87  +10.40 1 1 1 2 1     0    0 1.79 -8.57 ZNESW 8.3 8.2 179.4 15.1 13.0 -22.9 12.9 -22.5 12.7 -20.6 12.9 -21.9
2025-12-26T01:15:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:15:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:15:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.968810
2025-12-26T01:15:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:15:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:15:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:15:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:15:43.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:15:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:15:25', tmtdew=2.07, humidity=87.1, cloud=0.0, wind=14.96, temperature=12.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:15:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:11:00')
2025-12-26T01:15:43.031 [DEBUG] [Thread-21817] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:15:43.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:15:43.124 [DEBUG] [Thread-21821] [transport.py] [_log()] starting thread (client mode): 0xb9593730
2025-12-26T01:15:43.125 [DEBUG] [Thread-21821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:15:43.138 [DEBUG] [Thread-21821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:15:43.139 [INFO] [Thread-21821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:15:43.146 [DEBUG] [Thread-21821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] client lang: <none>
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] server lang: <none>
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] kex follows: False
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] Compression: none
2025-12-26T01:15:43.147 [DEBUG] [Thread-21821] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:15:43.204 [DEBUG] [Thread-21821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:15:43.205 [DEBUG] [Thread-21821] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:15:43.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:15:43.206 [DEBUG] [Thread-21821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:15:43.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:15:43.260 [DEBUG] [Thread-21821] [transport.py] [_log()] userauth is OK
2025-12-26T01:15:43.261 [DEBUG] [Thread-21821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:15:43.261 [DEBUG] [Thread-21821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:15:43.261 [DEBUG] [Thread-21821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:15:43.261 [DEBUG] [Thread-21821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:15:43.279 [INFO] [Thread-21821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:15:43.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:15:43.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:15:44.086 [DEBUG] [Thread-21821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:15:44.086 [DEBUG] [Thread-21821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:15:44.134 [DEBUG] [Thread-21821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:15:44.134 [DEBUG] [Thread-21821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:15:44.144 [DEBUG] [Thread-21821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:15:44.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:15:44.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-26T01:15:44.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-26T01:15:44.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:15:44.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:15:44.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:15:44.181 [DEBUG] [Thread-21821] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:15:46.029 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:50.421 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:15:53.407 [DEBUG] [Thread-21823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:08.461 [DEBUG] [Thread-21824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:09.837 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:14.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:16:14.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:16:14.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-26T01:16:14.240 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 15, 57), 2.14, 86.95, 0.0, 15.49, 12.43, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:16:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:15:57
2025-12-26T01:16:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:16:15.144 [DEBUG] [Thread-21825] [transport.py] [_log()] starting thread (client mode): 0xb95933a0
2025-12-26T01:16:15.144 [DEBUG] [Thread-21825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:16:15.164 [DEBUG] [Thread-21825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:16:15.165 [INFO] [Thread-21825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:16:15.166 [DEBUG] [Thread-21825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:16:15.166 [DEBUG] [Thread-21825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:16:15.166 [DEBUG] [Thread-21825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:16:15.166 [DEBUG] [Thread-21825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:15.166 [DEBUG] [Thread-21825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:15.166 [DEBUG] [Thread-21825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] client lang: <none>
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] server lang: <none>
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] kex follows: False
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] Compression: none
2025-12-26T01:16:15.167 [DEBUG] [Thread-21825] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:16:15.176 [DEBUG] [Thread-21825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:16:15.177 [DEBUG] [Thread-21825] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:16:15.177 [DEBUG] [Thread-21825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:16:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:16:15.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:16:15.179 [DEBUG] [Thread-21825] [transport.py] [_log()] userauth is OK
2025-12-26T01:16:15.179 [DEBUG] [Thread-21825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:16:15.180 [DEBUG] [Thread-21825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:16:15.180 [DEBUG] [Thread-21825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:16:15.180 [DEBUG] [Thread-21825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:16:15.203 [INFO] [Thread-21825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:16:15.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:16:15.867 [DEBUG] [Thread-21825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:16:15.867 [DEBUG] [Thread-21825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:16:15.868 [DEBUG] [Thread-21825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:16:15.908 [DEBUG] [Thread-21825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:16:15.908 [DEBUG] [Thread-21825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:16:15.911 [DEBUG] [Thread-21825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:16:15.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:16:15.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:16:15.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:16:15.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:16:15.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:16:15.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:16:15.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:16:15.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:16:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:16:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.969158 -999.00  +12.50  10.47     86  +10.40 1 1 1 2 1     0    0 1.79 -8.32 ZNESW 14.3 10.5 207.8 14.6 13.0 -22.9 12.9 -22.6 12.7 -20.8 12.9 -21.8
2025-12-26T01:16:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:16:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:16:15.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.969158
2025-12-26T01:16:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:16:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:16:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:16:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:16:15.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:16:15.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:15:57', tmtdew=2.14, humidity=86.95, cloud=0.0, wind=15.49, temperature=12.43, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:15:35.251', atlas_cloud=1, atlas_rain=1, zp_data=[0.8927499999999995, 0.27025000000000077, 0.5072500000000009, 0.32849999999999824, 0.4245000000000001, 0.6057500000000005, 1.2129999999999992, 1.393250000000001, 0.7654999999999994, 0.18350000000000044, 0.2527499999999989, 0.2789999999999999, 0.23600000000000065, 0.41724999999999923, 0.6339999999999995, 0.7329999999999997, 0.36524999999999963, 0.2754999999999992, 0.1639999999999997, 0.35524999999999807, 0.3739999999999988, 0.43574999999999875, 0.48625000000000007, 0.5112500000000004, 0.31599999999999895, 0.3754999999999997, 0.35275000000000034, 0.3544999999999998, 0.4380000000000006, 0.38200000000000056, 0.4410000000000007, 0.4540000000000006, 0.47974999999999923], zp_timestamp='2025-12-25T23:11:00')
2025-12-26T01:16:15.937 [DEBUG] [Thread-21825] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:16:16.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-26T01:16:16.034 [DEBUG] [Thread-21828] [transport.py] [_log()] starting thread (client mode): 0xb95913c0
2025-12-26T01:16:16.034 [DEBUG] [Thread-21828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:16:16.052 [DEBUG] [Thread-21828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:16:16.052 [INFO] [Thread-21828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] client lang: <none>
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] server lang: <none>
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] kex follows: False
2025-12-26T01:16:16.064 [DEBUG] [Thread-21828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:16:16.065 [DEBUG] [Thread-21828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:16:16.065 [DEBUG] [Thread-21828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:16:16.065 [DEBUG] [Thread-21828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:16:16.065 [DEBUG] [Thread-21828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:16:16.065 [DEBUG] [Thread-21828] [transport.py] [_log()] Compression: none
2025-12-26T01:16:16.065 [DEBUG] [Thread-21828] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:16:16.121 [DEBUG] [Thread-21828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:16:16.121 [DEBUG] [Thread-21828] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:16:16.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:16:16.122 [DEBUG] [Thread-21828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:16:16.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:16:16.177 [DEBUG] [Thread-21828] [transport.py] [_log()] userauth is OK
2025-12-26T01:16:16.178 [DEBUG] [Thread-21828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:16:16.178 [DEBUG] [Thread-21828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:16:16.178 [DEBUG] [Thread-21828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:16:16.178 [DEBUG] [Thread-21828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:16:16.197 [INFO] [Thread-21828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:16:16.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-26T01:16:16.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:16:17.010 [DEBUG] [Thread-21828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:16:17.010 [DEBUG] [Thread-21828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:16:17.057 [DEBUG] [Thread-21828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:16:17.058 [DEBUG] [Thread-21828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:16:17.067 [DEBUG] [Thread-21828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:16:17.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:16: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')
2025-12-26T01:16:17.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-26T01:16:17.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:16:17.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:16:17.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:16:17.102 [DEBUG] [Thread-21828] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:16:21.223 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:23.497 [DEBUG] [Thread-21830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:25.632 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:33.215 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:33.216 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:38.548 [DEBUG] [Thread-21831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:42.432 [DEBUG] [Thread-21832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:16:47.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:16:47.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:16:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:16:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 16, 29), 2.17, 86.82, 0.0, 15.21, 12.42, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:16:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:16:29
2025-12-26T01:16:47.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:16:48.108 [DEBUG] [Thread-21833] [transport.py] [_log()] starting thread (client mode): 0xb95f2fe0
2025-12-26T01:16:48.108 [DEBUG] [Thread-21833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:16:48.129 [DEBUG] [Thread-21833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:16:48.129 [INFO] [Thread-21833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:16:48.132 [DEBUG] [Thread-21833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] client lang: <none>
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] server lang: <none>
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] kex follows: False
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] Compression: none
2025-12-26T01:16:48.133 [DEBUG] [Thread-21833] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:16:48.150 [DEBUG] [Thread-21833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:16:48.151 [DEBUG] [Thread-21833] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:16:48.152 [DEBUG] [Thread-21833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:16:48.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:16:48.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:16:48.153 [DEBUG] [Thread-21833] [transport.py] [_log()] userauth is OK
2025-12-26T01:16:48.154 [DEBUG] [Thread-21833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:16:48.154 [DEBUG] [Thread-21833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:16:48.154 [DEBUG] [Thread-21833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:16:48.154 [DEBUG] [Thread-21833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:16:48.176 [INFO] [Thread-21833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:16:48.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:16:48.795 [DEBUG] [Thread-21833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:16:48.795 [DEBUG] [Thread-21833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:16:48.795 [DEBUG] [Thread-21833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:16:48.837 [DEBUG] [Thread-21833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:16:48.837 [DEBUG] [Thread-21833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:16:48.840 [DEBUG] [Thread-21833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:16:48.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:16:48.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:16:48.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:16:48.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:16:48.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:16:48.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:16:48.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:16:48.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:16:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:16:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.969505 -999.00  +12.50   5.10     86  +10.40 1 1 1 2 1     0    0 1.77 -8.42 ZNESW 8.8 5.1 217.9 13.7 13.0 -22.9 12.9 -22.5 12.7 -20.9 13.0 -22.0
2025-12-26T01:16:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:16:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:16:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.969505
2025-12-26T01:16:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:16:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:16:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:16:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:16:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:16:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:16:29', tmtdew=2.17, humidity=86.82, cloud=0.0, wind=15.21, temperature=12.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:16:05.232', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:15:00')
2025-12-26T01:16:48.864 [DEBUG] [Thread-21833] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:16: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-26T01:16:48.961 [DEBUG] [Thread-21836] [transport.py] [_log()] starting thread (client mode): 0xb95f20e0
2025-12-26T01:16:48.961 [DEBUG] [Thread-21836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:16:48.976 [DEBUG] [Thread-21836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:16:48.976 [INFO] [Thread-21836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] client lang: <none>
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] server lang: <none>
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] kex follows: False
2025-12-26T01:16:48.984 [DEBUG] [Thread-21836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:16:48.985 [DEBUG] [Thread-21836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:16:48.985 [DEBUG] [Thread-21836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:16:48.985 [DEBUG] [Thread-21836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:16:48.985 [DEBUG] [Thread-21836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:16:48.985 [DEBUG] [Thread-21836] [transport.py] [_log()] Compression: none
2025-12-26T01:16:48.985 [DEBUG] [Thread-21836] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:16:49.040 [DEBUG] [Thread-21836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:16:49.040 [DEBUG] [Thread-21836] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:16:49.040 [DEBUG] [Thread-21836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:16:49.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:16:49.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:16:49.097 [DEBUG] [Thread-21836] [transport.py] [_log()] userauth is OK
2025-12-26T01:16:49.097 [DEBUG] [Thread-21836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:16:49.097 [DEBUG] [Thread-21836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:16:49.097 [DEBUG] [Thread-21836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:16:49.097 [DEBUG] [Thread-21836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:16:49.113 [INFO] [Thread-21836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:16:49.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:16:49.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:16:49.941 [DEBUG] [Thread-21836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:16:49.941 [DEBUG] [Thread-21836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:16:49.989 [DEBUG] [Thread-21836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:16:49.989 [DEBUG] [Thread-21836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:16:49.999 [DEBUG] [Thread-21836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:16:50.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:16:50.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-26T01:16:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:16:50.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:16:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:16:50.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:16:50.035 [DEBUG] [Thread-21836] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:16:53.584 [DEBUG] [Thread-21838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:08.632 [DEBUG] [Thread-21839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:17:20.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:17:20.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-26T01:17:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 17, 2), 2.18, 86.74, 0.0, 16.32, 12.38, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:17:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:17:02
2025-12-26T01:17:20.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:17:21.035 [DEBUG] [Thread-21840] [transport.py] [_log()] starting thread (client mode): 0xb95f2b00
2025-12-26T01:17:21.035 [DEBUG] [Thread-21840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:17:21.054 [DEBUG] [Thread-21840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:17:21.054 [INFO] [Thread-21840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:17:21.057 [DEBUG] [Thread-21840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] client lang: <none>
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] server lang: <none>
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] kex follows: False
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:17:21.058 [DEBUG] [Thread-21840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:17:21.059 [DEBUG] [Thread-21840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:17:21.059 [DEBUG] [Thread-21840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:17:21.059 [DEBUG] [Thread-21840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:17:21.059 [DEBUG] [Thread-21840] [transport.py] [_log()] Compression: none
2025-12-26T01:17:21.059 [DEBUG] [Thread-21840] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:17:21.076 [DEBUG] [Thread-21840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:17:21.077 [DEBUG] [Thread-21840] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:17:21.077 [DEBUG] [Thread-21840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:17:21.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:17:21.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:17:21.079 [DEBUG] [Thread-21840] [transport.py] [_log()] userauth is OK
2025-12-26T01:17:21.080 [DEBUG] [Thread-21840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:17:21.080 [DEBUG] [Thread-21840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:17:21.080 [DEBUG] [Thread-21840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:17:21.080 [DEBUG] [Thread-21840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:17:21.101 [INFO] [Thread-21840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:17:21.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:17:21.762 [DEBUG] [Thread-21840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:17:21.762 [DEBUG] [Thread-21840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:17:21.762 [DEBUG] [Thread-21840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:17:21.803 [DEBUG] [Thread-21840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:17:21.804 [DEBUG] [Thread-21840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:17:21.807 [DEBUG] [Thread-21840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:17:21.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:17:21.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:17:21.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:17:21.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:17:21.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:17:21.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:17:21.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:17:21.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:17:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:17:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.969852 -999.00  +12.50   3.69     86  +10.40 1 1 1 2 1     0    0 1.82 -7.49 ZNESW 6.0 3.7 256.7 10.6 13.0 -22.9 12.9 -22.4 12.7 -20.7 12.9 -21.8
2025-12-26T01:17:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:17:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:17:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.969852
2025-12-26T01:17:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:17:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:17:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:17:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:17:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:17:21.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:17:02', tmtdew=2.18, humidity=86.74, cloud=0.0, wind=16.32, temperature=12.38, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:16:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:15:00')
2025-12-26T01:17:21.835 [DEBUG] [Thread-21840] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:17:21.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-26T01:17:21.932 [DEBUG] [Thread-21843] [transport.py] [_log()] starting thread (client mode): 0xb95f0ca0
2025-12-26T01:17:21.932 [DEBUG] [Thread-21843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:17:21.945 [DEBUG] [Thread-21843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:17:21.945 [INFO] [Thread-21843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] client lang: <none>
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] server lang: <none>
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] kex follows: False
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] Compression: none
2025-12-26T01:17:21.952 [DEBUG] [Thread-21843] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:17:22.008 [DEBUG] [Thread-21843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:17:22.009 [DEBUG] [Thread-21843] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:17:22.009 [DEBUG] [Thread-21843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:17:22.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:17:22.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:17:22.069 [DEBUG] [Thread-21843] [transport.py] [_log()] userauth is OK
2025-12-26T01:17:22.069 [DEBUG] [Thread-21843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:17:22.070 [DEBUG] [Thread-21843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:17:22.070 [DEBUG] [Thread-21843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:17:22.070 [DEBUG] [Thread-21843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:17:22.083 [INFO] [Thread-21843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:17:22.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-26T01:17:22.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:17:22.953 [DEBUG] [Thread-21843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:17:22.953 [DEBUG] [Thread-21843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:17:23.001 [DEBUG] [Thread-21843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:17:23.001 [DEBUG] [Thread-21843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:17:23.011 [DEBUG] [Thread-21843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:17:23.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:17:23.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-26T01:17:23.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-26T01:17:23.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:17:23.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:17:23.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:17:23.047 [DEBUG] [Thread-21843] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:17:23.663 [DEBUG] [Thread-21845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:25.429 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:28.498 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:33.418 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:33.419 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:38.729 [DEBUG] [Thread-21846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:42.507 [DEBUG] [Thread-21847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:53.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:17:53.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:17:53.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:17:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 17, 34), 2.23, 86.24, 0.0, 15.62, 12.45, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:17:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:17:34
2025-12-26T01:17:53.764 [DEBUG] [Thread-21848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:17:53.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:17:54.028 [DEBUG] [Thread-21849] [transport.py] [_log()] starting thread (client mode): 0xb95f1ae0
2025-12-26T01:17:54.029 [DEBUG] [Thread-21849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:17:54.048 [DEBUG] [Thread-21849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:17:54.049 [INFO] [Thread-21849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:17:54.052 [DEBUG] [Thread-21849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:17:54.052 [DEBUG] [Thread-21849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:17:54.052 [DEBUG] [Thread-21849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:17:54.052 [DEBUG] [Thread-21849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:54.052 [DEBUG] [Thread-21849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:54.052 [DEBUG] [Thread-21849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] client lang: <none>
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] server lang: <none>
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] kex follows: False
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:17:54.053 [DEBUG] [Thread-21849] [transport.py] [_log()] Compression: none
2025-12-26T01:17:54.054 [DEBUG] [Thread-21849] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:17:54.071 [DEBUG] [Thread-21849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:17:54.072 [DEBUG] [Thread-21849] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:17:54.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:17:54.073 [DEBUG] [Thread-21849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:17:54.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:17:54.075 [DEBUG] [Thread-21849] [transport.py] [_log()] userauth is OK
2025-12-26T01:17:54.075 [DEBUG] [Thread-21849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:17:54.075 [DEBUG] [Thread-21849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:17:54.075 [DEBUG] [Thread-21849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:17:54.075 [DEBUG] [Thread-21849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:17:54.108 [INFO] [Thread-21849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:17:54.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:17:54.711 [DEBUG] [Thread-21849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:17:54.711 [DEBUG] [Thread-21849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:17:54.712 [DEBUG] [Thread-21849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:17:54.752 [DEBUG] [Thread-21849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:17:54.752 [DEBUG] [Thread-21849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:17:54.756 [DEBUG] [Thread-21849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:17:54.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:17:54.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:17:54.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:17:54.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:17:54.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:17:54.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:17:54.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:17:54.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:17:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:17:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.970199 -999.00  +12.60   7.82     86  +10.40 1 1 1 2 1     0    0 1.84 -7.16 ZNESW 7.5 7.8 202.6 10.8 13.0 -23.0 12.9 -22.5 12.7 -20.5 13.0 -21.8
2025-12-26T01:17:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:17:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:17:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.970199
2025-12-26T01:17:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:17:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:17:54.784 [DEBUG] [Thread-21849] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:17:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:17:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:17:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:17:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:17:34', tmtdew=2.23, humidity=86.24, cloud=0.0, wind=15.62, temperature=12.45, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:17:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:15:00')
2025-12-26T01:17:54.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:17:54.894 [DEBUG] [Thread-21852] [transport.py] [_log()] starting thread (client mode): 0xb6b28760
2025-12-26T01:17:54.894 [DEBUG] [Thread-21852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:17:54.911 [DEBUG] [Thread-21852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:17:54.911 [INFO] [Thread-21852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:17:54.923 [DEBUG] [Thread-21852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:17:54.923 [DEBUG] [Thread-21852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:17:54.923 [DEBUG] [Thread-21852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] client lang: <none>
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] server lang: <none>
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] kex follows: False
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:17:54.924 [DEBUG] [Thread-21852] [transport.py] [_log()] Compression: none
2025-12-26T01:17:54.925 [DEBUG] [Thread-21852] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:17:54.978 [DEBUG] [Thread-21852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:17:54.978 [DEBUG] [Thread-21852] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:17:54.979 [DEBUG] [Thread-21852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:17:54.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:17:54.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:17:55.034 [DEBUG] [Thread-21852] [transport.py] [_log()] userauth is OK
2025-12-26T01:17:55.035 [DEBUG] [Thread-21852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:17:55.035 [DEBUG] [Thread-21852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:17:55.035 [DEBUG] [Thread-21852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:17:55.035 [DEBUG] [Thread-21852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:17:55.053 [INFO] [Thread-21852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:17:55.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-26T01:17:55.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:17:55.882 [DEBUG] [Thread-21852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:17:55.883 [DEBUG] [Thread-21852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:17:55.930 [DEBUG] [Thread-21852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:17:55.930 [DEBUG] [Thread-21852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:17:55.939 [DEBUG] [Thread-21852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:17:55.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:17:55.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:17:55.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:17:55.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:17:55.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:17:55.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:17:55.978 [DEBUG] [Thread-21852] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:18:08.798 [DEBUG] [Thread-21854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:18:23.861 [DEBUG] [Thread-21855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:18:25.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:18:25.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:18:26.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-26T01:18:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 18, 6), 2.25, 86.11, 0.0, 16.59, 12.48, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:18:26.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:18:06
2025-12-26T01:18:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:18:27.032 [DEBUG] [Thread-21856] [transport.py] [_log()] starting thread (client mode): 0xb95b1180
2025-12-26T01:18:27.032 [DEBUG] [Thread-21856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:18:27.052 [DEBUG] [Thread-21856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:18:27.052 [INFO] [Thread-21856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] client lang: <none>
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] server lang: <none>
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] kex follows: False
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] Compression: none
2025-12-26T01:18:27.055 [DEBUG] [Thread-21856] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:18:27.070 [DEBUG] [Thread-21856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:18:27.070 [DEBUG] [Thread-21856] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:18:27.070 [DEBUG] [Thread-21856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:18:27.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:18:27.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:18:27.071 [DEBUG] [Thread-21856] [transport.py] [_log()] userauth is OK
2025-12-26T01:18:27.071 [DEBUG] [Thread-21856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:18:27.071 [DEBUG] [Thread-21856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:18:27.071 [DEBUG] [Thread-21856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:18:27.071 [DEBUG] [Thread-21856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:18:27.089 [INFO] [Thread-21856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:18:27.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:18:27.728 [DEBUG] [Thread-21856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:18:27.728 [DEBUG] [Thread-21856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:18:27.728 [DEBUG] [Thread-21856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:18:27.769 [DEBUG] [Thread-21856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:18:27.769 [DEBUG] [Thread-21856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:18:27.771 [DEBUG] [Thread-21856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:18:27.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:18:27.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:18:27.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:18:27.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:18:27.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:18:27.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:18:27.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.970546 -999.00  +12.60  11.48     86  +10.40 1 1 1 2 1     0    0 1.86 -6.65 ZNESW 9.0 11.5 208.0 14.1 13.1 -22.9 12.9 -22.3 12.7 -20.6 13.0 -21.7
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.970546
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:18:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:18:06', tmtdew=2.25, humidity=86.11, cloud=0.0, wind=16.59, temperature=12.48, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:17:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:15:00')
2025-12-26T01:18:27.788 [DEBUG] [Thread-21856] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:18:27.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-26T01:18:33.672 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:18:33.674 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:18:38.890 [DEBUG] [Thread-21859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:18:42.583 [DEBUG] [Thread-21860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:18:53.929 [DEBUG] [Thread-21861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:08.962 [DEBUG] [Thread-21862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:23.998 [DEBUG] [Thread-21863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:33.876 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:33.877 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:39.040 [DEBUG] [Thread-21864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:42.647 [DEBUG] [Thread-21865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:19:54.071 [DEBUG] [Thread-21866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:09.109 [DEBUG] [Thread-21867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:24.139 [DEBUG] [Thread-21868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:34.082 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:34.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:39.179 [DEBUG] [Thread-21869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:42.709 [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-26T01:20:42.710 [DEBUG] [Thread-21870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:52.226 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:54.214 [DEBUG] [Thread-21871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:20:57.693 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:00.766 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:07.168 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:09.246 [DEBUG] [Thread-21872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:12.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:21:12.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:21:12.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:21:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 20, 46), 2.56, 84.29, 0.0, 16.11, 12.73, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:21:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:20:46
2025-12-26T01:21:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:21:13.721 [DEBUG] [Thread-21873] [transport.py] [_log()] starting thread (client mode): 0xb95b2620
2025-12-26T01:21:13.721 [DEBUG] [Thread-21873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:21:13.743 [DEBUG] [Thread-21873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:21:13.743 [INFO] [Thread-21873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] client lang: <none>
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] server lang: <none>
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] kex follows: False
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:21:13.746 [DEBUG] [Thread-21873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:21:13.747 [DEBUG] [Thread-21873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:21:13.747 [DEBUG] [Thread-21873] [transport.py] [_log()] Compression: none
2025-12-26T01:21:13.747 [DEBUG] [Thread-21873] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:21:13.765 [DEBUG] [Thread-21873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:21:13.765 [DEBUG] [Thread-21873] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:21:13.766 [DEBUG] [Thread-21873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:21:13.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:21:13.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:21:13.768 [DEBUG] [Thread-21873] [transport.py] [_log()] userauth is OK
2025-12-26T01:21:13.768 [DEBUG] [Thread-21873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:21:13.768 [DEBUG] [Thread-21873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:21:13.768 [DEBUG] [Thread-21873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:21:13.769 [DEBUG] [Thread-21873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:21:13.792 [INFO] [Thread-21873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:21:13.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:21:14.396 [DEBUG] [Thread-21873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:21:14.396 [DEBUG] [Thread-21873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:21:14.397 [DEBUG] [Thread-21873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:21:14.437 [DEBUG] [Thread-21873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:21:14.437 [DEBUG] [Thread-21873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:21:14.440 [DEBUG] [Thread-21873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:21:14.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:21:14.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:21:14.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:21:14.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:21:14.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:21:14.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:21:14.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:21:14.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:21:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:21:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.972630 -999.00  +12.90   7.23     85  +10.50 1 1 1 2 1     0    0 2.20 3.96 ZNESW 10.7 7.2 193.4 15.4 13.2 -23.0 13.0 -22.5 12.8 -20.7 13.1 -21.8
2025-12-26T01:21:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:21:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:21:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.972630
2025-12-26T01:21:14.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:21:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:21:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:21:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:21:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:21:14.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:20:46', tmtdew=2.56, humidity=84.29, cloud=0.0, wind=16.11, temperature=12.73, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:20:35.232', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:18:00')
2025-12-26T01:21:14.466 [DEBUG] [Thread-21873] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:21:14.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-26T01:21:14.560 [DEBUG] [Thread-21876] [transport.py] [_log()] starting thread (client mode): 0xb6b61060
2025-12-26T01:21:14.560 [DEBUG] [Thread-21876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:21:14.575 [DEBUG] [Thread-21876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:21:14.575 [INFO] [Thread-21876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:21:14.582 [DEBUG] [Thread-21876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:21:14.582 [DEBUG] [Thread-21876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] client lang: <none>
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] server lang: <none>
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] kex follows: False
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:21:14.583 [DEBUG] [Thread-21876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:21:14.584 [DEBUG] [Thread-21876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:21:14.584 [DEBUG] [Thread-21876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:21:14.584 [DEBUG] [Thread-21876] [transport.py] [_log()] Compression: none
2025-12-26T01:21:14.584 [DEBUG] [Thread-21876] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:21:14.643 [DEBUG] [Thread-21876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:21:14.643 [DEBUG] [Thread-21876] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:21:14.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:21:14.644 [DEBUG] [Thread-21876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:21:14.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:21:14.701 [DEBUG] [Thread-21876] [transport.py] [_log()] userauth is OK
2025-12-26T01:21:14.701 [DEBUG] [Thread-21876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:21:14.701 [DEBUG] [Thread-21876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:21:14.701 [DEBUG] [Thread-21876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:21:14.702 [DEBUG] [Thread-21876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:21:14.721 [INFO] [Thread-21876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:21:14.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-26T01:21:14.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:21:15.520 [DEBUG] [Thread-21876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:21:15.520 [DEBUG] [Thread-21876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:21:15.568 [DEBUG] [Thread-21876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:21:15.568 [DEBUG] [Thread-21876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:21:15.577 [DEBUG] [Thread-21876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:21:15.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:21:15.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:21:15.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:21:15.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:21:15.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:21:15.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:21:15.610 [DEBUG] [Thread-21876] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:21:24.279 [DEBUG] [Thread-21878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:34.286 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:34.288 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:39.330 [DEBUG] [Thread-21879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:42.767 [DEBUG] [Thread-21880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:21:45.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:21:45.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:21:45.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-26T01:21:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 21, 18), 2.57, 84.21, 0.0, 15.79, 12.75, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:21:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:21:18
2025-12-26T01:21:46.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:21:46.624 [DEBUG] [Thread-21881] [transport.py] [_log()] starting thread (client mode): 0xb9590b80
2025-12-26T01:21:46.624 [DEBUG] [Thread-21881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:21:46.645 [DEBUG] [Thread-21881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:21:46.645 [INFO] [Thread-21881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] client lang: <none>
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] server lang: <none>
2025-12-26T01:21:46.649 [DEBUG] [Thread-21881] [transport.py] [_log()] kex follows: False
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] Compression: none
2025-12-26T01:21:46.650 [DEBUG] [Thread-21881] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:21:46.667 [DEBUG] [Thread-21881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:21:46.668 [DEBUG] [Thread-21881] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:21:46.668 [DEBUG] [Thread-21881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:21:46.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:21:46.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:21:46.670 [DEBUG] [Thread-21881] [transport.py] [_log()] userauth is OK
2025-12-26T01:21:46.671 [DEBUG] [Thread-21881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:21:46.671 [DEBUG] [Thread-21881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:21:46.671 [DEBUG] [Thread-21881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:21:46.671 [DEBUG] [Thread-21881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:21:46.696 [INFO] [Thread-21881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:21:46.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:21:47.370 [DEBUG] [Thread-21881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:21:47.371 [DEBUG] [Thread-21881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:21:47.371 [DEBUG] [Thread-21881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:21:47.412 [DEBUG] [Thread-21881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:21:47.412 [DEBUG] [Thread-21881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:21:47.416 [DEBUG] [Thread-21881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:21:47.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:21:47.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:21:47.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:21:47.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:21:47.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:21:47.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:21:47.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:21:47.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:21:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:21:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.972977 -999.00  +12.90  12.82     85  +10.40 1 1 1 2 1     0    0 2.28 6.46 ZNESW 13.1 12.8 196.4 17.3 13.2 -23.1 13.1 -22.5 12.8 -20.6 13.1 -21.9
2025-12-26T01:21:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:21:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:21:47.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.972977
2025-12-26T01:21:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:21:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:21:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:21:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:21:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:21:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:21:18', tmtdew=2.57, humidity=84.21, cloud=0.0, wind=15.79, temperature=12.75, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:21:05.213', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:18:00')
2025-12-26T01:21:47.440 [DEBUG] [Thread-21881] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:21:47.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-26T01:21:47.535 [DEBUG] [Thread-21884] [transport.py] [_log()] starting thread (client mode): 0xb9591ed0
2025-12-26T01:21:47.535 [DEBUG] [Thread-21884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:21:47.554 [DEBUG] [Thread-21884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:21:47.555 [INFO] [Thread-21884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] client lang: <none>
2025-12-26T01:21:47.566 [DEBUG] [Thread-21884] [transport.py] [_log()] server lang: <none>
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] kex follows: False
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] Compression: none
2025-12-26T01:21:47.567 [DEBUG] [Thread-21884] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:21:47.625 [DEBUG] [Thread-21884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:21:47.626 [DEBUG] [Thread-21884] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:21:47.626 [DEBUG] [Thread-21884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:21:47.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:21:47.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:21:47.681 [DEBUG] [Thread-21884] [transport.py] [_log()] userauth is OK
2025-12-26T01:21:47.681 [DEBUG] [Thread-21884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:21:47.681 [DEBUG] [Thread-21884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:21:47.681 [DEBUG] [Thread-21884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:21:47.681 [DEBUG] [Thread-21884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:21:47.700 [INFO] [Thread-21884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:21:47.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:21:47.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:21:48.560 [DEBUG] [Thread-21884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:21:48.560 [DEBUG] [Thread-21884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:21:48.608 [DEBUG] [Thread-21884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:21:48.608 [DEBUG] [Thread-21884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:21:48.617 [DEBUG] [Thread-21884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:21:48.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:21:48.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-26T01:21:48.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-26T01:21:48.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:21:48.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:21:48.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:21:48.653 [DEBUG] [Thread-21884] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:21:54.358 [DEBUG] [Thread-21886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:09.410 [DEBUG] [Thread-21887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:18.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:22:18.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:22:18.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-26T01:22:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 21, 50), 2.65, 84.06, 0.0, 17.52, 12.77, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:22:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:21:50
2025-12-26T01:22:19.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:22:19.713 [DEBUG] [Thread-21888] [transport.py] [_log()] starting thread (client mode): 0xb9591f30
2025-12-26T01:22:19.713 [DEBUG] [Thread-21888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:22:19.734 [DEBUG] [Thread-21888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:22:19.734 [INFO] [Thread-21888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] client lang: <none>
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] server lang: <none>
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] kex follows: False
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] Compression: none
2025-12-26T01:22:19.737 [DEBUG] [Thread-21888] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:22:19.752 [DEBUG] [Thread-21888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:22:19.752 [DEBUG] [Thread-21888] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:22:19.752 [DEBUG] [Thread-21888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:22:19.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:22:19.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:22:19.753 [DEBUG] [Thread-21888] [transport.py] [_log()] userauth is OK
2025-12-26T01:22:19.753 [DEBUG] [Thread-21888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:22:19.753 [DEBUG] [Thread-21888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:22:19.753 [DEBUG] [Thread-21888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:22:19.753 [DEBUG] [Thread-21888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:22:19.762 [INFO] [Thread-21888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:22:19.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:22:20.389 [DEBUG] [Thread-21888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:22:20.389 [DEBUG] [Thread-21888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:22:20.389 [DEBUG] [Thread-21888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:22:20.430 [DEBUG] [Thread-21888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:22:20.430 [DEBUG] [Thread-21888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:22:20.432 [DEBUG] [Thread-21888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:22:20.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:22:20.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:22:20.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:22:20.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:22:20.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:22:20.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:22:20.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.973671 -999.00  +12.90  10.26     85  +10.50 1 1 1 2 1     0    0 2.42 10.48 ZNESW 9.7 10.3 195.2 14.3 13.2 -23.1 13.1 -22.8 12.8 -20.8 13.1 -22.0
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.973671
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:22:20.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:22:20.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:21:50', tmtdew=2.65, humidity=84.06, cloud=0.0, wind=17.52, temperature=12.77, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:22:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[1.01375, 0.24425000000000097, 0.5322500000000012, 0.28200000000000003, 0.3260000000000005, 0.7877500000000008, 1.7199999999999998, 1.7412500000000009, 0.894499999999999, 0.1590000000000007, 0.26624999999999943, 0.28699999999999903, 0.2729999999999997, 0.3592499999999994, 0.7064999999999992, 0.9139999999999997, 0.3282500000000006, 0.27699999999999925, 0.15899999999999892, 0.3012499999999996, 0.32649999999999935, 0.46674999999999844, 0.5132500000000011, 0.5637499999999998, 0.28749999999999964, 0.33250000000000135, 0.35975, 0.3075000000000001, 0.43900000000000006, 0.3850000000000007, 0.46500000000000075, 0.5160000000000009, 0.40674999999999883], zp_timestamp='2025-12-25T23:18:00')
2025-12-26T01:22:20.459 [DEBUG] [Thread-21888] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:22:20.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-26T01:22:20.543 [DEBUG] [Thread-21891] [transport.py] [_log()] starting thread (client mode): 0xb95d6f80
2025-12-26T01:22:20.543 [DEBUG] [Thread-21891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:22:20.562 [DEBUG] [Thread-21891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:22:20.562 [INFO] [Thread-21891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:22:20.569 [DEBUG] [Thread-21891] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:22:20.569 [DEBUG] [Thread-21891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:22:20.569 [DEBUG] [Thread-21891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:22:20.569 [DEBUG] [Thread-21891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:20.569 [DEBUG] [Thread-21891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] client lang: <none>
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] server lang: <none>
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] kex follows: False
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] Compression: none
2025-12-26T01:22:20.570 [DEBUG] [Thread-21891] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:22:20.628 [DEBUG] [Thread-21891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:22:20.628 [DEBUG] [Thread-21891] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:22:20.628 [DEBUG] [Thread-21891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:22:20.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:22:20.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:22:20.685 [DEBUG] [Thread-21891] [transport.py] [_log()] userauth is OK
2025-12-26T01:22:20.685 [DEBUG] [Thread-21891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:22:20.686 [DEBUG] [Thread-21891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:22:20.686 [DEBUG] [Thread-21891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:22:20.686 [DEBUG] [Thread-21891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:22:20.700 [INFO] [Thread-21891] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:22:20.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:22:20.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:22:21.549 [DEBUG] [Thread-21891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:22:21.549 [DEBUG] [Thread-21891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:22:21.598 [DEBUG] [Thread-21891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:22:21.598 [DEBUG] [Thread-21891] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:22:21.607 [DEBUG] [Thread-21891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:22:21.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:22:21.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:22:21.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:22:21.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:22:21.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:22:21.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:22:21.645 [DEBUG] [Thread-21891] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:22:24.440 [DEBUG] [Thread-21893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:34.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:34.507 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:39.492 [DEBUG] [Thread-21894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:42.833 [DEBUG] [Thread-21895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:22:51.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:22:51.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:22:52.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 22, 22), 2.66, 84.03, 0.0, 17.45, 12.8, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:22:52.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:22:22
2025-12-26T01:22:52.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:22:52.661 [DEBUG] [Thread-21896] [transport.py] [_log()] starting thread (client mode): 0xb95b20b0
2025-12-26T01:22:52.661 [DEBUG] [Thread-21896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:22:52.681 [DEBUG] [Thread-21896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:22:52.681 [INFO] [Thread-21896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] client lang: <none>
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] server lang: <none>
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] kex follows: False
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:22:52.684 [DEBUG] [Thread-21896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:22:52.685 [DEBUG] [Thread-21896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:22:52.685 [DEBUG] [Thread-21896] [transport.py] [_log()] Compression: none
2025-12-26T01:22:52.685 [DEBUG] [Thread-21896] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:22:52.700 [DEBUG] [Thread-21896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:22:52.700 [DEBUG] [Thread-21896] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:22:52.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:22:52.701 [DEBUG] [Thread-21896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:22:52.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:22:52.704 [DEBUG] [Thread-21896] [transport.py] [_log()] userauth is OK
2025-12-26T01:22:52.704 [DEBUG] [Thread-21896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:22:52.704 [DEBUG] [Thread-21896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:22:52.704 [DEBUG] [Thread-21896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:22:52.704 [DEBUG] [Thread-21896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:22:52.729 [INFO] [Thread-21896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:22:52.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:22:53.384 [DEBUG] [Thread-21896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:22:53.384 [DEBUG] [Thread-21896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:22:53.384 [DEBUG] [Thread-21896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:22:53.425 [DEBUG] [Thread-21896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:22:53.425 [DEBUG] [Thread-21896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:22:53.429 [DEBUG] [Thread-21896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:22:53.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:22:53.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:22:53.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:22:53.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:22:53.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:22:53.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:22:53.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:22:53.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:22:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:22:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.974019 -999.00  +12.90  12.09     85  +10.50 1 1 1 2 1     0    0 2.44 11.76 ZNESW 11.2 12.1 182.2 15.5 13.2 -23.3 13.1 -22.7 12.8 -20.8 13.1 -22.1
2025-12-26T01:22:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:22:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:22:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.974019
2025-12-26T01:22:53.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:22:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:22:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:22:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:22:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:22:53.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:22:22', tmtdew=2.66, humidity=84.03, cloud=0.0, wind=17.45, temperature=12.8, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:22:35.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.3617500000000007, 0.1407500000000006, 0.38475000000000037, 0.18549999999999933, 0.1615000000000002, 0.3412500000000005, 1.3039999999999994, 1.7877500000000008, 0.34750000000000014, 0.13149999999999906, 0.2217500000000001, 0.21499999999999986, 0.22199999999999953, 0.26624999999999943, 0.4579999999999984, 0.669999999999999, 0.2192500000000006, 0.2494999999999994, 0.14899999999999913, 0.3152499999999989, 0.27399999999999913, 0.36524999999999963, 0.4067500000000006, 0.44374999999999964, 0.24099999999999966, 0.28200000000000003, 0.3332499999999996, 0.33750000000000036, 0.34299999999999997, 0.3750000000000009, 0.37100000000000133, 0.4430000000000014, 0.40174999999999894], zp_timestamp='2025-12-25T23:21:00')
2025-12-26T01:22:53.454 [DEBUG] [Thread-21896] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:22:53.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:22:53.548 [DEBUG] [Thread-21899] [transport.py] [_log()] starting thread (client mode): 0xb95b34c0
2025-12-26T01:22:53.548 [DEBUG] [Thread-21899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:22:53.562 [DEBUG] [Thread-21899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:22:53.562 [INFO] [Thread-21899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:22:53.569 [DEBUG] [Thread-21899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:22:53.569 [DEBUG] [Thread-21899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:22:53.569 [DEBUG] [Thread-21899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] client lang: <none>
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] server lang: <none>
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] kex follows: False
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] Compression: none
2025-12-26T01:22:53.570 [DEBUG] [Thread-21899] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:22:53.629 [DEBUG] [Thread-21899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:22:53.630 [DEBUG] [Thread-21899] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:22:53.630 [DEBUG] [Thread-21899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:22:53.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:22:53.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:22:53.686 [DEBUG] [Thread-21899] [transport.py] [_log()] userauth is OK
2025-12-26T01:22:53.686 [DEBUG] [Thread-21899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:22:53.686 [DEBUG] [Thread-21899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:22:53.687 [DEBUG] [Thread-21899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:22:53.687 [DEBUG] [Thread-21899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:22:53.706 [INFO] [Thread-21899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:22:53.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-26T01:22:53.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:22:54.526 [DEBUG] [Thread-21901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:22:54.530 [DEBUG] [Thread-21899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:22:54.530 [DEBUG] [Thread-21899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:22:54.579 [DEBUG] [Thread-21899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:22:54.579 [DEBUG] [Thread-21899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:22:54.588 [DEBUG] [Thread-21899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:22:54.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:22:54.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:22:54.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-26T01:22:54.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:22:54.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:22:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:22:54.624 [DEBUG] [Thread-21899] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:23:09.589 [DEBUG] [Thread-21902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:24.628 [DEBUG] [Thread-21903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:24.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:23:24.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:23:24.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-26T01:23:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 22, 54), 2.71, 83.49, 0.0, 19.34, 12.78, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:23:25.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:22:54
2025-12-26T01:23:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:23:25.635 [DEBUG] [Thread-21904] [transport.py] [_log()] starting thread (client mode): 0xb6b63fa0
2025-12-26T01:23:25.635 [DEBUG] [Thread-21904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:23:25.656 [DEBUG] [Thread-21904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:23:25.656 [INFO] [Thread-21904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] client lang: <none>
2025-12-26T01:23:25.659 [DEBUG] [Thread-21904] [transport.py] [_log()] server lang: <none>
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] kex follows: False
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] Compression: none
2025-12-26T01:23:25.660 [DEBUG] [Thread-21904] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:23:25.677 [DEBUG] [Thread-21904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:23:25.677 [DEBUG] [Thread-21904] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:23:25.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:23:25.678 [DEBUG] [Thread-21904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:23:25.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:23:25.720 [DEBUG] [Thread-21904] [transport.py] [_log()] userauth is OK
2025-12-26T01:23:25.720 [DEBUG] [Thread-21904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:23:25.721 [DEBUG] [Thread-21904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:23:25.721 [DEBUG] [Thread-21904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:23:25.721 [DEBUG] [Thread-21904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:23:25.757 [INFO] [Thread-21904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:23:25.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:23:26.387 [DEBUG] [Thread-21904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:23:26.387 [DEBUG] [Thread-21904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:23:26.388 [DEBUG] [Thread-21904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:23:26.428 [DEBUG] [Thread-21904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:23:26.428 [DEBUG] [Thread-21904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:23:26.432 [DEBUG] [Thread-21904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:23:26.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:23:26.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:23:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:23:26.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:23:26.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:23:26.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:23:26.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:23:26.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:23:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:23:26.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.974366 -999.00  +12.80  10.37     85  +10.40 1 1 1 2 1     0    0 2.48 12.83 ZNESW 10.4 10.4 191.6 17.8 13.2 -23.3 13.1 -22.7 12.9 -21.0 13.1 -22.3
2025-12-26T01:23:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:23:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:23:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.974366
2025-12-26T01:23:26.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:23:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:23:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:23:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:23:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:23:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:22:54', tmtdew=2.71, humidity=83.49, cloud=0.0, wind=19.34, temperature=12.78, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:23:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.3617500000000007, 0.1407500000000006, 0.38475000000000037, 0.18549999999999933, 0.1615000000000002, 0.3412500000000005, 1.3039999999999994, 1.7877500000000008, 0.34750000000000014, 0.13149999999999906, 0.2217500000000001, 0.21499999999999986, 0.22199999999999953, 0.26624999999999943, 0.4579999999999984, 0.669999999999999, 0.2192500000000006, 0.2494999999999994, 0.14899999999999913, 0.3152499999999989, 0.27399999999999913, 0.36524999999999963, 0.4067500000000006, 0.44374999999999964, 0.24099999999999966, 0.28200000000000003, 0.3332499999999996, 0.33750000000000036, 0.34299999999999997, 0.3750000000000009, 0.37100000000000133, 0.4430000000000014, 0.40174999999999894], zp_timestamp='2025-12-25T23:21:00')
2025-12-26T01:23:26.459 [DEBUG] [Thread-21904] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:23:26.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-26T01:23:26.554 [DEBUG] [Thread-21907] [transport.py] [_log()] starting thread (client mode): 0xb9591450
2025-12-26T01:23:26.554 [DEBUG] [Thread-21907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:23:26.568 [DEBUG] [Thread-21907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:23:26.569 [INFO] [Thread-21907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:23:26.576 [DEBUG] [Thread-21907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:23:26.576 [DEBUG] [Thread-21907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:23:26.576 [DEBUG] [Thread-21907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:23:26.576 [DEBUG] [Thread-21907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:26.576 [DEBUG] [Thread-21907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] client lang: <none>
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] server lang: <none>
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] kex follows: False
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] Compression: none
2025-12-26T01:23:26.577 [DEBUG] [Thread-21907] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:23:26.635 [DEBUG] [Thread-21907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:23:26.635 [DEBUG] [Thread-21907] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:23:26.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:23:26.636 [DEBUG] [Thread-21907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:23:26.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:23:26.694 [DEBUG] [Thread-21907] [transport.py] [_log()] userauth is OK
2025-12-26T01:23:26.695 [DEBUG] [Thread-21907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:23:26.695 [DEBUG] [Thread-21907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:23:26.695 [DEBUG] [Thread-21907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:23:26.695 [DEBUG] [Thread-21907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:23:26.714 [INFO] [Thread-21907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:23:26.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-26T01:23:26.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:23:27.526 [DEBUG] [Thread-21907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:23:27.526 [DEBUG] [Thread-21907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:23:27.574 [DEBUG] [Thread-21907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:23:27.574 [DEBUG] [Thread-21907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:23:27.582 [DEBUG] [Thread-21907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:23:27.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:23:27.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-26T01:23:27.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:23:27.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:23:27.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:23:27.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:23:27.614 [DEBUG] [Thread-21907] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:23:34.707 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:34.709 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:39.664 [DEBUG] [Thread-21909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:42.908 [DEBUG] [Thread-21910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:54.717 [DEBUG] [Thread-21911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:23:57.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:23:57.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:23:57.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-26T01:23:58.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 23, 26), 2.73, 83.38, 0.0, 18.99, 12.73, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:23:58.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:23:26
2025-12-26T01:23:58.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:23:58.619 [DEBUG] [Thread-21912] [transport.py] [_log()] starting thread (client mode): 0xb95b20b0
2025-12-26T01:23:58.619 [DEBUG] [Thread-21912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:23:58.638 [DEBUG] [Thread-21912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:23:58.638 [INFO] [Thread-21912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] client lang: <none>
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] server lang: <none>
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] kex follows: False
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] Compression: none
2025-12-26T01:23:58.639 [DEBUG] [Thread-21912] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:23:58.651 [DEBUG] [Thread-21912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:23:58.652 [DEBUG] [Thread-21912] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:23:58.652 [DEBUG] [Thread-21912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:23:58.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:23:58.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:23:58.654 [DEBUG] [Thread-21912] [transport.py] [_log()] userauth is OK
2025-12-26T01:23:58.654 [DEBUG] [Thread-21912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:23:58.654 [DEBUG] [Thread-21912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:23:58.654 [DEBUG] [Thread-21912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:23:58.654 [DEBUG] [Thread-21912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:23:58.685 [INFO] [Thread-21912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:23:58.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:23:59.302 [DEBUG] [Thread-21912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:23:59.302 [DEBUG] [Thread-21912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:23:59.302 [DEBUG] [Thread-21912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:23:59.342 [DEBUG] [Thread-21912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:23:59.343 [DEBUG] [Thread-21912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:23:59.345 [DEBUG] [Thread-21912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:23:59.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:23:59.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:23:59.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:23:59.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:23:59.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:23:59.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:23:59.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.974713 -999.00  +12.80  14.88     85  +10.40 1 1 1 2 1     0    0 2.61 16.03 ZNESW 14.9 14.9 194.6 17.3 13.2 -23.3 13.0 -22.8 12.8 -20.9 13.1 -22.1
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.974713
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:23:59.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:23:26', tmtdew=2.73, humidity=83.38, cloud=0.0, wind=18.99, temperature=12.73, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:23:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.3617500000000007, 0.1407500000000006, 0.38475000000000037, 0.18549999999999933, 0.1615000000000002, 0.3412500000000005, 1.3039999999999994, 1.7877500000000008, 0.34750000000000014, 0.13149999999999906, 0.2217500000000001, 0.21499999999999986, 0.22199999999999953, 0.26624999999999943, 0.4579999999999984, 0.669999999999999, 0.2192500000000006, 0.2494999999999994, 0.14899999999999913, 0.3152499999999989, 0.27399999999999913, 0.36524999999999963, 0.4067500000000006, 0.44374999999999964, 0.24099999999999966, 0.28200000000000003, 0.3332499999999996, 0.33750000000000036, 0.34299999999999997, 0.3750000000000009, 0.37100000000000133, 0.4430000000000014, 0.40174999999999894], zp_timestamp='2025-12-25T23:21:00')
2025-12-26T01:23:59.363 [DEBUG] [Thread-21912] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:23:59.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-26T01:23:59.448 [DEBUG] [Thread-21915] [transport.py] [_log()] starting thread (client mode): 0xbbfcee00
2025-12-26T01:23:59.448 [DEBUG] [Thread-21915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:23:59.462 [DEBUG] [Thread-21915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:23:59.462 [INFO] [Thread-21915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] client lang: <none>
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] server lang: <none>
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] kex follows: False
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] Compression: none
2025-12-26T01:23:59.470 [DEBUG] [Thread-21915] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:23:59.525 [DEBUG] [Thread-21915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:23:59.525 [DEBUG] [Thread-21915] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:23:59.525 [DEBUG] [Thread-21915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:23:59.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:23:59.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:23:59.582 [DEBUG] [Thread-21915] [transport.py] [_log()] userauth is OK
2025-12-26T01:23:59.582 [DEBUG] [Thread-21915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:23:59.582 [DEBUG] [Thread-21915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:23:59.582 [DEBUG] [Thread-21915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:23:59.583 [DEBUG] [Thread-21915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:23:59.597 [INFO] [Thread-21915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:23:59.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-26T01:23:59.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:24:00.432 [DEBUG] [Thread-21915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:24:00.432 [DEBUG] [Thread-21915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:24:00.481 [DEBUG] [Thread-21915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:24:00.481 [DEBUG] [Thread-21915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:24:00.489 [DEBUG] [Thread-21915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:24:00.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:24:00.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-26T01:24:00.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:24:00.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:24:00.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:24:00.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:24:00.521 [DEBUG] [Thread-21915] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:24:09.753 [DEBUG] [Thread-21917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:24.816 [DEBUG] [Thread-21918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:25.360 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:28.519 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:30.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:24:30.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:24:30.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-26T01:24:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 23, 58), 2.68, 83.89, 0.0, 15.67, 12.68, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:24:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:23:58
2025-12-26T01:24:31.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:24:31.553 [DEBUG] [Thread-21919] [transport.py] [_log()] starting thread (client mode): 0xb6b63fa0
2025-12-26T01:24:31.553 [DEBUG] [Thread-21919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:24:31.568 [DEBUG] [Thread-21919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:24:31.568 [INFO] [Thread-21919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:24:31.569 [DEBUG] [Thread-21919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] client lang: <none>
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] server lang: <none>
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] kex follows: False
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] Compression: none
2025-12-26T01:24:31.570 [DEBUG] [Thread-21919] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:24:31.579 [DEBUG] [Thread-21919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:24:31.579 [DEBUG] [Thread-21919] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:24:31.579 [DEBUG] [Thread-21919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:24:31.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:24:31.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:24:31.580 [DEBUG] [Thread-21919] [transport.py] [_log()] userauth is OK
2025-12-26T01:24:31.580 [DEBUG] [Thread-21919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:24:31.580 [DEBUG] [Thread-21919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:24:31.580 [DEBUG] [Thread-21919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:24:31.580 [DEBUG] [Thread-21919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:24:31.592 [INFO] [Thread-21919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:24:31.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:24:32.184 [DEBUG] [Thread-21919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:24:32.184 [DEBUG] [Thread-21919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:24:32.184 [DEBUG] [Thread-21919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:24:32.226 [DEBUG] [Thread-21919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:24:32.226 [DEBUG] [Thread-21919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:24:32.228 [DEBUG] [Thread-21919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:24:32.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:24:32.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:24:32.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:24:32.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:24:32.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:24:32.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:24:32.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:24:32.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:24:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:24:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.975060 -999.00  +12.70  13.30     85  +10.40 1 1 1 2 1     0    0 2.62 16.62 ZNESW 13.3 13.3 207.0 17.1 13.2 -23.3 13.0 -22.7 12.9 -21.1 13.2 -22.1
2025-12-26T01:24:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.975060
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:24:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:23:58', tmtdew=2.68, humidity=83.89, cloud=0.0, wind=15.67, temperature=12.68, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:24:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.3617500000000007, 0.1407500000000006, 0.38475000000000037, 0.18549999999999933, 0.1615000000000002, 0.3412500000000005, 1.3039999999999994, 1.7877500000000008, 0.34750000000000014, 0.13149999999999906, 0.2217500000000001, 0.21499999999999986, 0.22199999999999953, 0.26624999999999943, 0.4579999999999984, 0.669999999999999, 0.2192500000000006, 0.2494999999999994, 0.14899999999999913, 0.3152499999999989, 0.27399999999999913, 0.36524999999999963, 0.4067500000000006, 0.44374999999999964, 0.24099999999999966, 0.28200000000000003, 0.3332499999999996, 0.33750000000000036, 0.34299999999999997, 0.3750000000000009, 0.37100000000000133, 0.4430000000000014, 0.40174999999999894], zp_timestamp='2025-12-25T23:21:00')
2025-12-26T01:24:32.245 [DEBUG] [Thread-21919] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:24:32.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-26T01:24:32.331 [DEBUG] [Thread-21922] [transport.py] [_log()] starting thread (client mode): 0xb9590070
2025-12-26T01:24:32.332 [DEBUG] [Thread-21922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:24:32.346 [DEBUG] [Thread-21922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:24:32.346 [INFO] [Thread-21922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] client lang: <none>
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] server lang: <none>
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] kex follows: False
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] Compression: none
2025-12-26T01:24:32.354 [DEBUG] [Thread-21922] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:24:32.409 [DEBUG] [Thread-21922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:24:32.409 [DEBUG] [Thread-21922] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:24:32.409 [DEBUG] [Thread-21922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:24:32.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:24:32.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:24:32.466 [DEBUG] [Thread-21922] [transport.py] [_log()] userauth is OK
2025-12-26T01:24:32.466 [DEBUG] [Thread-21922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:24:32.467 [DEBUG] [Thread-21922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:24:32.467 [DEBUG] [Thread-21922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:24:32.467 [DEBUG] [Thread-21922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:24:32.480 [INFO] [Thread-21922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:24:32.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-26T01:24:32.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:24:33.302 [DEBUG] [Thread-21922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:24:33.302 [DEBUG] [Thread-21922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:24:33.350 [DEBUG] [Thread-21922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:24:33.350 [DEBUG] [Thread-21922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:24:33.359 [DEBUG] [Thread-21922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:24:33.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:24: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')
2025-12-26T01:24:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:24:33.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:24:33.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:24:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:24:33.395 [DEBUG] [Thread-21922] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:24:33.587 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:34.913 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:34.915 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:38.985 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:39.856 [DEBUG] [Thread-21924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:42.983 [DEBUG] [Thread-21925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:48.362 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:52.754 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:24:54.903 [DEBUG] [Thread-21926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:03.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:25:03.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:25:03.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-26T01:25:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 24, 30), 2.68, 83.89, 0.0, 16.3, 12.65, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:25:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:24:30
2025-12-26T01:25:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:25:04.464 [DEBUG] [Thread-21927] [transport.py] [_log()] starting thread (client mode): 0xb6b625c0
2025-12-26T01:25:04.465 [DEBUG] [Thread-21927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:25:04.485 [DEBUG] [Thread-21927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:25:04.485 [INFO] [Thread-21927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] client lang: <none>
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] server lang: <none>
2025-12-26T01:25:04.488 [DEBUG] [Thread-21927] [transport.py] [_log()] kex follows: False
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] Compression: none
2025-12-26T01:25:04.489 [DEBUG] [Thread-21927] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:25:04.505 [DEBUG] [Thread-21927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:25:04.505 [DEBUG] [Thread-21927] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:25:04.505 [DEBUG] [Thread-21927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:25:04.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:25:04.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:25:04.506 [DEBUG] [Thread-21927] [transport.py] [_log()] userauth is OK
2025-12-26T01:25:04.506 [DEBUG] [Thread-21927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:25:04.506 [DEBUG] [Thread-21927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:25:04.506 [DEBUG] [Thread-21927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:25:04.506 [DEBUG] [Thread-21927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:25:04.520 [INFO] [Thread-21927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:25:04.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:25:09.934 [DEBUG] [Thread-21929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:11.816 [DEBUG] [Thread-21927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:25:11.816 [DEBUG] [Thread-21927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:25:11.816 [DEBUG] [Thread-21927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:25:11.857 [DEBUG] [Thread-21927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:25:11.857 [DEBUG] [Thread-21927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:25:11.860 [DEBUG] [Thread-21927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:25:12.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:25:12.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:25:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:25:12.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:25:12.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:25:12.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:25:12.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:25:12.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:25:12.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:25:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.975060 -999.00  +12.70  13.30     85  +10.40 1 1 1 2 1     0    0 2.62 16.62 ZNESW 13.3 13.3 207.0 17.1 13.2 -23.3 13.0 -22.7 12.9 -21.1 13.2 -22.1
2025-12-26T01:25:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:25:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:25:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.975060
2025-12-26T01:25:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:25:12.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:25:12.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:25:12.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:25:12.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:25:12.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:24:30', tmtdew=2.68, humidity=83.89, cloud=0.0, wind=16.3, temperature=12.65, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:24:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.3617500000000007, 0.1407500000000006, 0.38475000000000037, 0.18549999999999933, 0.1615000000000002, 0.3412500000000005, 1.3039999999999994, 1.7877500000000008, 0.34750000000000014, 0.13149999999999906, 0.2217500000000001, 0.21499999999999986, 0.22199999999999953, 0.26624999999999943, 0.4579999999999984, 0.669999999999999, 0.2192500000000006, 0.2494999999999994, 0.14899999999999913, 0.3152499999999989, 0.27399999999999913, 0.36524999999999963, 0.4067500000000006, 0.44374999999999964, 0.24099999999999966, 0.28200000000000003, 0.3332499999999996, 0.33750000000000036, 0.34299999999999997, 0.3750000000000009, 0.37100000000000133, 0.4430000000000014, 0.40174999999999894], zp_timestamp='2025-12-25T23:21:00')
2025-12-26T01:25:12.091 [DEBUG] [Thread-21927] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:25:12.145 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:12.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-26T01:25:12.188 [DEBUG] [Thread-21931] [transport.py] [_log()] starting thread (client mode): 0xb9590190
2025-12-26T01:25:12.188 [DEBUG] [Thread-21931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:25:12.203 [DEBUG] [Thread-21931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:25:12.203 [INFO] [Thread-21931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:25:12.210 [DEBUG] [Thread-21931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] client lang: <none>
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] server lang: <none>
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] kex follows: False
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] Compression: none
2025-12-26T01:25:12.211 [DEBUG] [Thread-21931] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:25:12.267 [DEBUG] [Thread-21931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:25:12.268 [DEBUG] [Thread-21931] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:25:12.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:25:12.269 [DEBUG] [Thread-21931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:25:12.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:25:12.323 [DEBUG] [Thread-21931] [transport.py] [_log()] userauth is OK
2025-12-26T01:25:12.324 [DEBUG] [Thread-21931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:25:12.324 [DEBUG] [Thread-21931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:25:12.324 [DEBUG] [Thread-21931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:25:12.324 [DEBUG] [Thread-21931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:25:12.342 [INFO] [Thread-21931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:25:12.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-26T01:25:12.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:25:13.154 [DEBUG] [Thread-21931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:25:13.154 [DEBUG] [Thread-21931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:25:13.202 [DEBUG] [Thread-21931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:25:13.202 [DEBUG] [Thread-21931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:25:13.212 [DEBUG] [Thread-21931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:25:13.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:25:13.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-26T01:25:13.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-26T01:25:13.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:25:13.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:25:13.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:25:13.248 [DEBUG] [Thread-21931] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:25:16.558 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:23.495 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:24.979 [DEBUG] [Thread-21933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:27.859 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:35.114 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:35.115 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:40.036 [DEBUG] [Thread-21934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:43.062 [DEBUG] [Thread-21935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:25:43.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:25:43.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:25:43.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:25:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 25, 34), 2.66, 84.03, 0.0, 17.12, 12.62, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:25:43.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:25:34
2025-12-26T01:25:44.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:25:44.267 [DEBUG] [Thread-21936] [transport.py] [_log()] starting thread (client mode): 0xb957b250
2025-12-26T01:25:44.267 [DEBUG] [Thread-21936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:25:44.287 [DEBUG] [Thread-21936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:25:44.287 [INFO] [Thread-21936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:25:44.290 [DEBUG] [Thread-21936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] client lang: <none>
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] server lang: <none>
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] kex follows: False
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:25:44.291 [DEBUG] [Thread-21936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:25:44.292 [DEBUG] [Thread-21936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:25:44.292 [DEBUG] [Thread-21936] [transport.py] [_log()] Compression: none
2025-12-26T01:25:44.292 [DEBUG] [Thread-21936] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:25:44.308 [DEBUG] [Thread-21936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:25:44.309 [DEBUG] [Thread-21936] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:25:44.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:25:44.310 [DEBUG] [Thread-21936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:25:44.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:25:44.353 [DEBUG] [Thread-21936] [transport.py] [_log()] userauth is OK
2025-12-26T01:25:44.353 [DEBUG] [Thread-21936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:25:44.353 [DEBUG] [Thread-21936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:25:44.353 [DEBUG] [Thread-21936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:25:44.353 [DEBUG] [Thread-21936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:25:44.385 [INFO] [Thread-21936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:25:44.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:25:45.043 [DEBUG] [Thread-21936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:25:45.043 [DEBUG] [Thread-21936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:25:45.044 [DEBUG] [Thread-21936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:25:45.084 [DEBUG] [Thread-21936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:25:45.084 [DEBUG] [Thread-21936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:25:45.088 [DEBUG] [Thread-21936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:25:45.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:25:45.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:25:45.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:25:45.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:25:45.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:25:45.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:25:45.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:25:45.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:25:45.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:25:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.975407 -999.00  +12.70   9.82     85  +10.40 1 1 1 2 1     0    0 2.62 17.36 ZNESW 9.8 9.8 207.0 14.6 13.2 -23.2 13.0 -22.8 12.8 -21.1 13.1 -22.3
2025-12-26T01:25:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:25:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:25:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.975407
2025-12-26T01:25:45.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:25:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:25:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:25:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:25:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:25:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:25:34', tmtdew=2.66, humidity=84.03, cloud=0.0, wind=17.12, temperature=12.62, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:24:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:24:00')
2025-12-26T01:25:45.115 [DEBUG] [Thread-21936] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:25:45.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-26T01:25:45.208 [DEBUG] [Thread-21939] [transport.py] [_log()] starting thread (client mode): 0xbbfcefb0
2025-12-26T01:25:45.208 [DEBUG] [Thread-21939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:25:45.223 [DEBUG] [Thread-21939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:25:45.223 [INFO] [Thread-21939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] client lang: <none>
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] server lang: <none>
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] kex follows: False
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:25:45.231 [DEBUG] [Thread-21939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:25:45.232 [DEBUG] [Thread-21939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:25:45.232 [DEBUG] [Thread-21939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:25:45.232 [DEBUG] [Thread-21939] [transport.py] [_log()] Compression: none
2025-12-26T01:25:45.232 [DEBUG] [Thread-21939] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:25:45.288 [DEBUG] [Thread-21939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:25:45.288 [DEBUG] [Thread-21939] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:25:45.289 [DEBUG] [Thread-21939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:25:45.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:25:45.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:25:45.344 [DEBUG] [Thread-21939] [transport.py] [_log()] userauth is OK
2025-12-26T01:25:45.344 [DEBUG] [Thread-21939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:25:45.344 [DEBUG] [Thread-21939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:25:45.344 [DEBUG] [Thread-21939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:25:45.344 [DEBUG] [Thread-21939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:25:45.363 [INFO] [Thread-21939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:25:45.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-26T01:25:45.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:25:46.161 [DEBUG] [Thread-21939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:25:46.161 [DEBUG] [Thread-21939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:25:46.209 [DEBUG] [Thread-21939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:25:46.209 [DEBUG] [Thread-21939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:25:46.218 [DEBUG] [Thread-21939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:25:46.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:25:46.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:25:46.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-26T01:25:46.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:25:46.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:25:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:25:46.254 [DEBUG] [Thread-21939] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:25:55.073 [DEBUG] [Thread-21941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:10.126 [DEBUG] [Thread-21942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:16.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:26:16.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:26:16.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-26T01:26:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 26, 6), 2.65, 84.04, 0.0, 16.43, 12.67, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:26:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:26:06
2025-12-26T01:26:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:26:17.313 [DEBUG] [Thread-21943] [transport.py] [_log()] starting thread (client mode): 0xbbfcc460
2025-12-26T01:26:17.313 [DEBUG] [Thread-21943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:26:17.334 [DEBUG] [Thread-21943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:26:17.334 [INFO] [Thread-21943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] client lang: <none>
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] server lang: <none>
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] kex follows: False
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] Compression: none
2025-12-26T01:26:17.337 [DEBUG] [Thread-21943] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:26:17.354 [DEBUG] [Thread-21943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:26:17.355 [DEBUG] [Thread-21943] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:26:17.355 [DEBUG] [Thread-21943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:26:17.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:26:17.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:26:17.356 [DEBUG] [Thread-21943] [transport.py] [_log()] userauth is OK
2025-12-26T01:26:17.356 [DEBUG] [Thread-21943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:26:17.356 [DEBUG] [Thread-21943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:26:17.356 [DEBUG] [Thread-21943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:26:17.356 [DEBUG] [Thread-21943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:26:17.366 [INFO] [Thread-21943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:26:17.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:26:18.193 [DEBUG] [Thread-21943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:26:18.193 [DEBUG] [Thread-21943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:26:18.194 [DEBUG] [Thread-21943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:26:18.234 [DEBUG] [Thread-21943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:26:18.234 [DEBUG] [Thread-21943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:26:18.238 [DEBUG] [Thread-21943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:26:18.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:26:18.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:26:18.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:26:18.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:26:18.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:26:18.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:26:18.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:26:18.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:26:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:26:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.976101 -999.00  +12.70  10.89     85  +10.40 1 1 1 2 1     0    0 2.72 19.09 ZNESW 10.9 10.9 206.6 15.8 13.2 -23.2 13.1 -22.7 12.8 -20.8 13.2 -21.9
2025-12-26T01:26:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:26:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:26:18.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.976101
2025-12-26T01:26:18.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:26:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:26:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:26:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:26:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:26:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:26:06', tmtdew=2.65, humidity=84.04, cloud=0.0, wind=16.43, temperature=12.67, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:25:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:24:00')
2025-12-26T01:26:18.265 [DEBUG] [Thread-21943] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:26:18.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-26T01:26:18.364 [DEBUG] [Thread-21946] [transport.py] [_log()] starting thread (client mode): 0xb9591600
2025-12-26T01:26:18.365 [DEBUG] [Thread-21946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:26:18.379 [DEBUG] [Thread-21946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:26:18.380 [INFO] [Thread-21946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:26:18.387 [DEBUG] [Thread-21946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:26:18.387 [DEBUG] [Thread-21946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:26:18.387 [DEBUG] [Thread-21946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:26:18.387 [DEBUG] [Thread-21946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] client lang: <none>
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] server lang: <none>
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] kex follows: False
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] Compression: none
2025-12-26T01:26:18.388 [DEBUG] [Thread-21946] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:26:18.454 [DEBUG] [Thread-21946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:26:18.455 [DEBUG] [Thread-21946] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:26:18.455 [DEBUG] [Thread-21946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:26:18.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:26:18.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:26:18.510 [DEBUG] [Thread-21946] [transport.py] [_log()] userauth is OK
2025-12-26T01:26:18.511 [DEBUG] [Thread-21946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:26:18.511 [DEBUG] [Thread-21946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:26:18.511 [DEBUG] [Thread-21946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:26:18.511 [DEBUG] [Thread-21946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:26:18.531 [INFO] [Thread-21946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:26:18.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:26:18.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:26:19.367 [DEBUG] [Thread-21946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:26:19.367 [DEBUG] [Thread-21946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:26:19.415 [DEBUG] [Thread-21946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:26:19.416 [DEBUG] [Thread-21946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:26:19.425 [DEBUG] [Thread-21946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:26:19.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:26:19.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-26T01:26:19.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-26T01:26:19.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:26:19.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:26:19.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:26:19.462 [DEBUG] [Thread-21946] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:26:25.159 [DEBUG] [Thread-21948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:27.489 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:30.561 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:35.318 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:35.320 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:40.222 [DEBUG] [Thread-21949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:43.144 [DEBUG] [Thread-21950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:26:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:26:49.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:26:49.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:26:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 26, 38), 2.67, 83.96, 0.0, 17.26, 12.68, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:26:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:26:38
2025-12-26T01:26:50.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:26:50.485 [DEBUG] [Thread-21951] [transport.py] [_log()] starting thread (client mode): 0xbbfcdbd0
2025-12-26T01:26:50.485 [DEBUG] [Thread-21951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:26:50.505 [DEBUG] [Thread-21951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:26:50.505 [INFO] [Thread-21951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] client lang: <none>
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] server lang: <none>
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] kex follows: False
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:26:50.508 [DEBUG] [Thread-21951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:26:50.509 [DEBUG] [Thread-21951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:26:50.509 [DEBUG] [Thread-21951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:26:50.509 [DEBUG] [Thread-21951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:26:50.509 [DEBUG] [Thread-21951] [transport.py] [_log()] Compression: none
2025-12-26T01:26:50.509 [DEBUG] [Thread-21951] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:26:50.525 [DEBUG] [Thread-21951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:26:50.525 [DEBUG] [Thread-21951] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:26:50.525 [DEBUG] [Thread-21951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:26:50.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:26:50.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:26:50.526 [DEBUG] [Thread-21951] [transport.py] [_log()] userauth is OK
2025-12-26T01:26:50.526 [DEBUG] [Thread-21951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:26:50.526 [DEBUG] [Thread-21951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:26:50.526 [DEBUG] [Thread-21951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:26:50.526 [DEBUG] [Thread-21951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:26:50.540 [INFO] [Thread-21951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:26:50.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:26:51.190 [DEBUG] [Thread-21951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:26:51.190 [DEBUG] [Thread-21951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:26:51.190 [DEBUG] [Thread-21951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:26:51.231 [DEBUG] [Thread-21951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:26:51.232 [DEBUG] [Thread-21951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:26:51.234 [DEBUG] [Thread-21951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:26:51.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:26:51.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:26:51.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:26:51.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:26:51.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:26:51.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:26:51.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:26:51.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.976449 -999.00  +12.80  13.64     85  +10.40 1 1 1 2 1     0    0 2.74 19.95 ZNESW 13.6 13.6 198.6 16.3 13.2 -23.2 13.1 -22.7 12.8 -20.9 13.1 -21.9
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.976449
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:26:51.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:26:38', tmtdew=2.67, humidity=83.96, cloud=0.0, wind=17.26, temperature=12.68, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:26:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:24:00')
2025-12-26T01:26:51.254 [DEBUG] [Thread-21951] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:26:51.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-26T01:26:51.337 [DEBUG] [Thread-21954] [transport.py] [_log()] starting thread (client mode): 0xb95d7520
2025-12-26T01:26:51.337 [DEBUG] [Thread-21954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:26:51.355 [DEBUG] [Thread-21954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:26:51.355 [INFO] [Thread-21954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] client lang: <none>
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] server lang: <none>
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] kex follows: False
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] Compression: none
2025-12-26T01:26:51.365 [DEBUG] [Thread-21954] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:26:51.423 [DEBUG] [Thread-21954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:26:51.423 [DEBUG] [Thread-21954] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:26:51.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:26:51.423 [DEBUG] [Thread-21954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:26:51.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:26:51.478 [DEBUG] [Thread-21954] [transport.py] [_log()] userauth is OK
2025-12-26T01:26:51.479 [DEBUG] [Thread-21954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:26:51.479 [DEBUG] [Thread-21954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:26:51.479 [DEBUG] [Thread-21954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:26:51.479 [DEBUG] [Thread-21954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:26:51.497 [INFO] [Thread-21954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:26:51.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-26T01:26:51.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:26:52.297 [DEBUG] [Thread-21954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:26:52.297 [DEBUG] [Thread-21954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:26:52.345 [DEBUG] [Thread-21954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:26:52.345 [DEBUG] [Thread-21954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:26:52.354 [DEBUG] [Thread-21954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:26:52.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:26:52.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-26T01:26:52.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-26T01:26:52.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:26:52.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:26:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:26:52.385 [DEBUG] [Thread-21954] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:26:55.247 [DEBUG] [Thread-21956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:10.289 [DEBUG] [Thread-21957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:27:22.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:27:22.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-26T01:27:23.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 27, 10), 2.69, 83.86, 0.0, 18.53, 12.62, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:27:23.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:27:10
2025-12-26T01:27:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:27:23.389 [DEBUG] [Thread-21958] [transport.py] [_log()] starting thread (client mode): 0xb95b0490
2025-12-26T01:27:23.390 [DEBUG] [Thread-21958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:27:23.410 [DEBUG] [Thread-21958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:27:23.410 [INFO] [Thread-21958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:27:23.413 [DEBUG] [Thread-21958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:27:23.413 [DEBUG] [Thread-21958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:27:23.413 [DEBUG] [Thread-21958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] client lang: <none>
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] server lang: <none>
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] kex follows: False
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:27:23.414 [DEBUG] [Thread-21958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:27:23.415 [DEBUG] [Thread-21958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:27:23.415 [DEBUG] [Thread-21958] [transport.py] [_log()] Compression: none
2025-12-26T01:27:23.415 [DEBUG] [Thread-21958] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:27:23.432 [DEBUG] [Thread-21958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:27:23.432 [DEBUG] [Thread-21958] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:27:23.433 [DEBUG] [Thread-21958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:27:23.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:27:23.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:27:23.435 [DEBUG] [Thread-21958] [transport.py] [_log()] userauth is OK
2025-12-26T01:27:23.435 [DEBUG] [Thread-21958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:27:23.435 [DEBUG] [Thread-21958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:27:23.435 [DEBUG] [Thread-21958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:27:23.435 [DEBUG] [Thread-21958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:27:23.458 [INFO] [Thread-21958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:27:23.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:27:24.306 [DEBUG] [Thread-21958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:27:24.307 [DEBUG] [Thread-21958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:27:24.307 [DEBUG] [Thread-21958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:27:24.348 [DEBUG] [Thread-21958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:27:24.348 [DEBUG] [Thread-21958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:27:24.351 [DEBUG] [Thread-21958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:27:24.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:27:24.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:27:24.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:27:24.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:27:24.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:27:24.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:27:24.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:27:24.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:27:24.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:27:24.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.976796 -999.00  +12.90  12.28     85  +10.40 1 1 1 2 1     0    0 2.82 22.29 ZNESW 12.3 12.3 200.0 20.5 13.2 -23.0 13.1 -22.7 12.9 -21.0 13.2 -21.9
2025-12-26T01:27:24.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.976796
2025-12-26T01:27:24.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:27:24.375 [DEBUG] [Thread-21958] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:27:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:27:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:27:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:27:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:27:10', tmtdew=2.69, humidity=83.86, cloud=0.0, wind=18.53, temperature=12.62, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:26:35.174', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:24:00')
2025-12-26T01:27:24.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-26T01:27:24.477 [DEBUG] [Thread-21961] [transport.py] [_log()] starting thread (client mode): 0xb95b2d70
2025-12-26T01:27:24.477 [DEBUG] [Thread-21961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:27:24.491 [DEBUG] [Thread-21961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:27:24.492 [INFO] [Thread-21961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:27:24.499 [DEBUG] [Thread-21961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:27:24.500 [DEBUG] [Thread-21961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:27:24.500 [DEBUG] [Thread-21961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:27:24.500 [DEBUG] [Thread-21961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:24.500 [DEBUG] [Thread-21961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:24.500 [DEBUG] [Thread-21961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:24.500 [DEBUG] [Thread-21961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] client lang: <none>
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] server lang: <none>
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] kex follows: False
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:27:24.501 [DEBUG] [Thread-21961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:27:24.502 [DEBUG] [Thread-21961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:27:24.502 [DEBUG] [Thread-21961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:27:24.502 [DEBUG] [Thread-21961] [transport.py] [_log()] Compression: none
2025-12-26T01:27:24.502 [DEBUG] [Thread-21961] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:27:24.557 [DEBUG] [Thread-21961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:27:24.557 [DEBUG] [Thread-21961] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:27:24.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:27:24.559 [DEBUG] [Thread-21961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:27:24.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:27:24.614 [DEBUG] [Thread-21961] [transport.py] [_log()] userauth is OK
2025-12-26T01:27:24.614 [DEBUG] [Thread-21961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:27:24.614 [DEBUG] [Thread-21961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:27:24.615 [DEBUG] [Thread-21961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:27:24.615 [DEBUG] [Thread-21961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:27:24.633 [INFO] [Thread-21961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:27:24.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-26T01:27:24.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:27:25.324 [DEBUG] [Thread-21963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:25.538 [DEBUG] [Thread-21961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:27:25.539 [DEBUG] [Thread-21961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:27:25.587 [DEBUG] [Thread-21961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:27:25.587 [DEBUG] [Thread-21961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:27:25.596 [DEBUG] [Thread-21961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:27:25.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:27:25.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:27:25.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:27:25.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:27:25.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:27:25.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:27:25.630 [DEBUG] [Thread-21961] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:27:35.523 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:35.524 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:40.385 [DEBUG] [Thread-21964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:43.198 [DEBUG] [Thread-21965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:55.420 [DEBUG] [Thread-21966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:27:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:27:55.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:27:55.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-26T01:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 27, 42), 2.73, 83.41, 0.0, 20.15, 12.78, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:27:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:27:42
2025-12-26T01:27:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:27:56.628 [DEBUG] [Thread-21967] [transport.py] [_log()] starting thread (client mode): 0xbbfcd960
2025-12-26T01:27:56.629 [DEBUG] [Thread-21967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:27:56.649 [DEBUG] [Thread-21967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:27:56.649 [INFO] [Thread-21967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:27:56.652 [DEBUG] [Thread-21967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] client lang: <none>
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] server lang: <none>
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] kex follows: False
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:27:56.653 [DEBUG] [Thread-21967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:27:56.654 [DEBUG] [Thread-21967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:27:56.654 [DEBUG] [Thread-21967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:27:56.654 [DEBUG] [Thread-21967] [transport.py] [_log()] Compression: none
2025-12-26T01:27:56.654 [DEBUG] [Thread-21967] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:27:56.671 [DEBUG] [Thread-21967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:27:56.671 [DEBUG] [Thread-21967] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:27:56.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:27:56.672 [DEBUG] [Thread-21967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:27:56.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:27:56.674 [DEBUG] [Thread-21967] [transport.py] [_log()] userauth is OK
2025-12-26T01:27:56.675 [DEBUG] [Thread-21967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:27:56.675 [DEBUG] [Thread-21967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:27:56.675 [DEBUG] [Thread-21967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:27:56.675 [DEBUG] [Thread-21967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:27:56.699 [INFO] [Thread-21967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:27:56.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:27:57.333 [DEBUG] [Thread-21967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:27:57.334 [DEBUG] [Thread-21967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:27:57.334 [DEBUG] [Thread-21967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:27:57.375 [DEBUG] [Thread-21967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:27:57.375 [DEBUG] [Thread-21967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:27:57.378 [DEBUG] [Thread-21967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:27:57.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:27:57.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:27:57.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:27:57.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:27:57.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:27:57.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:27:57.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:27:57.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:27:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:27:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.977144 -999.00  +12.90  16.47     84  +10.40 1 1 1 2 1     0    0 2.89 24.73 ZNESW 16.5 16.5 200.0 19.8 13.2 -23.2 13.1 -22.5 12.9 -20.9 13.2 -22.2
2025-12-26T01:27:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:27:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:27:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.977144
2025-12-26T01:27:57.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:27:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:27:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:27:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:27:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:27:57.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:27:42', tmtdew=2.73, humidity=83.41, cloud=0.0, wind=20.15, temperature=12.78, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:27:05.242', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:24:00')
2025-12-26T01:27:57.405 [DEBUG] [Thread-21967] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:27:57.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-26T01:27:57.498 [DEBUG] [Thread-21970] [transport.py] [_log()] starting thread (client mode): 0xbbfceb00
2025-12-26T01:27:57.498 [DEBUG] [Thread-21970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:27:57.513 [DEBUG] [Thread-21970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:27:57.513 [INFO] [Thread-21970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:27:57.521 [DEBUG] [Thread-21970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:27:57.521 [DEBUG] [Thread-21970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] client lang: <none>
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] server lang: <none>
2025-12-26T01:27:57.522 [DEBUG] [Thread-21970] [transport.py] [_log()] kex follows: False
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] Compression: none
2025-12-26T01:27:57.523 [DEBUG] [Thread-21970] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:27:57.582 [DEBUG] [Thread-21970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:27:57.582 [DEBUG] [Thread-21970] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:27:57.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:27:57.583 [DEBUG] [Thread-21970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:27:57.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:27:57.638 [DEBUG] [Thread-21970] [transport.py] [_log()] userauth is OK
2025-12-26T01:27:57.638 [DEBUG] [Thread-21970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:27:57.638 [DEBUG] [Thread-21970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:27:57.638 [DEBUG] [Thread-21970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:27:57.639 [DEBUG] [Thread-21970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:27:57.657 [INFO] [Thread-21970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:27:57.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-26T01:27:57.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:27:58.462 [DEBUG] [Thread-21970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:27:58.462 [DEBUG] [Thread-21970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:27:58.510 [DEBUG] [Thread-21970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:27:58.510 [DEBUG] [Thread-21970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:27:58.519 [DEBUG] [Thread-21970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:27:58.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:27:58.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:27:58.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:27:58.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:27:58.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:27:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:27:58.556 [DEBUG] [Thread-21970] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:28:10.456 [DEBUG] [Thread-21972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:28:25.495 [DEBUG] [Thread-21973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:28:28.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:28:28.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:28:28.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-26T01:28:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 28, 14), 2.76, 83.26, 0.0, 19.22, 12.85, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:28:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:28:14
2025-12-26T01:28:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:28:29.569 [DEBUG] [Thread-21974] [transport.py] [_log()] starting thread (client mode): 0xbbfce110
2025-12-26T01:28:29.569 [DEBUG] [Thread-21974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:28:29.589 [DEBUG] [Thread-21974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:28:29.589 [INFO] [Thread-21974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:28:29.591 [DEBUG] [Thread-21974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] client lang: <none>
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] server lang: <none>
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] kex follows: False
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] Compression: none
2025-12-26T01:28:29.592 [DEBUG] [Thread-21974] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:28:29.608 [DEBUG] [Thread-21974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:28:29.609 [DEBUG] [Thread-21974] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:28:29.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:28:29.610 [DEBUG] [Thread-21974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:28:29.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:28:29.612 [DEBUG] [Thread-21974] [transport.py] [_log()] userauth is OK
2025-12-26T01:28:29.612 [DEBUG] [Thread-21974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:28:29.612 [DEBUG] [Thread-21974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:28:29.612 [DEBUG] [Thread-21974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:28:29.612 [DEBUG] [Thread-21974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:28:29.636 [INFO] [Thread-21974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:28:29.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:28:30.444 [DEBUG] [Thread-21974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:28:30.444 [DEBUG] [Thread-21974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:28:30.444 [DEBUG] [Thread-21974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:28:30.485 [DEBUG] [Thread-21974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:28:30.485 [DEBUG] [Thread-21974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:28:30.489 [DEBUG] [Thread-21974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:28:30.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:28:30.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:28:30.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:28:30.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:28:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:28:30.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:28:30.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:28:30.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:28:30.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:28:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.977491 -999.00  +12.90  13.65     84  +10.40 1 1 1 2 1     0    0 2.92 25.24 ZNESW 13.7 13.7 208.0 18.9 13.2 -23.3 13.1 -22.7 12.8 -20.9 13.2 -22.2
2025-12-26T01:28:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:28:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:28:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.977491
2025-12-26T01:28:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:28:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:28:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:28:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:28:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:28:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:28:14', tmtdew=2.76, humidity=83.26, cloud=0.0, wind=19.22, temperature=12.85, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:27:35.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:24:00')
2025-12-26T01:28:30.514 [DEBUG] [Thread-21974] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:28:30.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-26T01:28:30.608 [DEBUG] [Thread-21977] [transport.py] [_log()] starting thread (client mode): 0xb95b37c0
2025-12-26T01:28:30.608 [DEBUG] [Thread-21977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:28:30.623 [DEBUG] [Thread-21977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:28:30.623 [INFO] [Thread-21977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] client lang: <none>
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] server lang: <none>
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] kex follows: False
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:28:30.631 [DEBUG] [Thread-21977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:28:30.632 [DEBUG] [Thread-21977] [transport.py] [_log()] Compression: none
2025-12-26T01:28:30.632 [DEBUG] [Thread-21977] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:28:30.691 [DEBUG] [Thread-21977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:28:30.691 [DEBUG] [Thread-21977] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:28:30.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:28:30.693 [DEBUG] [Thread-21977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:28:30.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:28:30.748 [DEBUG] [Thread-21977] [transport.py] [_log()] userauth is OK
2025-12-26T01:28:30.749 [DEBUG] [Thread-21977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:28:30.749 [DEBUG] [Thread-21977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:28:30.749 [DEBUG] [Thread-21977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:28:30.749 [DEBUG] [Thread-21977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:28:30.768 [INFO] [Thread-21977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:28:30.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-26T01:28:30.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:28:31.600 [DEBUG] [Thread-21977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:28:31.600 [DEBUG] [Thread-21977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:28:31.648 [DEBUG] [Thread-21977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:28:31.648 [DEBUG] [Thread-21977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:28:31.657 [DEBUG] [Thread-21977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:28:31.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:28:31.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-26T01:28:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:28:31.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:28:31.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:28:31.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:28:31.688 [DEBUG] [Thread-21977] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:28:35.731 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:28:35.732 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:28:40.532 [DEBUG] [Thread-21979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:28:43.274 [DEBUG] [Thread-21980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:28:55.577 [DEBUG] [Thread-21981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:01.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:29:01.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:29:01.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-26T01:29:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 28, 46), 2.82, 82.7, 0.0, 17.8, 12.78, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:29:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:28:46
2025-12-26T01:29:02.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:29:02.671 [DEBUG] [Thread-21982] [transport.py] [_log()] starting thread (client mode): 0xbbfcdb40
2025-12-26T01:29:02.671 [DEBUG] [Thread-21982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:29:02.696 [DEBUG] [Thread-21982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:29:02.696 [INFO] [Thread-21982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] client lang: <none>
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] server lang: <none>
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] kex follows: False
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:29:02.700 [DEBUG] [Thread-21982] [transport.py] [_log()] Compression: none
2025-12-26T01:29:02.701 [DEBUG] [Thread-21982] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:29:02.716 [DEBUG] [Thread-21982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:29:02.717 [DEBUG] [Thread-21982] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:29:02.717 [DEBUG] [Thread-21982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:29:02.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:29:02.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:29:02.719 [DEBUG] [Thread-21982] [transport.py] [_log()] userauth is OK
2025-12-26T01:29:02.719 [DEBUG] [Thread-21982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:29:02.719 [DEBUG] [Thread-21982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:29:02.719 [DEBUG] [Thread-21982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:29:02.719 [DEBUG] [Thread-21982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:29:02.754 [INFO] [Thread-21982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:29:02.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:29:03.400 [DEBUG] [Thread-21982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:29:03.400 [DEBUG] [Thread-21982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:29:03.400 [DEBUG] [Thread-21982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:29:03.441 [DEBUG] [Thread-21982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:29:03.441 [DEBUG] [Thread-21982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:29:03.443 [DEBUG] [Thread-21982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:29:03.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:29:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:29:03.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:29:03.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:29:03.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:29:03.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:29:03.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:29:03.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:29:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:29:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.978185 -999.00  +12.90  10.54     85  +10.40 1 1 1 2 1     0    0 3.00 26.60 ZNESW 10.5 10.5 189.2 16.8 13.2 -23.4 13.1 -22.8 12.9 -21.1 13.2 -22.4
2025-12-26T01:29:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:29:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:29:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.978185
2025-12-26T01:29:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:29:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:29:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:29:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:29:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:29:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:28:46', tmtdew=2.82, humidity=82.7, cloud=0.0, wind=17.8, temperature=12.78, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:28:35.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:27:00')
2025-12-26T01:29:03.469 [DEBUG] [Thread-21982] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:29:03.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-26T01:29:03.563 [DEBUG] [Thread-21985] [transport.py] [_log()] starting thread (client mode): 0xbbfcd870
2025-12-26T01:29:03.563 [DEBUG] [Thread-21985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:29:03.580 [DEBUG] [Thread-21985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:29:03.580 [INFO] [Thread-21985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:29:03.587 [DEBUG] [Thread-21985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] client lang: <none>
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] server lang: <none>
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] kex follows: False
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] Compression: none
2025-12-26T01:29:03.588 [DEBUG] [Thread-21985] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:29:03.643 [DEBUG] [Thread-21985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:29:03.644 [DEBUG] [Thread-21985] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:29:03.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:29:03.644 [DEBUG] [Thread-21985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:29:03.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:29:03.700 [DEBUG] [Thread-21985] [transport.py] [_log()] userauth is OK
2025-12-26T01:29:03.701 [DEBUG] [Thread-21985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:29:03.701 [DEBUG] [Thread-21985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:29:03.701 [DEBUG] [Thread-21985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:29:03.701 [DEBUG] [Thread-21985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:29:03.724 [INFO] [Thread-21985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:29:03.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-26T01:29:03.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:29:04.540 [DEBUG] [Thread-21985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:29:04.540 [DEBUG] [Thread-21985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:29:04.588 [DEBUG] [Thread-21985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:29:04.588 [DEBUG] [Thread-21985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:29:04.598 [DEBUG] [Thread-21985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:29:04.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:29:04.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-26T01:29:04.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:29:04.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:29:04.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:29:04.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:29:04.632 [DEBUG] [Thread-21985] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:29:10.614 [DEBUG] [Thread-21987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:25.656 [DEBUG] [Thread-21988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:34.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:29:34.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:29:34.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-26T01:29:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 29, 19), 2.8, 82.78, 0.0, 17.38, 12.77, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:29:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:29:19
2025-12-26T01:29:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:29:35.620 [DEBUG] [Thread-21989] [transport.py] [_log()] starting thread (client mode): 0xb95b3460
2025-12-26T01:29:35.620 [DEBUG] [Thread-21989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:29:35.639 [DEBUG] [Thread-21989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:29:35.639 [INFO] [Thread-21989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] client lang: <none>
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] server lang: <none>
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] kex follows: False
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:29:35.643 [DEBUG] [Thread-21989] [transport.py] [_log()] Compression: none
2025-12-26T01:29:35.644 [DEBUG] [Thread-21989] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:29:35.661 [DEBUG] [Thread-21989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:29:35.661 [DEBUG] [Thread-21989] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:29:35.662 [DEBUG] [Thread-21989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:29:35.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:29:35.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:29:35.664 [DEBUG] [Thread-21989] [transport.py] [_log()] userauth is OK
2025-12-26T01:29:35.664 [DEBUG] [Thread-21989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:29:35.664 [DEBUG] [Thread-21989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:29:35.664 [DEBUG] [Thread-21989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:29:35.664 [DEBUG] [Thread-21989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:29:35.681 [INFO] [Thread-21989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:29:35.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:29:35.947 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:35.949 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:36.482 [DEBUG] [Thread-21989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:29:36.482 [DEBUG] [Thread-21989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:29:36.482 [DEBUG] [Thread-21989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:29:36.523 [DEBUG] [Thread-21989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:29:36.523 [DEBUG] [Thread-21989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:29:36.526 [DEBUG] [Thread-21989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:29:36.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:29:36.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:29:36.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:29:36.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:29:36.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:29:36.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:29:36.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:29:36.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:29:36.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:29:36.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.978532 -999.00  +12.80  12.20     85  +10.40 1 1 1 2 1     0    0 2.99 26.70 ZNESW 12.2 12.2 200.0 15.9 13.2 -23.2 13.1 -22.9 12.9 -21.1 13.2 -22.3
2025-12-26T01:29:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:29:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:29:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.978532
2025-12-26T01:29:36.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:29:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:29:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:29:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:29:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:29:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:29:19', tmtdew=2.8, humidity=82.78, cloud=0.0, wind=17.38, temperature=12.77, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:29:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:27:00')
2025-12-26T01:29:36.555 [DEBUG] [Thread-21989] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:29:36.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-26T01:29:36.643 [DEBUG] [Thread-21992] [transport.py] [_log()] starting thread (client mode): 0xb9558cd0
2025-12-26T01:29:36.643 [DEBUG] [Thread-21992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:29:36.658 [DEBUG] [Thread-21992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:29:36.658 [INFO] [Thread-21992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:29:36.668 [DEBUG] [Thread-21992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:29:36.668 [DEBUG] [Thread-21992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:29:36.668 [DEBUG] [Thread-21992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:29:36.668 [DEBUG] [Thread-21992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:36.668 [DEBUG] [Thread-21992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] client lang: <none>
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] server lang: <none>
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] kex follows: False
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] Compression: none
2025-12-26T01:29:36.669 [DEBUG] [Thread-21992] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:29:36.727 [DEBUG] [Thread-21992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:29:36.728 [DEBUG] [Thread-21992] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:29:36.729 [DEBUG] [Thread-21992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:29:36.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:29:36.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:29:36.790 [DEBUG] [Thread-21992] [transport.py] [_log()] userauth is OK
2025-12-26T01:29:36.790 [DEBUG] [Thread-21992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:29:36.790 [DEBUG] [Thread-21992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:29:36.790 [DEBUG] [Thread-21992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:29:36.790 [DEBUG] [Thread-21992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:29:36.812 [INFO] [Thread-21992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:29:36.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-26T01:29:36.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:29:37.648 [DEBUG] [Thread-21992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:29:37.648 [DEBUG] [Thread-21992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:29:37.697 [DEBUG] [Thread-21992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:29:37.697 [DEBUG] [Thread-21992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:29:37.708 [DEBUG] [Thread-21992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:29:37.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:29:37.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:29:37.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-26T01:29:37.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:29:37.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:29:37.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:29:37.751 [DEBUG] [Thread-21992] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:29:40.696 [DEBUG] [Thread-21994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:43.347 [DEBUG] [Thread-21995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:54.376 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:55.754 [DEBUG] [Thread-21996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:29:59.754 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:02.818 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:07.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:30:07.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:30:07.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-26T01:30:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 29, 51), 2.85, 82.81, 0.0, 17.89, 12.95, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:30:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:29:51
2025-12-26T01:30:08.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:30:08.802 [DEBUG] [Thread-21997] [transport.py] [_log()] starting thread (client mode): 0xb95b25c0
2025-12-26T01:30:08.802 [DEBUG] [Thread-21997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:30:08.821 [DEBUG] [Thread-21997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:30:08.821 [INFO] [Thread-21997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] client lang: <none>
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] server lang: <none>
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] kex follows: False
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] Compression: none
2025-12-26T01:30:08.824 [DEBUG] [Thread-21997] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:30:08.839 [DEBUG] [Thread-21997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:30:08.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:30:08.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] userauth is OK
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:30:08.840 [DEBUG] [Thread-21997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:30:08.849 [INFO] [Thread-21997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:30:08.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:30:09.222 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:10.784 [DEBUG] [Thread-21999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:11.430 [DEBUG] [Thread-21997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:30:11.430 [DEBUG] [Thread-21997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:30:11.430 [DEBUG] [Thread-21997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:30:11.472 [DEBUG] [Thread-21997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:30:11.472 [DEBUG] [Thread-21997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:30:11.473 [DEBUG] [Thread-21997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:30:11.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:30:11.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:30:11.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:30:11.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:30:11.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:30:11.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:30:11.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.978879 -999.00  +12.80  14.73     84  +10.40 1 1 1 2 1     0    0 3.05 27.41 ZNESW 14.7 14.7 195.0 18.5 13.2 -23.2 13.1 -22.7 12.9 -20.9 13.2 -22.2
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.978879
2025-12-26T01:30:11.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:30:11.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:30:11.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:30:11.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:30:11.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:30:11.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:29:51', tmtdew=2.85, humidity=82.81, cloud=0.0, wind=17.89, temperature=12.95, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:29:35.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:27:00')
2025-12-26T01:30:11.498 [DEBUG] [Thread-21997] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:30:11.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:30:11.587 [DEBUG] [Thread-22001] [transport.py] [_log()] starting thread (client mode): 0xb95d4af0
2025-12-26T01:30:11.588 [DEBUG] [Thread-22001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:30:11.603 [DEBUG] [Thread-22001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:30:11.603 [INFO] [Thread-22001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:30:11.610 [DEBUG] [Thread-22001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:30:11.611 [DEBUG] [Thread-22001] [transport.py] [_log()] client lang: <none>
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] server lang: <none>
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] kex follows: False
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] Compression: none
2025-12-26T01:30:11.612 [DEBUG] [Thread-22001] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:30:11.669 [DEBUG] [Thread-22001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:30:11.669 [DEBUG] [Thread-22001] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:30:11.670 [DEBUG] [Thread-22001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:30:11.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:30:11.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:30:11.725 [DEBUG] [Thread-22001] [transport.py] [_log()] userauth is OK
2025-12-26T01:30:11.725 [DEBUG] [Thread-22001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:30:11.725 [DEBUG] [Thread-22001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:30:11.725 [DEBUG] [Thread-22001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:30:11.726 [DEBUG] [Thread-22001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:30:11.744 [INFO] [Thread-22001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:30:11.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-26T01:30:11.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:30:12.545 [DEBUG] [Thread-22001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:30:12.545 [DEBUG] [Thread-22001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:30:12.593 [DEBUG] [Thread-22001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:30:12.593 [DEBUG] [Thread-22001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:30:12.603 [DEBUG] [Thread-22001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:30:12.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:30:12.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-26T01:30:12.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-26T01:30:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:30:12.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:30:12.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:30:12.640 [DEBUG] [Thread-22001] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:30:25.818 [DEBUG] [Thread-22003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:36.152 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:36.154 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:40.870 [DEBUG] [Thread-22004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:42.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:30:42.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:30:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:30:43.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 30, 23), 2.84, 82.84, 0.0, 17.54, 12.75, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:30:43.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:30:23
2025-12-26T01:30:43.407 [DEBUG] [Thread-22005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:30:43.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:30:43.630 [DEBUG] [Thread-22006] [transport.py] [_log()] starting thread (client mode): 0xb95d49a0
2025-12-26T01:30:43.630 [DEBUG] [Thread-22006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:30:43.641 [DEBUG] [Thread-22006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:30:43.641 [INFO] [Thread-22006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] client lang: <none>
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] server lang: <none>
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] kex follows: False
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] Compression: none
2025-12-26T01:30:43.644 [DEBUG] [Thread-22006] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:30:43.662 [DEBUG] [Thread-22006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:30:43.662 [DEBUG] [Thread-22006] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:30:43.663 [DEBUG] [Thread-22006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:30:43.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:30:43.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:30:43.664 [DEBUG] [Thread-22006] [transport.py] [_log()] userauth is OK
2025-12-26T01:30:43.665 [DEBUG] [Thread-22006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:30:43.665 [DEBUG] [Thread-22006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:30:43.665 [DEBUG] [Thread-22006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:30:43.665 [DEBUG] [Thread-22006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:30:43.683 [INFO] [Thread-22006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:30:43.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:30:45.617 [DEBUG] [Thread-22006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:30:45.617 [DEBUG] [Thread-22006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:30:45.617 [DEBUG] [Thread-22006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:30:45.658 [DEBUG] [Thread-22006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:30:45.658 [DEBUG] [Thread-22006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:30:45.660 [DEBUG] [Thread-22006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:30:45.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:30:45.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:30:45.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:30:45.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:30:45.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:30:45.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:30:45.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.979226 -999.00  +12.90  13.75     84  +10.40 1 1 1 2 1     0    0 3.16 31.08 ZNESW 13.8 13.8 194.8 16.9 13.3 -23.2 13.1 -22.7 12.9 -21.0 13.2 -22.3
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.979226
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:30:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:30:23', tmtdew=2.84, humidity=82.84, cloud=0.0, wind=17.54, temperature=12.75, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:30:05.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:27:00')
2025-12-26T01:30:45.680 [DEBUG] [Thread-22006] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:30:45.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-26T01:30:45.764 [DEBUG] [Thread-22009] [transport.py] [_log()] starting thread (client mode): 0xb6b29030
2025-12-26T01:30:45.764 [DEBUG] [Thread-22009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:30:45.779 [DEBUG] [Thread-22009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:30:45.779 [INFO] [Thread-22009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] client lang: <none>
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] server lang: <none>
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] kex follows: False
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] Compression: none
2025-12-26T01:30:45.787 [DEBUG] [Thread-22009] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:30:45.841 [DEBUG] [Thread-22009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:30:45.841 [DEBUG] [Thread-22009] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:30:45.841 [DEBUG] [Thread-22009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:30:45.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:30:45.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:30:45.898 [DEBUG] [Thread-22009] [transport.py] [_log()] userauth is OK
2025-12-26T01:30:45.898 [DEBUG] [Thread-22009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:30:45.898 [DEBUG] [Thread-22009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:30:45.898 [DEBUG] [Thread-22009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:30:45.898 [DEBUG] [Thread-22009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:30:45.912 [INFO] [Thread-22009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:30:45.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-26T01:30:45.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:30:46.746 [DEBUG] [Thread-22009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:30:46.746 [DEBUG] [Thread-22009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:30:46.794 [DEBUG] [Thread-22009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:30:46.794 [DEBUG] [Thread-22009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:30:46.802 [DEBUG] [Thread-22009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:30:46.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:30:46.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-26T01:30:46.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-26T01:30:46.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:30:46.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:30:46.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:30:46.834 [DEBUG] [Thread-22009] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:30:55.900 [DEBUG] [Thread-22011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:10.942 [DEBUG] [Thread-22012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:31:16.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:31:16.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-26T01:31:17.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 30, 55), 2.82, 82.94, 0.0, 17.38, 12.72, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:31:17.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:30:55
2025-12-26T01:31:17.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:31:17.851 [DEBUG] [Thread-22013] [transport.py] [_log()] starting thread (client mode): 0xbbfcd660
2025-12-26T01:31:17.851 [DEBUG] [Thread-22013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:31:17.871 [DEBUG] [Thread-22013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:31:17.871 [INFO] [Thread-22013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] client lang: <none>
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] server lang: <none>
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] kex follows: False
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] Compression: none
2025-12-26T01:31:17.874 [DEBUG] [Thread-22013] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:31:17.890 [DEBUG] [Thread-22013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:31:17.891 [DEBUG] [Thread-22013] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:31:17.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:31:17.892 [DEBUG] [Thread-22013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:31:17.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:31:17.894 [DEBUG] [Thread-22013] [transport.py] [_log()] userauth is OK
2025-12-26T01:31:17.894 [DEBUG] [Thread-22013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:31:17.894 [DEBUG] [Thread-22013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:31:17.894 [DEBUG] [Thread-22013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:31:17.894 [DEBUG] [Thread-22013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:31:17.915 [INFO] [Thread-22013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:31:17.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:31:18.527 [DEBUG] [Thread-22013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:31:18.527 [DEBUG] [Thread-22013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:31:18.528 [DEBUG] [Thread-22013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:31:18.568 [DEBUG] [Thread-22013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:31:18.568 [DEBUG] [Thread-22013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:31:18.572 [DEBUG] [Thread-22013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:31:18.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:31:18.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:31:18.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:31:18.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:31:18.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:31:18.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:31:18.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:31:18.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:31:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:31:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.979574 -999.00  +12.80   9.27     85  +10.40 1 1 1 2 1     0    0 3.01 27.07 ZNESW 9.3 9.3 191.2 14.5 13.2 -23.2 13.1 -22.9 12.9 -21.0 13.2 -22.3
2025-12-26T01:31:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:31:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:31:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.979574
2025-12-26T01:31:18.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:31:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:31:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:31:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:31:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:31:18.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:30:55', tmtdew=2.82, humidity=82.94, cloud=0.0, wind=17.38, temperature=12.72, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:30:35.194', atlas_cloud=1, atlas_rain=1, zp_data=[0.2312499999999993, 0.17425000000000068, 0.3542500000000004, 0.17549999999999955, 0.1819999999999986, 0.2732500000000009, 0.5269999999999992, 1.6587500000000013, 0.375, 0.11700000000000088, 0.1922499999999996, 0.22850000000000037, 0.20500000000000007, 0.25124999999999886, 0.3279999999999994, 0.5974999999999993, 0.20624999999999893, 0.28250000000000064, 0.1509999999999998, 0.3122499999999988, 0.2724999999999973, 0.34424999999999883, 0.3937500000000007, 0.40474999999999994, 0.2524999999999995, 0.34050000000000047, 0.3337500000000002, 0.3615000000000004, 0.42300000000000004, 0.36600000000000144, 0.43200000000000127, 0.44650000000000123, 0.34174999999999933], zp_timestamp='2025-12-25T23:27:00')
2025-12-26T01:31:18.600 [DEBUG] [Thread-22013] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:31:18.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-26T01:31:18.693 [DEBUG] [Thread-22016] [transport.py] [_log()] starting thread (client mode): 0xb95b1b10
2025-12-26T01:31:18.693 [DEBUG] [Thread-22016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:31:18.708 [DEBUG] [Thread-22016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:31:18.709 [INFO] [Thread-22016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:18.716 [DEBUG] [Thread-22016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] client lang: <none>
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] server lang: <none>
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] kex follows: False
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] Compression: none
2025-12-26T01:31:18.717 [DEBUG] [Thread-22016] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:31:18.777 [DEBUG] [Thread-22016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:31:18.777 [DEBUG] [Thread-22016] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:31:18.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:31:18.779 [DEBUG] [Thread-22016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:31:18.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:31:18.833 [DEBUG] [Thread-22016] [transport.py] [_log()] userauth is OK
2025-12-26T01:31:18.833 [DEBUG] [Thread-22016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:31:18.834 [DEBUG] [Thread-22016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:31:18.834 [DEBUG] [Thread-22016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:31:18.834 [DEBUG] [Thread-22016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:31:18.853 [INFO] [Thread-22016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:31:18.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:31:18.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:31:19.668 [DEBUG] [Thread-22016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:31:19.668 [DEBUG] [Thread-22016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:31:19.716 [DEBUG] [Thread-22016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:31:19.716 [DEBUG] [Thread-22016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:31:19.726 [DEBUG] [Thread-22016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:31:19.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:31:19.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:31:19.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-26T01:31:19.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:31:19.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:31:19.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:31:19.766 [DEBUG] [Thread-22016] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:31:25.971 [DEBUG] [Thread-22018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:36.356 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:36.358 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:41.016 [DEBUG] [Thread-22019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:43.464 [DEBUG] [Thread-22020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:31:49.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:31:49.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:31:49.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:31:50.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 31, 27), 2.83, 82.91, 0.0, 17.22, 12.68, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:31:50.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:31:27
2025-12-26T01:31:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:31:50.734 [DEBUG] [Thread-22021] [transport.py] [_log()] starting thread (client mode): 0xb95587c0
2025-12-26T01:31:50.734 [DEBUG] [Thread-22021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:31:50.753 [DEBUG] [Thread-22021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:31:50.753 [INFO] [Thread-22021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:31:50.756 [DEBUG] [Thread-22021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:31:50.756 [DEBUG] [Thread-22021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:31:50.756 [DEBUG] [Thread-22021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] client lang: <none>
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] server lang: <none>
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] kex follows: False
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] Compression: none
2025-12-26T01:31:50.757 [DEBUG] [Thread-22021] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:31:50.775 [DEBUG] [Thread-22021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:31:50.775 [DEBUG] [Thread-22021] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:31:50.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:31:50.776 [DEBUG] [Thread-22021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:31:50.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:31:50.778 [DEBUG] [Thread-22021] [transport.py] [_log()] userauth is OK
2025-12-26T01:31:50.778 [DEBUG] [Thread-22021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:31:50.779 [DEBUG] [Thread-22021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:31:50.779 [DEBUG] [Thread-22021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:31:50.779 [DEBUG] [Thread-22021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:31:50.800 [INFO] [Thread-22021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:31:50.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:31:51.468 [DEBUG] [Thread-22021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:31:51.469 [DEBUG] [Thread-22021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:31:51.469 [DEBUG] [Thread-22021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:31:51.510 [DEBUG] [Thread-22021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:31:51.510 [DEBUG] [Thread-22021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:31:51.514 [DEBUG] [Thread-22021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:31:51.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:31:51.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:31:51.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:31:51.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:31:51.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:31:51.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:31:51.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:31:51.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:31:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:31:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.979921 -999.00  +12.80  10.88     85  +10.40 1 1 1 2 1     0    0 3.10 29.32 ZNESW 10.9 10.9 189.6 15.1 13.2 -23.2 13.1 -23.0 12.9 -21.1 13.2 -22.3
2025-12-26T01:31:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:31:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:31:51.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.979921
2025-12-26T01:31:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:31:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:31:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:31:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:31:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:31:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:31:27', tmtdew=2.83, humidity=82.91, cloud=0.0, wind=17.22, temperature=12.68, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:31:05.174', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:30:00')
2025-12-26T01:31:51.540 [DEBUG] [Thread-22021] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:31:51.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-26T01:31:51.634 [DEBUG] [Thread-22024] [transport.py] [_log()] starting thread (client mode): 0xbbfcd390
2025-12-26T01:31:51.635 [DEBUG] [Thread-22024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:31:51.649 [DEBUG] [Thread-22024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:31:51.649 [INFO] [Thread-22024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] client lang: <none>
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] server lang: <none>
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] kex follows: False
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:31:51.657 [DEBUG] [Thread-22024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:31:51.658 [DEBUG] [Thread-22024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:31:51.658 [DEBUG] [Thread-22024] [transport.py] [_log()] Compression: none
2025-12-26T01:31:51.658 [DEBUG] [Thread-22024] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:31:51.719 [DEBUG] [Thread-22024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:31:51.720 [DEBUG] [Thread-22024] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:31:51.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:31:51.721 [DEBUG] [Thread-22024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:31:51.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:31:51.775 [DEBUG] [Thread-22024] [transport.py] [_log()] userauth is OK
2025-12-26T01:31:51.776 [DEBUG] [Thread-22024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:31:51.776 [DEBUG] [Thread-22024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:31:51.776 [DEBUG] [Thread-22024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:31:51.776 [DEBUG] [Thread-22024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:31:51.794 [INFO] [Thread-22024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:31:51.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-26T01:31:51.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:31:52.637 [DEBUG] [Thread-22024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:31:52.637 [DEBUG] [Thread-22024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:31:52.685 [DEBUG] [Thread-22024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:31:52.685 [DEBUG] [Thread-22024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:31:52.695 [DEBUG] [Thread-22024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:31:52.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:31:52.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-26T01:31:52.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:31:52.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:31:52.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:31:52.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:31:52.735 [DEBUG] [Thread-22024] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:31:56.055 [DEBUG] [Thread-22026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:11.107 [DEBUG] [Thread-22027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:22.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:32:22.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:32:22.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-26T01:32:23.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 31, 59), 2.78, 82.88, 0.0, 17.54, 12.63, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:32:23.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:31:59
2025-12-26T01:32:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:32:23.728 [DEBUG] [Thread-22028] [transport.py] [_log()] starting thread (client mode): 0xbbfcdc30
2025-12-26T01:32:23.728 [DEBUG] [Thread-22028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:32:23.749 [DEBUG] [Thread-22028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:32:23.749 [INFO] [Thread-22028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] client lang: <none>
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] server lang: <none>
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] kex follows: False
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:32:23.752 [DEBUG] [Thread-22028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:32:23.753 [DEBUG] [Thread-22028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:32:23.753 [DEBUG] [Thread-22028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:32:23.753 [DEBUG] [Thread-22028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:32:23.753 [DEBUG] [Thread-22028] [transport.py] [_log()] Compression: none
2025-12-26T01:32:23.753 [DEBUG] [Thread-22028] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:32:23.770 [DEBUG] [Thread-22028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:32:23.770 [DEBUG] [Thread-22028] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:32:23.771 [DEBUG] [Thread-22028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:32:23.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:32:23.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:32:23.773 [DEBUG] [Thread-22028] [transport.py] [_log()] userauth is OK
2025-12-26T01:32:23.773 [DEBUG] [Thread-22028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:32:23.774 [DEBUG] [Thread-22028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:32:23.774 [DEBUG] [Thread-22028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:32:23.774 [DEBUG] [Thread-22028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:32:23.799 [INFO] [Thread-22028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:32:23.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:32:24.414 [DEBUG] [Thread-22028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:32:24.414 [DEBUG] [Thread-22028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:32:24.414 [DEBUG] [Thread-22028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:32:24.455 [DEBUG] [Thread-22028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:32:24.455 [DEBUG] [Thread-22028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:32:24.457 [DEBUG] [Thread-22028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:32:24.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:32:24.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:32:24.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:32:24.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:32:24.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:32:24.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:32:24.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:32:24.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:32:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:32:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.980616 -999.00  +12.70  14.98     85  +10.40 1 1 1 2 1     0    0 3.08 27.73 ZNESW 15.0 15.0 187.0 19.3 13.2 -23.4 13.1 -23.2 12.8 -21.1 13.2 -22.4
2025-12-26T01:32:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:32:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:32:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.980616
2025-12-26T01:32:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:32:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:32:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:32:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:32:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:32:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:31:59', tmtdew=2.78, humidity=82.88, cloud=0.0, wind=17.54, temperature=12.63, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:32:05.222', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:30:00')
2025-12-26T01:32:24.477 [DEBUG] [Thread-22028] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:32:24.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-26T01:32:24.571 [DEBUG] [Thread-22031] [transport.py] [_log()] starting thread (client mode): 0xb6b29c60
2025-12-26T01:32:24.571 [DEBUG] [Thread-22031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:32:24.586 [DEBUG] [Thread-22031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:32:24.586 [INFO] [Thread-22031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:32:24.593 [DEBUG] [Thread-22031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] client lang: <none>
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] server lang: <none>
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] kex follows: False
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] Compression: none
2025-12-26T01:32:24.594 [DEBUG] [Thread-22031] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:32:24.654 [DEBUG] [Thread-22031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:32:24.655 [DEBUG] [Thread-22031] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:32:24.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:32:24.656 [DEBUG] [Thread-22031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:32:24.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:32:24.713 [DEBUG] [Thread-22031] [transport.py] [_log()] userauth is OK
2025-12-26T01:32:24.714 [DEBUG] [Thread-22031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:32:24.714 [DEBUG] [Thread-22031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:32:24.714 [DEBUG] [Thread-22031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:32:24.714 [DEBUG] [Thread-22031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:32:24.733 [INFO] [Thread-22031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:32:24.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-26T01:32:24.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:32:25.559 [DEBUG] [Thread-22031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:32:25.559 [DEBUG] [Thread-22031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:32:25.606 [DEBUG] [Thread-22031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:32:25.606 [DEBUG] [Thread-22031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:32:25.617 [DEBUG] [Thread-22031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:32:25.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:32:25.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-26T01:32:25.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-26T01:32:25.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:32:25.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:32:25.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:32:25.654 [DEBUG] [Thread-22031] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:32:26.141 [DEBUG] [Thread-22033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:36.562 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:36.563 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:41.195 [DEBUG] [Thread-22034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:43.536 [DEBUG] [Thread-22035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:55.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:32:55.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:32:55.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-26T01:32:56.226 [DEBUG] [Thread-22036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:32:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 32, 31), 2.78, 82.89, 0.0, 18.16, 12.65, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:32:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:32:31
2025-12-26T01:32:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:32:56.647 [DEBUG] [Thread-22037] [transport.py] [_log()] starting thread (client mode): 0xb6b28070
2025-12-26T01:32:56.647 [DEBUG] [Thread-22037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:32:56.667 [DEBUG] [Thread-22037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:32:56.667 [INFO] [Thread-22037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:32:56.670 [DEBUG] [Thread-22037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] client lang: <none>
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] server lang: <none>
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] kex follows: False
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:32:56.671 [DEBUG] [Thread-22037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:32:56.672 [DEBUG] [Thread-22037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:32:56.672 [DEBUG] [Thread-22037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:32:56.672 [DEBUG] [Thread-22037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:32:56.672 [DEBUG] [Thread-22037] [transport.py] [_log()] Compression: none
2025-12-26T01:32:56.672 [DEBUG] [Thread-22037] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:32:56.688 [DEBUG] [Thread-22037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:32:56.689 [DEBUG] [Thread-22037] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:32:56.689 [DEBUG] [Thread-22037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:32:56.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:32:56.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:32:56.733 [DEBUG] [Thread-22037] [transport.py] [_log()] userauth is OK
2025-12-26T01:32:56.733 [DEBUG] [Thread-22037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:32:56.733 [DEBUG] [Thread-22037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:32:56.734 [DEBUG] [Thread-22037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:32:56.734 [DEBUG] [Thread-22037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:32:56.766 [INFO] [Thread-22037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:32:56.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:32:57.396 [DEBUG] [Thread-22037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:32:57.396 [DEBUG] [Thread-22037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:32:57.396 [DEBUG] [Thread-22037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:32:57.438 [DEBUG] [Thread-22037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:32:57.438 [DEBUG] [Thread-22037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:32:57.441 [DEBUG] [Thread-22037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:32:57.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:32:57.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:32:57.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:32:57.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:32:57.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:32:57.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:32:57.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:32:57.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:32:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:32:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.980963 -999.00  +12.60   9.83     86  +10.40 1 1 1 2 1     0    0 3.06 27.00 ZNESW 9.8 9.8 183.0 14.6 13.2 -23.4 13.0 -23.3 12.8 -21.1 13.2 -22.3
2025-12-26T01:32:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:32:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:32:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.980963
2025-12-26T01:32:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:32:57.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:32:57.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:32:57.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:32:57.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:32:57.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:32:31', tmtdew=2.78, humidity=82.89, cloud=0.0, wind=18.16, temperature=12.65, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:32:35.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:30:00')
2025-12-26T01:32:57.467 [DEBUG] [Thread-22037] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:32:57.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-26T01:32:57.561 [DEBUG] [Thread-22040] [transport.py] [_log()] starting thread (client mode): 0xb95f3be0
2025-12-26T01:32:57.562 [DEBUG] [Thread-22040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:32:57.576 [DEBUG] [Thread-22040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:32:57.576 [INFO] [Thread-22040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] client lang: <none>
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] server lang: <none>
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] kex follows: False
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:32:57.584 [DEBUG] [Thread-22040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:32:57.585 [DEBUG] [Thread-22040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:32:57.585 [DEBUG] [Thread-22040] [transport.py] [_log()] Compression: none
2025-12-26T01:32:57.585 [DEBUG] [Thread-22040] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:32:57.644 [DEBUG] [Thread-22040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:32:57.645 [DEBUG] [Thread-22040] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:32:57.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:32:57.646 [DEBUG] [Thread-22040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:32:57.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:32:57.700 [DEBUG] [Thread-22040] [transport.py] [_log()] userauth is OK
2025-12-26T01:32:57.701 [DEBUG] [Thread-22040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:32:57.701 [DEBUG] [Thread-22040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:32:57.701 [DEBUG] [Thread-22040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:32:57.701 [DEBUG] [Thread-22040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:32:57.719 [INFO] [Thread-22040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:32:57.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-26T01:32:57.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:32:58.561 [DEBUG] [Thread-22040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:32:58.561 [DEBUG] [Thread-22040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:32:58.609 [DEBUG] [Thread-22040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:32:58.610 [DEBUG] [Thread-22040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:32:58.619 [DEBUG] [Thread-22040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:32:58.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:32:58.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:32:58.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:32:58.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:32:58.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:32:58.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:32:58.656 [DEBUG] [Thread-22040] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:33:11.261 [DEBUG] [Thread-22042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:33:26.304 [DEBUG] [Thread-22043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:33:28.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:33:28.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:33:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:33:29.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 33, 3), 2.78, 82.89, 0.0, 16.92, 12.67, 0, 1, 0, 2, 0, 0),)
2025-12-26T01:33:29.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:33:03
2025-12-26T01:33:29.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:33:29.647 [DEBUG] [Thread-22044] [transport.py] [_log()] starting thread (client mode): 0xb95791e0
2025-12-26T01:33:29.647 [DEBUG] [Thread-22044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:33:29.667 [DEBUG] [Thread-22044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:33:29.667 [INFO] [Thread-22044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:33:29.668 [DEBUG] [Thread-22044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:33:29.668 [DEBUG] [Thread-22044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:33:29.668 [DEBUG] [Thread-22044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] client lang: <none>
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] server lang: <none>
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] kex follows: False
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:33:29.669 [DEBUG] [Thread-22044] [transport.py] [_log()] Compression: none
2025-12-26T01:33:29.670 [DEBUG] [Thread-22044] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:33:29.683 [DEBUG] [Thread-22044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:33:29.684 [DEBUG] [Thread-22044] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:33:29.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:33:29.685 [DEBUG] [Thread-22044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:33:29.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:33:29.688 [DEBUG] [Thread-22044] [transport.py] [_log()] userauth is OK
2025-12-26T01:33:29.688 [DEBUG] [Thread-22044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:33:29.688 [DEBUG] [Thread-22044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:33:29.688 [DEBUG] [Thread-22044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:33:29.688 [DEBUG] [Thread-22044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:33:29.711 [INFO] [Thread-22044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:33:29.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:33:30.310 [DEBUG] [Thread-22044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:33:30.310 [DEBUG] [Thread-22044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:33:30.310 [DEBUG] [Thread-22044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:33:30.351 [DEBUG] [Thread-22044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:33:30.351 [DEBUG] [Thread-22044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:33:30.354 [DEBUG] [Thread-22044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:33:30.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:33:30.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:33:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:33:30.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:33:30.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:33:30.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:33:30.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:33:30.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:33:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:33:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.981310 -999.00  +12.60  12.10     86  +10.40 1 1 1 2 1     0    0 3.08 26.76 ZNESW 12.1 12.1 171.4 14.3 13.1 -23.4 13.0 -23.2 12.9 -21.3 13.1 -22.3
2025-12-26T01:33:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:33:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:33:30.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.981310
2025-12-26T01:33:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:33:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:33:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:33:30.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:33:30.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:33:30.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:33:03', tmtdew=2.78, humidity=82.89, cloud=0.0, wind=16.92, temperature=12.67, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:33:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:30:00')
2025-12-26T01:33:30.379 [DEBUG] [Thread-22044] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:33:30.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:33:30.473 [DEBUG] [Thread-22047] [transport.py] [_log()] starting thread (client mode): 0xb9578d00
2025-12-26T01:33:30.473 [DEBUG] [Thread-22047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:33:30.486 [DEBUG] [Thread-22047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:33:30.486 [INFO] [Thread-22047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:33:30.494 [DEBUG] [Thread-22047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:33:30.494 [DEBUG] [Thread-22047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:33:30.494 [DEBUG] [Thread-22047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:33:30.494 [DEBUG] [Thread-22047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:33:30.494 [DEBUG] [Thread-22047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] client lang: <none>
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] server lang: <none>
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] kex follows: False
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] Compression: none
2025-12-26T01:33:30.495 [DEBUG] [Thread-22047] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:33:30.554 [DEBUG] [Thread-22047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:33:30.554 [DEBUG] [Thread-22047] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:33:30.555 [DEBUG] [Thread-22047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:33:30.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:33:30.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:33:30.611 [DEBUG] [Thread-22047] [transport.py] [_log()] userauth is OK
2025-12-26T01:33:30.611 [DEBUG] [Thread-22047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:33:30.611 [DEBUG] [Thread-22047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:33:30.611 [DEBUG] [Thread-22047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:33:30.611 [DEBUG] [Thread-22047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:33:30.630 [INFO] [Thread-22047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:33:30.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-26T01:33:30.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:33:31.477 [DEBUG] [Thread-22047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:33:31.477 [DEBUG] [Thread-22047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:33:31.525 [DEBUG] [Thread-22047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:33:31.525 [DEBUG] [Thread-22047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:33:31.534 [DEBUG] [Thread-22047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:33:31.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:33:31.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:33:31.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-26T01:33:31.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:33:31.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:33:31.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:33:31.569 [DEBUG] [Thread-22047] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:33:36.765 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:33:36.766 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:33:41.341 [DEBUG] [Thread-22049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:33:43.615 [DEBUG] [Thread-22050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:33:56.392 [DEBUG] [Thread-22051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:01.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:34:01.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:34:01.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-26T01:34:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 33, 35), 2.62, 83.94, 0.0, 18.16, 12.43, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:34:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:33:35
2025-12-26T01:34:02.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:34:02.629 [DEBUG] [Thread-22052] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf90
2025-12-26T01:34:02.629 [DEBUG] [Thread-22052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:34:02.649 [DEBUG] [Thread-22052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:34:02.649 [INFO] [Thread-22052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:34:02.652 [DEBUG] [Thread-22052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] client lang: <none>
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] server lang: <none>
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] kex follows: False
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] Compression: none
2025-12-26T01:34:02.653 [DEBUG] [Thread-22052] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:34:02.668 [DEBUG] [Thread-22052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:34:02.668 [DEBUG] [Thread-22052] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:34:02.668 [DEBUG] [Thread-22052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:34:02.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:34:02.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:34:02.669 [DEBUG] [Thread-22052] [transport.py] [_log()] userauth is OK
2025-12-26T01:34:02.669 [DEBUG] [Thread-22052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:34:02.669 [DEBUG] [Thread-22052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:34:02.669 [DEBUG] [Thread-22052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:34:02.669 [DEBUG] [Thread-22052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:34:02.678 [INFO] [Thread-22052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:34:02.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:34:03.293 [DEBUG] [Thread-22052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:34:03.293 [DEBUG] [Thread-22052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:34:03.293 [DEBUG] [Thread-22052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:34:03.333 [DEBUG] [Thread-22052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:34:03.333 [DEBUG] [Thread-22052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:34:03.335 [DEBUG] [Thread-22052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:34:03.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:34:03.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:34:03.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:34:03.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:34:03.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:34:03.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:34:03.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.981657 -999.00  +12.50  14.62     86  +10.40 1 1 1 2 1     0    0 3.06 26.16 ZNESW 14.6 14.6 184.8 16.6 13.1 -23.5 13.0 -22.9 12.8 -21.3 13.1 -22.6
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.981657
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:34:03.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:33:35', tmtdew=2.62, humidity=83.94, cloud=0.0, wind=18.16, temperature=12.43, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:33:35.165', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:30:00')
2025-12-26T01:34:03.354 [DEBUG] [Thread-22052] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:34:03.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-26T01:34:03.438 [DEBUG] [Thread-22055] [transport.py] [_log()] starting thread (client mode): 0xb95f3520
2025-12-26T01:34:03.438 [DEBUG] [Thread-22055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:34:03.452 [DEBUG] [Thread-22055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:34:03.452 [INFO] [Thread-22055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] client lang: <none>
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] server lang: <none>
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] kex follows: False
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:34:03.460 [DEBUG] [Thread-22055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:34:03.461 [DEBUG] [Thread-22055] [transport.py] [_log()] Compression: none
2025-12-26T01:34:03.461 [DEBUG] [Thread-22055] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:34:03.516 [DEBUG] [Thread-22055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:34:03.516 [DEBUG] [Thread-22055] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:34:03.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:34:03.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:34:03.517 [DEBUG] [Thread-22055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:34:03.573 [DEBUG] [Thread-22055] [transport.py] [_log()] userauth is OK
2025-12-26T01:34:03.573 [DEBUG] [Thread-22055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:34:03.573 [DEBUG] [Thread-22055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:34:03.573 [DEBUG] [Thread-22055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:34:03.573 [DEBUG] [Thread-22055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:34:03.591 [INFO] [Thread-22055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:34:03.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-26T01:34:03.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:34:04.418 [DEBUG] [Thread-22055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:34:04.418 [DEBUG] [Thread-22055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:34:04.466 [DEBUG] [Thread-22055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:34:04.466 [DEBUG] [Thread-22055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:34:04.474 [DEBUG] [Thread-22055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:34:04.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:34:04.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')
2025-12-26T01:34:04.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:34:04.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:34:04.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:34:04.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:34:04.505 [DEBUG] [Thread-22055] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:34:11.429 [DEBUG] [Thread-22057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:26.484 [DEBUG] [Thread-22058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:34.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:34:34.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:34:34.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-26T01:34:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 34, 8), 2.59, 84.09, 0.0, 17.36, 12.4, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:34:35.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:34:08
2025-12-26T01:34:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:34:35.527 [DEBUG] [Thread-22059] [transport.py] [_log()] starting thread (client mode): 0xb9591240
2025-12-26T01:34:35.527 [DEBUG] [Thread-22059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:34:35.547 [DEBUG] [Thread-22059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:34:35.547 [INFO] [Thread-22059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] client lang: <none>
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] server lang: <none>
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] kex follows: False
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] Compression: none
2025-12-26T01:34:35.549 [DEBUG] [Thread-22059] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:34:35.561 [DEBUG] [Thread-22059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:34:35.561 [DEBUG] [Thread-22059] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:34:35.561 [DEBUG] [Thread-22059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:34:35.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:34:35.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:34:35.563 [DEBUG] [Thread-22059] [transport.py] [_log()] userauth is OK
2025-12-26T01:34:35.563 [DEBUG] [Thread-22059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:34:35.563 [DEBUG] [Thread-22059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:34:35.563 [DEBUG] [Thread-22059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:34:35.563 [DEBUG] [Thread-22059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:34:35.580 [INFO] [Thread-22059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:34:35.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:34:36.178 [DEBUG] [Thread-22059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:34:36.179 [DEBUG] [Thread-22059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:34:36.180 [DEBUG] [Thread-22059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:34:36.220 [DEBUG] [Thread-22059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:34:36.220 [DEBUG] [Thread-22059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:34:36.222 [DEBUG] [Thread-22059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:34:36.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:34:36.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:34:36.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:34:36.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:34:36.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:34:36.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:34:36.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:34:36.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:34:36.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:34:36.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.982004 -999.00  +12.40  11.76     87  +10.40 1 1 1 2 1     0    0 2.97 24.08 ZNESW 11.8 11.8 172.2 15.7 13.1 -23.6 12.9 -23.6 12.8 -21.3 13.1 -22.6
2025-12-26T01:34:36.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:34:36.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:34:36.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.982004
2025-12-26T01:34:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:34:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:34:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:34:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:34:36.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:34:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:34:08', tmtdew=2.59, humidity=84.09, cloud=0.0, wind=17.36, temperature=12.4, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:34:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:33:00')
2025-12-26T01:34:36.244 [DEBUG] [Thread-22059] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:34:36.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-26T01:34:36.341 [DEBUG] [Thread-22062] [transport.py] [_log()] starting thread (client mode): 0xb9592c20
2025-12-26T01:34:36.342 [DEBUG] [Thread-22062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:34:36.356 [DEBUG] [Thread-22062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:34:36.356 [INFO] [Thread-22062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] client lang: <none>
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] server lang: <none>
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] kex follows: False
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] Compression: none
2025-12-26T01:34:36.364 [DEBUG] [Thread-22062] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:34:36.424 [DEBUG] [Thread-22062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:34:36.424 [DEBUG] [Thread-22062] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:34:36.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:34:36.426 [DEBUG] [Thread-22062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:34:36.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:34:36.480 [DEBUG] [Thread-22062] [transport.py] [_log()] userauth is OK
2025-12-26T01:34:36.481 [DEBUG] [Thread-22062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:34:36.481 [DEBUG] [Thread-22062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:34:36.481 [DEBUG] [Thread-22062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:34:36.481 [DEBUG] [Thread-22062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:34:36.499 [INFO] [Thread-22062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:34:36.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-26T01:34:36.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:34:36.972 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:36.973 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:37.336 [DEBUG] [Thread-22062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:34:37.337 [DEBUG] [Thread-22062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:34:37.385 [DEBUG] [Thread-22062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:34:37.385 [DEBUG] [Thread-22062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:34:37.394 [DEBUG] [Thread-22062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:34:37.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:34:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:34:37.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:34:37.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:34:37.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:34:37.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:34:37.430 [DEBUG] [Thread-22062] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:34:41.520 [DEBUG] [Thread-22064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:43.686 [DEBUG] [Thread-22065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:34:56.561 [DEBUG] [Thread-22066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:35:07.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:35:07.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-26T01:35:08.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 34, 40), 2.54, 84.61, 0.0, 17.61, 12.32, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:35:08.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:34:40
2025-12-26T01:35:08.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:35:08.435 [DEBUG] [Thread-22067] [transport.py] [_log()] starting thread (client mode): 0xbbfce830
2025-12-26T01:35:08.435 [DEBUG] [Thread-22067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:35:08.454 [DEBUG] [Thread-22067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:35:08.455 [INFO] [Thread-22067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] client lang: <none>
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] server lang: <none>
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] kex follows: False
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] Compression: none
2025-12-26T01:35:08.458 [DEBUG] [Thread-22067] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:35:08.475 [DEBUG] [Thread-22067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:35:08.476 [DEBUG] [Thread-22067] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:35:08.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:35:08.477 [DEBUG] [Thread-22067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:35:08.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:35:08.479 [DEBUG] [Thread-22067] [transport.py] [_log()] userauth is OK
2025-12-26T01:35:08.479 [DEBUG] [Thread-22067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:35:08.479 [DEBUG] [Thread-22067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:35:08.480 [DEBUG] [Thread-22067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:35:08.480 [DEBUG] [Thread-22067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:35:08.504 [INFO] [Thread-22067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:35:08.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:35:11.597 [DEBUG] [Thread-22069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:15.050 [DEBUG] [Thread-22067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:35:15.050 [DEBUG] [Thread-22067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:35:15.050 [DEBUG] [Thread-22067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:35:15.091 [DEBUG] [Thread-22067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:35:15.091 [DEBUG] [Thread-22067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:35:15.093 [DEBUG] [Thread-22067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:35:15.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:35:15.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:35:15.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:35:15.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:35:15.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:35:15.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:35:15.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.982004 -999.00  +12.40  11.76     87  +10.40 1 1 1 2 1     0    0 2.97 24.08 ZNESW 11.8 11.8 172.2 15.7 13.1 -23.6 12.9 -23.6 12.8 -21.3 13.1 -22.6
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.982004
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:35:15.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:34:40', tmtdew=2.54, humidity=84.61, cloud=0.0, wind=17.61, temperature=12.32, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:34:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:33:00')
2025-12-26T01:35:15.126 [DEBUG] [Thread-22067] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:35:15.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-26T01:35:15.209 [DEBUG] [Thread-22071] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-26T01:35:15.210 [DEBUG] [Thread-22071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:35:15.227 [DEBUG] [Thread-22071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:35:15.228 [INFO] [Thread-22071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] client lang: <none>
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] server lang: <none>
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] kex follows: False
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] Compression: none
2025-12-26T01:35:15.235 [DEBUG] [Thread-22071] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:35:15.293 [DEBUG] [Thread-22071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:35:15.293 [DEBUG] [Thread-22071] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:35:15.293 [DEBUG] [Thread-22071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:35:15.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:35:15.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:35:15.350 [DEBUG] [Thread-22071] [transport.py] [_log()] userauth is OK
2025-12-26T01:35:15.350 [DEBUG] [Thread-22071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:35:15.350 [DEBUG] [Thread-22071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:35:15.350 [DEBUG] [Thread-22071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:35:15.350 [DEBUG] [Thread-22071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:35:15.364 [INFO] [Thread-22071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:35:15.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-26T01:35:15.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:35:16.184 [DEBUG] [Thread-22071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:35:16.184 [DEBUG] [Thread-22071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:35:16.232 [DEBUG] [Thread-22071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:35:16.232 [DEBUG] [Thread-22071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:35:16.240 [DEBUG] [Thread-22071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:35:16.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:35:16.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:35:16.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:35:16.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:35:16.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:35:16.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:35:16.271 [DEBUG] [Thread-22071] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:35:26.633 [DEBUG] [Thread-22073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:27.706 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:30.902 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:35.968 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:37.175 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:37.177 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:41.400 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:41.681 [DEBUG] [Thread-22074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:43.762 [DEBUG] [Thread-22075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:35:46.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:35:46.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:35:46.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-26T01:35:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 35, 14), 2.52, 84.74, 0.0, 17.54, 12.28, 0, 1, 2, 2, 0, 0),)
2025-12-26T01:35:46.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:35:14
2025-12-26T01:35:47.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:35:47.294 [DEBUG] [Thread-22076] [transport.py] [_log()] starting thread (client mode): 0xb955a3e0
2025-12-26T01:35:47.294 [DEBUG] [Thread-22076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:35:47.313 [DEBUG] [Thread-22076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:35:47.313 [INFO] [Thread-22076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] client lang: <none>
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] server lang: <none>
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] kex follows: False
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] Compression: none
2025-12-26T01:35:47.317 [DEBUG] [Thread-22076] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:35:47.332 [DEBUG] [Thread-22076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:35:47.332 [DEBUG] [Thread-22076] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:35:47.332 [DEBUG] [Thread-22076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:35:47.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:35:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:35:47.333 [DEBUG] [Thread-22076] [transport.py] [_log()] userauth is OK
2025-12-26T01:35:47.333 [DEBUG] [Thread-22076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:35:47.333 [DEBUG] [Thread-22076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:35:47.333 [DEBUG] [Thread-22076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:35:47.333 [DEBUG] [Thread-22076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:35:47.342 [INFO] [Thread-22076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:35:47.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:35:47.933 [DEBUG] [Thread-22076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:35:47.933 [DEBUG] [Thread-22076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:35:47.933 [DEBUG] [Thread-22076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:35:47.974 [DEBUG] [Thread-22076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:35:47.974 [DEBUG] [Thread-22076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:35:47.976 [DEBUG] [Thread-22076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:35:47.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:35:47.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:35:47.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:35:47.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:35:47.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:35:47.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:35:47.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.982352 -999.00  +12.40  12.15     87  +10.30 1 1 1 2 1     0    0 2.91 22.63 ZNESW 12.2 12.2 200.2 14.5 13.0 -23.4 12.9 -23.5 12.7 -21.4 13.1 -22.5
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.982352
2025-12-26T01:35:47.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:35:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:35:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:35:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:35:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:35:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:35:14', tmtdew=2.52, humidity=84.74, cloud=0.0, wind=17.54, temperature=12.28, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:34:35.213', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:33:00')
2025-12-26T01:35:47.996 [DEBUG] [Thread-22076] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:35:48.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-26T01:35:48.080 [DEBUG] [Thread-22079] [transport.py] [_log()] starting thread (client mode): 0xbbfced10
2025-12-26T01:35:48.080 [DEBUG] [Thread-22079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:35:48.095 [DEBUG] [Thread-22079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:35:48.095 [INFO] [Thread-22079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] client lang: <none>
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] server lang: <none>
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] kex follows: False
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] Compression: none
2025-12-26T01:35:48.103 [DEBUG] [Thread-22079] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:35:48.160 [DEBUG] [Thread-22079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:35:48.160 [DEBUG] [Thread-22079] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:35:48.160 [DEBUG] [Thread-22079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:35:48.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:35:48.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:35:48.219 [DEBUG] [Thread-22079] [transport.py] [_log()] userauth is OK
2025-12-26T01:35:48.219 [DEBUG] [Thread-22079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:35:48.219 [DEBUG] [Thread-22079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:35:48.219 [DEBUG] [Thread-22079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:35:48.219 [DEBUG] [Thread-22079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:35:48.233 [INFO] [Thread-22079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:35:48.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-26T01:35:48.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:35:49.043 [DEBUG] [Thread-22079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:35:49.043 [DEBUG] [Thread-22079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:35:49.090 [DEBUG] [Thread-22079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:35:49.091 [DEBUG] [Thread-22079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:35:49.099 [DEBUG] [Thread-22079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:35:49.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:35:49.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:35:49.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-26T01:35:49.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:35:49.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:35:49.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:35:49.133 [DEBUG] [Thread-22079] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:35:56.714 [DEBUG] [Thread-22081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:00.824 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:05.217 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:11.762 [DEBUG] [Thread-22082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:19.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:36:19.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:36:19.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-26T01:36:19.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 35, 46), 2.38, 85.46, 0.0, 16.43, 12.15, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:36:19.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:35:46
2025-12-26T01:36:20.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:36:20.194 [DEBUG] [Thread-22083] [transport.py] [_log()] starting thread (client mode): 0xb6b29f60
2025-12-26T01:36:20.194 [DEBUG] [Thread-22083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:36:20.214 [DEBUG] [Thread-22083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:36:20.215 [INFO] [Thread-22083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] client lang: <none>
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] server lang: <none>
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] kex follows: False
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] Compression: none
2025-12-26T01:36:20.218 [DEBUG] [Thread-22083] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:36:20.233 [DEBUG] [Thread-22083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:36:20.234 [DEBUG] [Thread-22083] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:36:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:36:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:36:20.234 [DEBUG] [Thread-22083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:36:20.234 [DEBUG] [Thread-22083] [transport.py] [_log()] userauth is OK
2025-12-26T01:36:20.235 [DEBUG] [Thread-22083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:36:20.235 [DEBUG] [Thread-22083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:36:20.235 [DEBUG] [Thread-22083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:36:20.235 [DEBUG] [Thread-22083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:36:20.249 [INFO] [Thread-22083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:36:20.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:36:20.985 [DEBUG] [Thread-22083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:36:20.985 [DEBUG] [Thread-22083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:36:20.986 [DEBUG] [Thread-22083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:36:21.026 [DEBUG] [Thread-22083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:36:21.026 [DEBUG] [Thread-22083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:36:21.028 [DEBUG] [Thread-22083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:36:21.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:36:21.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:36:21.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:36:21.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:36:21.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:36:21.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:36:21.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:36:21.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:36:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:36:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.983045 -999.00  +12.30   8.93     87  +10.30 1 1 1 2 1     0    0 2.77 19.57 ZNESW 8.9 8.9 187.0 11.6 13.0 -23.4 12.9 -23.1 12.7 -21.4 13.0 -22.4
2025-12-26T01:36:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:36:21.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:36:21.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.983045
2025-12-26T01:36:21.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:36:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:36:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:36:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:36:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:36:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:35:46', tmtdew=2.38, humidity=85.46, cloud=0.0, wind=16.43, temperature=12.15, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:35:35.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:33:00')
2025-12-26T01:36:21.053 [DEBUG] [Thread-22083] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:36:21.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-26T01:36:21.148 [DEBUG] [Thread-22086] [transport.py] [_log()] starting thread (client mode): 0xb95f1e40
2025-12-26T01:36:21.148 [DEBUG] [Thread-22086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:36:21.163 [DEBUG] [Thread-22086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:36:21.163 [INFO] [Thread-22086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:21.172 [DEBUG] [Thread-22086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] client lang: <none>
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] server lang: <none>
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] kex follows: False
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] Compression: none
2025-12-26T01:36:21.173 [DEBUG] [Thread-22086] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:36:21.230 [DEBUG] [Thread-22086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:36:21.231 [DEBUG] [Thread-22086] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:36:21.231 [DEBUG] [Thread-22086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:36:21.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:36:21.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:36:21.290 [DEBUG] [Thread-22086] [transport.py] [_log()] userauth is OK
2025-12-26T01:36:21.290 [DEBUG] [Thread-22086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:36:21.290 [DEBUG] [Thread-22086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:36:21.290 [DEBUG] [Thread-22086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:36:21.291 [DEBUG] [Thread-22086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:36:21.309 [INFO] [Thread-22086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:36:21.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-26T01:36:21.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:36:22.135 [DEBUG] [Thread-22086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:36:22.135 [DEBUG] [Thread-22086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:36:22.184 [DEBUG] [Thread-22086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:36:22.184 [DEBUG] [Thread-22086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:36:22.192 [DEBUG] [Thread-22086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:36:22.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:36:22.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:36:22.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:36:22.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:36:22.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:36:22.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:36:22.227 [DEBUG] [Thread-22086] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:36:24.623 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:26.802 [DEBUG] [Thread-22088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:29.045 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:35.934 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:37.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:37.377 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:40.316 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:41.860 [DEBUG] [Thread-22089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:43.817 [DEBUG] [Thread-22090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:36:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:36:52.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:36:52.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-26T01:36:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 36, 18), 2.36, 85.58, 0.0, 16.46, 12.09, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:36:52.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:36:18
2025-12-26T01:36:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:36:53.278 [DEBUG] [Thread-22091] [transport.py] [_log()] starting thread (client mode): 0xb955a500
2025-12-26T01:36:53.278 [DEBUG] [Thread-22091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:36:53.300 [DEBUG] [Thread-22091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:36:53.300 [INFO] [Thread-22091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] client lang: <none>
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] server lang: <none>
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] kex follows: False
2025-12-26T01:36:53.303 [DEBUG] [Thread-22091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:36:53.304 [DEBUG] [Thread-22091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:36:53.304 [DEBUG] [Thread-22091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:36:53.304 [DEBUG] [Thread-22091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:36:53.304 [DEBUG] [Thread-22091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:36:53.304 [DEBUG] [Thread-22091] [transport.py] [_log()] Compression: none
2025-12-26T01:36:53.304 [DEBUG] [Thread-22091] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:36:53.318 [DEBUG] [Thread-22091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:36:53.318 [DEBUG] [Thread-22091] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:36:53.318 [DEBUG] [Thread-22091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:36:53.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:36:53.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:36:53.319 [DEBUG] [Thread-22091] [transport.py] [_log()] userauth is OK
2025-12-26T01:36:53.319 [DEBUG] [Thread-22091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:36:53.319 [DEBUG] [Thread-22091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:36:53.319 [DEBUG] [Thread-22091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:36:53.319 [DEBUG] [Thread-22091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:36:53.335 [INFO] [Thread-22091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:36:53.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:36:53.963 [DEBUG] [Thread-22091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:36:53.963 [DEBUG] [Thread-22091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:36:53.963 [DEBUG] [Thread-22091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:36:54.004 [DEBUG] [Thread-22091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:36:54.004 [DEBUG] [Thread-22091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:36:54.007 [DEBUG] [Thread-22091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:36:54.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:36:54.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:36:54.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:36:54.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:36:54.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:36:54.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:36:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.983393 -999.00  +12.30   7.60     87  +10.30 1 1 1 2 1     0    0 2.72 17.13 ZNESW 7.6 7.6 188.8 13.0 13.0 -23.5 12.8 -22.9 12.7 -21.4 13.0 -22.4
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.983393
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:36:54.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:36:18', tmtdew=2.36, humidity=85.58, cloud=0.0, wind=16.46, temperature=12.09, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:36:05.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:33:00')
2025-12-26T01:36:54.022 [DEBUG] [Thread-22091] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:36:54.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-26T01:36:54.105 [DEBUG] [Thread-22094] [transport.py] [_log()] starting thread (client mode): 0xb955ba60
2025-12-26T01:36:54.105 [DEBUG] [Thread-22094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:36:54.120 [DEBUG] [Thread-22094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:36:54.120 [INFO] [Thread-22094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:36:54.128 [DEBUG] [Thread-22094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:36:54.128 [DEBUG] [Thread-22094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:36:54.128 [DEBUG] [Thread-22094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:36:54.128 [DEBUG] [Thread-22094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:54.128 [DEBUG] [Thread-22094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] client lang: <none>
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] server lang: <none>
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] kex follows: False
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:36:54.129 [DEBUG] [Thread-22094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:36:54.130 [DEBUG] [Thread-22094] [transport.py] [_log()] Compression: none
2025-12-26T01:36:54.130 [DEBUG] [Thread-22094] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:36:54.188 [DEBUG] [Thread-22094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:36:54.188 [DEBUG] [Thread-22094] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:36:54.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:36:54.190 [DEBUG] [Thread-22094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:36:54.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:36:54.243 [DEBUG] [Thread-22094] [transport.py] [_log()] userauth is OK
2025-12-26T01:36:54.243 [DEBUG] [Thread-22094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:36:54.244 [DEBUG] [Thread-22094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:36:54.244 [DEBUG] [Thread-22094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:36:54.244 [DEBUG] [Thread-22094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:36:54.263 [INFO] [Thread-22094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:36:54.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-26T01:36:54.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:36:55.084 [DEBUG] [Thread-22094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:36:55.084 [DEBUG] [Thread-22094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:36:55.132 [DEBUG] [Thread-22094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:36:55.132 [DEBUG] [Thread-22094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:36:55.141 [DEBUG] [Thread-22094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:36:55.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:36:55.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:36:55.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:36:55.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:36:55.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:36:55.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:36:55.178 [DEBUG] [Thread-22094] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:36:56.898 [DEBUG] [Thread-22096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:11.951 [DEBUG] [Thread-22097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:25.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:37:25.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:37:25.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-26T01:37:25.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 36, 50), 2.22, 86.26, 0.0, 15.74, 12.0, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:37:25.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:36:50
2025-12-26T01:37:26.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:37:26.227 [DEBUG] [Thread-22098] [transport.py] [_log()] starting thread (client mode): 0xb9591ab0
2025-12-26T01:37:26.227 [DEBUG] [Thread-22098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:37:26.247 [DEBUG] [Thread-22098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:37:26.247 [INFO] [Thread-22098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:37:26.250 [DEBUG] [Thread-22098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:37:26.250 [DEBUG] [Thread-22098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] client lang: <none>
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] server lang: <none>
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] kex follows: False
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] Compression: none
2025-12-26T01:37:26.251 [DEBUG] [Thread-22098] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:37:26.268 [DEBUG] [Thread-22098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:37:26.268 [DEBUG] [Thread-22098] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:37:26.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:37:26.269 [DEBUG] [Thread-22098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:37:26.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:37:26.313 [DEBUG] [Thread-22098] [transport.py] [_log()] userauth is OK
2025-12-26T01:37:26.313 [DEBUG] [Thread-22098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:37:26.313 [DEBUG] [Thread-22098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:37:26.313 [DEBUG] [Thread-22098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:37:26.314 [DEBUG] [Thread-22098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:37:26.345 [INFO] [Thread-22098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:37:26.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:37:26.983 [DEBUG] [Thread-22100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:27.094 [DEBUG] [Thread-22098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:37:27.095 [DEBUG] [Thread-22098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:37:27.095 [DEBUG] [Thread-22098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:37:27.136 [DEBUG] [Thread-22098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:37:27.136 [DEBUG] [Thread-22098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:37:27.140 [DEBUG] [Thread-22098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:37:27.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:37:27.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:37:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:37:27.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:37:27.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:37:27.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:37:27.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:37:27.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:37:27.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:37:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.983740 -999.00  +12.20  13.85     88  +10.30 1 1 1 3 1     0    0 2.70 17.11 ZNESW 13.8 13.8 178.2 15.8 12.9 -23.4 12.8 -23.2 12.7 -21.3 12.9 -22.3
2025-12-26T01:37:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:37:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:37:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.983740
2025-12-26T01:37:27.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:37:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:37:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:37:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:37:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:37:27.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:36:50', tmtdew=2.22, humidity=86.26, cloud=0.0, wind=15.74, temperature=12.0, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:36:35.136', atlas_cloud=1, atlas_rain=1, zp_data=[0.161249999999999, 0.12025000000000041, 0.2917500000000004, 0.13799999999999812, 0.1615000000000002, 0.17125000000000057, 0.2789999999999999, 0.8797500000000005, 0.285499999999999, 0.10200000000000031, 0.17225000000000001, 0.1745000000000001, 0.16499999999999915, 0.17574999999999896, 0.27399999999999913, 0.3974999999999991, 0.17225000000000001, 0.2469999999999999, 0.10799999999999876, 0.2362499999999983, 0.24499999999999922, 0.3047499999999985, 0.28525000000000134, 0.3577500000000011, 0.19899999999999984, 0.24900000000000055, 0.27475000000000094, 0.28850000000000087, 0.37650000000000006, 0.3150000000000013, 0.36600000000000144, 0.3990000000000009, 0.31324999999999914], zp_timestamp='2025-12-25T23:33:00')
2025-12-26T01:37:27.166 [DEBUG] [Thread-22098] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:37:27.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:37:27.259 [DEBUG] [Thread-22102] [transport.py] [_log()] starting thread (client mode): 0xbbfcfa30
2025-12-26T01:37:27.259 [DEBUG] [Thread-22102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:37:27.273 [DEBUG] [Thread-22102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:37:27.274 [INFO] [Thread-22102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:37:27.281 [DEBUG] [Thread-22102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:37:27.281 [DEBUG] [Thread-22102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:37:27.281 [DEBUG] [Thread-22102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:37:27.281 [DEBUG] [Thread-22102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:37:27.281 [DEBUG] [Thread-22102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:37:27.281 [DEBUG] [Thread-22102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] client lang: <none>
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] server lang: <none>
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] kex follows: False
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:37:27.282 [DEBUG] [Thread-22102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:37:27.283 [DEBUG] [Thread-22102] [transport.py] [_log()] Compression: none
2025-12-26T01:37:27.283 [DEBUG] [Thread-22102] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:37:27.340 [DEBUG] [Thread-22102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:37:27.340 [DEBUG] [Thread-22102] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:37:27.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:37:27.341 [DEBUG] [Thread-22102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:37:27.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:37:27.399 [DEBUG] [Thread-22102] [transport.py] [_log()] userauth is OK
2025-12-26T01:37:27.400 [DEBUG] [Thread-22102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:37:27.400 [DEBUG] [Thread-22102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:37:27.400 [DEBUG] [Thread-22102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:37:27.400 [DEBUG] [Thread-22102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:37:27.419 [INFO] [Thread-22102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:37:27.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-26T01:37:27.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:37:28.218 [DEBUG] [Thread-22102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:37:28.218 [DEBUG] [Thread-22102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:37:28.266 [DEBUG] [Thread-22102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:37:28.266 [DEBUG] [Thread-22102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:37:28.275 [DEBUG] [Thread-22102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:37:28.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:37:28.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-26T01:37:28.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:37:28.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:37:28.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:37:28.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:37:28.312 [DEBUG] [Thread-22102] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:37:37.576 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:37.577 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:42.018 [DEBUG] [Thread-22104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:43.877 [DEBUG] [Thread-22105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:46.842 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:50.928 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:57.075 [DEBUG] [Thread-22106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:37:58.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:37:58.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:37:58.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-26T01:37:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 37, 23), 2.2, 86.37, 0.0, 16.37, 11.97, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:37:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:37:23
2025-12-26T01:37:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:37:59.376 [DEBUG] [Thread-22107] [transport.py] [_log()] starting thread (client mode): 0xb9547a00
2025-12-26T01:37:59.376 [DEBUG] [Thread-22107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:37:59.398 [DEBUG] [Thread-22107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:37:59.398 [INFO] [Thread-22107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:37:59.401 [DEBUG] [Thread-22107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] client lang: <none>
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] server lang: <none>
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] kex follows: False
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] Compression: none
2025-12-26T01:37:59.402 [DEBUG] [Thread-22107] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:37:59.418 [DEBUG] [Thread-22107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:37:59.418 [DEBUG] [Thread-22107] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:37:59.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:37:59.419 [DEBUG] [Thread-22107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:37:59.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:37:59.419 [DEBUG] [Thread-22107] [transport.py] [_log()] userauth is OK
2025-12-26T01:37:59.419 [DEBUG] [Thread-22107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:37:59.419 [DEBUG] [Thread-22107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:37:59.419 [DEBUG] [Thread-22107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:37:59.419 [DEBUG] [Thread-22107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:37:59.428 [INFO] [Thread-22107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:37:59.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:38:00.071 [DEBUG] [Thread-22107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:38:00.071 [DEBUG] [Thread-22107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:38:00.072 [DEBUG] [Thread-22107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:38:00.112 [DEBUG] [Thread-22107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:38:00.112 [DEBUG] [Thread-22107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:38:00.114 [DEBUG] [Thread-22107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:38:00.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:38:00.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:38:00.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:38:00.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:38:00.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:38:00.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:38:00.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.984088 -999.00  +12.20  11.63     88  +10.30 1 1 1 3 1     0    0 2.64 14.16 ZNESW 11.6 11.6 181.6 17.5 13.0 -23.5 12.8 -23.2 12.7 -21.3 12.9 -22.5
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.984088
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:38:00.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:38:00.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:37:23', tmtdew=2.2, humidity=86.37, cloud=0.0, wind=16.37, temperature=11.97, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:37:05.203', atlas_cloud=1, atlas_rain=1, zp_data=[0.26975000000000016, 0.17325000000000124, 0.36125000000000007, 0.18349999999999866, 0.1974999999999998, 0.24924999999999997, 0.4189999999999987, 0.643250000000001, 0.4004999999999992, 0.12899999999999956, 0.1792499999999997, 0.261000000000001, 0.18900000000000006, 0.24324999999999974, 0.3885000000000005, 0.49349999999999916, 0.16825000000000045, 0.2665000000000006, 0.125, 0.3042499999999997, 0.27399999999999913, 0.2552500000000002, 0.41275000000000084, 0.4122500000000002, 0.2129999999999992, 0.28449999999999953, 0.28825000000000145, 0.291500000000001, 0.3465000000000016, 0.37700000000000067, 0.4125000000000014, 0.5480000000000009, 0.29524999999999935], zp_timestamp='2025-12-25T23:36:00')
2025-12-26T01:38:00.135 [DEBUG] [Thread-22107] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:38:00.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-26T01:38:00.227 [DEBUG] [Thread-22110] [transport.py] [_log()] starting thread (client mode): 0xb9546c20
2025-12-26T01:38:00.227 [DEBUG] [Thread-22110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:38:00.243 [DEBUG] [Thread-22110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:38:00.243 [INFO] [Thread-22110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] client lang: <none>
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] server lang: <none>
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] kex follows: False
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:38:00.251 [DEBUG] [Thread-22110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:38:00.252 [DEBUG] [Thread-22110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:38:00.252 [DEBUG] [Thread-22110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:38:00.252 [DEBUG] [Thread-22110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:38:00.252 [DEBUG] [Thread-22110] [transport.py] [_log()] Compression: none
2025-12-26T01:38:00.252 [DEBUG] [Thread-22110] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:38:00.310 [DEBUG] [Thread-22110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:38:00.310 [DEBUG] [Thread-22110] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:38:00.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:38:00.311 [DEBUG] [Thread-22110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:38:00.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:38:00.366 [DEBUG] [Thread-22110] [transport.py] [_log()] userauth is OK
2025-12-26T01:38:00.367 [DEBUG] [Thread-22110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:38:00.367 [DEBUG] [Thread-22110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:38:00.367 [DEBUG] [Thread-22110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:38:00.367 [DEBUG] [Thread-22110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:38:00.388 [INFO] [Thread-22110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:38:00.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:38:00.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:38:01.212 [DEBUG] [Thread-22110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:38:01.213 [DEBUG] [Thread-22110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:38:01.264 [DEBUG] [Thread-22110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:38:01.264 [DEBUG] [Thread-22110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:38:01.273 [DEBUG] [Thread-22110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:38:01.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:38:01.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-26T01:38:01.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-26T01:38:01.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:38:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:38:01.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:38:01.315 [DEBUG] [Thread-22110] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:38:12.108 [DEBUG] [Thread-22112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:38:27.171 [DEBUG] [Thread-22113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:38:31.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:38:31.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:38:31.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-26T01:38:32.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 38, 28), 2.04, 87.22, 0.0, 17.8, 11.89, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:38:32.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:38:28
2025-12-26T01:38:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:38:32.315 [DEBUG] [Thread-22114] [transport.py] [_log()] starting thread (client mode): 0xb9544550
2025-12-26T01:38:32.316 [DEBUG] [Thread-22114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:38:32.336 [DEBUG] [Thread-22114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:38:32.336 [INFO] [Thread-22114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] client lang: <none>
2025-12-26T01:38:32.339 [DEBUG] [Thread-22114] [transport.py] [_log()] server lang: <none>
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] kex follows: False
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] Compression: none
2025-12-26T01:38:32.340 [DEBUG] [Thread-22114] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:38:32.354 [DEBUG] [Thread-22114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:38:32.354 [DEBUG] [Thread-22114] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:38:32.355 [DEBUG] [Thread-22114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:38:32.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:38:32.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:38:32.356 [DEBUG] [Thread-22114] [transport.py] [_log()] userauth is OK
2025-12-26T01:38:32.356 [DEBUG] [Thread-22114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:38:32.356 [DEBUG] [Thread-22114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:38:32.356 [DEBUG] [Thread-22114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:38:32.356 [DEBUG] [Thread-22114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:38:32.369 [INFO] [Thread-22114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:38:32.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:38:33.166 [DEBUG] [Thread-22114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:38:33.167 [DEBUG] [Thread-22114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:38:33.167 [DEBUG] [Thread-22114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:38:33.208 [DEBUG] [Thread-22114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:38:33.208 [DEBUG] [Thread-22114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:38:33.210 [DEBUG] [Thread-22114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:38:33.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:38:33.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:38:33.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:38:33.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:38:33.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:38:33.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:38:33.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.984782 -999.00  +12.10  12.31     88  +10.20 1 2 1 3 1     0    0 2.51 9.05 zNESW 12.3 12.3 174.8 14.9 12.9 -23.2 12.7 -23.4 12.6 -21.0 12.9 -22.7
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.984782
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:38:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:38:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:38:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:38:28', tmtdew=2.04, humidity=87.22, cloud=0.0, wind=17.8, temperature=11.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:38:05.165', atlas_cloud=2, atlas_rain=1, zp_data=[0.26975000000000016, 0.17325000000000124, 0.36125000000000007, 0.18349999999999866, 0.1974999999999998, 0.24924999999999997, 0.4189999999999987, 0.643250000000001, 0.4004999999999992, 0.12899999999999956, 0.1792499999999997, 0.261000000000001, 0.18900000000000006, 0.24324999999999974, 0.3885000000000005, 0.49349999999999916, 0.16825000000000045, 0.2665000000000006, 0.125, 0.3042499999999997, 0.27399999999999913, 0.2552500000000002, 0.41275000000000084, 0.4122500000000002, 0.2129999999999992, 0.28449999999999953, 0.28825000000000145, 0.291500000000001, 0.3465000000000016, 0.37700000000000067, 0.4125000000000014, 0.5480000000000009, 0.29524999999999935], zp_timestamp='2025-12-25T23:36:00')
2025-12-26T01:38:33.229 [DEBUG] [Thread-22114] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:38:33.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-26T01:38:33.314 [DEBUG] [Thread-22117] [transport.py] [_log()] starting thread (client mode): 0xb9546530
2025-12-26T01:38:33.314 [DEBUG] [Thread-22117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:38:33.329 [DEBUG] [Thread-22117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:38:33.329 [INFO] [Thread-22117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:38:33.336 [DEBUG] [Thread-22117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:38:33.336 [DEBUG] [Thread-22117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:38:33.336 [DEBUG] [Thread-22117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:38:33.336 [DEBUG] [Thread-22117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:38:33.336 [DEBUG] [Thread-22117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] client lang: <none>
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] server lang: <none>
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] kex follows: False
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] Compression: none
2025-12-26T01:38:33.337 [DEBUG] [Thread-22117] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:38:33.391 [DEBUG] [Thread-22117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:38:33.391 [DEBUG] [Thread-22117] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:38:33.392 [DEBUG] [Thread-22117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:38:33.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:38:33.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:38:33.448 [DEBUG] [Thread-22117] [transport.py] [_log()] userauth is OK
2025-12-26T01:38:33.449 [DEBUG] [Thread-22117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:38:33.449 [DEBUG] [Thread-22117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:38:33.449 [DEBUG] [Thread-22117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:38:33.449 [DEBUG] [Thread-22117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:38:33.463 [INFO] [Thread-22117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:38:33.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:38:33.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:38:34.247 [DEBUG] [Thread-22117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:38:34.247 [DEBUG] [Thread-22117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:38:34.295 [DEBUG] [Thread-22117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:38:34.295 [DEBUG] [Thread-22117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:38:34.303 [DEBUG] [Thread-22117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:38:34.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:38:34.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-26T01:38:34.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-26T01:38:34.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:38:34.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:38:34.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:38:34.335 [DEBUG] [Thread-22117] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:38:37.781 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:38:37.781 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:38:42.202 [DEBUG] [Thread-22119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:38:43.943 [DEBUG] [Thread-22120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:38:57.255 [DEBUG] [Thread-22121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:04.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:39:04.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:39:04.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:39:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 39), 1.98, 87.32, 0.0, 18.02, 11.92, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:39:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:39:00
2025-12-26T01:39:05.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:39:05.341 [DEBUG] [Thread-22122] [transport.py] [_log()] starting thread (client mode): 0xb9578820
2025-12-26T01:39:05.341 [DEBUG] [Thread-22122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:39:05.361 [DEBUG] [Thread-22122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:39:05.361 [INFO] [Thread-22122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] client lang: <none>
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] server lang: <none>
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] kex follows: False
2025-12-26T01:39:05.365 [DEBUG] [Thread-22122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:39:05.366 [DEBUG] [Thread-22122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:39:05.366 [DEBUG] [Thread-22122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:39:05.366 [DEBUG] [Thread-22122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:39:05.366 [DEBUG] [Thread-22122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:39:05.366 [DEBUG] [Thread-22122] [transport.py] [_log()] Compression: none
2025-12-26T01:39:05.366 [DEBUG] [Thread-22122] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:39:05.374 [DEBUG] [Thread-22122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:39:05.375 [DEBUG] [Thread-22122] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:39:05.375 [DEBUG] [Thread-22122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:39:05.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:39:05.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:39:05.377 [DEBUG] [Thread-22122] [transport.py] [_log()] userauth is OK
2025-12-26T01:39:05.377 [DEBUG] [Thread-22122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:39:05.377 [DEBUG] [Thread-22122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:39:05.377 [DEBUG] [Thread-22122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:39:05.377 [DEBUG] [Thread-22122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:39:05.413 [INFO] [Thread-22122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:39:05.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:39:06.051 [DEBUG] [Thread-22122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:39:06.051 [DEBUG] [Thread-22122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:39:06.051 [DEBUG] [Thread-22122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:39:06.092 [DEBUG] [Thread-22122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:39:06.092 [DEBUG] [Thread-22122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:39:06.096 [DEBUG] [Thread-22122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:39:06.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:39:06.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:39:06.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:39:06.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:39:06.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:39:06.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:39:06.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:39:06.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:39:06.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:39:06.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.985129 -999.00  +12.10   9.99     88  +10.30 1 2 1 3 1     0    0 2.39 4.78 zNESW 10.0 10.0 177.6 14.3 12.9 -23.2 12.7 -23.1 12.6 -21.0 12.8 -22.3
2025-12-26T01:39:06.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:39:06.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:39:06.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.985129
2025-12-26T01:39:06.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:39:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:39:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:39:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:39:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:39:06.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:39:00', tmtdew=1.98, humidity=87.32, cloud=0.0, wind=18.02, temperature=11.92, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:38:35.146', atlas_cloud=2, atlas_rain=1, zp_data=[0.26975000000000016, 0.17325000000000124, 0.36125000000000007, 0.18349999999999866, 0.1974999999999998, 0.24924999999999997, 0.4189999999999987, 0.643250000000001, 0.4004999999999992, 0.12899999999999956, 0.1792499999999997, 0.261000000000001, 0.18900000000000006, 0.24324999999999974, 0.3885000000000005, 0.49349999999999916, 0.16825000000000045, 0.2665000000000006, 0.125, 0.3042499999999997, 0.27399999999999913, 0.2552500000000002, 0.41275000000000084, 0.4122500000000002, 0.2129999999999992, 0.28449999999999953, 0.28825000000000145, 0.291500000000001, 0.3465000000000016, 0.37700000000000067, 0.4125000000000014, 0.5480000000000009, 0.29524999999999935], zp_timestamp='2025-12-25T23:36:00')
2025-12-26T01:39:06.124 [DEBUG] [Thread-22122] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:39:06.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:39:06.215 [DEBUG] [Thread-22125] [transport.py] [_log()] starting thread (client mode): 0xb9546410
2025-12-26T01:39:06.216 [DEBUG] [Thread-22125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:39:06.231 [DEBUG] [Thread-22125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:39:06.231 [INFO] [Thread-22125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:06.238 [DEBUG] [Thread-22125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] client lang: <none>
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] server lang: <none>
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] kex follows: False
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] Compression: none
2025-12-26T01:39:06.239 [DEBUG] [Thread-22125] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:39:06.297 [DEBUG] [Thread-22125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:39:06.297 [DEBUG] [Thread-22125] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:39:06.298 [DEBUG] [Thread-22125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:39:06.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:39:06.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:39:06.352 [DEBUG] [Thread-22125] [transport.py] [_log()] userauth is OK
2025-12-26T01:39:06.353 [DEBUG] [Thread-22125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:39:06.353 [DEBUG] [Thread-22125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:39:06.353 [DEBUG] [Thread-22125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:39:06.353 [DEBUG] [Thread-22125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:39:06.373 [INFO] [Thread-22125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:39:06.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-26T01:39:06.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:39:07.184 [DEBUG] [Thread-22125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:39:07.184 [DEBUG] [Thread-22125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:39:07.232 [DEBUG] [Thread-22125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:39:07.233 [DEBUG] [Thread-22125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:39:07.242 [DEBUG] [Thread-22125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:39:07.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:39: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')
2025-12-26T01:39:07.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-26T01:39:07.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:39:07.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:39:07.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:39:07.278 [DEBUG] [Thread-22125] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:39:12.287 [DEBUG] [Thread-22127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:27.328 [DEBUG] [Thread-22128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:39:37.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:39:37.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-26T01:39:37.984 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:37.985 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:38.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 39, 32), 1.96, 87.4, 0.0, 17.01, 11.89, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:39:38.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:39:32
2025-12-26T01:39:38.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:39:38.279 [DEBUG] [Thread-22129] [transport.py] [_log()] starting thread (client mode): 0xb95464d0
2025-12-26T01:39:38.279 [DEBUG] [Thread-22129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:39:38.300 [DEBUG] [Thread-22129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:39:38.300 [INFO] [Thread-22129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:39:38.301 [DEBUG] [Thread-22129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:39:38.301 [DEBUG] [Thread-22129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:39:38.301 [DEBUG] [Thread-22129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:39:38.301 [DEBUG] [Thread-22129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] client lang: <none>
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] server lang: <none>
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] kex follows: False
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:39:38.302 [DEBUG] [Thread-22129] [transport.py] [_log()] Compression: none
2025-12-26T01:39:38.303 [DEBUG] [Thread-22129] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:39:38.312 [DEBUG] [Thread-22129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:39:38.313 [DEBUG] [Thread-22129] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:39:38.313 [DEBUG] [Thread-22129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:39:38.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:39:38.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:39:38.315 [DEBUG] [Thread-22129] [transport.py] [_log()] userauth is OK
2025-12-26T01:39:38.315 [DEBUG] [Thread-22129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:39:38.315 [DEBUG] [Thread-22129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:39:38.315 [DEBUG] [Thread-22129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:39:38.316 [DEBUG] [Thread-22129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:39:38.332 [INFO] [Thread-22129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:39:38.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:39:39.142 [DEBUG] [Thread-22129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:39:39.143 [DEBUG] [Thread-22129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:39:39.143 [DEBUG] [Thread-22129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:39:39.184 [DEBUG] [Thread-22129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:39:39.184 [DEBUG] [Thread-22129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:39:39.188 [DEBUG] [Thread-22129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:39:39.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:39:39.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:39:39.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:39:39.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:39:39.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:39:39.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:39:39.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:39:39.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:39:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:39:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.985477 -999.00  +12.00  11.23     88  +10.20 1 2 1 3 1     0    0 2.27 1.05 zNESW 11.2 11.2 176.8 15.3 12.9 -23.1 12.7 -22.6 12.6 -21.1 12.8 -22.4
2025-12-26T01:39:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:39:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:39:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.985477
2025-12-26T01:39:39.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:39:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:39:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:39:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:39:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:39:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:39:32', tmtdew=1.96, humidity=87.4, cloud=0.0, wind=17.01, temperature=11.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:39:05.213', atlas_cloud=2, atlas_rain=1, zp_data=[0.26975000000000016, 0.17325000000000124, 0.36125000000000007, 0.18349999999999866, 0.1974999999999998, 0.24924999999999997, 0.4189999999999987, 0.643250000000001, 0.4004999999999992, 0.12899999999999956, 0.1792499999999997, 0.261000000000001, 0.18900000000000006, 0.24324999999999974, 0.3885000000000005, 0.49349999999999916, 0.16825000000000045, 0.2665000000000006, 0.125, 0.3042499999999997, 0.27399999999999913, 0.2552500000000002, 0.41275000000000084, 0.4122500000000002, 0.2129999999999992, 0.28449999999999953, 0.28825000000000145, 0.291500000000001, 0.3465000000000016, 0.37700000000000067, 0.4125000000000014, 0.5480000000000009, 0.29524999999999935], zp_timestamp='2025-12-25T23:36:00')
2025-12-26T01:39:39.215 [DEBUG] [Thread-22129] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:39:39.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-26T01:39:39.309 [DEBUG] [Thread-22132] [transport.py] [_log()] starting thread (client mode): 0xb9545750
2025-12-26T01:39:39.309 [DEBUG] [Thread-22132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:39:39.324 [DEBUG] [Thread-22132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:39:39.324 [INFO] [Thread-22132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] client lang: <none>
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] server lang: <none>
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] kex follows: False
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:39:39.332 [DEBUG] [Thread-22132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:39:39.333 [DEBUG] [Thread-22132] [transport.py] [_log()] Compression: none
2025-12-26T01:39:39.333 [DEBUG] [Thread-22132] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:39:39.392 [DEBUG] [Thread-22132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:39:39.392 [DEBUG] [Thread-22132] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:39:39.393 [DEBUG] [Thread-22132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:39:39.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:39:39.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:39:39.448 [DEBUG] [Thread-22132] [transport.py] [_log()] userauth is OK
2025-12-26T01:39:39.449 [DEBUG] [Thread-22132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:39:39.449 [DEBUG] [Thread-22132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:39:39.449 [DEBUG] [Thread-22132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:39:39.449 [DEBUG] [Thread-22132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:39:39.468 [INFO] [Thread-22132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:39:39.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-26T01:39:39.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:39:40.300 [DEBUG] [Thread-22132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:39:40.300 [DEBUG] [Thread-22132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:39:40.349 [DEBUG] [Thread-22132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:39:40.350 [DEBUG] [Thread-22132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:39:40.359 [DEBUG] [Thread-22132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:39:40.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:39:40.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:39:40.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:39:40.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:39:40.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:39:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:39:40.396 [DEBUG] [Thread-22132] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:39:42.362 [DEBUG] [Thread-22134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:44.026 [DEBUG] [Thread-22135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:39:57.405 [DEBUG] [Thread-22136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:40:10.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:40:10.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-26T01:40:11.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 40, 4), 1.95, 87.47, 0.0, 17.03, 11.92, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:40:11.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:40:04
2025-12-26T01:40:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:40:11.396 [DEBUG] [Thread-22137] [transport.py] [_log()] starting thread (client mode): 0xb9546c20
2025-12-26T01:40:11.396 [DEBUG] [Thread-22137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:40:11.416 [DEBUG] [Thread-22137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:40:11.416 [INFO] [Thread-22137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:40:11.419 [DEBUG] [Thread-22137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:40:11.419 [DEBUG] [Thread-22137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:40:11.419 [DEBUG] [Thread-22137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:40:11.419 [DEBUG] [Thread-22137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:11.419 [DEBUG] [Thread-22137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] client lang: <none>
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] server lang: <none>
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] kex follows: False
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] Compression: none
2025-12-26T01:40:11.420 [DEBUG] [Thread-22137] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:40:11.436 [DEBUG] [Thread-22137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:40:11.437 [DEBUG] [Thread-22137] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:40:11.437 [DEBUG] [Thread-22137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:40:11.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:40:11.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:40:11.440 [DEBUG] [Thread-22137] [transport.py] [_log()] userauth is OK
2025-12-26T01:40:11.441 [DEBUG] [Thread-22137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:40:11.441 [DEBUG] [Thread-22137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:40:11.441 [DEBUG] [Thread-22137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:40:11.441 [DEBUG] [Thread-22137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:40:11.465 [INFO] [Thread-22137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:40:11.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:40:12.441 [DEBUG] [Thread-22139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:14.168 [DEBUG] [Thread-22137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:40:14.168 [DEBUG] [Thread-22137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:40:14.169 [DEBUG] [Thread-22137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:40:14.209 [DEBUG] [Thread-22137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:40:14.209 [DEBUG] [Thread-22137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:40:14.212 [DEBUG] [Thread-22137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:40:14.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:40:14.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:40:14.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:40:14.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:40:14.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:40:14.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:40:14.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:40:14.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:40:14.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:40:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.985824 -999.00  +12.00  12.68     88  +10.30 1 2 1 3 1     0    0 2.12 -2.57 zNESW 12.7 12.7 172.6 17.4 12.8 -23.3 12.7 -23.0 12.5 -21.0 12.8 -22.2
2025-12-26T01:40:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:40:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:40:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.985824
2025-12-26T01:40:14.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:40:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:40:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:40:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:40:14.329 [DEBUG] [Thread-22137] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:40:14.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:40:14.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:40:04', tmtdew=1.95, humidity=87.47, cloud=0.0, wind=17.03, temperature=11.92, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:39:35.194', atlas_cloud=2, atlas_rain=1, zp_data=[0.26975000000000016, 0.17325000000000124, 0.36125000000000007, 0.18349999999999866, 0.1974999999999998, 0.24924999999999997, 0.4189999999999987, 0.643250000000001, 0.4004999999999992, 0.12899999999999956, 0.1792499999999997, 0.261000000000001, 0.18900000000000006, 0.24324999999999974, 0.3885000000000005, 0.49349999999999916, 0.16825000000000045, 0.2665000000000006, 0.125, 0.3042499999999997, 0.27399999999999913, 0.2552500000000002, 0.41275000000000084, 0.4122500000000002, 0.2129999999999992, 0.28449999999999953, 0.28825000000000145, 0.291500000000001, 0.3465000000000016, 0.37700000000000067, 0.4125000000000014, 0.5480000000000009, 0.29524999999999935], zp_timestamp='2025-12-25T23:36:00')
2025-12-26T01:40:14.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-26T01:40:14.424 [DEBUG] [Thread-22141] [transport.py] [_log()] starting thread (client mode): 0xb95458a0
2025-12-26T01:40:14.424 [DEBUG] [Thread-22141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:40:14.439 [DEBUG] [Thread-22141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:40:14.439 [INFO] [Thread-22141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:40:14.447 [DEBUG] [Thread-22141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:40:14.447 [DEBUG] [Thread-22141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:40:14.447 [DEBUG] [Thread-22141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:40:14.447 [DEBUG] [Thread-22141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:14.447 [DEBUG] [Thread-22141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:14.447 [DEBUG] [Thread-22141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] client lang: <none>
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] server lang: <none>
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] kex follows: False
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:40:14.448 [DEBUG] [Thread-22141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:40:14.449 [DEBUG] [Thread-22141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:40:14.449 [DEBUG] [Thread-22141] [transport.py] [_log()] Compression: none
2025-12-26T01:40:14.449 [DEBUG] [Thread-22141] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:40:14.507 [DEBUG] [Thread-22141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:40:14.508 [DEBUG] [Thread-22141] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:40:14.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:40:14.509 [DEBUG] [Thread-22141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:40:14.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:40:14.563 [DEBUG] [Thread-22141] [transport.py] [_log()] userauth is OK
2025-12-26T01:40:14.563 [DEBUG] [Thread-22141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:40:14.563 [DEBUG] [Thread-22141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:40:14.563 [DEBUG] [Thread-22141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:40:14.563 [DEBUG] [Thread-22141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:40:14.581 [INFO] [Thread-22141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:40:14.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-26T01:40:14.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:40:15.393 [DEBUG] [Thread-22141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:40:15.393 [DEBUG] [Thread-22141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:40:15.440 [DEBUG] [Thread-22141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:40:15.441 [DEBUG] [Thread-22141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:40:15.449 [DEBUG] [Thread-22141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:40:15.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:40:15.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-26T01:40:15.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:40:15.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:40:15.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:40:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:40:15.483 [DEBUG] [Thread-22141] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:40:27.477 [DEBUG] [Thread-22143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:38.185 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:38.186 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:42.524 [DEBUG] [Thread-22144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:44.083 [DEBUG] [Thread-22145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:40:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:40:45.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:40:45.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-26T01:40:46.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 40, 36), 1.94, 88.0, 0.0, 17.8, 11.9, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:40:46.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:40:36
2025-12-26T01:40:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:40:46.496 [DEBUG] [Thread-22146] [transport.py] [_log()] starting thread (client mode): 0xb9593760
2025-12-26T01:40:46.496 [DEBUG] [Thread-22146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:40:46.517 [DEBUG] [Thread-22146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:40:46.517 [INFO] [Thread-22146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] client lang: <none>
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] server lang: <none>
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] kex follows: False
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] Compression: none
2025-12-26T01:40:46.521 [DEBUG] [Thread-22146] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:40:46.540 [DEBUG] [Thread-22146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:40:46.540 [DEBUG] [Thread-22146] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:40:46.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:40:46.541 [DEBUG] [Thread-22146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:40:46.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:40:46.543 [DEBUG] [Thread-22146] [transport.py] [_log()] userauth is OK
2025-12-26T01:40:46.544 [DEBUG] [Thread-22146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:40:46.544 [DEBUG] [Thread-22146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:40:46.544 [DEBUG] [Thread-22146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:40:46.544 [DEBUG] [Thread-22146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:40:46.569 [INFO] [Thread-22146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:40:46.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:40:47.211 [DEBUG] [Thread-22146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:40:47.211 [DEBUG] [Thread-22146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:40:47.212 [DEBUG] [Thread-22146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:40:47.252 [DEBUG] [Thread-22146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:40:47.252 [DEBUG] [Thread-22146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:40:47.255 [DEBUG] [Thread-22146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:40:47.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:40:47.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:40:47.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:40:47.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:40:47.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:40:47.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:40:47.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:40:47.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:40:47.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:40:47.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.986171 -999.00  +12.00  12.30     88  +10.20 1 2 1 3 1     0    0 2.03 -5.81 zNESW 12.3 12.3 188.0 15.0 12.8 -23.1 12.7 -23.1 12.5 -20.9 12.8 -22.3
2025-12-26T01:40:47.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:40:47.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:40:47.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.986171
2025-12-26T01:40:47.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:40:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:40:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:40:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:40:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:40:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:40:36', tmtdew=1.94, humidity=88.0, cloud=0.0, wind=17.8, temperature=11.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:40:05.174', atlas_cloud=2, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:38:00')
2025-12-26T01:40:47.284 [DEBUG] [Thread-22146] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:40:47.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:40:47.377 [DEBUG] [Thread-22149] [transport.py] [_log()] starting thread (client mode): 0xb955bf70
2025-12-26T01:40:47.378 [DEBUG] [Thread-22149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:40:47.393 [DEBUG] [Thread-22149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:40:47.393 [INFO] [Thread-22149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:40:47.400 [DEBUG] [Thread-22149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:40:47.400 [DEBUG] [Thread-22149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:40:47.401 [DEBUG] [Thread-22149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] client lang: <none>
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] server lang: <none>
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] kex follows: False
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:40:47.402 [DEBUG] [Thread-22149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:40:47.403 [DEBUG] [Thread-22149] [transport.py] [_log()] Compression: none
2025-12-26T01:40:47.403 [DEBUG] [Thread-22149] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:40:47.458 [DEBUG] [Thread-22149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:40:47.459 [DEBUG] [Thread-22149] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:40:47.459 [DEBUG] [Thread-22149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:40:47.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:40:47.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:40:47.514 [DEBUG] [Thread-22149] [transport.py] [_log()] userauth is OK
2025-12-26T01:40:47.515 [DEBUG] [Thread-22149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:40:47.515 [DEBUG] [Thread-22149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:40:47.515 [DEBUG] [Thread-22149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:40:47.515 [DEBUG] [Thread-22149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:40:47.534 [INFO] [Thread-22149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:40:47.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-26T01:40:47.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:40:48.364 [DEBUG] [Thread-22149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:40:48.364 [DEBUG] [Thread-22149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:40:48.411 [DEBUG] [Thread-22149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:40:48.411 [DEBUG] [Thread-22149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:40:48.419 [DEBUG] [Thread-22149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:40:48.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:40:48.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-26T01:40:48.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-26T01:40:48.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:40:48.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:40:48.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:40:48.452 [DEBUG] [Thread-22149] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:40:57.562 [DEBUG] [Thread-22151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:12.615 [DEBUG] [Thread-22152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:41:18.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:41:18.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-26T01:41:19.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 41, 8), 1.94, 88.05, 0.0, 16.75, 11.9, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:41:19.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:41:08
2025-12-26T01:41:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:41:19.435 [DEBUG] [Thread-22153] [transport.py] [_log()] starting thread (client mode): 0xb955acb0
2025-12-26T01:41:19.435 [DEBUG] [Thread-22153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:41:19.456 [DEBUG] [Thread-22153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:41:19.457 [INFO] [Thread-22153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] client lang: <none>
2025-12-26T01:41:19.460 [DEBUG] [Thread-22153] [transport.py] [_log()] server lang: <none>
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] kex follows: False
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] Compression: none
2025-12-26T01:41:19.461 [DEBUG] [Thread-22153] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:41:19.480 [DEBUG] [Thread-22153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:41:19.481 [DEBUG] [Thread-22153] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:41:19.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:41:19.482 [DEBUG] [Thread-22153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:41:19.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:41:19.483 [DEBUG] [Thread-22153] [transport.py] [_log()] userauth is OK
2025-12-26T01:41:19.484 [DEBUG] [Thread-22153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:41:19.484 [DEBUG] [Thread-22153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:41:19.484 [DEBUG] [Thread-22153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:41:19.484 [DEBUG] [Thread-22153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:41:19.507 [INFO] [Thread-22153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:41:19.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:41:20.115 [DEBUG] [Thread-22153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:41:20.115 [DEBUG] [Thread-22153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:41:20.115 [DEBUG] [Thread-22153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:41:20.156 [DEBUG] [Thread-22153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:41:20.156 [DEBUG] [Thread-22153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:41:20.158 [DEBUG] [Thread-22153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:41:20.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:41:20.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:41:20.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:41:20.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:41:20.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:41:20.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:41:20.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:41:20.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:41:20.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:41:20.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.986518 -999.00  +12.00  12.50     88  +10.20 1 2 1 3 1     0    0 1.94 -8.44 zNESW 12.5 12.5 178.8 16.4 12.8 -23.0 12.7 -22.9 12.5 -21.0 12.8 -22.1
2025-12-26T01:41:20.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:41:20.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:41:20.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.986518
2025-12-26T01:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:41:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:41:08', tmtdew=1.94, humidity=88.05, cloud=0.0, wind=16.75, temperature=11.9, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:40:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:38:00')
2025-12-26T01:41:20.181 [DEBUG] [Thread-22153] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:41:20.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:41:20.286 [DEBUG] [Thread-22156] [transport.py] [_log()] starting thread (client mode): 0xb9546590
2025-12-26T01:41:20.286 [DEBUG] [Thread-22156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:41:20.304 [DEBUG] [Thread-22156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:41:20.304 [INFO] [Thread-22156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:41:20.312 [DEBUG] [Thread-22156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:41:20.312 [DEBUG] [Thread-22156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:41:20.312 [DEBUG] [Thread-22156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] client lang: <none>
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] server lang: <none>
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] kex follows: False
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] Compression: none
2025-12-26T01:41:20.313 [DEBUG] [Thread-22156] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:41:20.370 [DEBUG] [Thread-22156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:41:20.371 [DEBUG] [Thread-22156] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:41:20.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:41:20.372 [DEBUG] [Thread-22156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:41:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:41:20.426 [DEBUG] [Thread-22156] [transport.py] [_log()] userauth is OK
2025-12-26T01:41:20.426 [DEBUG] [Thread-22156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:41:20.426 [DEBUG] [Thread-22156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:41:20.426 [DEBUG] [Thread-22156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:41:20.427 [DEBUG] [Thread-22156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:41:20.446 [INFO] [Thread-22156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:41:20.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-26T01:41:20.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:41:21.331 [DEBUG] [Thread-22156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:41:21.331 [DEBUG] [Thread-22156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:41:21.379 [DEBUG] [Thread-22156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:41:21.380 [DEBUG] [Thread-22156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:41:21.388 [DEBUG] [Thread-22156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:41:21.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:41:21.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-26T01:41:21.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-26T01:41:21.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:41:21.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:41:21.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:41:21.425 [DEBUG] [Thread-22156] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:41:27.650 [DEBUG] [Thread-22158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:38.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:38.388 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:42.708 [DEBUG] [Thread-22159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:44.148 [DEBUG] [Thread-22160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:41:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:41:51.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:41:51.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-26T01:41:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 41, 41), 1.93, 88.07, 0.0, 17.2, 11.95, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:41:52.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:41:41
2025-12-26T01:41:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:41:52.429 [DEBUG] [Thread-22161] [transport.py] [_log()] starting thread (client mode): 0xb6b2ad40
2025-12-26T01:41:52.429 [DEBUG] [Thread-22161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:41:52.451 [DEBUG] [Thread-22161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:41:52.451 [INFO] [Thread-22161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] client lang: <none>
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] server lang: <none>
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] kex follows: False
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:41:52.454 [DEBUG] [Thread-22161] [transport.py] [_log()] Compression: none
2025-12-26T01:41:52.455 [DEBUG] [Thread-22161] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:41:52.471 [DEBUG] [Thread-22161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:41:52.471 [DEBUG] [Thread-22161] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:41:52.471 [DEBUG] [Thread-22161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:41:52.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:41:52.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:41:52.472 [DEBUG] [Thread-22161] [transport.py] [_log()] userauth is OK
2025-12-26T01:41:52.472 [DEBUG] [Thread-22161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:41:52.472 [DEBUG] [Thread-22161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:41:52.472 [DEBUG] [Thread-22161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:41:52.472 [DEBUG] [Thread-22161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:41:52.498 [INFO] [Thread-22161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:41:52.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:41:53.128 [DEBUG] [Thread-22161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:41:53.128 [DEBUG] [Thread-22161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:41:53.128 [DEBUG] [Thread-22161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:41:53.169 [DEBUG] [Thread-22161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:41:53.169 [DEBUG] [Thread-22161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:41:53.172 [DEBUG] [Thread-22161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:41:53.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:41:53.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:41:53.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:41:53.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:41:53.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:41:53.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:41:53.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.987213 -999.00  +12.00  12.23     88  +10.20 1 2 1 3 1     0    0 1.79 -13.39 zNESW 12.2 12.2 179.4 16.9 12.8 -23.0 12.6 -22.8 12.4 -20.8 12.8 -22.0
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.987213
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:41:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:41:41', tmtdew=1.93, humidity=88.07, cloud=0.0, wind=17.2, temperature=11.95, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:41:35.203', atlas_cloud=2, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:38:00')
2025-12-26T01:41:53.189 [DEBUG] [Thread-22161] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:41:53.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-26T01:41:53.274 [DEBUG] [Thread-22164] [transport.py] [_log()] starting thread (client mode): 0xb9544cd0
2025-12-26T01:41:53.274 [DEBUG] [Thread-22164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:41:53.288 [DEBUG] [Thread-22164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:41:53.288 [INFO] [Thread-22164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] client lang: <none>
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] server lang: <none>
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] kex follows: False
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] Compression: none
2025-12-26T01:41:53.296 [DEBUG] [Thread-22164] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:41:53.351 [DEBUG] [Thread-22164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:41:53.351 [DEBUG] [Thread-22164] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:41:53.351 [DEBUG] [Thread-22164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:41:53.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:41:53.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:41:53.409 [DEBUG] [Thread-22164] [transport.py] [_log()] userauth is OK
2025-12-26T01:41:53.409 [DEBUG] [Thread-22164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:41:53.409 [DEBUG] [Thread-22164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:41:53.409 [DEBUG] [Thread-22164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:41:53.409 [DEBUG] [Thread-22164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:41:53.428 [INFO] [Thread-22164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:41:53.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-26T01:41:53.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:41:54.259 [DEBUG] [Thread-22164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:41:54.259 [DEBUG] [Thread-22164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:41:54.308 [DEBUG] [Thread-22164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:41:54.308 [DEBUG] [Thread-22164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:41:54.316 [DEBUG] [Thread-22164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:41:54.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:41:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:41:54.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:41:54.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:41:54.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:41:54.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:41:54.351 [DEBUG] [Thread-22164] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:41:57.736 [DEBUG] [Thread-22166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:12.789 [DEBUG] [Thread-22167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:24.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:42:24.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:42:24.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:42:25.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 42, 13), 1.92, 88.12, 0.0, 17.68, 11.92, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:42:25.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:42:13
2025-12-26T01:42:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:42:25.351 [DEBUG] [Thread-22168] [transport.py] [_log()] starting thread (client mode): 0xb9592650
2025-12-26T01:42:25.351 [DEBUG] [Thread-22168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:42:25.372 [DEBUG] [Thread-22168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:42:25.373 [INFO] [Thread-22168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] client lang: <none>
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] server lang: <none>
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] kex follows: False
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:42:25.376 [DEBUG] [Thread-22168] [transport.py] [_log()] Compression: none
2025-12-26T01:42:25.377 [DEBUG] [Thread-22168] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:42:25.394 [DEBUG] [Thread-22168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:42:25.394 [DEBUG] [Thread-22168] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:42:25.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:42:25.395 [DEBUG] [Thread-22168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:42:25.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:42:25.397 [DEBUG] [Thread-22168] [transport.py] [_log()] userauth is OK
2025-12-26T01:42:25.398 [DEBUG] [Thread-22168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:42:25.398 [DEBUG] [Thread-22168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:42:25.398 [DEBUG] [Thread-22168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:42:25.398 [DEBUG] [Thread-22168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:42:25.420 [INFO] [Thread-22168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:42:25.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:42:26.031 [DEBUG] [Thread-22168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:42:26.031 [DEBUG] [Thread-22168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:42:26.032 [DEBUG] [Thread-22168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:42:26.072 [DEBUG] [Thread-22168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:42:26.072 [DEBUG] [Thread-22168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:42:26.075 [DEBUG] [Thread-22168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:42:26.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:42:26.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:42:26.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:42:26.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:42:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:42:26.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:42:26.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.987560 -999.00  +12.10   9.84     88  +10.20 1 2 1 3 1     0    0 1.73 -15.03 zNESW 9.8 9.8 183.6 16.1 12.8 -22.9 12.7 -22.7 12.4 -20.8 12.8 -22.1
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.987560
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:42:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:42:13', tmtdew=1.92, humidity=88.12, cloud=0.0, wind=17.68, temperature=11.92, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:42:05.184', atlas_cloud=2, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:38:00')
2025-12-26T01:42:26.099 [DEBUG] [Thread-22168] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:42:26.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-26T01:42:26.184 [DEBUG] [Thread-22171] [transport.py] [_log()] starting thread (client mode): 0xb9592230
2025-12-26T01:42:26.184 [DEBUG] [Thread-22171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:42:26.198 [DEBUG] [Thread-22171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:42:26.198 [INFO] [Thread-22171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] client lang: <none>
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] server lang: <none>
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] kex follows: False
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] Compression: none
2025-12-26T01:42:26.206 [DEBUG] [Thread-22171] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:42:26.263 [DEBUG] [Thread-22171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:42:26.263 [DEBUG] [Thread-22171] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:42:26.264 [DEBUG] [Thread-22171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:42:26.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:42:26.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:42:26.320 [DEBUG] [Thread-22171] [transport.py] [_log()] userauth is OK
2025-12-26T01:42:26.320 [DEBUG] [Thread-22171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:42:26.320 [DEBUG] [Thread-22171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:42:26.320 [DEBUG] [Thread-22171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:42:26.320 [DEBUG] [Thread-22171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:42:26.335 [INFO] [Thread-22171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:42:26.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-26T01:42:26.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:42:27.170 [DEBUG] [Thread-22171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:42:27.170 [DEBUG] [Thread-22171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:42:27.217 [DEBUG] [Thread-22171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:42:27.218 [DEBUG] [Thread-22171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:42:27.226 [DEBUG] [Thread-22171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:42:27.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:42:27.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:42:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:42:27.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:42:27.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:42:27.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:42:27.259 [DEBUG] [Thread-22171] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:42:27.822 [DEBUG] [Thread-22173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:38.591 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:38.593 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:42.861 [DEBUG] [Thread-22174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:44.200 [DEBUG] [Thread-22175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:42:57.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:42:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:42:57.894 [DEBUG] [Thread-22176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:42:57.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 42, 45), 1.86, 88.19, 0.0, 16.75, 11.95, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:42:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:42:45
2025-12-26T01:42:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:42:58.250 [DEBUG] [Thread-22177] [transport.py] [_log()] starting thread (client mode): 0xb9590c70
2025-12-26T01:42:58.251 [DEBUG] [Thread-22177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:42:58.271 [DEBUG] [Thread-22177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:42:58.271 [INFO] [Thread-22177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] client lang: <none>
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] server lang: <none>
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] kex follows: False
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] Compression: none
2025-12-26T01:42:58.275 [DEBUG] [Thread-22177] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:42:58.292 [DEBUG] [Thread-22177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:42:58.293 [DEBUG] [Thread-22177] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:42:58.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:42:58.293 [DEBUG] [Thread-22177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:42:58.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:42:58.296 [DEBUG] [Thread-22177] [transport.py] [_log()] userauth is OK
2025-12-26T01:42:58.296 [DEBUG] [Thread-22177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:42:58.296 [DEBUG] [Thread-22177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:42:58.296 [DEBUG] [Thread-22177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:42:58.296 [DEBUG] [Thread-22177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:42:58.322 [INFO] [Thread-22177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:42:58.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:42:58.977 [DEBUG] [Thread-22177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:42:58.977 [DEBUG] [Thread-22177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:42:58.978 [DEBUG] [Thread-22177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:42:59.018 [DEBUG] [Thread-22177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:42:59.018 [DEBUG] [Thread-22177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:42:59.021 [DEBUG] [Thread-22177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:42:59.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:42:59.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:42:59.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:42:59.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:42:59.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:42:59.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:42:59.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:42:59.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:42:59.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:42:59.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.987907 -999.00  +12.10  11.00     88  +10.20 1 2 1 3 1     0    0 1.63 -17.20 zNESW 11.0 11.0 196.2 14.5 12.8 -23.0 12.6 -22.7 12.4 -20.8 12.8 -22.2
2025-12-26T01:42:59.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:42:59.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:42:59.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.987907
2025-12-26T01:42:59.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:42:59.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:42:59.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:42:59.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:42:59.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:42:59.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:42:45', tmtdew=1.86, humidity=88.19, cloud=0.0, wind=16.75, temperature=11.95, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:42:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:38:00')
2025-12-26T01:42:59.048 [DEBUG] [Thread-22177] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:42:59.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-26T01:42:59.137 [DEBUG] [Thread-22180] [transport.py] [_log()] starting thread (client mode): 0xb957ba90
2025-12-26T01:42:59.137 [DEBUG] [Thread-22180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:42:59.151 [DEBUG] [Thread-22180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:42:59.151 [INFO] [Thread-22180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:42:59.159 [DEBUG] [Thread-22180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:42:59.159 [DEBUG] [Thread-22180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:42:59.159 [DEBUG] [Thread-22180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] client lang: <none>
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] server lang: <none>
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] kex follows: False
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:42:59.160 [DEBUG] [Thread-22180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:42:59.161 [DEBUG] [Thread-22180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:42:59.161 [DEBUG] [Thread-22180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:42:59.161 [DEBUG] [Thread-22180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:42:59.161 [DEBUG] [Thread-22180] [transport.py] [_log()] Compression: none
2025-12-26T01:42:59.161 [DEBUG] [Thread-22180] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:42:59.217 [DEBUG] [Thread-22180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:42:59.218 [DEBUG] [Thread-22180] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:42:59.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:42:59.219 [DEBUG] [Thread-22180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:42:59.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:42:59.272 [DEBUG] [Thread-22180] [transport.py] [_log()] userauth is OK
2025-12-26T01:42:59.273 [DEBUG] [Thread-22180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:42:59.273 [DEBUG] [Thread-22180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:42:59.273 [DEBUG] [Thread-22180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:42:59.274 [DEBUG] [Thread-22180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:42:59.293 [INFO] [Thread-22180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:42:59.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-26T01:42:59.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:43:00.127 [DEBUG] [Thread-22180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:43:00.128 [DEBUG] [Thread-22180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:43:00.176 [DEBUG] [Thread-22180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:43:00.176 [DEBUG] [Thread-22180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:43:00.185 [DEBUG] [Thread-22180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:43:00.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:43:00.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-26T01:43:00.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:43:00.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:43:00.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:43:00.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:43:00.219 [DEBUG] [Thread-22180] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:43:12.924 [DEBUG] [Thread-22182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:43:27.977 [DEBUG] [Thread-22183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:43:30.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:43:30.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:43:30.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:43:30.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 43, 17), 1.87, 88.15, 0.0, 16.3, 11.97, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:43:30.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:43:17
2025-12-26T01:43:31.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:43:31.227 [DEBUG] [Thread-22184] [transport.py] [_log()] starting thread (client mode): 0xb9545240
2025-12-26T01:43:31.227 [DEBUG] [Thread-22184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:43:31.248 [DEBUG] [Thread-22184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:43:31.249 [INFO] [Thread-22184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] client lang: <none>
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] server lang: <none>
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] kex follows: False
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:43:31.252 [DEBUG] [Thread-22184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:43:31.253 [DEBUG] [Thread-22184] [transport.py] [_log()] Compression: none
2025-12-26T01:43:31.253 [DEBUG] [Thread-22184] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:43:31.270 [DEBUG] [Thread-22184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:43:31.272 [DEBUG] [Thread-22184] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:43:31.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:43:31.273 [DEBUG] [Thread-22184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:43:31.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:43:31.275 [DEBUG] [Thread-22184] [transport.py] [_log()] userauth is OK
2025-12-26T01:43:31.275 [DEBUG] [Thread-22184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:43:31.275 [DEBUG] [Thread-22184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:43:31.275 [DEBUG] [Thread-22184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:43:31.275 [DEBUG] [Thread-22184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:43:31.292 [INFO] [Thread-22184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:43:31.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:43:31.946 [DEBUG] [Thread-22184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:43:31.947 [DEBUG] [Thread-22184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:43:31.956 [DEBUG] [Thread-22184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:43:31.988 [DEBUG] [Thread-22184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:43:31.988 [DEBUG] [Thread-22184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:43:31.991 [DEBUG] [Thread-22184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:43:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:43:32.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:43:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:43:32.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:43:32.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:43:32.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:43:32.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:43:32.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.988254 -999.00  +12.10   9.38     88  +10.20 1 2 1 3 1     0    0 1.58 -18.95 zNESW 9.4 9.4 180.0 15.7 12.8 -22.9 12.6 -22.6 12.5 -20.9 12.8 -22.0
2025-12-26T01:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:43:32.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.988254
2025-12-26T01:43:32.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:43:17', tmtdew=1.87, humidity=88.15, cloud=0.0, wind=16.3, temperature=11.97, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:43:05.146', atlas_cloud=2, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:38:00')
2025-12-26T01:43:32.017 [DEBUG] [Thread-22184] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:43:32.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-26T01:43:32.112 [DEBUG] [Thread-22187] [transport.py] [_log()] starting thread (client mode): 0xbbfcea70
2025-12-26T01:43:32.112 [DEBUG] [Thread-22187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:43:32.126 [DEBUG] [Thread-22187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:43:32.127 [INFO] [Thread-22187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:43:32.134 [DEBUG] [Thread-22187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:43:32.135 [DEBUG] [Thread-22187] [transport.py] [_log()] client lang: <none>
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] server lang: <none>
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] kex follows: False
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] Compression: none
2025-12-26T01:43:32.136 [DEBUG] [Thread-22187] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:43:32.192 [DEBUG] [Thread-22187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:43:32.193 [DEBUG] [Thread-22187] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:43:32.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:43:32.195 [DEBUG] [Thread-22187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:43:32.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:43:32.248 [DEBUG] [Thread-22187] [transport.py] [_log()] userauth is OK
2025-12-26T01:43:32.249 [DEBUG] [Thread-22187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:43:32.249 [DEBUG] [Thread-22187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:43:32.249 [DEBUG] [Thread-22187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:43:32.249 [DEBUG] [Thread-22187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:43:32.270 [INFO] [Thread-22187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:43:32.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:43:32.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:43:33.081 [DEBUG] [Thread-22187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:43:33.081 [DEBUG] [Thread-22187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:43:33.129 [DEBUG] [Thread-22187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:43:33.129 [DEBUG] [Thread-22187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:43:33.139 [DEBUG] [Thread-22187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:43:33.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:43:33.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-26T01:43:33.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-26T01:43:33.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:43:33.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:43:33.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:43:33.176 [DEBUG] [Thread-22187] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:43:38.795 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:43:38.796 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:43:43.011 [DEBUG] [Thread-22189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:43:44.261 [DEBUG] [Thread-22190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:43:58.061 [DEBUG] [Thread-22191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:44:03.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:44:03.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-26T01:44:03.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 43, 49), 1.87, 88.12, 0.0, 14.98, 11.87, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:44:03.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:43:49
2025-12-26T01:44:04.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:44:04.158 [DEBUG] [Thread-22192] [transport.py] [_log()] starting thread (client mode): 0xbbfcd3c0
2025-12-26T01:44:04.159 [DEBUG] [Thread-22192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:44:04.178 [DEBUG] [Thread-22192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:44:04.178 [INFO] [Thread-22192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:44:04.181 [DEBUG] [Thread-22192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] client lang: <none>
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] server lang: <none>
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] kex follows: False
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] Compression: none
2025-12-26T01:44:04.182 [DEBUG] [Thread-22192] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:44:04.201 [DEBUG] [Thread-22192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:44:04.201 [DEBUG] [Thread-22192] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:44:04.202 [DEBUG] [Thread-22192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:44:04.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:44:04.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:44:04.204 [DEBUG] [Thread-22192] [transport.py] [_log()] userauth is OK
2025-12-26T01:44:04.204 [DEBUG] [Thread-22192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:44:04.204 [DEBUG] [Thread-22192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:44:04.204 [DEBUG] [Thread-22192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:44:04.204 [DEBUG] [Thread-22192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:44:04.240 [INFO] [Thread-22192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:44:04.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:44:04.818 [DEBUG] [Thread-22192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:44:04.818 [DEBUG] [Thread-22192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:44:04.818 [DEBUG] [Thread-22192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:44:04.859 [DEBUG] [Thread-22192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:44:04.859 [DEBUG] [Thread-22192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:44:04.862 [DEBUG] [Thread-22192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:44:04.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:44:04.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:44:04.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:44:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:44:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:44:04.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:44:04.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:44:04.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:44:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:44:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.988601 -999.00  +12.00  12.37     88  +10.20 1 1 1 3 1     0    0 1.53 -21.56 ZNESW 12.4 12.4 189.8 17.0 12.7 -23.0 12.6 -22.5 12.4 -20.7 12.7 -22.0
2025-12-26T01:44:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:44:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:44:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.988601
2025-12-26T01:44:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:44:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:44:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:44:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:44:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:44:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:43:49', tmtdew=1.87, humidity=88.12, cloud=0.0, wind=14.98, temperature=11.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:43:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:43:00')
2025-12-26T01:44:04.881 [DEBUG] [Thread-22192] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:44:04.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-26T01:44:04.976 [DEBUG] [Thread-22195] [transport.py] [_log()] starting thread (client mode): 0xb9546260
2025-12-26T01:44:04.976 [DEBUG] [Thread-22195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:44:04.992 [DEBUG] [Thread-22195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:44:04.992 [INFO] [Thread-22195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:44:04.999 [DEBUG] [Thread-22195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:44:04.999 [DEBUG] [Thread-22195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] client lang: <none>
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] server lang: <none>
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] kex follows: False
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] Compression: none
2025-12-26T01:44:05.000 [DEBUG] [Thread-22195] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:44:05.059 [DEBUG] [Thread-22195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:44:05.060 [DEBUG] [Thread-22195] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:44:05.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:44:05.061 [DEBUG] [Thread-22195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:44:05.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:44:05.115 [DEBUG] [Thread-22195] [transport.py] [_log()] userauth is OK
2025-12-26T01:44:05.115 [DEBUG] [Thread-22195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:44:05.115 [DEBUG] [Thread-22195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:44:05.115 [DEBUG] [Thread-22195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:44:05.116 [DEBUG] [Thread-22195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:44:05.134 [INFO] [Thread-22195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:44:05.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-26T01:44:05.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:44:05.967 [DEBUG] [Thread-22195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:44:05.967 [DEBUG] [Thread-22195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:44:06.015 [DEBUG] [Thread-22195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:44:06.015 [DEBUG] [Thread-22195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:44:06.024 [DEBUG] [Thread-22195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:44:06.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:44:06.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:44:06.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-26T01:44:06.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:44:06.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:44:06.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:44:06.060 [DEBUG] [Thread-22195] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:44:13.095 [DEBUG] [Thread-22197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:28.143 [DEBUG] [Thread-22198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:36.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:44:36.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:44:36.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-26T01:44:36.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 44, 21), 1.87, 88.17, 0.0, 16.57, 11.9, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:44:36.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:44:21
2025-12-26T01:44:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:44:37.048 [DEBUG] [Thread-22199] [transport.py] [_log()] starting thread (client mode): 0xbbfcd960
2025-12-26T01:44:37.048 [DEBUG] [Thread-22199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:44:37.067 [DEBUG] [Thread-22199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:44:37.068 [INFO] [Thread-22199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] client lang: <none>
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] server lang: <none>
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] kex follows: False
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] Compression: none
2025-12-26T01:44:37.069 [DEBUG] [Thread-22199] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:44:37.078 [DEBUG] [Thread-22199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:44:37.078 [DEBUG] [Thread-22199] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:44:37.079 [DEBUG] [Thread-22199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:44:37.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:44:37.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:44:37.080 [DEBUG] [Thread-22199] [transport.py] [_log()] userauth is OK
2025-12-26T01:44:37.081 [DEBUG] [Thread-22199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:44:37.081 [DEBUG] [Thread-22199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:44:37.081 [DEBUG] [Thread-22199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:44:37.081 [DEBUG] [Thread-22199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:44:37.095 [INFO] [Thread-22199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:44:37.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:44:37.731 [DEBUG] [Thread-22199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:44:37.731 [DEBUG] [Thread-22199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:44:37.731 [DEBUG] [Thread-22199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:44:37.772 [DEBUG] [Thread-22199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:44:37.772 [DEBUG] [Thread-22199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:44:37.775 [DEBUG] [Thread-22199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:44:37.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:44:37.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:44:37.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:44:37.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:44:37.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:44:37.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:44:37.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:44:37.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:44:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:44:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.988949 -999.00  +12.00  10.63     88  +10.20 1 1 1 3 1     0    0 1.44 -23.21 ZNESW 10.6 10.6 182.4 16.9 12.7 -22.9 12.6 -22.6 12.4 -20.8 12.7 -22.3
2025-12-26T01:44:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:44:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:44:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.988949
2025-12-26T01:44:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:44:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:44:37.804 [DEBUG] [Thread-22199] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:44:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:44:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:44:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:44:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:44:21', tmtdew=1.87, humidity=88.17, cloud=0.0, wind=16.57, temperature=11.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:44:05.194', atlas_cloud=1, atlas_rain=1, zp_data=[1.0877499999999998, 0.2872500000000002, 0.7022500000000003, 0.5654999999999992, 0.8334999999999999, 0.8372500000000009, 1.375, 1.8197500000000009, 0.5365000000000002, 0.1639999999999997, 0.26374999999999815, 0.3849999999999998, 0.36049999999999827, 0.4052499999999988, 0.7599999999999998, 0.8379999999999992, 0.2992500000000007, 0.2969999999999988, 0.16999999999999993, 0.3802499999999984, 0.37650000000000006, 0.4212499999999988, 0.5222500000000005, 0.5527500000000005, 0.2909999999999986, 0.32649999999999935, 0.31874999999999964, 0.3595000000000006, 0.4790000000000001, 0.44200000000000106, 0.46300000000000097, 0.5910000000000011, 0.34974999999999845], zp_timestamp='2025-12-25T23:43:00')
2025-12-26T01:44:37.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-26T01:44:38.998 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:38.999 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:43.177 [DEBUG] [Thread-22202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:44.336 [DEBUG] [Thread-22203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:44:58.229 [DEBUG] [Thread-22204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:13.260 [DEBUG] [Thread-22205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:28.296 [DEBUG] [Thread-22206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:39.199 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:39.201 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:43.331 [DEBUG] [Thread-22207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:44.411 [DEBUG] [Thread-22208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:45:58.360 [DEBUG] [Thread-22209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:13.391 [DEBUG] [Thread-22210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:28.425 [DEBUG] [Thread-22211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:39.405 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:39.407 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:43.460 [DEBUG] [Thread-22212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:44.503 [DEBUG] [Thread-22213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:46:51.477 [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-26T01:46:58.497 [DEBUG] [Thread-22214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:13.532 [DEBUG] [Thread-22215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:47:21.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:47:21.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:47:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 47, 1), 1.8, 88.24, 0.0, 16.32, 11.9, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:47:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:47:01
2025-12-26T01:47:22.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:47:22.508 [DEBUG] [Thread-22216] [transport.py] [_log()] starting thread (client mode): 0xb6b62680
2025-12-26T01:47:22.508 [DEBUG] [Thread-22216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:47:22.531 [DEBUG] [Thread-22216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:47:22.531 [INFO] [Thread-22216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:47:22.535 [DEBUG] [Thread-22216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:47:22.535 [DEBUG] [Thread-22216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:47:22.535 [DEBUG] [Thread-22216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] client lang: <none>
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] server lang: <none>
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] kex follows: False
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] Compression: none
2025-12-26T01:47:22.536 [DEBUG] [Thread-22216] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:47:22.552 [DEBUG] [Thread-22216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:47:22.553 [DEBUG] [Thread-22216] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:47:22.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:47:22.554 [DEBUG] [Thread-22216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:47:22.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:47:22.556 [DEBUG] [Thread-22216] [transport.py] [_log()] userauth is OK
2025-12-26T01:47:22.556 [DEBUG] [Thread-22216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:47:22.556 [DEBUG] [Thread-22216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:47:22.557 [DEBUG] [Thread-22216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:47:22.557 [DEBUG] [Thread-22216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:47:22.592 [INFO] [Thread-22216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:47:22.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:47:23.198 [DEBUG] [Thread-22216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:47:23.198 [DEBUG] [Thread-22216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:47:23.198 [DEBUG] [Thread-22216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:47:23.239 [DEBUG] [Thread-22216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:47:23.239 [DEBUG] [Thread-22216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:47:23.243 [DEBUG] [Thread-22216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:47:23.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:47:23.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:47:23.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:47:23.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:47:23.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:47:23.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:47:23.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:47:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:47:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:47:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.990685 -999.00  +11.90  14.54     88  +10.20 1 2 1 3 1     0    0 1.16 -31.72 zNESW 14.5 14.5 193.2 19.0 12.7 -22.8 12.5 -22.6 12.4 -20.7 12.7 -22.0
2025-12-26T01:47:23.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:47:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:47:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.990685
2025-12-26T01:47:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:47:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:47:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:47:23.271 [DEBUG] [Thread-22216] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:47:23.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:47:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:47:23.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:47:01', tmtdew=1.8, humidity=88.24, cloud=0.0, wind=16.32, temperature=11.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:46:35.184', atlas_cloud=2, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:45:00')
2025-12-26T01:47:23.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-26T01:47:23.366 [DEBUG] [Thread-22219] [transport.py] [_log()] starting thread (client mode): 0xb95f3850
2025-12-26T01:47:23.366 [DEBUG] [Thread-22219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:47:23.380 [DEBUG] [Thread-22219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:47:23.381 [INFO] [Thread-22219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:47:23.388 [DEBUG] [Thread-22219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:47:23.388 [DEBUG] [Thread-22219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:47:23.388 [DEBUG] [Thread-22219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:47:23.388 [DEBUG] [Thread-22219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] client lang: <none>
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] server lang: <none>
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] kex follows: False
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:47:23.389 [DEBUG] [Thread-22219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:47:23.390 [DEBUG] [Thread-22219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:47:23.390 [DEBUG] [Thread-22219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:47:23.390 [DEBUG] [Thread-22219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:47:23.390 [DEBUG] [Thread-22219] [transport.py] [_log()] Compression: none
2025-12-26T01:47:23.390 [DEBUG] [Thread-22219] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:47:23.449 [DEBUG] [Thread-22219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:47:23.450 [DEBUG] [Thread-22219] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:47:23.451 [DEBUG] [Thread-22219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:47:23.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:47:23.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:47:23.505 [DEBUG] [Thread-22219] [transport.py] [_log()] userauth is OK
2025-12-26T01:47:23.506 [DEBUG] [Thread-22219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:47:23.506 [DEBUG] [Thread-22219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:47:23.506 [DEBUG] [Thread-22219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:47:23.506 [DEBUG] [Thread-22219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:47:23.528 [INFO] [Thread-22219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:47:23.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:47:23.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:47:24.400 [DEBUG] [Thread-22219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:47:24.400 [DEBUG] [Thread-22219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:47:24.448 [DEBUG] [Thread-22219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:47:24.448 [DEBUG] [Thread-22219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:47:24.456 [DEBUG] [Thread-22219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:47:24.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:47:24.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-26T01:47:24.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-26T01:47:24.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:47:24.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:47:24.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:47:24.491 [DEBUG] [Thread-22219] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:47:28.569 [DEBUG] [Thread-22221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:39.611 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:39.612 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:43.629 [DEBUG] [Thread-22222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:44.582 [DEBUG] [Thread-22223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:51.674 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:47:54.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:47:54.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:47:54.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-26T01:47:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 47, 34), 1.86, 88.22, 0.0, 19.13, 11.95, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:47:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:47:34
2025-12-26T01:47:55.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:47:55.511 [DEBUG] [Thread-22224] [transport.py] [_log()] starting thread (client mode): 0xb6b615a0
2025-12-26T01:47:55.511 [DEBUG] [Thread-22224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:47:55.531 [DEBUG] [Thread-22224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:47:55.531 [INFO] [Thread-22224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:47:55.534 [DEBUG] [Thread-22224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:47:55.534 [DEBUG] [Thread-22224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:47:55.534 [DEBUG] [Thread-22224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:47:55.534 [DEBUG] [Thread-22224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] client lang: <none>
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] server lang: <none>
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] kex follows: False
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:47:55.535 [DEBUG] [Thread-22224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:47:55.536 [DEBUG] [Thread-22224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:47:55.536 [DEBUG] [Thread-22224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:47:55.536 [DEBUG] [Thread-22224] [transport.py] [_log()] Compression: none
2025-12-26T01:47:55.536 [DEBUG] [Thread-22224] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:47:55.554 [DEBUG] [Thread-22224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:47:55.554 [DEBUG] [Thread-22224] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:47:55.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:47:55.555 [DEBUG] [Thread-22224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:47:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:47:55.557 [DEBUG] [Thread-22224] [transport.py] [_log()] userauth is OK
2025-12-26T01:47:55.557 [DEBUG] [Thread-22224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:47:55.557 [DEBUG] [Thread-22224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:47:55.557 [DEBUG] [Thread-22224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:47:55.558 [DEBUG] [Thread-22224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:47:55.591 [INFO] [Thread-22224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:47:55.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:47:56.246 [DEBUG] [Thread-22224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:47:56.246 [DEBUG] [Thread-22224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:47:56.247 [DEBUG] [Thread-22224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:47:56.287 [DEBUG] [Thread-22224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:47:56.287 [DEBUG] [Thread-22224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:47:56.291 [DEBUG] [Thread-22224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:47:56.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:47:56.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:47:56.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:47:56.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:47:56.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:47:56.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:47:56.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:47:56.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:47:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:47:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.991032 -999.00  +12.00  12.87     88  +10.20 1 2 1 3 1     0    0 1.13 -32.65 zNESW 12.9 12.9 203.0 17.1 12.7 -22.9 12.6 -22.6 12.3 -20.6 12.7 -21.9
2025-12-26T01:47:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:47:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:47:56.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.991032
2025-12-26T01:47:56.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:47:56.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:47:56.319 [DEBUG] [Thread-22224] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:47:56.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:47:56.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:47:56.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:47:56.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:47:34', tmtdew=1.86, humidity=88.22, cloud=0.0, wind=19.13, temperature=11.95, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:47:05.165', atlas_cloud=2, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:45:00')
2025-12-26T01:47:56.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-26T01:47:56.419 [DEBUG] [Thread-22227] [transport.py] [_log()] starting thread (client mode): 0xb9559180
2025-12-26T01:47:56.419 [DEBUG] [Thread-22227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:47:56.437 [DEBUG] [Thread-22227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:47:56.437 [INFO] [Thread-22227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] client lang: <none>
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] server lang: <none>
2025-12-26T01:47:56.449 [DEBUG] [Thread-22227] [transport.py] [_log()] kex follows: False
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] Compression: none
2025-12-26T01:47:56.450 [DEBUG] [Thread-22227] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:47:56.512 [DEBUG] [Thread-22227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:47:56.513 [DEBUG] [Thread-22227] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:47:56.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:47:56.514 [DEBUG] [Thread-22227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:47:56.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:47:56.571 [DEBUG] [Thread-22227] [transport.py] [_log()] userauth is OK
2025-12-26T01:47:56.571 [DEBUG] [Thread-22227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:47:56.571 [DEBUG] [Thread-22227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:47:56.572 [DEBUG] [Thread-22227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:47:56.572 [DEBUG] [Thread-22227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:47:56.600 [INFO] [Thread-22227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:47:56.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-26T01:47:56.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:47:57.403 [DEBUG] [Thread-22227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:47:57.404 [DEBUG] [Thread-22227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:47:57.452 [DEBUG] [Thread-22227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:47:57.452 [DEBUG] [Thread-22227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:47:57.462 [DEBUG] [Thread-22227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:47:57.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:47:57.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-26T01:47:57.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:47:57.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:47:57.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:47:57.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:47:57.498 [DEBUG] [Thread-22227] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:47:58.662 [DEBUG] [Thread-22229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:13.711 [DEBUG] [Thread-22230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:27.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:48:27.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:48:27.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-26T01:48:28.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 48, 6), 1.85, 88.25, 0.0, 18.97, 11.9, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:48:28.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:48:06
2025-12-26T01:48:28.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:48:28.490 [DEBUG] [Thread-22231] [transport.py] [_log()] starting thread (client mode): 0xb95d7970
2025-12-26T01:48:28.490 [DEBUG] [Thread-22231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:48:28.514 [DEBUG] [Thread-22231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:48:28.514 [INFO] [Thread-22231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:48:28.517 [DEBUG] [Thread-22231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:48:28.517 [DEBUG] [Thread-22231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] client lang: <none>
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] server lang: <none>
2025-12-26T01:48:28.518 [DEBUG] [Thread-22231] [transport.py] [_log()] kex follows: False
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] Compression: none
2025-12-26T01:48:28.519 [DEBUG] [Thread-22231] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:48:28.540 [DEBUG] [Thread-22231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:48:28.540 [DEBUG] [Thread-22231] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:48:28.541 [DEBUG] [Thread-22231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:48:28.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:48:28.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:48:28.543 [DEBUG] [Thread-22231] [transport.py] [_log()] userauth is OK
2025-12-26T01:48:28.543 [DEBUG] [Thread-22231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:48:28.543 [DEBUG] [Thread-22231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:48:28.543 [DEBUG] [Thread-22231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:48:28.543 [DEBUG] [Thread-22231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:48:28.568 [INFO] [Thread-22231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:48:28.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:48:28.745 [DEBUG] [Thread-22233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:29.213 [DEBUG] [Thread-22231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:48:29.214 [DEBUG] [Thread-22231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:48:29.214 [DEBUG] [Thread-22231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:48:29.255 [DEBUG] [Thread-22231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:48:29.255 [DEBUG] [Thread-22231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:48:29.258 [DEBUG] [Thread-22231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:48:29.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:48:29.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:48:29.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:48:29.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:48:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:48:29.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:48:29.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:48:29.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:48:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:48:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.991379 -999.00  +12.00  13.56     88  +10.20 1 2 1 3 1     0    0 1.12 -33.01 zNESW 13.6 13.6 199.0 17.1 12.7 -22.9 12.6 -22.6 12.4 -20.6 12.7 -21.7
2025-12-26T01:48:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:48:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:48:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.991379
2025-12-26T01:48:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:48:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:48:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:48:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:48:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:48:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:48:06', tmtdew=1.85, humidity=88.25, cloud=0.0, wind=18.97, temperature=11.9, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:47:35.146', atlas_cloud=2, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:45:00')
2025-12-26T01:48:29.287 [DEBUG] [Thread-22231] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:48:29.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-26T01:48:29.381 [DEBUG] [Thread-22235] [transport.py] [_log()] starting thread (client mode): 0xb9593b20
2025-12-26T01:48:29.381 [DEBUG] [Thread-22235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:48:29.395 [DEBUG] [Thread-22235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:48:29.396 [INFO] [Thread-22235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:48:29.403 [DEBUG] [Thread-22235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:48:29.403 [DEBUG] [Thread-22235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] client lang: <none>
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] server lang: <none>
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] kex follows: False
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:48:29.404 [DEBUG] [Thread-22235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:48:29.405 [DEBUG] [Thread-22235] [transport.py] [_log()] Compression: none
2025-12-26T01:48:29.405 [DEBUG] [Thread-22235] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:48:29.460 [DEBUG] [Thread-22235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:48:29.461 [DEBUG] [Thread-22235] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:48:29.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:48:29.462 [DEBUG] [Thread-22235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:48:29.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:48:29.516 [DEBUG] [Thread-22235] [transport.py] [_log()] userauth is OK
2025-12-26T01:48:29.517 [DEBUG] [Thread-22235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:48:29.517 [DEBUG] [Thread-22235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:48:29.517 [DEBUG] [Thread-22235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:48:29.517 [DEBUG] [Thread-22235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:48:29.530 [INFO] [Thread-22235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:48:29.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T01:48:29.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:48:30.366 [DEBUG] [Thread-22235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:48:30.366 [DEBUG] [Thread-22235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:48:30.414 [DEBUG] [Thread-22235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:48:30.414 [DEBUG] [Thread-22235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:48:30.423 [DEBUG] [Thread-22235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:48:30.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:48: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')
2025-12-26T01:48:30.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-26T01:48:30.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:48:30.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:48:30.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:48:30.460 [DEBUG] [Thread-22235] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:48:39.813 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:39.814 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:43.782 [DEBUG] [Thread-22237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:44.654 [DEBUG] [Thread-22238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:48:58.832 [DEBUG] [Thread-22239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:00.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:49:00.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:49:00.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-26T01:49:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 48, 38), 1.85, 88.29, 0.0, 17.01, 11.99, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:49:01.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:48:38
2025-12-26T01:49:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:49:01.488 [DEBUG] [Thread-22240] [transport.py] [_log()] starting thread (client mode): 0xb95b2800
2025-12-26T01:49:01.488 [DEBUG] [Thread-22240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:49:01.506 [DEBUG] [Thread-22240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:49:01.507 [INFO] [Thread-22240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] client lang: <none>
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] server lang: <none>
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] kex follows: False
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] Compression: none
2025-12-26T01:49:01.510 [DEBUG] [Thread-22240] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:49:01.525 [DEBUG] [Thread-22240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:49:01.525 [DEBUG] [Thread-22240] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:49:01.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:49:01.525 [DEBUG] [Thread-22240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:49:01.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:49:01.526 [DEBUG] [Thread-22240] [transport.py] [_log()] userauth is OK
2025-12-26T01:49:01.526 [DEBUG] [Thread-22240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:49:01.526 [DEBUG] [Thread-22240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:49:01.526 [DEBUG] [Thread-22240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:49:01.526 [DEBUG] [Thread-22240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:49:01.541 [INFO] [Thread-22240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:49:01.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:49:02.185 [DEBUG] [Thread-22240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:49:02.185 [DEBUG] [Thread-22240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:49:02.185 [DEBUG] [Thread-22240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:49:02.226 [DEBUG] [Thread-22240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:49:02.226 [DEBUG] [Thread-22240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:49:02.229 [DEBUG] [Thread-22240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:49:02.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:49:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:49:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:49:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:49:02.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:49:02.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:49:02.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.992073 -999.00  +12.10   9.78     88  +10.20 1 2 1 3 1     0    0 1.05 -34.09 zNESW 9.8 9.8 192.4 14.8 12.7 -22.7 12.5 -22.5 12.3 -20.6 12.7 -21.8
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.992073
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:49:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:48:38', tmtdew=1.85, humidity=88.29, cloud=0.0, wind=17.01, temperature=11.99, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:48:35.107', atlas_cloud=2, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:45:00')
2025-12-26T01:49:02.246 [DEBUG] [Thread-22240] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:49:02.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-26T01:49:02.331 [DEBUG] [Thread-22243] [transport.py] [_log()] starting thread (client mode): 0xb95b1180
2025-12-26T01:49:02.332 [DEBUG] [Thread-22243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:49:02.346 [DEBUG] [Thread-22243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:49:02.346 [INFO] [Thread-22243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] client lang: <none>
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] server lang: <none>
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] kex follows: False
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] Compression: none
2025-12-26T01:49:02.354 [DEBUG] [Thread-22243] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:49:02.410 [DEBUG] [Thread-22243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:49:02.410 [DEBUG] [Thread-22243] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:49:02.410 [DEBUG] [Thread-22243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:49:02.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:49:02.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:49:02.471 [DEBUG] [Thread-22243] [transport.py] [_log()] userauth is OK
2025-12-26T01:49:02.471 [DEBUG] [Thread-22243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:49:02.471 [DEBUG] [Thread-22243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:49:02.471 [DEBUG] [Thread-22243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:49:02.471 [DEBUG] [Thread-22243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:49:02.486 [INFO] [Thread-22243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:49:02.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-26T01:49:02.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:49:03.317 [DEBUG] [Thread-22243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:49:03.317 [DEBUG] [Thread-22243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:49:03.364 [DEBUG] [Thread-22243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:49:03.365 [DEBUG] [Thread-22243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:49:03.373 [DEBUG] [Thread-22243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:49:03.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:49:03.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:49:03.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-26T01:49:03.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:49:03.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:49:03.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:49:03.405 [DEBUG] [Thread-22243] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:49:13.866 [DEBUG] [Thread-22245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:28.918 [DEBUG] [Thread-22246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:33.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:49:33.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:49:33.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-26T01:49:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 49, 10), 1.84, 88.29, 0.0, 18.16, 11.97, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:49:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:49:10
2025-12-26T01:49:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:49:34.404 [DEBUG] [Thread-22247] [transport.py] [_log()] starting thread (client mode): 0xb9547af0
2025-12-26T01:49:34.404 [DEBUG] [Thread-22247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:49:34.421 [DEBUG] [Thread-22247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:49:34.421 [INFO] [Thread-22247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:49:34.422 [DEBUG] [Thread-22247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:49:34.422 [DEBUG] [Thread-22247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] client lang: <none>
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] server lang: <none>
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] kex follows: False
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] Compression: none
2025-12-26T01:49:34.423 [DEBUG] [Thread-22247] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:49:34.431 [DEBUG] [Thread-22247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:49:34.431 [DEBUG] [Thread-22247] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:49:34.431 [DEBUG] [Thread-22247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:49:34.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:49:34.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:49:34.433 [DEBUG] [Thread-22247] [transport.py] [_log()] userauth is OK
2025-12-26T01:49:34.433 [DEBUG] [Thread-22247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:49:34.433 [DEBUG] [Thread-22247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:49:34.433 [DEBUG] [Thread-22247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:49:34.433 [DEBUG] [Thread-22247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:49:34.449 [INFO] [Thread-22247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:49:34.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:49:35.093 [DEBUG] [Thread-22247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:49:35.093 [DEBUG] [Thread-22247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:49:35.093 [DEBUG] [Thread-22247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:49:35.134 [DEBUG] [Thread-22247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:49:35.134 [DEBUG] [Thread-22247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:49:35.138 [DEBUG] [Thread-22247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:49:35.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:49:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:49:35.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:49:35.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:49:35.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:49:35.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:49:35.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:49:35.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:49:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:49:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.992421 -999.00  +12.10  13.41     88  +10.20 1 2 1 3 1     0    0 1.03 -34.51 zNESW 13.4 13.4 186.2 18.4 12.7 -22.8 12.6 -22.2 12.3 -20.6 12.7 -21.8
2025-12-26T01:49:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:49:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:49:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.992421
2025-12-26T01:49:35.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:49:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:49:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:49:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:49:35.165 [DEBUG] [Thread-22247] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:49:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:49:35.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:49:10', tmtdew=1.84, humidity=88.29, cloud=0.0, wind=18.16, temperature=11.97, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:49:05.174', atlas_cloud=2, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:45:00')
2025-12-26T01:49:35.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-26T01:49:35.261 [DEBUG] [Thread-22250] [transport.py] [_log()] starting thread (client mode): 0xb6b60370
2025-12-26T01:49:35.261 [DEBUG] [Thread-22250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:49:35.276 [DEBUG] [Thread-22250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:49:35.276 [INFO] [Thread-22250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] client lang: <none>
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] server lang: <none>
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] kex follows: False
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:49:35.284 [DEBUG] [Thread-22250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:49:35.285 [DEBUG] [Thread-22250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:49:35.285 [DEBUG] [Thread-22250] [transport.py] [_log()] Compression: none
2025-12-26T01:49:35.285 [DEBUG] [Thread-22250] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:49:35.344 [DEBUG] [Thread-22250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:49:35.345 [DEBUG] [Thread-22250] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:49:35.345 [DEBUG] [Thread-22250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:49:35.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:49:35.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:49:35.400 [DEBUG] [Thread-22250] [transport.py] [_log()] userauth is OK
2025-12-26T01:49:35.400 [DEBUG] [Thread-22250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:49:35.400 [DEBUG] [Thread-22250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:49:35.401 [DEBUG] [Thread-22250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:49:35.401 [DEBUG] [Thread-22250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:49:35.419 [INFO] [Thread-22250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:49:35.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-26T01:49:35.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:49:36.264 [DEBUG] [Thread-22250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:49:36.264 [DEBUG] [Thread-22250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:49:36.312 [DEBUG] [Thread-22250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:49:36.312 [DEBUG] [Thread-22250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:49:36.321 [DEBUG] [Thread-22250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:49:36.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:49:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:49:36.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-26T01:49:36.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:49:36.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:49:36.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:49:36.360 [DEBUG] [Thread-22250] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:49:40.016 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:40.017 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:43.949 [DEBUG] [Thread-22252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:44.706 [DEBUG] [Thread-22253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:49:58.988 [DEBUG] [Thread-22254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:50:06.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:50:06.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-26T01:50:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 49, 42), 1.89, 88.3, 0.0, 18.56, 12.04, 1, 1, 2, 2, 0, 0),)
2025-12-26T01:50:07.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:49:42
2025-12-26T01:50:07.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:50:07.356 [DEBUG] [Thread-22255] [transport.py] [_log()] starting thread (client mode): 0xb9591420
2025-12-26T01:50:07.357 [DEBUG] [Thread-22255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:50:07.377 [DEBUG] [Thread-22255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:50:07.377 [INFO] [Thread-22255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:50:07.378 [DEBUG] [Thread-22255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:50:07.378 [DEBUG] [Thread-22255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:50:07.378 [DEBUG] [Thread-22255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:50:07.378 [DEBUG] [Thread-22255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] client lang: <none>
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] server lang: <none>
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] kex follows: False
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] Compression: none
2025-12-26T01:50:07.379 [DEBUG] [Thread-22255] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:50:07.395 [DEBUG] [Thread-22255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:50:07.395 [DEBUG] [Thread-22255] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:50:07.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:50:07.396 [DEBUG] [Thread-22255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:50:07.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:50:07.398 [DEBUG] [Thread-22255] [transport.py] [_log()] userauth is OK
2025-12-26T01:50:07.398 [DEBUG] [Thread-22255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:50:07.399 [DEBUG] [Thread-22255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:50:07.399 [DEBUG] [Thread-22255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:50:07.399 [DEBUG] [Thread-22255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:50:07.422 [INFO] [Thread-22255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:50:07.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:50:14.024 [DEBUG] [Thread-22257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:15.734 [DEBUG] [Thread-22255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:50:15.734 [DEBUG] [Thread-22255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:50:15.734 [DEBUG] [Thread-22255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:50:15.775 [DEBUG] [Thread-22255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:50:15.775 [DEBUG] [Thread-22255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:50:15.777 [DEBUG] [Thread-22255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:50:15.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:50:15.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:50:15.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:50:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:50:15.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:50:15.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:50:15.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.992768 -999.00  +12.10  11.75     88  +10.20 1 1 1 3 1     0    0 1.01 -35.32 ZNESW 11.8 11.8 194.6 13.3 12.7 -22.7 12.5 -22.2 12.4 -20.7 12.7 -21.7
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.992768
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:50:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:49:42', tmtdew=1.89, humidity=88.3, cloud=0.0, wind=18.56, temperature=12.04, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:49:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:48:00')
2025-12-26T01:50:15.797 [DEBUG] [Thread-22255] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:50:15.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-26T01:50:15.881 [DEBUG] [Thread-22259] [transport.py] [_log()] starting thread (client mode): 0xbbfccee0
2025-12-26T01:50:15.881 [DEBUG] [Thread-22259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:50:15.896 [DEBUG] [Thread-22259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:50:15.896 [INFO] [Thread-22259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:50:15.903 [DEBUG] [Thread-22259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] client lang: <none>
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] server lang: <none>
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] kex follows: False
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] Compression: none
2025-12-26T01:50:15.904 [DEBUG] [Thread-22259] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:50:15.962 [DEBUG] [Thread-22259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:50:15.962 [DEBUG] [Thread-22259] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:50:15.962 [DEBUG] [Thread-22259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:50:15.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:50:15.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:50:16.019 [DEBUG] [Thread-22259] [transport.py] [_log()] userauth is OK
2025-12-26T01:50:16.019 [DEBUG] [Thread-22259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:50:16.019 [DEBUG] [Thread-22259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:50:16.019 [DEBUG] [Thread-22259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:50:16.019 [DEBUG] [Thread-22259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:50:16.033 [INFO] [Thread-22259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:50:16.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-26T01:50:16.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:50:16.854 [DEBUG] [Thread-22259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:50:16.854 [DEBUG] [Thread-22259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:50:16.902 [DEBUG] [Thread-22259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:50:16.902 [DEBUG] [Thread-22259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:50:16.910 [DEBUG] [Thread-22259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:50:16.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:50:16.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-26T01:50:16.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-26T01:50:16.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:50:16.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:50:16.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:50:16.942 [DEBUG] [Thread-22259] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:50:29.054 [DEBUG] [Thread-22261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:40.222 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:40.225 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:44.110 [DEBUG] [Thread-22262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:44.782 [DEBUG] [Thread-22263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:50:46.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:50:46.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:50:46.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-26T01:50:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 50, 14), 1.9, 88.25, 0.0, 19.66, 12.02, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:50:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:50:14
2025-12-26T01:50:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:50:48.021 [DEBUG] [Thread-22264] [transport.py] [_log()] starting thread (client mode): 0xb6b15420
2025-12-26T01:50:48.022 [DEBUG] [Thread-22264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:50:48.041 [DEBUG] [Thread-22264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:50:48.041 [INFO] [Thread-22264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:48.044 [DEBUG] [Thread-22264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] client lang: <none>
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] server lang: <none>
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] kex follows: False
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] Compression: none
2025-12-26T01:50:48.045 [DEBUG] [Thread-22264] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:50:48.059 [DEBUG] [Thread-22264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:50:48.059 [DEBUG] [Thread-22264] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:50:48.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:50:48.060 [DEBUG] [Thread-22264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:50:48.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:50:48.061 [DEBUG] [Thread-22264] [transport.py] [_log()] userauth is OK
2025-12-26T01:50:48.061 [DEBUG] [Thread-22264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:50:48.061 [DEBUG] [Thread-22264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:50:48.061 [DEBUG] [Thread-22264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:50:48.061 [DEBUG] [Thread-22264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:50:48.074 [INFO] [Thread-22264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:50:48.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:50:48.679 [DEBUG] [Thread-22264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:50:48.679 [DEBUG] [Thread-22264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:50:48.679 [DEBUG] [Thread-22264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:50:48.719 [DEBUG] [Thread-22264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:50:48.719 [DEBUG] [Thread-22264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:50:48.721 [DEBUG] [Thread-22264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:50:48.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:50:48.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:50:48.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:50:48.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:50:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:50:48.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:50:48.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:50:48.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.993115 -999.00  +12.10  14.16     88  +10.20 1 1 1 3 1     0    0 1.03 -33.98 ZNESW 14.2 14.2 188.8 16.4 12.7 -22.7 12.5 -22.3 12.4 -20.4 12.7 -21.7
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.993115
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:50:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:50:14', tmtdew=1.9, humidity=88.25, cloud=0.0, wind=19.66, temperature=12.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:50:05.136', atlas_cloud=1, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:48:00')
2025-12-26T01:50:48.742 [DEBUG] [Thread-22264] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:50:48.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-26T01:50:48.827 [DEBUG] [Thread-22267] [transport.py] [_log()] starting thread (client mode): 0xb95d7970
2025-12-26T01:50:48.827 [DEBUG] [Thread-22267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:50:48.842 [DEBUG] [Thread-22267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:50:48.842 [INFO] [Thread-22267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:50:48.849 [DEBUG] [Thread-22267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:50:48.849 [DEBUG] [Thread-22267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:50:48.849 [DEBUG] [Thread-22267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:50:48.849 [DEBUG] [Thread-22267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:48.849 [DEBUG] [Thread-22267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:50:48.849 [DEBUG] [Thread-22267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] client lang: <none>
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] server lang: <none>
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] kex follows: False
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] Compression: none
2025-12-26T01:50:48.850 [DEBUG] [Thread-22267] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:50:48.906 [DEBUG] [Thread-22267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:50:48.906 [DEBUG] [Thread-22267] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:50:48.906 [DEBUG] [Thread-22267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:50:48.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:50:48.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:50:48.963 [DEBUG] [Thread-22267] [transport.py] [_log()] userauth is OK
2025-12-26T01:50:48.963 [DEBUG] [Thread-22267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:50:48.964 [DEBUG] [Thread-22267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:50:48.964 [DEBUG] [Thread-22267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:50:48.964 [DEBUG] [Thread-22267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:50:48.993 [INFO] [Thread-22267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:50:48.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-26T01:50:48.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:50:49.808 [DEBUG] [Thread-22267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:50:49.808 [DEBUG] [Thread-22267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:50:49.856 [DEBUG] [Thread-22267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:50:49.856 [DEBUG] [Thread-22267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:50:49.865 [DEBUG] [Thread-22267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:50:49.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:50:49.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-26T01:50: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-26T01:50:49.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:50:49.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:50:49.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:50:49.907 [DEBUG] [Thread-22267] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:50:59.139 [DEBUG] [Thread-22269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:14.193 [DEBUG] [Thread-22270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:19.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:51:19.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:51: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-26T01:51:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 50, 46), 1.96, 87.7, 0.0, 19.25, 12.0, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:51:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:50:46
2025-12-26T01:51:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:51:20.966 [DEBUG] [Thread-22271] [transport.py] [_log()] starting thread (client mode): 0xb6b60c40
2025-12-26T01:51:20.966 [DEBUG] [Thread-22271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:51:20.986 [DEBUG] [Thread-22271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:51:20.986 [INFO] [Thread-22271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] client lang: <none>
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] server lang: <none>
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] kex follows: False
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] Compression: none
2025-12-26T01:51:20.989 [DEBUG] [Thread-22271] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:51:21.001 [DEBUG] [Thread-22271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:51:21.001 [DEBUG] [Thread-22271] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:51:21.001 [DEBUG] [Thread-22271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:51:21.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:51:21.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:51:21.002 [DEBUG] [Thread-22271] [transport.py] [_log()] userauth is OK
2025-12-26T01:51:21.002 [DEBUG] [Thread-22271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:51:21.002 [DEBUG] [Thread-22271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:51:21.002 [DEBUG] [Thread-22271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:51:21.002 [DEBUG] [Thread-22271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:51:21.020 [INFO] [Thread-22271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:51:21.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:51:21.802 [DEBUG] [Thread-22271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:51:21.802 [DEBUG] [Thread-22271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:51:21.803 [DEBUG] [Thread-22271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:51:21.843 [DEBUG] [Thread-22271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:51:21.844 [DEBUG] [Thread-22271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:51:21.847 [DEBUG] [Thread-22271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:51:21.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:51:21.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:51:21.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:51:21.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:51:21.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:51:21.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:51:21.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:51:21.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:51:21.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:51:21.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.993462 -999.00  +12.10   8.81     88  +10.20 1 2 1 3 1     0    0 1.08 -32.69 ZnESW 8.8 8.8 176.2 12.2 12.7 -22.7 12.6 -22.2 12.4 -20.5 12.7 -21.7
2025-12-26T01:51:21.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:51:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:51:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.993462
2025-12-26T01:51:21.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:51:21.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:50:46', tmtdew=1.96, humidity=87.7, cloud=0.0, wind=19.25, temperature=12.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:50:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:48:00')
2025-12-26T01:51:21.876 [DEBUG] [Thread-22271] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:51: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-26T01:51:21.967 [DEBUG] [Thread-22274] [transport.py] [_log()] starting thread (client mode): 0xb9545f30
2025-12-26T01:51:21.968 [DEBUG] [Thread-22274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:51:21.983 [DEBUG] [Thread-22274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:51:21.983 [INFO] [Thread-22274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] client lang: <none>
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] server lang: <none>
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] kex follows: False
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:51:21.992 [DEBUG] [Thread-22274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:51:21.993 [DEBUG] [Thread-22274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:51:21.993 [DEBUG] [Thread-22274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:51:21.993 [DEBUG] [Thread-22274] [transport.py] [_log()] Compression: none
2025-12-26T01:51:21.993 [DEBUG] [Thread-22274] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:51:22.048 [DEBUG] [Thread-22274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:51:22.048 [DEBUG] [Thread-22274] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:51:22.049 [DEBUG] [Thread-22274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:51:22.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:51:22.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:51:22.107 [DEBUG] [Thread-22274] [transport.py] [_log()] userauth is OK
2025-12-26T01:51:22.107 [DEBUG] [Thread-22274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:51:22.107 [DEBUG] [Thread-22274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:51:22.107 [DEBUG] [Thread-22274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:51:22.107 [DEBUG] [Thread-22274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:51:22.121 [INFO] [Thread-22274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:51:22.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-26T01:51:22.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:51:22.929 [DEBUG] [Thread-22274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:51:22.929 [DEBUG] [Thread-22274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:51:22.978 [DEBUG] [Thread-22274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:51:22.979 [DEBUG] [Thread-22274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:51:22.988 [DEBUG] [Thread-22274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:51:23.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:51:23.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-26T01:51:23.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-26T01:51:23.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:51:23.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:51:23.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:51:23.039 [DEBUG] [Thread-22274] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:51:29.228 [DEBUG] [Thread-22276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:40.430 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:40.432 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:44.286 [DEBUG] [Thread-22277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:44.853 [DEBUG] [Thread-22278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:51:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:51:53.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:51:53.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-26T01:51:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 51, 50), 1.96, 87.7, 0.0, 16.13, 12.02, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:51:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:51:50
2025-12-26T01:51:53.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:51:54.041 [DEBUG] [Thread-22279] [transport.py] [_log()] starting thread (client mode): 0xb6b17670
2025-12-26T01:51:54.041 [DEBUG] [Thread-22279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:51:54.061 [DEBUG] [Thread-22279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:51:54.061 [INFO] [Thread-22279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] client lang: <none>
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] server lang: <none>
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] kex follows: False
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] Compression: none
2025-12-26T01:51:54.065 [DEBUG] [Thread-22279] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:51:54.085 [DEBUG] [Thread-22279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:51:54.085 [DEBUG] [Thread-22279] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:51:54.086 [DEBUG] [Thread-22279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:51:54.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:51:54.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:51:54.088 [DEBUG] [Thread-22279] [transport.py] [_log()] userauth is OK
2025-12-26T01:51:54.088 [DEBUG] [Thread-22279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:51:54.088 [DEBUG] [Thread-22279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:51:54.088 [DEBUG] [Thread-22279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:51:54.089 [DEBUG] [Thread-22279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:51:54.122 [INFO] [Thread-22279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:51:54.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:51:54.753 [DEBUG] [Thread-22279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:51:54.753 [DEBUG] [Thread-22279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:51:54.754 [DEBUG] [Thread-22279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:51:54.794 [DEBUG] [Thread-22279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:51:54.794 [DEBUG] [Thread-22279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:51:54.798 [DEBUG] [Thread-22279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:51:54.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:51:54.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:51:54.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:51:54.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:51:54.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:51:54.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:51:54.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:51:54.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:51:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:51:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.993810 -999.00  +12.10  10.82     88  +10.20 1 1 1 3 1     0    0 1.07 -33.45 ZNESW 10.8 10.8 175.2 12.4 12.7 -22.7 12.5 -22.2 12.4 -20.6 12.7 -21.7
2025-12-26T01:51:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:51:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:51:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.993810
2025-12-26T01:51:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:51:54.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:51:54.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:51:54.825 [DEBUG] [Thread-22279] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:51:54.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:51:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:51:54.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:51:50', tmtdew=1.96, humidity=87.7, cloud=0.0, wind=16.13, temperature=12.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:51:05.184', atlas_cloud=1, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:48:00')
2025-12-26T01:51:54.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-26T01:51:54.919 [DEBUG] [Thread-22282] [transport.py] [_log()] starting thread (client mode): 0xb6b17af0
2025-12-26T01:51:54.919 [DEBUG] [Thread-22282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:51:54.933 [DEBUG] [Thread-22282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:51:54.934 [INFO] [Thread-22282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:51:54.941 [DEBUG] [Thread-22282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] client lang: <none>
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] server lang: <none>
2025-12-26T01:51:54.942 [DEBUG] [Thread-22282] [transport.py] [_log()] kex follows: False
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] Compression: none
2025-12-26T01:51:54.943 [DEBUG] [Thread-22282] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:51:54.999 [DEBUG] [Thread-22282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:51:54.999 [DEBUG] [Thread-22282] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:51:55.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:51:55.000 [DEBUG] [Thread-22282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:51:55.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:51:55.055 [DEBUG] [Thread-22282] [transport.py] [_log()] userauth is OK
2025-12-26T01:51:55.055 [DEBUG] [Thread-22282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:51:55.055 [DEBUG] [Thread-22282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:51:55.055 [DEBUG] [Thread-22282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:51:55.056 [DEBUG] [Thread-22282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:51:55.073 [INFO] [Thread-22282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:51:55.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-26T01:51:55.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:51:55.952 [DEBUG] [Thread-22282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:51:55.953 [DEBUG] [Thread-22282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:51:56.001 [DEBUG] [Thread-22282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:51:56.001 [DEBUG] [Thread-22282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:51:56.010 [DEBUG] [Thread-22282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:51:56.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:51:56.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-26T01:51:56.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-26T01:51:56.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:51:56.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:51:56.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:51:56.052 [DEBUG] [Thread-22282] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:51:59.320 [DEBUG] [Thread-22284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:14.370 [DEBUG] [Thread-22285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:52:26.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:52:26.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-26T01:52:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 52, 22), 1.96, 87.69, 0.0, 16.15, 12.0, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:52:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:52:22
2025-12-26T01:52:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:52:27.073 [DEBUG] [Thread-22286] [transport.py] [_log()] starting thread (client mode): 0xb6b14550
2025-12-26T01:52:27.073 [DEBUG] [Thread-22286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:52:27.094 [DEBUG] [Thread-22286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:52:27.095 [INFO] [Thread-22286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:52:27.098 [DEBUG] [Thread-22286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] client lang: <none>
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] server lang: <none>
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] kex follows: False
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] Compression: none
2025-12-26T01:52:27.099 [DEBUG] [Thread-22286] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:52:27.116 [DEBUG] [Thread-22286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:52:27.117 [DEBUG] [Thread-22286] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:52:27.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:52:27.117 [DEBUG] [Thread-22286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:52:27.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:52:27.119 [DEBUG] [Thread-22286] [transport.py] [_log()] userauth is OK
2025-12-26T01:52:27.119 [DEBUG] [Thread-22286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:52:27.119 [DEBUG] [Thread-22286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:52:27.119 [DEBUG] [Thread-22286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:52:27.119 [DEBUG] [Thread-22286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:52:27.142 [INFO] [Thread-22286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:52:27.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:52:27.935 [DEBUG] [Thread-22286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:52:27.936 [DEBUG] [Thread-22286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:52:27.936 [DEBUG] [Thread-22286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:52:27.976 [DEBUG] [Thread-22286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:52:27.977 [DEBUG] [Thread-22286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:52:27.979 [DEBUG] [Thread-22286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:52:27.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:52:27.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:52:27.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:52:27.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:52:28.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:52:28.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:52:28.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:52:28.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:52:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:52:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.994504 -999.00  +12.10  12.18     88  +10.20 1 1 1 3 1     0    0 0.87 -39.12 ZNESW 12.2 12.2 171.4 16.1 12.7 -22.8 12.5 -22.6 12.3 -20.5 12.7 -21.7
2025-12-26T01:52:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:52:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:52:28.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.994504
2025-12-26T01:52:28.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:52:28.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:52:28.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:52:28.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:52:28.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:52:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:52:22', tmtdew=1.96, humidity=87.69, cloud=0.0, wind=16.15, temperature=12.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:52:05.146', atlas_cloud=1, atlas_rain=1, zp_data=[2.3237499999999995, 0.31925000000000026, 0.8032500000000002, 1.0344999999999995, nan, 1.933250000000001, 2.2319999999999993, nan, 0.8914999999999997, 0.20149999999999935, 0.2907499999999992, 0.5289999999999999, 0.5439999999999996, 0.6927500000000002, 1.1689999999999996, 1.4564999999999992, 0.34825000000000017, 0.33649999999999913, 0.1899999999999995, 0.42524999999999835, 0.4399999999999986, 0.5447499999999987, 0.5787500000000012, 0.6837499999999999, 0.30599999999999916, 0.39449999999999985, 0.38674999999999926, 0.35749999999999993, 0.6020000000000003, 0.471000000000001, 0.519000000000001, 0.7150000000000007, 0.45174999999999876], zp_timestamp='2025-12-25T23:48:00')
2025-12-26T01:52:28.005 [DEBUG] [Thread-22286] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:52:28.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-26T01:52:28.099 [DEBUG] [Thread-22289] [transport.py] [_log()] starting thread (client mode): 0xb6b15000
2025-12-26T01:52:28.099 [DEBUG] [Thread-22289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:52:28.113 [DEBUG] [Thread-22289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:52:28.113 [INFO] [Thread-22289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:52:28.121 [DEBUG] [Thread-22289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] client lang: <none>
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] server lang: <none>
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] kex follows: False
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:52:28.122 [DEBUG] [Thread-22289] [transport.py] [_log()] Compression: none
2025-12-26T01:52:28.123 [DEBUG] [Thread-22289] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:52:28.178 [DEBUG] [Thread-22289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:52:28.179 [DEBUG] [Thread-22289] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:52:28.179 [DEBUG] [Thread-22289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:52:28.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:52:28.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:52:28.234 [DEBUG] [Thread-22289] [transport.py] [_log()] userauth is OK
2025-12-26T01:52:28.234 [DEBUG] [Thread-22289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:52:28.235 [DEBUG] [Thread-22289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:52:28.235 [DEBUG] [Thread-22289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:52:28.235 [DEBUG] [Thread-22289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:52:28.255 [INFO] [Thread-22289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:52:28.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-26T01:52:28.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:52:29.060 [DEBUG] [Thread-22289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:52:29.060 [DEBUG] [Thread-22289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:52:29.108 [DEBUG] [Thread-22289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:52:29.109 [DEBUG] [Thread-22289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:52:29.117 [DEBUG] [Thread-22289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:52:29.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:52:29.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-26T01:52:29.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:52:29.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:52:29.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:52:29.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:52:29.150 [DEBUG] [Thread-22289] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:52:29.399 [DEBUG] [Thread-22291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:40.638 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:40.639 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:44.447 [DEBUG] [Thread-22292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:44.943 [DEBUG] [Thread-22293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:52:59.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:52:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:52:59.479 [DEBUG] [Thread-22294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:52:59.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 52, 54), 1.95, 87.74, 0.0, 16.97, 12.02, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:52:59.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:52:54
2025-12-26T01:53:00.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:53:00.161 [DEBUG] [Thread-22295] [transport.py] [_log()] starting thread (client mode): 0xb6b62830
2025-12-26T01:53:00.161 [DEBUG] [Thread-22295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:53:00.182 [DEBUG] [Thread-22295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:53:00.182 [INFO] [Thread-22295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:53:00.185 [DEBUG] [Thread-22295] [transport.py] [_log()] client lang: <none>
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] server lang: <none>
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] kex follows: False
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] Compression: none
2025-12-26T01:53:00.186 [DEBUG] [Thread-22295] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:53:00.203 [DEBUG] [Thread-22295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:53:00.203 [DEBUG] [Thread-22295] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:53:00.204 [DEBUG] [Thread-22295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:53:00.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:53:00.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:53:00.206 [DEBUG] [Thread-22295] [transport.py] [_log()] userauth is OK
2025-12-26T01:53:00.206 [DEBUG] [Thread-22295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:53:00.206 [DEBUG] [Thread-22295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:53:00.206 [DEBUG] [Thread-22295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:53:00.206 [DEBUG] [Thread-22295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:53:00.241 [INFO] [Thread-22295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:53:00.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:53:00.898 [DEBUG] [Thread-22295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:53:00.898 [DEBUG] [Thread-22295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:53:00.899 [DEBUG] [Thread-22295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:53:00.939 [DEBUG] [Thread-22295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:53:00.939 [DEBUG] [Thread-22295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:53:00.942 [DEBUG] [Thread-22295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:53:00.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:53:00.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:53:00.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:53:00.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:53:00.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:53:00.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:53:00.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:53:00.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:53:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:53:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.994851 -999.00  +12.10   7.08     88  +10.20 1 1 1 3 1     0    0 0.72 -42.92 ZNESW 7.1 7.1 186.9 15.1 12.7 -22.8 12.5 -22.5 12.4 -20.6 12.7 -21.7
2025-12-26T01:53:00.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:53:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:53:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.994851
2025-12-26T01:53:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:53:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:53:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:53:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:53:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:53:00.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:52:54', tmtdew=1.95, humidity=87.74, cloud=0.0, wind=16.97, temperature=12.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:52:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[2.662749999999999, 0.3152499999999989, 0.7642500000000005, 0.9324999999999992, nan, nan, nan, nan, 0.9894999999999996, 0.19500000000000028, 0.23724999999999952, 0.45199999999999996, 0.5120000000000005, 0.7272499999999997, 1.408999999999999, 1.9469999999999992, 0.3672500000000003, 0.33949999999999925, 0.17799999999999905, 0.38924999999999876, 0.41600000000000037, 0.505749999999999, 0.6082500000000008, 0.7532499999999995, 0.3144999999999989, 0.3460000000000001, 0.37175000000000047, 0.3544999999999998, 0.4969999999999999, 0.471000000000001, 0.5230000000000015, 0.690500000000001, 0.37824999999999953], zp_timestamp='2025-12-25T23:51:00')
2025-12-26T01:53:00.968 [DEBUG] [Thread-22295] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:53:01.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-26T01:53:01.061 [DEBUG] [Thread-22298] [transport.py] [_log()] starting thread (client mode): 0xb6b63670
2025-12-26T01:53:01.061 [DEBUG] [Thread-22298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:53:01.076 [DEBUG] [Thread-22298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:53:01.077 [INFO] [Thread-22298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:53:01.084 [DEBUG] [Thread-22298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:53:01.084 [DEBUG] [Thread-22298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] client lang: <none>
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] server lang: <none>
2025-12-26T01:53:01.085 [DEBUG] [Thread-22298] [transport.py] [_log()] kex follows: False
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] Compression: none
2025-12-26T01:53:01.086 [DEBUG] [Thread-22298] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:53:01.140 [DEBUG] [Thread-22298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:53:01.141 [DEBUG] [Thread-22298] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:53:01.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:53:01.141 [DEBUG] [Thread-22298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:53:01.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:53:01.198 [DEBUG] [Thread-22298] [transport.py] [_log()] userauth is OK
2025-12-26T01:53:01.198 [DEBUG] [Thread-22298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:53:01.198 [DEBUG] [Thread-22298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:53:01.198 [DEBUG] [Thread-22298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:53:01.199 [DEBUG] [Thread-22298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:53:01.218 [INFO] [Thread-22298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:53:01.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-26T01:53:01.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:53:02.036 [DEBUG] [Thread-22298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:53:02.037 [DEBUG] [Thread-22298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:53:02.085 [DEBUG] [Thread-22298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:53:02.085 [DEBUG] [Thread-22298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:53:02.094 [DEBUG] [Thread-22298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:53:02.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:53:02.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-26T01:53:02.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-26T01:53:02.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:53:02.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:53:02.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:53:02.131 [DEBUG] [Thread-22298] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:53:14.512 [DEBUG] [Thread-22300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:53:29.572 [DEBUG] [Thread-22301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:53:32.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:53:32.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:53:32.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-26T01:53:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 53, 26), 1.97, 87.67, 0.0, 15.9, 12.04, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:53:32.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:53:26
2025-12-26T01:53:33.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:53:33.195 [DEBUG] [Thread-22302] [transport.py] [_log()] starting thread (client mode): 0xb6b15f00
2025-12-26T01:53:33.195 [DEBUG] [Thread-22302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:53:33.214 [DEBUG] [Thread-22302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:53:33.214 [INFO] [Thread-22302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] client lang: <none>
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] server lang: <none>
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] kex follows: False
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] Compression: none
2025-12-26T01:53:33.218 [DEBUG] [Thread-22302] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:53:33.234 [DEBUG] [Thread-22302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:53:33.234 [DEBUG] [Thread-22302] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:53:33.234 [DEBUG] [Thread-22302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:53:33.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:53:33.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:53:33.235 [DEBUG] [Thread-22302] [transport.py] [_log()] userauth is OK
2025-12-26T01:53:33.235 [DEBUG] [Thread-22302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:53:33.235 [DEBUG] [Thread-22302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:53:33.235 [DEBUG] [Thread-22302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:53:33.235 [DEBUG] [Thread-22302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:53:33.244 [INFO] [Thread-22302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:53:33.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:53:33.912 [DEBUG] [Thread-22302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:53:33.912 [DEBUG] [Thread-22302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:53:33.912 [DEBUG] [Thread-22302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:53:33.954 [DEBUG] [Thread-22302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:53:33.954 [DEBUG] [Thread-22302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:53:33.956 [DEBUG] [Thread-22302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:53:33.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:53:33.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:53:33.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:53:33.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:53:33.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:53:33.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:53:33.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.995198 -999.00  +12.10  11.09     88  +10.20 1 1 1 3 1     0    0 0.67 -43.99 ZNESW 11.1 11.1 182.4 14.3 12.7 -22.8 12.5 -22.3 12.3 -20.6 12.7 -22.0
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.995198
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:53:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:53:33.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:53:33.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:53:33.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:53:26', tmtdew=1.97, humidity=87.67, cloud=0.0, wind=15.9, temperature=12.04, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:53:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[2.662749999999999, 0.3152499999999989, 0.7642500000000005, 0.9324999999999992, nan, nan, nan, nan, 0.9894999999999996, 0.19500000000000028, 0.23724999999999952, 0.45199999999999996, 0.5120000000000005, 0.7272499999999997, 1.408999999999999, 1.9469999999999992, 0.3672500000000003, 0.33949999999999925, 0.17799999999999905, 0.38924999999999876, 0.41600000000000037, 0.505749999999999, 0.6082500000000008, 0.7532499999999995, 0.3144999999999989, 0.3460000000000001, 0.37175000000000047, 0.3544999999999998, 0.4969999999999999, 0.471000000000001, 0.5230000000000015, 0.690500000000001, 0.37824999999999953], zp_timestamp='2025-12-25T23:51:00')
2025-12-26T01:53:33.975 [DEBUG] [Thread-22302] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:53:34.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-26T01:53:34.059 [DEBUG] [Thread-22305] [transport.py] [_log()] starting thread (client mode): 0xb95b0970
2025-12-26T01:53:34.060 [DEBUG] [Thread-22305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:53:34.074 [DEBUG] [Thread-22305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:53:34.074 [INFO] [Thread-22305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:53:34.081 [DEBUG] [Thread-22305] [transport.py] [_log()] client lang: <none>
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] server lang: <none>
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] kex follows: False
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] Compression: none
2025-12-26T01:53:34.082 [DEBUG] [Thread-22305] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:53:34.136 [DEBUG] [Thread-22305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:53:34.136 [DEBUG] [Thread-22305] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:53:34.136 [DEBUG] [Thread-22305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:53:34.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:53:34.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:53:34.194 [DEBUG] [Thread-22305] [transport.py] [_log()] userauth is OK
2025-12-26T01:53:34.194 [DEBUG] [Thread-22305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:53:34.194 [DEBUG] [Thread-22305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:53:34.194 [DEBUG] [Thread-22305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:53:34.194 [DEBUG] [Thread-22305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:53:34.211 [INFO] [Thread-22305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:53:34.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-26T01:53:34.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:53:35.029 [DEBUG] [Thread-22305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:53:35.029 [DEBUG] [Thread-22305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:53:35.078 [DEBUG] [Thread-22305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:53:35.078 [DEBUG] [Thread-22305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:53:35.089 [DEBUG] [Thread-22305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:53:35.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:53:35.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-26T01:53:35.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-26T01:53:35.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:53:35.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:53:35.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:53:35.121 [DEBUG] [Thread-22305] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:53:40.841 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:53:40.842 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:53:44.610 [DEBUG] [Thread-22307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:53:45.005 [DEBUG] [Thread-22308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:53:59.663 [DEBUG] [Thread-22309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:05.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:54:05.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:54:05.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-26T01:54:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 53, 58), 1.97, 87.64, 0.0, 16.09, 12.02, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:54:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:53:58
2025-12-26T01:54:05.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:54:06.145 [DEBUG] [Thread-22310] [transport.py] [_log()] starting thread (client mode): 0xb6b625c0
2025-12-26T01:54:06.145 [DEBUG] [Thread-22310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:54:06.166 [DEBUG] [Thread-22310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:54:06.166 [INFO] [Thread-22310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] client lang: <none>
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] server lang: <none>
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] kex follows: False
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] Compression: none
2025-12-26T01:54:06.169 [DEBUG] [Thread-22310] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:54:06.188 [DEBUG] [Thread-22310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:54:06.188 [DEBUG] [Thread-22310] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:54:06.189 [DEBUG] [Thread-22310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:54:06.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:54:06.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:54:06.190 [DEBUG] [Thread-22310] [transport.py] [_log()] userauth is OK
2025-12-26T01:54:06.190 [DEBUG] [Thread-22310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:54:06.190 [DEBUG] [Thread-22310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:54:06.190 [DEBUG] [Thread-22310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:54:06.190 [DEBUG] [Thread-22310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:54:06.223 [INFO] [Thread-22310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:54:06.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:54:06.842 [DEBUG] [Thread-22310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:54:06.842 [DEBUG] [Thread-22310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:54:06.842 [DEBUG] [Thread-22310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:54:06.883 [DEBUG] [Thread-22310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:54:06.883 [DEBUG] [Thread-22310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:54:06.887 [DEBUG] [Thread-22310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:54:06.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:54:06.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:54:06.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:54:06.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:54:06.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:54:06.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:54:06.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:54:06.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:54:06.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:54:06.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.995546 -999.00  +12.10   9.60     88  +10.20 1 2 1 3 1     0    0 0.50 -49.10 ZnESW 9.6 9.6 180.4 13.0 12.7 -22.9 12.5 -22.6 12.3 -20.7 12.6 -22.0
2025-12-26T01:54:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:54:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:54:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.995546
2025-12-26T01:54:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:54:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:54:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:54:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:54:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:54:06.916 [DEBUG] [Thread-22310] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:54:06.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:53:58', tmtdew=1.97, humidity=87.64, cloud=0.0, wind=16.09, temperature=12.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:53:35.174', atlas_cloud=2, atlas_rain=1, zp_data=[2.662749999999999, 0.3152499999999989, 0.7642500000000005, 0.9324999999999992, nan, nan, nan, nan, 0.9894999999999996, 0.19500000000000028, 0.23724999999999952, 0.45199999999999996, 0.5120000000000005, 0.7272499999999997, 1.408999999999999, 1.9469999999999992, 0.3672500000000003, 0.33949999999999925, 0.17799999999999905, 0.38924999999999876, 0.41600000000000037, 0.505749999999999, 0.6082500000000008, 0.7532499999999995, 0.3144999999999989, 0.3460000000000001, 0.37175000000000047, 0.3544999999999998, 0.4969999999999999, 0.471000000000001, 0.5230000000000015, 0.690500000000001, 0.37824999999999953], zp_timestamp='2025-12-25T23:51:00')
2025-12-26T01:54:06.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-26T01:54:07.009 [DEBUG] [Thread-22313] [transport.py] [_log()] starting thread (client mode): 0xb6b16a10
2025-12-26T01:54:07.009 [DEBUG] [Thread-22313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:54:07.025 [DEBUG] [Thread-22313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:54:07.025 [INFO] [Thread-22313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:54:07.036 [DEBUG] [Thread-22313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:54:07.036 [DEBUG] [Thread-22313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:54:07.036 [DEBUG] [Thread-22313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:54:07.036 [DEBUG] [Thread-22313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:07.036 [DEBUG] [Thread-22313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] client lang: <none>
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] server lang: <none>
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] kex follows: False
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] Compression: none
2025-12-26T01:54:07.037 [DEBUG] [Thread-22313] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:54:07.094 [DEBUG] [Thread-22313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:54:07.095 [DEBUG] [Thread-22313] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:54:07.095 [DEBUG] [Thread-22313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:54:07.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:54:07.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:54:07.150 [DEBUG] [Thread-22313] [transport.py] [_log()] userauth is OK
2025-12-26T01:54:07.150 [DEBUG] [Thread-22313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:54:07.151 [DEBUG] [Thread-22313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:54:07.151 [DEBUG] [Thread-22313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:54:07.151 [DEBUG] [Thread-22313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:54:07.169 [INFO] [Thread-22313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:54:07.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-26T01:54:07.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:54:07.997 [DEBUG] [Thread-22313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:54:07.998 [DEBUG] [Thread-22313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:54:08.046 [DEBUG] [Thread-22313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:54:08.046 [DEBUG] [Thread-22313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:54:08.055 [DEBUG] [Thread-22313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:54:08.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:54:08.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-26T01:54: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') -> 00000000
2025-12-26T01:54:08.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:54:08.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:54:08.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:54:08.092 [DEBUG] [Thread-22313] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:54:14.689 [DEBUG] [Thread-22315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:29.730 [DEBUG] [Thread-22316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:54:38.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:54:38.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-26T01:54:38.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 54, 30), 1.97, 87.62, 0.0, 15.7, 12.0, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:54:38.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:54:30
2025-12-26T01:54:38.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:54:39.104 [DEBUG] [Thread-22317] [transport.py] [_log()] starting thread (client mode): 0xb95d73d0
2025-12-26T01:54:39.105 [DEBUG] [Thread-22317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:54:39.124 [DEBUG] [Thread-22317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:54:39.124 [INFO] [Thread-22317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] client lang: <none>
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] server lang: <none>
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] kex follows: False
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] Compression: none
2025-12-26T01:54:39.127 [DEBUG] [Thread-22317] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:54:39.143 [DEBUG] [Thread-22317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:54:39.144 [DEBUG] [Thread-22317] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:54:39.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:54:39.144 [DEBUG] [Thread-22317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:54:39.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:54:39.146 [DEBUG] [Thread-22317] [transport.py] [_log()] userauth is OK
2025-12-26T01:54:39.146 [DEBUG] [Thread-22317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:54:39.146 [DEBUG] [Thread-22317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:54:39.147 [DEBUG] [Thread-22317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:54:39.147 [DEBUG] [Thread-22317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:54:39.164 [INFO] [Thread-22317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:54:39.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:54:39.806 [DEBUG] [Thread-22317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:54:39.807 [DEBUG] [Thread-22317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:54:39.807 [DEBUG] [Thread-22317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:54:39.847 [DEBUG] [Thread-22317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:54:39.848 [DEBUG] [Thread-22317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:54:39.850 [DEBUG] [Thread-22317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:54:39.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:54:39.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:54:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:54:39.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:54:39.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:54:39.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:54:39.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:54:39.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:54:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:54:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.995893 -999.00  +12.00   8.88     88  +10.20 1 2 1 3 1     0    0 0.66 -44.87 ZnESW 8.9 8.9 195.0 14.2 12.7 -22.9 12.5 -22.7 12.3 -20.7 12.6 -21.9
2025-12-26T01:54:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:54:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:54:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.995893
2025-12-26T01:54:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:54:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:54:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:54:39.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:54:39.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:54:39.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:54:30', tmtdew=1.97, humidity=87.62, cloud=0.0, wind=15.7, temperature=12.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:54:05.155', atlas_cloud=2, atlas_rain=1, zp_data=[2.662749999999999, 0.3152499999999989, 0.7642500000000005, 0.9324999999999992, nan, nan, nan, nan, 0.9894999999999996, 0.19500000000000028, 0.23724999999999952, 0.45199999999999996, 0.5120000000000005, 0.7272499999999997, 1.408999999999999, 1.9469999999999992, 0.3672500000000003, 0.33949999999999925, 0.17799999999999905, 0.38924999999999876, 0.41600000000000037, 0.505749999999999, 0.6082500000000008, 0.7532499999999995, 0.3144999999999989, 0.3460000000000001, 0.37175000000000047, 0.3544999999999998, 0.4969999999999999, 0.471000000000001, 0.5230000000000015, 0.690500000000001, 0.37824999999999953], zp_timestamp='2025-12-25T23:51:00')
2025-12-26T01:54:39.875 [DEBUG] [Thread-22317] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:54:39.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-26T01:54:39.978 [DEBUG] [Thread-22320] [transport.py] [_log()] starting thread (client mode): 0xb95d5a80
2025-12-26T01:54:39.978 [DEBUG] [Thread-22320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:54:39.992 [DEBUG] [Thread-22320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:54:39.992 [INFO] [Thread-22320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] client lang: <none>
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] server lang: <none>
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] kex follows: False
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:54:40.000 [DEBUG] [Thread-22320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:54:40.001 [DEBUG] [Thread-22320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:54:40.001 [DEBUG] [Thread-22320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:54:40.001 [DEBUG] [Thread-22320] [transport.py] [_log()] Compression: none
2025-12-26T01:54:40.001 [DEBUG] [Thread-22320] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:54:40.057 [DEBUG] [Thread-22320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:54:40.057 [DEBUG] [Thread-22320] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:54:40.058 [DEBUG] [Thread-22320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:54:40.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:54:40.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:54:40.113 [DEBUG] [Thread-22320] [transport.py] [_log()] userauth is OK
2025-12-26T01:54:40.114 [DEBUG] [Thread-22320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:54:40.114 [DEBUG] [Thread-22320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:54:40.114 [DEBUG] [Thread-22320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:54:40.114 [DEBUG] [Thread-22320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:54:40.132 [INFO] [Thread-22320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:54:40.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-26T01:54:40.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:54:40.954 [DEBUG] [Thread-22320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:54:40.954 [DEBUG] [Thread-22320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:54:41.001 [DEBUG] [Thread-22320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:54:41.002 [DEBUG] [Thread-22320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:54:41.010 [DEBUG] [Thread-22320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:54:41.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:54:41.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-26T01:54:41.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:54:41.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:54:41.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:54:41.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:54:41.045 [DEBUG] [Thread-22320] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:54:41.052 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:41.053 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:44.762 [DEBUG] [Thread-22322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:45.073 [DEBUG] [Thread-22323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:54:59.808 [DEBUG] [Thread-22324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:55:11.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:55:11.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-26T01:55:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 55, 2), 1.98, 87.59, 0.0, 15.83, 12.0, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:55:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:55:02
2025-12-26T01:55:11.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:55:12.037 [DEBUG] [Thread-22325] [transport.py] [_log()] starting thread (client mode): 0xb6b15db0
2025-12-26T01:55:12.037 [DEBUG] [Thread-22325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:55:12.058 [DEBUG] [Thread-22325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:55:12.058 [INFO] [Thread-22325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:55:12.060 [DEBUG] [Thread-22325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] client lang: <none>
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] server lang: <none>
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] kex follows: False
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:55:12.061 [DEBUG] [Thread-22325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:55:12.062 [DEBUG] [Thread-22325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:55:12.062 [DEBUG] [Thread-22325] [transport.py] [_log()] Compression: none
2025-12-26T01:55:12.062 [DEBUG] [Thread-22325] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:55:12.079 [DEBUG] [Thread-22325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:55:12.079 [DEBUG] [Thread-22325] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:55:12.080 [DEBUG] [Thread-22325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:55:12.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:55:12.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:55:12.082 [DEBUG] [Thread-22325] [transport.py] [_log()] userauth is OK
2025-12-26T01:55:12.082 [DEBUG] [Thread-22325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:55:12.082 [DEBUG] [Thread-22325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:55:12.082 [DEBUG] [Thread-22325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:55:12.082 [DEBUG] [Thread-22325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:55:12.098 [INFO] [Thread-22325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:55:12.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:55:12.693 [DEBUG] [Thread-22325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:55:12.693 [DEBUG] [Thread-22325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:55:12.694 [DEBUG] [Thread-22325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:55:12.735 [DEBUG] [Thread-22325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:55:12.735 [DEBUG] [Thread-22325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:55:12.737 [DEBUG] [Thread-22325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:55:12.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:55:12.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:55:12.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:55:12.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:55:12.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:55:12.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:55:12.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:55:12.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:55:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:55:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.996240 -999.00  +12.00  11.16     88  +10.20 1 2 1 3 1     0    0 0.61 -45.30 ZnESW 11.2 11.2 194.4 14.0 12.7 -23.0 12.6 -22.6 12.3 -20.8 12.6 -21.9
2025-12-26T01:55:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:55:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:55:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.996240
2025-12-26T01:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:55:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:55:12.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:55:12.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:55:02', tmtdew=1.98, humidity=87.59, cloud=0.0, wind=15.83, temperature=12.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:54:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[2.662749999999999, 0.3152499999999989, 0.7642500000000005, 0.9324999999999992, nan, nan, nan, nan, 0.9894999999999996, 0.19500000000000028, 0.23724999999999952, 0.45199999999999996, 0.5120000000000005, 0.7272499999999997, 1.408999999999999, 1.9469999999999992, 0.3672500000000003, 0.33949999999999925, 0.17799999999999905, 0.38924999999999876, 0.41600000000000037, 0.505749999999999, 0.6082500000000008, 0.7532499999999995, 0.3144999999999989, 0.3460000000000001, 0.37175000000000047, 0.3544999999999998, 0.4969999999999999, 0.471000000000001, 0.5230000000000015, 0.690500000000001, 0.37824999999999953], zp_timestamp='2025-12-25T23:51:00')
2025-12-26T01:55:12.756 [DEBUG] [Thread-22325] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:55:12.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:55:12.847 [DEBUG] [Thread-22328] [transport.py] [_log()] starting thread (client mode): 0xb6b172e0
2025-12-26T01:55:12.847 [DEBUG] [Thread-22328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:55:12.862 [DEBUG] [Thread-22328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:55:12.862 [INFO] [Thread-22328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:55:12.869 [DEBUG] [Thread-22328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] client lang: <none>
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] server lang: <none>
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] kex follows: False
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] Compression: none
2025-12-26T01:55:12.870 [DEBUG] [Thread-22328] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:55:12.930 [DEBUG] [Thread-22328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:55:12.930 [DEBUG] [Thread-22328] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:55:12.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:55:12.932 [DEBUG] [Thread-22328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:55:12.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:55:12.989 [DEBUG] [Thread-22328] [transport.py] [_log()] userauth is OK
2025-12-26T01:55:12.989 [DEBUG] [Thread-22328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:55:12.989 [DEBUG] [Thread-22328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:55:12.990 [DEBUG] [Thread-22328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:55:12.990 [DEBUG] [Thread-22328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:55:13.009 [INFO] [Thread-22328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:55:13.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-26T01:55:13.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:55:13.814 [DEBUG] [Thread-22328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:55:13.814 [DEBUG] [Thread-22328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:55:13.862 [DEBUG] [Thread-22328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:55:13.862 [DEBUG] [Thread-22328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:55:13.871 [DEBUG] [Thread-22328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:55:13.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:55:13.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-26T01:55:13.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-26T01:55:13.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:55:13.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:55:13.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:55:13.912 [DEBUG] [Thread-22328] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:55:14.842 [DEBUG] [Thread-22330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:29.900 [DEBUG] [Thread-22331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:41.253 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:41.254 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:43.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:55:43.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:55:43.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:55:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 55, 34), 1.98, 87.59, 0.0, 15.37, 11.9, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:55:44.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:55:34
2025-12-26T01:55:44.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:55:44.912 [DEBUG] [Thread-22332] [transport.py] [_log()] starting thread (client mode): 0xb95b1ab0
2025-12-26T01:55:44.912 [DEBUG] [Thread-22332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:55:44.928 [DEBUG] [Thread-22333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:44.932 [DEBUG] [Thread-22332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:55:44.932 [INFO] [Thread-22332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:55:44.935 [DEBUG] [Thread-22332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] client lang: <none>
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] server lang: <none>
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] kex follows: False
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:55:44.936 [DEBUG] [Thread-22332] [transport.py] [_log()] Compression: none
2025-12-26T01:55:44.937 [DEBUG] [Thread-22332] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:55:44.954 [DEBUG] [Thread-22332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:55:44.954 [DEBUG] [Thread-22332] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:55:44.955 [DEBUG] [Thread-22332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:55:44.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:55:44.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:55:44.957 [DEBUG] [Thread-22332] [transport.py] [_log()] userauth is OK
2025-12-26T01:55:44.957 [DEBUG] [Thread-22332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:55:44.957 [DEBUG] [Thread-22332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:55:44.957 [DEBUG] [Thread-22332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:55:44.957 [DEBUG] [Thread-22332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:55:44.981 [INFO] [Thread-22332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:55:44.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:55:45.143 [DEBUG] [Thread-22335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:55:45.556 [DEBUG] [Thread-22332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:55:45.556 [DEBUG] [Thread-22332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:55:45.556 [DEBUG] [Thread-22332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:55:45.596 [DEBUG] [Thread-22332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:55:45.597 [DEBUG] [Thread-22332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:55:45.599 [DEBUG] [Thread-22332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:55:45.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:55:45.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:55:45.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:55:45.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:55:45.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:55:45.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:55:45.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.996240 -999.00  +12.00  11.16     88  +10.20 1 2 1 3 1     0    0 0.61 -45.30 ZnESW 11.2 11.2 194.4 14.0 12.7 -23.0 12.6 -22.6 12.3 -20.8 12.6 -21.9
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.996240
2025-12-26T01:55:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:55:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:55:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:55:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:55:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:55:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:55:34', tmtdew=1.98, humidity=87.59, cloud=0.0, wind=15.37, temperature=11.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:54:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:54:00')
2025-12-26T01:55:45.619 [DEBUG] [Thread-22332] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:55:45.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-26T01:55:45.711 [DEBUG] [Thread-22337] [transport.py] [_log()] starting thread (client mode): 0xb95b2140
2025-12-26T01:55:45.711 [DEBUG] [Thread-22337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:55:45.725 [DEBUG] [Thread-22337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:55:45.725 [INFO] [Thread-22337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:45.733 [DEBUG] [Thread-22337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] client lang: <none>
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] server lang: <none>
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] kex follows: False
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:55:45.734 [DEBUG] [Thread-22337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:55:45.735 [DEBUG] [Thread-22337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:55:45.735 [DEBUG] [Thread-22337] [transport.py] [_log()] Compression: none
2025-12-26T01:55:45.735 [DEBUG] [Thread-22337] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:55:45.790 [DEBUG] [Thread-22337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:55:45.790 [DEBUG] [Thread-22337] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:55:45.791 [DEBUG] [Thread-22337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:55:45.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:55:45.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:55:45.845 [DEBUG] [Thread-22337] [transport.py] [_log()] userauth is OK
2025-12-26T01:55:45.846 [DEBUG] [Thread-22337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:55:45.846 [DEBUG] [Thread-22337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:55:45.846 [DEBUG] [Thread-22337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:55:45.846 [DEBUG] [Thread-22337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:55:45.864 [INFO] [Thread-22337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:55:45.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-26T01:55:45.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:55:46.698 [DEBUG] [Thread-22337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:55:46.698 [DEBUG] [Thread-22337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:55:46.746 [DEBUG] [Thread-22337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:55:46.746 [DEBUG] [Thread-22337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:55:46.755 [DEBUG] [Thread-22337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:55:46.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:55:46.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:55:46.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-26T01:55:46.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:55:46.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:55:46.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:55:46.790 [DEBUG] [Thread-22337] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:55:59.962 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:15.012 [DEBUG] [Thread-22340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:16.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:56:16.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:56:16.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-26T01:56:17.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 56, 6), 1.97, 87.64, 0.0, 15.79, 11.94, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:56:17.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:56:06
2025-12-26T01:56:17.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:56:17.786 [DEBUG] [Thread-22341] [transport.py] [_log()] starting thread (client mode): 0xb95f3bb0
2025-12-26T01:56:17.786 [DEBUG] [Thread-22341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:56:17.808 [DEBUG] [Thread-22341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:56:17.808 [INFO] [Thread-22341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] client lang: <none>
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] server lang: <none>
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] kex follows: False
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:56:17.811 [DEBUG] [Thread-22341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:56:17.812 [DEBUG] [Thread-22341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:56:17.812 [DEBUG] [Thread-22341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:56:17.812 [DEBUG] [Thread-22341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:56:17.812 [DEBUG] [Thread-22341] [transport.py] [_log()] Compression: none
2025-12-26T01:56:17.812 [DEBUG] [Thread-22341] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:56:17.829 [DEBUG] [Thread-22341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:56:17.830 [DEBUG] [Thread-22341] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:56:17.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:56:17.831 [DEBUG] [Thread-22341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:56:17.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:56:17.833 [DEBUG] [Thread-22341] [transport.py] [_log()] userauth is OK
2025-12-26T01:56:17.833 [DEBUG] [Thread-22341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:56:17.833 [DEBUG] [Thread-22341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:56:17.833 [DEBUG] [Thread-22341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:56:17.833 [DEBUG] [Thread-22341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:56:17.859 [INFO] [Thread-22341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:56:17.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:56:18.495 [DEBUG] [Thread-22341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:56:18.495 [DEBUG] [Thread-22341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:56:18.495 [DEBUG] [Thread-22341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:56:18.536 [DEBUG] [Thread-22341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:56:18.536 [DEBUG] [Thread-22341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:56:18.539 [DEBUG] [Thread-22341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:56:18.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:56:18.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:56:18.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:56:18.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:56:18.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:56:18.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:56:18.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:56:18.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:56:18.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:56:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.996934 -999.00  +12.00   9.48     88  +10.20 1 1 1 3 1     0    0 0.44 -49.57 ZNESW 9.5 9.5 190.6 12.9 12.7 -23.0 12.5 -22.8 12.3 -20.9 12.6 -22.0
2025-12-26T01:56:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:56:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:56:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.996934
2025-12-26T01:56:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:56:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:56:18.565 [DEBUG] [Thread-22341] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:56:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:56:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:56:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:56:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:56:06', tmtdew=1.97, humidity=87.64, cloud=0.0, wind=15.79, temperature=11.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:55:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:54:00')
2025-12-26T01:56:18.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T01:56:18.656 [DEBUG] [Thread-22344] [transport.py] [_log()] starting thread (client mode): 0xbbfcdab0
2025-12-26T01:56:18.656 [DEBUG] [Thread-22344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:56:18.670 [DEBUG] [Thread-22344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:56:18.670 [INFO] [Thread-22344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:56:18.678 [DEBUG] [Thread-22344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:56:18.678 [DEBUG] [Thread-22344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:56:18.679 [DEBUG] [Thread-22344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:56:18.679 [DEBUG] [Thread-22344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:56:18.679 [DEBUG] [Thread-22344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:56:18.679 [DEBUG] [Thread-22344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:56:18.679 [DEBUG] [Thread-22344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:56:18.679 [DEBUG] [Thread-22344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] client lang: <none>
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] server lang: <none>
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] kex follows: False
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] Compression: none
2025-12-26T01:56:18.680 [DEBUG] [Thread-22344] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:56:18.737 [DEBUG] [Thread-22344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:56:18.738 [DEBUG] [Thread-22344] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:56:18.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:56:18.739 [DEBUG] [Thread-22344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:56:18.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:56:18.794 [DEBUG] [Thread-22344] [transport.py] [_log()] userauth is OK
2025-12-26T01:56:18.794 [DEBUG] [Thread-22344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:56:18.794 [DEBUG] [Thread-22344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:56:18.794 [DEBUG] [Thread-22344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:56:18.794 [DEBUG] [Thread-22344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:56:18.812 [INFO] [Thread-22344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:56:18.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-26T01:56:18.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:56:19.676 [DEBUG] [Thread-22344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:56:19.676 [DEBUG] [Thread-22344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:56:19.724 [DEBUG] [Thread-22344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:56:19.724 [DEBUG] [Thread-22344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:56:19.733 [DEBUG] [Thread-22344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:56:19.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:56:19.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:56:19.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T01:56:19.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:56:19.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:56:19.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:56:19.767 [DEBUG] [Thread-22344] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:56:30.048 [DEBUG] [Thread-22346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:41.456 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:41.457 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:45.099 [DEBUG] [Thread-22347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:45.209 [DEBUG] [Thread-22348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:56:49.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:56:49.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:56:49.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-26T01:56:50.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 56, 38), 1.91, 87.67, 0.0, 13.64, 11.89, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:56:50.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:56:38
2025-12-26T01:56:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:56:50.776 [DEBUG] [Thread-22349] [transport.py] [_log()] starting thread (client mode): 0xb6b604f0
2025-12-26T01:56:50.776 [DEBUG] [Thread-22349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:56:50.796 [DEBUG] [Thread-22349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:56:50.797 [INFO] [Thread-22349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] client lang: <none>
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] server lang: <none>
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] kex follows: False
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] Compression: none
2025-12-26T01:56:50.800 [DEBUG] [Thread-22349] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:56:50.818 [DEBUG] [Thread-22349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:56:50.818 [DEBUG] [Thread-22349] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:56:50.818 [DEBUG] [Thread-22349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:56:50.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:56:50.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:56:50.819 [DEBUG] [Thread-22349] [transport.py] [_log()] userauth is OK
2025-12-26T01:56:50.819 [DEBUG] [Thread-22349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:56:50.819 [DEBUG] [Thread-22349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:56:50.819 [DEBUG] [Thread-22349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:56:50.819 [DEBUG] [Thread-22349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:56:50.849 [INFO] [Thread-22349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:56:50.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:56:51.541 [DEBUG] [Thread-22349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:56:51.541 [DEBUG] [Thread-22349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:56:51.541 [DEBUG] [Thread-22349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:56:51.582 [DEBUG] [Thread-22349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:56:51.582 [DEBUG] [Thread-22349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:56:51.584 [DEBUG] [Thread-22349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:56:51.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:56:51.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:56:51.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:56:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:56:51.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:56:51.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:56:51.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.997282 -999.00  +12.00   8.60     88  +10.20 1 1 1 3 1     0    0 0.49 -47.48 ZNESW 8.6 8.6 177.4 11.9 12.7 -23.0 12.5 -22.7 12.3 -20.8 12.6 -22.1
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.997282
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T01:56:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:56:38', tmtdew=1.91, humidity=87.67, cloud=0.0, wind=13.64, temperature=11.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:56:05.165', atlas_cloud=1, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:54:00')
2025-12-26T01:56:51.604 [DEBUG] [Thread-22349] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:56:51.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-26T01:57:00.133 [DEBUG] [Thread-22352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:15.183 [DEBUG] [Thread-22353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:30.215 [DEBUG] [Thread-22354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:41.656 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:41.658 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:45.248 [DEBUG] [Thread-22355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:45.260 [DEBUG] [Thread-22356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:57:52.359 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:00.280 [DEBUG] [Thread-22357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:15.314 [DEBUG] [Thread-22358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:30.348 [DEBUG] [Thread-22359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:41.859 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:41.860 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:45.312 [DEBUG] [Thread-22360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:58:45.381 [DEBUG] [Thread-22361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:00.409 [DEBUG] [Thread-22362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:04.661 [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-26T01:59:15.446 [DEBUG] [Thread-22363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:30.479 [DEBUG] [Thread-22364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:34.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T01:59:34.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T01:59:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T01:59:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 59, 19), 1.89, 88.32, 0.0, 16.73, 11.8, 1, 1, 0, 2, 0, 0),)
2025-12-26T01:59:35.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:59:19
2025-12-26T01:59:35.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T01:59:35.665 [DEBUG] [Thread-22365] [transport.py] [_log()] starting thread (client mode): 0xbbfcead0
2025-12-26T01:59:35.665 [DEBUG] [Thread-22365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:59:35.681 [DEBUG] [Thread-22365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T01:59:35.681 [INFO] [Thread-22365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] client lang: <none>
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] server lang: <none>
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] kex follows: False
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:59:35.685 [DEBUG] [Thread-22365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:59:35.686 [DEBUG] [Thread-22365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:59:35.686 [DEBUG] [Thread-22365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:59:35.686 [DEBUG] [Thread-22365] [transport.py] [_log()] Compression: none
2025-12-26T01:59:35.686 [DEBUG] [Thread-22365] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:59:35.701 [DEBUG] [Thread-22365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:59:35.702 [DEBUG] [Thread-22365] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:59:35.702 [DEBUG] [Thread-22365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T01:59:35.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T01:59:35.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:59:35.704 [DEBUG] [Thread-22365] [transport.py] [_log()] userauth is OK
2025-12-26T01:59:35.704 [DEBUG] [Thread-22365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:59:35.704 [DEBUG] [Thread-22365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:59:35.704 [DEBUG] [Thread-22365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T01:59:35.704 [DEBUG] [Thread-22365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:59:35.718 [INFO] [Thread-22365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:59:35.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:59:36.499 [DEBUG] [Thread-22365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:59:36.499 [DEBUG] [Thread-22365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:59:36.500 [DEBUG] [Thread-22365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T01:59:36.540 [DEBUG] [Thread-22365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:59:36.540 [DEBUG] [Thread-22365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:59:36.543 [DEBUG] [Thread-22365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:59:36.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:59:36.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T01:59:36.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T01:59:36.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T01:59:36.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:59:36.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T01:59:36.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:59:36.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:59:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T01:59:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.999365 -999.00  +11.90  10.28     88  +10.10 1 2 1 3 1     0    0 1.20 -22.98 znESW 10.3 10.3 182.2 13.6 12.6 -22.8 12.4 -22.7 12.2 -20.8 12.6 -21.9
2025-12-26T01:59:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T01:59:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T01:59:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.999365
2025-12-26T01:59:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T01:59:36.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T01:59:36.572 [DEBUG] [Thread-22365] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:59:36.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T01:59:36.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T01:59:36.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T01:59:36.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:59:19', tmtdew=1.89, humidity=88.32, cloud=0.0, wind=16.73, temperature=11.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:59:05.136', atlas_cloud=2, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:57:00')
2025-12-26T01:59:36.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-26T01:59:36.666 [DEBUG] [Thread-22368] [transport.py] [_log()] starting thread (client mode): 0xb95d6bc0
2025-12-26T01:59:36.666 [DEBUG] [Thread-22368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T01:59:36.681 [DEBUG] [Thread-22368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T01:59:36.681 [INFO] [Thread-22368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T01:59:36.688 [DEBUG] [Thread-22368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] client lang: <none>
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] server lang: <none>
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] kex follows: False
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T01:59:36.689 [DEBUG] [Thread-22368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T01:59:36.690 [DEBUG] [Thread-22368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T01:59:36.690 [DEBUG] [Thread-22368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T01:59:36.690 [DEBUG] [Thread-22368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T01:59:36.690 [DEBUG] [Thread-22368] [transport.py] [_log()] Compression: none
2025-12-26T01:59:36.690 [DEBUG] [Thread-22368] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T01:59:36.749 [DEBUG] [Thread-22368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T01:59:36.749 [DEBUG] [Thread-22368] [transport.py] [_log()] Switch to new keys ...
2025-12-26T01:59:36.750 [DEBUG] [Thread-22368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T01:59:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T01:59:36.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T01:59:36.805 [DEBUG] [Thread-22368] [transport.py] [_log()] userauth is OK
2025-12-26T01:59:36.805 [DEBUG] [Thread-22368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T01:59:36.805 [DEBUG] [Thread-22368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T01:59:36.805 [DEBUG] [Thread-22368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T01:59:36.805 [DEBUG] [Thread-22368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T01:59:36.823 [INFO] [Thread-22368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T01:59:36.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-26T01:59:36.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T01:59:37.626 [DEBUG] [Thread-22368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T01:59:37.627 [DEBUG] [Thread-22368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T01:59:37.674 [DEBUG] [Thread-22368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T01:59:37.674 [DEBUG] [Thread-22368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T01:59:37.684 [DEBUG] [Thread-22368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T01:59:37.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T01:59:37.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T01:59:37.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-26T01:59:37.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T01:59:37.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T01:59:37.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T01:59:37.721 [DEBUG] [Thread-22368] [transport.py] [_log()] EOF in transport thread
2025-12-26T01:59:42.062 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:42.063 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:45.384 [DEBUG] [Thread-22370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T01:59:45.517 [DEBUG] [Thread-22371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:00.578 [DEBUG] [Thread-22372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:07.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:00:07.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:00:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:00:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 1, 59, 51), 1.88, 88.37, 0.0, 14.96, 11.82, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:00:08.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 01:59:51
2025-12-26T02:00:08.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:00:08.739 [DEBUG] [Thread-22373] [transport.py] [_log()] starting thread (client mode): 0xb6b15ba0
2025-12-26T02:00:08.739 [DEBUG] [Thread-22373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:00:08.758 [DEBUG] [Thread-22373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:00:08.758 [INFO] [Thread-22373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:08.762 [DEBUG] [Thread-22373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] client lang: <none>
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] server lang: <none>
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] kex follows: False
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] Compression: none
2025-12-26T02:00:08.763 [DEBUG] [Thread-22373] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:00:08.782 [DEBUG] [Thread-22373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:00:08.782 [DEBUG] [Thread-22373] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:00:08.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:00:08.783 [DEBUG] [Thread-22373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:00:08.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:00:08.785 [DEBUG] [Thread-22373] [transport.py] [_log()] userauth is OK
2025-12-26T02:00:08.786 [DEBUG] [Thread-22373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:00:08.786 [DEBUG] [Thread-22373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:00:08.786 [DEBUG] [Thread-22373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:00:08.786 [DEBUG] [Thread-22373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:00:08.800 [INFO] [Thread-22373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:00:08.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:00:15.615 [DEBUG] [Thread-22375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:15.635 [DEBUG] [Thread-22373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:00:15.635 [DEBUG] [Thread-22373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:00:15.635 [DEBUG] [Thread-22373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:00:15.676 [DEBUG] [Thread-22373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:00:15.677 [DEBUG] [Thread-22373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:00:15.678 [DEBUG] [Thread-22373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:00:15.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:00:15.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:00:15.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:00:15.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:00:15.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:00:15.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:00:15.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:00:15.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:00:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:00:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61034.999712 -999.00  +11.90  10.92     88  +10.10 1 2 1 3 1     0    0 1.28 -20.90 znESW 10.9 10.9 185.0 12.8 12.6 -22.8 12.4 -22.7 12.2 -20.8 12.6 -21.9
2025-12-26T02:00:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:00:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:00:15.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61034.999712
2025-12-26T02:00:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:00:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:00:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:00:15.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:00:15.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:00:15.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T01:59:51', tmtdew=1.88, humidity=88.37, cloud=0.0, wind=14.96, temperature=11.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-25T23:59:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:57:00')
2025-12-26T02:00:15.702 [DEBUG] [Thread-22373] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:00:15.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-26T02:00:15.801 [DEBUG] [Thread-22377] [transport.py] [_log()] starting thread (client mode): 0xb95b2170
2025-12-26T02:00:15.801 [DEBUG] [Thread-22377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:00:15.816 [DEBUG] [Thread-22377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:00:15.816 [INFO] [Thread-22377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:00:15.824 [DEBUG] [Thread-22377] [transport.py] [_log()] client lang: <none>
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] server lang: <none>
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] kex follows: False
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] Compression: none
2025-12-26T02:00:15.825 [DEBUG] [Thread-22377] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:00:15.889 [DEBUG] [Thread-22377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:00:15.889 [DEBUG] [Thread-22377] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:00:15.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:00:15.890 [DEBUG] [Thread-22377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:00:15.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:00:15.947 [DEBUG] [Thread-22377] [transport.py] [_log()] userauth is OK
2025-12-26T02:00:15.947 [DEBUG] [Thread-22377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:00:15.947 [DEBUG] [Thread-22377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:00:15.947 [DEBUG] [Thread-22377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:00:15.947 [DEBUG] [Thread-22377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:00:15.966 [INFO] [Thread-22377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:00:15.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-26T02:00:15.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:00:16.776 [DEBUG] [Thread-22377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:00:16.776 [DEBUG] [Thread-22377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:00:16.824 [DEBUG] [Thread-22377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:00:16.824 [DEBUG] [Thread-22377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:00:16.834 [DEBUG] [Thread-22377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:00:16.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:00:16.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-26T02:00:16.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-26T02:00:16.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:00:16.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:00:16.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:00:16.870 [DEBUG] [Thread-22377] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:00:30.651 [DEBUG] [Thread-22379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:42.266 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:42.267 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:45.453 [DEBUG] [Thread-22380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:45.704 [DEBUG] [Thread-22381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:00:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:00:46.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:00:46.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-26T02:00:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 0, 23), 1.88, 88.39, 0.0, 14.7, 11.85, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:00:47.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:00:23
2025-12-26T02:00:47.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:00:47.891 [DEBUG] [Thread-22382] [transport.py] [_log()] starting thread (client mode): 0xb9592080
2025-12-26T02:00:47.891 [DEBUG] [Thread-22382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:00:47.910 [DEBUG] [Thread-22382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:00:47.910 [INFO] [Thread-22382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:00:47.913 [DEBUG] [Thread-22382] [transport.py] [_log()] client lang: <none>
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] server lang: <none>
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] kex follows: False
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] Compression: none
2025-12-26T02:00:47.914 [DEBUG] [Thread-22382] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:00:47.931 [DEBUG] [Thread-22382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:00:47.931 [DEBUG] [Thread-22382] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:00:47.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:00:47.932 [DEBUG] [Thread-22382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:00:47.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:00:47.934 [DEBUG] [Thread-22382] [transport.py] [_log()] userauth is OK
2025-12-26T02:00:47.934 [DEBUG] [Thread-22382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:00:47.934 [DEBUG] [Thread-22382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:00:47.934 [DEBUG] [Thread-22382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:00:47.935 [DEBUG] [Thread-22382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:00:47.951 [INFO] [Thread-22382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:00:47.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:00:48.588 [DEBUG] [Thread-22382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:00:48.588 [DEBUG] [Thread-22382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:00:48.589 [DEBUG] [Thread-22382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:00:48.629 [DEBUG] [Thread-22382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:00:48.629 [DEBUG] [Thread-22382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:00:48.632 [DEBUG] [Thread-22382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:00:48.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:00:48.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:00:48.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:00:48.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:00:48.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:00:48.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:00:48.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.000059 -999.00  +11.90  11.76     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 ZnESW 11.8 11.8 172.0 14.8 12.6 -22.9 12.4 -22.6 12.2 -20.8 12.6 -22.0
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.000059
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:00:48.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:00:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:00:23', tmtdew=1.88, humidity=88.39, cloud=0.0, wind=14.7, temperature=11.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:00:05.098', atlas_cloud=2, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:57:00')
2025-12-26T02:00:48.655 [DEBUG] [Thread-22382] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:00:48.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-26T02:00:48.739 [DEBUG] [Thread-22385] [transport.py] [_log()] starting thread (client mode): 0xb9591450
2025-12-26T02:00:48.739 [DEBUG] [Thread-22385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:00:48.754 [DEBUG] [Thread-22385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:00:48.754 [INFO] [Thread-22385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:00:48.762 [DEBUG] [Thread-22385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:00:48.762 [DEBUG] [Thread-22385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:00:48.762 [DEBUG] [Thread-22385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:00:48.762 [DEBUG] [Thread-22385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:48.762 [DEBUG] [Thread-22385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:00:48.762 [DEBUG] [Thread-22385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] client lang: <none>
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] server lang: <none>
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] kex follows: False
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] Compression: none
2025-12-26T02:00:48.763 [DEBUG] [Thread-22385] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:00:48.819 [DEBUG] [Thread-22385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:00:48.819 [DEBUG] [Thread-22385] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:00:48.820 [DEBUG] [Thread-22385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:00:48.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:00:48.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:00:48.875 [DEBUG] [Thread-22385] [transport.py] [_log()] userauth is OK
2025-12-26T02:00:48.875 [DEBUG] [Thread-22385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:00:48.875 [DEBUG] [Thread-22385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:00:48.875 [DEBUG] [Thread-22385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:00:48.876 [DEBUG] [Thread-22385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:00:48.894 [INFO] [Thread-22385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:00:48.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-26T02:00:48.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:00:49.742 [DEBUG] [Thread-22385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:00:49.743 [DEBUG] [Thread-22385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:00:49.791 [DEBUG] [Thread-22385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:00:49.791 [DEBUG] [Thread-22385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:00:49.800 [DEBUG] [Thread-22385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:00:49.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:00:49.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-26T02:00:49.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:00:49.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:00:49.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:00:49.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:00:49.837 [DEBUG] [Thread-22385] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:01:00.734 [DEBUG] [Thread-22387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:01:15.792 [DEBUG] [Thread-22388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:01:19.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:01:19.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:01:19.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-26T02:01:20.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 0, 55), 1.86, 88.47, 0.0, 16.25, 11.85, 1, 1, 2, 2, 0, 0),)
2025-12-26T02:01:20.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:00:55
2025-12-26T02:01:20.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:01:20.903 [DEBUG] [Thread-22389] [transport.py] [_log()] starting thread (client mode): 0xb95f1c90
2025-12-26T02:01:20.903 [DEBUG] [Thread-22389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:01:20.922 [DEBUG] [Thread-22389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:01:20.922 [INFO] [Thread-22389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:01:20.925 [DEBUG] [Thread-22389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:01:20.925 [DEBUG] [Thread-22389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:01:20.925 [DEBUG] [Thread-22389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] client lang: <none>
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] server lang: <none>
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] kex follows: False
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] Compression: none
2025-12-26T02:01:20.926 [DEBUG] [Thread-22389] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:01:20.933 [DEBUG] [Thread-22389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:01:20.933 [DEBUG] [Thread-22389] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:01:20.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:01:20.933 [DEBUG] [Thread-22389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:01:20.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:01:20.934 [DEBUG] [Thread-22389] [transport.py] [_log()] userauth is OK
2025-12-26T02:01:20.934 [DEBUG] [Thread-22389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:01:20.934 [DEBUG] [Thread-22389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:01:20.934 [DEBUG] [Thread-22389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:01:20.934 [DEBUG] [Thread-22389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:01:20.965 [INFO] [Thread-22389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:01:20.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:01:21.618 [DEBUG] [Thread-22389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:01:21.618 [DEBUG] [Thread-22389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:01:21.618 [DEBUG] [Thread-22389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:01:21.659 [DEBUG] [Thread-22389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:01:21.659 [DEBUG] [Thread-22389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:01:21.661 [DEBUG] [Thread-22389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:01:21.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:01:21.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:01:21.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:01:21.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:01:21.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:01:21.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:01:21.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:01:21.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.000407 -999.00  +11.90  10.93     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 ZnESW 10.9 10.9 170.6 13.2 12.6 -22.9 12.4 -22.4 12.2 -20.9 12.5 -22.0
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.000407
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:01:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:00:55', tmtdew=1.86, humidity=88.47, cloud=0.0, wind=16.25, temperature=11.85, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:00:35.165', atlas_cloud=2, atlas_rain=1, zp_data=[2.361749999999999, 0.3282500000000006, 0.6862500000000002, 0.724499999999999, nan, nan, nan, nan, 0.6199999999999992, 0.17849999999999966, 0.2442499999999992, 0.4350000000000005, 0.4169999999999998, 0.6572499999999994, 1.076999999999999, 1.834999999999999, 0.29224999999999923, 0.32450000000000045, 0.17149999999999999, 0.3822499999999991, 0.3674999999999997, 0.5067499999999985, 0.5562500000000004, 0.6917499999999999, 0.3094999999999981, 0.3330000000000002, 0.35575000000000045, 0.36350000000000016, 0.4540000000000006, 0.4060000000000006, 0.5090000000000012, 0.6210000000000004, 0.40474999999999905], zp_timestamp='2025-12-25T23:57:00')
2025-12-26T02:01:21.680 [DEBUG] [Thread-22389] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:01:21.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-26T02:01:30.821 [DEBUG] [Thread-22392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:01:42.466 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:01:42.467 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:01:45.536 [DEBUG] [Thread-22393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:01:45.874 [DEBUG] [Thread-22394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:00.911 [DEBUG] [Thread-22395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:15.944 [DEBUG] [Thread-22396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:30.980 [DEBUG] [Thread-22397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:42.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:42.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:45.625 [DEBUG] [Thread-22398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:02:46.012 [DEBUG] [Thread-22399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:01.050 [DEBUG] [Thread-22400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:16.082 [DEBUG] [Thread-22401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:31.116 [DEBUG] [Thread-22402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:34.997 [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-26T02:03:42.869 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:42.870 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:45.709 [DEBUG] [Thread-22403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:03:46.156 [DEBUG] [Thread-22404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:01.188 [DEBUG] [Thread-22405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:05.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:04:05.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:04:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:04:05.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 3, 35), 1.85, 88.52, 0.0, 15.0, 11.79, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:04:05.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:03:35
2025-12-26T02:04:05.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:04:06.001 [DEBUG] [Thread-22406] [transport.py] [_log()] starting thread (client mode): 0xb95f3e50
2025-12-26T02:04:06.001 [DEBUG] [Thread-22406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:04:06.020 [DEBUG] [Thread-22406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:04:06.020 [INFO] [Thread-22406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:04:06.023 [DEBUG] [Thread-22406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:04:06.023 [DEBUG] [Thread-22406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:04:06.023 [DEBUG] [Thread-22406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:04:06.023 [DEBUG] [Thread-22406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:06.023 [DEBUG] [Thread-22406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:06.023 [DEBUG] [Thread-22406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] client lang: <none>
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] server lang: <none>
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] kex follows: False
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] Compression: none
2025-12-26T02:04:06.024 [DEBUG] [Thread-22406] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:04:06.043 [DEBUG] [Thread-22406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:04:06.043 [DEBUG] [Thread-22406] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:04:06.044 [DEBUG] [Thread-22406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:04:06.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:04:06.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:04:06.045 [DEBUG] [Thread-22406] [transport.py] [_log()] userauth is OK
2025-12-26T02:04:06.046 [DEBUG] [Thread-22406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:04:06.046 [DEBUG] [Thread-22406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:04:06.046 [DEBUG] [Thread-22406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:04:06.046 [DEBUG] [Thread-22406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:04:06.070 [INFO] [Thread-22406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:04:06.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:04:06.687 [DEBUG] [Thread-22406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:04:06.688 [DEBUG] [Thread-22406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:04:06.688 [DEBUG] [Thread-22406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:04:06.729 [DEBUG] [Thread-22406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:04:06.729 [DEBUG] [Thread-22406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:04:06.733 [DEBUG] [Thread-22406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:04:06.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:04:06.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:04:06.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:04:06.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:04:06.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:04:06.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:04:06.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:04:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:04:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:04:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.002490 -999.00  +11.90  11.74     88  +10.10 1 2 1 3 1     0    0 -999.00 0.00 znESW 11.7 11.7 172.6 14.5 12.6 -23.0 12.4 -22.7 12.2 -20.8 12.6 -22.1
2025-12-26T02:04:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:04:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:04:06.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.002490
2025-12-26T02:04:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:04:06.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:04:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:04:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:04:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:04:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:03:35', tmtdew=1.85, humidity=88.52, cloud=0.0, wind=15.0, temperature=11.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:03:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:01:00')
2025-12-26T02:04:06.765 [DEBUG] [Thread-22406] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:04:06.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-26T02:04:06.859 [DEBUG] [Thread-22409] [transport.py] [_log()] starting thread (client mode): 0xbbfcef20
2025-12-26T02:04:06.859 [DEBUG] [Thread-22409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:04:06.873 [DEBUG] [Thread-22409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:04:06.873 [INFO] [Thread-22409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:06.881 [DEBUG] [Thread-22409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] client lang: <none>
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] server lang: <none>
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] kex follows: False
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:04:06.882 [DEBUG] [Thread-22409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:04:06.883 [DEBUG] [Thread-22409] [transport.py] [_log()] Compression: none
2025-12-26T02:04:06.883 [DEBUG] [Thread-22409] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:04:06.939 [DEBUG] [Thread-22409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:04:06.939 [DEBUG] [Thread-22409] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:04:06.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:04:06.940 [DEBUG] [Thread-22409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:04:06.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:04:06.998 [DEBUG] [Thread-22409] [transport.py] [_log()] userauth is OK
2025-12-26T02:04:06.998 [DEBUG] [Thread-22409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:04:06.998 [DEBUG] [Thread-22409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:04:06.998 [DEBUG] [Thread-22409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:04:06.999 [DEBUG] [Thread-22409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:04:07.019 [INFO] [Thread-22409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:04:07.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-26T02:04:07.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:04:07.817 [DEBUG] [Thread-22409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:04:07.817 [DEBUG] [Thread-22409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:04:07.865 [DEBUG] [Thread-22409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:04:07.865 [DEBUG] [Thread-22409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:04:07.874 [DEBUG] [Thread-22409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:04:07.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:04:07.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-26T02:04:07.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:04:07.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:04:07.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:04:07.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:04:07.910 [DEBUG] [Thread-22409] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:04:16.222 [DEBUG] [Thread-22411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:31.285 [DEBUG] [Thread-22412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:37.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:04:37.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:04:37.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-26T02:04:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 4, 7), 1.86, 88.49, 0.0, 15.93, 11.84, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:04:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:04:07
2025-12-26T02:04:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:04:38.967 [DEBUG] [Thread-22413] [transport.py] [_log()] starting thread (client mode): 0xb6b145e0
2025-12-26T02:04:38.967 [DEBUG] [Thread-22413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:04:38.987 [DEBUG] [Thread-22413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:04:38.988 [INFO] [Thread-22413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] client lang: <none>
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] server lang: <none>
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] kex follows: False
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] Compression: none
2025-12-26T02:04:38.991 [DEBUG] [Thread-22413] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:04:39.006 [DEBUG] [Thread-22413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:04:39.006 [DEBUG] [Thread-22413] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:04:39.007 [DEBUG] [Thread-22413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:04:39.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:04:39.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:04:39.008 [DEBUG] [Thread-22413] [transport.py] [_log()] userauth is OK
2025-12-26T02:04:39.008 [DEBUG] [Thread-22413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:04:39.008 [DEBUG] [Thread-22413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:04:39.008 [DEBUG] [Thread-22413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:04:39.008 [DEBUG] [Thread-22413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:04:39.019 [INFO] [Thread-22413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:04:39.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:04:39.634 [DEBUG] [Thread-22413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:04:39.634 [DEBUG] [Thread-22413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:04:39.634 [DEBUG] [Thread-22413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:04:39.674 [DEBUG] [Thread-22413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:04:39.675 [DEBUG] [Thread-22413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:04:39.677 [DEBUG] [Thread-22413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:04:39.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:04:39.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:04:39.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:04:39.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:04:39.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:04:39.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.002837 -999.00  +11.90  15.08     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 znESW 15.1 15.1 182.8 18.5 12.6 -22.9 12.4 -22.6 12.2 -20.7 12.5 -21.8
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:04:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.002837
2025-12-26T02:04:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:04:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:04:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:04:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:04:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:04:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:04:07', tmtdew=1.86, humidity=88.49, cloud=0.0, wind=15.93, temperature=11.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:04:05.117', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:01:00')
2025-12-26T02:04:39.697 [DEBUG] [Thread-22413] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:04:39.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-26T02:04:39.780 [DEBUG] [Thread-22416] [transport.py] [_log()] starting thread (client mode): 0xb95f1360
2025-12-26T02:04:39.780 [DEBUG] [Thread-22416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:04:39.794 [DEBUG] [Thread-22416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:04:39.794 [INFO] [Thread-22416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] client lang: <none>
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] server lang: <none>
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] kex follows: False
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] Compression: none
2025-12-26T02:04:39.802 [DEBUG] [Thread-22416] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:04:39.857 [DEBUG] [Thread-22416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:04:39.857 [DEBUG] [Thread-22416] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:04:39.857 [DEBUG] [Thread-22416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:04:39.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:04:39.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:04:39.915 [DEBUG] [Thread-22416] [transport.py] [_log()] userauth is OK
2025-12-26T02:04:39.915 [DEBUG] [Thread-22416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:04:39.915 [DEBUG] [Thread-22416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:04:39.915 [DEBUG] [Thread-22416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:04:39.915 [DEBUG] [Thread-22416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:04:39.928 [INFO] [Thread-22416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:04:39.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-26T02:04:39.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:04:40.783 [DEBUG] [Thread-22416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:04:40.783 [DEBUG] [Thread-22416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:04:40.832 [DEBUG] [Thread-22416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:04:40.832 [DEBUG] [Thread-22416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:04:40.840 [DEBUG] [Thread-22416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:04:40.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:04:40.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:04:40.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:04:40.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:04:40.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:04:40.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:04:40.872 [DEBUG] [Thread-22416] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:04:43.073 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:43.074 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:45.785 [DEBUG] [Thread-22418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:04:46.318 [DEBUG] [Thread-22419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:01.373 [DEBUG] [Thread-22420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:10.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:05:10.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:05:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:05:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 4, 39), 1.81, 88.5, 0.0, 17.56, 11.85, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:05:11.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:04:39
2025-12-26T02:05:11.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:05:11.896 [DEBUG] [Thread-22421] [transport.py] [_log()] starting thread (client mode): 0xb9593460
2025-12-26T02:05:11.896 [DEBUG] [Thread-22421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:05:11.907 [DEBUG] [Thread-22421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:05:11.907 [INFO] [Thread-22421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:05:11.909 [DEBUG] [Thread-22421] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] client lang: <none>
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] server lang: <none>
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] kex follows: False
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] Compression: none
2025-12-26T02:05:11.910 [DEBUG] [Thread-22421] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:05:11.917 [DEBUG] [Thread-22421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:05:11.918 [DEBUG] [Thread-22421] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:05:11.918 [DEBUG] [Thread-22421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:05:11.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:05:11.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:05:11.919 [DEBUG] [Thread-22421] [transport.py] [_log()] userauth is OK
2025-12-26T02:05:11.919 [DEBUG] [Thread-22421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:05:11.919 [DEBUG] [Thread-22421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:05:11.919 [DEBUG] [Thread-22421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:05:11.919 [DEBUG] [Thread-22421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:05:11.931 [INFO] [Thread-22421] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:05:11.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:05:12.537 [DEBUG] [Thread-22421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:05:12.537 [DEBUG] [Thread-22421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:05:12.537 [DEBUG] [Thread-22421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:05:12.578 [DEBUG] [Thread-22421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:05:12.578 [DEBUG] [Thread-22421] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:05:12.580 [DEBUG] [Thread-22421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:05:12.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:05:12.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:05:12.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:05:12.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:05:12.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:05:12.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:05:12.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.003184 -999.00  +12.00  13.51     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 ZnESW 13.5 13.5 180.2 15.6 12.6 -22.9 12.4 -22.5 12.2 -20.8 12.5 -21.9
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.003184
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:05:12.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:04:39', tmtdew=1.81, humidity=88.5, cloud=0.0, wind=17.56, temperature=11.85, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:04:35.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:03:00')
2025-12-26T02:05:12.598 [DEBUG] [Thread-22421] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:05:12.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-26T02:05:12.682 [DEBUG] [Thread-22424] [transport.py] [_log()] starting thread (client mode): 0xb95f1b10
2025-12-26T02:05:12.682 [DEBUG] [Thread-22424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:05:12.697 [DEBUG] [Thread-22424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:05:12.697 [INFO] [Thread-22424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] client lang: <none>
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] server lang: <none>
2025-12-26T02:05:12.704 [DEBUG] [Thread-22424] [transport.py] [_log()] kex follows: False
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] Compression: none
2025-12-26T02:05:12.705 [DEBUG] [Thread-22424] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:05:12.763 [DEBUG] [Thread-22424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:05:12.763 [DEBUG] [Thread-22424] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:05:12.763 [DEBUG] [Thread-22424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:05:12.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:05:12.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:05:12.820 [DEBUG] [Thread-22424] [transport.py] [_log()] userauth is OK
2025-12-26T02:05:12.820 [DEBUG] [Thread-22424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:05:12.820 [DEBUG] [Thread-22424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:05:12.820 [DEBUG] [Thread-22424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:05:12.820 [DEBUG] [Thread-22424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:05:12.835 [INFO] [Thread-22424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:05:12.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-26T02:05:12.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:05:13.642 [DEBUG] [Thread-22424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:05:13.642 [DEBUG] [Thread-22424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:05:13.689 [DEBUG] [Thread-22424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:05:13.689 [DEBUG] [Thread-22424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:05:13.697 [DEBUG] [Thread-22424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:05:13.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:05:13.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-26T02:05:13.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:05:13.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:05:13.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:05:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:05:13.728 [DEBUG] [Thread-22424] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:05:16.403 [DEBUG] [Thread-22426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:31.442 [DEBUG] [Thread-22427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:43.282 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:43.283 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:43.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:05:43.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:05:43.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-26T02:05:44.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 5, 11), 1.81, 88.49, 0.0, 16.85, 11.89, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:05:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:05:11
2025-12-26T02:05:44.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:05:44.738 [DEBUG] [Thread-22428] [transport.py] [_log()] starting thread (client mode): 0xb9591450
2025-12-26T02:05:44.738 [DEBUG] [Thread-22428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:05:44.759 [DEBUG] [Thread-22428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:05:44.759 [INFO] [Thread-22428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:05:44.762 [DEBUG] [Thread-22428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:05:44.762 [DEBUG] [Thread-22428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:05:44.762 [DEBUG] [Thread-22428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:05:44.762 [DEBUG] [Thread-22428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:44.762 [DEBUG] [Thread-22428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:44.762 [DEBUG] [Thread-22428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] client lang: <none>
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] server lang: <none>
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] kex follows: False
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] Compression: none
2025-12-26T02:05:44.763 [DEBUG] [Thread-22428] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:05:44.779 [DEBUG] [Thread-22428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:05:44.779 [DEBUG] [Thread-22428] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:05:44.779 [DEBUG] [Thread-22428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:05:44.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:05:44.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:05:44.780 [DEBUG] [Thread-22428] [transport.py] [_log()] userauth is OK
2025-12-26T02:05:44.780 [DEBUG] [Thread-22428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:05:44.780 [DEBUG] [Thread-22428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:05:44.780 [DEBUG] [Thread-22428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:05:44.780 [DEBUG] [Thread-22428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:05:44.791 [INFO] [Thread-22428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:05:44.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:05:45.412 [DEBUG] [Thread-22428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:05:45.412 [DEBUG] [Thread-22428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:05:45.412 [DEBUG] [Thread-22428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:05:45.453 [DEBUG] [Thread-22428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:05:45.454 [DEBUG] [Thread-22428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:05:45.456 [DEBUG] [Thread-22428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:05:45.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:05:45.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:05:45.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:05:45.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:05:45.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:05:45.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:05:45.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:05:45.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.003184 -999.00  +12.00  13.51     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 ZnESW 13.5 13.5 180.2 15.6 12.6 -22.9 12.4 -22.5 12.2 -20.8 12.5 -21.9
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.003184
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:05:45.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:05:11', tmtdew=1.81, humidity=88.49, cloud=0.0, wind=16.85, temperature=11.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:04:35.098', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:03:00')
2025-12-26T02:05:45.475 [DEBUG] [Thread-22428] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:05:45.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-26T02:05:45.560 [DEBUG] [Thread-22431] [transport.py] [_log()] starting thread (client mode): 0xb6b14fd0
2025-12-26T02:05:45.560 [DEBUG] [Thread-22431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:05:45.574 [DEBUG] [Thread-22431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:05:45.574 [INFO] [Thread-22431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:05:45.581 [DEBUG] [Thread-22431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] client lang: <none>
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] server lang: <none>
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] kex follows: False
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] Compression: none
2025-12-26T02:05:45.582 [DEBUG] [Thread-22431] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:05:45.636 [DEBUG] [Thread-22431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:05:45.637 [DEBUG] [Thread-22431] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:05:45.637 [DEBUG] [Thread-22431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:05:45.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:05:45.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:05:45.698 [DEBUG] [Thread-22431] [transport.py] [_log()] userauth is OK
2025-12-26T02:05:45.698 [DEBUG] [Thread-22431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:05:45.698 [DEBUG] [Thread-22431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:05:45.698 [DEBUG] [Thread-22431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:05:45.698 [DEBUG] [Thread-22431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:05:45.714 [INFO] [Thread-22431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:05:45.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-26T02:05:45.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:05:45.856 [DEBUG] [Thread-22433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:46.478 [DEBUG] [Thread-22434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:05:46.519 [DEBUG] [Thread-22431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:05:46.519 [DEBUG] [Thread-22431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:05:46.568 [DEBUG] [Thread-22431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:05:46.569 [DEBUG] [Thread-22431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:05:46.578 [DEBUG] [Thread-22431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:05:46.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:05:46.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:05:46.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-26T02:05:46.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:05:46.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:05:46.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:05:46.612 [DEBUG] [Thread-22431] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:06:01.540 [DEBUG] [Thread-22435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:16.574 [DEBUG] [Thread-22436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:16.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:06:16.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:06:16.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:06:17.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 5, 43), 1.92, 87.94, 0.0, 16.8, 11.92, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:06:17.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:05:43
2025-12-26T02:06:17.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:06:17.677 [DEBUG] [Thread-22437] [transport.py] [_log()] starting thread (client mode): 0xb95d4430
2025-12-26T02:06:17.677 [DEBUG] [Thread-22437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:06:17.697 [DEBUG] [Thread-22437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:06:17.697 [INFO] [Thread-22437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] client lang: <none>
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] server lang: <none>
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] kex follows: False
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] Compression: none
2025-12-26T02:06:17.698 [DEBUG] [Thread-22437] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:06:17.706 [DEBUG] [Thread-22437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:06:17.706 [DEBUG] [Thread-22437] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:06:17.706 [DEBUG] [Thread-22437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:06:17.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:06:17.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:06:17.707 [DEBUG] [Thread-22437] [transport.py] [_log()] userauth is OK
2025-12-26T02:06:17.707 [DEBUG] [Thread-22437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:06:17.707 [DEBUG] [Thread-22437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:06:17.707 [DEBUG] [Thread-22437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:06:17.707 [DEBUG] [Thread-22437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:06:17.716 [INFO] [Thread-22437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:06:17.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:06:18.353 [DEBUG] [Thread-22437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:06:18.353 [DEBUG] [Thread-22437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:06:18.353 [DEBUG] [Thread-22437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:06:18.395 [DEBUG] [Thread-22437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:06:18.395 [DEBUG] [Thread-22437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:06:18.398 [DEBUG] [Thread-22437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:06:18.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:06:18.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:06:18.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:06:18.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:06:18.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:06:18.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:06:18.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:06:18.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:06:18.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:06:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.003879 -999.00  +12.10  13.18     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 znESW 13.2 13.2 168.4 16.0 12.6 -22.8 12.5 -22.6 12.3 -20.7 12.6 -21.9
2025-12-26T02:06:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:06:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:06:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.003879
2025-12-26T02:06:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:06:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:06:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:06:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:06:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:06:18.419 [DEBUG] [Thread-22437] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:06:18.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:05:43', tmtdew=1.92, humidity=87.94, cloud=0.0, wind=16.8, temperature=11.92, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:05:35.146', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:03:00')
2025-12-26T02:06:18.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-26T02:06:18.514 [DEBUG] [Thread-22440] [transport.py] [_log()] starting thread (client mode): 0xb6b14b50
2025-12-26T02:06:18.514 [DEBUG] [Thread-22440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:06:18.529 [DEBUG] [Thread-22440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:06:18.529 [INFO] [Thread-22440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] client lang: <none>
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] server lang: <none>
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] kex follows: False
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:06:18.537 [DEBUG] [Thread-22440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:06:18.538 [DEBUG] [Thread-22440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:06:18.538 [DEBUG] [Thread-22440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:06:18.538 [DEBUG] [Thread-22440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:06:18.538 [DEBUG] [Thread-22440] [transport.py] [_log()] Compression: none
2025-12-26T02:06:18.538 [DEBUG] [Thread-22440] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:06:18.595 [DEBUG] [Thread-22440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:06:18.596 [DEBUG] [Thread-22440] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:06:18.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:06:18.597 [DEBUG] [Thread-22440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:06:18.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:06:18.651 [DEBUG] [Thread-22440] [transport.py] [_log()] userauth is OK
2025-12-26T02:06:18.652 [DEBUG] [Thread-22440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:06:18.652 [DEBUG] [Thread-22440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:06:18.652 [DEBUG] [Thread-22440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:06:18.652 [DEBUG] [Thread-22440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:06:18.671 [INFO] [Thread-22440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:06:18.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:06:18.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:06:19.524 [DEBUG] [Thread-22440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:06:19.524 [DEBUG] [Thread-22440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:06:19.572 [DEBUG] [Thread-22440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:06:19.572 [DEBUG] [Thread-22440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:06:19.582 [DEBUG] [Thread-22440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:06:19.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:06:19.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-26T02:06:19.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-26T02:06:19.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:06:19.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:06:19.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:06:19.618 [DEBUG] [Thread-22440] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:06:31.605 [DEBUG] [Thread-22442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:43.485 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:43.486 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:45.910 [DEBUG] [Thread-22443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:46.653 [DEBUG] [Thread-22444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:06:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:06:49.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:06:49.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-26T02:06:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 6, 15), 1.92, 87.9, 0.0, 16.41, 11.94, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:06:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:06:15
2025-12-26T02:06:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:06:50.675 [DEBUG] [Thread-22445] [transport.py] [_log()] starting thread (client mode): 0xb95f2110
2025-12-26T02:06:50.675 [DEBUG] [Thread-22445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:06:50.695 [DEBUG] [Thread-22445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:06:50.695 [INFO] [Thread-22445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:06:50.698 [DEBUG] [Thread-22445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:06:50.698 [DEBUG] [Thread-22445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] client lang: <none>
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] server lang: <none>
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] kex follows: False
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:06:50.699 [DEBUG] [Thread-22445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:06:50.700 [DEBUG] [Thread-22445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:06:50.700 [DEBUG] [Thread-22445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:06:50.700 [DEBUG] [Thread-22445] [transport.py] [_log()] Compression: none
2025-12-26T02:06:50.700 [DEBUG] [Thread-22445] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:06:50.717 [DEBUG] [Thread-22445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:06:50.718 [DEBUG] [Thread-22445] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:06:50.718 [DEBUG] [Thread-22445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:06:50.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:06:50.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:06:50.761 [DEBUG] [Thread-22445] [transport.py] [_log()] userauth is OK
2025-12-26T02:06:50.762 [DEBUG] [Thread-22445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:06:50.762 [DEBUG] [Thread-22445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:06:50.762 [DEBUG] [Thread-22445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:06:50.762 [DEBUG] [Thread-22445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:06:50.793 [INFO] [Thread-22445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:06:50.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:06:51.451 [DEBUG] [Thread-22445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:06:51.451 [DEBUG] [Thread-22445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:06:51.451 [DEBUG] [Thread-22445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:06:51.492 [DEBUG] [Thread-22445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:06:51.492 [DEBUG] [Thread-22445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:06:51.496 [DEBUG] [Thread-22445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:06:51.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:06:51.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:06:51.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:06:51.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:06:51.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:06:51.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:06:51.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:06:51.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:06:51.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:06:51.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.004226 -999.00  +12.10  10.64     88  +10.20 1 2 1 3 1     0    0 -999.00 0.00 ZnESW 10.6 10.6 195.4 14.4 12.6 -22.9 12.4 -22.5 12.2 -20.9 12.5 -21.9
2025-12-26T02:06:51.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:06:51.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:06:51.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.004226
2025-12-26T02:06:51.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:06:51.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:06:51.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:06:51.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:06:51.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:06:51.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:06:15', tmtdew=1.92, humidity=87.9, cloud=0.0, wind=16.41, temperature=11.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:06:05.126', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:03:00')
2025-12-26T02:06:51.524 [DEBUG] [Thread-22445] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:06:51.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-26T02:06:51.616 [DEBUG] [Thread-22448] [transport.py] [_log()] starting thread (client mode): 0xb95f13f0
2025-12-26T02:06:51.616 [DEBUG] [Thread-22448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:06:51.631 [DEBUG] [Thread-22448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:06:51.631 [INFO] [Thread-22448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:06:51.638 [DEBUG] [Thread-22448] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:06:51.639 [DEBUG] [Thread-22448] [transport.py] [_log()] client lang: <none>
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] server lang: <none>
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] kex follows: False
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] Compression: none
2025-12-26T02:06:51.640 [DEBUG] [Thread-22448] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:06:51.696 [DEBUG] [Thread-22448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:06:51.696 [DEBUG] [Thread-22448] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:06:51.697 [DEBUG] [Thread-22448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:06:51.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:06:51.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:06:51.753 [DEBUG] [Thread-22448] [transport.py] [_log()] userauth is OK
2025-12-26T02:06:51.754 [DEBUG] [Thread-22448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:06:51.754 [DEBUG] [Thread-22448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:06:51.754 [DEBUG] [Thread-22448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:06:51.755 [DEBUG] [Thread-22448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:06:51.773 [INFO] [Thread-22448] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:06:51.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-26T02:06:51.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:06:52.591 [DEBUG] [Thread-22448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:06:52.592 [DEBUG] [Thread-22448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:06:52.640 [DEBUG] [Thread-22448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:06:52.640 [DEBUG] [Thread-22448] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:06:52.650 [DEBUG] [Thread-22448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:06:52.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:06:52.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-26T02:06:52.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-26T02:06:52.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:06:52.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:06:52.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:06:52.686 [DEBUG] [Thread-22448] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:07:01.691 [DEBUG] [Thread-22450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:16.734 [DEBUG] [Thread-22451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:07:22.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:07:22.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-26T02:07:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 7, 20), 1.96, 87.7, 0.0, 17.72, 12.0, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:07:23.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:07:20
2025-12-26T02:07:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:07:23.719 [DEBUG] [Thread-22452] [transport.py] [_log()] starting thread (client mode): 0xb6b158a0
2025-12-26T02:07:23.719 [DEBUG] [Thread-22452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:07:23.734 [DEBUG] [Thread-22452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:07:23.735 [INFO] [Thread-22452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] client lang: <none>
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] server lang: <none>
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] kex follows: False
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:07:23.737 [DEBUG] [Thread-22452] [transport.py] [_log()] Compression: none
2025-12-26T02:07:23.738 [DEBUG] [Thread-22452] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:07:23.752 [DEBUG] [Thread-22452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:07:23.753 [DEBUG] [Thread-22452] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:07:23.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:07:23.754 [DEBUG] [Thread-22452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:07:23.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:07:23.755 [DEBUG] [Thread-22452] [transport.py] [_log()] userauth is OK
2025-12-26T02:07:23.756 [DEBUG] [Thread-22452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:07:23.756 [DEBUG] [Thread-22452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:07:23.756 [DEBUG] [Thread-22452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:07:23.756 [DEBUG] [Thread-22452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:07:23.773 [INFO] [Thread-22452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:07:23.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:07:24.407 [DEBUG] [Thread-22452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:07:24.407 [DEBUG] [Thread-22452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:07:24.407 [DEBUG] [Thread-22452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:07:24.447 [DEBUG] [Thread-22452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:07:24.448 [DEBUG] [Thread-22452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:07:24.449 [DEBUG] [Thread-22452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:07:24.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:07:24.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:07:24.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:07:24.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:07:24.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:07:24.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:07:24.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:07:24.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:07:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:07:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.004573 -999.00  +12.10  14.15     87  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 14.2 14.2 195.0 17.4 12.6 -22.9 12.5 -22.4 12.2 -20.7 12.6 -21.8
2025-12-26T02:07:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:07:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:07:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.004573
2025-12-26T02:07:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:07:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:07:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:07:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:07:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:07:24.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:07:20', tmtdew=1.96, humidity=87.7, cloud=0.0, wind=17.72, temperature=12.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:06:35.107', atlas_cloud=2, atlas_rain=1, zp_data=[3.13875, 0.5502500000000001, 0.9297500000000003, 1.1249999999999991, nan, nan, nan, nan, 1.1289999999999996, 0.25200000000000067, 0.2757499999999986, 0.593, 0.6924999999999999, 0.8062499999999995, 1.2439999999999998, 1.8849999999999998, 0.4082499999999989, 0.3614999999999995, 0.23999999999999844, 0.44624999999999915, 0.47799999999999887, 0.6087499999999988, 0.7472500000000011, 0.83575, 0.40249999999999986, 0.3110000000000017, 0.3532499999999992, 0.42350000000000065, 0.5609999999999999, 0.5540000000000003, 0.6260000000000012, 0.6850000000000005, 0.49574999999999925], zp_timestamp='2025-12-26T00:03:00')
2025-12-26T02:07:24.472 [DEBUG] [Thread-22452] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:07:24.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-26T02:07:24.573 [DEBUG] [Thread-22455] [transport.py] [_log()] starting thread (client mode): 0xb9547400
2025-12-26T02:07:24.573 [DEBUG] [Thread-22455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:07:24.588 [DEBUG] [Thread-22455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:07:24.588 [INFO] [Thread-22455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:07:24.595 [DEBUG] [Thread-22455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] client lang: <none>
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] server lang: <none>
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] kex follows: False
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:07:24.596 [DEBUG] [Thread-22455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:07:24.597 [DEBUG] [Thread-22455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:07:24.597 [DEBUG] [Thread-22455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:07:24.597 [DEBUG] [Thread-22455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:07:24.597 [DEBUG] [Thread-22455] [transport.py] [_log()] Compression: none
2025-12-26T02:07:24.597 [DEBUG] [Thread-22455] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:07:24.652 [DEBUG] [Thread-22455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:07:24.653 [DEBUG] [Thread-22455] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:07:24.653 [DEBUG] [Thread-22455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:07:24.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:07:24.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:07:24.710 [DEBUG] [Thread-22455] [transport.py] [_log()] userauth is OK
2025-12-26T02:07:24.710 [DEBUG] [Thread-22455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:07:24.710 [DEBUG] [Thread-22455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:07:24.710 [DEBUG] [Thread-22455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:07:24.710 [DEBUG] [Thread-22455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:07:24.725 [INFO] [Thread-22455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:07:24.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:07:24.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:07:25.543 [DEBUG] [Thread-22455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:07:25.544 [DEBUG] [Thread-22455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:07:25.591 [DEBUG] [Thread-22455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:07:25.592 [DEBUG] [Thread-22455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:07:25.600 [DEBUG] [Thread-22455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:07:25.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:07:25.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-26T02:07:25.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-26T02:07:25.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:07:25.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:07:25.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:07:25.635 [DEBUG] [Thread-22455] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:07:31.763 [DEBUG] [Thread-22457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:43.689 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:43.690 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:45.966 [DEBUG] [Thread-22458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:46.816 [DEBUG] [Thread-22459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:53.146 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:07:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:07:55.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:07:55.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-26T02:07:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 7, 52), 2.03, 87.06, 0.0, 19.62, 12.07, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:07:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:07:52
2025-12-26T02:07:56.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:07:56.660 [DEBUG] [Thread-22460] [transport.py] [_log()] starting thread (client mode): 0xb9547b20
2025-12-26T02:07:56.660 [DEBUG] [Thread-22460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:07:56.679 [DEBUG] [Thread-22460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:07:56.679 [INFO] [Thread-22460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:07:56.682 [DEBUG] [Thread-22460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] client lang: <none>
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] server lang: <none>
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] kex follows: False
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] Compression: none
2025-12-26T02:07:56.683 [DEBUG] [Thread-22460] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:07:56.698 [DEBUG] [Thread-22460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:07:56.698 [DEBUG] [Thread-22460] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:07:56.699 [DEBUG] [Thread-22460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:07:56.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:07:56.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:07:56.740 [DEBUG] [Thread-22460] [transport.py] [_log()] userauth is OK
2025-12-26T02:07:56.740 [DEBUG] [Thread-22460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:07:56.740 [DEBUG] [Thread-22460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:07:56.740 [DEBUG] [Thread-22460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:07:56.740 [DEBUG] [Thread-22460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:07:56.759 [INFO] [Thread-22460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:07:56.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:07:57.399 [DEBUG] [Thread-22460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:07:57.399 [DEBUG] [Thread-22460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:07:57.400 [DEBUG] [Thread-22460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:07:57.440 [DEBUG] [Thread-22460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:07:57.440 [DEBUG] [Thread-22460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:07:57.444 [DEBUG] [Thread-22460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:07:57.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:07:57.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:07:57.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:07:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:07:57.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:07:57.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:07:57.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:07:57.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:07:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:07:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.004921 -999.00  +12.20  10.90     87  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 10.9 10.9 187.6 16.9 12.6 -22.8 12.5 -22.4 12.2 -20.5 12.6 -22.0
2025-12-26T02:07:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:07:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:07:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.004921
2025-12-26T02:07:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:07:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:07:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:07:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:07:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:07:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:07:52', tmtdew=2.03, humidity=87.06, cloud=0.0, wind=19.62, temperature=12.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:07:05.174', atlas_cloud=2, atlas_rain=1, zp_data=[2.0657499999999995, 0.5112500000000004, 0.8632500000000007, 1.7094999999999994, nan, nan, nan, nan, nan, 0.2785000000000011, 0.32624999999999993, 0.6760000000000002, 1.0299999999999994, 0.9202499999999993, 1.0559999999999992, nan, 0.3992500000000003, 0.3804999999999996, 0.23299999999999876, 0.4892499999999993, 0.5459999999999985, 0.6552499999999988, 0.7977500000000006, 0.8207500000000003, 0.3819999999999997, 0.36100000000000065, 0.37575000000000003, 0.4355000000000002, 0.6144999999999996, 0.6185000000000009, 0.6210000000000013, 0.7230000000000008, 0.5127499999999996], zp_timestamp='2025-12-26T00:07:00')
2025-12-26T02:07:57.473 [DEBUG] [Thread-22460] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:07:57.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-26T02:07:57.567 [DEBUG] [Thread-22463] [transport.py] [_log()] starting thread (client mode): 0xb9579d20
2025-12-26T02:07:57.567 [DEBUG] [Thread-22463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:07:57.581 [DEBUG] [Thread-22463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:07:57.581 [INFO] [Thread-22463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:07:57.589 [DEBUG] [Thread-22463] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:07:57.590 [DEBUG] [Thread-22463] [transport.py] [_log()] client lang: <none>
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] server lang: <none>
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] kex follows: False
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] Compression: none
2025-12-26T02:07:57.591 [DEBUG] [Thread-22463] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:07:57.644 [DEBUG] [Thread-22463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:07:57.644 [DEBUG] [Thread-22463] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:07:57.644 [DEBUG] [Thread-22463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:07:57.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:07:57.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:07:57.702 [DEBUG] [Thread-22463] [transport.py] [_log()] userauth is OK
2025-12-26T02:07:57.703 [DEBUG] [Thread-22463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:07:57.703 [DEBUG] [Thread-22463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:07:57.703 [DEBUG] [Thread-22463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:07:57.703 [DEBUG] [Thread-22463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:07:57.725 [INFO] [Thread-22463] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:07:57.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:07:57.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:07:58.529 [DEBUG] [Thread-22463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:07:58.530 [DEBUG] [Thread-22463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:07:58.578 [DEBUG] [Thread-22463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:07:58.578 [DEBUG] [Thread-22463] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:07:58.588 [DEBUG] [Thread-22463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:07:58.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:07:58.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:07:58.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:07:58.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:07:58.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:07:58.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:07:58.625 [DEBUG] [Thread-22463] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:08:01.850 [DEBUG] [Thread-22465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:03.791 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:07.999 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:16.916 [DEBUG] [Thread-22466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:28.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:08:28.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:08:28.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-26T02:08:29.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 8, 24), 2.04, 87.04, 0.0, 19.64, 12.17, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:08:29.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:08:24
2025-12-26T02:08:29.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:08:29.631 [DEBUG] [Thread-22467] [transport.py] [_log()] starting thread (client mode): 0xb9545e70
2025-12-26T02:08:29.631 [DEBUG] [Thread-22467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:08:29.653 [DEBUG] [Thread-22467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:08:29.653 [INFO] [Thread-22467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] client lang: <none>
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] server lang: <none>
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] kex follows: False
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:08:29.656 [DEBUG] [Thread-22467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:08:29.657 [DEBUG] [Thread-22467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:08:29.657 [DEBUG] [Thread-22467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:08:29.657 [DEBUG] [Thread-22467] [transport.py] [_log()] Compression: none
2025-12-26T02:08:29.657 [DEBUG] [Thread-22467] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:08:29.675 [DEBUG] [Thread-22467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:08:29.676 [DEBUG] [Thread-22467] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:08:29.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:08:29.677 [DEBUG] [Thread-22467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:08:29.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:08:29.679 [DEBUG] [Thread-22467] [transport.py] [_log()] userauth is OK
2025-12-26T02:08:29.679 [DEBUG] [Thread-22467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:08:29.679 [DEBUG] [Thread-22467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:08:29.679 [DEBUG] [Thread-22467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:08:29.679 [DEBUG] [Thread-22467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:08:29.716 [INFO] [Thread-22467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:08:29.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:08:30.379 [DEBUG] [Thread-22467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:08:30.379 [DEBUG] [Thread-22467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:08:30.379 [DEBUG] [Thread-22467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:08:30.420 [DEBUG] [Thread-22467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:08:30.420 [DEBUG] [Thread-22467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:08:30.423 [DEBUG] [Thread-22467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:08:30.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:08:30.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:08:30.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:08:30.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:08:30.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:08:30.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:08:30.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.005268 -999.00  +12.20  12.54     87  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.5 12.5 188.8 16.2 12.6 -22.7 12.5 -22.4 12.3 -20.6 12.6 -21.8
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.005268
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:08:30.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:08:24', tmtdew=2.04, humidity=87.04, cloud=0.0, wind=19.64, temperature=12.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:07:35.155', atlas_cloud=2, atlas_rain=1, zp_data=[2.0657499999999995, 0.5112500000000004, 0.8632500000000007, 1.7094999999999994, nan, nan, nan, nan, nan, 0.2785000000000011, 0.32624999999999993, 0.6760000000000002, 1.0299999999999994, 0.9202499999999993, 1.0559999999999992, nan, 0.3992500000000003, 0.3804999999999996, 0.23299999999999876, 0.4892499999999993, 0.5459999999999985, 0.6552499999999988, 0.7977500000000006, 0.8207500000000003, 0.3819999999999997, 0.36100000000000065, 0.37575000000000003, 0.4355000000000002, 0.6144999999999996, 0.6185000000000009, 0.6210000000000013, 0.7230000000000008, 0.5127499999999996], zp_timestamp='2025-12-26T00:07:00')
2025-12-26T02:08:30.442 [DEBUG] [Thread-22467] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:08:30.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-26T02:08:30.524 [DEBUG] [Thread-22470] [transport.py] [_log()] starting thread (client mode): 0xb6b604f0
2025-12-26T02:08:30.524 [DEBUG] [Thread-22470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:08:30.539 [DEBUG] [Thread-22470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:08:30.539 [INFO] [Thread-22470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] client lang: <none>
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] server lang: <none>
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] kex follows: False
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] Compression: none
2025-12-26T02:08:30.547 [DEBUG] [Thread-22470] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:08:30.602 [DEBUG] [Thread-22470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:08:30.602 [DEBUG] [Thread-22470] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:08:30.602 [DEBUG] [Thread-22470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:08:30.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:08:30.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:08:30.659 [DEBUG] [Thread-22470] [transport.py] [_log()] userauth is OK
2025-12-26T02:08:30.659 [DEBUG] [Thread-22470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:08:30.659 [DEBUG] [Thread-22470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:08:30.659 [DEBUG] [Thread-22470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:08:30.659 [DEBUG] [Thread-22470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:08:30.673 [INFO] [Thread-22470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:08:30.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-26T02:08:30.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:08:31.500 [DEBUG] [Thread-22470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:08:31.500 [DEBUG] [Thread-22470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:08:31.548 [DEBUG] [Thread-22470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:08:31.548 [DEBUG] [Thread-22470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:08:31.556 [DEBUG] [Thread-22470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:08:31.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:08:31.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-26T02:08:31.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-26T02:08:31.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:08:31.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:08:31.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:08:31.589 [DEBUG] [Thread-22470] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:08:31.949 [DEBUG] [Thread-22472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:43.893 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:43.894 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:46.027 [DEBUG] [Thread-22473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:08:46.988 [DEBUG] [Thread-22474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:01.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:09:01.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:09:01.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:09:02.021 [DEBUG] [Thread-22475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:02.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 8, 56), 2.17, 86.36, 0.0, 17.77, 12.27, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:09:02.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:08:56
2025-12-26T02:09:02.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:09:02.585 [DEBUG] [Thread-22476] [transport.py] [_log()] starting thread (client mode): 0xb957b2e0
2025-12-26T02:09:02.585 [DEBUG] [Thread-22476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:09:02.605 [DEBUG] [Thread-22476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:09:02.605 [INFO] [Thread-22476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:09:02.609 [DEBUG] [Thread-22476] [transport.py] [_log()] client lang: <none>
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] server lang: <none>
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] kex follows: False
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] Compression: none
2025-12-26T02:09:02.610 [DEBUG] [Thread-22476] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:09:02.629 [DEBUG] [Thread-22476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:09:02.630 [DEBUG] [Thread-22476] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:09:02.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:09:02.631 [DEBUG] [Thread-22476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:09:02.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:09:02.634 [DEBUG] [Thread-22476] [transport.py] [_log()] userauth is OK
2025-12-26T02:09:02.634 [DEBUG] [Thread-22476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:09:02.634 [DEBUG] [Thread-22476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:09:02.634 [DEBUG] [Thread-22476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:09:02.634 [DEBUG] [Thread-22476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:09:02.658 [INFO] [Thread-22476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:09:02.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:09:03.329 [DEBUG] [Thread-22476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:09:03.329 [DEBUG] [Thread-22476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:09:03.329 [DEBUG] [Thread-22476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:09:03.370 [DEBUG] [Thread-22476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:09:03.370 [DEBUG] [Thread-22476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:09:03.374 [DEBUG] [Thread-22476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:09:03.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:09:03.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:09:03.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:09:03.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:09:03.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:09:03.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:09:03.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:09:03.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:09:03.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:09:03.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.005962 -999.00  +12.40  11.82     86  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 11.8 11.8 191.6 15.2 12.7 -22.6 12.6 -22.1 12.3 -20.7 12.6 -21.5
2025-12-26T02:09:03.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:09:03.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:09:03.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.005962
2025-12-26T02:09:03.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:09:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:09:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:09:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:09:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:09:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:08:56', tmtdew=2.17, humidity=86.36, cloud=0.0, wind=17.77, temperature=12.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:08:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[2.0657499999999995, 0.5112500000000004, 0.8632500000000007, 1.7094999999999994, nan, nan, nan, nan, nan, 0.2785000000000011, 0.32624999999999993, 0.6760000000000002, 1.0299999999999994, 0.9202499999999993, 1.0559999999999992, nan, 0.3992500000000003, 0.3804999999999996, 0.23299999999999876, 0.4892499999999993, 0.5459999999999985, 0.6552499999999988, 0.7977500000000006, 0.8207500000000003, 0.3819999999999997, 0.36100000000000065, 0.37575000000000003, 0.4355000000000002, 0.6144999999999996, 0.6185000000000009, 0.6210000000000013, 0.7230000000000008, 0.5127499999999996], zp_timestamp='2025-12-26T00:07:00')
2025-12-26T02:09:03.400 [DEBUG] [Thread-22476] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:09:03.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-26T02:09:03.502 [DEBUG] [Thread-22479] [transport.py] [_log()] starting thread (client mode): 0xb955a500
2025-12-26T02:09:03.502 [DEBUG] [Thread-22479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:09:03.517 [DEBUG] [Thread-22479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:09:03.517 [INFO] [Thread-22479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:03.525 [DEBUG] [Thread-22479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] client lang: <none>
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] server lang: <none>
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] kex follows: False
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] Compression: none
2025-12-26T02:09:03.526 [DEBUG] [Thread-22479] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:09:03.584 [DEBUG] [Thread-22479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:09:03.585 [DEBUG] [Thread-22479] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:09:03.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:09:03.586 [DEBUG] [Thread-22479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:09:03.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:09:03.640 [DEBUG] [Thread-22479] [transport.py] [_log()] userauth is OK
2025-12-26T02:09:03.641 [DEBUG] [Thread-22479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:09:03.641 [DEBUG] [Thread-22479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:09:03.641 [DEBUG] [Thread-22479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:09:03.641 [DEBUG] [Thread-22479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:09:03.659 [INFO] [Thread-22479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:09:03.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-26T02:09:03.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:09:04.469 [DEBUG] [Thread-22479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:09:04.469 [DEBUG] [Thread-22479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:09:04.517 [DEBUG] [Thread-22479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:09:04.518 [DEBUG] [Thread-22479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:09:04.527 [DEBUG] [Thread-22479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:09:04.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:09:04.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:09:04.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-26T02:09:04.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:09:04.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:09:04.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:09:04.563 [DEBUG] [Thread-22479] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:09:17.054 [DEBUG] [Thread-22481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:32.101 [DEBUG] [Thread-22482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:34.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:09:34.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:09:34.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-26T02:09:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 9, 28), 2.19, 86.24, 0.0, 17.94, 12.27, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:09:35.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:09:28
2025-12-26T02:09:35.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:09:35.566 [DEBUG] [Thread-22483] [transport.py] [_log()] starting thread (client mode): 0xb9558070
2025-12-26T02:09:35.567 [DEBUG] [Thread-22483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:09:35.581 [DEBUG] [Thread-22483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:09:35.581 [INFO] [Thread-22483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:09:35.584 [DEBUG] [Thread-22483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:09:35.584 [DEBUG] [Thread-22483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:09:35.584 [DEBUG] [Thread-22483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:09:35.584 [DEBUG] [Thread-22483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:35.584 [DEBUG] [Thread-22483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] client lang: <none>
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] server lang: <none>
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] kex follows: False
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] Compression: none
2025-12-26T02:09:35.585 [DEBUG] [Thread-22483] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:09:35.602 [DEBUG] [Thread-22483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:09:35.603 [DEBUG] [Thread-22483] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:09:35.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:09:35.603 [DEBUG] [Thread-22483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:09:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:09:35.605 [DEBUG] [Thread-22483] [transport.py] [_log()] userauth is OK
2025-12-26T02:09:35.606 [DEBUG] [Thread-22483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:09:35.606 [DEBUG] [Thread-22483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:09:35.606 [DEBUG] [Thread-22483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:09:35.606 [DEBUG] [Thread-22483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:09:35.624 [INFO] [Thread-22483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:09:35.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:09:36.206 [DEBUG] [Thread-22483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:09:36.206 [DEBUG] [Thread-22483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:09:36.207 [DEBUG] [Thread-22483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:09:36.247 [DEBUG] [Thread-22483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:09:36.247 [DEBUG] [Thread-22483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:09:36.250 [DEBUG] [Thread-22483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:09:36.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:09:36.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:09:36.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:09:36.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:09:36.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:09:36.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:09:36.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:09:36.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:09:36.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:09:36.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.006309 -999.00  +12.40  14.72     86  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 14.7 14.7 181.4 16.5 12.7 -22.9 12.6 -22.5 12.3 -20.8 12.7 -21.8
2025-12-26T02:09:36.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:09:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:09:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.006309
2025-12-26T02:09:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:09:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:09:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:09:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:09:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:09:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:09:28', tmtdew=2.19, humidity=86.24, cloud=0.0, wind=17.94, temperature=12.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:09:05.098', atlas_cloud=2, atlas_rain=1, zp_data=[2.0657499999999995, 0.5112500000000004, 0.8632500000000007, 1.7094999999999994, nan, nan, nan, nan, nan, 0.2785000000000011, 0.32624999999999993, 0.6760000000000002, 1.0299999999999994, 0.9202499999999993, 1.0559999999999992, nan, 0.3992500000000003, 0.3804999999999996, 0.23299999999999876, 0.4892499999999993, 0.5459999999999985, 0.6552499999999988, 0.7977500000000006, 0.8207500000000003, 0.3819999999999997, 0.36100000000000065, 0.37575000000000003, 0.4355000000000002, 0.6144999999999996, 0.6185000000000009, 0.6210000000000013, 0.7230000000000008, 0.5127499999999996], zp_timestamp='2025-12-26T00:07:00')
2025-12-26T02:09:36.280 [DEBUG] [Thread-22483] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:09:36.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-26T02:09:36.373 [DEBUG] [Thread-22486] [transport.py] [_log()] starting thread (client mode): 0xb6b61870
2025-12-26T02:09:36.374 [DEBUG] [Thread-22486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:09:36.388 [DEBUG] [Thread-22486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:09:36.388 [INFO] [Thread-22486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] client lang: <none>
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] server lang: <none>
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] kex follows: False
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:09:36.396 [DEBUG] [Thread-22486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:09:36.397 [DEBUG] [Thread-22486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:09:36.397 [DEBUG] [Thread-22486] [transport.py] [_log()] Compression: none
2025-12-26T02:09:36.397 [DEBUG] [Thread-22486] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:09:36.454 [DEBUG] [Thread-22486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:09:36.454 [DEBUG] [Thread-22486] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:09:36.455 [DEBUG] [Thread-22486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:09:36.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:09:36.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:09:36.509 [DEBUG] [Thread-22486] [transport.py] [_log()] userauth is OK
2025-12-26T02:09:36.510 [DEBUG] [Thread-22486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:09:36.510 [DEBUG] [Thread-22486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:09:36.510 [DEBUG] [Thread-22486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:09:36.510 [DEBUG] [Thread-22486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:09:36.535 [INFO] [Thread-22486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:09:36.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-26T02:09:36.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:09:37.354 [DEBUG] [Thread-22486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:09:37.355 [DEBUG] [Thread-22486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:09:37.403 [DEBUG] [Thread-22486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:09:37.403 [DEBUG] [Thread-22486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:09:37.412 [DEBUG] [Thread-22486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:09:37.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:09:37.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-26T02:09:37.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-26T02:09:37.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:09:37.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:09:37.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:09:37.449 [DEBUG] [Thread-22486] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:09:44.096 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:44.097 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:46.085 [DEBUG] [Thread-22488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:09:47.135 [DEBUG] [Thread-22489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:02.190 [DEBUG] [Thread-22490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:07.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:10:07.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:10:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:10:08.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 9, 28), 2.19, 86.24, 0.0, 17.94, 12.27, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:10:08.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:09:28
2025-12-26T02:10:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:10:08.453 [DEBUG] [Thread-22491] [transport.py] [_log()] starting thread (client mode): 0xb9591720
2025-12-26T02:10:08.453 [DEBUG] [Thread-22491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:10:08.475 [DEBUG] [Thread-22491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:10:08.476 [INFO] [Thread-22491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] client lang: <none>
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] server lang: <none>
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] kex follows: False
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] Compression: none
2025-12-26T02:10:08.479 [DEBUG] [Thread-22491] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:10:08.497 [DEBUG] [Thread-22491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:10:08.498 [DEBUG] [Thread-22491] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:10:08.498 [DEBUG] [Thread-22491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:10:08.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:10:08.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:10:08.500 [DEBUG] [Thread-22491] [transport.py] [_log()] userauth is OK
2025-12-26T02:10:08.500 [DEBUG] [Thread-22491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:10:08.500 [DEBUG] [Thread-22491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:10:08.500 [DEBUG] [Thread-22491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:10:08.501 [DEBUG] [Thread-22491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:10:08.519 [INFO] [Thread-22491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:10:08.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:10:16.421 [DEBUG] [Thread-22491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:10:16.421 [DEBUG] [Thread-22491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:10:16.422 [DEBUG] [Thread-22491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:10:16.462 [DEBUG] [Thread-22491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:10:16.462 [DEBUG] [Thread-22491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:10:16.465 [DEBUG] [Thread-22491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:10:16.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:10:16.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:10:16.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:10:16.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:10:16.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:10:16.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:10:16.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:10:16.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.006656 -999.00  +12.30  10.43     87  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 10.4 10.4 189.4 20.4 12.7 -22.8 12.5 -22.5 12.3 -20.7 12.6 -22.0
2025-12-26T02:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.006656
2025-12-26T02:10:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:10:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:10:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:10:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:10:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:10:16.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:09:28', tmtdew=2.19, humidity=86.24, cloud=0.0, wind=17.94, temperature=12.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:09:35.078', atlas_cloud=2, atlas_rain=1, zp_data=[2.0657499999999995, 0.5112500000000004, 0.8632500000000007, 1.7094999999999994, nan, nan, nan, nan, nan, 0.2785000000000011, 0.32624999999999993, 0.6760000000000002, 1.0299999999999994, 0.9202499999999993, 1.0559999999999992, nan, 0.3992500000000003, 0.3804999999999996, 0.23299999999999876, 0.4892499999999993, 0.5459999999999985, 0.6552499999999988, 0.7977500000000006, 0.8207500000000003, 0.3819999999999997, 0.36100000000000065, 0.37575000000000003, 0.4355000000000002, 0.6144999999999996, 0.6185000000000009, 0.6210000000000013, 0.7230000000000008, 0.5127499999999996], zp_timestamp='2025-12-26T00:07:00')
2025-12-26T02:10:16.559 [DEBUG] [Thread-22491] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:10:16.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:10:16.653 [DEBUG] [Thread-22494] [transport.py] [_log()] starting thread (client mode): 0xb9559de0
2025-12-26T02:10:16.653 [DEBUG] [Thread-22494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:10:16.667 [DEBUG] [Thread-22494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:10:16.667 [INFO] [Thread-22494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:16.675 [DEBUG] [Thread-22494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] client lang: <none>
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] server lang: <none>
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] kex follows: False
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] Compression: none
2025-12-26T02:10:16.676 [DEBUG] [Thread-22494] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:10:16.734 [DEBUG] [Thread-22494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:10:16.734 [DEBUG] [Thread-22494] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:10:16.735 [DEBUG] [Thread-22494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:10:16.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:10:16.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:10:16.794 [DEBUG] [Thread-22494] [transport.py] [_log()] userauth is OK
2025-12-26T02:10:16.794 [DEBUG] [Thread-22494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:10:16.795 [DEBUG] [Thread-22494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:10:16.795 [DEBUG] [Thread-22494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:10:16.795 [DEBUG] [Thread-22494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:10:16.818 [INFO] [Thread-22494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:10:16.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:10:16.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:10:17.224 [DEBUG] [Thread-22496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:17.684 [DEBUG] [Thread-22494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:10:17.684 [DEBUG] [Thread-22494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:10:17.732 [DEBUG] [Thread-22494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:10:17.732 [DEBUG] [Thread-22494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:10:17.741 [DEBUG] [Thread-22494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:10:17.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:10:17.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-26T02:10:17.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:10:17.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:10:17.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:10:17.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:10:17.778 [DEBUG] [Thread-22494] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:10:32.267 [DEBUG] [Thread-22497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:44.298 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:44.300 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:46.148 [DEBUG] [Thread-22498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:47.302 [DEBUG] [Thread-22499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:10:47.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:10:47.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:10:47.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-26T02:10:48.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 10, 32), 2.29, 85.96, 0.0, 18.46, 12.2, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:10:48.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:10:32
2025-12-26T02:10:48.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:10:48.798 [DEBUG] [Thread-22500] [transport.py] [_log()] starting thread (client mode): 0xb6b2a740
2025-12-26T02:10:48.798 [DEBUG] [Thread-22500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:10:48.818 [DEBUG] [Thread-22500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:10:48.818 [INFO] [Thread-22500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] client lang: <none>
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] server lang: <none>
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] kex follows: False
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:10:48.822 [DEBUG] [Thread-22500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:10:48.823 [DEBUG] [Thread-22500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:10:48.823 [DEBUG] [Thread-22500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:10:48.823 [DEBUG] [Thread-22500] [transport.py] [_log()] Compression: none
2025-12-26T02:10:48.823 [DEBUG] [Thread-22500] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:10:48.840 [DEBUG] [Thread-22500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:10:48.840 [DEBUG] [Thread-22500] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:10:48.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:10:48.841 [DEBUG] [Thread-22500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:10:48.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:10:48.843 [DEBUG] [Thread-22500] [transport.py] [_log()] userauth is OK
2025-12-26T02:10:48.843 [DEBUG] [Thread-22500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:10:48.843 [DEBUG] [Thread-22500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:10:48.843 [DEBUG] [Thread-22500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:10:48.844 [DEBUG] [Thread-22500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:10:48.867 [INFO] [Thread-22500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:10:48.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:10:49.520 [DEBUG] [Thread-22500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:10:49.521 [DEBUG] [Thread-22500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:10:49.521 [DEBUG] [Thread-22500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:10:49.561 [DEBUG] [Thread-22500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:10:49.561 [DEBUG] [Thread-22500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:10:49.565 [DEBUG] [Thread-22500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:10:49.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:10:49.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:10:49.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:10:49.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:10:49.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:10:49.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:10:49.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:10:49.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:10:49.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:10:49.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.007004 -999.00  +12.30  16.88     86  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 16.9 16.9 192.0 18.4 12.7 -22.8 12.6 -22.4 12.3 -20.7 12.6 -21.8
2025-12-26T02:10:49.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:10:49.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:10:49.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.007004
2025-12-26T02:10:49.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:10:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:10:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:10:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:10:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:10:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:10:32', tmtdew=2.29, humidity=85.96, cloud=0.0, wind=18.46, temperature=12.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:10:05.146', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:09:00')
2025-12-26T02:10:49.593 [DEBUG] [Thread-22500] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:10:49.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:10:49.687 [DEBUG] [Thread-22503] [transport.py] [_log()] starting thread (client mode): 0xbbfce830
2025-12-26T02:10:49.687 [DEBUG] [Thread-22503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:10:49.702 [DEBUG] [Thread-22503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:10:49.702 [INFO] [Thread-22503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:10:49.710 [DEBUG] [Thread-22503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:10:49.710 [DEBUG] [Thread-22503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] client lang: <none>
2025-12-26T02:10:49.711 [DEBUG] [Thread-22503] [transport.py] [_log()] server lang: <none>
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] kex follows: False
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] Compression: none
2025-12-26T02:10:49.712 [DEBUG] [Thread-22503] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:10:49.767 [DEBUG] [Thread-22503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:10:49.768 [DEBUG] [Thread-22503] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:10:49.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:10:49.769 [DEBUG] [Thread-22503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:10:49.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:10:49.822 [DEBUG] [Thread-22503] [transport.py] [_log()] userauth is OK
2025-12-26T02:10:49.823 [DEBUG] [Thread-22503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:10:49.823 [DEBUG] [Thread-22503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:10:49.823 [DEBUG] [Thread-22503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:10:49.823 [DEBUG] [Thread-22503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:10:49.839 [INFO] [Thread-22503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:10:49.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-26T02:10:49.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:10:50.650 [DEBUG] [Thread-22503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:10:50.650 [DEBUG] [Thread-22503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:10:50.698 [DEBUG] [Thread-22503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:10:50.698 [DEBUG] [Thread-22503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:10:50.708 [DEBUG] [Thread-22503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:10:50.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:10:50.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:10: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-26T02:10:50.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:10:50.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:10:50.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:10:50.744 [DEBUG] [Thread-22503] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:11:02.337 [DEBUG] [Thread-22505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:17.387 [DEBUG] [Thread-22506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:11:20.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:11:20.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-26T02:11:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 11, 4), 2.3, 85.88, 0.0, 17.66, 12.25, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:11:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:11:04
2025-12-26T02:11:21.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:11:21.754 [DEBUG] [Thread-22507] [transport.py] [_log()] starting thread (client mode): 0xb9546590
2025-12-26T02:11:21.754 [DEBUG] [Thread-22507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:11:21.773 [DEBUG] [Thread-22507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:11:21.773 [INFO] [Thread-22507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] client lang: <none>
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] server lang: <none>
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] kex follows: False
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] Compression: none
2025-12-26T02:11:21.776 [DEBUG] [Thread-22507] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:11:21.794 [DEBUG] [Thread-22507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:11:21.794 [DEBUG] [Thread-22507] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:11:21.795 [DEBUG] [Thread-22507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:11:21.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:11:21.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:11:21.797 [DEBUG] [Thread-22507] [transport.py] [_log()] userauth is OK
2025-12-26T02:11:21.797 [DEBUG] [Thread-22507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:11:21.797 [DEBUG] [Thread-22507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:11:21.797 [DEBUG] [Thread-22507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:11:21.797 [DEBUG] [Thread-22507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:11:21.815 [INFO] [Thread-22507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:11:21.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:11:22.569 [DEBUG] [Thread-22507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:11:22.569 [DEBUG] [Thread-22507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:11:22.570 [DEBUG] [Thread-22507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:11:22.610 [DEBUG] [Thread-22507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:11:22.611 [DEBUG] [Thread-22507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:11:22.614 [DEBUG] [Thread-22507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:11:22.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:11:22.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:11:22.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:11:22.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:11:22.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:11:22.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:11:22.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:11:22.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:11:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:11:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.007351 -999.00  +12.30  13.20     87  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 13.2 13.2 181.0 16.4 12.7 -22.8 12.5 -22.4 12.3 -20.7 12.7 -21.8
2025-12-26T02:11:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:11:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:11:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.007351
2025-12-26T02:11:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:11:22.641 [DEBUG] [Thread-22507] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:11:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:11:22.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:11:22.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:11:22.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:11:22.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:11:04', tmtdew=2.3, humidity=85.88, cloud=0.0, wind=17.66, temperature=12.25, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:10:35.126', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:09:00')
2025-12-26T02:11:22.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-26T02:11:22.744 [DEBUG] [Thread-22510] [transport.py] [_log()] starting thread (client mode): 0xb95455d0
2025-12-26T02:11:22.744 [DEBUG] [Thread-22510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:11:22.759 [DEBUG] [Thread-22510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:11:22.759 [INFO] [Thread-22510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:11:22.766 [DEBUG] [Thread-22510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] client lang: <none>
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] server lang: <none>
2025-12-26T02:11:22.767 [DEBUG] [Thread-22510] [transport.py] [_log()] kex follows: False
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] Compression: none
2025-12-26T02:11:22.768 [DEBUG] [Thread-22510] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:11:22.829 [DEBUG] [Thread-22510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:11:22.830 [DEBUG] [Thread-22510] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:11:22.830 [DEBUG] [Thread-22510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:11:22.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:11:22.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:11:22.895 [DEBUG] [Thread-22510] [transport.py] [_log()] userauth is OK
2025-12-26T02:11:22.895 [DEBUG] [Thread-22510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:11:22.895 [DEBUG] [Thread-22510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:11:22.895 [DEBUG] [Thread-22510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:11:22.896 [DEBUG] [Thread-22510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:11:22.916 [INFO] [Thread-22510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:11:22.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:11:22.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:11:23.738 [DEBUG] [Thread-22510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:11:23.739 [DEBUG] [Thread-22510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:11:23.787 [DEBUG] [Thread-22510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:11:23.787 [DEBUG] [Thread-22510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:11:23.797 [DEBUG] [Thread-22510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:11:23.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:11:23.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:11:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:11:23.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:11:23.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:11:23.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:11:23.833 [DEBUG] [Thread-22510] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:11:32.421 [DEBUG] [Thread-22512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:44.518 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:44.519 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:46.212 [DEBUG] [Thread-22513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:47.463 [DEBUG] [Thread-22514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:11:53.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:11:53.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:11:53.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:11:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 11, 36), 2.32, 85.78, 0.0, 18.32, 12.17, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:11:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:11:36
2025-12-26T02:11:54.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:11:54.853 [DEBUG] [Thread-22515] [transport.py] [_log()] starting thread (client mode): 0xb95586d0
2025-12-26T02:11:54.854 [DEBUG] [Thread-22515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:11:54.873 [DEBUG] [Thread-22515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:11:54.873 [INFO] [Thread-22515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:11:54.876 [DEBUG] [Thread-22515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:11:54.876 [DEBUG] [Thread-22515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:11:54.876 [DEBUG] [Thread-22515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] client lang: <none>
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] server lang: <none>
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] kex follows: False
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:11:54.877 [DEBUG] [Thread-22515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:11:54.878 [DEBUG] [Thread-22515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:11:54.878 [DEBUG] [Thread-22515] [transport.py] [_log()] Compression: none
2025-12-26T02:11:54.878 [DEBUG] [Thread-22515] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:11:54.896 [DEBUG] [Thread-22515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:11:54.897 [DEBUG] [Thread-22515] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:11:54.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:11:54.899 [DEBUG] [Thread-22515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:11:54.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:11:54.901 [DEBUG] [Thread-22515] [transport.py] [_log()] userauth is OK
2025-12-26T02:11:54.901 [DEBUG] [Thread-22515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:11:54.901 [DEBUG] [Thread-22515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:11:54.902 [DEBUG] [Thread-22515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:11:54.902 [DEBUG] [Thread-22515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:11:54.927 [INFO] [Thread-22515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:11:54.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:11:55.581 [DEBUG] [Thread-22515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:11:55.581 [DEBUG] [Thread-22515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:11:55.582 [DEBUG] [Thread-22515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:11:55.622 [DEBUG] [Thread-22515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:11:55.622 [DEBUG] [Thread-22515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:11:55.624 [DEBUG] [Thread-22515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:11:55.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:11:55.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:11:55.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:11:55.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:11:55.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:11:55.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:11:55.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:11:55.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:11:55.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:11:55.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.007699 -999.00  +12.30  12.38     87  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.4 12.4 174.4 14.8 12.7 -22.7 12.5 -22.3 12.3 -20.7 12.7 -21.8
2025-12-26T02:11:55.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:11:55.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:11:55.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.007699
2025-12-26T02:11:55.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:11:55.649 [DEBUG] [Thread-22515] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:11:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:11:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:11:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:11:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:11:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:11:36', tmtdew=2.32, humidity=85.78, cloud=0.0, wind=18.32, temperature=12.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:11:05.194', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:09:00')
2025-12-26T02:11:55.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-26T02:11:55.750 [DEBUG] [Thread-22518] [transport.py] [_log()] starting thread (client mode): 0xb9593cd0
2025-12-26T02:11:55.750 [DEBUG] [Thread-22518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:11:55.764 [DEBUG] [Thread-22518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:11:55.764 [INFO] [Thread-22518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:11:55.776 [DEBUG] [Thread-22518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:11:55.776 [DEBUG] [Thread-22518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] client lang: <none>
2025-12-26T02:11:55.777 [DEBUG] [Thread-22518] [transport.py] [_log()] server lang: <none>
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] kex follows: False
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] Compression: none
2025-12-26T02:11:55.778 [DEBUG] [Thread-22518] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:11:55.836 [DEBUG] [Thread-22518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:11:55.837 [DEBUG] [Thread-22518] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:11:55.837 [DEBUG] [Thread-22518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:11:55.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:11:55.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:11:55.898 [DEBUG] [Thread-22518] [transport.py] [_log()] userauth is OK
2025-12-26T02:11:55.898 [DEBUG] [Thread-22518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:11:55.899 [DEBUG] [Thread-22518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:11:55.899 [DEBUG] [Thread-22518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:11:55.899 [DEBUG] [Thread-22518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:11:55.917 [INFO] [Thread-22518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:11:55.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-26T02:11:55.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:11:56.762 [DEBUG] [Thread-22518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:11:56.763 [DEBUG] [Thread-22518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:11:56.811 [DEBUG] [Thread-22518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:11:56.811 [DEBUG] [Thread-22518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:11:56.821 [DEBUG] [Thread-22518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:11:56.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:11:56.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-26T02:11:56.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-26T02:11:56.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:11:56.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:11:56.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:11:56.864 [DEBUG] [Thread-22518] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:12:02.493 [DEBUG] [Thread-22520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:17.553 [DEBUG] [Thread-22521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:12:26.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:12:26.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-26T02:12:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 12, 8), 2.34, 85.66, 0.0, 16.96, 12.14, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:12:27.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:12:08
2025-12-26T02:12:27.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:12:27.913 [DEBUG] [Thread-22522] [transport.py] [_log()] starting thread (client mode): 0xb9593730
2025-12-26T02:12:27.913 [DEBUG] [Thread-22522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:12:27.932 [DEBUG] [Thread-22522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:12:27.932 [INFO] [Thread-22522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] client lang: <none>
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] server lang: <none>
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] kex follows: False
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] Compression: none
2025-12-26T02:12:27.935 [DEBUG] [Thread-22522] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:12:27.950 [DEBUG] [Thread-22522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:12:27.951 [DEBUG] [Thread-22522] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:12:27.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:12:27.951 [DEBUG] [Thread-22522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:12:27.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:12:27.951 [DEBUG] [Thread-22522] [transport.py] [_log()] userauth is OK
2025-12-26T02:12:27.951 [DEBUG] [Thread-22522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:12:27.951 [DEBUG] [Thread-22522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:12:27.952 [DEBUG] [Thread-22522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:12:27.952 [DEBUG] [Thread-22522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:12:27.960 [INFO] [Thread-22522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:12:27.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:12:28.719 [DEBUG] [Thread-22522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:12:28.719 [DEBUG] [Thread-22522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:12:28.719 [DEBUG] [Thread-22522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:12:28.760 [DEBUG] [Thread-22522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:12:28.760 [DEBUG] [Thread-22522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:12:28.762 [DEBUG] [Thread-22522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:12:28.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:12:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:12:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:12:28.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:12:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:12:28.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:12:28.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.008392 -999.00  +12.30  11.82     86  +10.10 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 11.8 11.8 177.0 15.9 12.7 -22.7 12.6 -22.2 12.3 -20.6 12.6 -21.5
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.008392
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:12:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:12:08', tmtdew=2.34, humidity=85.66, cloud=0.0, wind=16.96, temperature=12.14, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:12:05.069', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:09:00')
2025-12-26T02:12:28.775 [DEBUG] [Thread-22522] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:12:28.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-26T02:12:28.859 [DEBUG] [Thread-22525] [transport.py] [_log()] starting thread (client mode): 0xb95f0970
2025-12-26T02:12:28.859 [DEBUG] [Thread-22525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:12:28.874 [DEBUG] [Thread-22525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:12:28.874 [INFO] [Thread-22525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] client lang: <none>
2025-12-26T02:12:28.881 [DEBUG] [Thread-22525] [transport.py] [_log()] server lang: <none>
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] kex follows: False
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] Compression: none
2025-12-26T02:12:28.882 [DEBUG] [Thread-22525] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:12:28.939 [DEBUG] [Thread-22525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:12:28.940 [DEBUG] [Thread-22525] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:12:28.940 [DEBUG] [Thread-22525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:12:28.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:12:28.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:12:28.997 [DEBUG] [Thread-22525] [transport.py] [_log()] userauth is OK
2025-12-26T02:12:28.997 [DEBUG] [Thread-22525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:12:28.997 [DEBUG] [Thread-22525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:12:28.997 [DEBUG] [Thread-22525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:12:28.997 [DEBUG] [Thread-22525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:12:29.011 [INFO] [Thread-22525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:12:29.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-26T02:12:29.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:12:29.858 [DEBUG] [Thread-22525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:12:29.858 [DEBUG] [Thread-22525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:12:29.907 [DEBUG] [Thread-22525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:12:29.907 [DEBUG] [Thread-22525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:12:29.915 [DEBUG] [Thread-22525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:12:29.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:12: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-26T02:12:29.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-26T02:12:29.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:12:29.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:12:29.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:12:29.951 [DEBUG] [Thread-22525] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:12:32.590 [DEBUG] [Thread-22527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:44.723 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:44.724 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:46.284 [DEBUG] [Thread-22528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:47.641 [DEBUG] [Thread-22529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:12:59.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:12:59.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:12:59.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-26T02:13:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 12, 40), 2.36, 85.06, 0.0, 16.06, 12.19, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:13:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:12:40
2025-12-26T02:13:00.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:13:00.963 [DEBUG] [Thread-22530] [transport.py] [_log()] starting thread (client mode): 0xb9579390
2025-12-26T02:13:00.963 [DEBUG] [Thread-22530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:13:00.983 [DEBUG] [Thread-22530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:13:00.983 [INFO] [Thread-22530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] client lang: <none>
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] server lang: <none>
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] kex follows: False
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] Compression: none
2025-12-26T02:13:00.987 [DEBUG] [Thread-22530] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:13:01.005 [DEBUG] [Thread-22530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:13:01.006 [DEBUG] [Thread-22530] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:13:01.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:13:01.007 [DEBUG] [Thread-22530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:13:01.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:13:01.008 [DEBUG] [Thread-22530] [transport.py] [_log()] userauth is OK
2025-12-26T02:13:01.008 [DEBUG] [Thread-22530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:13:01.008 [DEBUG] [Thread-22530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:13:01.008 [DEBUG] [Thread-22530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:13:01.008 [DEBUG] [Thread-22530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:13:01.024 [INFO] [Thread-22530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:13:01.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:13:01.674 [DEBUG] [Thread-22530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:13:01.674 [DEBUG] [Thread-22530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:13:01.674 [DEBUG] [Thread-22530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:13:01.715 [DEBUG] [Thread-22530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:13:01.715 [DEBUG] [Thread-22530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:13:01.719 [DEBUG] [Thread-22530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:13:01.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:13:01.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:13:01.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:13:01.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:13:01.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:13:01.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:13:01.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:13:01.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:13:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:13:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.008740 -999.00  +12.30  12.48     86  +10.20 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.5 12.5 179.6 20.2 12.7 -22.7 12.5 -22.4 12.3 -20.6 12.7 -21.8
2025-12-26T02:13:01.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:13:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:13:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.008740
2025-12-26T02:13:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:13:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:13:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:13:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:13:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:13:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:12:40', tmtdew=2.36, humidity=85.06, cloud=0.0, wind=16.06, temperature=12.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:12:35.136', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:09:00')
2025-12-26T02:13:01.745 [DEBUG] [Thread-22530] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:13:01.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-26T02:13:01.838 [DEBUG] [Thread-22533] [transport.py] [_log()] starting thread (client mode): 0xbbfcd030
2025-12-26T02:13:01.839 [DEBUG] [Thread-22533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:13:01.853 [DEBUG] [Thread-22533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:13:01.853 [INFO] [Thread-22533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] client lang: <none>
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] server lang: <none>
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] kex follows: False
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:13:01.861 [DEBUG] [Thread-22533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:13:01.862 [DEBUG] [Thread-22533] [transport.py] [_log()] Compression: none
2025-12-26T02:13:01.862 [DEBUG] [Thread-22533] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:13:01.926 [DEBUG] [Thread-22533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:13:01.927 [DEBUG] [Thread-22533] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:13:01.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:13:01.928 [DEBUG] [Thread-22533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:13:01.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:13:01.982 [DEBUG] [Thread-22533] [transport.py] [_log()] userauth is OK
2025-12-26T02:13:01.982 [DEBUG] [Thread-22533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:13:01.982 [DEBUG] [Thread-22533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:13:01.982 [DEBUG] [Thread-22533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:13:01.982 [DEBUG] [Thread-22533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:13:02.001 [INFO] [Thread-22533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:13:02.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-26T02:13:02.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:13:02.679 [DEBUG] [Thread-22535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:13:02.820 [DEBUG] [Thread-22533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:13:02.820 [DEBUG] [Thread-22533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:13:02.868 [DEBUG] [Thread-22533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:13:02.868 [DEBUG] [Thread-22533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:13:02.877 [DEBUG] [Thread-22533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:13:02.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:13:02.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:13:02.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:13:02.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:13:02.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:13:02.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:13:02.914 [DEBUG] [Thread-22533] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:13:17.732 [DEBUG] [Thread-22536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:13:32.772 [DEBUG] [Thread-22537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:13:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:13:32.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:13:32.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-26T02:13:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 13, 12), 2.38, 84.94, 0.0, 15.58, 12.19, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:13:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:13:12
2025-12-26T02:13:33.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:13:33.935 [DEBUG] [Thread-22538] [transport.py] [_log()] starting thread (client mode): 0xb95b0130
2025-12-26T02:13:33.935 [DEBUG] [Thread-22538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:13:33.956 [DEBUG] [Thread-22538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:13:33.956 [INFO] [Thread-22538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:13:33.957 [DEBUG] [Thread-22538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:13:33.957 [DEBUG] [Thread-22538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:13:33.957 [DEBUG] [Thread-22538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:13:33.957 [DEBUG] [Thread-22538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] client lang: <none>
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] server lang: <none>
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] kex follows: False
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] Compression: none
2025-12-26T02:13:33.958 [DEBUG] [Thread-22538] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:13:33.966 [DEBUG] [Thread-22538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:13:33.967 [DEBUG] [Thread-22538] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:13:33.967 [DEBUG] [Thread-22538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:13:33.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:13:33.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:13:33.969 [DEBUG] [Thread-22538] [transport.py] [_log()] userauth is OK
2025-12-26T02:13:33.969 [DEBUG] [Thread-22538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:13:33.969 [DEBUG] [Thread-22538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:13:33.970 [DEBUG] [Thread-22538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:13:33.970 [DEBUG] [Thread-22538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:13:33.998 [INFO] [Thread-22538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:13:33.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:13:34.669 [DEBUG] [Thread-22538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:13:34.669 [DEBUG] [Thread-22538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:13:34.669 [DEBUG] [Thread-22538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:13:34.710 [DEBUG] [Thread-22538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:13:34.710 [DEBUG] [Thread-22538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:13:34.714 [DEBUG] [Thread-22538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:13:34.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:13:34.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:13:34.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:13:34.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:13:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:13:34.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:13:34.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:13:34.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:13:34.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:13:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.009087 -999.00  +12.30  14.39     86  +10.10 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.4 14.4 165.6 17.0 12.7 -22.6 12.6 -22.1 12.3 -20.5 12.6 -21.6
2025-12-26T02:13:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:13:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:13:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.009087
2025-12-26T02:13:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:13:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:13:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:13:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:13:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:13:34.737 [DEBUG] [Thread-22538] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:13:34.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:13:12', tmtdew=2.38, humidity=84.94, cloud=0.0, wind=15.58, temperature=12.19, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:13:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:09:00')
2025-12-26T02:13:34.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-26T02:13:34.828 [DEBUG] [Thread-22541] [transport.py] [_log()] starting thread (client mode): 0xb95b39a0
2025-12-26T02:13:34.829 [DEBUG] [Thread-22541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:13:34.843 [DEBUG] [Thread-22541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:13:34.843 [INFO] [Thread-22541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:13:34.850 [DEBUG] [Thread-22541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] client lang: <none>
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] server lang: <none>
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] kex follows: False
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:13:34.851 [DEBUG] [Thread-22541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:13:34.852 [DEBUG] [Thread-22541] [transport.py] [_log()] Compression: none
2025-12-26T02:13:34.852 [DEBUG] [Thread-22541] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:13:34.910 [DEBUG] [Thread-22541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:13:34.911 [DEBUG] [Thread-22541] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:13:34.912 [DEBUG] [Thread-22541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:13:34.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:13:34.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:13:34.966 [DEBUG] [Thread-22541] [transport.py] [_log()] userauth is OK
2025-12-26T02:13:34.966 [DEBUG] [Thread-22541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:13:34.966 [DEBUG] [Thread-22541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:13:34.967 [DEBUG] [Thread-22541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:13:34.967 [DEBUG] [Thread-22541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:13:34.988 [INFO] [Thread-22541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:13:34.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-26T02:13:34.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:13:35.796 [DEBUG] [Thread-22541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:13:35.796 [DEBUG] [Thread-22541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:13:35.845 [DEBUG] [Thread-22541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:13:35.845 [DEBUG] [Thread-22541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:13:35.854 [DEBUG] [Thread-22541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:13:35.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:13:35.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-26T02:13: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') -> 00000000
2025-12-26T02:13:35.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:13:35.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:13:35.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:13:35.889 [DEBUG] [Thread-22541] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:13:44.925 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:13:44.925 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:13:46.361 [DEBUG] [Thread-22543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:13:47.798 [DEBUG] [Thread-22544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:02.843 [DEBUG] [Thread-22545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:14:05.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:14:05.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-26T02:14:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 13, 44), 2.44, 84.88, 0.0, 17.15, 12.2, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:14:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:13:44
2025-12-26T02:14:06.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:14:06.871 [DEBUG] [Thread-22546] [transport.py] [_log()] starting thread (client mode): 0xb9546ce0
2025-12-26T02:14:06.871 [DEBUG] [Thread-22546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:14:06.891 [DEBUG] [Thread-22546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:14:06.892 [INFO] [Thread-22546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] client lang: <none>
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] server lang: <none>
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] kex follows: False
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] Compression: none
2025-12-26T02:14:06.895 [DEBUG] [Thread-22546] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:14:06.911 [DEBUG] [Thread-22546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:14:06.911 [DEBUG] [Thread-22546] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:14:06.912 [DEBUG] [Thread-22546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:14:06.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:14:06.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:14:06.956 [DEBUG] [Thread-22546] [transport.py] [_log()] userauth is OK
2025-12-26T02:14:06.957 [DEBUG] [Thread-22546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:14:06.957 [DEBUG] [Thread-22546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:14:06.957 [DEBUG] [Thread-22546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:14:06.957 [DEBUG] [Thread-22546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:14:06.973 [INFO] [Thread-22546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:14:06.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:14:07.608 [DEBUG] [Thread-22546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:14:07.608 [DEBUG] [Thread-22546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:14:07.609 [DEBUG] [Thread-22546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:14:07.649 [DEBUG] [Thread-22546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:14:07.649 [DEBUG] [Thread-22546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:14:07.652 [DEBUG] [Thread-22546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:14:07.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:14:07.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:14:07.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:14:07.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:14:07.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:14:07.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:14:07.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:14:07.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:14:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:14:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.009434 -999.00  +12.30  12.77     86  +10.10 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 12.8 12.8 167.0 16.1 12.7 -22.6 12.5 -22.1 12.3 -20.4 12.6 -21.4
2025-12-26T02:14:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:14:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:14:07.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.009434
2025-12-26T02:14:07.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:14:07.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:14:07.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:14:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:14:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:14:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:13:44', tmtdew=2.44, humidity=84.88, cloud=0.0, wind=17.15, temperature=12.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:13:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:13:00')
2025-12-26T02:14:07.678 [DEBUG] [Thread-22546] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:14:07.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-26T02:14:07.779 [DEBUG] [Thread-22549] [transport.py] [_log()] starting thread (client mode): 0xb957b2e0
2025-12-26T02:14:07.779 [DEBUG] [Thread-22549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:14:07.794 [DEBUG] [Thread-22549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:14:07.794 [INFO] [Thread-22549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:07.802 [DEBUG] [Thread-22549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] client lang: <none>
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] server lang: <none>
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] kex follows: False
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] Compression: none
2025-12-26T02:14:07.803 [DEBUG] [Thread-22549] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:14:07.859 [DEBUG] [Thread-22549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:14:07.859 [DEBUG] [Thread-22549] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:14:07.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:14:07.860 [DEBUG] [Thread-22549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:14:07.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:14:07.919 [DEBUG] [Thread-22549] [transport.py] [_log()] userauth is OK
2025-12-26T02:14:07.920 [DEBUG] [Thread-22549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:14:07.920 [DEBUG] [Thread-22549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:14:07.920 [DEBUG] [Thread-22549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:14:07.920 [DEBUG] [Thread-22549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:14:07.938 [INFO] [Thread-22549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:14:07.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-26T02:14:07.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:14:08.731 [DEBUG] [Thread-22549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:14:08.732 [DEBUG] [Thread-22549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:14:08.780 [DEBUG] [Thread-22549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:14:08.780 [DEBUG] [Thread-22549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:14:08.790 [DEBUG] [Thread-22549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:14:08.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:14:08.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-26T02:14:08.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-26T02:14:08.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:14:08.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:14:08.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:14:08.827 [DEBUG] [Thread-22549] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:14:17.879 [DEBUG] [Thread-22551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:32.927 [DEBUG] [Thread-22552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:38.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:14:38.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:14:38.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-26T02:14:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 14, 16), 2.46, 84.75, 0.0, 17.5, 12.17, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:14:39.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:14:16
2025-12-26T02:14:39.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:14:39.830 [DEBUG] [Thread-22553] [transport.py] [_log()] starting thread (client mode): 0xb9545330
2025-12-26T02:14:39.830 [DEBUG] [Thread-22553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:14:39.851 [DEBUG] [Thread-22553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:14:39.851 [INFO] [Thread-22553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] client lang: <none>
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] server lang: <none>
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] kex follows: False
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:14:39.855 [DEBUG] [Thread-22553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:14:39.856 [DEBUG] [Thread-22553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:14:39.856 [DEBUG] [Thread-22553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:14:39.856 [DEBUG] [Thread-22553] [transport.py] [_log()] Compression: none
2025-12-26T02:14:39.856 [DEBUG] [Thread-22553] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:14:39.872 [DEBUG] [Thread-22553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:14:39.873 [DEBUG] [Thread-22553] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:14:39.874 [DEBUG] [Thread-22553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:14:39.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:14:39.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:14:39.875 [DEBUG] [Thread-22553] [transport.py] [_log()] userauth is OK
2025-12-26T02:14:39.876 [DEBUG] [Thread-22553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:14:39.876 [DEBUG] [Thread-22553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:14:39.876 [DEBUG] [Thread-22553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:14:39.876 [DEBUG] [Thread-22553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:14:39.899 [INFO] [Thread-22553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:14:39.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:14:40.535 [DEBUG] [Thread-22553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:14:40.535 [DEBUG] [Thread-22553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:14:40.536 [DEBUG] [Thread-22553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:14:40.576 [DEBUG] [Thread-22553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:14:40.576 [DEBUG] [Thread-22553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:14:40.579 [DEBUG] [Thread-22553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:14:40.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:14:40.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:14:40.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:14:40.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:14:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:14:40.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:14:40.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:14:40.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:14:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:14:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.009781 -999.00  +12.30  14.23     86  +10.10 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.2 14.2 184.0 17.3 12.7 -22.5 12.6 -22.1 12.4 -20.3 12.7 -21.6
2025-12-26T02:14:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:14:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:14:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.009781
2025-12-26T02:14:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:14:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:14:40.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:14:40.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:14:40.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:14:40.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:14:16', tmtdew=2.46, humidity=84.75, cloud=0.0, wind=17.5, temperature=12.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:14:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:13:00')
2025-12-26T02:14:40.609 [DEBUG] [Thread-22553] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:14:40.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-26T02:14:40.718 [DEBUG] [Thread-22556] [transport.py] [_log()] starting thread (client mode): 0xb95f0c10
2025-12-26T02:14:40.719 [DEBUG] [Thread-22556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:14:40.736 [DEBUG] [Thread-22556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:14:40.736 [INFO] [Thread-22556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:14:40.744 [DEBUG] [Thread-22556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:14:40.744 [DEBUG] [Thread-22556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:14:40.744 [DEBUG] [Thread-22556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:14:40.744 [DEBUG] [Thread-22556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] client lang: <none>
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] server lang: <none>
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] kex follows: False
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] Compression: none
2025-12-26T02:14:40.745 [DEBUG] [Thread-22556] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:14:40.803 [DEBUG] [Thread-22556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:14:40.804 [DEBUG] [Thread-22556] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:14:40.804 [DEBUG] [Thread-22556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:14:40.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:14:40.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:14:40.860 [DEBUG] [Thread-22556] [transport.py] [_log()] userauth is OK
2025-12-26T02:14:40.860 [DEBUG] [Thread-22556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:14:40.860 [DEBUG] [Thread-22556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:14:40.860 [DEBUG] [Thread-22556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:14:40.860 [DEBUG] [Thread-22556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:14:40.878 [INFO] [Thread-22556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:14:40.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-26T02:14:40.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:14:41.664 [DEBUG] [Thread-22556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:14:41.664 [DEBUG] [Thread-22556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:14:41.712 [DEBUG] [Thread-22556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:14:41.712 [DEBUG] [Thread-22556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:14:41.722 [DEBUG] [Thread-22556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:14:41.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:14:41.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:14:41.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-26T02:14:41.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:14:41.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:14:41.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:14:41.758 [DEBUG] [Thread-22556] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:14:45.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:45.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:46.418 [DEBUG] [Thread-22558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:47.965 [DEBUG] [Thread-22559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:14:49.231 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:03.021 [DEBUG] [Thread-22560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:15:11.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:15:11.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-26T02:15:12.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 14, 48), 2.47, 84.71, 0.0, 16.22, 12.22, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:15:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:14:48
2025-12-26T02:15:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:15:12.747 [DEBUG] [Thread-22561] [transport.py] [_log()] starting thread (client mode): 0xbbfce3e0
2025-12-26T02:15:12.747 [DEBUG] [Thread-22561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:15:12.765 [DEBUG] [Thread-22561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:15:12.765 [INFO] [Thread-22561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:12.766 [DEBUG] [Thread-22561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] client lang: <none>
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] server lang: <none>
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] kex follows: False
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] Compression: none
2025-12-26T02:15:12.767 [DEBUG] [Thread-22561] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:15:12.776 [DEBUG] [Thread-22561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:15:12.777 [DEBUG] [Thread-22561] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:15:12.777 [DEBUG] [Thread-22561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:15:12.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:15:12.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:15:12.779 [DEBUG] [Thread-22561] [transport.py] [_log()] userauth is OK
2025-12-26T02:15:12.779 [DEBUG] [Thread-22561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:15:12.779 [DEBUG] [Thread-22561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:15:12.779 [DEBUG] [Thread-22561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:15:12.779 [DEBUG] [Thread-22561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:15:12.798 [INFO] [Thread-22561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:15:12.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:15:13.608 [DEBUG] [Thread-22561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:15:13.609 [DEBUG] [Thread-22561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:15:13.609 [DEBUG] [Thread-22561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:15:13.651 [DEBUG] [Thread-22561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:15:13.651 [DEBUG] [Thread-22561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:15:13.653 [DEBUG] [Thread-22561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:15:13.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:15:13.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:15:13.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:15:13.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:15:13.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:15:13.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:15:13.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:15:13.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:15:13.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:15:13.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.010128 -999.00  +12.30  12.76     86  +10.10 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.8 12.8 170.6 15.5 12.7 -22.4 12.6 -22.1 12.4 -20.2 12.7 -21.5
2025-12-26T02:15:13.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:15:13.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:15:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.010128
2025-12-26T02:15:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:15:13.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:15:13.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:15:13.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:15:13.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:15:13.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:14:48', tmtdew=2.47, humidity=84.71, cloud=0.0, wind=16.22, temperature=12.22, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:14:35.059', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:13:00')
2025-12-26T02:15:13.678 [DEBUG] [Thread-22561] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:15:13.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-26T02:15:13.771 [DEBUG] [Thread-22564] [transport.py] [_log()] starting thread (client mode): 0xbbfce1a0
2025-12-26T02:15:13.771 [DEBUG] [Thread-22564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:15:13.791 [DEBUG] [Thread-22564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:15:13.791 [INFO] [Thread-22564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:15:13.798 [DEBUG] [Thread-22564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] client lang: <none>
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] server lang: <none>
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] kex follows: False
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] Compression: none
2025-12-26T02:15:13.799 [DEBUG] [Thread-22564] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:15:13.856 [DEBUG] [Thread-22564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:15:13.857 [DEBUG] [Thread-22564] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:15:13.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:15:13.858 [DEBUG] [Thread-22564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:15:13.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:15:13.916 [DEBUG] [Thread-22564] [transport.py] [_log()] userauth is OK
2025-12-26T02:15:13.917 [DEBUG] [Thread-22564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:15:13.917 [DEBUG] [Thread-22564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:15:13.917 [DEBUG] [Thread-22564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:15:13.917 [DEBUG] [Thread-22564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:15:13.941 [INFO] [Thread-22564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:15:13.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-26T02:15:13.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:15:14.762 [DEBUG] [Thread-22564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:15:14.763 [DEBUG] [Thread-22564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:15:14.811 [DEBUG] [Thread-22564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:15:14.811 [DEBUG] [Thread-22564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:15:14.824 [DEBUG] [Thread-22564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:15:14.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:15:14.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')
2025-12-26T02:15:14.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-26T02:15:14.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:15:14.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:15:14.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:15:14.878 [DEBUG] [Thread-22564] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:15:18.052 [DEBUG] [Thread-22566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:33.101 [DEBUG] [Thread-22567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:44.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:15:44.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:15:44.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-26T02:15:45.328 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:45.329 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:45.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 15, 20), 2.49, 84.63, 0.0, 17.73, 12.2, 1, 1, 0, 2, 0, 0),)
2025-12-26T02:15:45.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:15:20
2025-12-26T02:15:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:15:45.934 [DEBUG] [Thread-22568] [transport.py] [_log()] starting thread (client mode): 0xb95b2bc0
2025-12-26T02:15:45.934 [DEBUG] [Thread-22568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:15:45.953 [DEBUG] [Thread-22568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:15:45.953 [INFO] [Thread-22568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] client lang: <none>
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] server lang: <none>
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] kex follows: False
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] Compression: none
2025-12-26T02:15:45.956 [DEBUG] [Thread-22568] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:15:45.972 [DEBUG] [Thread-22568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:15:45.972 [DEBUG] [Thread-22568] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:15:45.972 [DEBUG] [Thread-22568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:15:45.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:15:45.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:15:45.973 [DEBUG] [Thread-22568] [transport.py] [_log()] userauth is OK
2025-12-26T02:15:45.973 [DEBUG] [Thread-22568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:15:45.973 [DEBUG] [Thread-22568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:15:45.973 [DEBUG] [Thread-22568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:15:45.973 [DEBUG] [Thread-22568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:15:45.982 [INFO] [Thread-22568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:15:45.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:15:46.482 [DEBUG] [Thread-22570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:15:46.629 [DEBUG] [Thread-22568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:15:46.630 [DEBUG] [Thread-22568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:15:46.630 [DEBUG] [Thread-22568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:15:46.671 [DEBUG] [Thread-22568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:15:46.671 [DEBUG] [Thread-22568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:15:46.674 [DEBUG] [Thread-22568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:15:46.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:15:46.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:15:46.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:15:46.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:15:46.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:15:46.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:15:46.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:15:46.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:15:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:15:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.010128 -999.00  +12.30  12.76     86  +10.10 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.8 12.8 170.6 15.5 12.7 -22.4 12.6 -22.1 12.4 -20.2 12.7 -21.5
2025-12-26T02:15:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:15:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:15:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.010128
2025-12-26T02:15:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:15:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:15:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:15:46.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:15:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:15:46.700 [DEBUG] [Thread-22568] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:15:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:15:20', tmtdew=2.49, humidity=84.63, cloud=0.0, wind=17.73, temperature=12.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:14:35.059', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:13:00')
2025-12-26T02:15:46.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-26T02:15:46.795 [DEBUG] [Thread-22572] [transport.py] [_log()] starting thread (client mode): 0xb95920b0
2025-12-26T02:15:46.795 [DEBUG] [Thread-22572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:15:46.810 [DEBUG] [Thread-22572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:15:46.810 [INFO] [Thread-22572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:15:46.818 [DEBUG] [Thread-22572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:15:46.818 [DEBUG] [Thread-22572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:15:46.818 [DEBUG] [Thread-22572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] client lang: <none>
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] server lang: <none>
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] kex follows: False
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:15:46.819 [DEBUG] [Thread-22572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:15:46.820 [DEBUG] [Thread-22572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:15:46.820 [DEBUG] [Thread-22572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:15:46.820 [DEBUG] [Thread-22572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:15:46.820 [DEBUG] [Thread-22572] [transport.py] [_log()] Compression: none
2025-12-26T02:15:46.820 [DEBUG] [Thread-22572] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:15:46.876 [DEBUG] [Thread-22572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:15:46.876 [DEBUG] [Thread-22572] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:15:46.877 [DEBUG] [Thread-22572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:15:46.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:15:46.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:15:46.934 [DEBUG] [Thread-22572] [transport.py] [_log()] userauth is OK
2025-12-26T02:15:46.934 [DEBUG] [Thread-22572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:15:46.934 [DEBUG] [Thread-22572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:15:46.934 [DEBUG] [Thread-22572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:15:46.934 [DEBUG] [Thread-22572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:15:46.954 [INFO] [Thread-22572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:15:46.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:15:46.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:15:47.794 [DEBUG] [Thread-22572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:15:47.795 [DEBUG] [Thread-22572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:15:47.842 [DEBUG] [Thread-22572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:15:47.842 [DEBUG] [Thread-22572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:15:47.851 [DEBUG] [Thread-22572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:15:47.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:15:47.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-26T02:15:47.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:15:47.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:15:47.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:15:47.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:15:47.884 [DEBUG] [Thread-22572] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:15:48.132 [DEBUG] [Thread-22574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:03.180 [DEBUG] [Thread-22575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:17.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:16:17.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:16:17.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-26T02:16:18.216 [DEBUG] [Thread-22576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:18.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 15, 52), 2.5, 84.53, 0.0, 18.83, 12.25, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:16:18.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:15:52
2025-12-26T02:16:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:16:18.873 [DEBUG] [Thread-22577] [transport.py] [_log()] starting thread (client mode): 0xb9590b80
2025-12-26T02:16:18.873 [DEBUG] [Thread-22577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:16:18.893 [DEBUG] [Thread-22577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:16:18.893 [INFO] [Thread-22577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] client lang: <none>
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] server lang: <none>
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] kex follows: False
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] Compression: none
2025-12-26T02:16:18.897 [DEBUG] [Thread-22577] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:16:18.915 [DEBUG] [Thread-22577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:16:18.915 [DEBUG] [Thread-22577] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:16:18.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:16:18.916 [DEBUG] [Thread-22577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:16:18.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:16:18.918 [DEBUG] [Thread-22577] [transport.py] [_log()] userauth is OK
2025-12-26T02:16:18.918 [DEBUG] [Thread-22577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:16:18.919 [DEBUG] [Thread-22577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:16:18.919 [DEBUG] [Thread-22577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:16:18.919 [DEBUG] [Thread-22577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:16:18.937 [INFO] [Thread-22577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:16:18.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:16:19.670 [DEBUG] [Thread-22577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:16:19.670 [DEBUG] [Thread-22577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:16:19.670 [DEBUG] [Thread-22577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:16:19.711 [DEBUG] [Thread-22577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:16:19.712 [DEBUG] [Thread-22577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:16:19.714 [DEBUG] [Thread-22577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:16:19.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:16:19.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:16:19.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:16:19.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:16:19.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:16:19.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:16:19.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.010823 -999.00  +12.30   9.09     86  +10.10 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 9.1 9.1 183.2 17.0 12.7 -22.2 12.7 -22.0 12.4 -20.3 12.7 -21.3
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.010823
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:16:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:15:52', tmtdew=2.5, humidity=84.53, cloud=0.0, wind=18.83, temperature=12.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:15:35.107', atlas_cloud=2, atlas_rain=1, zp_data=[3.6087499999999997, 0.24774999999999991, 0.4767500000000009, 0.6324999999999994, nan, nan, nan, nan, 0.2394999999999996, 0.16699999999999982, 0.22325000000000017, 0.359, 0.3509999999999991, 0.5642499999999995, 1.1769999999999996, 2.1899999999999995, 0.27124999999999844, 0.32750000000000057, 0.20199999999999996, 0.40724999999999945, 0.3219999999999992, 0.4212499999999988, 0.5702500000000015, 0.4817499999999999, 0.2649999999999988, 0.2789999999999999, 0.37374999999999936, 0.34250000000000025, 0.4765000000000006, 0.49350000000000094, 0.4900000000000011, 0.6610000000000005, 0.40774999999999917], zp_timestamp='2025-12-26T00:13:00')
2025-12-26T02:16:19.733 [DEBUG] [Thread-22577] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:16:19.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-26T02:16:19.814 [DEBUG] [Thread-22580] [transport.py] [_log()] starting thread (client mode): 0xb9592950
2025-12-26T02:16:19.814 [DEBUG] [Thread-22580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:16:19.829 [DEBUG] [Thread-22580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:16:19.829 [INFO] [Thread-22580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] client lang: <none>
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] server lang: <none>
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] kex follows: False
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] Compression: none
2025-12-26T02:16:19.836 [DEBUG] [Thread-22580] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:16:19.891 [DEBUG] [Thread-22580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:16:19.891 [DEBUG] [Thread-22580] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:16:19.891 [DEBUG] [Thread-22580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:16:19.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:16:19.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:16:19.950 [DEBUG] [Thread-22580] [transport.py] [_log()] userauth is OK
2025-12-26T02:16:19.950 [DEBUG] [Thread-22580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:16:19.950 [DEBUG] [Thread-22580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:16:19.950 [DEBUG] [Thread-22580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:16:19.950 [DEBUG] [Thread-22580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:16:19.964 [INFO] [Thread-22580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:16:19.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:16:19.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:16:20.838 [DEBUG] [Thread-22580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:16:20.839 [DEBUG] [Thread-22580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:16:20.890 [DEBUG] [Thread-22580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:16:20.891 [DEBUG] [Thread-22580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:16:20.899 [DEBUG] [Thread-22580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:16:20.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:16:20.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:16:20.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-26T02:16:20.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:16:20.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:16:20.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:16:20.931 [DEBUG] [Thread-22580] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:16:33.248 [DEBUG] [Thread-22582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:45.530 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:45.531 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:46.538 [DEBUG] [Thread-22583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:48.302 [DEBUG] [Thread-22584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:16:50.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:16:50.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:16:50.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-26T02:16:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 16, 24), 2.51, 84.5, 0.0, 19.09, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:16:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:16:24
2025-12-26T02:16:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:16:51.934 [DEBUG] [Thread-22585] [transport.py] [_log()] starting thread (client mode): 0xb6b15ba0
2025-12-26T02:16:51.934 [DEBUG] [Thread-22585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:16:51.954 [DEBUG] [Thread-22585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:16:51.955 [INFO] [Thread-22585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:51.958 [DEBUG] [Thread-22585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] client lang: <none>
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] server lang: <none>
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] kex follows: False
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] Compression: none
2025-12-26T02:16:51.959 [DEBUG] [Thread-22585] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:16:51.979 [DEBUG] [Thread-22585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:16:51.979 [DEBUG] [Thread-22585] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:16:51.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:16:51.980 [DEBUG] [Thread-22585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:16:51.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:16:51.982 [DEBUG] [Thread-22585] [transport.py] [_log()] userauth is OK
2025-12-26T02:16:51.982 [DEBUG] [Thread-22585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:16:51.983 [DEBUG] [Thread-22585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:16:51.983 [DEBUG] [Thread-22585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:16:51.983 [DEBUG] [Thread-22585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:16:52.007 [INFO] [Thread-22585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:16:52.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:16:52.620 [DEBUG] [Thread-22585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:16:52.620 [DEBUG] [Thread-22585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:16:52.621 [DEBUG] [Thread-22585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:16:52.661 [DEBUG] [Thread-22585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:16:52.661 [DEBUG] [Thread-22585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:16:52.665 [DEBUG] [Thread-22585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:16:52.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:16:52.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:16:52.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:16:52.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:16:52.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:16:52.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:16:52.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:16:52.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:16:52.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:16:52.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.011170 -999.00  +12.30  10.27     85  +10.00 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 10.3 10.3 169.6 18.0 12.7 -22.3 12.6 -22.0 12.4 -20.2 12.7 -21.3
2025-12-26T02:16:52.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:16:52.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:16:52.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.011170
2025-12-26T02:16:52.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:16:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:16:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:16:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:16:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:16:52.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:16:24', tmtdew=2.51, humidity=84.5, cloud=0.0, wind=19.09, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:16:05.088', atlas_cloud=2, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:15:00')
2025-12-26T02:16:52.693 [DEBUG] [Thread-22585] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:16:52.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-26T02:16:52.795 [DEBUG] [Thread-22588] [transport.py] [_log()] starting thread (client mode): 0xb6b166b0
2025-12-26T02:16:52.796 [DEBUG] [Thread-22588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:16:52.811 [DEBUG] [Thread-22588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:16:52.811 [INFO] [Thread-22588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] client lang: <none>
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] server lang: <none>
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] kex follows: False
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:16:52.819 [DEBUG] [Thread-22588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:16:52.820 [DEBUG] [Thread-22588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:16:52.820 [DEBUG] [Thread-22588] [transport.py] [_log()] Compression: none
2025-12-26T02:16:52.820 [DEBUG] [Thread-22588] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:16:52.878 [DEBUG] [Thread-22588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:16:52.878 [DEBUG] [Thread-22588] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:16:52.879 [DEBUG] [Thread-22588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:16:52.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:16:52.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:16:52.934 [DEBUG] [Thread-22588] [transport.py] [_log()] userauth is OK
2025-12-26T02:16:52.934 [DEBUG] [Thread-22588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:16:52.934 [DEBUG] [Thread-22588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:16:52.935 [DEBUG] [Thread-22588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:16:52.935 [DEBUG] [Thread-22588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:16:52.954 [INFO] [Thread-22588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:16:52.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:16:52.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:16:53.717 [DEBUG] [Thread-22588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:16:53.717 [DEBUG] [Thread-22588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:16:53.764 [DEBUG] [Thread-22588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:16:53.765 [DEBUG] [Thread-22588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:16:53.774 [DEBUG] [Thread-22588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:16:53.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:16:53.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-26T02:16:53.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-26T02:16:53.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:16:53.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:16:53.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:16:53.808 [DEBUG] [Thread-22588] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:17:03.332 [DEBUG] [Thread-22590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:18.390 [DEBUG] [Thread-22591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:23.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:17:23.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:17:23.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-26T02:17:24.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 16, 56), 2.62, 83.95, 0.0, 16.59, 12.27, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:17:24.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:16:56
2025-12-26T02:17:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:17:24.777 [DEBUG] [Thread-22592] [transport.py] [_log()] starting thread (client mode): 0xb95b0910
2025-12-26T02:17:24.777 [DEBUG] [Thread-22592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:17:24.798 [DEBUG] [Thread-22592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:17:24.798 [INFO] [Thread-22592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] client lang: <none>
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] server lang: <none>
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] kex follows: False
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] Compression: none
2025-12-26T02:17:24.802 [DEBUG] [Thread-22592] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:17:24.819 [DEBUG] [Thread-22592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:17:24.820 [DEBUG] [Thread-22592] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:17:24.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:17:24.821 [DEBUG] [Thread-22592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:17:24.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:17:24.823 [DEBUG] [Thread-22592] [transport.py] [_log()] userauth is OK
2025-12-26T02:17:24.823 [DEBUG] [Thread-22592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:17:24.823 [DEBUG] [Thread-22592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:17:24.823 [DEBUG] [Thread-22592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:17:24.823 [DEBUG] [Thread-22592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:17:24.841 [INFO] [Thread-22592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:17:24.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:17:25.556 [DEBUG] [Thread-22592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:17:25.556 [DEBUG] [Thread-22592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:17:25.556 [DEBUG] [Thread-22592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:17:25.597 [DEBUG] [Thread-22592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:17:25.598 [DEBUG] [Thread-22592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:17:25.600 [DEBUG] [Thread-22592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:17:25.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:17:25.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:17:25.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:17:25.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:17:25.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:17:25.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:17:25.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:17:25.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:17:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:17:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.011517 -999.00  +12.40  12.93     85  +10.00 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.9 12.9 182.6 15.3 12.7 -22.4 12.6 -22.0 12.4 -20.4 12.7 -21.3
2025-12-26T02:17:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:17:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:17:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.011517
2025-12-26T02:17:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:17:25.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:17:25.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:17:25.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:17:25.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:17:25.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:16:56', tmtdew=2.62, humidity=83.95, cloud=0.0, wind=16.59, temperature=12.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:16:35.069', atlas_cloud=2, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:15:00')
2025-12-26T02:17:25.622 [DEBUG] [Thread-22592] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:17:25.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-26T02:17:25.717 [DEBUG] [Thread-22595] [transport.py] [_log()] starting thread (client mode): 0xb9547d60
2025-12-26T02:17:25.717 [DEBUG] [Thread-22595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:17:25.731 [DEBUG] [Thread-22595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:17:25.731 [INFO] [Thread-22595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:17:25.739 [DEBUG] [Thread-22595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] client lang: <none>
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] server lang: <none>
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] kex follows: False
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] Compression: none
2025-12-26T02:17:25.740 [DEBUG] [Thread-22595] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:17:25.798 [DEBUG] [Thread-22595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:17:25.799 [DEBUG] [Thread-22595] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:17:25.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:17:25.800 [DEBUG] [Thread-22595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:17:25.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:17:25.854 [DEBUG] [Thread-22595] [transport.py] [_log()] userauth is OK
2025-12-26T02:17:25.854 [DEBUG] [Thread-22595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:17:25.855 [DEBUG] [Thread-22595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:17:25.855 [DEBUG] [Thread-22595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:17:25.855 [DEBUG] [Thread-22595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:17:25.873 [INFO] [Thread-22595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:17:25.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-26T02:17:25.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:17:26.674 [DEBUG] [Thread-22595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:17:26.674 [DEBUG] [Thread-22595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:17:26.722 [DEBUG] [Thread-22595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:17:26.722 [DEBUG] [Thread-22595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:17:26.731 [DEBUG] [Thread-22595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:17:26.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:17:26.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-26T02:17:26.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-26T02:17:26.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:17:26.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:17:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:17:26.767 [DEBUG] [Thread-22595] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:17:33.426 [DEBUG] [Thread-22597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:45.731 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:45.731 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:46.595 [DEBUG] [Thread-22598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:48.476 [DEBUG] [Thread-22599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:17:56.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:17:56.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:17:56.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:17:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 17, 29), 2.65, 83.8, 0.0, 18.0, 12.37, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:17:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:17:29
2025-12-26T02:17:57.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:17:57.780 [DEBUG] [Thread-22600] [transport.py] [_log()] starting thread (client mode): 0xb6b162f0
2025-12-26T02:17:57.780 [DEBUG] [Thread-22600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:17:57.800 [DEBUG] [Thread-22600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:17:57.800 [INFO] [Thread-22600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:17:57.803 [DEBUG] [Thread-22600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:17:57.803 [DEBUG] [Thread-22600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] client lang: <none>
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] server lang: <none>
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] kex follows: False
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:17:57.804 [DEBUG] [Thread-22600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:17:57.805 [DEBUG] [Thread-22600] [transport.py] [_log()] Compression: none
2025-12-26T02:17:57.805 [DEBUG] [Thread-22600] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:17:57.829 [DEBUG] [Thread-22600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:17:57.829 [DEBUG] [Thread-22600] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:17:57.830 [DEBUG] [Thread-22600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:17:57.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:17:57.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:17:57.831 [DEBUG] [Thread-22600] [transport.py] [_log()] userauth is OK
2025-12-26T02:17:57.831 [DEBUG] [Thread-22600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:17:57.832 [DEBUG] [Thread-22600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:17:57.832 [DEBUG] [Thread-22600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:17:57.832 [DEBUG] [Thread-22600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:17:57.855 [INFO] [Thread-22600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:17:57.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:17:58.527 [DEBUG] [Thread-22600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:17:58.527 [DEBUG] [Thread-22600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:17:58.528 [DEBUG] [Thread-22600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:17:58.568 [DEBUG] [Thread-22600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:17:58.568 [DEBUG] [Thread-22600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:17:58.571 [DEBUG] [Thread-22600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:17:58.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:17:58.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:17:58.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:17:58.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:17:58.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:17:58.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:17:58.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:17:58.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:17:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:17:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.011865 -999.00  +12.40  10.37     85  +10.00 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 10.4 10.4 159.8 13.9 12.7 -22.3 12.7 -22.0 12.4 -20.3 12.7 -21.6
2025-12-26T02:17:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:17:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:17:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.011865
2025-12-26T02:17:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:17:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:17:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:17:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:17:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:17:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:17:29', tmtdew=2.65, humidity=83.8, cloud=0.0, wind=18.0, temperature=12.37, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:17:05.136', atlas_cloud=2, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:15:00')
2025-12-26T02:17:58.596 [DEBUG] [Thread-22600] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:17:58.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-26T02:17:58.693 [DEBUG] [Thread-22603] [transport.py] [_log()] starting thread (client mode): 0xbbfcd3c0
2025-12-26T02:17:58.693 [DEBUG] [Thread-22603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:17:58.708 [DEBUG] [Thread-22603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:17:58.708 [INFO] [Thread-22603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:17:58.715 [DEBUG] [Thread-22603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:17:58.715 [DEBUG] [Thread-22603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:17:58.715 [DEBUG] [Thread-22603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] client lang: <none>
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] server lang: <none>
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] kex follows: False
2025-12-26T02:17:58.716 [DEBUG] [Thread-22603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:17:58.717 [DEBUG] [Thread-22603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:17:58.717 [DEBUG] [Thread-22603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:17:58.717 [DEBUG] [Thread-22603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:17:58.717 [DEBUG] [Thread-22603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:17:58.717 [DEBUG] [Thread-22603] [transport.py] [_log()] Compression: none
2025-12-26T02:17:58.717 [DEBUG] [Thread-22603] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:17:58.774 [DEBUG] [Thread-22603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:17:58.775 [DEBUG] [Thread-22603] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:17:58.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:17:58.776 [DEBUG] [Thread-22603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:17:58.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:17:58.830 [DEBUG] [Thread-22603] [transport.py] [_log()] userauth is OK
2025-12-26T02:17:58.831 [DEBUG] [Thread-22603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:17:58.831 [DEBUG] [Thread-22603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:17:58.831 [DEBUG] [Thread-22603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:17:58.831 [DEBUG] [Thread-22603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:17:58.853 [INFO] [Thread-22603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:17:58.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-26T02:17:58.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:17:59.678 [DEBUG] [Thread-22603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:17:59.679 [DEBUG] [Thread-22603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:17:59.726 [DEBUG] [Thread-22603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:17:59.727 [DEBUG] [Thread-22603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:17:59.735 [DEBUG] [Thread-22603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:17:59.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:17:59.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-26T02:17:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:17:59.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:17:59.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:17:59.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:17:59.769 [DEBUG] [Thread-22603] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:18:03.505 [DEBUG] [Thread-22605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:18:18.546 [DEBUG] [Thread-22606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:18:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:18:29.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:18:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:18:30.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 18, 1), 2.66, 83.73, 0.0, 19.5, 12.32, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:18:30.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:18:01
2025-12-26T02:18:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:18:30.762 [DEBUG] [Thread-22607] [transport.py] [_log()] starting thread (client mode): 0xb9593250
2025-12-26T02:18:30.763 [DEBUG] [Thread-22607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:18:30.781 [DEBUG] [Thread-22607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:18:30.781 [INFO] [Thread-22607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] client lang: <none>
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] server lang: <none>
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] kex follows: False
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] Compression: none
2025-12-26T02:18:30.785 [DEBUG] [Thread-22607] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:18:30.801 [DEBUG] [Thread-22607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:18:30.802 [DEBUG] [Thread-22607] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:18:30.802 [DEBUG] [Thread-22607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:18:30.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:18:30.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:18:30.805 [DEBUG] [Thread-22607] [transport.py] [_log()] userauth is OK
2025-12-26T02:18:30.805 [DEBUG] [Thread-22607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:18:30.805 [DEBUG] [Thread-22607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:18:30.805 [DEBUG] [Thread-22607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:18:30.805 [DEBUG] [Thread-22607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:18:30.830 [INFO] [Thread-22607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:18:30.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:18:31.585 [DEBUG] [Thread-22607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:18:31.585 [DEBUG] [Thread-22607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:18:31.585 [DEBUG] [Thread-22607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:18:31.626 [DEBUG] [Thread-22607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:18:31.626 [DEBUG] [Thread-22607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:18:31.630 [DEBUG] [Thread-22607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:18:31.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:18:31.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:18:31.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:18:31.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:18:31.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:18:31.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:18:31.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:18:31.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:18:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:18:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.012212 -999.00  +12.40   9.50     85  +10.00 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 9.5 9.5 165.6 17.2 12.8 -22.3 12.7 -22.1 12.4 -20.3 12.7 -21.6
2025-12-26T02:18:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:18:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:18:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.012212
2025-12-26T02:18:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:18:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:18:31.650 [DEBUG] [Thread-22607] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:18:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:18:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:18:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:18:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:18:01', tmtdew=2.66, humidity=83.73, cloud=0.0, wind=19.5, temperature=12.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:17:35.117', atlas_cloud=2, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:15:00')
2025-12-26T02:18:31.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-26T02:18:31.745 [DEBUG] [Thread-22610] [transport.py] [_log()] starting thread (client mode): 0xb6b29ff0
2025-12-26T02:18:31.746 [DEBUG] [Thread-22610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:18:31.760 [DEBUG] [Thread-22610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:18:31.760 [INFO] [Thread-22610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:18:31.768 [DEBUG] [Thread-22610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:18:31.768 [DEBUG] [Thread-22610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] client lang: <none>
2025-12-26T02:18:31.769 [DEBUG] [Thread-22610] [transport.py] [_log()] server lang: <none>
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] kex follows: False
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:18:31.770 [DEBUG] [Thread-22610] [transport.py] [_log()] Compression: none
2025-12-26T02:18:31.771 [DEBUG] [Thread-22610] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:18:31.827 [DEBUG] [Thread-22610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:18:31.828 [DEBUG] [Thread-22610] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:18:31.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:18:31.829 [DEBUG] [Thread-22610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:18:31.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:18:31.883 [DEBUG] [Thread-22610] [transport.py] [_log()] userauth is OK
2025-12-26T02:18:31.884 [DEBUG] [Thread-22610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:18:31.884 [DEBUG] [Thread-22610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:18:31.884 [DEBUG] [Thread-22610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:18:31.884 [DEBUG] [Thread-22610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:18:31.908 [INFO] [Thread-22610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:18:31.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-26T02:18:31.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:18:32.727 [DEBUG] [Thread-22610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:18:32.728 [DEBUG] [Thread-22610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:18:32.776 [DEBUG] [Thread-22610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:18:32.776 [DEBUG] [Thread-22610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:18:32.786 [DEBUG] [Thread-22610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:18:32.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:18:32.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-26T02:18:32.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-26T02:18:32.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:18:32.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:18:32.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:18:32.822 [DEBUG] [Thread-22610] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:18:33.577 [DEBUG] [Thread-22612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:18:45.931 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:18:45.932 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:18:46.655 [DEBUG] [Thread-22613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:18:48.627 [DEBUG] [Thread-22614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:02.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:19:02.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:19:02.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-26T02:19:03.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 18, 33), 2.66, 83.7, 0.0, 19.5, 12.32, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:19:03.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:18:33
2025-12-26T02:19:03.660 [DEBUG] [Thread-22615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:03.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:19:03.818 [DEBUG] [Thread-22616] [transport.py] [_log()] starting thread (client mode): 0xb95932e0
2025-12-26T02:19:03.818 [DEBUG] [Thread-22616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:19:03.838 [DEBUG] [Thread-22616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:19:03.838 [INFO] [Thread-22616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:19:03.841 [DEBUG] [Thread-22616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] client lang: <none>
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] server lang: <none>
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] kex follows: False
2025-12-26T02:19:03.842 [DEBUG] [Thread-22616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:19:03.843 [DEBUG] [Thread-22616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:19:03.843 [DEBUG] [Thread-22616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:19:03.843 [DEBUG] [Thread-22616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:19:03.843 [DEBUG] [Thread-22616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:19:03.843 [DEBUG] [Thread-22616] [transport.py] [_log()] Compression: none
2025-12-26T02:19:03.843 [DEBUG] [Thread-22616] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:19:03.862 [DEBUG] [Thread-22616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:19:03.863 [DEBUG] [Thread-22616] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:19:03.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:19:03.864 [DEBUG] [Thread-22616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:19:03.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:19:03.866 [DEBUG] [Thread-22616] [transport.py] [_log()] userauth is OK
2025-12-26T02:19:03.867 [DEBUG] [Thread-22616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:19:03.867 [DEBUG] [Thread-22616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:19:03.867 [DEBUG] [Thread-22616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:19:03.867 [DEBUG] [Thread-22616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:19:03.892 [INFO] [Thread-22616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:19:03.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:19:04.507 [DEBUG] [Thread-22616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:19:04.507 [DEBUG] [Thread-22616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:19:04.508 [DEBUG] [Thread-22616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:19:04.548 [DEBUG] [Thread-22616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:19:04.548 [DEBUG] [Thread-22616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:19:04.552 [DEBUG] [Thread-22616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:19:04.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:19:04.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:19:04.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:19:04.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:19:04.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:19:04.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:19:04.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:19:04.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:19:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:19:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.012906 -999.00  +12.30  15.34     85  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 15.3 15.3 165.0 22.9 12.8 -22.4 12.6 -21.9 12.4 -20.3 12.7 -21.2
2025-12-26T02:19:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:19:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:19:04.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.012906
2025-12-26T02:19:04.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:19:04.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:19:04.578 [DEBUG] [Thread-22616] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:19:04.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:19:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:19:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:19:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:18:33', tmtdew=2.66, humidity=83.7, cloud=0.0, wind=19.5, temperature=12.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:18:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:15:00')
2025-12-26T02:19:04.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:19:04.667 [DEBUG] [Thread-22619] [transport.py] [_log()] starting thread (client mode): 0xb6b22fb0
2025-12-26T02:19:04.667 [DEBUG] [Thread-22619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:19:04.682 [DEBUG] [Thread-22619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:19:04.682 [INFO] [Thread-22619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:19:04.690 [DEBUG] [Thread-22619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:19:04.690 [DEBUG] [Thread-22619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:19:04.690 [DEBUG] [Thread-22619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:19:04.690 [DEBUG] [Thread-22619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] client lang: <none>
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] server lang: <none>
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] kex follows: False
2025-12-26T02:19:04.691 [DEBUG] [Thread-22619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:19:04.692 [DEBUG] [Thread-22619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:19:04.692 [DEBUG] [Thread-22619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:19:04.692 [DEBUG] [Thread-22619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:19:04.692 [DEBUG] [Thread-22619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:19:04.692 [DEBUG] [Thread-22619] [transport.py] [_log()] Compression: none
2025-12-26T02:19:04.692 [DEBUG] [Thread-22619] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:19:04.748 [DEBUG] [Thread-22619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:19:04.748 [DEBUG] [Thread-22619] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:19:04.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:19:04.750 [DEBUG] [Thread-22619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:19:04.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:19:04.803 [DEBUG] [Thread-22619] [transport.py] [_log()] userauth is OK
2025-12-26T02:19:04.803 [DEBUG] [Thread-22619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:19:04.803 [DEBUG] [Thread-22619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:19:04.804 [DEBUG] [Thread-22619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:19:04.804 [DEBUG] [Thread-22619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:19:04.823 [INFO] [Thread-22619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:19:04.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-26T02:19:04.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:19:05.613 [DEBUG] [Thread-22619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:19:05.613 [DEBUG] [Thread-22619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:19:05.661 [DEBUG] [Thread-22619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:19:05.661 [DEBUG] [Thread-22619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:19:05.669 [DEBUG] [Thread-22619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:19:05.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:19:05.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-26T02:19:05.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:19:05.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:19:05.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:19:05.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:19:05.701 [DEBUG] [Thread-22619] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:19:18.695 [DEBUG] [Thread-22621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:33.745 [DEBUG] [Thread-22622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:35.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:19:35.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:19:35.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-26T02:19:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 19, 5), 2.67, 83.68, 0.0, 19.52, 12.29, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:19:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:19:05
2025-12-26T02:19:36.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:19:36.751 [DEBUG] [Thread-22623] [transport.py] [_log()] starting thread (client mode): 0xb6b226b0
2025-12-26T02:19:36.752 [DEBUG] [Thread-22623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:19:36.772 [DEBUG] [Thread-22623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:19:36.772 [INFO] [Thread-22623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] client lang: <none>
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] server lang: <none>
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] kex follows: False
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] Compression: none
2025-12-26T02:19:36.775 [DEBUG] [Thread-22623] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:19:36.790 [DEBUG] [Thread-22623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:19:36.790 [DEBUG] [Thread-22623] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:19:36.791 [DEBUG] [Thread-22623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:19:36.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:19:36.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:19:36.791 [DEBUG] [Thread-22623] [transport.py] [_log()] userauth is OK
2025-12-26T02:19:36.791 [DEBUG] [Thread-22623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:19:36.791 [DEBUG] [Thread-22623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:19:36.791 [DEBUG] [Thread-22623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:19:36.791 [DEBUG] [Thread-22623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:19:36.806 [INFO] [Thread-22623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:19:36.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:19:37.557 [DEBUG] [Thread-22623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:19:37.557 [DEBUG] [Thread-22623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:19:37.557 [DEBUG] [Thread-22623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:19:37.597 [DEBUG] [Thread-22623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:19:37.598 [DEBUG] [Thread-22623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:19:37.599 [DEBUG] [Thread-22623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:19:37.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:19:37.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:19:37.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:19:37.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:19:37.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:19:37.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:19:37.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.013253 -999.00  +12.30  14.31     85  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.3 14.3 171.2 18.2 12.8 -22.3 12.7 -22.0 12.4 -20.4 12.7 -21.5
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.013253
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:19:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:19:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:19:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:19:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:19:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:19:05', tmtdew=2.67, humidity=83.68, cloud=0.0, wind=19.52, temperature=12.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:19:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:15:00')
2025-12-26T02:19:37.613 [DEBUG] [Thread-22623] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:19:37.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-26T02:19:37.698 [DEBUG] [Thread-22626] [transport.py] [_log()] starting thread (client mode): 0xb6b20df0
2025-12-26T02:19:37.698 [DEBUG] [Thread-22626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:19:37.713 [DEBUG] [Thread-22626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:19:37.713 [INFO] [Thread-22626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] client lang: <none>
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] server lang: <none>
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] kex follows: False
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:19:37.720 [DEBUG] [Thread-22626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:19:37.721 [DEBUG] [Thread-22626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:19:37.721 [DEBUG] [Thread-22626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:19:37.721 [DEBUG] [Thread-22626] [transport.py] [_log()] Compression: none
2025-12-26T02:19:37.721 [DEBUG] [Thread-22626] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:19:37.779 [DEBUG] [Thread-22626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:19:37.779 [DEBUG] [Thread-22626] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:19:37.779 [DEBUG] [Thread-22626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:19:37.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:19:37.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:19:37.835 [DEBUG] [Thread-22626] [transport.py] [_log()] userauth is OK
2025-12-26T02:19:37.835 [DEBUG] [Thread-22626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:19:37.835 [DEBUG] [Thread-22626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:19:37.835 [DEBUG] [Thread-22626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:19:37.836 [DEBUG] [Thread-22626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:19:37.851 [INFO] [Thread-22626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:19:37.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-26T02:19:37.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:19:38.649 [DEBUG] [Thread-22626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:19:38.649 [DEBUG] [Thread-22626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:19:38.697 [DEBUG] [Thread-22626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:19:38.697 [DEBUG] [Thread-22626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:19:38.706 [DEBUG] [Thread-22626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:19:38.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:19:38.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-26T02:19:38.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-26T02:19:38.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:19:38.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:19:38.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:19:38.737 [DEBUG] [Thread-22626] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:19:46.135 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:46.136 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:46.740 [DEBUG] [Thread-22628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:19:48.774 [DEBUG] [Thread-22629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:03.816 [DEBUG] [Thread-22630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:08.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:20:08.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:20:08.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-26T02:20:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 19, 37), 2.78, 83.13, 0.0, 16.45, 12.34, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:20:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:19:37
2025-12-26T02:20:09.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:20:09.747 [DEBUG] [Thread-22631] [transport.py] [_log()] starting thread (client mode): 0xb6b224a0
2025-12-26T02:20:09.747 [DEBUG] [Thread-22631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:20:09.767 [DEBUG] [Thread-22631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:20:09.767 [INFO] [Thread-22631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:20:09.770 [DEBUG] [Thread-22631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] client lang: <none>
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] server lang: <none>
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] kex follows: False
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:20:09.771 [DEBUG] [Thread-22631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:20:09.772 [DEBUG] [Thread-22631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:20:09.772 [DEBUG] [Thread-22631] [transport.py] [_log()] Compression: none
2025-12-26T02:20:09.772 [DEBUG] [Thread-22631] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:20:09.788 [DEBUG] [Thread-22631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:20:09.789 [DEBUG] [Thread-22631] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:20:09.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:20:09.789 [DEBUG] [Thread-22631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:20:09.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:20:09.832 [DEBUG] [Thread-22631] [transport.py] [_log()] userauth is OK
2025-12-26T02:20:09.832 [DEBUG] [Thread-22631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:20:09.832 [DEBUG] [Thread-22631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:20:09.832 [DEBUG] [Thread-22631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:20:09.832 [DEBUG] [Thread-22631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:20:09.842 [INFO] [Thread-22631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:20:09.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:20:11.248 [DEBUG] [Thread-22631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:20:11.248 [DEBUG] [Thread-22631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:20:11.248 [DEBUG] [Thread-22631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:20:11.289 [DEBUG] [Thread-22631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:20:11.289 [DEBUG] [Thread-22631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:20:11.292 [DEBUG] [Thread-22631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:20:11.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:20:11.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:20:11.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:20:11.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:20:11.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:20:11.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:20:11.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.013601 -999.00  +12.30  14.34     85  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.3 14.3 176.6 17.3 12.8 -22.3 12.7 -22.1 12.4 -20.5 12.7 -21.5
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.013601
2025-12-26T02:20:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:20:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:20:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:20:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:20:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:20:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:19:37', tmtdew=2.78, humidity=83.13, cloud=0.0, wind=16.45, temperature=12.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:19:35.126', atlas_cloud=1, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:18:00')
2025-12-26T02:20:11.311 [DEBUG] [Thread-22631] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:20:11.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-26T02:20:11.399 [DEBUG] [Thread-22634] [transport.py] [_log()] starting thread (client mode): 0xb6b22260
2025-12-26T02:20:11.399 [DEBUG] [Thread-22634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:20:11.414 [DEBUG] [Thread-22634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:20:11.414 [INFO] [Thread-22634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] client lang: <none>
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] server lang: <none>
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] kex follows: False
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] Compression: none
2025-12-26T02:20:11.422 [DEBUG] [Thread-22634] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:20:11.479 [DEBUG] [Thread-22634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:20:11.479 [DEBUG] [Thread-22634] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:20:11.479 [DEBUG] [Thread-22634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:20:11.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:20:11.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:20:11.536 [DEBUG] [Thread-22634] [transport.py] [_log()] userauth is OK
2025-12-26T02:20:11.536 [DEBUG] [Thread-22634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:20:11.536 [DEBUG] [Thread-22634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:20:11.536 [DEBUG] [Thread-22634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:20:11.536 [DEBUG] [Thread-22634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:20:11.550 [INFO] [Thread-22634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:20:11.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-26T02:20:11.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:20:12.347 [DEBUG] [Thread-22634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:20:12.347 [DEBUG] [Thread-22634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:20:12.395 [DEBUG] [Thread-22634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:20:12.395 [DEBUG] [Thread-22634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:20:12.404 [DEBUG] [Thread-22634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:20:12.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:20:12.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:20:12.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-26T02:20:12.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:20:12.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:20:12.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:20:12.442 [DEBUG] [Thread-22634] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:20:18.850 [DEBUG] [Thread-22636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:33.912 [DEBUG] [Thread-22637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:20:42.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:20:42.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:20:43.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 20, 9), 2.78, 83.08, 0.0, 17.31, 12.35, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:20:43.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:20:09
2025-12-26T02:20:43.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:20:43.501 [DEBUG] [Thread-22638] [transport.py] [_log()] starting thread (client mode): 0xb6b22560
2025-12-26T02:20:43.502 [DEBUG] [Thread-22638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:20:43.521 [DEBUG] [Thread-22638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:20:43.521 [INFO] [Thread-22638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:43.524 [DEBUG] [Thread-22638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] client lang: <none>
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] server lang: <none>
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] kex follows: False
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] Compression: none
2025-12-26T02:20:43.525 [DEBUG] [Thread-22638] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:20:43.532 [DEBUG] [Thread-22638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:20:43.532 [DEBUG] [Thread-22638] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:20:43.532 [DEBUG] [Thread-22638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:20:43.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:20:43.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:20:43.533 [DEBUG] [Thread-22638] [transport.py] [_log()] userauth is OK
2025-12-26T02:20:43.533 [DEBUG] [Thread-22638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:20:43.533 [DEBUG] [Thread-22638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:20:43.533 [DEBUG] [Thread-22638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:20:43.533 [DEBUG] [Thread-22638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:20:43.542 [INFO] [Thread-22638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:20:43.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:20:44.418 [DEBUG] [Thread-22638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:20:44.419 [DEBUG] [Thread-22638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:20:44.419 [DEBUG] [Thread-22638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:20:44.460 [DEBUG] [Thread-22638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:20:44.460 [DEBUG] [Thread-22638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:20:44.463 [DEBUG] [Thread-22638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:20:44.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:20:44.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:20:44.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:20:44.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:20:44.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:20:44.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:20:44.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:20:44.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:20:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:20:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.013948 -999.00  +12.30   9.08     86  +10.10 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 9.1 9.1 172.8 15.4 12.8 -22.4 12.6 -21.9 12.4 -20.2 12.7 -21.5
2025-12-26T02:20:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:20:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:20:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.013948
2025-12-26T02:20:44.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:20:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:20:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:20:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:20:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:20:44.488 [DEBUG] [Thread-22638] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:20:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:20:09', tmtdew=2.78, humidity=83.08, cloud=0.0, wind=17.31, temperature=12.35, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:20:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:18:00')
2025-12-26T02:20:44.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:20:44.575 [DEBUG] [Thread-22641] [transport.py] [_log()] starting thread (client mode): 0xb6b22230
2025-12-26T02:20:44.575 [DEBUG] [Thread-22641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:20:44.591 [DEBUG] [Thread-22641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:20:44.592 [INFO] [Thread-22641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:20:44.599 [DEBUG] [Thread-22641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:20:44.599 [DEBUG] [Thread-22641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:20:44.599 [DEBUG] [Thread-22641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:20:44.599 [DEBUG] [Thread-22641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:44.599 [DEBUG] [Thread-22641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:20:44.599 [DEBUG] [Thread-22641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] client lang: <none>
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] server lang: <none>
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] kex follows: False
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] Compression: none
2025-12-26T02:20:44.600 [DEBUG] [Thread-22641] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:20:44.657 [DEBUG] [Thread-22641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:20:44.657 [DEBUG] [Thread-22641] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:20:44.658 [DEBUG] [Thread-22641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:20:44.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:20:44.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:20:44.713 [DEBUG] [Thread-22641] [transport.py] [_log()] userauth is OK
2025-12-26T02:20:44.713 [DEBUG] [Thread-22641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:20:44.713 [DEBUG] [Thread-22641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:20:44.713 [DEBUG] [Thread-22641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:20:44.713 [DEBUG] [Thread-22641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:20:44.732 [INFO] [Thread-22641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:20:44.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-26T02:20:44.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:20:45.597 [DEBUG] [Thread-22641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:20:45.597 [DEBUG] [Thread-22641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:20:45.646 [DEBUG] [Thread-22641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:20:45.646 [DEBUG] [Thread-22641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:20:45.655 [DEBUG] [Thread-22641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:20:45.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:20:45.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-26T02:20:45.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-26T02:20:45.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:20:45.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:20:45.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:20:45.689 [DEBUG] [Thread-22641] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:20:46.339 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:46.341 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:46.818 [DEBUG] [Thread-22643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:20:48.946 [DEBUG] [Thread-22644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:03.993 [DEBUG] [Thread-22645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:15.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:21:15.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:21:15.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-26T02:21:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 20, 41), 2.79, 83.05, 0.0, 15.47, 12.32, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:21:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:20:41
2025-12-26T02:21:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:21:16.680 [DEBUG] [Thread-22646] [transport.py] [_log()] starting thread (client mode): 0xb6b22380
2025-12-26T02:21:16.680 [DEBUG] [Thread-22646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:21:16.701 [DEBUG] [Thread-22646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:21:16.701 [INFO] [Thread-22646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:21:16.704 [DEBUG] [Thread-22646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] client lang: <none>
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] server lang: <none>
2025-12-26T02:21:16.705 [DEBUG] [Thread-22646] [transport.py] [_log()] kex follows: False
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] Compression: none
2025-12-26T02:21:16.706 [DEBUG] [Thread-22646] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:21:16.724 [DEBUG] [Thread-22646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:21:16.725 [DEBUG] [Thread-22646] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:21:16.726 [DEBUG] [Thread-22646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:21:16.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:21:16.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:21:16.728 [DEBUG] [Thread-22646] [transport.py] [_log()] userauth is OK
2025-12-26T02:21:16.728 [DEBUG] [Thread-22646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:21:16.728 [DEBUG] [Thread-22646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:21:16.728 [DEBUG] [Thread-22646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:21:16.728 [DEBUG] [Thread-22646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:21:16.752 [INFO] [Thread-22646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:21:16.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:21:17.344 [DEBUG] [Thread-22646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:21:17.344 [DEBUG] [Thread-22646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:21:17.345 [DEBUG] [Thread-22646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:21:17.385 [DEBUG] [Thread-22646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:21:17.385 [DEBUG] [Thread-22646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:21:17.389 [DEBUG] [Thread-22646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:21:17.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:21:17.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:21:17.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:21:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:21:17.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:21:17.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:21:17.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:21:17.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:21:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:21:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.014295 -999.00  +12.30  12.37     85  +10.00 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 12.4 12.4 167.2 13.5 12.8 -22.4 12.7 -21.9 12.4 -20.2 12.8 -21.3
2025-12-26T02:21:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:21:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:21:17.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.014295
2025-12-26T02:21:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:21:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:21:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:21:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:21:17.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:21:17.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:20:41', tmtdew=2.79, humidity=83.05, cloud=0.0, wind=15.47, temperature=12.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:20:35.088', atlas_cloud=2, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:18:00')
2025-12-26T02:21:17.416 [DEBUG] [Thread-22646] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:21:17.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-26T02:21:17.510 [DEBUG] [Thread-22649] [transport.py] [_log()] starting thread (client mode): 0xb6b21390
2025-12-26T02:21:17.510 [DEBUG] [Thread-22649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:21:17.524 [DEBUG] [Thread-22649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:21:17.524 [INFO] [Thread-22649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:21:17.531 [DEBUG] [Thread-22649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:21:17.531 [DEBUG] [Thread-22649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:21:17.531 [DEBUG] [Thread-22649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:21:17.531 [DEBUG] [Thread-22649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:17.531 [DEBUG] [Thread-22649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:17.531 [DEBUG] [Thread-22649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] client lang: <none>
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] server lang: <none>
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] kex follows: False
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] Compression: none
2025-12-26T02:21:17.532 [DEBUG] [Thread-22649] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:21:17.589 [DEBUG] [Thread-22649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:21:17.590 [DEBUG] [Thread-22649] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:21:17.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:21:17.591 [DEBUG] [Thread-22649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:21:17.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:21:17.646 [DEBUG] [Thread-22649] [transport.py] [_log()] userauth is OK
2025-12-26T02:21:17.646 [DEBUG] [Thread-22649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:21:17.646 [DEBUG] [Thread-22649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:21:17.646 [DEBUG] [Thread-22649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:21:17.646 [DEBUG] [Thread-22649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:21:17.664 [INFO] [Thread-22649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:21:17.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-26T02:21:17.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:21:18.464 [DEBUG] [Thread-22649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:21:18.464 [DEBUG] [Thread-22649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:21:18.512 [DEBUG] [Thread-22649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:21:18.512 [DEBUG] [Thread-22649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:21:18.521 [DEBUG] [Thread-22649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:21:18.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:21:18.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-26T02:21:18.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-26T02:21:18.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:21:18.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:21:18.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:21:18.557 [DEBUG] [Thread-22649] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:21:19.027 [DEBUG] [Thread-22651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:30.679 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:34.075 [DEBUG] [Thread-22652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:46.544 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:46.545 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:46.881 [DEBUG] [Thread-22653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:48.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:21:48.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:21:48.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-26T02:21:49.103 [DEBUG] [Thread-22654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:21:49.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 21, 45), 2.74, 83.03, 0.0, 16.99, 12.27, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:21:49.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:21:45
2025-12-26T02:21:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:21:49.581 [DEBUG] [Thread-22655] [transport.py] [_log()] starting thread (client mode): 0xb9579d20
2025-12-26T02:21:49.581 [DEBUG] [Thread-22655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:21:49.600 [DEBUG] [Thread-22655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:21:49.600 [INFO] [Thread-22655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:21:49.603 [DEBUG] [Thread-22655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:21:49.603 [DEBUG] [Thread-22655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] client lang: <none>
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] server lang: <none>
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] kex follows: False
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] Compression: none
2025-12-26T02:21:49.604 [DEBUG] [Thread-22655] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:21:49.612 [DEBUG] [Thread-22655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:21:49.613 [DEBUG] [Thread-22655] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:21:49.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:21:49.614 [DEBUG] [Thread-22655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:21:49.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:21:49.616 [DEBUG] [Thread-22655] [transport.py] [_log()] userauth is OK
2025-12-26T02:21:49.616 [DEBUG] [Thread-22655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:21:49.616 [DEBUG] [Thread-22655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:21:49.616 [DEBUG] [Thread-22655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:21:49.616 [DEBUG] [Thread-22655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:21:49.634 [INFO] [Thread-22655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:21:49.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:21:50.295 [DEBUG] [Thread-22655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:21:50.295 [DEBUG] [Thread-22655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:21:50.295 [DEBUG] [Thread-22655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:21:50.336 [DEBUG] [Thread-22655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:21:50.336 [DEBUG] [Thread-22655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:21:50.340 [DEBUG] [Thread-22655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:21:50.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:21:50.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:21:50.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:21:50.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:21:50.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:21:50.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:21:50.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:21:50.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:21:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:21:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.014642 -999.00  +12.30   9.79     85  +10.00 1 2 1 2 1     0    0 -999.00 0.00 ZnESW 9.8 9.8 168.8 12.8 12.8 -22.4 12.7 -21.9 12.4 -20.4 12.7 -21.4
2025-12-26T02:21:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:21:50.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:21:50.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.014642
2025-12-26T02:21:50.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:21:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:21:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:21:50.365 [DEBUG] [Thread-22655] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:21:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:21:50.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T02:21:50.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:21:45', tmtdew=2.74, humidity=83.03, cloud=0.0, wind=16.99, temperature=12.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:21:05.069', atlas_cloud=2, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:18:00')
2025-12-26T02:21:50.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-26T02:21:50.458 [DEBUG] [Thread-22658] [transport.py] [_log()] starting thread (client mode): 0xb6b148b0
2025-12-26T02:21:50.459 [DEBUG] [Thread-22658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:21:50.476 [DEBUG] [Thread-22658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:21:50.476 [INFO] [Thread-22658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:21:50.484 [DEBUG] [Thread-22658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:21:50.485 [DEBUG] [Thread-22658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] client lang: <none>
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] server lang: <none>
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] kex follows: False
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:21:50.486 [DEBUG] [Thread-22658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:21:50.487 [DEBUG] [Thread-22658] [transport.py] [_log()] Compression: none
2025-12-26T02:21:50.487 [DEBUG] [Thread-22658] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:21:50.542 [DEBUG] [Thread-22658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:21:50.542 [DEBUG] [Thread-22658] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:21:50.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:21:50.543 [DEBUG] [Thread-22658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:21:50.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:21:50.599 [DEBUG] [Thread-22658] [transport.py] [_log()] userauth is OK
2025-12-26T02:21:50.599 [DEBUG] [Thread-22658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:21:50.599 [DEBUG] [Thread-22658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:21:50.599 [DEBUG] [Thread-22658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:21:50.599 [DEBUG] [Thread-22658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:21:50.617 [INFO] [Thread-22658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:21:50.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-26T02:21:50.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:21:51.441 [DEBUG] [Thread-22658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:21:51.441 [DEBUG] [Thread-22658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:21:51.490 [DEBUG] [Thread-22658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:21:51.490 [DEBUG] [Thread-22658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:21:51.499 [DEBUG] [Thread-22658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:21:51.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:21:51.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:21:51.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-26T02:21:51.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:21:51.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:21:51.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:21:51.536 [DEBUG] [Thread-22658] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:22:04.137 [DEBUG] [Thread-22660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:19.191 [DEBUG] [Thread-22661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:21.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:22:21.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:22:21.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-26T02:22:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 22, 17), 2.76, 82.92, 0.0, 16.97, 12.29, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:22:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:22:17
2025-12-26T02:22:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:22:22.536 [DEBUG] [Thread-22662] [transport.py] [_log()] starting thread (client mode): 0xb6b15c90
2025-12-26T02:22:22.536 [DEBUG] [Thread-22662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:22:22.557 [DEBUG] [Thread-22662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:22:22.557 [INFO] [Thread-22662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:22:22.560 [DEBUG] [Thread-22662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] client lang: <none>
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] server lang: <none>
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] kex follows: False
2025-12-26T02:22:22.561 [DEBUG] [Thread-22662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:22:22.562 [DEBUG] [Thread-22662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:22:22.562 [DEBUG] [Thread-22662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:22:22.562 [DEBUG] [Thread-22662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:22:22.562 [DEBUG] [Thread-22662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:22:22.562 [DEBUG] [Thread-22662] [transport.py] [_log()] Compression: none
2025-12-26T02:22:22.562 [DEBUG] [Thread-22662] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:22:22.581 [DEBUG] [Thread-22662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:22:22.582 [DEBUG] [Thread-22662] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:22:22.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:22:22.583 [DEBUG] [Thread-22662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:22:22.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:22:22.585 [DEBUG] [Thread-22662] [transport.py] [_log()] userauth is OK
2025-12-26T02:22:22.585 [DEBUG] [Thread-22662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:22:22.586 [DEBUG] [Thread-22662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:22:22.586 [DEBUG] [Thread-22662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:22:22.586 [DEBUG] [Thread-22662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:22:22.619 [INFO] [Thread-22662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:22:22.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:22:23.254 [DEBUG] [Thread-22662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:22:23.254 [DEBUG] [Thread-22662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:22:23.255 [DEBUG] [Thread-22662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:22:23.295 [DEBUG] [Thread-22662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:22:23.295 [DEBUG] [Thread-22662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:22:23.298 [DEBUG] [Thread-22662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:22:23.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:22:23.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:22:23.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:22:23.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:22:23.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:22:23.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:22:23.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:22:23.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:22:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:22:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.015337 -999.00  +12.30  11.23     85  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.2 11.2 174.0 14.3 12.8 -22.3 12.7 -21.9 12.4 -20.3 12.7 -21.4
2025-12-26T02:22:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:22:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:22:23.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.015337
2025-12-26T02:22:23.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:22:23.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:22:23.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:22:23.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:22:23.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:22:23.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:22:17', tmtdew=2.76, humidity=82.92, cloud=0.0, wind=16.97, temperature=12.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:22:05.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.7207499999999989, 0.1802500000000009, 0.3342500000000008, 0.3564999999999987, nan, nan, nan, nan, 0.21799999999999997, 0.16600000000000037, 0.19024999999999892, 0.266, 0.2419999999999991, 0.4052499999999988, 0.9159999999999995, 1.0115000000000007, 0.2397500000000008, 0.28550000000000075, 0.1634999999999991, 0.3387499999999992, 0.2579999999999991, 0.36274999999999835, 0.45225000000000115, 0.3797499999999996, 0.25899999999999856, 0.3045000000000009, 0.33275000000000077, 0.3615000000000004, 0.41999999999999993, 0.4640000000000004, 0.4660000000000011, 0.5490000000000004, 0.4002499999999998], zp_timestamp='2025-12-26T00:18:00')
2025-12-26T02:22:23.325 [DEBUG] [Thread-22662] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:22:23.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-26T02:22:23.420 [DEBUG] [Thread-22665] [transport.py] [_log()] starting thread (client mode): 0xb6b15570
2025-12-26T02:22:23.420 [DEBUG] [Thread-22665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:22:23.434 [DEBUG] [Thread-22665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:22:23.435 [INFO] [Thread-22665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:23.442 [DEBUG] [Thread-22665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] client lang: <none>
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] server lang: <none>
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] kex follows: False
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] Compression: none
2025-12-26T02:22:23.443 [DEBUG] [Thread-22665] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:22:23.502 [DEBUG] [Thread-22665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:22:23.502 [DEBUG] [Thread-22665] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:22:23.503 [DEBUG] [Thread-22665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:22:23.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:22:23.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:22:23.558 [DEBUG] [Thread-22665] [transport.py] [_log()] userauth is OK
2025-12-26T02:22:23.558 [DEBUG] [Thread-22665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:22:23.558 [DEBUG] [Thread-22665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:22:23.558 [DEBUG] [Thread-22665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:22:23.558 [DEBUG] [Thread-22665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:22:23.577 [INFO] [Thread-22665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:22:23.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-26T02:22:23.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:22:24.384 [DEBUG] [Thread-22665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:22:24.384 [DEBUG] [Thread-22665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:22:24.432 [DEBUG] [Thread-22665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:22:24.432 [DEBUG] [Thread-22665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:22:24.441 [DEBUG] [Thread-22665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:22:24.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:22:24.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-26T02:22:24.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-26T02:22:24.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:22:24.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:22:24.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:22:24.480 [DEBUG] [Thread-22665] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:22:34.225 [DEBUG] [Thread-22667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:46.748 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:46.749 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:46.980 [DEBUG] [Thread-22668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:49.275 [DEBUG] [Thread-22669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:22:54.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:22:54.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:22:54.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-26T02:22:55.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 22, 49), 2.81, 82.92, 0.0, 14.59, 12.29, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:22:55.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:22:49
2025-12-26T02:22:55.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:22:55.477 [DEBUG] [Thread-22670] [transport.py] [_log()] starting thread (client mode): 0xb6b20ac0
2025-12-26T02:22:55.477 [DEBUG] [Thread-22670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:22:55.491 [DEBUG] [Thread-22670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:22:55.491 [INFO] [Thread-22670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] client lang: <none>
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] server lang: <none>
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] kex follows: False
2025-12-26T02:22:55.494 [DEBUG] [Thread-22670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:22:55.495 [DEBUG] [Thread-22670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:22:55.495 [DEBUG] [Thread-22670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:22:55.495 [DEBUG] [Thread-22670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:22:55.495 [DEBUG] [Thread-22670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:22:55.495 [DEBUG] [Thread-22670] [transport.py] [_log()] Compression: none
2025-12-26T02:22:55.495 [DEBUG] [Thread-22670] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:22:55.514 [DEBUG] [Thread-22670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:22:55.515 [DEBUG] [Thread-22670] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:22:55.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:22:55.516 [DEBUG] [Thread-22670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:22:55.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:22:55.517 [DEBUG] [Thread-22670] [transport.py] [_log()] userauth is OK
2025-12-26T02:22:55.517 [DEBUG] [Thread-22670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:22:55.517 [DEBUG] [Thread-22670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:22:55.517 [DEBUG] [Thread-22670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:22:55.517 [DEBUG] [Thread-22670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:22:55.548 [INFO] [Thread-22670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:22:55.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:22:56.207 [DEBUG] [Thread-22670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:22:56.208 [DEBUG] [Thread-22670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:22:56.208 [DEBUG] [Thread-22670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:22:56.249 [DEBUG] [Thread-22670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:22:56.250 [DEBUG] [Thread-22670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:22:56.253 [DEBUG] [Thread-22670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:22:56.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:22:56.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:22:56.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:22:56.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:22:56.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:22:56.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:22:56.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:22:56.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:22:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:22:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.015684 -999.00  +12.30  13.03     85  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 13.0 13.0 167.0 17.0 12.8 -22.4 12.6 -22.0 12.5 -20.2 12.7 -21.4
2025-12-26T02:22:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:22:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:22:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.015684
2025-12-26T02:22:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:22:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:22:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:22:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:22:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:22:56.281 [DEBUG] [Thread-22670] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:22:56.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:22:49', tmtdew=2.81, humidity=82.92, cloud=0.0, wind=14.59, temperature=12.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:22:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.33474999999999966, 0.1932500000000008, 0.33424999999999905, 0.2704999999999984, nan, nan, nan, nan, 0.2154999999999987, 0.15700000000000003, 0.18975000000000009, 0.25650000000000084, 0.3089999999999993, 0.3142499999999995, 0.5169999999999995, 0.4969999999999999, 0.2062500000000007, 0.2965, 0.19299999999999962, 0.3382499999999986, 0.29999999999999893, 0.33174999999999955, 0.3962500000000002, 0.32775, 0.25049999999999883, 0.28550000000000075, 0.3152499999999989, 0.3330000000000002, 0.4690000000000003, 0.5500000000000007, 0.4410000000000007, 0.5370000000000008, 0.3117499999999991], zp_timestamp='2025-12-26T00:21:00')
2025-12-26T02:22:56.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:22:56.379 [DEBUG] [Thread-22673] [transport.py] [_log()] starting thread (client mode): 0xb6b22bf0
2025-12-26T02:22:56.379 [DEBUG] [Thread-22673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:22:56.397 [DEBUG] [Thread-22673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:22:56.398 [INFO] [Thread-22673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:22:56.405 [DEBUG] [Thread-22673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:22:56.405 [DEBUG] [Thread-22673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:22:56.405 [DEBUG] [Thread-22673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] client lang: <none>
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] server lang: <none>
2025-12-26T02:22:56.406 [DEBUG] [Thread-22673] [transport.py] [_log()] kex follows: False
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] Compression: none
2025-12-26T02:22:56.407 [DEBUG] [Thread-22673] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:22:56.467 [DEBUG] [Thread-22673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:22:56.467 [DEBUG] [Thread-22673] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:22:56.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:22:56.468 [DEBUG] [Thread-22673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:22:56.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:22:56.522 [DEBUG] [Thread-22673] [transport.py] [_log()] userauth is OK
2025-12-26T02:22:56.522 [DEBUG] [Thread-22673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:22:56.522 [DEBUG] [Thread-22673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:22:56.522 [DEBUG] [Thread-22673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:22:56.523 [DEBUG] [Thread-22673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:22:56.541 [INFO] [Thread-22673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:22:56.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-26T02:22:56.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:22:57.334 [DEBUG] [Thread-22673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:22:57.334 [DEBUG] [Thread-22673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:22:57.382 [DEBUG] [Thread-22673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:22:57.382 [DEBUG] [Thread-22673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:22:57.391 [DEBUG] [Thread-22673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:22:57.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:22:57.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-26T02:22:57.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-26T02:22:57.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:22:57.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:22:57.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:22:57.428 [DEBUG] [Thread-22673] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:23:04.306 [DEBUG] [Thread-22675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:23:19.356 [DEBUG] [Thread-22676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:23:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:23:27.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:23:27.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-26T02:23:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 23, 21), 2.8, 82.97, 0.0, 16.0, 12.29, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:23:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:23:21
2025-12-26T02:23:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:23:28.470 [DEBUG] [Thread-22677] [transport.py] [_log()] starting thread (client mode): 0xb6b178e0
2025-12-26T02:23:28.470 [DEBUG] [Thread-22677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:23:28.491 [DEBUG] [Thread-22677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:23:28.491 [INFO] [Thread-22677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:23:28.494 [DEBUG] [Thread-22677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:23:28.494 [DEBUG] [Thread-22677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:23:28.494 [DEBUG] [Thread-22677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:23:28.494 [DEBUG] [Thread-22677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] client lang: <none>
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] server lang: <none>
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] kex follows: False
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] Compression: none
2025-12-26T02:23:28.495 [DEBUG] [Thread-22677] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:23:28.511 [DEBUG] [Thread-22677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:23:28.511 [DEBUG] [Thread-22677] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:23:28.511 [DEBUG] [Thread-22677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:23:28.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:23:28.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:23:28.512 [DEBUG] [Thread-22677] [transport.py] [_log()] userauth is OK
2025-12-26T02:23:28.512 [DEBUG] [Thread-22677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:23:28.512 [DEBUG] [Thread-22677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:23:28.512 [DEBUG] [Thread-22677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:23:28.512 [DEBUG] [Thread-22677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:23:28.530 [INFO] [Thread-22677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:23:28.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:23:29.161 [DEBUG] [Thread-22677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:23:29.162 [DEBUG] [Thread-22677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:23:29.162 [DEBUG] [Thread-22677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:23:29.202 [DEBUG] [Thread-22677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:23:29.202 [DEBUG] [Thread-22677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:23:29.205 [DEBUG] [Thread-22677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:23:29.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:23:29.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:23:29.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:23:29.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:23:29.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:23:29.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:23:29.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:23:29.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:23:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:23:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.016031 -999.00  +12.30  13.95     85  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 13.9 13.9 167.2 19.9 12.8 -22.4 12.7 -22.1 12.4 -20.3 12.8 -21.4
2025-12-26T02:23:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:23:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.016031
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:23:29.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:23:21', tmtdew=2.8, humidity=82.97, cloud=0.0, wind=16.0, temperature=12.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:23:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.33474999999999966, 0.1932500000000008, 0.33424999999999905, 0.2704999999999984, nan, nan, nan, nan, 0.2154999999999987, 0.15700000000000003, 0.18975000000000009, 0.25650000000000084, 0.3089999999999993, 0.3142499999999995, 0.5169999999999995, 0.4969999999999999, 0.2062500000000007, 0.2965, 0.19299999999999962, 0.3382499999999986, 0.29999999999999893, 0.33174999999999955, 0.3962500000000002, 0.32775, 0.25049999999999883, 0.28550000000000075, 0.3152499999999989, 0.3330000000000002, 0.4690000000000003, 0.5500000000000007, 0.4410000000000007, 0.5370000000000008, 0.3117499999999991], zp_timestamp='2025-12-26T00:21:00')
2025-12-26T02:23:29.224 [DEBUG] [Thread-22677] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:23:29.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-26T02:23:29.308 [DEBUG] [Thread-22680] [transport.py] [_log()] starting thread (client mode): 0xb95b3760
2025-12-26T02:23:29.308 [DEBUG] [Thread-22680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:23:29.322 [DEBUG] [Thread-22680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:23:29.322 [INFO] [Thread-22680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:23:29.329 [DEBUG] [Thread-22680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] client lang: <none>
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] server lang: <none>
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] kex follows: False
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] Compression: none
2025-12-26T02:23:29.330 [DEBUG] [Thread-22680] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:23:29.385 [DEBUG] [Thread-22680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:23:29.385 [DEBUG] [Thread-22680] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:23:29.385 [DEBUG] [Thread-22680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:23:29.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:23:29.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:23:29.442 [DEBUG] [Thread-22680] [transport.py] [_log()] userauth is OK
2025-12-26T02:23:29.442 [DEBUG] [Thread-22680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:23:29.442 [DEBUG] [Thread-22680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:23:29.442 [DEBUG] [Thread-22680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:23:29.442 [DEBUG] [Thread-22680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:23:29.459 [INFO] [Thread-22680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:23:29.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-26T02:23:29.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:23:30.336 [DEBUG] [Thread-22680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:23:30.336 [DEBUG] [Thread-22680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:23:30.383 [DEBUG] [Thread-22680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:23:30.383 [DEBUG] [Thread-22680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:23:30.392 [DEBUG] [Thread-22680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:23:30.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:23:30.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-26T02:23:30.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:23:30.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:23:30.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:23:30.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:23:30.424 [DEBUG] [Thread-22680] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:23:34.387 [DEBUG] [Thread-22682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:23:46.950 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:23:46.951 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:23:47.049 [DEBUG] [Thread-22683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:23:49.435 [DEBUG] [Thread-22684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:00.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:24:00.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:24:00.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-26T02:24:01.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 23, 53), 2.75, 82.97, 0.0, 19.16, 12.25, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:24:01.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:23:53
2025-12-26T02:24:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:24:01.435 [DEBUG] [Thread-22685] [transport.py] [_log()] starting thread (client mode): 0xb6b239a0
2025-12-26T02:24:01.435 [DEBUG] [Thread-22685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:24:01.453 [DEBUG] [Thread-22685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:24:01.453 [INFO] [Thread-22685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] client lang: <none>
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] server lang: <none>
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] kex follows: False
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] Compression: none
2025-12-26T02:24:01.454 [DEBUG] [Thread-22685] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:24:01.462 [DEBUG] [Thread-22685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:24:01.462 [DEBUG] [Thread-22685] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:24:01.462 [DEBUG] [Thread-22685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:24:01.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:24:01.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:24:01.464 [DEBUG] [Thread-22685] [transport.py] [_log()] userauth is OK
2025-12-26T02:24:01.464 [DEBUG] [Thread-22685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:24:01.464 [DEBUG] [Thread-22685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:24:01.464 [DEBUG] [Thread-22685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:24:01.464 [DEBUG] [Thread-22685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:24:01.488 [INFO] [Thread-22685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:24:01.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:24:02.068 [DEBUG] [Thread-22685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:24:02.069 [DEBUG] [Thread-22685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:24:02.069 [DEBUG] [Thread-22685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:24:02.109 [DEBUG] [Thread-22685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:24:02.109 [DEBUG] [Thread-22685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:24:02.113 [DEBUG] [Thread-22685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:24:02.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:24:02.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:24:02.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:24:02.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:24:02.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:24:02.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:24:02.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:24:02.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:24:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:24:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.016378 -999.00  +12.30  11.55     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.6 11.6 169.4 13.0 12.8 -22.3 12.6 -22.1 12.4 -20.3 12.7 -21.5
2025-12-26T02:24:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:24:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:24:02.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.016378
2025-12-26T02:24:02.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:24:02.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:24:02.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:24:02.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:24:02.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:24:02.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:23:53', tmtdew=2.75, humidity=82.97, cloud=0.0, wind=19.16, temperature=12.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:23:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.33474999999999966, 0.1932500000000008, 0.33424999999999905, 0.2704999999999984, nan, nan, nan, nan, 0.2154999999999987, 0.15700000000000003, 0.18975000000000009, 0.25650000000000084, 0.3089999999999993, 0.3142499999999995, 0.5169999999999995, 0.4969999999999999, 0.2062500000000007, 0.2965, 0.19299999999999962, 0.3382499999999986, 0.29999999999999893, 0.33174999999999955, 0.3962500000000002, 0.32775, 0.25049999999999883, 0.28550000000000075, 0.3152499999999989, 0.3330000000000002, 0.4690000000000003, 0.5500000000000007, 0.4410000000000007, 0.5370000000000008, 0.3117499999999991], zp_timestamp='2025-12-26T00:21:00')
2025-12-26T02:24:02.138 [DEBUG] [Thread-22685] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:24: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-26T02:24:02.236 [DEBUG] [Thread-22688] [transport.py] [_log()] starting thread (client mode): 0xb6b22d10
2025-12-26T02:24:02.236 [DEBUG] [Thread-22688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:24:02.250 [DEBUG] [Thread-22688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:24:02.251 [INFO] [Thread-22688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:24:02.258 [DEBUG] [Thread-22688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:24:02.259 [DEBUG] [Thread-22688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:24:02.259 [DEBUG] [Thread-22688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:24:02.259 [DEBUG] [Thread-22688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:02.259 [DEBUG] [Thread-22688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:02.259 [DEBUG] [Thread-22688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] client lang: <none>
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] server lang: <none>
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] kex follows: False
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] Compression: none
2025-12-26T02:24:02.260 [DEBUG] [Thread-22688] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:24:02.319 [DEBUG] [Thread-22688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:24:02.320 [DEBUG] [Thread-22688] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:24:02.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:24:02.321 [DEBUG] [Thread-22688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:24:02.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:24:02.375 [DEBUG] [Thread-22688] [transport.py] [_log()] userauth is OK
2025-12-26T02:24:02.375 [DEBUG] [Thread-22688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:24:02.375 [DEBUG] [Thread-22688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:24:02.375 [DEBUG] [Thread-22688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:24:02.376 [DEBUG] [Thread-22688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:24:02.394 [INFO] [Thread-22688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:24:02.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-26T02:24:02.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:24:03.170 [DEBUG] [Thread-22688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:24:03.171 [DEBUG] [Thread-22688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:24:03.219 [DEBUG] [Thread-22688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:24:03.219 [DEBUG] [Thread-22688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:24:03.228 [DEBUG] [Thread-22688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:24:03.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:24: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-26T02:24:03.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-26T02:24:03.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:24:03.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:24:03.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:24:03.265 [DEBUG] [Thread-22688] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:24:04.470 [DEBUG] [Thread-22690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:19.518 [DEBUG] [Thread-22691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:33.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:24:33.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:24:33.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-26T02:24:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 24, 25), 2.75, 82.98, 0.0, 19.8, 12.29, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:24:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:24:25
2025-12-26T02:24:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:24:34.269 [DEBUG] [Thread-22692] [transport.py] [_log()] starting thread (client mode): 0xb9590c70
2025-12-26T02:24:34.269 [DEBUG] [Thread-22692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:24:34.285 [DEBUG] [Thread-22692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:24:34.285 [INFO] [Thread-22692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:24:34.289 [DEBUG] [Thread-22692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:24:34.294 [DEBUG] [Thread-22692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] client lang: <none>
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] server lang: <none>
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] kex follows: False
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] Compression: none
2025-12-26T02:24:34.295 [DEBUG] [Thread-22692] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:24:34.304 [DEBUG] [Thread-22692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:24:34.304 [DEBUG] [Thread-22692] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:24:34.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:24:34.305 [DEBUG] [Thread-22692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:24:34.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:24:34.307 [DEBUG] [Thread-22692] [transport.py] [_log()] userauth is OK
2025-12-26T02:24:34.307 [DEBUG] [Thread-22692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:24:34.307 [DEBUG] [Thread-22692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:24:34.307 [DEBUG] [Thread-22692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:24:34.308 [DEBUG] [Thread-22692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:24:34.331 [INFO] [Thread-22692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:24:34.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:24:34.550 [DEBUG] [Thread-22694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:34.906 [DEBUG] [Thread-22692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:24:34.906 [DEBUG] [Thread-22692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:24:34.906 [DEBUG] [Thread-22692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:24:34.947 [DEBUG] [Thread-22692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:24:34.947 [DEBUG] [Thread-22692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:24:34.949 [DEBUG] [Thread-22692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:24:34.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:24:34.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:24:34.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:24:34.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:24:34.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:24:34.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:24:34.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:24:34.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:24:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:24:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.016725 -999.00  +12.30  11.46     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.5 11.5 163.4 13.8 12.8 -22.3 12.6 -22.1 12.4 -20.2 12.8 -21.5
2025-12-26T02:24:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:24:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:24:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.016725
2025-12-26T02:24:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:24:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:24:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:24:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:24:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:24:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:24:25', tmtdew=2.75, humidity=82.98, cloud=0.0, wind=19.8, temperature=12.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:24:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.33474999999999966, 0.1932500000000008, 0.33424999999999905, 0.2704999999999984, nan, nan, nan, nan, 0.2154999999999987, 0.15700000000000003, 0.18975000000000009, 0.25650000000000084, 0.3089999999999993, 0.3142499999999995, 0.5169999999999995, 0.4969999999999999, 0.2062500000000007, 0.2965, 0.19299999999999962, 0.3382499999999986, 0.29999999999999893, 0.33174999999999955, 0.3962500000000002, 0.32775, 0.25049999999999883, 0.28550000000000075, 0.3152499999999989, 0.3330000000000002, 0.4690000000000003, 0.5500000000000007, 0.4410000000000007, 0.5370000000000008, 0.3117499999999991], zp_timestamp='2025-12-26T00:21:00')
2025-12-26T02:24:34.974 [DEBUG] [Thread-22692] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:24:35.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-26T02:24:35.076 [DEBUG] [Thread-22696] [transport.py] [_log()] starting thread (client mode): 0xb95780a0
2025-12-26T02:24:35.076 [DEBUG] [Thread-22696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:24:35.090 [DEBUG] [Thread-22696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:24:35.090 [INFO] [Thread-22696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:24:35.098 [DEBUG] [Thread-22696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:24:35.098 [DEBUG] [Thread-22696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:24:35.098 [DEBUG] [Thread-22696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:24:35.098 [DEBUG] [Thread-22696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:35.098 [DEBUG] [Thread-22696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:24:35.098 [DEBUG] [Thread-22696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] client lang: <none>
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] server lang: <none>
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] kex follows: False
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] Compression: none
2025-12-26T02:24:35.099 [DEBUG] [Thread-22696] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:24:35.155 [DEBUG] [Thread-22696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:24:35.156 [DEBUG] [Thread-22696] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:24:35.156 [DEBUG] [Thread-22696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:24:35.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:24:35.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:24:35.211 [DEBUG] [Thread-22696] [transport.py] [_log()] userauth is OK
2025-12-26T02:24:35.211 [DEBUG] [Thread-22696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:24:35.212 [DEBUG] [Thread-22696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:24:35.212 [DEBUG] [Thread-22696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:24:35.212 [DEBUG] [Thread-22696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:24:35.231 [INFO] [Thread-22696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:24:35.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-26T02:24:35.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:24:36.039 [DEBUG] [Thread-22696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:24:36.040 [DEBUG] [Thread-22696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:24:36.088 [DEBUG] [Thread-22696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:24:36.088 [DEBUG] [Thread-22696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:24:36.098 [DEBUG] [Thread-22696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:24:36.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:24:36.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:24:36.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-26T02:24:36.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:24:36.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:24:36.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:24:36.135 [DEBUG] [Thread-22696] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:24:47.127 [DEBUG] [Thread-22698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:47.153 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:47.153 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:24:49.587 [DEBUG] [Thread-22699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:04.626 [DEBUG] [Thread-22700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:06.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:25:06.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:25:06.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:25:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 24, 57), 2.8, 83.0, 0.0, 19.04, 12.29, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:25:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:24:57
2025-12-26T02:25:06.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:25:07.140 [DEBUG] [Thread-22701] [transport.py] [_log()] starting thread (client mode): 0xb6b214e0
2025-12-26T02:25:07.140 [DEBUG] [Thread-22701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:25:07.160 [DEBUG] [Thread-22701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:25:07.160 [INFO] [Thread-22701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:25:07.163 [DEBUG] [Thread-22701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:25:07.163 [DEBUG] [Thread-22701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:25:07.163 [DEBUG] [Thread-22701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:25:07.163 [DEBUG] [Thread-22701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:07.163 [DEBUG] [Thread-22701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] client lang: <none>
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] server lang: <none>
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] kex follows: False
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:25:07.164 [DEBUG] [Thread-22701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:25:07.165 [DEBUG] [Thread-22701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:25:07.165 [DEBUG] [Thread-22701] [transport.py] [_log()] Compression: none
2025-12-26T02:25:07.165 [DEBUG] [Thread-22701] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:25:07.175 [DEBUG] [Thread-22701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:25:07.175 [DEBUG] [Thread-22701] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:25:07.176 [DEBUG] [Thread-22701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:25:07.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:25:07.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:25:07.179 [DEBUG] [Thread-22701] [transport.py] [_log()] userauth is OK
2025-12-26T02:25:07.179 [DEBUG] [Thread-22701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:25:07.179 [DEBUG] [Thread-22701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:25:07.179 [DEBUG] [Thread-22701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:25:07.179 [DEBUG] [Thread-22701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:25:07.204 [INFO] [Thread-22701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:25:07.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:25:15.387 [DEBUG] [Thread-22701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:25:15.387 [DEBUG] [Thread-22701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:25:15.387 [DEBUG] [Thread-22701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:25:15.428 [DEBUG] [Thread-22701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:25:15.429 [DEBUG] [Thread-22701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:25:15.432 [DEBUG] [Thread-22701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:25:15.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:25:15.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:25:15.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:25:15.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:25:15.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:25:15.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:25:15.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:25:15.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:25:15.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:25:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.016725 -999.00  +12.30  11.46     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.5 11.5 163.4 13.8 12.8 -22.3 12.6 -22.1 12.4 -20.2 12.8 -21.5
2025-12-26T02:25:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:25:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:25:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.016725
2025-12-26T02:25:15.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:25:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:25:15.543 [DEBUG] [Thread-22701] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:25:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:25:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:25:15.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:25:15.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:24:57', tmtdew=2.8, humidity=83.0, cloud=0.0, wind=19.04, temperature=12.29, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:24:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.33474999999999966, 0.1932500000000008, 0.33424999999999905, 0.2704999999999984, nan, nan, nan, nan, 0.2154999999999987, 0.15700000000000003, 0.18975000000000009, 0.25650000000000084, 0.3089999999999993, 0.3142499999999995, 0.5169999999999995, 0.4969999999999999, 0.2062500000000007, 0.2965, 0.19299999999999962, 0.3382499999999986, 0.29999999999999893, 0.33174999999999955, 0.3962500000000002, 0.32775, 0.25049999999999883, 0.28550000000000075, 0.3152499999999989, 0.3330000000000002, 0.4690000000000003, 0.5500000000000007, 0.4410000000000007, 0.5370000000000008, 0.3117499999999991], zp_timestamp='2025-12-26T00:21:00')
2025-12-26T02:25:15.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-26T02:25:15.641 [DEBUG] [Thread-22704] [transport.py] [_log()] starting thread (client mode): 0xb95b1900
2025-12-26T02:25:15.641 [DEBUG] [Thread-22704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:25:15.656 [DEBUG] [Thread-22704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:25:15.656 [INFO] [Thread-22704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] client lang: <none>
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] server lang: <none>
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] kex follows: False
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] Compression: none
2025-12-26T02:25:15.663 [DEBUG] [Thread-22704] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:25:15.722 [DEBUG] [Thread-22704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:25:15.723 [DEBUG] [Thread-22704] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:25:15.723 [DEBUG] [Thread-22704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:25:15.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:25:15.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:25:15.780 [DEBUG] [Thread-22704] [transport.py] [_log()] userauth is OK
2025-12-26T02:25:15.780 [DEBUG] [Thread-22704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:25:15.780 [DEBUG] [Thread-22704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:25:15.780 [DEBUG] [Thread-22704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:25:15.780 [DEBUG] [Thread-22704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:25:15.799 [INFO] [Thread-22704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:25:15.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-26T02:25:15.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:25:16.677 [DEBUG] [Thread-22704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:25:16.677 [DEBUG] [Thread-22704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:25:16.725 [DEBUG] [Thread-22704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:25:16.725 [DEBUG] [Thread-22704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:25:16.734 [DEBUG] [Thread-22704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:25:16.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:25:16.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:25:16.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-26T02:25:16.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:25:16.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:25:16.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:25:16.770 [DEBUG] [Thread-22704] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:25:19.666 [DEBUG] [Thread-22706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:34.721 [DEBUG] [Thread-22707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:25:46.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:25:46.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:25:47.180 [DEBUG] [Thread-22708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:47.353 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:47.354 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:25:47.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 25, 29), 2.8, 82.98, 0.0, 18.81, 12.32, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:25:47.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:25:29
2025-12-26T02:25:47.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:25:47.770 [DEBUG] [Thread-22709] [transport.py] [_log()] starting thread (client mode): 0xb9590070
2025-12-26T02:25:47.771 [DEBUG] [Thread-22709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:25:47.792 [DEBUG] [Thread-22709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:25:47.793 [INFO] [Thread-22709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] client lang: <none>
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] server lang: <none>
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] kex follows: False
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] Compression: none
2025-12-26T02:25:47.796 [DEBUG] [Thread-22709] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:25:47.814 [DEBUG] [Thread-22709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:25:47.814 [DEBUG] [Thread-22709] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:25:47.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:25:47.816 [DEBUG] [Thread-22709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:25:47.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:25:47.818 [DEBUG] [Thread-22709] [transport.py] [_log()] userauth is OK
2025-12-26T02:25:47.818 [DEBUG] [Thread-22709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:25:47.818 [DEBUG] [Thread-22709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:25:47.818 [DEBUG] [Thread-22709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:25:47.818 [DEBUG] [Thread-22709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:25:47.841 [INFO] [Thread-22709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:25:47.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:25:48.480 [DEBUG] [Thread-22709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:25:48.480 [DEBUG] [Thread-22709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:25:48.480 [DEBUG] [Thread-22709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:25:48.521 [DEBUG] [Thread-22709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:25:48.522 [DEBUG] [Thread-22709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:25:48.524 [DEBUG] [Thread-22709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:25:48.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:25:48.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:25:48.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:25:48.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:25:48.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:25:48.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:25:48.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:25:48.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:25:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.017072 -999.00  +12.30  14.84     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.8 14.8 182.8 16.9 12.8 -22.3 12.7 -21.9 12.4 -20.3 12.7 -21.4
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.017072
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:25:48.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:25:48.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:25:29', tmtdew=2.8, humidity=82.98, cloud=0.0, wind=18.81, temperature=12.32, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:24:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:24:00')
2025-12-26T02:25:48.544 [DEBUG] [Thread-22709] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:25:48.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-26T02:25:48.633 [DEBUG] [Thread-22712] [transport.py] [_log()] starting thread (client mode): 0xb95b20b0
2025-12-26T02:25:48.633 [DEBUG] [Thread-22712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:25:48.649 [DEBUG] [Thread-22712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:25:48.649 [INFO] [Thread-22712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:25:48.656 [DEBUG] [Thread-22712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] client lang: <none>
2025-12-26T02:25:48.657 [DEBUG] [Thread-22712] [transport.py] [_log()] server lang: <none>
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] kex follows: False
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] Compression: none
2025-12-26T02:25:48.658 [DEBUG] [Thread-22712] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:25:48.716 [DEBUG] [Thread-22712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:25:48.717 [DEBUG] [Thread-22712] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:25:48.717 [DEBUG] [Thread-22712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:25:48.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:25:48.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:25:48.772 [DEBUG] [Thread-22712] [transport.py] [_log()] userauth is OK
2025-12-26T02:25:48.772 [DEBUG] [Thread-22712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:25:48.772 [DEBUG] [Thread-22712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:25:48.772 [DEBUG] [Thread-22712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:25:48.772 [DEBUG] [Thread-22712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:25:48.795 [INFO] [Thread-22712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:25: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-26T02:25:48.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:25:49.620 [DEBUG] [Thread-22712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:25:49.621 [DEBUG] [Thread-22712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:25:49.669 [DEBUG] [Thread-22712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:25:49.669 [DEBUG] [Thread-22712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:25:49.678 [DEBUG] [Thread-22712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:25:49.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:25:49.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:25:49.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-26T02:25:49.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:25:49.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:25:49.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:25:49.715 [DEBUG] [Thread-22712] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:25:49.759 [DEBUG] [Thread-22714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:04.812 [DEBUG] [Thread-22715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:19.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:26:19.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:26:19.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-26T02:26:19.844 [DEBUG] [Thread-22716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:20.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 26, 1), 2.8, 82.97, 0.0, 18.19, 12.34, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:26:20.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:26:01
2025-12-26T02:26:20.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:26:20.687 [DEBUG] [Thread-22717] [transport.py] [_log()] starting thread (client mode): 0xb95b21a0
2025-12-26T02:26:20.687 [DEBUG] [Thread-22717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:26:20.707 [DEBUG] [Thread-22717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:26:20.707 [INFO] [Thread-22717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:26:20.710 [DEBUG] [Thread-22717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:26:20.710 [DEBUG] [Thread-22717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] client lang: <none>
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] server lang: <none>
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] kex follows: False
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:26:20.711 [DEBUG] [Thread-22717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:26:20.712 [DEBUG] [Thread-22717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:26:20.712 [DEBUG] [Thread-22717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:26:20.712 [DEBUG] [Thread-22717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:26:20.712 [DEBUG] [Thread-22717] [transport.py] [_log()] Compression: none
2025-12-26T02:26:20.712 [DEBUG] [Thread-22717] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:26:20.728 [DEBUG] [Thread-22717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:26:20.729 [DEBUG] [Thread-22717] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:26:20.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:26:20.730 [DEBUG] [Thread-22717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:26:20.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:26:20.732 [DEBUG] [Thread-22717] [transport.py] [_log()] userauth is OK
2025-12-26T02:26:20.732 [DEBUG] [Thread-22717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:26:20.732 [DEBUG] [Thread-22717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:26:20.732 [DEBUG] [Thread-22717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:26:20.732 [DEBUG] [Thread-22717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:26:20.756 [INFO] [Thread-22717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:26:20.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:26:21.534 [DEBUG] [Thread-22717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:26:21.534 [DEBUG] [Thread-22717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:26:21.535 [DEBUG] [Thread-22717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:26:21.576 [DEBUG] [Thread-22717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:26:21.576 [DEBUG] [Thread-22717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:26:21.579 [DEBUG] [Thread-22717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:26:21.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:26:21.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:26:21.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:26:21.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:26:21.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:26:21.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:26:21.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:26:21.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:26:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:26:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.017768 -999.00  +12.30  14.81     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.8 14.8 182.4 17.3 12.8 -22.3 12.6 -22.0 12.4 -20.2 12.8 -21.4
2025-12-26T02:26:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:26:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:26:21.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.017768
2025-12-26T02:26:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:26:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:26:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:26:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:26:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:26:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:26:01', tmtdew=2.8, humidity=82.97, cloud=0.0, wind=18.19, temperature=12.34, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:25:35.155', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:24:00')
2025-12-26T02:26:21.603 [DEBUG] [Thread-22717] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:26:21.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-26T02:26:21.696 [DEBUG] [Thread-22720] [transport.py] [_log()] starting thread (client mode): 0xbbfcefe0
2025-12-26T02:26:21.696 [DEBUG] [Thread-22720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:26:21.711 [DEBUG] [Thread-22720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:26:21.711 [INFO] [Thread-22720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:26:21.718 [DEBUG] [Thread-22720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:26:21.719 [DEBUG] [Thread-22720] [transport.py] [_log()] client lang: <none>
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] server lang: <none>
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] kex follows: False
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:26:21.720 [DEBUG] [Thread-22720] [transport.py] [_log()] Compression: none
2025-12-26T02:26:21.721 [DEBUG] [Thread-22720] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:26:21.776 [DEBUG] [Thread-22720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:26:21.777 [DEBUG] [Thread-22720] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:26:21.778 [DEBUG] [Thread-22720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:26:21.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:26:21.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:26:21.832 [DEBUG] [Thread-22720] [transport.py] [_log()] userauth is OK
2025-12-26T02:26:21.832 [DEBUG] [Thread-22720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:26:21.832 [DEBUG] [Thread-22720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:26:21.832 [DEBUG] [Thread-22720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:26:21.832 [DEBUG] [Thread-22720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:26:21.852 [INFO] [Thread-22720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:26:21.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:26:21.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:26:22.658 [DEBUG] [Thread-22720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:26:22.658 [DEBUG] [Thread-22720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:26:22.706 [DEBUG] [Thread-22720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:26:22.707 [DEBUG] [Thread-22720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:26:22.716 [DEBUG] [Thread-22720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:26:22.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:26:22.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-26T02:26:22.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:26:22.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:26:22.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:26:22.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:26:22.753 [DEBUG] [Thread-22720] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:26:34.871 [DEBUG] [Thread-22722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:47.259 [DEBUG] [Thread-22723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:47.557 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:47.558 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:49.909 [DEBUG] [Thread-22724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:26:52.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:26:52.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:26:52.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-26T02:26:53.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 26, 33), 2.82, 82.88, 0.0, 17.57, 12.24, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:26:53.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:26:33
2025-12-26T02:26:53.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:26:53.754 [DEBUG] [Thread-22725] [transport.py] [_log()] starting thread (client mode): 0xb95f2050
2025-12-26T02:26:53.754 [DEBUG] [Thread-22725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:26:53.772 [DEBUG] [Thread-22725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:26:53.772 [INFO] [Thread-22725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:26:53.775 [DEBUG] [Thread-22725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:26:53.775 [DEBUG] [Thread-22725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:26:53.775 [DEBUG] [Thread-22725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] client lang: <none>
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] server lang: <none>
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] kex follows: False
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] Compression: none
2025-12-26T02:26:53.776 [DEBUG] [Thread-22725] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:26:53.795 [DEBUG] [Thread-22725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:26:53.796 [DEBUG] [Thread-22725] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:26:53.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:26:53.797 [DEBUG] [Thread-22725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:26:53.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:26:53.799 [DEBUG] [Thread-22725] [transport.py] [_log()] userauth is OK
2025-12-26T02:26:53.799 [DEBUG] [Thread-22725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:26:53.799 [DEBUG] [Thread-22725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:26:53.800 [DEBUG] [Thread-22725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:26:53.800 [DEBUG] [Thread-22725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:26:53.824 [INFO] [Thread-22725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:26:53.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:26:54.466 [DEBUG] [Thread-22725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:26:54.466 [DEBUG] [Thread-22725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:26:54.467 [DEBUG] [Thread-22725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:26:54.507 [DEBUG] [Thread-22725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:26:54.507 [DEBUG] [Thread-22725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:26:54.510 [DEBUG] [Thread-22725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:26:54.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:26:54.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:26:54.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:26:54.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:26:54.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:26:54.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:26:54.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:26:54.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:26:54.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:26:54.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.018114 -999.00  +12.30  13.18     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 13.2 13.2 186.6 16.6 12.8 -22.3 12.7 -22.0 12.4 -20.2 12.7 -21.3
2025-12-26T02:26:54.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:26:54.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:26:54.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.018114
2025-12-26T02:26:54.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:26:54.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:26:54.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:26:54.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:26:54.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:26:54.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:26:33', tmtdew=2.82, humidity=82.88, cloud=0.0, wind=17.57, temperature=12.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:26:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:24:00')
2025-12-26T02:26:54.537 [DEBUG] [Thread-22725] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:26:54.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-26T02:26:54.631 [DEBUG] [Thread-22728] [transport.py] [_log()] starting thread (client mode): 0xb95b1870
2025-12-26T02:26:54.631 [DEBUG] [Thread-22728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:26:54.646 [DEBUG] [Thread-22728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:26:54.646 [INFO] [Thread-22728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:26:54.654 [DEBUG] [Thread-22728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:26:54.654 [DEBUG] [Thread-22728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:26:54.654 [DEBUG] [Thread-22728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:26:54.654 [DEBUG] [Thread-22728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:54.654 [DEBUG] [Thread-22728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:26:54.654 [DEBUG] [Thread-22728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] client lang: <none>
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] server lang: <none>
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] kex follows: False
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] Compression: none
2025-12-26T02:26:54.655 [DEBUG] [Thread-22728] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:26:54.712 [DEBUG] [Thread-22728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:26:54.713 [DEBUG] [Thread-22728] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:26:54.713 [DEBUG] [Thread-22728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:26:54.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:26:54.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:26:54.769 [DEBUG] [Thread-22728] [transport.py] [_log()] userauth is OK
2025-12-26T02:26:54.769 [DEBUG] [Thread-22728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:26:54.770 [DEBUG] [Thread-22728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:26:54.770 [DEBUG] [Thread-22728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:26:54.770 [DEBUG] [Thread-22728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:26:54.789 [INFO] [Thread-22728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:26:54.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-26T02:26:54.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:26:55.565 [DEBUG] [Thread-22728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:26:55.565 [DEBUG] [Thread-22728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:26:55.613 [DEBUG] [Thread-22728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:26:55.613 [DEBUG] [Thread-22728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:26:55.622 [DEBUG] [Thread-22728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:26:55.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:26:55.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:26:55.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:26:55.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:26:55.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:26:55.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:26:55.655 [DEBUG] [Thread-22728] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:27:04.947 [DEBUG] [Thread-22730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:19.996 [DEBUG] [Thread-22731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:27:25.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:27:25.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-26T02:27:26.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 27, 5), 2.8, 82.98, 0.0, 16.92, 12.27, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:27:26.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:27:05
2025-12-26T02:27:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:27:26.690 [DEBUG] [Thread-22732] [transport.py] [_log()] starting thread (client mode): 0xb6b29c90
2025-12-26T02:27:26.690 [DEBUG] [Thread-22732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:27:26.710 [DEBUG] [Thread-22732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:27:26.710 [INFO] [Thread-22732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] client lang: <none>
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] server lang: <none>
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] kex follows: False
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:27:26.713 [DEBUG] [Thread-22732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:27:26.714 [DEBUG] [Thread-22732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:27:26.714 [DEBUG] [Thread-22732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:27:26.714 [DEBUG] [Thread-22732] [transport.py] [_log()] Compression: none
2025-12-26T02:27:26.714 [DEBUG] [Thread-22732] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:27:26.729 [DEBUG] [Thread-22732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:27:26.729 [DEBUG] [Thread-22732] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:27:26.729 [DEBUG] [Thread-22732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:27:26.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:27:26.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:27:26.730 [DEBUG] [Thread-22732] [transport.py] [_log()] userauth is OK
2025-12-26T02:27:26.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:27:26.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:27:26.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:27:26.730 [DEBUG] [Thread-22732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:27:26.739 [INFO] [Thread-22732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:27:26.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:27:27.569 [DEBUG] [Thread-22732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:27:27.569 [DEBUG] [Thread-22732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:27:27.570 [DEBUG] [Thread-22732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:27:27.610 [DEBUG] [Thread-22732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:27:27.610 [DEBUG] [Thread-22732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:27:27.614 [DEBUG] [Thread-22732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:27:27.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:27:27.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:27:27.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:27:27.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:27:27.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:27:27.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:27:27.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:27:27.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:27:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:27:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.018462 -999.00  +12.30  13.47     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 13.5 13.5 183.2 18.0 12.8 -22.4 12.7 -21.9 12.4 -20.3 12.7 -21.4
2025-12-26T02:27:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:27:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:27:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.018462
2025-12-26T02:27:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:27:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:27:27.640 [DEBUG] [Thread-22732] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:27:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:27:27.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:27:27.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:27:27.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:27:05', tmtdew=2.8, humidity=82.98, cloud=0.0, wind=16.92, temperature=12.27, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:26:35.117', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:24:00')
2025-12-26T02:27:27.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-26T02:27:27.737 [DEBUG] [Thread-22735] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdc0
2025-12-26T02:27:27.737 [DEBUG] [Thread-22735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:27:27.752 [DEBUG] [Thread-22735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:27:27.752 [INFO] [Thread-22735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:27:27.762 [DEBUG] [Thread-22735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] client lang: <none>
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] server lang: <none>
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] kex follows: False
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:27:27.763 [DEBUG] [Thread-22735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:27:27.764 [DEBUG] [Thread-22735] [transport.py] [_log()] Compression: none
2025-12-26T02:27:27.764 [DEBUG] [Thread-22735] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:27:27.821 [DEBUG] [Thread-22735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:27:27.822 [DEBUG] [Thread-22735] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:27:27.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:27:27.823 [DEBUG] [Thread-22735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:27:27.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:27:27.877 [DEBUG] [Thread-22735] [transport.py] [_log()] userauth is OK
2025-12-26T02:27:27.877 [DEBUG] [Thread-22735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:27:27.877 [DEBUG] [Thread-22735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:27:27.877 [DEBUG] [Thread-22735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:27:27.877 [DEBUG] [Thread-22735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:27:27.895 [INFO] [Thread-22735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:27:27.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:27:27.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:27:28.689 [DEBUG] [Thread-22735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:27:28.690 [DEBUG] [Thread-22735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:27:28.738 [DEBUG] [Thread-22735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:27:28.739 [DEBUG] [Thread-22735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:27:28.750 [DEBUG] [Thread-22735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:27:28.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:27:28.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-26T02:27:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:27:28.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:27:28.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:27:28.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:27:28.785 [DEBUG] [Thread-22735] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:27:35.031 [DEBUG] [Thread-22737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:47.336 [DEBUG] [Thread-22738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:47.759 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:47.760 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:50.083 [DEBUG] [Thread-22739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:27:58.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:27:58.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:27:58.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-26T02:27:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 27, 37), 2.79, 83.02, 0.0, 16.92, 12.22, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:27:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:27:37
2025-12-26T02:27:59.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:27:59.784 [DEBUG] [Thread-22740] [transport.py] [_log()] starting thread (client mode): 0xb957b2e0
2025-12-26T02:27:59.784 [DEBUG] [Thread-22740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:27:59.804 [DEBUG] [Thread-22740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:27:59.804 [INFO] [Thread-22740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] client lang: <none>
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] server lang: <none>
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] kex follows: False
2025-12-26T02:27:59.808 [DEBUG] [Thread-22740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:27:59.809 [DEBUG] [Thread-22740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:27:59.809 [DEBUG] [Thread-22740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:27:59.809 [DEBUG] [Thread-22740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:27:59.809 [DEBUG] [Thread-22740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:27:59.809 [DEBUG] [Thread-22740] [transport.py] [_log()] Compression: none
2025-12-26T02:27:59.809 [DEBUG] [Thread-22740] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:27:59.827 [DEBUG] [Thread-22740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:27:59.828 [DEBUG] [Thread-22740] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:27:59.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:27:59.829 [DEBUG] [Thread-22740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:27:59.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:27:59.831 [DEBUG] [Thread-22740] [transport.py] [_log()] userauth is OK
2025-12-26T02:27:59.831 [DEBUG] [Thread-22740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:27:59.831 [DEBUG] [Thread-22740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:27:59.831 [DEBUG] [Thread-22740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:27:59.832 [DEBUG] [Thread-22740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:27:59.856 [INFO] [Thread-22740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:27:59.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:28:00.498 [DEBUG] [Thread-22740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:28:00.498 [DEBUG] [Thread-22740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:28:00.498 [DEBUG] [Thread-22740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:28:00.540 [DEBUG] [Thread-22740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:28:00.540 [DEBUG] [Thread-22740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:28:00.542 [DEBUG] [Thread-22740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:28:00.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:28:00.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:28:00.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:28:00.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:28:00.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:28:00.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:28:00.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.018809 -999.00  +12.30  14.24     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 14.2 14.2 182.2 16.6 12.8 -22.4 12.7 -22.1 12.4 -20.3 12.8 -21.4
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.018809
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:28:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:27:37', tmtdew=2.79, humidity=83.02, cloud=0.0, wind=16.92, temperature=12.22, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:27:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:24:00')
2025-12-26T02:28:00.561 [DEBUG] [Thread-22740] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:28:00.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-26T02:28:00.647 [DEBUG] [Thread-22743] [transport.py] [_log()] starting thread (client mode): 0xb6b14d00
2025-12-26T02:28:00.647 [DEBUG] [Thread-22743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:28:00.662 [DEBUG] [Thread-22743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:28:00.662 [INFO] [Thread-22743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] client lang: <none>
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] server lang: <none>
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] kex follows: False
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] Compression: none
2025-12-26T02:28:00.670 [DEBUG] [Thread-22743] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:28:00.727 [DEBUG] [Thread-22743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:28:00.727 [DEBUG] [Thread-22743] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:28:00.727 [DEBUG] [Thread-22743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:28:00.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:28:00.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:28:00.784 [DEBUG] [Thread-22743] [transport.py] [_log()] userauth is OK
2025-12-26T02:28:00.784 [DEBUG] [Thread-22743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:28:00.784 [DEBUG] [Thread-22743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:28:00.784 [DEBUG] [Thread-22743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:28:00.784 [DEBUG] [Thread-22743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:28:00.799 [INFO] [Thread-22743] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:28:00.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-26T02:28:00.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:28:01.612 [DEBUG] [Thread-22743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:28:01.612 [DEBUG] [Thread-22743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:28:01.660 [DEBUG] [Thread-22743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:28:01.660 [DEBUG] [Thread-22743] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:28:01.669 [DEBUG] [Thread-22743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:28:01.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:28:01.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:28:01.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:28:01.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:28:01.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:28:01.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:28:01.701 [DEBUG] [Thread-22743] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:28:05.115 [DEBUG] [Thread-22745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:11.865 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:20.032 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:20.165 [DEBUG] [Thread-22746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:24.331 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:31.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:28:31.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:28:31.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:28:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 28, 9), 2.79, 83.07, 0.0, 16.78, 12.25, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:28:32.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:28:09
2025-12-26T02:28:32.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:28:32.698 [DEBUG] [Thread-22747] [transport.py] [_log()] starting thread (client mode): 0xb9593880
2025-12-26T02:28:32.699 [DEBUG] [Thread-22747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:28:32.719 [DEBUG] [Thread-22747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:28:32.719 [INFO] [Thread-22747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] client lang: <none>
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] server lang: <none>
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] kex follows: False
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] Compression: none
2025-12-26T02:28:32.721 [DEBUG] [Thread-22747] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:28:32.733 [DEBUG] [Thread-22747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:28:32.733 [DEBUG] [Thread-22747] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:28:32.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:28:32.734 [DEBUG] [Thread-22747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:28:32.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:28:32.736 [DEBUG] [Thread-22747] [transport.py] [_log()] userauth is OK
2025-12-26T02:28:32.736 [DEBUG] [Thread-22747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:28:32.736 [DEBUG] [Thread-22747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:28:32.736 [DEBUG] [Thread-22747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:28:32.736 [DEBUG] [Thread-22747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:28:32.759 [INFO] [Thread-22747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:28:32.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:28:33.541 [DEBUG] [Thread-22747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:28:33.541 [DEBUG] [Thread-22747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:28:33.542 [DEBUG] [Thread-22747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:28:33.583 [DEBUG] [Thread-22747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:28:33.583 [DEBUG] [Thread-22747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:28:33.586 [DEBUG] [Thread-22747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:28:33.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:28:33.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:28:33.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:28:33.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:28:33.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:28:33.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:28:33.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:28:33.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.019503 -999.00  +12.30  13.21     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 13.2 13.2 177.4 15.4 12.8 -22.3 12.6 -22.2 12.4 -20.3 12.7 -21.4
2025-12-26T02:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:28:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.019503
2025-12-26T02:28:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:28:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:28:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:28:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:28:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:28:33.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:28:09', tmtdew=2.79, humidity=83.07, cloud=0.0, wind=16.78, temperature=12.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:28:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:24:00')
2025-12-26T02:28:33.609 [DEBUG] [Thread-22747] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:28:33.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:28:33.704 [DEBUG] [Thread-22750] [transport.py] [_log()] starting thread (client mode): 0xbbfce830
2025-12-26T02:28:33.704 [DEBUG] [Thread-22750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:28:33.718 [DEBUG] [Thread-22750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:28:33.718 [INFO] [Thread-22750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] client lang: <none>
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] server lang: <none>
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] kex follows: False
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] Compression: none
2025-12-26T02:28:33.726 [DEBUG] [Thread-22750] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:28:33.784 [DEBUG] [Thread-22750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:28:33.784 [DEBUG] [Thread-22750] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:28:33.785 [DEBUG] [Thread-22750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:28:33.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:28:33.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:28:33.840 [DEBUG] [Thread-22750] [transport.py] [_log()] userauth is OK
2025-12-26T02:28:33.841 [DEBUG] [Thread-22750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:28:33.841 [DEBUG] [Thread-22750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:28:33.841 [DEBUG] [Thread-22750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:28:33.841 [DEBUG] [Thread-22750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:28:33.861 [INFO] [Thread-22750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:28:33.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:28:33.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:28:34.710 [DEBUG] [Thread-22750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:28:34.710 [DEBUG] [Thread-22750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:28:34.757 [DEBUG] [Thread-22750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:28:34.758 [DEBUG] [Thread-22750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:28:34.766 [DEBUG] [Thread-22750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:28:34.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:28:34.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:28:34.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-26T02:28:34.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:28:34.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:28:34.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:28:34.801 [DEBUG] [Thread-22750] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:28:35.199 [DEBUG] [Thread-22752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:47.412 [DEBUG] [Thread-22753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:47.962 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:47.963 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:28:50.241 [DEBUG] [Thread-22754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:29:04.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:29:04.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-26T02:29:05.276 [DEBUG] [Thread-22755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:05.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 28, 41), 2.79, 83.07, 0.0, 16.67, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:29:05.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:28:41
2025-12-26T02:29:05.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:29:05.798 [DEBUG] [Thread-22756] [transport.py] [_log()] starting thread (client mode): 0xbbfce6b0
2025-12-26T02:29:05.798 [DEBUG] [Thread-22756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:29:05.820 [DEBUG] [Thread-22756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:29:05.820 [INFO] [Thread-22756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] client lang: <none>
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] server lang: <none>
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] kex follows: False
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:29:05.823 [DEBUG] [Thread-22756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:29:05.824 [DEBUG] [Thread-22756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:29:05.824 [DEBUG] [Thread-22756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:29:05.824 [DEBUG] [Thread-22756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:29:05.824 [DEBUG] [Thread-22756] [transport.py] [_log()] Compression: none
2025-12-26T02:29:05.824 [DEBUG] [Thread-22756] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:29:05.841 [DEBUG] [Thread-22756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:29:05.842 [DEBUG] [Thread-22756] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:29:05.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:29:05.843 [DEBUG] [Thread-22756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:29:05.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:29:05.845 [DEBUG] [Thread-22756] [transport.py] [_log()] userauth is OK
2025-12-26T02:29:05.845 [DEBUG] [Thread-22756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:29:05.845 [DEBUG] [Thread-22756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:29:05.845 [DEBUG] [Thread-22756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:29:05.846 [DEBUG] [Thread-22756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:29:05.869 [INFO] [Thread-22756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:29:05.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:29:06.538 [DEBUG] [Thread-22756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:29:06.538 [DEBUG] [Thread-22756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:29:06.538 [DEBUG] [Thread-22756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:29:06.579 [DEBUG] [Thread-22756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:29:06.579 [DEBUG] [Thread-22756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:29:06.583 [DEBUG] [Thread-22756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:29:06.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:29:06.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:29:06.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:29:06.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:29:06.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:29:06.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:29:06.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:29:06.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:29:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:29:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.019850 -999.00  +12.20  12.09     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 12.1 12.1 175.0 16.1 12.8 -22.4 12.6 -22.1 12.4 -20.3 12.7 -21.6
2025-12-26T02:29:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:29:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:29:06.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.019850
2025-12-26T02:29:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:29:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:29:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:29:06.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:29:06.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:29:06.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:28:41', tmtdew=2.79, humidity=83.07, cloud=0.0, wind=16.67, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:28:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:27:00')
2025-12-26T02:29:06.609 [DEBUG] [Thread-22756] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:29:06.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-26T02:29:06.700 [DEBUG] [Thread-22759] [transport.py] [_log()] starting thread (client mode): 0xb955ba60
2025-12-26T02:29:06.700 [DEBUG] [Thread-22759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:29:06.715 [DEBUG] [Thread-22759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:29:06.715 [INFO] [Thread-22759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:29:06.723 [DEBUG] [Thread-22759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:29:06.723 [DEBUG] [Thread-22759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:29:06.723 [DEBUG] [Thread-22759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:29:06.723 [DEBUG] [Thread-22759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:06.723 [DEBUG] [Thread-22759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:06.723 [DEBUG] [Thread-22759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] client lang: <none>
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] server lang: <none>
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] kex follows: False
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] Compression: none
2025-12-26T02:29:06.724 [DEBUG] [Thread-22759] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:29:06.781 [DEBUG] [Thread-22759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:29:06.782 [DEBUG] [Thread-22759] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:29:06.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:29:06.783 [DEBUG] [Thread-22759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:29:06.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:29:06.837 [DEBUG] [Thread-22759] [transport.py] [_log()] userauth is OK
2025-12-26T02:29:06.838 [DEBUG] [Thread-22759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:29:06.838 [DEBUG] [Thread-22759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:29:06.838 [DEBUG] [Thread-22759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:29:06.838 [DEBUG] [Thread-22759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:29:06.856 [INFO] [Thread-22759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:29:06.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-26T02:29:06.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:29:07.660 [DEBUG] [Thread-22759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:29:07.660 [DEBUG] [Thread-22759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:29:07.709 [DEBUG] [Thread-22759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:29:07.709 [DEBUG] [Thread-22759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:29:07.718 [DEBUG] [Thread-22759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:29:07.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:29:07.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-26T02:29:07.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-26T02:29:07.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:29:07.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:29:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:29:07.755 [DEBUG] [Thread-22759] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:29:20.305 [DEBUG] [Thread-22761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:35.356 [DEBUG] [Thread-22762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:37.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:29:37.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:29:37.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-26T02:29:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 29, 13), 2.78, 83.1, 0.0, 16.25, 12.17, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:29:38.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:29:13
2025-12-26T02:29:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:29:38.736 [DEBUG] [Thread-22763] [transport.py] [_log()] starting thread (client mode): 0xb9544340
2025-12-26T02:29:38.736 [DEBUG] [Thread-22763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:29:38.755 [DEBUG] [Thread-22763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:29:38.755 [INFO] [Thread-22763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:29:38.758 [DEBUG] [Thread-22763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] client lang: <none>
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] server lang: <none>
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] kex follows: False
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] Compression: none
2025-12-26T02:29:38.759 [DEBUG] [Thread-22763] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:29:38.775 [DEBUG] [Thread-22763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:29:38.776 [DEBUG] [Thread-22763] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:29:38.776 [DEBUG] [Thread-22763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:29:38.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:29:38.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:29:38.778 [DEBUG] [Thread-22763] [transport.py] [_log()] userauth is OK
2025-12-26T02:29:38.778 [DEBUG] [Thread-22763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:29:38.778 [DEBUG] [Thread-22763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:29:38.778 [DEBUG] [Thread-22763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:29:38.778 [DEBUG] [Thread-22763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:29:38.793 [INFO] [Thread-22763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:29:38.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:29:39.587 [DEBUG] [Thread-22763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:29:39.587 [DEBUG] [Thread-22763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:29:39.587 [DEBUG] [Thread-22763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:29:39.628 [DEBUG] [Thread-22763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:29:39.628 [DEBUG] [Thread-22763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:29:39.632 [DEBUG] [Thread-22763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:29:39.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:29:39.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:29:39.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:29:39.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:29:39.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:29:39.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:29:39.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:29:39.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:29:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:29:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.020198 -999.00  +12.20  11.46     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.5 11.5 174.0 15.2 12.8 -22.4 12.6 -21.9 12.4 -20.2 12.7 -21.3
2025-12-26T02:29:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:29:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:29:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.020198
2025-12-26T02:29:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:29:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:29:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:29:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:29:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:29:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:29:13', tmtdew=2.78, humidity=83.1, cloud=0.0, wind=16.25, temperature=12.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:29:05.107', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:27:00')
2025-12-26T02:29:39.660 [DEBUG] [Thread-22763] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:29:39.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-26T02:29:39.763 [DEBUG] [Thread-22766] [transport.py] [_log()] starting thread (client mode): 0xb95b2c80
2025-12-26T02:29:39.763 [DEBUG] [Thread-22766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:29:39.778 [DEBUG] [Thread-22766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:29:39.778 [INFO] [Thread-22766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:29:39.785 [DEBUG] [Thread-22766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] client lang: <none>
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] server lang: <none>
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] kex follows: False
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] Compression: none
2025-12-26T02:29:39.786 [DEBUG] [Thread-22766] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:29:39.845 [DEBUG] [Thread-22766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:29:39.846 [DEBUG] [Thread-22766] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:29:39.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:29:39.847 [DEBUG] [Thread-22766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:29:39.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:29:39.902 [DEBUG] [Thread-22766] [transport.py] [_log()] userauth is OK
2025-12-26T02:29:39.902 [DEBUG] [Thread-22766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:29:39.902 [DEBUG] [Thread-22766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:29:39.902 [DEBUG] [Thread-22766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:29:39.902 [DEBUG] [Thread-22766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:29:39.921 [INFO] [Thread-22766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:29:39.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-26T02:29:39.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:29:40.727 [DEBUG] [Thread-22766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:29:40.728 [DEBUG] [Thread-22766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:29:40.777 [DEBUG] [Thread-22766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:29:40.777 [DEBUG] [Thread-22766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:29:40.787 [DEBUG] [Thread-22766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:29:40.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:29:40.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-26T02:29:40.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:29:40.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:29:40.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:29:40.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:29:40.823 [DEBUG] [Thread-22766] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:29:47.486 [DEBUG] [Thread-22768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:48.162 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:48.163 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:29:50.390 [DEBUG] [Thread-22769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:05.437 [DEBUG] [Thread-22770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:30:10.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:30:10.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:30:11.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 29, 46), 2.72, 83.13, 0.0, 13.96, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:30:11.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:29:46
2025-12-26T02:30:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:30:11.829 [DEBUG] [Thread-22771] [transport.py] [_log()] starting thread (client mode): 0xb6b23af0
2025-12-26T02:30:11.829 [DEBUG] [Thread-22771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:30:11.848 [DEBUG] [Thread-22771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:30:11.848 [INFO] [Thread-22771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] client lang: <none>
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] server lang: <none>
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] kex follows: False
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] Compression: none
2025-12-26T02:30:11.851 [DEBUG] [Thread-22771] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:30:11.868 [DEBUG] [Thread-22771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:30:11.869 [DEBUG] [Thread-22771] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:30:11.869 [DEBUG] [Thread-22771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:30:11.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:30:11.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:30:11.871 [DEBUG] [Thread-22771] [transport.py] [_log()] userauth is OK
2025-12-26T02:30:11.872 [DEBUG] [Thread-22771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:30:11.872 [DEBUG] [Thread-22771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:30:11.872 [DEBUG] [Thread-22771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:30:11.872 [DEBUG] [Thread-22771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:30:11.895 [INFO] [Thread-22771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:30:11.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:30:12.551 [DEBUG] [Thread-22771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:30:12.552 [DEBUG] [Thread-22771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:30:12.552 [DEBUG] [Thread-22771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:30:12.592 [DEBUG] [Thread-22771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:30:12.592 [DEBUG] [Thread-22771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:30:12.596 [DEBUG] [Thread-22771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:30:12.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:30:12.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:30:12.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:30:12.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:30:12.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:30:12.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:30:12.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:30:12.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:30:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:30:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.020544 -999.00  +12.20   9.04     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 9.0 9.0 174.8 14.2 12.8 -22.3 12.6 -21.9 12.4 -20.3 12.7 -21.4
2025-12-26T02:30:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:30:12.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:30:12.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.020544
2025-12-26T02:30:12.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:30:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:30:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:30:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:30:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:30:12.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:29:46', tmtdew=2.72, humidity=83.13, cloud=0.0, wind=13.96, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:29:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:27:00')
2025-12-26T02:30:12.622 [DEBUG] [Thread-22771] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:30:12.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-26T02:30:12.719 [DEBUG] [Thread-22774] [transport.py] [_log()] starting thread (client mode): 0xb6b29ed0
2025-12-26T02:30:12.719 [DEBUG] [Thread-22774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:30:12.733 [DEBUG] [Thread-22774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:30:12.733 [INFO] [Thread-22774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] client lang: <none>
2025-12-26T02:30:12.741 [DEBUG] [Thread-22774] [transport.py] [_log()] server lang: <none>
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] kex follows: False
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] Compression: none
2025-12-26T02:30:12.742 [DEBUG] [Thread-22774] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:30:12.798 [DEBUG] [Thread-22774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:30:12.798 [DEBUG] [Thread-22774] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:30:12.799 [DEBUG] [Thread-22774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:30:12.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:30:12.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:30:12.854 [DEBUG] [Thread-22774] [transport.py] [_log()] userauth is OK
2025-12-26T02:30:12.855 [DEBUG] [Thread-22774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:30:12.855 [DEBUG] [Thread-22774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:30:12.855 [DEBUG] [Thread-22774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:30:12.855 [DEBUG] [Thread-22774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:30:12.874 [INFO] [Thread-22774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:30:12.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-26T02:30:12.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:30:13.675 [DEBUG] [Thread-22774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:30:13.675 [DEBUG] [Thread-22774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:30:13.723 [DEBUG] [Thread-22774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:30:13.723 [DEBUG] [Thread-22774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:30:13.732 [DEBUG] [Thread-22774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:30:13.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:30: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-26T02:30:13.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-26T02:30:13.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:30:13.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:30:13.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:30:13.770 [DEBUG] [Thread-22774] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:30:20.471 [DEBUG] [Thread-22776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:35.512 [DEBUG] [Thread-22777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:43.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:30:43.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:30:43.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:30:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 30, 19), 2.72, 83.17, 0.0, 15.02, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:30:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:30:19
2025-12-26T02:30:44.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:30:44.793 [DEBUG] [Thread-22778] [transport.py] [_log()] starting thread (client mode): 0xb9559360
2025-12-26T02:30:44.793 [DEBUG] [Thread-22778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:30:44.814 [DEBUG] [Thread-22778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:30:44.814 [INFO] [Thread-22778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] client lang: <none>
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] server lang: <none>
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] kex follows: False
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:30:44.817 [DEBUG] [Thread-22778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:30:44.818 [DEBUG] [Thread-22778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:30:44.818 [DEBUG] [Thread-22778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:30:44.818 [DEBUG] [Thread-22778] [transport.py] [_log()] Compression: none
2025-12-26T02:30:44.818 [DEBUG] [Thread-22778] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:30:44.834 [DEBUG] [Thread-22778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:30:44.835 [DEBUG] [Thread-22778] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:30:44.835 [DEBUG] [Thread-22778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:30:44.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:30:44.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:30:44.837 [DEBUG] [Thread-22778] [transport.py] [_log()] userauth is OK
2025-12-26T02:30:44.837 [DEBUG] [Thread-22778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:30:44.838 [DEBUG] [Thread-22778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:30:44.838 [DEBUG] [Thread-22778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:30:44.838 [DEBUG] [Thread-22778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:30:44.856 [INFO] [Thread-22778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:30:44.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:30:45.517 [DEBUG] [Thread-22778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:30:45.517 [DEBUG] [Thread-22778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:30:45.518 [DEBUG] [Thread-22778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:30:45.558 [DEBUG] [Thread-22778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:30:45.558 [DEBUG] [Thread-22778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:30:45.560 [DEBUG] [Thread-22778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:30:45.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:30:45.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:30:45.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:30:45.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:30:45.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:30:45.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:30:45.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:30:45.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:30:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:30:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.020892 -999.00  +12.30  11.35     86  +10.00 1 1 1 2 1     0    0 -999.00 0.00 ZNESW 11.3 11.3 178.2 17.0 12.8 -22.2 12.7 -22.0 12.4 -20.3 12.7 -21.2
2025-12-26T02:30:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:30:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:30:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.020892
2025-12-26T02:30:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:30:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:30:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:30:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:30:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:30:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:30:19', tmtdew=2.72, humidity=83.17, cloud=0.0, wind=15.02, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:30:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:27:00')
2025-12-26T02:30:45.582 [DEBUG] [Thread-22778] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:30:45.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:30:45.679 [DEBUG] [Thread-22781] [transport.py] [_log()] starting thread (client mode): 0xb9547f10
2025-12-26T02:30:45.679 [DEBUG] [Thread-22781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:30:45.693 [DEBUG] [Thread-22781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:30:45.694 [INFO] [Thread-22781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] client lang: <none>
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] server lang: <none>
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] kex follows: False
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:30:45.701 [DEBUG] [Thread-22781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:30:45.702 [DEBUG] [Thread-22781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:30:45.702 [DEBUG] [Thread-22781] [transport.py] [_log()] Compression: none
2025-12-26T02:30:45.702 [DEBUG] [Thread-22781] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:30:45.757 [DEBUG] [Thread-22781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:30:45.758 [DEBUG] [Thread-22781] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:30:45.758 [DEBUG] [Thread-22781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:30:45.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:30:45.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:30:45.814 [DEBUG] [Thread-22781] [transport.py] [_log()] userauth is OK
2025-12-26T02:30:45.814 [DEBUG] [Thread-22781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:30:45.814 [DEBUG] [Thread-22781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:30:45.814 [DEBUG] [Thread-22781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:30:45.814 [DEBUG] [Thread-22781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:30:45.828 [INFO] [Thread-22781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:30:45.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-26T02:30:45.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:30:46.607 [DEBUG] [Thread-22781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:30:46.608 [DEBUG] [Thread-22781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:30:46.656 [DEBUG] [Thread-22781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:30:46.657 [DEBUG] [Thread-22781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:30:46.666 [DEBUG] [Thread-22781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:30:46.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:30:46.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-26T02:30:46.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-26T02:30:46.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:30:46.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:30:46.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:30:46.702 [DEBUG] [Thread-22781] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:30:47.560 [DEBUG] [Thread-22783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:48.368 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:48.369 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:30:50.548 [DEBUG] [Thread-22784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:05.600 [DEBUG] [Thread-22785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:31:16.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:31:16.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-26T02:31:17.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 30, 51), 2.71, 83.23, 0.0, 16.46, 12.19, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:31:17.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:30:51
2025-12-26T02:31:17.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:31:17.743 [DEBUG] [Thread-22786] [transport.py] [_log()] starting thread (client mode): 0xb955ad70
2025-12-26T02:31:17.743 [DEBUG] [Thread-22786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:31:17.763 [DEBUG] [Thread-22786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:31:17.763 [INFO] [Thread-22786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] client lang: <none>
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] server lang: <none>
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] kex follows: False
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] Compression: none
2025-12-26T02:31:17.767 [DEBUG] [Thread-22786] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:31:17.783 [DEBUG] [Thread-22786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:31:17.783 [DEBUG] [Thread-22786] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:31:17.783 [DEBUG] [Thread-22786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:31:17.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:31:17.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:31:17.784 [DEBUG] [Thread-22786] [transport.py] [_log()] userauth is OK
2025-12-26T02:31:17.784 [DEBUG] [Thread-22786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:31:17.784 [DEBUG] [Thread-22786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:31:17.784 [DEBUG] [Thread-22786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:31:17.784 [DEBUG] [Thread-22786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:31:17.801 [INFO] [Thread-22786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:31:17.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:31:18.463 [DEBUG] [Thread-22786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:31:18.463 [DEBUG] [Thread-22786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:31:18.464 [DEBUG] [Thread-22786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:31:18.505 [DEBUG] [Thread-22786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:31:18.505 [DEBUG] [Thread-22786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:31:18.507 [DEBUG] [Thread-22786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:31:18.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:31:18.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:31:18.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:31:18.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:31:18.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:31:18.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:31:18.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.021239 -999.00  +12.30  10.68     85  +10.00 1 1 1 2 1     0    0 2.89 24.15 ZNESW 10.7 10.7 161.6 12.9 12.8 -22.2 12.7 -22.0 12.5 -20.2 12.7 -21.3
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.021239
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:31:18.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:30:51', tmtdew=2.71, humidity=83.23, cloud=0.0, wind=16.46, temperature=12.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:30:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.31574999999999953, 0.17225000000000001, 0.3232499999999998, 0.25049999999999883, 0.5235000000000003, 1.7802500000000006, nan, nan, 0.2554999999999996, 0.14750000000000085, 0.19125000000000014, 0.2759999999999998, 0.22199999999999953, 0.3152500000000007, 0.5030000000000001, 0.4344999999999999, 0.2212499999999995, 0.2575000000000003, 0.1745000000000001, 0.3222499999999986, 0.2879999999999985, 0.31374999999999886, 0.34825000000000017, 0.3667499999999997, 0.23999999999999844, 0.27000000000000135, 0.30375000000000085, 0.33050000000000157, 0.5225000000000009, 0.4200000000000008, 0.3910000000000009, 0.4515000000000011, 0.3597499999999991], zp_timestamp='2025-12-26T00:27:00')
2025-12-26T02:31:18.525 [DEBUG] [Thread-22786] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:31:18.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-26T02:31:18.610 [DEBUG] [Thread-22789] [transport.py] [_log()] starting thread (client mode): 0xb6b28d00
2025-12-26T02:31:18.610 [DEBUG] [Thread-22789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:31:18.625 [DEBUG] [Thread-22789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:31:18.625 [INFO] [Thread-22789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:31:18.632 [DEBUG] [Thread-22789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:31:18.632 [DEBUG] [Thread-22789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:31:18.632 [DEBUG] [Thread-22789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:31:18.632 [DEBUG] [Thread-22789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:18.632 [DEBUG] [Thread-22789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:18.632 [DEBUG] [Thread-22789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] client lang: <none>
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] server lang: <none>
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] kex follows: False
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] Compression: none
2025-12-26T02:31:18.633 [DEBUG] [Thread-22789] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:31:18.689 [DEBUG] [Thread-22789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:31:18.689 [DEBUG] [Thread-22789] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:31:18.689 [DEBUG] [Thread-22789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:31:18.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:31:18.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:31:18.746 [DEBUG] [Thread-22789] [transport.py] [_log()] userauth is OK
2025-12-26T02:31:18.746 [DEBUG] [Thread-22789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:31:18.746 [DEBUG] [Thread-22789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:31:18.746 [DEBUG] [Thread-22789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:31:18.746 [DEBUG] [Thread-22789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:31:18.761 [INFO] [Thread-22789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:31:18.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-26T02:31:18.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:31:19.543 [DEBUG] [Thread-22789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:31:19.543 [DEBUG] [Thread-22789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:31:19.590 [DEBUG] [Thread-22789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:31:19.590 [DEBUG] [Thread-22789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:31:19.600 [DEBUG] [Thread-22789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:31:19.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:31:19.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:31:19.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-26T02:31:19.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:31:19.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:31:19.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:31:19.631 [DEBUG] [Thread-22789] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:31:20.629 [DEBUG] [Thread-22791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:35.670 [DEBUG] [Thread-22792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:47.641 [DEBUG] [Thread-22793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:48.569 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:48.571 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:31:49.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:31:49.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-26T02:31:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 31, 23), 2.7, 83.27, 0.0, 15.76, 12.24, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:31:50.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:31:23
2025-12-26T02:31:50.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:31:50.652 [DEBUG] [Thread-22794] [transport.py] [_log()] starting thread (client mode): 0xb955a890
2025-12-26T02:31:50.652 [DEBUG] [Thread-22794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:31:50.671 [DEBUG] [Thread-22794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:31:50.671 [INFO] [Thread-22794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] client lang: <none>
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] server lang: <none>
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] kex follows: False
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] Compression: none
2025-12-26T02:31:50.674 [DEBUG] [Thread-22794] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:31:50.691 [DEBUG] [Thread-22794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:31:50.692 [DEBUG] [Thread-22794] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:31:50.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:31:50.693 [DEBUG] [Thread-22794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:31:50.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:31:50.695 [DEBUG] [Thread-22794] [transport.py] [_log()] userauth is OK
2025-12-26T02:31:50.695 [DEBUG] [Thread-22794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:31:50.695 [DEBUG] [Thread-22794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:31:50.695 [DEBUG] [Thread-22794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:31:50.695 [DEBUG] [Thread-22794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:31:50.704 [DEBUG] [Thread-22796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:31:50.719 [INFO] [Thread-22794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:31:50.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:31:51.357 [DEBUG] [Thread-22794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:31:51.357 [DEBUG] [Thread-22794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:31:51.357 [DEBUG] [Thread-22794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:31:51.398 [DEBUG] [Thread-22794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:31:51.398 [DEBUG] [Thread-22794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:31:51.401 [DEBUG] [Thread-22794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:31:51.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:31:51.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:31:51.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:31:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:31:51.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:31:51.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:31:51.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:31:51.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:31:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:31:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.021934 -999.00  +12.20  10.26     86   +9.90 1 1 1 2 1     0    0 2.80 21.44 ZNESW 10.3 10.3 170.6 12.7 12.8 -22.2 12.6 -21.8 12.4 -20.3 12.7 -21.3
2025-12-26T02:31:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:31:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:31:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.021934
2025-12-26T02:31:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:31:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:31:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:31:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:31:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:31:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:31:23', tmtdew=2.7, humidity=83.27, cloud=0.0, wind=15.76, temperature=12.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:31:35.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:31:00')
2025-12-26T02:31:51.426 [DEBUG] [Thread-22794] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:31:51.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:31:51.517 [DEBUG] [Thread-22798] [transport.py] [_log()] starting thread (client mode): 0xb95f1cf0
2025-12-26T02:31:51.517 [DEBUG] [Thread-22798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:31:51.532 [DEBUG] [Thread-22798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:31:51.532 [INFO] [Thread-22798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] client lang: <none>
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] server lang: <none>
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] kex follows: False
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] Compression: none
2025-12-26T02:31:51.540 [DEBUG] [Thread-22798] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:31:51.597 [DEBUG] [Thread-22798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:31:51.597 [DEBUG] [Thread-22798] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:31:51.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:31:51.597 [DEBUG] [Thread-22798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:31:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:31:51.657 [DEBUG] [Thread-22798] [transport.py] [_log()] userauth is OK
2025-12-26T02:31:51.657 [DEBUG] [Thread-22798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:31:51.657 [DEBUG] [Thread-22798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:31:51.657 [DEBUG] [Thread-22798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:31:51.657 [DEBUG] [Thread-22798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:31:51.676 [INFO] [Thread-22798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:31:51.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-26T02:31:51.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:31:52.499 [DEBUG] [Thread-22798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:31:52.499 [DEBUG] [Thread-22798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:31:52.547 [DEBUG] [Thread-22798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:31:52.547 [DEBUG] [Thread-22798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:31:52.556 [DEBUG] [Thread-22798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:31:52.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:31:52.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-26T02:31:52.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:31:52.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:31:52.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:31:52.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:31:52.591 [DEBUG] [Thread-22798] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:32:05.733 [DEBUG] [Thread-22800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:20.781 [DEBUG] [Thread-22801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:22.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:32:22.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:32:22.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:32:23.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 31, 55), 2.72, 83.13, 0.0, 16.82, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:32:23.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:31:55
2025-12-26T02:32:23.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:32:23.569 [DEBUG] [Thread-22802] [transport.py] [_log()] starting thread (client mode): 0xb95f31c0
2025-12-26T02:32:23.569 [DEBUG] [Thread-22802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:32:23.589 [DEBUG] [Thread-22802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:32:23.589 [INFO] [Thread-22802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:32:23.592 [DEBUG] [Thread-22802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:32:23.592 [DEBUG] [Thread-22802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:32:23.592 [DEBUG] [Thread-22802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:32:23.592 [DEBUG] [Thread-22802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:23.592 [DEBUG] [Thread-22802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:23.592 [DEBUG] [Thread-22802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] client lang: <none>
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] server lang: <none>
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] kex follows: False
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] Compression: none
2025-12-26T02:32:23.593 [DEBUG] [Thread-22802] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:32:23.610 [DEBUG] [Thread-22802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:32:23.611 [DEBUG] [Thread-22802] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:32:23.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:32:23.612 [DEBUG] [Thread-22802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:32:23.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:32:23.614 [DEBUG] [Thread-22802] [transport.py] [_log()] userauth is OK
2025-12-26T02:32:23.614 [DEBUG] [Thread-22802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:32:23.614 [DEBUG] [Thread-22802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:32:23.614 [DEBUG] [Thread-22802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:32:23.614 [DEBUG] [Thread-22802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:32:23.650 [INFO] [Thread-22802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:32:23.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:32:24.309 [DEBUG] [Thread-22802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:32:24.309 [DEBUG] [Thread-22802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:32:24.309 [DEBUG] [Thread-22802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:32:24.350 [DEBUG] [Thread-22802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:32:24.350 [DEBUG] [Thread-22802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:32:24.354 [DEBUG] [Thread-22802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:32:24.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:32:24.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:32:24.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:32:24.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:32:24.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:32:24.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:32:24.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:32:24.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:32:24.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:32:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.022281 -999.00  +12.20  10.81     86   +9.90 1 1 1 2 1     0    0 2.83 20.25 ZNESW 10.8 10.8 167.0 15.4 12.8 -22.1 12.6 -21.8 12.4 -20.2 12.7 -21.3
2025-12-26T02:32:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:32:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:32:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.022281
2025-12-26T02:32:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:32:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:32:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:32:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:32:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:32:24.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:31:55', tmtdew=2.72, humidity=83.13, cloud=0.0, wind=16.82, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:32:05.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:31:00')
2025-12-26T02:32:24.380 [DEBUG] [Thread-22802] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:32:24.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:32:24.477 [DEBUG] [Thread-22805] [transport.py] [_log()] starting thread (client mode): 0xbbfcdd50
2025-12-26T02:32:24.477 [DEBUG] [Thread-22805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:32:24.491 [DEBUG] [Thread-22805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:32:24.491 [INFO] [Thread-22805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:32:24.499 [DEBUG] [Thread-22805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:32:24.499 [DEBUG] [Thread-22805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:32:24.499 [DEBUG] [Thread-22805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:32:24.499 [DEBUG] [Thread-22805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] client lang: <none>
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] server lang: <none>
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] kex follows: False
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:32:24.500 [DEBUG] [Thread-22805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:32:24.501 [DEBUG] [Thread-22805] [transport.py] [_log()] Compression: none
2025-12-26T02:32:24.501 [DEBUG] [Thread-22805] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:32:24.559 [DEBUG] [Thread-22805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:32:24.560 [DEBUG] [Thread-22805] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:32:24.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:32:24.562 [DEBUG] [Thread-22805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:32:24.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:32:24.619 [DEBUG] [Thread-22805] [transport.py] [_log()] userauth is OK
2025-12-26T02:32:24.619 [DEBUG] [Thread-22805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:32:24.620 [DEBUG] [Thread-22805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:32:24.620 [DEBUG] [Thread-22805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:32:24.620 [DEBUG] [Thread-22805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:32:24.640 [INFO] [Thread-22805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:32:24.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-26T02:32:24.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:32:25.474 [DEBUG] [Thread-22805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:32:25.474 [DEBUG] [Thread-22805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:32:25.522 [DEBUG] [Thread-22805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:32:25.523 [DEBUG] [Thread-22805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:32:25.531 [DEBUG] [Thread-22805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:32:25.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:32:25.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-26T02:32:25.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-26T02:32:25.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:32:25.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:32:25.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:32:25.567 [DEBUG] [Thread-22805] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:32:35.812 [DEBUG] [Thread-22807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:47.708 [DEBUG] [Thread-22808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:48.770 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:48.770 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:50.848 [DEBUG] [Thread-22809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:32:55.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:32:55.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:32:55.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-26T02:32:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 32, 27), 2.72, 83.17, 0.0, 15.83, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:32:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:32:27
2025-12-26T02:32:56.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:32:56.561 [DEBUG] [Thread-22810] [transport.py] [_log()] starting thread (client mode): 0xbbfccc10
2025-12-26T02:32:56.561 [DEBUG] [Thread-22810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:32:56.582 [DEBUG] [Thread-22810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:32:56.582 [INFO] [Thread-22810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] client lang: <none>
2025-12-26T02:32:56.585 [DEBUG] [Thread-22810] [transport.py] [_log()] server lang: <none>
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] kex follows: False
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] Compression: none
2025-12-26T02:32:56.586 [DEBUG] [Thread-22810] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:32:56.602 [DEBUG] [Thread-22810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:32:56.603 [DEBUG] [Thread-22810] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:32:56.603 [DEBUG] [Thread-22810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:32:56.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:32:56.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:32:56.606 [DEBUG] [Thread-22810] [transport.py] [_log()] userauth is OK
2025-12-26T02:32:56.606 [DEBUG] [Thread-22810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:32:56.606 [DEBUG] [Thread-22810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:32:56.606 [DEBUG] [Thread-22810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:32:56.606 [DEBUG] [Thread-22810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:32:56.633 [INFO] [Thread-22810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:32:56.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:32:57.221 [DEBUG] [Thread-22810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:32:57.221 [DEBUG] [Thread-22810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:32:57.221 [DEBUG] [Thread-22810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:32:57.262 [DEBUG] [Thread-22810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:32:57.262 [DEBUG] [Thread-22810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:32:57.265 [DEBUG] [Thread-22810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:32:57.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:32:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:32:57.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:32:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:32:57.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:32:57.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:32:57.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:32:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:32:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:32:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.022628 -999.00  +12.20  11.76     86   +9.90 1 1 1 2 1     0    0 2.80 19.20 ZNESW 11.8 11.8 165.4 14.2 12.7 -22.0 12.6 -21.7 12.4 -20.2 12.8 -21.1
2025-12-26T02:32:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:32:57.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:32:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.022628
2025-12-26T02:32:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:32:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:32:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:32:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:32:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:32:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:32:27', tmtdew=2.72, humidity=83.17, cloud=0.0, wind=15.83, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:32:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:31:00')
2025-12-26T02:32:57.292 [DEBUG] [Thread-22810] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:32:57.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-26T02:32:57.385 [DEBUG] [Thread-22813] [transport.py] [_log()] starting thread (client mode): 0xb9592ef0
2025-12-26T02:32:57.385 [DEBUG] [Thread-22813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:32:57.400 [DEBUG] [Thread-22813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:32:57.400 [INFO] [Thread-22813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] client lang: <none>
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] server lang: <none>
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] kex follows: False
2025-12-26T02:32:57.408 [DEBUG] [Thread-22813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:32:57.409 [DEBUG] [Thread-22813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:32:57.409 [DEBUG] [Thread-22813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:32:57.409 [DEBUG] [Thread-22813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:32:57.409 [DEBUG] [Thread-22813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:32:57.409 [DEBUG] [Thread-22813] [transport.py] [_log()] Compression: none
2025-12-26T02:32:57.409 [DEBUG] [Thread-22813] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:32:57.467 [DEBUG] [Thread-22813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:32:57.468 [DEBUG] [Thread-22813] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:32:57.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:32:57.469 [DEBUG] [Thread-22813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:32:57.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:32:57.523 [DEBUG] [Thread-22813] [transport.py] [_log()] userauth is OK
2025-12-26T02:32:57.524 [DEBUG] [Thread-22813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:32:57.524 [DEBUG] [Thread-22813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:32:57.524 [DEBUG] [Thread-22813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:32:57.524 [DEBUG] [Thread-22813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:32:57.542 [INFO] [Thread-22813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:32:57.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-26T02:32:57.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:32:58.363 [DEBUG] [Thread-22813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:32:58.363 [DEBUG] [Thread-22813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:32:58.411 [DEBUG] [Thread-22813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:32:58.411 [DEBUG] [Thread-22813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:32:58.420 [DEBUG] [Thread-22813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:32:58.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:32:58.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-26T02:32:58.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-26T02:32:58.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:32:58.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:32:58.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:32:58.457 [DEBUG] [Thread-22813] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:33:05.881 [DEBUG] [Thread-22815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:33:20.928 [DEBUG] [Thread-22816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:33:28.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:33:28.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:33:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:33:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 32, 59), 2.71, 83.22, 0.0, 16.55, 12.17, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:33:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:32:59
2025-12-26T02:33:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:33:29.445 [DEBUG] [Thread-22817] [transport.py] [_log()] starting thread (client mode): 0xb95463e0
2025-12-26T02:33:29.445 [DEBUG] [Thread-22817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:33:29.466 [DEBUG] [Thread-22817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:33:29.466 [INFO] [Thread-22817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] client lang: <none>
2025-12-26T02:33:29.467 [DEBUG] [Thread-22817] [transport.py] [_log()] server lang: <none>
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] kex follows: False
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] Compression: none
2025-12-26T02:33:29.468 [DEBUG] [Thread-22817] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:33:29.485 [DEBUG] [Thread-22817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:33:29.486 [DEBUG] [Thread-22817] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:33:29.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:33:29.487 [DEBUG] [Thread-22817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:33:29.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:33:29.489 [DEBUG] [Thread-22817] [transport.py] [_log()] userauth is OK
2025-12-26T02:33:29.489 [DEBUG] [Thread-22817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:33:29.489 [DEBUG] [Thread-22817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:33:29.489 [DEBUG] [Thread-22817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:33:29.490 [DEBUG] [Thread-22817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:33:29.508 [INFO] [Thread-22817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:33:29.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:33:30.140 [DEBUG] [Thread-22817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:33:30.140 [DEBUG] [Thread-22817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:33:30.140 [DEBUG] [Thread-22817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:33:30.181 [DEBUG] [Thread-22817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:33:30.181 [DEBUG] [Thread-22817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:33:30.185 [DEBUG] [Thread-22817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:33:30.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:33:30.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:33:30.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:33:30.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:33:30.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:33:30.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:33:30.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:33:30.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:33:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:33:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.022975 -999.00  +12.20  10.61     86   +9.90 1 1 1 2 1     0    0 2.78 17.67 ZNESW 10.6 10.6 162.8 14.4 12.7 -22.0 12.6 -21.7 12.4 -20.0 12.7 -21.0
2025-12-26T02:33:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:33:30.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:33:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.022975
2025-12-26T02:33:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:33:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:33:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:33:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:33:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:33:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:32:59', tmtdew=2.71, humidity=83.22, cloud=0.0, wind=16.55, temperature=12.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:33:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:31:00')
2025-12-26T02:33:30.211 [DEBUG] [Thread-22817] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:33:30.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-26T02:33:30.307 [DEBUG] [Thread-22820] [transport.py] [_log()] starting thread (client mode): 0xbbfce680
2025-12-26T02:33:30.307 [DEBUG] [Thread-22820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:33:30.325 [DEBUG] [Thread-22820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:33:30.326 [INFO] [Thread-22820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:33:30.333 [DEBUG] [Thread-22820] [transport.py] [_log()] client lang: <none>
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] server lang: <none>
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] kex follows: False
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] Compression: none
2025-12-26T02:33:30.334 [DEBUG] [Thread-22820] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:33:30.394 [DEBUG] [Thread-22820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:33:30.395 [DEBUG] [Thread-22820] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:33:30.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:33:30.396 [DEBUG] [Thread-22820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:33:30.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:33:30.451 [DEBUG] [Thread-22820] [transport.py] [_log()] userauth is OK
2025-12-26T02:33:30.452 [DEBUG] [Thread-22820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:33:30.452 [DEBUG] [Thread-22820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:33:30.452 [DEBUG] [Thread-22820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:33:30.452 [DEBUG] [Thread-22820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:33:30.473 [INFO] [Thread-22820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:33:30.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-26T02:33:30.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:33:31.287 [DEBUG] [Thread-22820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:33:31.287 [DEBUG] [Thread-22820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:33:31.335 [DEBUG] [Thread-22820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:33:31.336 [DEBUG] [Thread-22820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:33:31.345 [DEBUG] [Thread-22820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:33:31.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:33:31.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:33:31.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:33:31.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:33:31.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:33:31.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:33:31.382 [DEBUG] [Thread-22820] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:33:35.960 [DEBUG] [Thread-22822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:33:47.763 [DEBUG] [Thread-22823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:33:48.971 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:33:48.972 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:33:51.010 [DEBUG] [Thread-22824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:34:01.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:34:01.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:34:02.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 33, 31), 2.71, 83.23, 0.0, 15.39, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:34:02.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:33:31
2025-12-26T02:34:02.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:34:02.388 [DEBUG] [Thread-22825] [transport.py] [_log()] starting thread (client mode): 0xb9559de0
2025-12-26T02:34:02.388 [DEBUG] [Thread-22825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:34:02.409 [DEBUG] [Thread-22825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:34:02.409 [INFO] [Thread-22825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] client lang: <none>
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] server lang: <none>
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] kex follows: False
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:34:02.410 [DEBUG] [Thread-22825] [transport.py] [_log()] Compression: none
2025-12-26T02:34:02.411 [DEBUG] [Thread-22825] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:34:02.419 [DEBUG] [Thread-22825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:34:02.419 [DEBUG] [Thread-22825] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:34:02.419 [DEBUG] [Thread-22825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:34:02.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:34:02.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:34:02.421 [DEBUG] [Thread-22825] [transport.py] [_log()] userauth is OK
2025-12-26T02:34:02.422 [DEBUG] [Thread-22825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:34:02.422 [DEBUG] [Thread-22825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:34:02.422 [DEBUG] [Thread-22825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:34:02.422 [DEBUG] [Thread-22825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:34:02.437 [INFO] [Thread-22825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:34:02.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:34:03.008 [DEBUG] [Thread-22825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:34:03.008 [DEBUG] [Thread-22825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:34:03.009 [DEBUG] [Thread-22825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:34:03.049 [DEBUG] [Thread-22825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:34:03.050 [DEBUG] [Thread-22825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:34:03.052 [DEBUG] [Thread-22825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:34:03.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:34:03.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:34:03.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:34:03.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:34:03.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:34:03.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:34:03.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:34:03.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:34:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:34:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.023322 -999.00  +12.20   9.19     86   +9.90 1 1 1 2 1     0    0 2.74 16.56 ZNESW 9.2 9.2 158.0 15.0 12.8 -22.0 12.6 -21.7 12.4 -20.1 12.7 -21.1
2025-12-26T02:34:03.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:34:03.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:34:03.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.023322
2025-12-26T02:34:03.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:34:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:34:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:34:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:34:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:34:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:33:31', tmtdew=2.71, humidity=83.23, cloud=0.0, wind=15.39, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:33:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:31:00')
2025-12-26T02:34:03.077 [DEBUG] [Thread-22825] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:34:03.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-26T02:34:03.170 [DEBUG] [Thread-22828] [transport.py] [_log()] starting thread (client mode): 0xb95f2110
2025-12-26T02:34:03.170 [DEBUG] [Thread-22828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:34:03.187 [DEBUG] [Thread-22828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:34:03.187 [INFO] [Thread-22828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:34:03.199 [DEBUG] [Thread-22828] [transport.py] [_log()] client lang: <none>
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] server lang: <none>
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] kex follows: False
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] Compression: none
2025-12-26T02:34:03.200 [DEBUG] [Thread-22828] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:34:03.252 [DEBUG] [Thread-22828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:34:03.252 [DEBUG] [Thread-22828] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:34:03.253 [DEBUG] [Thread-22828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:34:03.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:34:03.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:34:03.308 [DEBUG] [Thread-22828] [transport.py] [_log()] userauth is OK
2025-12-26T02:34:03.308 [DEBUG] [Thread-22828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:34:03.308 [DEBUG] [Thread-22828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:34:03.308 [DEBUG] [Thread-22828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:34:03.308 [DEBUG] [Thread-22828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:34:03.327 [INFO] [Thread-22828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:34:03.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-26T02:34:03.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:34:04.148 [DEBUG] [Thread-22828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:34:04.149 [DEBUG] [Thread-22828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:34:04.196 [DEBUG] [Thread-22828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:34:04.196 [DEBUG] [Thread-22828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:34:04.205 [DEBUG] [Thread-22828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:34:04.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:34:04.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-26T02:34:04.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-26T02:34:04.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:34:04.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:34:04.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:34:04.240 [DEBUG] [Thread-22828] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:34:06.039 [DEBUG] [Thread-22830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:21.091 [DEBUG] [Thread-22831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:25.481 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:34:34.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:34:34.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-26T02:34:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 34, 3), 2.71, 83.2, 0.0, 15.81, 12.17, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:34:35.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:34:03
2025-12-26T02:34:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:34:35.303 [DEBUG] [Thread-22832] [transport.py] [_log()] starting thread (client mode): 0xb9590580
2025-12-26T02:34:35.303 [DEBUG] [Thread-22832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:34:35.323 [DEBUG] [Thread-22832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:34:35.323 [INFO] [Thread-22832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] client lang: <none>
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] server lang: <none>
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] kex follows: False
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:34:35.325 [DEBUG] [Thread-22832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:34:35.326 [DEBUG] [Thread-22832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:34:35.326 [DEBUG] [Thread-22832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:34:35.326 [DEBUG] [Thread-22832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:34:35.326 [DEBUG] [Thread-22832] [transport.py] [_log()] Compression: none
2025-12-26T02:34:35.326 [DEBUG] [Thread-22832] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:34:35.336 [DEBUG] [Thread-22832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:34:35.336 [DEBUG] [Thread-22832] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:34:35.336 [DEBUG] [Thread-22832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:34:35.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:34:35.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:34:35.337 [DEBUG] [Thread-22832] [transport.py] [_log()] userauth is OK
2025-12-26T02:34:35.337 [DEBUG] [Thread-22832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:34:35.337 [DEBUG] [Thread-22832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:34:35.337 [DEBUG] [Thread-22832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:34:35.337 [DEBUG] [Thread-22832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:34:35.363 [INFO] [Thread-22832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:34:35.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:34:35.926 [DEBUG] [Thread-22832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:34:35.926 [DEBUG] [Thread-22832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:34:35.926 [DEBUG] [Thread-22832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:34:35.966 [DEBUG] [Thread-22832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:34:35.966 [DEBUG] [Thread-22832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:34:35.968 [DEBUG] [Thread-22832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:34:35.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:34:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:34:35.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:34:35.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:34:35.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:34:35.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:34:35.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.023670 -999.00  +12.20  13.26     86   +9.90 1 1 1 2 1     0    0 2.65 15.14 ZNESW 13.3 13.3 174.6 16.6 12.8 -21.9 12.6 -21.5 12.4 -19.7 12.7 -21.2
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.023670
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:34:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:34:03', tmtdew=2.71, humidity=83.2, cloud=0.0, wind=15.81, temperature=12.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:34:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:31:00')
2025-12-26T02:34:35.985 [DEBUG] [Thread-22832] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:34: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-26T02:34:36.069 [DEBUG] [Thread-22835] [transport.py] [_log()] starting thread (client mode): 0xb95b3f10
2025-12-26T02:34:36.069 [DEBUG] [Thread-22835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:34:36.084 [DEBUG] [Thread-22835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:34:36.084 [INFO] [Thread-22835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] client lang: <none>
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] server lang: <none>
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] kex follows: False
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] Compression: none
2025-12-26T02:34:36.092 [DEBUG] [Thread-22835] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:34:36.120 [DEBUG] [Thread-22837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:36.148 [DEBUG] [Thread-22835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:34:36.148 [DEBUG] [Thread-22835] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:34:36.148 [DEBUG] [Thread-22835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:34:36.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:34:36.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:34:36.205 [DEBUG] [Thread-22835] [transport.py] [_log()] userauth is OK
2025-12-26T02:34:36.206 [DEBUG] [Thread-22835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:34:36.206 [DEBUG] [Thread-22835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:34:36.206 [DEBUG] [Thread-22835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:34:36.206 [DEBUG] [Thread-22835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:34:36.220 [INFO] [Thread-22835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:34:36.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-26T02:34:36.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:34:37.048 [DEBUG] [Thread-22835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:34:37.048 [DEBUG] [Thread-22835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:34:37.097 [DEBUG] [Thread-22835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:34:37.098 [DEBUG] [Thread-22835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:34:37.106 [DEBUG] [Thread-22835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:34:37.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:34:37.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-26T02:34:37.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:34:37.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:34:37.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:34:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:34:37.140 [DEBUG] [Thread-22835] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:34:47.820 [DEBUG] [Thread-22838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:49.172 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:49.173 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:34:51.162 [DEBUG] [Thread-22839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:06.198 [DEBUG] [Thread-22840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:35:07.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:35:07.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-26T02:35:07.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 34, 35), 2.71, 83.68, 0.0, 15.23, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:35:07.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:34:35
2025-12-26T02:35:07.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:35:08.142 [DEBUG] [Thread-22841] [transport.py] [_log()] starting thread (client mode): 0xb9544940
2025-12-26T02:35:08.142 [DEBUG] [Thread-22841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:35:08.166 [DEBUG] [Thread-22841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:35:08.166 [INFO] [Thread-22841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] client lang: <none>
2025-12-26T02:35:08.167 [DEBUG] [Thread-22841] [transport.py] [_log()] server lang: <none>
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] kex follows: False
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] Compression: none
2025-12-26T02:35:08.168 [DEBUG] [Thread-22841] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:35:08.176 [DEBUG] [Thread-22841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:35:08.177 [DEBUG] [Thread-22841] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:35:08.177 [DEBUG] [Thread-22841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:35:08.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:35:08.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:35:08.178 [DEBUG] [Thread-22841] [transport.py] [_log()] userauth is OK
2025-12-26T02:35:08.178 [DEBUG] [Thread-22841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:35:08.178 [DEBUG] [Thread-22841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:35:08.178 [DEBUG] [Thread-22841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:35:08.178 [DEBUG] [Thread-22841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:35:08.191 [INFO] [Thread-22841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:35:08.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:35:14.506 [DEBUG] [Thread-22841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:35:14.506 [DEBUG] [Thread-22841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:35:14.506 [DEBUG] [Thread-22841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:35:14.546 [DEBUG] [Thread-22841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:35:14.546 [DEBUG] [Thread-22841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:35:14.549 [DEBUG] [Thread-22841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:35:14.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:35:14.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:35:14.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:35:14.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:35:14.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:35:14.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:35:14.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.023670 -999.00  +12.20  13.26     86   +9.90 1 1 1 2 1     0    0 2.65 15.14 ZNESW 13.3 13.3 174.6 16.6 12.8 -21.9 12.6 -21.5 12.4 -19.7 12.7 -21.2
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.023670
2025-12-26T02:35:14.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:35:14.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:35:14.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:35:14.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:35:14.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:35:14.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:34:35', tmtdew=2.71, humidity=83.68, cloud=0.0, wind=15.23, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:34:05.088', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:33:00')
2025-12-26T02:35:14.575 [DEBUG] [Thread-22841] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:35:14.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-26T02:35:14.659 [DEBUG] [Thread-22844] [transport.py] [_log()] starting thread (client mode): 0xb9558250
2025-12-26T02:35:14.659 [DEBUG] [Thread-22844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:35:14.676 [DEBUG] [Thread-22844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:35:14.676 [INFO] [Thread-22844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] client lang: <none>
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] server lang: <none>
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] kex follows: False
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:35:14.684 [DEBUG] [Thread-22844] [transport.py] [_log()] Compression: none
2025-12-26T02:35:14.685 [DEBUG] [Thread-22844] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:35:14.741 [DEBUG] [Thread-22844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:35:14.741 [DEBUG] [Thread-22844] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:35:14.741 [DEBUG] [Thread-22844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:35:14.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:35:14.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:35:14.798 [DEBUG] [Thread-22844] [transport.py] [_log()] userauth is OK
2025-12-26T02:35:14.798 [DEBUG] [Thread-22844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:35:14.798 [DEBUG] [Thread-22844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:35:14.798 [DEBUG] [Thread-22844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:35:14.798 [DEBUG] [Thread-22844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:35:14.814 [INFO] [Thread-22844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:35:14.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-26T02:35:14.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:35:15.690 [DEBUG] [Thread-22844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:35:15.690 [DEBUG] [Thread-22844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:35:15.738 [DEBUG] [Thread-22844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:35:15.738 [DEBUG] [Thread-22844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:35:15.747 [DEBUG] [Thread-22844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:35:15.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:35:15.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-26T02:35:15.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-26T02:35:15.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:35:15.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:35:15.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:35:15.779 [DEBUG] [Thread-22844] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:35:21.233 [DEBUG] [Thread-22846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:36.284 [DEBUG] [Thread-22847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:35:45.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:35:45.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:35:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 35, 39), 2.72, 83.63, 0.0, 16.34, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:35:46.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:35:39
2025-12-26T02:35:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:35:46.793 [DEBUG] [Thread-22848] [transport.py] [_log()] starting thread (client mode): 0xb9559b40
2025-12-26T02:35:46.793 [DEBUG] [Thread-22848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:35:46.814 [DEBUG] [Thread-22848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:35:46.814 [INFO] [Thread-22848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:35:46.817 [DEBUG] [Thread-22848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] client lang: <none>
2025-12-26T02:35:46.818 [DEBUG] [Thread-22848] [transport.py] [_log()] server lang: <none>
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] kex follows: False
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] Compression: none
2025-12-26T02:35:46.819 [DEBUG] [Thread-22848] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:35:46.837 [DEBUG] [Thread-22848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:35:46.837 [DEBUG] [Thread-22848] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:35:46.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:35:46.839 [DEBUG] [Thread-22848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:35:46.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:35:46.841 [DEBUG] [Thread-22848] [transport.py] [_log()] userauth is OK
2025-12-26T02:35:46.841 [DEBUG] [Thread-22848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:35:46.841 [DEBUG] [Thread-22848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:35:46.842 [DEBUG] [Thread-22848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:35:46.842 [DEBUG] [Thread-22848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:35:46.878 [INFO] [Thread-22848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:35:46.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:35:47.515 [DEBUG] [Thread-22848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:35:47.516 [DEBUG] [Thread-22848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:35:47.516 [DEBUG] [Thread-22848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:35:47.556 [DEBUG] [Thread-22848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:35:47.556 [DEBUG] [Thread-22848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:35:47.559 [DEBUG] [Thread-22848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:35:47.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:35:47.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:35:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:35:47.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:35:47.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:35:47.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:35:47.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:35:47.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.024364 -999.00  +12.20   9.64     85   +9.90 1 1 1 2 1     0    0 2.58 12.60 ZNESW 9.6 9.6 153.2 14.4 12.8 -21.9 12.6 -21.4 12.4 -19.8 12.7 -20.9
2025-12-26T02:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:35:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.024364
2025-12-26T02:35:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:35:47.584 [DEBUG] [Thread-22848] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:35:47.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:35:47.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:35:47.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:35:47.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:35:47.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:35:39', tmtdew=2.72, humidity=83.63, cloud=0.0, wind=16.34, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:35:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:33:00')
2025-12-26T02:35:47.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-26T02:35:47.688 [DEBUG] [Thread-22851] [transport.py] [_log()] starting thread (client mode): 0xb95f20e0
2025-12-26T02:35:47.688 [DEBUG] [Thread-22851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:35:47.704 [DEBUG] [Thread-22851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:35:47.704 [INFO] [Thread-22851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] client lang: <none>
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] server lang: <none>
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] kex follows: False
2025-12-26T02:35:47.712 [DEBUG] [Thread-22851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:35:47.713 [DEBUG] [Thread-22851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:35:47.713 [DEBUG] [Thread-22851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:35:47.713 [DEBUG] [Thread-22851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:35:47.713 [DEBUG] [Thread-22851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:35:47.713 [DEBUG] [Thread-22851] [transport.py] [_log()] Compression: none
2025-12-26T02:35:47.713 [DEBUG] [Thread-22851] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:35:47.777 [DEBUG] [Thread-22851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:35:47.778 [DEBUG] [Thread-22851] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:35:47.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:35:47.779 [DEBUG] [Thread-22851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:35:47.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:35:47.832 [DEBUG] [Thread-22851] [transport.py] [_log()] userauth is OK
2025-12-26T02:35:47.833 [DEBUG] [Thread-22851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:35:47.833 [DEBUG] [Thread-22851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:35:47.833 [DEBUG] [Thread-22851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:35:47.833 [DEBUG] [Thread-22851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:35:47.850 [INFO] [Thread-22851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:35:47.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-26T02:35:47.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:35:47.873 [DEBUG] [Thread-22853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:48.665 [DEBUG] [Thread-22851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:35:48.665 [DEBUG] [Thread-22851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:35:48.713 [DEBUG] [Thread-22851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:35:48.714 [DEBUG] [Thread-22851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:35:48.722 [DEBUG] [Thread-22851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:35:48.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:35:48.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:35:48.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:35:48.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:35:48.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:35:48.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:35:48.758 [DEBUG] [Thread-22851] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:35:49.371 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:49.372 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:35:51.319 [DEBUG] [Thread-22854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:06.362 [DEBUG] [Thread-22855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:36:18.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:36:18.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-26T02:36:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 36, 12), 2.73, 83.57, 0.0, 15.62, 12.09, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:36:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:36:12
2025-12-26T02:36:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:36:19.766 [DEBUG] [Thread-22856] [transport.py] [_log()] starting thread (client mode): 0xb9547700
2025-12-26T02:36:19.767 [DEBUG] [Thread-22856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:36:19.782 [DEBUG] [Thread-22856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:36:19.782 [INFO] [Thread-22856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] client lang: <none>
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] server lang: <none>
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] kex follows: False
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] Compression: none
2025-12-26T02:36:19.785 [DEBUG] [Thread-22856] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:36:19.803 [DEBUG] [Thread-22856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:36:19.803 [DEBUG] [Thread-22856] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:36:19.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:36:19.804 [DEBUG] [Thread-22856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:36:19.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:36:19.806 [DEBUG] [Thread-22856] [transport.py] [_log()] userauth is OK
2025-12-26T02:36:19.807 [DEBUG] [Thread-22856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:36:19.807 [DEBUG] [Thread-22856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:36:19.807 [DEBUG] [Thread-22856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:36:19.807 [DEBUG] [Thread-22856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:36:19.831 [INFO] [Thread-22856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:36:19.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:36:20.588 [DEBUG] [Thread-22856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:36:20.589 [DEBUG] [Thread-22856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:36:20.589 [DEBUG] [Thread-22856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:36:20.630 [DEBUG] [Thread-22856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:36:20.630 [DEBUG] [Thread-22856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:36:20.634 [DEBUG] [Thread-22856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:36:20.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:36:20.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:36:20.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:36:20.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:36:20.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:36:20.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:36:20.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:36:20.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:36:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:36:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.024711 -999.00  +12.30   7.66     85  +10.00 1 1 1 2 1     0    0 2.59 10.89 ZNESW 7.7 7.7 165.8 11.4 12.8 -21.9 12.6 -21.6 12.4 -20.0 12.7 -21.0
2025-12-26T02:36:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:36:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:36:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.024711
2025-12-26T02:36:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:36:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:36:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:36:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:36:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:36:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:36:12', tmtdew=2.73, humidity=83.57, cloud=0.0, wind=15.62, temperature=12.09, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:35:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:33:00')
2025-12-26T02:36:20.661 [DEBUG] [Thread-22856] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:36:20.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:36:20.755 [DEBUG] [Thread-22859] [transport.py] [_log()] starting thread (client mode): 0xb95599c0
2025-12-26T02:36:20.755 [DEBUG] [Thread-22859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:36:20.770 [DEBUG] [Thread-22859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:36:20.770 [INFO] [Thread-22859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:36:20.778 [DEBUG] [Thread-22859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:36:20.779 [DEBUG] [Thread-22859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] client lang: <none>
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] server lang: <none>
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] kex follows: False
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] Compression: none
2025-12-26T02:36:20.780 [DEBUG] [Thread-22859] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:36:20.838 [DEBUG] [Thread-22859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:36:20.839 [DEBUG] [Thread-22859] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:36:20.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:36:20.840 [DEBUG] [Thread-22859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:36:20.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:36:20.894 [DEBUG] [Thread-22859] [transport.py] [_log()] userauth is OK
2025-12-26T02:36:20.895 [DEBUG] [Thread-22859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:36:20.895 [DEBUG] [Thread-22859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:36:20.895 [DEBUG] [Thread-22859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:36:20.895 [DEBUG] [Thread-22859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:36:20.913 [INFO] [Thread-22859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:36:20.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:36:20.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:36:21.397 [DEBUG] [Thread-22861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:21.757 [DEBUG] [Thread-22859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:36:21.757 [DEBUG] [Thread-22859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:36:21.805 [DEBUG] [Thread-22859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:36:21.805 [DEBUG] [Thread-22859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:36:21.814 [DEBUG] [Thread-22859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:36:21.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:36:21.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:36:21.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-26T02:36:21.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:36:21.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:36:21.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:36:21.851 [DEBUG] [Thread-22859] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:36:36.443 [DEBUG] [Thread-22862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:47.949 [DEBUG] [Thread-22863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:49.573 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:49.574 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:51.483 [DEBUG] [Thread-22864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:36:51.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:36:51.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:36:51.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-26T02:36:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 36, 44), 2.73, 83.57, 0.0, 15.79, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:36:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:36:44
2025-12-26T02:36:52.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:36:52.847 [DEBUG] [Thread-22865] [transport.py] [_log()] starting thread (client mode): 0xb9544b20
2025-12-26T02:36:52.847 [DEBUG] [Thread-22865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:36:52.867 [DEBUG] [Thread-22865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:36:52.868 [INFO] [Thread-22865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] client lang: <none>
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] server lang: <none>
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] kex follows: False
2025-12-26T02:36:52.871 [DEBUG] [Thread-22865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:36:52.872 [DEBUG] [Thread-22865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:36:52.872 [DEBUG] [Thread-22865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:36:52.872 [DEBUG] [Thread-22865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:36:52.872 [DEBUG] [Thread-22865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:36:52.872 [DEBUG] [Thread-22865] [transport.py] [_log()] Compression: none
2025-12-26T02:36:52.872 [DEBUG] [Thread-22865] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:36:52.889 [DEBUG] [Thread-22865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:36:52.890 [DEBUG] [Thread-22865] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:36:52.890 [DEBUG] [Thread-22865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:36:52.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:36:52.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:36:52.892 [DEBUG] [Thread-22865] [transport.py] [_log()] userauth is OK
2025-12-26T02:36:52.893 [DEBUG] [Thread-22865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:36:52.893 [DEBUG] [Thread-22865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:36:52.893 [DEBUG] [Thread-22865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:36:52.893 [DEBUG] [Thread-22865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:36:52.918 [INFO] [Thread-22865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:36:52.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:36:53.546 [DEBUG] [Thread-22865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:36:53.546 [DEBUG] [Thread-22865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:36:53.547 [DEBUG] [Thread-22865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:36:53.587 [DEBUG] [Thread-22865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:36:53.587 [DEBUG] [Thread-22865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:36:53.591 [DEBUG] [Thread-22865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:36:53.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:36:53.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:36:53.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:36:53.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:36:53.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:36:53.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:36:53.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:36:53.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:36:53.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:36:53.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.025059 -999.00  +12.20  10.12     85   +9.90 1 1 1 2 1     0    0 2.50 10.09 ZNESW 10.1 10.1 163.4 12.1 12.8 -21.9 12.6 -21.6 12.3 -20.0 12.7 -20.9
2025-12-26T02:36:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:36:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:36:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.025059
2025-12-26T02:36:53.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:36:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:36:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:36:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:36:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:36:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:36:44', tmtdew=2.73, humidity=83.57, cloud=0.0, wind=15.79, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:36:05.098', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:33:00')
2025-12-26T02:36:53.620 [DEBUG] [Thread-22865] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:36:53.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-26T02:36:53.712 [DEBUG] [Thread-22868] [transport.py] [_log()] starting thread (client mode): 0xb95f1ae0
2025-12-26T02:36:53.713 [DEBUG] [Thread-22868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:36:53.727 [DEBUG] [Thread-22868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:36:53.728 [INFO] [Thread-22868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:36:53.735 [DEBUG] [Thread-22868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:36:53.735 [DEBUG] [Thread-22868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] client lang: <none>
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] server lang: <none>
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] kex follows: False
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] Compression: none
2025-12-26T02:36:53.736 [DEBUG] [Thread-22868] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:36:53.792 [DEBUG] [Thread-22868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:36:53.792 [DEBUG] [Thread-22868] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:36:53.793 [DEBUG] [Thread-22868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:36:53.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:36:53.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:36:53.848 [DEBUG] [Thread-22868] [transport.py] [_log()] userauth is OK
2025-12-26T02:36:53.849 [DEBUG] [Thread-22868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:36:53.849 [DEBUG] [Thread-22868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:36:53.849 [DEBUG] [Thread-22868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:36:53.849 [DEBUG] [Thread-22868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:36:53.869 [INFO] [Thread-22868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:36:53.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-26T02:36:53.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:36:54.684 [DEBUG] [Thread-22868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:36:54.685 [DEBUG] [Thread-22868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:36:54.736 [DEBUG] [Thread-22868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:36:54.737 [DEBUG] [Thread-22868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:36:54.747 [DEBUG] [Thread-22868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:36:54.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:36:54.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-26T02:36:54.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-26T02:36:54.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:36:54.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:36:54.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:36:54.785 [DEBUG] [Thread-22868] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:37:06.516 [DEBUG] [Thread-22870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:21.562 [DEBUG] [Thread-22871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:24.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:37:24.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:37:24.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-26T02:37:25.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 37, 16), 2.74, 83.57, 0.0, 17.03, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:37:25.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:37:16
2025-12-26T02:37:25.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:37:25.763 [DEBUG] [Thread-22872] [transport.py] [_log()] starting thread (client mode): 0xb9591660
2025-12-26T02:37:25.763 [DEBUG] [Thread-22872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:37:25.784 [DEBUG] [Thread-22872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:37:25.784 [INFO] [Thread-22872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] client lang: <none>
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] server lang: <none>
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] kex follows: False
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:37:25.787 [DEBUG] [Thread-22872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:37:25.788 [DEBUG] [Thread-22872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:37:25.788 [DEBUG] [Thread-22872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:37:25.788 [DEBUG] [Thread-22872] [transport.py] [_log()] Compression: none
2025-12-26T02:37:25.788 [DEBUG] [Thread-22872] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:37:25.805 [DEBUG] [Thread-22872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:37:25.806 [DEBUG] [Thread-22872] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:37:25.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:37:25.806 [DEBUG] [Thread-22872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:37:25.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:37:25.849 [DEBUG] [Thread-22872] [transport.py] [_log()] userauth is OK
2025-12-26T02:37:25.849 [DEBUG] [Thread-22872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:37:25.849 [DEBUG] [Thread-22872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:37:25.850 [DEBUG] [Thread-22872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:37:25.850 [DEBUG] [Thread-22872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:37:25.875 [INFO] [Thread-22872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:37:25.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:37:26.703 [DEBUG] [Thread-22872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:37:26.704 [DEBUG] [Thread-22872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:37:26.704 [DEBUG] [Thread-22872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:37:26.744 [DEBUG] [Thread-22872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:37:26.744 [DEBUG] [Thread-22872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:37:26.747 [DEBUG] [Thread-22872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:37:26.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:37:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:37:26.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:37:26.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:37:26.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:37:26.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:37:26.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:37:26.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:37:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:37:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.025406 -999.00  +12.20  12.23     85   +9.90 1 1 1 2 1     0    0 2.53 9.24 ZNESW 12.2 12.2 165.4 15.1 12.8 -22.0 12.6 -21.4 12.4 -19.9 12.7 -21.0
2025-12-26T02:37:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:37:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:37:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.025406
2025-12-26T02:37:26.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:37:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:37:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:37:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:37:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:37:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:37:16', tmtdew=2.74, humidity=83.57, cloud=0.0, wind=17.03, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:36:35.078', atlas_cloud=1, atlas_rain=1, zp_data=[0.2757500000000004, 0.20674999999999955, 0.3122500000000006, 0.22949999999999804, 0.23349999999999937, 0.9112500000000008, nan, nan, 0.21999999999999886, 0.16000000000000014, 0.18774999999999942, 0.26900000000000013, 0.2259999999999991, 0.2442499999999992, 0.5, 0.4710000000000001, 0.22325000000000017, 0.2759999999999998, 0.2029999999999994, 0.33724999999999916, 0.2619999999999987, 0.3202499999999979, 0.3622500000000013, 0.3507499999999997, 0.2469999999999999, 0.2505000000000006, 0.34174999999999933, 0.39000000000000057, 0.4380000000000006, 0.4530000000000012, 0.4175000000000013, 0.5210000000000008, 0.30824999999999925], zp_timestamp='2025-12-26T00:33:00')
2025-12-26T02:37:26.774 [DEBUG] [Thread-22872] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:37:26.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-26T02:37:26.867 [DEBUG] [Thread-22875] [transport.py] [_log()] starting thread (client mode): 0xb9578400
2025-12-26T02:37:26.867 [DEBUG] [Thread-22875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:37:26.881 [DEBUG] [Thread-22875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:37:26.882 [INFO] [Thread-22875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:37:26.889 [DEBUG] [Thread-22875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:37:26.889 [DEBUG] [Thread-22875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:37:26.889 [DEBUG] [Thread-22875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:37:26.889 [DEBUG] [Thread-22875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] client lang: <none>
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] server lang: <none>
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] kex follows: False
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] Compression: none
2025-12-26T02:37:26.890 [DEBUG] [Thread-22875] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:37:26.947 [DEBUG] [Thread-22875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:37:26.947 [DEBUG] [Thread-22875] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:37:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:37:26.949 [DEBUG] [Thread-22875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:37:26.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:37:27.006 [DEBUG] [Thread-22875] [transport.py] [_log()] userauth is OK
2025-12-26T02:37:27.006 [DEBUG] [Thread-22875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:37:27.006 [DEBUG] [Thread-22875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:37:27.007 [DEBUG] [Thread-22875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:37:27.007 [DEBUG] [Thread-22875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:37:27.025 [INFO] [Thread-22875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:37:27.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-26T02:37:27.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:37:27.816 [DEBUG] [Thread-22875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:37:27.816 [DEBUG] [Thread-22875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:37:27.864 [DEBUG] [Thread-22875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:37:27.864 [DEBUG] [Thread-22875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:37:27.875 [DEBUG] [Thread-22875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:37:27.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:37:27.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:37:27.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-26T02:37:27.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:37:27.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:37:27.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:37:27.914 [DEBUG] [Thread-22875] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:37:36.599 [DEBUG] [Thread-22877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:48.020 [DEBUG] [Thread-22878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:49.773 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:49.773 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:51.649 [DEBUG] [Thread-22879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:37:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:37:57.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:37:57.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-26T02:37:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 37, 48), 2.74, 83.02, 0.0, 16.43, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:37:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:37:48
2025-12-26T02:37:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:37:58.874 [DEBUG] [Thread-22880] [transport.py] [_log()] starting thread (client mode): 0xb955ad70
2025-12-26T02:37:58.875 [DEBUG] [Thread-22880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:37:58.889 [DEBUG] [Thread-22880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:37:58.889 [INFO] [Thread-22880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:37:58.890 [DEBUG] [Thread-22880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:37:58.890 [DEBUG] [Thread-22880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:37:58.890 [DEBUG] [Thread-22880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:37:58.890 [DEBUG] [Thread-22880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:58.890 [DEBUG] [Thread-22880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] client lang: <none>
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] server lang: <none>
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] kex follows: False
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] Compression: none
2025-12-26T02:37:58.891 [DEBUG] [Thread-22880] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:37:58.901 [DEBUG] [Thread-22880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:37:58.901 [DEBUG] [Thread-22880] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:37:58.902 [DEBUG] [Thread-22880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:37:58.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:37:58.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:37:58.903 [DEBUG] [Thread-22880] [transport.py] [_log()] userauth is OK
2025-12-26T02:37:58.903 [DEBUG] [Thread-22880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:37:58.904 [DEBUG] [Thread-22880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:37:58.904 [DEBUG] [Thread-22880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:37:58.904 [DEBUG] [Thread-22880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:37:58.927 [INFO] [Thread-22880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:37:58.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:37:59.566 [DEBUG] [Thread-22880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:37:59.567 [DEBUG] [Thread-22880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:37:59.567 [DEBUG] [Thread-22880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:37:59.608 [DEBUG] [Thread-22880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:37:59.608 [DEBUG] [Thread-22880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:37:59.611 [DEBUG] [Thread-22880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:37:59.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:37:59.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:37:59.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:37:59.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:37:59.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:37:59.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:37:59.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:37:59.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:37:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:37:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.025753 -999.00  +12.20   8.72     85   +9.90 1 1 1 2 1     0    0 2.54 8.34 ZNESW 8.7 8.7 162.6 15.8 12.8 -21.9 12.6 -21.5 12.4 -19.9 12.7 -20.9
2025-12-26T02:37:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:37:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:37:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.025753
2025-12-26T02:37:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:37:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:37:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:37:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:37:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:37:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:37:48', tmtdew=2.74, humidity=83.02, cloud=0.0, wind=16.43, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:37:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.28275000000000006, 0.18325000000000102, 0.3142499999999995, 0.20699999999999896, 0.2965, 0.34025000000000105, nan, nan, 0.2024999999999988, 0.1509999999999998, 0.16375000000000028, 0.23799999999999955, 0.2530000000000001, 0.2882499999999997, 0.46499999999999986, 0.509999999999998, 0.2082499999999996, 0.2699999999999996, 0.192499999999999, 0.3067499999999992, 0.2754999999999974, 0.3512500000000003, 0.3232500000000016, 0.35025000000000084, 0.25899999999999856, 0.22799999999999976, 0.27775000000000105, 0.391, 0.43599999999999994, 0.43400000000000105, 0.36900000000000066, 0.49900000000000055, 0.2857499999999984], zp_timestamp='2025-12-26T00:37:00')
2025-12-26T02:37:59.640 [DEBUG] [Thread-22880] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:37:59.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-26T02:37:59.735 [DEBUG] [Thread-22883] [transport.py] [_log()] starting thread (client mode): 0xb955ae60
2025-12-26T02:37:59.735 [DEBUG] [Thread-22883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:37:59.749 [DEBUG] [Thread-22883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:37:59.750 [INFO] [Thread-22883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:37:59.757 [DEBUG] [Thread-22883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:37:59.758 [DEBUG] [Thread-22883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:37:59.758 [DEBUG] [Thread-22883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:37:59.758 [DEBUG] [Thread-22883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:59.758 [DEBUG] [Thread-22883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:37:59.758 [DEBUG] [Thread-22883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:59.758 [DEBUG] [Thread-22883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] client lang: <none>
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] server lang: <none>
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] kex follows: False
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:37:59.759 [DEBUG] [Thread-22883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:37:59.760 [DEBUG] [Thread-22883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:37:59.760 [DEBUG] [Thread-22883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:37:59.760 [DEBUG] [Thread-22883] [transport.py] [_log()] Compression: none
2025-12-26T02:37:59.760 [DEBUG] [Thread-22883] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:37:59.817 [DEBUG] [Thread-22883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:37:59.818 [DEBUG] [Thread-22883] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:37:59.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:37:59.819 [DEBUG] [Thread-22883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:37:59.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:37:59.877 [DEBUG] [Thread-22883] [transport.py] [_log()] userauth is OK
2025-12-26T02:37:59.877 [DEBUG] [Thread-22883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:37:59.877 [DEBUG] [Thread-22883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:37:59.877 [DEBUG] [Thread-22883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:37:59.877 [DEBUG] [Thread-22883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:37:59.896 [INFO] [Thread-22883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:37:59.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:37:59.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:38:00.689 [DEBUG] [Thread-22883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:38:00.690 [DEBUG] [Thread-22883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:38:00.738 [DEBUG] [Thread-22883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:38:00.738 [DEBUG] [Thread-22883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:38:00.748 [DEBUG] [Thread-22883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:38:00.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:38:00.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-26T02:38:00.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-26T02:38:00.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:38:00.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:38:00.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:38:00.785 [DEBUG] [Thread-22883] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:38:06.683 [DEBUG] [Thread-22885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:38:21.735 [DEBUG] [Thread-22886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:38:30.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:38:30.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:38:30.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-26T02:38:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 38, 20), 2.75, 82.98, 0.0, 17.1, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:38:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:38:20
2025-12-26T02:38:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:38:31.760 [DEBUG] [Thread-22887] [transport.py] [_log()] starting thread (client mode): 0xb9547070
2025-12-26T02:38:31.760 [DEBUG] [Thread-22887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:38:31.780 [DEBUG] [Thread-22887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:38:31.780 [INFO] [Thread-22887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] client lang: <none>
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] server lang: <none>
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] kex follows: False
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] Compression: none
2025-12-26T02:38:31.784 [DEBUG] [Thread-22887] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:38:31.800 [DEBUG] [Thread-22887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:38:31.800 [DEBUG] [Thread-22887] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:38:31.800 [DEBUG] [Thread-22887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:38:31.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:38:31.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:38:31.801 [DEBUG] [Thread-22887] [transport.py] [_log()] userauth is OK
2025-12-26T02:38:31.801 [DEBUG] [Thread-22887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:38:31.801 [DEBUG] [Thread-22887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:38:31.801 [DEBUG] [Thread-22887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:38:31.801 [DEBUG] [Thread-22887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:38:31.816 [INFO] [Thread-22887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:38:31.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:38:32.618 [DEBUG] [Thread-22887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:38:32.619 [DEBUG] [Thread-22887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:38:32.619 [DEBUG] [Thread-22887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:38:32.659 [DEBUG] [Thread-22887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:38:32.659 [DEBUG] [Thread-22887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:38:32.662 [DEBUG] [Thread-22887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:38:32.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:38:32.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:38:32.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:38:32.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:38:32.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:38:32.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:38:32.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:38:32.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:38:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:38:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.026447 -999.00  +12.20  12.59     86   +9.90 1 1 1 2 1     0    0 2.50 7.26 ZNESW 12.6 12.6 159.6 16.4 12.7 -22.0 12.6 -21.4 12.4 -19.9 12.7 -21.0
2025-12-26T02:38:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:38:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:38:32.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.026447
2025-12-26T02:38:32.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:38:32.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:38:32.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:38:32.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:38:32.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:38:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:38:20', tmtdew=2.75, humidity=82.98, cloud=0.0, wind=17.1, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:38:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.28275000000000006, 0.18325000000000102, 0.3142499999999995, 0.20699999999999896, 0.2965, 0.34025000000000105, nan, nan, 0.2024999999999988, 0.1509999999999998, 0.16375000000000028, 0.23799999999999955, 0.2530000000000001, 0.2882499999999997, 0.46499999999999986, 0.509999999999998, 0.2082499999999996, 0.2699999999999996, 0.192499999999999, 0.3067499999999992, 0.2754999999999974, 0.3512500000000003, 0.3232500000000016, 0.35025000000000084, 0.25899999999999856, 0.22799999999999976, 0.27775000000000105, 0.391, 0.43599999999999994, 0.43400000000000105, 0.36900000000000066, 0.49900000000000055, 0.2857499999999984], zp_timestamp='2025-12-26T00:37:00')
2025-12-26T02:38:32.691 [DEBUG] [Thread-22887] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:38:32.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-26T02:38:32.785 [DEBUG] [Thread-22890] [transport.py] [_log()] starting thread (client mode): 0xb9546200
2025-12-26T02:38:32.785 [DEBUG] [Thread-22890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:38:32.799 [DEBUG] [Thread-22890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:38:32.799 [INFO] [Thread-22890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:38:32.807 [DEBUG] [Thread-22890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:38:32.807 [DEBUG] [Thread-22890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:38:32.807 [DEBUG] [Thread-22890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:38:32.807 [DEBUG] [Thread-22890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:38:32.807 [DEBUG] [Thread-22890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:38:32.807 [DEBUG] [Thread-22890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] client lang: <none>
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] server lang: <none>
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] kex follows: False
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] Compression: none
2025-12-26T02:38:32.808 [DEBUG] [Thread-22890] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:38:32.867 [DEBUG] [Thread-22890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:38:32.868 [DEBUG] [Thread-22890] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:38:32.868 [DEBUG] [Thread-22890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:38:32.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:38:32.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:38:32.923 [DEBUG] [Thread-22890] [transport.py] [_log()] userauth is OK
2025-12-26T02:38:32.923 [DEBUG] [Thread-22890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:38:32.923 [DEBUG] [Thread-22890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:38:32.923 [DEBUG] [Thread-22890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:38:32.923 [DEBUG] [Thread-22890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:38:32.942 [INFO] [Thread-22890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:38:32.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-26T02:38:32.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:38:33.780 [DEBUG] [Thread-22890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:38:33.781 [DEBUG] [Thread-22890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:38:33.829 [DEBUG] [Thread-22890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:38:33.829 [DEBUG] [Thread-22890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:38:33.839 [DEBUG] [Thread-22890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:38:33.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:38:33.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-26T02:38:33.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-26T02:38:33.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:38:33.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:38:33.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:38:33.875 [DEBUG] [Thread-22890] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:38:36.763 [DEBUG] [Thread-22892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:38:48.105 [DEBUG] [Thread-22893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:38:49.974 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:38:49.975 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:38:51.821 [DEBUG] [Thread-22894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:03.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:39:03.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:39:03.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-26T02:39:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 38, 52), 2.8, 82.98, 0.0, 15.67, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:39:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:38:52
2025-12-26T02:39:04.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:39:04.894 [DEBUG] [Thread-22895] [transport.py] [_log()] starting thread (client mode): 0xb6b16fe0
2025-12-26T02:39:04.894 [DEBUG] [Thread-22895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:39:04.913 [DEBUG] [Thread-22895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:39:04.913 [INFO] [Thread-22895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] client lang: <none>
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] server lang: <none>
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] kex follows: False
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] Compression: none
2025-12-26T02:39:04.917 [DEBUG] [Thread-22895] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:39:04.931 [DEBUG] [Thread-22895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:39:04.931 [DEBUG] [Thread-22895] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:39:04.931 [DEBUG] [Thread-22895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:39:04.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:39:04.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:39:04.932 [DEBUG] [Thread-22895] [transport.py] [_log()] userauth is OK
2025-12-26T02:39:04.932 [DEBUG] [Thread-22895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:39:04.932 [DEBUG] [Thread-22895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:39:04.932 [DEBUG] [Thread-22895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:39:04.932 [DEBUG] [Thread-22895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:39:04.941 [INFO] [Thread-22895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:39:04.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:39:05.577 [DEBUG] [Thread-22895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:39:05.577 [DEBUG] [Thread-22895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:39:05.577 [DEBUG] [Thread-22895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:39:05.618 [DEBUG] [Thread-22895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:39:05.618 [DEBUG] [Thread-22895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:39:05.620 [DEBUG] [Thread-22895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:39:05.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:39:05.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:39:05.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:39:05.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:39:05.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:39:05.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:39:05.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:39:05.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:39:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:39:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.026794 -999.00  +12.20  10.11     85   +9.90 1 1 1 2 1     0    0 2.47 6.85 ZNESW 10.1 10.1 168.8 15.6 12.8 -21.8 12.6 -21.5 12.4 -19.9 12.7 -20.9
2025-12-26T02:39:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:39:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.026794
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:38:52', tmtdew=2.8, humidity=82.98, cloud=0.0, wind=15.67, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:38:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.28275000000000006, 0.18325000000000102, 0.3142499999999995, 0.20699999999999896, 0.2965, 0.34025000000000105, nan, nan, 0.2024999999999988, 0.1509999999999998, 0.16375000000000028, 0.23799999999999955, 0.2530000000000001, 0.2882499999999997, 0.46499999999999986, 0.509999999999998, 0.2082499999999996, 0.2699999999999996, 0.192499999999999, 0.3067499999999992, 0.2754999999999974, 0.3512500000000003, 0.3232500000000016, 0.35025000000000084, 0.25899999999999856, 0.22799999999999976, 0.27775000000000105, 0.391, 0.43599999999999994, 0.43400000000000105, 0.36900000000000066, 0.49900000000000055, 0.2857499999999984], zp_timestamp='2025-12-26T00:37:00')
2025-12-26T02:39:05.639 [DEBUG] [Thread-22895] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:39:05.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-26T02:39:05.724 [DEBUG] [Thread-22898] [transport.py] [_log()] starting thread (client mode): 0xb95b2bc0
2025-12-26T02:39:05.724 [DEBUG] [Thread-22898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:39:05.743 [DEBUG] [Thread-22898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:39:05.743 [INFO] [Thread-22898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] client lang: <none>
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] server lang: <none>
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] kex follows: False
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] Compression: none
2025-12-26T02:39:05.751 [DEBUG] [Thread-22898] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:39:05.812 [DEBUG] [Thread-22898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:39:05.812 [DEBUG] [Thread-22898] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:39:05.813 [DEBUG] [Thread-22898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:39:05.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:39:05.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:39:05.868 [DEBUG] [Thread-22898] [transport.py] [_log()] userauth is OK
2025-12-26T02:39:05.868 [DEBUG] [Thread-22898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:39:05.868 [DEBUG] [Thread-22898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:39:05.868 [DEBUG] [Thread-22898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:39:05.869 [DEBUG] [Thread-22898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:39:05.886 [INFO] [Thread-22898] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:39:05.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-26T02:39:05.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:39:06.677 [DEBUG] [Thread-22898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:39:06.677 [DEBUG] [Thread-22898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:39:06.725 [DEBUG] [Thread-22898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:39:06.726 [DEBUG] [Thread-22898] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:39:06.739 [DEBUG] [Thread-22898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:39:06.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:39:06.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-26T02:39: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') -> 00000000
2025-12-26T02:39:06.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:39:06.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:39:06.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:39:06.771 [DEBUG] [Thread-22898] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:39:06.855 [DEBUG] [Thread-22900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:21.894 [DEBUG] [Thread-22901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:36.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:39:36.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:39:36.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-26T02:39:36.927 [DEBUG] [Thread-22902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 39, 24), 2.8, 83.0, 0.0, 15.74, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:39:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:39:24
2025-12-26T02:39:37.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:39:37.760 [DEBUG] [Thread-22903] [transport.py] [_log()] starting thread (client mode): 0xb9544df0
2025-12-26T02:39:37.760 [DEBUG] [Thread-22903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:39:37.780 [DEBUG] [Thread-22903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:39:37.781 [INFO] [Thread-22903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] client lang: <none>
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] server lang: <none>
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] kex follows: False
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:39:37.784 [DEBUG] [Thread-22903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:39:37.785 [DEBUG] [Thread-22903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:39:37.785 [DEBUG] [Thread-22903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:39:37.785 [DEBUG] [Thread-22903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:39:37.785 [DEBUG] [Thread-22903] [transport.py] [_log()] Compression: none
2025-12-26T02:39:37.785 [DEBUG] [Thread-22903] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:39:37.803 [DEBUG] [Thread-22903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:39:37.804 [DEBUG] [Thread-22903] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:39:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:39:37.806 [DEBUG] [Thread-22903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:39:37.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:39:37.808 [DEBUG] [Thread-22903] [transport.py] [_log()] userauth is OK
2025-12-26T02:39:37.808 [DEBUG] [Thread-22903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:39:37.808 [DEBUG] [Thread-22903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:39:37.808 [DEBUG] [Thread-22903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:39:37.808 [DEBUG] [Thread-22903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:39:37.831 [INFO] [Thread-22903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:39:37.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:39:38.652 [DEBUG] [Thread-22903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:39:38.652 [DEBUG] [Thread-22903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:39:38.652 [DEBUG] [Thread-22903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:39:38.693 [DEBUG] [Thread-22903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:39:38.693 [DEBUG] [Thread-22903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:39:38.696 [DEBUG] [Thread-22903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:39:38.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:39:38.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:39:38.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:39:38.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:39:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:39:38.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:39:38.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:39:38.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:39:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:39:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.027142 -999.00  +12.20  12.02     85   +9.90 1 1 1 2 1     0    0 2.48 6.81 ZNESW 12.0 12.0 171.2 14.2 12.7 -22.0 12.6 -21.4 12.4 -19.9 12.7 -20.8
2025-12-26T02:39:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:39:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:39:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.027142
2025-12-26T02:39:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:39:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:39:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:39:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:39:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:39:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:39:24', tmtdew=2.8, humidity=83.0, cloud=0.0, wind=15.74, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:39:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.28275000000000006, 0.18325000000000102, 0.3142499999999995, 0.20699999999999896, 0.2965, 0.34025000000000105, nan, nan, 0.2024999999999988, 0.1509999999999998, 0.16375000000000028, 0.23799999999999955, 0.2530000000000001, 0.2882499999999997, 0.46499999999999986, 0.509999999999998, 0.2082499999999996, 0.2699999999999996, 0.192499999999999, 0.3067499999999992, 0.2754999999999974, 0.3512500000000003, 0.3232500000000016, 0.35025000000000084, 0.25899999999999856, 0.22799999999999976, 0.27775000000000105, 0.391, 0.43599999999999994, 0.43400000000000105, 0.36900000000000066, 0.49900000000000055, 0.2857499999999984], zp_timestamp='2025-12-26T00:37:00')
2025-12-26T02:39:38.721 [DEBUG] [Thread-22903] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:39:38.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-26T02:39:38.813 [DEBUG] [Thread-22906] [transport.py] [_log()] starting thread (client mode): 0xb957b2e0
2025-12-26T02:39:38.813 [DEBUG] [Thread-22906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:39:38.827 [DEBUG] [Thread-22906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:39:38.828 [INFO] [Thread-22906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:39:38.835 [DEBUG] [Thread-22906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:39:38.836 [DEBUG] [Thread-22906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] client lang: <none>
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] server lang: <none>
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] kex follows: False
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] Compression: none
2025-12-26T02:39:38.837 [DEBUG] [Thread-22906] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:39:38.896 [DEBUG] [Thread-22906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:39:38.897 [DEBUG] [Thread-22906] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:39:38.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:39:38.898 [DEBUG] [Thread-22906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:39:38.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:39:38.956 [DEBUG] [Thread-22906] [transport.py] [_log()] userauth is OK
2025-12-26T02:39:38.956 [DEBUG] [Thread-22906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:39:38.956 [DEBUG] [Thread-22906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:39:38.956 [DEBUG] [Thread-22906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:39:38.956 [DEBUG] [Thread-22906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:39:38.975 [INFO] [Thread-22906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:39:38.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-26T02:39:38.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:39:39.802 [DEBUG] [Thread-22906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:39:39.802 [DEBUG] [Thread-22906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:39:39.850 [DEBUG] [Thread-22906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:39:39.850 [DEBUG] [Thread-22906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:39:39.859 [DEBUG] [Thread-22906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:39:39.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:39:39.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-26T02:39:39.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-26T02:39:39.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:39:39.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:39:39.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:39:39.896 [DEBUG] [Thread-22906] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:39:48.177 [DEBUG] [Thread-22908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:50.176 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:50.178 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:39:51.960 [DEBUG] [Thread-22909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:07.020 [DEBUG] [Thread-22910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:09.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:40:09.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:40:09.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-26T02:40:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 39, 56), 2.7, 82.98, 0.0, 15.65, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:40:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:39:56
2025-12-26T02:40:10.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:40:10.888 [DEBUG] [Thread-22911] [transport.py] [_log()] starting thread (client mode): 0xb6b156f0
2025-12-26T02:40:10.888 [DEBUG] [Thread-22911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:40:10.908 [DEBUG] [Thread-22911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:40:10.908 [INFO] [Thread-22911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] client lang: <none>
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] server lang: <none>
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] kex follows: False
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:40:10.912 [DEBUG] [Thread-22911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:40:10.913 [DEBUG] [Thread-22911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:40:10.913 [DEBUG] [Thread-22911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:40:10.913 [DEBUG] [Thread-22911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:40:10.913 [DEBUG] [Thread-22911] [transport.py] [_log()] Compression: none
2025-12-26T02:40:10.913 [DEBUG] [Thread-22911] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:40:10.929 [DEBUG] [Thread-22911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:40:10.929 [DEBUG] [Thread-22911] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:40:10.930 [DEBUG] [Thread-22911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:40:10.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:40:10.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:40:10.932 [DEBUG] [Thread-22911] [transport.py] [_log()] userauth is OK
2025-12-26T02:40:10.932 [DEBUG] [Thread-22911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:40:10.933 [DEBUG] [Thread-22911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:40:10.933 [DEBUG] [Thread-22911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:40:10.933 [DEBUG] [Thread-22911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:40:10.952 [INFO] [Thread-22911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:40:10.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:40:11.690 [DEBUG] [Thread-22911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:40:11.690 [DEBUG] [Thread-22911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:40:11.691 [DEBUG] [Thread-22911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:40:11.731 [DEBUG] [Thread-22911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:40:11.731 [DEBUG] [Thread-22911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:40:11.735 [DEBUG] [Thread-22911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:40:11.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:40:11.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:40:11.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:40:11.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:40:11.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:40:11.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:40:11.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:40:11.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:40:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:40:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.027489 -999.00  +12.20  12.02     85   +9.90 1 1 1 2 1     0    0 2.44 6.35 ZNESW 12.0 12.0 169.8 13.4 12.7 -22.0 12.7 -21.6 12.4 -19.9 12.7 -21.1
2025-12-26T02:40:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:40:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:40:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.027489
2025-12-26T02:40:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:40:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:40:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:40:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:40:11.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:40:11.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:39:56', tmtdew=2.7, humidity=82.98, cloud=0.0, wind=15.65, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:39:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.28275000000000006, 0.18325000000000102, 0.3142499999999995, 0.20699999999999896, 0.2965, 0.34025000000000105, nan, nan, 0.2024999999999988, 0.1509999999999998, 0.16375000000000028, 0.23799999999999955, 0.2530000000000001, 0.2882499999999997, 0.46499999999999986, 0.509999999999998, 0.2082499999999996, 0.2699999999999996, 0.192499999999999, 0.3067499999999992, 0.2754999999999974, 0.3512500000000003, 0.3232500000000016, 0.35025000000000084, 0.25899999999999856, 0.22799999999999976, 0.27775000000000105, 0.391, 0.43599999999999994, 0.43400000000000105, 0.36900000000000066, 0.49900000000000055, 0.2857499999999984], zp_timestamp='2025-12-26T00:37:00')
2025-12-26T02:40:11.763 [DEBUG] [Thread-22911] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:40:11.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:40:11.848 [DEBUG] [Thread-22914] [transport.py] [_log()] starting thread (client mode): 0xb9593040
2025-12-26T02:40:11.848 [DEBUG] [Thread-22914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:40:11.862 [DEBUG] [Thread-22914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:40:11.863 [INFO] [Thread-22914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:40:11.870 [DEBUG] [Thread-22914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:40:11.870 [DEBUG] [Thread-22914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:40:11.870 [DEBUG] [Thread-22914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] client lang: <none>
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] server lang: <none>
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] kex follows: False
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] Compression: none
2025-12-26T02:40:11.871 [DEBUG] [Thread-22914] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:40:11.930 [DEBUG] [Thread-22914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:40:11.931 [DEBUG] [Thread-22914] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:40:11.931 [DEBUG] [Thread-22914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:40:11.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:40:11.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:40:11.986 [DEBUG] [Thread-22914] [transport.py] [_log()] userauth is OK
2025-12-26T02:40:11.987 [DEBUG] [Thread-22914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:40:11.987 [DEBUG] [Thread-22914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:40:11.987 [DEBUG] [Thread-22914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:40:11.987 [DEBUG] [Thread-22914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:40:12.005 [INFO] [Thread-22914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:40:12.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-26T02:40:12.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:40:12.827 [DEBUG] [Thread-22914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:40:12.827 [DEBUG] [Thread-22914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:40:12.875 [DEBUG] [Thread-22914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:40:12.875 [DEBUG] [Thread-22914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:40:12.884 [DEBUG] [Thread-22914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:40:12.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:40:12.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-26T02:40:12.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:40:12.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:40:12.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:40:12.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:40:12.921 [DEBUG] [Thread-22914] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:40:22.056 [DEBUG] [Thread-22916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:27.127 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:37.091 [DEBUG] [Thread-22917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:42.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:40:42.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:40:42.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-26T02:40:43.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 40, 28), 2.73, 82.84, 0.0, 16.41, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:40:43.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:40:28
2025-12-26T02:40:43.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:40:43.916 [DEBUG] [Thread-22918] [transport.py] [_log()] starting thread (client mode): 0xbbfccd60
2025-12-26T02:40:43.916 [DEBUG] [Thread-22918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:40:43.935 [DEBUG] [Thread-22918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:40:43.936 [INFO] [Thread-22918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] client lang: <none>
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] server lang: <none>
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] kex follows: False
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] Compression: none
2025-12-26T02:40:43.939 [DEBUG] [Thread-22918] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:40:43.955 [DEBUG] [Thread-22918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:40:43.956 [DEBUG] [Thread-22918] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:40:43.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:40:43.957 [DEBUG] [Thread-22918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:40:43.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:40:43.959 [DEBUG] [Thread-22918] [transport.py] [_log()] userauth is OK
2025-12-26T02:40:43.959 [DEBUG] [Thread-22918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:40:43.959 [DEBUG] [Thread-22918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:40:43.959 [DEBUG] [Thread-22918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:40:43.959 [DEBUG] [Thread-22918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:40:43.985 [INFO] [Thread-22918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:40:43.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:40:44.644 [DEBUG] [Thread-22918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:40:44.644 [DEBUG] [Thread-22918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:40:44.645 [DEBUG] [Thread-22918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:40:44.685 [DEBUG] [Thread-22918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:40:44.685 [DEBUG] [Thread-22918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:40:44.689 [DEBUG] [Thread-22918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:40:44.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:40:44.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:40:44.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:40:44.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:40:44.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:40:44.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:40:44.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:40:44.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:40:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:40:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.027836 -999.00  +12.20  10.81     85   +9.90 1 1 1 2 1     0    0 2.41 5.86 ZNESW 10.8 10.8 178.2 13.9 12.8 -21.9 12.6 -21.5 12.4 -19.9 12.7 -21.1
2025-12-26T02:40:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:40:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:40:44.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.027836
2025-12-26T02:40:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:40:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:40:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:40:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:40:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:40:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:40:28', tmtdew=2.73, humidity=82.84, cloud=0.0, wind=16.41, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:40:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.28275000000000006, 0.18325000000000102, 0.3142499999999995, 0.20699999999999896, 0.2965, 0.34025000000000105, nan, nan, 0.2024999999999988, 0.1509999999999998, 0.16375000000000028, 0.23799999999999955, 0.2530000000000001, 0.2882499999999997, 0.46499999999999986, 0.509999999999998, 0.2082499999999996, 0.2699999999999996, 0.192499999999999, 0.3067499999999992, 0.2754999999999974, 0.3512500000000003, 0.3232500000000016, 0.35025000000000084, 0.25899999999999856, 0.22799999999999976, 0.27775000000000105, 0.391, 0.43599999999999994, 0.43400000000000105, 0.36900000000000066, 0.49900000000000055, 0.2857499999999984], zp_timestamp='2025-12-26T00:37:00')
2025-12-26T02:40:44.718 [DEBUG] [Thread-22918] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:40:44.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-26T02:40:44.811 [DEBUG] [Thread-22921] [transport.py] [_log()] starting thread (client mode): 0xb6b23a90
2025-12-26T02:40:44.812 [DEBUG] [Thread-22921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:40:44.830 [DEBUG] [Thread-22921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:40:44.831 [INFO] [Thread-22921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:40:44.838 [DEBUG] [Thread-22921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:40:44.839 [DEBUG] [Thread-22921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] client lang: <none>
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] server lang: <none>
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] kex follows: False
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:40:44.840 [DEBUG] [Thread-22921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:40:44.841 [DEBUG] [Thread-22921] [transport.py] [_log()] Compression: none
2025-12-26T02:40:44.841 [DEBUG] [Thread-22921] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:40:44.898 [DEBUG] [Thread-22921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:40:44.898 [DEBUG] [Thread-22921] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:40:44.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:40:44.900 [DEBUG] [Thread-22921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:40:44.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:40:44.957 [DEBUG] [Thread-22921] [transport.py] [_log()] userauth is OK
2025-12-26T02:40:44.957 [DEBUG] [Thread-22921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:40:44.958 [DEBUG] [Thread-22921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:40:44.958 [DEBUG] [Thread-22921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:40:44.958 [DEBUG] [Thread-22921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:40:44.977 [INFO] [Thread-22921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:40:44.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-26T02:40:44.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:40:45.782 [DEBUG] [Thread-22921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:40:45.782 [DEBUG] [Thread-22921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:40:45.831 [DEBUG] [Thread-22921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:40:45.831 [DEBUG] [Thread-22921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:40:45.840 [DEBUG] [Thread-22921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:40:45.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:40:45.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-26T02:40:45.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-26T02:40:45.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:40:45.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:40:45.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:40:45.874 [DEBUG] [Thread-22921] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:40:48.262 [DEBUG] [Thread-22923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:50.376 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:50.378 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:40:52.131 [DEBUG] [Thread-22924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:07.182 [DEBUG] [Thread-22925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:41:15.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:41:15.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-26T02:41:16.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 41), 2.78, 82.84, 0.0, 13.69, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:41:16.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:41:00
2025-12-26T02:41:16.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:41:16.869 [DEBUG] [Thread-22926] [transport.py] [_log()] starting thread (client mode): 0xb6b20fd0
2025-12-26T02:41:16.870 [DEBUG] [Thread-22926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:41:16.888 [DEBUG] [Thread-22926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:41:16.889 [INFO] [Thread-22926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] client lang: <none>
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] server lang: <none>
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] kex follows: False
2025-12-26T02:41:16.890 [DEBUG] [Thread-22926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:41:16.891 [DEBUG] [Thread-22926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:41:16.891 [DEBUG] [Thread-22926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:41:16.891 [DEBUG] [Thread-22926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:41:16.891 [DEBUG] [Thread-22926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:41:16.891 [DEBUG] [Thread-22926] [transport.py] [_log()] Compression: none
2025-12-26T02:41:16.891 [DEBUG] [Thread-22926] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:41:16.908 [DEBUG] [Thread-22926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:41:16.909 [DEBUG] [Thread-22926] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:41:16.910 [DEBUG] [Thread-22926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:41:16.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:41:16.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:41:16.912 [DEBUG] [Thread-22926] [transport.py] [_log()] userauth is OK
2025-12-26T02:41:16.913 [DEBUG] [Thread-22926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:41:16.913 [DEBUG] [Thread-22926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:41:16.913 [DEBUG] [Thread-22926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:41:16.913 [DEBUG] [Thread-22926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:41:16.933 [INFO] [Thread-22926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:41:16.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:41:17.545 [DEBUG] [Thread-22926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:41:17.545 [DEBUG] [Thread-22926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:41:17.545 [DEBUG] [Thread-22926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:41:17.586 [DEBUG] [Thread-22926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:41:17.587 [DEBUG] [Thread-22926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:41:17.589 [DEBUG] [Thread-22926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:41:17.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:41:17.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:41:17.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:41:17.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:41:17.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:41:17.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:41:17.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:41:17.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:41:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:41:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.028183 -999.00  +12.20  11.59     85   +9.90 1 1 1 2 1     0    0 2.47 5.23 ZNESW 11.6 11.6 157.8 17.9 12.7 -21.9 12.6 -21.5 12.4 -19.9 12.7 -21.1
2025-12-26T02:41:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:41:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:41:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.028183
2025-12-26T02:41:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:41:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:41:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:41:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:41:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:41:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:41:00', tmtdew=2.78, humidity=82.84, cloud=0.0, wind=13.69, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:40:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:39:00')
2025-12-26T02:41:17.615 [DEBUG] [Thread-22926] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:41:17.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:41:17.706 [DEBUG] [Thread-22929] [transport.py] [_log()] starting thread (client mode): 0xb6b20eb0
2025-12-26T02:41:17.706 [DEBUG] [Thread-22929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:41:17.720 [DEBUG] [Thread-22929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:41:17.720 [INFO] [Thread-22929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:17.728 [DEBUG] [Thread-22929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] client lang: <none>
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] server lang: <none>
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] kex follows: False
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:41:17.729 [DEBUG] [Thread-22929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:41:17.730 [DEBUG] [Thread-22929] [transport.py] [_log()] Compression: none
2025-12-26T02:41:17.730 [DEBUG] [Thread-22929] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:41:17.786 [DEBUG] [Thread-22929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:41:17.787 [DEBUG] [Thread-22929] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:41:17.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:41:17.788 [DEBUG] [Thread-22929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:41:17.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:41:17.844 [DEBUG] [Thread-22929] [transport.py] [_log()] userauth is OK
2025-12-26T02:41:17.844 [DEBUG] [Thread-22929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:41:17.844 [DEBUG] [Thread-22929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:41:17.844 [DEBUG] [Thread-22929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:41:17.845 [DEBUG] [Thread-22929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:41:17.863 [INFO] [Thread-22929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:41:17.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-26T02:41:17.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:41:18.695 [DEBUG] [Thread-22929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:41:18.695 [DEBUG] [Thread-22929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:41:18.743 [DEBUG] [Thread-22929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:41:18.744 [DEBUG] [Thread-22929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:41:18.752 [DEBUG] [Thread-22929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:41:18.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:41:18.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-26T02:41:18.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-26T02:41:18.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:41:18.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:41:18.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:41:18.786 [DEBUG] [Thread-22929] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:41:22.211 [DEBUG] [Thread-22931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:37.267 [DEBUG] [Thread-22932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:48.340 [DEBUG] [Thread-22933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:48.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:41:48.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:41:48.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-26T02:41:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 41, 32), 2.76, 82.93, 0.0, 13.3, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:41:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:41:32
2025-12-26T02:41:49.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:41:49.796 [DEBUG] [Thread-22934] [transport.py] [_log()] starting thread (client mode): 0xb6b210f0
2025-12-26T02:41:49.796 [DEBUG] [Thread-22934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:41:49.816 [DEBUG] [Thread-22934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:41:49.816 [INFO] [Thread-22934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:41:49.819 [DEBUG] [Thread-22934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:41:49.819 [DEBUG] [Thread-22934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:41:49.819 [DEBUG] [Thread-22934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:41:49.819 [DEBUG] [Thread-22934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:49.819 [DEBUG] [Thread-22934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:49.819 [DEBUG] [Thread-22934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] client lang: <none>
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] server lang: <none>
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] kex follows: False
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] Compression: none
2025-12-26T02:41:49.820 [DEBUG] [Thread-22934] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:41:49.839 [DEBUG] [Thread-22934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:41:49.840 [DEBUG] [Thread-22934] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:41:49.841 [DEBUG] [Thread-22934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:41:49.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:41:49.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:41:49.843 [DEBUG] [Thread-22934] [transport.py] [_log()] userauth is OK
2025-12-26T02:41:49.844 [DEBUG] [Thread-22934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:41:49.844 [DEBUG] [Thread-22934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:41:49.844 [DEBUG] [Thread-22934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:41:49.844 [DEBUG] [Thread-22934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:41:49.868 [INFO] [Thread-22934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:41:49.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:41:50.516 [DEBUG] [Thread-22934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:41:50.516 [DEBUG] [Thread-22934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:41:50.517 [DEBUG] [Thread-22934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:41:50.557 [DEBUG] [Thread-22934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:41:50.557 [DEBUG] [Thread-22934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:41:50.560 [DEBUG] [Thread-22934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:41:50.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:41:50.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:41:50.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:41:50.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:41:50.579 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:50.580 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:41:50.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:41:50.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:41:50.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:41:50.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:41:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:41:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.028878 -999.00  +12.20  11.35     85   +9.90 1 1 1 2 1     0    0 2.33 3.03 ZNESW 11.3 11.3 165.0 15.4 12.7 -21.9 12.6 -21.4 12.4 -19.8 12.7 -20.8
2025-12-26T02:41:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:41:50.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:41:50.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.028878
2025-12-26T02:41:50.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:41:50.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:41:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:41:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:41:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:41:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:41:32', tmtdew=2.76, humidity=82.93, cloud=0.0, wind=13.3, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:41:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:39:00')
2025-12-26T02:41:50.586 [DEBUG] [Thread-22934] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:41:50.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-26T02:41:50.681 [DEBUG] [Thread-22937] [transport.py] [_log()] starting thread (client mode): 0xb9558b20
2025-12-26T02:41:50.681 [DEBUG] [Thread-22937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:41:50.696 [DEBUG] [Thread-22937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:41:50.697 [INFO] [Thread-22937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:41:50.704 [DEBUG] [Thread-22937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:41:50.704 [DEBUG] [Thread-22937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:41:50.704 [DEBUG] [Thread-22937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] client lang: <none>
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] server lang: <none>
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] kex follows: False
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] Compression: none
2025-12-26T02:41:50.705 [DEBUG] [Thread-22937] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:41:50.762 [DEBUG] [Thread-22937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:41:50.763 [DEBUG] [Thread-22937] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:41:50.764 [DEBUG] [Thread-22937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:41:50.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:41:50.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:41:50.818 [DEBUG] [Thread-22937] [transport.py] [_log()] userauth is OK
2025-12-26T02:41:50.818 [DEBUG] [Thread-22937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:41:50.818 [DEBUG] [Thread-22937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:41:50.818 [DEBUG] [Thread-22937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:41:50.819 [DEBUG] [Thread-22937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:41:50.837 [INFO] [Thread-22937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:41: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-26T02:41:50.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:41:51.672 [DEBUG] [Thread-22937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:41:51.672 [DEBUG] [Thread-22937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:41:51.720 [DEBUG] [Thread-22937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:41:51.720 [DEBUG] [Thread-22937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:41:51.729 [DEBUG] [Thread-22937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:41:51.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:41:51.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-26T02:41:51.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-26T02:41:51.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:41:51.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:41:51.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:41:51.771 [DEBUG] [Thread-22937] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:41:52.300 [DEBUG] [Thread-22939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:07.352 [DEBUG] [Thread-22940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:21.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:42:21.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:42:21.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-26T02:42:22.383 [DEBUG] [Thread-22941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:22.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 42, 4), 2.76, 82.93, 0.0, 14.03, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:42:22.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:42:04
2025-12-26T02:42:22.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:42:22.815 [DEBUG] [Thread-22942] [transport.py] [_log()] starting thread (client mode): 0xb9559de0
2025-12-26T02:42:22.815 [DEBUG] [Thread-22942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:42:22.834 [DEBUG] [Thread-22942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:42:22.834 [INFO] [Thread-22942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:42:22.837 [DEBUG] [Thread-22942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] client lang: <none>
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] server lang: <none>
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] kex follows: False
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] Compression: none
2025-12-26T02:42:22.838 [DEBUG] [Thread-22942] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:42:22.853 [DEBUG] [Thread-22942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:42:22.853 [DEBUG] [Thread-22942] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:42:22.853 [DEBUG] [Thread-22942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:42:22.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:42:22.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:42:22.854 [DEBUG] [Thread-22942] [transport.py] [_log()] userauth is OK
2025-12-26T02:42:22.854 [DEBUG] [Thread-22942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:42:22.854 [DEBUG] [Thread-22942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:42:22.854 [DEBUG] [Thread-22942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:42:22.854 [DEBUG] [Thread-22942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:42:22.870 [INFO] [Thread-22942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:42:22.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:42:23.519 [DEBUG] [Thread-22942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:42:23.519 [DEBUG] [Thread-22942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:42:23.519 [DEBUG] [Thread-22942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:42:23.561 [DEBUG] [Thread-22942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:42:23.561 [DEBUG] [Thread-22942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:42:23.563 [DEBUG] [Thread-22942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:42:23.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:42:23.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:42:23.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:42:23.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:42:23.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:42:23.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:42:23.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.029225 -999.00  +12.20  10.80     85   +9.90 1 1 1 2 1     0    0 2.36 2.40 ZNESW 10.8 10.8 158.0 17.5 12.8 -21.9 12.6 -21.3 12.4 -19.9 12.7 -20.8
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.029225
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:42:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:42:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:42:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:42:23.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:42:04', tmtdew=2.76, humidity=82.93, cloud=0.0, wind=14.03, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:42:05.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:39:00')
2025-12-26T02:42:23.580 [DEBUG] [Thread-22942] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:42:23.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:42:23.667 [DEBUG] [Thread-22945] [transport.py] [_log()] starting thread (client mode): 0xb6b20100
2025-12-26T02:42:23.667 [DEBUG] [Thread-22945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:42:23.682 [DEBUG] [Thread-22945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:42:23.682 [INFO] [Thread-22945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] client lang: <none>
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] server lang: <none>
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] kex follows: False
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] Compression: none
2025-12-26T02:42:23.690 [DEBUG] [Thread-22945] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:42:23.747 [DEBUG] [Thread-22945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:42:23.747 [DEBUG] [Thread-22945] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:42:23.747 [DEBUG] [Thread-22945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:42:23.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:42:23.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:42:23.804 [DEBUG] [Thread-22945] [transport.py] [_log()] userauth is OK
2025-12-26T02:42:23.804 [DEBUG] [Thread-22945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:42:23.804 [DEBUG] [Thread-22945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:42:23.804 [DEBUG] [Thread-22945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:42:23.804 [DEBUG] [Thread-22945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:42:23.818 [INFO] [Thread-22945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:42:23.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:42:23.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:42:24.648 [DEBUG] [Thread-22945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:42:24.648 [DEBUG] [Thread-22945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:42:24.696 [DEBUG] [Thread-22945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:42:24.696 [DEBUG] [Thread-22945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:42:24.705 [DEBUG] [Thread-22945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:42:24.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:42:24.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:42:24.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-26T02:42:24.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:42:24.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:42:24.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:42:24.742 [DEBUG] [Thread-22945] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:42:37.418 [DEBUG] [Thread-22947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:48.414 [DEBUG] [Thread-22948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:50.782 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:50.783 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:52.457 [DEBUG] [Thread-22949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:42:54.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:42:54.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:42:54.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-26T02:42:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 42, 36), 2.76, 83.42, 0.0, 16.3, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:42:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:42:36
2025-12-26T02:42:55.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:42:55.749 [DEBUG] [Thread-22950] [transport.py] [_log()] starting thread (client mode): 0xb6b22230
2025-12-26T02:42:55.749 [DEBUG] [Thread-22950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:42:55.769 [DEBUG] [Thread-22950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:42:55.769 [INFO] [Thread-22950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] client lang: <none>
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] server lang: <none>
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] kex follows: False
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] Compression: none
2025-12-26T02:42:55.773 [DEBUG] [Thread-22950] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:42:55.790 [DEBUG] [Thread-22950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:42:55.791 [DEBUG] [Thread-22950] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:42:55.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:42:55.792 [DEBUG] [Thread-22950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:42:55.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:42:55.794 [DEBUG] [Thread-22950] [transport.py] [_log()] userauth is OK
2025-12-26T02:42:55.794 [DEBUG] [Thread-22950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:42:55.794 [DEBUG] [Thread-22950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:42:55.795 [DEBUG] [Thread-22950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:42:55.795 [DEBUG] [Thread-22950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:42:55.814 [INFO] [Thread-22950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:42:55.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:42:56.459 [DEBUG] [Thread-22950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:42:56.459 [DEBUG] [Thread-22950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:42:56.460 [DEBUG] [Thread-22950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:42:56.500 [DEBUG] [Thread-22950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:42:56.500 [DEBUG] [Thread-22950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:42:56.504 [DEBUG] [Thread-22950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:42:56.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:42:56.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:42:56.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:42:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:42:56.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:42:56.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:42:56.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:42:56.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:42:56.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:42:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.029572 -999.00  +12.20  10.48     85   +9.90 1 1 1 2 1     0    0 2.35 2.05 ZNESW 10.5 10.5 167.2 12.2 12.7 -22.0 12.6 -21.7 12.4 -20.0 12.7 -21.0
2025-12-26T02:42:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:42:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:42:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.029572
2025-12-26T02:42:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:42:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:42:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:42:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:42:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:42:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:42:36', tmtdew=2.76, humidity=83.42, cloud=0.0, wind=16.3, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:42:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:39:00')
2025-12-26T02:42:56.530 [DEBUG] [Thread-22950] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:42:56.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-26T02:42:56.623 [DEBUG] [Thread-22953] [transport.py] [_log()] starting thread (client mode): 0xb9558e80
2025-12-26T02:42:56.623 [DEBUG] [Thread-22953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:42:56.638 [DEBUG] [Thread-22953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:42:56.638 [INFO] [Thread-22953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:42:56.646 [DEBUG] [Thread-22953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] client lang: <none>
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] server lang: <none>
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] kex follows: False
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] Compression: none
2025-12-26T02:42:56.647 [DEBUG] [Thread-22953] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:42:56.704 [DEBUG] [Thread-22953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:42:56.704 [DEBUG] [Thread-22953] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:42:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:42:56.706 [DEBUG] [Thread-22953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:42:56.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:42:56.760 [DEBUG] [Thread-22953] [transport.py] [_log()] userauth is OK
2025-12-26T02:42:56.760 [DEBUG] [Thread-22953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:42:56.760 [DEBUG] [Thread-22953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:42:56.760 [DEBUG] [Thread-22953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:42:56.760 [DEBUG] [Thread-22953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:42:56.773 [INFO] [Thread-22953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:42:56.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:42:56.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:42:57.587 [DEBUG] [Thread-22953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:42:57.587 [DEBUG] [Thread-22953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:42:57.635 [DEBUG] [Thread-22953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:42:57.635 [DEBUG] [Thread-22953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:42:57.645 [DEBUG] [Thread-22953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:42:57.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:42: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-26T02:42: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') -> 00000000
2025-12-26T02:42:57.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:42:57.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:42:57.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:42:57.678 [DEBUG] [Thread-22953] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:43:07.495 [DEBUG] [Thread-22955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:43:22.544 [DEBUG] [Thread-22956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:43:27.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:43:27.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:43: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-26T02:43:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 43, 8), 2.76, 83.4, 0.0, 15.51, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:43:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:43:08
2025-12-26T02:43:28.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:43:28.685 [DEBUG] [Thread-22957] [transport.py] [_log()] starting thread (client mode): 0xb6b21750
2025-12-26T02:43:28.686 [DEBUG] [Thread-22957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:43:28.699 [DEBUG] [Thread-22957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:43:28.700 [INFO] [Thread-22957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] client lang: <none>
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] server lang: <none>
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] kex follows: False
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] Compression: none
2025-12-26T02:43:28.703 [DEBUG] [Thread-22957] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:43:28.720 [DEBUG] [Thread-22957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:43:28.720 [DEBUG] [Thread-22957] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:43:28.720 [DEBUG] [Thread-22957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:43:28.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:43:28.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:43:28.722 [DEBUG] [Thread-22957] [transport.py] [_log()] userauth is OK
2025-12-26T02:43:28.723 [DEBUG] [Thread-22957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:43:28.723 [DEBUG] [Thread-22957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:43:28.723 [DEBUG] [Thread-22957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:43:28.723 [DEBUG] [Thread-22957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:43:28.758 [INFO] [Thread-22957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:43:28.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:43:29.403 [DEBUG] [Thread-22957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:43:29.404 [DEBUG] [Thread-22957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:43:29.404 [DEBUG] [Thread-22957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:43:29.445 [DEBUG] [Thread-22957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:43:29.445 [DEBUG] [Thread-22957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:43:29.448 [DEBUG] [Thread-22957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:43:29.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:43:29.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:43:29.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:43:29.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:43:29.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:43:29.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:43:29.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:43:29.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:43:29.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:43:29.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.029919 -999.00  +12.20  13.95     85   +9.90 1 1 1 2 1     0    0 2.31 1.75 ZNESW 13.9 13.9 168.8 14.9 12.7 -22.0 12.6 -21.6 12.4 -19.9 12.7 -21.0
2025-12-26T02:43:29.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:43:29.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:43:29.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.029919
2025-12-26T02:43:29.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:43:29.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:43:29.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:43:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:43:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:43:29.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:43:08', tmtdew=2.76, humidity=83.4, cloud=0.0, wind=15.51, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:43:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:39:00')
2025-12-26T02:43:29.476 [DEBUG] [Thread-22957] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:43:29.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-26T02:43:29.571 [DEBUG] [Thread-22960] [transport.py] [_log()] starting thread (client mode): 0xb6b206a0
2025-12-26T02:43:29.571 [DEBUG] [Thread-22960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:43:29.586 [DEBUG] [Thread-22960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:43:29.586 [INFO] [Thread-22960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:43:29.593 [DEBUG] [Thread-22960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] client lang: <none>
2025-12-26T02:43:29.594 [DEBUG] [Thread-22960] [transport.py] [_log()] server lang: <none>
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] kex follows: False
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] Compression: none
2025-12-26T02:43:29.595 [DEBUG] [Thread-22960] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:43:29.650 [DEBUG] [Thread-22960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:43:29.650 [DEBUG] [Thread-22960] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:43:29.651 [DEBUG] [Thread-22960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:43:29.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:43:29.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:43:29.706 [DEBUG] [Thread-22960] [transport.py] [_log()] userauth is OK
2025-12-26T02:43:29.707 [DEBUG] [Thread-22960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:43:29.707 [DEBUG] [Thread-22960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:43:29.707 [DEBUG] [Thread-22960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:43:29.707 [DEBUG] [Thread-22960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:43:29.726 [INFO] [Thread-22960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:43:29.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-26T02:43:29.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:43:30.566 [DEBUG] [Thread-22960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:43:30.566 [DEBUG] [Thread-22960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:43:30.613 [DEBUG] [Thread-22960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:43:30.614 [DEBUG] [Thread-22960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:43:30.622 [DEBUG] [Thread-22960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:43:30.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:43:30.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:43:30.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:43:30.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:43:30.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:43:30.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:43:30.656 [DEBUG] [Thread-22960] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:43:37.577 [DEBUG] [Thread-22962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:43:48.465 [DEBUG] [Thread-22963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:43:50.982 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:43:50.983 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:43:52.626 [DEBUG] [Thread-22964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:00.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:44:00.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:44:00.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-26T02:44:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 43, 40), 2.77, 82.89, 0.0, 13.46, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:44:01.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:43:40
2025-12-26T02:44:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:44:01.615 [DEBUG] [Thread-22965] [transport.py] [_log()] starting thread (client mode): 0xb6b17880
2025-12-26T02:44:01.616 [DEBUG] [Thread-22965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:44:01.635 [DEBUG] [Thread-22965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:44:01.636 [INFO] [Thread-22965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] client lang: <none>
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] server lang: <none>
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] kex follows: False
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] Compression: none
2025-12-26T02:44:01.639 [DEBUG] [Thread-22965] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:44:01.660 [DEBUG] [Thread-22965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:44:01.660 [DEBUG] [Thread-22965] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:44:01.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:44:01.661 [DEBUG] [Thread-22965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:44:01.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:44:01.662 [DEBUG] [Thread-22965] [transport.py] [_log()] userauth is OK
2025-12-26T02:44:01.662 [DEBUG] [Thread-22965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:44:01.662 [DEBUG] [Thread-22965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:44:01.662 [DEBUG] [Thread-22965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:44:01.662 [DEBUG] [Thread-22965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:44:01.683 [INFO] [Thread-22965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:44:01.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:44:02.284 [DEBUG] [Thread-22965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:44:02.284 [DEBUG] [Thread-22965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:44:02.284 [DEBUG] [Thread-22965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:44:02.325 [DEBUG] [Thread-22965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:44:02.325 [DEBUG] [Thread-22965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:44:02.329 [DEBUG] [Thread-22965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:44:02.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:44:02.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:44:02.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:44:02.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:44:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:44:02.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:44:02.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:44:02.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:44:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:44:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.030267 -999.00  +12.20   9.10     85   +9.90 1 1 1 2 1     0    0 2.34 1.51 ZNESW 9.1 9.1 159.0 13.9 12.7 -22.0 12.6 -21.6 12.4 -20.0 12.7 -20.9
2025-12-26T02:44:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:44:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:44:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.030267
2025-12-26T02:44:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:44:02.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:44:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:44:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:44:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:44:02.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:43:40', tmtdew=2.77, humidity=82.89, cloud=0.0, wind=13.46, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:43:35.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:43:00')
2025-12-26T02:44:02.353 [DEBUG] [Thread-22965] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:44:02.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-26T02:44:02.446 [DEBUG] [Thread-22968] [transport.py] [_log()] starting thread (client mode): 0xb6b17ac0
2025-12-26T02:44:02.446 [DEBUG] [Thread-22968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:44:02.465 [DEBUG] [Thread-22968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:44:02.465 [INFO] [Thread-22968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:44:02.473 [DEBUG] [Thread-22968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:44:02.474 [DEBUG] [Thread-22968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:44:02.474 [DEBUG] [Thread-22968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:44:02.474 [DEBUG] [Thread-22968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:02.474 [DEBUG] [Thread-22968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:02.474 [DEBUG] [Thread-22968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] client lang: <none>
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] server lang: <none>
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] kex follows: False
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] Compression: none
2025-12-26T02:44:02.475 [DEBUG] [Thread-22968] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:44:02.535 [DEBUG] [Thread-22968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:44:02.535 [DEBUG] [Thread-22968] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:44:02.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:44:02.536 [DEBUG] [Thread-22968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:44:02.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:44:02.597 [DEBUG] [Thread-22968] [transport.py] [_log()] userauth is OK
2025-12-26T02:44:02.597 [DEBUG] [Thread-22968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:44:02.597 [DEBUG] [Thread-22968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:44:02.597 [DEBUG] [Thread-22968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:44:02.597 [DEBUG] [Thread-22968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:44:02.616 [INFO] [Thread-22968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:44:02.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-26T02:44:02.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:44:03.413 [DEBUG] [Thread-22968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:44:03.413 [DEBUG] [Thread-22968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:44:03.461 [DEBUG] [Thread-22968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:44:03.462 [DEBUG] [Thread-22968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:44:03.471 [DEBUG] [Thread-22968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:44:03.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:44:03.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:44:03.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-26T02:44:03.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:44:03.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:44:03.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:44:03.508 [DEBUG] [Thread-22968] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:44:07.666 [DEBUG] [Thread-22970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:22.714 [DEBUG] [Thread-22971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:33.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:44:33.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:44:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:44:34.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 44, 13), 2.78, 82.84, 0.0, 11.91, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:44:34.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:44:13
2025-12-26T02:44:34.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:44:34.492 [DEBUG] [Thread-22972] [transport.py] [_log()] starting thread (client mode): 0xb6b17040
2025-12-26T02:44:34.492 [DEBUG] [Thread-22972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:44:34.511 [DEBUG] [Thread-22972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:44:34.511 [INFO] [Thread-22972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] client lang: <none>
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] server lang: <none>
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] kex follows: False
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] Compression: none
2025-12-26T02:44:34.513 [DEBUG] [Thread-22972] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:44:34.521 [DEBUG] [Thread-22972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:44:34.521 [DEBUG] [Thread-22972] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:44:34.521 [DEBUG] [Thread-22972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:44:34.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:44:34.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:44:34.522 [DEBUG] [Thread-22972] [transport.py] [_log()] userauth is OK
2025-12-26T02:44:34.522 [DEBUG] [Thread-22972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:44:34.522 [DEBUG] [Thread-22972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:44:34.522 [DEBUG] [Thread-22972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:44:34.522 [DEBUG] [Thread-22972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:44:34.534 [INFO] [Thread-22972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:44:34.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:44:35.132 [DEBUG] [Thread-22972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:44:35.132 [DEBUG] [Thread-22972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:44:35.132 [DEBUG] [Thread-22972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:44:35.173 [DEBUG] [Thread-22972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:44:35.173 [DEBUG] [Thread-22972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:44:35.176 [DEBUG] [Thread-22972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:44:35.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:44:35.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:44:35.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:44:35.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:44:35.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:44:35.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:44:35.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:44:35.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:44:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:44:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.030614 -999.00  +12.20   9.65     85   +9.90 1 1 1 2 1     0    0 2.32 1.17 ZNESW 9.7 9.7 167.4 13.5 12.8 -21.9 12.6 -21.6 12.4 -20.1 12.7 -20.9
2025-12-26T02:44:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:44:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:44:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.030614
2025-12-26T02:44:35.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:44:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:44:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:44:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:44:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:44:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:44:13', tmtdew=2.78, humidity=82.84, cloud=0.0, wind=11.91, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:44:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:43:00')
2025-12-26T02:44:35.200 [DEBUG] [Thread-22972] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:44:35.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-26T02:44:35.295 [DEBUG] [Thread-22975] [transport.py] [_log()] starting thread (client mode): 0xb6b22740
2025-12-26T02:44:35.295 [DEBUG] [Thread-22975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:44:35.310 [DEBUG] [Thread-22975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:44:35.310 [INFO] [Thread-22975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:44:35.317 [DEBUG] [Thread-22975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:44:35.318 [DEBUG] [Thread-22975] [transport.py] [_log()] client lang: <none>
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] server lang: <none>
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] kex follows: False
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] Compression: none
2025-12-26T02:44:35.319 [DEBUG] [Thread-22975] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:44:35.377 [DEBUG] [Thread-22975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:44:35.377 [DEBUG] [Thread-22975] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:44:35.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:44:35.379 [DEBUG] [Thread-22975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:44:35.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:44:35.435 [DEBUG] [Thread-22975] [transport.py] [_log()] userauth is OK
2025-12-26T02:44:35.435 [DEBUG] [Thread-22975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:44:35.435 [DEBUG] [Thread-22975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:44:35.435 [DEBUG] [Thread-22975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:44:35.435 [DEBUG] [Thread-22975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:44:35.452 [INFO] [Thread-22975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:44:35.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-26T02:44:35.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:44:36.331 [DEBUG] [Thread-22975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:44:36.332 [DEBUG] [Thread-22975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:44:36.378 [DEBUG] [Thread-22975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:44:36.379 [DEBUG] [Thread-22975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:44:36.387 [DEBUG] [Thread-22975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:44:36.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:44:36.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-26T02:44:36.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-26T02:44:36.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:44:36.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:44:36.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:44:36.424 [DEBUG] [Thread-22975] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:44:37.750 [DEBUG] [Thread-22977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:48.517 [DEBUG] [Thread-22978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:51.184 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:51.185 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:44:52.799 [DEBUG] [Thread-22979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:45:06.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:45:06.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-26T02:45:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 44, 45), 2.78, 82.82, 0.0, 11.29, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:45:07.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:44:45
2025-12-26T02:45:07.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:45:07.406 [DEBUG] [Thread-22980] [transport.py] [_log()] starting thread (client mode): 0xb6b22a40
2025-12-26T02:45:07.406 [DEBUG] [Thread-22980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:45:07.425 [DEBUG] [Thread-22980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:45:07.425 [INFO] [Thread-22980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:45:07.428 [DEBUG] [Thread-22980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] client lang: <none>
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] server lang: <none>
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] kex follows: False
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:45:07.429 [DEBUG] [Thread-22980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:45:07.430 [DEBUG] [Thread-22980] [transport.py] [_log()] Compression: none
2025-12-26T02:45:07.430 [DEBUG] [Thread-22980] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:45:07.449 [DEBUG] [Thread-22980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:45:07.449 [DEBUG] [Thread-22980] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:45:07.450 [DEBUG] [Thread-22980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:45:07.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:45:07.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:45:07.457 [DEBUG] [Thread-22980] [transport.py] [_log()] userauth is OK
2025-12-26T02:45:07.458 [DEBUG] [Thread-22980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:45:07.458 [DEBUG] [Thread-22980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:45:07.458 [DEBUG] [Thread-22980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:45:07.458 [DEBUG] [Thread-22980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:45:07.496 [INFO] [Thread-22980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:45:07.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:45:07.831 [DEBUG] [Thread-22982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:15.820 [DEBUG] [Thread-22980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:45:15.820 [DEBUG] [Thread-22980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:45:15.821 [DEBUG] [Thread-22980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:45:15.862 [DEBUG] [Thread-22980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:45:15.862 [DEBUG] [Thread-22980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:45:15.865 [DEBUG] [Thread-22980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:45:15.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:45:15.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:45:15.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:45:15.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:45:15.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:45:15.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:45:15.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:45:15.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:45:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:45:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.030614 -999.00  +12.20   9.65     85   +9.90 1 1 1 2 1     0    0 2.32 1.17 ZNESW 9.7 9.7 167.4 13.5 12.8 -21.9 12.6 -21.6 12.4 -20.1 12.7 -20.9
2025-12-26T02:45:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:45:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:45:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.030614
2025-12-26T02:45:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:45:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:45:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:45:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:45:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:45:15.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:44:45', tmtdew=2.78, humidity=82.82, cloud=0.0, wind=11.29, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:44:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:43:00')
2025-12-26T02:45:15.968 [DEBUG] [Thread-22980] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:45:16.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-26T02:45:16.062 [DEBUG] [Thread-22984] [transport.py] [_log()] starting thread (client mode): 0xb6b20e20
2025-12-26T02:45:16.062 [DEBUG] [Thread-22984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:45:16.077 [DEBUG] [Thread-22984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:45:16.077 [INFO] [Thread-22984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:45:16.084 [DEBUG] [Thread-22984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:45:16.084 [DEBUG] [Thread-22984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] client lang: <none>
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] server lang: <none>
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] kex follows: False
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:45:16.085 [DEBUG] [Thread-22984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:45:16.086 [DEBUG] [Thread-22984] [transport.py] [_log()] Compression: none
2025-12-26T02:45:16.086 [DEBUG] [Thread-22984] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:45:16.143 [DEBUG] [Thread-22984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:45:16.144 [DEBUG] [Thread-22984] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:45:16.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:45:16.145 [DEBUG] [Thread-22984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:45:16.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:45:16.200 [DEBUG] [Thread-22984] [transport.py] [_log()] userauth is OK
2025-12-26T02:45:16.201 [DEBUG] [Thread-22984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:45:16.201 [DEBUG] [Thread-22984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:45:16.201 [DEBUG] [Thread-22984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:45:16.201 [DEBUG] [Thread-22984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:45:16.226 [INFO] [Thread-22984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:45:16.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:45:16.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:45:17.094 [DEBUG] [Thread-22984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:45:17.095 [DEBUG] [Thread-22984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:45:17.146 [DEBUG] [Thread-22984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:45:17.146 [DEBUG] [Thread-22984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:45:17.155 [DEBUG] [Thread-22984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:45:17.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:45:17.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-26T02:45:17.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:45:17.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:45:17.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:45:17.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:45:17.191 [DEBUG] [Thread-22984] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:45:22.869 [DEBUG] [Thread-22986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:37.916 [DEBUG] [Thread-22987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:45:47.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:45:47.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-26T02:45:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 45, 17), 2.79, 82.77, 0.0, 11.15, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:45:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:45:17
2025-12-26T02:45:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:45:48.156 [DEBUG] [Thread-22988] [transport.py] [_log()] starting thread (client mode): 0xbbfcd240
2025-12-26T02:45:48.156 [DEBUG] [Thread-22988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:45:48.177 [DEBUG] [Thread-22988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:45:48.177 [INFO] [Thread-22988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:45:48.179 [DEBUG] [Thread-22988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:45:48.179 [DEBUG] [Thread-22988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:45:48.179 [DEBUG] [Thread-22988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] client lang: <none>
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] server lang: <none>
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] kex follows: False
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] Compression: none
2025-12-26T02:45:48.180 [DEBUG] [Thread-22988] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:45:48.189 [DEBUG] [Thread-22988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:45:48.189 [DEBUG] [Thread-22988] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:45:48.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:45:48.190 [DEBUG] [Thread-22988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:45:48.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:45:48.192 [DEBUG] [Thread-22988] [transport.py] [_log()] userauth is OK
2025-12-26T02:45:48.193 [DEBUG] [Thread-22988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:45:48.193 [DEBUG] [Thread-22988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:45:48.193 [DEBUG] [Thread-22988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:45:48.193 [DEBUG] [Thread-22988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:45:48.233 [INFO] [Thread-22988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:45:48.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:45:48.568 [DEBUG] [Thread-22990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:48.901 [DEBUG] [Thread-22988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:45:48.901 [DEBUG] [Thread-22988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:45:48.901 [DEBUG] [Thread-22988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:45:48.942 [DEBUG] [Thread-22988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:45:48.942 [DEBUG] [Thread-22988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:45:48.945 [DEBUG] [Thread-22988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:45:48.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:45:48.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:45:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:45:48.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:45:48.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:45:48.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:45:48.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:45:48.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:45:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:45:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.030961 -999.00  +12.20  10.41     85   +9.80 1 1 1 2 1     0    0 2.33 0.97 ZNESW 10.4 10.4 165.6 12.5 12.7 -22.0 12.6 -21.7 12.4 -20.0 12.7 -20.9
2025-12-26T02:45:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:45:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:45:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.030961
2025-12-26T02:45:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:45:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:45:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:45:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:45:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:45:48.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:45:17', tmtdew=2.79, humidity=82.77, cloud=0.0, wind=11.15, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:44:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:43:00')
2025-12-26T02:45:48.971 [DEBUG] [Thread-22988] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:45:49.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-26T02:45:49.063 [DEBUG] [Thread-22992] [transport.py] [_log()] starting thread (client mode): 0xb6b62e30
2025-12-26T02:45:49.063 [DEBUG] [Thread-22992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:45:49.077 [DEBUG] [Thread-22992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:45:49.077 [INFO] [Thread-22992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:45:49.084 [DEBUG] [Thread-22992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] client lang: <none>
2025-12-26T02:45:49.085 [DEBUG] [Thread-22992] [transport.py] [_log()] server lang: <none>
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] kex follows: False
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] Compression: none
2025-12-26T02:45:49.086 [DEBUG] [Thread-22992] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:45:49.143 [DEBUG] [Thread-22992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:45:49.143 [DEBUG] [Thread-22992] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:45:49.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:45:49.144 [DEBUG] [Thread-22992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:45:49.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:45:49.199 [DEBUG] [Thread-22992] [transport.py] [_log()] userauth is OK
2025-12-26T02:45:49.199 [DEBUG] [Thread-22992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:45:49.199 [DEBUG] [Thread-22992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:45:49.199 [DEBUG] [Thread-22992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:45:49.199 [DEBUG] [Thread-22992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:45:49.220 [INFO] [Thread-22992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:45:49.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-26T02:45:49.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:45:50.041 [DEBUG] [Thread-22992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:45:50.041 [DEBUG] [Thread-22992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:45:50.088 [DEBUG] [Thread-22992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:45:50.088 [DEBUG] [Thread-22992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:45:50.096 [DEBUG] [Thread-22992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:45:50.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:45:50.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-26T02:45:50.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-26T02:45:50.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:45:50.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:45:50.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:45:50.129 [DEBUG] [Thread-22992] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:45:51.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:51.387 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:45:52.947 [DEBUG] [Thread-22994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:08.001 [DEBUG] [Thread-22995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:20.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:46:20.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:46:20.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-26T02:46:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 45, 49), 2.79, 82.79, 0.0, 14.7, 12.09, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:46:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:45:49
2025-12-26T02:46:20.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:46:21.131 [DEBUG] [Thread-22996] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf90
2025-12-26T02:46:21.131 [DEBUG] [Thread-22996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:46:21.151 [DEBUG] [Thread-22996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:46:21.151 [INFO] [Thread-22996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] client lang: <none>
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] server lang: <none>
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] kex follows: False
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] Compression: none
2025-12-26T02:46:21.154 [DEBUG] [Thread-22996] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:46:21.171 [DEBUG] [Thread-22996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:46:21.171 [DEBUG] [Thread-22996] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:46:21.172 [DEBUG] [Thread-22996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:46:21.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:46:21.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:46:21.173 [DEBUG] [Thread-22996] [transport.py] [_log()] userauth is OK
2025-12-26T02:46:21.173 [DEBUG] [Thread-22996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:46:21.173 [DEBUG] [Thread-22996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:46:21.174 [DEBUG] [Thread-22996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:46:21.174 [DEBUG] [Thread-22996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:46:21.188 [INFO] [Thread-22996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:46:21.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:46:21.990 [DEBUG] [Thread-22996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:46:21.990 [DEBUG] [Thread-22996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:46:21.990 [DEBUG] [Thread-22996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:46:22.030 [DEBUG] [Thread-22996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:46:22.030 [DEBUG] [Thread-22996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:46:22.033 [DEBUG] [Thread-22996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:46:22.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:46:22.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:46:22.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:46:22.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:46:22.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:46:22.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:46:22.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.031655 -999.00  +12.20   9.82     85   +9.80 1 1 1 2 1     0    0 2.36 0.86 ZNESW 9.8 9.8 166.4 16.0 12.8 -22.0 12.6 -21.6 12.4 -19.9 12.7 -20.9
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.031655
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:46:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:45:49', tmtdew=2.79, humidity=82.79, cloud=0.0, wind=14.7, temperature=12.09, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:45:34.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.2657499999999988, 0.17125000000000057, 0.3052500000000009, 0.22049999999999947, 0.2115000000000009, 0.3262500000000017, 0.8699999999999992, 0.4097500000000007, 0.25349999999999895, 0.13100000000000023, 0.18425000000000047, 0.23599999999999888, 0.2444999999999986, 0.2472499999999993, 0.3669999999999991, 0.3460000000000001, 0.2087500000000002, 0.2835000000000001, 0.1899999999999995, 0.32624999999999815, 0.2729999999999979, 0.3197499999999991, 0.3147500000000001, 0.3017500000000002, 0.2370000000000001, 0.2550000000000008, 0.3507499999999997, 0.30900000000000016, 0.43950000000000156, 0.41000000000000103, 0.37400000000000144, 0.4955000000000016, 0.32674999999999876], zp_timestamp='2025-12-26T00:43:00')
2025-12-26T02:46:22.050 [DEBUG] [Thread-22996] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:46:22.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-26T02:46:22.136 [DEBUG] [Thread-22999] [transport.py] [_log()] starting thread (client mode): 0xb6b20880
2025-12-26T02:46:22.136 [DEBUG] [Thread-22999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:46:22.153 [DEBUG] [Thread-22999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:46:22.153 [INFO] [Thread-22999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] client lang: <none>
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] server lang: <none>
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] kex follows: False
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] Compression: none
2025-12-26T02:46:22.164 [DEBUG] [Thread-22999] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:46:22.216 [DEBUG] [Thread-22999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:46:22.216 [DEBUG] [Thread-22999] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:46:22.216 [DEBUG] [Thread-22999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:46:22.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:46:22.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:46:22.274 [DEBUG] [Thread-22999] [transport.py] [_log()] userauth is OK
2025-12-26T02:46:22.274 [DEBUG] [Thread-22999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:46:22.274 [DEBUG] [Thread-22999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:46:22.274 [DEBUG] [Thread-22999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:46:22.274 [DEBUG] [Thread-22999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:46:22.288 [INFO] [Thread-22999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:46:22.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-26T02:46:22.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:46:23.031 [DEBUG] [Thread-23001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:23.088 [DEBUG] [Thread-22999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:46:23.088 [DEBUG] [Thread-22999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:46:23.136 [DEBUG] [Thread-22999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:46:23.136 [DEBUG] [Thread-22999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:46:23.145 [DEBUG] [Thread-22999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:46:23.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:46: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')
2025-12-26T02:46:23.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-26T02:46:23.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:46:23.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:46:23.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:46:23.179 [DEBUG] [Thread-22999] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:46:28.231 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:38.071 [DEBUG] [Thread-23002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:38.363 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:42.498 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:48.642 [DEBUG] [Thread-23003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:51.587 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:51.588 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:53.104 [DEBUG] [Thread-23004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:46:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:46:53.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:46:53.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-26T02:46:53.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 46, 21), 2.77, 82.85, 0.0, 14.47, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:46:53.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:46:21
2025-12-26T02:46:54.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:46:54.224 [DEBUG] [Thread-23005] [transport.py] [_log()] starting thread (client mode): 0xbbfccf40
2025-12-26T02:46:54.225 [DEBUG] [Thread-23005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:46:54.246 [DEBUG] [Thread-23005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:46:54.246 [INFO] [Thread-23005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:54.249 [DEBUG] [Thread-23005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] client lang: <none>
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] server lang: <none>
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] kex follows: False
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] Compression: none
2025-12-26T02:46:54.250 [DEBUG] [Thread-23005] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:46:54.266 [DEBUG] [Thread-23005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:46:54.266 [DEBUG] [Thread-23005] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:46:54.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:46:54.267 [DEBUG] [Thread-23005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:46:54.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:46:54.268 [DEBUG] [Thread-23005] [transport.py] [_log()] userauth is OK
2025-12-26T02:46:54.268 [DEBUG] [Thread-23005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:46:54.268 [DEBUG] [Thread-23005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:46:54.268 [DEBUG] [Thread-23005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:46:54.268 [DEBUG] [Thread-23005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:46:54.286 [INFO] [Thread-23005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:46:54.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:46:54.927 [DEBUG] [Thread-23005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:46:54.927 [DEBUG] [Thread-23005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:46:54.927 [DEBUG] [Thread-23005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:46:54.969 [DEBUG] [Thread-23005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:46:54.969 [DEBUG] [Thread-23005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:46:54.971 [DEBUG] [Thread-23005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:46:54.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:46:54.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:46:54.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:46:54.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:46:54.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:46:54.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:46:54.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.032003 -999.00  +12.20   9.47     85   +9.80 1 1 1 2 1     0    0 2.36 0.93 ZNESW 9.5 9.5 165.2 13.3 12.8 -21.9 12.6 -21.6 12.4 -20.0 12.7 -20.9
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.032003
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:46:54.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:46:21', tmtdew=2.77, humidity=82.85, cloud=0.0, wind=14.47, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:46:05.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:45:00')
2025-12-26T02:46:54.992 [DEBUG] [Thread-23005] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:46:55.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-26T02:46:55.075 [DEBUG] [Thread-23008] [transport.py] [_log()] starting thread (client mode): 0xb6b23d60
2025-12-26T02:46:55.075 [DEBUG] [Thread-23008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:46:55.090 [DEBUG] [Thread-23008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:46:55.090 [INFO] [Thread-23008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] client lang: <none>
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] server lang: <none>
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] kex follows: False
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] Compression: none
2025-12-26T02:46:55.098 [DEBUG] [Thread-23008] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:46:55.156 [DEBUG] [Thread-23008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:46:55.156 [DEBUG] [Thread-23008] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:46:55.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:46:55.156 [DEBUG] [Thread-23008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:46:55.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:46:55.215 [DEBUG] [Thread-23008] [transport.py] [_log()] userauth is OK
2025-12-26T02:46:55.216 [DEBUG] [Thread-23008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:46:55.216 [DEBUG] [Thread-23008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:46:55.216 [DEBUG] [Thread-23008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:46:55.216 [DEBUG] [Thread-23008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:46:55.233 [INFO] [Thread-23008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:46:55.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-26T02:46:55.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:46:56.043 [DEBUG] [Thread-23008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:46:56.043 [DEBUG] [Thread-23008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:46:56.091 [DEBUG] [Thread-23008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:46:56.092 [DEBUG] [Thread-23008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:46:56.100 [DEBUG] [Thread-23008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:46:56.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:46:56.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-26T02:46:56.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-26T02:46:56.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:46:56.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:46:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:46:56.131 [DEBUG] [Thread-23008] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:47:08.134 [DEBUG] [Thread-23010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:23.191 [DEBUG] [Thread-23011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:26.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:47:26.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:47:26.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-26T02:47:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 46, 53), 2.8, 82.74, 0.0, 13.43, 12.19, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:47:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:46:53
2025-12-26T02:47:27.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:47:27.171 [DEBUG] [Thread-23012] [transport.py] [_log()] starting thread (client mode): 0xb6b16350
2025-12-26T02:47:27.171 [DEBUG] [Thread-23012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:47:27.191 [DEBUG] [Thread-23012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:47:27.191 [INFO] [Thread-23012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:47:27.194 [DEBUG] [Thread-23012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] client lang: <none>
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] server lang: <none>
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] kex follows: False
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] Compression: none
2025-12-26T02:47:27.195 [DEBUG] [Thread-23012] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:47:27.210 [DEBUG] [Thread-23012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:47:27.210 [DEBUG] [Thread-23012] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:47:27.210 [DEBUG] [Thread-23012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:47:27.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:47:27.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:47:27.255 [DEBUG] [Thread-23012] [transport.py] [_log()] userauth is OK
2025-12-26T02:47:27.255 [DEBUG] [Thread-23012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:47:27.255 [DEBUG] [Thread-23012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:47:27.255 [DEBUG] [Thread-23012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:47:27.255 [DEBUG] [Thread-23012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:47:27.270 [INFO] [Thread-23012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:47:27.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:47:28.052 [DEBUG] [Thread-23012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:47:28.053 [DEBUG] [Thread-23012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:47:28.053 [DEBUG] [Thread-23012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:47:28.093 [DEBUG] [Thread-23012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:47:28.094 [DEBUG] [Thread-23012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:47:28.096 [DEBUG] [Thread-23012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:47:28.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:47:28.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:47:28.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:47:28.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:47:28.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:47:28.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:47:28.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:47:28.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:47:28.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:47:28.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.032350 -999.00  +12.20  11.11     85   +9.90 1 1 1 2 1     0    0 2.35 1.18 ZNESW 11.1 11.1 160.4 14.7 12.7 -22.0 12.6 -21.6 12.4 -20.0 12.7 -21.0
2025-12-26T02:47:28.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:47:28.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:47:28.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.032350
2025-12-26T02:47:28.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:47:28.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:47:28.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:47:28.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:47:28.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:47:28.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:46:53', tmtdew=2.8, humidity=82.74, cloud=0.0, wind=13.43, temperature=12.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:46:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:45:00')
2025-12-26T02:47:28.121 [DEBUG] [Thread-23012] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:47:28.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-26T02:47:28.210 [DEBUG] [Thread-23015] [transport.py] [_log()] starting thread (client mode): 0xb6b16050
2025-12-26T02:47:28.210 [DEBUG] [Thread-23015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:47:28.225 [DEBUG] [Thread-23015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:47:28.225 [INFO] [Thread-23015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] client lang: <none>
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] server lang: <none>
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] kex follows: False
2025-12-26T02:47:28.232 [DEBUG] [Thread-23015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:47:28.233 [DEBUG] [Thread-23015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:47:28.233 [DEBUG] [Thread-23015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:47:28.233 [DEBUG] [Thread-23015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:47:28.233 [DEBUG] [Thread-23015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:47:28.233 [DEBUG] [Thread-23015] [transport.py] [_log()] Compression: none
2025-12-26T02:47:28.233 [DEBUG] [Thread-23015] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:47:28.296 [DEBUG] [Thread-23015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:47:28.296 [DEBUG] [Thread-23015] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:47:28.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:47:28.297 [DEBUG] [Thread-23015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:47:28.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:47:28.353 [DEBUG] [Thread-23015] [transport.py] [_log()] userauth is OK
2025-12-26T02:47:28.353 [DEBUG] [Thread-23015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:47:28.353 [DEBUG] [Thread-23015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:47:28.353 [DEBUG] [Thread-23015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:47:28.353 [DEBUG] [Thread-23015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:47:28.371 [INFO] [Thread-23015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:47:28.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-26T02:47:28.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:47:29.237 [DEBUG] [Thread-23015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:47:29.238 [DEBUG] [Thread-23015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:47:29.286 [DEBUG] [Thread-23015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:47:29.287 [DEBUG] [Thread-23015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:47:29.296 [DEBUG] [Thread-23015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:47:29.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:47:29.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:47:29.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:47:29.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:47:29.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:47:29.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:47:29.332 [DEBUG] [Thread-23015] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:47:38.227 [DEBUG] [Thread-23017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:48.720 [DEBUG] [Thread-23018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:51.803 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:51.804 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:53.290 [DEBUG] [Thread-23019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:47:59.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:47:59.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:47:59.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-26T02:48:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 47, 25), 2.79, 82.75, 0.0, 13.22, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:48:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:47:25
2025-12-26T02:48:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:48:00.365 [DEBUG] [Thread-23020] [transport.py] [_log()] starting thread (client mode): 0xb6b205e0
2025-12-26T02:48:00.365 [DEBUG] [Thread-23020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:48:00.385 [DEBUG] [Thread-23020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:48:00.385 [INFO] [Thread-23020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:48:00.388 [DEBUG] [Thread-23020] [transport.py] [_log()] client lang: <none>
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] server lang: <none>
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] kex follows: False
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] Compression: none
2025-12-26T02:48:00.389 [DEBUG] [Thread-23020] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:48:00.404 [DEBUG] [Thread-23020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:48:00.404 [DEBUG] [Thread-23020] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:48:00.405 [DEBUG] [Thread-23020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:48:00.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:48:00.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:48:00.407 [DEBUG] [Thread-23020] [transport.py] [_log()] userauth is OK
2025-12-26T02:48:00.407 [DEBUG] [Thread-23020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:48:00.407 [DEBUG] [Thread-23020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:48:00.407 [DEBUG] [Thread-23020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:48:00.407 [DEBUG] [Thread-23020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:48:00.432 [INFO] [Thread-23020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:48:00.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:48:01.030 [DEBUG] [Thread-23020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:48:01.030 [DEBUG] [Thread-23020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:48:01.030 [DEBUG] [Thread-23020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:48:01.071 [DEBUG] [Thread-23020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:48:01.071 [DEBUG] [Thread-23020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:48:01.074 [DEBUG] [Thread-23020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:48:01.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:48:01.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:48:01.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:48:01.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:48:01.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:48:01.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:48:01.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:48:01.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:48:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:48:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.032697 -999.00  +12.30  12.49     85   +9.90 1 1 1 2 1     0    0 2.40 2.02 ZNESW 12.5 12.5 165.0 15.3 12.8 -22.0 12.7 -21.6 12.4 -20.0 12.7 -20.9
2025-12-26T02:48:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:48:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:48:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.032697
2025-12-26T02:48:01.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:48:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:48:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:48:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:48:01.101 [DEBUG] [Thread-23020] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:48:01.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:48:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:47:25', tmtdew=2.79, humidity=82.75, cloud=0.0, wind=13.22, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:47:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:45:00')
2025-12-26T02:48:01.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-26T02:48:01.194 [DEBUG] [Thread-23023] [transport.py] [_log()] starting thread (client mode): 0xbbfcdba0
2025-12-26T02:48:01.194 [DEBUG] [Thread-23023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:48:01.209 [DEBUG] [Thread-23023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:48:01.210 [INFO] [Thread-23023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:48:01.217 [DEBUG] [Thread-23023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:48:01.217 [DEBUG] [Thread-23023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:48:01.218 [DEBUG] [Thread-23023] [transport.py] [_log()] client lang: <none>
2025-12-26T02:48:01.219 [DEBUG] [Thread-23023] [transport.py] [_log()] server lang: <none>
2025-12-26T02:48:01.219 [DEBUG] [Thread-23023] [transport.py] [_log()] kex follows: False
2025-12-26T02:48:01.219 [DEBUG] [Thread-23023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:48:01.219 [DEBUG] [Thread-23023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:48:01.219 [DEBUG] [Thread-23023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:48:01.219 [DEBUG] [Thread-23023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:48:01.220 [DEBUG] [Thread-23023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:48:01.220 [DEBUG] [Thread-23023] [transport.py] [_log()] Compression: none
2025-12-26T02:48:01.220 [DEBUG] [Thread-23023] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:48:01.280 [DEBUG] [Thread-23023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:48:01.281 [DEBUG] [Thread-23023] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:48:01.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:48:01.282 [DEBUG] [Thread-23023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:48:01.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:48:01.336 [DEBUG] [Thread-23023] [transport.py] [_log()] userauth is OK
2025-12-26T02:48:01.337 [DEBUG] [Thread-23023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:48:01.337 [DEBUG] [Thread-23023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:48:01.337 [DEBUG] [Thread-23023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:48:01.337 [DEBUG] [Thread-23023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:48:01.355 [INFO] [Thread-23023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:48:01.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-26T02:48:01.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:48:02.192 [DEBUG] [Thread-23023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:48:02.192 [DEBUG] [Thread-23023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:48:02.240 [DEBUG] [Thread-23023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:48:02.240 [DEBUG] [Thread-23023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:48:02.249 [DEBUG] [Thread-23023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:48:02.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:48:02.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-26T02:48:02.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-26T02:48:02.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:48:02.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:48:02.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:48:02.286 [DEBUG] [Thread-23023] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:48:08.326 [DEBUG] [Thread-23025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:48:23.376 [DEBUG] [Thread-23026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:48:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:48:32.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:48:32.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-26T02:48:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 48, 29), 2.86, 82.64, 0.0, 12.28, 12.17, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:48:33.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:48:29
2025-12-26T02:48:33.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:48:33.289 [DEBUG] [Thread-23027] [transport.py] [_log()] starting thread (client mode): 0xb6b161d0
2025-12-26T02:48:33.289 [DEBUG] [Thread-23027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:48:33.309 [DEBUG] [Thread-23027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:48:33.309 [INFO] [Thread-23027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] client lang: <none>
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] server lang: <none>
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] kex follows: False
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:48:33.312 [DEBUG] [Thread-23027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:48:33.313 [DEBUG] [Thread-23027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:48:33.313 [DEBUG] [Thread-23027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:48:33.313 [DEBUG] [Thread-23027] [transport.py] [_log()] Compression: none
2025-12-26T02:48:33.313 [DEBUG] [Thread-23027] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:48:33.329 [DEBUG] [Thread-23027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:48:33.329 [DEBUG] [Thread-23027] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:48:33.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:48:33.331 [DEBUG] [Thread-23027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:48:33.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:48:33.332 [DEBUG] [Thread-23027] [transport.py] [_log()] userauth is OK
2025-12-26T02:48:33.332 [DEBUG] [Thread-23027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:48:33.332 [DEBUG] [Thread-23027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:48:33.332 [DEBUG] [Thread-23027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:48:33.332 [DEBUG] [Thread-23027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:48:33.353 [INFO] [Thread-23027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:48:33.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:48:34.160 [DEBUG] [Thread-23027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:48:34.160 [DEBUG] [Thread-23027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:48:34.160 [DEBUG] [Thread-23027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:48:34.201 [DEBUG] [Thread-23027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:48:34.201 [DEBUG] [Thread-23027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:48:34.204 [DEBUG] [Thread-23027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:48:34.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:48:34.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:48:34.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:48:34.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:48:34.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:48:34.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:48:34.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:48:34.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:48:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:48:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.033392 -999.00  +12.30   9.37     85   +9.90 1 1 1 2 1     0    0 2.48 4.23 ZNESW 9.4 9.4 163.0 13.1 12.8 -21.9 12.7 -21.6 12.4 -20.0 12.7 -20.9
2025-12-26T02:48:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:48:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:48:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.033392
2025-12-26T02:48:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:48:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:48:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:48:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:48:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:48:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:48:29', tmtdew=2.86, humidity=82.64, cloud=0.0, wind=12.28, temperature=12.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:48:05.069', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:45:00')
2025-12-26T02:48:34.233 [DEBUG] [Thread-23027] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:48:34.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-26T02:48:34.323 [DEBUG] [Thread-23030] [transport.py] [_log()] starting thread (client mode): 0xb95f20e0
2025-12-26T02:48:34.323 [DEBUG] [Thread-23030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:48:34.338 [DEBUG] [Thread-23030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:48:34.338 [INFO] [Thread-23030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] client lang: <none>
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] server lang: <none>
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] kex follows: False
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] Compression: none
2025-12-26T02:48:34.346 [DEBUG] [Thread-23030] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:48:34.403 [DEBUG] [Thread-23030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:48:34.404 [DEBUG] [Thread-23030] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:48:34.404 [DEBUG] [Thread-23030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:48:34.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:48:34.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:48:34.462 [DEBUG] [Thread-23030] [transport.py] [_log()] userauth is OK
2025-12-26T02:48:34.463 [DEBUG] [Thread-23030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:48:34.463 [DEBUG] [Thread-23030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:48:34.463 [DEBUG] [Thread-23030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:48:34.463 [DEBUG] [Thread-23030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:48:34.487 [INFO] [Thread-23030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:48:34.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-26T02:48:34.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:48:35.305 [DEBUG] [Thread-23030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:48:35.306 [DEBUG] [Thread-23030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:48:35.354 [DEBUG] [Thread-23030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:48:35.354 [DEBUG] [Thread-23030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:48:35.363 [DEBUG] [Thread-23030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:48:35.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:48:35.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:48:35.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:48:35.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:48:35.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:48:35.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:48:35.400 [DEBUG] [Thread-23030] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:48:38.421 [DEBUG] [Thread-23032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:48:48.787 [DEBUG] [Thread-23033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:48:52.003 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:48:52.004 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:48:53.470 [DEBUG] [Thread-23034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:49:05.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:49:05.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-26T02:49:06.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 49, 1), 2.86, 82.65, 0.0, 12.28, 12.17, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:49:06.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:49:01
2025-12-26T02:49:06.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:49:06.394 [DEBUG] [Thread-23035] [transport.py] [_log()] starting thread (client mode): 0xb9591b40
2025-12-26T02:49:06.394 [DEBUG] [Thread-23035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:49:06.415 [DEBUG] [Thread-23035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:49:06.415 [INFO] [Thread-23035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] client lang: <none>
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] server lang: <none>
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] kex follows: False
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] Compression: none
2025-12-26T02:49:06.419 [DEBUG] [Thread-23035] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:49:06.436 [DEBUG] [Thread-23035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:49:06.437 [DEBUG] [Thread-23035] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:49:06.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:49:06.438 [DEBUG] [Thread-23035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:49:06.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:49:06.440 [DEBUG] [Thread-23035] [transport.py] [_log()] userauth is OK
2025-12-26T02:49:06.440 [DEBUG] [Thread-23035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:49:06.440 [DEBUG] [Thread-23035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:49:06.440 [DEBUG] [Thread-23035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:49:06.440 [DEBUG] [Thread-23035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:49:06.466 [INFO] [Thread-23035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:49:06.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:49:07.147 [DEBUG] [Thread-23035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:49:07.147 [DEBUG] [Thread-23035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:49:07.148 [DEBUG] [Thread-23035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:49:07.188 [DEBUG] [Thread-23035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:49:07.188 [DEBUG] [Thread-23035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:49:07.192 [DEBUG] [Thread-23035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:49:07.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:49:07.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:49:07.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:49:07.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:49:07.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:49:07.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:49:07.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:49:07.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:49:07.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:49:07.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.033739 -999.00  +12.30  12.67     85   +9.90 1 1 1 2 1     0    0 2.54 4.76 ZNESW 12.7 12.7 163.8 14.9 12.8 -22.0 12.7 -21.7 12.5 -20.0 12.7 -21.0
2025-12-26T02:49:07.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:49:07.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:49:07.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.033739
2025-12-26T02:49:07.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:49:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:49:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:49:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:49:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:49:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:49:01', tmtdew=2.86, humidity=82.65, cloud=0.0, wind=12.28, temperature=12.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:48:35.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:45:00')
2025-12-26T02:49:07.217 [DEBUG] [Thread-23035] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:49:07.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-26T02:49:07.310 [DEBUG] [Thread-23038] [transport.py] [_log()] starting thread (client mode): 0xb9592c50
2025-12-26T02:49:07.310 [DEBUG] [Thread-23038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:49:07.325 [DEBUG] [Thread-23038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:49:07.325 [INFO] [Thread-23038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:49:07.333 [DEBUG] [Thread-23038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:49:07.333 [DEBUG] [Thread-23038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:49:07.333 [DEBUG] [Thread-23038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:49:07.333 [DEBUG] [Thread-23038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:07.333 [DEBUG] [Thread-23038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:07.333 [DEBUG] [Thread-23038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] client lang: <none>
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] server lang: <none>
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] kex follows: False
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] Compression: none
2025-12-26T02:49:07.334 [DEBUG] [Thread-23038] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:49:07.391 [DEBUG] [Thread-23038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:49:07.392 [DEBUG] [Thread-23038] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:49:07.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:49:07.393 [DEBUG] [Thread-23038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:49:07.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:49:07.447 [DEBUG] [Thread-23038] [transport.py] [_log()] userauth is OK
2025-12-26T02:49:07.448 [DEBUG] [Thread-23038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:49:07.448 [DEBUG] [Thread-23038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:49:07.448 [DEBUG] [Thread-23038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:49:07.448 [DEBUG] [Thread-23038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:49:07.468 [INFO] [Thread-23038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:49:07.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:49:07.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:49:08.345 [DEBUG] [Thread-23038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:49:08.345 [DEBUG] [Thread-23038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:49:08.393 [DEBUG] [Thread-23038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:49:08.393 [DEBUG] [Thread-23038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:49:08.402 [DEBUG] [Thread-23038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:49:08.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:49:08.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-26T02: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') -> 00000000
2025-12-26T02:49:08.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:49:08.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:49:08.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:49:08.439 [DEBUG] [Thread-23038] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:49:08.502 [DEBUG] [Thread-23040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:23.552 [DEBUG] [Thread-23041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:38.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:49:38.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:49:38.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-26T02:49:38.583 [DEBUG] [Thread-23042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:39.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 49, 33), 2.86, 82.64, 0.0, 15.69, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:49:39.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:49:33
2025-12-26T02:49:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:49:39.443 [DEBUG] [Thread-23043] [transport.py] [_log()] starting thread (client mode): 0xb9559840
2025-12-26T02:49:39.443 [DEBUG] [Thread-23043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:49:39.463 [DEBUG] [Thread-23043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:49:39.463 [INFO] [Thread-23043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:49:39.466 [DEBUG] [Thread-23043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:49:39.466 [DEBUG] [Thread-23043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:49:39.466 [DEBUG] [Thread-23043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:49:39.466 [DEBUG] [Thread-23043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] client lang: <none>
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] server lang: <none>
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] kex follows: False
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] Compression: none
2025-12-26T02:49:39.467 [DEBUG] [Thread-23043] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:49:39.485 [DEBUG] [Thread-23043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:49:39.485 [DEBUG] [Thread-23043] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:49:39.486 [DEBUG] [Thread-23043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:49:39.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:49:39.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:49:39.487 [DEBUG] [Thread-23043] [transport.py] [_log()] userauth is OK
2025-12-26T02:49:39.488 [DEBUG] [Thread-23043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:49:39.488 [DEBUG] [Thread-23043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:49:39.488 [DEBUG] [Thread-23043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:49:39.488 [DEBUG] [Thread-23043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:49:39.505 [INFO] [Thread-23043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:49:39.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:49:40.288 [DEBUG] [Thread-23043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:49:40.288 [DEBUG] [Thread-23043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:49:40.289 [DEBUG] [Thread-23043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:49:40.329 [DEBUG] [Thread-23043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:49:40.329 [DEBUG] [Thread-23043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:49:40.333 [DEBUG] [Thread-23043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:49:40.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:49:40.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:49:40.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:49:40.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:49:40.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:49:40.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:49:40.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:49:40.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:49:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:49:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.034086 -999.00  +12.30  11.97     85   +9.90 1 1 1 2 1     0    0 2.51 5.21 ZNESW 12.0 12.0 166.4 16.4 12.8 -22.0 12.6 -21.6 12.4 -20.0 12.7 -21.0
2025-12-26T02:49:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:49:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:49:40.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.034086
2025-12-26T02:49:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:49:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:49:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:49:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:49:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:49:40.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:49:33', tmtdew=2.86, humidity=82.64, cloud=0.0, wind=15.69, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:49:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:45:00')
2025-12-26T02:49:40.361 [DEBUG] [Thread-23043] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:49:40.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-26T02:49:40.455 [DEBUG] [Thread-23046] [transport.py] [_log()] starting thread (client mode): 0xbbfcdf00
2025-12-26T02:49:40.455 [DEBUG] [Thread-23046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:49:40.469 [DEBUG] [Thread-23046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:49:40.469 [INFO] [Thread-23046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] client lang: <none>
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] server lang: <none>
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] kex follows: False
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:49:40.477 [DEBUG] [Thread-23046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:49:40.478 [DEBUG] [Thread-23046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:49:40.478 [DEBUG] [Thread-23046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:49:40.478 [DEBUG] [Thread-23046] [transport.py] [_log()] Compression: none
2025-12-26T02:49:40.478 [DEBUG] [Thread-23046] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:49:40.534 [DEBUG] [Thread-23046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:49:40.534 [DEBUG] [Thread-23046] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:49:40.535 [DEBUG] [Thread-23046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:49:40.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:49:40.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:49:40.590 [DEBUG] [Thread-23046] [transport.py] [_log()] userauth is OK
2025-12-26T02:49:40.591 [DEBUG] [Thread-23046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:49:40.591 [DEBUG] [Thread-23046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:49:40.591 [DEBUG] [Thread-23046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:49:40.591 [DEBUG] [Thread-23046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:49:40.609 [INFO] [Thread-23046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:49:40.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-26T02:49:40.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:49:41.423 [DEBUG] [Thread-23046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:49:41.423 [DEBUG] [Thread-23046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:49:41.471 [DEBUG] [Thread-23046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:49:41.471 [DEBUG] [Thread-23046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:49:41.480 [DEBUG] [Thread-23046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:49:41.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:49:41.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-26T02:49:41.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-26T02:49:41.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:49:41.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:49:41.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:49:41.517 [DEBUG] [Thread-23046] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:49:48.870 [DEBUG] [Thread-23048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:52.204 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:52.205 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:49:53.612 [DEBUG] [Thread-23049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:08.660 [DEBUG] [Thread-23050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:50:11.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:50:11.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-26T02:50:12.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 50, 5), 2.87, 82.6, 0.0, 17.49, 12.19, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:50:12.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:50:05
2025-12-26T02:50:12.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:50:12.503 [DEBUG] [Thread-23051] [transport.py] [_log()] starting thread (client mode): 0xb9593ac0
2025-12-26T02:50:12.503 [DEBUG] [Thread-23051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:50:12.524 [DEBUG] [Thread-23051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:50:12.524 [INFO] [Thread-23051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] client lang: <none>
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] server lang: <none>
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] kex follows: False
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] Compression: none
2025-12-26T02:50:12.527 [DEBUG] [Thread-23051] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:50:12.543 [DEBUG] [Thread-23051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:50:12.544 [DEBUG] [Thread-23051] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:50:12.544 [DEBUG] [Thread-23051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:50:12.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:50:12.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:50:12.546 [DEBUG] [Thread-23051] [transport.py] [_log()] userauth is OK
2025-12-26T02:50:12.546 [DEBUG] [Thread-23051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:50:12.546 [DEBUG] [Thread-23051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:50:12.546 [DEBUG] [Thread-23051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:50:12.546 [DEBUG] [Thread-23051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:50:12.562 [INFO] [Thread-23051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:50:12.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:50:15.552 [DEBUG] [Thread-23051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:50:15.553 [DEBUG] [Thread-23051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:50:15.553 [DEBUG] [Thread-23051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:50:15.594 [DEBUG] [Thread-23051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:50:15.595 [DEBUG] [Thread-23051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:50:15.597 [DEBUG] [Thread-23051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:50:15.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:50:15.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:50:15.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:50:15.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:50:15.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:50:15.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:50:15.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:50:15.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:50:15.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:50:15.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.034433 -999.00  +12.30  13.26     85   +9.90 1 1 1 2 1     0    0 2.44 5.10 ZNESW 13.3 13.3 167.2 16.3 12.8 -21.9 12.6 -21.5 12.4 -19.9 12.7 -21.0
2025-12-26T02:50:15.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:50:15.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:50:15.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.034433
2025-12-26T02:50:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:50:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:50:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:50:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:50:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:50:15.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:50:05', tmtdew=2.87, humidity=82.6, cloud=0.0, wind=17.49, temperature=12.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:49:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:48:00')
2025-12-26T02:50:15.714 [DEBUG] [Thread-23051] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:50:15.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:50:15.807 [DEBUG] [Thread-23054] [transport.py] [_log()] starting thread (client mode): 0xb9593b20
2025-12-26T02:50:15.807 [DEBUG] [Thread-23054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:50:15.822 [DEBUG] [Thread-23054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:50:15.822 [INFO] [Thread-23054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:50:15.829 [DEBUG] [Thread-23054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] client lang: <none>
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] server lang: <none>
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] kex follows: False
2025-12-26T02:50:15.830 [DEBUG] [Thread-23054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:50:15.831 [DEBUG] [Thread-23054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:50:15.831 [DEBUG] [Thread-23054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:50:15.831 [DEBUG] [Thread-23054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:50:15.831 [DEBUG] [Thread-23054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:50:15.831 [DEBUG] [Thread-23054] [transport.py] [_log()] Compression: none
2025-12-26T02:50:15.831 [DEBUG] [Thread-23054] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:50:15.890 [DEBUG] [Thread-23054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:50:15.891 [DEBUG] [Thread-23054] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:50:15.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:50:15.892 [DEBUG] [Thread-23054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:50:15.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:50:15.946 [DEBUG] [Thread-23054] [transport.py] [_log()] userauth is OK
2025-12-26T02:50:15.946 [DEBUG] [Thread-23054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:50:15.947 [DEBUG] [Thread-23054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:50:15.947 [DEBUG] [Thread-23054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:50:15.947 [DEBUG] [Thread-23054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:50:15.973 [INFO] [Thread-23054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:50:15.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-26T02:50:15.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:50:16.780 [DEBUG] [Thread-23054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:50:16.780 [DEBUG] [Thread-23054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:50:16.829 [DEBUG] [Thread-23054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:50:16.830 [DEBUG] [Thread-23054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:50:16.839 [DEBUG] [Thread-23054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:50:16.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:50:16.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-26T02:50:16.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-26T02:50:16.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:50:16.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:50:16.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:50:16.875 [DEBUG] [Thread-23054] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:50:23.691 [DEBUG] [Thread-23056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:38.743 [DEBUG] [Thread-23057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:46.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:50:46.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:50:46.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-26T02:50:47.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 50, 37), 2.87, 82.09, 0.0, 16.2, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:50:47.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:50:37
2025-12-26T02:50:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:50:47.892 [DEBUG] [Thread-23058] [transport.py] [_log()] starting thread (client mode): 0xb6b235b0
2025-12-26T02:50:47.892 [DEBUG] [Thread-23058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:50:47.913 [DEBUG] [Thread-23058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:50:47.913 [INFO] [Thread-23058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] client lang: <none>
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] server lang: <none>
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] kex follows: False
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] Compression: none
2025-12-26T02:50:47.916 [DEBUG] [Thread-23058] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:50:47.935 [DEBUG] [Thread-23058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:50:47.935 [DEBUG] [Thread-23058] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:50:47.935 [DEBUG] [Thread-23058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:50:47.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:50:47.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:50:47.936 [DEBUG] [Thread-23058] [transport.py] [_log()] userauth is OK
2025-12-26T02:50:47.936 [DEBUG] [Thread-23058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:50:47.936 [DEBUG] [Thread-23058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:50:47.936 [DEBUG] [Thread-23058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:50:47.936 [DEBUG] [Thread-23058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:50:47.945 [INFO] [Thread-23058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:50:47.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:50:48.581 [DEBUG] [Thread-23058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:50:48.581 [DEBUG] [Thread-23058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:50:48.581 [DEBUG] [Thread-23058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:50:48.622 [DEBUG] [Thread-23058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:50:48.623 [DEBUG] [Thread-23058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:50:48.625 [DEBUG] [Thread-23058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:50:48.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:50:48.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:50:48.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:50:48.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:50:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:50:48.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:50:48.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.034780 -999.00  +12.30  12.54     85   +9.80 1 1 1 2 1     0    0 2.47 5.44 ZNESW 12.5 12.5 166.2 21.3 12.8 -21.8 12.6 -21.6 12.4 -19.8 12.7 -20.8
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.034780
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:50:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:50:37', tmtdew=2.87, humidity=82.09, cloud=0.0, wind=16.2, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:50:04.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:48:00')
2025-12-26T02:50:48.643 [DEBUG] [Thread-23058] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:50:48.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-26T02:50:48.727 [DEBUG] [Thread-23061] [transport.py] [_log()] starting thread (client mode): 0xb95f3d00
2025-12-26T02:50:48.727 [DEBUG] [Thread-23061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:50:48.742 [DEBUG] [Thread-23061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:50:48.742 [INFO] [Thread-23061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] client lang: <none>
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] server lang: <none>
2025-12-26T02:50:48.749 [DEBUG] [Thread-23061] [transport.py] [_log()] kex follows: False
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] Compression: none
2025-12-26T02:50:48.750 [DEBUG] [Thread-23061] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:50:48.809 [DEBUG] [Thread-23061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:50:48.809 [DEBUG] [Thread-23061] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:50:48.809 [DEBUG] [Thread-23061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:50:48.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:50:48.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:50:48.865 [DEBUG] [Thread-23061] [transport.py] [_log()] userauth is OK
2025-12-26T02:50:48.865 [DEBUG] [Thread-23061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:50:48.865 [DEBUG] [Thread-23061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:50:48.865 [DEBUG] [Thread-23061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:50:48.865 [DEBUG] [Thread-23061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:50:48.878 [INFO] [Thread-23061] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:50:48.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-26T02:50:48.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:50:48.948 [DEBUG] [Thread-23063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:49.720 [DEBUG] [Thread-23061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:50:49.720 [DEBUG] [Thread-23061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:50:49.768 [DEBUG] [Thread-23061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:50:49.768 [DEBUG] [Thread-23061] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:50:49.776 [DEBUG] [Thread-23061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:50:49.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:50:49.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:50:49.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:50:49.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:50:49.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:50:49.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:50:49.808 [DEBUG] [Thread-23061] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:50:52.409 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:52.411 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:50:53.772 [DEBUG] [Thread-23064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:08.826 [DEBUG] [Thread-23065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:51:19.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:51:19.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-26T02:51:20.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 51, 9), 2.88, 82.05, 0.0, 14.96, 12.22, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:51:20.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:51:09
2025-12-26T02:51:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:51:20.807 [DEBUG] [Thread-23066] [transport.py] [_log()] starting thread (client mode): 0xb95f2a70
2025-12-26T02:51:20.807 [DEBUG] [Thread-23066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:51:20.828 [DEBUG] [Thread-23066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:51:20.828 [INFO] [Thread-23066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:51:20.831 [DEBUG] [Thread-23066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] client lang: <none>
2025-12-26T02:51:20.832 [DEBUG] [Thread-23066] [transport.py] [_log()] server lang: <none>
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] kex follows: False
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] Compression: none
2025-12-26T02:51:20.833 [DEBUG] [Thread-23066] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:51:20.852 [DEBUG] [Thread-23066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:51:20.852 [DEBUG] [Thread-23066] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:51:20.853 [DEBUG] [Thread-23066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:51:20.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:51:20.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:51:20.855 [DEBUG] [Thread-23066] [transport.py] [_log()] userauth is OK
2025-12-26T02:51:20.855 [DEBUG] [Thread-23066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:51:20.855 [DEBUG] [Thread-23066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:51:20.855 [DEBUG] [Thread-23066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:51:20.855 [DEBUG] [Thread-23066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:51:20.875 [INFO] [Thread-23066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:51:20.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:51:21.486 [DEBUG] [Thread-23066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:51:21.486 [DEBUG] [Thread-23066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:51:21.486 [DEBUG] [Thread-23066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:51:21.527 [DEBUG] [Thread-23066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:51:21.527 [DEBUG] [Thread-23066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:51:21.530 [DEBUG] [Thread-23066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:51:21.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:51:21.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:51:21.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:51:21.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:51:21.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:51:21.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:51:21.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:51:21.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:51:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:51:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.035128 -999.00  +12.30  16.47     84   +9.80 1 1 1 2 1     0    0 2.57 6.32 ZNESW 16.5 16.5 166.8 19.6 12.8 -21.9 12.7 -21.5 12.4 -19.9 12.7 -20.7
2025-12-26T02:51:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:51:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:51:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.035128
2025-12-26T02:51:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:51:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:51:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:51:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:51:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:51:21.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:51:09', tmtdew=2.88, humidity=82.05, cloud=0.0, wind=14.96, temperature=12.22, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:50:35.059', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:48:00')
2025-12-26T02:51:21.555 [DEBUG] [Thread-23066] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:51:21.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:51:21.649 [DEBUG] [Thread-23069] [transport.py] [_log()] starting thread (client mode): 0xb6b21ff0
2025-12-26T02:51:21.650 [DEBUG] [Thread-23069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:51:21.663 [DEBUG] [Thread-23069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:51:21.664 [INFO] [Thread-23069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:21.673 [DEBUG] [Thread-23069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] client lang: <none>
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] server lang: <none>
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] kex follows: False
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:51:21.674 [DEBUG] [Thread-23069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:51:21.675 [DEBUG] [Thread-23069] [transport.py] [_log()] Compression: none
2025-12-26T02:51:21.675 [DEBUG] [Thread-23069] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:51:21.728 [DEBUG] [Thread-23069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:51:21.729 [DEBUG] [Thread-23069] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:51:21.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:51:21.730 [DEBUG] [Thread-23069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:51:21.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:51:21.787 [DEBUG] [Thread-23069] [transport.py] [_log()] userauth is OK
2025-12-26T02:51:21.787 [DEBUG] [Thread-23069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:51:21.787 [DEBUG] [Thread-23069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:51:21.788 [DEBUG] [Thread-23069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:51:21.788 [DEBUG] [Thread-23069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:51:21.806 [INFO] [Thread-23069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:51:21.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-26T02:51:21.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:51:22.591 [DEBUG] [Thread-23069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:51:22.592 [DEBUG] [Thread-23069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:51:22.639 [DEBUG] [Thread-23069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:51:22.639 [DEBUG] [Thread-23069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:51:22.647 [DEBUG] [Thread-23069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:51:22.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:51:22.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-26T02:51:22.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-26T02:51:22.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:51:22.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:51:22.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:51:22.683 [DEBUG] [Thread-23069] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:51:23.862 [DEBUG] [Thread-23071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:38.907 [DEBUG] [Thread-23072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:49.026 [DEBUG] [Thread-23073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:52.614 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:52.615 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:52.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:51:52.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:51:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:51:53.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 51, 41), 2.99, 81.97, 0.0, 14.59, 12.24, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:51:53.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:51:41
2025-12-26T02:51:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:51:53.675 [DEBUG] [Thread-23074] [transport.py] [_log()] starting thread (client mode): 0xb95451b0
2025-12-26T02:51:53.675 [DEBUG] [Thread-23074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:51:53.691 [DEBUG] [Thread-23074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:51:53.692 [INFO] [Thread-23074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] client lang: <none>
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] server lang: <none>
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] kex follows: False
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:51:53.695 [DEBUG] [Thread-23074] [transport.py] [_log()] Compression: none
2025-12-26T02:51:53.696 [DEBUG] [Thread-23074] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:51:53.713 [DEBUG] [Thread-23074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:51:53.714 [DEBUG] [Thread-23074] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:51:53.714 [DEBUG] [Thread-23074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:51:53.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:51:53.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:51:53.757 [DEBUG] [Thread-23074] [transport.py] [_log()] userauth is OK
2025-12-26T02:51:53.757 [DEBUG] [Thread-23074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:51:53.757 [DEBUG] [Thread-23074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:51:53.758 [DEBUG] [Thread-23074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:51:53.758 [DEBUG] [Thread-23074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:51:53.790 [INFO] [Thread-23074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:51:53.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:51:53.946 [DEBUG] [Thread-23076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:51:54.415 [DEBUG] [Thread-23074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:51:54.415 [DEBUG] [Thread-23074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:51:54.416 [DEBUG] [Thread-23074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:51:54.457 [DEBUG] [Thread-23074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:51:54.457 [DEBUG] [Thread-23074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:51:54.459 [DEBUG] [Thread-23074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:51:54.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:51:54.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:51:54.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:51:54.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:51:54.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:51:54.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:51:54.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:51:54.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.035822 -999.00  +12.30  10.16     84   +9.80 1 1 1 2 1     0    0 2.56 7.87 ZNESW 10.2 10.2 160.2 13.2 12.8 -21.9 12.7 -21.6 12.4 -19.8 12.7 -20.9
2025-12-26T02:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:51:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.035822
2025-12-26T02:51:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:51:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:51:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:51:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:51:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:51:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:51:41', tmtdew=2.99, humidity=81.97, cloud=0.0, wind=14.59, temperature=12.24, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:51:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:48:00')
2025-12-26T02:51:54.486 [DEBUG] [Thread-23074] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:51:54.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-26T02:51:54.589 [DEBUG] [Thread-23078] [transport.py] [_log()] starting thread (client mode): 0xb9544d30
2025-12-26T02:51:54.589 [DEBUG] [Thread-23078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:51:54.603 [DEBUG] [Thread-23078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:51:54.603 [INFO] [Thread-23078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] client lang: <none>
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] server lang: <none>
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] kex follows: False
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:51:54.613 [DEBUG] [Thread-23078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:51:54.614 [DEBUG] [Thread-23078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:51:54.614 [DEBUG] [Thread-23078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:51:54.614 [DEBUG] [Thread-23078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:51:54.614 [DEBUG] [Thread-23078] [transport.py] [_log()] Compression: none
2025-12-26T02:51:54.614 [DEBUG] [Thread-23078] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:51:54.667 [DEBUG] [Thread-23078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:51:54.668 [DEBUG] [Thread-23078] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:51:54.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:51:54.668 [DEBUG] [Thread-23078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:51:54.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:51:54.725 [DEBUG] [Thread-23078] [transport.py] [_log()] userauth is OK
2025-12-26T02:51:54.726 [DEBUG] [Thread-23078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:51:54.726 [DEBUG] [Thread-23078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:51:54.726 [DEBUG] [Thread-23078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:51:54.726 [DEBUG] [Thread-23078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:51:54.749 [INFO] [Thread-23078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:51:54.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-26T02:51:54.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:51:55.531 [DEBUG] [Thread-23078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:51:55.531 [DEBUG] [Thread-23078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:51:55.579 [DEBUG] [Thread-23078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:51:55.580 [DEBUG] [Thread-23078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:51:55.589 [DEBUG] [Thread-23078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:51:55.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:51:55.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-26T02:51:55.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-26T02:51:55.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:51:55.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:51:55.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:51:55.624 [DEBUG] [Thread-23078] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:52:08.975 [DEBUG] [Thread-23080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:24.016 [DEBUG] [Thread-23081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:25.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:52:25.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:52:25.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-26T02:52:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 52, 14), 3.0, 81.9, 0.0, 14.31, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:52:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:52:14
2025-12-26T02:52:26.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:52:26.621 [DEBUG] [Thread-23082] [transport.py] [_log()] starting thread (client mode): 0xb6b2bdc0
2025-12-26T02:52:26.621 [DEBUG] [Thread-23082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:52:26.641 [DEBUG] [Thread-23082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:52:26.642 [INFO] [Thread-23082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:52:26.644 [DEBUG] [Thread-23082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:52:26.644 [DEBUG] [Thread-23082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] client lang: <none>
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] server lang: <none>
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] kex follows: False
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] Compression: none
2025-12-26T02:52:26.645 [DEBUG] [Thread-23082] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:52:26.666 [DEBUG] [Thread-23082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:52:26.666 [DEBUG] [Thread-23082] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:52:26.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:52:26.667 [DEBUG] [Thread-23082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:52:26.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:52:26.669 [DEBUG] [Thread-23082] [transport.py] [_log()] userauth is OK
2025-12-26T02:52:26.670 [DEBUG] [Thread-23082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:52:26.670 [DEBUG] [Thread-23082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:52:26.670 [DEBUG] [Thread-23082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:52:26.670 [DEBUG] [Thread-23082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:52:26.692 [INFO] [Thread-23082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:52:26.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:52:27.347 [DEBUG] [Thread-23082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:52:27.347 [DEBUG] [Thread-23082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:52:27.348 [DEBUG] [Thread-23082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:52:27.389 [DEBUG] [Thread-23082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:52:27.389 [DEBUG] [Thread-23082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:52:27.392 [DEBUG] [Thread-23082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:52:27.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:52:27.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:52:27.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:52:27.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:52:27.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:52:27.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:52:27.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:52:27.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:52:27.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:52:27.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.036169 -999.00  +12.30  11.23     84   +9.80 1 1 1 2 1     0    0 2.70 9.61 ZNESW 11.2 11.2 164.8 14.5 12.8 -21.9 12.7 -21.5 12.4 -19.9 12.7 -21.1
2025-12-26T02:52:27.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:52:27.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:52:27.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.036169
2025-12-26T02:52:27.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:52:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:52:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:52:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:52:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:52:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:52:14', tmtdew=3.0, humidity=81.9, cloud=0.0, wind=14.31, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:52:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.2157499999999999, 0.1692499999999999, 0.2822500000000012, 0.176499999999999, 0.18299999999999983, 0.28075000000000117, 0.5909999999999993, 0.338750000000001, 0.2234999999999996, 0.13000000000000078, 0.16825000000000045, 0.22799999999999976, 0.19899999999999984, 0.2522500000000001, 0.27399999999999913, 0.3099999999999987, 0.21224999999999916, 0.24849999999999994, 0.19649999999999856, 0.3297499999999989, 0.2879999999999985, 0.2837499999999995, 0.27674999999999983, 0.29574999999999996, 0.23599999999999888, 0.22550000000000026, 0.2892499999999991, 0.38450000000000006, 0.39700000000000024, 0.3600000000000012, 0.3680000000000012, 0.4095000000000022, 0.31074999999999875], zp_timestamp='2025-12-26T00:48:00')
2025-12-26T02:52:27.418 [DEBUG] [Thread-23082] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:52:27.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-26T02:52:27.512 [DEBUG] [Thread-23085] [transport.py] [_log()] starting thread (client mode): 0xb9547310
2025-12-26T02:52:27.512 [DEBUG] [Thread-23085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:52:27.526 [DEBUG] [Thread-23085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:52:27.526 [INFO] [Thread-23085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] client lang: <none>
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] server lang: <none>
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] kex follows: False
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:52:27.534 [DEBUG] [Thread-23085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:52:27.535 [DEBUG] [Thread-23085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:52:27.535 [DEBUG] [Thread-23085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:52:27.535 [DEBUG] [Thread-23085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:52:27.535 [DEBUG] [Thread-23085] [transport.py] [_log()] Compression: none
2025-12-26T02:52:27.535 [DEBUG] [Thread-23085] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:52:27.592 [DEBUG] [Thread-23085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:52:27.593 [DEBUG] [Thread-23085] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:52:27.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:52:27.594 [DEBUG] [Thread-23085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:52:27.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:52:27.648 [DEBUG] [Thread-23085] [transport.py] [_log()] userauth is OK
2025-12-26T02:52:27.648 [DEBUG] [Thread-23085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:52:27.649 [DEBUG] [Thread-23085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:52:27.649 [DEBUG] [Thread-23085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:52:27.649 [DEBUG] [Thread-23085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:52:27.667 [INFO] [Thread-23085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:52:27.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-26T02:52:27.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:52:28.542 [DEBUG] [Thread-23085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:52:28.542 [DEBUG] [Thread-23085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:52:28.590 [DEBUG] [Thread-23085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:52:28.590 [DEBUG] [Thread-23085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:52:28.599 [DEBUG] [Thread-23085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:52:28.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:52:28.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-26T02:52:28.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:52:28.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:52:28.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:52:28.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:52:28.636 [DEBUG] [Thread-23085] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:52:39.053 [DEBUG] [Thread-23087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:43.519 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:49.089 [DEBUG] [Thread-23088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:52.819 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:52.820 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:54.108 [DEBUG] [Thread-23089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:52:58.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:52:58.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:52:58.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-26T02:52:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 52, 46), 2.95, 81.92, 0.0, 12.78, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:52:59.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:52:46
2025-12-26T02:52:59.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:52:59.653 [DEBUG] [Thread-23090] [transport.py] [_log()] starting thread (client mode): 0xb95f18d0
2025-12-26T02:52:59.653 [DEBUG] [Thread-23090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:52:59.673 [DEBUG] [Thread-23090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:52:59.673 [INFO] [Thread-23090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:52:59.676 [DEBUG] [Thread-23090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] client lang: <none>
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] server lang: <none>
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] kex follows: False
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:52:59.677 [DEBUG] [Thread-23090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:52:59.678 [DEBUG] [Thread-23090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:52:59.678 [DEBUG] [Thread-23090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:52:59.678 [DEBUG] [Thread-23090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:52:59.678 [DEBUG] [Thread-23090] [transport.py] [_log()] Compression: none
2025-12-26T02:52:59.678 [DEBUG] [Thread-23090] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:52:59.696 [DEBUG] [Thread-23090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:52:59.696 [DEBUG] [Thread-23090] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:52:59.697 [DEBUG] [Thread-23090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:52:59.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:52:59.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:52:59.700 [DEBUG] [Thread-23090] [transport.py] [_log()] userauth is OK
2025-12-26T02:52:59.700 [DEBUG] [Thread-23090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:52:59.700 [DEBUG] [Thread-23090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:52:59.700 [DEBUG] [Thread-23090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:52:59.700 [DEBUG] [Thread-23090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:52:59.723 [INFO] [Thread-23090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:52:59.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:53:00.346 [DEBUG] [Thread-23090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:53:00.346 [DEBUG] [Thread-23090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:53:00.346 [DEBUG] [Thread-23090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:53:00.387 [DEBUG] [Thread-23090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:53:00.387 [DEBUG] [Thread-23090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:53:00.391 [DEBUG] [Thread-23090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:53:00.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:53:00.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:53:00.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:53:00.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:53:00.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:53:00.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:53:00.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:53:00.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:53:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:53:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.036516 -999.00  +12.30   9.87     84   +9.80 1 1 1 2 1     0    0 2.58 9.37 ZNESW 9.9 9.9 160.6 14.8 12.8 -21.9 12.6 -21.8 -999.0 -999.0 12.7 -20.9
2025-12-26T02:53:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:53:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:53:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.036516
2025-12-26T02:53:00.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:53:00.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:53:00.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:53:00.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:53:00.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:53:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:52:46', tmtdew=2.95, humidity=81.92, cloud=0.0, wind=12.78, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:52:34.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.17675000000000018, 0.17474999999999952, 0.2807499999999994, 0.18849999999999945, 0.15500000000000114, 0.1907500000000013, 0.29100000000000037, 0.33475000000000144, 0.23849999999999838, 0.15700000000000003, 0.15474999999999994, 0.2419999999999991, 0.2129999999999992, 0.21025000000000027, 0.2560000000000002, 0.24599999999999866, 0.20624999999999893, 0.28749999999999964, 0.18149999999999977, 0.321749999999998, 0.26349999999999874, 0.2707499999999996, 0.2997499999999995, 0.2787500000000005, 0.24349999999999916, 0.25399999999999956, 0.2787500000000005, 0.3680000000000003, 0.3780000000000001, 0.354000000000001, 0.36400000000000077, 0.4215, 0.31574999999999953], zp_timestamp='2025-12-26T00:51:00')
2025-12-26T02:53:00.418 [DEBUG] [Thread-23090] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:53:00.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-26T02:53:00.514 [DEBUG] [Thread-23093] [transport.py] [_log()] starting thread (client mode): 0xb95f0ac0
2025-12-26T02:53:00.514 [DEBUG] [Thread-23093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:53:00.528 [DEBUG] [Thread-23093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:53:00.529 [INFO] [Thread-23093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:53:00.536 [DEBUG] [Thread-23093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:53:00.536 [DEBUG] [Thread-23093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:53:00.536 [DEBUG] [Thread-23093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:53:00.536 [DEBUG] [Thread-23093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:53:00.536 [DEBUG] [Thread-23093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] client lang: <none>
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] server lang: <none>
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] kex follows: False
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] Compression: none
2025-12-26T02:53:00.537 [DEBUG] [Thread-23093] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:53:00.596 [DEBUG] [Thread-23093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:53:00.597 [DEBUG] [Thread-23093] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:53:00.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:53:00.598 [DEBUG] [Thread-23093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:53:00.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:53:00.652 [DEBUG] [Thread-23093] [transport.py] [_log()] userauth is OK
2025-12-26T02:53:00.652 [DEBUG] [Thread-23093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:53:00.652 [DEBUG] [Thread-23093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:53:00.652 [DEBUG] [Thread-23093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:53:00.652 [DEBUG] [Thread-23093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:53:00.672 [INFO] [Thread-23093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:53:00.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-26T02:53:00.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:53:01.472 [DEBUG] [Thread-23093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:53:01.472 [DEBUG] [Thread-23093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:53:01.520 [DEBUG] [Thread-23093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:53:01.521 [DEBUG] [Thread-23093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:53:01.530 [DEBUG] [Thread-23093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:53:01.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:53:01.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-26T02:53:01.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-26T02:53:01.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:53:01.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:53:01.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:53:01.567 [DEBUG] [Thread-23093] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:53:09.143 [DEBUG] [Thread-23095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:53:24.201 [DEBUG] [Thread-23096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:53:31.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:53:31.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:53:31.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-26T02:53:32.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 53, 18), 2.94, 81.97, 0.0, 13.89, 12.17, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:53:32.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:53:18
2025-12-26T02:53:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:53:32.569 [DEBUG] [Thread-23097] [transport.py] [_log()] starting thread (client mode): 0xb6b62b60
2025-12-26T02:53:32.569 [DEBUG] [Thread-23097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:53:32.590 [DEBUG] [Thread-23097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:53:32.590 [INFO] [Thread-23097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] client lang: <none>
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] server lang: <none>
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] kex follows: False
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] Compression: none
2025-12-26T02:53:32.593 [DEBUG] [Thread-23097] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:53:32.611 [DEBUG] [Thread-23097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:53:32.612 [DEBUG] [Thread-23097] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:53:32.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:53:32.613 [DEBUG] [Thread-23097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:53:32.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:53:32.615 [DEBUG] [Thread-23097] [transport.py] [_log()] userauth is OK
2025-12-26T02:53:32.615 [DEBUG] [Thread-23097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:53:32.615 [DEBUG] [Thread-23097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:53:32.615 [DEBUG] [Thread-23097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:53:32.615 [DEBUG] [Thread-23097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:53:32.633 [INFO] [Thread-23097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:53:32.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:53:33.245 [DEBUG] [Thread-23097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:53:33.246 [DEBUG] [Thread-23097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:53:33.246 [DEBUG] [Thread-23097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:53:33.286 [DEBUG] [Thread-23097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:53:33.287 [DEBUG] [Thread-23097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:53:33.291 [DEBUG] [Thread-23097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:53:33.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:53:33.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:53:33.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:53:33.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:53:33.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:53:33.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:53:33.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:53:33.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:53:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:53:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.036864 -999.00  +12.30  10.25     84   +9.80 1 1 1 2 1     0    0 2.68 11.39 ZNESW 10.2 10.2 166.9 14.2 12.8 -21.9 12.7 -21.8 12.4 -19.9 12.7 -20.8
2025-12-26T02:53:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:53:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:53:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.036864
2025-12-26T02:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:53:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:53:18', tmtdew=2.94, humidity=81.97, cloud=0.0, wind=13.89, temperature=12.17, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:53:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.17675000000000018, 0.17474999999999952, 0.2807499999999994, 0.18849999999999945, 0.15500000000000114, 0.1907500000000013, 0.29100000000000037, 0.33475000000000144, 0.23849999999999838, 0.15700000000000003, 0.15474999999999994, 0.2419999999999991, 0.2129999999999992, 0.21025000000000027, 0.2560000000000002, 0.24599999999999866, 0.20624999999999893, 0.28749999999999964, 0.18149999999999977, 0.321749999999998, 0.26349999999999874, 0.2707499999999996, 0.2997499999999995, 0.2787500000000005, 0.24349999999999916, 0.25399999999999956, 0.2787500000000005, 0.3680000000000003, 0.3780000000000001, 0.354000000000001, 0.36400000000000077, 0.4215, 0.31574999999999953], zp_timestamp='2025-12-26T00:51:00')
2025-12-26T02:53:33.315 [DEBUG] [Thread-23097] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:53:33.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-26T02:53:33.410 [DEBUG] [Thread-23100] [transport.py] [_log()] starting thread (client mode): 0xb9593610
2025-12-26T02:53:33.410 [DEBUG] [Thread-23100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:53:33.425 [DEBUG] [Thread-23100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:53:33.425 [INFO] [Thread-23100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] client lang: <none>
2025-12-26T02:53:33.433 [DEBUG] [Thread-23100] [transport.py] [_log()] server lang: <none>
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] kex follows: False
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] Compression: none
2025-12-26T02:53:33.434 [DEBUG] [Thread-23100] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:53:33.490 [DEBUG] [Thread-23100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:53:33.491 [DEBUG] [Thread-23100] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:53:33.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:53:33.492 [DEBUG] [Thread-23100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:53:33.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:53:33.548 [DEBUG] [Thread-23100] [transport.py] [_log()] userauth is OK
2025-12-26T02:53:33.548 [DEBUG] [Thread-23100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:53:33.548 [DEBUG] [Thread-23100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:53:33.548 [DEBUG] [Thread-23100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:53:33.549 [DEBUG] [Thread-23100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:53:33.568 [INFO] [Thread-23100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:53:33.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-26T02:53:33.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:53:34.364 [DEBUG] [Thread-23100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:53:34.364 [DEBUG] [Thread-23100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:53:34.413 [DEBUG] [Thread-23100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:53:34.413 [DEBUG] [Thread-23100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:53:34.422 [DEBUG] [Thread-23100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:53:34.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:53:34.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-26T02:53:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:53:34.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:53:34.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:53:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:53:34.458 [DEBUG] [Thread-23100] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:53:39.231 [DEBUG] [Thread-23102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:53:49.156 [DEBUG] [Thread-23103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:53:53.019 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:53:53.020 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:53:54.292 [DEBUG] [Thread-23104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:04.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:54:04.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:54:04.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-26T02:54:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 53, 50), 2.93, 82.02, 0.0, 16.48, 12.19, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:54:05.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:53:50
2025-12-26T02:54:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:54:05.517 [DEBUG] [Thread-23105] [transport.py] [_log()] starting thread (client mode): 0xb95909d0
2025-12-26T02:54:05.518 [DEBUG] [Thread-23105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:54:05.537 [DEBUG] [Thread-23105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:54:05.537 [INFO] [Thread-23105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:54:05.540 [DEBUG] [Thread-23105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:54:05.540 [DEBUG] [Thread-23105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:54:05.540 [DEBUG] [Thread-23105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:54:05.540 [DEBUG] [Thread-23105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] client lang: <none>
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] server lang: <none>
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] kex follows: False
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] Compression: none
2025-12-26T02:54:05.541 [DEBUG] [Thread-23105] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:54:05.557 [DEBUG] [Thread-23105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:54:05.557 [DEBUG] [Thread-23105] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:54:05.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:54:05.557 [DEBUG] [Thread-23105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:54:05.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:54:05.558 [DEBUG] [Thread-23105] [transport.py] [_log()] userauth is OK
2025-12-26T02:54:05.558 [DEBUG] [Thread-23105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:54:05.558 [DEBUG] [Thread-23105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:54:05.558 [DEBUG] [Thread-23105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:54:05.559 [DEBUG] [Thread-23105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:54:05.574 [INFO] [Thread-23105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:54:05.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:54:06.231 [DEBUG] [Thread-23105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:54:06.231 [DEBUG] [Thread-23105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:54:06.231 [DEBUG] [Thread-23105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:54:06.271 [DEBUG] [Thread-23105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:54:06.271 [DEBUG] [Thread-23105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:54:06.273 [DEBUG] [Thread-23105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:54:06.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:54:06.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:54:06.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:54:06.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:54:06.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:54:06.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:54:06.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.037211 -999.00  +12.30  11.34     84   +9.80 1 1 1 2 1     0    0 2.63 11.94 ZNESW 11.3 11.3 167.6 15.8 12.8 -21.8 12.7 -21.6 12.4 -20.0 12.8 -21.0
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.037211
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:54:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:53:50', tmtdew=2.93, humidity=82.02, cloud=0.0, wind=16.48, temperature=12.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:53:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.17675000000000018, 0.17474999999999952, 0.2807499999999994, 0.18849999999999945, 0.15500000000000114, 0.1907500000000013, 0.29100000000000037, 0.33475000000000144, 0.23849999999999838, 0.15700000000000003, 0.15474999999999994, 0.2419999999999991, 0.2129999999999992, 0.21025000000000027, 0.2560000000000002, 0.24599999999999866, 0.20624999999999893, 0.28749999999999964, 0.18149999999999977, 0.321749999999998, 0.26349999999999874, 0.2707499999999996, 0.2997499999999995, 0.2787500000000005, 0.24349999999999916, 0.25399999999999956, 0.2787500000000005, 0.3680000000000003, 0.3780000000000001, 0.354000000000001, 0.36400000000000077, 0.4215, 0.31574999999999953], zp_timestamp='2025-12-26T00:51:00')
2025-12-26T02:54:06.292 [DEBUG] [Thread-23105] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:54:06.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-26T02:54:06.375 [DEBUG] [Thread-23108] [transport.py] [_log()] starting thread (client mode): 0xb9547f40
2025-12-26T02:54:06.375 [DEBUG] [Thread-23108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:54:06.390 [DEBUG] [Thread-23108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:54:06.390 [INFO] [Thread-23108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:06.397 [DEBUG] [Thread-23108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] client lang: <none>
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] server lang: <none>
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] kex follows: False
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] Compression: none
2025-12-26T02:54:06.398 [DEBUG] [Thread-23108] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:54:06.453 [DEBUG] [Thread-23108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:54:06.453 [DEBUG] [Thread-23108] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:54:06.453 [DEBUG] [Thread-23108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:54:06.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:54:06.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:54:06.510 [DEBUG] [Thread-23108] [transport.py] [_log()] userauth is OK
2025-12-26T02:54:06.510 [DEBUG] [Thread-23108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:54:06.510 [DEBUG] [Thread-23108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:54:06.510 [DEBUG] [Thread-23108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:54:06.510 [DEBUG] [Thread-23108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:54:06.524 [INFO] [Thread-23108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:54:06.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-26T02:54:06.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:54:07.301 [DEBUG] [Thread-23108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:54:07.301 [DEBUG] [Thread-23108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:54:07.349 [DEBUG] [Thread-23108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:54:07.350 [DEBUG] [Thread-23108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:54:07.358 [DEBUG] [Thread-23108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:54:07.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:54:07.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-26T02:54:07.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-26T02:54:07.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:54:07.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:54:07.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:54:07.389 [DEBUG] [Thread-23108] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:54:09.323 [DEBUG] [Thread-23110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:24.381 [DEBUG] [Thread-23111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:37.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:54:37.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:54:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:54:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 54, 22), 2.93, 82.02, 0.0, 16.11, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:54:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:54:22
2025-12-26T02:54:38.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:54:38.404 [DEBUG] [Thread-23112] [transport.py] [_log()] starting thread (client mode): 0xb9545cf0
2025-12-26T02:54:38.404 [DEBUG] [Thread-23112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:54:38.421 [DEBUG] [Thread-23112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:54:38.421 [INFO] [Thread-23112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] client lang: <none>
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] server lang: <none>
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] kex follows: False
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] Compression: none
2025-12-26T02:54:38.424 [DEBUG] [Thread-23112] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:54:38.434 [DEBUG] [Thread-23112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:54:38.435 [DEBUG] [Thread-23112] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:54:38.435 [DEBUG] [Thread-23112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:54:38.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:54:38.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:54:38.437 [DEBUG] [Thread-23112] [transport.py] [_log()] userauth is OK
2025-12-26T02:54:38.437 [DEBUG] [Thread-23112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:54:38.437 [DEBUG] [Thread-23112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:54:38.437 [DEBUG] [Thread-23112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:54:38.437 [DEBUG] [Thread-23112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:54:38.455 [INFO] [Thread-23112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:54:38.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:54:39.093 [DEBUG] [Thread-23112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:54:39.093 [DEBUG] [Thread-23112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:54:39.094 [DEBUG] [Thread-23112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:54:39.134 [DEBUG] [Thread-23112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:54:39.134 [DEBUG] [Thread-23112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:54:39.137 [DEBUG] [Thread-23112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:54:39.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:54:39.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:54:39.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:54:39.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:54:39.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:54:39.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:54:39.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:54:39.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:54:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:54:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.037558 -999.00  +12.30   8.88     84   +9.80 1 1 1 2 1     0    0 2.78 12.44 ZNESW 8.9 8.9 152.0 14.6 12.8 -21.8 12.7 -21.5 12.4 -20.0 12.7 -21.0
2025-12-26T02:54:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:54:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:54:39.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.037558
2025-12-26T02:54:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:54:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:54:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:54:39.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:54:39.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:54:39.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:54:22', tmtdew=2.93, humidity=82.02, cloud=0.0, wind=16.11, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:54:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.17675000000000018, 0.17474999999999952, 0.2807499999999994, 0.18849999999999945, 0.15500000000000114, 0.1907500000000013, 0.29100000000000037, 0.33475000000000144, 0.23849999999999838, 0.15700000000000003, 0.15474999999999994, 0.2419999999999991, 0.2129999999999992, 0.21025000000000027, 0.2560000000000002, 0.24599999999999866, 0.20624999999999893, 0.28749999999999964, 0.18149999999999977, 0.321749999999998, 0.26349999999999874, 0.2707499999999996, 0.2997499999999995, 0.2787500000000005, 0.24349999999999916, 0.25399999999999956, 0.2787500000000005, 0.3680000000000003, 0.3780000000000001, 0.354000000000001, 0.36400000000000077, 0.4215, 0.31574999999999953], zp_timestamp='2025-12-26T00:51:00')
2025-12-26T02:54:39.160 [DEBUG] [Thread-23112] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:54:39.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-26T02:54:39.260 [DEBUG] [Thread-23115] [transport.py] [_log()] starting thread (client mode): 0xb95f2110
2025-12-26T02:54:39.260 [DEBUG] [Thread-23115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:54:39.274 [DEBUG] [Thread-23115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:54:39.274 [INFO] [Thread-23115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] client lang: <none>
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] server lang: <none>
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] kex follows: False
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:54:39.282 [DEBUG] [Thread-23115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:54:39.283 [DEBUG] [Thread-23115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:54:39.283 [DEBUG] [Thread-23115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:54:39.283 [DEBUG] [Thread-23115] [transport.py] [_log()] Compression: none
2025-12-26T02:54:39.283 [DEBUG] [Thread-23115] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:54:39.342 [DEBUG] [Thread-23115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:54:39.343 [DEBUG] [Thread-23115] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:54:39.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:54:39.344 [DEBUG] [Thread-23115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:54:39.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:54:39.398 [DEBUG] [Thread-23115] [transport.py] [_log()] userauth is OK
2025-12-26T02:54:39.398 [DEBUG] [Thread-23115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:54:39.398 [DEBUG] [Thread-23115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:54:39.398 [DEBUG] [Thread-23115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:54:39.398 [DEBUG] [Thread-23115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:54:39.412 [DEBUG] [Thread-23117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:39.421 [INFO] [Thread-23115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:54:39.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-26T02:54:39.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:54:40.224 [DEBUG] [Thread-23115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:54:40.225 [DEBUG] [Thread-23115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:54:40.272 [DEBUG] [Thread-23115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:54:40.272 [DEBUG] [Thread-23115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:54:40.282 [DEBUG] [Thread-23115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:54:40.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:54:40.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:54:40.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:54:40.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:54:40.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:54:40.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:54:40.316 [DEBUG] [Thread-23115] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:54:49.224 [DEBUG] [Thread-23118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:53.224 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:53.226 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:54:54.455 [DEBUG] [Thread-23119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:09.493 [DEBUG] [Thread-23120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:10.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:55:10.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:55:10.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:55:11.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 54, 54), 2.99, 81.99, 0.0, 16.32, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:55:11.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:54:54
2025-12-26T02:55:11.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:55:11.333 [DEBUG] [Thread-23121] [transport.py] [_log()] starting thread (client mode): 0xb95b0190
2025-12-26T02:55:11.333 [DEBUG] [Thread-23121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:55:11.348 [DEBUG] [Thread-23121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:55:11.348 [INFO] [Thread-23121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:11.351 [DEBUG] [Thread-23121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] client lang: <none>
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] server lang: <none>
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] kex follows: False
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] Compression: none
2025-12-26T02:55:11.352 [DEBUG] [Thread-23121] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:55:11.369 [DEBUG] [Thread-23121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:55:11.370 [DEBUG] [Thread-23121] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:55:11.370 [DEBUG] [Thread-23121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:55:11.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:55:11.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:55:11.372 [DEBUG] [Thread-23121] [transport.py] [_log()] userauth is OK
2025-12-26T02:55:11.373 [DEBUG] [Thread-23121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:55:11.373 [DEBUG] [Thread-23121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:55:11.373 [DEBUG] [Thread-23121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:55:11.373 [DEBUG] [Thread-23121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:55:11.398 [INFO] [Thread-23121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:55:11.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:55:12.007 [DEBUG] [Thread-23121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:55:12.007 [DEBUG] [Thread-23121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:55:12.008 [DEBUG] [Thread-23121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:55:12.048 [DEBUG] [Thread-23121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:55:12.048 [DEBUG] [Thread-23121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:55:12.051 [DEBUG] [Thread-23121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:55:12.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:55:12.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:55:12.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:55:12.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:55:12.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:55:12.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:55:12.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:55:12.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:55:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:55:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.038252 -999.00  +12.30  11.53     85   +9.90 1 1 1 2 1     0    0 2.73 12.24 ZNESW 11.5 11.5 170.2 13.5 12.8 -21.9 12.7 -21.7 12.4 -19.9 12.7 -21.0
2025-12-26T02:55:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:55:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:55:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.038252
2025-12-26T02:55:12.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:55:12.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:55:12.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:55:12.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:55:12.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:55:12.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:54:54', tmtdew=2.99, humidity=81.99, cloud=0.0, wind=16.32, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:55:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.17675000000000018, 0.17474999999999952, 0.2807499999999994, 0.18849999999999945, 0.15500000000000114, 0.1907500000000013, 0.29100000000000037, 0.33475000000000144, 0.23849999999999838, 0.15700000000000003, 0.15474999999999994, 0.2419999999999991, 0.2129999999999992, 0.21025000000000027, 0.2560000000000002, 0.24599999999999866, 0.20624999999999893, 0.28749999999999964, 0.18149999999999977, 0.321749999999998, 0.26349999999999874, 0.2707499999999996, 0.2997499999999995, 0.2787500000000005, 0.24349999999999916, 0.25399999999999956, 0.2787500000000005, 0.3680000000000003, 0.3780000000000001, 0.354000000000001, 0.36400000000000077, 0.4215, 0.31574999999999953], zp_timestamp='2025-12-26T00:51:00')
2025-12-26T02:55:12.074 [DEBUG] [Thread-23121] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:55:12.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:55:12.168 [DEBUG] [Thread-23124] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-26T02:55:12.169 [DEBUG] [Thread-23124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:55:12.183 [DEBUG] [Thread-23124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:55:12.183 [INFO] [Thread-23124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:55:12.191 [DEBUG] [Thread-23124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:55:12.191 [DEBUG] [Thread-23124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] client lang: <none>
2025-12-26T02:55:12.192 [DEBUG] [Thread-23124] [transport.py] [_log()] server lang: <none>
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] kex follows: False
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] Compression: none
2025-12-26T02:55:12.193 [DEBUG] [Thread-23124] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:55:12.251 [DEBUG] [Thread-23124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:55:12.251 [DEBUG] [Thread-23124] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:55:12.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:55:12.253 [DEBUG] [Thread-23124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:55:12.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:55:12.309 [DEBUG] [Thread-23124] [transport.py] [_log()] userauth is OK
2025-12-26T02:55:12.309 [DEBUG] [Thread-23124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:55:12.310 [DEBUG] [Thread-23124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:55:12.310 [DEBUG] [Thread-23124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:55:12.310 [DEBUG] [Thread-23124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:55:12.331 [INFO] [Thread-23124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:55: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-26T02:55:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:55:13.139 [DEBUG] [Thread-23124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:55:13.139 [DEBUG] [Thread-23124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:55:13.187 [DEBUG] [Thread-23124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:55:13.187 [DEBUG] [Thread-23124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:55:13.196 [DEBUG] [Thread-23124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:55:13.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:55:13.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-26T02:55:13.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-26T02:55:13.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:55:13.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:55:13.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:55:13.240 [DEBUG] [Thread-23124] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:55:24.526 [DEBUG] [Thread-23126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:39.567 [DEBUG] [Thread-23127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:43.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:55:43.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:55:43.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:55:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 55, 26), 2.99, 81.99, 0.0, 16.2, 12.25, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:55:43.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:55:26
2025-12-26T02:55:44.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:55:44.237 [DEBUG] [Thread-23128] [transport.py] [_log()] starting thread (client mode): 0xb9592950
2025-12-26T02:55:44.237 [DEBUG] [Thread-23128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:55:44.258 [DEBUG] [Thread-23128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:55:44.258 [INFO] [Thread-23128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:55:44.261 [DEBUG] [Thread-23128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] client lang: <none>
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] server lang: <none>
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] kex follows: False
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] Compression: none
2025-12-26T02:55:44.262 [DEBUG] [Thread-23128] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:55:44.279 [DEBUG] [Thread-23128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:55:44.279 [DEBUG] [Thread-23128] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:55:44.280 [DEBUG] [Thread-23128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:55:44.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:55:44.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:55:44.282 [DEBUG] [Thread-23128] [transport.py] [_log()] userauth is OK
2025-12-26T02:55:44.282 [DEBUG] [Thread-23128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:55:44.282 [DEBUG] [Thread-23128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:55:44.282 [DEBUG] [Thread-23128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:55:44.282 [DEBUG] [Thread-23128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:55:44.318 [INFO] [Thread-23128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:55:44.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:55:44.975 [DEBUG] [Thread-23128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:55:44.975 [DEBUG] [Thread-23128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:55:44.976 [DEBUG] [Thread-23128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:55:45.016 [DEBUG] [Thread-23128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:55:45.016 [DEBUG] [Thread-23128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:55:45.020 [DEBUG] [Thread-23128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:55:45.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:55:45.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:55:45.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:55:45.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:55:45.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:55:45.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:55:45.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:55:45.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:55:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:55:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.038252 -999.00  +12.30  11.53     85   +9.90 1 1 1 2 1     0    0 2.73 12.24 ZNESW 11.5 11.5 170.2 13.5 12.8 -21.9 12.7 -21.7 12.4 -19.9 12.7 -21.0
2025-12-26T02:55:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:55:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:55:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.038252
2025-12-26T02:55:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:55:45.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:55:45.047 [DEBUG] [Thread-23128] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:55:45.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:55:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:55:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:55:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:55:26', tmtdew=2.99, humidity=81.99, cloud=0.0, wind=16.2, temperature=12.25, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:55:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.17675000000000018, 0.17474999999999952, 0.2807499999999994, 0.18849999999999945, 0.15500000000000114, 0.1907500000000013, 0.29100000000000037, 0.33475000000000144, 0.23849999999999838, 0.15700000000000003, 0.15474999999999994, 0.2419999999999991, 0.2129999999999992, 0.21025000000000027, 0.2560000000000002, 0.24599999999999866, 0.20624999999999893, 0.28749999999999964, 0.18149999999999977, 0.321749999999998, 0.26349999999999874, 0.2707499999999996, 0.2997499999999995, 0.2787500000000005, 0.24349999999999916, 0.25399999999999956, 0.2787500000000005, 0.3680000000000003, 0.3780000000000001, 0.354000000000001, 0.36400000000000077, 0.4215, 0.31574999999999953], zp_timestamp='2025-12-26T00:51:00')
2025-12-26T02:55:45.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-26T02:55:45.144 [DEBUG] [Thread-23131] [transport.py] [_log()] starting thread (client mode): 0xb9591e70
2025-12-26T02:55:45.144 [DEBUG] [Thread-23131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:55:45.159 [DEBUG] [Thread-23131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:55:45.159 [INFO] [Thread-23131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] client lang: <none>
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] server lang: <none>
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] kex follows: False
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:55:45.167 [DEBUG] [Thread-23131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:55:45.168 [DEBUG] [Thread-23131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:55:45.168 [DEBUG] [Thread-23131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:55:45.168 [DEBUG] [Thread-23131] [transport.py] [_log()] Compression: none
2025-12-26T02:55:45.168 [DEBUG] [Thread-23131] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:55:45.226 [DEBUG] [Thread-23131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:55:45.226 [DEBUG] [Thread-23131] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:55:45.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:55:45.227 [DEBUG] [Thread-23131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:55:45.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:55:45.282 [DEBUG] [Thread-23131] [transport.py] [_log()] userauth is OK
2025-12-26T02:55:45.282 [DEBUG] [Thread-23131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:55:45.283 [DEBUG] [Thread-23131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:55:45.283 [DEBUG] [Thread-23131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:55:45.283 [DEBUG] [Thread-23131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:55:45.301 [INFO] [Thread-23131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:55:45.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-26T02:55:45.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:55:46.115 [DEBUG] [Thread-23131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:55:46.115 [DEBUG] [Thread-23131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:55:46.166 [DEBUG] [Thread-23131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:55:46.166 [DEBUG] [Thread-23131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:55:46.180 [DEBUG] [Thread-23131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:55:46.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:55:46.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-26T02:55:46.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:55:46.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:55:46.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:55:46.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:55:46.226 [DEBUG] [Thread-23131] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:55:49.298 [DEBUG] [Thread-23133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:53.427 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:53.428 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:55:54.607 [DEBUG] [Thread-23134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:09.654 [DEBUG] [Thread-23135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:56:16.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:56:16.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-26T02:56:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 55, 58), 2.95, 81.94, 0.0, 15.86, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:56:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:55:58
2025-12-26T02:56:17.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:56:17.215 [DEBUG] [Thread-23136] [transport.py] [_log()] starting thread (client mode): 0xb95461d0
2025-12-26T02:56:17.215 [DEBUG] [Thread-23136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:56:17.235 [DEBUG] [Thread-23136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:56:17.235 [INFO] [Thread-23136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:56:17.238 [DEBUG] [Thread-23136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] client lang: <none>
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] server lang: <none>
2025-12-26T02:56:17.239 [DEBUG] [Thread-23136] [transport.py] [_log()] kex follows: False
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] Compression: none
2025-12-26T02:56:17.240 [DEBUG] [Thread-23136] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:56:17.259 [DEBUG] [Thread-23136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:56:17.260 [DEBUG] [Thread-23136] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:56:17.261 [DEBUG] [Thread-23136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:56:17.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:56:17.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:56:17.305 [DEBUG] [Thread-23136] [transport.py] [_log()] userauth is OK
2025-12-26T02:56:17.305 [DEBUG] [Thread-23136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:56:17.305 [DEBUG] [Thread-23136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:56:17.305 [DEBUG] [Thread-23136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:56:17.305 [DEBUG] [Thread-23136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:56:17.330 [INFO] [Thread-23136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:56:17.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:56:17.956 [DEBUG] [Thread-23136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:56:17.956 [DEBUG] [Thread-23136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:56:17.957 [DEBUG] [Thread-23136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:56:17.997 [DEBUG] [Thread-23136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:56:17.997 [DEBUG] [Thread-23136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:56:18.001 [DEBUG] [Thread-23136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:56:18.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:56:18.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:56:18.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:56:18.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:56:18.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:56:18.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:56:18.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:56:18.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:56:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:56:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.038600 -999.00  +12.30   9.85     85   +9.90 1 1 1 2 1     0    0 2.76 11.59 ZNESW 9.8 9.8 152.0 16.8 12.8 -21.9 12.7 -21.6 12.4 -20.0 12.7 -20.9
2025-12-26T02:56:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:56:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:56:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.038600
2025-12-26T02:56:18.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:56:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:56:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:56:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:56:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:56:18.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:55:58', tmtdew=2.95, humidity=81.94, cloud=0.0, wind=15.86, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:55:35.040', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:55:00')
2025-12-26T02:56:18.028 [DEBUG] [Thread-23136] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:56:18.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-26T02:56:18.131 [DEBUG] [Thread-23139] [transport.py] [_log()] starting thread (client mode): 0xb9547070
2025-12-26T02:56:18.131 [DEBUG] [Thread-23139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:56:18.146 [DEBUG] [Thread-23139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:56:18.146 [INFO] [Thread-23139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:56:18.153 [DEBUG] [Thread-23139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] client lang: <none>
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] server lang: <none>
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] kex follows: False
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:56:18.154 [DEBUG] [Thread-23139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:56:18.155 [DEBUG] [Thread-23139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:56:18.155 [DEBUG] [Thread-23139] [transport.py] [_log()] Compression: none
2025-12-26T02:56:18.155 [DEBUG] [Thread-23139] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:56:18.213 [DEBUG] [Thread-23139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:56:18.214 [DEBUG] [Thread-23139] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:56:18.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:56:18.215 [DEBUG] [Thread-23139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:56:18.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:56:18.269 [DEBUG] [Thread-23139] [transport.py] [_log()] userauth is OK
2025-12-26T02:56:18.270 [DEBUG] [Thread-23139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:56:18.270 [DEBUG] [Thread-23139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:56:18.270 [DEBUG] [Thread-23139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:56:18.270 [DEBUG] [Thread-23139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:56:18.289 [INFO] [Thread-23139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:56:18.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-26T02:56:18.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:56:19.114 [DEBUG] [Thread-23139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:56:19.114 [DEBUG] [Thread-23139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:56:19.163 [DEBUG] [Thread-23139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:56:19.163 [DEBUG] [Thread-23139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:56:19.172 [DEBUG] [Thread-23139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:56:19.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:56:19.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-26T02:56:19.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-26T02:56:19.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:56:19.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:56:19.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:56:19.209 [DEBUG] [Thread-23139] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:56:24.688 [DEBUG] [Thread-23141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:39.745 [DEBUG] [Thread-23142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:56:49.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:56:49.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-26T02:56:49.350 [DEBUG] [Thread-23143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:49.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 56, 30), 2.97, 81.82, 0.0, 16.0, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:56:49.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:56:30
2025-12-26T02:56:50.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:56:50.202 [DEBUG] [Thread-23144] [transport.py] [_log()] starting thread (client mode): 0xb95f1f60
2025-12-26T02:56:50.202 [DEBUG] [Thread-23144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:56:50.222 [DEBUG] [Thread-23144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:56:50.222 [INFO] [Thread-23144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] client lang: <none>
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] server lang: <none>
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] kex follows: False
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] Compression: none
2025-12-26T02:56:50.225 [DEBUG] [Thread-23144] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:56:50.241 [DEBUG] [Thread-23144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:56:50.241 [DEBUG] [Thread-23144] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:56:50.242 [DEBUG] [Thread-23144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:56:50.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:56:50.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:56:50.244 [DEBUG] [Thread-23144] [transport.py] [_log()] userauth is OK
2025-12-26T02:56:50.244 [DEBUG] [Thread-23144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:56:50.244 [DEBUG] [Thread-23144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:56:50.244 [DEBUG] [Thread-23144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:56:50.244 [DEBUG] [Thread-23144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:56:50.276 [INFO] [Thread-23144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:56:50.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:56:50.933 [DEBUG] [Thread-23144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:56:50.933 [DEBUG] [Thread-23144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:56:50.933 [DEBUG] [Thread-23144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:56:50.974 [DEBUG] [Thread-23144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:56:50.974 [DEBUG] [Thread-23144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:56:50.978 [DEBUG] [Thread-23144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:56:50.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:56:50.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:56:50.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:56:50.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:56:51.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:56:51.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:56:51.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:56:51.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:56:51.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:56:51.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.038947 -999.00  +12.30  13.08     85   +9.80 1 1 1 2 1     0    0 2.82 12.16 ZNESW 13.1 13.1 144.6 15.7 12.8 -21.9 12.7 -21.7 12.4 -19.9 12.7 -21.0
2025-12-26T02:56:51.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:56:51.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:56:51.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.038947
2025-12-26T02:56:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:56:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:56:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:56:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:56:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:56:51.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:56:30', tmtdew=2.97, humidity=81.82, cloud=0.0, wind=16.0, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:56:05.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:55:00')
2025-12-26T02:56:51.007 [DEBUG] [Thread-23144] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:56:51.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-26T02:56:51.101 [DEBUG] [Thread-23147] [transport.py] [_log()] starting thread (client mode): 0xb95f2170
2025-12-26T02:56:51.101 [DEBUG] [Thread-23147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:56:51.115 [DEBUG] [Thread-23147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:56:51.115 [INFO] [Thread-23147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:56:51.123 [DEBUG] [Thread-23147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:56:51.123 [DEBUG] [Thread-23147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:56:51.123 [DEBUG] [Thread-23147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] client lang: <none>
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] server lang: <none>
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] kex follows: False
2025-12-26T02:56:51.124 [DEBUG] [Thread-23147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:56:51.125 [DEBUG] [Thread-23147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:56:51.125 [DEBUG] [Thread-23147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:56:51.125 [DEBUG] [Thread-23147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:56:51.125 [DEBUG] [Thread-23147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:56:51.125 [DEBUG] [Thread-23147] [transport.py] [_log()] Compression: none
2025-12-26T02:56:51.126 [DEBUG] [Thread-23147] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:56:51.181 [DEBUG] [Thread-23147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:56:51.182 [DEBUG] [Thread-23147] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:56:51.183 [DEBUG] [Thread-23147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:56:51.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:56:51.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:56:51.237 [DEBUG] [Thread-23147] [transport.py] [_log()] userauth is OK
2025-12-26T02:56:51.237 [DEBUG] [Thread-23147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:56:51.238 [DEBUG] [Thread-23147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:56:51.238 [DEBUG] [Thread-23147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:56:51.238 [DEBUG] [Thread-23147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:56:51.262 [INFO] [Thread-23147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:56:51.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:56:51.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:56:52.112 [DEBUG] [Thread-23147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:56:52.113 [DEBUG] [Thread-23147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:56:52.161 [DEBUG] [Thread-23147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:56:52.161 [DEBUG] [Thread-23147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:56:52.170 [DEBUG] [Thread-23147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:56:52.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:56:52.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-26T02:56:52.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-26T02:56:52.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:56:52.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:56:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:56:52.207 [DEBUG] [Thread-23147] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:56:53.634 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:53.635 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:56:54.779 [DEBUG] [Thread-23149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:09.829 [DEBUG] [Thread-23150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:22.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:57:22.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:57:22.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-26T02:57:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 57, 2), 2.98, 81.76, 0.0, 15.72, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:57:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:57:02
2025-12-26T02:57:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:57:23.204 [DEBUG] [Thread-23151] [transport.py] [_log()] starting thread (client mode): 0xb9546200
2025-12-26T02:57:23.204 [DEBUG] [Thread-23151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:57:23.224 [DEBUG] [Thread-23151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:57:23.224 [INFO] [Thread-23151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:57:23.227 [DEBUG] [Thread-23151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:57:23.227 [DEBUG] [Thread-23151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:57:23.227 [DEBUG] [Thread-23151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:57:23.227 [DEBUG] [Thread-23151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:23.227 [DEBUG] [Thread-23151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] client lang: <none>
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] server lang: <none>
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] kex follows: False
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] Compression: none
2025-12-26T02:57:23.228 [DEBUG] [Thread-23151] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:57:23.245 [DEBUG] [Thread-23151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:57:23.246 [DEBUG] [Thread-23151] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:57:23.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:57:23.247 [DEBUG] [Thread-23151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:57:23.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:57:23.249 [DEBUG] [Thread-23151] [transport.py] [_log()] userauth is OK
2025-12-26T02:57:23.249 [DEBUG] [Thread-23151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:57:23.249 [DEBUG] [Thread-23151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:57:23.250 [DEBUG] [Thread-23151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:57:23.250 [DEBUG] [Thread-23151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:57:23.268 [INFO] [Thread-23151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:57:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:57:23.908 [DEBUG] [Thread-23151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:57:23.908 [DEBUG] [Thread-23151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:57:23.908 [DEBUG] [Thread-23151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:57:23.949 [DEBUG] [Thread-23151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:57:23.949 [DEBUG] [Thread-23151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:57:23.953 [DEBUG] [Thread-23151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:57:23.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:57:23.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:57:23.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:57:23.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:57:23.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:57:23.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:57:23.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:57:23.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.039294 -999.00  +12.30   9.40     85   +9.90 1 1 1 2 1     0    0 2.76 12.38 ZNESW 9.4 9.4 141.0 13.1 12.8 -21.9 12.6 -21.5 12.4 -20.0 12.7 -21.0
2025-12-26T02:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:57:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.039294
2025-12-26T02:57:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:57:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:57:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:57:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:57:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:57:23.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:57:02', tmtdew=2.98, humidity=81.76, cloud=0.0, wind=15.72, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:56:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:55:00')
2025-12-26T02:57:23.983 [DEBUG] [Thread-23151] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:57:24.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-26T02:57:24.075 [DEBUG] [Thread-23154] [transport.py] [_log()] starting thread (client mode): 0xb9547a60
2025-12-26T02:57:24.075 [DEBUG] [Thread-23154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:57:24.090 [DEBUG] [Thread-23154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:57:24.090 [INFO] [Thread-23154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:57:24.098 [DEBUG] [Thread-23154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:57:24.098 [DEBUG] [Thread-23154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:57:24.098 [DEBUG] [Thread-23154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:57:24.098 [DEBUG] [Thread-23154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:24.098 [DEBUG] [Thread-23154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] client lang: <none>
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] server lang: <none>
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] kex follows: False
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] Compression: none
2025-12-26T02:57:24.099 [DEBUG] [Thread-23154] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:57:24.161 [DEBUG] [Thread-23154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:57:24.161 [DEBUG] [Thread-23154] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:57:24.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:57:24.162 [DEBUG] [Thread-23154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:57:24.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:57:24.220 [DEBUG] [Thread-23154] [transport.py] [_log()] userauth is OK
2025-12-26T02:57:24.221 [DEBUG] [Thread-23154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:57:24.221 [DEBUG] [Thread-23154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:57:24.221 [DEBUG] [Thread-23154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:57:24.221 [DEBUG] [Thread-23154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:57:24.239 [INFO] [Thread-23154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:57:24.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:57:24.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:57:24.864 [DEBUG] [Thread-23156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:25.046 [DEBUG] [Thread-23154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:57:25.046 [DEBUG] [Thread-23154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:57:25.094 [DEBUG] [Thread-23154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:57:25.094 [DEBUG] [Thread-23154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:57:25.103 [DEBUG] [Thread-23154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:57:25.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:57:25.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:57:25.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:57:25.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:57:25.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:57:25.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:57:25.140 [DEBUG] [Thread-23154] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:57:39.917 [DEBUG] [Thread-23157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:49.447 [DEBUG] [Thread-23158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:53.834 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:53.835 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:54.952 [DEBUG] [Thread-23159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:57:55.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:57:55.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:57:55.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-26T02:57:55.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 57, 34), 2.98, 81.74, 0.0, 15.49, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:57:55.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:57:34
2025-12-26T02:57:55.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:57:56.146 [DEBUG] [Thread-23160] [transport.py] [_log()] starting thread (client mode): 0xb6b21b40
2025-12-26T02:57:56.146 [DEBUG] [Thread-23160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:57:56.165 [DEBUG] [Thread-23160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:57:56.166 [INFO] [Thread-23160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] client lang: <none>
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] server lang: <none>
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] kex follows: False
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] Compression: none
2025-12-26T02:57:56.169 [DEBUG] [Thread-23160] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:57:56.185 [DEBUG] [Thread-23160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:57:56.186 [DEBUG] [Thread-23160] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:57:56.186 [DEBUG] [Thread-23160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:57:56.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:57:56.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:57:56.187 [DEBUG] [Thread-23160] [transport.py] [_log()] userauth is OK
2025-12-26T02:57:56.187 [DEBUG] [Thread-23160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:57:56.187 [DEBUG] [Thread-23160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:57:56.187 [DEBUG] [Thread-23160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:57:56.187 [DEBUG] [Thread-23160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:57:56.203 [INFO] [Thread-23160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:57:56.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:57:56.840 [DEBUG] [Thread-23160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:57:56.840 [DEBUG] [Thread-23160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:57:56.840 [DEBUG] [Thread-23160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:57:56.881 [DEBUG] [Thread-23160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:57:56.881 [DEBUG] [Thread-23160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:57:56.882 [DEBUG] [Thread-23160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:57:56.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:57:56.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:57:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:57:56.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:57:56.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:57:56.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:57:56.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:57:56.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.039641 -999.00  +12.30  10.92     85   +9.80 1 1 1 2 1     0    0 2.80 12.86 ZNESW 10.9 10.9 156.8 14.7 12.8 -21.8 12.7 -21.5 12.4 -19.9 12.7 -20.9
2025-12-26T02:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:57:56.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.039641
2025-12-26T02:57:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:57:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:57:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:57:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:57:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:57:56.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:57:34', tmtdew=2.98, humidity=81.74, cloud=0.0, wind=15.49, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:57:04.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:55:00')
2025-12-26T02:57:56.896 [DEBUG] [Thread-23160] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:57:56.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T02:57:56.979 [DEBUG] [Thread-23163] [transport.py] [_log()] starting thread (client mode): 0xb95b2290
2025-12-26T02:57:56.979 [DEBUG] [Thread-23163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:57:56.994 [DEBUG] [Thread-23163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:57:56.994 [INFO] [Thread-23163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] client lang: <none>
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] server lang: <none>
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] kex follows: False
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] Compression: none
2025-12-26T02:57:57.003 [DEBUG] [Thread-23163] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:57:57.058 [DEBUG] [Thread-23163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:57:57.058 [DEBUG] [Thread-23163] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:57:57.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:57:57.058 [DEBUG] [Thread-23163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:57:57.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:57:57.117 [DEBUG] [Thread-23163] [transport.py] [_log()] userauth is OK
2025-12-26T02:57:57.117 [DEBUG] [Thread-23163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:57:57.117 [DEBUG] [Thread-23163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:57:57.117 [DEBUG] [Thread-23163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:57:57.117 [DEBUG] [Thread-23163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:57:57.131 [INFO] [Thread-23163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:57:57.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-26T02:57:57.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:57:57.946 [DEBUG] [Thread-23163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:57:57.946 [DEBUG] [Thread-23163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:57:57.994 [DEBUG] [Thread-23163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:57:57.994 [DEBUG] [Thread-23163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:57:58.002 [DEBUG] [Thread-23163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:57:58.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:57:58.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:57:58.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-26T02:57:58.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:57:58.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:57:58.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:57:58.034 [DEBUG] [Thread-23163] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:58:09.983 [DEBUG] [Thread-23165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:25.033 [DEBUG] [Thread-23166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:58:28.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:58:28.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:58:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 58, 6), 2.98, 81.79, 0.0, 15.88, 12.1, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:58:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:58:06
2025-12-26T02:58:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:58:29.032 [DEBUG] [Thread-23167] [transport.py] [_log()] starting thread (client mode): 0xb95b0df0
2025-12-26T02:58:29.032 [DEBUG] [Thread-23167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:58:29.052 [DEBUG] [Thread-23167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:58:29.052 [INFO] [Thread-23167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] client lang: <none>
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] server lang: <none>
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] kex follows: False
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:58:29.054 [DEBUG] [Thread-23167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:58:29.055 [DEBUG] [Thread-23167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:58:29.055 [DEBUG] [Thread-23167] [transport.py] [_log()] Compression: none
2025-12-26T02:58:29.055 [DEBUG] [Thread-23167] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:58:29.074 [DEBUG] [Thread-23167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:58:29.074 [DEBUG] [Thread-23167] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:58:29.075 [DEBUG] [Thread-23167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:58:29.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:58:29.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:58:29.077 [DEBUG] [Thread-23167] [transport.py] [_log()] userauth is OK
2025-12-26T02:58:29.077 [DEBUG] [Thread-23167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:58:29.077 [DEBUG] [Thread-23167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:58:29.077 [DEBUG] [Thread-23167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:58:29.077 [DEBUG] [Thread-23167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:58:29.092 [INFO] [Thread-23167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:58:29.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:58:29.738 [DEBUG] [Thread-23167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:58:29.738 [DEBUG] [Thread-23167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:58:29.738 [DEBUG] [Thread-23167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:58:29.779 [DEBUG] [Thread-23167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:58:29.779 [DEBUG] [Thread-23167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:58:29.783 [DEBUG] [Thread-23167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:58:29.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:58:29.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:58:29.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:58:29.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:58:29.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:58:29.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:58:29.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:58:29.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:58:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:58:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.039988 -999.00  +12.30  12.13     84   +9.80 1 1 1 2 1     0    0 2.80 12.40 ZNESW 12.1 12.1 162.4 16.0 12.8 -21.7 12.7 -21.5 12.4 -19.9 12.7 -20.9
2025-12-26T02:58:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:58:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:58:29.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.039988
2025-12-26T02:58:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:58:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:58:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:58:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:58:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:58:29.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:58:06', tmtdew=2.98, humidity=81.79, cloud=0.0, wind=15.88, temperature=12.1, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:57:34.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:55:00')
2025-12-26T02:58:29.811 [DEBUG] [Thread-23167] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:58:29.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-26T02:58:29.905 [DEBUG] [Thread-23170] [transport.py] [_log()] starting thread (client mode): 0xb95914e0
2025-12-26T02:58:29.905 [DEBUG] [Thread-23170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:58:29.919 [DEBUG] [Thread-23170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:58:29.919 [INFO] [Thread-23170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] client lang: <none>
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] server lang: <none>
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] kex follows: False
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] Compression: none
2025-12-26T02:58:29.927 [DEBUG] [Thread-23170] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:58:29.985 [DEBUG] [Thread-23170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:58:29.986 [DEBUG] [Thread-23170] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:58:29.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:58:29.987 [DEBUG] [Thread-23170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:58:29.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:58:30.044 [DEBUG] [Thread-23170] [transport.py] [_log()] userauth is OK
2025-12-26T02:58:30.045 [DEBUG] [Thread-23170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:58:30.045 [DEBUG] [Thread-23170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:58:30.045 [DEBUG] [Thread-23170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:58:30.045 [DEBUG] [Thread-23170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:58:30.063 [INFO] [Thread-23170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:58:30.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-26T02:58:30.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:58:30.883 [DEBUG] [Thread-23170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:58:30.884 [DEBUG] [Thread-23170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:58:30.932 [DEBUG] [Thread-23170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:58:30.932 [DEBUG] [Thread-23170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:58:30.941 [DEBUG] [Thread-23170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:58:30.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:58:30.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T02:58:30.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:58:30.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:58:30.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:58:30.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:58:30.978 [DEBUG] [Thread-23170] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:58:40.066 [DEBUG] [Thread-23172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:44.856 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:49.514 [DEBUG] [Thread-23173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:54.036 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:54.037 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:58:55.108 [DEBUG] [Thread-23174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:59:00.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:59:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T02:59:01.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 58, 38), 3.02, 81.82, 0.0, 17.49, 12.22, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:59:01.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:58:38
2025-12-26T02:59:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:59:01.959 [DEBUG] [Thread-23175] [transport.py] [_log()] starting thread (client mode): 0xbbfcebc0
2025-12-26T02:59:01.960 [DEBUG] [Thread-23175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:59:01.981 [DEBUG] [Thread-23175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:59:01.981 [INFO] [Thread-23175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:59:01.984 [DEBUG] [Thread-23175] [transport.py] [_log()] client lang: <none>
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] server lang: <none>
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] kex follows: False
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] Compression: none
2025-12-26T02:59:01.985 [DEBUG] [Thread-23175] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:59:02.003 [DEBUG] [Thread-23175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:59:02.003 [DEBUG] [Thread-23175] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:59:02.004 [DEBUG] [Thread-23175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:59:02.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:59:02.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:59:02.006 [DEBUG] [Thread-23175] [transport.py] [_log()] userauth is OK
2025-12-26T02:59:02.006 [DEBUG] [Thread-23175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:59:02.007 [DEBUG] [Thread-23175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:59:02.007 [DEBUG] [Thread-23175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:59:02.007 [DEBUG] [Thread-23175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:59:02.043 [INFO] [Thread-23175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:59:02.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:59:02.691 [DEBUG] [Thread-23175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:59:02.691 [DEBUG] [Thread-23175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:59:02.692 [DEBUG] [Thread-23175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:59:02.732 [DEBUG] [Thread-23175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:59:02.732 [DEBUG] [Thread-23175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:59:02.735 [DEBUG] [Thread-23175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:59:02.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:59:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:59:02.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:59:02.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:59:02.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:59:02.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:59:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:59:02.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:59:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:59:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.040683 -999.00  +12.30  13.26     84   +9.80 1 1 1 2 1     0    0 2.76 12.61 ZNESW 13.3 13.3 137.2 15.7 12.8 -22.0 12.7 -21.7 12.4 -20.0 12.7 -20.8
2025-12-26T02:59:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:59:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:59:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.040683
2025-12-26T02:59:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:59:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:59:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:59:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:59:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:59:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:58:38', tmtdew=3.02, humidity=81.82, cloud=0.0, wind=17.49, temperature=12.22, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:58:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:57:00')
2025-12-26T02:59:02.764 [DEBUG] [Thread-23175] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:59:02.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-26T02:59:02.858 [DEBUG] [Thread-23178] [transport.py] [_log()] starting thread (client mode): 0xb9592080
2025-12-26T02:59:02.858 [DEBUG] [Thread-23178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:59:02.873 [DEBUG] [Thread-23178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:59:02.873 [INFO] [Thread-23178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] client lang: <none>
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] server lang: <none>
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] kex follows: False
2025-12-26T02:59:02.881 [DEBUG] [Thread-23178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:59:02.882 [DEBUG] [Thread-23178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:59:02.882 [DEBUG] [Thread-23178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:59:02.882 [DEBUG] [Thread-23178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:59:02.882 [DEBUG] [Thread-23178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:59:02.882 [DEBUG] [Thread-23178] [transport.py] [_log()] Compression: none
2025-12-26T02:59:02.882 [DEBUG] [Thread-23178] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:59:02.944 [DEBUG] [Thread-23178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:59:02.944 [DEBUG] [Thread-23178] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:59:02.945 [DEBUG] [Thread-23178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:59:02.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:59:02.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:59:03.000 [DEBUG] [Thread-23178] [transport.py] [_log()] userauth is OK
2025-12-26T02:59:03.000 [DEBUG] [Thread-23178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:59:03.001 [DEBUG] [Thread-23178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:59:03.001 [DEBUG] [Thread-23178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:59:03.001 [DEBUG] [Thread-23178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:59:03.019 [INFO] [Thread-23178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:59:03.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-26T02:59:03.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:59:03.839 [DEBUG] [Thread-23178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:59:03.839 [DEBUG] [Thread-23178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:59:03.887 [DEBUG] [Thread-23178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:59:03.887 [DEBUG] [Thread-23178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:59:03.897 [DEBUG] [Thread-23178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:59:03.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:59:03.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-26T02:59:03.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-26T02:59:03.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:59:03.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:59:03.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:59:03.934 [DEBUG] [Thread-23178] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:59:10.143 [DEBUG] [Thread-23180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:25.189 [DEBUG] [Thread-23181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:33.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T02:59:33.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T02:59:33.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-26T02:59:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 59, 10), 3.04, 81.72, 0.0, 16.96, 12.22, 0, 1, 0, 2, 0, 0),)
2025-12-26T02:59:34.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:59:10
2025-12-26T02:59:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T02:59:34.932 [DEBUG] [Thread-23182] [transport.py] [_log()] starting thread (client mode): 0xbbfce7a0
2025-12-26T02:59:34.932 [DEBUG] [Thread-23182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:59:34.952 [DEBUG] [Thread-23182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T02:59:34.952 [INFO] [Thread-23182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T02:59:34.954 [DEBUG] [Thread-23182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:59:34.954 [DEBUG] [Thread-23182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T02:59:34.954 [DEBUG] [Thread-23182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:59:34.954 [DEBUG] [Thread-23182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:34.954 [DEBUG] [Thread-23182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:34.954 [DEBUG] [Thread-23182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] client lang: <none>
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] server lang: <none>
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] kex follows: False
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] Compression: none
2025-12-26T02:59:34.955 [DEBUG] [Thread-23182] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:59:34.968 [DEBUG] [Thread-23182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:59:34.969 [DEBUG] [Thread-23182] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:59:34.970 [DEBUG] [Thread-23182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T02:59:34.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T02:59:34.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:59:34.972 [DEBUG] [Thread-23182] [transport.py] [_log()] userauth is OK
2025-12-26T02:59:34.972 [DEBUG] [Thread-23182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:59:34.972 [DEBUG] [Thread-23182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:59:34.972 [DEBUG] [Thread-23182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T02:59:34.972 [DEBUG] [Thread-23182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:59:34.997 [INFO] [Thread-23182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:59:34.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:59:35.613 [DEBUG] [Thread-23182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:59:35.613 [DEBUG] [Thread-23182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:59:35.614 [DEBUG] [Thread-23182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T02:59:35.655 [DEBUG] [Thread-23182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:59:35.655 [DEBUG] [Thread-23182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:59:35.657 [DEBUG] [Thread-23182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:59:35.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:59:35.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T02:59:35.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T02:59:35.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T02:59:35.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:59:35.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T02:59:35.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:59:35.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:59:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T02:59:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.041030 -999.00  +12.30  14.13     84   +9.80 1 1 1 2 1     0    0 2.75 11.26 ZNESW 14.1 14.1 166.6 16.6 12.8 -22.0 12.7 -21.6 12.4 -19.8 12.7 -20.8
2025-12-26T02:59:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T02:59:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T02:59:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.041030
2025-12-26T02:59:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T02:59:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T02:59:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T02:59:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T02:59:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T02:59:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:59:10', tmtdew=3.04, humidity=81.72, cloud=0.0, wind=16.96, temperature=12.22, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:59:04.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:57:00')
2025-12-26T02:59:35.679 [DEBUG] [Thread-23182] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:59:35.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-26T02:59:35.774 [DEBUG] [Thread-23185] [transport.py] [_log()] starting thread (client mode): 0xbbfcee30
2025-12-26T02:59:35.774 [DEBUG] [Thread-23185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T02:59:35.789 [DEBUG] [Thread-23185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T02:59:35.789 [INFO] [Thread-23185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T02:59:35.796 [DEBUG] [Thread-23185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] client lang: <none>
2025-12-26T02:59:35.797 [DEBUG] [Thread-23185] [transport.py] [_log()] server lang: <none>
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] kex follows: False
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] Compression: none
2025-12-26T02:59:35.798 [DEBUG] [Thread-23185] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T02:59:35.855 [DEBUG] [Thread-23185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T02:59:35.855 [DEBUG] [Thread-23185] [transport.py] [_log()] Switch to new keys ...
2025-12-26T02:59:35.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T02:59:35.856 [DEBUG] [Thread-23185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T02:59:35.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T02:59:35.911 [DEBUG] [Thread-23185] [transport.py] [_log()] userauth is OK
2025-12-26T02:59:35.911 [DEBUG] [Thread-23185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T02:59:35.911 [DEBUG] [Thread-23185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T02:59:35.911 [DEBUG] [Thread-23185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T02:59:35.911 [DEBUG] [Thread-23185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T02:59:35.930 [INFO] [Thread-23185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T02:59:35.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T02:59:35.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T02:59:36.714 [DEBUG] [Thread-23185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T02:59:36.714 [DEBUG] [Thread-23185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T02:59:36.762 [DEBUG] [Thread-23185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T02:59:36.762 [DEBUG] [Thread-23185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T02:59:36.771 [DEBUG] [Thread-23185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T02:59:36.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T02:59:36.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-26T02:59:36.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T02:59:36.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T02:59:36.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T02:59:36.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T02:59:36.813 [DEBUG] [Thread-23185] [transport.py] [_log()] EOF in transport thread
2025-12-26T02:59:40.224 [DEBUG] [Thread-23187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:49.571 [DEBUG] [Thread-23188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:54.237 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:54.238 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T02:59:55.274 [DEBUG] [Thread-23189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:06.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:00:06.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:00:06.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-26T03:00:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 2, 59, 42), 3.04, 81.72, 0.0, 14.43, 12.2, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:00:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 02:59:42
2025-12-26T03:00:07.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:00:07.806 [DEBUG] [Thread-23190] [transport.py] [_log()] starting thread (client mode): 0xb9591120
2025-12-26T03:00:07.806 [DEBUG] [Thread-23190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:00:07.828 [DEBUG] [Thread-23190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:00:07.829 [INFO] [Thread-23190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:00:07.830 [DEBUG] [Thread-23190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:00:07.830 [DEBUG] [Thread-23190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:00:07.830 [DEBUG] [Thread-23190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:00:07.830 [DEBUG] [Thread-23190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:07.830 [DEBUG] [Thread-23190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:07.830 [DEBUG] [Thread-23190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] client lang: <none>
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] server lang: <none>
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] kex follows: False
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:00:07.831 [DEBUG] [Thread-23190] [transport.py] [_log()] Compression: none
2025-12-26T03:00:07.832 [DEBUG] [Thread-23190] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:00:07.846 [DEBUG] [Thread-23190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:00:07.847 [DEBUG] [Thread-23190] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:00:07.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:00:07.848 [DEBUG] [Thread-23190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:00:07.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:00:07.850 [DEBUG] [Thread-23190] [transport.py] [_log()] userauth is OK
2025-12-26T03:00:07.850 [DEBUG] [Thread-23190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:00:07.850 [DEBUG] [Thread-23190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:00:07.850 [DEBUG] [Thread-23190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:00:07.850 [DEBUG] [Thread-23190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:00:07.875 [INFO] [Thread-23190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:00:07.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:00:10.304 [DEBUG] [Thread-23192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:14.491 [DEBUG] [Thread-23190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:00:14.491 [DEBUG] [Thread-23190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:00:14.492 [DEBUG] [Thread-23190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:00:14.532 [DEBUG] [Thread-23190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:00:14.532 [DEBUG] [Thread-23190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:00:14.535 [DEBUG] [Thread-23190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:00:14.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:00:14.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:00:14.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:00:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:00:14.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:00:14.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:00:14.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:00:14.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:00:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:00:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.041377 -999.00  +12.30  14.41     84   +9.80 1 1 1 2 1     0    0 2.80 11.19 ZNESW 14.4 14.4 155.2 17.8 12.8 -22.1 12.7 -21.6 12.4 -20.0 12.7 -21.1
2025-12-26T03:00:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:00:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:00:14.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.041377
2025-12-26T03:00:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:00:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:00:14.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:00:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:00:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:00:14.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T02:59:42', tmtdew=3.04, humidity=81.72, cloud=0.0, wind=14.43, temperature=12.2, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T00:59:34.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:57:00')
2025-12-26T03:00:14.566 [DEBUG] [Thread-23190] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:00:14.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:00:14.657 [DEBUG] [Thread-23194] [transport.py] [_log()] starting thread (client mode): 0xbbfce110
2025-12-26T03:00:14.658 [DEBUG] [Thread-23194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:00:14.672 [DEBUG] [Thread-23194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:00:14.672 [INFO] [Thread-23194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:14.680 [DEBUG] [Thread-23194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] client lang: <none>
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] server lang: <none>
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] kex follows: False
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] Compression: none
2025-12-26T03:00:14.681 [DEBUG] [Thread-23194] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:00:14.739 [DEBUG] [Thread-23194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:00:14.740 [DEBUG] [Thread-23194] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:00:14.740 [DEBUG] [Thread-23194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:00:14.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:00:14.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:00:14.795 [DEBUG] [Thread-23194] [transport.py] [_log()] userauth is OK
2025-12-26T03:00:14.796 [DEBUG] [Thread-23194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:00:14.796 [DEBUG] [Thread-23194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:00:14.796 [DEBUG] [Thread-23194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:00:14.796 [DEBUG] [Thread-23194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:00:14.819 [INFO] [Thread-23194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:00:14.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-26T03:00:14.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:00:15.630 [DEBUG] [Thread-23194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:00:15.630 [DEBUG] [Thread-23194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:00:15.678 [DEBUG] [Thread-23194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:00:15.678 [DEBUG] [Thread-23194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:00:15.686 [DEBUG] [Thread-23194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:00:15.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:00:15.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-26T03:00:15.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-26T03:00:15.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:00:15.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:00:15.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:00:15.718 [DEBUG] [Thread-23194] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:00:25.338 [DEBUG] [Thread-23196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:40.378 [DEBUG] [Thread-23197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:45.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:00:45.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:00:45.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-26T03:00:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 0, 14), 3.05, 81.64, 0.0, 16.5, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:00:46.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:00:14
2025-12-26T03:00:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:00:46.712 [DEBUG] [Thread-23198] [transport.py] [_log()] starting thread (client mode): 0xb6b14820
2025-12-26T03:00:46.712 [DEBUG] [Thread-23198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:00:46.732 [DEBUG] [Thread-23198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:00:46.733 [INFO] [Thread-23198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] client lang: <none>
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] server lang: <none>
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] kex follows: False
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] Compression: none
2025-12-26T03:00:46.736 [DEBUG] [Thread-23198] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:00:46.754 [DEBUG] [Thread-23198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:00:46.754 [DEBUG] [Thread-23198] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:00:46.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:00:46.755 [DEBUG] [Thread-23198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:00:46.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:00:46.758 [DEBUG] [Thread-23198] [transport.py] [_log()] userauth is OK
2025-12-26T03:00:46.758 [DEBUG] [Thread-23198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:00:46.758 [DEBUG] [Thread-23198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:00:46.758 [DEBUG] [Thread-23198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:00:46.758 [DEBUG] [Thread-23198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:00:46.784 [INFO] [Thread-23198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:00:46.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:00:47.411 [DEBUG] [Thread-23198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:00:47.411 [DEBUG] [Thread-23198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:00:47.411 [DEBUG] [Thread-23198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:00:47.452 [DEBUG] [Thread-23198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:00:47.452 [DEBUG] [Thread-23198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:00:47.455 [DEBUG] [Thread-23198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:00:47.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:00:47.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:00:47.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:00:47.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:00:47.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:00:47.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:00:47.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:00:47.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:00:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:00:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.041724 -999.00  +12.30  13.76     84   +9.70 1 1 1 2 1     0    0 2.78 13.73 ZNESW 13.8 13.8 166.3 20.8 12.8 -22.0 12.7 -21.5 12.4 -19.9 12.7 -20.9
2025-12-26T03:00:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:00:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:00:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.041724
2025-12-26T03:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:00:14', tmtdew=3.05, humidity=81.64, cloud=0.0, wind=16.5, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:00:04.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:57:00')
2025-12-26T03:00:47.473 [DEBUG] [Thread-23198] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:00:47.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-26T03:00:47.558 [DEBUG] [Thread-23201] [transport.py] [_log()] starting thread (client mode): 0xb9545690
2025-12-26T03:00:47.558 [DEBUG] [Thread-23201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:00:47.575 [DEBUG] [Thread-23201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:00:47.575 [INFO] [Thread-23201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:00:47.582 [DEBUG] [Thread-23201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:00:47.582 [DEBUG] [Thread-23201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] client lang: <none>
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] server lang: <none>
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] kex follows: False
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] Compression: none
2025-12-26T03:00:47.583 [DEBUG] [Thread-23201] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:00:47.638 [DEBUG] [Thread-23201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:00:47.638 [DEBUG] [Thread-23201] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:00:47.638 [DEBUG] [Thread-23201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:00:47.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:00:47.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:00:47.695 [DEBUG] [Thread-23201] [transport.py] [_log()] userauth is OK
2025-12-26T03:00:47.695 [DEBUG] [Thread-23201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:00:47.695 [DEBUG] [Thread-23201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:00:47.695 [DEBUG] [Thread-23201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:00:47.695 [DEBUG] [Thread-23201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:00:47.711 [INFO] [Thread-23201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:00:47.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-26T03:00:47.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:00:48.507 [DEBUG] [Thread-23201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:00:48.507 [DEBUG] [Thread-23201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:00:48.555 [DEBUG] [Thread-23201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:00:48.556 [DEBUG] [Thread-23201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:00:48.564 [DEBUG] [Thread-23201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:00:48.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:00:48.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-26T03:00:48.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:00:48.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:00:48.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:00:48.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:00:48.595 [DEBUG] [Thread-23201] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:00:49.638 [DEBUG] [Thread-23203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:54.437 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:54.438 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:00:55.411 [DEBUG] [Thread-23204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:10.460 [DEBUG] [Thread-23205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:01:18.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:01:18.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-26T03:01:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 0, 46), 3.05, 81.66, 0.0, 17.2, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:01:19.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:00:46
2025-12-26T03:01:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:01:19.599 [DEBUG] [Thread-23206] [transport.py] [_log()] starting thread (client mode): 0xb6b16ce0
2025-12-26T03:01:19.599 [DEBUG] [Thread-23206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:01:19.620 [DEBUG] [Thread-23206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:01:19.620 [INFO] [Thread-23206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] client lang: <none>
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] server lang: <none>
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] kex follows: False
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] Compression: none
2025-12-26T03:01:19.623 [DEBUG] [Thread-23206] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:01:19.641 [DEBUG] [Thread-23206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:01:19.641 [DEBUG] [Thread-23206] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:01:19.642 [DEBUG] [Thread-23206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:01:19.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:01:19.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:01:19.644 [DEBUG] [Thread-23206] [transport.py] [_log()] userauth is OK
2025-12-26T03:01:19.644 [DEBUG] [Thread-23206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:01:19.644 [DEBUG] [Thread-23206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:01:19.644 [DEBUG] [Thread-23206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:01:19.644 [DEBUG] [Thread-23206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:01:19.668 [INFO] [Thread-23206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:01:19.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:01:20.492 [DEBUG] [Thread-23206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:01:20.492 [DEBUG] [Thread-23206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:01:20.493 [DEBUG] [Thread-23206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:01:20.533 [DEBUG] [Thread-23206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:01:20.534 [DEBUG] [Thread-23206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:01:20.536 [DEBUG] [Thread-23206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:01:20.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:01:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:01:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:01:20.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:01:20.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:01:20.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:01:20.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.042072 -999.00  +12.30  14.12     84   +9.70 1 1 1 2 1     0    0 2.87 14.83 ZNESW 14.1 14.1 166.4 16.1 12.8 -22.0 12.7 -21.5 12.4 -20.0 12.7 -21.0
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.042072
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:01:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:00:46', tmtdew=3.05, humidity=81.66, cloud=0.0, wind=17.2, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:00:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:57:00')
2025-12-26T03:01:20.548 [DEBUG] [Thread-23206] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:01:20.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-26T03:01:20.634 [DEBUG] [Thread-23209] [transport.py] [_log()] starting thread (client mode): 0xb6b16c20
2025-12-26T03:01:20.634 [DEBUG] [Thread-23209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:01:20.649 [DEBUG] [Thread-23209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:01:20.649 [INFO] [Thread-23209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:01:20.656 [DEBUG] [Thread-23209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:01:20.656 [DEBUG] [Thread-23209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:01:20.656 [DEBUG] [Thread-23209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:01:20.656 [DEBUG] [Thread-23209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:20.656 [DEBUG] [Thread-23209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] client lang: <none>
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] server lang: <none>
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] kex follows: False
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] Compression: none
2025-12-26T03:01:20.657 [DEBUG] [Thread-23209] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:01:20.721 [DEBUG] [Thread-23209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:01:20.721 [DEBUG] [Thread-23209] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:01:20.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:01:20.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:01:20.722 [DEBUG] [Thread-23209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:01:20.778 [DEBUG] [Thread-23209] [transport.py] [_log()] userauth is OK
2025-12-26T03:01:20.778 [DEBUG] [Thread-23209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:01:20.778 [DEBUG] [Thread-23209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:01:20.778 [DEBUG] [Thread-23209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:01:20.778 [DEBUG] [Thread-23209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:01:20.796 [INFO] [Thread-23209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:01:20.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-26T03:01:20.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:01:21.587 [DEBUG] [Thread-23209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:01:21.587 [DEBUG] [Thread-23209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:01:21.635 [DEBUG] [Thread-23209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:01:21.635 [DEBUG] [Thread-23209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:01:21.643 [DEBUG] [Thread-23209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:01:21.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:01:21.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:01:21.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-26T03:01:21.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:01:21.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:01:21.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:01:21.675 [DEBUG] [Thread-23209] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:01:25.491 [DEBUG] [Thread-23211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:40.549 [DEBUG] [Thread-23212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:49.695 [DEBUG] [Thread-23213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:01:51.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:01:51.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-26T03:01:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 1, 18), 3.04, 81.69, 0.0, 17.63, 12.14, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:01:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:01:18
2025-12-26T03:01:52.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:01:52.731 [DEBUG] [Thread-23214] [transport.py] [_log()] starting thread (client mode): 0xbbfcfa30
2025-12-26T03:01:52.731 [DEBUG] [Thread-23214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:01:52.751 [DEBUG] [Thread-23214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:01:52.751 [INFO] [Thread-23214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] client lang: <none>
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] server lang: <none>
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] kex follows: False
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] Compression: none
2025-12-26T03:01:52.753 [DEBUG] [Thread-23214] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:01:52.761 [DEBUG] [Thread-23214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:01:52.761 [DEBUG] [Thread-23214] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:01:52.761 [DEBUG] [Thread-23214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:01:52.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:01:52.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:01:52.763 [DEBUG] [Thread-23214] [transport.py] [_log()] userauth is OK
2025-12-26T03:01:52.763 [DEBUG] [Thread-23214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:01:52.763 [DEBUG] [Thread-23214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:01:52.763 [DEBUG] [Thread-23214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:01:52.763 [DEBUG] [Thread-23214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:01:52.782 [INFO] [Thread-23214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:01:52.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:01:53.421 [DEBUG] [Thread-23214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:01:53.421 [DEBUG] [Thread-23214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:01:53.421 [DEBUG] [Thread-23214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:01:53.461 [DEBUG] [Thread-23214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:01:53.462 [DEBUG] [Thread-23214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:01:53.464 [DEBUG] [Thread-23214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:01:53.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:01:53.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:01:53.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:01:53.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:01:53.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:01:53.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:01:53.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.042419 -999.00  +12.30  10.76     84   +9.70 1 1 1 2 1     0    0 2.89 16.71 ZNESW 10.8 10.8 154.8 13.2 12.8 -22.0 12.7 -21.7 12.4 -20.1 12.7 -21.1
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.042419
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:01:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:01:18', tmtdew=3.04, humidity=81.69, cloud=0.0, wind=17.63, temperature=12.14, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:01:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.1717499999999994, 0.1277500000000007, 0.2872500000000002, 0.16300000000000026, 0.14750000000000085, 0.22325000000000017, 0.23000000000000043, 0.276250000000001, 0.24399999999999977, 0.1509999999999998, 0.15724999999999945, 0.24549999999999983, 0.22100000000000009, 0.2002499999999987, 0.2679999999999989, 0.2895000000000003, 0.20425000000000004, 0.266, 0.20999999999999908, 0.302249999999999, 0.29499999999999815, 0.2627499999999987, 0.27825000000000166, 0.2777499999999993, 0.22499999999999964, 0.21749999999999936, 0.3517500000000009, 0.36650000000000027, 0.4115000000000002, 0.2970000000000006, 0.3705000000000016, 0.40750000000000064, 0.316749999999999], zp_timestamp='2025-12-26T00:57:00')
2025-12-26T03:01:53.482 [DEBUG] [Thread-23214] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:01:53.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-26T03:01:53.567 [DEBUG] [Thread-23217] [transport.py] [_log()] starting thread (client mode): 0xbbfcd270
2025-12-26T03:01:53.567 [DEBUG] [Thread-23217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:01:53.581 [DEBUG] [Thread-23217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:01:53.581 [INFO] [Thread-23217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:01:53.588 [DEBUG] [Thread-23217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] client lang: <none>
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] server lang: <none>
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] kex follows: False
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] Compression: none
2025-12-26T03:01:53.589 [DEBUG] [Thread-23217] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:01:53.644 [DEBUG] [Thread-23217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:01:53.645 [DEBUG] [Thread-23217] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:01:53.645 [DEBUG] [Thread-23217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:01:53.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:01:53.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:01:53.702 [DEBUG] [Thread-23217] [transport.py] [_log()] userauth is OK
2025-12-26T03:01:53.702 [DEBUG] [Thread-23217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:01:53.702 [DEBUG] [Thread-23217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:01:53.702 [DEBUG] [Thread-23217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:01:53.702 [DEBUG] [Thread-23217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:01:53.715 [INFO] [Thread-23217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:01:53.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-26T03:01:53.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:01:54.587 [DEBUG] [Thread-23217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:01:54.587 [DEBUG] [Thread-23217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:01:54.635 [DEBUG] [Thread-23217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:01:54.635 [DEBUG] [Thread-23217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:01:54.643 [DEBUG] [Thread-23217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:01:54.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:01:54.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:01:54.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-26T03:01:54.667 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:54.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:01:54.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:01:54.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:01:54.668 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:01:54.675 [DEBUG] [Thread-23217] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:01:55.581 [DEBUG] [Thread-23219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:10.625 [DEBUG] [Thread-23220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:24.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:02:24.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:02:24.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-26T03:02:25.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 1, 51), 3.04, 81.71, 0.0, 17.68, 12.19, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:02:25.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:01:51
2025-12-26T03:02:25.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:02:25.657 [DEBUG] [Thread-23221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:25.699 [DEBUG] [Thread-23222] [transport.py] [_log()] starting thread (client mode): 0xb9546bc0
2025-12-26T03:02:25.700 [DEBUG] [Thread-23222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:02:25.720 [DEBUG] [Thread-23222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:02:25.720 [INFO] [Thread-23222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] client lang: <none>
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] server lang: <none>
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] kex follows: False
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] Compression: none
2025-12-26T03:02:25.724 [DEBUG] [Thread-23222] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:02:25.739 [DEBUG] [Thread-23222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:02:25.740 [DEBUG] [Thread-23222] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:02:25.740 [DEBUG] [Thread-23222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:02:25.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:02:25.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:02:25.740 [DEBUG] [Thread-23222] [transport.py] [_log()] userauth is OK
2025-12-26T03:02:25.741 [DEBUG] [Thread-23222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:02:25.741 [DEBUG] [Thread-23222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:02:25.741 [DEBUG] [Thread-23222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:02:25.741 [DEBUG] [Thread-23222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:02:25.749 [INFO] [Thread-23222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:02:25.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:02:26.565 [DEBUG] [Thread-23222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:02:26.565 [DEBUG] [Thread-23222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:02:26.566 [DEBUG] [Thread-23222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:02:26.607 [DEBUG] [Thread-23222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:02:26.607 [DEBUG] [Thread-23222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:02:26.610 [DEBUG] [Thread-23222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:02:26.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:02:26.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:02:26.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:02:26.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:02:26.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:02:26.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:02:26.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:02:26.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:02:26.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:02:26.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.043114 -999.00  +12.20  12.56     84   +9.70 1 1 1 2 1     0    0 2.92 16.49 ZNESW 12.6 12.6 163.4 16.1 12.8 -22.0 12.7 -21.5 12.4 -20.0 12.7 -21.0
2025-12-26T03:02:26.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:02:26.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:02:26.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.043114
2025-12-26T03:02:26.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:02:26.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:02:26.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:02:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:02:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:02:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:01:51', tmtdew=3.04, humidity=81.71, cloud=0.0, wind=17.68, temperature=12.19, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:02:05.050', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:00:00')
2025-12-26T03:02:26.638 [DEBUG] [Thread-23222] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:02:26.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-26T03:02:26.732 [DEBUG] [Thread-23225] [transport.py] [_log()] starting thread (client mode): 0xb955acb0
2025-12-26T03:02:26.733 [DEBUG] [Thread-23225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:02:26.747 [DEBUG] [Thread-23225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:02:26.747 [INFO] [Thread-23225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:02:26.755 [DEBUG] [Thread-23225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:02:26.755 [DEBUG] [Thread-23225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:02:26.755 [DEBUG] [Thread-23225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:02:26.755 [DEBUG] [Thread-23225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:26.755 [DEBUG] [Thread-23225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:26.755 [DEBUG] [Thread-23225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] client lang: <none>
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] server lang: <none>
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] kex follows: False
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] Compression: none
2025-12-26T03:02:26.756 [DEBUG] [Thread-23225] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:02:26.815 [DEBUG] [Thread-23225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:02:26.815 [DEBUG] [Thread-23225] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:02:26.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:02:26.816 [DEBUG] [Thread-23225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:02:26.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:02:26.870 [DEBUG] [Thread-23225] [transport.py] [_log()] userauth is OK
2025-12-26T03:02:26.870 [DEBUG] [Thread-23225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:02:26.870 [DEBUG] [Thread-23225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:02:26.870 [DEBUG] [Thread-23225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:02:26.870 [DEBUG] [Thread-23225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:02:26.884 [INFO] [Thread-23225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:02:26.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-26T03:02:26.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:02:27.728 [DEBUG] [Thread-23225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:02:27.729 [DEBUG] [Thread-23225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:02:27.776 [DEBUG] [Thread-23225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:02:27.776 [DEBUG] [Thread-23225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:02:27.785 [DEBUG] [Thread-23225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:02:27.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:02:27.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:02:27.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-26T03:02:27.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:02:27.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:02:27.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:02:27.826 [DEBUG] [Thread-23225] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:02:40.688 [DEBUG] [Thread-23227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:49.773 [DEBUG] [Thread-23228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:54.869 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:54.870 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:55.751 [DEBUG] [Thread-23229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:02:57.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:02:57.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:02:57.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-26T03:02:58.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 2, 23), 3.05, 81.64, 0.0, 17.03, 12.16, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:02:58.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:02:23
2025-12-26T03:02:58.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:02:58.815 [DEBUG] [Thread-23230] [transport.py] [_log()] starting thread (client mode): 0xb6b156c0
2025-12-26T03:02:58.816 [DEBUG] [Thread-23230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:02:58.836 [DEBUG] [Thread-23230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:02:58.836 [INFO] [Thread-23230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:02:58.839 [DEBUG] [Thread-23230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:02:58.839 [DEBUG] [Thread-23230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] client lang: <none>
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] server lang: <none>
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] kex follows: False
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:02:58.840 [DEBUG] [Thread-23230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:02:58.841 [DEBUG] [Thread-23230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:02:58.841 [DEBUG] [Thread-23230] [transport.py] [_log()] Compression: none
2025-12-26T03:02:58.841 [DEBUG] [Thread-23230] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:02:58.860 [DEBUG] [Thread-23230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:02:58.860 [DEBUG] [Thread-23230] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:02:58.861 [DEBUG] [Thread-23230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:02:58.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:02:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:02:58.863 [DEBUG] [Thread-23230] [transport.py] [_log()] userauth is OK
2025-12-26T03:02:58.863 [DEBUG] [Thread-23230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:02:58.863 [DEBUG] [Thread-23230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:02:58.863 [DEBUG] [Thread-23230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:02:58.864 [DEBUG] [Thread-23230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:02:58.889 [INFO] [Thread-23230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:02:58.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:02:59.541 [DEBUG] [Thread-23230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:02:59.541 [DEBUG] [Thread-23230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:02:59.542 [DEBUG] [Thread-23230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:02:59.582 [DEBUG] [Thread-23230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:02:59.582 [DEBUG] [Thread-23230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:02:59.586 [DEBUG] [Thread-23230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:02:59.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:02:59.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:02:59.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:02:59.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:02:59.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:02:59.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:02:59.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:02:59.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:02:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:02:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.043461 -999.00  +12.30  16.31     84   +9.80 1 1 1 2 1     0    0 2.96 17.08 ZNESW 16.3 16.3 163.6 23.9 12.8 -21.8 12.7 -21.6 12.4 -19.8 12.7 -20.8
2025-12-26T03:02:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:02:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:02:59.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.043461
2025-12-26T03:02:59.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:02:59.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:02:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:02:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:02:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:02:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:02:23', tmtdew=3.05, humidity=81.64, cloud=0.0, wind=17.03, temperature=12.16, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:02:35.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:00:00')
2025-12-26T03:02:59.613 [DEBUG] [Thread-23230] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:02:59.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:02:59.707 [DEBUG] [Thread-23233] [transport.py] [_log()] starting thread (client mode): 0xb6b14e80
2025-12-26T03:02:59.707 [DEBUG] [Thread-23233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:02:59.723 [DEBUG] [Thread-23233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:02:59.723 [INFO] [Thread-23233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] client lang: <none>
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] server lang: <none>
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] kex follows: False
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:02:59.731 [DEBUG] [Thread-23233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:02:59.732 [DEBUG] [Thread-23233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:02:59.732 [DEBUG] [Thread-23233] [transport.py] [_log()] Compression: none
2025-12-26T03:02:59.732 [DEBUG] [Thread-23233] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:02:59.790 [DEBUG] [Thread-23233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:02:59.791 [DEBUG] [Thread-23233] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:02:59.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:02:59.792 [DEBUG] [Thread-23233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:02:59.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:02:59.846 [DEBUG] [Thread-23233] [transport.py] [_log()] userauth is OK
2025-12-26T03:02:59.847 [DEBUG] [Thread-23233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:02:59.847 [DEBUG] [Thread-23233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:02:59.847 [DEBUG] [Thread-23233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:02:59.847 [DEBUG] [Thread-23233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:02:59.866 [INFO] [Thread-23233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:02:59.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-26T03:02:59.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:03:00.687 [DEBUG] [Thread-23233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:03:00.688 [DEBUG] [Thread-23233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:03:00.735 [DEBUG] [Thread-23233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:03:00.735 [DEBUG] [Thread-23233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:03:00.744 [DEBUG] [Thread-23233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:03:00.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:03:00.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-26T03:03:00.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:03:00.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:03:00.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:03:00.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:03:00.780 [DEBUG] [Thread-23233] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:03:10.781 [DEBUG] [Thread-23235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:03:25.817 [DEBUG] [Thread-23236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:03:30.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:03:30.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:03:30.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-26T03:03:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 3, 27), 3.09, 81.44, 0.0, 14.86, 12.21, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:03:31.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:03:27
2025-12-26T03:03:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:03:31.757 [DEBUG] [Thread-23237] [transport.py] [_log()] starting thread (client mode): 0xb6b207c0
2025-12-26T03:03:31.757 [DEBUG] [Thread-23237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:03:31.772 [DEBUG] [Thread-23237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:03:31.772 [INFO] [Thread-23237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] client lang: <none>
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] server lang: <none>
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] kex follows: False
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] Compression: none
2025-12-26T03:03:31.775 [DEBUG] [Thread-23237] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:03:31.792 [DEBUG] [Thread-23237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:03:31.793 [DEBUG] [Thread-23237] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:03:31.794 [DEBUG] [Thread-23237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:03:31.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:03:31.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:03:31.795 [DEBUG] [Thread-23237] [transport.py] [_log()] userauth is OK
2025-12-26T03:03:31.796 [DEBUG] [Thread-23237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:03:31.796 [DEBUG] [Thread-23237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:03:31.796 [DEBUG] [Thread-23237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:03:31.796 [DEBUG] [Thread-23237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:03:31.814 [INFO] [Thread-23237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:03:31.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:03:32.468 [DEBUG] [Thread-23237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:03:32.468 [DEBUG] [Thread-23237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:03:32.469 [DEBUG] [Thread-23237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:03:32.509 [DEBUG] [Thread-23237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:03:32.509 [DEBUG] [Thread-23237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:03:32.513 [DEBUG] [Thread-23237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:03:32.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:03:32.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:03:32.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:03:32.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:03:32.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:03:32.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:03:32.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:03:32.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:03:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:03:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.043808 -999.00  +12.30  12.05     84   +9.80 1 1 1 2 1     0    0 2.90 15.79 ZNESW 12.1 12.1 159.2 21.4 12.8 -21.9 12.6 -21.6 12.4 -20.0 12.7 -20.9
2025-12-26T03:03:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:03:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:03:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.043808
2025-12-26T03:03:32.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:03:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:03:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:03:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:03:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:03:32.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:03:27', tmtdew=3.09, humidity=81.44, cloud=0.0, wind=14.86, temperature=12.21, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:03:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:00:00')
2025-12-26T03:03:32.539 [DEBUG] [Thread-23237] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:03:32.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-26T03:03:32.634 [DEBUG] [Thread-23240] [transport.py] [_log()] starting thread (client mode): 0xb6b16230
2025-12-26T03:03:32.634 [DEBUG] [Thread-23240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:03:32.648 [DEBUG] [Thread-23240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:03:32.649 [INFO] [Thread-23240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:03:32.656 [DEBUG] [Thread-23240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:03:32.656 [DEBUG] [Thread-23240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:03:32.656 [DEBUG] [Thread-23240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:03:32.656 [DEBUG] [Thread-23240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:03:32.656 [DEBUG] [Thread-23240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:03:32.656 [DEBUG] [Thread-23240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] client lang: <none>
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] server lang: <none>
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] kex follows: False
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] Compression: none
2025-12-26T03:03:32.657 [DEBUG] [Thread-23240] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:03:32.714 [DEBUG] [Thread-23240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:03:32.715 [DEBUG] [Thread-23240] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:03:32.715 [DEBUG] [Thread-23240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:03:32.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:03:32.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:03:32.771 [DEBUG] [Thread-23240] [transport.py] [_log()] userauth is OK
2025-12-26T03:03:32.771 [DEBUG] [Thread-23240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:03:32.771 [DEBUG] [Thread-23240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:03:32.771 [DEBUG] [Thread-23240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:03:32.772 [DEBUG] [Thread-23240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:03:32.790 [INFO] [Thread-23240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:03:32.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:03:32.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:03:33.618 [DEBUG] [Thread-23240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:03:33.618 [DEBUG] [Thread-23240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:03:33.666 [DEBUG] [Thread-23240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:03:33.667 [DEBUG] [Thread-23240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:03:33.676 [DEBUG] [Thread-23240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:03:33.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:03:33.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:03:33.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:03:33.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:03:33.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:03:33.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:03:33.715 [DEBUG] [Thread-23240] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:03:40.852 [DEBUG] [Thread-23242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:03:49.847 [DEBUG] [Thread-23243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:03:55.071 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:03:55.072 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:03:55.900 [DEBUG] [Thread-23244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:03.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:04:03.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:04:03.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:04:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 3, 59), 3.1, 81.37, 0.0, 15.9, 12.11, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:04:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:03:59
2025-12-26T03:04:04.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:04:04.694 [DEBUG] [Thread-23245] [transport.py] [_log()] starting thread (client mode): 0xb6b165c0
2025-12-26T03:04:04.695 [DEBUG] [Thread-23245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:04:04.716 [DEBUG] [Thread-23245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:04:04.716 [INFO] [Thread-23245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:04:04.719 [DEBUG] [Thread-23245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:04:04.719 [DEBUG] [Thread-23245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] client lang: <none>
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] server lang: <none>
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] kex follows: False
2025-12-26T03:04:04.720 [DEBUG] [Thread-23245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:04:04.721 [DEBUG] [Thread-23245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:04:04.721 [DEBUG] [Thread-23245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:04:04.721 [DEBUG] [Thread-23245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:04:04.721 [DEBUG] [Thread-23245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:04:04.721 [DEBUG] [Thread-23245] [transport.py] [_log()] Compression: none
2025-12-26T03:04:04.721 [DEBUG] [Thread-23245] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:04:04.741 [DEBUG] [Thread-23245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:04:04.741 [DEBUG] [Thread-23245] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:04:04.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:04:04.743 [DEBUG] [Thread-23245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:04:04.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:04:04.745 [DEBUG] [Thread-23245] [transport.py] [_log()] userauth is OK
2025-12-26T03:04:04.745 [DEBUG] [Thread-23245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:04:04.745 [DEBUG] [Thread-23245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:04:04.745 [DEBUG] [Thread-23245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:04:04.745 [DEBUG] [Thread-23245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:04:04.782 [INFO] [Thread-23245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:04:04.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:04:05.406 [DEBUG] [Thread-23245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:04:05.406 [DEBUG] [Thread-23245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:04:05.407 [DEBUG] [Thread-23245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:04:05.448 [DEBUG] [Thread-23245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:04:05.448 [DEBUG] [Thread-23245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:04:05.451 [DEBUG] [Thread-23245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:04:05.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:04:05.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:04:05.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:04:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:04:05.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:04:05.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:04:05.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:04:05.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:04:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:04:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.044155 -999.00  +12.30   9.65     84   +9.80 1 1 1 2 1     0    0 2.90 15.71 ZNESW 9.7 9.7 159.0 17.8 12.8 -22.0 12.7 -21.5 12.3 -19.9 12.7 -20.9
2025-12-26T03:04:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:04:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:04:05.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.044155
2025-12-26T03:04:05.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:04:05.474 [DEBUG] [Thread-23245] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:04:05.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:04:05.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:04:05.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:04:05.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:04:05.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:03:59', tmtdew=3.1, humidity=81.37, cloud=0.0, wind=15.9, temperature=12.11, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:03:34.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:00:00')
2025-12-26T03:04:05.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-26T03:04:05.571 [DEBUG] [Thread-23248] [transport.py] [_log()] starting thread (client mode): 0xb6b16b00
2025-12-26T03:04:05.571 [DEBUG] [Thread-23248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:04:05.585 [DEBUG] [Thread-23248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:04:05.585 [INFO] [Thread-23248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:04:05.592 [DEBUG] [Thread-23248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:04:05.592 [DEBUG] [Thread-23248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:04:05.592 [DEBUG] [Thread-23248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:04:05.592 [DEBUG] [Thread-23248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:05.592 [DEBUG] [Thread-23248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] client lang: <none>
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] server lang: <none>
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] kex follows: False
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] Compression: none
2025-12-26T03:04:05.593 [DEBUG] [Thread-23248] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:04:05.649 [DEBUG] [Thread-23248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:04:05.649 [DEBUG] [Thread-23248] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:04:05.649 [DEBUG] [Thread-23248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:04:05.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:04:05.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:04:05.709 [DEBUG] [Thread-23248] [transport.py] [_log()] userauth is OK
2025-12-26T03:04:05.709 [DEBUG] [Thread-23248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:04:05.710 [DEBUG] [Thread-23248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:04:05.710 [DEBUG] [Thread-23248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:04:05.710 [DEBUG] [Thread-23248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:04:05.732 [INFO] [Thread-23248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:04:05.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-26T03:04:05.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:04:06.525 [DEBUG] [Thread-23248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:04:06.525 [DEBUG] [Thread-23248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:04:06.574 [DEBUG] [Thread-23248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:04:06.575 [DEBUG] [Thread-23248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:04:06.584 [DEBUG] [Thread-23248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:04:06.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:04:06.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-26T03:04:06.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-26T03:04:06.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:04:06.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:04:06.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:04:06.620 [DEBUG] [Thread-23248] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:04:10.936 [DEBUG] [Thread-23250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:25.990 [DEBUG] [Thread-23251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:36.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:04:36.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:04:36.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-26T03:04:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 4, 31), 3.09, 81.46, 0.0, 15.77, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:04:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:04:31
2025-12-26T03:04:37.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:04:37.594 [DEBUG] [Thread-23252] [transport.py] [_log()] starting thread (client mode): 0xb6b17dc0
2025-12-26T03:04:37.595 [DEBUG] [Thread-23252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:04:37.616 [DEBUG] [Thread-23252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:04:37.616 [INFO] [Thread-23252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] client lang: <none>
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] server lang: <none>
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] kex follows: False
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] Compression: none
2025-12-26T03:04:37.618 [DEBUG] [Thread-23252] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:04:37.632 [DEBUG] [Thread-23252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:04:37.632 [DEBUG] [Thread-23252] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:04:37.633 [DEBUG] [Thread-23252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:04:37.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:04:37.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:04:37.635 [DEBUG] [Thread-23252] [transport.py] [_log()] userauth is OK
2025-12-26T03:04:37.635 [DEBUG] [Thread-23252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:04:37.635 [DEBUG] [Thread-23252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:04:37.635 [DEBUG] [Thread-23252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:04:37.635 [DEBUG] [Thread-23252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:04:37.671 [INFO] [Thread-23252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:04:37.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:04:38.313 [DEBUG] [Thread-23252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:04:38.313 [DEBUG] [Thread-23252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:04:38.314 [DEBUG] [Thread-23252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:04:38.354 [DEBUG] [Thread-23252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:04:38.354 [DEBUG] [Thread-23252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:04:38.358 [DEBUG] [Thread-23252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:04:38.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:04:38.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:04:38.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:04:38.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:04:38.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:04:38.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:04:38.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:04:38.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:04:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:04:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.044502 -999.00  +12.30  12.36     84   +9.80 1 1 1 2 1     0    0 2.88 15.15 ZNESW 12.4 12.4 161.2 15.9 12.8 -21.9 12.7 -21.7 12.3 -20.0 12.7 -21.1
2025-12-26T03:04:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:04:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:04:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.044502
2025-12-26T03:04:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:04:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:04:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:04:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:04:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:04:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:04:31', tmtdew=3.09, humidity=81.46, cloud=0.0, wind=15.77, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:04:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:00:00')
2025-12-26T03:04:38.385 [DEBUG] [Thread-23252] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:04:38.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-26T03:04:38.481 [DEBUG] [Thread-23255] [transport.py] [_log()] starting thread (client mode): 0xb6b17fa0
2025-12-26T03:04:38.481 [DEBUG] [Thread-23255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:04:38.494 [DEBUG] [Thread-23255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:04:38.495 [INFO] [Thread-23255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:04:38.502 [DEBUG] [Thread-23255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:04:38.502 [DEBUG] [Thread-23255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] client lang: <none>
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] server lang: <none>
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] kex follows: False
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] Compression: none
2025-12-26T03:04:38.503 [DEBUG] [Thread-23255] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:04:38.565 [DEBUG] [Thread-23255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:04:38.566 [DEBUG] [Thread-23255] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:04:38.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:04:38.567 [DEBUG] [Thread-23255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:04:38.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:04:38.622 [DEBUG] [Thread-23255] [transport.py] [_log()] userauth is OK
2025-12-26T03:04:38.622 [DEBUG] [Thread-23255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:04:38.622 [DEBUG] [Thread-23255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:04:38.622 [DEBUG] [Thread-23255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:04:38.622 [DEBUG] [Thread-23255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:04:38.646 [INFO] [Thread-23255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:04:38.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-26T03:04:38.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:04:39.455 [DEBUG] [Thread-23255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:04:39.455 [DEBUG] [Thread-23255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:04:39.503 [DEBUG] [Thread-23255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:04:39.504 [DEBUG] [Thread-23255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:04:39.512 [DEBUG] [Thread-23255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:04:39.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:04:39.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-26T03:04:39.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-26T03:04:39.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:04:39.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:04:39.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:04:39.546 [DEBUG] [Thread-23255] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:04:41.020 [DEBUG] [Thread-23257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:46.036 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:49.921 [DEBUG] [Thread-23258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:55.272 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:55.273 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:55.445 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:56.069 [DEBUG] [Thread-23259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:04:59.573 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:09.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:05:09.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:05:09.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-26T03:05:10.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 5, 3), 3.09, 81.44, 0.0, 16.69, 12.12, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:05:10.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:05:03
2025-12-26T03:05:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:05:10.581 [DEBUG] [Thread-23260] [transport.py] [_log()] starting thread (client mode): 0xb6b166e0
2025-12-26T03:05:10.582 [DEBUG] [Thread-23260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:05:10.601 [DEBUG] [Thread-23260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:05:10.601 [INFO] [Thread-23260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] client lang: <none>
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] server lang: <none>
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] kex follows: False
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] Compression: none
2025-12-26T03:05:10.603 [DEBUG] [Thread-23260] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:05:10.611 [DEBUG] [Thread-23260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:05:10.611 [DEBUG] [Thread-23260] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:05:10.612 [DEBUG] [Thread-23260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:05:10.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:05:10.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:05:10.612 [DEBUG] [Thread-23260] [transport.py] [_log()] userauth is OK
2025-12-26T03:05:10.612 [DEBUG] [Thread-23260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:05:10.612 [DEBUG] [Thread-23260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:05:10.612 [DEBUG] [Thread-23260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:05:10.612 [DEBUG] [Thread-23260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:05:10.623 [INFO] [Thread-23260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:05:10.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:05:11.101 [DEBUG] [Thread-23262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:12.409 [DEBUG] [Thread-23260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:05:12.410 [DEBUG] [Thread-23260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:05:12.410 [DEBUG] [Thread-23260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:05:12.450 [DEBUG] [Thread-23260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:05:12.450 [DEBUG] [Thread-23260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:05:12.453 [DEBUG] [Thread-23260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:05:12.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:05:12.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:05:12.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:05:12.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:05:12.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:05:12.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:05:12.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:05:12.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:05:12.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:05:12.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.044502 -999.00  +12.30  12.36     84   +9.80 1 1 1 2 1     0    0 2.88 15.15 ZNESW 12.4 12.4 161.2 15.9 12.8 -21.9 12.7 -21.7 12.3 -20.0 12.7 -21.1
2025-12-26T03:05:12.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:05:12.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:05:12.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.044502
2025-12-26T03:05:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:05:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:05:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:05:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:05:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:05:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:05:03', tmtdew=3.09, humidity=81.44, cloud=0.0, wind=16.69, temperature=12.12, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:04:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:03:00')
2025-12-26T03:05:12.480 [DEBUG] [Thread-23260] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:05:12.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-26T03:05:12.575 [DEBUG] [Thread-23264] [transport.py] [_log()] starting thread (client mode): 0xb6b233d0
2025-12-26T03:05:12.575 [DEBUG] [Thread-23264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:05:12.593 [DEBUG] [Thread-23264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:05:12.593 [INFO] [Thread-23264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:05:12.603 [DEBUG] [Thread-23264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] client lang: <none>
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] server lang: <none>
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] kex follows: False
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:05:12.604 [DEBUG] [Thread-23264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:05:12.605 [DEBUG] [Thread-23264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:05:12.605 [DEBUG] [Thread-23264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:05:12.605 [DEBUG] [Thread-23264] [transport.py] [_log()] Compression: none
2025-12-26T03:05:12.605 [DEBUG] [Thread-23264] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:05:12.663 [DEBUG] [Thread-23264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:05:12.664 [DEBUG] [Thread-23264] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:05:12.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:05:12.665 [DEBUG] [Thread-23264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:05:12.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:05:12.726 [DEBUG] [Thread-23264] [transport.py] [_log()] userauth is OK
2025-12-26T03:05:12.727 [DEBUG] [Thread-23264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:05:12.727 [DEBUG] [Thread-23264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:05:12.727 [DEBUG] [Thread-23264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:05:12.727 [DEBUG] [Thread-23264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:05:12.747 [INFO] [Thread-23264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:05:12.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:05:12.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:05:13.543 [DEBUG] [Thread-23264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:05:13.543 [DEBUG] [Thread-23264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:05:13.591 [DEBUG] [Thread-23264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:05:13.591 [DEBUG] [Thread-23264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:05:13.602 [DEBUG] [Thread-23264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:05:13.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:05:13.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-26T03:05:13.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-26T03:05:13.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:05:13.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:05:13.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:05:13.640 [DEBUG] [Thread-23264] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:05:26.134 [DEBUG] [Thread-23266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:41.185 [DEBUG] [Thread-23267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:43.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:05:43.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:05:43.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-26T03:05:44.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 5, 35), 3.07, 81.57, 0.0, 15.77, 12.15, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:05:44.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:05:35
2025-12-26T03:05:44.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:05:44.650 [DEBUG] [Thread-23268] [transport.py] [_log()] starting thread (client mode): 0xb6b21ea0
2025-12-26T03:05:44.650 [DEBUG] [Thread-23268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:05:44.670 [DEBUG] [Thread-23268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:05:44.670 [INFO] [Thread-23268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] client lang: <none>
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] server lang: <none>
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] kex follows: False
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] Compression: none
2025-12-26T03:05:44.673 [DEBUG] [Thread-23268] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:05:44.690 [DEBUG] [Thread-23268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:05:44.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:05:44.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] userauth is OK
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:05:44.691 [DEBUG] [Thread-23268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:05:44.701 [INFO] [Thread-23268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:05:44.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:05:45.297 [DEBUG] [Thread-23268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:05:45.297 [DEBUG] [Thread-23268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:05:45.298 [DEBUG] [Thread-23268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:05:45.338 [DEBUG] [Thread-23268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:05:45.338 [DEBUG] [Thread-23268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:05:45.341 [DEBUG] [Thread-23268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:05:45.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:05:45.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:05:45.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:05:45.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:05:45.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:05:45.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:05:45.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.044849 -999.00  +12.20  12.24     84   +9.70 1 1 1 2 1     0    0 2.86 13.82 ZNESW 12.2 12.2 157.4 18.5 12.7 -21.8 12.7 -21.7 12.4 -20.1 12.7 -21.1
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.044849
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:05:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:05:35', tmtdew=3.07, humidity=81.57, cloud=0.0, wind=15.77, temperature=12.15, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:04:34.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:03:00')
2025-12-26T03:05:45.362 [DEBUG] [Thread-23268] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:05:45.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-26T03:05:45.444 [DEBUG] [Thread-23271] [transport.py] [_log()] starting thread (client mode): 0xb6b16d70
2025-12-26T03:05:45.444 [DEBUG] [Thread-23271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:05:45.459 [DEBUG] [Thread-23271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:05:45.459 [INFO] [Thread-23271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] client lang: <none>
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] server lang: <none>
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] kex follows: False
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] Compression: none
2025-12-26T03:05:45.466 [DEBUG] [Thread-23271] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:05:45.523 [DEBUG] [Thread-23271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:05:45.523 [DEBUG] [Thread-23271] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:05:45.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:05:45.523 [DEBUG] [Thread-23271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:05:45.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:05:45.580 [DEBUG] [Thread-23271] [transport.py] [_log()] userauth is OK
2025-12-26T03:05:45.580 [DEBUG] [Thread-23271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:05:45.580 [DEBUG] [Thread-23271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:05:45.580 [DEBUG] [Thread-23271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:05:45.580 [DEBUG] [Thread-23271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:05:45.594 [INFO] [Thread-23271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:05:45.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-26T03:05:45.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:05:46.450 [DEBUG] [Thread-23271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:05:46.450 [DEBUG] [Thread-23271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:05:46.497 [DEBUG] [Thread-23271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:05:46.497 [DEBUG] [Thread-23271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:05:46.505 [DEBUG] [Thread-23271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:05:46.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:05:46.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-26T03:05:46.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-26T03:05:46.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:05:46.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:05:46.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:05:46.537 [DEBUG] [Thread-23271] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:05:49.993 [DEBUG] [Thread-23273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:55.475 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:55.476 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:05:56.218 [DEBUG] [Thread-23274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:11.282 [DEBUG] [Thread-23275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:16.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:06:16.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:06:16.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-26T03:06:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 6, 7), 3.07, 81.52, 0.0, 16.52, 12.04, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:06:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:06:07
2025-12-26T03:06:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:06:17.519 [DEBUG] [Thread-23276] [transport.py] [_log()] starting thread (client mode): 0xb6b15150
2025-12-26T03:06:17.519 [DEBUG] [Thread-23276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:06:17.541 [DEBUG] [Thread-23276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:06:17.541 [INFO] [Thread-23276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:06:17.544 [DEBUG] [Thread-23276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] client lang: <none>
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] server lang: <none>
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] kex follows: False
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] Compression: none
2025-12-26T03:06:17.545 [DEBUG] [Thread-23276] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:06:17.565 [DEBUG] [Thread-23276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:06:17.566 [DEBUG] [Thread-23276] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:06:17.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:06:17.567 [DEBUG] [Thread-23276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:06:17.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:06:17.569 [DEBUG] [Thread-23276] [transport.py] [_log()] userauth is OK
2025-12-26T03:06:17.569 [DEBUG] [Thread-23276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:06:17.569 [DEBUG] [Thread-23276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:06:17.569 [DEBUG] [Thread-23276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:06:17.569 [DEBUG] [Thread-23276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:06:17.592 [INFO] [Thread-23276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:06:17.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:06:18.327 [DEBUG] [Thread-23276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:06:18.327 [DEBUG] [Thread-23276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:06:18.328 [DEBUG] [Thread-23276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:06:18.369 [DEBUG] [Thread-23276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:06:18.369 [DEBUG] [Thread-23276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:06:18.373 [DEBUG] [Thread-23276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:06:18.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:06:18.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:06:18.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:06:18.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:06:18.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:06:18.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:06:18.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:06:18.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:06:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:06:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.045544 -999.00  +12.20  14.39     84   +9.70 1 1 1 2 1     0    0 2.81 12.48 ZNESW 14.4 14.4 168.6 19.4 12.8 -21.9 12.6 -21.4 12.4 -20.0 12.7 -20.8
2025-12-26T03:06:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:06:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:06:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.045544
2025-12-26T03:06:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:06:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:06:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:06:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:06:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:06:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:06:07', tmtdew=3.07, humidity=81.52, cloud=0.0, wind=16.52, temperature=12.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:05:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:03:00')
2025-12-26T03:06:18.398 [DEBUG] [Thread-23276] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:06:18.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-26T03:06:18.491 [DEBUG] [Thread-23279] [transport.py] [_log()] starting thread (client mode): 0xbbfcebc0
2025-12-26T03:06:18.491 [DEBUG] [Thread-23279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:06:18.506 [DEBUG] [Thread-23279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:06:18.506 [INFO] [Thread-23279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:06:18.514 [DEBUG] [Thread-23279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:06:18.514 [DEBUG] [Thread-23279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] client lang: <none>
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] server lang: <none>
2025-12-26T03:06:18.515 [DEBUG] [Thread-23279] [transport.py] [_log()] kex follows: False
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] Compression: none
2025-12-26T03:06:18.516 [DEBUG] [Thread-23279] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:06:18.573 [DEBUG] [Thread-23279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:06:18.573 [DEBUG] [Thread-23279] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:06:18.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:06:18.575 [DEBUG] [Thread-23279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:06:18.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:06:18.629 [DEBUG] [Thread-23279] [transport.py] [_log()] userauth is OK
2025-12-26T03:06:18.629 [DEBUG] [Thread-23279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:06:18.630 [DEBUG] [Thread-23279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:06:18.630 [DEBUG] [Thread-23279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:06:18.630 [DEBUG] [Thread-23279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:06:18.648 [INFO] [Thread-23279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:06:18.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:06:18.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:06:19.439 [DEBUG] [Thread-23279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:06:19.439 [DEBUG] [Thread-23279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:06:19.488 [DEBUG] [Thread-23279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:06:19.488 [DEBUG] [Thread-23279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:06:19.497 [DEBUG] [Thread-23279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:06:19.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:06:19.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:06:19.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-26T03:06:19.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:06:19.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:06:19.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:06:19.534 [DEBUG] [Thread-23279] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:06:26.316 [DEBUG] [Thread-23281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:41.355 [DEBUG] [Thread-23282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:49.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:06:49.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:06:49.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-26T03:06:50.068 [DEBUG] [Thread-23283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 6, 39), 3.06, 81.59, 0.0, 15.97, 12.06, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:06:50.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:06:39
2025-12-26T03:06:50.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:06:50.536 [DEBUG] [Thread-23284] [transport.py] [_log()] starting thread (client mode): 0xbbfcd9c0
2025-12-26T03:06:50.536 [DEBUG] [Thread-23284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:06:50.557 [DEBUG] [Thread-23284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:06:50.557 [INFO] [Thread-23284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:06:50.560 [DEBUG] [Thread-23284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] client lang: <none>
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] server lang: <none>
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] kex follows: False
2025-12-26T03:06:50.561 [DEBUG] [Thread-23284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:06:50.562 [DEBUG] [Thread-23284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:06:50.562 [DEBUG] [Thread-23284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:06:50.562 [DEBUG] [Thread-23284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:06:50.562 [DEBUG] [Thread-23284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:06:50.562 [DEBUG] [Thread-23284] [transport.py] [_log()] Compression: none
2025-12-26T03:06:50.562 [DEBUG] [Thread-23284] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:06:50.580 [DEBUG] [Thread-23284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:06:50.581 [DEBUG] [Thread-23284] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:06:50.581 [DEBUG] [Thread-23284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:06:50.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:06:50.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:06:50.583 [DEBUG] [Thread-23284] [transport.py] [_log()] userauth is OK
2025-12-26T03:06:50.583 [DEBUG] [Thread-23284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:06:50.583 [DEBUG] [Thread-23284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:06:50.583 [DEBUG] [Thread-23284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:06:50.583 [DEBUG] [Thread-23284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:06:50.606 [INFO] [Thread-23284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:06:50.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:06:51.240 [DEBUG] [Thread-23284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:06:51.240 [DEBUG] [Thread-23284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:06:51.241 [DEBUG] [Thread-23284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:06:51.280 [DEBUG] [Thread-23284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:06:51.281 [DEBUG] [Thread-23284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:06:51.283 [DEBUG] [Thread-23284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:06:51.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:06:51.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:06:51.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:06:51.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:06:51.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:06:51.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:06:51.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:06:51.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:06:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:06:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.045891 -999.00  +12.20   9.92     84   +9.70 1 1 1 2 1     0    0 2.91 13.83 ZNESW 9.9 9.9 160.6 16.2 12.7 -21.9 12.6 -21.5 12.4 -20.0 12.7 -21.0
2025-12-26T03:06:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:06:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:06:51.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.045891
2025-12-26T03:06:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:06:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:06:51.305 [DEBUG] [Thread-23284] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:06:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:06:51.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:06:51.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:06:51.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:06:39', tmtdew=3.06, humidity=81.59, cloud=0.0, wind=15.97, temperature=12.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:06:04.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:03:00')
2025-12-26T03:06:51.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-26T03:06:51.400 [DEBUG] [Thread-23287] [transport.py] [_log()] starting thread (client mode): 0xb6b144f0
2025-12-26T03:06:51.400 [DEBUG] [Thread-23287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:06:51.415 [DEBUG] [Thread-23287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:06:51.415 [INFO] [Thread-23287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] client lang: <none>
2025-12-26T03:06:51.422 [DEBUG] [Thread-23287] [transport.py] [_log()] server lang: <none>
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] kex follows: False
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] Compression: none
2025-12-26T03:06:51.423 [DEBUG] [Thread-23287] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:06:51.480 [DEBUG] [Thread-23287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:06:51.480 [DEBUG] [Thread-23287] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:06:51.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:06:51.481 [DEBUG] [Thread-23287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:06:51.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:06:51.536 [DEBUG] [Thread-23287] [transport.py] [_log()] userauth is OK
2025-12-26T03:06:51.537 [DEBUG] [Thread-23287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:06:51.537 [DEBUG] [Thread-23287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:06:51.537 [DEBUG] [Thread-23287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:06:51.537 [DEBUG] [Thread-23287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:06:51.556 [INFO] [Thread-23287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:06:51.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:06:51.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:06:52.350 [DEBUG] [Thread-23287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:06:52.350 [DEBUG] [Thread-23287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:06:52.401 [DEBUG] [Thread-23287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:06:52.401 [DEBUG] [Thread-23287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:06:52.413 [DEBUG] [Thread-23287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:06:52.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:06:52.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:06:52.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-26T03:06:52.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:06:52.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:06:52.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:06:52.447 [DEBUG] [Thread-23287] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:06:55.676 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:55.677 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:06:56.387 [DEBUG] [Thread-23289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:11.437 [DEBUG] [Thread-23290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:22.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:07:22.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:07:22.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-26T03:07:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 7, 12), 3.04, 81.69, 0.0, 17.79, 12.09, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:07:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:07:12
2025-12-26T03:07:23.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:07:23.428 [DEBUG] [Thread-23291] [transport.py] [_log()] starting thread (client mode): 0xb6b20370
2025-12-26T03:07:23.428 [DEBUG] [Thread-23291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:07:23.447 [DEBUG] [Thread-23291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:07:23.447 [INFO] [Thread-23291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:07:23.450 [DEBUG] [Thread-23291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] client lang: <none>
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] server lang: <none>
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] kex follows: False
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] Compression: none
2025-12-26T03:07:23.451 [DEBUG] [Thread-23291] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:07:23.469 [DEBUG] [Thread-23291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:07:23.470 [DEBUG] [Thread-23291] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:07:23.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:07:23.471 [DEBUG] [Thread-23291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:07:23.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:07:23.473 [DEBUG] [Thread-23291] [transport.py] [_log()] userauth is OK
2025-12-26T03:07:23.473 [DEBUG] [Thread-23291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:07:23.473 [DEBUG] [Thread-23291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:07:23.473 [DEBUG] [Thread-23291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:07:23.473 [DEBUG] [Thread-23291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:07:23.498 [INFO] [Thread-23291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:07:23.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:07:24.280 [DEBUG] [Thread-23291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:07:24.280 [DEBUG] [Thread-23291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:07:24.280 [DEBUG] [Thread-23291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:07:24.321 [DEBUG] [Thread-23291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:07:24.321 [DEBUG] [Thread-23291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:07:24.324 [DEBUG] [Thread-23291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:07:24.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:07:24.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:07:24.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:07:24.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:07:24.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:07:24.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:07:24.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:07:24.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:07:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:07:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.046238 -999.00  +12.20  11.06     84   +9.70 1 1 1 2 1     0    0 2.87 12.70 ZNESW 11.1 11.1 148.7 18.6 12.8 -21.9 12.6 -21.5 12.4 -20.1 12.7 -20.9
2025-12-26T03:07:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:07:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:07:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.046238
2025-12-26T03:07:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:07:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:07:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:07:24.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:07:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:07:24.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:07:12', tmtdew=3.04, humidity=81.69, cloud=0.0, wind=17.79, temperature=12.09, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:06:34.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:03:00')
2025-12-26T03:07:24.353 [DEBUG] [Thread-23291] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:07:24.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-26T03:07:24.448 [DEBUG] [Thread-23294] [transport.py] [_log()] starting thread (client mode): 0xb6b23b80
2025-12-26T03:07:24.448 [DEBUG] [Thread-23294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:07:24.463 [DEBUG] [Thread-23294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:07:24.463 [INFO] [Thread-23294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:07:24.471 [DEBUG] [Thread-23294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:07:24.471 [DEBUG] [Thread-23294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:07:24.471 [DEBUG] [Thread-23294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:07:24.471 [DEBUG] [Thread-23294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] client lang: <none>
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] server lang: <none>
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] kex follows: False
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:07:24.472 [DEBUG] [Thread-23294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:07:24.473 [DEBUG] [Thread-23294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:07:24.473 [DEBUG] [Thread-23294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:07:24.473 [DEBUG] [Thread-23294] [transport.py] [_log()] Compression: none
2025-12-26T03:07:24.473 [DEBUG] [Thread-23294] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:07:24.530 [DEBUG] [Thread-23294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:07:24.530 [DEBUG] [Thread-23294] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:07:24.531 [DEBUG] [Thread-23294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:07:24.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:07:24.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:07:24.592 [DEBUG] [Thread-23294] [transport.py] [_log()] userauth is OK
2025-12-26T03:07:24.592 [DEBUG] [Thread-23294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:07:24.592 [DEBUG] [Thread-23294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:07:24.593 [DEBUG] [Thread-23294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:07:24.593 [DEBUG] [Thread-23294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:07:24.613 [INFO] [Thread-23294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:07:24.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:07:24.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:07:25.428 [DEBUG] [Thread-23294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:07:25.428 [DEBUG] [Thread-23294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:07:25.478 [DEBUG] [Thread-23294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:07:25.479 [DEBUG] [Thread-23294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:07:25.490 [DEBUG] [Thread-23294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:07:25.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:07:25.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-26T03:07:25.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-26T03:07:25.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:07:25.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:07:25.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:07:25.533 [DEBUG] [Thread-23294] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:07:26.471 [DEBUG] [Thread-23296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:41.531 [DEBUG] [Thread-23297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:50.141 [DEBUG] [Thread-23298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:55.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:07:55.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:07: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-26T03:07:55.877 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:55.878 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:56.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 7, 44), 2.99, 81.71, 0.0, 18.35, 12.06, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:07:56.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:07:44
2025-12-26T03:07:56.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:07:56.550 [DEBUG] [Thread-23299] [transport.py] [_log()] starting thread (client mode): 0xbbfcfdf0
2025-12-26T03:07:56.550 [DEBUG] [Thread-23299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:07:56.556 [DEBUG] [Thread-23300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:07:56.569 [DEBUG] [Thread-23299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:07:56.569 [INFO] [Thread-23299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:07:56.572 [DEBUG] [Thread-23299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] client lang: <none>
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] server lang: <none>
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] kex follows: False
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] Compression: none
2025-12-26T03:07:56.573 [DEBUG] [Thread-23299] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:07:56.590 [DEBUG] [Thread-23299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:07:56.590 [DEBUG] [Thread-23299] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:07:56.591 [DEBUG] [Thread-23299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:07:56.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:07:56.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:07:56.593 [DEBUG] [Thread-23299] [transport.py] [_log()] userauth is OK
2025-12-26T03:07:56.593 [DEBUG] [Thread-23299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:07:56.593 [DEBUG] [Thread-23299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:07:56.593 [DEBUG] [Thread-23299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:07:56.593 [DEBUG] [Thread-23299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:07:56.611 [INFO] [Thread-23299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:07:56.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:07:57.238 [DEBUG] [Thread-23299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:07:57.238 [DEBUG] [Thread-23299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:07:57.238 [DEBUG] [Thread-23299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:07:57.279 [DEBUG] [Thread-23299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:07:57.280 [DEBUG] [Thread-23299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:07:57.282 [DEBUG] [Thread-23299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:07:57.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:07:57.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:07:57.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:07:57.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:07:57.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:07:57.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:07:57.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.046586 -999.00  +12.20  11.78     84   +9.70 1 1 1 2 1     0    0 2.77 12.26 ZNESW 11.8 11.8 163.2 15.4 12.8 -21.9 12.7 -21.7 12.3 -19.9 12.7 -20.9
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.046586
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:07:57.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:07:44', tmtdew=2.99, humidity=81.71, cloud=0.0, wind=18.35, temperature=12.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:07:05.030', atlas_cloud=1, atlas_rain=1, zp_data=[0.16274999999999906, 0.1542500000000011, 0.2322500000000005, 0.12549999999999883, 0.11950000000000038, 0.1877500000000012, 0.24499999999999922, 0.23825000000000074, 0.21249999999999858, 0.14199999999999946, 0.1222499999999993, 0.2270000000000003, 0.2029999999999994, 0.18074999999999974, 0.2699999999999996, 0.27399999999999913, 0.20175000000000054, 0.2679999999999989, 0.1899999999999995, 0.26674999999999827, 0.23699999999999832, 0.2807499999999994, 0.26525000000000176, 0.2452500000000004, 0.23999999999999844, 0.2370000000000001, 0.30774999999999864, 0.39749999999999996, 0.4474999999999998, 0.277000000000001, 0.3080000000000016, 0.41999999999999993, 0.31374999999999886], zp_timestamp='2025-12-26T01:03:00')
2025-12-26T03:07:57.302 [DEBUG] [Thread-23299] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:07: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-26T03:07:57.387 [DEBUG] [Thread-23303] [transport.py] [_log()] starting thread (client mode): 0xb95b0100
2025-12-26T03:07:57.387 [DEBUG] [Thread-23303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:07:57.403 [DEBUG] [Thread-23303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:07:57.403 [INFO] [Thread-23303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:07:57.410 [DEBUG] [Thread-23303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] client lang: <none>
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] server lang: <none>
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] kex follows: False
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] Compression: none
2025-12-26T03:07:57.411 [DEBUG] [Thread-23303] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:07:57.468 [DEBUG] [Thread-23303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:07:57.468 [DEBUG] [Thread-23303] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:07:57.469 [DEBUG] [Thread-23303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:07:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:07:57.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:07:57.524 [DEBUG] [Thread-23303] [transport.py] [_log()] userauth is OK
2025-12-26T03:07:57.525 [DEBUG] [Thread-23303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:07:57.525 [DEBUG] [Thread-23303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:07:57.526 [DEBUG] [Thread-23303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:07:57.526 [DEBUG] [Thread-23303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:07:57.546 [INFO] [Thread-23303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:07:57.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-26T03:07:57.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:07:58.345 [DEBUG] [Thread-23303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:07:58.346 [DEBUG] [Thread-23303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:07:58.394 [DEBUG] [Thread-23303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:07:58.394 [DEBUG] [Thread-23303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:07:58.403 [DEBUG] [Thread-23303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:07:58.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:07:58.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-26T03:07:58.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-26T03:07:58.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:07:58.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:07:58.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:07:58.440 [DEBUG] [Thread-23303] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:08:11.588 [DEBUG] [Thread-23305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:08:26.623 [DEBUG] [Thread-23306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:08:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:08:28.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:08:28.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-26T03:08:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 8, 16), 2.98, 81.77, 0.0, 16.82, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:08:29.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:08:16
2025-12-26T03:08:29.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:08:29.441 [DEBUG] [Thread-23307] [transport.py] [_log()] starting thread (client mode): 0xb6b22c20
2025-12-26T03:08:29.441 [DEBUG] [Thread-23307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:08:29.461 [DEBUG] [Thread-23307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:08:29.461 [INFO] [Thread-23307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] client lang: <none>
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] server lang: <none>
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] kex follows: False
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:08:29.464 [DEBUG] [Thread-23307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:08:29.465 [DEBUG] [Thread-23307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:08:29.465 [DEBUG] [Thread-23307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:08:29.465 [DEBUG] [Thread-23307] [transport.py] [_log()] Compression: none
2025-12-26T03:08:29.465 [DEBUG] [Thread-23307] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:08:29.482 [DEBUG] [Thread-23307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:08:29.482 [DEBUG] [Thread-23307] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:08:29.483 [DEBUG] [Thread-23307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:08:29.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:08:29.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:08:29.484 [DEBUG] [Thread-23307] [transport.py] [_log()] userauth is OK
2025-12-26T03:08:29.485 [DEBUG] [Thread-23307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:08:29.485 [DEBUG] [Thread-23307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:08:29.485 [DEBUG] [Thread-23307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:08:29.485 [DEBUG] [Thread-23307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:08:29.502 [INFO] [Thread-23307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:08:29.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:08:30.198 [DEBUG] [Thread-23307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:08:30.198 [DEBUG] [Thread-23307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:08:30.199 [DEBUG] [Thread-23307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:08:30.239 [DEBUG] [Thread-23307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:08:30.239 [DEBUG] [Thread-23307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:08:30.244 [DEBUG] [Thread-23307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:08:30.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:08:30.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:08:30.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:08:30.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:08:30.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:08:30.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:08:30.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:08:30.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:08:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:08:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.046933 -999.00  +12.20  13.42     84   +9.70 1 1 1 2 1     0    0 2.80 11.51 ZNESW 13.4 13.4 148.0 17.4 12.8 -21.9 12.6 -21.4 12.4 -20.0 12.7 -20.9
2025-12-26T03:08:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:08:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:08:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.046933
2025-12-26T03:08:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:08:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:08:30.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:08:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:08:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:08:30.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:08:16', tmtdew=2.98, humidity=81.77, cloud=0.0, wind=16.82, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:07:35.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.12875000000000014, 0.15825000000000067, 0.23825000000000074, 0.14000000000000057, 0.11650000000000027, 0.20025000000000048, 0.2234999999999996, 0.18925000000000125, 0.2024999999999988, 0.13149999999999906, 0.12524999999999942, 0.19500000000000028, 0.21799999999999997, 0.1817499999999992, 0.22699999999999854, 0.22999999999999865, 0.19624999999999915, 0.2530000000000001, 0.19649999999999856, 0.28474999999999895, 0.19299999999999784, 0.21174999999999855, 0.23325000000000173, 0.23825000000000074, 0.20099999999999874, 0.20650000000000013, 0.30574999999999974, 0.35050000000000026, 0.3959999999999999, 0.33250000000000135, 0.277000000000001, 0.3750000000000009, 0.3197499999999991], zp_timestamp='2025-12-26T01:07:00')
2025-12-26T03:08:30.271 [DEBUG] [Thread-23307] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:08:30.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-26T03:08:30.365 [DEBUG] [Thread-23310] [transport.py] [_log()] starting thread (client mode): 0xb95b29e0
2025-12-26T03:08:30.365 [DEBUG] [Thread-23310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:08:30.380 [DEBUG] [Thread-23310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:08:30.380 [INFO] [Thread-23310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:08:30.388 [DEBUG] [Thread-23310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] client lang: <none>
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] server lang: <none>
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] kex follows: False
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:08:30.389 [DEBUG] [Thread-23310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:08:30.390 [DEBUG] [Thread-23310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:08:30.390 [DEBUG] [Thread-23310] [transport.py] [_log()] Compression: none
2025-12-26T03:08:30.390 [DEBUG] [Thread-23310] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:08:30.449 [DEBUG] [Thread-23310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:08:30.450 [DEBUG] [Thread-23310] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:08:30.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:08:30.451 [DEBUG] [Thread-23310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:08:30.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:08:30.504 [DEBUG] [Thread-23310] [transport.py] [_log()] userauth is OK
2025-12-26T03:08:30.505 [DEBUG] [Thread-23310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:08:30.505 [DEBUG] [Thread-23310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:08:30.505 [DEBUG] [Thread-23310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:08:30.505 [DEBUG] [Thread-23310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:08:30.529 [INFO] [Thread-23310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:08:30.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-26T03:08:30.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:08:31.344 [DEBUG] [Thread-23310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:08:31.345 [DEBUG] [Thread-23310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:08:31.393 [DEBUG] [Thread-23310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:08:31.393 [DEBUG] [Thread-23310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:08:31.402 [DEBUG] [Thread-23310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:08:31.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:08:31.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-26T03:08:31.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-26T03:08:31.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:08:31.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:08:31.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:08:31.439 [DEBUG] [Thread-23310] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:08:41.657 [DEBUG] [Thread-23312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:08:50.192 [DEBUG] [Thread-23313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:08:56.079 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:08:56.081 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:08:56.707 [DEBUG] [Thread-23314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:01.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:09:01.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:09:01.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-26T03:09:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 8, 48), 3.02, 81.82, 0.0, 17.87, 12.06, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:09:02.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:08:48
2025-12-26T03:09:02.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:09:02.501 [DEBUG] [Thread-23315] [transport.py] [_log()] starting thread (client mode): 0xb95b0970
2025-12-26T03:09:02.502 [DEBUG] [Thread-23315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:09:02.523 [DEBUG] [Thread-23315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:09:02.523 [INFO] [Thread-23315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] client lang: <none>
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] server lang: <none>
2025-12-26T03:09:02.526 [DEBUG] [Thread-23315] [transport.py] [_log()] kex follows: False
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] Compression: none
2025-12-26T03:09:02.527 [DEBUG] [Thread-23315] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:09:02.542 [DEBUG] [Thread-23315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:09:02.542 [DEBUG] [Thread-23315] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:09:02.543 [DEBUG] [Thread-23315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:09:02.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:09:02.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:09:02.544 [DEBUG] [Thread-23315] [transport.py] [_log()] userauth is OK
2025-12-26T03:09:02.544 [DEBUG] [Thread-23315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:09:02.544 [DEBUG] [Thread-23315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:09:02.544 [DEBUG] [Thread-23315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:09:02.544 [DEBUG] [Thread-23315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:09:02.560 [INFO] [Thread-23315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:09:02.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:09:03.187 [DEBUG] [Thread-23315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:09:03.187 [DEBUG] [Thread-23315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:09:03.187 [DEBUG] [Thread-23315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:09:03.229 [DEBUG] [Thread-23315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:09:03.229 [DEBUG] [Thread-23315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:09:03.232 [DEBUG] [Thread-23315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:09:03.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:09:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:09:03.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:09:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:09:03.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:09:03.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:09:03.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.047627 -999.00  +12.20  13.35     84   +9.70 1 1 1 2 1     0    0 2.81 10.09 ZNESW 13.3 13.3 159.2 20.2 12.7 -21.9 12.6 -21.5 12.4 -20.0 12.7 -21.0
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.047627
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:09:03.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:08:48', tmtdew=3.02, humidity=81.82, cloud=0.0, wind=17.87, temperature=12.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:08:34.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.12875000000000014, 0.15825000000000067, 0.23825000000000074, 0.14000000000000057, 0.11650000000000027, 0.20025000000000048, 0.2234999999999996, 0.18925000000000125, 0.2024999999999988, 0.13149999999999906, 0.12524999999999942, 0.19500000000000028, 0.21799999999999997, 0.1817499999999992, 0.22699999999999854, 0.22999999999999865, 0.19624999999999915, 0.2530000000000001, 0.19649999999999856, 0.28474999999999895, 0.19299999999999784, 0.21174999999999855, 0.23325000000000173, 0.23825000000000074, 0.20099999999999874, 0.20650000000000013, 0.30574999999999974, 0.35050000000000026, 0.3959999999999999, 0.33250000000000135, 0.277000000000001, 0.3750000000000009, 0.3197499999999991], zp_timestamp='2025-12-26T01:07:00')
2025-12-26T03:09:03.247 [DEBUG] [Thread-23315] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:09:03.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-26T03:09:03.333 [DEBUG] [Thread-23318] [transport.py] [_log()] starting thread (client mode): 0xb9544400
2025-12-26T03:09:03.333 [DEBUG] [Thread-23318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:09:03.349 [DEBUG] [Thread-23318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:09:03.349 [INFO] [Thread-23318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:09:03.356 [DEBUG] [Thread-23318] [transport.py] [_log()] client lang: <none>
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] server lang: <none>
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] kex follows: False
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] Compression: none
2025-12-26T03:09:03.357 [DEBUG] [Thread-23318] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:09:03.416 [DEBUG] [Thread-23318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:09:03.416 [DEBUG] [Thread-23318] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:09:03.416 [DEBUG] [Thread-23318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:09:03.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:09:03.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:09:03.473 [DEBUG] [Thread-23318] [transport.py] [_log()] userauth is OK
2025-12-26T03:09:03.473 [DEBUG] [Thread-23318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:09:03.473 [DEBUG] [Thread-23318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:09:03.473 [DEBUG] [Thread-23318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:09:03.473 [DEBUG] [Thread-23318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:09:03.490 [INFO] [Thread-23318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:09:03.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-26T03:09:03.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:09:04.305 [DEBUG] [Thread-23318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:09:04.305 [DEBUG] [Thread-23318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:09:04.353 [DEBUG] [Thread-23318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:09:04.354 [DEBUG] [Thread-23318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:09:04.362 [DEBUG] [Thread-23318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:09:04.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:09:04.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-26T03:09:04.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-26T03:09:04.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:09:04.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:09:04.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:09:04.393 [DEBUG] [Thread-23318] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:09:11.742 [DEBUG] [Thread-23320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:26.794 [DEBUG] [Thread-23321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:34.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:09:34.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:09:34.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-26T03:09:35.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 9, 20), 3.01, 81.86, 0.0, 16.55, 12.07, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:09:35.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:09:20
2025-12-26T03:09:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:09:35.406 [DEBUG] [Thread-23322] [transport.py] [_log()] starting thread (client mode): 0xbbfcdb70
2025-12-26T03:09:35.406 [DEBUG] [Thread-23322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:09:35.427 [DEBUG] [Thread-23322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:09:35.427 [INFO] [Thread-23322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] client lang: <none>
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] server lang: <none>
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] kex follows: False
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] Compression: none
2025-12-26T03:09:35.430 [DEBUG] [Thread-23322] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:09:35.448 [DEBUG] [Thread-23322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:09:35.449 [DEBUG] [Thread-23322] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:09:35.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:09:35.450 [DEBUG] [Thread-23322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:09:35.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:09:35.451 [DEBUG] [Thread-23322] [transport.py] [_log()] userauth is OK
2025-12-26T03:09:35.451 [DEBUG] [Thread-23322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:09:35.451 [DEBUG] [Thread-23322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:09:35.451 [DEBUG] [Thread-23322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:09:35.451 [DEBUG] [Thread-23322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:09:35.473 [INFO] [Thread-23322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:09:35.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:09:36.205 [DEBUG] [Thread-23322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:09:36.205 [DEBUG] [Thread-23322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:09:36.206 [DEBUG] [Thread-23322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:09:36.246 [DEBUG] [Thread-23322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:09:36.246 [DEBUG] [Thread-23322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:09:36.250 [DEBUG] [Thread-23322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:09:36.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:09:36.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:09:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:09:36.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:09:36.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:09:36.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:09:36.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:09:36.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:09:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:09:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.047974 -999.00  +12.10  11.09     85   +9.70 1 1 1 2 1     0    0 2.72 10.24 ZNESW 11.1 11.1 164.0 16.3 12.7 -21.8 12.6 -21.4 12.3 -19.9 12.7 -20.8
2025-12-26T03:09:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:09:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:09:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.047974
2025-12-26T03:09:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:09:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:09:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:09:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:09:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:09:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:09:20', tmtdew=3.01, humidity=81.86, cloud=0.0, wind=16.55, temperature=12.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:09:04.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.12875000000000014, 0.15825000000000067, 0.23825000000000074, 0.14000000000000057, 0.11650000000000027, 0.20025000000000048, 0.2234999999999996, 0.18925000000000125, 0.2024999999999988, 0.13149999999999906, 0.12524999999999942, 0.19500000000000028, 0.21799999999999997, 0.1817499999999992, 0.22699999999999854, 0.22999999999999865, 0.19624999999999915, 0.2530000000000001, 0.19649999999999856, 0.28474999999999895, 0.19299999999999784, 0.21174999999999855, 0.23325000000000173, 0.23825000000000074, 0.20099999999999874, 0.20650000000000013, 0.30574999999999974, 0.35050000000000026, 0.3959999999999999, 0.33250000000000135, 0.277000000000001, 0.3750000000000009, 0.3197499999999991], zp_timestamp='2025-12-26T01:07:00')
2025-12-26T03:09:36.269 [DEBUG] [Thread-23322] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:09:36.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-26T03:09:36.366 [DEBUG] [Thread-23325] [transport.py] [_log()] starting thread (client mode): 0xbbfcde40
2025-12-26T03:09:36.366 [DEBUG] [Thread-23325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:09:36.380 [DEBUG] [Thread-23325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:09:36.380 [INFO] [Thread-23325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] client lang: <none>
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] server lang: <none>
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] kex follows: False
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:09:36.388 [DEBUG] [Thread-23325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:09:36.389 [DEBUG] [Thread-23325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:09:36.389 [DEBUG] [Thread-23325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:09:36.389 [DEBUG] [Thread-23325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:09:36.389 [DEBUG] [Thread-23325] [transport.py] [_log()] Compression: none
2025-12-26T03:09:36.389 [DEBUG] [Thread-23325] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:09:36.444 [DEBUG] [Thread-23325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:09:36.445 [DEBUG] [Thread-23325] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:09:36.446 [DEBUG] [Thread-23325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:09:36.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:09:36.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:09:36.501 [DEBUG] [Thread-23325] [transport.py] [_log()] userauth is OK
2025-12-26T03:09:36.501 [DEBUG] [Thread-23325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:09:36.502 [DEBUG] [Thread-23325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:09:36.502 [DEBUG] [Thread-23325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:09:36.502 [DEBUG] [Thread-23325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:09:36.519 [INFO] [Thread-23325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:09: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-26T03:09:36.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:09:37.328 [DEBUG] [Thread-23325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:09:37.328 [DEBUG] [Thread-23325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:09:37.376 [DEBUG] [Thread-23325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:09:37.376 [DEBUG] [Thread-23325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:09:37.386 [DEBUG] [Thread-23325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:09:37.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:09:37.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-26T03:09:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:09:37.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:09:37.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:09:37.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:09:37.422 [DEBUG] [Thread-23325] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:09:41.830 [DEBUG] [Thread-23327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:50.250 [DEBUG] [Thread-23328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:56.280 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:56.281 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:09:56.875 [DEBUG] [Thread-23329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:10:07.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:10:07.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-26T03:10:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 9, 52), 2.94, 81.97, 0.0, 19.04, 12.02, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:10:08.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:09:52
2025-12-26T03:10:08.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:10:08.423 [DEBUG] [Thread-23330] [transport.py] [_log()] starting thread (client mode): 0xbbfcdd20
2025-12-26T03:10:08.424 [DEBUG] [Thread-23330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:10:08.444 [DEBUG] [Thread-23330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:10:08.444 [INFO] [Thread-23330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] client lang: <none>
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] server lang: <none>
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] kex follows: False
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:10:08.447 [DEBUG] [Thread-23330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:10:08.448 [DEBUG] [Thread-23330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:10:08.448 [DEBUG] [Thread-23330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:10:08.448 [DEBUG] [Thread-23330] [transport.py] [_log()] Compression: none
2025-12-26T03:10:08.448 [DEBUG] [Thread-23330] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:10:08.465 [DEBUG] [Thread-23330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:10:08.465 [DEBUG] [Thread-23330] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:10:08.466 [DEBUG] [Thread-23330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:10:08.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:10:08.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:10:08.468 [DEBUG] [Thread-23330] [transport.py] [_log()] userauth is OK
2025-12-26T03:10:08.468 [DEBUG] [Thread-23330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:10:08.468 [DEBUG] [Thread-23330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:10:08.469 [DEBUG] [Thread-23330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:10:08.469 [DEBUG] [Thread-23330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:10:08.493 [INFO] [Thread-23330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:10:08.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:10:11.907 [DEBUG] [Thread-23330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:10:11.908 [DEBUG] [Thread-23330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:10:11.908 [DEBUG] [Thread-23330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:10:11.911 [DEBUG] [Thread-23332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:11.948 [DEBUG] [Thread-23330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:10:11.948 [DEBUG] [Thread-23330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:10:11.952 [DEBUG] [Thread-23330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:10:11.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:10:11.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:10:11.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:10:11.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:10:12.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:10:12.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:10:12.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:10:12.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:10:12.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:10:12.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.048322 -999.00  +12.10   9.41     85   +9.70 1 1 1 2 1     0    0 2.69 9.08 ZNESW 9.4 9.4 170.2 16.3 12.7 -21.9 12.6 -21.5 12.3 -20.0 12.6 -20.7
2025-12-26T03:10:12.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:10:12.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:10:12.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.048322
2025-12-26T03:10:12.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:10:12.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:10:12.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:10:12.009 [DEBUG] [Thread-23330] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:10:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:10:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:10:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:09:52', tmtdew=2.94, humidity=81.97, cloud=0.0, wind=19.04, temperature=12.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:09:35.021', atlas_cloud=1, atlas_rain=1, zp_data=[0.12875000000000014, 0.15825000000000067, 0.23825000000000074, 0.14000000000000057, 0.11650000000000027, 0.20025000000000048, 0.2234999999999996, 0.18925000000000125, 0.2024999999999988, 0.13149999999999906, 0.12524999999999942, 0.19500000000000028, 0.21799999999999997, 0.1817499999999992, 0.22699999999999854, 0.22999999999999865, 0.19624999999999915, 0.2530000000000001, 0.19649999999999856, 0.28474999999999895, 0.19299999999999784, 0.21174999999999855, 0.23325000000000173, 0.23825000000000074, 0.20099999999999874, 0.20650000000000013, 0.30574999999999974, 0.35050000000000026, 0.3959999999999999, 0.33250000000000135, 0.277000000000001, 0.3750000000000009, 0.3197499999999991], zp_timestamp='2025-12-26T01:07:00')
2025-12-26T03:10:12.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-26T03:10:12.104 [DEBUG] [Thread-23334] [transport.py] [_log()] starting thread (client mode): 0xb95b2c20
2025-12-26T03:10:12.105 [DEBUG] [Thread-23334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:10:12.119 [DEBUG] [Thread-23334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:10:12.119 [INFO] [Thread-23334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:10:12.127 [DEBUG] [Thread-23334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:10:12.127 [DEBUG] [Thread-23334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:10:12.127 [DEBUG] [Thread-23334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:10:12.127 [DEBUG] [Thread-23334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:12.127 [DEBUG] [Thread-23334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:12.127 [DEBUG] [Thread-23334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] client lang: <none>
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] server lang: <none>
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] kex follows: False
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:10:12.128 [DEBUG] [Thread-23334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:10:12.129 [DEBUG] [Thread-23334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:10:12.129 [DEBUG] [Thread-23334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:10:12.129 [DEBUG] [Thread-23334] [transport.py] [_log()] Compression: none
2025-12-26T03:10:12.129 [DEBUG] [Thread-23334] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:10:12.186 [DEBUG] [Thread-23334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:10:12.187 [DEBUG] [Thread-23334] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:10:12.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:10:12.189 [DEBUG] [Thread-23334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:10:12.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:10:12.246 [DEBUG] [Thread-23334] [transport.py] [_log()] userauth is OK
2025-12-26T03:10:12.246 [DEBUG] [Thread-23334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:10:12.247 [DEBUG] [Thread-23334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:10:12.247 [DEBUG] [Thread-23334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:10:12.247 [DEBUG] [Thread-23334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:10:12.266 [INFO] [Thread-23334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:10:12.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-26T03:10:12.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:10:13.066 [DEBUG] [Thread-23334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:10:13.066 [DEBUG] [Thread-23334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:10:13.114 [DEBUG] [Thread-23334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:10:13.114 [DEBUG] [Thread-23334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:10:13.123 [DEBUG] [Thread-23334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:10:13.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:10:13.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:10:13.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-26T03:10:13.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:10:13.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:10:13.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:10:13.160 [DEBUG] [Thread-23334] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:10:26.953 [DEBUG] [Thread-23336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:42.019 [DEBUG] [Thread-23337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:43.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:10:43.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:10:43.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-26T03:10:43.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 10, 24), 2.94, 81.95, 0.0, 18.56, 11.99, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:10:43.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:10:24
2025-12-26T03:10:44.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:10:44.152 [DEBUG] [Thread-23338] [transport.py] [_log()] starting thread (client mode): 0xb9546890
2025-12-26T03:10:44.152 [DEBUG] [Thread-23338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:10:44.172 [DEBUG] [Thread-23338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:10:44.173 [INFO] [Thread-23338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] client lang: <none>
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] server lang: <none>
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] kex follows: False
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:10:44.176 [DEBUG] [Thread-23338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:10:44.177 [DEBUG] [Thread-23338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:10:44.177 [DEBUG] [Thread-23338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:10:44.177 [DEBUG] [Thread-23338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:10:44.177 [DEBUG] [Thread-23338] [transport.py] [_log()] Compression: none
2025-12-26T03:10:44.177 [DEBUG] [Thread-23338] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:10:44.194 [DEBUG] [Thread-23338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:10:44.194 [DEBUG] [Thread-23338] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:10:44.195 [DEBUG] [Thread-23338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:10:44.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:10:44.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:10:44.197 [DEBUG] [Thread-23338] [transport.py] [_log()] userauth is OK
2025-12-26T03:10:44.197 [DEBUG] [Thread-23338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:10:44.197 [DEBUG] [Thread-23338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:10:44.197 [DEBUG] [Thread-23338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:10:44.197 [DEBUG] [Thread-23338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:10:44.233 [INFO] [Thread-23338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:10:44.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:10:44.856 [DEBUG] [Thread-23338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:10:44.857 [DEBUG] [Thread-23338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:10:44.857 [DEBUG] [Thread-23338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:10:44.898 [DEBUG] [Thread-23338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:10:44.898 [DEBUG] [Thread-23338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:10:44.902 [DEBUG] [Thread-23338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:10:44.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:10:44.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:10:44.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:10:44.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:10:44.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:10:44.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:10:44.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:10:44.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:10:44.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:10:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.048669 -999.00  +12.10  11.19     85   +9.70 1 1 1 2 1     0    0 2.74 8.30 ZNESW 11.2 11.2 157.4 14.9 12.7 -21.8 12.5 -21.5 12.3 -19.9 12.6 -20.8
2025-12-26T03:10:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:10:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:10:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.048669
2025-12-26T03:10:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:10:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:10:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:10:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:10:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:10:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:10:24', tmtdew=2.94, humidity=81.95, cloud=0.0, wind=18.56, temperature=11.99, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:10:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.12875000000000014, 0.15825000000000067, 0.23825000000000074, 0.14000000000000057, 0.11650000000000027, 0.20025000000000048, 0.2234999999999996, 0.18925000000000125, 0.2024999999999988, 0.13149999999999906, 0.12524999999999942, 0.19500000000000028, 0.21799999999999997, 0.1817499999999992, 0.22699999999999854, 0.22999999999999865, 0.19624999999999915, 0.2530000000000001, 0.19649999999999856, 0.28474999999999895, 0.19299999999999784, 0.21174999999999855, 0.23325000000000173, 0.23825000000000074, 0.20099999999999874, 0.20650000000000013, 0.30574999999999974, 0.35050000000000026, 0.3959999999999999, 0.33250000000000135, 0.277000000000001, 0.3750000000000009, 0.3197499999999991], zp_timestamp='2025-12-26T01:07:00')
2025-12-26T03:10:44.930 [DEBUG] [Thread-23338] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:10: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-26T03:10:45.024 [DEBUG] [Thread-23341] [transport.py] [_log()] starting thread (client mode): 0xb95902e0
2025-12-26T03:10:45.024 [DEBUG] [Thread-23341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:10:45.038 [DEBUG] [Thread-23341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:10:45.038 [INFO] [Thread-23341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:10:45.046 [DEBUG] [Thread-23341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] client lang: <none>
2025-12-26T03:10:45.047 [DEBUG] [Thread-23341] [transport.py] [_log()] server lang: <none>
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] kex follows: False
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:10:45.048 [DEBUG] [Thread-23341] [transport.py] [_log()] Compression: none
2025-12-26T03:10:45.049 [DEBUG] [Thread-23341] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:10:45.106 [DEBUG] [Thread-23341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:10:45.107 [DEBUG] [Thread-23341] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:10:45.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:10:45.108 [DEBUG] [Thread-23341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:10:45.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:10:45.162 [DEBUG] [Thread-23341] [transport.py] [_log()] userauth is OK
2025-12-26T03:10:45.162 [DEBUG] [Thread-23341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:10:45.162 [DEBUG] [Thread-23341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:10:45.162 [DEBUG] [Thread-23341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:10:45.162 [DEBUG] [Thread-23341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:10:45.187 [INFO] [Thread-23341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:10:45.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-26T03:10:45.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:10:46.005 [DEBUG] [Thread-23341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:10:46.005 [DEBUG] [Thread-23341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:10:46.053 [DEBUG] [Thread-23341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:10:46.054 [DEBUG] [Thread-23341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:10:46.063 [DEBUG] [Thread-23341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:10:46.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:10:46.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-26T03:10:46.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-26T03:10:46.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:10:46.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:10:46.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:10:46.102 [DEBUG] [Thread-23341] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:10:50.314 [DEBUG] [Thread-23343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:56.483 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:56.485 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:10:57.053 [DEBUG] [Thread-23344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:00.788 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:12.090 [DEBUG] [Thread-23345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:16.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:11:16.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:11: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-26T03:11:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 10, 56), 2.91, 82.37, 0.0, 18.23, 11.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:11:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:10:56
2025-12-26T03:11:16.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:11:17.105 [DEBUG] [Thread-23346] [transport.py] [_log()] starting thread (client mode): 0xbbfcffa0
2025-12-26T03:11:17.105 [DEBUG] [Thread-23346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:11:17.125 [DEBUG] [Thread-23346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:11:17.126 [INFO] [Thread-23346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:11:17.129 [DEBUG] [Thread-23346] [transport.py] [_log()] client lang: <none>
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] server lang: <none>
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] kex follows: False
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] Compression: none
2025-12-26T03:11:17.130 [DEBUG] [Thread-23346] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:11:17.149 [DEBUG] [Thread-23346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:11:17.150 [DEBUG] [Thread-23346] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:11:17.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:11:17.151 [DEBUG] [Thread-23346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:11:17.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:11:17.153 [DEBUG] [Thread-23346] [transport.py] [_log()] userauth is OK
2025-12-26T03:11:17.153 [DEBUG] [Thread-23346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:11:17.153 [DEBUG] [Thread-23346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:11:17.154 [DEBUG] [Thread-23346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:11:17.154 [DEBUG] [Thread-23346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:11:17.177 [INFO] [Thread-23346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:11:17.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:11:17.836 [DEBUG] [Thread-23346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:11:17.837 [DEBUG] [Thread-23346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:11:17.837 [DEBUG] [Thread-23346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:11:17.878 [DEBUG] [Thread-23346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:11:17.878 [DEBUG] [Thread-23346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:11:17.882 [DEBUG] [Thread-23346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:11:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:11:17.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:11:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:11:17.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:11:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:11:17.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:11:17.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:11:17.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:11:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:11:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.049016 -999.00  +12.10  12.05     85   +9.60 1 1 1 2 1     0    0 2.66 7.90 ZNESW 12.1 12.1 161.8 17.2 12.7 -21.8 12.6 -21.5 12.3 -19.9 12.6 -21.0
2025-12-26T03:11:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:11:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:11:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.049016
2025-12-26T03:11:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:11:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:11:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:11:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:11:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:11:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:10:56', tmtdew=2.91, humidity=82.37, cloud=0.0, wind=18.23, temperature=11.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:10:34.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:09:00')
2025-12-26T03:11:17.909 [DEBUG] [Thread-23346] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:11:17.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-26T03:11:18.008 [DEBUG] [Thread-23349] [transport.py] [_log()] starting thread (client mode): 0xb95b3bb0
2025-12-26T03:11:18.008 [DEBUG] [Thread-23349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:11:18.026 [DEBUG] [Thread-23349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:11:18.026 [INFO] [Thread-23349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:11:18.037 [DEBUG] [Thread-23349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:11:18.037 [DEBUG] [Thread-23349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:11:18.037 [DEBUG] [Thread-23349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] client lang: <none>
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] server lang: <none>
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] kex follows: False
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:11:18.038 [DEBUG] [Thread-23349] [transport.py] [_log()] Compression: none
2025-12-26T03:11:18.039 [DEBUG] [Thread-23349] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:11:18.100 [DEBUG] [Thread-23349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:11:18.101 [DEBUG] [Thread-23349] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:11:18.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:11:18.102 [DEBUG] [Thread-23349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:11:18.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:11:18.165 [DEBUG] [Thread-23349] [transport.py] [_log()] userauth is OK
2025-12-26T03:11:18.165 [DEBUG] [Thread-23349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:11:18.165 [DEBUG] [Thread-23349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:11:18.166 [DEBUG] [Thread-23349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:11:18.166 [DEBUG] [Thread-23349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:11:18.190 [INFO] [Thread-23349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:11:18.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-26T03:11:18.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:11:18.980 [DEBUG] [Thread-23349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:11:18.981 [DEBUG] [Thread-23349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:11:19.028 [DEBUG] [Thread-23349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:11:19.028 [DEBUG] [Thread-23349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:11:19.040 [DEBUG] [Thread-23349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:11:19.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:11:19.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:11:19.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-26T03:11:19.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:11:19.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:11:19.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:11:19.087 [DEBUG] [Thread-23349] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:11:27.129 [DEBUG] [Thread-23351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:42.187 [DEBUG] [Thread-23352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:11:49.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:11:49.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:11:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 11, 28), 2.88, 82.54, 0.0, 19.8, 11.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:11:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:11:28
2025-12-26T03:11:49.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:11:50.102 [DEBUG] [Thread-23353] [transport.py] [_log()] starting thread (client mode): 0xb95b1ab0
2025-12-26T03:11:50.102 [DEBUG] [Thread-23353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:11:50.122 [DEBUG] [Thread-23353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:11:50.123 [INFO] [Thread-23353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:11:50.125 [DEBUG] [Thread-23353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:11:50.125 [DEBUG] [Thread-23353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] client lang: <none>
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] server lang: <none>
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] kex follows: False
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] Compression: none
2025-12-26T03:11:50.126 [DEBUG] [Thread-23353] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:11:50.145 [DEBUG] [Thread-23353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:11:50.145 [DEBUG] [Thread-23353] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:11:50.146 [DEBUG] [Thread-23353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:11:50.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:11:50.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:11:50.148 [DEBUG] [Thread-23353] [transport.py] [_log()] userauth is OK
2025-12-26T03:11:50.148 [DEBUG] [Thread-23353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:11:50.149 [DEBUG] [Thread-23353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:11:50.149 [DEBUG] [Thread-23353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:11:50.149 [DEBUG] [Thread-23353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:11:50.163 [INFO] [Thread-23353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:11:50.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:11:50.384 [DEBUG] [Thread-23355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:50.784 [DEBUG] [Thread-23353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:11:50.784 [DEBUG] [Thread-23353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:11:50.785 [DEBUG] [Thread-23353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:11:50.825 [DEBUG] [Thread-23353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:11:50.825 [DEBUG] [Thread-23353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:11:50.828 [DEBUG] [Thread-23353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:11:50.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:11:50.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:11:50.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:11:50.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:11:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:11:50.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:11:50.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:11:50.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:11:50.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:11:50.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.049363 -999.00  +12.00  16.29     85   +9.60 1 1 1 2 1     0    0 2.67 6.68 ZNESW 16.3 16.3 166.4 19.1 12.7 -21.8 12.6 -21.4 12.3 -19.9 12.6 -20.9
2025-12-26T03:11:50.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:11:50.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:11:50.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.049363
2025-12-26T03:11:50.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:11:50.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:11:50.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:11:50.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:11:50.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:11:50.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:11:28', tmtdew=2.88, humidity=82.54, cloud=0.0, wind=19.8, temperature=11.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:11:04.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:09:00')
2025-12-26T03:11:50.854 [DEBUG] [Thread-23353] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:11:50.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-26T03:11:50.949 [DEBUG] [Thread-23357] [transport.py] [_log()] starting thread (client mode): 0xb95f3370
2025-12-26T03:11:50.949 [DEBUG] [Thread-23357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:11:50.964 [DEBUG] [Thread-23357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:11:50.964 [INFO] [Thread-23357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] client lang: <none>
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] server lang: <none>
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] kex follows: False
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:11:50.972 [DEBUG] [Thread-23357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:11:50.973 [DEBUG] [Thread-23357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:11:50.973 [DEBUG] [Thread-23357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:11:50.973 [DEBUG] [Thread-23357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:11:50.973 [DEBUG] [Thread-23357] [transport.py] [_log()] Compression: none
2025-12-26T03:11:50.973 [DEBUG] [Thread-23357] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:11:51.031 [DEBUG] [Thread-23357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:11:51.031 [DEBUG] [Thread-23357] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:11:51.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:11:51.032 [DEBUG] [Thread-23357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:11:51.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:11:51.086 [DEBUG] [Thread-23357] [transport.py] [_log()] userauth is OK
2025-12-26T03:11:51.087 [DEBUG] [Thread-23357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:11:51.087 [DEBUG] [Thread-23357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:11:51.087 [DEBUG] [Thread-23357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:11:51.087 [DEBUG] [Thread-23357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:11:51.106 [INFO] [Thread-23357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:11:51.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-26T03:11:51.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:11:51.937 [DEBUG] [Thread-23357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:11:51.937 [DEBUG] [Thread-23357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:11:51.985 [DEBUG] [Thread-23357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:11:51.985 [DEBUG] [Thread-23357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:11:51.994 [DEBUG] [Thread-23357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:11:52.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:11:52.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-26T03:11:52.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-26T03:11:52.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:11:52.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:11:52.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:11:52.030 [DEBUG] [Thread-23357] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:11:56.682 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:56.683 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:11:57.219 [DEBUG] [Thread-23359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:12.272 [DEBUG] [Thread-23360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:22.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:12:22.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:12: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-26T03:12:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 11, 28), 2.93, 82.54, 0.0, 19.8, 11.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:12:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:11:28
2025-12-26T03:12:22.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:12:23.032 [DEBUG] [Thread-23361] [transport.py] [_log()] starting thread (client mode): 0xb95f1ba0
2025-12-26T03:12:23.032 [DEBUG] [Thread-23361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:12:23.051 [DEBUG] [Thread-23361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:12:23.052 [INFO] [Thread-23361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] client lang: <none>
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] server lang: <none>
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] kex follows: False
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:12:23.055 [DEBUG] [Thread-23361] [transport.py] [_log()] Compression: none
2025-12-26T03:12:23.056 [DEBUG] [Thread-23361] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:12:23.072 [DEBUG] [Thread-23361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:12:23.073 [DEBUG] [Thread-23361] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:12:23.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:12:23.074 [DEBUG] [Thread-23361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:12:23.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:12:23.076 [DEBUG] [Thread-23361] [transport.py] [_log()] userauth is OK
2025-12-26T03:12:23.076 [DEBUG] [Thread-23361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:12:23.076 [DEBUG] [Thread-23361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:12:23.076 [DEBUG] [Thread-23361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:12:23.076 [DEBUG] [Thread-23361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:12:23.102 [INFO] [Thread-23361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:12:23.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:12:23.724 [DEBUG] [Thread-23361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:12:23.724 [DEBUG] [Thread-23361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:12:23.725 [DEBUG] [Thread-23361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:12:23.765 [DEBUG] [Thread-23361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:12:23.765 [DEBUG] [Thread-23361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:12:23.769 [DEBUG] [Thread-23361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:12:23.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:12:23.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:12:23.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:12:23.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:12:23.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:12:23.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:12:23.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:12:23.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:12:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:12:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.050058 -999.00  +12.00  13.51     85   +9.70 1 1 1 2 1     0    0 2.57 4.15 ZNESW 13.5 13.5 153.6 17.5 12.7 -21.8 12.6 -21.4 12.3 -19.8 12.6 -20.6
2025-12-26T03:12:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:12:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:12:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.050058
2025-12-26T03:12:23.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:12:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:12:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:12:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:12:23.794 [DEBUG] [Thread-23361] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:12:23.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:12:23.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:11:28', tmtdew=2.93, humidity=82.54, cloud=0.0, wind=19.8, temperature=11.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:12:05.011', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:09:00')
2025-12-26T03:12:23.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-26T03:12:23.884 [DEBUG] [Thread-23364] [transport.py] [_log()] starting thread (client mode): 0xb9547880
2025-12-26T03:12:23.884 [DEBUG] [Thread-23364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:12:23.899 [DEBUG] [Thread-23364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:12:23.899 [INFO] [Thread-23364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] client lang: <none>
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] server lang: <none>
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] kex follows: False
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:12:23.907 [DEBUG] [Thread-23364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:12:23.908 [DEBUG] [Thread-23364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:12:23.908 [DEBUG] [Thread-23364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:12:23.908 [DEBUG] [Thread-23364] [transport.py] [_log()] Compression: none
2025-12-26T03:12:23.908 [DEBUG] [Thread-23364] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:12:23.967 [DEBUG] [Thread-23364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:12:23.967 [DEBUG] [Thread-23364] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:12:23.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:12:23.968 [DEBUG] [Thread-23364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:12:23.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:12:24.022 [DEBUG] [Thread-23364] [transport.py] [_log()] userauth is OK
2025-12-26T03:12:24.022 [DEBUG] [Thread-23364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:12:24.022 [DEBUG] [Thread-23364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:12:24.022 [DEBUG] [Thread-23364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:12:24.022 [DEBUG] [Thread-23364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:12:24.041 [INFO] [Thread-23364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:12:24.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:12:24.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:12:24.851 [DEBUG] [Thread-23364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:12:24.851 [DEBUG] [Thread-23364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:12:24.899 [DEBUG] [Thread-23364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:12:24.899 [DEBUG] [Thread-23364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:12:24.909 [DEBUG] [Thread-23364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:12:24.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:12:24.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:12:24.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:12:24.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:12:24.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:12:24.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:12:24.945 [DEBUG] [Thread-23364] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:12:27.306 [DEBUG] [Thread-23366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:42.357 [DEBUG] [Thread-23367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:50.459 [DEBUG] [Thread-23368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:12:54.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:12:54.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-26T03:12:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 12, 32), 2.91, 82.62, 0.0, 19.16, 11.97, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:12:55.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:12:32
2025-12-26T03:12:55.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:12:55.988 [DEBUG] [Thread-23369] [transport.py] [_log()] starting thread (client mode): 0xb9547f40
2025-12-26T03:12:55.988 [DEBUG] [Thread-23369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:12:56.008 [DEBUG] [Thread-23369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:12:56.008 [INFO] [Thread-23369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:12:56.011 [DEBUG] [Thread-23369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:12:56.011 [DEBUG] [Thread-23369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:12:56.011 [DEBUG] [Thread-23369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:12:56.011 [DEBUG] [Thread-23369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:56.011 [DEBUG] [Thread-23369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:56.011 [DEBUG] [Thread-23369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] client lang: <none>
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] server lang: <none>
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] kex follows: False
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] Compression: none
2025-12-26T03:12:56.012 [DEBUG] [Thread-23369] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:12:56.026 [DEBUG] [Thread-23369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:12:56.026 [DEBUG] [Thread-23369] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:12:56.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:12:56.026 [DEBUG] [Thread-23369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:12:56.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:12:56.027 [DEBUG] [Thread-23369] [transport.py] [_log()] userauth is OK
2025-12-26T03:12:56.027 [DEBUG] [Thread-23369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:12:56.027 [DEBUG] [Thread-23369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:12:56.027 [DEBUG] [Thread-23369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:12:56.027 [DEBUG] [Thread-23369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:12:56.054 [INFO] [Thread-23369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:12:56.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:12:56.677 [DEBUG] [Thread-23369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:12:56.677 [DEBUG] [Thread-23369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:12:56.677 [DEBUG] [Thread-23369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:12:56.718 [DEBUG] [Thread-23369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:12:56.718 [DEBUG] [Thread-23369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:12:56.721 [DEBUG] [Thread-23369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:12:56.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:12:56.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:12:56.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:12:56.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:12:56.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:12:56.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:12:56.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.050405 -999.00  +12.00  14.13     85   +9.70 1 1 1 2 1     0    0 2.57 3.06 ZNESW 14.1 14.1 170.0 17.7 12.7 -21.7 12.6 -21.4 12.3 -19.7 12.6 -20.9
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.050405
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:12:56.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:12:56.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:12:56.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:12:56.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:12:56.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:12:32', tmtdew=2.91, humidity=82.62, cloud=0.0, wind=19.16, temperature=11.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:12:34.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:09:00')
2025-12-26T03:12:56.739 [DEBUG] [Thread-23369] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:12:56.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-26T03:12:56.823 [DEBUG] [Thread-23372] [transport.py] [_log()] starting thread (client mode): 0xb9590790
2025-12-26T03:12:56.824 [DEBUG] [Thread-23372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:12:56.839 [DEBUG] [Thread-23372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:12:56.839 [INFO] [Thread-23372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] client lang: <none>
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] server lang: <none>
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] kex follows: False
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:12:56.846 [DEBUG] [Thread-23372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:12:56.847 [DEBUG] [Thread-23372] [transport.py] [_log()] Compression: none
2025-12-26T03:12:56.847 [DEBUG] [Thread-23372] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:12:56.883 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:56.884 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:56.902 [DEBUG] [Thread-23372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:12:56.902 [DEBUG] [Thread-23372] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:12:56.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:12:56.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:12:56.902 [DEBUG] [Thread-23372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:12:56.958 [DEBUG] [Thread-23372] [transport.py] [_log()] userauth is OK
2025-12-26T03:12:56.958 [DEBUG] [Thread-23372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:12:56.958 [DEBUG] [Thread-23372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:12:56.958 [DEBUG] [Thread-23372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:12:56.958 [DEBUG] [Thread-23372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:12:56.973 [INFO] [Thread-23372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:12:56.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-26T03:12:56.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:12:57.390 [DEBUG] [Thread-23374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:12:57.776 [DEBUG] [Thread-23372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:12:57.777 [DEBUG] [Thread-23372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:12:57.824 [DEBUG] [Thread-23372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:12:57.824 [DEBUG] [Thread-23372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:12:57.833 [DEBUG] [Thread-23372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:12:57.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:12:57.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-26T03:12:57.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-26T03:12:57.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:12:57.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:12:57.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:12:57.864 [DEBUG] [Thread-23372] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:13:12.427 [DEBUG] [Thread-23375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:13:27.465 [DEBUG] [Thread-23376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:13:27.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:13:27.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:13:27.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-26T03:13:28.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 13, 5), 2.91, 82.65, 0.0, 20.75, 11.99, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:13:28.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:13:05
2025-12-26T03:13:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:13:28.863 [DEBUG] [Thread-23377] [transport.py] [_log()] starting thread (client mode): 0xbbfce3e0
2025-12-26T03:13:28.863 [DEBUG] [Thread-23377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:13:28.884 [DEBUG] [Thread-23377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:13:28.885 [INFO] [Thread-23377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] client lang: <none>
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] server lang: <none>
2025-12-26T03:13:28.888 [DEBUG] [Thread-23377] [transport.py] [_log()] kex follows: False
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] Compression: none
2025-12-26T03:13:28.889 [DEBUG] [Thread-23377] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:13:28.905 [DEBUG] [Thread-23377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:13:28.906 [DEBUG] [Thread-23377] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:13:28.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:13:28.907 [DEBUG] [Thread-23377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:13:28.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:13:28.909 [DEBUG] [Thread-23377] [transport.py] [_log()] userauth is OK
2025-12-26T03:13:28.909 [DEBUG] [Thread-23377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:13:28.909 [DEBUG] [Thread-23377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:13:28.909 [DEBUG] [Thread-23377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:13:28.909 [DEBUG] [Thread-23377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:13:28.929 [INFO] [Thread-23377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:13:28.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:13:29.578 [DEBUG] [Thread-23377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:13:29.578 [DEBUG] [Thread-23377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:13:29.579 [DEBUG] [Thread-23377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:13:29.619 [DEBUG] [Thread-23377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:13:29.619 [DEBUG] [Thread-23377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:13:29.622 [DEBUG] [Thread-23377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:13:29.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:13:29.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:13:29.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:13:29.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:13:29.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:13:29.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:13:29.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:13:29.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:13:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:13:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.050752 -999.00  +12.00  13.40     85   +9.70 1 1 1 2 1     0    0 2.48 2.04 ZNESW 13.4 13.4 154.8 17.6 12.7 -21.9 12.5 -21.3 12.3 -19.9 12.6 -20.9
2025-12-26T03:13:29.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:13:29.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:13:29.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.050752
2025-12-26T03:13:29.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:13:29.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:13:29.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:13:29.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:13:29.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:13:29.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:13:05', tmtdew=2.91, humidity=82.65, cloud=0.0, wind=20.75, temperature=11.99, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:13:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:09:00')
2025-12-26T03:13:29.646 [DEBUG] [Thread-23377] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:13:29.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-26T03:13:29.740 [DEBUG] [Thread-23380] [transport.py] [_log()] starting thread (client mode): 0xb95b2b90
2025-12-26T03:13:29.740 [DEBUG] [Thread-23380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:13:29.754 [DEBUG] [Thread-23380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:13:29.755 [INFO] [Thread-23380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:13:29.763 [DEBUG] [Thread-23380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:13:29.763 [DEBUG] [Thread-23380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:13:29.763 [DEBUG] [Thread-23380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:13:29.763 [DEBUG] [Thread-23380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:13:29.763 [DEBUG] [Thread-23380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] client lang: <none>
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] server lang: <none>
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] kex follows: False
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] Compression: none
2025-12-26T03:13:29.764 [DEBUG] [Thread-23380] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:13:29.821 [DEBUG] [Thread-23380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:13:29.821 [DEBUG] [Thread-23380] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:13:29.822 [DEBUG] [Thread-23380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:13:29.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:13:29.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:13:29.882 [DEBUG] [Thread-23380] [transport.py] [_log()] userauth is OK
2025-12-26T03:13:29.882 [DEBUG] [Thread-23380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:13:29.883 [DEBUG] [Thread-23380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:13:29.883 [DEBUG] [Thread-23380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:13:29.883 [DEBUG] [Thread-23380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:13:29.902 [INFO] [Thread-23380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:13:29.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-26T03:13:29.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:13:30.718 [DEBUG] [Thread-23380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:13:30.718 [DEBUG] [Thread-23380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:13:30.766 [DEBUG] [Thread-23380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:13:30.766 [DEBUG] [Thread-23380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:13:30.776 [DEBUG] [Thread-23380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:13:30.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:13:30.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-26T03:13:30.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-26T03:13:30.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:13:30.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:13:30.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:13:30.813 [DEBUG] [Thread-23380] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:13:42.502 [DEBUG] [Thread-23382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:13:50.539 [DEBUG] [Thread-23383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:13:57.083 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:13:57.084 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:13:57.563 [DEBUG] [Thread-23384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:00.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:14:00.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:14:00.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-26T03:14:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 13, 37), 2.84, 82.74, 0.0, 16.69, 12.02, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:14:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:13:37
2025-12-26T03:14:01.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:14:01.820 [DEBUG] [Thread-23385] [transport.py] [_log()] starting thread (client mode): 0xb6b14fd0
2025-12-26T03:14:01.820 [DEBUG] [Thread-23385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:14:01.839 [DEBUG] [Thread-23385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:14:01.839 [INFO] [Thread-23385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:14:01.842 [DEBUG] [Thread-23385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:14:01.842 [DEBUG] [Thread-23385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] client lang: <none>
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] server lang: <none>
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] kex follows: False
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] Compression: none
2025-12-26T03:14:01.843 [DEBUG] [Thread-23385] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:14:01.862 [DEBUG] [Thread-23385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:14:01.863 [DEBUG] [Thread-23385] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:14:01.863 [DEBUG] [Thread-23385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:14:01.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:14:01.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:14:01.865 [DEBUG] [Thread-23385] [transport.py] [_log()] userauth is OK
2025-12-26T03:14:01.865 [DEBUG] [Thread-23385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:14:01.865 [DEBUG] [Thread-23385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:14:01.866 [DEBUG] [Thread-23385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:14:01.866 [DEBUG] [Thread-23385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:14:01.902 [INFO] [Thread-23385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:14:01.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:14:02.521 [DEBUG] [Thread-23385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:14:02.522 [DEBUG] [Thread-23385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:14:02.522 [DEBUG] [Thread-23385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:14:02.563 [DEBUG] [Thread-23385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:14:02.563 [DEBUG] [Thread-23385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:14:02.567 [DEBUG] [Thread-23385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:14:02.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:14:02.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:14:02.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:14:02.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:14:02.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:14:02.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:14:02.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:14:02.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:14:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:14:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.051099 -999.00  +12.00  11.43     85   +9.70 1 1 1 2 1     0    0 2.50 0.77 ZNESW 11.4 11.4 156.0 18.7 12.7 -21.8 12.5 -21.4 12.3 -19.8 12.6 -20.7
2025-12-26T03:14:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:14:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:14:02.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.051099
2025-12-26T03:14:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:14:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:14:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:14:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:14:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:14:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:13:37', tmtdew=2.84, humidity=82.74, cloud=0.0, wind=16.69, temperature=12.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:13:34.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:12:00')
2025-12-26T03:14:02.593 [DEBUG] [Thread-23385] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:14:02.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-26T03:14:02.687 [DEBUG] [Thread-23388] [transport.py] [_log()] starting thread (client mode): 0xb95b1ae0
2025-12-26T03:14:02.687 [DEBUG] [Thread-23388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:14:02.706 [DEBUG] [Thread-23388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:14:02.707 [INFO] [Thread-23388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:02.714 [DEBUG] [Thread-23388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] client lang: <none>
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] server lang: <none>
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] kex follows: False
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] Compression: none
2025-12-26T03:14:02.715 [DEBUG] [Thread-23388] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:14:02.770 [DEBUG] [Thread-23388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:14:02.771 [DEBUG] [Thread-23388] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:14:02.772 [DEBUG] [Thread-23388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:14:02.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:14:02.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:14:02.827 [DEBUG] [Thread-23388] [transport.py] [_log()] userauth is OK
2025-12-26T03:14:02.828 [DEBUG] [Thread-23388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:14:02.828 [DEBUG] [Thread-23388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:14:02.828 [DEBUG] [Thread-23388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:14:02.828 [DEBUG] [Thread-23388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:14:02.852 [INFO] [Thread-23388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:14:02.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:14:02.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:14:03.702 [DEBUG] [Thread-23388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:14:03.702 [DEBUG] [Thread-23388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:14:03.750 [DEBUG] [Thread-23388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:14:03.750 [DEBUG] [Thread-23388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:14:03.759 [DEBUG] [Thread-23388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:14:03.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:14:03.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-26T03:14:03.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-26T03:14:03.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:14:03.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:14:03.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:14:03.797 [DEBUG] [Thread-23388] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:14:12.600 [DEBUG] [Thread-23390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:27.650 [DEBUG] [Thread-23391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:33.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:14:33.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:14:33.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-26T03:14:34.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 14, 9), 2.86, 82.67, 0.0, 16.13, 12.04, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:14:34.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:14:09
2025-12-26T03:14:34.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:14:34.756 [DEBUG] [Thread-23392] [transport.py] [_log()] starting thread (client mode): 0xb95f12a0
2025-12-26T03:14:34.757 [DEBUG] [Thread-23392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:14:34.777 [DEBUG] [Thread-23392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:14:34.777 [INFO] [Thread-23392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] client lang: <none>
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] server lang: <none>
2025-12-26T03:14:34.780 [DEBUG] [Thread-23392] [transport.py] [_log()] kex follows: False
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] Compression: none
2025-12-26T03:14:34.781 [DEBUG] [Thread-23392] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:14:34.796 [DEBUG] [Thread-23392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:14:34.797 [DEBUG] [Thread-23392] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:14:34.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:14:34.798 [DEBUG] [Thread-23392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:14:34.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:14:34.800 [DEBUG] [Thread-23392] [transport.py] [_log()] userauth is OK
2025-12-26T03:14:34.800 [DEBUG] [Thread-23392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:14:34.800 [DEBUG] [Thread-23392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:14:34.800 [DEBUG] [Thread-23392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:14:34.800 [DEBUG] [Thread-23392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:14:34.833 [INFO] [Thread-23392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:14:34.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:14:35.415 [DEBUG] [Thread-23392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:14:35.416 [DEBUG] [Thread-23392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:14:35.416 [DEBUG] [Thread-23392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:14:35.457 [DEBUG] [Thread-23392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:14:35.457 [DEBUG] [Thread-23392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:14:35.460 [DEBUG] [Thread-23392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:14:35.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:14:35.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:14:35.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:14:35.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:14:35.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:14:35.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:14:35.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:14:35.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:14:35.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.051446 -999.00  +12.00  10.71     85   +9.70 1 1 1 2 1     0    0 2.38 -0.49 ZNESW 10.7 10.7 162.0 16.7 12.7 -21.9 12.5 -21.3 12.3 -19.7 12.6 -20.9
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.051446
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:14:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:14:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:14:35.485 [DEBUG] [Thread-23392] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:14:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:14:09', tmtdew=2.86, humidity=82.67, cloud=0.0, wind=16.13, temperature=12.04, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:14:04.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:12:00')
2025-12-26T03:14:35.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-26T03:14:35.573 [DEBUG] [Thread-23395] [transport.py] [_log()] starting thread (client mode): 0xb6b752a0
2025-12-26T03:14:35.573 [DEBUG] [Thread-23395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:14:35.590 [DEBUG] [Thread-23395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:14:35.590 [INFO] [Thread-23395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] client lang: <none>
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] server lang: <none>
2025-12-26T03:14:35.598 [DEBUG] [Thread-23395] [transport.py] [_log()] kex follows: False
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] Compression: none
2025-12-26T03:14:35.599 [DEBUG] [Thread-23395] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:14:35.658 [DEBUG] [Thread-23395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:14:35.659 [DEBUG] [Thread-23395] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:14:35.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:14:35.659 [DEBUG] [Thread-23395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:14:35.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:14:35.716 [DEBUG] [Thread-23395] [transport.py] [_log()] userauth is OK
2025-12-26T03:14:35.716 [DEBUG] [Thread-23395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:14:35.716 [DEBUG] [Thread-23395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:14:35.716 [DEBUG] [Thread-23395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:14:35.716 [DEBUG] [Thread-23395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:14:35.735 [INFO] [Thread-23395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:14:35.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-26T03:14:35.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:14:36.532 [DEBUG] [Thread-23395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:14:36.533 [DEBUG] [Thread-23395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:14:36.581 [DEBUG] [Thread-23395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:14:36.581 [DEBUG] [Thread-23395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:14:36.590 [DEBUG] [Thread-23395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:14:36.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:14:36.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-26T03:14:36.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-26T03:14:36.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:14:36.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:14:36.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:14:36.629 [DEBUG] [Thread-23395] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:14:42.687 [DEBUG] [Thread-23397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:50.622 [DEBUG] [Thread-23398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:57.282 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:57.283 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:14:57.723 [DEBUG] [Thread-23399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:06.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:15:06.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:15:06.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-26T03:15:07.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 14, 41), 2.86, 82.64, 0.0, 15.79, 11.96, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:15:07.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:14:41
2025-12-26T03:15:07.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:15:07.630 [DEBUG] [Thread-23400] [transport.py] [_log()] starting thread (client mode): 0xb6b76e60
2025-12-26T03:15:07.630 [DEBUG] [Thread-23400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:15:07.651 [DEBUG] [Thread-23400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:15:07.651 [INFO] [Thread-23400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:15:07.652 [DEBUG] [Thread-23400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] client lang: <none>
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] server lang: <none>
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] kex follows: False
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] Compression: none
2025-12-26T03:15:07.653 [DEBUG] [Thread-23400] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:15:07.661 [DEBUG] [Thread-23400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:15:07.662 [DEBUG] [Thread-23400] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:15:07.662 [DEBUG] [Thread-23400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:15:07.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:15:07.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:15:07.664 [DEBUG] [Thread-23400] [transport.py] [_log()] userauth is OK
2025-12-26T03:15:07.664 [DEBUG] [Thread-23400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:15:07.664 [DEBUG] [Thread-23400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:15:07.664 [DEBUG] [Thread-23400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:15:07.664 [DEBUG] [Thread-23400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:15:07.682 [INFO] [Thread-23400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:15:07.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:15:12.756 [DEBUG] [Thread-23402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:14.238 [DEBUG] [Thread-23400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:15:14.238 [DEBUG] [Thread-23400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:15:14.238 [DEBUG] [Thread-23400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:15:14.279 [DEBUG] [Thread-23400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:15:14.279 [DEBUG] [Thread-23400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:15:14.281 [DEBUG] [Thread-23400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:15:14.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:15:14.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:15:14.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:15:14.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:15:14.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:15:14.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:15:14.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.051446 -999.00  +12.00  10.71     85   +9.70 1 1 1 2 1     0    0 2.38 -0.49 ZNESW 10.7 10.7 162.0 16.7 12.7 -21.9 12.5 -21.3 12.3 -19.7 12.6 -20.9
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.051446
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:15:14.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:14:41', tmtdew=2.86, humidity=82.64, cloud=0.0, wind=15.79, temperature=11.96, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:14:04.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:12:00')
2025-12-26T03:15:14.300 [DEBUG] [Thread-23400] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:15:14.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-26T03:15:14.384 [DEBUG] [Thread-23404] [transport.py] [_log()] starting thread (client mode): 0xb6b757b0
2025-12-26T03:15:14.384 [DEBUG] [Thread-23404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:15:14.400 [DEBUG] [Thread-23404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:15:14.400 [INFO] [Thread-23404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:15:14.407 [DEBUG] [Thread-23404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:15:14.407 [DEBUG] [Thread-23404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:15:14.407 [DEBUG] [Thread-23404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:15:14.407 [DEBUG] [Thread-23404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:14.407 [DEBUG] [Thread-23404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:14.407 [DEBUG] [Thread-23404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] client lang: <none>
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] server lang: <none>
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] kex follows: False
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] Compression: none
2025-12-26T03:15:14.408 [DEBUG] [Thread-23404] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:15:14.465 [DEBUG] [Thread-23404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:15:14.466 [DEBUG] [Thread-23404] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:15:14.466 [DEBUG] [Thread-23404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:15:14.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:15:14.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:15:14.523 [DEBUG] [Thread-23404] [transport.py] [_log()] userauth is OK
2025-12-26T03:15:14.523 [DEBUG] [Thread-23404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:15:14.523 [DEBUG] [Thread-23404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:15:14.523 [DEBUG] [Thread-23404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:15:14.523 [DEBUG] [Thread-23404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:15:14.537 [INFO] [Thread-23404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:15:14.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-26T03:15:14.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:15:15.418 [DEBUG] [Thread-23404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:15:15.418 [DEBUG] [Thread-23404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:15:15.466 [DEBUG] [Thread-23404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:15:15.466 [DEBUG] [Thread-23404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:15:15.474 [DEBUG] [Thread-23404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:15:15.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:15:15.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')
2025-12-26T03:15:15.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-26T03:15:15.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:15:15.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:15:15.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:15:15.506 [DEBUG] [Thread-23404] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:15:27.790 [DEBUG] [Thread-23406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:42.843 [DEBUG] [Thread-23407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:45.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:15:45.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:15:45.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-26T03:15:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 15, 13), 2.86, 82.65, 0.0, 15.3, 11.97, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:15:46.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:15:13
2025-12-26T03:15:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:15:46.573 [DEBUG] [Thread-23408] [transport.py] [_log()] starting thread (client mode): 0xb6b77be0
2025-12-26T03:15:46.573 [DEBUG] [Thread-23408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:15:46.592 [DEBUG] [Thread-23408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:15:46.592 [INFO] [Thread-23408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:15:46.595 [DEBUG] [Thread-23408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:15:46.595 [DEBUG] [Thread-23408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:15:46.595 [DEBUG] [Thread-23408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:15:46.595 [DEBUG] [Thread-23408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:46.595 [DEBUG] [Thread-23408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] client lang: <none>
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] server lang: <none>
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] kex follows: False
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] Compression: none
2025-12-26T03:15:46.596 [DEBUG] [Thread-23408] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:15:46.611 [DEBUG] [Thread-23408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:15:46.611 [DEBUG] [Thread-23408] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:15:46.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:15:46.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:15:46.612 [DEBUG] [Thread-23408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:15:46.612 [DEBUG] [Thread-23408] [transport.py] [_log()] userauth is OK
2025-12-26T03:15:46.612 [DEBUG] [Thread-23408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:15:46.612 [DEBUG] [Thread-23408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:15:46.612 [DEBUG] [Thread-23408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:15:46.612 [DEBUG] [Thread-23408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:15:46.626 [INFO] [Thread-23408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:15:46.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:15:47.276 [DEBUG] [Thread-23408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:15:47.276 [DEBUG] [Thread-23408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:15:47.276 [DEBUG] [Thread-23408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:15:47.317 [DEBUG] [Thread-23408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:15:47.317 [DEBUG] [Thread-23408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:15:47.320 [DEBUG] [Thread-23408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:15:47.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:15:47.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:15:47.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:15:47.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:15:47.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:15:47.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:15:47.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.051794 -999.00  +12.00  12.32     85   +9.70 1 1 1 2 1     0    0 2.40 -1.64 ZNESW 12.3 12.3 156.4 15.9 12.6 -21.8 12.5 -21.3 12.3 -19.7 12.6 -20.8
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.051794
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:15:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:15:13', tmtdew=2.86, humidity=82.65, cloud=0.0, wind=15.3, temperature=11.97, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:14:35.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:12:00')
2025-12-26T03:15:47.338 [DEBUG] [Thread-23408] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:15:47.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-26T03:15:47.419 [DEBUG] [Thread-23411] [transport.py] [_log()] starting thread (client mode): 0xb6b77340
2025-12-26T03:15:47.419 [DEBUG] [Thread-23411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:15:47.434 [DEBUG] [Thread-23411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:15:47.434 [INFO] [Thread-23411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:15:47.442 [DEBUG] [Thread-23411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:15:47.442 [DEBUG] [Thread-23411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:15:47.442 [DEBUG] [Thread-23411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:15:47.442 [DEBUG] [Thread-23411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:47.442 [DEBUG] [Thread-23411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:15:47.442 [DEBUG] [Thread-23411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] client lang: <none>
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] server lang: <none>
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] kex follows: False
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] Compression: none
2025-12-26T03:15:47.443 [DEBUG] [Thread-23411] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:15:47.498 [DEBUG] [Thread-23411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:15:47.498 [DEBUG] [Thread-23411] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:15:47.499 [DEBUG] [Thread-23411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:15:47.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:15:47.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:15:47.555 [DEBUG] [Thread-23411] [transport.py] [_log()] userauth is OK
2025-12-26T03:15:47.555 [DEBUG] [Thread-23411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:15:47.555 [DEBUG] [Thread-23411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:15:47.555 [DEBUG] [Thread-23411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:15:47.555 [DEBUG] [Thread-23411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:15:47.572 [INFO] [Thread-23411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:15:47.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-26T03:15:47.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:15:48.427 [DEBUG] [Thread-23411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:15:48.428 [DEBUG] [Thread-23411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:15:48.475 [DEBUG] [Thread-23411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:15:48.475 [DEBUG] [Thread-23411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:15:48.484 [DEBUG] [Thread-23411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:15:48.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:15:48.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:15:48.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-26T03:15:48.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:15:48.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:15:48.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:15:48.516 [DEBUG] [Thread-23411] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:15:50.695 [DEBUG] [Thread-23413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:57.495 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:57.496 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:15:57.878 [DEBUG] [Thread-23414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:12.939 [DEBUG] [Thread-23415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:18.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:16:18.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:16:18.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-26T03:16:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 15, 45), 2.84, 82.74, 0.0, 15.81, 11.92, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:16:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:15:45
2025-12-26T03:16:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:16:19.570 [DEBUG] [Thread-23416] [transport.py] [_log()] starting thread (client mode): 0xb95f0e80
2025-12-26T03:16:19.570 [DEBUG] [Thread-23416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:16:19.591 [DEBUG] [Thread-23416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:16:19.591 [INFO] [Thread-23416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:16:19.594 [DEBUG] [Thread-23416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] client lang: <none>
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] server lang: <none>
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] kex follows: False
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] Compression: none
2025-12-26T03:16:19.595 [DEBUG] [Thread-23416] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:16:19.611 [DEBUG] [Thread-23416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:16:19.611 [DEBUG] [Thread-23416] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:16:19.611 [DEBUG] [Thread-23416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:16:19.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:16:19.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:16:19.612 [DEBUG] [Thread-23416] [transport.py] [_log()] userauth is OK
2025-12-26T03:16:19.612 [DEBUG] [Thread-23416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:16:19.612 [DEBUG] [Thread-23416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:16:19.612 [DEBUG] [Thread-23416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:16:19.612 [DEBUG] [Thread-23416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:16:19.627 [INFO] [Thread-23416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:16:19.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:16:20.368 [DEBUG] [Thread-23416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:16:20.368 [DEBUG] [Thread-23416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:16:20.368 [DEBUG] [Thread-23416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:16:20.409 [DEBUG] [Thread-23416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:16:20.409 [DEBUG] [Thread-23416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:16:20.413 [DEBUG] [Thread-23416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:16:20.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:16:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:16:20.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:16:20.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:16:20.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:16:20.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:16:20.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:16:20.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:16:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:16:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.052488 -999.00  +12.00  14.15     85   +9.70 1 1 1 2 1     0    0 2.30 -3.59 ZNESW 14.2 14.2 159.6 17.8 12.6 -21.8 12.5 -21.5 12.3 -19.8 12.6 -20.8
2025-12-26T03:16:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:16:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:16:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.052488
2025-12-26T03:16:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:16:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:16:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:16:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:16:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:16:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:15:45', tmtdew=2.84, humidity=82.74, cloud=0.0, wind=15.81, temperature=11.92, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:15:34.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:12:00')
2025-12-26T03:16:20.440 [DEBUG] [Thread-23416] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:16:20.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-26T03:16:20.534 [DEBUG] [Thread-23419] [transport.py] [_log()] starting thread (client mode): 0xb9591d20
2025-12-26T03:16:20.534 [DEBUG] [Thread-23419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:16:20.550 [DEBUG] [Thread-23419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:16:20.550 [INFO] [Thread-23419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:16:20.557 [DEBUG] [Thread-23419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:16:20.557 [DEBUG] [Thread-23419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] client lang: <none>
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] server lang: <none>
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] kex follows: False
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] Compression: none
2025-12-26T03:16:20.558 [DEBUG] [Thread-23419] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:16:20.616 [DEBUG] [Thread-23419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:16:20.616 [DEBUG] [Thread-23419] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:16:20.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:16:20.618 [DEBUG] [Thread-23419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:16:20.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:16:20.672 [DEBUG] [Thread-23419] [transport.py] [_log()] userauth is OK
2025-12-26T03:16:20.672 [DEBUG] [Thread-23419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:16:20.673 [DEBUG] [Thread-23419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:16:20.673 [DEBUG] [Thread-23419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:16:20.673 [DEBUG] [Thread-23419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:16:20.691 [INFO] [Thread-23419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:16:20.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-26T03:16:20.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:16:21.527 [DEBUG] [Thread-23419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:16:21.528 [DEBUG] [Thread-23419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:16:21.576 [DEBUG] [Thread-23419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:16:21.576 [DEBUG] [Thread-23419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:16:21.585 [DEBUG] [Thread-23419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:16:21.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:16:21.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:16:21.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-26T03:16:21.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:16:21.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:16:21.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:16:21.627 [DEBUG] [Thread-23419] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:16:27.967 [DEBUG] [Thread-23421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:43.028 [DEBUG] [Thread-23422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:50.750 [DEBUG] [Thread-23423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:51.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:16:51.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:16:51.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-26T03:16:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 16, 17), 2.82, 82.87, 0.0, 14.93, 11.94, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:16:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:16:17
2025-12-26T03:16:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:16:52.690 [DEBUG] [Thread-23424] [transport.py] [_log()] starting thread (client mode): 0xb95f33d0
2025-12-26T03:16:52.690 [DEBUG] [Thread-23424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:16:52.710 [DEBUG] [Thread-23424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:16:52.710 [INFO] [Thread-23424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:16:52.713 [DEBUG] [Thread-23424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] client lang: <none>
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] server lang: <none>
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] kex follows: False
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] Compression: none
2025-12-26T03:16:52.714 [DEBUG] [Thread-23424] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:16:52.730 [DEBUG] [Thread-23424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:16:52.730 [DEBUG] [Thread-23424] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:16:52.731 [DEBUG] [Thread-23424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:16:52.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:16:52.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:16:52.732 [DEBUG] [Thread-23424] [transport.py] [_log()] userauth is OK
2025-12-26T03:16:52.732 [DEBUG] [Thread-23424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:16:52.732 [DEBUG] [Thread-23424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:16:52.732 [DEBUG] [Thread-23424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:16:52.732 [DEBUG] [Thread-23424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:16:52.750 [INFO] [Thread-23424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:16:52.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:16:53.358 [DEBUG] [Thread-23424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:16:53.358 [DEBUG] [Thread-23424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:16:53.358 [DEBUG] [Thread-23424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:16:53.400 [DEBUG] [Thread-23424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:16:53.400 [DEBUG] [Thread-23424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:16:53.402 [DEBUG] [Thread-23424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:16:53.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:16:53.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:16:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:16:53.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:16:53.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:16:53.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:16:53.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.052835 -999.00  +12.00  12.30     86   +9.70 1 1 1 2 1     0    0 2.34 -4.28 ZNESW 12.3 12.3 170.8 15.9 12.6 -21.8 12.5 -21.3 12.2 -19.7 12.6 -20.8
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.052835
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:16:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:16:17', tmtdew=2.82, humidity=82.87, cloud=0.0, wind=14.93, temperature=11.94, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:16:04.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.09724999999999895, 0.12325000000000053, 0.25924999999999976, 0.13849999999999874, 0.1225000000000005, 0.1772500000000008, 0.17099999999999937, 0.22325000000000017, 0.1875, 0.16049999999999898, 0.13625000000000043, 0.20399999999999885, 0.18599999999999994, 0.18924999999999947, 0.2619999999999987, 0.2754999999999992, 0.18125000000000036, 0.22749999999999915, 0.17199999999999882, 0.3042499999999997, 0.22499999999999787, 0.212749999999998, 0.2532500000000013, 0.2417499999999997, 0.18299999999999983, 0.21499999999999986, 0.2967499999999994, 0.2965, 0.3960000000000008, 0.3280000000000012, 0.29600000000000115, 0.39500000000000046, 0.3047499999999994], zp_timestamp='2025-12-26T01:12:00')
2025-12-26T03:16:53.422 [DEBUG] [Thread-23424] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:16:53.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-26T03:16:53.505 [DEBUG] [Thread-23427] [transport.py] [_log()] starting thread (client mode): 0xb95f1d50
2025-12-26T03:16:53.505 [DEBUG] [Thread-23427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:16:53.519 [DEBUG] [Thread-23427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:16:53.520 [INFO] [Thread-23427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] client lang: <none>
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] server lang: <none>
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] kex follows: False
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:16:53.527 [DEBUG] [Thread-23427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:16:53.528 [DEBUG] [Thread-23427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:16:53.528 [DEBUG] [Thread-23427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:16:53.528 [DEBUG] [Thread-23427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:16:53.528 [DEBUG] [Thread-23427] [transport.py] [_log()] Compression: none
2025-12-26T03:16:53.528 [DEBUG] [Thread-23427] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:16:53.582 [DEBUG] [Thread-23427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:16:53.582 [DEBUG] [Thread-23427] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:16:53.582 [DEBUG] [Thread-23427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:16:53.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:16:53.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:16:53.640 [DEBUG] [Thread-23427] [transport.py] [_log()] userauth is OK
2025-12-26T03:16:53.640 [DEBUG] [Thread-23427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:16:53.640 [DEBUG] [Thread-23427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:16:53.640 [DEBUG] [Thread-23427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:16:53.640 [DEBUG] [Thread-23427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:16:53.654 [INFO] [Thread-23427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:16:53.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-26T03:16:53.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:16:54.467 [DEBUG] [Thread-23427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:16:54.467 [DEBUG] [Thread-23427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:16:54.514 [DEBUG] [Thread-23427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:16:54.514 [DEBUG] [Thread-23427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:16:54.522 [DEBUG] [Thread-23427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:16:54.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:16:54.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-26T03:16:54.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:16:54.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:16:54.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:16:54.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:16:54.554 [DEBUG] [Thread-23427] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:16:57.696 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:57.697 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:16:58.061 [DEBUG] [Thread-23429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:01.890 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:13.112 [DEBUG] [Thread-23430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:24.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:17:24.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:17:24.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-26T03:17:25.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 17, 21), 2.77, 83.37, 0.0, 15.4, 11.82, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:17:25.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:17:21
2025-12-26T03:17:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:17:25.557 [DEBUG] [Thread-23431] [transport.py] [_log()] starting thread (client mode): 0xb6b76ad0
2025-12-26T03:17:25.557 [DEBUG] [Thread-23431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:17:25.577 [DEBUG] [Thread-23431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:17:25.577 [INFO] [Thread-23431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:17:25.580 [DEBUG] [Thread-23431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] client lang: <none>
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] server lang: <none>
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] kex follows: False
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:17:25.581 [DEBUG] [Thread-23431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:17:25.582 [DEBUG] [Thread-23431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:17:25.582 [DEBUG] [Thread-23431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:17:25.582 [DEBUG] [Thread-23431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:17:25.582 [DEBUG] [Thread-23431] [transport.py] [_log()] Compression: none
2025-12-26T03:17:25.582 [DEBUG] [Thread-23431] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:17:25.599 [DEBUG] [Thread-23431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:17:25.600 [DEBUG] [Thread-23431] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:17:25.600 [DEBUG] [Thread-23431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:17:25.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:17:25.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:17:25.602 [DEBUG] [Thread-23431] [transport.py] [_log()] userauth is OK
2025-12-26T03:17:25.602 [DEBUG] [Thread-23431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:17:25.602 [DEBUG] [Thread-23431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:17:25.603 [DEBUG] [Thread-23431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:17:25.603 [DEBUG] [Thread-23431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:17:25.620 [INFO] [Thread-23431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:17:25.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:17:26.358 [DEBUG] [Thread-23431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:17:26.358 [DEBUG] [Thread-23431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:17:26.358 [DEBUG] [Thread-23431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:17:26.399 [DEBUG] [Thread-23431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:17:26.399 [DEBUG] [Thread-23431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:17:26.401 [DEBUG] [Thread-23431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:17:26.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:17:26.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:17:26.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:17:26.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:17:26.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:17:26.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:17:26.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:17:26.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:17:26.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:17:26.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.053182 -999.00  +12.00  13.23     86   +9.70 1 1 1 2 1     0    0 2.28 -5.26 ZNESW 13.2 13.2 162.6 16.6 12.6 -21.8 12.5 -21.4 12.3 -19.8 12.6 -20.9
2025-12-26T03:17:26.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:17:26.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:17:26.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.053182
2025-12-26T03:17:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:17:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:17:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:17:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:17:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:17:26.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:17:21', tmtdew=2.77, humidity=83.37, cloud=0.0, wind=15.4, temperature=11.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:16:34.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:15:00')
2025-12-26T03:17:26.425 [DEBUG] [Thread-23431] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:17:26.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:17:26.522 [DEBUG] [Thread-23434] [transport.py] [_log()] starting thread (client mode): 0xb6b76e00
2025-12-26T03:17:26.522 [DEBUG] [Thread-23434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:17:26.537 [DEBUG] [Thread-23434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:17:26.537 [INFO] [Thread-23434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:17:26.544 [DEBUG] [Thread-23434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:17:26.544 [DEBUG] [Thread-23434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] client lang: <none>
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] server lang: <none>
2025-12-26T03:17:26.545 [DEBUG] [Thread-23434] [transport.py] [_log()] kex follows: False
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] Compression: none
2025-12-26T03:17:26.546 [DEBUG] [Thread-23434] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:17:26.603 [DEBUG] [Thread-23434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:17:26.603 [DEBUG] [Thread-23434] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:17:26.603 [DEBUG] [Thread-23434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:17:26.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:17:26.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:17:26.660 [DEBUG] [Thread-23434] [transport.py] [_log()] userauth is OK
2025-12-26T03:17:26.660 [DEBUG] [Thread-23434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:17:26.660 [DEBUG] [Thread-23434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:17:26.660 [DEBUG] [Thread-23434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:17:26.660 [DEBUG] [Thread-23434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:17:26.679 [INFO] [Thread-23434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:17:26.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:17:26.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:17:27.495 [DEBUG] [Thread-23434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:17:27.495 [DEBUG] [Thread-23434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:17:27.542 [DEBUG] [Thread-23434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:17:27.543 [DEBUG] [Thread-23434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:17:27.551 [DEBUG] [Thread-23434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:17:27.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:17:27.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:17:27.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:17:27.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:17:27.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:17:27.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:17:27.586 [DEBUG] [Thread-23434] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:17:28.144 [DEBUG] [Thread-23436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:43.193 [DEBUG] [Thread-23437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:50.830 [DEBUG] [Thread-23438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:57.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:17:57.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:17:57.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-26T03:17:57.897 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:57.898 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:58.229 [DEBUG] [Thread-23439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:17:58.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 17, 53), 2.75, 83.45, 0.0, 15.47, 11.84, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:17:58.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:17:53
2025-12-26T03:17:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:17:58.583 [DEBUG] [Thread-23440] [transport.py] [_log()] starting thread (client mode): 0xb6b774f0
2025-12-26T03:17:58.583 [DEBUG] [Thread-23440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:17:58.604 [DEBUG] [Thread-23440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:17:58.605 [INFO] [Thread-23440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:17:58.607 [DEBUG] [Thread-23440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] client lang: <none>
2025-12-26T03:17:58.608 [DEBUG] [Thread-23440] [transport.py] [_log()] server lang: <none>
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] kex follows: False
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] Compression: none
2025-12-26T03:17:58.609 [DEBUG] [Thread-23440] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:17:58.627 [DEBUG] [Thread-23440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:17:58.628 [DEBUG] [Thread-23440] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:17:58.628 [DEBUG] [Thread-23440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:17:58.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:17:58.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:17:58.630 [DEBUG] [Thread-23440] [transport.py] [_log()] userauth is OK
2025-12-26T03:17:58.630 [DEBUG] [Thread-23440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:17:58.630 [DEBUG] [Thread-23440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:17:58.631 [DEBUG] [Thread-23440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:17:58.631 [DEBUG] [Thread-23440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:17:58.652 [INFO] [Thread-23440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:17:58.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:17:59.306 [DEBUG] [Thread-23440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:17:59.306 [DEBUG] [Thread-23440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:17:59.307 [DEBUG] [Thread-23440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:17:59.347 [DEBUG] [Thread-23440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:17:59.347 [DEBUG] [Thread-23440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:17:59.351 [DEBUG] [Thread-23440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:17:59.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:17:59.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:17:59.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:17:59.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:17:59.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:17:59.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:17:59.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:17:59.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:17:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:17:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.053530 -999.00  +11.90  11.33     86   +9.70 1 1 1 2 1     0    0 2.26 -6.98 ZNESW 11.3 11.3 166.8 17.0 12.6 -21.7 12.5 -21.3 12.3 -19.6 12.5 -20.6
2025-12-26T03:17:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:17:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:17:59.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.053530
2025-12-26T03:17:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:17:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:17:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:17:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:17:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:17:59.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:17:53', tmtdew=2.75, humidity=83.45, cloud=0.0, wind=15.47, temperature=11.84, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:17:04.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:15:00')
2025-12-26T03:17:59.381 [DEBUG] [Thread-23440] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:17:59.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:17:59.476 [DEBUG] [Thread-23443] [transport.py] [_log()] starting thread (client mode): 0xb95f38b0
2025-12-26T03:17:59.476 [DEBUG] [Thread-23443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:17:59.492 [DEBUG] [Thread-23443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:17:59.492 [INFO] [Thread-23443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:17:59.500 [DEBUG] [Thread-23443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:17:59.500 [DEBUG] [Thread-23443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:17:59.500 [DEBUG] [Thread-23443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:17:59.500 [DEBUG] [Thread-23443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] client lang: <none>
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] server lang: <none>
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] kex follows: False
2025-12-26T03:17:59.501 [DEBUG] [Thread-23443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:17:59.502 [DEBUG] [Thread-23443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:17:59.502 [DEBUG] [Thread-23443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:17:59.502 [DEBUG] [Thread-23443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:17:59.502 [DEBUG] [Thread-23443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:17:59.502 [DEBUG] [Thread-23443] [transport.py] [_log()] Compression: none
2025-12-26T03:17:59.502 [DEBUG] [Thread-23443] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:17:59.565 [DEBUG] [Thread-23443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:17:59.565 [DEBUG] [Thread-23443] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:17:59.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:17:59.567 [DEBUG] [Thread-23443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:17:59.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:17:59.620 [DEBUG] [Thread-23443] [transport.py] [_log()] userauth is OK
2025-12-26T03:17:59.621 [DEBUG] [Thread-23443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:17:59.621 [DEBUG] [Thread-23443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:17:59.621 [DEBUG] [Thread-23443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:17:59.621 [DEBUG] [Thread-23443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:17:59.640 [INFO] [Thread-23443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:17:59.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-26T03:17:59.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:18:00.471 [DEBUG] [Thread-23443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:18:00.471 [DEBUG] [Thread-23443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:18:00.519 [DEBUG] [Thread-23443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:18:00.519 [DEBUG] [Thread-23443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:18:00.528 [DEBUG] [Thread-23443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:18:00.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:18:00.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-26T03:18:00.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-26T03:18:00.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:18:00.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:18:00.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:18:00.563 [DEBUG] [Thread-23443] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:18:13.258 [DEBUG] [Thread-23445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:18:28.302 [DEBUG] [Thread-23446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:18:30.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:18:30.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:18:30.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:18:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 18, 25), 2.75, 83.49, 0.0, 15.83, 11.82, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:18:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:18:25
2025-12-26T03:18:31.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:18:31.534 [DEBUG] [Thread-23447] [transport.py] [_log()] starting thread (client mode): 0xb9590100
2025-12-26T03:18:31.535 [DEBUG] [Thread-23447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:18:31.555 [DEBUG] [Thread-23447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:18:31.555 [INFO] [Thread-23447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:18:31.557 [DEBUG] [Thread-23447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] client lang: <none>
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] server lang: <none>
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] kex follows: False
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] Compression: none
2025-12-26T03:18:31.558 [DEBUG] [Thread-23447] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:18:31.576 [DEBUG] [Thread-23447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:18:31.577 [DEBUG] [Thread-23447] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:18:31.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:18:31.578 [DEBUG] [Thread-23447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:18:31.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:18:31.581 [DEBUG] [Thread-23447] [transport.py] [_log()] userauth is OK
2025-12-26T03:18:31.581 [DEBUG] [Thread-23447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:18:31.581 [DEBUG] [Thread-23447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:18:31.581 [DEBUG] [Thread-23447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:18:31.581 [DEBUG] [Thread-23447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:18:31.604 [INFO] [Thread-23447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:18:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:18:32.325 [DEBUG] [Thread-23447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:18:32.325 [DEBUG] [Thread-23447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:18:32.326 [DEBUG] [Thread-23447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:18:32.366 [DEBUG] [Thread-23447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:18:32.366 [DEBUG] [Thread-23447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:18:32.370 [DEBUG] [Thread-23447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:18:32.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:18:32.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:18:32.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:18:32.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:18:32.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:18:32.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:18:32.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:18:32.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:18:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:18:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.054224 -999.00  +11.90  12.95     86   +9.60 1 1 1 2 1     0    0 2.18 -8.79 ZNESW 12.9 12.9 163.4 15.4 12.6 -21.8 12.4 -21.4 12.2 -19.7 12.5 -20.7
2025-12-26T03:18:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:18:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:18:32.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.054224
2025-12-26T03:18:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:18:32.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:18:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:18:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:18:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:18:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:18:25', tmtdew=2.75, humidity=83.49, cloud=0.0, wind=15.83, temperature=11.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:18:04.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:15:00')
2025-12-26T03:18:32.396 [DEBUG] [Thread-23447] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:18:32.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:18:32.490 [DEBUG] [Thread-23450] [transport.py] [_log()] starting thread (client mode): 0xb95f3580
2025-12-26T03:18:32.490 [DEBUG] [Thread-23450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:18:32.505 [DEBUG] [Thread-23450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:18:32.506 [INFO] [Thread-23450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:18:32.513 [DEBUG] [Thread-23450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:18:32.513 [DEBUG] [Thread-23450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:18:32.513 [DEBUG] [Thread-23450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] client lang: <none>
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] server lang: <none>
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] kex follows: False
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] Compression: none
2025-12-26T03:18:32.514 [DEBUG] [Thread-23450] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:18:32.572 [DEBUG] [Thread-23450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:18:32.573 [DEBUG] [Thread-23450] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:18:32.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:18:32.574 [DEBUG] [Thread-23450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:18:32.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:18:32.628 [DEBUG] [Thread-23450] [transport.py] [_log()] userauth is OK
2025-12-26T03:18:32.629 [DEBUG] [Thread-23450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:18:32.629 [DEBUG] [Thread-23450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:18:32.629 [DEBUG] [Thread-23450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:18:32.629 [DEBUG] [Thread-23450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:18:32.647 [INFO] [Thread-23450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:18:32.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-26T03:18:32.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:18:33.435 [DEBUG] [Thread-23450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:18:33.436 [DEBUG] [Thread-23450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:18:33.484 [DEBUG] [Thread-23450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:18:33.484 [DEBUG] [Thread-23450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:18:33.493 [DEBUG] [Thread-23450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:18:33.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:18:33.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-26T03:18:33.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-26T03:18:33.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:18:33.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:18:33.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:18:33.530 [DEBUG] [Thread-23450] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:18:43.338 [DEBUG] [Thread-23452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:18:50.884 [DEBUG] [Thread-23453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:18:58.101 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:18:58.102 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:18:58.388 [DEBUG] [Thread-23454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:19:03.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:19:03.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-26T03:19:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 18, 57), 2.67, 83.63, 0.0, 16.85, 11.79, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:19:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:18:57
2025-12-26T03:19:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:19:04.508 [DEBUG] [Thread-23455] [transport.py] [_log()] starting thread (client mode): 0xb9546260
2025-12-26T03:19:04.509 [DEBUG] [Thread-23455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:19:04.528 [DEBUG] [Thread-23455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:19:04.529 [INFO] [Thread-23455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:19:04.532 [DEBUG] [Thread-23455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:19:04.532 [DEBUG] [Thread-23455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:19:04.532 [DEBUG] [Thread-23455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:19:04.532 [DEBUG] [Thread-23455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:04.532 [DEBUG] [Thread-23455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] client lang: <none>
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] server lang: <none>
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] kex follows: False
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:19:04.533 [DEBUG] [Thread-23455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:19:04.534 [DEBUG] [Thread-23455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:19:04.534 [DEBUG] [Thread-23455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:19:04.534 [DEBUG] [Thread-23455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:19:04.534 [DEBUG] [Thread-23455] [transport.py] [_log()] Compression: none
2025-12-26T03:19:04.534 [DEBUG] [Thread-23455] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:19:04.552 [DEBUG] [Thread-23455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:19:04.553 [DEBUG] [Thread-23455] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:19:04.553 [DEBUG] [Thread-23455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:19:04.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:19:04.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:19:04.555 [DEBUG] [Thread-23455] [transport.py] [_log()] userauth is OK
2025-12-26T03:19:04.556 [DEBUG] [Thread-23455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:19:04.556 [DEBUG] [Thread-23455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:19:04.556 [DEBUG] [Thread-23455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:19:04.556 [DEBUG] [Thread-23455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:19:04.592 [INFO] [Thread-23455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:19:04.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:19:05.234 [DEBUG] [Thread-23455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:19:05.235 [DEBUG] [Thread-23455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:19:05.235 [DEBUG] [Thread-23455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:19:05.276 [DEBUG] [Thread-23455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:19:05.276 [DEBUG] [Thread-23455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:19:05.280 [DEBUG] [Thread-23455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:19:05.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:19:05.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:19:05.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:19:05.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:19:05.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:19:05.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:19:05.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:19:05.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:19:05.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:19:05.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.054571 -999.00  +11.90  16.40     86   +9.70 1 1 1 2 1     0    0 2.20 -9.63 ZNESW 16.4 16.4 154.2 18.4 12.6 -21.6 12.4 -21.3 12.2 -19.7 12.5 -20.7
2025-12-26T03:19:05.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:19:05.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:19:05.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.054571
2025-12-26T03:19:05.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:19:05.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:19:05.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:19:05.306 [DEBUG] [Thread-23455] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:19:05.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:19:05.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:19:05.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:18:57', tmtdew=2.67, humidity=83.63, cloud=0.0, wind=16.85, temperature=11.79, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:18:34.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:15:00')
2025-12-26T03:19:05.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-26T03:19:05.400 [DEBUG] [Thread-23458] [transport.py] [_log()] starting thread (client mode): 0xb95b2c20
2025-12-26T03:19:05.400 [DEBUG] [Thread-23458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:19:05.414 [DEBUG] [Thread-23458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:19:05.414 [INFO] [Thread-23458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:19:05.421 [DEBUG] [Thread-23458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] client lang: <none>
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] server lang: <none>
2025-12-26T03:19:05.422 [DEBUG] [Thread-23458] [transport.py] [_log()] kex follows: False
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] Compression: none
2025-12-26T03:19:05.423 [DEBUG] [Thread-23458] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:19:05.479 [DEBUG] [Thread-23458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:19:05.479 [DEBUG] [Thread-23458] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:19:05.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:19:05.479 [DEBUG] [Thread-23458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:19:05.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:19:05.536 [DEBUG] [Thread-23458] [transport.py] [_log()] userauth is OK
2025-12-26T03:19:05.536 [DEBUG] [Thread-23458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:19:05.536 [DEBUG] [Thread-23458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:19:05.536 [DEBUG] [Thread-23458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:19:05.536 [DEBUG] [Thread-23458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:19:05.558 [INFO] [Thread-23458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:19:05.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-26T03:19:05.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:19:06.357 [DEBUG] [Thread-23458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:19:06.357 [DEBUG] [Thread-23458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:19:06.406 [DEBUG] [Thread-23458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:19:06.406 [DEBUG] [Thread-23458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:19:06.418 [DEBUG] [Thread-23458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:19:06.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:19:06.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-26T03:19:06.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:19:06.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:19:06.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:19:06.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:19:06.458 [DEBUG] [Thread-23458] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:19:13.422 [DEBUG] [Thread-23460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:28.472 [DEBUG] [Thread-23461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:19:36.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:19:36.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-26T03:19:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 19, 29), 2.65, 83.77, 0.0, 17.19, 11.82, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:19:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:19:29
2025-12-26T03:19:37.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:19:37.460 [DEBUG] [Thread-23462] [transport.py] [_log()] starting thread (client mode): 0xb95f0d90
2025-12-26T03:19:37.460 [DEBUG] [Thread-23462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:19:37.479 [DEBUG] [Thread-23462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:19:37.479 [INFO] [Thread-23462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:19:37.482 [DEBUG] [Thread-23462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:19:37.482 [DEBUG] [Thread-23462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] client lang: <none>
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] server lang: <none>
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] kex follows: False
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:19:37.483 [DEBUG] [Thread-23462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:19:37.484 [DEBUG] [Thread-23462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:19:37.484 [DEBUG] [Thread-23462] [transport.py] [_log()] Compression: none
2025-12-26T03:19:37.484 [DEBUG] [Thread-23462] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:19:37.501 [DEBUG] [Thread-23462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:19:37.502 [DEBUG] [Thread-23462] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:19:37.502 [DEBUG] [Thread-23462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:19:37.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:19:37.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:19:37.504 [DEBUG] [Thread-23462] [transport.py] [_log()] userauth is OK
2025-12-26T03:19:37.504 [DEBUG] [Thread-23462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:19:37.505 [DEBUG] [Thread-23462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:19:37.505 [DEBUG] [Thread-23462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:19:37.505 [DEBUG] [Thread-23462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:19:37.547 [INFO] [Thread-23462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:19:37.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:19:38.224 [DEBUG] [Thread-23462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:19:38.224 [DEBUG] [Thread-23462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:19:38.224 [DEBUG] [Thread-23462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:19:38.265 [DEBUG] [Thread-23462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:19:38.265 [DEBUG] [Thread-23462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:19:38.268 [DEBUG] [Thread-23462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:19:38.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:19:38.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:19:38.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:19:38.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:19:38.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:19:38.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:19:38.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:19:38.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:19:38.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:19:38.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.054919 -999.00  +11.90   9.56     86   +9.70 1 1 1 2 1     0    0 2.10 -10.46 ZNESW 9.6 9.6 163.6 15.7 12.6 -21.6 12.4 -21.2 12.2 -19.5 12.5 -20.5
2025-12-26T03:19:38.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:19:38.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:19:38.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.054919
2025-12-26T03:19:38.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:19:38.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:19:38.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:19:38.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:19:38.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:19:38.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:19:29', tmtdew=2.65, humidity=83.77, cloud=0.0, wind=17.19, temperature=11.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:19:05.002', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:15:00')
2025-12-26T03:19:38.291 [DEBUG] [Thread-23462] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:19:38.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-26T03:19:38.391 [DEBUG] [Thread-23465] [transport.py] [_log()] starting thread (client mode): 0xb95f0c70
2025-12-26T03:19:38.391 [DEBUG] [Thread-23465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:19:38.405 [DEBUG] [Thread-23465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:19:38.405 [INFO] [Thread-23465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:19:38.412 [DEBUG] [Thread-23465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:19:38.412 [DEBUG] [Thread-23465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:19:38.412 [DEBUG] [Thread-23465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:19:38.412 [DEBUG] [Thread-23465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:38.412 [DEBUG] [Thread-23465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] client lang: <none>
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] server lang: <none>
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] kex follows: False
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] Compression: none
2025-12-26T03:19:38.413 [DEBUG] [Thread-23465] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:19:38.472 [DEBUG] [Thread-23465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:19:38.472 [DEBUG] [Thread-23465] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:19:38.473 [DEBUG] [Thread-23465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:19:38.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:19:38.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:19:38.533 [DEBUG] [Thread-23465] [transport.py] [_log()] userauth is OK
2025-12-26T03:19:38.533 [DEBUG] [Thread-23465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:19:38.533 [DEBUG] [Thread-23465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:19:38.533 [DEBUG] [Thread-23465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:19:38.533 [DEBUG] [Thread-23465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:19:38.554 [INFO] [Thread-23465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:19:38.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-26T03:19:38.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:19:39.351 [DEBUG] [Thread-23465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:19:39.351 [DEBUG] [Thread-23465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:19:39.399 [DEBUG] [Thread-23465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:19:39.399 [DEBUG] [Thread-23465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:19:39.409 [DEBUG] [Thread-23465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:19:39.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:19:39.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')
2025-12-26T03:19:39.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:19:39.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:19:39.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:19:39.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:19:39.449 [DEBUG] [Thread-23465] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:19:43.500 [DEBUG] [Thread-23467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:50.970 [DEBUG] [Thread-23468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:58.302 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:58.303 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:19:58.562 [DEBUG] [Thread-23469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:09.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:20:09.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:20:09.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-26T03:20:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 20, 1), 2.63, 83.87, 0.0, 16.39, 11.84, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:20:10.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:20:01
2025-12-26T03:20:10.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:20:10.465 [DEBUG] [Thread-23470] [transport.py] [_log()] starting thread (client mode): 0xb95f31c0
2025-12-26T03:20:10.465 [DEBUG] [Thread-23470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:20:10.480 [DEBUG] [Thread-23470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:20:10.480 [INFO] [Thread-23470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:20:10.483 [DEBUG] [Thread-23470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] client lang: <none>
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] server lang: <none>
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] kex follows: False
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] Compression: none
2025-12-26T03:20:10.484 [DEBUG] [Thread-23470] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:20:10.503 [DEBUG] [Thread-23470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:20:10.503 [DEBUG] [Thread-23470] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:20:10.503 [DEBUG] [Thread-23470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:20:10.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:20:10.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:20:10.504 [DEBUG] [Thread-23470] [transport.py] [_log()] userauth is OK
2025-12-26T03:20:10.504 [DEBUG] [Thread-23470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:20:10.504 [DEBUG] [Thread-23470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:20:10.504 [DEBUG] [Thread-23470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:20:10.504 [DEBUG] [Thread-23470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:20:10.521 [INFO] [Thread-23470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:20:10.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:20:11.636 [DEBUG] [Thread-23470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:20:11.636 [DEBUG] [Thread-23470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:20:11.637 [DEBUG] [Thread-23470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:20:11.677 [DEBUG] [Thread-23470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:20:11.677 [DEBUG] [Thread-23470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:20:11.680 [DEBUG] [Thread-23470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:20:11.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:20:11.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:20:11.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:20:11.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:20:11.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:20:11.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:20:11.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:20:11.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:20:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:20:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.055266 -999.00  +11.90  10.30     86   +9.70 1 1 1 2 1     0    0 2.06 -11.47 ZNESW 10.3 10.3 153.4 17.7 12.5 -21.5 12.4 -21.3 12.1 -19.6 12.5 -20.6
2025-12-26T03:20:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:20:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:20:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.055266
2025-12-26T03:20:11.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:20:11.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:20:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:20:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:20:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:20:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:20:01', tmtdew=2.63, humidity=83.87, cloud=0.0, wind=16.39, temperature=11.84, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:19:34.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:19:00')
2025-12-26T03:20:11.712 [DEBUG] [Thread-23470] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:20:11.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:20:11.809 [DEBUG] [Thread-23473] [transport.py] [_log()] starting thread (client mode): 0xbbfcd540
2025-12-26T03:20:11.809 [DEBUG] [Thread-23473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:20:11.823 [DEBUG] [Thread-23473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:20:11.823 [INFO] [Thread-23473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:20:11.831 [DEBUG] [Thread-23473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:20:11.831 [DEBUG] [Thread-23473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:20:11.831 [DEBUG] [Thread-23473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] client lang: <none>
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] server lang: <none>
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] kex follows: False
2025-12-26T03:20:11.832 [DEBUG] [Thread-23473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:20:11.833 [DEBUG] [Thread-23473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:20:11.833 [DEBUG] [Thread-23473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:20:11.833 [DEBUG] [Thread-23473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:20:11.833 [DEBUG] [Thread-23473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:20:11.833 [DEBUG] [Thread-23473] [transport.py] [_log()] Compression: none
2025-12-26T03:20:11.833 [DEBUG] [Thread-23473] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:20:11.889 [DEBUG] [Thread-23473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:20:11.889 [DEBUG] [Thread-23473] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:20:11.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:20:11.890 [DEBUG] [Thread-23473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:20:11.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:20:11.945 [DEBUG] [Thread-23473] [transport.py] [_log()] userauth is OK
2025-12-26T03:20:11.946 [DEBUG] [Thread-23473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:20:11.946 [DEBUG] [Thread-23473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:20:11.946 [DEBUG] [Thread-23473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:20:11.946 [DEBUG] [Thread-23473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:20:11.966 [INFO] [Thread-23473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:20:11.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-26T03:20:11.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:20:12.830 [DEBUG] [Thread-23473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:20:12.830 [DEBUG] [Thread-23473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:20:12.878 [DEBUG] [Thread-23473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:20:12.878 [DEBUG] [Thread-23473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:20:12.888 [DEBUG] [Thread-23473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:20:12.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:20:12.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-26T03:20:12.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-26T03:20:12.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:20:12.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:20:12.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:20:12.924 [DEBUG] [Thread-23473] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:20:13.593 [DEBUG] [Thread-23475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:28.648 [DEBUG] [Thread-23476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:42.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:20:42.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:20: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-26T03:20:43.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 20, 34), 2.55, 84.55, 0.0, 19.25, 11.81, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:20:43.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:20:34
2025-12-26T03:20:43.685 [DEBUG] [Thread-23477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:43.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:20:43.898 [DEBUG] [Thread-23478] [transport.py] [_log()] starting thread (client mode): 0xb6b636a0
2025-12-26T03:20:43.898 [DEBUG] [Thread-23478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:20:43.918 [DEBUG] [Thread-23478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:20:43.918 [INFO] [Thread-23478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] client lang: <none>
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] server lang: <none>
2025-12-26T03:20:43.921 [DEBUG] [Thread-23478] [transport.py] [_log()] kex follows: False
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] Compression: none
2025-12-26T03:20:43.922 [DEBUG] [Thread-23478] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:20:43.937 [DEBUG] [Thread-23478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:20:43.937 [DEBUG] [Thread-23478] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:20:43.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:20:43.938 [DEBUG] [Thread-23478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:20:43.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:20:43.938 [DEBUG] [Thread-23478] [transport.py] [_log()] userauth is OK
2025-12-26T03:20:43.938 [DEBUG] [Thread-23478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:20:43.938 [DEBUG] [Thread-23478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:20:43.938 [DEBUG] [Thread-23478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:20:43.938 [DEBUG] [Thread-23478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:20:43.947 [INFO] [Thread-23478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:20:43.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:20:44.578 [DEBUG] [Thread-23478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:20:44.578 [DEBUG] [Thread-23478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:20:44.578 [DEBUG] [Thread-23478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:20:44.619 [DEBUG] [Thread-23478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:20:44.619 [DEBUG] [Thread-23478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:20:44.621 [DEBUG] [Thread-23478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:20:44.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:20:44.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:20:44.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:20:44.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:20:44.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:20:44.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:20:44.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.055613 -999.00  +11.80  11.26     86   +9.70 1 1 1 2 1     0    0 2.03 -12.64 ZNESW 11.3 11.3 160.1 15.3 12.6 -21.6 12.4 -21.3 12.2 -19.7 12.5 -20.5
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.055613
2025-12-26T03:20:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:20:44.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:20:44.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:20:44.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:20:44.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:20:44.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:20:34', tmtdew=2.55, humidity=84.55, cloud=0.0, wind=19.25, temperature=11.81, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:20:04.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:19:00')
2025-12-26T03:20:44.638 [DEBUG] [Thread-23478] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:20:44.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-26T03:20:44.723 [DEBUG] [Thread-23481] [transport.py] [_log()] starting thread (client mode): 0xb6b75c60
2025-12-26T03:20:44.723 [DEBUG] [Thread-23481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:20:44.738 [DEBUG] [Thread-23481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:20:44.738 [INFO] [Thread-23481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:20:44.745 [DEBUG] [Thread-23481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] client lang: <none>
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] server lang: <none>
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] kex follows: False
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] Compression: none
2025-12-26T03:20:44.746 [DEBUG] [Thread-23481] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:20:44.803 [DEBUG] [Thread-23481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:20:44.803 [DEBUG] [Thread-23481] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:20:44.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:20:44.803 [DEBUG] [Thread-23481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:20:44.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:20:44.860 [DEBUG] [Thread-23481] [transport.py] [_log()] userauth is OK
2025-12-26T03:20:44.860 [DEBUG] [Thread-23481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:20:44.860 [DEBUG] [Thread-23481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:20:44.860 [DEBUG] [Thread-23481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:20:44.860 [DEBUG] [Thread-23481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:20:44.876 [INFO] [Thread-23481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:20:44.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-26T03:20:44.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:20:45.686 [DEBUG] [Thread-23481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:20:45.686 [DEBUG] [Thread-23481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:20:45.733 [DEBUG] [Thread-23481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:20:45.733 [DEBUG] [Thread-23481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:20:45.742 [DEBUG] [Thread-23481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:20:45.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:20:45.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-26T03:20:45.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-26T03:20:45.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:20:45.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:20:45.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:20:45.773 [DEBUG] [Thread-23481] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:20:51.047 [DEBUG] [Thread-23483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:58.504 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:58.506 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:20:58.719 [DEBUG] [Thread-23484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:13.782 [DEBUG] [Thread-23485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:15.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:21:15.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:21:15.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-26T03:21:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 21, 7), 2.53, 84.63, 0.0, 17.98, 11.82, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:21:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:21:07
2025-12-26T03:21:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:21:16.765 [DEBUG] [Thread-23486] [transport.py] [_log()] starting thread (client mode): 0xb6b75de0
2025-12-26T03:21:16.765 [DEBUG] [Thread-23486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:21:16.783 [DEBUG] [Thread-23486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:21:16.783 [INFO] [Thread-23486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] client lang: <none>
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] server lang: <none>
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] kex follows: False
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:21:16.787 [DEBUG] [Thread-23486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:21:16.788 [DEBUG] [Thread-23486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:21:16.788 [DEBUG] [Thread-23486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:21:16.788 [DEBUG] [Thread-23486] [transport.py] [_log()] Compression: none
2025-12-26T03:21:16.788 [DEBUG] [Thread-23486] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:21:16.803 [DEBUG] [Thread-23486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:21:16.804 [DEBUG] [Thread-23486] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:21:16.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:21:16.805 [DEBUG] [Thread-23486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:21:16.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:21:16.808 [DEBUG] [Thread-23486] [transport.py] [_log()] userauth is OK
2025-12-26T03:21:16.808 [DEBUG] [Thread-23486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:21:16.808 [DEBUG] [Thread-23486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:21:16.808 [DEBUG] [Thread-23486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:21:16.808 [DEBUG] [Thread-23486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:21:16.827 [INFO] [Thread-23486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:21:16.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:21:17.437 [DEBUG] [Thread-23486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:21:17.437 [DEBUG] [Thread-23486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:21:17.438 [DEBUG] [Thread-23486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:21:17.478 [DEBUG] [Thread-23486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:21:17.478 [DEBUG] [Thread-23486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:21:17.482 [DEBUG] [Thread-23486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:21:17.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:21:17.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:21:17.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:21:17.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:21:17.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:21:17.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:21:17.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:21:17.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:21:17.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:21:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.055960 -999.00  +11.80  13.10     87   +9.70 1 1 1 2 1     0    0 1.94 -14.89 ZNESW 13.1 13.1 157.0 16.8 12.6 -21.7 12.4 -21.2 12.2 -19.5 12.5 -20.6
2025-12-26T03:21:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:21:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:21:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.055960
2025-12-26T03:21:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:21:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:21:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:21:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:21:17.508 [DEBUG] [Thread-23486] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:21:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:21:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:21:07', tmtdew=2.53, humidity=84.63, cloud=0.0, wind=17.98, temperature=11.82, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:20:34.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:19:00')
2025-12-26T03:21:17.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-26T03:21:17.602 [DEBUG] [Thread-23489] [transport.py] [_log()] starting thread (client mode): 0xb9592ef0
2025-12-26T03:21:17.602 [DEBUG] [Thread-23489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:21:17.617 [DEBUG] [Thread-23489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:21:17.617 [INFO] [Thread-23489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:21:17.624 [DEBUG] [Thread-23489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:21:17.624 [DEBUG] [Thread-23489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:21:17.624 [DEBUG] [Thread-23489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:21:17.624 [DEBUG] [Thread-23489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] client lang: <none>
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] server lang: <none>
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] kex follows: False
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] Compression: none
2025-12-26T03:21:17.625 [DEBUG] [Thread-23489] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:21:17.684 [DEBUG] [Thread-23489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:21:17.685 [DEBUG] [Thread-23489] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:21:17.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:21:17.686 [DEBUG] [Thread-23489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:21:17.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:21:17.741 [DEBUG] [Thread-23489] [transport.py] [_log()] userauth is OK
2025-12-26T03:21:17.741 [DEBUG] [Thread-23489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:21:17.742 [DEBUG] [Thread-23489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:21:17.742 [DEBUG] [Thread-23489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:21:17.742 [DEBUG] [Thread-23489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:21:17.760 [INFO] [Thread-23489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:21:17.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-26T03:21:17.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:21:18.586 [DEBUG] [Thread-23489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:21:18.586 [DEBUG] [Thread-23489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:21:18.634 [DEBUG] [Thread-23489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:21:18.634 [DEBUG] [Thread-23489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:21:18.643 [DEBUG] [Thread-23489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:21:18.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:21:18.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-26T03:21:18.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-26T03:21:18.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:21:18.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:21:18.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:21:18.681 [DEBUG] [Thread-23489] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:21:28.812 [DEBUG] [Thread-23491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:43.864 [DEBUG] [Thread-23492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:48.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:21:48.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:21:48.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:21:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 21, 39), 2.53, 84.62, 0.0, 16.43, 11.81, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:21:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:21:39
2025-12-26T03:21:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:21:49.682 [DEBUG] [Thread-23493] [transport.py] [_log()] starting thread (client mode): 0xb9591bd0
2025-12-26T03:21:49.682 [DEBUG] [Thread-23493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:21:49.702 [DEBUG] [Thread-23493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:21:49.703 [INFO] [Thread-23493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] client lang: <none>
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] server lang: <none>
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] kex follows: False
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:21:49.706 [DEBUG] [Thread-23493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:21:49.707 [DEBUG] [Thread-23493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:21:49.707 [DEBUG] [Thread-23493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:21:49.707 [DEBUG] [Thread-23493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:21:49.707 [DEBUG] [Thread-23493] [transport.py] [_log()] Compression: none
2025-12-26T03:21:49.707 [DEBUG] [Thread-23493] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:21:49.724 [DEBUG] [Thread-23493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:21:49.724 [DEBUG] [Thread-23493] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:21:49.725 [DEBUG] [Thread-23493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:21:49.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:21:49.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:21:49.727 [DEBUG] [Thread-23493] [transport.py] [_log()] userauth is OK
2025-12-26T03:21:49.727 [DEBUG] [Thread-23493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:21:49.727 [DEBUG] [Thread-23493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:21:49.728 [DEBUG] [Thread-23493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:21:49.728 [DEBUG] [Thread-23493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:21:49.753 [INFO] [Thread-23493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:21:49.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:21:50.365 [DEBUG] [Thread-23493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:21:50.366 [DEBUG] [Thread-23493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:21:50.366 [DEBUG] [Thread-23493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:21:50.407 [DEBUG] [Thread-23493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:21:50.407 [DEBUG] [Thread-23493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:21:50.410 [DEBUG] [Thread-23493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:21:50.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:21:50.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:21:50.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:21:50.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:21:50.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:21:50.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:21:50.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:21:50.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:21:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:21:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.056655 -999.00  +11.80  11.28     87   +9.80 1 1 1 2 1     0    0 1.87 -17.72 ZNESW 11.3 11.3 159.2 16.6 12.5 -21.5 12.4 -21.2 12.2 -19.5 12.4 -20.6
2025-12-26T03:21:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:21:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:21:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.056655
2025-12-26T03:21:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:21:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:21:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:21:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:21:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:21:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:21:39', tmtdew=2.53, humidity=84.62, cloud=0.0, wind=16.43, temperature=11.81, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:21:34.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:19:00')
2025-12-26T03:21:50.436 [DEBUG] [Thread-23493] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:21:50.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:21:50.528 [DEBUG] [Thread-23496] [transport.py] [_log()] starting thread (client mode): 0xb6b23310
2025-12-26T03:21:50.528 [DEBUG] [Thread-23496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:21:50.543 [DEBUG] [Thread-23496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:21:50.543 [INFO] [Thread-23496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:21:50.550 [DEBUG] [Thread-23496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] client lang: <none>
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] server lang: <none>
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] kex follows: False
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] Compression: none
2025-12-26T03:21:50.551 [DEBUG] [Thread-23496] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:21:50.609 [DEBUG] [Thread-23496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:21:50.610 [DEBUG] [Thread-23496] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:21:50.610 [DEBUG] [Thread-23496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:21:50.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:21:50.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:21:50.665 [DEBUG] [Thread-23496] [transport.py] [_log()] userauth is OK
2025-12-26T03:21:50.665 [DEBUG] [Thread-23496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:21:50.665 [DEBUG] [Thread-23496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:21:50.665 [DEBUG] [Thread-23496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:21:50.666 [DEBUG] [Thread-23496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:21:50.684 [INFO] [Thread-23496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:21:50.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-26T03:21:50.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:21:51.125 [DEBUG] [Thread-23498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:51.489 [DEBUG] [Thread-23496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:21:51.489 [DEBUG] [Thread-23496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:21:51.537 [DEBUG] [Thread-23496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:21:51.537 [DEBUG] [Thread-23496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:21:51.546 [DEBUG] [Thread-23496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:21:51.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:21:51.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-26T03:21:51.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-26T03:21:51.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:21:51.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:21:51.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:21:51.583 [DEBUG] [Thread-23496] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:21:58.705 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:58.707 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:21:58.898 [DEBUG] [Thread-23499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:13.944 [DEBUG] [Thread-23500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:21.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:22:21.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:22:21.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-26T03:22:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 22, 11), 2.53, 84.65, 0.0, 16.13, 11.77, 0, 1, 0, 2, 0, 0),)
2025-12-26T03:22:22.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:22:11
2025-12-26T03:22:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:22:22.561 [DEBUG] [Thread-23501] [transport.py] [_log()] starting thread (client mode): 0xb6b76da0
2025-12-26T03:22:22.561 [DEBUG] [Thread-23501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:22:22.581 [DEBUG] [Thread-23501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:22:22.581 [INFO] [Thread-23501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] client lang: <none>
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] server lang: <none>
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] kex follows: False
2025-12-26T03:22:22.585 [DEBUG] [Thread-23501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:22:22.586 [DEBUG] [Thread-23501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:22:22.586 [DEBUG] [Thread-23501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:22:22.586 [DEBUG] [Thread-23501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:22:22.586 [DEBUG] [Thread-23501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:22:22.586 [DEBUG] [Thread-23501] [transport.py] [_log()] Compression: none
2025-12-26T03:22:22.586 [DEBUG] [Thread-23501] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:22:22.603 [DEBUG] [Thread-23501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:22:22.603 [DEBUG] [Thread-23501] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:22:22.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:22:22.604 [DEBUG] [Thread-23501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:22:22.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:22:22.606 [DEBUG] [Thread-23501] [transport.py] [_log()] userauth is OK
2025-12-26T03:22:22.606 [DEBUG] [Thread-23501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:22:22.607 [DEBUG] [Thread-23501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:22:22.607 [DEBUG] [Thread-23501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:22:22.607 [DEBUG] [Thread-23501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:22:22.631 [INFO] [Thread-23501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:22:22.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:22:23.273 [DEBUG] [Thread-23501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:22:23.273 [DEBUG] [Thread-23501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:22:23.274 [DEBUG] [Thread-23501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:22:23.314 [DEBUG] [Thread-23501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:22:23.314 [DEBUG] [Thread-23501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:22:23.317 [DEBUG] [Thread-23501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:22:23.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:22:23.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:22:23.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:22:23.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:22:23.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:22:23.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:22:23.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:22:23.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:22:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:22:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.057002 -999.00  +11.80  10.86     87   +9.80 1 1 1 2 1     0    0 1.82 -17.96 ZNESW 10.9 10.9 144.8 16.8 12.5 -21.5 12.4 -21.1 12.1 -19.5 12.4 -20.6
2025-12-26T03:22:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:22:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:22:23.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.057002
2025-12-26T03:22:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:22:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:22:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:22:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:22:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:22:23.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:22:11', tmtdew=2.53, humidity=84.65, cloud=0.0, wind=16.13, temperature=11.77, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:22:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:19:00')
2025-12-26T03:22:23.344 [DEBUG] [Thread-23501] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:22: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-26T03:22:23.439 [DEBUG] [Thread-23504] [transport.py] [_log()] starting thread (client mode): 0xb9590790
2025-12-26T03:22:23.439 [DEBUG] [Thread-23504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:22:23.454 [DEBUG] [Thread-23504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:22:23.454 [INFO] [Thread-23504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:22:23.462 [DEBUG] [Thread-23504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:22:23.462 [DEBUG] [Thread-23504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:22:23.462 [DEBUG] [Thread-23504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:22:23.462 [DEBUG] [Thread-23504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] client lang: <none>
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] server lang: <none>
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] kex follows: False
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] Compression: none
2025-12-26T03:22:23.463 [DEBUG] [Thread-23504] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:22:23.521 [DEBUG] [Thread-23504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:22:23.522 [DEBUG] [Thread-23504] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:22:23.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:22:23.523 [DEBUG] [Thread-23504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:22:23.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:22:23.577 [DEBUG] [Thread-23504] [transport.py] [_log()] userauth is OK
2025-12-26T03:22:23.577 [DEBUG] [Thread-23504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:22:23.577 [DEBUG] [Thread-23504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:22:23.578 [DEBUG] [Thread-23504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:22:23.578 [DEBUG] [Thread-23504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:22:23.596 [INFO] [Thread-23504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:22:23.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:22:23.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:22:24.425 [DEBUG] [Thread-23504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:22:24.425 [DEBUG] [Thread-23504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:22:24.473 [DEBUG] [Thread-23504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:22:24.473 [DEBUG] [Thread-23504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:22:24.482 [DEBUG] [Thread-23504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:22:24.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:22:24.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:22:24.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-26T03:22:24.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:22:24.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:22:24.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:22:24.520 [DEBUG] [Thread-23504] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:22:28.980 [DEBUG] [Thread-23506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:44.028 [DEBUG] [Thread-23507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:51.220 [DEBUG] [Thread-23508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:54.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:22:54.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:22:54.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-26T03:22:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 22, 43), 2.47, 84.68, 0.0, 17.2, 11.79, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:22:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:22:43
2025-12-26T03:22:55.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:22:55.511 [DEBUG] [Thread-23509] [transport.py] [_log()] starting thread (client mode): 0xb6b77340
2025-12-26T03:22:55.511 [DEBUG] [Thread-23509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:22:55.531 [DEBUG] [Thread-23509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:22:55.532 [INFO] [Thread-23509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:22:55.535 [DEBUG] [Thread-23509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] client lang: <none>
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] server lang: <none>
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] kex follows: False
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] Compression: none
2025-12-26T03:22:55.536 [DEBUG] [Thread-23509] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:22:55.554 [DEBUG] [Thread-23509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:22:55.555 [DEBUG] [Thread-23509] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:22:55.556 [DEBUG] [Thread-23509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:22:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:22:55.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:22:55.596 [DEBUG] [Thread-23509] [transport.py] [_log()] userauth is OK
2025-12-26T03:22:55.597 [DEBUG] [Thread-23509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:22:55.597 [DEBUG] [Thread-23509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:22:55.597 [DEBUG] [Thread-23509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:22:55.597 [DEBUG] [Thread-23509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:22:55.617 [INFO] [Thread-23509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:22:55.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:22:56.252 [DEBUG] [Thread-23509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:22:56.252 [DEBUG] [Thread-23509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:22:56.253 [DEBUG] [Thread-23509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:22:56.293 [DEBUG] [Thread-23509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:22:56.293 [DEBUG] [Thread-23509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:22:56.297 [DEBUG] [Thread-23509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:22:56.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:22:56.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:22:56.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:22:56.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:22:56.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:22:56.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:22:56.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:22:56.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:22:56.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:22:56.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.057349 -999.00  +11.80  10.91     87   +9.80 1 1 1 2 1     0    0 1.69 -20.66 ZNESW 10.9 10.9 167.4 14.7 12.5 -21.5 12.4 -21.2 12.2 -19.7 12.4 -20.6
2025-12-26T03:22:56.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:22:56.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:22:56.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.057349
2025-12-26T03:22:56.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:22:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:22:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:22:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:22:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:22:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:22:43', tmtdew=2.47, humidity=84.68, cloud=0.0, wind=17.2, temperature=11.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:22:34.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.12575000000000003, 0.1412500000000012, 0.20825000000000138, 0.13149999999999906, 0.1255000000000006, 0.19175000000000075, 0.1769999999999996, 0.2552500000000002, 0.22100000000000009, 0.15799999999999947, 0.145249999999999, 0.2029999999999994, 0.18799999999999883, 0.19125000000000014, 0.2779999999999987, 0.2604999999999986, 0.15875000000000128, 0.24450000000000038, 0.16999999999999993, 0.29224999999999923, 0.243999999999998, 0.2527499999999989, 0.26775000000000126, 0.2787500000000005, 0.22100000000000009, 0.2234999999999996, 0.2867500000000014, 0.3355000000000006, 0.41250000000000053, 0.3330000000000011, 0.28600000000000136, 0.4090000000000007, 0.28224999999999945], zp_timestamp='2025-12-26T01:19:00')
2025-12-26T03:22:56.323 [DEBUG] [Thread-23509] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:22:56.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-26T03:22:56.417 [DEBUG] [Thread-23512] [transport.py] [_log()] starting thread (client mode): 0xb6b77cd0
2025-12-26T03:22:56.417 [DEBUG] [Thread-23512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:22:56.431 [DEBUG] [Thread-23512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:22:56.432 [INFO] [Thread-23512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:22:56.439 [DEBUG] [Thread-23512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:22:56.439 [DEBUG] [Thread-23512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:22:56.439 [DEBUG] [Thread-23512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] client lang: <none>
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] server lang: <none>
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] kex follows: False
2025-12-26T03:22:56.440 [DEBUG] [Thread-23512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:22:56.441 [DEBUG] [Thread-23512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:22:56.441 [DEBUG] [Thread-23512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:22:56.441 [DEBUG] [Thread-23512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:22:56.441 [DEBUG] [Thread-23512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:22:56.441 [DEBUG] [Thread-23512] [transport.py] [_log()] Compression: none
2025-12-26T03:22:56.441 [DEBUG] [Thread-23512] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:22:56.497 [DEBUG] [Thread-23512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:22:56.497 [DEBUG] [Thread-23512] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:22:56.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:22:56.499 [DEBUG] [Thread-23512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:22:56.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:22:56.553 [DEBUG] [Thread-23512] [transport.py] [_log()] userauth is OK
2025-12-26T03:22:56.553 [DEBUG] [Thread-23512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:22:56.553 [DEBUG] [Thread-23512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:22:56.554 [DEBUG] [Thread-23512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:22:56.554 [DEBUG] [Thread-23512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:22:56.572 [INFO] [Thread-23512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:22:56.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-26T03:22:56.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:22:57.365 [DEBUG] [Thread-23512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:22:57.366 [DEBUG] [Thread-23512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:22:57.414 [DEBUG] [Thread-23512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:22:57.414 [DEBUG] [Thread-23512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:22:57.423 [DEBUG] [Thread-23512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:22:57.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:22:57.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-26T03:22:57.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:22:57.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:22:57.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:22:57.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:22:57.460 [DEBUG] [Thread-23512] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:22:58.909 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:58.910 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:22:59.062 [DEBUG] [Thread-23514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:02.958 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:14.122 [DEBUG] [Thread-23515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:23:27.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:23:27.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-26T03:23:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 23, 15), 2.45, 84.83, 0.0, 15.65, 11.81, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:23:28.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:23:15
2025-12-26T03:23:28.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:23:28.457 [DEBUG] [Thread-23516] [transport.py] [_log()] starting thread (client mode): 0xb9547640
2025-12-26T03:23:28.457 [DEBUG] [Thread-23516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:23:28.472 [DEBUG] [Thread-23516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:23:28.473 [INFO] [Thread-23516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] client lang: <none>
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] server lang: <none>
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] kex follows: False
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:23:28.475 [DEBUG] [Thread-23516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:23:28.476 [DEBUG] [Thread-23516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:23:28.476 [DEBUG] [Thread-23516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:23:28.476 [DEBUG] [Thread-23516] [transport.py] [_log()] Compression: none
2025-12-26T03:23:28.476 [DEBUG] [Thread-23516] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:23:28.488 [DEBUG] [Thread-23516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:23:28.488 [DEBUG] [Thread-23516] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:23:28.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:23:28.489 [DEBUG] [Thread-23516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:23:28.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:23:28.491 [DEBUG] [Thread-23516] [transport.py] [_log()] userauth is OK
2025-12-26T03:23:28.491 [DEBUG] [Thread-23516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:23:28.491 [DEBUG] [Thread-23516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:23:28.491 [DEBUG] [Thread-23516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:23:28.492 [DEBUG] [Thread-23516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:23:28.509 [INFO] [Thread-23516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:23:28.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:23:29.105 [DEBUG] [Thread-23516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:23:29.105 [DEBUG] [Thread-23516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:23:29.106 [DEBUG] [Thread-23516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:23:29.146 [DEBUG] [Thread-23516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:23:29.146 [DEBUG] [Thread-23516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:23:29.148 [DEBUG] [Thread-23516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:23:29.151 [DEBUG] [Thread-23518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:29.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:23:29.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:23:29.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:23:29.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:23:29.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:23:29.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:23:29.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:23:29.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:23:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:23:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.057696 -999.00  +11.80  12.01     87   +9.70 1 1 1 2 1     0    0 1.60 -23.48 ZNESW 12.0 12.0 158.6 15.9 12.5 -21.6 12.4 -21.3 12.1 -19.5 12.4 -20.7
2025-12-26T03:23:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:23:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:23:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.057696
2025-12-26T03:23:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:23:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:23:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:23:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:23:29.173 [DEBUG] [Thread-23516] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:23:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:23:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:23:15', tmtdew=2.45, humidity=84.83, cloud=0.0, wind=15.65, temperature=11.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:23:04.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.1297499999999996, 0.15975000000000072, 0.26975000000000016, 0.16849999999999987, 0.14450000000000074, 0.19475000000000087, 0.20199999999999996, 0.2782499999999999, 0.24549999999999983, 0.16949999999999932, 0.1402499999999982, 0.19899999999999984, 0.22100000000000009, 0.19924999999999926, 0.2809999999999988, 0.2925000000000004, 0.2082499999999996, 0.2624999999999993, 0.2024999999999988, 0.3122499999999988, 0.2309999999999981, 0.24074999999999847, 0.29825000000000124, 0.2997499999999995, 0.1894999999999989, 0.25150000000000006, 0.3207500000000003, 0.33000000000000007, 0.5550000000000006, 0.3435000000000006, 0.33000000000000096, 0.4430000000000005, 0.29024999999999856], zp_timestamp='2025-12-26T01:22:00')
2025-12-26T03:23:29.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:23:29.266 [DEBUG] [Thread-23520] [transport.py] [_log()] starting thread (client mode): 0xb95456f0
2025-12-26T03:23:29.267 [DEBUG] [Thread-23520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:23:29.282 [DEBUG] [Thread-23520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:23:29.282 [INFO] [Thread-23520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] client lang: <none>
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] server lang: <none>
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] kex follows: False
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:23:29.290 [DEBUG] [Thread-23520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:23:29.291 [DEBUG] [Thread-23520] [transport.py] [_log()] Compression: none
2025-12-26T03:23:29.291 [DEBUG] [Thread-23520] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:23:29.351 [DEBUG] [Thread-23520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:23:29.351 [DEBUG] [Thread-23520] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:23:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:23:29.353 [DEBUG] [Thread-23520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:23:29.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:23:29.409 [DEBUG] [Thread-23520] [transport.py] [_log()] userauth is OK
2025-12-26T03:23:29.409 [DEBUG] [Thread-23520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:23:29.409 [DEBUG] [Thread-23520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:23:29.410 [DEBUG] [Thread-23520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:23:29.410 [DEBUG] [Thread-23520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:23:29.430 [INFO] [Thread-23520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:23:29.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-26T03:23:29.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:23:30.255 [DEBUG] [Thread-23520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:23:30.255 [DEBUG] [Thread-23520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:23:30.303 [DEBUG] [Thread-23520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:23:30.303 [DEBUG] [Thread-23520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:23:30.312 [DEBUG] [Thread-23520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:23:30.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:23:30.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-26T03:23:30.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:23:30.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:23:30.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:23:30.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:23:30.348 [DEBUG] [Thread-23520] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:23:44.190 [DEBUG] [Thread-23522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:51.285 [DEBUG] [Thread-23523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:59.110 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:59.111 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:23:59.239 [DEBUG] [Thread-23524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:00.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:24:00.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:24:00.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-26T03:24:01.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 23, 47), 2.43, 84.91, 0.0, 17.1, 11.76, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:24:01.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:23:47
2025-12-26T03:24:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:24:01.405 [DEBUG] [Thread-23525] [transport.py] [_log()] starting thread (client mode): 0xb6b21960
2025-12-26T03:24:01.405 [DEBUG] [Thread-23525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:24:01.424 [DEBUG] [Thread-23525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:24:01.424 [INFO] [Thread-23525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:24:01.427 [DEBUG] [Thread-23525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:24:01.427 [DEBUG] [Thread-23525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] client lang: <none>
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] server lang: <none>
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] kex follows: False
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] Compression: none
2025-12-26T03:24:01.428 [DEBUG] [Thread-23525] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:24:01.444 [DEBUG] [Thread-23525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:24:01.444 [DEBUG] [Thread-23525] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:24:01.444 [DEBUG] [Thread-23525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:24:01.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:24:01.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:24:01.446 [DEBUG] [Thread-23525] [transport.py] [_log()] userauth is OK
2025-12-26T03:24:01.446 [DEBUG] [Thread-23525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:24:01.446 [DEBUG] [Thread-23525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:24:01.446 [DEBUG] [Thread-23525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:24:01.446 [DEBUG] [Thread-23525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:24:01.458 [INFO] [Thread-23525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:24:01.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:24:02.058 [DEBUG] [Thread-23525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:24:02.059 [DEBUG] [Thread-23525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:24:02.059 [DEBUG] [Thread-23525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:24:02.099 [DEBUG] [Thread-23525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:24:02.099 [DEBUG] [Thread-23525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:24:02.102 [DEBUG] [Thread-23525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:24:02.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:24:02.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:24:02.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:24:02.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:24:02.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:24:02.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:24:02.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.058043 -999.00  +11.80  10.80     87   +9.70 1 1 1 2 1     0    0 1.62 -24.95 ZNESW 10.8 10.8 159.0 16.6 12.5 -21.6 12.4 -21.3 12.1 -19.6 12.4 -20.6
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.058043
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:24:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:23:47', tmtdew=2.43, humidity=84.91, cloud=0.0, wind=17.1, temperature=11.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:23:34.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.1297499999999996, 0.15975000000000072, 0.26975000000000016, 0.16849999999999987, 0.14450000000000074, 0.19475000000000087, 0.20199999999999996, 0.2782499999999999, 0.24549999999999983, 0.16949999999999932, 0.1402499999999982, 0.19899999999999984, 0.22100000000000009, 0.19924999999999926, 0.2809999999999988, 0.2925000000000004, 0.2082499999999996, 0.2624999999999993, 0.2024999999999988, 0.3122499999999988, 0.2309999999999981, 0.24074999999999847, 0.29825000000000124, 0.2997499999999995, 0.1894999999999989, 0.25150000000000006, 0.3207500000000003, 0.33000000000000007, 0.5550000000000006, 0.3435000000000006, 0.33000000000000096, 0.4430000000000005, 0.29024999999999856], zp_timestamp='2025-12-26T01:22:00')
2025-12-26T03:24:02.121 [DEBUG] [Thread-23525] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:24:02.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-26T03:24:02.206 [DEBUG] [Thread-23528] [transport.py] [_log()] starting thread (client mode): 0xbbfcdb70
2025-12-26T03:24:02.206 [DEBUG] [Thread-23528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:24:02.221 [DEBUG] [Thread-23528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:24:02.221 [INFO] [Thread-23528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:24:02.228 [DEBUG] [Thread-23528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:24:02.228 [DEBUG] [Thread-23528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:24:02.228 [DEBUG] [Thread-23528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:24:02.228 [DEBUG] [Thread-23528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:02.228 [DEBUG] [Thread-23528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] client lang: <none>
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] server lang: <none>
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] kex follows: False
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] Compression: none
2025-12-26T03:24:02.229 [DEBUG] [Thread-23528] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:24:02.288 [DEBUG] [Thread-23528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:24:02.288 [DEBUG] [Thread-23528] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:24:02.289 [DEBUG] [Thread-23528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:24:02.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:24:02.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:24:02.344 [DEBUG] [Thread-23528] [transport.py] [_log()] userauth is OK
2025-12-26T03:24:02.344 [DEBUG] [Thread-23528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:24:02.344 [DEBUG] [Thread-23528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:24:02.344 [DEBUG] [Thread-23528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:24:02.344 [DEBUG] [Thread-23528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:24:02.358 [INFO] [Thread-23528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:24:02.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-26T03:24:02.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:24:03.160 [DEBUG] [Thread-23528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:24:03.166 [DEBUG] [Thread-23528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:24:03.207 [DEBUG] [Thread-23528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:24:03.207 [DEBUG] [Thread-23528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:24:03.215 [DEBUG] [Thread-23528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:24:03.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:24:03.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-26T03:24:03.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-26T03:24:03.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:24:03.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:24:03.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:24:03.247 [DEBUG] [Thread-23528] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:24:14.269 [DEBUG] [Thread-23530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:29.323 [DEBUG] [Thread-23531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:24:33.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:24:33.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-26T03:24:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 24, 19), 2.42, 84.98, 0.0, 17.5, 11.82, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:24:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:24:19
2025-12-26T03:24:34.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:24:34.269 [DEBUG] [Thread-23532] [transport.py] [_log()] starting thread (client mode): 0xbbfcd180
2025-12-26T03:24:34.269 [DEBUG] [Thread-23532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:24:34.288 [DEBUG] [Thread-23532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:24:34.289 [INFO] [Thread-23532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:34.292 [DEBUG] [Thread-23532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] client lang: <none>
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] server lang: <none>
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] kex follows: False
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] Compression: none
2025-12-26T03:24:34.293 [DEBUG] [Thread-23532] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:24:34.309 [DEBUG] [Thread-23532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:24:34.309 [DEBUG] [Thread-23532] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:24:34.310 [DEBUG] [Thread-23532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:24:34.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:24:34.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:24:34.312 [DEBUG] [Thread-23532] [transport.py] [_log()] userauth is OK
2025-12-26T03:24:34.312 [DEBUG] [Thread-23532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:24:34.312 [DEBUG] [Thread-23532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:24:34.312 [DEBUG] [Thread-23532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:24:34.312 [DEBUG] [Thread-23532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:24:34.330 [INFO] [Thread-23532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:24:34.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:24:34.906 [DEBUG] [Thread-23532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:24:34.907 [DEBUG] [Thread-23532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:24:34.907 [DEBUG] [Thread-23532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:24:34.948 [DEBUG] [Thread-23532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:24:34.948 [DEBUG] [Thread-23532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:24:34.950 [DEBUG] [Thread-23532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:24:34.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:24:34.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:24:34.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:24:34.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:24:34.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:24:34.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:24:34.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:24:34.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:24:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:24:34.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.058391 -999.00  +11.80  11.67     87   +9.70 1 1 1 2 1     0    0 1.63 -23.34 ZNESW 11.7 11.7 159.9 15.4 12.5 -21.5 12.3 -21.3 12.1 -19.6 12.4 -20.7
2025-12-26T03:24:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:24:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:24:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.058391
2025-12-26T03:24:34.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:24:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:24:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:24:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:24:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:24:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:24:19', tmtdew=2.42, humidity=84.98, cloud=0.0, wind=17.5, temperature=11.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:24:04.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.1297499999999996, 0.15975000000000072, 0.26975000000000016, 0.16849999999999987, 0.14450000000000074, 0.19475000000000087, 0.20199999999999996, 0.2782499999999999, 0.24549999999999983, 0.16949999999999932, 0.1402499999999982, 0.19899999999999984, 0.22100000000000009, 0.19924999999999926, 0.2809999999999988, 0.2925000000000004, 0.2082499999999996, 0.2624999999999993, 0.2024999999999988, 0.3122499999999988, 0.2309999999999981, 0.24074999999999847, 0.29825000000000124, 0.2997499999999995, 0.1894999999999989, 0.25150000000000006, 0.3207500000000003, 0.33000000000000007, 0.5550000000000006, 0.3435000000000006, 0.33000000000000096, 0.4430000000000005, 0.29024999999999856], zp_timestamp='2025-12-26T01:22:00')
2025-12-26T03:24:34.970 [DEBUG] [Thread-23532] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:24:35.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-26T03:24:35.062 [DEBUG] [Thread-23535] [transport.py] [_log()] starting thread (client mode): 0xb6b74700
2025-12-26T03:24:35.062 [DEBUG] [Thread-23535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:24:35.077 [DEBUG] [Thread-23535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:24:35.077 [INFO] [Thread-23535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] client lang: <none>
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] server lang: <none>
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] kex follows: False
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] Compression: none
2025-12-26T03:24:35.084 [DEBUG] [Thread-23535] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:24:35.141 [DEBUG] [Thread-23535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:24:35.142 [DEBUG] [Thread-23535] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:24:35.143 [DEBUG] [Thread-23535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:24:35.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:24:35.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:24:35.197 [DEBUG] [Thread-23535] [transport.py] [_log()] userauth is OK
2025-12-26T03:24:35.197 [DEBUG] [Thread-23535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:24:35.198 [DEBUG] [Thread-23535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:24:35.198 [DEBUG] [Thread-23535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:24:35.198 [DEBUG] [Thread-23535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:24:35.217 [INFO] [Thread-23535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:24:35.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:24:35.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:24:35.997 [DEBUG] [Thread-23535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:24:35.998 [DEBUG] [Thread-23535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:24:36.045 [DEBUG] [Thread-23535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:24:36.045 [DEBUG] [Thread-23535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:24:36.054 [DEBUG] [Thread-23535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:24:36.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:24:36.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-26T03:24:36.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-26T03:24:36.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:24:36.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:24:36.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:24:36.090 [DEBUG] [Thread-23535] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:24:44.355 [DEBUG] [Thread-23537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:51.343 [DEBUG] [Thread-23538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:59.314 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:59.315 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:24:59.409 [DEBUG] [Thread-23539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:25:06.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:25:06.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:25:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 24, 51), 2.44, 84.9, 0.0, 15.3, 11.77, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:25:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:24:51
2025-12-26T03:25:06.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:25:07.075 [DEBUG] [Thread-23540] [transport.py] [_log()] starting thread (client mode): 0xb95460e0
2025-12-26T03:25:07.075 [DEBUG] [Thread-23540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:25:07.095 [DEBUG] [Thread-23540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:25:07.095 [INFO] [Thread-23540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:25:07.098 [DEBUG] [Thread-23540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] client lang: <none>
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] server lang: <none>
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] kex follows: False
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] Compression: none
2025-12-26T03:25:07.099 [DEBUG] [Thread-23540] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:25:07.118 [DEBUG] [Thread-23540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:25:07.118 [DEBUG] [Thread-23540] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:25:07.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:25:07.119 [DEBUG] [Thread-23540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:25:07.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:25:07.121 [DEBUG] [Thread-23540] [transport.py] [_log()] userauth is OK
2025-12-26T03:25:07.122 [DEBUG] [Thread-23540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:25:07.122 [DEBUG] [Thread-23540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:25:07.122 [DEBUG] [Thread-23540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:25:07.122 [DEBUG] [Thread-23540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:25:07.161 [INFO] [Thread-23540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:25:07.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:25:08.995 [DEBUG] [Thread-23540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:25:08.995 [DEBUG] [Thread-23540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:25:08.996 [DEBUG] [Thread-23540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:25:09.036 [DEBUG] [Thread-23540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:25:09.036 [DEBUG] [Thread-23540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:25:09.039 [DEBUG] [Thread-23540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:25:09.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:25:09.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:25:09.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:25:09.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:25:09.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:25:09.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:25:09.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:25:09.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:25:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:25:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.058391 -999.00  +11.80  11.67     87   +9.70 1 1 1 2 1     0    0 1.63 -23.34 ZNESW 11.7 11.7 159.9 15.4 12.5 -21.5 12.3 -21.3 12.1 -19.6 12.4 -20.7
2025-12-26T03:25:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:25:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:25:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.058391
2025-12-26T03:25:09.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:25:09.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:25:09.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:25:09.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:25:09.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:25:09.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:24:51', tmtdew=2.44, humidity=84.9, cloud=0.0, wind=15.3, temperature=11.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:24:04.982', atlas_cloud=1, atlas_rain=1, zp_data=[0.1297499999999996, 0.15975000000000072, 0.26975000000000016, 0.16849999999999987, 0.14450000000000074, 0.19475000000000087, 0.20199999999999996, 0.2782499999999999, 0.24549999999999983, 0.16949999999999932, 0.1402499999999982, 0.19899999999999984, 0.22100000000000009, 0.19924999999999926, 0.2809999999999988, 0.2925000000000004, 0.2082499999999996, 0.2624999999999993, 0.2024999999999988, 0.3122499999999988, 0.2309999999999981, 0.24074999999999847, 0.29825000000000124, 0.2997499999999995, 0.1894999999999989, 0.25150000000000006, 0.3207500000000003, 0.33000000000000007, 0.5550000000000006, 0.3435000000000006, 0.33000000000000096, 0.4430000000000005, 0.29024999999999856], zp_timestamp='2025-12-26T01:22:00')
2025-12-26T03:25:09.062 [DEBUG] [Thread-23540] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:25:09.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-26T03:25:09.156 [DEBUG] [Thread-23543] [transport.py] [_log()] starting thread (client mode): 0xbbfccc10
2025-12-26T03:25:09.156 [DEBUG] [Thread-23543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:25:09.171 [DEBUG] [Thread-23543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:25:09.171 [INFO] [Thread-23543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:25:09.178 [DEBUG] [Thread-23543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] client lang: <none>
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] server lang: <none>
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] kex follows: False
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] Compression: none
2025-12-26T03:25:09.179 [DEBUG] [Thread-23543] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:25:09.242 [DEBUG] [Thread-23543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:25:09.242 [DEBUG] [Thread-23543] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:25:09.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:25:09.243 [DEBUG] [Thread-23543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:25:09.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:25:09.298 [DEBUG] [Thread-23543] [transport.py] [_log()] userauth is OK
2025-12-26T03:25:09.298 [DEBUG] [Thread-23543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:25:09.299 [DEBUG] [Thread-23543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:25:09.299 [DEBUG] [Thread-23543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:25:09.299 [DEBUG] [Thread-23543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:25:09.322 [INFO] [Thread-23543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:25:09.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-26T03:25:09.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:25:10.174 [DEBUG] [Thread-23543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:25:10.174 [DEBUG] [Thread-23543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:25:10.222 [DEBUG] [Thread-23543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:25:10.222 [DEBUG] [Thread-23543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:25:10.232 [DEBUG] [Thread-23543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:25:10.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:25:10.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-26T03:25:10.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-26T03:25:10.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:25:10.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:25:10.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:25:10.266 [DEBUG] [Thread-23543] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:25:14.445 [DEBUG] [Thread-23545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:29.484 [DEBUG] [Thread-23546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:40.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:25:40.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:25:40.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-26T03:25:40.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 25, 23), 2.43, 84.91, 0.0, 16.32, 11.76, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:25:40.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:25:23
2025-12-26T03:25:41.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:25:41.278 [DEBUG] [Thread-23547] [transport.py] [_log()] starting thread (client mode): 0xb955ae60
2025-12-26T03:25:41.279 [DEBUG] [Thread-23547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:25:41.300 [DEBUG] [Thread-23547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:25:41.301 [INFO] [Thread-23547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] client lang: <none>
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] server lang: <none>
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] kex follows: False
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:25:41.304 [DEBUG] [Thread-23547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:25:41.305 [DEBUG] [Thread-23547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:25:41.305 [DEBUG] [Thread-23547] [transport.py] [_log()] Compression: none
2025-12-26T03:25:41.305 [DEBUG] [Thread-23547] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:25:41.313 [DEBUG] [Thread-23547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:25:41.314 [DEBUG] [Thread-23547] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:25:41.314 [DEBUG] [Thread-23547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:25:41.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:25:41.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:25:41.316 [DEBUG] [Thread-23547] [transport.py] [_log()] userauth is OK
2025-12-26T03:25:41.316 [DEBUG] [Thread-23547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:25:41.316 [DEBUG] [Thread-23547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:25:41.316 [DEBUG] [Thread-23547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:25:41.316 [DEBUG] [Thread-23547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:25:41.340 [INFO] [Thread-23547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:25:41.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:25:42.002 [DEBUG] [Thread-23547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:25:42.003 [DEBUG] [Thread-23547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:25:42.003 [DEBUG] [Thread-23547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:25:42.043 [DEBUG] [Thread-23547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:25:42.044 [DEBUG] [Thread-23547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:25:42.047 [DEBUG] [Thread-23547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:25:42.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:25:42.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:25:42.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:25:42.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:25:42.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:25:42.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:25:42.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:25:42.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:25:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:25:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.059085 -999.00  +11.80  14.37     87   +9.80 1 1 1 2 1     0    0 1.61 -24.84 ZNESW 14.4 14.4 164.2 16.7 12.5 -21.5 12.3 -21.2 12.1 -19.5 12.4 -20.6
2025-12-26T03:25:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:25:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:25:42.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.059085
2025-12-26T03:25:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:25:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:25:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:25:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:25:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:25:42.073 [DEBUG] [Thread-23547] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:25:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:25:23', tmtdew=2.43, humidity=84.91, cloud=0.0, wind=16.32, temperature=11.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:25:04.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.1297499999999996, 0.15975000000000072, 0.26975000000000016, 0.16849999999999987, 0.14450000000000074, 0.19475000000000087, 0.20199999999999996, 0.2782499999999999, 0.24549999999999983, 0.16949999999999932, 0.1402499999999982, 0.19899999999999984, 0.22100000000000009, 0.19924999999999926, 0.2809999999999988, 0.2925000000000004, 0.2082499999999996, 0.2624999999999993, 0.2024999999999988, 0.3122499999999988, 0.2309999999999981, 0.24074999999999847, 0.29825000000000124, 0.2997499999999995, 0.1894999999999989, 0.25150000000000006, 0.3207500000000003, 0.33000000000000007, 0.5550000000000006, 0.3435000000000006, 0.33000000000000096, 0.4430000000000005, 0.29024999999999856], zp_timestamp='2025-12-26T01:22:00')
2025-12-26T03:25:42.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-26T03:25:42.166 [DEBUG] [Thread-23550] [transport.py] [_log()] starting thread (client mode): 0xb6b14790
2025-12-26T03:25:42.166 [DEBUG] [Thread-23550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:25:42.181 [DEBUG] [Thread-23550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:25:42.181 [INFO] [Thread-23550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:25:42.189 [DEBUG] [Thread-23550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] client lang: <none>
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] server lang: <none>
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] kex follows: False
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] Compression: none
2025-12-26T03:25:42.190 [DEBUG] [Thread-23550] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:25:42.252 [DEBUG] [Thread-23550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:25:42.252 [DEBUG] [Thread-23550] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:25:42.253 [DEBUG] [Thread-23550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:25:42.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:25:42.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:25:42.315 [DEBUG] [Thread-23550] [transport.py] [_log()] userauth is OK
2025-12-26T03:25:42.316 [DEBUG] [Thread-23550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:25:42.316 [DEBUG] [Thread-23550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:25:42.316 [DEBUG] [Thread-23550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:25:42.316 [DEBUG] [Thread-23550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:25:42.337 [INFO] [Thread-23550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:25:42.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-26T03:25:42.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:25:43.133 [DEBUG] [Thread-23550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:25:43.133 [DEBUG] [Thread-23550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:25:43.181 [DEBUG] [Thread-23550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:25:43.181 [DEBUG] [Thread-23550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:25:43.190 [DEBUG] [Thread-23550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:25:43.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:25:43.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:25:43.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:25:43.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:25:43.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:25:43.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:25:43.228 [DEBUG] [Thread-23550] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:25:44.522 [DEBUG] [Thread-23552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:51.401 [DEBUG] [Thread-23553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:59.516 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:59.516 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:25:59.569 [DEBUG] [Thread-23554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:13.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:26:13.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:26:13.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-26T03:26:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 25, 55), 2.36, 85.55, 0.0, 20.82, 11.74, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:26:13.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:25:55
2025-12-26T03:26:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:26:14.235 [DEBUG] [Thread-23555] [transport.py] [_log()] starting thread (client mode): 0xb6b177c0
2025-12-26T03:26:14.235 [DEBUG] [Thread-23555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:26:14.256 [DEBUG] [Thread-23555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:26:14.256 [INFO] [Thread-23555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:26:14.259 [DEBUG] [Thread-23555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:26:14.259 [DEBUG] [Thread-23555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:26:14.259 [DEBUG] [Thread-23555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] client lang: <none>
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] server lang: <none>
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] kex follows: False
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] Compression: none
2025-12-26T03:26:14.260 [DEBUG] [Thread-23555] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:26:14.278 [DEBUG] [Thread-23555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:26:14.279 [DEBUG] [Thread-23555] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:26:14.279 [DEBUG] [Thread-23555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:26:14.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:26:14.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:26:14.281 [DEBUG] [Thread-23555] [transport.py] [_log()] userauth is OK
2025-12-26T03:26:14.281 [DEBUG] [Thread-23555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:26:14.281 [DEBUG] [Thread-23555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:26:14.281 [DEBUG] [Thread-23555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:26:14.281 [DEBUG] [Thread-23555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:26:14.299 [INFO] [Thread-23555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:26:14.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:26:14.600 [DEBUG] [Thread-23557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:14.896 [DEBUG] [Thread-23555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:26:14.897 [DEBUG] [Thread-23555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:26:14.897 [DEBUG] [Thread-23555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:26:14.938 [DEBUG] [Thread-23555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:26:14.938 [DEBUG] [Thread-23555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:26:14.942 [DEBUG] [Thread-23555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:26:14.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:26:14.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:26:14.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:26:14.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:26:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:26:14.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:26:14.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:26:14.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:26:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:26:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.059432 -999.00  +11.70  12.79     87   +9.70 1 1 1 2 1     0    0 1.51 -27.71 ZNESW 12.8 12.8 162.6 14.6 12.5 -21.5 12.3 -21.3 12.2 -19.6 12.4 -20.7
2025-12-26T03:26:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:26:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:26:14.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.059432
2025-12-26T03:26:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:26:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:26:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:26:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:26:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:26:14.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:25:55', tmtdew=2.36, humidity=85.55, cloud=0.0, wind=20.82, temperature=11.74, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:25:34.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:25:00')
2025-12-26T03:26:14.971 [DEBUG] [Thread-23555] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:26:15.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-26T03:26:15.064 [DEBUG] [Thread-23559] [transport.py] [_log()] starting thread (client mode): 0xb6b17bb0
2025-12-26T03:26:15.065 [DEBUG] [Thread-23559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:26:15.079 [DEBUG] [Thread-23559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:26:15.079 [INFO] [Thread-23559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:26:15.086 [DEBUG] [Thread-23559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] client lang: <none>
2025-12-26T03:26:15.087 [DEBUG] [Thread-23559] [transport.py] [_log()] server lang: <none>
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] kex follows: False
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] Compression: none
2025-12-26T03:26:15.088 [DEBUG] [Thread-23559] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:26:15.145 [DEBUG] [Thread-23559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:26:15.145 [DEBUG] [Thread-23559] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:26:15.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:26:15.146 [DEBUG] [Thread-23559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:26:15.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:26:15.201 [DEBUG] [Thread-23559] [transport.py] [_log()] userauth is OK
2025-12-26T03:26:15.202 [DEBUG] [Thread-23559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:26:15.202 [DEBUG] [Thread-23559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:26:15.202 [DEBUG] [Thread-23559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:26:15.202 [DEBUG] [Thread-23559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:26:15.223 [INFO] [Thread-23559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:26:15.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-26T03:26:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:26:16.024 [DEBUG] [Thread-23559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:26:16.024 [DEBUG] [Thread-23559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:26:16.072 [DEBUG] [Thread-23559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:26:16.072 [DEBUG] [Thread-23559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:26:16.082 [DEBUG] [Thread-23559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:26:16.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:26:16.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-26T03:26:16.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-26T03:26:16.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:26:16.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:26:16.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:26:16.119 [DEBUG] [Thread-23559] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:26:29.633 [DEBUG] [Thread-23561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:44.681 [DEBUG] [Thread-23562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:46.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:26:46.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:26:46.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:26:46.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 26, 27), 2.35, 85.58, 0.0, 18.56, 11.76, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:26:46.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:26:27
2025-12-26T03:26:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:26:47.098 [DEBUG] [Thread-23563] [transport.py] [_log()] starting thread (client mode): 0xb6b141f0
2025-12-26T03:26:47.098 [DEBUG] [Thread-23563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:26:47.119 [DEBUG] [Thread-23563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:26:47.119 [INFO] [Thread-23563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:26:47.122 [DEBUG] [Thread-23563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] client lang: <none>
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] server lang: <none>
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] kex follows: False
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] Compression: none
2025-12-26T03:26:47.123 [DEBUG] [Thread-23563] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:26:47.140 [DEBUG] [Thread-23563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:26:47.141 [DEBUG] [Thread-23563] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:26:47.141 [DEBUG] [Thread-23563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:26:47.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:26:47.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:26:47.143 [DEBUG] [Thread-23563] [transport.py] [_log()] userauth is OK
2025-12-26T03:26:47.143 [DEBUG] [Thread-23563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:26:47.143 [DEBUG] [Thread-23563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:26:47.143 [DEBUG] [Thread-23563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:26:47.143 [DEBUG] [Thread-23563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:26:47.179 [INFO] [Thread-23563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:26:47.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:26:47.828 [DEBUG] [Thread-23563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:26:47.828 [DEBUG] [Thread-23563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:26:47.829 [DEBUG] [Thread-23563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:26:47.869 [DEBUG] [Thread-23563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:26:47.869 [DEBUG] [Thread-23563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:26:47.872 [DEBUG] [Thread-23563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:26:47.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:26:47.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:26:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:26:47.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:26:47.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:26:47.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:26:47.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:26:47.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:26:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:26:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.059780 -999.00  +11.70  11.85     87   +9.70 1 1 1 2 1     0    0 1.41 -29.90 ZNESW 11.8 11.8 163.6 16.6 12.5 -21.5 12.3 -21.1 12.1 -19.5 12.4 -20.6
2025-12-26T03:26:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:26:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:26:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.059780
2025-12-26T03:26:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:26:47.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:26:47.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:26:47.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:26:47.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:26:47.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:26:27', tmtdew=2.35, humidity=85.58, cloud=0.0, wind=18.56, temperature=11.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:26:04.992', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:25:00')
2025-12-26T03:26:47.898 [DEBUG] [Thread-23563] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:26:47.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-26T03:26:51.460 [DEBUG] [Thread-23566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:59.717 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:59.718 [DEBUG] [Thread-23567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:26:59.719 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:14.759 [DEBUG] [Thread-23568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:29.791 [DEBUG] [Thread-23569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:44.829 [DEBUG] [Thread-23570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:51.517 [DEBUG] [Thread-23571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:59.862 [DEBUG] [Thread-23572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:59.919 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:27:59.921 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:14.895 [DEBUG] [Thread-23573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:17.021 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:20.141 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:25.181 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:29.933 [DEBUG] [Thread-23574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:30.560 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:40.085 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:44.473 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:44.966 [DEBUG] [Thread-23575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:28:51.585 [DEBUG] [Thread-23576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:00.002 [DEBUG] [Thread-23577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:00.126 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:00.127 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:03.189 [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-26T03:29:03.878 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:08.250 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:15.035 [DEBUG] [Thread-23578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:15.253 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:19.643 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:30.066 [DEBUG] [Thread-23579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:33.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:29:33.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:29:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:29:33.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 29, 8), 2.22, 85.76, 0.0, 19.73, 11.64, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:29:33.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:29:08
2025-12-26T03:29:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:29:34.222 [DEBUG] [Thread-23580] [transport.py] [_log()] starting thread (client mode): 0xb6b14580
2025-12-26T03:29:34.222 [DEBUG] [Thread-23580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:29:34.242 [DEBUG] [Thread-23580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:29:34.243 [INFO] [Thread-23580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] client lang: <none>
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] server lang: <none>
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] kex follows: False
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] Compression: none
2025-12-26T03:29:34.246 [DEBUG] [Thread-23580] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:29:34.265 [DEBUG] [Thread-23580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:29:34.266 [DEBUG] [Thread-23580] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:29:34.276 [DEBUG] [Thread-23580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:29:34.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:29:34.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:29:34.278 [DEBUG] [Thread-23580] [transport.py] [_log()] userauth is OK
2025-12-26T03:29:34.278 [DEBUG] [Thread-23580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:29:34.279 [DEBUG] [Thread-23580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:29:34.279 [DEBUG] [Thread-23580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:29:34.279 [DEBUG] [Thread-23580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:29:34.296 [INFO] [Thread-23580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:29:34.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:29:34.928 [DEBUG] [Thread-23580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:29:34.928 [DEBUG] [Thread-23580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:29:34.929 [DEBUG] [Thread-23580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:29:34.969 [DEBUG] [Thread-23580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:29:34.969 [DEBUG] [Thread-23580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:29:34.973 [DEBUG] [Thread-23580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:29:34.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:29:34.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:29:34.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:29:34.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:29:34.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:29:34.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:29:34.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:29:34.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:29:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:29:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.061863 -999.00  +11.70  12.86     87   +9.80 1 1 1 2 1     0    0 0.81 -45.83 ZNESW 12.9 12.9 154.6 18.1 12.4 -21.6 12.3 -21.4 12.0 -19.5 12.3 -20.6
2025-12-26T03:29:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:29:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:29:34.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.061863
2025-12-26T03:29:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:29:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:29:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:29:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:29:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:29:34.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:29:08', tmtdew=2.22, humidity=85.76, cloud=0.0, wind=19.73, temperature=11.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:29:04.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:27:00')
2025-12-26T03:29:34.999 [DEBUG] [Thread-23580] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:29:35.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-26T03:29:35.092 [DEBUG] [Thread-23583] [transport.py] [_log()] starting thread (client mode): 0xb6b17970
2025-12-26T03:29:35.092 [DEBUG] [Thread-23583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:29:35.107 [DEBUG] [Thread-23583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:29:35.107 [INFO] [Thread-23583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] client lang: <none>
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] server lang: <none>
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] kex follows: False
2025-12-26T03:29:35.115 [DEBUG] [Thread-23583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:29:35.116 [DEBUG] [Thread-23583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:29:35.116 [DEBUG] [Thread-23583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:29:35.116 [DEBUG] [Thread-23583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:29:35.116 [DEBUG] [Thread-23583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:29:35.116 [DEBUG] [Thread-23583] [transport.py] [_log()] Compression: none
2025-12-26T03:29:35.116 [DEBUG] [Thread-23583] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:29:35.177 [DEBUG] [Thread-23583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:29:35.178 [DEBUG] [Thread-23583] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:29:35.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:29:35.179 [DEBUG] [Thread-23583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:29:35.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:29:35.233 [DEBUG] [Thread-23583] [transport.py] [_log()] userauth is OK
2025-12-26T03:29:35.234 [DEBUG] [Thread-23583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:29:35.234 [DEBUG] [Thread-23583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:29:35.234 [DEBUG] [Thread-23583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:29:35.234 [DEBUG] [Thread-23583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:29:35.254 [INFO] [Thread-23583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:29:35.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-26T03:29:35.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:29:36.059 [DEBUG] [Thread-23583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:29:36.060 [DEBUG] [Thread-23583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:29:36.109 [DEBUG] [Thread-23583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:29:36.109 [DEBUG] [Thread-23583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:29:36.120 [DEBUG] [Thread-23583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:29:36.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:29:36.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-26T03:29:36.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-26T03:29:36.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:29:36.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:29:36.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:29:36.155 [DEBUG] [Thread-23583] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:29:45.103 [DEBUG] [Thread-23585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:29:51.654 [DEBUG] [Thread-23586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:00.160 [DEBUG] [Thread-23587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:00.331 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:00.333 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:30:06.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:30:06.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-26T03:30:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 29, 40), 2.26, 86.3, 0.0, 22.23, 11.64, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:30:06.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:29:40
2025-12-26T03:30:07.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:30:07.161 [DEBUG] [Thread-23588] [transport.py] [_log()] starting thread (client mode): 0xb6b22d10
2025-12-26T03:30:07.161 [DEBUG] [Thread-23588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:30:07.181 [DEBUG] [Thread-23588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:30:07.181 [INFO] [Thread-23588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:30:07.184 [DEBUG] [Thread-23588] [transport.py] [_log()] client lang: <none>
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] server lang: <none>
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] kex follows: False
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] Compression: none
2025-12-26T03:30:07.185 [DEBUG] [Thread-23588] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:30:07.201 [DEBUG] [Thread-23588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:30:07.202 [DEBUG] [Thread-23588] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:30:07.202 [DEBUG] [Thread-23588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:30:07.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:30:07.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:30:07.204 [DEBUG] [Thread-23588] [transport.py] [_log()] userauth is OK
2025-12-26T03:30:07.204 [DEBUG] [Thread-23588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:30:07.204 [DEBUG] [Thread-23588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:30:07.204 [DEBUG] [Thread-23588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:30:07.204 [DEBUG] [Thread-23588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:30:07.229 [INFO] [Thread-23588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:30:07.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:30:15.192 [DEBUG] [Thread-23590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:16.978 [DEBUG] [Thread-23588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:30:16.978 [DEBUG] [Thread-23588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:30:16.979 [DEBUG] [Thread-23588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:30:17.019 [DEBUG] [Thread-23588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:30:17.020 [DEBUG] [Thread-23588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:30:17.023 [DEBUG] [Thread-23588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:30:17.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:30:17.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:30:17.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:30:17.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:30:17.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:30:17.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:30:17.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:30:17.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:30:17.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:30:17.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.062210 -999.00  +11.70  15.81     88   +9.80 1 1 1 3 1     0    0 0.86 -45.21 ZNESW 15.8 15.8 157.8 20.1 12.4 -21.7 12.3 -21.4 12.0 -19.6 12.3 -20.6
2025-12-26T03:30:17.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:30:17.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:30:17.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.062210
2025-12-26T03:30:17.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:30:17.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:30:17.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:30:17.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:30:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:30:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:29:40', tmtdew=2.26, humidity=86.3, cloud=0.0, wind=22.23, temperature=11.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:29:34.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:27:00')
2025-12-26T03:30:17.134 [DEBUG] [Thread-23588] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:30:17.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-26T03:30:17.239 [DEBUG] [Thread-23592] [transport.py] [_log()] starting thread (client mode): 0xb6b20280
2025-12-26T03:30:17.239 [DEBUG] [Thread-23592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:30:17.255 [DEBUG] [Thread-23592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:30:17.255 [INFO] [Thread-23592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:17.263 [DEBUG] [Thread-23592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] client lang: <none>
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] server lang: <none>
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] kex follows: False
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:30:17.264 [DEBUG] [Thread-23592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:30:17.265 [DEBUG] [Thread-23592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:30:17.265 [DEBUG] [Thread-23592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:30:17.265 [DEBUG] [Thread-23592] [transport.py] [_log()] Compression: none
2025-12-26T03:30:17.265 [DEBUG] [Thread-23592] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:30:17.322 [DEBUG] [Thread-23592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:30:17.322 [DEBUG] [Thread-23592] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:30:17.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:30:17.324 [DEBUG] [Thread-23592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:30:17.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:30:17.381 [DEBUG] [Thread-23592] [transport.py] [_log()] userauth is OK
2025-12-26T03:30:17.381 [DEBUG] [Thread-23592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:30:17.381 [DEBUG] [Thread-23592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:30:17.382 [DEBUG] [Thread-23592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:30:17.382 [DEBUG] [Thread-23592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:30:17.401 [INFO] [Thread-23592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:30:17.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-26T03:30:17.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:30:18.210 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:18.246 [DEBUG] [Thread-23592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:30:18.247 [DEBUG] [Thread-23592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:30:18.294 [DEBUG] [Thread-23592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:30:18.294 [DEBUG] [Thread-23592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:30:18.304 [DEBUG] [Thread-23592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:30:18.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:30:18.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-26T03:30: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-26T03:30:18.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:30:18.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:30:18.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:30:18.342 [DEBUG] [Thread-23592] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:30:21.257 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:30.231 [DEBUG] [Thread-23594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:45.287 [DEBUG] [Thread-23595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:30:48.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:30:48.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:30:48.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-26T03:30:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 30, 44), 2.2, 86.36, 0.0, 23.13, 11.57, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:30:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:30:44
2025-12-26T03:30:49.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:30:49.363 [DEBUG] [Thread-23596] [transport.py] [_log()] starting thread (client mode): 0xb6b163b0
2025-12-26T03:30:49.364 [DEBUG] [Thread-23596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:30:49.383 [DEBUG] [Thread-23596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:30:49.383 [INFO] [Thread-23596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] client lang: <none>
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] server lang: <none>
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] kex follows: False
2025-12-26T03:30:49.386 [DEBUG] [Thread-23596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:30:49.387 [DEBUG] [Thread-23596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:30:49.387 [DEBUG] [Thread-23596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:30:49.387 [DEBUG] [Thread-23596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:30:49.387 [DEBUG] [Thread-23596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:30:49.387 [DEBUG] [Thread-23596] [transport.py] [_log()] Compression: none
2025-12-26T03:30:49.387 [DEBUG] [Thread-23596] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:30:49.403 [DEBUG] [Thread-23596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:30:49.404 [DEBUG] [Thread-23596] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:30:49.404 [DEBUG] [Thread-23596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:30:49.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:30:49.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:30:49.444 [DEBUG] [Thread-23596] [transport.py] [_log()] userauth is OK
2025-12-26T03:30:49.445 [DEBUG] [Thread-23596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:30:49.445 [DEBUG] [Thread-23596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:30:49.445 [DEBUG] [Thread-23596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:30:49.445 [DEBUG] [Thread-23596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:30:49.480 [INFO] [Thread-23596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:30:49.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:30:50.129 [DEBUG] [Thread-23596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:30:50.130 [DEBUG] [Thread-23596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:30:50.130 [DEBUG] [Thread-23596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:30:50.170 [DEBUG] [Thread-23596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:30:50.170 [DEBUG] [Thread-23596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:30:50.173 [DEBUG] [Thread-23596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:30:50.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:30:50.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:30:50.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:30:50.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:30:50.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:30:50.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:30:50.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:30:50.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:30:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:30:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.062557 -999.00  +11.70  20.08     88   +9.80 1 1 1 3 1     0    0 0.96 -41.54 ZNESW 20.1 20.1 153.8 23.1 12.4 -21.7 12.2 -21.5 12.0 -19.7 12.3 -20.7
2025-12-26T03:30:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:30:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:30:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.062557
2025-12-26T03:30:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:30:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:30:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:30:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:30:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:30:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:30:44', tmtdew=2.2, humidity=86.36, cloud=0.0, wind=23.13, temperature=11.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:30:04.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:27:00')
2025-12-26T03:30:50.196 [DEBUG] [Thread-23596] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:30:50.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-26T03:30:50.291 [DEBUG] [Thread-23599] [transport.py] [_log()] starting thread (client mode): 0xb6b17d00
2025-12-26T03:30:50.291 [DEBUG] [Thread-23599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:30:50.305 [DEBUG] [Thread-23599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:30:50.305 [INFO] [Thread-23599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:30:50.313 [DEBUG] [Thread-23599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:30:50.313 [DEBUG] [Thread-23599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:30:50.313 [DEBUG] [Thread-23599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:30:50.313 [DEBUG] [Thread-23599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] client lang: <none>
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] server lang: <none>
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] kex follows: False
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:30:50.314 [DEBUG] [Thread-23599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:30:50.315 [DEBUG] [Thread-23599] [transport.py] [_log()] Compression: none
2025-12-26T03:30:50.315 [DEBUG] [Thread-23599] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:30:50.369 [DEBUG] [Thread-23599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:30:50.370 [DEBUG] [Thread-23599] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:30:50.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:30:50.371 [DEBUG] [Thread-23599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:30:50.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:30:50.425 [DEBUG] [Thread-23599] [transport.py] [_log()] userauth is OK
2025-12-26T03:30:50.426 [DEBUG] [Thread-23599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:30:50.426 [DEBUG] [Thread-23599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:30:50.426 [DEBUG] [Thread-23599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:30:50.426 [DEBUG] [Thread-23599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:30:50.444 [INFO] [Thread-23599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:30:50.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:30:50.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:30:51.295 [DEBUG] [Thread-23599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:30:51.295 [DEBUG] [Thread-23599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:30:51.347 [DEBUG] [Thread-23599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:30:51.347 [DEBUG] [Thread-23599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:30:51.356 [DEBUG] [Thread-23599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:30:51.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:30:51.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:30:51.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-26T03:30:51.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:30:51.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:30:51.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:30:51.398 [DEBUG] [Thread-23599] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:30:51.713 [DEBUG] [Thread-23601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:00.320 [DEBUG] [Thread-23602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:00.534 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:00.536 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:15.366 [DEBUG] [Thread-23603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:31:21.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:31:21.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-26T03:31:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 31, 16), 2.17, 86.54, 0.0, 22.66, 11.59, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:31:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:31:16
2025-12-26T03:31:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:31:22.405 [DEBUG] [Thread-23604] [transport.py] [_log()] starting thread (client mode): 0xb6b22500
2025-12-26T03:31:22.405 [DEBUG] [Thread-23604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:31:22.425 [DEBUG] [Thread-23604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:31:22.425 [INFO] [Thread-23604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:31:22.428 [DEBUG] [Thread-23604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:31:22.429 [DEBUG] [Thread-23604] [transport.py] [_log()] client lang: <none>
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] server lang: <none>
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] kex follows: False
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:31:22.430 [DEBUG] [Thread-23604] [transport.py] [_log()] Compression: none
2025-12-26T03:31:22.431 [DEBUG] [Thread-23604] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:31:22.447 [DEBUG] [Thread-23604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:31:22.448 [DEBUG] [Thread-23604] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:31:22.448 [DEBUG] [Thread-23604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:31:22.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:31:22.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:31:22.452 [DEBUG] [Thread-23604] [transport.py] [_log()] userauth is OK
2025-12-26T03:31:22.452 [DEBUG] [Thread-23604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:31:22.452 [DEBUG] [Thread-23604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:31:22.452 [DEBUG] [Thread-23604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:31:22.452 [DEBUG] [Thread-23604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:31:22.470 [INFO] [Thread-23604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:31:22.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:31:23.214 [DEBUG] [Thread-23604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:31:23.214 [DEBUG] [Thread-23604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:31:23.215 [DEBUG] [Thread-23604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:31:23.255 [DEBUG] [Thread-23604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:31:23.255 [DEBUG] [Thread-23604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:31:23.258 [DEBUG] [Thread-23604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:31:23.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:31:23.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:31:23.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:31:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:31:23.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:31:23.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:31:23.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:31:23.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:31:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:31:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.062904 -999.00  +11.70  12.66     88   +9.80 1 1 1 3 1     0    0 0.90 -42.88 ZNESW 12.7 12.7 150.8 21.5 12.3 -21.6 12.2 -21.5 12.0 -19.7 12.3 -20.7
2025-12-26T03:31:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:31:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:31:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.062904
2025-12-26T03:31:23.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:31:23.284 [DEBUG] [Thread-23604] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:31:23.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:31:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:31:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:31:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:31:23.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:31:16', tmtdew=2.17, humidity=86.54, cloud=0.0, wind=22.66, temperature=11.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:30:34.906', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:27:00')
2025-12-26T03:31:23.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-26T03:31:23.377 [DEBUG] [Thread-23607] [transport.py] [_log()] starting thread (client mode): 0xb6b23790
2025-12-26T03:31:23.377 [DEBUG] [Thread-23607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:31:23.391 [DEBUG] [Thread-23607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:31:23.391 [INFO] [Thread-23607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] client lang: <none>
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] server lang: <none>
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] kex follows: False
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:31:23.399 [DEBUG] [Thread-23607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:31:23.400 [DEBUG] [Thread-23607] [transport.py] [_log()] Compression: none
2025-12-26T03:31:23.400 [DEBUG] [Thread-23607] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:31:23.457 [DEBUG] [Thread-23607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:31:23.458 [DEBUG] [Thread-23607] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:31:23.458 [DEBUG] [Thread-23607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:31:23.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:31:23.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:31:23.513 [DEBUG] [Thread-23607] [transport.py] [_log()] userauth is OK
2025-12-26T03:31:23.513 [DEBUG] [Thread-23607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:31:23.514 [DEBUG] [Thread-23607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:31:23.514 [DEBUG] [Thread-23607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:31:23.514 [DEBUG] [Thread-23607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:31:23.531 [INFO] [Thread-23607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:31:23.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-26T03:31:23.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:31:24.327 [DEBUG] [Thread-23607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:31:24.327 [DEBUG] [Thread-23607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:31:24.375 [DEBUG] [Thread-23607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:31:24.375 [DEBUG] [Thread-23607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:31:24.384 [DEBUG] [Thread-23607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:31:24.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:31:24.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-26T03:31: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-26T03:31:24.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:31:24.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:31:24.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:31:24.421 [DEBUG] [Thread-23607] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:31:30.399 [DEBUG] [Thread-23609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:45.449 [DEBUG] [Thread-23610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:51.765 [DEBUG] [Thread-23611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:31:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:31:54.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:31:54.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-26T03:31:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 31, 48), 2.13, 86.51, 0.0, 21.44, 11.62, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:31:55.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:31:48
2025-12-26T03:31:55.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:31:55.428 [DEBUG] [Thread-23612] [transport.py] [_log()] starting thread (client mode): 0xb6b212d0
2025-12-26T03:31:55.428 [DEBUG] [Thread-23612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:31:55.448 [DEBUG] [Thread-23612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:31:55.448 [INFO] [Thread-23612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:31:55.451 [DEBUG] [Thread-23612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] client lang: <none>
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] server lang: <none>
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] kex follows: False
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:31:55.452 [DEBUG] [Thread-23612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:31:55.453 [DEBUG] [Thread-23612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:31:55.453 [DEBUG] [Thread-23612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:31:55.453 [DEBUG] [Thread-23612] [transport.py] [_log()] Compression: none
2025-12-26T03:31:55.453 [DEBUG] [Thread-23612] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:31:55.464 [DEBUG] [Thread-23612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:31:55.465 [DEBUG] [Thread-23612] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:31:55.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:31:55.467 [DEBUG] [Thread-23612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:31:55.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:31:55.468 [DEBUG] [Thread-23612] [transport.py] [_log()] userauth is OK
2025-12-26T03:31:55.469 [DEBUG] [Thread-23612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:31:55.469 [DEBUG] [Thread-23612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:31:55.469 [DEBUG] [Thread-23612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:31:55.469 [DEBUG] [Thread-23612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:31:55.506 [INFO] [Thread-23612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:31:55.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:31:56.151 [DEBUG] [Thread-23612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:31:56.152 [DEBUG] [Thread-23612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:31:56.152 [DEBUG] [Thread-23612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:31:56.192 [DEBUG] [Thread-23612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:31:56.192 [DEBUG] [Thread-23612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:31:56.196 [DEBUG] [Thread-23612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:31:56.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:31:56.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:31:56.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:31:56.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:31:56.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:31:56.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:31:56.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:31:56.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:31:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:31:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.063252 -999.00  +11.70  16.91     88   +9.80 1 1 1 3 1     0    0 0.61 -51.78 ZNESW 16.9 16.9 143.2 19.9 12.3 -21.7 12.2 -21.3 12.0 -19.7 12.3 -20.7
2025-12-26T03:31:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:31:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:31:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.063252
2025-12-26T03:31:56.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:31:56.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:31:56.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:31:56.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:31:56.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:31:56.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:31:48', tmtdew=2.13, humidity=86.51, cloud=0.0, wind=21.44, temperature=11.62, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:31:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.17375000000000007, 0.1567500000000006, 0.3332499999999996, 0.20350000000000001, 0.1305000000000014, 0.22625000000000028, 0.23199999999999932, 0.3332500000000014, 0.2734999999999985, 0.18050000000000033, 0.1817499999999992, 0.2140000000000004, 0.1899999999999995, 0.23574999999999946, 0.3434999999999988, 0.2959999999999994, 0.20175000000000054, 0.25399999999999956, 0.22499999999999964, 0.3092499999999987, 0.2909999999999986, 0.3067499999999992, 0.3462500000000013, 0.32775, 0.23049999999999926, 0.2494999999999994, 0.34375, 0.3645000000000005, 0.4325000000000001, 0.35300000000000065, 0.38500000000000245, 0.5370000000000008, 0.2987499999999992], zp_timestamp='2025-12-26T01:27:00')
2025-12-26T03:31:56.224 [DEBUG] [Thread-23612] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:31:56.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-26T03:31:56.328 [DEBUG] [Thread-23615] [transport.py] [_log()] starting thread (client mode): 0xb6b20d90
2025-12-26T03:31:56.328 [DEBUG] [Thread-23615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:31:56.343 [DEBUG] [Thread-23615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:31:56.343 [INFO] [Thread-23615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] client lang: <none>
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] server lang: <none>
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] kex follows: False
2025-12-26T03:31:56.350 [DEBUG] [Thread-23615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:31:56.351 [DEBUG] [Thread-23615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:31:56.351 [DEBUG] [Thread-23615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:31:56.351 [DEBUG] [Thread-23615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:31:56.351 [DEBUG] [Thread-23615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:31:56.351 [DEBUG] [Thread-23615] [transport.py] [_log()] Compression: none
2025-12-26T03:31:56.351 [DEBUG] [Thread-23615] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:31:56.409 [DEBUG] [Thread-23615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:31:56.410 [DEBUG] [Thread-23615] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:31:56.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:31:56.411 [DEBUG] [Thread-23615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:31:56.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:31:56.465 [DEBUG] [Thread-23615] [transport.py] [_log()] userauth is OK
2025-12-26T03:31:56.465 [DEBUG] [Thread-23615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:31:56.465 [DEBUG] [Thread-23615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:31:56.466 [DEBUG] [Thread-23615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:31:56.466 [DEBUG] [Thread-23615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:31:56.484 [INFO] [Thread-23615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:31:56.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:31:56.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:31:57.272 [DEBUG] [Thread-23615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:31:57.272 [DEBUG] [Thread-23615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:31:57.320 [DEBUG] [Thread-23615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:31:57.320 [DEBUG] [Thread-23615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:31:57.330 [DEBUG] [Thread-23615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:31:57.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:31:57.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-26T03:31:57.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:31:57.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:31:57.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:31:57.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:31:57.366 [DEBUG] [Thread-23615] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:32:00.484 [DEBUG] [Thread-23617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:32:00.734 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:32:00.736 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:32:15.539 [DEBUG] [Thread-23618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:32:27.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:32:27.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:32:27.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-26T03:32:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 32, 20), 2.12, 86.56, 0.0, 21.32, 11.59, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:32:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:32:20
2025-12-26T03:32:28.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:32:28.343 [DEBUG] [Thread-23619] [transport.py] [_log()] starting thread (client mode): 0xb6b20f70
2025-12-26T03:32:28.343 [DEBUG] [Thread-23619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:32:28.362 [DEBUG] [Thread-23619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:32:28.362 [INFO] [Thread-23619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] client lang: <none>
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] server lang: <none>
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] kex follows: False
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] Compression: none
2025-12-26T03:32:28.366 [DEBUG] [Thread-23619] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:32:28.381 [DEBUG] [Thread-23619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:32:28.381 [DEBUG] [Thread-23619] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:32:28.381 [DEBUG] [Thread-23619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:32:28.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:32:28.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:32:28.382 [DEBUG] [Thread-23619] [transport.py] [_log()] userauth is OK
2025-12-26T03:32:28.382 [DEBUG] [Thread-23619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:32:28.382 [DEBUG] [Thread-23619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:32:28.382 [DEBUG] [Thread-23619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:32:28.382 [DEBUG] [Thread-23619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:32:28.398 [INFO] [Thread-23619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:32:28.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:32:29.118 [DEBUG] [Thread-23619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:32:29.118 [DEBUG] [Thread-23619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:32:29.118 [DEBUG] [Thread-23619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:32:29.158 [DEBUG] [Thread-23619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:32:29.158 [DEBUG] [Thread-23619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:32:29.161 [DEBUG] [Thread-23619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:32:29.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:32:29.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:32:29.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:32:29.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:32:29.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:32:29.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:32:29.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.063946 -999.00  +11.60  12.63     88   +9.80 1 1 1 3 1     0    0 0.48 -54.73 ZNESW 12.6 12.6 146.2 18.1 12.4 -21.8 12.2 -21.4 12.0 -19.7 12.3 -20.7
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.063946
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:32:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:32:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:32:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:32:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:32:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:32:20', tmtdew=2.12, humidity=86.56, cloud=0.0, wind=21.32, temperature=11.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:32:04.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:31:00')
2025-12-26T03:32:29.178 [DEBUG] [Thread-23619] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:32:29.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-26T03:32:29.262 [DEBUG] [Thread-23622] [transport.py] [_log()] starting thread (client mode): 0xb6b15450
2025-12-26T03:32:29.262 [DEBUG] [Thread-23622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:32:29.277 [DEBUG] [Thread-23622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:32:29.277 [INFO] [Thread-23622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] client lang: <none>
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] server lang: <none>
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] kex follows: False
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] Compression: none
2025-12-26T03:32:29.285 [DEBUG] [Thread-23622] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:32:29.339 [DEBUG] [Thread-23622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:32:29.339 [DEBUG] [Thread-23622] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:32:29.339 [DEBUG] [Thread-23622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:32:29.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:32:29.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:32:29.396 [DEBUG] [Thread-23622] [transport.py] [_log()] userauth is OK
2025-12-26T03:32:29.396 [DEBUG] [Thread-23622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:32:29.396 [DEBUG] [Thread-23622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:32:29.396 [DEBUG] [Thread-23622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:32:29.396 [DEBUG] [Thread-23622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:32:29.410 [INFO] [Thread-23622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:32:29.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:32:29.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:32:30.193 [DEBUG] [Thread-23622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:32:30.193 [DEBUG] [Thread-23622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:32:30.240 [DEBUG] [Thread-23622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:32:30.240 [DEBUG] [Thread-23622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:32:30.248 [DEBUG] [Thread-23622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:32:30.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:32:30.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-26T03:32:30.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:32:30.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:32:30.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:32:30.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:32:30.280 [DEBUG] [Thread-23622] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:32:30.570 [DEBUG] [Thread-23624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:32:45.609 [DEBUG] [Thread-23625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:32:51.833 [DEBUG] [Thread-23626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:33:00.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:33:00.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-26T03:33:00.641 [DEBUG] [Thread-23627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:00.936 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:00.937 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 32, 52), 2.1, 86.64, 0.0, 18.86, 11.57, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:33:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:32:52
2025-12-26T03:33:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:33:01.269 [DEBUG] [Thread-23628] [transport.py] [_log()] starting thread (client mode): 0xb6b16e60
2025-12-26T03:33:01.269 [DEBUG] [Thread-23628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:33:01.289 [DEBUG] [Thread-23628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:33:01.289 [INFO] [Thread-23628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] client lang: <none>
2025-12-26T03:33:01.292 [DEBUG] [Thread-23628] [transport.py] [_log()] server lang: <none>
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] kex follows: False
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] Compression: none
2025-12-26T03:33:01.293 [DEBUG] [Thread-23628] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:33:01.303 [DEBUG] [Thread-23628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:33:01.304 [DEBUG] [Thread-23628] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:33:01.305 [DEBUG] [Thread-23628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:33:01.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:33:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:33:01.308 [DEBUG] [Thread-23628] [transport.py] [_log()] userauth is OK
2025-12-26T03:33:01.308 [DEBUG] [Thread-23628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:33:01.308 [DEBUG] [Thread-23628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:33:01.308 [DEBUG] [Thread-23628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:33:01.308 [DEBUG] [Thread-23628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:33:01.328 [INFO] [Thread-23628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:33:01.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:33:01.947 [DEBUG] [Thread-23628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:33:01.947 [DEBUG] [Thread-23628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:33:01.947 [DEBUG] [Thread-23628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:33:01.988 [DEBUG] [Thread-23628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:33:01.988 [DEBUG] [Thread-23628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:33:01.991 [DEBUG] [Thread-23628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:33:02.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:33:02.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:33:02.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:33:02.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:33:02.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:33:02.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:33:02.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:33:02.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:33:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:33:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.064293 -999.00  +11.60  15.24     88   +9.80 1 1 1 3 1     0    0 0.60 -49.58 ZNESW 15.2 15.2 141.6 17.3 12.3 -21.6 12.2 -21.3 12.0 -19.8 12.3 -20.6
2025-12-26T03:33:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:33:02.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:33:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.064293
2025-12-26T03:33:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:33:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:33:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:33:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:33:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:33:02.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:32:52', tmtdew=2.1, humidity=86.64, cloud=0.0, wind=18.86, temperature=11.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:32:34.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:31:00')
2025-12-26T03:33:02.020 [DEBUG] [Thread-23628] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:33:02.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-26T03:33:02.118 [DEBUG] [Thread-23631] [transport.py] [_log()] starting thread (client mode): 0xbbfcff70
2025-12-26T03:33:02.118 [DEBUG] [Thread-23631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:33:02.132 [DEBUG] [Thread-23631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:33:02.132 [INFO] [Thread-23631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] client lang: <none>
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] server lang: <none>
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] kex follows: False
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:33:02.140 [DEBUG] [Thread-23631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:33:02.141 [DEBUG] [Thread-23631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:33:02.141 [DEBUG] [Thread-23631] [transport.py] [_log()] Compression: none
2025-12-26T03:33:02.141 [DEBUG] [Thread-23631] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:33:02.203 [DEBUG] [Thread-23631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:33:02.203 [DEBUG] [Thread-23631] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:33:02.204 [DEBUG] [Thread-23631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:33:02.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:33:02.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:33:02.261 [DEBUG] [Thread-23631] [transport.py] [_log()] userauth is OK
2025-12-26T03:33:02.262 [DEBUG] [Thread-23631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:33:02.262 [DEBUG] [Thread-23631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:33:02.262 [DEBUG] [Thread-23631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:33:02.262 [DEBUG] [Thread-23631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:33:02.287 [INFO] [Thread-23631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:33:02.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-26T03:33:02.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:33:03.163 [DEBUG] [Thread-23631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:33:03.164 [DEBUG] [Thread-23631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:33:03.212 [DEBUG] [Thread-23631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:33:03.213 [DEBUG] [Thread-23631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:33:03.222 [DEBUG] [Thread-23631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:33:03.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:33:03.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:33:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:33:03.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:33:03.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:33:03.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:33:03.258 [DEBUG] [Thread-23631] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:33:15.671 [DEBUG] [Thread-23633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:30.721 [DEBUG] [Thread-23634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:33.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:33:33.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:33: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-26T03:33:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 33, 24), 2.11, 86.63, 0.0, 18.17, 11.59, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:33:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:33:24
2025-12-26T03:33:34.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:33:34.268 [DEBUG] [Thread-23635] [transport.py] [_log()] starting thread (client mode): 0xb6b15660
2025-12-26T03:33:34.268 [DEBUG] [Thread-23635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:33:34.291 [DEBUG] [Thread-23635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:33:34.291 [INFO] [Thread-23635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:33:34.294 [DEBUG] [Thread-23635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:33:34.294 [DEBUG] [Thread-23635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:33:34.294 [DEBUG] [Thread-23635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:33:34.294 [DEBUG] [Thread-23635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] client lang: <none>
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] server lang: <none>
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] kex follows: False
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] Compression: none
2025-12-26T03:33:34.295 [DEBUG] [Thread-23635] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:33:34.311 [DEBUG] [Thread-23635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:33:34.312 [DEBUG] [Thread-23635] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:33:34.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:33:34.322 [DEBUG] [Thread-23635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:33:34.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:33:34.324 [DEBUG] [Thread-23635] [transport.py] [_log()] userauth is OK
2025-12-26T03:33:34.324 [DEBUG] [Thread-23635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:33:34.324 [DEBUG] [Thread-23635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:33:34.324 [DEBUG] [Thread-23635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:33:34.324 [DEBUG] [Thread-23635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:33:34.349 [INFO] [Thread-23635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:33:34.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:33:34.958 [DEBUG] [Thread-23635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:33:34.959 [DEBUG] [Thread-23635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:33:34.959 [DEBUG] [Thread-23635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:33:34.999 [DEBUG] [Thread-23635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:33:34.999 [DEBUG] [Thread-23635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:33:35.002 [DEBUG] [Thread-23635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:33:35.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:33:35.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:33:35.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:33:35.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:33:35.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:33:35.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:33:35.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:33:35.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:33:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:33:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.064640 -999.00  +11.60  13.92     88   +9.80 1 1 1 3 1     0    0 0.39 -58.33 ZNESW 13.9 13.9 138.0 15.4 12.3 -21.6 12.2 -21.3 12.0 -19.6 12.3 -20.7
2025-12-26T03:33:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:33:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:33:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.064640
2025-12-26T03:33:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:33:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:33:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:33:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:33:35.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:33:35.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:33:24', tmtdew=2.11, humidity=86.63, cloud=0.0, wind=18.17, temperature=11.59, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:33:04.896', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:31:00')
2025-12-26T03:33:35.025 [DEBUG] [Thread-23635] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:33:35.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:33:35.117 [DEBUG] [Thread-23638] [transport.py] [_log()] starting thread (client mode): 0xb6b239a0
2025-12-26T03:33:35.117 [DEBUG] [Thread-23638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:33:35.132 [DEBUG] [Thread-23638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:33:35.133 [INFO] [Thread-23638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:33:35.140 [DEBUG] [Thread-23638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] client lang: <none>
2025-12-26T03:33:35.141 [DEBUG] [Thread-23638] [transport.py] [_log()] server lang: <none>
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] kex follows: False
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] Compression: none
2025-12-26T03:33:35.142 [DEBUG] [Thread-23638] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:33:35.202 [DEBUG] [Thread-23638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:33:35.202 [DEBUG] [Thread-23638] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:33:35.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:33:35.203 [DEBUG] [Thread-23638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:33:35.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:33:35.262 [DEBUG] [Thread-23638] [transport.py] [_log()] userauth is OK
2025-12-26T03:33:35.262 [DEBUG] [Thread-23638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:33:35.262 [DEBUG] [Thread-23638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:33:35.263 [DEBUG] [Thread-23638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:33:35.263 [DEBUG] [Thread-23638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:33:35.282 [INFO] [Thread-23638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:33:35.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-26T03:33:35.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:33:36.109 [DEBUG] [Thread-23638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:33:36.109 [DEBUG] [Thread-23638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:33:36.157 [DEBUG] [Thread-23638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:33:36.157 [DEBUG] [Thread-23638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:33:36.166 [DEBUG] [Thread-23638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:33:36.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:33:36.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-26T03:33:36.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-26T03:33:36.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:33:36.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:33:36.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:33:36.206 [DEBUG] [Thread-23638] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:33:45.019 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:45.759 [DEBUG] [Thread-23640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:50.471 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:51.885 [DEBUG] [Thread-23641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:53.532 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:33:59.927 [DEBUG] [Thread-172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:00.804 [DEBUG] [Thread-23642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:01.136 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:01.137 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:06.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:34:06.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:34:06.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-26T03:34:06.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 33, 56), 2.08, 86.76, 0.0, 16.06, 11.57, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:34:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:33:56
2025-12-26T03:34:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:34:07.173 [DEBUG] [Thread-23643] [transport.py] [_log()] starting thread (client mode): 0xb6b21060
2025-12-26T03:34:07.173 [DEBUG] [Thread-23643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:34:07.194 [DEBUG] [Thread-23643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:34:07.194 [INFO] [Thread-23643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:34:07.195 [DEBUG] [Thread-23643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:34:07.195 [DEBUG] [Thread-23643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] client lang: <none>
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] server lang: <none>
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] kex follows: False
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] Compression: none
2025-12-26T03:34:07.196 [DEBUG] [Thread-23643] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:34:07.204 [DEBUG] [Thread-23643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:34:07.205 [DEBUG] [Thread-23643] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:34:07.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:34:07.205 [DEBUG] [Thread-23643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:34:07.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:34:07.207 [DEBUG] [Thread-23643] [transport.py] [_log()] userauth is OK
2025-12-26T03:34:07.207 [DEBUG] [Thread-23643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:34:07.207 [DEBUG] [Thread-23643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:34:07.208 [DEBUG] [Thread-23643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:34:07.208 [DEBUG] [Thread-23643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:34:07.232 [INFO] [Thread-23643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:34:07.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:34:07.832 [DEBUG] [Thread-23643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:34:07.832 [DEBUG] [Thread-23643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:34:07.833 [DEBUG] [Thread-23643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:34:07.873 [DEBUG] [Thread-23643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:34:07.873 [DEBUG] [Thread-23643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:34:07.875 [DEBUG] [Thread-23643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:34:07.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:34:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:34:07.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:34:07.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:34:07.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:34:07.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:34:07.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:34:07.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:34:07.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:34:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.064988 -999.00  +11.70  10.61     88   +9.90 1 1 1 3 1     0    0 0.36 -59.92 ZNESW 10.6 10.6 154.4 14.3 12.3 -21.6 12.2 -21.3 12.0 -19.8 12.3 -20.6
2025-12-26T03:34:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:34:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:34:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.064988
2025-12-26T03:34:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:34:07.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:34:07.898 [DEBUG] [Thread-23643] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:34:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:34:07.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:34:07.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:34:07.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:33:56', tmtdew=2.08, humidity=86.76, cloud=0.0, wind=16.06, temperature=11.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:33:34.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:31:00')
2025-12-26T03:34:07.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:34:07.984 [DEBUG] [Thread-23646] [transport.py] [_log()] starting thread (client mode): 0xb6b22920
2025-12-26T03:34:07.984 [DEBUG] [Thread-23646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:34:07.999 [DEBUG] [Thread-23646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:34:07.999 [INFO] [Thread-23646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:34:08.006 [DEBUG] [Thread-23646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] client lang: <none>
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] server lang: <none>
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] kex follows: False
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] Compression: none
2025-12-26T03:34:08.007 [DEBUG] [Thread-23646] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:34:08.064 [DEBUG] [Thread-23646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:34:08.065 [DEBUG] [Thread-23646] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:34:08.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:34:08.066 [DEBUG] [Thread-23646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:34:08.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:34:08.125 [DEBUG] [Thread-23646] [transport.py] [_log()] userauth is OK
2025-12-26T03:34:08.125 [DEBUG] [Thread-23646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:34:08.125 [DEBUG] [Thread-23646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:34:08.125 [DEBUG] [Thread-23646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:34:08.125 [DEBUG] [Thread-23646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:34:08.144 [INFO] [Thread-23646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:34:08.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:34:08.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:34:08.944 [DEBUG] [Thread-23646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:34:08.945 [DEBUG] [Thread-23646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:34:08.993 [DEBUG] [Thread-23646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:34:08.993 [DEBUG] [Thread-23646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:34:09.003 [DEBUG] [Thread-23646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:34:09.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:34:09.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-26T03:34: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') -> 00000000
2025-12-26T03:34:09.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:34:09.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:34:09.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:34:09.038 [DEBUG] [Thread-23646] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:34:15.845 [DEBUG] [Thread-23648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:30.898 [DEBUG] [Thread-23649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:39.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:34:39.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:34:39.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-26T03:34:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 34, 28), 2.08, 86.76, 0.0, 15.65, 11.57, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:34:39.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:34:28
2025-12-26T03:34:39.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:34:40.034 [DEBUG] [Thread-23650] [transport.py] [_log()] starting thread (client mode): 0xb95b2f80
2025-12-26T03:34:40.034 [DEBUG] [Thread-23650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:34:40.050 [DEBUG] [Thread-23650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:34:40.050 [INFO] [Thread-23650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] client lang: <none>
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] server lang: <none>
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] kex follows: False
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:34:40.053 [DEBUG] [Thread-23650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:34:40.054 [DEBUG] [Thread-23650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:34:40.054 [DEBUG] [Thread-23650] [transport.py] [_log()] Compression: none
2025-12-26T03:34:40.054 [DEBUG] [Thread-23650] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:34:40.071 [DEBUG] [Thread-23650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:34:40.071 [DEBUG] [Thread-23650] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:34:40.072 [DEBUG] [Thread-23650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:34:40.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:34:40.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:34:40.074 [DEBUG] [Thread-23650] [transport.py] [_log()] userauth is OK
2025-12-26T03:34:40.074 [DEBUG] [Thread-23650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:34:40.074 [DEBUG] [Thread-23650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:34:40.074 [DEBUG] [Thread-23650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:34:40.074 [DEBUG] [Thread-23650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:34:40.095 [INFO] [Thread-23650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:34:40.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:34:40.753 [DEBUG] [Thread-23650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:34:40.754 [DEBUG] [Thread-23650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:34:40.754 [DEBUG] [Thread-23650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:34:40.795 [DEBUG] [Thread-23650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:34:40.795 [DEBUG] [Thread-23650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:34:40.802 [DEBUG] [Thread-23650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:34:40.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:34:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:34:40.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:34:40.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:34:40.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:34:40.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:34:40.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:34:40.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:34:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:34:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.065335 -999.00  +11.70   9.64     88   +9.80 1 1 1 3 1     0    0 0.57 -50.52 ZNESW 9.6 9.6 165.1 11.9 12.3 -21.6 12.2 -21.5 12.0 -19.6 12.2 -20.7
2025-12-26T03:34:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:34:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:34:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.065335
2025-12-26T03:34:40.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:34:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:34:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:34:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:34:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:34:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:34:28', tmtdew=2.08, humidity=86.76, cloud=0.0, wind=15.65, temperature=11.57, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:34:04.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:31:00')
2025-12-26T03:34:40.829 [DEBUG] [Thread-23650] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:34:40.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-26T03:34:40.933 [DEBUG] [Thread-23653] [transport.py] [_log()] starting thread (client mode): 0xb95f24a0
2025-12-26T03:34:40.933 [DEBUG] [Thread-23653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:34:40.949 [DEBUG] [Thread-23653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:34:40.949 [INFO] [Thread-23653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:34:40.957 [DEBUG] [Thread-23653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:34:40.957 [DEBUG] [Thread-23653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:34:40.957 [DEBUG] [Thread-23653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:34:40.957 [DEBUG] [Thread-23653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:40.957 [DEBUG] [Thread-23653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:34:40.957 [DEBUG] [Thread-23653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] client lang: <none>
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] server lang: <none>
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] kex follows: False
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] Compression: none
2025-12-26T03:34:40.958 [DEBUG] [Thread-23653] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:34:41.017 [DEBUG] [Thread-23653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:34:41.018 [DEBUG] [Thread-23653] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:34:41.018 [DEBUG] [Thread-23653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:34:41.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:34:41.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:34:41.073 [DEBUG] [Thread-23653] [transport.py] [_log()] userauth is OK
2025-12-26T03:34:41.073 [DEBUG] [Thread-23653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:34:41.074 [DEBUG] [Thread-23653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:34:41.074 [DEBUG] [Thread-23653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:34:41.074 [DEBUG] [Thread-23653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:34:41.099 [INFO] [Thread-23653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:34:41.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-26T03:34:41.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:34:41.902 [DEBUG] [Thread-23653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:34:41.903 [DEBUG] [Thread-23653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:34:41.951 [DEBUG] [Thread-23653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:34:41.951 [DEBUG] [Thread-23653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:34:41.960 [DEBUG] [Thread-23653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:34:41.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:34:41.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-26T03:34:41.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-26T03:34:41.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:34:41.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:34:41.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:34:41.997 [DEBUG] [Thread-23653] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:34:45.930 [DEBUG] [Thread-23655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:34:51.961 [DEBUG] [Thread-23656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:00.978 [DEBUG] [Thread-23657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:01.393 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:01.396 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:12.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:35:12.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:35:12.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-26T03:35:12.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 35), 2.07, 86.83, 0.0, 15.92, 11.56, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:35:12.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:35:00
2025-12-26T03:35:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:35:12.955 [DEBUG] [Thread-23658] [transport.py] [_log()] starting thread (client mode): 0xbbfcdc30
2025-12-26T03:35:12.955 [DEBUG] [Thread-23658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:35:12.975 [DEBUG] [Thread-23658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:35:12.976 [INFO] [Thread-23658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:35:12.979 [DEBUG] [Thread-23658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:35:12.979 [DEBUG] [Thread-23658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:35:12.979 [DEBUG] [Thread-23658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:35:12.979 [DEBUG] [Thread-23658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:12.979 [DEBUG] [Thread-23658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:12.979 [DEBUG] [Thread-23658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] client lang: <none>
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] server lang: <none>
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] kex follows: False
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] Compression: none
2025-12-26T03:35:12.980 [DEBUG] [Thread-23658] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:35:12.996 [DEBUG] [Thread-23658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:35:12.997 [DEBUG] [Thread-23658] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03: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-26T03:35:12.998 [DEBUG] [Thread-23658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:35:12.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:35:13.041 [DEBUG] [Thread-23658] [transport.py] [_log()] userauth is OK
2025-12-26T03:35:13.041 [DEBUG] [Thread-23658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:35:13.042 [DEBUG] [Thread-23658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:35:13.042 [DEBUG] [Thread-23658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:35:13.042 [DEBUG] [Thread-23658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:35:13.073 [INFO] [Thread-23658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:35:13.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:35:13.751 [DEBUG] [Thread-23658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:35:13.751 [DEBUG] [Thread-23658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:35:13.752 [DEBUG] [Thread-23658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:35:13.792 [DEBUG] [Thread-23658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:35:13.792 [DEBUG] [Thread-23658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:35:13.796 [DEBUG] [Thread-23658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:35:13.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:35:13.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:35:13.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:35:13.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:35:13.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:35:13.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:35:13.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:35:13.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:35:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:35:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.065682 -999.00  +11.70  10.18     88   +9.80 1 1 1 3 1     0    0 0.74 -45.99 ZNESW 10.2 10.2 156.2 11.7 12.3 -21.7 12.2 -21.4 12.0 -19.8 12.3 -20.7
2025-12-26T03:35:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:35:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:35:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.065682
2025-12-26T03:35:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:35:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:35:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:35:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:35:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:35:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:35:00', tmtdew=2.07, humidity=86.83, cloud=0.0, wind=15.92, temperature=11.56, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:34:34.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:33:00')
2025-12-26T03:35:13.824 [DEBUG] [Thread-23658] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:35:13.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-26T03:35:13.917 [DEBUG] [Thread-23661] [transport.py] [_log()] starting thread (client mode): 0xb95b3250
2025-12-26T03:35:13.917 [DEBUG] [Thread-23661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:35:13.932 [DEBUG] [Thread-23661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:35:13.932 [INFO] [Thread-23661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] client lang: <none>
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] server lang: <none>
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] kex follows: False
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:35:13.940 [DEBUG] [Thread-23661] [transport.py] [_log()] Compression: none
2025-12-26T03:35:13.941 [DEBUG] [Thread-23661] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:35:13.997 [DEBUG] [Thread-23661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:35:13.997 [DEBUG] [Thread-23661] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:35:13.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:35:13.998 [DEBUG] [Thread-23661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:35:13.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:35:14.053 [DEBUG] [Thread-23661] [transport.py] [_log()] userauth is OK
2025-12-26T03:35:14.053 [DEBUG] [Thread-23661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:35:14.053 [DEBUG] [Thread-23661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:35:14.054 [DEBUG] [Thread-23661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:35:14.054 [DEBUG] [Thread-23661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:35:14.072 [INFO] [Thread-23661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:35:14.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:35:14.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:35:14.859 [DEBUG] [Thread-23661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:35:14.860 [DEBUG] [Thread-23661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:35:14.907 [DEBUG] [Thread-23661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:35:14.907 [DEBUG] [Thread-23661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:35:14.916 [DEBUG] [Thread-23661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:35:14.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:35:14.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-26T03:35:14.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-26T03:35:14.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:35:14.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:35:14.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:35:14.958 [DEBUG] [Thread-23661] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:35:16.011 [DEBUG] [Thread-23663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:31.063 [DEBUG] [Thread-23664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:35:44.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:35:44.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:35:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 35, 32), 2.08, 86.79, 0.0, 15.35, 11.49, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:35:45.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:35:32
2025-12-26T03:35:45.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:35:45.999 [DEBUG] [Thread-23665] [transport.py] [_log()] starting thread (client mode): 0xb95b2950
2025-12-26T03:35:45.999 [DEBUG] [Thread-23665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:35:46.019 [DEBUG] [Thread-23665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:35:46.019 [INFO] [Thread-23665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] client lang: <none>
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] server lang: <none>
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] kex follows: False
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] Compression: none
2025-12-26T03:35:46.021 [DEBUG] [Thread-23665] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:35:46.040 [DEBUG] [Thread-23665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:35:46.040 [DEBUG] [Thread-23665] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:35:46.040 [DEBUG] [Thread-23665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:35:46.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:35:46.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:35:46.041 [DEBUG] [Thread-23665] [transport.py] [_log()] userauth is OK
2025-12-26T03:35:46.041 [DEBUG] [Thread-23665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:35:46.041 [DEBUG] [Thread-23665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:35:46.041 [DEBUG] [Thread-23665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:35:46.041 [DEBUG] [Thread-23665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:35:46.050 [INFO] [Thread-23665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:35:46.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:35:46.094 [DEBUG] [Thread-23667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:35:46.673 [DEBUG] [Thread-23665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:35:46.673 [DEBUG] [Thread-23665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:35:46.673 [DEBUG] [Thread-23665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:35:46.713 [DEBUG] [Thread-23665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:35:46.713 [DEBUG] [Thread-23665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:35:46.715 [DEBUG] [Thread-23665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:35:46.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:35:46.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:35:46.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:35:46.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:35:46.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:35:46.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:35:46.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.066377 -999.00  +11.60  10.17     88   +9.70 1 1 1 3 1     0    0 0.62 -49.17 ZNESW 10.2 10.2 147.4 12.5 12.3 -21.6 12.2 -21.3 12.0 -19.6 12.2 -20.6
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.066377
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:35:46.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:35:32', tmtdew=2.08, humidity=86.79, cloud=0.0, wind=15.35, temperature=11.49, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:35:34.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:33:00')
2025-12-26T03:35:46.733 [DEBUG] [Thread-23665] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:35:46.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:35:46.818 [DEBUG] [Thread-23669] [transport.py] [_log()] starting thread (client mode): 0xb9545750
2025-12-26T03:35:46.818 [DEBUG] [Thread-23669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:35:46.832 [DEBUG] [Thread-23669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:35:46.832 [INFO] [Thread-23669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] client lang: <none>
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] server lang: <none>
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] kex follows: False
2025-12-26T03:35:46.839 [DEBUG] [Thread-23669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:35:46.840 [DEBUG] [Thread-23669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:35:46.840 [DEBUG] [Thread-23669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:35:46.840 [DEBUG] [Thread-23669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:35:46.840 [DEBUG] [Thread-23669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:35:46.840 [DEBUG] [Thread-23669] [transport.py] [_log()] Compression: none
2025-12-26T03:35:46.840 [DEBUG] [Thread-23669] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:35:46.895 [DEBUG] [Thread-23669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:35:46.895 [DEBUG] [Thread-23669] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:35:46.895 [DEBUG] [Thread-23669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:35:46.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:35:46.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:35:46.952 [DEBUG] [Thread-23669] [transport.py] [_log()] userauth is OK
2025-12-26T03:35:46.952 [DEBUG] [Thread-23669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:35:46.952 [DEBUG] [Thread-23669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:35:46.952 [DEBUG] [Thread-23669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:35:46.952 [DEBUG] [Thread-23669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:35:46.966 [INFO] [Thread-23669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:35:46.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-26T03:35:46.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:35:47.787 [DEBUG] [Thread-23669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:35:47.788 [DEBUG] [Thread-23669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:35:47.836 [DEBUG] [Thread-23669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:35:47.837 [DEBUG] [Thread-23669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:35:47.845 [DEBUG] [Thread-23669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:35:47.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:35:47.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:35:47.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-26T03:35:47.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:35:47.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:35:47.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:35:47.876 [DEBUG] [Thread-23669] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:35:52.038 [DEBUG] [Thread-23671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:01.133 [DEBUG] [Thread-23672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:01.626 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:01.627 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:16.185 [DEBUG] [Thread-23673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:36:17.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:36:17.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-26T03:36:18.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 36, 4), 2.07, 86.83, 0.0, 15.39, 11.52, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:36:18.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:36:04
2025-12-26T03:36:18.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:36:18.856 [DEBUG] [Thread-23674] [transport.py] [_log()] starting thread (client mode): 0xb95b0eb0
2025-12-26T03:36:18.856 [DEBUG] [Thread-23674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:36:18.870 [DEBUG] [Thread-23674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:36:18.870 [INFO] [Thread-23674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:18.873 [DEBUG] [Thread-23674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] client lang: <none>
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] server lang: <none>
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] kex follows: False
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] Compression: none
2025-12-26T03:36:18.874 [DEBUG] [Thread-23674] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:36:18.883 [DEBUG] [Thread-23674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:36:18.883 [DEBUG] [Thread-23674] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:36:18.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:36:18.884 [DEBUG] [Thread-23674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:36:18.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:36:18.886 [DEBUG] [Thread-23674] [transport.py] [_log()] userauth is OK
2025-12-26T03:36:18.886 [DEBUG] [Thread-23674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:36:18.887 [DEBUG] [Thread-23674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:36:18.887 [DEBUG] [Thread-23674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:36:18.887 [DEBUG] [Thread-23674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:36:18.908 [INFO] [Thread-23674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:36:18.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:36:19.490 [DEBUG] [Thread-23674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:36:19.490 [DEBUG] [Thread-23674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:36:19.490 [DEBUG] [Thread-23674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:36:19.531 [DEBUG] [Thread-23674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:36:19.531 [DEBUG] [Thread-23674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:36:19.535 [DEBUG] [Thread-23674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:36:19.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:36:19.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:36:19.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:36:19.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:36:19.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:36:19.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:36:19.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:36:19.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:36:19.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:36:19.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.066724 -999.00  +11.60  10.93     88   +9.70 1 1 1 3 1     0    0 0.79 -42.79 ZNESW 10.9 10.9 135.2 15.0 12.3 -21.6 12.2 -21.4 12.0 -19.5 12.3 -20.8
2025-12-26T03:36:19.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:36:19.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:36:19.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.066724
2025-12-26T03:36:19.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:36:19.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:36:19.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:36:19.560 [DEBUG] [Thread-23674] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:36:19.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:36:19.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:36:19.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:36:04', tmtdew=2.07, humidity=86.83, cloud=0.0, wind=15.39, temperature=11.52, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:36:04.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:33:00')
2025-12-26T03:36:19.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-26T03:36:19.656 [DEBUG] [Thread-23677] [transport.py] [_log()] starting thread (client mode): 0xb6b23220
2025-12-26T03:36:19.656 [DEBUG] [Thread-23677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:36:19.671 [DEBUG] [Thread-23677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:36:19.671 [INFO] [Thread-23677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] client lang: <none>
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] server lang: <none>
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] kex follows: False
2025-12-26T03:36:19.678 [DEBUG] [Thread-23677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:36:19.679 [DEBUG] [Thread-23677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:36:19.679 [DEBUG] [Thread-23677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:36:19.679 [DEBUG] [Thread-23677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:36:19.679 [DEBUG] [Thread-23677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:36:19.679 [DEBUG] [Thread-23677] [transport.py] [_log()] Compression: none
2025-12-26T03:36:19.679 [DEBUG] [Thread-23677] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:36:19.736 [DEBUG] [Thread-23677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:36:19.737 [DEBUG] [Thread-23677] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:36:19.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:36:19.737 [DEBUG] [Thread-23677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:36:19.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:36:19.793 [DEBUG] [Thread-23677] [transport.py] [_log()] userauth is OK
2025-12-26T03:36:19.793 [DEBUG] [Thread-23677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:36:19.793 [DEBUG] [Thread-23677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:36:19.793 [DEBUG] [Thread-23677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:36:19.793 [DEBUG] [Thread-23677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:36:19.811 [INFO] [Thread-23677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:36:19.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-26T03:36:19.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:36:20.638 [DEBUG] [Thread-23677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:36:20.639 [DEBUG] [Thread-23677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:36:20.686 [DEBUG] [Thread-23677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:36:20.686 [DEBUG] [Thread-23677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:36:20.696 [DEBUG] [Thread-23677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:36:20.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:36:20.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-26T03:36:20.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:36:20.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:36:20.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:36:20.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:36:20.735 [DEBUG] [Thread-23677] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:36:31.220 [DEBUG] [Thread-23679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:46.267 [DEBUG] [Thread-23680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:36:50.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:36:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:36:51.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 36, 37), 2.06, 86.88, 0.0, 15.09, 11.47, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:36:51.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:36:37
2025-12-26T03:36:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:36:51.731 [DEBUG] [Thread-23681] [transport.py] [_log()] starting thread (client mode): 0xb6b22860
2025-12-26T03:36:51.732 [DEBUG] [Thread-23681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:36:51.751 [DEBUG] [Thread-23681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:36:51.751 [INFO] [Thread-23681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:36:51.754 [DEBUG] [Thread-23681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] client lang: <none>
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] server lang: <none>
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] kex follows: False
2025-12-26T03:36:51.755 [DEBUG] [Thread-23681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:36:51.756 [DEBUG] [Thread-23681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:36:51.756 [DEBUG] [Thread-23681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:36:51.756 [DEBUG] [Thread-23681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:36:51.756 [DEBUG] [Thread-23681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:36:51.756 [DEBUG] [Thread-23681] [transport.py] [_log()] Compression: none
2025-12-26T03:36:51.756 [DEBUG] [Thread-23681] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:36:51.766 [DEBUG] [Thread-23681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:36:51.767 [DEBUG] [Thread-23681] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:36:51.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:36:51.769 [DEBUG] [Thread-23681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:36:51.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:36:51.771 [DEBUG] [Thread-23681] [transport.py] [_log()] userauth is OK
2025-12-26T03:36:51.771 [DEBUG] [Thread-23681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:36:51.771 [DEBUG] [Thread-23681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:36:51.771 [DEBUG] [Thread-23681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:36:51.772 [DEBUG] [Thread-23681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:36:51.797 [INFO] [Thread-23681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:36:51.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:36:52.094 [DEBUG] [Thread-23683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:36:52.388 [DEBUG] [Thread-23681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:36:52.388 [DEBUG] [Thread-23681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:36:52.388 [DEBUG] [Thread-23681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:36:52.429 [DEBUG] [Thread-23681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:36:52.429 [DEBUG] [Thread-23681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:36:52.434 [DEBUG] [Thread-23681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:36:52.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:36:52.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:36:52.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:36:52.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:36:52.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:36:52.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:36:52.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:36:52.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:36:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:36:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.066724 -999.00  +11.60  10.93     88   +9.70 1 1 1 3 1     0    0 0.79 -42.79 ZNESW 10.9 10.9 135.2 15.0 12.3 -21.6 12.2 -21.4 12.0 -19.5 12.3 -20.8
2025-12-26T03:36:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:36:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:36:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.066724
2025-12-26T03:36:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:36:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:36:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:36:52.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:36:52.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:36:52.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:36:37', tmtdew=2.06, humidity=86.88, cloud=0.0, wind=15.09, temperature=11.47, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:36:04.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:33:00')
2025-12-26T03:36:52.460 [DEBUG] [Thread-23681] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:36:52.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-26T03:36:52.553 [DEBUG] [Thread-23685] [transport.py] [_log()] starting thread (client mode): 0xb95f0c10
2025-12-26T03:36:52.553 [DEBUG] [Thread-23685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:36:52.568 [DEBUG] [Thread-23685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:36:52.569 [INFO] [Thread-23685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:36:52.576 [DEBUG] [Thread-23685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:36:52.576 [DEBUG] [Thread-23685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:36:52.576 [DEBUG] [Thread-23685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:36:52.576 [DEBUG] [Thread-23685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:52.576 [DEBUG] [Thread-23685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] client lang: <none>
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] server lang: <none>
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] kex follows: False
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] Compression: none
2025-12-26T03:36:52.577 [DEBUG] [Thread-23685] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:36:52.637 [DEBUG] [Thread-23685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:36:52.638 [DEBUG] [Thread-23685] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:36:52.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:36:52.639 [DEBUG] [Thread-23685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:36:52.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:36:52.693 [DEBUG] [Thread-23685] [transport.py] [_log()] userauth is OK
2025-12-26T03:36:52.693 [DEBUG] [Thread-23685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:36:52.694 [DEBUG] [Thread-23685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:36:52.694 [DEBUG] [Thread-23685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:36:52.694 [DEBUG] [Thread-23685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:36:52.718 [INFO] [Thread-23685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:36:52.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-26T03:36:52.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:36:53.567 [DEBUG] [Thread-23685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:36:53.567 [DEBUG] [Thread-23685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:36:53.615 [DEBUG] [Thread-23685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:36:53.615 [DEBUG] [Thread-23685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:36:53.625 [DEBUG] [Thread-23685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:36:53.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:36:53.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-26T03:36:53.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-26T03:36:53.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:36:53.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:36:53.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:36:53.665 [DEBUG] [Thread-23685] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:37:01.302 [DEBUG] [Thread-23687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:01.839 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:01.840 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:16.342 [DEBUG] [Thread-23688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:23.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:37:23.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:37:23.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:37:24.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 37, 9), 2.06, 86.88, 0.0, 15.69, 11.44, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:37:24.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:37:09
2025-12-26T03:37:24.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:37:24.663 [DEBUG] [Thread-23689] [transport.py] [_log()] starting thread (client mode): 0xb95479a0
2025-12-26T03:37:24.663 [DEBUG] [Thread-23689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:37:24.681 [DEBUG] [Thread-23689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:37:24.681 [INFO] [Thread-23689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] client lang: <none>
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] server lang: <none>
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] kex follows: False
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] Compression: none
2025-12-26T03:37:24.684 [DEBUG] [Thread-23689] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:37:24.696 [DEBUG] [Thread-23689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:37:24.696 [DEBUG] [Thread-23689] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:37:24.697 [DEBUG] [Thread-23689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:37:24.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:37:24.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:37:24.699 [DEBUG] [Thread-23689] [transport.py] [_log()] userauth is OK
2025-12-26T03:37:24.699 [DEBUG] [Thread-23689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:37:24.699 [DEBUG] [Thread-23689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:37:24.699 [DEBUG] [Thread-23689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:37:24.699 [DEBUG] [Thread-23689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:37:24.722 [INFO] [Thread-23689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:37:24.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:37:25.334 [DEBUG] [Thread-23689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:37:25.334 [DEBUG] [Thread-23689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:37:25.335 [DEBUG] [Thread-23689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:37:25.375 [DEBUG] [Thread-23689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:37:25.375 [DEBUG] [Thread-23689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:37:25.379 [DEBUG] [Thread-23689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:37:25.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:37:25.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:37:25.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:37:25.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:37:25.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:37:25.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:37:25.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:37:25.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:37:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:37:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.067071 -999.00  +11.60  11.17     88   +9.70 1 1 1 3 1     0    0 0.76 -42.54 ZNESW 11.2 11.2 140.3 14.0 12.3 -21.5 12.2 -21.3 11.9 -19.8 12.2 -20.6
2025-12-26T03:37:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:37:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:37:25.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.067071
2025-12-26T03:37:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:37:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:37:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:37:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:37:25.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:37:25.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:37:09', tmtdew=2.06, humidity=86.88, cloud=0.0, wind=15.69, temperature=11.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:36:34.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:33:00')
2025-12-26T03:37:25.411 [DEBUG] [Thread-23689] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:37:25.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-26T03:37:25.504 [DEBUG] [Thread-23692] [transport.py] [_log()] starting thread (client mode): 0xb9593520
2025-12-26T03:37:25.504 [DEBUG] [Thread-23692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:37:25.519 [DEBUG] [Thread-23692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:37:25.519 [INFO] [Thread-23692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:37:25.526 [DEBUG] [Thread-23692] [transport.py] [_log()] client lang: <none>
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] server lang: <none>
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] kex follows: False
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] Compression: none
2025-12-26T03:37:25.527 [DEBUG] [Thread-23692] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:37:25.585 [DEBUG] [Thread-23692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:37:25.585 [DEBUG] [Thread-23692] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:37:25.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:37:25.587 [DEBUG] [Thread-23692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:37:25.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:37:25.640 [DEBUG] [Thread-23692] [transport.py] [_log()] userauth is OK
2025-12-26T03:37:25.641 [DEBUG] [Thread-23692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:37:25.641 [DEBUG] [Thread-23692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:37:25.641 [DEBUG] [Thread-23692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:37:25.641 [DEBUG] [Thread-23692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:37:25.658 [INFO] [Thread-23692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:37:25.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-26T03:37:25.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:37:26.482 [DEBUG] [Thread-23692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:37:26.483 [DEBUG] [Thread-23692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:37:26.530 [DEBUG] [Thread-23692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:37:26.530 [DEBUG] [Thread-23692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:37:26.539 [DEBUG] [Thread-23692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:37:26.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:37:26.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:37:26.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-26T03:37:26.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:37:26.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:37:26.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:37:26.576 [DEBUG] [Thread-23692] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:37:31.381 [DEBUG] [Thread-23694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:46.427 [DEBUG] [Thread-23695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:52.157 [DEBUG] [Thread-23696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:37:56.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:37:56.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:37:56.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-26T03:37:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 37, 41), 2.05, 87.44, 0.0, 17.35, 11.44, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:37:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:37:41
2025-12-26T03:37:57.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:37:57.555 [DEBUG] [Thread-23697] [transport.py] [_log()] starting thread (client mode): 0xb6b22650
2025-12-26T03:37:57.555 [DEBUG] [Thread-23697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:37:57.576 [DEBUG] [Thread-23697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:37:57.576 [INFO] [Thread-23697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:37:57.579 [DEBUG] [Thread-23697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:37:57.579 [DEBUG] [Thread-23697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:37:57.579 [DEBUG] [Thread-23697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:37:57.579 [DEBUG] [Thread-23697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:57.579 [DEBUG] [Thread-23697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] client lang: <none>
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] server lang: <none>
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] kex follows: False
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:37:57.580 [DEBUG] [Thread-23697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:37:57.581 [DEBUG] [Thread-23697] [transport.py] [_log()] Compression: none
2025-12-26T03:37:57.581 [DEBUG] [Thread-23697] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:37:57.603 [DEBUG] [Thread-23697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:37:57.603 [DEBUG] [Thread-23697] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:37:57.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:37:57.605 [DEBUG] [Thread-23697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:37:57.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:37:57.645 [DEBUG] [Thread-23697] [transport.py] [_log()] userauth is OK
2025-12-26T03:37:57.646 [DEBUG] [Thread-23697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:37:57.646 [DEBUG] [Thread-23697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:37:57.646 [DEBUG] [Thread-23697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:37:57.646 [DEBUG] [Thread-23697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:37:57.666 [INFO] [Thread-23697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:37:57.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:37:58.321 [DEBUG] [Thread-23697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:37:58.321 [DEBUG] [Thread-23697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:37:58.322 [DEBUG] [Thread-23697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:37:58.362 [DEBUG] [Thread-23697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:37:58.362 [DEBUG] [Thread-23697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:37:58.366 [DEBUG] [Thread-23697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:37:58.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:37:58.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:37:58.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:37:58.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:37:58.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:37:58.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:37:58.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:37:58.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:37:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:37:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.067418 -999.00  +11.60  10.20     88   +9.70 1 1 1 3 1     0    0 0.92 -37.41 ZNESW 10.2 10.2 142.6 14.6 12.3 -21.6 12.2 -21.4 11.9 -19.6 12.2 -20.6
2025-12-26T03:37:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:37:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:37:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.067418
2025-12-26T03:37:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:37:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:37:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:37:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:37:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:37:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:37:41', tmtdew=2.05, humidity=87.44, cloud=0.0, wind=17.35, temperature=11.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:37:04.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.2607499999999998, 0.18625000000000114, 0.43024999999999913, 0.26649999999999885, 0.20650000000000013, 0.29025000000000034, 0.42600000000000016, 0.4927500000000009, 0.32349999999999923, 0.1850000000000005, 0.20725000000000016, 0.2599999999999998, 0.21499999999999986, 0.28224999999999945, 0.3719999999999999, 0.39399999999999835, 0.1792499999999997, 0.28049999999999997, 0.266, 0.3122499999999988, 0.3019999999999996, 0.3557499999999987, 0.3992500000000003, 0.40474999999999994, 0.23850000000000016, 0.2705000000000002, 0.32624999999999993, 0.3825000000000003, 0.44200000000000017, 0.4115000000000011, 0.42050000000000143, 0.5275000000000007, 0.3512499999999994], zp_timestamp='2025-12-26T01:33:00')
2025-12-26T03:37:58.394 [DEBUG] [Thread-23697] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:37:58.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:37:58.491 [DEBUG] [Thread-23700] [transport.py] [_log()] starting thread (client mode): 0xb95f1570
2025-12-26T03:37:58.491 [DEBUG] [Thread-23700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:37:58.506 [DEBUG] [Thread-23700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:37:58.506 [INFO] [Thread-23700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:37:58.513 [DEBUG] [Thread-23700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:37:58.513 [DEBUG] [Thread-23700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:37:58.513 [DEBUG] [Thread-23700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] client lang: <none>
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] server lang: <none>
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] kex follows: False
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] Compression: none
2025-12-26T03:37:58.514 [DEBUG] [Thread-23700] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:37:58.573 [DEBUG] [Thread-23700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:37:58.573 [DEBUG] [Thread-23700] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:37:58.574 [DEBUG] [Thread-23700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:37:58.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:37:58.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:37:58.629 [DEBUG] [Thread-23700] [transport.py] [_log()] userauth is OK
2025-12-26T03:37:58.629 [DEBUG] [Thread-23700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:37:58.630 [DEBUG] [Thread-23700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:37:58.630 [DEBUG] [Thread-23700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:37:58.630 [DEBUG] [Thread-23700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:37:58.649 [INFO] [Thread-23700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:37:58.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:37:58.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:37:59.458 [DEBUG] [Thread-23700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:37:59.458 [DEBUG] [Thread-23700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:37:59.506 [DEBUG] [Thread-23700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:37:59.506 [DEBUG] [Thread-23700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:37:59.515 [DEBUG] [Thread-23700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:37:59.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:37:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:37:59.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:37:59.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:37:59.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:37:59.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:37:59.552 [DEBUG] [Thread-23700] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:38:01.469 [DEBUG] [Thread-23702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:38:02.042 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:38:02.043 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:38:16.525 [DEBUG] [Thread-23703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:38:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:38:29.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:38:29.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-26T03:38:30.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 38, 13), 2.05, 87.44, 0.0, 16.96, 11.42, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:38:30.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:38:13
2025-12-26T03:38:30.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:38:30.553 [DEBUG] [Thread-23704] [transport.py] [_log()] starting thread (client mode): 0xb9545db0
2025-12-26T03:38:30.553 [DEBUG] [Thread-23704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:38:30.572 [DEBUG] [Thread-23704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:38:30.573 [INFO] [Thread-23704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] client lang: <none>
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] server lang: <none>
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] kex follows: False
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] Compression: none
2025-12-26T03:38:30.576 [DEBUG] [Thread-23704] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:38:30.591 [DEBUG] [Thread-23704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:38:30.591 [DEBUG] [Thread-23704] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:38:30.592 [DEBUG] [Thread-23704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:38:30.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:38:30.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:38:30.594 [DEBUG] [Thread-23704] [transport.py] [_log()] userauth is OK
2025-12-26T03:38:30.594 [DEBUG] [Thread-23704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:38:30.594 [DEBUG] [Thread-23704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:38:30.594 [DEBUG] [Thread-23704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:38:30.594 [DEBUG] [Thread-23704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:38:30.627 [INFO] [Thread-23704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:38:30.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:38:31.292 [DEBUG] [Thread-23704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:38:31.292 [DEBUG] [Thread-23704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:38:31.293 [DEBUG] [Thread-23704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:38:31.333 [DEBUG] [Thread-23704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:38:31.333 [DEBUG] [Thread-23704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:38:31.337 [DEBUG] [Thread-23704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:38:31.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:38:31.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:38:31.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:38:31.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:38:31.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:38:31.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:38:31.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:38:31.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:38:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:38:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.067765 -999.00  +11.60  12.54     88   +9.70 1 1 1 3 1     0    0 0.93 -36.38 ZNESW 12.5 12.5 147.2 15.2 12.3 -21.5 12.2 -21.3 11.9 -19.6 12.2 -20.6
2025-12-26T03:38:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:38:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:38:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.067765
2025-12-26T03:38:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:38:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:38:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:38:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:38:31.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:38:31.365 [DEBUG] [Thread-23704] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:38:31.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:38:13', tmtdew=2.05, humidity=87.44, cloud=0.0, wind=16.96, temperature=11.42, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:37:34.896', atlas_cloud=1, atlas_rain=1, zp_data=[0.3882499999999993, 0.2757500000000004, 0.5207500000000014, 0.28699999999999903, 0.30349999999999966, 0.36875000000000036, 0.4939999999999998, 0.5897500000000004, 0.42049999999999876, 0.23850000000000016, 0.2452500000000004, 0.3279999999999994, 0.2729999999999997, 0.3532499999999992, 0.4949999999999992, 0.4969999999999999, 0.2057500000000001, 0.3324999999999996, 0.2679999999999989, 0.39624999999999844, 0.3589999999999982, 0.40625, 0.48575000000000124, 0.47025000000000006, 0.22699999999999854, 0.29800000000000004, 0.38925000000000054, 0.3905000000000003, 0.49100000000000055, 0.37700000000000067, 0.4410000000000007, 0.6480000000000006, 0.35574999999999957], zp_timestamp='2025-12-26T01:37:00')
2025-12-26T03:38:31.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-26T03:38:31.458 [DEBUG] [Thread-23707] [transport.py] [_log()] starting thread (client mode): 0xb6b20910
2025-12-26T03:38:31.458 [DEBUG] [Thread-23707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:38:31.473 [DEBUG] [Thread-23707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:38:31.473 [INFO] [Thread-23707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:38:31.480 [DEBUG] [Thread-23707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] client lang: <none>
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] server lang: <none>
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] kex follows: False
2025-12-26T03:38:31.481 [DEBUG] [Thread-23707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:38:31.482 [DEBUG] [Thread-23707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:38:31.482 [DEBUG] [Thread-23707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:38:31.482 [DEBUG] [Thread-23707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:38:31.482 [DEBUG] [Thread-23707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:38:31.482 [DEBUG] [Thread-23707] [transport.py] [_log()] Compression: none
2025-12-26T03:38:31.482 [DEBUG] [Thread-23707] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:38:31.540 [DEBUG] [Thread-23707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:38:31.541 [DEBUG] [Thread-23707] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:38:31.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:38:31.542 [DEBUG] [Thread-23707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:38:31.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:38:31.558 [DEBUG] [Thread-23709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:38:31.599 [DEBUG] [Thread-23707] [transport.py] [_log()] userauth is OK
2025-12-26T03:38:31.599 [DEBUG] [Thread-23707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:38:31.599 [DEBUG] [Thread-23707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:38:31.599 [DEBUG] [Thread-23707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:38:31.600 [DEBUG] [Thread-23707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:38:31.623 [INFO] [Thread-23707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:38:31.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-26T03:38:31.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:38:32.451 [DEBUG] [Thread-23707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:38:32.451 [DEBUG] [Thread-23707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:38:32.499 [DEBUG] [Thread-23707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:38:32.499 [DEBUG] [Thread-23707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:38:32.509 [DEBUG] [Thread-23707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:38:32.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:38:32.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-26T03:38:32.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-26T03:38:32.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:38:32.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:38:32.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:38:32.545 [DEBUG] [Thread-23707] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:38:46.605 [DEBUG] [Thread-23710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:38:52.224 [DEBUG] [Thread-23711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:01.634 [DEBUG] [Thread-23712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:02.245 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:02.246 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:02.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:39:02.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:39:02.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:39:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 38, 45), 2.06, 87.41, 0.0, 15.56, 11.41, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:39:03.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:38:45
2025-12-26T03:39:03.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:39:03.545 [DEBUG] [Thread-23713] [transport.py] [_log()] starting thread (client mode): 0xb95b3160
2025-12-26T03:39:03.545 [DEBUG] [Thread-23713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:39:03.566 [DEBUG] [Thread-23713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:39:03.566 [INFO] [Thread-23713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] client lang: <none>
2025-12-26T03:39:03.569 [DEBUG] [Thread-23713] [transport.py] [_log()] server lang: <none>
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] kex follows: False
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] Compression: none
2025-12-26T03:39:03.570 [DEBUG] [Thread-23713] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:39:03.585 [DEBUG] [Thread-23713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:39:03.585 [DEBUG] [Thread-23713] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:39:03.585 [DEBUG] [Thread-23713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:39:03.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:39:03.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:39:03.586 [DEBUG] [Thread-23713] [transport.py] [_log()] userauth is OK
2025-12-26T03:39:03.586 [DEBUG] [Thread-23713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:39:03.586 [DEBUG] [Thread-23713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:39:03.586 [DEBUG] [Thread-23713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:39:03.586 [DEBUG] [Thread-23713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:39:03.596 [INFO] [Thread-23713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:39:03.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:39:04.239 [DEBUG] [Thread-23713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:39:04.239 [DEBUG] [Thread-23713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:39:04.239 [DEBUG] [Thread-23713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:39:04.281 [DEBUG] [Thread-23713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:39:04.281 [DEBUG] [Thread-23713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:39:04.283 [DEBUG] [Thread-23713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:39:04.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:39:04.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:39:04.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:39:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:39:04.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:39:04.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:39:04.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:39:04.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.068113 -999.00  +11.60  11.52     88   +9.70 1 1 1 3 1     0    0 1.03 -32.93 ZNESW 11.5 11.5 147.0 17.6 12.3 -21.7 12.2 -21.3 12.0 -19.6 12.2 -20.6
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.068113
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:39:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:38:45', tmtdew=2.06, humidity=87.41, cloud=0.0, wind=15.56, temperature=11.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:38:04.963', atlas_cloud=1, atlas_rain=1, zp_data=[0.3882499999999993, 0.2757500000000004, 0.5207500000000014, 0.28699999999999903, 0.30349999999999966, 0.36875000000000036, 0.4939999999999998, 0.5897500000000004, 0.42049999999999876, 0.23850000000000016, 0.2452500000000004, 0.3279999999999994, 0.2729999999999997, 0.3532499999999992, 0.4949999999999992, 0.4969999999999999, 0.2057500000000001, 0.3324999999999996, 0.2679999999999989, 0.39624999999999844, 0.3589999999999982, 0.40625, 0.48575000000000124, 0.47025000000000006, 0.22699999999999854, 0.29800000000000004, 0.38925000000000054, 0.3905000000000003, 0.49100000000000055, 0.37700000000000067, 0.4410000000000007, 0.6480000000000006, 0.35574999999999957], zp_timestamp='2025-12-26T01:37:00')
2025-12-26T03:39:04.304 [DEBUG] [Thread-23713] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:39:04.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-26T03:39:04.386 [DEBUG] [Thread-23716] [transport.py] [_log()] starting thread (client mode): 0xb9544670
2025-12-26T03:39:04.386 [DEBUG] [Thread-23716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:39:04.406 [DEBUG] [Thread-23716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:39:04.406 [INFO] [Thread-23716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] client lang: <none>
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] server lang: <none>
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] kex follows: False
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] Compression: none
2025-12-26T03:39:04.413 [DEBUG] [Thread-23716] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:39:04.472 [DEBUG] [Thread-23716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:39:04.472 [DEBUG] [Thread-23716] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:39:04.472 [DEBUG] [Thread-23716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:39:04.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:39:04.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:39:04.531 [DEBUG] [Thread-23716] [transport.py] [_log()] userauth is OK
2025-12-26T03:39:04.531 [DEBUG] [Thread-23716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:39:04.532 [DEBUG] [Thread-23716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:39:04.532 [DEBUG] [Thread-23716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:39:04.532 [DEBUG] [Thread-23716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:39:04.550 [INFO] [Thread-23716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:39:04.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-26T03:39:04.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:39:05.327 [DEBUG] [Thread-23716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:39:05.328 [DEBUG] [Thread-23716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:39:05.375 [DEBUG] [Thread-23716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:39:05.375 [DEBUG] [Thread-23716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:39:05.384 [DEBUG] [Thread-23716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:39:05.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:39:05.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-26T03:39:05.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-26T03:39:05.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:39:05.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:39:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:39:05.420 [DEBUG] [Thread-23716] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:39:16.667 [DEBUG] [Thread-23718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:31.722 [DEBUG] [Thread-23719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:39:35.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:39:35.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-26T03:39:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 39, 17), 2.05, 87.44, 0.0, 16.9, 11.36, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:39:36.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:39:17
2025-12-26T03:39:36.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:39:36.418 [DEBUG] [Thread-23720] [transport.py] [_log()] starting thread (client mode): 0xb9592b90
2025-12-26T03:39:36.419 [DEBUG] [Thread-23720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:39:36.440 [DEBUG] [Thread-23720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:39:36.440 [INFO] [Thread-23720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] client lang: <none>
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] server lang: <none>
2025-12-26T03:39:36.443 [DEBUG] [Thread-23720] [transport.py] [_log()] kex follows: False
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] Compression: none
2025-12-26T03:39:36.444 [DEBUG] [Thread-23720] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:39:36.459 [DEBUG] [Thread-23720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:39:36.459 [DEBUG] [Thread-23720] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:39:36.459 [DEBUG] [Thread-23720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:39:36.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:39:36.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:39:36.460 [DEBUG] [Thread-23720] [transport.py] [_log()] userauth is OK
2025-12-26T03:39:36.460 [DEBUG] [Thread-23720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:39:36.460 [DEBUG] [Thread-23720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:39:36.460 [DEBUG] [Thread-23720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:39:36.460 [DEBUG] [Thread-23720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:39:36.475 [INFO] [Thread-23720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:39:36.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:39:37.107 [DEBUG] [Thread-23720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:39:37.107 [DEBUG] [Thread-23720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:39:37.108 [DEBUG] [Thread-23720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:39:37.148 [DEBUG] [Thread-23720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:39:37.148 [DEBUG] [Thread-23720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:39:37.152 [DEBUG] [Thread-23720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:39:37.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:39:37.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:39:37.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:39:37.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:39:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:39:37.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:39:37.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:39:37.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:39:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:39:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.068807 -999.00  +11.60  11.56     88   +9.70 1 1 1 3 1     0    0 1.03 -34.11 ZNESW 11.6 11.6 146.4 15.7 12.3 -21.6 12.2 -21.2 11.9 -19.6 12.2 -20.6
2025-12-26T03:39:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:39:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:39:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.068807
2025-12-26T03:39:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:39:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:39:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:39:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:39:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:39:37.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:39:17', tmtdew=2.05, humidity=87.44, cloud=0.0, wind=16.9, temperature=11.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:39:04.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.3882499999999993, 0.2757500000000004, 0.5207500000000014, 0.28699999999999903, 0.30349999999999966, 0.36875000000000036, 0.4939999999999998, 0.5897500000000004, 0.42049999999999876, 0.23850000000000016, 0.2452500000000004, 0.3279999999999994, 0.2729999999999997, 0.3532499999999992, 0.4949999999999992, 0.4969999999999999, 0.2057500000000001, 0.3324999999999996, 0.2679999999999989, 0.39624999999999844, 0.3589999999999982, 0.40625, 0.48575000000000124, 0.47025000000000006, 0.22699999999999854, 0.29800000000000004, 0.38925000000000054, 0.3905000000000003, 0.49100000000000055, 0.37700000000000067, 0.4410000000000007, 0.6480000000000006, 0.35574999999999957], zp_timestamp='2025-12-26T01:37:00')
2025-12-26T03:39:37.187 [DEBUG] [Thread-23720] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:39:37.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-26T03:39:37.281 [DEBUG] [Thread-23723] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-26T03:39:37.281 [DEBUG] [Thread-23723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:39:37.295 [DEBUG] [Thread-23723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:39:37.295 [INFO] [Thread-23723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] client lang: <none>
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] server lang: <none>
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] kex follows: False
2025-12-26T03:39:37.303 [DEBUG] [Thread-23723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:39:37.304 [DEBUG] [Thread-23723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:39:37.304 [DEBUG] [Thread-23723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:39:37.304 [DEBUG] [Thread-23723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:39:37.304 [DEBUG] [Thread-23723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:39:37.304 [DEBUG] [Thread-23723] [transport.py] [_log()] Compression: none
2025-12-26T03:39:37.304 [DEBUG] [Thread-23723] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:39:37.361 [DEBUG] [Thread-23723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:39:37.361 [DEBUG] [Thread-23723] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:39:37.362 [DEBUG] [Thread-23723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:39:37.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:39:37.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:39:37.417 [DEBUG] [Thread-23723] [transport.py] [_log()] userauth is OK
2025-12-26T03:39:37.417 [DEBUG] [Thread-23723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:39:37.417 [DEBUG] [Thread-23723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:39:37.417 [DEBUG] [Thread-23723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:39:37.418 [DEBUG] [Thread-23723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:39:37.436 [INFO] [Thread-23723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:39:37.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-26T03:39:37.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:39:38.279 [DEBUG] [Thread-23723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:39:38.280 [DEBUG] [Thread-23723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:39:38.327 [DEBUG] [Thread-23723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:39:38.327 [DEBUG] [Thread-23723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:39:38.335 [DEBUG] [Thread-23723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:39:38.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:39:38.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:39:38.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:39:38.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:39:38.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:39:38.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:39:38.367 [DEBUG] [Thread-23723] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:39:46.759 [DEBUG] [Thread-23725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:39:52.289 [DEBUG] [Thread-23726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:01.808 [DEBUG] [Thread-23727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:02.446 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:02.448 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:08.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:40:08.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:40:08.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-26T03:40:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 39, 49), 1.99, 87.49, 0.0, 20.33, 11.41, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:40:09.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:39:49
2025-12-26T03:40:09.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:40:09.352 [DEBUG] [Thread-23728] [transport.py] [_log()] starting thread (client mode): 0xb9592f20
2025-12-26T03:40:09.352 [DEBUG] [Thread-23728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:40:09.368 [DEBUG] [Thread-23728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:40:09.368 [INFO] [Thread-23728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] client lang: <none>
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] server lang: <none>
2025-12-26T03:40:09.371 [DEBUG] [Thread-23728] [transport.py] [_log()] kex follows: False
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] Compression: none
2025-12-26T03:40:09.372 [DEBUG] [Thread-23728] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:40:09.389 [DEBUG] [Thread-23728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:40:09.389 [DEBUG] [Thread-23728] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:40:09.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:40:09.390 [DEBUG] [Thread-23728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:40:09.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:40:09.392 [DEBUG] [Thread-23728] [transport.py] [_log()] userauth is OK
2025-12-26T03:40:09.392 [DEBUG] [Thread-23728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:40:09.392 [DEBUG] [Thread-23728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:40:09.393 [DEBUG] [Thread-23728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:40:09.393 [DEBUG] [Thread-23728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:40:09.417 [INFO] [Thread-23728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:40:09.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:40:16.838 [DEBUG] [Thread-23730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:18.189 [DEBUG] [Thread-23728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:40:18.189 [DEBUG] [Thread-23728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:40:18.189 [DEBUG] [Thread-23728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:40:18.229 [DEBUG] [Thread-23728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:40:18.229 [DEBUG] [Thread-23728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:40:18.232 [DEBUG] [Thread-23728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:40:18.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:40:18.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:40:18.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:40:18.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:40:18.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:40:18.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:40:18.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:40:18.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.069154 -999.00  +11.50  13.48     88   +9.70 1 1 1 3 1     0    0 1.15 -28.97 ZNESW 13.5 13.5 153.8 16.7 12.3 -21.6 12.2 -21.3 11.9 -19.5 12.2 -20.7
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.069154
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:40:18.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:39:49', tmtdew=1.99, humidity=87.49, cloud=0.0, wind=20.33, temperature=11.41, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:39:34.906', atlas_cloud=1, atlas_rain=1, zp_data=[0.3882499999999993, 0.2757500000000004, 0.5207500000000014, 0.28699999999999903, 0.30349999999999966, 0.36875000000000036, 0.4939999999999998, 0.5897500000000004, 0.42049999999999876, 0.23850000000000016, 0.2452500000000004, 0.3279999999999994, 0.2729999999999997, 0.3532499999999992, 0.4949999999999992, 0.4969999999999999, 0.2057500000000001, 0.3324999999999996, 0.2679999999999989, 0.39624999999999844, 0.3589999999999982, 0.40625, 0.48575000000000124, 0.47025000000000006, 0.22699999999999854, 0.29800000000000004, 0.38925000000000054, 0.3905000000000003, 0.49100000000000055, 0.37700000000000067, 0.4410000000000007, 0.6480000000000006, 0.35574999999999957], zp_timestamp='2025-12-26T01:37:00')
2025-12-26T03:40:18.264 [DEBUG] [Thread-23728] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:40:18.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-26T03:40:18.351 [DEBUG] [Thread-23732] [transport.py] [_log()] starting thread (client mode): 0xb95f3730
2025-12-26T03:40:18.351 [DEBUG] [Thread-23732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:40:18.366 [DEBUG] [Thread-23732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:40:18.366 [INFO] [Thread-23732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:18.373 [DEBUG] [Thread-23732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] client lang: <none>
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] server lang: <none>
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] kex follows: False
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] Compression: none
2025-12-26T03:40:18.374 [DEBUG] [Thread-23732] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:40:18.431 [DEBUG] [Thread-23732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:40:18.431 [DEBUG] [Thread-23732] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:40:18.431 [DEBUG] [Thread-23732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:40:18.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:40:18.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:40:18.488 [DEBUG] [Thread-23732] [transport.py] [_log()] userauth is OK
2025-12-26T03:40:18.488 [DEBUG] [Thread-23732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:40:18.488 [DEBUG] [Thread-23732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:40:18.488 [DEBUG] [Thread-23732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:40:18.488 [DEBUG] [Thread-23732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:40:18.502 [INFO] [Thread-23732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:40:18.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-26T03:40:18.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:40:19.360 [DEBUG] [Thread-23732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:40:19.360 [DEBUG] [Thread-23732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:40:19.407 [DEBUG] [Thread-23732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:40:19.407 [DEBUG] [Thread-23732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:40:19.416 [DEBUG] [Thread-23732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:40:19.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:40:19.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-26T03:40:19.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-26T03:40:19.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:40:19.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:40:19.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:40:19.448 [DEBUG] [Thread-23732] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:40:31.869 [DEBUG] [Thread-23734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:46.921 [DEBUG] [Thread-23735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:49.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:40:49.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:40:49.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-26T03:40:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 40, 21), 1.98, 87.56, 0.0, 20.8, 11.44, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:40:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:40:21
2025-12-26T03:40:50.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:40:50.464 [DEBUG] [Thread-23736] [transport.py] [_log()] starting thread (client mode): 0xb9592fb0
2025-12-26T03:40:50.465 [DEBUG] [Thread-23736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:40:50.484 [DEBUG] [Thread-23736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:40:50.484 [INFO] [Thread-23736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:40:50.487 [DEBUG] [Thread-23736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:40:50.487 [DEBUG] [Thread-23736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] client lang: <none>
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] server lang: <none>
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] kex follows: False
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:40:50.488 [DEBUG] [Thread-23736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:40:50.489 [DEBUG] [Thread-23736] [transport.py] [_log()] Compression: none
2025-12-26T03:40:50.489 [DEBUG] [Thread-23736] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:40:50.506 [DEBUG] [Thread-23736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:40:50.507 [DEBUG] [Thread-23736] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:40:50.507 [DEBUG] [Thread-23736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:40:50.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:40:50.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:40:50.509 [DEBUG] [Thread-23736] [transport.py] [_log()] userauth is OK
2025-12-26T03:40:50.509 [DEBUG] [Thread-23736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:40:50.509 [DEBUG] [Thread-23736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:40:50.509 [DEBUG] [Thread-23736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:40:50.509 [DEBUG] [Thread-23736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:40:50.527 [INFO] [Thread-23736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:40:50.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:40:51.181 [DEBUG] [Thread-23736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:40:51.181 [DEBUG] [Thread-23736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:40:51.182 [DEBUG] [Thread-23736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:40:51.222 [DEBUG] [Thread-23736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:40:51.222 [DEBUG] [Thread-23736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:40:51.225 [DEBUG] [Thread-23736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:40:51.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:40:51.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:40:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:40:51.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:40:51.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:40:51.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:40:51.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:40:51.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:40:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:40:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.069502 -999.00  +11.60  14.53     88   +9.70 1 1 1 3 1     0    0 1.16 -29.25 ZNESW 14.5 14.5 161.4 17.8 12.3 -21.5 12.1 -21.2 11.9 -19.4 12.2 -20.7
2025-12-26T03:40:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:40:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:40:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.069502
2025-12-26T03:40:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:40:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:40:51.248 [DEBUG] [Thread-23736] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:40:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:40:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:40:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:40:51.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:40:21', tmtdew=1.98, humidity=87.56, cloud=0.0, wind=20.8, temperature=11.44, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:40:04.973', atlas_cloud=1, atlas_rain=1, zp_data=[0.3882499999999993, 0.2757500000000004, 0.5207500000000014, 0.28699999999999903, 0.30349999999999966, 0.36875000000000036, 0.4939999999999998, 0.5897500000000004, 0.42049999999999876, 0.23850000000000016, 0.2452500000000004, 0.3279999999999994, 0.2729999999999997, 0.3532499999999992, 0.4949999999999992, 0.4969999999999999, 0.2057500000000001, 0.3324999999999996, 0.2679999999999989, 0.39624999999999844, 0.3589999999999982, 0.40625, 0.48575000000000124, 0.47025000000000006, 0.22699999999999854, 0.29800000000000004, 0.38925000000000054, 0.3905000000000003, 0.49100000000000055, 0.37700000000000067, 0.4410000000000007, 0.6480000000000006, 0.35574999999999957], zp_timestamp='2025-12-26T01:37:00')
2025-12-26T03:40:51.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-26T03:40:51.343 [DEBUG] [Thread-23739] [transport.py] [_log()] starting thread (client mode): 0xb9593dc0
2025-12-26T03:40:51.343 [DEBUG] [Thread-23739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:40:51.359 [DEBUG] [Thread-23739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:40:51.359 [INFO] [Thread-23739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:40:51.367 [DEBUG] [Thread-23739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:40:51.367 [DEBUG] [Thread-23739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:40:51.367 [DEBUG] [Thread-23739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:40:51.367 [DEBUG] [Thread-23739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:51.367 [DEBUG] [Thread-23739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] client lang: <none>
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] server lang: <none>
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] kex follows: False
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:40:51.368 [DEBUG] [Thread-23739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:40:51.369 [DEBUG] [Thread-23739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:40:51.369 [DEBUG] [Thread-23739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:40:51.369 [DEBUG] [Thread-23739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:40:51.369 [DEBUG] [Thread-23739] [transport.py] [_log()] Compression: none
2025-12-26T03:40:51.369 [DEBUG] [Thread-23739] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:40:51.428 [DEBUG] [Thread-23739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:40:51.428 [DEBUG] [Thread-23739] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:40:51.429 [DEBUG] [Thread-23739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:40:51.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:40:51.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:40:51.485 [DEBUG] [Thread-23739] [transport.py] [_log()] userauth is OK
2025-12-26T03:40:51.485 [DEBUG] [Thread-23739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:40:51.485 [DEBUG] [Thread-23739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:40:51.485 [DEBUG] [Thread-23739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:40:51.485 [DEBUG] [Thread-23739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:40:51.505 [INFO] [Thread-23739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:40:51.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-26T03:40:51.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:40:52.348 [DEBUG] [Thread-23739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:40:52.348 [DEBUG] [Thread-23739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:40:52.365 [DEBUG] [Thread-23741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:40:52.396 [DEBUG] [Thread-23739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:40:52.397 [DEBUG] [Thread-23739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:40:52.405 [DEBUG] [Thread-23739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:40:52.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:40:52.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-26T03:40:52.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:40:52.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:40:52.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:40:52.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:40:52.439 [DEBUG] [Thread-23739] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:41:01.949 [DEBUG] [Thread-23742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:02.649 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:02.650 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:17.000 [DEBUG] [Thread-23743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:22.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:41:22.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:41:22.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-26T03:41:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 40, 53), 1.97, 87.62, 0.0, 19.69, 11.51, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:41:23.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:40:53
2025-12-26T03:41:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:41:23.410 [DEBUG] [Thread-23744] [transport.py] [_log()] starting thread (client mode): 0xb95f3370
2025-12-26T03:41:23.411 [DEBUG] [Thread-23744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:41:23.431 [DEBUG] [Thread-23744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:41:23.431 [INFO] [Thread-23744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:41:23.434 [DEBUG] [Thread-23744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] client lang: <none>
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] server lang: <none>
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] kex follows: False
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] Compression: none
2025-12-26T03:41:23.435 [DEBUG] [Thread-23744] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:41:23.456 [DEBUG] [Thread-23744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:41:23.456 [DEBUG] [Thread-23744] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:41:23.457 [DEBUG] [Thread-23744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:41:23.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:41:23.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:41:23.459 [DEBUG] [Thread-23744] [transport.py] [_log()] userauth is OK
2025-12-26T03:41:23.459 [DEBUG] [Thread-23744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:41:23.460 [DEBUG] [Thread-23744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:41:23.460 [DEBUG] [Thread-23744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:41:23.460 [DEBUG] [Thread-23744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:41:23.482 [INFO] [Thread-23744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:41:23.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:41:24.330 [DEBUG] [Thread-23744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:41:24.331 [DEBUG] [Thread-23744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:41:24.331 [DEBUG] [Thread-23744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:41:24.372 [DEBUG] [Thread-23744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:41:24.373 [DEBUG] [Thread-23744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:41:24.375 [DEBUG] [Thread-23744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:41:24.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:41:24.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:41:24.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:41:24.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:41:24.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:41:24.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:41:24.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:41:24.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:41:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:41:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.069849 -999.00  +11.50  12.97     88   +9.70 1 1 1 3 1     0    0 1.18 -27.50 ZNESW 13.0 13.0 157.6 16.2 12.2 -21.6 12.1 -21.2 11.9 -19.4 12.2 -20.5
2025-12-26T03:41:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:41:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:41:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.069849
2025-12-26T03:41:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:41:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:41:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:41:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:41:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:41:24.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:40:53', tmtdew=1.97, humidity=87.62, cloud=0.0, wind=19.69, temperature=11.51, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:40:34.954', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:40:00')
2025-12-26T03:41:24.403 [DEBUG] [Thread-23744] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:41:24.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-26T03:41:24.499 [DEBUG] [Thread-23747] [transport.py] [_log()] starting thread (client mode): 0xb9544b20
2025-12-26T03:41:24.499 [DEBUG] [Thread-23747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:41:24.516 [DEBUG] [Thread-23747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:41:24.516 [INFO] [Thread-23747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:41:24.523 [DEBUG] [Thread-23747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:41:24.524 [DEBUG] [Thread-23747] [transport.py] [_log()] client lang: <none>
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] server lang: <none>
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] kex follows: False
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] Compression: none
2025-12-26T03:41:24.525 [DEBUG] [Thread-23747] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:41:24.580 [DEBUG] [Thread-23747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:41:24.581 [DEBUG] [Thread-23747] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:41:24.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:41:24.582 [DEBUG] [Thread-23747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:41:24.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:41:24.637 [DEBUG] [Thread-23747] [transport.py] [_log()] userauth is OK
2025-12-26T03:41:24.637 [DEBUG] [Thread-23747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:41:24.637 [DEBUG] [Thread-23747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:41:24.637 [DEBUG] [Thread-23747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:41:24.638 [DEBUG] [Thread-23747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:41:24.657 [INFO] [Thread-23747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:41:24.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-26T03:41:24.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:41:25.467 [DEBUG] [Thread-23747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:41:25.467 [DEBUG] [Thread-23747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:41:25.514 [DEBUG] [Thread-23747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:41:25.515 [DEBUG] [Thread-23747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:41:25.523 [DEBUG] [Thread-23747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:41:25.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:41:25.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-26T03:41:25.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-26T03:41:25.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:41:25.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:41:25.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:41:25.557 [DEBUG] [Thread-23747] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:41:32.034 [DEBUG] [Thread-23749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:47.085 [DEBUG] [Thread-23750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:52.439 [DEBUG] [Thread-23751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:41:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:41:55.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:41:55.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-26T03:41:56.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 41, 25), 1.97, 87.64, 0.0, 20.38, 11.56, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:41:56.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:41:25
2025-12-26T03:41:56.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:41:56.559 [DEBUG] [Thread-23752] [transport.py] [_log()] starting thread (client mode): 0xb95917e0
2025-12-26T03:41:56.559 [DEBUG] [Thread-23752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:41:56.579 [DEBUG] [Thread-23752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:41:56.579 [INFO] [Thread-23752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:41:56.582 [DEBUG] [Thread-23752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] client lang: <none>
2025-12-26T03:41:56.583 [DEBUG] [Thread-23752] [transport.py] [_log()] server lang: <none>
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] kex follows: False
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] Compression: none
2025-12-26T03:41:56.584 [DEBUG] [Thread-23752] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:41:56.604 [DEBUG] [Thread-23752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:41:56.605 [DEBUG] [Thread-23752] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:41:56.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:41:56.606 [DEBUG] [Thread-23752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:41:56.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:41:56.649 [DEBUG] [Thread-23752] [transport.py] [_log()] userauth is OK
2025-12-26T03:41:56.650 [DEBUG] [Thread-23752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:41:56.650 [DEBUG] [Thread-23752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:41:56.650 [DEBUG] [Thread-23752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:41:56.650 [DEBUG] [Thread-23752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:41:56.676 [INFO] [Thread-23752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:41:56.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:41:57.328 [DEBUG] [Thread-23752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:41:57.328 [DEBUG] [Thread-23752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:41:57.329 [DEBUG] [Thread-23752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:41:57.369 [DEBUG] [Thread-23752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:41:57.369 [DEBUG] [Thread-23752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:41:57.373 [DEBUG] [Thread-23752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:41:57.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:41:57.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:41:57.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:41:57.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:41:57.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:41:57.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:41:57.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:41:57.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:41:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:41:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.070196 -999.00  +11.60  13.18     89   +9.80 1 1 1 3 1     0    0 1.13 -28.52 ZNESW 13.2 13.2 143.4 18.7 12.3 -21.4 12.1 -21.1 11.9 -19.4 12.2 -20.6
2025-12-26T03:41:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:41:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:41:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.070196
2025-12-26T03:41:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:41:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:41:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:41:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:41:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:41:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:41:25', tmtdew=1.97, humidity=87.64, cloud=0.0, wind=20.38, temperature=11.56, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:41:04.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:40:00')
2025-12-26T03:41:57.401 [DEBUG] [Thread-23752] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:41:57.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-26T03:41:57.494 [DEBUG] [Thread-23755] [transport.py] [_log()] starting thread (client mode): 0xb95916c0
2025-12-26T03:41:57.494 [DEBUG] [Thread-23755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:41:57.508 [DEBUG] [Thread-23755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:41:57.509 [INFO] [Thread-23755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:41:57.516 [DEBUG] [Thread-23755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:41:57.516 [DEBUG] [Thread-23755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:41:57.516 [DEBUG] [Thread-23755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:41:57.516 [DEBUG] [Thread-23755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] client lang: <none>
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] server lang: <none>
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] kex follows: False
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:41:57.517 [DEBUG] [Thread-23755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:41:57.518 [DEBUG] [Thread-23755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:41:57.518 [DEBUG] [Thread-23755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:41:57.518 [DEBUG] [Thread-23755] [transport.py] [_log()] Compression: none
2025-12-26T03:41:57.518 [DEBUG] [Thread-23755] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:41:57.577 [DEBUG] [Thread-23755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:41:57.577 [DEBUG] [Thread-23755] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:41:57.578 [DEBUG] [Thread-23755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:41:57.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:41:57.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:41:57.639 [DEBUG] [Thread-23755] [transport.py] [_log()] userauth is OK
2025-12-26T03:41:57.640 [DEBUG] [Thread-23755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:41:57.640 [DEBUG] [Thread-23755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:41:57.640 [DEBUG] [Thread-23755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:41:57.640 [DEBUG] [Thread-23755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:41:57.662 [INFO] [Thread-23755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:41:57.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-26T03:41:57.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:41:58.543 [DEBUG] [Thread-23755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:41:58.543 [DEBUG] [Thread-23755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:41:58.591 [DEBUG] [Thread-23755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:41:58.591 [DEBUG] [Thread-23755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:41:58.600 [DEBUG] [Thread-23755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:41:58.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:41: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')
2025-12-26T03:41:58.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-26T03:41:58.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:41:58.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:41:58.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:41:58.631 [DEBUG] [Thread-23755] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:42:02.120 [DEBUG] [Thread-23757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:42:02.851 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:42:02.852 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:42:17.169 [DEBUG] [Thread-23758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:42:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:42:28.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:42:28.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-26T03:42:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 41, 57), 1.96, 87.67, 0.0, 17.66, 11.51, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:42:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:41:57
2025-12-26T03:42:29.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:42:29.640 [DEBUG] [Thread-23759] [transport.py] [_log()] starting thread (client mode): 0xb95f1ba0
2025-12-26T03:42:29.641 [DEBUG] [Thread-23759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:42:29.665 [DEBUG] [Thread-23759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:42:29.665 [INFO] [Thread-23759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:42:29.669 [DEBUG] [Thread-23759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] client lang: <none>
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] server lang: <none>
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] kex follows: False
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] Compression: none
2025-12-26T03:42:29.670 [DEBUG] [Thread-23759] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:42:29.684 [DEBUG] [Thread-23759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:42:29.684 [DEBUG] [Thread-23759] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:42:29.685 [DEBUG] [Thread-23759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:42:29.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:42:29.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:42:29.686 [DEBUG] [Thread-23759] [transport.py] [_log()] userauth is OK
2025-12-26T03:42:29.687 [DEBUG] [Thread-23759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:42:29.687 [DEBUG] [Thread-23759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:42:29.687 [DEBUG] [Thread-23759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:42:29.687 [DEBUG] [Thread-23759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:42:29.708 [INFO] [Thread-23759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:42:29.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:42:30.517 [DEBUG] [Thread-23759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:42:30.517 [DEBUG] [Thread-23759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:42:30.517 [DEBUG] [Thread-23759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:42:30.558 [DEBUG] [Thread-23759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:42:30.558 [DEBUG] [Thread-23759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:42:30.560 [DEBUG] [Thread-23759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:42:30.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:42:30.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:42:30.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:42:30.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:42:30.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:42:30.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:42:30.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.070543 -999.00  +11.60  12.57     89   +9.90 1 1 1 3 1     0    0 1.10 -29.44 ZNESW 12.6 12.6 148.0 14.6 12.3 -21.5 12.2 -21.2 11.9 -19.4 12.2 -20.6
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.070543
2025-12-26T03:42:30.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:42:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:42:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:42:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:42:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:42:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:41:57', tmtdew=1.96, humidity=87.67, cloud=0.0, wind=17.66, temperature=11.51, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:41:34.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:40:00')
2025-12-26T03:42:30.578 [DEBUG] [Thread-23759] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:42:30.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-26T03:42:30.662 [DEBUG] [Thread-23762] [transport.py] [_log()] starting thread (client mode): 0xb9593250
2025-12-26T03:42:30.662 [DEBUG] [Thread-23762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:42:30.677 [DEBUG] [Thread-23762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:42:30.677 [INFO] [Thread-23762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] client lang: <none>
2025-12-26T03:42:30.684 [DEBUG] [Thread-23762] [transport.py] [_log()] server lang: <none>
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] kex follows: False
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] Compression: none
2025-12-26T03:42:30.685 [DEBUG] [Thread-23762] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:42:30.743 [DEBUG] [Thread-23762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:42:30.743 [DEBUG] [Thread-23762] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:42:30.743 [DEBUG] [Thread-23762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:42:30.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:42:30.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:42:30.800 [DEBUG] [Thread-23762] [transport.py] [_log()] userauth is OK
2025-12-26T03:42:30.800 [DEBUG] [Thread-23762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:42:30.800 [DEBUG] [Thread-23762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:42:30.800 [DEBUG] [Thread-23762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:42:30.800 [DEBUG] [Thread-23762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:42:30.813 [INFO] [Thread-23762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:42:30.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-26T03:42:30.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:42:31.638 [DEBUG] [Thread-23762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:42:31.639 [DEBUG] [Thread-23762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:42:31.686 [DEBUG] [Thread-23762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:42:31.686 [DEBUG] [Thread-23762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:42:31.695 [DEBUG] [Thread-23762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:42:31.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:42:31.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-26T03:42:31.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:42:31.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:42:31.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:42:31.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:42:31.726 [DEBUG] [Thread-23762] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:42:32.196 [DEBUG] [Thread-23764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:42:47.240 [DEBUG] [Thread-23765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:42:52.517 [DEBUG] [Thread-23766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:01.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:43:01.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:43:01.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:43:02.273 [DEBUG] [Thread-23767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 42, 29), 1.97, 87.63, 0.0, 16.85, 11.54, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:43:02.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:42:29
2025-12-26T03:43:02.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:43:02.776 [DEBUG] [Thread-23768] [transport.py] [_log()] starting thread (client mode): 0xb9591cc0
2025-12-26T03:43:02.776 [DEBUG] [Thread-23768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:43:02.796 [DEBUG] [Thread-23768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:43:02.796 [INFO] [Thread-23768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] client lang: <none>
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] server lang: <none>
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] kex follows: False
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] Compression: none
2025-12-26T03:43:02.798 [DEBUG] [Thread-23768] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:43:02.806 [DEBUG] [Thread-23768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:43:02.806 [DEBUG] [Thread-23768] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:43:02.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:43:02.806 [DEBUG] [Thread-23768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:43:02.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:43:02.807 [DEBUG] [Thread-23768] [transport.py] [_log()] userauth is OK
2025-12-26T03:43:02.807 [DEBUG] [Thread-23768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:43:02.807 [DEBUG] [Thread-23768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:43:02.807 [DEBUG] [Thread-23768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:43:02.807 [DEBUG] [Thread-23768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:43:02.822 [INFO] [Thread-23768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:43:02.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:43:03.049 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:03.050 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:03.463 [DEBUG] [Thread-23768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:43:03.463 [DEBUG] [Thread-23768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:43:03.463 [DEBUG] [Thread-23768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:43:03.505 [DEBUG] [Thread-23768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:43:03.505 [DEBUG] [Thread-23768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:43:03.507 [DEBUG] [Thread-23768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:43:03.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:43:03.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:43:03.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:43:03.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:43:03.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:43:03.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:43:03.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.071237 -999.00  +11.60  12.42     88   +9.80 1 1 1 3 1     0    0 1.12 -27.87 ZNESW 12.4 12.4 162.4 15.9 12.2 -21.4 12.1 -21.1 11.9 -19.3 12.2 -20.2
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.071237
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:43:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:42:29', tmtdew=1.97, humidity=87.63, cloud=0.0, wind=16.85, temperature=11.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:42:34.877', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:40:00')
2025-12-26T03:43:03.526 [DEBUG] [Thread-23768] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:43:03.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-26T03:43:03.610 [DEBUG] [Thread-23771] [transport.py] [_log()] starting thread (client mode): 0xb6b205e0
2025-12-26T03:43:03.610 [DEBUG] [Thread-23771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:43:03.626 [DEBUG] [Thread-23771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:43:03.626 [INFO] [Thread-23771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] client lang: <none>
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] server lang: <none>
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] kex follows: False
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:43:03.633 [DEBUG] [Thread-23771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:43:03.634 [DEBUG] [Thread-23771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:43:03.634 [DEBUG] [Thread-23771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:43:03.634 [DEBUG] [Thread-23771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:43:03.634 [DEBUG] [Thread-23771] [transport.py] [_log()] Compression: none
2025-12-26T03:43:03.634 [DEBUG] [Thread-23771] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:43:03.689 [DEBUG] [Thread-23771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:43:03.689 [DEBUG] [Thread-23771] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:43:03.689 [DEBUG] [Thread-23771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:43:03.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:43:03.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:43:03.746 [DEBUG] [Thread-23771] [transport.py] [_log()] userauth is OK
2025-12-26T03:43:03.746 [DEBUG] [Thread-23771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:43:03.746 [DEBUG] [Thread-23771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:43:03.746 [DEBUG] [Thread-23771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:43:03.746 [DEBUG] [Thread-23771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:43:03.760 [INFO] [Thread-23771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:43:03.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-26T03:43:03.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:43:04.581 [DEBUG] [Thread-23771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:43:04.582 [DEBUG] [Thread-23771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:43:04.630 [DEBUG] [Thread-23771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:43:04.630 [DEBUG] [Thread-23771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:43:04.639 [DEBUG] [Thread-23771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:43:04.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:43:04.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-26T03:43:04.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-26T03:43:04.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:43:04.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:43:04.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:43:04.676 [DEBUG] [Thread-23771] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:43:17.309 [DEBUG] [Thread-23773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:32.360 [DEBUG] [Thread-23774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:34.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:43:34.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:43:34.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-26T03:43:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 43, 1), 1.98, 87.58, 0.0, 17.17, 11.54, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:43:35.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:43:01
2025-12-26T03:43:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:43:35.774 [DEBUG] [Thread-23775] [transport.py] [_log()] starting thread (client mode): 0xb95f2380
2025-12-26T03:43:35.774 [DEBUG] [Thread-23775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:43:35.794 [DEBUG] [Thread-23775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:43:35.795 [INFO] [Thread-23775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] client lang: <none>
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] server lang: <none>
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] kex follows: False
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] Compression: none
2025-12-26T03:43:35.798 [DEBUG] [Thread-23775] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:43:35.812 [DEBUG] [Thread-23775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:43:35.812 [DEBUG] [Thread-23775] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:43:35.813 [DEBUG] [Thread-23775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:43:35.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:43:35.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:43:35.814 [DEBUG] [Thread-23775] [transport.py] [_log()] userauth is OK
2025-12-26T03:43:35.814 [DEBUG] [Thread-23775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:43:35.814 [DEBUG] [Thread-23775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:43:35.814 [DEBUG] [Thread-23775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:43:35.814 [DEBUG] [Thread-23775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:43:35.843 [INFO] [Thread-23775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:43:35.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:43:36.655 [DEBUG] [Thread-23775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:43:36.655 [DEBUG] [Thread-23775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:43:36.656 [DEBUG] [Thread-23775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:43:36.697 [DEBUG] [Thread-23775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:43:36.697 [DEBUG] [Thread-23775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:43:36.699 [DEBUG] [Thread-23775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:43:36.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:43:36.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:43:36.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:43:36.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:43:36.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:43:36.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:43:36.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.071585 -999.00  +11.60  12.91     88   +9.90 1 1 1 3 1     0    0 1.17 -26.33 ZNESW 12.9 12.9 163.8 15.4 12.3 -21.4 12.2 -21.2 11.9 -19.4 12.2 -20.5
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.071585
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:43:36.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:43:01', tmtdew=1.98, humidity=87.58, cloud=0.0, wind=17.17, temperature=11.54, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:43:04.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:40:00')
2025-12-26T03:43:36.716 [DEBUG] [Thread-23775] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:43:36.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-26T03:43:36.802 [DEBUG] [Thread-23778] [transport.py] [_log()] starting thread (client mode): 0xb95f07f0
2025-12-26T03:43:36.802 [DEBUG] [Thread-23778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:43:36.817 [DEBUG] [Thread-23778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:43:36.817 [INFO] [Thread-23778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] client lang: <none>
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] server lang: <none>
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] kex follows: False
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] Compression: none
2025-12-26T03:43:36.825 [DEBUG] [Thread-23778] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:43:36.883 [DEBUG] [Thread-23778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:43:36.883 [DEBUG] [Thread-23778] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:43:36.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:43:36.883 [DEBUG] [Thread-23778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:43:36.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:43:36.941 [DEBUG] [Thread-23778] [transport.py] [_log()] userauth is OK
2025-12-26T03:43:36.941 [DEBUG] [Thread-23778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:43:36.941 [DEBUG] [Thread-23778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:43:36.941 [DEBUG] [Thread-23778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:43:36.941 [DEBUG] [Thread-23778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:43:36.954 [INFO] [Thread-23778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:43:36.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:43:36.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:43:37.802 [DEBUG] [Thread-23778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:43:37.802 [DEBUG] [Thread-23778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:43:37.853 [DEBUG] [Thread-23778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:43:37.853 [DEBUG] [Thread-23778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:43:37.862 [DEBUG] [Thread-23778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:43:37.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:43:37.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-26T03:43:37.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-26T03:43:37.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:43:37.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:43:37.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:43:37.893 [DEBUG] [Thread-23778] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:43:47.391 [DEBUG] [Thread-23780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:43:52.583 [DEBUG] [Thread-23781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:02.441 [DEBUG] [Thread-23782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:03.251 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:03.253 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:07.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:44:07.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:44:07.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-26T03:44:08.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 43, 33), 1.98, 87.54, 0.0, 18.26, 11.64, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:44:08.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:43:33
2025-12-26T03:44:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:44:08.917 [DEBUG] [Thread-23783] [transport.py] [_log()] starting thread (client mode): 0xbbfcd510
2025-12-26T03:44:08.917 [DEBUG] [Thread-23783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:44:08.937 [DEBUG] [Thread-23783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:44:08.937 [INFO] [Thread-23783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:44:08.940 [DEBUG] [Thread-23783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:44:08.940 [DEBUG] [Thread-23783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:44:08.940 [DEBUG] [Thread-23783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] client lang: <none>
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] server lang: <none>
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] kex follows: False
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] Compression: none
2025-12-26T03:44:08.941 [DEBUG] [Thread-23783] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:44:08.959 [DEBUG] [Thread-23783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:44:08.960 [DEBUG] [Thread-23783] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:44:08.960 [DEBUG] [Thread-23783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:44:08.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:44:08.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:44:08.962 [DEBUG] [Thread-23783] [transport.py] [_log()] userauth is OK
2025-12-26T03:44:08.962 [DEBUG] [Thread-23783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:44:08.962 [DEBUG] [Thread-23783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:44:08.962 [DEBUG] [Thread-23783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:44:08.963 [DEBUG] [Thread-23783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:44:08.987 [INFO] [Thread-23783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:44:08.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:44:09.647 [DEBUG] [Thread-23783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:44:09.647 [DEBUG] [Thread-23783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:44:09.648 [DEBUG] [Thread-23783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:44:09.689 [DEBUG] [Thread-23783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:44:09.689 [DEBUG] [Thread-23783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:44:09.692 [DEBUG] [Thread-23783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:44:09.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:44:09.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:44:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:44:09.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:44:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:44:09.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:44:09.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:44:09.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:44:09.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:44:09.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.071932 -999.00  +11.70  12.42     88   +9.90 1 1 1 3 1     0    0 1.16 -25.35 ZNESW 12.4 12.4 163.8 17.6 12.3 -21.3 12.1 -21.1 11.9 -19.3 12.2 -20.4
2025-12-26T03:44:09.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:44:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:44:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.071932
2025-12-26T03:44:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:44:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:44:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:44:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:44:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:44:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:43:33', tmtdew=1.98, humidity=87.54, cloud=0.0, wind=18.26, temperature=11.64, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:43:34.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:43:00')
2025-12-26T03:44:09.719 [DEBUG] [Thread-23783] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:44:09.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-26T03:44:09.813 [DEBUG] [Thread-23786] [transport.py] [_log()] starting thread (client mode): 0xbbfcdb70
2025-12-26T03:44:09.814 [DEBUG] [Thread-23786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:44:09.829 [DEBUG] [Thread-23786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:44:09.829 [INFO] [Thread-23786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:09.837 [DEBUG] [Thread-23786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] client lang: <none>
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] server lang: <none>
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] kex follows: False
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:44:09.838 [DEBUG] [Thread-23786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:44:09.839 [DEBUG] [Thread-23786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:44:09.839 [DEBUG] [Thread-23786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:44:09.839 [DEBUG] [Thread-23786] [transport.py] [_log()] Compression: none
2025-12-26T03:44:09.839 [DEBUG] [Thread-23786] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:44:09.895 [DEBUG] [Thread-23786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:44:09.895 [DEBUG] [Thread-23786] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:44:09.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:44:09.896 [DEBUG] [Thread-23786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:44:09.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:44:09.950 [DEBUG] [Thread-23786] [transport.py] [_log()] userauth is OK
2025-12-26T03:44:09.950 [DEBUG] [Thread-23786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:44:09.950 [DEBUG] [Thread-23786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:44:09.950 [DEBUG] [Thread-23786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:44:09.951 [DEBUG] [Thread-23786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:44:09.964 [INFO] [Thread-23786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:44:09.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:44:09.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:44:10.871 [DEBUG] [Thread-23786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:44:10.872 [DEBUG] [Thread-23786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:44:10.919 [DEBUG] [Thread-23786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:44:10.919 [DEBUG] [Thread-23786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:44:10.928 [DEBUG] [Thread-23786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:44:10.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:44:10.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-26T03:44:10.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-26T03:44:10.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:44:10.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:44:10.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:44:10.965 [DEBUG] [Thread-23786] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:44:17.474 [DEBUG] [Thread-23788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:32.538 [DEBUG] [Thread-23789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:44:40.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:44:40.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-26T03:44:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 44, 38), 2.0, 87.48, 0.0, 19.55, 11.69, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:44:41.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:44:38
2025-12-26T03:44:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:44:41.967 [DEBUG] [Thread-23790] [transport.py] [_log()] starting thread (client mode): 0xb95906a0
2025-12-26T03:44:41.968 [DEBUG] [Thread-23790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:44:41.988 [DEBUG] [Thread-23790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:44:41.988 [INFO] [Thread-23790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:44:41.991 [DEBUG] [Thread-23790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:44:41.991 [DEBUG] [Thread-23790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:44:41.991 [DEBUG] [Thread-23790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] client lang: <none>
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] server lang: <none>
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] kex follows: False
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:44:41.992 [DEBUG] [Thread-23790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:44:41.993 [DEBUG] [Thread-23790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:44:41.993 [DEBUG] [Thread-23790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:44:41.993 [DEBUG] [Thread-23790] [transport.py] [_log()] Compression: none
2025-12-26T03:44:41.993 [DEBUG] [Thread-23790] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:44:42.011 [DEBUG] [Thread-23790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:44:42.011 [DEBUG] [Thread-23790] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:44:42.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:44:42.012 [DEBUG] [Thread-23790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:44:42.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:44:42.014 [DEBUG] [Thread-23790] [transport.py] [_log()] userauth is OK
2025-12-26T03:44:42.014 [DEBUG] [Thread-23790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:44:42.014 [DEBUG] [Thread-23790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:44:42.014 [DEBUG] [Thread-23790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:44:42.014 [DEBUG] [Thread-23790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:44:42.031 [INFO] [Thread-23790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:44:42.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:44:42.784 [DEBUG] [Thread-23790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:44:42.785 [DEBUG] [Thread-23790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:44:42.785 [DEBUG] [Thread-23790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:44:42.826 [DEBUG] [Thread-23790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:44:42.826 [DEBUG] [Thread-23790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:44:42.830 [DEBUG] [Thread-23790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:44:42.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:44:42.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:44:42.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:44:42.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:44:42.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:44:42.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:44:42.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:44:42.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:44:42.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:44:42.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.072279 -999.00  +11.70  14.70     88   +9.90 1 1 1 3 1     0    0 1.21 -22.92 ZNESW 14.7 14.7 161.2 19.3 12.3 -21.4 12.1 -21.1 11.9 -19.3 12.2 -20.5
2025-12-26T03:44:42.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:44:42.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:44:42.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.072279
2025-12-26T03:44:42.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:44:42.857 [DEBUG] [Thread-23790] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:44:42.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:44:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:44:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:44:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:44:42.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:44:38', tmtdew=2.0, humidity=87.48, cloud=0.0, wind=19.55, temperature=11.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:44:04.906', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:43:00')
2025-12-26T03:44:42.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-26T03:44:42.955 [DEBUG] [Thread-23793] [transport.py] [_log()] starting thread (client mode): 0xbbfce500
2025-12-26T03:44:42.955 [DEBUG] [Thread-23793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:44:42.970 [DEBUG] [Thread-23793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:44:42.970 [INFO] [Thread-23793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] client lang: <none>
2025-12-26T03:44:42.977 [DEBUG] [Thread-23793] [transport.py] [_log()] server lang: <none>
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] kex follows: False
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] Compression: none
2025-12-26T03:44:42.978 [DEBUG] [Thread-23793] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:44:43.036 [DEBUG] [Thread-23793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:44:43.037 [DEBUG] [Thread-23793] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:44:43.037 [DEBUG] [Thread-23793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:44:43.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:44:43.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:44:43.093 [DEBUG] [Thread-23793] [transport.py] [_log()] userauth is OK
2025-12-26T03:44:43.093 [DEBUG] [Thread-23793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:44:43.094 [DEBUG] [Thread-23793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:44:43.094 [DEBUG] [Thread-23793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:44:43.094 [DEBUG] [Thread-23793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:44:43.112 [INFO] [Thread-23793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:44:43.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-26T03:44:43.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:44:43.953 [DEBUG] [Thread-23793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:44:43.953 [DEBUG] [Thread-23793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:44:44.000 [DEBUG] [Thread-23793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:44:44.001 [DEBUG] [Thread-23793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:44:44.009 [DEBUG] [Thread-23793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:44:44.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:44:44.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-26T03:44:44.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-26T03:44:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:44:44.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:44:44.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:44:44.044 [DEBUG] [Thread-23793] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:44:47.573 [DEBUG] [Thread-23795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:44:52.656 [DEBUG] [Thread-23796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:02.618 [DEBUG] [Thread-23797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:03.452 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:03.453 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:14.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:45:14.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:45:14.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-26T03:45:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 45, 10), 2.01, 87.39, 0.0, 21.21, 11.69, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:45:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:45:10
2025-12-26T03:45:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:45:15.028 [DEBUG] [Thread-23798] [transport.py] [_log()] starting thread (client mode): 0xb95f1cf0
2025-12-26T03:45:15.028 [DEBUG] [Thread-23798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:45:15.049 [DEBUG] [Thread-23798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:45:15.049 [INFO] [Thread-23798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:45:15.052 [DEBUG] [Thread-23798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] client lang: <none>
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] server lang: <none>
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] kex follows: False
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] Compression: none
2025-12-26T03:45:15.053 [DEBUG] [Thread-23798] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:45:15.069 [DEBUG] [Thread-23798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:45:15.069 [DEBUG] [Thread-23798] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:45:15.070 [DEBUG] [Thread-23798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:45:15.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:45:15.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:45:15.072 [DEBUG] [Thread-23798] [transport.py] [_log()] userauth is OK
2025-12-26T03:45:15.072 [DEBUG] [Thread-23798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:45:15.072 [DEBUG] [Thread-23798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:45:15.072 [DEBUG] [Thread-23798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:45:15.072 [DEBUG] [Thread-23798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:45:15.093 [INFO] [Thread-23798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:45:15.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:45:15.756 [DEBUG] [Thread-23798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:45:15.756 [DEBUG] [Thread-23798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:45:15.756 [DEBUG] [Thread-23798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:45:15.798 [DEBUG] [Thread-23798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:45:15.798 [DEBUG] [Thread-23798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:45:15.800 [DEBUG] [Thread-23798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:45:15.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:45:15.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:45:15.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:45:15.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:45:15.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:45:15.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:45:15.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:45:15.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:45:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:45:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.072626 -999.00  +11.70  17.93     88   +9.90 1 2 1 3 1     0    0 1.16 -24.83 zNESW 17.9 17.9 165.4 23.6 12.3 -21.3 12.2 -21.1 11.9 -19.3 12.2 -20.2
2025-12-26T03:45:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:45:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:45:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.072626
2025-12-26T03:45:15.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:45:15.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:45:15.825 [DEBUG] [Thread-23798] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:45:15.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:45:15.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:45:15.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T03:45:15.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:45:10', tmtdew=2.01, humidity=87.39, cloud=0.0, wind=21.21, temperature=11.69, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:44:34.886', atlas_cloud=2, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:43:00')
2025-12-26T03:45:15.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-26T03:45:15.924 [DEBUG] [Thread-23801] [transport.py] [_log()] starting thread (client mode): 0xb6b23310
2025-12-26T03:45:15.924 [DEBUG] [Thread-23801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:45:15.939 [DEBUG] [Thread-23801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:45:15.939 [INFO] [Thread-23801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:45:15.947 [DEBUG] [Thread-23801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] client lang: <none>
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] server lang: <none>
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] kex follows: False
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] Compression: none
2025-12-26T03:45:15.948 [DEBUG] [Thread-23801] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:45:16.007 [DEBUG] [Thread-23801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:45:16.007 [DEBUG] [Thread-23801] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:45:16.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:45:16.008 [DEBUG] [Thread-23801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:45:16.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:45:16.063 [DEBUG] [Thread-23801] [transport.py] [_log()] userauth is OK
2025-12-26T03:45:16.063 [DEBUG] [Thread-23801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:45:16.063 [DEBUG] [Thread-23801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:45:16.063 [DEBUG] [Thread-23801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:45:16.063 [DEBUG] [Thread-23801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:45:16.082 [INFO] [Thread-23801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:45: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-26T03:45:16.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:45:16.937 [DEBUG] [Thread-23801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:45:16.937 [DEBUG] [Thread-23801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:45:16.985 [DEBUG] [Thread-23801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:45:16.986 [DEBUG] [Thread-23801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:45:16.995 [DEBUG] [Thread-23801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:45:17.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:45:17.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:45:17.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:45:17.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:45:17.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:45:17.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:45:17.031 [DEBUG] [Thread-23801] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:45:17.652 [DEBUG] [Thread-23803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:32.710 [DEBUG] [Thread-23804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:45:47.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:45:47.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-26T03:45:47.737 [DEBUG] [Thread-23805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:45:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 45, 42), 2.01, 87.38, 0.0, 20.82, 11.82, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:45:47.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:45:42
2025-12-26T03:45:47.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:45:48.049 [DEBUG] [Thread-23806] [transport.py] [_log()] starting thread (client mode): 0xb95902e0
2025-12-26T03:45:48.049 [DEBUG] [Thread-23806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:45:48.064 [DEBUG] [Thread-23806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:45:48.064 [INFO] [Thread-23806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] client lang: <none>
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] server lang: <none>
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] kex follows: False
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] Compression: none
2025-12-26T03:45:48.067 [DEBUG] [Thread-23806] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:45:48.085 [DEBUG] [Thread-23806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:45:48.086 [DEBUG] [Thread-23806] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:45:48.086 [DEBUG] [Thread-23806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:45:48.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:45:48.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:45:48.088 [DEBUG] [Thread-23806] [transport.py] [_log()] userauth is OK
2025-12-26T03:45:48.088 [DEBUG] [Thread-23806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:45:48.088 [DEBUG] [Thread-23806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:45:48.088 [DEBUG] [Thread-23806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:45:48.089 [DEBUG] [Thread-23806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:45:48.123 [INFO] [Thread-23806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:45:48.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:45:48.693 [DEBUG] [Thread-23806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:45:48.693 [DEBUG] [Thread-23806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:45:48.693 [DEBUG] [Thread-23806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:45:48.734 [DEBUG] [Thread-23806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:45:48.734 [DEBUG] [Thread-23806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:45:48.737 [DEBUG] [Thread-23806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:45:48.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:45:48.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:45:48.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:45:48.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:45:48.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:45:48.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:45:48.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.073321 -999.00  +11.80  14.46     88   +9.90 1 2 1 3 1     0    0 1.20 -23.76 zNESW 14.5 14.5 174.4 22.5 12.3 -21.4 12.2 -21.1 11.9 -19.2 12.2 -20.3
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.073321
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-26T03:45:48.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:45:42', tmtdew=2.01, humidity=87.38, cloud=0.0, wind=20.82, temperature=11.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:45:34.934', atlas_cloud=2, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:43:00')
2025-12-26T03:45:48.756 [DEBUG] [Thread-23806] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:45:48.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-26T03:45:48.837 [DEBUG] [Thread-23809] [transport.py] [_log()] starting thread (client mode): 0xb95914b0
2025-12-26T03:45:48.838 [DEBUG] [Thread-23809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:45:48.856 [DEBUG] [Thread-23809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:45:48.856 [INFO] [Thread-23809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:45:48.865 [DEBUG] [Thread-23809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:45:48.865 [DEBUG] [Thread-23809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:45:48.865 [DEBUG] [Thread-23809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] client lang: <none>
2025-12-26T03:45:48.866 [DEBUG] [Thread-23809] [transport.py] [_log()] server lang: <none>
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] kex follows: False
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] Compression: none
2025-12-26T03:45:48.867 [DEBUG] [Thread-23809] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:45:48.930 [DEBUG] [Thread-23809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:45:48.931 [DEBUG] [Thread-23809] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:45:48.931 [DEBUG] [Thread-23809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:45:48.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:45:48.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:45:48.992 [DEBUG] [Thread-23809] [transport.py] [_log()] userauth is OK
2025-12-26T03:45:48.992 [DEBUG] [Thread-23809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:45:48.992 [DEBUG] [Thread-23809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:45:48.992 [DEBUG] [Thread-23809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:45:48.993 [DEBUG] [Thread-23809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:45:49.011 [INFO] [Thread-23809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:45:49.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-26T03:45:49.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:45:49.819 [DEBUG] [Thread-23809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:45:49.819 [DEBUG] [Thread-23809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:45:49.867 [DEBUG] [Thread-23809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:45:49.868 [DEBUG] [Thread-23809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:45:49.880 [DEBUG] [Thread-23809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:45:49.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:45:49.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-26T03:45:49.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-26T03:45:49.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:45:49.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:45:49.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:45:49.917 [DEBUG] [Thread-23809] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:45:52.724 [DEBUG] [Thread-23811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:02.772 [DEBUG] [Thread-23812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:03.651 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:03.652 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:17.830 [DEBUG] [Thread-23813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:46:19.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:46:19.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:46:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 46, 14), 2.04, 87.21, 0.0, 19.78, 11.87, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:46:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:46:14
2025-12-26T03:46:20.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:46:20.925 [DEBUG] [Thread-23814] [transport.py] [_log()] starting thread (client mode): 0xb9547400
2025-12-26T03:46:20.925 [DEBUG] [Thread-23814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:46:20.944 [DEBUG] [Thread-23814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:46:20.944 [INFO] [Thread-23814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] client lang: <none>
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] server lang: <none>
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] kex follows: False
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:46:20.946 [DEBUG] [Thread-23814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:46:20.947 [DEBUG] [Thread-23814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:46:20.947 [DEBUG] [Thread-23814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:46:20.947 [DEBUG] [Thread-23814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:46:20.947 [DEBUG] [Thread-23814] [transport.py] [_log()] Compression: none
2025-12-26T03:46:20.947 [DEBUG] [Thread-23814] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:46:20.966 [DEBUG] [Thread-23814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:46:20.966 [DEBUG] [Thread-23814] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:46:20.966 [DEBUG] [Thread-23814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:46:20.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:46:20.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:46:20.967 [DEBUG] [Thread-23814] [transport.py] [_log()] userauth is OK
2025-12-26T03:46:20.968 [DEBUG] [Thread-23814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:46:20.968 [DEBUG] [Thread-23814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:46:20.968 [DEBUG] [Thread-23814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:46:20.968 [DEBUG] [Thread-23814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:46:20.986 [INFO] [Thread-23814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:46:20.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:46:21.574 [DEBUG] [Thread-23814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:46:21.574 [DEBUG] [Thread-23814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:46:21.574 [DEBUG] [Thread-23814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:46:21.615 [DEBUG] [Thread-23814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:46:21.615 [DEBUG] [Thread-23814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:46:21.617 [DEBUG] [Thread-23814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:46:21.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:46:21.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:46:21.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:46:21.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:46:21.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:46:21.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:46:21.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:46:21.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:46:21.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:46:21.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.073668 -999.00  +11.80  16.81     88   +9.90 1 1 1 3 1     0    0 1.24 -22.19 ZNESW 16.8 16.8 173.6 27.4 12.3 -21.4 12.2 -21.3 12.0 -19.4 12.2 -20.5
2025-12-26T03:46:21.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:46:21.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:46:21.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.073668
2025-12-26T03:46:21.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:46:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:46:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:46:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:46:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:46:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:46:14', tmtdew=2.04, humidity=87.21, cloud=0.0, wind=19.78, temperature=11.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:46:04.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:43:00')
2025-12-26T03:46:21.643 [DEBUG] [Thread-23814] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:46:21.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-26T03:46:21.738 [DEBUG] [Thread-23817] [transport.py] [_log()] starting thread (client mode): 0xb9544cd0
2025-12-26T03:46:21.739 [DEBUG] [Thread-23817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:46:21.753 [DEBUG] [Thread-23817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:46:21.753 [INFO] [Thread-23817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:46:21.760 [DEBUG] [Thread-23817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] client lang: <none>
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] server lang: <none>
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] kex follows: False
2025-12-26T03:46:21.761 [DEBUG] [Thread-23817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:46:21.762 [DEBUG] [Thread-23817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:46:21.762 [DEBUG] [Thread-23817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:46:21.762 [DEBUG] [Thread-23817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:46:21.762 [DEBUG] [Thread-23817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:46:21.762 [DEBUG] [Thread-23817] [transport.py] [_log()] Compression: none
2025-12-26T03:46:21.762 [DEBUG] [Thread-23817] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:46:21.818 [DEBUG] [Thread-23817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:46:21.818 [DEBUG] [Thread-23817] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:46:21.819 [DEBUG] [Thread-23817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:46:21.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:46:21.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:46:21.874 [DEBUG] [Thread-23817] [transport.py] [_log()] userauth is OK
2025-12-26T03:46:21.874 [DEBUG] [Thread-23817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:46:21.875 [DEBUG] [Thread-23817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:46:21.875 [DEBUG] [Thread-23817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:46:21.875 [DEBUG] [Thread-23817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:46:21.894 [INFO] [Thread-23817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:46:21.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-26T03:46:21.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:46:22.737 [DEBUG] [Thread-23817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:46:22.737 [DEBUG] [Thread-23817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:46:22.785 [DEBUG] [Thread-23817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:46:22.785 [DEBUG] [Thread-23817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:46:22.794 [DEBUG] [Thread-23817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:46:22.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:46:22.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:46:22.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-26T03:46:22.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:46:22.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:46:22.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:46:22.831 [DEBUG] [Thread-23817] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:46:32.866 [DEBUG] [Thread-23819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:47.913 [DEBUG] [Thread-23820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:52.810 [DEBUG] [Thread-23821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:46:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:46:52.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:46:52.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-26T03:46:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 46, 46), 2.18, 86.49, 0.0, 16.64, 11.81, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:46:53.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:46:46
2025-12-26T03:46:53.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:46:53.858 [DEBUG] [Thread-23822] [transport.py] [_log()] starting thread (client mode): 0xb6b22470
2025-12-26T03:46:53.858 [DEBUG] [Thread-23822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:46:53.877 [DEBUG] [Thread-23822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:46:53.877 [INFO] [Thread-23822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:46:53.880 [DEBUG] [Thread-23822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] client lang: <none>
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] server lang: <none>
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] kex follows: False
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:46:53.881 [DEBUG] [Thread-23822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:46:53.882 [DEBUG] [Thread-23822] [transport.py] [_log()] Compression: none
2025-12-26T03:46:53.882 [DEBUG] [Thread-23822] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:46:53.898 [DEBUG] [Thread-23822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:46:53.899 [DEBUG] [Thread-23822] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:46:53.899 [DEBUG] [Thread-23822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:46:53.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:46:53.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:46:53.902 [DEBUG] [Thread-23822] [transport.py] [_log()] userauth is OK
2025-12-26T03:46:53.902 [DEBUG] [Thread-23822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:46:53.902 [DEBUG] [Thread-23822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:46:53.902 [DEBUG] [Thread-23822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:46:53.902 [DEBUG] [Thread-23822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:46:53.926 [INFO] [Thread-23822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:46:53.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:46:54.590 [DEBUG] [Thread-23822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:46:54.590 [DEBUG] [Thread-23822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:46:54.591 [DEBUG] [Thread-23822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:46:54.631 [DEBUG] [Thread-23822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:46:54.631 [DEBUG] [Thread-23822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:46:54.635 [DEBUG] [Thread-23822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:46:54.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:46:54.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:46:54.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:46:54.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:46:54.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:46:54.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:46:54.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:46:54.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:46:54.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:46:54.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.073668 -999.00  +11.80  16.81     88   +9.90 1 1 1 3 1     0    0 1.24 -22.19 ZNESW 16.8 16.8 173.6 27.4 12.3 -21.4 12.2 -21.3 12.0 -19.4 12.2 -20.5
2025-12-26T03:46:54.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:46:54.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:46:54.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.073668
2025-12-26T03:46:54.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:46:54.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:46:54.660 [DEBUG] [Thread-23822] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:46:54.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:46:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:46:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:46:54.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:46:46', tmtdew=2.18, humidity=86.49, cloud=0.0, wind=16.64, temperature=11.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:46:04.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.40974999999999895, 0.27725000000000044, 0.5647500000000001, 0.31349999999999945, 0.28300000000000125, 0.38925000000000054, 0.5609999999999999, 0.6057500000000005, 0.4029999999999987, 0.2029999999999994, 0.26525, 0.30049999999999955, 0.24099999999999966, 0.33424999999999905, 0.4659999999999993, 0.4689999999999994, 0.21525000000000105, 0.32450000000000045, 0.23599999999999888, 0.36774999999999913, 0.29549999999999876, 0.42324999999999946, 0.4202500000000011, 0.3827499999999997, 0.2774999999999981, 0.27550000000000097, 0.3307500000000001, 0.33250000000000046, 0.4504999999999999, 0.36350000000000104, 0.479000000000001, 0.6530000000000005, 0.35274999999999945], zp_timestamp='2025-12-26T01:43:00')
2025-12-26T03:46:54.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-26T03:46:54.760 [DEBUG] [Thread-23825] [transport.py] [_log()] starting thread (client mode): 0xb9544fd0
2025-12-26T03:46:54.761 [DEBUG] [Thread-23825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:46:54.775 [DEBUG] [Thread-23825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:46:54.775 [INFO] [Thread-23825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:46:54.783 [DEBUG] [Thread-23825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] client lang: <none>
2025-12-26T03:46:54.784 [DEBUG] [Thread-23825] [transport.py] [_log()] server lang: <none>
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] kex follows: False
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] Compression: none
2025-12-26T03:46:54.785 [DEBUG] [Thread-23825] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:46:54.839 [DEBUG] [Thread-23825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:46:54.840 [DEBUG] [Thread-23825] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:46:54.840 [DEBUG] [Thread-23825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:46:54.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:46:54.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:46:54.895 [DEBUG] [Thread-23825] [transport.py] [_log()] userauth is OK
2025-12-26T03:46:54.896 [DEBUG] [Thread-23825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:46:54.896 [DEBUG] [Thread-23825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:46:54.896 [DEBUG] [Thread-23825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:46:54.896 [DEBUG] [Thread-23825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:46:54.914 [INFO] [Thread-23825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:46:54.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-26T03:46:54.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:46:55.727 [DEBUG] [Thread-23825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:46:55.728 [DEBUG] [Thread-23825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:46:55.776 [DEBUG] [Thread-23825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:46:55.777 [DEBUG] [Thread-23825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:46:55.785 [DEBUG] [Thread-23825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:46:55.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:46:55.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:46:55.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:46:55.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:46:55.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:46:55.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:46:55.820 [DEBUG] [Thread-23825] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:47:02.943 [DEBUG] [Thread-23827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:03.854 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:03.855 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:17.990 [DEBUG] [Thread-23828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:25.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:47:25.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:47:25.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:47:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 47, 18), 2.19, 86.43, 0.0, 19.43, 11.84, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:47:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:47:18
2025-12-26T03:47:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:47:26.836 [DEBUG] [Thread-23829] [transport.py] [_log()] starting thread (client mode): 0xb6b145e0
2025-12-26T03:47:26.836 [DEBUG] [Thread-23829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:47:26.857 [DEBUG] [Thread-23829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:47:26.857 [INFO] [Thread-23829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] client lang: <none>
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] server lang: <none>
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] kex follows: False
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] Compression: none
2025-12-26T03:47:26.860 [DEBUG] [Thread-23829] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:47:26.875 [DEBUG] [Thread-23829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:47:26.875 [DEBUG] [Thread-23829] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:47:26.876 [DEBUG] [Thread-23829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:47:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:47:26.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:47:26.876 [DEBUG] [Thread-23829] [transport.py] [_log()] userauth is OK
2025-12-26T03:47:26.876 [DEBUG] [Thread-23829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:47:26.876 [DEBUG] [Thread-23829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:47:26.876 [DEBUG] [Thread-23829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:47:26.876 [DEBUG] [Thread-23829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:47:26.886 [INFO] [Thread-23829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:47:26.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:47:27.544 [DEBUG] [Thread-23829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:47:27.545 [DEBUG] [Thread-23829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:47:27.545 [DEBUG] [Thread-23829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:47:27.586 [DEBUG] [Thread-23829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:47:27.586 [DEBUG] [Thread-23829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:47:27.588 [DEBUG] [Thread-23829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:47:27.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:47:27.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:47:27.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:47:27.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:47:27.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:47:27.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:47:27.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:47:27.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:47:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:47:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.074015 -999.00  +11.80  12.43     88   +9.90 1 1 1 3 1     0    0 1.31 -20.55 ZNESW 12.4 12.4 157.4 18.5 12.3 -21.6 12.2 -21.2 12.0 -19.5 12.3 -20.5
2025-12-26T03:47:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:47:27.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.074015
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:47:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:47:18', tmtdew=2.19, humidity=86.43, cloud=0.0, wind=19.43, temperature=11.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:46:34.896', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:46:00')
2025-12-26T03:47:27.609 [DEBUG] [Thread-23829] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:47:27.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-26T03:47:27.692 [DEBUG] [Thread-23832] [transport.py] [_log()] starting thread (client mode): 0xb6b15b70
2025-12-26T03:47:27.692 [DEBUG] [Thread-23832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:47:27.708 [DEBUG] [Thread-23832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:47:27.708 [INFO] [Thread-23832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] client lang: <none>
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] server lang: <none>
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] kex follows: False
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] Compression: none
2025-12-26T03:47:27.715 [DEBUG] [Thread-23832] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:47:27.775 [DEBUG] [Thread-23832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:47:27.775 [DEBUG] [Thread-23832] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:47:27.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:47:27.775 [DEBUG] [Thread-23832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:47:27.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:47:27.833 [DEBUG] [Thread-23832] [transport.py] [_log()] userauth is OK
2025-12-26T03:47:27.833 [DEBUG] [Thread-23832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:47:27.833 [DEBUG] [Thread-23832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:47:27.833 [DEBUG] [Thread-23832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:47:27.833 [DEBUG] [Thread-23832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:47:27.847 [INFO] [Thread-23832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:47:27.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-26T03:47:27.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:47:28.682 [DEBUG] [Thread-23832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:47:28.683 [DEBUG] [Thread-23832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:47:28.735 [DEBUG] [Thread-23832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:47:28.735 [DEBUG] [Thread-23832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:47:28.743 [DEBUG] [Thread-23832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:47:28.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:47:28.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:47:28.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-26T03:47:28.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:47:28.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:47:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:47:28.776 [DEBUG] [Thread-23832] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:47:33.019 [DEBUG] [Thread-23834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:48.080 [DEBUG] [Thread-23835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:52.881 [DEBUG] [Thread-23836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:47:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:47:58.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:47:58.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-26T03:47:59.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 47, 50), 2.24, 86.45, 0.0, 21.26, 11.86, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:47:59.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:47:50
2025-12-26T03:47:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:47:59.788 [DEBUG] [Thread-23837] [transport.py] [_log()] starting thread (client mode): 0xb9592ef0
2025-12-26T03:47:59.789 [DEBUG] [Thread-23837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:47:59.808 [DEBUG] [Thread-23837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:47:59.809 [INFO] [Thread-23837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:47:59.812 [DEBUG] [Thread-23837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:47:59.812 [DEBUG] [Thread-23837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:47:59.812 [DEBUG] [Thread-23837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:47:59.812 [DEBUG] [Thread-23837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:47:59.812 [DEBUG] [Thread-23837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:47:59.812 [DEBUG] [Thread-23837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] client lang: <none>
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] server lang: <none>
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] kex follows: False
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:47:59.813 [DEBUG] [Thread-23837] [transport.py] [_log()] Compression: none
2025-12-26T03:47:59.814 [DEBUG] [Thread-23837] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:47:59.836 [DEBUG] [Thread-23837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:47:59.836 [DEBUG] [Thread-23837] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:47:59.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:47:59.837 [DEBUG] [Thread-23837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:47:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:47:59.839 [DEBUG] [Thread-23837] [transport.py] [_log()] userauth is OK
2025-12-26T03:47:59.840 [DEBUG] [Thread-23837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:47:59.840 [DEBUG] [Thread-23837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:47:59.840 [DEBUG] [Thread-23837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:47:59.840 [DEBUG] [Thread-23837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:47:59.858 [INFO] [Thread-23837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:47:59.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:48:00.495 [DEBUG] [Thread-23837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:48:00.495 [DEBUG] [Thread-23837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:48:00.496 [DEBUG] [Thread-23837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:48:00.536 [DEBUG] [Thread-23837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:48:00.536 [DEBUG] [Thread-23837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:48:00.539 [DEBUG] [Thread-23837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:48:00.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:48:00.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:48:00.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:48:00.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:48:00.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:48:00.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:48:00.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:48:00.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:48:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:48:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.074362 -999.00  +11.80  17.99     88   +9.90 1 1 1 3 1     0    0 1.35 -18.67 ZNESW 18.0 18.0 163.4 19.7 12.3 -21.5 12.2 -21.3 12.0 -19.6 12.3 -20.5
2025-12-26T03:48:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:48:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:48:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.074362
2025-12-26T03:48:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:48:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:48:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:48:00.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:48:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:48:00.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:47:50', tmtdew=2.24, humidity=86.45, cloud=0.0, wind=21.26, temperature=11.86, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:47:04.877', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:46:00')
2025-12-26T03:48:00.567 [DEBUG] [Thread-23837] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:48:00.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-26T03:48:00.662 [DEBUG] [Thread-23840] [transport.py] [_log()] starting thread (client mode): 0xb6b21ed0
2025-12-26T03:48:00.662 [DEBUG] [Thread-23840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:48:00.677 [DEBUG] [Thread-23840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:48:00.677 [INFO] [Thread-23840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:48:00.685 [DEBUG] [Thread-23840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:48:00.685 [DEBUG] [Thread-23840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] client lang: <none>
2025-12-26T03:48:00.686 [DEBUG] [Thread-23840] [transport.py] [_log()] server lang: <none>
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] kex follows: False
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] Compression: none
2025-12-26T03:48:00.687 [DEBUG] [Thread-23840] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:48:00.747 [DEBUG] [Thread-23840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:48:00.748 [DEBUG] [Thread-23840] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:48:00.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:48:00.749 [DEBUG] [Thread-23840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:48:00.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:48:00.809 [DEBUG] [Thread-23840] [transport.py] [_log()] userauth is OK
2025-12-26T03:48:00.810 [DEBUG] [Thread-23840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:48:00.810 [DEBUG] [Thread-23840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:48:00.810 [DEBUG] [Thread-23840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:48:00.810 [DEBUG] [Thread-23840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:48:00.831 [INFO] [Thread-23840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:48:00.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-26T03:48:00.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:48:01.693 [DEBUG] [Thread-23840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:48:01.693 [DEBUG] [Thread-23840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:48:01.741 [DEBUG] [Thread-23840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:48:01.741 [DEBUG] [Thread-23840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:48:01.750 [DEBUG] [Thread-23840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:48:01.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:48:01.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:48:01.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-26T03:48:01.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:48:01.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:48:01.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:48:01.791 [DEBUG] [Thread-23840] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:48:03.114 [DEBUG] [Thread-23842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:48:04.056 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:48:04.057 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:48:18.162 [DEBUG] [Thread-23843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:48:31.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:48:31.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:48:31.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-26T03:48:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 48, 22), 2.24, 86.43, 0.0, 20.19, 11.87, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:48:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:48:22
2025-12-26T03:48:32.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:48:32.785 [DEBUG] [Thread-23844] [transport.py] [_log()] starting thread (client mode): 0xb6b170a0
2025-12-26T03:48:32.785 [DEBUG] [Thread-23844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:48:32.805 [DEBUG] [Thread-23844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:48:32.805 [INFO] [Thread-23844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:48:32.808 [DEBUG] [Thread-23844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] client lang: <none>
2025-12-26T03:48:32.809 [DEBUG] [Thread-23844] [transport.py] [_log()] server lang: <none>
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] kex follows: False
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] Compression: none
2025-12-26T03:48:32.810 [DEBUG] [Thread-23844] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:48:32.827 [DEBUG] [Thread-23844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:48:32.828 [DEBUG] [Thread-23844] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:48:32.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:48:32.829 [DEBUG] [Thread-23844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:48:32.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:48:32.831 [DEBUG] [Thread-23844] [transport.py] [_log()] userauth is OK
2025-12-26T03:48:32.832 [DEBUG] [Thread-23844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:48:32.832 [DEBUG] [Thread-23844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:48:32.832 [DEBUG] [Thread-23844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:48:32.832 [DEBUG] [Thread-23844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:48:32.856 [INFO] [Thread-23844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:48:32.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:48:33.198 [DEBUG] [Thread-23846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:48:33.488 [DEBUG] [Thread-23844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:48:33.488 [DEBUG] [Thread-23844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:48:33.489 [DEBUG] [Thread-23844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:48:33.529 [DEBUG] [Thread-23844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:48:33.529 [DEBUG] [Thread-23844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:48:33.533 [DEBUG] [Thread-23844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:48:33.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:48:33.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:48:33.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:48:33.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:48:33.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:48:33.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:48:33.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:48:33.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:48:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:48:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.074710 -999.00  +11.80  13.90     88   +9.90 1 1 1 3 1     0    0 1.36 -18.18 ZNESW 13.9 13.9 154.3 20.6 12.3 -21.5 12.2 -21.3 11.9 -19.5 12.3 -20.7
2025-12-26T03:48:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:48:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:48:33.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.074710
2025-12-26T03:48:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:48:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:48:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:48:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:48:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:48:33.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:48:22', tmtdew=2.24, humidity=86.43, cloud=0.0, wind=20.19, temperature=11.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:47:34.944', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:46:00')
2025-12-26T03:48:33.559 [DEBUG] [Thread-23844] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:48:33.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:48:33.666 [DEBUG] [Thread-23848] [transport.py] [_log()] starting thread (client mode): 0xb6b768c0
2025-12-26T03:48:33.666 [DEBUG] [Thread-23848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:48:33.680 [DEBUG] [Thread-23848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:48:33.681 [INFO] [Thread-23848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:48:33.688 [DEBUG] [Thread-23848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] client lang: <none>
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] server lang: <none>
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] kex follows: False
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] Compression: none
2025-12-26T03:48:33.689 [DEBUG] [Thread-23848] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:48:33.748 [DEBUG] [Thread-23848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:48:33.748 [DEBUG] [Thread-23848] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:48:33.749 [DEBUG] [Thread-23848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:48:33.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:48:33.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:48:33.804 [DEBUG] [Thread-23848] [transport.py] [_log()] userauth is OK
2025-12-26T03:48:33.804 [DEBUG] [Thread-23848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:48:33.804 [DEBUG] [Thread-23848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:48:33.804 [DEBUG] [Thread-23848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:48:33.804 [DEBUG] [Thread-23848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:48:33.823 [INFO] [Thread-23848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:48:33.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-26T03:48:33.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:48:34.635 [DEBUG] [Thread-23848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:48:34.635 [DEBUG] [Thread-23848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:48:34.686 [DEBUG] [Thread-23848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:48:34.687 [DEBUG] [Thread-23848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:48:34.696 [DEBUG] [Thread-23848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:48:34.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:48:34.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:48:34.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-26T03:48:34.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:48:34.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:48:34.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:48:34.733 [DEBUG] [Thread-23848] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:48:48.231 [DEBUG] [Thread-23850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:48:52.955 [DEBUG] [Thread-23851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:03.269 [DEBUG] [Thread-23852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:04.256 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:04.257 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:04.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:49:04.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:49:04.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-26T03:49:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 48, 54), 2.19, 86.43, 0.0, 22.89, 11.87, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:49:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:48:54
2025-12-26T03:49:05.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:49:05.735 [DEBUG] [Thread-23853] [transport.py] [_log()] starting thread (client mode): 0xb6b22bf0
2025-12-26T03:49:05.735 [DEBUG] [Thread-23853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:49:05.756 [DEBUG] [Thread-23853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:49:05.756 [INFO] [Thread-23853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] client lang: <none>
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] server lang: <none>
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] kex follows: False
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] Compression: none
2025-12-26T03:49:05.760 [DEBUG] [Thread-23853] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:49:05.777 [DEBUG] [Thread-23853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:49:05.778 [DEBUG] [Thread-23853] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:49:05.779 [DEBUG] [Thread-23853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:49:05.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:49:05.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:49:05.781 [DEBUG] [Thread-23853] [transport.py] [_log()] userauth is OK
2025-12-26T03:49:05.781 [DEBUG] [Thread-23853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:49:05.781 [DEBUG] [Thread-23853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:49:05.782 [DEBUG] [Thread-23853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:49:05.782 [DEBUG] [Thread-23853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:49:05.805 [INFO] [Thread-23853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:49:05.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:49:06.493 [DEBUG] [Thread-23853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:49:06.494 [DEBUG] [Thread-23853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:49:06.494 [DEBUG] [Thread-23853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:49:06.535 [DEBUG] [Thread-23853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:49:06.535 [DEBUG] [Thread-23853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:49:06.539 [DEBUG] [Thread-23853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:49:06.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:49:06.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:49:06.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:49:06.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:49:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:49:06.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:49:06.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:49:06.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:49:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:49:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.075404 -999.00  +11.80  12.43     88   +9.90 1 1 1 3 1     0    0 1.40 -16.31 ZNESW 12.4 12.4 151.2 15.5 12.3 -21.5 12.2 -21.3 11.9 -19.6 12.2 -20.7
2025-12-26T03:49:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:49:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:49:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.075404
2025-12-26T03:49:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:49:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:49:06.565 [DEBUG] [Thread-23853] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:49:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:49:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:49:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:49:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:48:54', tmtdew=2.19, humidity=86.43, cloud=0.0, wind=22.89, temperature=11.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:48:34.906', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:46:00')
2025-12-26T03:49:06.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:49:06.653 [DEBUG] [Thread-23856] [transport.py] [_log()] starting thread (client mode): 0xb6b205e0
2025-12-26T03:49:06.654 [DEBUG] [Thread-23856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:49:06.668 [DEBUG] [Thread-23856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:49:06.669 [INFO] [Thread-23856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:49:06.676 [DEBUG] [Thread-23856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] client lang: <none>
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] server lang: <none>
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] kex follows: False
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] Compression: none
2025-12-26T03:49:06.677 [DEBUG] [Thread-23856] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:49:06.741 [DEBUG] [Thread-23856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:49:06.742 [DEBUG] [Thread-23856] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:49:06.742 [DEBUG] [Thread-23856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:49:06.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:49:06.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:49:06.797 [DEBUG] [Thread-23856] [transport.py] [_log()] userauth is OK
2025-12-26T03:49:06.797 [DEBUG] [Thread-23856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:49:06.797 [DEBUG] [Thread-23856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:49:06.797 [DEBUG] [Thread-23856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:49:06.798 [DEBUG] [Thread-23856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:49:06.817 [INFO] [Thread-23856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:49:06.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-26T03:49:06.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:49:07.647 [DEBUG] [Thread-23856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:49:07.647 [DEBUG] [Thread-23856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:49:07.695 [DEBUG] [Thread-23856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:49:07.695 [DEBUG] [Thread-23856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:49:07.704 [DEBUG] [Thread-23856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:49:07.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:49:07.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-26T03:49:07.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-26T03:49:07.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:49:07.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:49:07.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:49:07.740 [DEBUG] [Thread-23856] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:49:18.304 [DEBUG] [Thread-23858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:33.349 [DEBUG] [Thread-23859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:37.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:49:37.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:49:37.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-26T03:49:38.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 49, 26), 2.2, 86.36, 0.0, 23.15, 11.91, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:49:38.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:49:26
2025-12-26T03:49:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:49:38.720 [DEBUG] [Thread-23860] [transport.py] [_log()] starting thread (client mode): 0xb6b750c0
2025-12-26T03:49:38.721 [DEBUG] [Thread-23860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:49:38.741 [DEBUG] [Thread-23860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:49:38.741 [INFO] [Thread-23860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] client lang: <none>
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] server lang: <none>
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] kex follows: False
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] Compression: none
2025-12-26T03:49:38.744 [DEBUG] [Thread-23860] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:49:38.762 [DEBUG] [Thread-23860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:49:38.762 [DEBUG] [Thread-23860] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:49:38.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:49:38.764 [DEBUG] [Thread-23860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:49:38.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:49:38.766 [DEBUG] [Thread-23860] [transport.py] [_log()] userauth is OK
2025-12-26T03:49:38.766 [DEBUG] [Thread-23860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:49:38.766 [DEBUG] [Thread-23860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:49:38.766 [DEBUG] [Thread-23860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:49:38.766 [DEBUG] [Thread-23860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:49:38.791 [INFO] [Thread-23860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:49:38.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:49:39.429 [DEBUG] [Thread-23860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:49:39.429 [DEBUG] [Thread-23860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:49:39.430 [DEBUG] [Thread-23860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:49:39.470 [DEBUG] [Thread-23860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:49:39.470 [DEBUG] [Thread-23860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:49:39.474 [DEBUG] [Thread-23860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:49:39.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:49:39.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:49:39.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:49:39.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:49:39.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:49:39.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:49:39.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:49:39.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:49:39.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:49:39.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.075751 -999.00  +11.80  13.82     88   +9.90 1 1 1 3 1     0    0 1.45 -14.19 ZNESW 13.8 13.8 154.8 18.5 12.3 -21.6 12.2 -21.4 12.0 -19.6 12.2 -20.5
2025-12-26T03:49:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:49:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:49:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.075751
2025-12-26T03:49:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:49:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:49:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:49:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:49:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:49:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:49:26', tmtdew=2.2, humidity=86.36, cloud=0.0, wind=23.15, temperature=11.91, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:49:04.886', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:46:00')
2025-12-26T03:49:39.500 [DEBUG] [Thread-23860] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:49:39.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-26T03:49:39.609 [DEBUG] [Thread-23863] [transport.py] [_log()] starting thread (client mode): 0xb6b21b70
2025-12-26T03:49:39.610 [DEBUG] [Thread-23863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:49:39.625 [DEBUG] [Thread-23863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:49:39.625 [INFO] [Thread-23863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:49:39.633 [DEBUG] [Thread-23863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:49:39.633 [DEBUG] [Thread-23863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:49:39.633 [DEBUG] [Thread-23863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:49:39.633 [DEBUG] [Thread-23863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:39.633 [DEBUG] [Thread-23863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:49:39.633 [DEBUG] [Thread-23863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] client lang: <none>
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] server lang: <none>
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] kex follows: False
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:49:39.634 [DEBUG] [Thread-23863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:49:39.635 [DEBUG] [Thread-23863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:49:39.635 [DEBUG] [Thread-23863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:49:39.635 [DEBUG] [Thread-23863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:49:39.635 [DEBUG] [Thread-23863] [transport.py] [_log()] Compression: none
2025-12-26T03:49:39.635 [DEBUG] [Thread-23863] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:49:39.691 [DEBUG] [Thread-23863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:49:39.691 [DEBUG] [Thread-23863] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:49:39.692 [DEBUG] [Thread-23863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:49:39.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:49:39.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:49:39.746 [DEBUG] [Thread-23863] [transport.py] [_log()] userauth is OK
2025-12-26T03:49:39.747 [DEBUG] [Thread-23863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:49:39.748 [DEBUG] [Thread-23863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:49:39.748 [DEBUG] [Thread-23863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:49:39.748 [DEBUG] [Thread-23863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:49:39.767 [INFO] [Thread-23863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:49:39.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-26T03:49:39.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:49:40.584 [DEBUG] [Thread-23863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:49:40.584 [DEBUG] [Thread-23863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:49:40.632 [DEBUG] [Thread-23863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:49:40.632 [DEBUG] [Thread-23863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:49:40.641 [DEBUG] [Thread-23863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:49:40.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:49:40.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:49:40.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:49:40.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:49:40.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:49:40.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:49:40.678 [DEBUG] [Thread-23863] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:49:48.385 [DEBUG] [Thread-23865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:49:53.029 [DEBUG] [Thread-23866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:03.434 [DEBUG] [Thread-23867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:04.477 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:04.479 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:10.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:50:10.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:50:10.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-26T03:50:11.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 49, 58), 2.25, 85.86, 0.0, 19.11, 11.97, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:50:11.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:49:58
2025-12-26T03:50:11.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:50:11.690 [DEBUG] [Thread-23868] [transport.py] [_log()] starting thread (client mode): 0xb6b17610
2025-12-26T03:50:11.691 [DEBUG] [Thread-23868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:50:11.711 [DEBUG] [Thread-23868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:50:11.711 [INFO] [Thread-23868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:50:11.714 [DEBUG] [Thread-23868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] client lang: <none>
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] server lang: <none>
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] kex follows: False
2025-12-26T03:50:11.715 [DEBUG] [Thread-23868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:50:11.716 [DEBUG] [Thread-23868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:50:11.716 [DEBUG] [Thread-23868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:50:11.716 [DEBUG] [Thread-23868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:50:11.716 [DEBUG] [Thread-23868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:50:11.716 [DEBUG] [Thread-23868] [transport.py] [_log()] Compression: none
2025-12-26T03:50:11.716 [DEBUG] [Thread-23868] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:50:11.736 [DEBUG] [Thread-23868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:50:11.737 [DEBUG] [Thread-23868] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:50:11.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:50:11.738 [DEBUG] [Thread-23868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:50:11.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:50:11.740 [DEBUG] [Thread-23868] [transport.py] [_log()] userauth is OK
2025-12-26T03:50:11.740 [DEBUG] [Thread-23868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:50:11.740 [DEBUG] [Thread-23868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:50:11.740 [DEBUG] [Thread-23868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:50:11.741 [DEBUG] [Thread-23868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:50:11.765 [INFO] [Thread-23868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:50:11.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:50:15.461 [DEBUG] [Thread-23868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:50:15.462 [DEBUG] [Thread-23868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:50:15.462 [DEBUG] [Thread-23868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:50:15.502 [DEBUG] [Thread-23868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:50:15.503 [DEBUG] [Thread-23868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:50:15.505 [DEBUG] [Thread-23868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:50:15.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:50:15.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:50:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:50:15.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:50:15.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:50:15.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:50:15.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:50:15.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:50:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:50:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.076098 -999.00  +11.90  18.41     88  +10.00 1 1 1 3 1     0    0 1.48 -12.06 ZNESW 18.4 18.4 163.4 22.4 12.3 -21.6 12.2 -21.3 12.0 -19.4 12.3 -20.5
2025-12-26T03:50:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:50:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:50:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.076098
2025-12-26T03:50:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:50:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:50:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:50:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:50:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:50:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:49:58', tmtdew=2.25, humidity=85.86, cloud=0.0, wind=19.11, temperature=11.97, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:49:34.867', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:49:00')
2025-12-26T03:50:15.528 [DEBUG] [Thread-23868] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:50:15.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-26T03:50:15.622 [DEBUG] [Thread-23871] [transport.py] [_log()] starting thread (client mode): 0xb6b747f0
2025-12-26T03:50:15.623 [DEBUG] [Thread-23871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:50:15.642 [DEBUG] [Thread-23871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:50:15.642 [INFO] [Thread-23871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:50:15.649 [DEBUG] [Thread-23871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:50:15.649 [DEBUG] [Thread-23871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:50:15.649 [DEBUG] [Thread-23871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] client lang: <none>
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] server lang: <none>
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] kex follows: False
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] Compression: none
2025-12-26T03:50:15.650 [DEBUG] [Thread-23871] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:50:15.706 [DEBUG] [Thread-23871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:50:15.706 [DEBUG] [Thread-23871] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:50:15.707 [DEBUG] [Thread-23871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:50:15.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:50:15.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:50:15.764 [DEBUG] [Thread-23871] [transport.py] [_log()] userauth is OK
2025-12-26T03:50:15.764 [DEBUG] [Thread-23871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:50:15.764 [DEBUG] [Thread-23871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:50:15.764 [DEBUG] [Thread-23871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:50:15.764 [DEBUG] [Thread-23871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:50:15.783 [INFO] [Thread-23871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:50:15.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:50:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:50:16.602 [DEBUG] [Thread-23871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:50:16.602 [DEBUG] [Thread-23871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:50:16.650 [DEBUG] [Thread-23871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:50:16.651 [DEBUG] [Thread-23871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:50:16.660 [DEBUG] [Thread-23871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:50:16.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:50:16.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:50:16.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-26T03:50:16.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:50:16.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:50:16.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:50:16.696 [DEBUG] [Thread-23871] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:50:18.466 [DEBUG] [Thread-23873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:33.518 [DEBUG] [Thread-23874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:46.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:50:46.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:50:46.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-26T03:50:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 50, 30), 2.27, 85.8, 0.0, 18.46, 11.97, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:50:47.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:50:30
2025-12-26T03:50:47.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:50:47.760 [DEBUG] [Thread-23875] [transport.py] [_log()] starting thread (client mode): 0xb6b74dc0
2025-12-26T03:50:47.761 [DEBUG] [Thread-23875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:50:47.781 [DEBUG] [Thread-23875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:50:47.781 [INFO] [Thread-23875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] client lang: <none>
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] server lang: <none>
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] kex follows: False
2025-12-26T03:50:47.785 [DEBUG] [Thread-23875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:50:47.786 [DEBUG] [Thread-23875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:50:47.786 [DEBUG] [Thread-23875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:50:47.786 [DEBUG] [Thread-23875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:50:47.786 [DEBUG] [Thread-23875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:50:47.786 [DEBUG] [Thread-23875] [transport.py] [_log()] Compression: none
2025-12-26T03:50:47.786 [DEBUG] [Thread-23875] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:50:47.800 [DEBUG] [Thread-23875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:50:47.800 [DEBUG] [Thread-23875] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:50:47.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:50:47.800 [DEBUG] [Thread-23875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:50:47.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:50:47.801 [DEBUG] [Thread-23875] [transport.py] [_log()] userauth is OK
2025-12-26T03:50:47.801 [DEBUG] [Thread-23875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:50:47.801 [DEBUG] [Thread-23875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:50:47.801 [DEBUG] [Thread-23875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:50:47.801 [DEBUG] [Thread-23875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:50:47.811 [INFO] [Thread-23875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:50:47.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:50:48.463 [DEBUG] [Thread-23875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:50:48.463 [DEBUG] [Thread-23875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:50:48.463 [DEBUG] [Thread-23875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:50:48.503 [DEBUG] [Thread-23875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:50:48.504 [DEBUG] [Thread-23875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:50:48.506 [DEBUG] [Thread-23875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:50:48.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:50:48.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:50:48.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:50:48.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:50:48.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:50:48.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:50:48.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.076446 -999.00  +11.90  14.40     88   +9.90 1 1 1 3 1     0    0 1.61 -10.22 ZNESW 14.4 14.4 157.6 19.1 12.3 -21.5 12.2 -21.4 11.9 -19.5 12.2 -20.5
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.076446
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:50:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:50:30', tmtdew=2.27, humidity=85.8, cloud=0.0, wind=18.46, temperature=11.97, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:50:04.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:49:00')
2025-12-26T03:50:48.526 [DEBUG] [Thread-23875] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:50:48.549 [DEBUG] [Thread-23878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:50:48.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-26T03:50:48.608 [DEBUG] [Thread-23879] [transport.py] [_log()] starting thread (client mode): 0xb6b76350
2025-12-26T03:50:48.608 [DEBUG] [Thread-23879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:50:48.623 [DEBUG] [Thread-23879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:50:48.623 [INFO] [Thread-23879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] client lang: <none>
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] server lang: <none>
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] kex follows: False
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:50:48.631 [DEBUG] [Thread-23879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:50:48.632 [DEBUG] [Thread-23879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:50:48.632 [DEBUG] [Thread-23879] [transport.py] [_log()] Compression: none
2025-12-26T03:50:48.632 [DEBUG] [Thread-23879] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:50:48.687 [DEBUG] [Thread-23879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:50:48.687 [DEBUG] [Thread-23879] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:50:48.688 [DEBUG] [Thread-23879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:50:48.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:50:48.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:50:48.744 [DEBUG] [Thread-23879] [transport.py] [_log()] userauth is OK
2025-12-26T03:50:48.744 [DEBUG] [Thread-23879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:50:48.744 [DEBUG] [Thread-23879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:50:48.744 [DEBUG] [Thread-23879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:50:48.744 [DEBUG] [Thread-23879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:50:48.758 [INFO] [Thread-23879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:50:48.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-26T03:50:48.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:50:49.605 [DEBUG] [Thread-23879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:50:49.605 [DEBUG] [Thread-23879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:50:49.653 [DEBUG] [Thread-23879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:50:49.653 [DEBUG] [Thread-23879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:50:49.663 [DEBUG] [Thread-23879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:50:49.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:50:49.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-26T03:50:49.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-26T03:50:49.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:50:49.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:50:49.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:50:49.699 [DEBUG] [Thread-23879] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:50:53.095 [DEBUG] [Thread-23881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:03.591 [DEBUG] [Thread-23882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:04.701 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:04.701 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:18.622 [DEBUG] [Thread-23883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:19.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:51:19.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:51:19.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-26T03:51:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 51, 2), 2.27, 85.76, 0.0, 17.45, 11.96, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:51:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:51:02
2025-12-26T03:51:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:51:20.721 [DEBUG] [Thread-23884] [transport.py] [_log()] starting thread (client mode): 0xb6b74670
2025-12-26T03:51:20.721 [DEBUG] [Thread-23884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:51:20.742 [DEBUG] [Thread-23884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:51:20.742 [INFO] [Thread-23884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] client lang: <none>
2025-12-26T03:51:20.745 [DEBUG] [Thread-23884] [transport.py] [_log()] server lang: <none>
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] kex follows: False
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] Compression: none
2025-12-26T03:51:20.746 [DEBUG] [Thread-23884] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:51:20.762 [DEBUG] [Thread-23884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:51:20.763 [DEBUG] [Thread-23884] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:51:20.763 [DEBUG] [Thread-23884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:51:20.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:51:20.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:51:20.765 [DEBUG] [Thread-23884] [transport.py] [_log()] userauth is OK
2025-12-26T03:51:20.766 [DEBUG] [Thread-23884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:51:20.766 [DEBUG] [Thread-23884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:51:20.766 [DEBUG] [Thread-23884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:51:20.766 [DEBUG] [Thread-23884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:51:20.790 [INFO] [Thread-23884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:51:20.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:51:21.355 [DEBUG] [Thread-23884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:51:21.355 [DEBUG] [Thread-23884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:51:21.355 [DEBUG] [Thread-23884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:51:21.395 [DEBUG] [Thread-23884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:51:21.396 [DEBUG] [Thread-23884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:51:21.398 [DEBUG] [Thread-23884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:51:21.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:51:21.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:51:21.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:51:21.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:51:21.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:51:21.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:51:21.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.076793 -999.00  +11.90  13.98     88  +10.00 1 1 1 3 1     0    0 1.61 -8.38 ZNESW 14.0 14.0 153.8 19.5 12.3 -21.5 12.2 -21.3 12.0 -19.6 12.2 -20.6
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.076793
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:51:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:51:02', tmtdew=2.27, humidity=85.76, cloud=0.0, wind=17.45, temperature=11.96, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:50:34.915', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:49:00')
2025-12-26T03:51:21.416 [DEBUG] [Thread-23884] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:51:21.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-26T03:51:21.503 [DEBUG] [Thread-23887] [transport.py] [_log()] starting thread (client mode): 0xb6b75d50
2025-12-26T03:51:21.503 [DEBUG] [Thread-23887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:51:21.518 [DEBUG] [Thread-23887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:51:21.518 [INFO] [Thread-23887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] client lang: <none>
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] server lang: <none>
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] kex follows: False
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] Compression: none
2025-12-26T03:51:21.526 [DEBUG] [Thread-23887] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:51:21.584 [DEBUG] [Thread-23887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:51:21.584 [DEBUG] [Thread-23887] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:51:21.584 [DEBUG] [Thread-23887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:51:21.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:51:21.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:51:21.641 [DEBUG] [Thread-23887] [transport.py] [_log()] userauth is OK
2025-12-26T03:51:21.641 [DEBUG] [Thread-23887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:51:21.641 [DEBUG] [Thread-23887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:51:21.641 [DEBUG] [Thread-23887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:51:21.641 [DEBUG] [Thread-23887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:51:21.656 [INFO] [Thread-23887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:51:21.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-26T03:51:21.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:51:22.488 [DEBUG] [Thread-23887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:51:22.488 [DEBUG] [Thread-23887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:51:22.535 [DEBUG] [Thread-23887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:51:22.535 [DEBUG] [Thread-23887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:51:22.543 [DEBUG] [Thread-23887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:51:22.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:51:22.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-26T03:51:22.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:51:22.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:51:22.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:51:22.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:51:22.575 [DEBUG] [Thread-23887] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:51:33.654 [DEBUG] [Thread-23889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:48.717 [DEBUG] [Thread-23890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:51:52.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:51:52.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-26T03:51:53.160 [DEBUG] [Thread-23891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:51:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 51, 34), 2.27, 85.75, 0.0, 17.15, 11.87, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:51:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:51:34
2025-12-26T03:51:53.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:51:53.555 [DEBUG] [Thread-23892] [transport.py] [_log()] starting thread (client mode): 0xb6b77b20
2025-12-26T03:51:53.555 [DEBUG] [Thread-23892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:51:53.575 [DEBUG] [Thread-23892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:51:53.575 [INFO] [Thread-23892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] client lang: <none>
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] server lang: <none>
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] kex follows: False
2025-12-26T03:51:53.579 [DEBUG] [Thread-23892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:51:53.580 [DEBUG] [Thread-23892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:51:53.580 [DEBUG] [Thread-23892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:51:53.580 [DEBUG] [Thread-23892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:51:53.580 [DEBUG] [Thread-23892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:51:53.580 [DEBUG] [Thread-23892] [transport.py] [_log()] Compression: none
2025-12-26T03:51:53.580 [DEBUG] [Thread-23892] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:51:53.596 [DEBUG] [Thread-23892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:51:53.596 [DEBUG] [Thread-23892] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:51:53.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:51:53.597 [DEBUG] [Thread-23892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:51:53.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:51:53.641 [DEBUG] [Thread-23892] [transport.py] [_log()] userauth is OK
2025-12-26T03:51:53.642 [DEBUG] [Thread-23892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:51:53.642 [DEBUG] [Thread-23892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:51:53.642 [DEBUG] [Thread-23892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:51:53.642 [DEBUG] [Thread-23892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:51:53.662 [INFO] [Thread-23892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:51:53.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:51:54.297 [DEBUG] [Thread-23892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:51:54.298 [DEBUG] [Thread-23892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:51:54.298 [DEBUG] [Thread-23892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:51:54.339 [DEBUG] [Thread-23892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:51:54.339 [DEBUG] [Thread-23892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:51:54.342 [DEBUG] [Thread-23892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:51:54.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:51:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:51:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:51:54.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:51:54.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:51:54.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:51:54.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:51:54.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:51:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:51:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.077140 -999.00  +11.90  11.79     87   +9.90 1 1 1 2 1     0    0 1.65 -7.18 ZNESW 11.8 11.8 166.2 16.6 12.4 -21.7 12.2 -21.4 12.0 -19.6 12.3 -20.6
2025-12-26T03:51:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:51:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:51:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.077140
2025-12-26T03:51:54.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:51:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:51:54.367 [DEBUG] [Thread-23892] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:51:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:51:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:51:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:51:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:51:34', tmtdew=2.27, humidity=85.75, cloud=0.0, wind=17.15, temperature=11.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:51:04.896', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:49:00')
2025-12-26T03:51:54.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-26T03:51:54.454 [DEBUG] [Thread-23895] [transport.py] [_log()] starting thread (client mode): 0xb6b77fd0
2025-12-26T03:51:54.454 [DEBUG] [Thread-23895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:51:54.469 [DEBUG] [Thread-23895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:51:54.469 [INFO] [Thread-23895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:51:54.477 [DEBUG] [Thread-23895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] client lang: <none>
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] server lang: <none>
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] kex follows: False
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] Compression: none
2025-12-26T03:51:54.478 [DEBUG] [Thread-23895] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:51:54.534 [DEBUG] [Thread-23895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:51:54.535 [DEBUG] [Thread-23895] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:51:54.535 [DEBUG] [Thread-23895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:51:54.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:51:54.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:51:54.590 [DEBUG] [Thread-23895] [transport.py] [_log()] userauth is OK
2025-12-26T03:51:54.590 [DEBUG] [Thread-23895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:51:54.591 [DEBUG] [Thread-23895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:51:54.591 [DEBUG] [Thread-23895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:51:54.591 [DEBUG] [Thread-23895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:51:54.615 [INFO] [Thread-23895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:51:54.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-26T03:51:54.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:51:55.400 [DEBUG] [Thread-23895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:51:55.400 [DEBUG] [Thread-23895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:51:55.447 [DEBUG] [Thread-23895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:51:55.448 [DEBUG] [Thread-23895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:51:55.456 [DEBUG] [Thread-23895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:51:55.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:51:55.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:51:55.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-26T03:51:55.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:51:55.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:51:55.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:51:55.489 [DEBUG] [Thread-23895] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:52:03.747 [DEBUG] [Thread-23897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:04.897 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:04.898 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:18.786 [DEBUG] [Thread-23898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:25.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:52:25.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:52:25.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:52:26.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 52, 6), 2.28, 85.75, 0.0, 17.98, 11.92, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:52:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:52:06
2025-12-26T03:52:26.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:52:26.483 [DEBUG] [Thread-23899] [transport.py] [_log()] starting thread (client mode): 0xb6b145e0
2025-12-26T03:52:26.483 [DEBUG] [Thread-23899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:52:26.503 [DEBUG] [Thread-23899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:52:26.503 [INFO] [Thread-23899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] client lang: <none>
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] server lang: <none>
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] kex follows: False
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] Compression: none
2025-12-26T03:52:26.506 [DEBUG] [Thread-23899] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:52:26.524 [DEBUG] [Thread-23899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:52:26.524 [DEBUG] [Thread-23899] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:52:26.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:52:26.525 [DEBUG] [Thread-23899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:52:26.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:52:26.527 [DEBUG] [Thread-23899] [transport.py] [_log()] userauth is OK
2025-12-26T03:52:26.528 [DEBUG] [Thread-23899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:52:26.528 [DEBUG] [Thread-23899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:52:26.528 [DEBUG] [Thread-23899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:52:26.528 [DEBUG] [Thread-23899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:52:26.551 [INFO] [Thread-23899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:52:26.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:52:27.209 [DEBUG] [Thread-23899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:52:27.209 [DEBUG] [Thread-23899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:52:27.209 [DEBUG] [Thread-23899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:52:27.250 [DEBUG] [Thread-23899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:52:27.250 [DEBUG] [Thread-23899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:52:27.254 [DEBUG] [Thread-23899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:52:27.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:52:27.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:52:27.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:52:27.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:52:27.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:52:27.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:52:27.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:52:27.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:52:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:52:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.077834 -999.00  +11.90  14.91     88  +10.00 1 1 1 3 1     0    0 1.74 -4.88 ZNESW 14.9 14.9 159.0 20.8 12.3 -21.6 12.2 -21.4 12.0 -19.5 12.3 -20.5
2025-12-26T03:52:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:52:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:52:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.077834
2025-12-26T03:52:27.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:52:27.282 [DEBUG] [Thread-23899] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:52:27.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:52:27.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:52:27.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:52:27.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:52:27.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:52:06', tmtdew=2.28, humidity=85.75, cloud=0.0, wind=17.98, temperature=11.92, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:52:04.858', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:49:00')
2025-12-26T03:52:27.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-26T03:52:27.378 [DEBUG] [Thread-23902] [transport.py] [_log()] starting thread (client mode): 0xb6b16500
2025-12-26T03:52:27.378 [DEBUG] [Thread-23902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:52:27.395 [DEBUG] [Thread-23902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:52:27.395 [INFO] [Thread-23902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:52:27.402 [DEBUG] [Thread-23902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] client lang: <none>
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] server lang: <none>
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] kex follows: False
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:52:27.403 [DEBUG] [Thread-23902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:52:27.404 [DEBUG] [Thread-23902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:52:27.404 [DEBUG] [Thread-23902] [transport.py] [_log()] Compression: none
2025-12-26T03:52:27.404 [DEBUG] [Thread-23902] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:52:27.464 [DEBUG] [Thread-23902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:52:27.465 [DEBUG] [Thread-23902] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:52:27.465 [DEBUG] [Thread-23902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:52:27.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:52:27.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:52:27.523 [DEBUG] [Thread-23902] [transport.py] [_log()] userauth is OK
2025-12-26T03:52:27.524 [DEBUG] [Thread-23902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:52:27.524 [DEBUG] [Thread-23902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:52:27.524 [DEBUG] [Thread-23902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:52:27.524 [DEBUG] [Thread-23902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:52:27.542 [INFO] [Thread-23902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:52: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-26T03:52:27.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:52:28.372 [DEBUG] [Thread-23902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:52:28.373 [DEBUG] [Thread-23902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:52:28.421 [DEBUG] [Thread-23902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:52:28.421 [DEBUG] [Thread-23902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:52:28.430 [DEBUG] [Thread-23902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:52:28.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:52:28.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:52:28.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:52:28.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:52:28.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:52:28.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:52:28.466 [DEBUG] [Thread-23902] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:52:33.825 [DEBUG] [Thread-23904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:48.875 [DEBUG] [Thread-23905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:53.219 [DEBUG] [Thread-23906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:52:58.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:52:58.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:52:58.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-26T03:52:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 52, 38), 2.27, 85.75, 0.0, 20.03, 11.89, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:52:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:52:38
2025-12-26T03:52:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:52:59.455 [DEBUG] [Thread-23907] [transport.py] [_log()] starting thread (client mode): 0xb6b77730
2025-12-26T03:52:59.455 [DEBUG] [Thread-23907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:52:59.476 [DEBUG] [Thread-23907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:52:59.476 [INFO] [Thread-23907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] client lang: <none>
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] server lang: <none>
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] kex follows: False
2025-12-26T03:52:59.479 [DEBUG] [Thread-23907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:52:59.480 [DEBUG] [Thread-23907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:52:59.480 [DEBUG] [Thread-23907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:52:59.480 [DEBUG] [Thread-23907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:52:59.480 [DEBUG] [Thread-23907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:52:59.480 [DEBUG] [Thread-23907] [transport.py] [_log()] Compression: none
2025-12-26T03:52:59.480 [DEBUG] [Thread-23907] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:52:59.497 [DEBUG] [Thread-23907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:52:59.498 [DEBUG] [Thread-23907] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:52:59.499 [DEBUG] [Thread-23907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:52:59.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:52:59.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:52:59.501 [DEBUG] [Thread-23907] [transport.py] [_log()] userauth is OK
2025-12-26T03:52:59.501 [DEBUG] [Thread-23907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:52:59.501 [DEBUG] [Thread-23907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:52:59.501 [DEBUG] [Thread-23907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:52:59.501 [DEBUG] [Thread-23907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:52:59.527 [INFO] [Thread-23907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:52:59.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:53:00.178 [DEBUG] [Thread-23907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:53:00.178 [DEBUG] [Thread-23907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:53:00.179 [DEBUG] [Thread-23907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:53:00.219 [DEBUG] [Thread-23907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:53:00.219 [DEBUG] [Thread-23907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:53:00.223 [DEBUG] [Thread-23907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:53:00.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:53:00.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:53:00.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:53:00.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:53:00.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:53:00.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:53:00.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:53:00.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:53:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:53:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.078182 -999.00  +11.90  15.90     88   +9.90 1 1 1 3 1     0    0 1.76 -4.13 ZNESW 15.9 15.9 155.2 23.3 12.3 -21.7 12.2 -21.4 12.0 -19.6 12.3 -20.7
2025-12-26T03:53:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:53:00.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:53:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.078182
2025-12-26T03:53:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:53:00.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:53:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:53:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:53:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:53:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:52:38', tmtdew=2.27, humidity=85.75, cloud=0.0, wind=20.03, temperature=11.89, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:52:34.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.8557499999999996, 0.3047500000000003, 0.6142500000000002, 0.6634999999999991, 0.798, 0.7097500000000005, 0.8954999999999993, 0.8572500000000005, 0.4554999999999989, 0.2680000000000007, 0.2892499999999991, 0.49549999999999983, 0.44599999999999973, 0.4807499999999987, 0.6369999999999996, 0.5849999999999991, 0.2522500000000001, 0.32399999999999984, 0.27999999999999936, 0.43824999999999825, 0.41499999999999915, 0.4807499999999987, 0.6172500000000012, 0.46875, 0.32349999999999923, 0.2919999999999998, 0.38475000000000037, 0.3365, 0.5145, 0.4170000000000016, 0.5705000000000009, 0.6590000000000007, 0.4007499999999995], zp_timestamp='2025-12-26T01:49:00')
2025-12-26T03:53:00.247 [DEBUG] [Thread-23907] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:53:00.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-26T03:53:00.343 [DEBUG] [Thread-23910] [transport.py] [_log()] starting thread (client mode): 0xb6b74d30
2025-12-26T03:53:00.343 [DEBUG] [Thread-23910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:53:00.358 [DEBUG] [Thread-23910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:53:00.358 [INFO] [Thread-23910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:53:00.366 [DEBUG] [Thread-23910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] client lang: <none>
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] server lang: <none>
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] kex follows: False
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] Compression: none
2025-12-26T03:53:00.367 [DEBUG] [Thread-23910] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:53:00.430 [DEBUG] [Thread-23910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:53:00.430 [DEBUG] [Thread-23910] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:53:00.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:53:00.431 [DEBUG] [Thread-23910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:53:00.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:53:00.488 [DEBUG] [Thread-23910] [transport.py] [_log()] userauth is OK
2025-12-26T03:53:00.488 [DEBUG] [Thread-23910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:53:00.488 [DEBUG] [Thread-23910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:53:00.488 [DEBUG] [Thread-23910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:53:00.489 [DEBUG] [Thread-23910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:53:00.508 [INFO] [Thread-23910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:53:00.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:53:00.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:53:01.336 [DEBUG] [Thread-23910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:53:01.336 [DEBUG] [Thread-23910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:53:01.384 [DEBUG] [Thread-23910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:53:01.384 [DEBUG] [Thread-23910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:53:01.394 [DEBUG] [Thread-23910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:53:01.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:53:01.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-26T03:53:01.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-26T03:53:01.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:53:01.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:53:01.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:53:01.427 [DEBUG] [Thread-23910] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:53:03.908 [DEBUG] [Thread-23912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:53:05.100 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:53:05.101 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:53:18.957 [DEBUG] [Thread-23913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:53:31.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:53:31.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:53:31.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-26T03:53:32.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 53, 11), 2.28, 85.71, 0.0, 20.52, 11.87, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:53:32.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:53:11
2025-12-26T03:53:32.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:53:32.433 [DEBUG] [Thread-23914] [transport.py] [_log()] starting thread (client mode): 0xb6b76350
2025-12-26T03:53:32.433 [DEBUG] [Thread-23914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:53:32.453 [DEBUG] [Thread-23914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:53:32.453 [INFO] [Thread-23914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] client lang: <none>
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] server lang: <none>
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] kex follows: False
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] Compression: none
2025-12-26T03:53:32.456 [DEBUG] [Thread-23914] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:53:32.473 [DEBUG] [Thread-23914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:53:32.473 [DEBUG] [Thread-23914] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:53:32.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:53:32.474 [DEBUG] [Thread-23914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:53:32.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:53:32.476 [DEBUG] [Thread-23914] [transport.py] [_log()] userauth is OK
2025-12-26T03:53:32.476 [DEBUG] [Thread-23914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:53:32.476 [DEBUG] [Thread-23914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:53:32.476 [DEBUG] [Thread-23914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:53:32.476 [DEBUG] [Thread-23914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:53:32.493 [INFO] [Thread-23914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:53:32.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:53:33.130 [DEBUG] [Thread-23914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:53:33.130 [DEBUG] [Thread-23914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:53:33.131 [DEBUG] [Thread-23914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:53:33.172 [DEBUG] [Thread-23914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:53:33.172 [DEBUG] [Thread-23914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:53:33.175 [DEBUG] [Thread-23914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:53:33.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:53:33.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:53:33.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:53:33.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:53:33.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:53:33.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:53:33.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:53:33.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:53:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:53:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.078529 -999.00  +11.90  14.05     88  +10.00 1 1 1 3 1     0    0 1.76 -3.72 ZNESW 14.1 14.1 164.4 18.9 12.3 -21.7 12.2 -21.4 12.0 -19.7 12.3 -20.7
2025-12-26T03:53:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:53:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:53:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.078529
2025-12-26T03:53:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:53:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:53:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:53:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:53:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:53:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:53:11', tmtdew=2.28, humidity=85.71, cloud=0.0, wind=20.52, temperature=11.87, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:53:04.906', atlas_cloud=1, atlas_rain=1, zp_data=[0.441749999999999, 0.2657500000000006, 0.42825000000000024, 0.32750000000000057, 0.34450000000000003, 0.40325000000000166, 0.5424999999999995, 0.5512500000000005, 0.3149999999999995, 0.23600000000000065, 0.24024999999999963, 0.30799999999999983, 0.27800000000000047, 0.3252499999999987, 0.5079999999999991, 0.40199999999999925, 0.2607499999999998, 0.30049999999999955, 0.2724999999999991, 0.40224999999999866, 0.38149999999999906, 0.41524999999999856, 0.47275000000000045, 0.42074999999999996, 0.2889999999999997, 0.24150000000000027, 0.41075000000000017, 0.36050000000000004, 0.47000000000000064, 0.4480000000000013, 0.5085000000000024, 0.5570000000000004, 0.42274999999999885], zp_timestamp='2025-12-26T01:51:00')
2025-12-26T03:53:33.200 [DEBUG] [Thread-23914] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:53:33.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-26T03:53:33.294 [DEBUG] [Thread-23917] [transport.py] [_log()] starting thread (client mode): 0xb6b75ed0
2025-12-26T03:53:33.294 [DEBUG] [Thread-23917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:53:33.309 [DEBUG] [Thread-23917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:53:33.310 [INFO] [Thread-23917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:53:33.317 [DEBUG] [Thread-23917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:53:33.317 [DEBUG] [Thread-23917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:53:33.317 [DEBUG] [Thread-23917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:53:33.317 [DEBUG] [Thread-23917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:53:33.317 [DEBUG] [Thread-23917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] client lang: <none>
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] server lang: <none>
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] kex follows: False
2025-12-26T03:53:33.318 [DEBUG] [Thread-23917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:53:33.319 [DEBUG] [Thread-23917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:53:33.319 [DEBUG] [Thread-23917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:53:33.319 [DEBUG] [Thread-23917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:53:33.319 [DEBUG] [Thread-23917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:53:33.319 [DEBUG] [Thread-23917] [transport.py] [_log()] Compression: none
2025-12-26T03:53:33.319 [DEBUG] [Thread-23917] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:53:33.376 [DEBUG] [Thread-23917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:53:33.376 [DEBUG] [Thread-23917] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:53:33.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:53:33.377 [DEBUG] [Thread-23917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:53:33.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:53:33.434 [DEBUG] [Thread-23917] [transport.py] [_log()] userauth is OK
2025-12-26T03:53:33.434 [DEBUG] [Thread-23917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:53:33.434 [DEBUG] [Thread-23917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:53:33.434 [DEBUG] [Thread-23917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:53:33.435 [DEBUG] [Thread-23917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:53:33.453 [INFO] [Thread-23917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:53:33.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:53:33.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:53:33.983 [DEBUG] [Thread-23919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:53:34.273 [DEBUG] [Thread-23917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:53:34.274 [DEBUG] [Thread-23917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:53:34.323 [DEBUG] [Thread-23917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:53:34.323 [DEBUG] [Thread-23917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:53:34.332 [DEBUG] [Thread-23917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:53:34.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:53:34.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-26T03:53:34.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-26T03:53:34.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:53:34.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:53:34.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:53:34.366 [DEBUG] [Thread-23917] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:53:49.033 [DEBUG] [Thread-23920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:53:53.297 [DEBUG] [Thread-23921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:04.065 [DEBUG] [Thread-23922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:54:04.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:54:04.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-26T03:54:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 53, 43), 2.22, 85.76, 0.0, 17.61, 11.84, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:54:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:53:43
2025-12-26T03:54:05.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:54:05.301 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:05.302 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:05.363 [DEBUG] [Thread-23923] [transport.py] [_log()] starting thread (client mode): 0xb6b75690
2025-12-26T03:54:05.363 [DEBUG] [Thread-23923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:54:05.382 [DEBUG] [Thread-23923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:54:05.382 [INFO] [Thread-23923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:54:05.386 [DEBUG] [Thread-23923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:54:05.386 [DEBUG] [Thread-23923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] client lang: <none>
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] server lang: <none>
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] kex follows: False
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:54:05.387 [DEBUG] [Thread-23923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:54:05.388 [DEBUG] [Thread-23923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:54:05.388 [DEBUG] [Thread-23923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:54:05.388 [DEBUG] [Thread-23923] [transport.py] [_log()] Compression: none
2025-12-26T03:54:05.388 [DEBUG] [Thread-23923] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:54:05.406 [DEBUG] [Thread-23923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:54:05.407 [DEBUG] [Thread-23923] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:54:05.407 [DEBUG] [Thread-23923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:54:05.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:54:05.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:54:05.409 [DEBUG] [Thread-23923] [transport.py] [_log()] userauth is OK
2025-12-26T03:54:05.409 [DEBUG] [Thread-23923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:54:05.410 [DEBUG] [Thread-23923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:54:05.410 [DEBUG] [Thread-23923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:54:05.410 [DEBUG] [Thread-23923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:54:05.435 [INFO] [Thread-23923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:54:05.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:54:06.047 [DEBUG] [Thread-23923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:54:06.048 [DEBUG] [Thread-23923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:54:06.049 [DEBUG] [Thread-23923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:54:06.088 [DEBUG] [Thread-23923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:54:06.088 [DEBUG] [Thread-23923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:54:06.092 [DEBUG] [Thread-23923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:54:06.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:54:06.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:54:06.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:54:06.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:54:06.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:54:06.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:54:06.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:54:06.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:54:06.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:54:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.078876 -999.00  +11.80  11.36     88   +9.90 1 1 1 3 1     0    0 1.83 -2.46 ZNESW 11.4 11.4 160.6 15.4 12.3 -21.8 12.2 -21.5 12.0 -19.6 12.3 -20.8
2025-12-26T03:54:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:54:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:54:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.078876
2025-12-26T03:54:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:54:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:54:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:54:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:54:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:54:06.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:53:43', tmtdew=2.22, humidity=85.76, cloud=0.0, wind=17.61, temperature=11.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:53:34.886', atlas_cloud=1, atlas_rain=1, zp_data=[0.441749999999999, 0.2657500000000006, 0.42825000000000024, 0.32750000000000057, 0.34450000000000003, 0.40325000000000166, 0.5424999999999995, 0.5512500000000005, 0.3149999999999995, 0.23600000000000065, 0.24024999999999963, 0.30799999999999983, 0.27800000000000047, 0.3252499999999987, 0.5079999999999991, 0.40199999999999925, 0.2607499999999998, 0.30049999999999955, 0.2724999999999991, 0.40224999999999866, 0.38149999999999906, 0.41524999999999856, 0.47275000000000045, 0.42074999999999996, 0.2889999999999997, 0.24150000000000027, 0.41075000000000017, 0.36050000000000004, 0.47000000000000064, 0.4480000000000013, 0.5085000000000024, 0.5570000000000004, 0.42274999999999885], zp_timestamp='2025-12-26T01:51:00')
2025-12-26T03:54:06.116 [DEBUG] [Thread-23923] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:54:06.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-26T03:54:06.223 [DEBUG] [Thread-23926] [transport.py] [_log()] starting thread (client mode): 0xb9592b90
2025-12-26T03:54:06.223 [DEBUG] [Thread-23926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:54:06.237 [DEBUG] [Thread-23926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:54:06.237 [INFO] [Thread-23926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] client lang: <none>
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] server lang: <none>
2025-12-26T03:54:06.245 [DEBUG] [Thread-23926] [transport.py] [_log()] kex follows: False
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] Compression: none
2025-12-26T03:54:06.246 [DEBUG] [Thread-23926] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:54:06.306 [DEBUG] [Thread-23926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:54:06.306 [DEBUG] [Thread-23926] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:54:06.307 [DEBUG] [Thread-23926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:54:06.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:54:06.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:54:06.362 [DEBUG] [Thread-23926] [transport.py] [_log()] userauth is OK
2025-12-26T03:54:06.362 [DEBUG] [Thread-23926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:54:06.363 [DEBUG] [Thread-23926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:54:06.363 [DEBUG] [Thread-23926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:54:06.363 [DEBUG] [Thread-23926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:54:06.380 [INFO] [Thread-23926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:54:06.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-26T03:54:06.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:54:07.190 [DEBUG] [Thread-23926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:54:07.190 [DEBUG] [Thread-23926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:54:07.238 [DEBUG] [Thread-23926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:54:07.238 [DEBUG] [Thread-23926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:54:07.247 [DEBUG] [Thread-23926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:54:07.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:54:07.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-26T03:54:07.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-26T03:54:07.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:54:07.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:54:07.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:54:07.284 [DEBUG] [Thread-23926] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:54:19.101 [DEBUG] [Thread-23928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:34.154 [DEBUG] [Thread-23929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:37.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:54:37.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:54: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-26T03:54:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 54, 15), 2.21, 85.81, 0.0, 18.21, 11.82, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:54:38.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:54:15
2025-12-26T03:54:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:54:38.318 [DEBUG] [Thread-23930] [transport.py] [_log()] starting thread (client mode): 0xb6b76320
2025-12-26T03:54:38.318 [DEBUG] [Thread-23930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:54:38.337 [DEBUG] [Thread-23930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:54:38.337 [INFO] [Thread-23930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] client lang: <none>
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] server lang: <none>
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] kex follows: False
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] Compression: none
2025-12-26T03:54:38.340 [DEBUG] [Thread-23930] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:54:38.357 [DEBUG] [Thread-23930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:54:38.357 [DEBUG] [Thread-23930] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:54:38.357 [DEBUG] [Thread-23930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:54:38.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:54:38.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:54:38.358 [DEBUG] [Thread-23930] [transport.py] [_log()] userauth is OK
2025-12-26T03:54:38.358 [DEBUG] [Thread-23930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:54:38.358 [DEBUG] [Thread-23930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:54:38.358 [DEBUG] [Thread-23930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:54:38.358 [DEBUG] [Thread-23930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:54:38.374 [INFO] [Thread-23930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:54:38.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:54:39.003 [DEBUG] [Thread-23930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:54:39.003 [DEBUG] [Thread-23930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:54:39.003 [DEBUG] [Thread-23930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:54:39.043 [DEBUG] [Thread-23930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:54:39.043 [DEBUG] [Thread-23930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:54:39.046 [DEBUG] [Thread-23930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:54:39.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:54:39.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:54:39.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:54:39.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:54:39.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:54:39.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:54:39.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.079223 -999.00  +11.80  13.31     88   +9.90 1 1 1 3 1     0    0 1.85 -1.17 ZNESW 13.3 13.3 160.6 19.5 12.4 -21.7 12.2 -21.5 12.0 -19.7 12.3 -20.9
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.079223
2025-12-26T03:54:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:54:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:54:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:54:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:54:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:54:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:54:15', tmtdew=2.21, humidity=85.81, cloud=0.0, wind=18.21, temperature=11.82, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:54:04.867', atlas_cloud=1, atlas_rain=1, zp_data=[0.441749999999999, 0.2657500000000006, 0.42825000000000024, 0.32750000000000057, 0.34450000000000003, 0.40325000000000166, 0.5424999999999995, 0.5512500000000005, 0.3149999999999995, 0.23600000000000065, 0.24024999999999963, 0.30799999999999983, 0.27800000000000047, 0.3252499999999987, 0.5079999999999991, 0.40199999999999925, 0.2607499999999998, 0.30049999999999955, 0.2724999999999991, 0.40224999999999866, 0.38149999999999906, 0.41524999999999856, 0.47275000000000045, 0.42074999999999996, 0.2889999999999997, 0.24150000000000027, 0.41075000000000017, 0.36050000000000004, 0.47000000000000064, 0.4480000000000013, 0.5085000000000024, 0.5570000000000004, 0.42274999999999885], zp_timestamp='2025-12-26T01:51:00')
2025-12-26T03:54:39.063 [DEBUG] [Thread-23930] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:54:39.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-26T03:54:39.147 [DEBUG] [Thread-23933] [transport.py] [_log()] starting thread (client mode): 0xb6b74b80
2025-12-26T03:54:39.147 [DEBUG] [Thread-23933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:54:39.161 [DEBUG] [Thread-23933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:54:39.161 [INFO] [Thread-23933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:54:39.168 [DEBUG] [Thread-23933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:54:39.168 [DEBUG] [Thread-23933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] client lang: <none>
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] server lang: <none>
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] kex follows: False
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] Compression: none
2025-12-26T03:54:39.169 [DEBUG] [Thread-23933] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:54:39.225 [DEBUG] [Thread-23933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:54:39.225 [DEBUG] [Thread-23933] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:54:39.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:54:39.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:54:39.225 [DEBUG] [Thread-23933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:54:39.286 [DEBUG] [Thread-23933] [transport.py] [_log()] userauth is OK
2025-12-26T03:54:39.286 [DEBUG] [Thread-23933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:54:39.286 [DEBUG] [Thread-23933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:54:39.286 [DEBUG] [Thread-23933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:54:39.286 [DEBUG] [Thread-23933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:54:39.300 [INFO] [Thread-23933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:54:39.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-26T03:54:39.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:54:40.118 [DEBUG] [Thread-23933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:54:40.118 [DEBUG] [Thread-23933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:54:40.170 [DEBUG] [Thread-23933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:54:40.170 [DEBUG] [Thread-23933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:54:40.178 [DEBUG] [Thread-23933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:54:40.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:54:40.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-26T03:54:40.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-26T03:54:40.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:54:40.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:54:40.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:54:40.212 [DEBUG] [Thread-23933] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:54:49.186 [DEBUG] [Thread-23935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:54:53.370 [DEBUG] [Thread-23936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:04.227 [DEBUG] [Thread-23937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:05.501 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:05.501 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:55:10.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:55:10.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-26T03:55:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 54, 47), 2.25, 86.36, 0.0, 19.0, 11.81, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:55:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:54:47
2025-12-26T03:55:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:55:11.190 [DEBUG] [Thread-23938] [transport.py] [_log()] starting thread (client mode): 0xb6b74dc0
2025-12-26T03:55:11.191 [DEBUG] [Thread-23938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:55:11.206 [DEBUG] [Thread-23938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:55:11.206 [INFO] [Thread-23938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] client lang: <none>
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] server lang: <none>
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] kex follows: False
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] Compression: none
2025-12-26T03:55:11.209 [DEBUG] [Thread-23938] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:55:11.225 [DEBUG] [Thread-23938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:55:11.225 [DEBUG] [Thread-23938] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:55:11.226 [DEBUG] [Thread-23938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:55:11.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:55:11.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:55:11.228 [DEBUG] [Thread-23938] [transport.py] [_log()] userauth is OK
2025-12-26T03:55:11.228 [DEBUG] [Thread-23938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:55:11.228 [DEBUG] [Thread-23938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:55:11.228 [DEBUG] [Thread-23938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:55:11.228 [DEBUG] [Thread-23938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:55:11.253 [INFO] [Thread-23938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:55:11.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:55:12.586 [DEBUG] [Thread-23938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:55:12.587 [DEBUG] [Thread-23938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:55:12.587 [DEBUG] [Thread-23938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:55:12.628 [DEBUG] [Thread-23938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:55:12.628 [DEBUG] [Thread-23938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:55:12.632 [DEBUG] [Thread-23938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:55:12.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:55:12.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:55:12.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:55:12.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:55:13.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:55:13.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:55:13.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.079223 -999.00  +11.80  13.31     88   +9.90 1 1 1 3 1     0    0 1.85 -1.17 ZNESW 13.3 13.3 160.6 19.5 12.4 -21.7 12.2 -21.5 12.0 -19.7 12.3 -20.9
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.079223
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:55:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:54:47', tmtdew=2.25, humidity=86.36, cloud=0.0, wind=19.0, temperature=11.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:54:04.867', atlas_cloud=1, atlas_rain=1, zp_data=[0.441749999999999, 0.2657500000000006, 0.42825000000000024, 0.32750000000000057, 0.34450000000000003, 0.40325000000000166, 0.5424999999999995, 0.5512500000000005, 0.3149999999999995, 0.23600000000000065, 0.24024999999999963, 0.30799999999999983, 0.27800000000000047, 0.3252499999999987, 0.5079999999999991, 0.40199999999999925, 0.2607499999999998, 0.30049999999999955, 0.2724999999999991, 0.40224999999999866, 0.38149999999999906, 0.41524999999999856, 0.47275000000000045, 0.42074999999999996, 0.2889999999999997, 0.24150000000000027, 0.41075000000000017, 0.36050000000000004, 0.47000000000000064, 0.4480000000000013, 0.5085000000000024, 0.5570000000000004, 0.42274999999999885], zp_timestamp='2025-12-26T01:51:00')
2025-12-26T03:55:13.041 [DEBUG] [Thread-23938] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:55:13.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-26T03:55:13.119 [DEBUG] [Thread-23941] [transport.py] [_log()] starting thread (client mode): 0xb6b74490
2025-12-26T03:55:13.119 [DEBUG] [Thread-23941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:55:13.133 [DEBUG] [Thread-23941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:55:13.133 [INFO] [Thread-23941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:55:13.141 [DEBUG] [Thread-23941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:55:13.141 [DEBUG] [Thread-23941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:55:13.141 [DEBUG] [Thread-23941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:55:13.141 [DEBUG] [Thread-23941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] client lang: <none>
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] server lang: <none>
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] kex follows: False
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:55:13.142 [DEBUG] [Thread-23941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:55:13.143 [DEBUG] [Thread-23941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:55:13.143 [DEBUG] [Thread-23941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:55:13.143 [DEBUG] [Thread-23941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:55:13.143 [DEBUG] [Thread-23941] [transport.py] [_log()] Compression: none
2025-12-26T03:55:13.143 [DEBUG] [Thread-23941] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:55:13.199 [DEBUG] [Thread-23941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:55:13.200 [DEBUG] [Thread-23941] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:55:13.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:55:13.201 [DEBUG] [Thread-23941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:55:13.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:55:13.255 [DEBUG] [Thread-23941] [transport.py] [_log()] userauth is OK
2025-12-26T03:55:13.255 [DEBUG] [Thread-23941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:55:13.255 [DEBUG] [Thread-23941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:55:13.256 [DEBUG] [Thread-23941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:55:13.256 [DEBUG] [Thread-23941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:55:13.275 [INFO] [Thread-23941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:55:13.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-26T03:55:13.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:55:14.077 [DEBUG] [Thread-23941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:55:14.077 [DEBUG] [Thread-23941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:55:14.128 [DEBUG] [Thread-23941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:55:14.129 [DEBUG] [Thread-23941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:55:14.139 [DEBUG] [Thread-23941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:55:14.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:55:14.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-26T03:55:14.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-26T03:55:14.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:55:14.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:55:14.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:55:14.182 [DEBUG] [Thread-23941] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:55:19.263 [DEBUG] [Thread-23943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:34.303 [DEBUG] [Thread-23944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:44.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:55:44.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:55: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-26T03:55:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 55, 19), 2.25, 86.36, 0.0, 18.24, 11.81, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:55:44.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:55:19
2025-12-26T03:55:45.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:55:45.186 [DEBUG] [Thread-23945] [transport.py] [_log()] starting thread (client mode): 0xb6b15630
2025-12-26T03:55:45.186 [DEBUG] [Thread-23945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:55:45.206 [DEBUG] [Thread-23945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:55:45.206 [INFO] [Thread-23945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:55:45.209 [DEBUG] [Thread-23945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:55:45.209 [DEBUG] [Thread-23945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] client lang: <none>
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] server lang: <none>
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] kex follows: False
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] Compression: none
2025-12-26T03:55:45.210 [DEBUG] [Thread-23945] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:55:45.226 [DEBUG] [Thread-23945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:55:45.227 [DEBUG] [Thread-23945] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:55:45.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:55:45.228 [DEBUG] [Thread-23945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:55:45.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:55:45.230 [DEBUG] [Thread-23945] [transport.py] [_log()] userauth is OK
2025-12-26T03:55:45.230 [DEBUG] [Thread-23945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:55:45.230 [DEBUG] [Thread-23945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:55:45.230 [DEBUG] [Thread-23945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:55:45.231 [DEBUG] [Thread-23945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:55:45.254 [INFO] [Thread-23945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:55:45.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:55:45.885 [DEBUG] [Thread-23945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:55:45.885 [DEBUG] [Thread-23945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:55:45.886 [DEBUG] [Thread-23945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:55:45.926 [DEBUG] [Thread-23945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:55:45.926 [DEBUG] [Thread-23945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:55:45.929 [DEBUG] [Thread-23945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:55:45.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:55:45.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:55:45.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:55:45.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:55:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:55:45.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:55:45.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:55:45.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:55:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:55:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.079571 -999.00  +11.80  16.33     88   +9.90 1 1 1 3 1     0    0 1.88 -0.05 ZNESW 16.3 16.3 164.2 24.2 12.3 -21.6 12.2 -21.4 12.0 -19.7 12.3 -20.8
2025-12-26T03:55:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:55:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:55:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.079571
2025-12-26T03:55:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:55:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:55:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:55:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:55:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:55:45.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:55:19', tmtdew=2.25, humidity=86.36, cloud=0.0, wind=18.24, temperature=11.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:54:34.934', atlas_cloud=1, atlas_rain=1, zp_data=[0.441749999999999, 0.2657500000000006, 0.42825000000000024, 0.32750000000000057, 0.34450000000000003, 0.40325000000000166, 0.5424999999999995, 0.5512500000000005, 0.3149999999999995, 0.23600000000000065, 0.24024999999999963, 0.30799999999999983, 0.27800000000000047, 0.3252499999999987, 0.5079999999999991, 0.40199999999999925, 0.2607499999999998, 0.30049999999999955, 0.2724999999999991, 0.40224999999999866, 0.38149999999999906, 0.41524999999999856, 0.47275000000000045, 0.42074999999999996, 0.2889999999999997, 0.24150000000000027, 0.41075000000000017, 0.36050000000000004, 0.47000000000000064, 0.4480000000000013, 0.5085000000000024, 0.5570000000000004, 0.42274999999999885], zp_timestamp='2025-12-26T01:51:00')
2025-12-26T03:55:45.957 [DEBUG] [Thread-23945] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:55:46.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-26T03:55:46.050 [DEBUG] [Thread-23948] [transport.py] [_log()] starting thread (client mode): 0xbbfce3e0
2025-12-26T03:55:46.050 [DEBUG] [Thread-23948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:55:46.064 [DEBUG] [Thread-23948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:55:46.065 [INFO] [Thread-23948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:55:46.072 [DEBUG] [Thread-23948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:55:46.072 [DEBUG] [Thread-23948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:55:46.072 [DEBUG] [Thread-23948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:55:46.072 [DEBUG] [Thread-23948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:46.072 [DEBUG] [Thread-23948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] client lang: <none>
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] server lang: <none>
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] kex follows: False
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] Compression: none
2025-12-26T03:55:46.073 [DEBUG] [Thread-23948] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:55:46.136 [DEBUG] [Thread-23948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:55:46.136 [DEBUG] [Thread-23948] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:55:46.137 [DEBUG] [Thread-23948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:55:46.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:55:46.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:55:46.194 [DEBUG] [Thread-23948] [transport.py] [_log()] userauth is OK
2025-12-26T03:55:46.194 [DEBUG] [Thread-23948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:55:46.194 [DEBUG] [Thread-23948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:55:46.194 [DEBUG] [Thread-23948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:55:46.194 [DEBUG] [Thread-23948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:55:46.213 [INFO] [Thread-23948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:55:46.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-26T03:55:46.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:55:47.036 [DEBUG] [Thread-23948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:55:47.036 [DEBUG] [Thread-23948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:55:47.084 [DEBUG] [Thread-23948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:55:47.084 [DEBUG] [Thread-23948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:55:47.093 [DEBUG] [Thread-23948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:55:47.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:55:47.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-26T03:55:47.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-26T03:55:47.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:55:47.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:55:47.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:55:47.130 [DEBUG] [Thread-23948] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:55:49.335 [DEBUG] [Thread-23950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:55:53.443 [DEBUG] [Thread-23951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:04.380 [DEBUG] [Thread-23952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:05.702 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:05.703 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:17.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:56:17.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:56:17.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-26T03:56:17.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 55, 51), 2.15, 86.4, 0.0, 22.0, 11.79, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:56:17.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:55:51
2025-12-26T03:56:17.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:56:18.108 [DEBUG] [Thread-23953] [transport.py] [_log()] starting thread (client mode): 0xbbfcd330
2025-12-26T03:56:18.108 [DEBUG] [Thread-23953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:56:18.128 [DEBUG] [Thread-23953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:56:18.128 [INFO] [Thread-23953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:56:18.131 [DEBUG] [Thread-23953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] client lang: <none>
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] server lang: <none>
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] kex follows: False
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] Compression: none
2025-12-26T03:56:18.132 [DEBUG] [Thread-23953] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:56:18.149 [DEBUG] [Thread-23953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:56:18.149 [DEBUG] [Thread-23953] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:56:18.150 [DEBUG] [Thread-23953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:56:18.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:56:18.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:56:18.152 [DEBUG] [Thread-23953] [transport.py] [_log()] userauth is OK
2025-12-26T03:56:18.152 [DEBUG] [Thread-23953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:56:18.152 [DEBUG] [Thread-23953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:56:18.152 [DEBUG] [Thread-23953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:56:18.152 [DEBUG] [Thread-23953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:56:18.174 [INFO] [Thread-23953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:56:18.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:56:18.978 [DEBUG] [Thread-23953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:56:18.978 [DEBUG] [Thread-23953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:56:18.979 [DEBUG] [Thread-23953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:56:19.019 [DEBUG] [Thread-23953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:56:19.019 [DEBUG] [Thread-23953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:56:19.023 [DEBUG] [Thread-23953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:56:19.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:56:19.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:56:19.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:56:19.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:56:19.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:56:19.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:56:19.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:56:19.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:56:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:56:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.080265 -999.00  +11.80  14.03     88   +9.90 1 1 1 3 1     0    0 1.93 1.37 ZNESW 14.0 14.0 166.4 19.5 12.3 -21.9 12.2 -21.5 12.0 -19.8 12.2 -20.8
2025-12-26T03:56:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:56:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:56:19.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.080265
2025-12-26T03:56:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:56:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:56:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:56:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:56:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:56:19.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:55:51', tmtdew=2.15, humidity=86.4, cloud=0.0, wind=22.0, temperature=11.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:55:34.896', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:55:00')
2025-12-26T03:56:19.052 [DEBUG] [Thread-23953] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:56:19.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-26T03:56:19.146 [DEBUG] [Thread-23956] [transport.py] [_log()] starting thread (client mode): 0xb6b761d0
2025-12-26T03:56:19.146 [DEBUG] [Thread-23956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:56:19.161 [DEBUG] [Thread-23956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:56:19.161 [INFO] [Thread-23956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:56:19.168 [DEBUG] [Thread-23956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] client lang: <none>
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] server lang: <none>
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] kex follows: False
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:56:19.169 [DEBUG] [Thread-23956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:56:19.170 [DEBUG] [Thread-23956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:56:19.170 [DEBUG] [Thread-23956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:56:19.170 [DEBUG] [Thread-23956] [transport.py] [_log()] Compression: none
2025-12-26T03:56:19.170 [DEBUG] [Thread-23956] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:56:19.232 [DEBUG] [Thread-23956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:56:19.232 [DEBUG] [Thread-23956] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:56:19.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:56:19.234 [DEBUG] [Thread-23956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:56:19.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:56:19.289 [DEBUG] [Thread-23956] [transport.py] [_log()] userauth is OK
2025-12-26T03:56:19.289 [DEBUG] [Thread-23956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:56:19.289 [DEBUG] [Thread-23956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:56:19.289 [DEBUG] [Thread-23956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:56:19.289 [DEBUG] [Thread-23956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:56:19.308 [INFO] [Thread-23956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:56: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-26T03:56:19.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:56:19.418 [DEBUG] [Thread-23958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:20.080 [DEBUG] [Thread-23956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:56:20.080 [DEBUG] [Thread-23956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:56:20.128 [DEBUG] [Thread-23956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:56:20.128 [DEBUG] [Thread-23956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:56:20.137 [DEBUG] [Thread-23956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:56:20.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:56:20.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:56:20.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:56:20.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:56:20.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:56:20.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:56:20.177 [DEBUG] [Thread-23956] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:56:34.477 [DEBUG] [Thread-23959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:49.507 [DEBUG] [Thread-23960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:56:50.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:56:50.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:56:50.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-26T03:56:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 56, 23), 2.14, 86.41, 0.0, 23.01, 11.76, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:56:50.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:56:23
2025-12-26T03:56:51.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:56:51.151 [DEBUG] [Thread-23961] [transport.py] [_log()] starting thread (client mode): 0xbbfcec50
2025-12-26T03:56:51.151 [DEBUG] [Thread-23961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:56:51.171 [DEBUG] [Thread-23961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:56:51.172 [INFO] [Thread-23961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:56:51.172 [DEBUG] [Thread-23961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] client lang: <none>
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] server lang: <none>
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] kex follows: False
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] Compression: none
2025-12-26T03:56:51.173 [DEBUG] [Thread-23961] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:56:51.181 [DEBUG] [Thread-23961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:56:51.181 [DEBUG] [Thread-23961] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:56:51.181 [DEBUG] [Thread-23961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:56:51.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:56:51.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:56:51.183 [DEBUG] [Thread-23961] [transport.py] [_log()] userauth is OK
2025-12-26T03:56:51.183 [DEBUG] [Thread-23961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:56:51.183 [DEBUG] [Thread-23961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:56:51.183 [DEBUG] [Thread-23961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:56:51.184 [DEBUG] [Thread-23961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:56:51.207 [INFO] [Thread-23961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:56:51.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:56:51.827 [DEBUG] [Thread-23961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:56:51.827 [DEBUG] [Thread-23961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:56:51.828 [DEBUG] [Thread-23961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:56:51.868 [DEBUG] [Thread-23961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:56:51.868 [DEBUG] [Thread-23961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:56:51.872 [DEBUG] [Thread-23961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:56:51.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:56:51.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:56:51.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:56:51.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:56:51.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:56:51.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:56:51.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:56:51.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:56:51.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:56:51.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.080612 -999.00  +11.80  11.87     88   +9.90 1 1 1 3 1     0    0 1.95 2.15 ZNESW 11.9 11.9 165.0 15.6 12.3 -21.9 12.2 -21.6 12.0 -19.8 12.3 -20.9
2025-12-26T03:56:51.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:56:51.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:56:51.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.080612
2025-12-26T03:56:51.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:56:51.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:56:51.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:56:51.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:56:51.900 [DEBUG] [Thread-23961] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:56:51.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:56:51.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:56:23', tmtdew=2.14, humidity=86.41, cloud=0.0, wind=23.01, temperature=11.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:56:04.877', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:55:00')
2025-12-26T03:56:51.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:56:51.993 [DEBUG] [Thread-23964] [transport.py] [_log()] starting thread (client mode): 0xb6b23310
2025-12-26T03:56:51.993 [DEBUG] [Thread-23964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:56:52.008 [DEBUG] [Thread-23964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:56:52.008 [INFO] [Thread-23964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] client lang: <none>
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] server lang: <none>
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] kex follows: False
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:56:52.016 [DEBUG] [Thread-23964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:56:52.017 [DEBUG] [Thread-23964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:56:52.017 [DEBUG] [Thread-23964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:56:52.017 [DEBUG] [Thread-23964] [transport.py] [_log()] Compression: none
2025-12-26T03:56:52.017 [DEBUG] [Thread-23964] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:56:52.073 [DEBUG] [Thread-23964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:56:52.074 [DEBUG] [Thread-23964] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:56:52.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:56:52.075 [DEBUG] [Thread-23964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:56:52.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:56:52.129 [DEBUG] [Thread-23964] [transport.py] [_log()] userauth is OK
2025-12-26T03:56:52.130 [DEBUG] [Thread-23964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:56:52.130 [DEBUG] [Thread-23964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:56:52.130 [DEBUG] [Thread-23964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:56:52.130 [DEBUG] [Thread-23964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:56:52.149 [INFO] [Thread-23964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:56:52.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-26T03:56:52.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:56:52.953 [DEBUG] [Thread-23964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:56:52.953 [DEBUG] [Thread-23964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:56:53.000 [DEBUG] [Thread-23964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:56:53.001 [DEBUG] [Thread-23964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:56:53.010 [DEBUG] [Thread-23964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:56:53.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:56:53.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-26T03:56:53.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-26T03:56:53.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:56:53.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:56:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:56:53.047 [DEBUG] [Thread-23964] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:56:53.517 [DEBUG] [Thread-23966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:04.543 [DEBUG] [Thread-23967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:05.903 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:05.904 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:19.594 [DEBUG] [Thread-23968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:23.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:57:23.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:57:23.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-26T03:57:23.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 56, 55), 2.17, 86.54, 0.0, 16.48, 11.76, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:57:23.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:56:55
2025-12-26T03:57:23.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:57:24.056 [DEBUG] [Thread-23969] [transport.py] [_log()] starting thread (client mode): 0xb6b75cf0
2025-12-26T03:57:24.057 [DEBUG] [Thread-23969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:57:24.076 [DEBUG] [Thread-23969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:57:24.077 [INFO] [Thread-23969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:57:24.079 [DEBUG] [Thread-23969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] client lang: <none>
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] server lang: <none>
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] kex follows: False
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] Compression: none
2025-12-26T03:57:24.080 [DEBUG] [Thread-23969] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:57:24.098 [DEBUG] [Thread-23969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:57:24.098 [DEBUG] [Thread-23969] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:57:24.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:57:24.099 [DEBUG] [Thread-23969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:57:24.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:57:24.102 [DEBUG] [Thread-23969] [transport.py] [_log()] userauth is OK
2025-12-26T03:57:24.102 [DEBUG] [Thread-23969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:57:24.102 [DEBUG] [Thread-23969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:57:24.102 [DEBUG] [Thread-23969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:57:24.102 [DEBUG] [Thread-23969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:57:24.128 [INFO] [Thread-23969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:57:24.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:57:24.910 [DEBUG] [Thread-23969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:57:24.911 [DEBUG] [Thread-23969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:57:24.911 [DEBUG] [Thread-23969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:57:24.952 [DEBUG] [Thread-23969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:57:24.952 [DEBUG] [Thread-23969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:57:24.954 [DEBUG] [Thread-23969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:57:24.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:57:24.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:57:24.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:57:24.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:57:24.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:57:24.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:57:24.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.080959 -999.00  +11.70   9.53     88   +9.90 1 1 1 3 1     0    0 1.96 2.34 ZNESW 9.5 9.5 158.0 14.8 12.3 -21.9 12.2 -21.5 12.0 -19.7 12.3 -20.8
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.080959
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:57:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:57:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:57:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:57:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:57:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:56:55', tmtdew=2.17, humidity=86.54, cloud=0.0, wind=16.48, temperature=11.76, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:56:34.858', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:55:00')
2025-12-26T03:57:24.978 [DEBUG] [Thread-23969] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:57:25.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-26T03:57:25.071 [DEBUG] [Thread-23972] [transport.py] [_log()] starting thread (client mode): 0xb6b15ed0
2025-12-26T03:57:25.071 [DEBUG] [Thread-23972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:57:25.085 [DEBUG] [Thread-23972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:57:25.085 [INFO] [Thread-23972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:25.093 [DEBUG] [Thread-23972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] client lang: <none>
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] server lang: <none>
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] kex follows: False
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:57:25.094 [DEBUG] [Thread-23972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:57:25.095 [DEBUG] [Thread-23972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:57:25.095 [DEBUG] [Thread-23972] [transport.py] [_log()] Compression: none
2025-12-26T03:57:25.095 [DEBUG] [Thread-23972] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:57:25.149 [DEBUG] [Thread-23972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:57:25.150 [DEBUG] [Thread-23972] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:57:25.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:57:25.151 [DEBUG] [Thread-23972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:57:25.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:57:25.205 [DEBUG] [Thread-23972] [transport.py] [_log()] userauth is OK
2025-12-26T03:57:25.206 [DEBUG] [Thread-23972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:57:25.206 [DEBUG] [Thread-23972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:57:25.206 [DEBUG] [Thread-23972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:57:25.206 [DEBUG] [Thread-23972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:57:25.230 [INFO] [Thread-23972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:57:25.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-26T03:57:25.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:57:26.023 [DEBUG] [Thread-23972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:57:26.023 [DEBUG] [Thread-23972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:57:26.071 [DEBUG] [Thread-23972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:57:26.071 [DEBUG] [Thread-23972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:57:26.080 [DEBUG] [Thread-23972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:57:26.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:57:26.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-26T03:57:26.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-26T03:57:26.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:57:26.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:57:26.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:57:26.117 [DEBUG] [Thread-23972] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:57:34.629 [DEBUG] [Thread-23974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:49.677 [DEBUG] [Thread-23975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:53.569 [DEBUG] [Thread-23976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:57:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:57:56.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:57:56.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-26T03:57:56.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 57, 27), 2.16, 86.59, 0.0, 17.4, 11.81, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:57:56.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:57:27
2025-12-26T03:57:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:57:57.178 [DEBUG] [Thread-23977] [transport.py] [_log()] starting thread (client mode): 0xb6b22ad0
2025-12-26T03:57:57.178 [DEBUG] [Thread-23977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:57:57.198 [DEBUG] [Thread-23977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:57:57.199 [INFO] [Thread-23977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] client lang: <none>
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] server lang: <none>
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] kex follows: False
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] Compression: none
2025-12-26T03:57:57.202 [DEBUG] [Thread-23977] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:57:57.220 [DEBUG] [Thread-23977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:57:57.220 [DEBUG] [Thread-23977] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:57:57.220 [DEBUG] [Thread-23977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:57:57.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:57:57.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:57:57.221 [DEBUG] [Thread-23977] [transport.py] [_log()] userauth is OK
2025-12-26T03:57:57.221 [DEBUG] [Thread-23977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:57:57.221 [DEBUG] [Thread-23977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:57:57.221 [DEBUG] [Thread-23977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:57:57.222 [DEBUG] [Thread-23977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:57:57.231 [INFO] [Thread-23977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:57:57.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:57:57.874 [DEBUG] [Thread-23977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:57:57.874 [DEBUG] [Thread-23977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:57:57.875 [DEBUG] [Thread-23977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:57:57.915 [DEBUG] [Thread-23977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:57:57.915 [DEBUG] [Thread-23977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:57:57.918 [DEBUG] [Thread-23977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:57:57.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:57:57.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:57:57.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:57:57.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:57:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:57:57.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:57:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:57:57.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:57:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:57:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.081307 -999.00  +11.70  12.28     88   +9.90 1 1 1 3 1     0    0 1.94 2.20 ZNESW 12.3 12.3 167.2 15.2 12.3 -22.0 12.2 -21.6 11.9 -19.8 12.3 -21.0
2025-12-26T03:57:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:57:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:57:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.081307
2025-12-26T03:57:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:57:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:57:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:57:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:57:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:57:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:57:27', tmtdew=2.16, humidity=86.59, cloud=0.0, wind=17.4, temperature=11.81, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:57:04.925', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:55:00')
2025-12-26T03:57:57.946 [DEBUG] [Thread-23977] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:57:58.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-26T03:57:58.043 [DEBUG] [Thread-23980] [transport.py] [_log()] starting thread (client mode): 0xb6b75360
2025-12-26T03:57:58.043 [DEBUG] [Thread-23980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:57:58.057 [DEBUG] [Thread-23980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:57:58.057 [INFO] [Thread-23980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:57:58.064 [DEBUG] [Thread-23980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:57:58.064 [DEBUG] [Thread-23980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:57:58.064 [DEBUG] [Thread-23980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:57:58.064 [DEBUG] [Thread-23980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:58.064 [DEBUG] [Thread-23980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] client lang: <none>
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] server lang: <none>
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] kex follows: False
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] Compression: none
2025-12-26T03:57:58.065 [DEBUG] [Thread-23980] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:57:58.122 [DEBUG] [Thread-23980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:57:58.122 [DEBUG] [Thread-23980] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:57:58.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:57:58.123 [DEBUG] [Thread-23980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:57:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:57:58.179 [DEBUG] [Thread-23980] [transport.py] [_log()] userauth is OK
2025-12-26T03:57:58.179 [DEBUG] [Thread-23980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:57:58.180 [DEBUG] [Thread-23980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:57:58.180 [DEBUG] [Thread-23980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:57:58.180 [DEBUG] [Thread-23980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:57:58.199 [INFO] [Thread-23980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:57:58.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-26T03:57:58.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:57:59.026 [DEBUG] [Thread-23980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:57:59.027 [DEBUG] [Thread-23980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:57:59.075 [DEBUG] [Thread-23980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:57:59.075 [DEBUG] [Thread-23980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:57:59.084 [DEBUG] [Thread-23980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:57:59.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:57:59.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:57:59.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-26T03:57:59.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:57:59.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:57:59.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:57:59.122 [DEBUG] [Thread-23980] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:58:04.709 [DEBUG] [Thread-23982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:58:06.103 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:58:06.104 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:58:19.764 [DEBUG] [Thread-23983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:58:29.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:58:29.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:58:29.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-26T03:58:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 57, 59), 2.16, 86.61, 0.0, 18.53, 11.84, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:58:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:57:59
2025-12-26T03:58:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:58:30.123 [DEBUG] [Thread-23984] [transport.py] [_log()] starting thread (client mode): 0xb9544340
2025-12-26T03:58:30.123 [DEBUG] [Thread-23984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:58:30.144 [DEBUG] [Thread-23984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:58:30.144 [INFO] [Thread-23984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] client lang: <none>
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] server lang: <none>
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] kex follows: False
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:58:30.147 [DEBUG] [Thread-23984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:58:30.148 [DEBUG] [Thread-23984] [transport.py] [_log()] Compression: none
2025-12-26T03:58:30.148 [DEBUG] [Thread-23984] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:58:30.165 [DEBUG] [Thread-23984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:58:30.165 [DEBUG] [Thread-23984] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:58:30.166 [DEBUG] [Thread-23984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:58:30.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:58:30.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:58:30.209 [DEBUG] [Thread-23984] [transport.py] [_log()] userauth is OK
2025-12-26T03:58:30.209 [DEBUG] [Thread-23984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:58:30.209 [DEBUG] [Thread-23984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:58:30.209 [DEBUG] [Thread-23984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:58:30.209 [DEBUG] [Thread-23984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:58:30.232 [INFO] [Thread-23984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:58:30.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:58:31.025 [DEBUG] [Thread-23984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:58:31.025 [DEBUG] [Thread-23984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:58:31.025 [DEBUG] [Thread-23984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:58:31.066 [DEBUG] [Thread-23984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:58:31.066 [DEBUG] [Thread-23984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:58:31.068 [DEBUG] [Thread-23984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:58:31.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:58:31.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:58:31.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:58:31.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:58:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:58:31.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:58:31.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.081654 -999.00  +11.70  10.94     88   +9.90 1 1 1 3 1     0    0 1.95 2.22 ZNESW 10.9 10.9 160.0 17.8 12.3 -21.9 12.2 -21.6 12.0 -19.8 12.3 -20.9
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.081654
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:58:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:57:59', tmtdew=2.16, humidity=86.61, cloud=0.0, wind=18.53, temperature=11.84, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:57:34.906', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:55:00')
2025-12-26T03:58:31.087 [DEBUG] [Thread-23984] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:58:31.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-26T03:58:31.171 [DEBUG] [Thread-23987] [transport.py] [_log()] starting thread (client mode): 0xb95924a0
2025-12-26T03:58:31.171 [DEBUG] [Thread-23987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:58:31.185 [DEBUG] [Thread-23987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:58:31.185 [INFO] [Thread-23987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] client lang: <none>
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] server lang: <none>
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] kex follows: False
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] Compression: none
2025-12-26T03:58:31.193 [DEBUG] [Thread-23987] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:58:31.254 [DEBUG] [Thread-23987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:58:31.254 [DEBUG] [Thread-23987] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:58:31.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:58:31.254 [DEBUG] [Thread-23987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:58:31.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:58:31.310 [DEBUG] [Thread-23987] [transport.py] [_log()] userauth is OK
2025-12-26T03:58:31.310 [DEBUG] [Thread-23987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:58:31.310 [DEBUG] [Thread-23987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:58:31.310 [DEBUG] [Thread-23987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:58:31.310 [DEBUG] [Thread-23987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:58:31.328 [INFO] [Thread-23987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:58:31.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-26T03:58:31.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:58:32.174 [DEBUG] [Thread-23987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:58:32.174 [DEBUG] [Thread-23987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:58:32.221 [DEBUG] [Thread-23987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:58:32.221 [DEBUG] [Thread-23987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:58:32.230 [DEBUG] [Thread-23987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:58:32.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:58:32.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-26T03:58:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-26T03:58:32.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:58:32.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:58:32.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:58:32.261 [DEBUG] [Thread-23987] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:58:34.795 [DEBUG] [Thread-23989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:58:49.835 [DEBUG] [Thread-23990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:58:53.638 [DEBUG] [Thread-23991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:59:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:59:02.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:59:02.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-26T03:59:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 58, 31), 2.16, 86.63, 0.0, 19.3, 11.79, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:59:02.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:58:31
2025-12-26T03:59:03.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:59:03.235 [DEBUG] [Thread-23992] [transport.py] [_log()] starting thread (client mode): 0xb9544f10
2025-12-26T03:59:03.235 [DEBUG] [Thread-23992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:59:03.254 [DEBUG] [Thread-23992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:59:03.254 [INFO] [Thread-23992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] client lang: <none>
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] server lang: <none>
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] kex follows: False
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] Compression: none
2025-12-26T03:59:03.258 [DEBUG] [Thread-23992] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:59:03.274 [DEBUG] [Thread-23992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:59:03.275 [DEBUG] [Thread-23992] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:59:03.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:59:03.276 [DEBUG] [Thread-23992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:59:03.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:59:03.278 [DEBUG] [Thread-23992] [transport.py] [_log()] userauth is OK
2025-12-26T03:59:03.278 [DEBUG] [Thread-23992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:59:03.278 [DEBUG] [Thread-23992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:59:03.278 [DEBUG] [Thread-23992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:59:03.278 [DEBUG] [Thread-23992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:59:03.310 [INFO] [Thread-23992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:59:03.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:59:03.990 [DEBUG] [Thread-23992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:59:03.990 [DEBUG] [Thread-23992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:59:03.991 [DEBUG] [Thread-23992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:59:04.031 [DEBUG] [Thread-23992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:59:04.031 [DEBUG] [Thread-23992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:59:04.034 [DEBUG] [Thread-23992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:59:04.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:59:04.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:59:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:59:04.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:59:04.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:59:04.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:59:04.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:59:04.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:59:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:59:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.082348 -999.00  +11.70  12.90     88   +9.90 1 1 1 3 1     0    0 1.91 1.85 ZNESW 12.9 12.9 156.8 18.0 12.3 -21.9 12.2 -21.6 12.0 -19.8 12.3 -20.8
2025-12-26T03:59:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:59:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:59:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.082348
2025-12-26T03:59:04.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:59:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:59:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:59:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:59:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:59:04.057 [DEBUG] [Thread-23992] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:59:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:58:31', tmtdew=2.16, humidity=86.63, cloud=0.0, wind=19.3, temperature=11.79, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:58:34.867', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:55:00')
2025-12-26T03:59: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-26T03:59:04.151 [DEBUG] [Thread-23995] [transport.py] [_log()] starting thread (client mode): 0xb9546c20
2025-12-26T03:59:04.152 [DEBUG] [Thread-23995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:59:04.166 [DEBUG] [Thread-23995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:59:04.166 [INFO] [Thread-23995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:59:04.173 [DEBUG] [Thread-23995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] client lang: <none>
2025-12-26T03:59:04.174 [DEBUG] [Thread-23995] [transport.py] [_log()] server lang: <none>
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] kex follows: False
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] Compression: none
2025-12-26T03:59:04.175 [DEBUG] [Thread-23995] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:59:04.233 [DEBUG] [Thread-23995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:59:04.233 [DEBUG] [Thread-23995] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:59:04.233 [DEBUG] [Thread-23995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:59:04.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:59:04.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:59:04.291 [DEBUG] [Thread-23995] [transport.py] [_log()] userauth is OK
2025-12-26T03:59:04.291 [DEBUG] [Thread-23995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:59:04.291 [DEBUG] [Thread-23995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:59:04.291 [DEBUG] [Thread-23995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-26T03:59:04.291 [DEBUG] [Thread-23995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:59:04.306 [INFO] [Thread-23995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:59:04.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-26T03:59:04.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:59:04.870 [DEBUG] [Thread-23997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:59:05.115 [DEBUG] [Thread-23995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:59:05.115 [DEBUG] [Thread-23995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:59:05.163 [DEBUG] [Thread-23995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:59:05.163 [DEBUG] [Thread-23995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:59:05.172 [DEBUG] [Thread-23995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:59:05.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:59:05.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-26T03:59:05.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-26T03:59:05.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:59:05.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:59:05.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:59:05.202 [DEBUG] [Thread-23995] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:59:06.305 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:59:06.307 [DEBUG] [Thread-170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:59:19.907 [DEBUG] [Thread-23998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:59:34.943 [DEBUG] [Thread-23999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-26T03:59:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-26T03:59:35.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-26T03:59:35.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-26T03:59:35.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 26, 3, 59, 3), 2.16, 86.61, 0.0, 17.95, 11.77, 1, 1, 0, 2, 0, 0),)
2025-12-26T03:59:35.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-26 03:59:03
2025-12-26T03:59:36.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-26T03:59:36.190 [DEBUG] [Thread-24000] [transport.py] [_log()] starting thread (client mode): 0xb9547d90
2025-12-26T03:59:36.190 [DEBUG] [Thread-24000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:59:36.210 [DEBUG] [Thread-24000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-26T03:59:36.211 [INFO] [Thread-24000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] client lang: <none>
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] server lang: <none>
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] kex follows: False
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:59:36.214 [DEBUG] [Thread-24000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:59:36.215 [DEBUG] [Thread-24000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:59:36.215 [DEBUG] [Thread-24000] [transport.py] [_log()] Compression: none
2025-12-26T03:59:36.215 [DEBUG] [Thread-24000] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:59:36.230 [DEBUG] [Thread-24000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:59:36.230 [DEBUG] [Thread-24000] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:59:36.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-26T03:59:36.231 [DEBUG] [Thread-24000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-26T03:59:36.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:59:36.233 [DEBUG] [Thread-24000] [transport.py] [_log()] userauth is OK
2025-12-26T03:59:36.233 [DEBUG] [Thread-24000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:59:36.233 [DEBUG] [Thread-24000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:59:36.233 [DEBUG] [Thread-24000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-26T03:59:36.233 [DEBUG] [Thread-24000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-26T03:59:36.249 [INFO] [Thread-24000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-26T03:59:36.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-26T03:59:37.079 [DEBUG] [Thread-24000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-26T03:59:37.079 [DEBUG] [Thread-24000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-26T03:59:37.079 [DEBUG] [Thread-24000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-26T03:59:37.120 [DEBUG] [Thread-24000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-26T03:59:37.120 [DEBUG] [Thread-24000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-26T03:59:37.123 [DEBUG] [Thread-24000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-26T03:59:37.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-26T03:59:37.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-26T03:59:37.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-26T03:59:37.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-26T03:59:37.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-26T03:59:37.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-26T03:59:37.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61035.082695 -999.00  +11.70  15.85     88   +9.90 1 1 1 3 1     0    0 1.92 1.70 ZNESW 15.8 15.8 170.2 21.3 12.3 -21.8 12.2 -21.5 11.9 -19.8 12.3 -20.8
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61035.082695
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-26T03:59:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-26T03:59:03', tmtdew=2.16, humidity=86.61, cloud=0.0, wind=17.95, temperature=11.77, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-26T00:40:07', seeing=1.18, atlas_timestamp='2025-12-26T01:59:04.848', atlas_cloud=1, atlas_rain=1, zp_data=[0.2707499999999996, 0.23375000000000057, 0.3622500000000013, 0.22749999999999915, 0.1739999999999995, 0.2587500000000009, 0.41000000000000014, 0.4432500000000008, 0.24599999999999866, 0.1899999999999995, 0.22325000000000017, 0.2469999999999999, 0.2289999999999992, 0.2842500000000001, 0.40249999999999986, 0.3490000000000002, 0.2182499999999994, 0.27449999999999974, 0.23399999999999999, 0.35724999999999874, 0.3099999999999987, 0.38124999999999787, 0.42225, 0.41275000000000084, 0.24899999999999878, 0.24900000000000055, 0.3782500000000013, 0.33450000000000024, 0.3689999999999998, 0.37700000000000067, 0.5165000000000006, 0.6100000000000012, 0.3467499999999992], zp_timestamp='2025-12-26T01:57:00')
2025-12-26T03:59:37.139 [DEBUG] [Thread-24000] [transport.py] [_log()] EOF in transport thread
2025-12-26T03:59:37.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-26T03:59:37.223 [DEBUG] [Thread-24003] [transport.py] [_log()] starting thread (client mode): 0xb9592320
2025-12-26T03:59:37.223 [DEBUG] [Thread-24003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-26T03:59:37.238 [DEBUG] [Thread-24003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-26T03:59:37.238 [INFO] [Thread-24003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-26T03:59:37.245 [DEBUG] [Thread-24003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] client lang: <none>
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] server lang: <none>
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] kex follows: False
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] Compression: none
2025-12-26T03:59:37.246 [DEBUG] [Thread-24003] [transport.py] [_log()] === End of kex handshake ===
2025-12-26T03:59:37.302 [DEBUG] [Thread-24003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-26T03:59:37.302 [DEBUG] [Thread-24003] [transport.py] [_log()] Switch to new keys ...
2025-12-26T03:59:37.302 [DEBUG] [Thread-24003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-26T03:59:37.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-26T03:59:37.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-26T03:59:37.359 [DEBUG] [Thread-24003] [transport.py] [_log()] userauth is OK
2025-12-26T03:59:37.359 [DEBUG] [Thread-24003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-26T03:59:37.359 [DEBUG] [Thread-24003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-26T03:
[file cut: first 33554432 bytes kept]
[document cut: first 32639850 of 33554432 characters kept]
